mirror of
https://github.com/PHIDIAS0303/ExpCluster.git
synced 2025-12-27 03:25:23 +09:00
.
This commit is contained in:
@@ -11,7 +11,6 @@ local vlayer = require("modules.exp_legacy.modules.control.vlayer")
|
||||
local format_number = require("util").format_number --- @dep util
|
||||
|
||||
local bonus_container
|
||||
local bonus_data_score_limit = {}
|
||||
|
||||
--- @param player LuaPlayer
|
||||
--- @param container LuaGuiElement?
|
||||
@@ -35,8 +34,9 @@ local function bonus_gui_pts_needed(player, container)
|
||||
end
|
||||
|
||||
--- @param player LuaPlayer
|
||||
local function apply_bonus(player)
|
||||
if not Roles.player_allowed(player, "gui/bonus") then
|
||||
--- @param reset boolean?
|
||||
local function apply_bonus(player, reset)
|
||||
if reset or not Roles.player_allowed(player, "gui/bonus") then
|
||||
for k, v in pairs(config.player_bonus) do
|
||||
player[k] = 0
|
||||
|
||||
@@ -103,10 +103,12 @@ local function apply_periodic_bonus(player)
|
||||
end
|
||||
end
|
||||
|
||||
local function bonus_score_limit(player)
|
||||
local bonus_data_score_limit = {}
|
||||
local function get_bonus_score_limit(player)
|
||||
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
|
||||
return bonus_data_score_limit[player]
|
||||
end
|
||||
|
||||
--- Control label for the bonus points available
|
||||
@@ -158,9 +160,9 @@ local bonus_gui_control_reset = Gui.element("bonus_gui_control_reset")
|
||||
disp[slider.tags.counter].caption = format_number(slider.slider_value, false)
|
||||
|
||||
local n = bonus_gui_pts_needed(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].value = n / bonus_data_score_limit[player]
|
||||
local limit = get_bonus_score_limit(player)
|
||||
element.parent[bonus_gui_control_pts_count.name].caption = n .. " / " .. limit
|
||||
element.parent[bonus_gui_control_pts_count.name].value = n / limit
|
||||
end)
|
||||
|
||||
--- A button used for pts apply
|
||||
@@ -174,11 +176,11 @@ local bonus_gui_control_apply = Gui.element("bonus_gui_control_apply")
|
||||
width = config.gui_display_width["half"],
|
||||
}:on_click(function(def, player, element)
|
||||
local n = bonus_gui_pts_needed(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].value = n / bonus_data_score_limit[player]
|
||||
local limit = get_bonus_score_limit(player)
|
||||
element.parent[bonus_gui_control_pts_count.name].caption = n .. " / " .. limit
|
||||
element.parent[bonus_gui_control_pts_count.name].value = n / limit
|
||||
|
||||
if n <= bonus_data_score_limit[player] then
|
||||
if n <= limit then
|
||||
apply_bonus(player)
|
||||
end
|
||||
end)
|
||||
@@ -241,9 +243,9 @@ local bonus_gui_slider = Gui.element("bonus_gui_slider")
|
||||
local container = Gui.get_left_element(bonus_container, player)
|
||||
local disp = container.frame["bonus_st_1"].disp.table
|
||||
local n = bonus_gui_pts_needed(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].value = n / bonus_data_score_limit[player]
|
||||
local limit = get_bonus_score_limit(player)
|
||||
disp[bonus_gui_control_pts_count.name].caption = n .. " / " .. limit
|
||||
disp[bonus_gui_control_pts_count.name].value = n / limit
|
||||
end)
|
||||
|
||||
--- A vertical flow containing all the bonus data
|
||||
@@ -274,9 +276,9 @@ bonus_container = Gui.element("bonus_container")
|
||||
|
||||
local disp = container["bonus_st_1"].disp.table
|
||||
local n = bonus_gui_pts_needed(player, container.parent)
|
||||
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].value = n / bonus_data_score_limit[player]
|
||||
local limit = get_bonus_score_limit(player)
|
||||
disp[bonus_gui_control_pts_count.name].caption = n .. " / " .. limit
|
||||
disp[bonus_gui_control_pts_count.name].value = n / limit
|
||||
|
||||
return container.parent
|
||||
end)
|
||||
@@ -307,32 +309,26 @@ Event.add(defines.events.on_player_created, function(event)
|
||||
end
|
||||
end)
|
||||
|
||||
Event.add(Roles.events.on_role_assigned, function(event)
|
||||
local function recalculate_bonus(event)
|
||||
local player = game.players[event.player_index]
|
||||
if event.name == Roles.events.on_role_assigned or event.name == Roles.events.on_role_unassigned then
|
||||
-- If the player's roles changed then we need to recalculate their limit
|
||||
bonus_data_score_limit[player] = nil
|
||||
apply_bonus(player)
|
||||
end)
|
||||
end
|
||||
|
||||
Event.add(Roles.events.on_role_unassigned, function(event)
|
||||
local player = game.players[event.player_index]
|
||||
bonus_data_score_limit[player] = nil
|
||||
apply_bonus(player)
|
||||
end)
|
||||
|
||||
--- When a player respawns re-apply bonus
|
||||
Event.add(defines.events.on_player_respawned, function(event)
|
||||
local player = game.players[event.player_index]
|
||||
local container = Gui.get_left_element(bonus_container, player)
|
||||
local disp = container.frame["bonus_st_1"].disp.table
|
||||
local n = bonus_gui_pts_needed(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].value = n / bonus_data_score_limit[player]
|
||||
local limit = get_bonus_score_limit(player)
|
||||
disp[bonus_gui_control_pts_count.name].caption = n .. " / " .. limit
|
||||
disp[bonus_gui_control_pts_count.name].value = n / limit
|
||||
|
||||
if n <= bonus_data_score_limit[player] then
|
||||
apply_bonus(player)
|
||||
apply_bonus(player, n > limit)
|
||||
end
|
||||
end)
|
||||
|
||||
Event.add(Roles.events.on_role_assigned, recalculate_bonus)
|
||||
Event.add(Roles.events.on_role_unassigned, recalculate_bonus)
|
||||
Event.add(defines.events.on_player_respawned, recalculate_bonus)
|
||||
|
||||
--- When a player dies allow them to have instant respawn
|
||||
Event.add(defines.events.on_player_died, function(event)
|
||||
|
||||
Reference in New Issue
Block a user