diff --git a/media/lua/client/TOC/Controllers/LocalPlayerController.lua b/media/lua/client/TOC/Controllers/LocalPlayerController.lua index cd25533..1109085 100644 --- a/media/lua/client/TOC/Controllers/LocalPlayerController.lua +++ b/media/lua/client/TOC/Controllers/LocalPlayerController.lua @@ -69,6 +69,12 @@ end ---Used to heal an area that has been cut previously. There's an exception for bites, those are managed differently ---@param bodyPart BodyPart function LocalPlayerController.HealArea(bodyPart) + + bodyPart:setFractureTime(0) + + bodyPart:setScratched(false, true) + bodyPart:setScratchTime(0) + bodyPart:setBleeding(false) bodyPart:setBleedingTime(0) @@ -149,12 +155,13 @@ function LocalPlayerController.HandleDamage(character) -- Generic injury, let's heal it since they already cut the limb off if bodyPart:HasInjury() then + TOC_DEBUG.print("Healing area - " .. limbName) LocalPlayerController.HealArea(bodyPart) end -- Special case for bites\zombie infections if bodyPart:IsInfected() then - TOC_DEBUG.print("Healed from zombie infection " .. tostring(bodyPart)) + TOC_DEBUG.print("Healed from zombie infection - " .. limbName) LocalPlayerController.HealZombieInfection(bd, bodyPart, limbName, dcInst) end else @@ -233,7 +240,7 @@ function LocalPlayerController.UpdateAmputations() -- We need to get the BloodBodyPartType to find out how dirty the zone is local bbptEnum = BloodBodyPartType[limbName] local modifier = 0.01 * SandboxVars.TOC.WoundDirtynessMultiplier - + local dirtynessVis = visual:getDirt(bbptEnum) + visual:getBlood(bbptEnum) local dirtynessWound = dcInst:getWoundDirtyness(limbName) + modifier diff --git a/media/lua/client/TOC/TimedActions/CleanWoundAction.lua b/media/lua/client/TOC/TimedActions/CleanWoundAction.lua index f15275f..d445e04 100644 --- a/media/lua/client/TOC/TimedActions/CleanWoundAction.lua +++ b/media/lua/client/TOC/TimedActions/CleanWoundAction.lua @@ -91,9 +91,9 @@ function CleanWoundAction:perform() self.bodyPart:setAdditionalPain(self.bodyPart:getAdditionalPain() + addPain) self.bandage:Use() - local limbName = CommonMethods.GetLimbNameFromBodyPart(self.bodyPart) + -- TOC Data handling - -- TODO CHeck if correct in MP + local limbName = CommonMethods.GetLimbNameFromBodyPart(self.bodyPart) local dcInst = DataController.GetInstance(self.otherPlayer:getUsername()) local currentWoundDirtyness = dcInst:getWoundDirtyness(limbName) @@ -102,6 +102,7 @@ function CleanWoundAction:perform() dcInst:setWoundDirtyness(limbName, newWoundDirtyness) + dcInst:apply() -- Clean visual local bbptEnum = BloodBodyPartType[limbName] diff --git a/media/lua/client/TOC/UI/HealthPanel.lua b/media/lua/client/TOC/UI/HealthPanel.lua index 4d78229..49d4951 100644 --- a/media/lua/client/TOC/UI/HealthPanel.lua +++ b/media/lua/client/TOC/UI/HealthPanel.lua @@ -49,7 +49,12 @@ function ISHealthPanel:doBodyPartContextMenu(bodyPart, x, y) local playerNum = self.otherPlayer and self.otherPlayer:getPlayerNum() or self.character:getPlayerNum() -- To not recreate it but reuse the one that has been created in the original method + + -- TODO This will work ONLY when an addOption has been already done in the og method. local context = getPlayerContextMenu(playerNum) + context:bringToTop() + context:setVisible(true) + local cutLimbInteraction = CutLimbInteractionHandler:new(self, bodyPart) self:checkItems({cutLimbInteraction}) @@ -222,7 +227,7 @@ function ISHealthPanel:getDamagedParts() local limbName = StaticData.LIMBS_IND_STR[bodyPartTypeStr] 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 (mdh:getIsCut(limbName) and mdh:getIsVisible(limbName)) then - table.insert(result, bodyPart) + table.insert(result, bodyPart) end end return result diff --git a/media/lua/client/TOC/UI/Interactions/HealthPanelBaseHandler.lua b/media/lua/client/TOC/UI/Interactions/HealthPanelBaseHandler.lua index 4578371..ecfcb8a 100644 --- a/media/lua/client/TOC/UI/Interactions/HealthPanelBaseHandler.lua +++ b/media/lua/client/TOC/UI/Interactions/HealthPanelBaseHandler.lua @@ -20,6 +20,7 @@ function BaseHandler:new(panel, bodyPart) end function BaseHandler:isInjured() + TOC_DEBUG.print("Running isInjured") local bodyPart = self.bodyPart return (bodyPart:HasInjury() or bodyPart:stitched() or bodyPart:getSplintFactor() > 0) and not bodyPart:bandaged() end diff --git a/media/lua/client/TOC/UI/Interactions/WoundCleaningInteractionHandler.lua b/media/lua/client/TOC/UI/Interactions/WoundCleaningInteractionHandler.lua index f0e6eb9..192dba7 100644 --- a/media/lua/client/TOC/UI/Interactions/WoundCleaningInteractionHandler.lua +++ b/media/lua/client/TOC/UI/Interactions/WoundCleaningInteractionHandler.lua @@ -37,22 +37,22 @@ function WoundCleaningInteractionHandler:addToMenu(context) --TOC_DEBUG.print("WoundCleaningInteraction addToMenu") local types = self:getAllItemTypes(self.items.ITEMS) if #types > 0 and self:isValid() then - --TOC_DEBUG.print("WoundCleaningInteraction inside addToMenu") + TOC_DEBUG.print("WoundCleaningInteraction inside addToMenu") local option = context:addOption(getText("ContextMenu_CleanWound"), nil) local subMenu = context:getNew(context) context:addSubMenu(option, subMenu) for i=1, #types do local item = self:getItemOfType(self.items.ITEMS, types[i]) - --TOC_DEBUG.print(item:getName()) subMenu:addOption(item:getName(), self, self.onMenuOptionSelected, item:getFullType()) + TOC_DEBUG.print(item:getName()) + end end end function WoundCleaningInteractionHandler:dropItems(items) local types = self:getAllItemTypes(items) - if #self.items.ITEMS > 0 and #types == 1 and self:isInjured() and self.bodyPart:isNeedBurnWash() then - -- FIXME: A bandage can be used to clean a burn or bandage it + if #self.items.ITEMS > 0 and #types == 1 and self:isActionValid() then self:onMenuOptionSelected(types[1]) return true end @@ -60,18 +60,16 @@ function WoundCleaningInteractionHandler:dropItems(items) end function WoundCleaningInteractionHandler:isValid() - -- TODO Check if cut and not cicatrized and dirty + self:checkItems() + return self:isActionValid() +end - -- todo get username +function WoundCleaningInteractionHandler:isActionValid() if self.limbName == nil then return false end - local dcInst = DataController.GetInstance(self.username) - - --and dcInst:getWoundDirtyness(self.limbName) > 0.1 local check = dcInst:getIsCut(self.limbName) and not dcInst:getIsCicatrized(self.limbName) and dcInst:getWoundDirtyness(self.limbName) > 0 --TOC_DEBUG.print("WoundCleaningInteraction isValid: " .. tostring(check)) return check - --return self:getItemOfType(self.items.ITEMS, itemType) end function WoundCleaningInteractionHandler:perform(previousAction, itemType)