Track LocalMods as part of monolith
This commit is contained in:
+174
@@ -0,0 +1,174 @@
|
||||
-- Neurotrauma blood types functions
|
||||
-- Hooks Lua event "characterCreated" to create a randomized blood type for spawned character and sets their immunity to 100
|
||||
---@diagnostic disable: lowercase-global, undefined-global
|
||||
NT.BLOODTYPE = { -- blood types and chance in percent
|
||||
{ "ominus", 7 },
|
||||
{ "oplus", 37 },
|
||||
{ "aminus", 6 },
|
||||
{ "aplus", 36 },
|
||||
{ "bminus", 2 },
|
||||
{ "bplus", 8 },
|
||||
{ "abminus", 1 },
|
||||
{ "abplus", 3 },
|
||||
}
|
||||
NT.setBlood = {}
|
||||
NT.foundAny = false
|
||||
|
||||
-- Insert all blood types in one table for RandomizeBlood()
|
||||
for index, value in ipairs(NT.BLOODTYPE) do
|
||||
-- print(index," : ",value[1],", ",value[2],"%")
|
||||
table.insert(NT.setBlood, index, { value[2], value[1] })
|
||||
end
|
||||
|
||||
-- Applies math.random() blood type.
|
||||
-- returns the applied bloodtype as an affliction identifier
|
||||
function NT.RandomizeBlood(character)
|
||||
rand = math.random(0, 99)
|
||||
local i = 0
|
||||
for index, value in ipairs(NT.setBlood) do
|
||||
i = i + value[1]
|
||||
if i > rand then
|
||||
HF.SetAffliction(character, value[2], 100)
|
||||
return value[2]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Hook.Add("characterCreated", "NT.BloodAndImmunity", function(createdCharacter)
|
||||
Timer.Wait(function()
|
||||
if createdCharacter.IsHuman and not createdCharacter.IsDead then
|
||||
NT.TryRandomizeBlood(createdCharacter)
|
||||
|
||||
-- add immunity
|
||||
local conditional2 = createdCharacter.CharacterHealth.GetAffliction("immunity")
|
||||
if conditional2 == nil then HF.SetAffliction(createdCharacter, "immunity", 100) end
|
||||
end
|
||||
end, 1000)
|
||||
end)
|
||||
|
||||
-- applies a new bloodtype only if the character doesnt already have one
|
||||
function NT.TryRandomizeBlood(character)
|
||||
NT.GetBloodtype(character)
|
||||
end
|
||||
|
||||
-- returns the bloodtype of the character as an affliction identifier string
|
||||
-- generates blood type if none present
|
||||
function NT.GetBloodtype(character)
|
||||
for index, affliction in ipairs(NT.BLOODTYPE) do
|
||||
local conditional = character.CharacterHealth.GetAffliction(affliction[1])
|
||||
|
||||
if conditional ~= nil and conditional.Strength > 0 then
|
||||
return affliction[1] -- TODO: give out abplus (AB+) to enemy team for blood infusions
|
||||
end
|
||||
end
|
||||
|
||||
return NT.RandomizeBlood(character)
|
||||
end
|
||||
|
||||
function NT.HasBloodtype(character)
|
||||
for index, affliction in ipairs(NT.BLOODTYPE) do
|
||||
local conditional = character.CharacterHealth.GetAffliction(affliction[1])
|
||||
|
||||
if conditional ~= nil and conditional.Strength > 0 then return true end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
Hook.Add("OnInsertedIntoBloodAnalyzer", "NT.BloodAnalyzer", function(effect, deltaTime, item, targets, position)
|
||||
-- Hematology Analyzer (bloodanalyzer) can scan inserted blood bags
|
||||
local owner = item.GetRootInventoryOwner()
|
||||
if owner == nil then return end
|
||||
if not LuaUserData.IsTargetType(owner, "Barotrauma.Character") then return end
|
||||
if not owner.IsPlayer then return end
|
||||
|
||||
local character = owner
|
||||
local contained = item.OwnInventory.GetItemAt(0)
|
||||
|
||||
local BaseColor = "127,255,255"
|
||||
local NameColor = "127,255,255"
|
||||
local LowColor = "127,255,255"
|
||||
local HighColor = "127,255,255"
|
||||
local VitalColor = "127,255,255"
|
||||
|
||||
if NTConfig.Get("NTSCAN_enablecoloredscanner", 1) then
|
||||
BaseColor = table.concat(NTConfig.Get("NTSCAN_basecolor", 1), ",")
|
||||
NameColor = table.concat(NTConfig.Get("NTSCAN_namecolor", 1), ",")
|
||||
LowColor = table.concat(NTConfig.Get("NTSCAN_lowcolor", 1), ",")
|
||||
HighColor = table.concat(NTConfig.Get("NTSCAN_highcolor", 1), ",")
|
||||
VitalColor = table.concat(NTConfig.Get("NTSCAN_vitalcolor", 1), ",")
|
||||
end
|
||||
|
||||
-- NT adds bloodbag; NT Blood Work or 'Real Sonar Medical Item Recipes Patch for Neurotrauma' add allblood, lets check for either
|
||||
if contained ~= nil and (contained.HasTag("bloodbag") or contained.HasTag("allblood")) then
|
||||
HF.GiveItem(character, "ntsfx_syringe")
|
||||
Timer.Wait(function()
|
||||
if item == nil or character == nil or item.OwnInventory.GetItemAt(0) ~= contained then return end
|
||||
|
||||
local identifier = contained.Prefab.Identifier.Value
|
||||
local packtype = "o-"
|
||||
if identifier ~= "antibloodloss2" then packtype = string.sub(identifier, string.len("bloodpack") + 1) end
|
||||
local bloodTypeDisplay = string.gsub(packtype, "abc", "c")
|
||||
bloodTypeDisplay = string.gsub(bloodTypeDisplay, "plus", "+")
|
||||
bloodTypeDisplay = string.gsub(bloodTypeDisplay, "minus", "-")
|
||||
bloodTypeDisplay = string.upper(bloodTypeDisplay)
|
||||
|
||||
local readoutString = "‖color:"
|
||||
.. BaseColor
|
||||
.. "‖"
|
||||
.. "Bloodpack: "
|
||||
.. "‖color:end‖"
|
||||
.. "‖color:"
|
||||
.. NameColor
|
||||
.. "‖"
|
||||
.. bloodTypeDisplay
|
||||
.. "‖color:end‖"
|
||||
-- check if acidosis, alkalosis or sepsis
|
||||
local tags = HF.SplitString(contained.Tags, ",")
|
||||
local defects = ""
|
||||
for tag in tags do
|
||||
if tag == "sepsis" then
|
||||
defects = defects .. "‖color:" .. VitalColor .. "‖" .. "\nSepsis detected" .. "‖color:end‖"
|
||||
end
|
||||
|
||||
if HF.StartsWith(tag, "acid") then
|
||||
local split = HF.SplitString(tag, ":")
|
||||
if split[2] ~= nil then
|
||||
defects = defects
|
||||
.. "‖color:"
|
||||
.. HighColor
|
||||
.. "‖"
|
||||
.. "\nAcidosis: "
|
||||
.. tonumber(split[2])
|
||||
.. "%"
|
||||
.. "‖color:end‖"
|
||||
end
|
||||
elseif HF.StartsWith(tag, "alkal") then
|
||||
local split = HF.SplitString(tag, ":")
|
||||
if split[2] ~= nil then
|
||||
defects = defects
|
||||
.. "‖color:"
|
||||
.. HighColor
|
||||
.. "‖"
|
||||
.. "\nAlkalosis: "
|
||||
.. tonumber(split[2])
|
||||
.. "%"
|
||||
.. "‖color:end‖"
|
||||
end
|
||||
end
|
||||
end
|
||||
if defects ~= "" then
|
||||
readoutString = readoutString .. defects
|
||||
else
|
||||
readoutString = readoutString
|
||||
.. "‖color:"
|
||||
.. LowColor
|
||||
.. "‖"
|
||||
.. "\nNo blood defects"
|
||||
.. "‖color:end‖"
|
||||
end
|
||||
|
||||
HF.DMClient(HF.CharacterToClient(character), readoutString, Color(127, 255, 255, 255))
|
||||
end, 1500)
|
||||
end
|
||||
end)
|
||||
Reference in New Issue
Block a user