Moved event to PlayerHandler

This commit is contained in:
ZioPao
2023-11-13 18:23:39 +01:00
parent 3bc4ce471f
commit 6f17b428bc
3 changed files with 40 additions and 61 deletions

View File

@@ -42,6 +42,7 @@ end
--* Main methods *--
---Damage the player part during the amputation process
function AmputationHandler:damageDuringAmputation()
local bodyDamage = self.patientPl:getBodyDamage()
local bodyDamagePart = bodyDamage:getBodyPart(self.bodyPartType)
@@ -52,32 +53,35 @@ function AmputationHandler:damageDuringAmputation()
bodyDamagePart:setBleedingTime(ZombRand(10, 20))
end
---Set the damage to the amputated area
---@param surgeonFactor number
function AmputationHandler:damageAfterAmputation(surgeonFactor)
local patientStats = self.patientPl:getStats()
local bd = self.patientPl:getBodyDamage()
local bodyPart = bd:getBodyPart(self.bodyPartType)
local baseDamage = StaticData.LIMBS_BASE_DAMAGE[self.limbName]
bodyPart:AddDamage(baseDamage - surgeonFactor)
bodyPart:setAdditionalPain(baseDamage - surgeonFactor)
bodyPart:setBleeding(true)
bodyPart:setBleedingTime(baseDamage - surgeonFactor)
bodyPart:setDeepWounded(true)
bodyPart:setDeepWoundTime(baseDamage - surgeonFactor)
patientStats:setEndurance(surgeonFactor)
patientStats:setStress(baseDamage - surgeonFactor)
end
---Execute the amputation
---@param damagePlayer boolean?
---@param damagePlayer boolean
function AmputationHandler:execute(damagePlayer)
-- TODO Calculate surgeonStats
-- TODO Cap it to a certain amount, it shouldn't be more than ...?
local surgeonFactor = 1
if damagePlayer == nil then damagePlayer = true end -- Default at true
if damagePlayer then
local patientStats = self.patientPl:getStats()
local bd = self.patientPl:getBodyDamage()
local bodyPart = bd:getBodyPart(self.bodyPartType)
local baseDamage = StaticData.LIMBS_BASE_DAMAGE[self.limbName]
-- Set the bleeding and all the damage stuff in that part
bodyPart:AddDamage(baseDamage - surgeonFactor)
bodyPart:setAdditionalPain(baseDamage - surgeonFactor)
bodyPart:setBleeding(true)
bodyPart:setBleedingTime(baseDamage - surgeonFactor)
bodyPart:setDeepWounded(true)
bodyPart:setDeepWoundTime(baseDamage - surgeonFactor)
patientStats:setEndurance(surgeonFactor)
patientStats:setStress(baseDamage - surgeonFactor)
self:damageAfterAmputation(surgeonFactor)
end
-- Set the data in modData
local modDataHandler = ModDataHandler.GetInstance()
modDataHandler:setCutLimb(self.limbName, false, false, false, surgeonFactor)
@@ -98,12 +102,4 @@ function AmputationHandler:close()
AmputationHandler.instance = nil
end
--* Events *--
---Updates the cicatrization process, run when a limb has been cut
function AmputationHandler.UpdateCicatrization()
if ModDataHandler.GetInstance():getIsAnyLimbCut() == false then return end
-- TODO Update cicatrization
end
return AmputationHandler

View File

@@ -4,7 +4,7 @@ local CachedDataHandler = require("TOC/Handlers/CachedDataHandler")
local StaticData = require("TOC/StaticData")
-----------
-- TODO THIS SHOULD BE LOCAL ONLY! WE'RE MANAGING EVENTS AND INITIALIZATION STUFF! MOVE ONLINE STUFF AWAY!
-- THIS SHOULD BE LOCAL ONLY! WE'RE MANAGING EVENTS AND INITIALIZATION STUFF!
-- LIST OF STUFF THAT THIS CLASS NEEDS TO DO
-- Keep track of cut limbs so that we don't have to loop through all of them all the time
@@ -53,35 +53,7 @@ function PlayerHandler.ManageTraits(playerObj)
end
end
-- ---Cycle through all the limbs and caches the ones that the player cut off
-- ---@param username string
-- function PlayerHandler.CacheAmputatedLimbs(username)
-- PlayerHandler.amputatedLimbs[username] = {}
-- local modDataHandler = ModDataHandler.GetInstance(username)
-- for i=1, #StaticData.LIMBS_STRINGS do
-- local limbName = StaticData.LIMBS_STRINGS[i]
-- if modDataHandler:getIsCut(limbName) then
-- PlayerHandler.AddLocalAmputatedLimb(username, limbName)
-- end
-- end
-- end
-- ---Cache the currently amputated limbs
-- ---@param limbName string
-- function PlayerHandler.AddLocalAmputatedLimb(username, limbName)
-- TOC_DEBUG.print("added " .. limbName .. " to known amputated limbs for " .. username)
-- table.insert(PlayerHandler.amputatedLimbs[username], limbName) -- TODO This should be player specific, not generic
-- end
-- --* Getters *--
-- ---Get a table with the strings of the cached amputated limbs
-- ---@return table
-- function PlayerHandler.GetAmputatedLimbs()
-- return PlayerHandler.amputatedLimbs or {}
-- end
-------------------------
--* Events *--
---Check if the player has an infected (as in, zombie infection) body part
@@ -122,6 +94,16 @@ end
Events.OnPlayerGetDamage.Add(PlayerHandler.CheckInfection)
--* Events *--
---Updates the cicatrization process, run when a limb has been cut
function PlayerHandler.UpdateCicatrization()
if ModDataHandler.GetInstance():getIsAnyLimbCut() == false then return end
-- TODO Update cicatrization
end
--* Overrides *--
local og_ISBaseTimedAction_adjustMaxTime = ISBaseTimedAction.adjustMaxTime
@@ -163,5 +145,6 @@ function ISBaseTimedAction:perform()
end
end
-- TODO Limit 2 hands weapons and stuff like that
return PlayerHandler