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