Moved event to PlayerHandler
This commit is contained in:
@@ -42,6 +42,7 @@ end
|
|||||||
|
|
||||||
--* Main methods *--
|
--* Main methods *--
|
||||||
|
|
||||||
|
---Damage the player part during the amputation process
|
||||||
function AmputationHandler:damageDuringAmputation()
|
function AmputationHandler:damageDuringAmputation()
|
||||||
local bodyDamage = self.patientPl:getBodyDamage()
|
local bodyDamage = self.patientPl:getBodyDamage()
|
||||||
local bodyDamagePart = bodyDamage:getBodyPart(self.bodyPartType)
|
local bodyDamagePart = bodyDamage:getBodyPart(self.bodyPartType)
|
||||||
@@ -52,32 +53,35 @@ function AmputationHandler:damageDuringAmputation()
|
|||||||
bodyDamagePart:setBleedingTime(ZombRand(10, 20))
|
bodyDamagePart:setBleedingTime(ZombRand(10, 20))
|
||||||
end
|
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
|
---Execute the amputation
|
||||||
---@param damagePlayer boolean?
|
---@param damagePlayer boolean
|
||||||
function AmputationHandler:execute(damagePlayer)
|
function AmputationHandler:execute(damagePlayer)
|
||||||
|
|
||||||
-- TODO Calculate surgeonStats
|
-- TODO Calculate surgeonStats
|
||||||
-- TODO Cap it to a certain amount, it shouldn't be more than ...?
|
-- TODO Cap it to a certain amount, it shouldn't be more than ...?
|
||||||
local surgeonFactor = 1
|
local surgeonFactor = 1
|
||||||
if damagePlayer == nil then damagePlayer = true end -- Default at true
|
|
||||||
if damagePlayer then
|
if damagePlayer then
|
||||||
local patientStats = self.patientPl:getStats()
|
self:damageAfterAmputation(surgeonFactor)
|
||||||
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)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- Set the data in modData
|
-- Set the data in modData
|
||||||
local modDataHandler = ModDataHandler.GetInstance()
|
local modDataHandler = ModDataHandler.GetInstance()
|
||||||
modDataHandler:setCutLimb(self.limbName, false, false, false, surgeonFactor)
|
modDataHandler:setCutLimb(self.limbName, false, false, false, surgeonFactor)
|
||||||
@@ -98,12 +102,4 @@ function AmputationHandler:close()
|
|||||||
AmputationHandler.instance = nil
|
AmputationHandler.instance = nil
|
||||||
end
|
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
|
return AmputationHandler
|
||||||
@@ -4,7 +4,7 @@ local CachedDataHandler = require("TOC/Handlers/CachedDataHandler")
|
|||||||
local StaticData = require("TOC/StaticData")
|
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
|
-- 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
|
-- 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
|
||||||
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 *--
|
--* Events *--
|
||||||
|
|
||||||
---Check if the player has an infected (as in, zombie infection) body part
|
---Check if the player has an infected (as in, zombie infection) body part
|
||||||
@@ -122,6 +94,16 @@ end
|
|||||||
Events.OnPlayerGetDamage.Add(PlayerHandler.CheckInfection)
|
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 *--
|
--* Overrides *--
|
||||||
|
|
||||||
local og_ISBaseTimedAction_adjustMaxTime = ISBaseTimedAction.adjustMaxTime
|
local og_ISBaseTimedAction_adjustMaxTime = ISBaseTimedAction.adjustMaxTime
|
||||||
@@ -163,5 +145,6 @@ function ISBaseTimedAction:perform()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- TODO Limit 2 hands weapons and stuff like that
|
||||||
|
|
||||||
return PlayerHandler
|
return PlayerHandler
|
||||||
@@ -46,37 +46,37 @@ TestFramework.registerTestModule("Functionality", "Amputation", function()
|
|||||||
|
|
||||||
function Tests.CutLeftHand()
|
function Tests.CutLeftHand()
|
||||||
local handler = AmputationHandler:new("Hand_L")
|
local handler = AmputationHandler:new("Hand_L")
|
||||||
handler:execute()
|
handler:execute(true)
|
||||||
TestUtils.assert(ModDataHandler.GetInstance():getIsCut("Hand_L"))
|
TestUtils.assert(ModDataHandler.GetInstance():getIsCut("Hand_L"))
|
||||||
end
|
end
|
||||||
|
|
||||||
function Tests.CutLeftForearm()
|
function Tests.CutLeftForearm()
|
||||||
local handler = AmputationHandler:new("ForeArm_L")
|
local handler = AmputationHandler:new("ForeArm_L")
|
||||||
handler:execute()
|
handler:execute(true)
|
||||||
TestUtils.assert(ModDataHandler.GetInstance():getIsCut("ForeArm_L") and ModDataHandler.GetInstance():getIsCut("Hand_L"))
|
TestUtils.assert(ModDataHandler.GetInstance():getIsCut("ForeArm_L") and ModDataHandler.GetInstance():getIsCut("Hand_L"))
|
||||||
end
|
end
|
||||||
|
|
||||||
function Tests.CutLeftUpperarm()
|
function Tests.CutLeftUpperarm()
|
||||||
local handler = AmputationHandler:new("UpperArm_L")
|
local handler = AmputationHandler:new("UpperArm_L")
|
||||||
handler:execute()
|
handler:execute(true)
|
||||||
TestUtils.assert(ModDataHandler.GetInstance():getIsCut("UpperArm_L") and ModDataHandler.GetInstance():getIsCut("ForeArm_L") and ModDataHandler.GetInstance():getIsCut("Hand_L"))
|
TestUtils.assert(ModDataHandler.GetInstance():getIsCut("UpperArm_L") and ModDataHandler.GetInstance():getIsCut("ForeArm_L") and ModDataHandler.GetInstance():getIsCut("Hand_L"))
|
||||||
end
|
end
|
||||||
|
|
||||||
function Tests.CutRightHand()
|
function Tests.CutRightHand()
|
||||||
local handler = AmputationHandler:new("Hand_R")
|
local handler = AmputationHandler:new("Hand_R")
|
||||||
handler:execute()
|
handler:execute(true)
|
||||||
TestUtils.assert(ModDataHandler.GetInstance():getIsCut("Hand_R"))
|
TestUtils.assert(ModDataHandler.GetInstance():getIsCut("Hand_R"))
|
||||||
end
|
end
|
||||||
|
|
||||||
function Tests.CutRightForearm()
|
function Tests.CutRightForearm()
|
||||||
local handler = AmputationHandler:new("ForeArm_R")
|
local handler = AmputationHandler:new("ForeArm_R")
|
||||||
handler:execute()
|
handler:execute(true)
|
||||||
TestUtils.assert(ModDataHandler.GetInstance():getIsCut("ForeArm_R") and ModDataHandler.GetInstance():getIsCut("Hand_R"))
|
TestUtils.assert(ModDataHandler.GetInstance():getIsCut("ForeArm_R") and ModDataHandler.GetInstance():getIsCut("Hand_R"))
|
||||||
end
|
end
|
||||||
|
|
||||||
function Tests.CutRightUpperarm()
|
function Tests.CutRightUpperarm()
|
||||||
local handler = AmputationHandler:new("UpperArm_R")
|
local handler = AmputationHandler:new("UpperArm_R")
|
||||||
handler:execute()
|
handler:execute(true)
|
||||||
TestUtils.assert(ModDataHandler.GetInstance():getIsCut("UpperArm_R") and ModDataHandler.GetInstance():getIsCut("ForeArm_R") and ModDataHandler.GetInstance():getIsCut("Hand_R"))
|
TestUtils.assert(ModDataHandler.GetInstance():getIsCut("UpperArm_R") and ModDataHandler.GetInstance():getIsCut("ForeArm_R") and ModDataHandler.GetInstance():getIsCut("Hand_R"))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user