diff --git a/media/lua/client/TOC/Handlers/AmputationHandler.lua b/media/lua/client/TOC/Handlers/AmputationHandler.lua index fea4d21..0b551b9 100644 --- a/media/lua/client/TOC/Handlers/AmputationHandler.lua +++ b/media/lua/client/TOC/Handlers/AmputationHandler.lua @@ -5,13 +5,6 @@ local PlayerHandler = require("TOC/Handlers/PlayerHandler") local StaticData = require("TOC/StaticData") --------------------------- ---Triggered when a limb has been amputated ----@class Events ----@field OnAmputatedLimb any -LuaEventManager.AddEvent("OnAmputatedLimb") - --------------- - -- TODO Add Bandages, Torniquet, etc. --- Manages an amputation. Will be run on the patient client ---@class AmputationHandler @@ -111,13 +104,17 @@ function AmputationHandler:damageDuringAmputation() bodyDamagePart:setBleedingTime(ZombRand(10, 20)) end ----Set the damage to the amputated area +---Set the damage to the adjacent part of the cut area ---@param surgeonFactor number function AmputationHandler:damageAfterAmputation(surgeonFactor) -- TODO Torniquet should reduce the damage in total, less blood loss + + TOC_DEBUG.print("Applying damage after amputation") local patientStats = self.patientPl:getStats() local bd = self.patientPl:getBodyDamage() - local bodyPart = bd:getBodyPart(self.bodyPartType) + + local adjacentLimb = StaticData.LIMBS_ADJACENT_IND_STR[self.limbName] + local bodyPart = bd:getBodyPart(BodyPartType[adjacentLimb]) local baseDamage = StaticData.LIMBS_BASE_DAMAGE_IND_NUM[self.limbName] bodyPart:AddDamage(baseDamage - surgeonFactor) diff --git a/media/lua/client/TOC/Handlers/PlayerHandler.lua b/media/lua/client/TOC/Handlers/PlayerHandler.lua index 3437df9..5f0a509 100644 --- a/media/lua/client/TOC/Handlers/PlayerHandler.lua +++ b/media/lua/client/TOC/Handlers/PlayerHandler.lua @@ -29,10 +29,8 @@ function PlayerHandler.InitializePlayer(playerObj, isForced) CachedDataHandler.CalculateAmputatedLimbs(username) CachedDataHandler.CalculateHighestAmputatedLimbs(username) - -- TODO Check if there are cut limbs and that needs cicatrization. If yes, then enable the loop - if ModDataHandler.GetInstance(username):getIsAnyLimbCut() then - CommonMethods.SafeStartEvent("EveryHours", PlayerHandler.UpdateCicatrization) - end + --Setup the CicatrizationUpdate event + Events.OnAmputatedLimb.Add(PlayerHandler.ToggleCicatrizationUpdate) -- Since isForced is used to reset an existing player data, we're gonna clean their ISHealthPanel table too if isForced then @@ -120,6 +118,7 @@ function PlayerHandler.CheckDamage(character, damageType, damageAmount) if modDataHandler:getIsCut(limbName) then -- Generic injury, let's heal it since they already cut the limb off + --FIXME conflicts with the other thing... Ah fuck wait I'm retarded if bodyPart:HasInjury() then PlayerHandler.HealArea(bodyPart) end @@ -171,10 +170,12 @@ function PlayerHandler.UpdateCicatrization() if not isCicatrized then needsUpdate = true local cicTime = modDataHandler:getCicatrizationTime(limbName) + TOC_DEBUG.print("updating cicatrization for " .. tostring(limbName)) if cicTime > 0 then cicTime = cicTime - 60 -- 1 per minute, each cicatrizationTime is divisible by 60 modDataHandler:setCicatrizationTime(limbName, cicTime) + TOC_DEBUG.print("new cicatrization time: " .. tostring(cicTime)) if cicTime < 0 then modDataHandler:setIsCicatrized(limbName, true) end @@ -193,12 +194,10 @@ end ---Starts safely the loop to update cicatrzation function PlayerHandler.ToggleCicatrizationUpdate() + TOC_DEBUG.print("activating cicatrization loop (if it wasn't active before)") CommonMethods.SafeStartEvent("EveryHours", PlayerHandler.UpdateCicatrization) end -Events.OnAmputatedLimb.Add(PlayerHandler.ToggleCicatrizationUpdate) - - ------------------------------------------ --* OVERRIDES *-- diff --git a/media/lua/client/TOC/Main.lua b/media/lua/client/TOC/Main.lua index e5b6a06..db60214 100644 --- a/media/lua/client/TOC/Main.lua +++ b/media/lua/client/TOC/Main.lua @@ -2,6 +2,7 @@ local PlayerHandler = require("TOC/Handlers/PlayerHandler") local CommonMethods = require("TOC/CommonMethods") ------------------ + ---@class Main local Main = {} @@ -37,12 +38,17 @@ end function Main.Start() TOC_DEBUG.print("running Start method") Main.SetupTraits() - + Main.SetupEvents() -- Starts initialization for local client Events.OnGameStart.Add(Main.Initialize) end +function Main.SetupEvents() + --Triggered when a limb has been amputated + LuaEventManager.AddEvent("OnAmputatedLimb") +end + function Main.Initialize() ---Looop until we've successfully initialized the mod diff --git a/media/lua/shared/TOC/StaticData.lua b/media/lua/shared/TOC/StaticData.lua index 16f15b4..032e7ab 100644 --- a/media/lua/shared/TOC/StaticData.lua +++ b/media/lua/shared/TOC/StaticData.lua @@ -50,6 +50,7 @@ StaticData.IGNORED_BODYLOCS_BPT = { StaticData.LIMBS_STR = {} StaticData.LIMBS_IND_STR = {} StaticData.LIMBS_DEPENDENCIES_IND_STR = {} +StaticData.LIMBS_ADJACENT_IND_STR = {} StaticData.LIMBS_CICATRIZATION_TIME_IND_NUM = {} StaticData.LIMBS_BASE_DAMAGE_IND_NUM = {} StaticData.LIMBS_TIME_MULTIPLIER_IND_NUM = {} @@ -57,26 +58,35 @@ StaticData.BODYLOCS_IND_BPT = {} -- CicatrizationBaseTime should be mod 60 since we're using EveryHours to update the cicatrizationTime -local function AssembleHandData(assembledName) +---@param assembledName string +---@param side string +local function AssembleHandData(assembledName, side) StaticData.LIMBS_BASE_DAMAGE_IND_NUM[assembledName] = 60 StaticData.LIMBS_CICATRIZATION_TIME_IND_NUM[assembledName] = 1200 StaticData.LIMBS_TIME_MULTIPLIER_IND_NUM[assembledName] = 2 StaticData.LIMBS_DEPENDENCIES_IND_STR[assembledName] = {} + StaticData.LIMBS_ADJACENT_IND_STR[assembledName] = StaticData.PARTS_IND_STR.ForeArm .. "_" .. side end +---@param assembledName string +---@param side string local function AssembleForearmData(assembledName, side) StaticData.LIMBS_BASE_DAMAGE_IND_NUM[assembledName] = 80 StaticData.LIMBS_CICATRIZATION_TIME_IND_NUM[assembledName] = 1800 StaticData.LIMBS_TIME_MULTIPLIER_IND_NUM[assembledName] = 3 StaticData.LIMBS_DEPENDENCIES_IND_STR[assembledName] = { StaticData.PARTS_IND_STR.Hand .. "_" .. side } + StaticData.LIMBS_ADJACENT_IND_STR[assembledName] = StaticData.PARTS_IND_STR.UpperArm .. "_" .. side end +---@param assembledName string +---@param side string local function AssembleUpperarmData(assembledName, side) StaticData.LIMBS_BASE_DAMAGE_IND_NUM[assembledName] = 100 StaticData.LIMBS_CICATRIZATION_TIME_IND_NUM[assembledName] = 1800 StaticData.LIMBS_TIME_MULTIPLIER_IND_NUM[assembledName] = 4 StaticData.LIMBS_DEPENDENCIES_IND_STR[assembledName] = { StaticData.PARTS_IND_STR.Hand .. "_" .. side, StaticData.PARTS_IND_STR.ForeArm .. "_" .. side } + StaticData.LIMBS_ADJACENT_IND_STR[assembledName] = "Torso_Upper" end for side, _ in pairs(StaticData.SIDES_IND_STR) do @@ -90,7 +100,7 @@ for side, _ in pairs(StaticData.SIDES_IND_STR) do -- Dependencies and cicatrization time if part == StaticData.PARTS_IND_STR.Hand then - AssembleHandData(assembledName) + AssembleHandData(assembledName, side) elseif part == StaticData.PARTS_IND_STR.ForeArm then AssembleForearmData(assembledName, side) elseif part == StaticData.PARTS_IND_STR.UpperArm then