From 482fffbdd009fdd079c5e8e268029f8d7f46315e Mon Sep 17 00:00:00 2001 From: ZioPao Date: Wed, 10 Jan 2024 22:15:06 +0100 Subject: [PATCH] Added CauteirzeAction and sounds --- .../TOC/TimedActions/CauterizeAction.lua | 85 +++++++++++++ .../client/TOC/TimedActions/CutLimbAction.lua | 8 +- .../client/TOC/TimedActions/SurgeryAction.lua | 1 - .../lua/client/TOC/UI/SurgeryInteractions.lua | 114 ++++++++++-------- .../shared/Translate/EN/ContextMenu_EN.txt | 1 - media/lua/shared/Translate/EN/Tooltip_EN.txt | 9 +- media/scripts/TOC_sounds.txt | 15 ++- media/sound/{Cut_sound.ogg => Amputation.ogg} | Bin media/sound/Cauterization.ogg | Bin 0 -> 31596 bytes 9 files changed, 168 insertions(+), 65 deletions(-) create mode 100644 media/lua/client/TOC/TimedActions/CauterizeAction.lua delete mode 100644 media/lua/client/TOC/TimedActions/SurgeryAction.lua rename media/sound/{Cut_sound.ogg => Amputation.ogg} (100%) create mode 100644 media/sound/Cauterization.ogg diff --git a/media/lua/client/TOC/TimedActions/CauterizeAction.lua b/media/lua/client/TOC/TimedActions/CauterizeAction.lua new file mode 100644 index 0000000..506c7bc --- /dev/null +++ b/media/lua/client/TOC/TimedActions/CauterizeAction.lua @@ -0,0 +1,85 @@ +require "TimedActions/ISBaseTimedAction" +local DataController = require("TOC/Controllers/DataController") +--------------- + +---@class CauterizeAction : ISBaseTimedAction +---@field character IsoPlayer +---@field ovenObj IsoObject +---@field limbName string +local CauterizeAction = ISBaseTimedAction:derive("CauterizeAction") + +---@param character IsoPlayer +---@param stoveObj IsoObject +---@param limbName string +---@return CauterizeAction +function CauterizeAction:new(character, limbName, stoveObj) + local o = {} + setmetatable(o, self) + self.__index = self + + -- We need to follow ISBaseTimedAction. self.character is gonna be the surgeon + o.character = character + o.ovenObj = stoveObj + o.limbName = limbName + + o.stopOnWalk = true + o.stopOnRun = true + + -- Max time depends on the strength + o.maxTime = 100 + if o.character:isTimedActionInstant() then o.maxTime = 1 end + + return o +end + +function CauterizeAction:isValid() + return not ISHealthPanel.DidPatientMove(self.character, self.character, self.character:getX(), self.character:getY()) +end + +function CauterizeAction:waitToStart() + self.character:faceThisObject(self.ovenObj) + return self.character:shouldBeTurning() +end + +function CauterizeAction:start() + self:setActionAnim("Loot") -- TODO Better anim pls + + -- Setup audio + self.sound = self.character:getEmitter():playSound("Cauterization") + local radius = 5 + addSound(self.character, self.character:getX(), self.character:getY(), self.character:getZ(), radius, radius) +end + +function CauterizeAction:update() + self.character:setMetabolicTarget(Metabolics.HeavyWork) +end + +function CauterizeAction:stopSound() + if self.sound then + self.character:getEmitter():stopSound(self.sound) + self.sound = nil + end +end + +function CauterizeAction:stop() + self:stopSound() + ISBaseTimedAction.stop(self) +end + +function CauterizeAction:perform() + -- Stop the sound + self:stopSound() + + local dcInst = DataController.GetInstance() + dcInst:setCicatrizationTime(self.limbName, 0) + dcInst:setIsCicatrized(self.limbName, true) + dcInst:setIsCauterized(self.limbName, true) + + -- we don't care about the depended limbs, since they're alread "cicatrized" + + dcInst:apply() + + ISBaseTimedAction.perform(self) +end + +return CauterizeAction \ No newline at end of file diff --git a/media/lua/client/TOC/TimedActions/CutLimbAction.lua b/media/lua/client/TOC/TimedActions/CutLimbAction.lua index d9f41b0..4cdcb8b 100644 --- a/media/lua/client/TOC/TimedActions/CutLimbAction.lua +++ b/media/lua/client/TOC/TimedActions/CutLimbAction.lua @@ -78,7 +78,7 @@ function CutLimbAction:start() self:setOverrideHandModels(self.item:getStaticModel()) -- Setup audio - self.sound = self.character:getEmitter():playSound("Amputation_Sound") + self.sound = self.character:getEmitter():playSound("Amputation") local radius = 5 addSound(self.character, self.character:getX(), self.character:getY(), self.character:getZ(), radius, radius) @@ -94,13 +94,9 @@ end function CutLimbAction:update() self.character:setMetabolicTarget(Metabolics.HeavyWork) - - -- TODO Apply it too on the patient! check if it works online - -- TODO Add sound if self.character ~= self.patient then self.patient:setMetabolicTarget(Metabolics.HeavyWork) end - end function CutLimbAction:stopSound() @@ -116,7 +112,6 @@ function CutLimbAction:stop() end function CutLimbAction:perform() - -- Stop the sound self:stopSound() @@ -132,7 +127,6 @@ function CutLimbAction:perform() sendClientCommand(CommandsData.modules.TOC_RELAY, CommandsData.server.Relay.RelayExecuteAmputationAction, params ) end - ISBaseTimedAction.perform(self) end diff --git a/media/lua/client/TOC/TimedActions/SurgeryAction.lua b/media/lua/client/TOC/TimedActions/SurgeryAction.lua deleted file mode 100644 index 893272c..0000000 --- a/media/lua/client/TOC/TimedActions/SurgeryAction.lua +++ /dev/null @@ -1 +0,0 @@ --- temp \ 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 7fc183f..9a8dd77 100644 --- a/media/lua/client/TOC/UI/SurgeryInteractions.lua +++ b/media/lua/client/TOC/UI/SurgeryInteractions.lua @@ -1,37 +1,26 @@ local CachedDataHandler = require("TOC/Handlers/CachedDataHandler") local DataController = require("TOC/Controllers/DataController") +local CauterizeAction = require("TOC/TimedActions/CauterizeAction") --------------- - --- TODO Surgery Kits - -local function AddInventorySurgeryMenu(playerNum, context, items) - -end - -Events.OnFillInventoryObjectContextMenu.Add(AddInventorySurgeryMenu) - - --- TODO Oven - --- TODO We need a class to handle operations, this is just a placeholder -local function Cauterize(limbName) - local dcInst = DataController.GetInstance() - dcInst:setCicatrizationTime(limbName, 0) - dcInst:setIsCicatrized(limbName, true) - dcInst:setIsCauterized(limbName, true) - - -- we don't care bout the depended limbs, since they're alread "cicatrized" - - dcInst:apply() +---@param tooltip ISToolTip +---@param desc string +local function AppendToDescription(tooltip, desc) + if tooltip.description == "" then + desc = string.upper(string.sub(desc, 1, 1)) .. string.sub(desc, 2) + tooltip.description = desc + else + desc = string.lower(string.sub(desc, 1, 1)) .. string.sub(desc, 2) + tooltip.description = tooltip.description .. getText("Tooltip_Surgery_And") .. desc + end end ---@param playerNum number ---@param context ISContextMenu ---@param worldObjects any ---@param test any -local function AddOvenContextMenu(playerNum, context, worldObjects, test) +local function AddStoveContextMenu(playerNum, context, worldObjects, test) if test then return true end local pl = getSpecificPlayer(playerNum) @@ -40,6 +29,7 @@ local function AddOvenContextMenu(playerNum, context, worldObjects, test) if not dcInst:getIsAnyLimbCut() then return end local amputatedLimbs = CachedDataHandler.GetAmputatedLimbs(pl:getUsername()) + ---@type IsoStove? local stoveObj = nil for _, obj in pairs(worldObjects) do if instanceof(obj, "IsoStove") then @@ -48,43 +38,61 @@ local function AddOvenContextMenu(playerNum, context, worldObjects, test) end end if stoveObj == nil then return end - if pl:HasTrait("Brave") or pl:getPerkLevel(Perks.Strength) > 5 then - local isTempLow = stoveObj:getCurrentTemperature() < 250 - local tempTooltip = ISToolTip:new() - tempTooltip:initialise() - tempTooltip:setName(getText("ContextMenu_Cauterize_TempTooLow_tooltip")) - tempTooltip.description = getText("Tooltip_Surgery_TempTooLow") - tempTooltip:setVisible(false) + local tempTooltip = ISToolTip:new() + tempTooltip:initialise() + tempTooltip.description = "" + tempTooltip:setVisible(false) - local addMainOption = false - local subMenu + local addMainOption = false + local subMenu - for k, _ in pairs(amputatedLimbs) do + for k, _ in pairs(amputatedLimbs) do - -- We need to let the player cauterize ONLY the visible one! - local limbName = k - if dcInst:getIsVisible(limbName) and not dcInst:getIsCicatrized(limbName) then - if addMainOption == false then - -- Adds the cauterize option ONLY when it's needed - local optionMain = context:addOption(getText("ContextMenu_Cauterize"), nil) - subMenu = context:getNew(context) - context:addSubMenu(optionMain, subMenu) - addMainOption = true - end - - local option = subMenu:addOption(getText("ContextMenu_Limb_" .. limbName), limbName, Cauterize) - option.notAvailable = isTempLow - if isTempLow then - option.toolTip = tempTooltip - end + -- We need to let the player cauterize ONLY the visible one! + ---@type string + local limbName = k + if dcInst:getIsVisible(limbName) and not dcInst:getIsCicatrized(limbName) then + if addMainOption == false then + -- Adds the cauterize option ONLY when it's needed + local optionMain = context:addOption(getText("ContextMenu_Cauterize"), nil) + subMenu = context:getNew(context) + context:addSubMenu(optionMain, subMenu) + addMainOption = true end + local option = subMenu:addOption(getText("ContextMenu_Limb_" .. limbName), nil, function() + local adjacent = AdjacentFreeTileFinder.Find(stoveObj:getSquare(), pl) + ISTimedActionQueue.add(ISWalkToTimedAction:new(pl, adjacent)) + ISTimedActionQueue.add(CauterizeAction:new(pl, limbName, stoveObj)) + end) + + + -- Notifications, in case the player can't do the action + local isPlayerCourageous = pl:HasTrait("Brave") or pl:getPerkLevel(Perks.Strength) > 5 + local isTempHighEnough = stoveObj:getCurrentTemperature() >= 250 + local isLimbFree = not dcInst:getIsProstEquipped(limbName) + + option.notAvailable = not(isPlayerCourageous and isTempHighEnough and isLimbFree) + if not isTempHighEnough then + AppendToDescription(tempTooltip, getText("Tooltip_Surgery_TempTooLow")) + end + + if not isPlayerCourageous then + AppendToDescription(tempTooltip, getText("Tooltip_Surgery_Coward")) + end + + if not isLimbFree then + AppendToDescription(tempTooltip, getText("Tooltip_Surgery_LimbNotFree")) + end + + if option.notAvailable then + tempTooltip:setName(getText("Tooltip_Surgery_CantCauterize")) + option.toolTip = tempTooltip + end end + end end -Events.OnFillWorldObjectContextMenu.Add(AddOvenContextMenu) - - --- TODO Other stuff? \ No newline at end of file +Events.OnFillWorldObjectContextMenu.Add(AddStoveContextMenu) diff --git a/media/lua/shared/Translate/EN/ContextMenu_EN.txt b/media/lua/shared/Translate/EN/ContextMenu_EN.txt index f7acdc1..299fc54 100644 --- a/media/lua/shared/Translate/EN/ContextMenu_EN.txt +++ b/media/lua/shared/Translate/EN/ContextMenu_EN.txt @@ -5,7 +5,6 @@ ContextMenu_EN = { ContextMenu_Amputate_Stitch_Bandage = "Amputate, stitches and bandage", ContextMenu_Cauterize = "Cauterize", - ContextMenu_Cauterize_TempTooLow_tooltip = "Temperature too low", ContextMenu_Limb_Hand_L = "Left Hand", ContextMenu_Limb_ForeArm_L = "Left Forearm", diff --git a/media/lua/shared/Translate/EN/Tooltip_EN.txt b/media/lua/shared/Translate/EN/Tooltip_EN.txt index 7fa281a..ae4f57b 100644 --- a/media/lua/shared/Translate/EN/Tooltip_EN.txt +++ b/media/lua/shared/Translate/EN/Tooltip_EN.txt @@ -1,3 +1,10 @@ Tooltip_EN = { - Tooltip_Surgery_TempTooLow = "Turn on the oven and wait for it to heat up before cauterizing your wound.", + + Tooltip_Surgery_CantCauterize = "You can't cauterize the wound", + + Tooltip_Surgery_And = " and " + Tooltip_Surgery_TempTooLow = "The temperature is still too low", + Tooltip_Surgery_Coward = "You don't have the guts to do it", + Tooltip_Surgery_LimbNotFree = "You need to remove the prosthesis first", + } \ No newline at end of file diff --git a/media/scripts/TOC_sounds.txt b/media/scripts/TOC_sounds.txt index 48da882..ce7df97 100644 --- a/media/scripts/TOC_sounds.txt +++ b/media/scripts/TOC_sounds.txt @@ -1,11 +1,22 @@ module base { - sound Amputation_Sound { + sound Amputation { category = Player, loop = true, is3D = true, clip { - file = media/sound/Cut_sound.ogg, + file = media/sound/Amputation.ogg, + distanceMax = 3, + volume = 1.0, + } + } + + sound Cauterization { + category = Player, + loop = false, + is3D = true, + clip { + file = media/sound/Cauterization.ogg, distanceMax = 3, volume = 1.0, } diff --git a/media/sound/Cut_sound.ogg b/media/sound/Amputation.ogg similarity index 100% rename from media/sound/Cut_sound.ogg rename to media/sound/Amputation.ogg diff --git a/media/sound/Cauterization.ogg b/media/sound/Cauterization.ogg new file mode 100644 index 0000000000000000000000000000000000000000..6514e69766a6025904803cf2d8f3142468dc4a4f GIT binary patch literal 31596 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