Files
The-Only-Cure/42/media/lua/client/TOC/ClientRelayCommands.lua
2026-01-31 17:32:28 +01:00

85 lines
3.0 KiB
Lua

local CommandsData = require("TOC/CommandsData")
local AmputationHandler = require("TOC/Handlers/AmputationHandler")
local DataController = require("TOC/Controllers/DataController")
--------------------------------------------
local ClientRelayCommands = {}
---Initialize Amputation Handler
---@param limbName any
---@param surgeonNum any
---@return AmputationHandler
local function InitAmputationHandler(limbName, surgeonNum)
-- TODO Pretty unclean
local surgeonPl = getSpecificPlayer(surgeonNum) -- fix broken, getOnlineID not working anymore
local handler = AmputationHandler:new(limbName, surgeonPl)
return handler
end
---Receive the damage from another player during the amputation
---@param args receiveDamageDuringAmputationParams
function ClientRelayCommands.ReceiveDamageDuringAmputation(args)
AmputationHandler.ApplyDamageDuringAmputation(getPlayer(), args.limbName)
end
---Creates a new handler and execute the amputation function on this client
---@param args receiveExecuteAmputationActionParams
function ClientRelayCommands.ReceiveExecuteAmputationAction(args)
-- Check if player already doesn't have that limb or it's a dependant limb.
-- Mostly a check for admin forced amputations more than anything else, since this case is handled in the GUI already.
local dcInst = DataController.GetInstance()
if dcInst:getIsCut(args.limbName) then return end
local handler = InitAmputationHandler(args.limbName, args.surgeonNum)
handler:execute(args.damagePlayer)
end
--* APPLY RELAY *--
function ClientRelayCommands.ReceiveApplyFromServer()
TOC_DEBUG.print("Received forced re-apply from server")
local key = CommandsData.GetKey(getPlayer():getUsername())
ModData.request(key)
end
--* WEAR AMPUTATION ITEM *--
function ClientRelayCommands.ReceiveWearAmputation(args)
local itemName = args.itemName
local clothingItem = getPlayer():getInventory():FindAndReturn(itemName)
getPlayer():setWornItem(clothingItem:getBodyLocation(), clothingItem)
end
--* TRIGGERED BY ADMINS *--
function ClientRelayCommands.ReceiveExecuteInitialization()
local LocalPlayerController = require("TOC/Controllers/LocalPlayerController")
LocalPlayerController.InitializePlayer(true)
end
---Creates a new handler and execute the amputation function on this client
---@param args receiveForcedCicatrizationParams
function ClientRelayCommands.ReceiveForcedCicatrization(args)
local dcInst = DataController.GetInstance()
--dcInst:setCicatrizationTime(args.limbName, 1)
dcInst:setIsCicatrized(args.limbName, true)
dcInst:apply()
end
-------------------------
local function OnServerRelayCommand(module, command, args)
if module == CommandsData.modules.TOC_RELAY and ClientRelayCommands[command] then
TOC_DEBUG.print("Received Server Relay command - " .. tostring(command))
ClientRelayCommands[command](args)
end
end
Events.OnServerCommand.Add(OnServerRelayCommand)
-- TODO temporary
return ClientRelayCommands