672 lines
19 KiB
Lua
672 lines
19 KiB
Lua
-- Hooks Lua event "character.applyDamage" to cause NT afflictions after attacks depending on the damaging affliction defined here in NT.OnDamagedMethods
|
|
local function getCalculatedConcussionReduction(armor, strength)
|
|
if armor == nil then
|
|
return 0
|
|
end
|
|
local reduction = 0
|
|
|
|
if armor.HasTag("deepdiving") or armor.HasTag("deepdivinglarge") then
|
|
local modifiers = armor.GetComponentString("Wearable").DamageModifiers
|
|
for modifier in modifiers do
|
|
if string.find(modifier.AfflictionIdentifiers, "concussion") ~= nil then
|
|
reduction = strength - strength * modifier.DamageMultiplier
|
|
end
|
|
end
|
|
elseif armor.HasTag("smallitem") then
|
|
local modifiers = armor.GetComponentString("Wearable").DamageModifiers
|
|
for modifier in modifiers do
|
|
if string.find(modifier.AfflictionIdentifiers, "concussion") ~= nil then
|
|
reduction = strength - strength * modifier.DamageMultiplier
|
|
end
|
|
end
|
|
end
|
|
return reduction
|
|
end
|
|
Hook.Add("character.applyDamage", "NT.ondamaged", function(characterHealth, attackResult, hitLimb)
|
|
--print(hitLimb.HealthIndex or hitLimb ~= nil)
|
|
|
|
if -- invalid attack data, don't do anything
|
|
characterHealth == nil
|
|
or characterHealth.Character == nil
|
|
or characterHealth.Character.IsDead
|
|
or not characterHealth.Character.IsHuman
|
|
or attackResult == nil
|
|
or attackResult.Afflictions == nil
|
|
or #attackResult.Afflictions <= 0
|
|
or hitLimb == nil
|
|
or hitLimb.IsSevered
|
|
then
|
|
return
|
|
end
|
|
|
|
local afflictions = attackResult.Afflictions
|
|
|
|
-- ntc
|
|
-- modifying ondamaged hooks
|
|
for key, val in pairs(NTC.ModifyingOnDamagedHooks) do
|
|
afflictions = val(characterHealth, afflictions, hitLimb)
|
|
end
|
|
|
|
local identifier = ""
|
|
local methodtorun = nil
|
|
for value in afflictions do
|
|
-- execute fitting method, if available
|
|
identifier = value.Prefab.Identifier.Value
|
|
methodtorun = NT.OnDamagedMethods[identifier]
|
|
if methodtorun ~= nil then
|
|
-- make resistance from afflictions apply
|
|
local resistance = HF.GetResistance(characterHealth.Character, identifier, hitLimb.type)
|
|
local strength = value.Strength * (1 - resistance)
|
|
|
|
methodtorun(characterHealth.Character, strength, hitLimb.type)
|
|
end
|
|
end
|
|
|
|
-- ntc
|
|
-- ondamaged hooks
|
|
for key, val in pairs(NTC.OnDamagedHooks) do
|
|
val(characterHealth, attackResult, hitLimb)
|
|
end
|
|
end)
|
|
|
|
NT.OnDamagedMethods = {}
|
|
|
|
local function HasLungs(c)
|
|
return not HF.HasAffliction(c, "lungremoved")
|
|
end
|
|
local function HasHeart(c)
|
|
return not HF.HasAffliction(c, "heartremoved")
|
|
end
|
|
|
|
-- cause foreign bodies, rib fractures, pneumothorax, tamponade, internal bleeding, fractures, neurotrauma
|
|
NT.OnDamagedMethods.gunshotwound = function(character, strength, limbtype)
|
|
limbtype = HF.NormalizeLimbType(limbtype)
|
|
|
|
local causeFullForeignBody = false
|
|
|
|
-- torso specific
|
|
if strength >= 1 and limbtype == LimbType.Torso then
|
|
local hitOrgan = false
|
|
if
|
|
HF.Chance(
|
|
HF.Clamp(strength * 0.02, 0, 0.3)
|
|
* NTC.GetMultiplier(character, "anyfracturechance")
|
|
* NTConfig.Get("NT_fractureChance", 1)
|
|
)
|
|
then
|
|
NT.BreakLimb(character, limbtype)
|
|
causeFullForeignBody = true
|
|
end
|
|
if
|
|
HasLungs(character)
|
|
and HF.Chance(
|
|
0.3 * NTC.GetMultiplier(character, "pneumothoraxchance") * NTConfig.Get("NT_pneumothoraxChance", 1)
|
|
)
|
|
then
|
|
HF.AddAffliction(character, "pneumothorax", 5)
|
|
HF.AddAffliction(character, "lungdamage", strength)
|
|
HF.AddAffliction(character, "organdamage", strength / 4)
|
|
hitOrgan = true
|
|
end
|
|
if
|
|
HasHeart(character)
|
|
and hitOrgan == false
|
|
and strength >= 5
|
|
and HF.Chance(
|
|
strength / 50 * NTC.GetMultiplier(character, "tamponadechance") * NTConfig.Get("NT_tamponadeChance", 1)
|
|
)
|
|
then
|
|
HF.AddAffliction(character, "tamponade", 5)
|
|
HF.AddAffliction(character, "heartdamage", strength)
|
|
HF.AddAffliction(character, "organdamage", strength / 4)
|
|
hitOrgan = true
|
|
end
|
|
if strength >= 5 then
|
|
HF.AddAffliction(character, "internalbleeding", strength * HF.RandomRange(0.3, 0.6))
|
|
end
|
|
|
|
-- liver and kidney damage
|
|
if hitOrgan == false and strength >= 2 and HF.Chance(0.5) then
|
|
HF.AddAfflictionLimb(character, "organdamage", limbtype, strength / 4)
|
|
if HF.Chance(0.5) then
|
|
HF.AddAffliction(character, "liverdamage", strength)
|
|
else
|
|
HF.AddAffliction(character, "kidneydamage", strength)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- head
|
|
if strength >= 1 and limbtype == LimbType.Head then
|
|
if
|
|
HF.Chance(
|
|
strength / 90 * NTC.GetMultiplier(character, "anyfracturechance") * NTConfig.Get("NT_fractureChance", 1)
|
|
)
|
|
then
|
|
NT.BreakLimb(character, limbtype)
|
|
causeFullForeignBody = true
|
|
end
|
|
if strength >= 5 and HF.Chance(0.7) then
|
|
HF.AddAffliction(character, "cerebralhypoxia", strength * HF.RandomRange(0.1, 0.4))
|
|
end
|
|
end
|
|
|
|
-- extremities
|
|
if strength >= 1 and HF.LimbIsExtremity(limbtype) then
|
|
if
|
|
NT.LimbIsBroken(character, limbtype)
|
|
and not NT.LimbIsAmputated(character, limbtype)
|
|
and HF.Chance(strength / 60 * NTC.GetMultiplier(character, "traumamputatechance"))
|
|
then
|
|
NT.TraumamputateLimb(character, limbtype)
|
|
end
|
|
if
|
|
HF.Chance(
|
|
strength / 60 * NTC.GetMultiplier(character, "anyfracturechance") * NTConfig.Get("NT_fractureChance", 1)
|
|
)
|
|
then
|
|
NT.BreakLimb(character, limbtype)
|
|
causeFullForeignBody = true
|
|
end
|
|
end
|
|
|
|
-- foreign bodies
|
|
if causeFullForeignBody then
|
|
HF.AddAfflictionLimb(
|
|
character,
|
|
"foreignbody",
|
|
limbtype,
|
|
HF.Clamp(strength, 0, 30) * NTC.GetMultiplier(character, "foreignbodymultiplier")
|
|
)
|
|
else
|
|
if HF.Chance(0.75) then
|
|
HF.AddAfflictionLimb(
|
|
character,
|
|
"foreignbody",
|
|
limbtype,
|
|
HF.Clamp(strength / 4, 0, 20) * NTC.GetMultiplier(character, "foreignbodymultiplier")
|
|
)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- cause foreign bodies, rib fractures, pneumothorax, internal bleeding, concussion, fractures
|
|
NT.OnDamagedMethods.explosiondamage = function(character, strength, limbtype)
|
|
limbtype = HF.NormalizeLimbType(limbtype)
|
|
|
|
if HF.Chance(0.75) then
|
|
HF.AddAfflictionLimb(
|
|
character,
|
|
"foreignbody",
|
|
limbtype,
|
|
strength / 2 * NTC.GetMultiplier(character, "foreignbodymultiplier")
|
|
)
|
|
end
|
|
|
|
-- torso specific
|
|
if strength >= 1 and limbtype == LimbType.Torso then
|
|
if
|
|
strength >= 10
|
|
and HF.Chance(
|
|
strength / 50 * NTC.GetMultiplier(character, "anyfracturechance") * NTConfig.Get("NT_fractureChance", 1)
|
|
)
|
|
then
|
|
NT.BreakLimb(character, limbtype)
|
|
end
|
|
if
|
|
HasLungs(character)
|
|
and strength >= 5
|
|
and HF.Chance(
|
|
strength
|
|
/ 50
|
|
* NTC.GetMultiplier(character, "pneumothoraxchance")
|
|
* NTConfig.Get("NT_pneumothoraxChance", 1)
|
|
)
|
|
then
|
|
HF.AddAffliction(character, "pneumothorax", 5)
|
|
end
|
|
if strength >= 5 then
|
|
HF.AddAffliction(character, "internalbleeding", strength * HF.RandomRange(0.2, 0.5))
|
|
end
|
|
end
|
|
|
|
-- head
|
|
if strength >= 1 and limbtype == LimbType.Head then
|
|
local armor1 = character.Inventory.GetItemInLimbSlot(InvSlotType.OuterClothes)
|
|
local armor2 = character.Inventory.GetItemInLimbSlot(InvSlotType.Head)
|
|
local reduceddmg = math.max(
|
|
10
|
|
- getCalculatedConcussionReduction(armor1, 10, limbtype)
|
|
- getCalculatedConcussionReduction(armor2, 10, limbtype),
|
|
0
|
|
)
|
|
if strength >= 15 and HF.Chance(math.min(strength / 60, 0.7)) then
|
|
HF.AddAfflictionResisted(character, "concussion", reduceddmg)
|
|
end
|
|
if
|
|
strength >= 15
|
|
and HF.Chance(
|
|
math.min(strength / 60, 0.7)
|
|
* NTC.GetMultiplier(character, "anyfracturechance")
|
|
* NTConfig.Get("NT_fractureChance", 1)
|
|
)
|
|
then
|
|
NT.BreakLimb(character, limbtype)
|
|
end
|
|
if
|
|
strength >= 15
|
|
and HF.Chance(
|
|
math.min(strength / 60, 0.7)
|
|
* NTC.GetMultiplier(character, "anyfracturechance")
|
|
* NTConfig.Get("NT_fractureChance", 1)
|
|
)
|
|
then
|
|
HF.AddAffliction(character, "n_fracture", 5)
|
|
end
|
|
if strength >= 25 and HF.Chance(0.25) then
|
|
-- drop previously held item
|
|
local previtem = HF.GetHeadWear(character)
|
|
if previtem ~= nil then
|
|
previtem.Drop(character, true)
|
|
end
|
|
HF.AddAfflictionLimb(character, "gate_ta_h", limbtype, 5)
|
|
end
|
|
end
|
|
|
|
-- extremities
|
|
if strength >= 1 and HF.LimbIsExtremity(limbtype) then
|
|
if
|
|
NT.LimbIsBroken(character, limbtype)
|
|
and not NT.LimbIsAmputated(character, limbtype)
|
|
and HF.Chance(strength / 60 * NTC.GetMultiplier(character, "traumamputatechance"))
|
|
then
|
|
NT.TraumamputateLimb(character, limbtype)
|
|
end
|
|
if
|
|
HF.Chance(
|
|
strength / 60 * NTC.GetMultiplier(character, "anyfracturechance") * NTConfig.Get("NT_fractureChance", 1)
|
|
)
|
|
then
|
|
NT.BreakLimb(character, limbtype)
|
|
end
|
|
if
|
|
HF.Chance(
|
|
0.35 * NTC.GetMultiplier(character, "dislocationchance") * NTConfig.Get("NT_dislocationChance", 1)
|
|
) and not NT.LimbIsAmputated(character, limbtype)
|
|
then
|
|
NT.DislocateLimb(character, limbtype)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- cause rib fractures, pneumothorax, internal bleeding, concussion, fractures
|
|
NT.OnDamagedMethods.bitewounds = function(character, strength, limbtype)
|
|
limbtype = HF.NormalizeLimbType(limbtype)
|
|
|
|
-- torso specific
|
|
if strength >= 1 and limbtype == LimbType.Torso then
|
|
if
|
|
strength >= 10
|
|
and HF.Chance(
|
|
(strength - 10)
|
|
/ 50
|
|
* NTC.GetMultiplier(character, "anyfracturechance")
|
|
* NTConfig.Get("NT_fractureChance", 1)
|
|
)
|
|
then
|
|
NT.BreakLimb(character, limbtype)
|
|
end
|
|
if
|
|
HasLungs(character)
|
|
and strength >= 5
|
|
and HF.Chance(
|
|
(strength - 5)
|
|
/ 50
|
|
* NTC.GetMultiplier(character, "pneumothoraxchance")
|
|
* NTConfig.Get("NT_pneumothoraxChance", 1)
|
|
)
|
|
then
|
|
HF.AddAffliction(character, "pneumothorax", 5)
|
|
end
|
|
if strength >= 5 then
|
|
HF.AddAffliction(character, "internalbleeding", strength * HF.RandomRange(0.2, 0.5))
|
|
end
|
|
end
|
|
|
|
-- head
|
|
if strength >= 1 and limbtype == LimbType.Head then
|
|
local armor1 = character.Inventory.GetItemInLimbSlot(InvSlotType.OuterClothes)
|
|
local armor2 = character.Inventory.GetItemInLimbSlot(InvSlotType.Head)
|
|
local reduceddmg = math.max(
|
|
10
|
|
- getCalculatedConcussionReduction(armor1, 10, limbtype)
|
|
- getCalculatedConcussionReduction(armor2, 10, limbtype),
|
|
0
|
|
)
|
|
if strength >= 15 and HF.Chance(math.min(strength / 60, 0.7)) then
|
|
HF.AddAfflictionResisted(character, "concussion", reduceddmg)
|
|
end
|
|
if
|
|
strength >= 15
|
|
and HF.Chance(
|
|
math.min((strength - 10) / 60, 0.7)
|
|
* NTC.GetMultiplier(character, "anyfracturechance")
|
|
* NTConfig.Get("NT_fractureChance", 1)
|
|
)
|
|
then
|
|
NT.BreakLimb(character, limbtype)
|
|
end
|
|
end
|
|
|
|
-- extremities
|
|
if strength >= 1 and HF.LimbIsExtremity(limbtype) then
|
|
if
|
|
NT.LimbIsBroken(character, limbtype)
|
|
and not NT.LimbIsAmputated(character, limbtype)
|
|
and HF.Chance((strength - 5) / 60 * NTC.GetMultiplier(character, "traumamputatechance"))
|
|
then
|
|
NT.TraumamputateLimb(character, limbtype)
|
|
end
|
|
if
|
|
HF.Chance(
|
|
(strength - 5)
|
|
/ 60
|
|
* NTC.GetMultiplier(character, "anyfracturechance")
|
|
* NTConfig.Get("NT_fractureChance", 1)
|
|
)
|
|
then
|
|
NT.BreakLimb(character, limbtype)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- cause rib fractures, pneumothorax, tamponade, internal bleeding, fractures
|
|
NT.OnDamagedMethods.lacerations = function(character, strength, limbtype)
|
|
limbtype = HF.NormalizeLimbType(limbtype)
|
|
|
|
-- torso specific
|
|
if strength >= 1 and limbtype == LimbType.Torso then
|
|
if
|
|
strength >= 10
|
|
and HF.Chance(
|
|
(strength - 10)
|
|
/ 50
|
|
* NTC.GetMultiplier(character, "anyfracturechance")
|
|
* NTConfig.Get("NT_fractureChance", 1)
|
|
)
|
|
then
|
|
NT.BreakLimb(character, limbtype)
|
|
end
|
|
if
|
|
HasLungs(character)
|
|
and strength >= 5
|
|
and HF.Chance(
|
|
(strength - 5)
|
|
/ 50
|
|
* NTC.GetMultiplier(character, "pneumothoraxchance")
|
|
* NTConfig.Get("NT_pneumothoraxChance", 1)
|
|
)
|
|
then
|
|
HF.AddAffliction(character, "pneumothorax", 5)
|
|
end
|
|
if
|
|
HasHeart(character)
|
|
and strength >= 5
|
|
and HF.Chance(
|
|
(strength - 5)
|
|
/ 50
|
|
* NTC.GetMultiplier(character, "tamponadechance")
|
|
* NTConfig.Get("NT_tamponadeChance", 1)
|
|
)
|
|
then
|
|
HF.AddAffliction(character, "tamponade", 5)
|
|
end
|
|
if strength >= 5 then
|
|
HF.AddAffliction(character, "internalbleeding", strength * HF.RandomRange(0.2, 0.5))
|
|
end
|
|
end
|
|
|
|
-- head
|
|
if strength >= 1 and limbtype == LimbType.Head then
|
|
if
|
|
strength >= 15
|
|
and HF.Chance(
|
|
math.min((strength - 15) / 60, 0.7)
|
|
* NTC.GetMultiplier(character, "anyfracturechance")
|
|
* NTConfig.Get("NT_fractureChance", 1)
|
|
)
|
|
then
|
|
NT.BreakLimb(character, limbtype)
|
|
end
|
|
end
|
|
|
|
-- extremities
|
|
if strength >= 1 and HF.LimbIsExtremity(limbtype) then
|
|
if
|
|
NT.LimbIsBroken(character, limbtype)
|
|
and not NT.LimbIsAmputated(character, limbtype)
|
|
and HF.Chance(strength / 60 * NTC.GetMultiplier(character, "traumamputatechance"))
|
|
then
|
|
NT.TraumamputateLimb(character, limbtype)
|
|
end
|
|
if
|
|
HF.Chance(
|
|
(strength - 5)
|
|
/ 60
|
|
* NTC.GetMultiplier(character, "anyfracturechance")
|
|
* NTConfig.Get("NT_fractureChance", 1)
|
|
)
|
|
then
|
|
NT.BreakLimb(character, limbtype)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- cause rib fractures, organ damage, pneumothorax, concussion, fractures, neurotrauma
|
|
NT.OnDamagedMethods.blunttrauma = function(character, strength, limbtype)
|
|
limbtype = HF.NormalizeLimbType(limbtype)
|
|
|
|
local fractureImmune = HF.HasAffliction(character, "cpr_fracturebuff")
|
|
|
|
-- torso
|
|
if not fractureImmune and strength >= 1 and limbtype == LimbType.Torso then
|
|
if
|
|
HF.Chance(
|
|
strength / 50 * NTC.GetMultiplier(character, "anyfracturechance") * NTConfig.Get("NT_fractureChance", 1)
|
|
)
|
|
then
|
|
NT.BreakLimb(character, limbtype)
|
|
end
|
|
|
|
HF.AddAffliction(character, "lungdamage", strength * HF.RandomRange(0, 1))
|
|
HF.AddAffliction(character, "heartdamage", strength * HF.RandomRange(0, 1))
|
|
HF.AddAffliction(character, "liverdamage", strength * HF.RandomRange(0, 1))
|
|
HF.AddAffliction(character, "kidneydamage", strength * HF.RandomRange(0, 1))
|
|
HF.AddAffliction(character, "organdamage", strength * HF.RandomRange(0, 1))
|
|
|
|
if
|
|
HasLungs(character)
|
|
and strength >= 5
|
|
and HF.Chance(
|
|
strength
|
|
/ 50
|
|
* NTC.GetMultiplier(character, "pneumothoraxchance")
|
|
* NTConfig.Get("NT_pneumothoraxChance", 1)
|
|
)
|
|
then
|
|
HF.AddAffliction(character, "pneumothorax", 5)
|
|
end
|
|
end
|
|
|
|
-- head
|
|
if not fractureImmune and strength >= 1 and limbtype == LimbType.Head then
|
|
local armor1 = character.Inventory.GetItemInLimbSlot(InvSlotType.OuterClothes)
|
|
local armor2 = character.Inventory.GetItemInLimbSlot(InvSlotType.Head)
|
|
local reduceddmg = math.max(
|
|
10
|
|
- getCalculatedConcussionReduction(armor1, 10, limbtype)
|
|
- getCalculatedConcussionReduction(armor2, 10, limbtype),
|
|
0
|
|
)
|
|
if strength >= 15 and HF.Chance(math.min(strength / 60, 0.7)) then
|
|
HF.AddAfflictionResisted(character, "concussion", reduceddmg)
|
|
end
|
|
if
|
|
strength >= 15
|
|
and HF.Chance(
|
|
math.min((strength - 10) / 60, 0.7)
|
|
* NTC.GetMultiplier(character, "anyfracturechance")
|
|
* NTConfig.Get("NT_fractureChance", 1)
|
|
)
|
|
then
|
|
NT.BreakLimb(character, limbtype)
|
|
end
|
|
if
|
|
strength >= 15
|
|
and HF.Chance(
|
|
math.min((strength - 10) / 60, 0.7)
|
|
* NTC.GetMultiplier(character, "anyfracturechance")
|
|
* NTConfig.Get("NT_fractureChance", 1)
|
|
)
|
|
then
|
|
HF.AddAffliction(character, "n_fracture", 5)
|
|
end
|
|
if strength >= 5 and HF.Chance(0.7) then
|
|
HF.AddAffliction(character, "cerebralhypoxia", strength * HF.RandomRange(0.1, 0.4))
|
|
end
|
|
end
|
|
|
|
-- extremities
|
|
if not fractureImmune and strength >= 1 and HF.LimbIsExtremity(limbtype) then
|
|
if
|
|
strength > 15
|
|
and NT.LimbIsBroken(character, limbtype)
|
|
and not NT.LimbIsAmputated(character, limbtype)
|
|
and HF.Chance(strength / 100 * NTC.GetMultiplier(character, "traumamputatechance"))
|
|
then
|
|
NT.TraumamputateLimb(character, limbtype)
|
|
end
|
|
if
|
|
HF.Chance(
|
|
(strength - 2)
|
|
/ 60
|
|
* NTC.GetMultiplier(character, "anyfracturechance")
|
|
* NTConfig.Get("NT_fractureChance", 1)
|
|
)
|
|
then
|
|
NT.BreakLimb(character, limbtype)
|
|
end
|
|
if
|
|
HF.Chance(
|
|
HF.Clamp((strength - 2) / 80, 0, 0.5)
|
|
* NTC.GetMultiplier(character, "dislocationchance")
|
|
* NTConfig.Get("NT_dislocationChance", 1)
|
|
) and not NT.LimbIsAmputated(character, limbtype)
|
|
then
|
|
NT.DislocateLimb(character, limbtype)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- cause rib fractures, organ damage, pneumothorax, concussion, fractures
|
|
NT.OnDamagedMethods.internaldamage = function(character, strength, limbtype)
|
|
limbtype = HF.NormalizeLimbType(limbtype)
|
|
|
|
-- torso
|
|
if strength >= 1 and limbtype == LimbType.Torso then
|
|
if
|
|
HF.Chance(
|
|
(strength - 5)
|
|
/ 50
|
|
* NTC.GetMultiplier(character, "anyfracturechance")
|
|
* NTConfig.Get("NT_fractureChance", 1)
|
|
)
|
|
then
|
|
NT.BreakLimb(character, limbtype)
|
|
end
|
|
|
|
HF.AddAffliction(character, "lungdamage", strength * HF.RandomRange(0, 1))
|
|
HF.AddAffliction(character, "heartdamage", strength * HF.RandomRange(0, 1))
|
|
HF.AddAffliction(character, "liverdamage", strength * HF.RandomRange(0, 1))
|
|
HF.AddAffliction(character, "kidneydamage", strength * HF.RandomRange(0, 1))
|
|
HF.AddAffliction(character, "organdamage", strength * HF.RandomRange(0, 1))
|
|
|
|
if
|
|
HasLungs(character)
|
|
and strength >= 5
|
|
and HF.Chance(
|
|
(strength - 5)
|
|
/ 50
|
|
* NTC.GetMultiplier(character, "pneumothoraxchance")
|
|
* NTConfig.Get("NT_pneumothoraxChance", 1)
|
|
)
|
|
then
|
|
HF.AddAffliction(character, "pneumothorax", 5)
|
|
end
|
|
end
|
|
|
|
-- head
|
|
if strength >= 1 and limbtype == LimbType.Head then
|
|
local armor1 = character.Inventory.GetItemInLimbSlot(InvSlotType.OuterClothes)
|
|
local armor2 = character.Inventory.GetItemInLimbSlot(InvSlotType.Head)
|
|
local reduceddmg = math.max(
|
|
10
|
|
- getCalculatedConcussionReduction(armor1, 10, limbtype)
|
|
- getCalculatedConcussionReduction(armor2, 10, limbtype),
|
|
0
|
|
)
|
|
if strength >= 15 and HF.Chance(math.min(strength / 60, 0.7)) then
|
|
HF.AddAfflictionResisted(character, "concussion", reduceddmg)
|
|
end
|
|
if
|
|
strength >= 15
|
|
and HF.Chance(
|
|
math.min((strength - 5) / 60, 0.7)
|
|
* NTC.GetMultiplier(character, "anyfracturechance")
|
|
* NTConfig.Get("NT_fractureChance", 1)
|
|
)
|
|
then
|
|
NT.BreakLimb(character, limbtype)
|
|
end
|
|
if
|
|
strength >= 15
|
|
and HF.Chance(
|
|
math.min((strength - 5) / 60, 0.7)
|
|
* NTC.GetMultiplier(character, "anyfracturechance")
|
|
* NTConfig.Get("NT_fractureChance", 1)
|
|
)
|
|
then
|
|
HF.AddAffliction(character, "n_fracture", 5)
|
|
end
|
|
end
|
|
|
|
-- extremities
|
|
if strength >= 1 and HF.LimbIsExtremity(limbtype) then
|
|
if
|
|
strength > 10
|
|
and NT.LimbIsBroken(character, limbtype)
|
|
and not NT.LimbIsAmputated(character, limbtype)
|
|
and HF.Chance((strength - 10) / 60 * NTC.GetMultiplier(character, "traumamputatechance"))
|
|
then
|
|
NT.TraumamputateLimb(character, limbtype)
|
|
end
|
|
if
|
|
HF.Chance(
|
|
(strength - 5)
|
|
/ 60
|
|
* NTC.GetMultiplier(character, "anyfracturechance")
|
|
* NTConfig.Get("NT_fractureChance", 1)
|
|
)
|
|
then
|
|
NT.BreakLimb(character, limbtype)
|
|
end
|
|
if
|
|
HF.Chance(
|
|
0.25 * NTC.GetMultiplier(character, "dislocationchance") * NTConfig.Get("NT_dislocationChance", 1)
|
|
) and not NT.LimbIsAmputated(character, limbtype)
|
|
then
|
|
NT.DislocateLimb(character, limbtype)
|
|
end
|
|
end
|
|
end
|