diff --git a/README.md b/README.md index 70d8367..3a1e799 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,6 @@ Wait until you succumb to the virus or take matters into your hands. Cut off tha This version of **The Only Cure** has been rebuilt from scratch to support future additions and to feel as close as possible as a vanilla mechanic. -**The older version will be delisted shortly and it will not be supported anymore.** - Supports **Single Player** and **Multiplayer**! # Setup diff --git a/media/lua/client/TOC/Controllers/DataController.lua b/media/lua/client/TOC/Controllers/DataController.lua index e996b7f..7dde5bd 100644 --- a/media/lua/client/TOC/Controllers/DataController.lua +++ b/media/lua/client/TOC/Controllers/DataController.lua @@ -416,6 +416,7 @@ function DataController.ReceiveData(key, data) handler:setIsResetForced(false) handler:setIsDataReady(true) + --TOC_DEBUG.print("Finished ReceiveData, triggering OnReceivedTocData") triggerEvent("OnReceivedTocData", handler.username) -- TODO We need an event to track if initialization has been finalized diff --git a/media/lua/client/TOC/Controllers/LimitActionsController.lua b/media/lua/client/TOC/Controllers/LimitActionsController.lua index a5fb74b..b65153d 100644 --- a/media/lua/client/TOC/Controllers/LimitActionsController.lua +++ b/media/lua/client/TOC/Controllers/LimitActionsController.lua @@ -42,6 +42,7 @@ function ISBaseTimedAction:adjustMaxTime(maxTime) -- Action is valid, check if we have any cut limb and then modify maxTime local dcInst = DataController.GetInstance() if time ~= -1 and dcInst and dcInst:getIsAnyLimbCut() then + --TOC_DEBUG.print("Overriding adjustMaxTime") local pl = getPlayer() local amputatedLimbs = CachedDataHandler.GetAmputatedLimbs(pl:getUsername()) @@ -60,11 +61,10 @@ function ISBaseTimedAction:adjustMaxTime(maxTime) if perkLevel ~= 0 then perkLevelScaled = perkLevel / 10 else perkLevelScaled = 0 end time = time * (StaticData.LIMBS_TIME_MULTIPLIER_IND_NUM[limbName] - perkLevelScaled) end + end - if actionsQueue and actionsQueue.current then - TOC_DEBUG.print("OG Action: " .. tostring(actionsQueue.current.Type)) - end - TOC_DEBUG.print("New time with amputations: " .. tostring(time)) + + --TOC_DEBUG.print("New time with amputations: " .. tostring(time)) return time end @@ -122,6 +122,10 @@ function ISEquipWeaponAction:isValid() local isPrimaryHandValid = CachedDataHandler.GetHandFeasibility(StaticData.SIDES_IND_STR.R) local isSecondaryHandValid = CachedDataHandler.GetHandFeasibility(StaticData.SIDES_IND_STR.L) -- Both hands are cut off, so it's impossible to equip in any way + + --TOC_DEBUG.print("isPrimaryHandValid : " .. tostring(isPrimaryHandValid)) + --TOC_DEBUG.print("isSecondaryHandValid : " .. tostring(isSecondaryHandValid)) + if not isPrimaryHandValid and not isSecondaryHandValid then isValid = false end diff --git a/media/lua/client/TOC/Handlers/CachedDataHandler.lua b/media/lua/client/TOC/Handlers/CachedDataHandler.lua index 8e1c6ec..c8a5b0d 100644 --- a/media/lua/client/TOC/Handlers/CachedDataHandler.lua +++ b/media/lua/client/TOC/Handlers/CachedDataHandler.lua @@ -22,8 +22,6 @@ end ---Will calculate all the values that we need function CachedDataHandler.CalculateCacheableValues(username) CachedDataHandler.CalculateHighestAmputatedLimbs(username) - - -- FIX This should be run ONLY on the actual client, never on other clients. Just a placeholder fix for now if getPlayer():getUsername() == username then CachedDataHandler.CalculateBothHandsFeasibility() end @@ -31,7 +29,6 @@ end - --* Amputated Limbs caching *-- CachedDataHandler.amputatedLimbs = {} @@ -120,12 +117,22 @@ CachedDataHandler.handFeasibility = {} function CachedDataHandler.CalculateHandFeasibility(limbName) local dcInst = DataController.GetInstance() local side = CommonMethods.GetSide(limbName) + + -- TODO if we re run this too early, it might break everything after a forced re-init + CachedDataHandler.handFeasibility[side] = not dcInst:getIsCut(limbName) or dcInst:getIsProstEquipped(limbName) + TOC_DEBUG.print("Calculated hand feasibility: " .. tostring(side)) end ---@param side string Either "L" or "R" ---@return boolean function CachedDataHandler.GetHandFeasibility(side) + + -- FIX horrendous workaround, but with a forced init we run the caching too early and it breaks this, setting it to nil. + if CachedDataHandler.handFeasibility[side] == nil then + CachedDataHandler.CalculateBothHandsFeasibility() + end + return CachedDataHandler.handFeasibility[side] end diff --git a/media/lua/client/TOC/Handlers/ProsthesisHandler.lua b/media/lua/client/TOC/Handlers/ProsthesisHandler.lua index edd1f23..b4f84e8 100644 --- a/media/lua/client/TOC/Handlers/ProsthesisHandler.lua +++ b/media/lua/client/TOC/Handlers/ProsthesisHandler.lua @@ -168,7 +168,11 @@ function ISUnequipAction:perform() local highestAmputatedLimbs = CachedDataHandler.GetHighestAmputatedLimbs(getPlayer():getUsername()) if highestAmputatedLimbs then local hal = highestAmputatedLimbs[side] - triggerEvent("OnProsthesisUnequipped", hal) + if hal then + -- This could break if amputated limbs aren't cached for some reason + triggerEvent("OnProsthesisUnequipped", hal) + end + end end end diff --git a/media/lua/client/TOC/TimedActions/IgnoredActions.lua b/media/lua/client/TOC/TimedActions/IgnoredActions.lua index 6fb660c..ace71a1 100644 --- a/media/lua/client/TOC/TimedActions/IgnoredActions.lua +++ b/media/lua/client/TOC/TimedActions/IgnoredActions.lua @@ -43,7 +43,14 @@ end local og_ISUnequipAction_new = ISUnequipAction.new function ISUnequipAction:new(character, item, time) local action = og_ISUnequipAction_new(self, character, item, time) - HandleSpeedSpecificAction(action) + ---@cast item InventoryItem + + -- For some reason (I have no clue why), if we re-run the method it breaks basically every unequip clothing action. Not for weapons though. + if instanceof(item, 'HandWeapon') then + --print("Running handlespeedspecificaction") + HandleSpeedSpecificAction(action) + end + return action end diff --git a/workshop_files/workshop.txt b/workshop_files/workshop.txt index 7007c58..f2da156 100644 --- a/workshop_files/workshop.txt +++ b/workshop_files/workshop.txt @@ -159,7 +159,7 @@ description= [/tr] description= [tr] -description= [th]JCloudJalix, Rinary1, pllq, ttaeo[/th] +description= [th]JCloudJalix, Rinary1, pllq, ttaeo, pgmbru[/th] description= [th]Translations[/th]