require "TimedActions/ISBaseTimedAction" IsCutArm = ISBaseTimedAction:derive("IsCutArm"); function IsCutArm:isValid() return self.patientX == self.patient:getX() and self.patientY == self.patient:getY(); end function IsCutArm:waitToStart() if self.patient == self.surgeon then return false end self.surgeon:faceThisObject(self.patient) return self.surgeon:shouldBeTurning() end function IsCutArm:update() if self.patient ~= self.surgeon then self.surgeon:faceThisObject(self.patient) end end function IsCutArm:start() if self.patient == self.surgeon then self:setActionAnim("WearClothing"); self:setAnimVariable("WearClothingLocation", "Jacket") else self:setActionAnim("Loot") self.patient:SetVariable("LootPosition", "Mid") end end function IsCutArm:findArgs() local useBandage, bandageAlcool, usePainkiller, painkillerCount local surgeonFact = self.surgeon:getPerkLevel(Perks.Doctor); if self.surgeon:getDescriptor():getProfession() == "surgeon" then surgeonFact = surgeonFact + 15 end if self.surgeon:getDescriptor():getProfession() == "doctor" then surgeonFact = surgeonFact + 9 end if self.surgeon:getDescriptor():getProfession() == "nurse" then surgeonFact = surgeonFact + 4 end local bandage = self.surgeon:getInventory():FindAndReturn('Bandage'); local albandage = self.surgeon:getInventory():FindAndReturn('AlcoholBandage'); if albandage then useBandage = true; bandageAlcool = true; self.patient:getInventory():Remove(albandage); surgeonFact = surgeonFact + 4 elseif bandage then useBandage = true; self.patient:getInventory():Remove(bandage); surgeonFact = surgeonFact + 2 end local painkiller = self.surgeon:getInventory():FindAndReturn('Pills'); if painkiller then usePainkiller = true; painkillerCount = painkiller:getRemainingUses(); end return surgeonFact, useBandage, bandageAlcool, usePainkiller, painkillerCount; end function IsCutArm:perform() local surgeonFact, useBandage, bandageAlcool, usePainkiller, painkillerCount = self:findArgs(); if self.patient ~= self.surgeon and isClient() then SendCutArm(self.patient, self.partName, surgeonFact, useBandage, bandageAlcool, usePainkiller, painkillerCount); else CutArm(self.partName, surgeonFact, useBandage, bandageAlcool, usePainkiller, painkillerCount); end self.surgeon:getXp():AddXP(Perks.Doctor, 400); ISBaseTimedAction.perform(self); end function IsCutArm:new(patient, surgeon, partName) local o = {} setmetatable(o, self) self.__index = self o.partName = partName; o.bodyPart = TOC_getBodyPart(partName); o.character = surgeon; -- For anim o.surgeon = surgeon; -- Surgeon or player that make the operation o.patient = patient; -- Player to cut o.patientX = patient:getX(); o.patientY = patient:getY(); o.maxTime = 1000 - (surgeon:getPerkLevel(Perks.Doctor) * 50); o.stopOnWalk = true; o.stopOnRun = true; o.ignoreHandsWounds = false; o.fromHotbar = true; if o.patient:isTimedActionInstant() then o.maxTime = 1; end return o; end