Better handling of items in containers

This commit is contained in:
ZioPao
2023-11-10 12:37:38 +01:00
parent 7424f45ae3
commit 7813d242e8
5 changed files with 85 additions and 30 deletions

View File

@@ -1,12 +1,12 @@
local ModDataHandler = require("Handlers/TOC_ModDataHandler")
local AmputationHandler = require("Handlers/TOC_AmputationHandler")
local ItemsHandler = require("Handlers/TOC_ItemsHandler")
local CommonMethods = require("TOC_Common")
local StaticData = require("TOC_StaticData")
-----------
-- TODO We should instantiate this anyway if we want to keep track of cut limbs here. Doing so, we would be able to handle other players too
-- 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
-- Update current player status (infection checks)
-- handle stats increase\decrease
@@ -24,9 +24,20 @@ function PlayerHandler.InitializePlayer(_, playerObj, isForced)
PlayerHandler.modDataHandler:setup(isForced)
PlayerHandler.playerObj = playerObj
-- Calculate amputated limbs at startup
PlayerHandler.amputatedLimbs = {}
for i=1, #StaticData.LIMBS_STRINGS do
local limbName = StaticData.LIMBS_STRINGS[i]
if PlayerHandler.modDataHandler:getIsCut(limbName) then
PlayerHandler.AddLocalAmputatedLimb(limbName)
end
end
-- Since isForced is used to reset an existing player data, we're gonna clean their ISHealthPanel table too
if isForced then
ISHealthPanel.highestAmputations = {}
local ItemsHandler = require("Handlers/TOC_ItemsHandler")
ItemsHandler.DeleteAllOldAmputationItems(playerObj)
end
end
@@ -34,11 +45,12 @@ end
---Handles the traits
---@param playerObj IsoPlayer
function PlayerHandler.ManageTraits(playerObj)
local AmputationHandler = require("Handlers/TOC_AmputationHandler")
for k, v in pairs(StaticData.TRAITS_BP) do
if playerObj:HasTrait(k) then
-- Once we find one, we should be done.
local tempHandler = AmputationHandler:new(v)
tempHandler:executeForTrait()
tempHandler:execute(false) -- No damage
tempHandler:close()
return
end
@@ -46,6 +58,18 @@ function PlayerHandler.ManageTraits(playerObj)
end
---Cache the currently amputated limbs
---@param limbName string
function PlayerHandler.AddLocalAmputatedLimb(limbName)
print("TOC: added " .. limbName .. " to known amputated limbs")
table.insert(PlayerHandler.amputatedLimbs, limbName)
end
--* Getters *--
function PlayerHandler.GetAmputatedLimbs()
return PlayerHandler.amputatedLimbs or {}
end
--* Events *--
---Check if the player has an infected (as in, zombie infection) body part
@@ -100,20 +124,21 @@ function PlayerHandler.UpdatePerks(player)
end
end
Events.OnPlayerUpdate.Add(PlayerHandler.UpdatePerks)
--Events.OnPlayerUpdate.Add(PlayerHandler.UpdatePerks)
--* Some overrides *--
local og_ISBaseTimedAction_adjustMaxTime = ISBaseTimedAction.adjustMaxTime
--- Adjust time
function ISBaseTimedAction:adjustMaxTime(maxTime)
local time = og_ISBaseTimedAction_adjustMaxTime(self, maxTime)
local modDataHandler = ModDataHandler.GetInstance()
if time ~= -1 and modDataHandler and modDataHandler:getIsAnyLimbCut() then
local pl = getPlayer()
for i=1, #StaticData.LIMBS_STRINGS do
local limbName = StaticData.LIMBS_STRINGS[i]
for i=1, #PlayerHandler.amputatedLimbs do
local limbName = PlayerHandler.amputatedLimbs[i]
if modDataHandler:getIsCut(limbName) then
local perk = Perks["Side_" .. CommonMethods.GetSide(limbName)]
local perkLevel = pl:getPerkLevel(perk)
@@ -127,6 +152,7 @@ function ISBaseTimedAction:adjustMaxTime(maxTime)
end
local og_ISBaseTimedAction_perform = ISBaseTimedAction.perform
--- After each action, level up perks
function ISBaseTimedAction:perform()
og_ISBaseTimedAction_perform(self)
@@ -142,7 +168,4 @@ end
return PlayerHandler