mirror of
https://github.com/PHIDIAS0303/ExpCluster.git
synced 2026-11-11 15:54:52 +09:00
The toolbar order, favourites, and open panels were saved into exp_legacy's PlayerData, which was never synced, and the file doing so was no longer loaded. When a player leaves, the lua side now sends Gui.toolbar.get_state as json compressed with helpers.encode_string, and the controller stores the string on the player record. When the player joins again the instance plugin sends the stored string over rcon to exp_scenario.player_settings.receive_toolbar, which decodes it and calls Gui.toolbar.set_state. exp_gui builds the toolbar in on_player_joined_game, so it exists by the time the rcon arrives. A string which does not decode, or a state naming buttons which no longer exist, is logged and ignored rather than raising in the game. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
61 lines
2.2 KiB
Lua
61 lines
2.2 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 Feature 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): ExpScenario.Feature Load module/config/<name>.lua
|
|
--- @field load_module fun(name: string): any Load module/<name>.lua, such as "control/player_settings"
|
|
--- @field logged string[] Messages passed to log
|
|
--- @field events table[] Raised events, name and tick filled in
|
|
|
|
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
|
|
table_size = function(tbl)
|
|
local size = 0
|
|
for _ in pairs(tbl) do size = size + 1 end
|
|
return size
|
|
end
|
|
env.extend_requires{
|
|
["modules/exp_util/storage"] = {
|
|
register = function(tbl, fn)
|
|
env.storage = tbl
|
|
callback = fn
|
|
end,
|
|
},
|
|
}
|
|
|
|
env.Feature = assert(loadfile(plugin_root .. "/module/features.lua"))()
|
|
env.extend_requires{ ["modules/exp_scenario/features"] = env.Feature }
|
|
|
|
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
|
|
|
|
function env.load_module(name)
|
|
return assert(loadfile(plugin_root .. "/module/" .. name .. ".lua"))()
|
|
end
|
|
|
|
return env
|
|
end)
|