From 8fde83c049f5bbc3c6553282f66c4a07c6c5aabb Mon Sep 17 00:00:00 2001 From: ZioPao Date: Mon, 13 Nov 2023 11:06:43 +0100 Subject: [PATCH] Fix for the Bob stuff --- .../client/TOC/Handlers/AmputationHandler.lua | 5 ++++- .../client/TOC/Handlers/CachedDataHandler.lua | 17 ++++++++++++--- .../client/TOC/Handlers/ModDataHandler.lua | 14 +++++++++++-- .../lua/client/TOC/Handlers/PlayerHandler.lua | 5 ++++- media/lua/client/TOC/Main.lua | 17 +++++++++++++-- media/lua/client/TOC/UI/HealthPanel.lua | 21 ++++++++++++------- 6 files changed, 62 insertions(+), 17 deletions(-) diff --git a/media/lua/client/TOC/Handlers/AmputationHandler.lua b/media/lua/client/TOC/Handlers/AmputationHandler.lua index b9c1c22..31f6cee 100644 --- a/media/lua/client/TOC/Handlers/AmputationHandler.lua +++ b/media/lua/client/TOC/Handlers/AmputationHandler.lua @@ -88,8 +88,11 @@ function AmputationHandler:execute(damagePlayer) else -- TODO Send server command to manage items and spawn on another player end + -- Add it to the list of cut limbs on this local client - CachedDataHandler.AddAmputatedLimb(self.patientPl:getUsername(), self.limbName) + local username = self.patientPl:getUsername() + CachedDataHandler.AddAmputatedLimb(username, self.limbName) + CachedDataHandler.CalculateHighestAmputatedLimbs(username) end ---Deletes the instance diff --git a/media/lua/client/TOC/Handlers/CachedDataHandler.lua b/media/lua/client/TOC/Handlers/CachedDataHandler.lua index 598b151..bdc29cc 100644 --- a/media/lua/client/TOC/Handlers/CachedDataHandler.lua +++ b/media/lua/client/TOC/Handlers/CachedDataHandler.lua @@ -6,6 +6,12 @@ local CommonMethods = require("TOC/CommonMethods") ---@class CachedDataHandler local CachedDataHandler = {} +---comment +---@param username string +function CachedDataHandler.Reset(username) + CachedDataHandler.amputatedLimbs[username] = {} + CachedDataHandler.highestAmputatedLimbs[username] = {} +end --* Amputated Limbs caching *-- CachedDataHandler.amputatedLimbs = {} @@ -13,6 +19,7 @@ CachedDataHandler.amputatedLimbs = {} ---Calcualte the currently amputated limbs for a certain player ---@param username string function CachedDataHandler.CalculateAmputatedLimbs(username) + CachedDataHandler.amputatedLimbs[username] = {} local modDataHandler = ModDataHandler.GetInstance(username) for i=1, #StaticData.LIMBS_STRINGS do local limbName = StaticData.LIMBS_STRINGS[i] @@ -44,14 +51,18 @@ CachedDataHandler.highestAmputatedLimbs = {} ---@param username string function CachedDataHandler.CalculateHighestAmputatedLimbs(username) if CachedDataHandler.amputatedLimbs == nil or CachedDataHandler.amputatedLimbs[username] == nil then + --- This function gets ran pretty early, we need to account for the Bob stuff + if username == "Bob" then + TOC_DEBUG.print("skip, Bob is default char") + return + end + TOC_DEBUG.print("Amputated limbs weren't calculated. Trying to calculate them now for " .. username) CachedDataHandler.CalculateAmputatedLimbs(username) - return end - local amputatedLimbs = CachedDataHandler.amputatedLimbs[username] CachedDataHandler.highestAmputatedLimbs[username] = {} - TOC_DEBUG.print("Searching highest amputations for " .. username) + --TOC_DEBUG.print("Searching highest amputations for " .. username) local modDataHandler = ModDataHandler.GetInstance(username) if modDataHandler == nil then TOC_DEBUG.print("ModDataHandler not found for " .. username) diff --git a/media/lua/client/TOC/Handlers/ModDataHandler.lua b/media/lua/client/TOC/Handlers/ModDataHandler.lua index 1d55b67..c0b9ddf 100644 --- a/media/lua/client/TOC/Handlers/ModDataHandler.lua +++ b/media/lua/client/TOC/Handlers/ModDataHandler.lua @@ -17,7 +17,8 @@ function ModDataHandler:new(username, isResetForced) local o = {} setmetatable(o, self) self.__index = self - o.username = username + + o.username = username local key = CommandsData.GetKey(username) ModData.request(key) @@ -27,6 +28,9 @@ function ModDataHandler:new(username, isResetForced) TOC_DEBUG.print("tocData in ModDataHandler for " .. username .. " is nil, creating it now") self:setup(key) end + + TOC_DEBUG.print("initialized ModDataHandler for " .. username) + -- Transmit it to the server ModData.transmit(key) @@ -175,6 +179,12 @@ function ModDataHandler:apply() end function ModDataHandler.ReceiveData(key, table) + if not isClient() then + TOC_DEBUG.print("SP, skipping ModDataHandler.ReceiveData") + end + + if key == "TOC_Bob" then return end -- TODO Fix this + TOC_DEBUG.print("receive data for " .. key) if table == {} or table == nil then TOC_DEBUG.print("table is nil... returning") @@ -191,7 +201,7 @@ Events.OnReceiveGlobalModData.Add(ModDataHandler.ReceiveData) ---@param username string? ---@return ModDataHandler function ModDataHandler.GetInstance(username) - if username == nil then + if username == nil or username == "Bob" then username = getPlayer():getUsername() end diff --git a/media/lua/client/TOC/Handlers/PlayerHandler.lua b/media/lua/client/TOC/Handlers/PlayerHandler.lua index 976fe7f..3213816 100644 --- a/media/lua/client/TOC/Handlers/PlayerHandler.lua +++ b/media/lua/client/TOC/Handlers/PlayerHandler.lua @@ -21,17 +21,20 @@ local PlayerHandler = {} function PlayerHandler.InitializePlayer(playerObj, isForced) local username = playerObj:getUsername() TOC_DEBUG.print("initializing local player: " .. username) + ModDataHandler:new(username, isForced) PlayerHandler.playerObj = playerObj - -- Calculate amputated limbs at startup + -- Calculate amputated limbs and highest point of amputations at startup CachedDataHandler.CalculateAmputatedLimbs(username) + CachedDataHandler.CalculateHighestAmputatedLimbs(username) -- 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("TOC/Handlers/ItemsHandler") ItemsHandler.DeleteAllOldAmputationItems(playerObj) + CachedDataHandler.Reset(username) end end diff --git a/media/lua/client/TOC/Main.lua b/media/lua/client/TOC/Main.lua index 7352b8f..c4fc077 100644 --- a/media/lua/client/TOC/Main.lua +++ b/media/lua/client/TOC/Main.lua @@ -34,6 +34,7 @@ function Main.SetupTraits() end function Main.Start() + TOC_DEBUG.print("running Start method") Main.SetupTraits() -- Starts initialization for local client @@ -42,8 +43,20 @@ function Main.Start() end function Main.Initialize() - local pl = getPlayer() - PlayerHandler.InitializePlayer(pl, false) + + local function TryToInitialize() + local pl = getPlayer() + TOC_DEBUG.print("Current username in TryToInitialize: " .. pl:getUsername()) + if pl:getUsername() == "Bob" then + TOC_DEBUG.print("Username is still Bob, waiting") + return + end + + PlayerHandler.InitializePlayer(pl, false) + Events.OnTick.Remove(TryToInitialize) + end + + Events.OnTick.Add(TryToInitialize) end diff --git a/media/lua/client/TOC/UI/HealthPanel.lua b/media/lua/client/TOC/UI/HealthPanel.lua index d747178..d76146f 100644 --- a/media/lua/client/TOC/UI/HealthPanel.lua +++ b/media/lua/client/TOC/UI/HealthPanel.lua @@ -49,7 +49,9 @@ function ISHealthPanel:initialise() self.sexPl = "Male" end - self.highestAmputations = CachedDataHandler.GetAmputatedLimbs(self.character:getUsername()) + local username = self.character:getUsername() + CachedDataHandler.CalculateHighestAmputatedLimbs(username) + self.highestAmputations = CachedDataHandler.GetHighestAmputatedLimbs(username) og_ISHealthPanel_initialise(self) end @@ -57,18 +59,19 @@ local og_ISHealthPanel_setOtherPlayer = ISHealthPanel.setOtherPlayer ---@param playerObj IsoPlayer function ISHealthPanel:setOtherPlayer(playerObj) og_ISHealthPanel_setOtherPlayer(self, playerObj) - - -- Since setOtherPlayer may be run after initialise (or always), we need to recheck it after. - self:setHighestAmputation() - - -- TODO Request from server! + --CachedDataHandler.CalculateAmputatedLimbs(self.character:getUsername()) end local og_ISHealthPanel_render = ISHealthPanel.render function ISHealthPanel:render() og_ISHealthPanel_render(self) - if self.highestAmputations ~= nil then + local username = self.character:getUsername() + + --CachedDataHandler.CalculateHighestAmputatedLimbs(username) + self.highestAmputations = CachedDataHandler.GetHighestAmputatedLimbs(username) + + if self.highestAmputations ~= nil then -- Left Texture if self.highestAmputations["L"] then local textureL = StaticData.HEALTH_PANEL_TEXTURES[self.sexPl][self.highestAmputations["L"]] @@ -81,7 +84,9 @@ function ISHealthPanel:render() self:drawTexture(textureR, self.healthPanel.x/2 + 2, self.healthPanel.y/2, 1, 1, 0, 0) end else - self:setHighestAmputation() + -- Request caching data + TOC_DEBUG.print("highest amputated limbs was nil, calculating and getting it now for" .. username) + CachedDataHandler.CalculateHighestAmputatedLimbs(username) end end