From b1f12e55a1e6d48db2117dd73b42506a7b7f5804 Mon Sep 17 00:00:00 2001 From: ZioPao Date: Thu, 28 Mar 2024 19:12:56 +0100 Subject: [PATCH] Local reset for admins --- media/lua/client/TOC/Admin.lua | 31 +++++++++++++++++++ media/lua/client/TOC/ClientRelayCommands.lua | 10 ++++++ .../TOC/Controllers/LocalPlayerController.lua | 6 ++-- media/lua/client/TOC/Main.lua | 3 -- media/lua/server/TOC/ServerRelayCommands.lua | 11 +++++++ media/lua/shared/TOC/CommandsData.lua | 11 +++++-- .../shared/Translate/EN/ContextMenu_EN.txt | 6 ++++ 7 files changed, 70 insertions(+), 8 deletions(-) create mode 100644 media/lua/client/TOC/Admin.lua diff --git a/media/lua/client/TOC/Admin.lua b/media/lua/client/TOC/Admin.lua new file mode 100644 index 0000000..46ae31a --- /dev/null +++ b/media/lua/client/TOC/Admin.lua @@ -0,0 +1,31 @@ + +local CommandsData = require("TOC/CommandsData") + +---@param playerNum number +---@param context ISContextMenu +---@param items any +local function AddAdminTocOptions(playerNum, context, items) + if not isAdmin() then return end + + -- This is a global var already handled in vanilla zomboid, we don't need to find the player once again + ---@cast clickedPlayer IsoPlayer + if clickedPlayer then + + local clickedPlayerNum = clickedPlayer:getOnlineID() + + local option = context:addOption(getText("ContextMenu_Admin_TOC"), items, nil) + local subMenu = ISContextMenu:getNew(context) + context:addSubMenu(option, subMenu) + + subMenu:addOption(getText("ContextMenu_Admin_ResetTOC"), items, function() + sendClientCommand(CommandsData.modules.TOC_RELAY, CommandsData.server.Relay.RelayExecuteInitialization, {patientNum=clickedPlayerNum} ) + end) + + -- TODO add other options + + end + + + +end +Events.OnFillWorldObjectContextMenu.Add(AddAdminTocOptions) \ No newline at end of file diff --git a/media/lua/client/TOC/ClientRelayCommands.lua b/media/lua/client/TOC/ClientRelayCommands.lua index c508b2e..327f60a 100644 --- a/media/lua/client/TOC/ClientRelayCommands.lua +++ b/media/lua/client/TOC/ClientRelayCommands.lua @@ -28,6 +28,16 @@ function ClientRelayCommands.ReceiveExecuteAmputationAction(args) local handler = InitAmputationHandler(args.limbName, args.surgeonNum) handler:execute(true) end + + + +--* TRIGGERED BY ADMINS *-- + +function ClientRelayCommands.ReceiveExecuteInitialization() + local LocalPlayerController = require("TOC/Controllers/LocalPlayerController") + LocalPlayerController.InitializePlayer(true) +end + ------------------------- local function OnServerRelayCommand(module, command, args) diff --git a/media/lua/client/TOC/Controllers/LocalPlayerController.lua b/media/lua/client/TOC/Controllers/LocalPlayerController.lua index 8da5c20..32b58e6 100644 --- a/media/lua/client/TOC/Controllers/LocalPlayerController.lua +++ b/media/lua/client/TOC/Controllers/LocalPlayerController.lua @@ -136,7 +136,7 @@ LocalPlayerController.hasBeenDamaged = false ---Check if the player has in infected body part or if they have been hit in a cut area ----@param character IsoPlayer +---@param character IsoPlayer|IsoGameCharacter function LocalPlayerController.HandleDamage(character) -- TOC_DEBUG.print("Player got hit!") -- TOC_DEBUG.print(damageType) @@ -193,7 +193,7 @@ function LocalPlayerController.HandleDamage(character) end ---Setup HandleDamage, triggered by OnPlayerGetDamage ----@param character IsoGameCharacter +---@param character IsoPlayer|IsoGameCharacter ---@param damageType string ---@param damageAmount number function LocalPlayerController.OnGetDamage(character, damageType, damageAmount) @@ -291,7 +291,7 @@ end --* Tourniquet handling function LocalPlayerController.HandleTourniquet() - print("test") + -- TODO Add it!!! end Events.OnPuttingTourniquet.Add(LocalPlayerController.HandleTourniquet) diff --git a/media/lua/client/TOC/Main.lua b/media/lua/client/TOC/Main.lua index b9927d2..4b8bc46 100644 --- a/media/lua/client/TOC/Main.lua +++ b/media/lua/client/TOC/Main.lua @@ -89,6 +89,3 @@ end Events.OnGameStart.Add(Main.Start) Events.OnCreatePlayer.Add(Main.InitializePlayer) Events.OnPlayerDeath.Add(Main.WipeData) - --- TODO Disable windows interaction when no hands - diff --git a/media/lua/server/TOC/ServerRelayCommands.lua b/media/lua/server/TOC/ServerRelayCommands.lua index c1bfb7e..517d56e 100644 --- a/media/lua/server/TOC/ServerRelayCommands.lua +++ b/media/lua/server/TOC/ServerRelayCommands.lua @@ -29,6 +29,17 @@ function ServerRelayCommands.RelayExecuteAmputationAction(surgeonPl, args) end +--* ADMIN ONLY *-- +---Relay a local init from another client +---@param adminObj IsoPlayer +---@param args relayExecuteInitializationParams +function ServerRelayCommands.RelayExecuteInitialization(adminObj, args) + local patientPl = getPlayerByOnlineID(args.patientNum) + sendServerCommand(patientPl, CommandsData.modules.TOC_RELAY, CommandsData.client.Relay.ReceiveExecuteInitialization, {}) + +end + + ------------------------- diff --git a/media/lua/shared/TOC/CommandsData.lua b/media/lua/shared/TOC/CommandsData.lua index f6f7c70..acfae51 100644 --- a/media/lua/shared/TOC/CommandsData.lua +++ b/media/lua/shared/TOC/CommandsData.lua @@ -11,7 +11,11 @@ CommandsData.modules = { CommandsData.client = { Relay = { ReceiveDamageDuringAmputation = "ReceiveDamageDuringAmputation", ---@alias receiveDamageDuringAmputationParams { limbName : string} - ReceiveExecuteAmputationAction = "ReceiveExecuteAmputationAction" ---@alias receiveExecuteAmputationActionParams {surgeonNum : number, limbName : string} + ReceiveExecuteAmputationAction = "ReceiveExecuteAmputationAction", ---@alias receiveExecuteAmputationActionParams {surgeonNum : number, limbName : string} + + --* ADMIN ONLY --* + ReceiveExecuteInitialization = "ReceiveExecuteInitialization" + } } @@ -23,8 +27,11 @@ CommandsData.server = { Relay = { RelayDamageDuringAmputation = "RelayDamageDuringAmputation", ---@alias relayDamageDuringAmputationParams {patientNum : number, limbName : string} - RelayExecuteAmputationAction = "RelayExecuteAmputationAction" ---@alias relayExecuteAmputationActionParams {patientNum : number, limbName : string} + RelayExecuteAmputationAction = "RelayExecuteAmputationAction", ---@alias relayExecuteAmputationActionParams {patientNum : number, limbName : string} + + --* ADMIN ONLY *-- + RelayExecuteInitialization = "RelayExecuteInitialization" ---@alias relayExecuteInitializationParams {patientNum : number} } } diff --git a/media/lua/shared/Translate/EN/ContextMenu_EN.txt b/media/lua/shared/Translate/EN/ContextMenu_EN.txt index 299fc54..60af7c3 100644 --- a/media/lua/shared/Translate/EN/ContextMenu_EN.txt +++ b/media/lua/shared/Translate/EN/ContextMenu_EN.txt @@ -23,5 +23,11 @@ ContextMenu_EN = { ContextMenu_CleanWound = "Clean Wound", + + + + ContextMenu_Admin_TOC = "TOC - Admin", + ContextMenu_Admin_ResetTOC = "Reset Amputations", + ContextMenu_Admin_ForceAmputation = "Force Amputation", }