diff --git a/media/lua/client/TOC/Handlers/CachedDataHandler.lua b/media/lua/client/TOC/Handlers/CachedDataHandler.lua index b3f1060..9cf469f 100644 --- a/media/lua/client/TOC/Handlers/CachedDataHandler.lua +++ b/media/lua/client/TOC/Handlers/CachedDataHandler.lua @@ -15,7 +15,6 @@ end --* Amputated Limbs caching *-- CachedDataHandler.amputatedLimbs = {} --- TODO Add an indexable table too! ---Calculate the currently amputated limbs for a certain player ---@param username string @@ -37,10 +36,7 @@ function CachedDataHandler.AddAmputatedLimb(username, limbName) TOC_DEBUG.print("added " .. limbName .. " to known amputated limbs for " .. username) -- Add it to the generic list - -- TODO this is wrong - CachedDataHandler.amputatedLimbs[username][limbName] = limbName - --table.insert(CachedDataHandler.amputatedLimbs[username], limbName) end ---Returns a table containing the cached amputated limbs diff --git a/media/lua/client/TOC/Handlers/ModDataHandler.lua b/media/lua/client/TOC/Handlers/ModDataHandler.lua index 7320766..f2221ca 100644 --- a/media/lua/client/TOC/Handlers/ModDataHandler.lua +++ b/media/lua/client/TOC/Handlers/ModDataHandler.lua @@ -178,7 +178,11 @@ end ---@param limbName string ---@return boolean function ModDataHandler:getIsCut(limbName) - return self.tocData.limbs[limbName].isCut + if self.tocData.limbs[limbName] then + return self.tocData.limbs[limbName].isCut + else + return false + end end ---Get isVisible @@ -246,14 +250,14 @@ function ModDataHandler:setCutLimb(limbName, isOperated, isCicatrized, isCauteri -- We don't care about isOperated, isCicatrized, isCauterized since this is depending on another limb -- Same story for cicatrizationTime, which will be 0 - -- isCicatized is to true to prevent it from doing the cicatrization process + -- isCicatrized is to true to prevent it from doing the cicatrization process self:setLimbParams(dependedLimbName, {isCut = true, isInfected = false, isVisible = false, isCicatrized = true}, 0) end -- Set that a limb has been cut, to activate some functions without having to loop through the parts self:setIsAnyLimbCut(true) - -- TODO IN theory we should cache data from here, not AMputationHandler + -- TODO In theory we should cache data from here, not AmputationHandler end ---Set a limb data diff --git a/media/lua/client/TOC/UI/HealthPanel.lua b/media/lua/client/TOC/UI/HealthPanel.lua index d6d4a07..94d1c98 100644 --- a/media/lua/client/TOC/UI/HealthPanel.lua +++ b/media/lua/client/TOC/UI/HealthPanel.lua @@ -172,7 +172,6 @@ function ISHealthBodyPartListBox:doDrawItem(y, item, alt) local x = 15 local fontHgt = getTextManager():getFontHeight(UIFont.Small) - -- TODO Get username of the correct player local username = self.parent.character:getUsername() --local amputatedLimbs = CachedDataHandler.GetIndexedAmputatedLimbs(username) @@ -184,13 +183,22 @@ function ISHealthBodyPartListBox:doDrawItem(y, item, alt) if limbName then local modDataHandler = ModDataHandler.GetInstance(username) if modDataHandler:getIsCut(limbName) and modDataHandler:getIsVisible(limbName) then - local cicaTime = modDataHandler:getCicatrizationTime(limbName) - -- Show it in percentage - local maxCicaTime = StaticData.LIMBS_CICATRIZATION_TIME_IND_NUM[limbName] - local percentage = (1 - cicaTime/maxCicaTime) * 100 + if modDataHandler:getIsCicatrized(limbName) then + if modDataHandler:getIsCauterized(limbName) then + self:drawText("- " .. getText("IGUI_HealthPanel_Cauterized"), x, y, 0.58, 0.75, 0.28, 1, UIFont.Small) + else + self:drawText("- " .. getText("IGUI_HealthPanel_Cicatrized"), x, y, 0.28, 0.89, 0.28, 1, UIFont.Small) + end + + else + local cicaTime = modDataHandler:getCicatrizationTime(limbName) - self:drawText("- " .. string.format("Cicatrization %.2f", percentage) .. "%", x, y, 0.89, 0.28, 0.28, 1, UIFont.Small) + -- Show it in percentage + local maxCicaTime = StaticData.LIMBS_CICATRIZATION_TIME_IND_NUM[limbName] + local percentage = (1 - cicaTime/maxCicaTime) * 100 + self:drawText("- " .. getText("IGUI_HealthPanel_Cicatrization") .. string.format(" %.2f", percentage) .. "%", x, y, 0.89, 0.28, 0.28, 1, UIFont.Small) + end y = y + fontHgt end @@ -199,4 +207,39 @@ function ISHealthBodyPartListBox:doDrawItem(y, item, alt) y = y + 5 return y +end + +local og_ISHealthPanel_getDamagedParts = ISHealthPanel.getDamagedParts +function ISHealthPanel:getDamagedParts() + + -- TODO Overriding it is a lot easier, but ew + -- local result = og_ISHealthPanel_getDamagedParts(self) + -- local bodyParts = self:getPatient():getBodyDamage():getBodyParts() + -- if isClient() and not self:getPatient():isLocalPlayer() then + -- bodyParts = self:getPatient():getBodyDamageRemote():getBodyParts() + -- end + -- for i=1,bodyParts:size() do + -- local bodyPart = bodyParts:get(i-1) + -- table.insert(result, bodyPart) + + -- end + + + -- return result + local result = {} + local bodyParts = self:getPatient():getBodyDamage():getBodyParts() + if isClient() and not self:getPatient():isLocalPlayer() then + bodyParts = self:getPatient():getBodyDamageRemote():getBodyParts() + end + for i=1,bodyParts:size() do + local bodyPart = bodyParts:get(i-1) + local bodyPartTypeStr = BodyPartType.ToString(bodyPart:getType()) + local limbName = StaticData.LIMBS_IND_STR[bodyPartTypeStr] + + local bodyPartAction = self.bodyPartAction and self.bodyPartAction[bodyPart] + if ISHealthPanel.cheat or bodyPart:HasInjury() or bodyPart:bandaged() or bodyPart:stitched() or bodyPart:getSplintFactor() > 0 or bodyPart:getAdditionalPain() > 10 or bodyPart:getStiffness() > 5 or ModDataHandler.GetInstance(self:getPatient():getUsername()):getIsCut(limbName) then + table.insert(result, bodyPart) + end + end + return result end \ No newline at end of file diff --git a/media/lua/client/TOC/UI/SurgeryInteractions.lua b/media/lua/client/TOC/UI/SurgeryInteractions.lua index 525a314..faeb0ca 100644 --- a/media/lua/client/TOC/UI/SurgeryInteractions.lua +++ b/media/lua/client/TOC/UI/SurgeryInteractions.lua @@ -1,4 +1,5 @@ local CachedDataHandler = require("TOC/Handlers/CachedDataHandler") +local StaticData = require("TOC/StaticData") local ModDataHandler = require("TOC/Handlers/ModDataHandler") --------------- @@ -15,11 +16,17 @@ Events.OnFillInventoryObjectContextMenu.Add(AddInventorySurgeryMenu) -- TODO We need a class to handle operations, this is just a placeholder local function Cauterize(limbName) - + local modDataHandler = ModDataHandler.GetInstance() + modDataHandler:setCicatrizationTime(limbName, 0) + modDataHandler:setIsCicatrized(limbName, true) + modDataHandler:setIsCauterized(limbName, true) + + -- we don't care bout the depended limbs, since they're alread "cicatrized" + + modDataHandler:apply() end ----comment ----@param playerNum any +---@param playerNum number ---@param context ISContextMenu ---@param worldObjects any ---@param test any @@ -28,7 +35,8 @@ local function AddOvenContextMenu(playerNum, context, worldObjects, test) local pl = getSpecificPlayer(playerNum) - if not ModDataHandler.GetInstance():getIsAnyLimbCut() then return end + local modDataHandler = ModDataHandler.GetInstance() + if not modDataHandler:getIsAnyLimbCut() then return end local amputatedLimbs = CachedDataHandler.GetAmputatedLimbs(pl:getUsername()) local stoveObj = nil @@ -51,12 +59,17 @@ local function AddOvenContextMenu(playerNum, context, worldObjects, test) local subMenu = context:getNew(context) context:addSubMenu(optionMain, subMenu) for k, _ in pairs(amputatedLimbs) do + + -- We need to let the player cauterize ONLY the visible one! local limbName = k - local option = subMenu:addOption(getText("ContextMenu_Limb_" .. limbName), limbName, Cauterize) - option.notAvailable = isTempLow - if isTempLow then - option.toolTip = tempTooltip + if modDataHandler:getIsVisible(limbName) then + local option = subMenu:addOption(getText("ContextMenu_Limb_" .. limbName), limbName, Cauterize) + option.notAvailable = isTempLow + if isTempLow then + option.toolTip = tempTooltip + end end + end end diff --git a/media/lua/shared/Translate/EN/ContextMenu_EN.txt b/media/lua/shared/Translate/EN/ContextMenu_EN.txt index 8c8af0e..30a46f9 100644 --- a/media/lua/shared/Translate/EN/ContextMenu_EN.txt +++ b/media/lua/shared/Translate/EN/ContextMenu_EN.txt @@ -8,10 +8,10 @@ ContextMenu_EN = { ContextMenu_Cauterize_TempTooLow_tooltip = "Temperature too low", ContextMenu_Limb_Hand_L = "Left Hand", - ContextMenu_Limb_ForeArm_L = "Left forearm", + ContextMenu_Limb_ForeArm_L = "Left Forearm", ContextMenu_Limb_UpperArm_L = "Left UpperArm" ContextMenu_Limb_Hand_R = "Right Hand", - ContextMenu_Limb_ForeArm_R = "Right forearm", + ContextMenu_Limb_ForeArm_R = "Right Forearm", ContextMenu_Limb_UpperArm_R = "Right UpperArm" diff --git a/media/lua/shared/Translate/EN/IG_UI_EN.txt b/media/lua/shared/Translate/EN/IG_UI_EN.txt index c22ef25..06e9daf 100644 --- a/media/lua/shared/Translate/EN/IG_UI_EN.txt +++ b/media/lua/shared/Translate/EN/IG_UI_EN.txt @@ -7,4 +7,9 @@ IG_UI_EN = { IGUI_ItemCat_Prosthesis = "Prosthesis", IGUI_ItemCat_Amputation = "Amputation" + + IGUI_HealthPanel_Cicatrization = "Cicatrization", + IGUI_HealthPanel_Cicatrized = "Cicatrized", + IGUI_HealthPanel_Cauterized = "Cauterized", + } \ No newline at end of file