Files
The-Only-Cure/media/lua/client/TimedActions/NewOnCut.lua
2023-01-09 22:01:35 +01:00

96 lines
3.2 KiB
Lua

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