-- TODO OLD TO DELETE local function CheckIfStillInfected(toc_data) for k,v in pairs(GetBodyParts()) do if toc_data[v].is_infected == true then getPlayer().Say("I'm still infected...") return true end end return false end -- TODO OLD TO DELETE local function CureInfection(bodyDamage) bodyDamage:setInfected(false); bodyDamage:setInfectionMortalityDuration(-1); bodyDamage:setInfectionTime(-1); bodyDamage:setInfectionLevel(0); local bodyParts = bodyDamage:getBodyParts(); for i=bodyParts:size()-1, 0, -1 do local bodyPart = bodyParts:get(i); bodyPart:SetInfected(false); end end -- -- TODO change it to CutLimb or CutBodyPart -- function CutArm(partName, surgeonFact, useBandage, bandageAlcool, usePainkiller, painkillerCount) -- local player = getPlayer(); -- local toc_data = player:getModData().TOC; -- local bodyPart = player:getBodyDamage():getBodyPart(TOC_getBodyPart(partName)); -- why the fuck do we we need this -- --Set damage of body part & stress & endurance -- local stats = player:getStats(); -- bodyPart:AddDamage(100 - surgeonFact); -- bodyPart:setAdditionalPain(100 - surgeonFact); -- bodyPart:setBleeding(true); -- bodyPart:setBleedingTime(100 - surgeonFact); -- bodyPart:setDeepWounded(true) -- bodyPart:setDeepWoundTime(100 - surgeonFact); -- stats:setEndurance(0 + surgeonFact); -- stats:setStress(100 - surgeonFact); -- -- Bandage -- --if useBandage and bandageAlcool then -- -- bodyPart:setBandaged(true, 10, true, bandage:getType()); -- --elseif useBandage and not bandageAlcool then -- -- bodyPart:setBandaged(true, 10, false, bandage:getType()); -- --end -- -- Painkiller -- --if usePainkiller then -- -- for _ = 1,painkillerCount+1 do -- -- player:getBodyDamage():JustTookPill(painkiller); -- -- end -- -- if painkillerCount < 10 then addSound(player, player:getX(), player:getY(), player:getZ(), 50-painkillerCount*5, 50-painkillerCount*5) end -- --else -- -- addSound(player, player:getX(), player:getY(), player:getZ(), 50, 50) -- --end -- -- Change modData -- local current_bodypart = bodyPart:getType() -- local body_damage = player:getBodyDamage() -- for k,v in pairs(GetBodyParts()) do -- if v == partName then -- toc_data[v].is_cut = true -- toc_data[v].is_amputation_shown = true -- toc_data[v].cicatrization_time = toc_data[v].cicatrization_base_time - surgeonFact * 50 -- -- Heal the infection here -- if toc_data[v].is_infected and body_damage.getInfectionLevel() < 20 then -- toc_data[v].is_infected = false -- current_bodypart:SetBitten(false) -- -- Second check, let's see if there is any other infected limb. -- if CheckIfStillInfected(toc_data) == false then -- CureInfection(body_damage) -- end -- end -- for depended_k, depended_v in pairs(toc_data[v].depends_on) do -- toc_data[depended_v].is_cut = true -- toc_data[depended_v].is_amputation_shown = true -- toc_data[depended_v].cicatrization_time = toc_data[v].cicatrization_base_time - surgeonFact * 50 -- end -- end -- end -- --Equip cloth -- local cloth = player:getInventory():AddItem(find_clothName2_TOC(partName)); -- player:setWornItem(cloth:getBodyLocation(), cloth); -- player:transmitModData(); -- end function OperateArm(partName, surgeonFact, useOven) local player = getPlayer(); local toc_data = player:getModData().TOC; if useOven then local stats = player:getStats(); stats:setEndurance(0); stats:setStress(100); end if toc_data[partName].is_operated == false then toc_data[partName].is_operated = true toc_data[partName].cicatrization_time = toc_data[partName].cicatrization_time - (surgeonFact * 200) if useOven then toc_data[partName].is_cauterized = true end for depended_k, depended_v in pairs(toc_data[partName].depends_on) do toc_data[depended_v].is_operated = true toc_data[depended_v].cicatrization_time = toc_data[depended_v].cicatrization_time - (surgeonFact * 200) if useOven then toc_data[depended_v].is_cauterized = true end end end SetBodyPartsStatus(player, partName, useOven) player:transmitModData(); end function SetBodyPartsStatus(player, partName, useOven) -- TODO use GetBodyParts with depends_on local a_rightArm = {"RightArm", "RightForearm", "RightHand"} local a_rightForearm = {"RightForearm", "RightHand"} local a_rightHand = {"RightHand"} local a_leftArm = {"LeftArm", "LeftForearm", "LeftHand"} local a_leftForearm = {"LeftForearm", "LeftHand"} local a_leftHand = {"LeftHand"} local chosen_array = {} if partName == "RightArm" then chosen_array = a_rightArm elseif partName == "RightForearm" then chosen_array = a_rightForearm elseif partName == "RightHand" then chosen_array = a_rightHand elseif partName == "LeftArm" then chosen_array = a_leftArm elseif partName == "LeftForearm" then chosen_array = a_leftForearm elseif partName == "LeftHand" then chosen_array = a_leftHand end for k,v in pairs(chosen_array) do local tmpBodyPart = player:getBodyDamage():getBodyPart(TheOnlyCure.GetBodyPartTypeFromBodyPart(v)) tmpBodyPart:setDeepWounded(false); -- Basically like stictching tmpBodyPart:setDeepWoundTime(0); if useOven then tmpBodyPart:AddDamage(100) tmpBodyPart:setAdditionalPain(100); tmpBodyPart:setBleeding(false) tmpBodyPart:setBleedingTime(0) -- no bleeding since it's been cauterized else tmpBodyPart:setBleeding(true); tmpBodyPart:setBleedingTime(ZombRand(1, 5)); -- Reset the bleeding, maybe make it random end end end function GetKitInInventory(surgeon) local playerInv = surgeon:getInventory(); local item = playerInv:getItemFromType('TOC.Real_surgeon_kit') or playerInv:getItemFromType('TOC.Surgeon_kit') or playerInv:getItemFromType('TOC.Improvised_surgeon_kit') return item end function IsSawInInventory(surgeon) local playerInv = surgeon:getInventory() local item = playerInv:getItemFromType('Saw') or playerInv:getItemFromType('GardenSaw') or playerInv:getItemFromType('Chainsaw') return item end