Merge pull request #500 from bbassie/refactor/settings-in-storage

Keep the server UPS and fast decon toggles out of player data
This commit is contained in:
Bastiaan authored and GitHub committed 2026-10-14 23:11:08 +01:00
1 parent 4fe9148ab7
commit 69e31ac2d9
5 files changed
+13 -38

No files matched your search

-4
View File
@@ -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
-4
View File
@@ -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=此值在離開時自動計算
-4
View File
@@ -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=此值在離開時自動計算
@@ -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<number, true>
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)
+3 -19
View File
@@ -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