-- CutLimb -- TODO if TheONlyCure. triggers an errors function CheckIfStillInfected(part_data) if part_data == nil then return end -- Check ALL body part types to check if the player is still gonna die local check = false for _, v in ipairs(GetBodyParts()) do if part_data[v].is_infected then check = true end end if part_data.is_other_bodypart_infected then check = true end return check end function TocCureInfection(body_damage, part_data, part_name) local body_part_type = body_damage:getBodyPart(TocGetBodyPartTypeFromPartName(part_name)) -- Check if we can heal the infection local is_other_bodypart_infected = getPlayer():getModData().TOC.Limbs.is_other_bodypart_infected if not is_other_bodypart_infected and not TheOnlyCure.CheckIfOtherLimbsAreInfected(part_data, part_name) then body_damage:setInfected(false) body_part_type:SetInfected(false) body_damage:setInfectionMortalityDuration(-1) body_damage:setInfectionTime(-1) body_damage:setInfectionLevel(0) local body_part_types = body_damage:getBodyParts() -- TODO I think this is enough... we should just cycle if with everything instead of that crap up there for i=body_part_types:size()-1, 0, -1 do local bodyPart = body_part_types:get(i); bodyPart:SetInfected(false); end end if body_part_type:scratched() then body_part_type:setScratched(false, false) end if body_part_type:haveGlass() then body_part_type:setHaveGlass(false) end if body_part_type:haveBullet() then body_part_type:setHaveBullet(false, 0) end if body_part_type:isInfectedWound() then body_part_type:setInfectedWound(false) end if body_part_type:isBurnt() then body_part_type:setBurnTime(0) end if body_part_type:isCut() then body_part_type:setCut(false, false) end --Lacerations if body_part_type:getFractureTime()>0 then body_part_type:setFractureTime(0) end end function TocDeleteOtherAmputatedLimbs(side) -- if left hand is cut and we cut left lowerarm, then delete hand for _, limb in pairs(TOC_limbs) do local part_name = "TOC.Amputation_" .. side .. "_" .. limb local amputated_limb = getPlayer():getInventory():FindAndReturn(part_name) if amputated_limb then getPlayer():getInventory():Remove(amputated_limb) end end end -- OperateLimb function SetBodyPartsStatusAfterOperation(player, part_data, part_name, use_oven) --for _, v in ipairs(GetBodyParts()) do local body_part_type = player:getBodyDamage():getBodyPart(TocGetBodyPartTypeFromPartName(part_name)) FixSingleBodyPartType(body_part_type, use_oven) for _, v in ipairs(part_data[part_name].depends_on) do local depended_body_part_type = player:getBodyDamage():getBodyPart(TocGetBodyPartTypeFromPartName(v)) FixSingleBodyPartType(depended_body_part_type, use_oven) end end function FixSingleBodyPartType(body_part_type, use_oven) body_part_type:setDeepWounded(false) --Basically like stitching body_part_type:setDeepWoundTime(0) if use_oven then body_part_type:AddDamage(100) body_part_type:setAdditionalPain(100); body_part_type:setBleeding(false) body_part_type:setBleedingTime(0) -- no bleeding since it's been cauterized else -- TODO Think a little better about this, do we want to trigger bleeding or not? body_part_type:setBleeding(false) --body_part_type:setBleedingTime(ZombRand(1, 5)) -- Reset the bleeding, maybe make it random end end ------------------------------------- -- Override helper function CheckIfItemIsAmputatedLimb(item) -- TODO Benchmark if this is faster local item_full_type = item:getFullType() if string.find(item_full_type, "TOC.Amputation_") then return true else return false end end -- function CheckIfItemIsAmputatedLimb(item) -- local item_full_type = item:getFullType() -- local sides = {"Left", "Right"} -- local limbs_to_check = {"Hand", "LowerArm", "UpperArm"} -- local is_amputated_limb = false -- for _, part in ipairs(limbs_to_check) do -- for _, side in ipairs(sides) do -- local part_name = side .. "_" .. part -- local check_name = "TOC.Amputation_" .. part_name -- print(check_name) -- if item_full_type == check_name then -- is_amputated_limb = true -- break -- end -- end -- end -- return is_amputated_limb -- end function CheckIfItemIsProsthesis(item) -- TODO find a cleaner way local item_full_type = item:getFullType() local prosthesis_list = GetProsthesisList() for _, v in pairs(prosthesis_list) do if v == item_full_type then return true end end return false end function CheckIfItemIsInstalledProsthesis(item) local item_full_type = item:getFullType() if string.find(item_full_type, "TOC.Prost_") then return true else return false end end