Bump to mod version and changed folder for specific game version
This commit is contained in:
89
42.6/media/lua/client/TOC/TimedActions/CauterizeAction.lua
Normal file
89
42.6/media/lua/client/TOC/TimedActions/CauterizeAction.lua
Normal file
@@ -0,0 +1,89 @@
|
||||
require "TimedActions/ISBaseTimedAction"
|
||||
local DataController = require("TOC/Controllers/DataController")
|
||||
local LocalPlayerController = require("TOC/Controllers/LocalPlayerController")
|
||||
---------------
|
||||
|
||||
---@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.stoveObj = stoveObj
|
||||
o.limbName = limbName
|
||||
|
||||
o.stopOnWalk = true
|
||||
o.stopOnRun = true
|
||||
|
||||
-- Max time depends on the strength
|
||||
o.maxTime = 20
|
||||
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:setIsCauterized(self.limbName, true)
|
||||
|
||||
-- Set isCicatrized and the visuals in one go, since this action is gonna be run only on a single client
|
||||
LocalPlayerController.HandleSetCicatrization(dcInst, self.character, self.limbName)
|
||||
|
||||
-- TODO Add specific visuals for cauterization
|
||||
|
||||
-- we don't care about the depended limbs, since they're alread "cicatrized"
|
||||
dcInst:apply()
|
||||
|
||||
ISBaseTimedAction.perform(self)
|
||||
end
|
||||
|
||||
return CauterizeAction
|
||||
Reference in New Issue
Block a user