This commit is contained in:
Pao
2023-01-12 22:13:17 +01:00
parent 5ebd797afe
commit 9f187416e3
4 changed files with 192 additions and 124 deletions

View File

@@ -0,0 +1,103 @@
require "TimedActions/ISBaseTimedAction"
ISOperateLimb = ISBaseTimedAction:derive("ISOperateLimb");
function ISOperateLimb:isValid()
return self.patientX == self.patient:getX() and self.patientY == self.patient:getY();
end
function ISOperateLimb:waitToStart()
if self.patient == self.surgeon then
return false
end
self.surgeon:faceThisObject(self.patient)
return self.surgeon:shouldBeTurning()
end
function ISOperateLimb:update()
if self.patient ~= self.surgeon then
self.surgeon:faceThisObject(self.patient)
end
end
function ISOperateLimb:start()
self:setActionAnim("MedicalCheck");
if self.use_oven then
self.sound = self.patient:getEmitter():playSound("Burn_sound")
self:forceComplete();
end
end
function ISOperateLimb:findArgs()
local surgeon_factor = self.surgeon:getPerkLevel(Perks.Doctor);
if self.use_oven then
surgeon_factor = surgeon_factor + 100
else
if self.kit then
local weight = math.floor(self.kit:getWeight() * 10 + 0.5)
if weight == 1 then
surgeon_factor = surgeon_factor + 2
elseif weight == surgeon_factor then
surgeon_factor = surgeon_factor + 4
elseif weight == 3 then
surgeon_factor = surgeon_factor + 6
end
end
if self.surgeon:getDescriptor():getProfession() == "surgeon" then surgeon_factor = surgeon_factor + 10 end
if self.surgeon:getDescriptor():getProfession() == "doctor" then surgeon_factor = surgeon_factor + 5 end
if self.surgeon:getDescriptor():getProfession() == "nurse" then surgeon_factor = surgeon_factor + 2 end
end
return surgeon_factor, self.use_oven;
end
function ISOperateLimb:perform()
local surgeon_factor, use_oven = self:findArgs()
if self.patient ~= self.surgeon and isClient() then
SendOperateLimb(self.patient, self.part_name, surgeon_factor, use_oven)
--SendOperateArm(self.patient, self.part_name, surgeon_factor, use_oven)
else
OperateArm(self.part_name, surgeon_factor, use_oven)
end
self.surgeon:getXp():AddXP(Perks.Doctor, 400)
-- FIXME Add a check for kit to prevent errors
if self.kit then
self.surgeon:getInventory():Remove(self.kit)
end
ISBaseTimedAction.perform(self)
end
function ISOperateLimb:new(patient, surgeon, kit, part_name, use_oven)
local o = ISBaseTimedAction.new(self, patient)
o.part_name = part_name
o.patient = patient
o.character = surgeon -- For anim
o.patientX = patient:getX()
o.patientY = patient:getY()
o.surgeon = surgeon
o.kit = kit
o.use_oven = use_oven
--o.use_oven = use_oven;
if use_oven then
o.maxTime = 30
else
o.maxTime = 200 - (surgeon:getPerkLevel(Perks.Doctor) * 10)
end
o.stopOnWalk = true
o.stopOnRun = true
o.ignoreHandsWounds = false
o.fromHotbar = true
if o.patient:isTimedActionInstant()then
o.maxTime = 1
end
return o
end