From 2a599374b22dfd1a3804e1e66a6b9e7bef18011a Mon Sep 17 00:00:00 2001 From: Aws0me <51889746+Aws0mee@users.noreply.github.com> Date: Sun, 20 Aug 2023 16:11:37 -0400 Subject: [PATCH 1/3] Expose arrestedPlayers table globally --- gamemode/modules/police/sv_init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gamemode/modules/police/sv_init.lua b/gamemode/modules/police/sv_init.lua index 0190d2327..d8dec544a 100644 --- a/gamemode/modules/police/sv_init.lua +++ b/gamemode/modules/police/sv_init.lua @@ -1,6 +1,6 @@ local plyMeta = FindMetaTable("Player") local finishWarrantRequest -local arrestedPlayers = {} +arrestedPlayers = {} --[[--------------------------------------------------------------------------- Interface functions From ad3e0639e87c21fb47ad7bde6e12858ffccde1e6 Mon Sep 17 00:00:00 2001 From: Falco Peijnenburg Date: Mon, 18 Sep 2023 20:00:28 +0200 Subject: [PATCH 2/3] Revert "Expose arrestedPlayers table globally" This reverts commit 2a599374b22dfd1a3804e1e66a6b9e7bef18011a. --- gamemode/modules/police/sv_init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gamemode/modules/police/sv_init.lua b/gamemode/modules/police/sv_init.lua index d8dec544a..0190d2327 100644 --- a/gamemode/modules/police/sv_init.lua +++ b/gamemode/modules/police/sv_init.lua @@ -1,6 +1,6 @@ local plyMeta = FindMetaTable("Player") local finishWarrantRequest -arrestedPlayers = {} +local arrestedPlayers = {} --[[--------------------------------------------------------------------------- Interface functions From 57335ce739db36cb8b8f6939d6c58c3009eb2457 Mon Sep 17 00:00:00 2001 From: Falco Peijnenburg Date: Mon, 18 Sep 2023 20:58:35 +0200 Subject: [PATCH 3/3] Add iterateArrestedPlayers, arrestedPlayers and arrestedPlayerCount --- gamemode/modules/police/sv_init.lua | 36 ++++++++++++++++++ gamemode/modules/police/sv_interface.lua | 48 ++++++++++++++++++++++++ 2 files changed, 84 insertions(+) diff --git a/gamemode/modules/police/sv_init.lua b/gamemode/modules/police/sv_init.lua index 0190d2327..5982ca624 100644 --- a/gamemode/modules/police/sv_init.lua +++ b/gamemode/modules/police/sv_init.lua @@ -115,6 +115,42 @@ function plyMeta:unArrest(unarrester, teleportOverride) hook.Call("playerUnArrested", DarkRP.hooks, self, unarrester, teleportOverride) end +function DarkRP.iterateArrestedPlayers() + local index = nil + local function iterator() + local found_player = nil + index = next(arrestedPlayers, index) + + if index == nil then return end + + found_player = player.GetBySteamID(index) + -- player.GetBySteamID returns false when the player is not in the + -- server. In that case, skip the player. + if not found_player then return iterator() end + + return found_player + end + return iterator +end + +function DarkRP.arrestedPlayers() + local result = {} + for ply in DarkRP.iterateArrestedPlayers() do + table.insert(result, ply) + end + + return result +end + + +function DarkRP.arrestedPlayerCount() + local count = 0 + + for _ in DarkRP.iterateArrestedPlayers() do count = count + 1 end + + return count +end + --[[--------------------------------------------------------------------------- Chat commands ---------------------------------------------------------------------------]] diff --git a/gamemode/modules/police/sv_interface.lua b/gamemode/modules/police/sv_interface.lua index 1a773a058..5848eeec4 100644 --- a/gamemode/modules/police/sv_interface.lua +++ b/gamemode/modules/police/sv_interface.lua @@ -188,6 +188,54 @@ DarkRP.PLAYER.unArrest = DarkRP.stub{ metatable = DarkRP.PLAYER } +DarkRP.iterateArrestedPlayers = DarkRP.stub{ + name = "iterateArrestedPlayers", + description = "An iterator that walks over the arrested players. Use as follows: for arrestedPlayer in DarkRP.iterateArrestedPlayers() do print(arrestedPlayer) end", + parameters = { + }, + returns = { + { + name = "arrestedPlayer", + description = "Much like the next function, this returns the next arrested player until the table is fully iterated.", + type = "Player" + } + }, + metatable = DarkRP, + realm = "Server" +} + +DarkRP.arrestedPlayers = DarkRP.stub{ + name = "arrestedPlayers", + description = "Returns a table that contains all arrested players. NOTE: This function is defined using DarkRP.iterateArrestedPlayers. It might be more efficient to use that function instead, because this function builds the table anew.", + parameters = { + }, + returns = { + { + name = "arrestedPlayers", + description = "An array of arrested players, in no particular order.", + type = "table" + } + }, + metatable = DarkRP, + realm = "Server" +} + +DarkRP.arrestedPlayerCount = DarkRP.stub{ + name = "arrestedPlayerCount", + description = "Returns the amount of players that are currently arrested.", + parameters = { + }, + returns = { + { + name = "arrestedPlayerCount", + description = "The amount of arrested players.", + type = "number" + } + }, + metatable = DarkRP, + realm = "Server" +} + DarkRP.hookStub{ name = "playerArrested", description = "When a player is arrested.",