mirror of
https://github.com/PHIDIAS0303/ExpCluster.git
synced 2025-12-31 21:01:39 +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
|
--- When global is loaded it will have the metatable re-assigned to the roles
|
||||||
Global.register(Roles.config.players, function(tbl)
|
Global.register({ Roles.config.players, Roles.config.deferred_roles }, function(tbl)
|
||||||
Roles.config.players = tbl
|
Roles.config.players = tbl[1]
|
||||||
end)
|
Roles.config.deferred_roles = tbl[2]
|
||||||
Global.register(Roles.config.deferred_roles, function(tbl)
|
|
||||||
Roles.config.deferred_roles = tbl
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
--- Getter.
|
--- 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 assign_later = Roles.config.deferred_roles[valid_player.name] or {}
|
||||||
local were_changes = false
|
local were_changes = false
|
||||||
for _, role in ipairs(roles) do
|
for _, role in ipairs(roles) do
|
||||||
if not assign_later[role] then
|
if assign_later[role] ~= 1 then
|
||||||
assign_later[role] = 1
|
assign_later[role] = 1
|
||||||
were_changes = true
|
were_changes = true
|
||||||
end
|
end
|
||||||
@@ -429,26 +427,42 @@ function Roles.unassign_player(player, roles, by_player_name, skip_checks, silen
|
|||||||
roles = { roles }
|
roles = { roles }
|
||||||
end
|
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
|
for _, role in ipairs(roles) do
|
||||||
role = Roles.get_role_from_any(role)
|
role = Roles.get_role_from_any(role)
|
||||||
if role then
|
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)
|
role:remove_player(valid_player or player, valid_player == nil, true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- if there are deferred role changes, apply them now
|
-- 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 {}
|
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)
|
local role = Roles.get_role_from_any(role_name)
|
||||||
if role then
|
if role then
|
||||||
|
if assign == 1 then
|
||||||
role:add_player(valid_player or player, valid_player == nil, true)
|
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
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user