From 69e31ac2d9f6d45b45e3522692c6ad400ea7fdfa Mon Sep 17 00:00:00 2001 From: Bastiaan <17990055+bbassie@users.noreply.github.com> Date: Thu, 15 Oct 2026 00:11:08 +0200 Subject: [PATCH] Merge pull request #500 from bbassie/refactor/settings-in-storage Keep the server UPS and fast decon toggles out of player data --- exp_legacy/module/locale/en.cfg | 4 ---- exp_legacy/module/locale/zh-CN.cfg | 4 ---- exp_legacy/module/locale/zh-TW.cfg | 4 ---- .../module/control/fast_deconstruction.lua | 17 ++++++++------ exp_server_ups/module/control.lua | 22 +++---------------- 5 files changed, 13 insertions(+), 38 deletions(-) diff --git a/exp_legacy/module/locale/en.cfg b/exp_legacy/module/locale/en.cfg index ef68c6c2..8f61908f 100644 --- a/exp_legacy/module/locale/en.cfg +++ b/exp_legacy/module/locale/en.cfg @@ -27,13 +27,9 @@ message-cleared=Your join message has been cleared. JoinMessage=Join Message JoinMessage-tooltip=The message displayed when you join JoinMessage-value-tooltip=Change by using /join-message -UsesServerUps=Server UPS -UsesServerUps-tooltip=Whether the current server UPS is shown -UsesServerUps-value-tooltip=Change by using /server-ups Bonus=Player Bonus Bonus-tooltip=The bonus given to your character Bonus-value-tooltip=Change by using /bonus -HasEnabledDecon=Quick Tree Decon ToolbarState=Toolbox ToolbarState-tooltip=The order and favourites in your toolbox ToolbarState-value-tooltip=This value is calculated automatically when you leave the game diff --git a/exp_legacy/module/locale/zh-CN.cfg b/exp_legacy/module/locale/zh-CN.cfg index bf97ce3f..13215c0d 100644 --- a/exp_legacy/module/locale/zh-CN.cfg +++ b/exp_legacy/module/locale/zh-CN.cfg @@ -27,13 +27,9 @@ message-cleared=你的加入信息已清除。 JoinMessage=加入信息 JoinMessage-tooltip=你加入時所顯示的信息 JoinMessage-value-tooltip=使用 /join-message 來更換加入信息 -UsesServerUps=服務器更新數 (SUPS) -UsesServerUps-tooltip=現在是否顯示服務器更新數 (SUPS) -UsesServerUps-value-tooltip=使用 /server-ups 來更換顯示 Bonus=人物附加屬性 Bonus-tooltip=你的人物附加屬性 Bonus-value-tooltip=使用 /bonus 來更改 -HasEnabledDecon=快速拆除樹木 ToolbarState=工具箱 ToolbarState-tooltip=次序和喜愛項目 ToolbarState-value-tooltip=此值在離開時自動計算 diff --git a/exp_legacy/module/locale/zh-TW.cfg b/exp_legacy/module/locale/zh-TW.cfg index bf97ce3f..13215c0d 100644 --- a/exp_legacy/module/locale/zh-TW.cfg +++ b/exp_legacy/module/locale/zh-TW.cfg @@ -27,13 +27,9 @@ message-cleared=你的加入信息已清除。 JoinMessage=加入信息 JoinMessage-tooltip=你加入時所顯示的信息 JoinMessage-value-tooltip=使用 /join-message 來更換加入信息 -UsesServerUps=服務器更新數 (SUPS) -UsesServerUps-tooltip=現在是否顯示服務器更新數 (SUPS) -UsesServerUps-value-tooltip=使用 /server-ups 來更換顯示 Bonus=人物附加屬性 Bonus-tooltip=你的人物附加屬性 Bonus-value-tooltip=使用 /bonus 來更改 -HasEnabledDecon=快速拆除樹木 ToolbarState=工具箱 ToolbarState-tooltip=次序和喜愛項目 ToolbarState-value-tooltip=此值在離開時自動計算 diff --git a/exp_scenario/module/control/fast_deconstruction.lua b/exp_scenario/module/control/fast_deconstruction.lua index 34544496..84063a39 100644 --- a/exp_scenario/module/control/fast_deconstruction.lua +++ b/exp_scenario/module/control/fast_deconstruction.lua @@ -5,10 +5,14 @@ Makes trees which are marked for decon "decay" quickly to allow faster building local Gui = require("modules/exp_gui") local Async = require("modules/exp_util/async") local Roles = require("modules/exp_roles") +local Storage = require("modules/exp_util/storage") -local PlayerData = require("modules.exp_legacy.expcore.player_data") -local HasEnabledDecon = PlayerData.Settings:combine("HasEnabledDecon") -HasEnabledDecon:set_default(false) +--- Players who toggled fast decon on, by player index +--- @type table +local enabled_players = {} +Storage.register(enabled_players, function(tbl) + enabled_players = tbl +end) local random = math.random local floor = math.floor @@ -58,7 +62,7 @@ local remove_trees_async = --- @return "fast" | "allow" | "disallow" local function get_permission(player) if Roles.player_has_permission(player, "exp_scenario.decon.fast_trees") then - return HasEnabledDecon:get(player) and "fast" or "allow" + return enabled_players[player.index] and "fast" or "allow" elseif Roles.player_has_permission(player, "exp_scenario.decon.standard") then return "allow" else @@ -105,7 +109,7 @@ Gui.toolbar.create_button{ end }:on_click(function(def, player, element) local state = Gui.toolbar.get_button_toggled_state(def, player) - HasEnabledDecon:set(player, state) + enabled_players[player.index] = state or nil player.print{ "exp_fast-decon.chat-toggle", state and { "exp_fast-decon.chat-enabled" } or { "exp_fast-decon.chat-disabled" } } end) @@ -164,8 +168,7 @@ local function on_entity_damaged(event) end -- Mark the entity to be removed - local allow = get_player_cache(driver.index) - if allow == "fast" and HasEnabledDecon:get(driver) then + if get_player_cache(driver.index).permission == "fast" then event.entity.destroy() else event.entity.order_deconstruction(event.force, driver) diff --git a/exp_server_ups/module/control.lua b/exp_server_ups/module/control.lua index cd2d5b19..0de51f6c 100644 --- a/exp_server_ups/module/control.lua +++ b/exp_server_ups/module/control.lua @@ -9,21 +9,6 @@ local Commands = require("modules/exp_commands") --- @class ExpServerUps.elements local Elements = {} ---- Stores the visible state of server ups element for a player -local PlayerData = require("modules/exp_legacy/expcore/player_data") -local UsesServerUps = PlayerData.Settings:combine("UsesServerUps") -UsesServerUps:set_default(false) -UsesServerUps:set_metadata{ - permission = "exp_scenario.command.server_ups", - stringify = function(value) return value and "Visible" or "Hidden" end, -} - ---- Change the visible state when your data loads -UsesServerUps:on_load(function(player_name, visible) - local player = assert(game.get_player(player_name)) - Elements.server_ups.set_visible(player, visible or false) -end) - --- Label to show the server ups, drawn to screen on join --- @class ExpServerUps.elements.server_ups: ExpElement --- @overload fun(parent: LuaGuiElement, visible: boolean?): LuaGuiElement @@ -61,7 +46,7 @@ function Elements.server_ups.get_main_label(player) if element and element.valid then return element end - return Elements.server_ups(player.gui.screen, UsesServerUps:get(player)) + return Elements.server_ups(player.gui.screen, false) end --- Set the visible state of the main label @@ -75,9 +60,8 @@ end Commands.new("server-ups", { "exp_server-ups.description" }) :add_aliases{ "sups", "ups" } :register(function(player) - local visible = not UsesServerUps:get(player) - Elements.server_ups.set_visible(player, visible) - UsesServerUps:set(player, visible) + local label = Elements.server_ups.get_main_label(player) + label.visible = not label.visible end) --- Add an interface which can be called from rcon