mirror of
https://github.com/PHIDIAS0303/ExpCluster.git
synced 2026-11-12 07:54:52 +09:00
Framework: - Intervals are gone. Update periods are hardcoded on_nth_tick values again, since nobody has needed to change them. - apply is a single loop over the declared fields and logs a warning when an override is invalid. receive_update also warns about unknown keys. - Nested tables are addressed as "section.key". Lists of strings can be overridden. Features.optional declares a value with no default. - Features.on_apply rebuilds values derived from the config, such as lookup sets. It also runs during on_load. exp_roles is assumed to be present: - AFK Kick picks a role (active_role_id) instead of a custom check function. - Chat Auto Reply, Protection, and Nuke Protection no longer take a permission as a setting. New features, each chosen for an edge case: - Discord Alerts: conditional handlers, and a command map that becomes a list. - Entity Protection: lists turned into sets at load, and bookkeeping that must keep running while disabled. - Nuke Protection: config keyed by defines, flattened to a banned items list. - Popups: one config shared by two control files. - Spawn Area: nested sections, and settings that only apply when the map is created. Page: now laid out like the role page. It has a search across every setting, one long list with a sticky sidebar to jump between sections, and the enabled switch separated at the front of each header with Reset to defaults on the right. Changed rows are highlighted, and a bottom bar offers Revert and Apply. Role settings use a role picker and lists use a tag select. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
50 lines
1.8 KiB
Lua
50 lines
1.8 KiB
Lua
--[[-- Test environment for module/features.lua
|
|
Extends the shared stubs with a fresh copy of the features module and a stub
|
|
of exp_util storage which lets tests act out on_init and on_load.
|
|
|
|
Run as a chunk by test/lua/runner.js, receiving the shared folder. The suite
|
|
returned here becomes `...` in each test file.
|
|
]]
|
|
|
|
local shared_root = ... --- @type string
|
|
local source = assert(debug.getinfo(1, "S")).source:gsub("\\", "/")
|
|
local plugin_root = assert(source:match("^@(.*)/test/module/env%.lua$"))
|
|
|
|
local Framework = assert(loadfile(shared_root .. "/framework.lua"))() --- @type Framework
|
|
|
|
--- @class ExpScenario.TestEnv : Stubs
|
|
--- @field Features ExpScenario.Features A fresh copy of the features module
|
|
--- @field storage table The table registered with storage, as on_init would store it
|
|
--- @field on_load fun(tbl: table) Act out on_load with the given storage table
|
|
--- @field load_config fun(name: string): table Load module/config/<name>.lua
|
|
--- @field logged string[] Messages passed to log
|
|
|
|
return Framework.suite(function(env)
|
|
--- @cast env ExpScenario.TestEnv
|
|
local callback --- @type fun(tbl: table)
|
|
env.logged = {}
|
|
log = function(message) env.logged[#env.logged + 1] = message end
|
|
env.extend_requires{
|
|
["modules/exp_util/storage"] = {
|
|
register = function(tbl, fn)
|
|
env.storage = tbl
|
|
callback = fn
|
|
end,
|
|
},
|
|
}
|
|
|
|
env.Features = assert(loadfile(plugin_root .. "/module/features.lua"))()
|
|
env.extend_requires{ ["modules/exp_scenario/features"] = env.Features }
|
|
|
|
function env.on_load(tbl)
|
|
env.storage = tbl
|
|
callback(tbl)
|
|
end
|
|
|
|
function env.load_config(name)
|
|
return assert(loadfile(plugin_root .. "/module/config/" .. name .. ".lua"))()
|
|
end
|
|
|
|
return env
|
|
end)
|