Fix for the Bob stuff

This commit is contained in:
ZioPao
2023-11-13 11:06:43 +01:00
parent 328d3c4d3a
commit 8fde83c049
6 changed files with 62 additions and 17 deletions

View File

@@ -88,8 +88,11 @@ function AmputationHandler:execute(damagePlayer)
else else
-- TODO Send server command to manage items and spawn on another player -- TODO Send server command to manage items and spawn on another player
end end
-- Add it to the list of cut limbs on this local client -- 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 end
---Deletes the instance ---Deletes the instance

View File

@@ -6,6 +6,12 @@ local CommonMethods = require("TOC/CommonMethods")
---@class CachedDataHandler ---@class CachedDataHandler
local CachedDataHandler = {} local CachedDataHandler = {}
---comment
---@param username string
function CachedDataHandler.Reset(username)
CachedDataHandler.amputatedLimbs[username] = {}
CachedDataHandler.highestAmputatedLimbs[username] = {}
end
--* Amputated Limbs caching *-- --* Amputated Limbs caching *--
CachedDataHandler.amputatedLimbs = {} CachedDataHandler.amputatedLimbs = {}
@@ -13,6 +19,7 @@ CachedDataHandler.amputatedLimbs = {}
---Calcualte the currently amputated limbs for a certain player ---Calcualte the currently amputated limbs for a certain player
---@param username string ---@param username string
function CachedDataHandler.CalculateAmputatedLimbs(username) function CachedDataHandler.CalculateAmputatedLimbs(username)
CachedDataHandler.amputatedLimbs[username] = {}
local modDataHandler = ModDataHandler.GetInstance(username) local modDataHandler = ModDataHandler.GetInstance(username)
for i=1, #StaticData.LIMBS_STRINGS do for i=1, #StaticData.LIMBS_STRINGS do
local limbName = StaticData.LIMBS_STRINGS[i] local limbName = StaticData.LIMBS_STRINGS[i]
@@ -44,14 +51,18 @@ CachedDataHandler.highestAmputatedLimbs = {}
---@param username string ---@param username string
function CachedDataHandler.CalculateHighestAmputatedLimbs(username) function CachedDataHandler.CalculateHighestAmputatedLimbs(username)
if CachedDataHandler.amputatedLimbs == nil or CachedDataHandler.amputatedLimbs[username] == nil then 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) TOC_DEBUG.print("Amputated limbs weren't calculated. Trying to calculate them now for " .. username)
CachedDataHandler.CalculateAmputatedLimbs(username) CachedDataHandler.CalculateAmputatedLimbs(username)
return
end end
local amputatedLimbs = CachedDataHandler.amputatedLimbs[username] local amputatedLimbs = CachedDataHandler.amputatedLimbs[username]
CachedDataHandler.highestAmputatedLimbs[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) local modDataHandler = ModDataHandler.GetInstance(username)
if modDataHandler == nil then if modDataHandler == nil then
TOC_DEBUG.print("ModDataHandler not found for " .. username) TOC_DEBUG.print("ModDataHandler not found for " .. username)

View File

@@ -17,6 +17,7 @@ function ModDataHandler:new(username, isResetForced)
local o = {} local o = {}
setmetatable(o, self) setmetatable(o, self)
self.__index = self self.__index = self
o.username = username o.username = username
local key = CommandsData.GetKey(username) local key = CommandsData.GetKey(username)
@@ -27,6 +28,9 @@ function ModDataHandler:new(username, isResetForced)
TOC_DEBUG.print("tocData in ModDataHandler for " .. username .. " is nil, creating it now") TOC_DEBUG.print("tocData in ModDataHandler for " .. username .. " is nil, creating it now")
self:setup(key) self:setup(key)
end end
TOC_DEBUG.print("initialized ModDataHandler for " .. username)
-- Transmit it to the server -- Transmit it to the server
ModData.transmit(key) ModData.transmit(key)
@@ -175,6 +179,12 @@ function ModDataHandler:apply()
end end
function ModDataHandler.ReceiveData(key, table) 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) TOC_DEBUG.print("receive data for " .. key)
if table == {} or table == nil then if table == {} or table == nil then
TOC_DEBUG.print("table is nil... returning") TOC_DEBUG.print("table is nil... returning")
@@ -191,7 +201,7 @@ Events.OnReceiveGlobalModData.Add(ModDataHandler.ReceiveData)
---@param username string? ---@param username string?
---@return ModDataHandler ---@return ModDataHandler
function ModDataHandler.GetInstance(username) function ModDataHandler.GetInstance(username)
if username == nil then if username == nil or username == "Bob" then
username = getPlayer():getUsername() username = getPlayer():getUsername()
end end

