diff --git a/expcore/roles.lua b/expcore/roles.lua index 2028cd23..b6d1000d 100644 --- a/expcore/roles.lua +++ b/expcore/roles.lua @@ -115,6 +115,7 @@ local Groups = require 'expcore.permission_groups' --- @dep expcore.permission_g local Async = require 'expcore.async' --- @dep expcore.async local Colours = require 'utils.color_presets' --- @dep utils.color_presets local write_json = _C.write_json --- @dep expcore.common +local JailOldRole = require 'modules.control.jail_old_role' --- @dep modules.control.jail local Roles = { _prototype={}, @@ -368,7 +369,15 @@ function Roles.assign_player(player, roles, by_player_name, skip_checks, silent) if not skip_checks and not valid_player then return end if not player then return end if type(roles) ~= 'table' or roles.name then - roles = {roles} + roles = { roles } + end + if Roles.player_has_role(player, "Jail") then + local to_assign = JailOldRole.old_roles[valid_player.name] or {} + for _, role in ipairs(roles) do + table.insert(to_assign, role) + end + JailOldRole.old_roles[valid_player.name] = to_assign + return end for _, role in ipairs(roles) do role = Roles.get_role_from_any(role) diff --git a/modules/control/jail.lua b/modules/control/jail.lua index 1e37fbfa..93a02734 100644 --- a/modules/control/jail.lua +++ b/modules/control/jail.lua @@ -19,6 +19,7 @@ local Roles = require 'expcore.roles' --- @dep expcore.roles local Game = require 'utils.game' --- @dep utils.game local Global = require 'utils.global' --- @dep utils.global +local JailOldRole = require 'modules.control.jail_old_role' --- @dep modules.control.jail_old_role local valid_player = Game.get_player_from_any local assign_roles = Roles.assign_player @@ -89,7 +90,7 @@ function Jail.jail_player(player, by_player_name, reason) if has_role(player, 'Jail') then return end local roles = get_roles(player) - old_roles[player.name] = roles + JailOldRole.old_roles[player.name] = roles player.walking_state = { walking = false } player.riding_state = { acceleration = defines.riding.acceleration.nothing, direction = player.riding_state.direction } @@ -116,14 +117,25 @@ function Jail.unjail_player(player, by_player_name) if not by_player_name then return end if not has_role(player, 'Jail') then return end - local roles = old_roles[player.name] or {} + local roles = JailOldRole.old_roles[player.name] or {} - assign_roles(player, roles, by_player_name, nil, true) unassign_roles(player, 'Jail', by_player_name, nil, true) + assign_roles(player, roles, by_player_name, nil, true) event_emit(Jail.events.on_player_unjailed, player, by_player_name) return true end -return Jail \ No newline at end of file +function Jail.add_old_role(player, to_assign) + player = valid_player(player) + if not player then return end + + if not has_role(player, 'Jail') then return end + local roles = JailOldRole.old_roles[player.name] + if not roles then return end + + table.insert(roles, to_assign) +end + +return Jail diff --git a/modules/control/jail_old_role.lua b/modules/control/jail_old_role.lua new file mode 100644 index 00000000..0bf5d836 --- /dev/null +++ b/modules/control/jail_old_role.lua @@ -0,0 +1,13 @@ +local Global = require 'utils.global' --- @dep utils.global + +local Jail = { + old_roles = {} +} + +local old_roles = Jail.old_roles +Global.register(old_roles, function(tbl) + Jail.old_roles = tbl + old_roles = tbl +end) + +return Jail