This commit is contained in:
2025-02-23 14:33:39 +09:00
parent 510a119741
commit 766e96a9fc

View File

@@ -12,9 +12,7 @@ local format_number = require("util").format_number --- @dep util
local bonus_container local bonus_container
local bonus_data = { local bonus_data_score_limit = {}
score_limit = {}
}
--- @param player LuaPlayer --- @param player LuaPlayer
--- @param container LuaGuiElement? --- @param container LuaGuiElement?
@@ -106,8 +104,10 @@ local function apply_periodic_bonus(player)
end end
end end
local function bonus_score_limit_calc(player) local function bonus_score_limit(player)
return math.floor(config.pts.base * (1 + config.pts.increase_percentage_per_role_level * (Roles.get_role_by_name(config.pts.role_name).index - Roles.get_player_highest_role(player).index))) if not bonus_data_score_limit[player] then
bonus_data_score_limit[player] = math.floor(config.pts.base * (1 + config.pts.increase_percentage_per_role_level * (Roles.get_role_by_name(config.pts.role_name).index - Roles.get_player_highest_role(player).index)))
end
end end
--- Control label for the bonus points available --- Control label for the bonus points available
@@ -158,9 +158,9 @@ local bonus_gui_control_reset = Gui.element("bonus_gui_control_reset")
disp[slider.tags.counter].caption = format_number(slider.slider_value, false) disp[slider.tags.counter].caption = format_number(slider.slider_value, false)
local n = bonus_gui_pts_needed(player) local n = bonus_gui_pts_needed(player)
bonus_data.score_limit[player] = bonus_score_limit_calc(player) bonus_score_limit(player)
element.parent[bonus_gui_control_pts_count.name].caption = n .. " / " .. bonus_data.score_limit[player] element.parent[bonus_gui_control_pts_count.name].caption = n .. " / " .. bonus_data_score_limit[player]
element.parent[bonus_gui_control_pts_count.name].value = n / bonus_data.score_limit[player] element.parent[bonus_gui_control_pts_count.name].value = n / bonus_data_score_limit[player]
end) end)
--- A button used for pts apply --- A button used for pts apply
@@ -174,11 +174,11 @@ local bonus_gui_control_apply = Gui.element("bonus_gui_control_apply")
width = config.gui_display_width["half"], width = config.gui_display_width["half"],
}:on_click(function(def, player, element) }:on_click(function(def, player, element)
local n = bonus_gui_pts_needed(player) local n = bonus_gui_pts_needed(player)
bonus_data.score_limit[player] = bonus_score_limit_calc(player) bonus_score_limit(player)
element.parent[bonus_gui_control_pts_count.name].caption = n .. " / " .. bonus_data.score_limit[player] element.parent[bonus_gui_control_pts_count.name].caption = n .. " / " .. bonus_data_score_limit[player]
element.parent[bonus_gui_control_pts_count.name].value = n / bonus_data.score_limit[player] element.parent[bonus_gui_control_pts_count.name].value = n / bonus_data_score_limit[player]
if n <= bonus_data.score_limit[player] then if n <= bonus_data_score_limit[player] then
apply_bonus(player) apply_bonus(player)
end end
end) end)
@@ -241,9 +241,9 @@ local bonus_gui_slider = Gui.element("bonus_gui_slider")
local container = Gui.get_left_element(bonus_container, player) local container = Gui.get_left_element(bonus_container, player)
local disp = container.frame["bonus_st_1"].disp.table local disp = container.frame["bonus_st_1"].disp.table
local n = bonus_gui_pts_needed(player) local n = bonus_gui_pts_needed(player)
bonus_data.score_limit[player] = bonus_score_limit_calc(player) bonus_score_limit(player)
disp[bonus_gui_control_pts_count.name].caption = n .. " / " .. bonus_data.score_limit[player] disp[bonus_gui_control_pts_count.name].caption = n .. " / " .. bonus_data_score_limit[player]
disp[bonus_gui_control_pts_count.name].value = n / bonus_data.score_limit[player] disp[bonus_gui_control_pts_count.name].value = n / bonus_data_score_limit[player]
end) end)
--- A vertical flow containing all the bonus data --- A vertical flow containing all the bonus data
@@ -274,9 +274,9 @@ bonus_container = Gui.element("bonus_container")
local disp = container["bonus_st_1"].disp.table local disp = container["bonus_st_1"].disp.table
local n = bonus_gui_pts_needed(player, container.parent) local n = bonus_gui_pts_needed(player, container.parent)
bonus_data.score_limit[player] = bonus_score_limit_calc(player) bonus_score_limit(player)
disp[bonus_gui_control_pts_count.name].caption = n .. " / " .. bonus_data.score_limit[player] disp[bonus_gui_control_pts_count.name].caption = n .. " / " .. bonus_data_score_limit[player]
disp[bonus_gui_control_pts_count.name].value = n / bonus_data.score_limit[player] disp[bonus_gui_control_pts_count.name].value = n / bonus_data_score_limit[player]
return container.parent return container.parent
end) end)
@@ -309,14 +309,12 @@ end)
Event.add(Roles.events.on_role_assigned, function(event) Event.add(Roles.events.on_role_assigned, function(event)
local player = game.players[event.player_index] local player = game.players[event.player_index]
bonus_data.score_limit[player] = bonus_score_limit_calc(player) bonus_data_score_limit[player] = nil
apply_bonus(player)
end) end)
Event.add(Roles.events.on_role_unassigned, function(event) Event.add(Roles.events.on_role_unassigned, function(event)
local player = game.players[event.player_index] local player = game.players[event.player_index]
bonus_data.score_limit[player] = bonus_score_limit_calc(player) bonus_data_score_limit[player] = nil
apply_bonus(player)
end) end)
--- When a player respawns re-apply bonus --- When a player respawns re-apply bonus
@@ -325,11 +323,11 @@ Event.add(defines.events.on_player_respawned, function(event)
local container = Gui.get_left_element(bonus_container, player) local container = Gui.get_left_element(bonus_container, player)
local disp = container.frame["bonus_st_1"].disp.table local disp = container.frame["bonus_st_1"].disp.table
local n = bonus_gui_pts_needed(player) local n = bonus_gui_pts_needed(player)
bonus_data.score_limit[player] = bonus_score_limit_calc(player) bonus_score_limit(player)
disp[bonus_gui_control_pts_count.name].caption = n .. " / " .. bonus_data.score_limit[player] disp[bonus_gui_control_pts_count.name].caption = n .. " / " .. bonus_data_score_limit[player]
disp[bonus_gui_control_pts_count.name].value = n / bonus_data.score_limit[player] disp[bonus_gui_control_pts_count.name].value = n / bonus_data_score_limit[player]
if n <= bonus_data.score_limit[player] then if n <= bonus_data_score_limit[player] then
apply_bonus(player) apply_bonus(player)
end end
end) end)