View File

@@ -21,17 +21,20 @@ local PlayerHandler = {}
function PlayerHandler.InitializePlayer(playerObj, isForced) function PlayerHandler.InitializePlayer(playerObj, isForced)
local username = playerObj:getUsername() local username = playerObj:getUsername()
TOC_DEBUG.print("initializing local player: " .. username) TOC_DEBUG.print("initializing local player: " .. username)
ModDataHandler:new(username, isForced) ModDataHandler:new(username, isForced)
PlayerHandler.playerObj = playerObj PlayerHandler.playerObj = playerObj
-- Calculate amputated limbs at startup -- Calculate amputated limbs and highest point of amputations at startup
CachedDataHandler.CalculateAmputatedLimbs(username) CachedDataHandler.CalculateAmputatedLimbs(username)
CachedDataHandler.CalculateHighestAmputatedLimbs(username)
-- 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
--ISHealthPanel.highestAmputations = {} --ISHealthPanel.highestAmputations = {}
local ItemsHandler = require("TOC/Handlers/ItemsHandler") local ItemsHandler = require("TOC/Handlers/ItemsHandler")
ItemsHandler.DeleteAllOldAmputationItems(playerObj) ItemsHandler.DeleteAllOldAmputationItems(playerObj)
CachedDataHandler.Reset(username)
end end
end end

View File

@@ -34,6 +34,7 @@ function Main.SetupTraits()
end end
function Main.Start() function Main.Start()
TOC_DEBUG.print("running Start method")
Main.SetupTraits() Main.SetupTraits()
-- Starts initialization for local client -- Starts initialization for local client
@@ -42,8 +43,20 @@ function Main.Start()
end end
function Main.Initialize() 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 end

View File

@@ -49,7 +49,9 @@ function ISHealthPanel:initialise()
self.sexPl = "Male" self.sexPl = "Male"
end 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) og_ISHealthPanel_initialise(self)
end end
@@ -57,18 +59,19 @@ local og_ISHealthPanel_setOtherPlayer = ISHealthPanel.setOtherPlayer
---@param playerObj IsoPlayer ---@param playerObj IsoPlayer
function ISHealthPanel:setOtherPlayer(playerObj) function ISHealthPanel:setOtherPlayer(playerObj)
og_ISHealthPanel_setOtherPlayer(self, playerObj) og_ISHealthPanel_setOtherPlayer(self, playerObj)
--CachedDataHandler.CalculateAmputatedLimbs(self.character:getUsername())
-- Since setOtherPlayer may be run after initialise (or always), we need to recheck it after.
self:setHighestAmputation()
-- TODO Request from server!
end end
local og_ISHealthPanel_render = ISHealthPanel.render local og_ISHealthPanel_render = ISHealthPanel.render
function ISHealthPanel:render() function ISHealthPanel:render()
og_ISHealthPanel_render(self) 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 -- Left Texture
if self.highestAmputations["L"] then if self.highestAmputations["L"] then
local textureL = StaticData.HEALTH_PANEL_TEXTURES[self.sexPl][self.highestAmputations["L"]] 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) self:drawTexture(textureR, self.healthPanel.x/2 + 2, self.healthPanel.y/2, 1, 1, 0, 0)
end end
else 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
end end