mirror of
https://github.com/PHIDIAS0303/ExpCluster.git
synced 2025-12-27 11:35:22 +09:00
feat: review changes
This commit is contained in:
@@ -134,11 +134,9 @@ local Roles = {
|
||||
}
|
||||
|
||||
--- When global is loaded it will have the metatable re-assigned to the roles
|
||||
Global.register(Roles.config.players, function(tbl)
|
||||
Roles.config.players = tbl
|
||||
end)
|
||||
Global.register(Roles.config.deferred_roles, function(tbl)
|
||||
Roles.config.deferred_roles = tbl
|
||||
Global.register({ Roles.config.players, Roles.config.deferred_roles }, function(tbl)
|
||||
Roles.config.players = tbl[1]
|
||||
Roles.config.deferred_roles = tbl[2]
|
||||
end)
|
||||
|
||||
--- Getter.
|
||||
@@ -384,7 +382,7 @@ function Roles.assign_player(player, roles, by_player_name, skip_checks, silent)
|
||||
local assign_later = Roles.config.deferred_roles[valid_player.name] or {}
|
||||
local were_changes = false
|
||||
for _, role in ipairs(roles) do
|
||||
if not assign_later[role] then
|
||||
if assign_later[role] ~= 1 then
|
||||
assign_later[role] = 1
|
||||
were_changes = true
|
||||
end
|
||||
@@ -429,26 +427,42 @@ function Roles.unassign_player(player, roles, by_player_name, skip_checks, silen
|
||||
roles = { roles }
|
||||
end
|
||||
|
||||
local had_deferred_changes = false
|
||||
-- if the player has a role that needs to defer the role changes, save the roles that need to be unassigned later into a table
|
||||
if Roles.player_has_flag(player, "defer_role_changes") then
|
||||
local assign_later = Roles.config.deferred_roles[valid_player.name] or {}
|
||||
local were_changes = false
|
||||
for _, role in ipairs(roles) do
|
||||
if assign_later[role] ~= -1 then
|
||||
assign_later[role] = -1
|
||||
were_changes = true
|
||||
end
|
||||
end
|
||||
Roles.config.deferred_roles[valid_player.name] = assign_later
|
||||
if were_changes then
|
||||
emit_player_roles_updated(valid_player, 'unassign', roles, by_player_name, silent, true)
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
for _, role in ipairs(roles) do
|
||||
role = Roles.get_role_from_any(role)
|
||||
if role then
|
||||
if role:has_flag("defer_role_changes") then
|
||||
had_deferred_changes = true
|
||||
end
|
||||
role:remove_player(valid_player or player, valid_player == nil, true)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- if there are deferred role changes, apply them now
|
||||
if had_deferred_changes then
|
||||
if Roles.player_has_flag(valid_player, "defer_role_changes") then
|
||||
local assign_later = Roles.config.deferred_roles[player.name] or {}
|
||||
for role_name, _ in pairs(assign_later) do
|
||||
for role_name, assign in pairs(assign_later) do
|
||||
local role = Roles.get_role_from_any(role_name)
|
||||
if role then
|
||||
if assign == 1 then
|
||||
role:add_player(valid_player or player, valid_player == nil, true)
|
||||
elseif assign == -1 then
|
||||
role:remove_player(valid_player or player, valid_player == nil, true)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user