Merge branch 'main' into feature/scenario-protection

This commit is contained in:
Cooldude2606
2026-09-06 00:13:41 +01:00
committed by GitHub
7 changed files with 94 additions and 128 deletions
+1 -1
View File
@@ -5,7 +5,7 @@ Adds a commands that allow admins to jail and unjail
local Commands = require("modules/exp_commands")
local format_player_name = Commands.format_player_name_locale
local Jail = require("modules.exp_legacy.modules.control.jail") --- @dep modules.control.jail
local Jail = require("modules/exp_scenario/control/jail")
--- Puts a player into jail and removes all other roles.
Commands.new("jail", { "exp-commands_jail.description" })
@@ -167,8 +167,8 @@ end
--- When a player is jailed or unjailed
if config.player_jail then
local Jail = require("modules.exp_legacy.modules.control.jail")
events[Jail.events.on_player_jailed] = function(event)
local Jail = require("modules/exp_scenario/control/jail")
events[Jail.on_player_jailed] = function(event)
local player_name, by_player_name = get_player_name(event)
emit_event{
title = "Jail",
@@ -181,7 +181,7 @@ if config.player_jail then
},
}
end
events[Jail.events.on_player_unjailed] = function(event)
events[Jail.on_player_unjailed] = function(event)
local player_name, by_player_name = get_player_name(event)
emit_event{
title = "Unjail",
+85
View File
@@ -0,0 +1,85 @@
--[[-- Control - Jail
Adds a way to jail players, the jail role suppresses all of their other roles
]]
local Roles = require("modules/exp_roles")
--- @class ExpScenario_Jail
local Jail = {
--- Raised when a player is put into jail
--- @type EventData.ExpScenario_Jail.on_player_jailed
on_player_jailed = script.generate_event_name(),
--- Raised when a player is taken out of jail
--- @type EventData.ExpScenario_Jail.on_player_unjailed
on_player_unjailed = script.generate_event_name(),
}
--- @class EventData.ExpScenario_Jail.on_player_jailed : EventData
--- @field player_index uint
--- @field by_player_name string
--- @field reason string
--- @class EventData.ExpScenario_Jail.on_player_unjailed : EventData
--- @field player_index uint
--- @field by_player_name string
--- The role given to jailed players, it has a higher priority than every other role
--- @return ExpRoles.Role
local function get_jail_role()
return (assert(Roles.get_role_by_name("Jail"), "The Jail role does not exist"))
end
--- Check if a player is in jail
--- @param player LuaPlayer
--- @return boolean
function Jail.is_jailed(player)
return get_jail_role():has_player(player)
end
--- Put a player into jail, which suppresses all of their other roles
--- @param player LuaPlayer
--- @param by_player_name string
--- @param reason string
--- @return boolean # False when the player was already in jail
function Jail.jail_player(player, by_player_name, reason)
local role = get_jail_role()
if role:has_player(player) then return false end
-- Stop whatever the player is doing, the jail permission group stops them from starting again
player.walking_state = { walking = false, direction = player.walking_state.direction }
player.riding_state = { acceleration = defines.riding.acceleration.nothing, direction = player.riding_state.direction }
player.mining_state = { mining = false }
player.shooting_state = { state = defines.shooting.not_shooting, position = player.shooting_state.position }
player.picking_state = false
player.repair_state = { repairing = false, position = player.repair_state.position }
role:assign(player, { by_player_name = by_player_name, silent = true })
script.raise_event(Jail.on_player_jailed, {
player_index = player.index,
by_player_name = by_player_name,
reason = reason,
})
return true
end
--- Take a player out of jail, which restores all of their other roles
--- @param player LuaPlayer
--- @param by_player_name string
--- @return boolean # False when the player was not in jail
function Jail.unjail_player(player, by_player_name)
local role = get_jail_role()
if not role:has_player(player) then return false end
role:unassign(player, { by_player_name = by_player_name, silent = true })
script.raise_event(Jail.on_player_unjailed, {
player_index = player.index,
by_player_name = by_player_name,
})
return true
end
return Jail
@@ -4,7 +4,7 @@ When a player triggers protection multiple times they are automatically jailed
local ExpUtil = require("modules/exp_util")
local Storage = require("modules/exp_util/storage")
local Jail = require("modules.exp_legacy.modules.control.jail")
local Jail = require("modules/exp_scenario/control/jail")
local Protection = require("modules/exp_scenario/control/protection")
local format_player_name = ExpUtil.format_player_name_locale
+1 -1
View File
@@ -3,7 +3,7 @@ When a player is reported, the player is automatically jailed if the combined pl
]]
local ExpUtil = require("modules/exp_util")
local Jail = require("modules.exp_legacy.modules.control.jail")
local Jail = require("modules/exp_scenario/control/jail")
local Reports = require("modules.exp_legacy.modules.control.reports")
local max = math.max