Files
barotrauma-localmods/Neurotrauma/Lua/Scripts/configdata.lua
2025-03-31 13:19:47 +02:00

409 lines
11 KiB
Lua

NTConfig = { Entries = {}, Expansions = {} } -- contains all config options, their default, type, valid ranges, difficulty influence
local configDirectoryPath = Game.SaveFolder .. "/ModConfigs"
local configFilePath = configDirectoryPath .. "/Neurotrauma.json"
-- this is the function that gets used in other mods to add their own settings to the config
function NTConfig.AddConfigOptions(expansion)
table.insert(NTConfig.Expansions, expansion)
for key, entry in pairs(expansion.ConfigData) do
NTConfig.Entries[key] = entry
NTConfig.Entries[key].value = entry.default
end
end
function NTConfig.SaveConfig()
--prevent both owner client and server saving config at the same time and potentially erroring from file access
if Game.IsMultiplayer and CLIENT and Game.Client.MyClient.IsOwner then
return
end
local tableToSave = {}
for key, entry in pairs(NTConfig.Entries) do
tableToSave[key] = entry.value
end
File.CreateDirectory(configDirectoryPath)
File.Write(configFilePath, json.serialize(tableToSave))
end
function NTConfig.ResetConfig()
local tableToSave = {}
for key, entry in pairs(NTConfig.Entries) do
tableToSave[key] = entry.default
NTConfig.Entries[key] = entry
NTConfig.Entries[key].value = entry.default
end
-- File.CreateDirectory(configDirectoryPath)
-- File.Write(configFilePath, json.serialize(tableToSave))
end
function NTConfig.LoadConfig()
if not File.Exists(configFilePath) then
return
end
local readConfig = json.parse(File.Read(configFilePath))
for key, value in pairs(readConfig) do
if NTConfig.Entries[key] then
NTConfig.Entries[key].value = value
end
end
end
function NTConfig.Get(key, default)
if NTConfig.Entries[key] then
return NTConfig.Entries[key].value
end
return default
end
function NTConfig.Set(key, value)
if NTConfig.Entries[key] then
NTConfig.Entries[key].value = value
end
end
function NTConfig.SendConfig(reciverClient)
local tableToSend = {}
for key, entry in pairs(NTConfig.Entries) do
tableToSend[key] = entry.value
end
local msg = Networking.Start("NT.ConfigUpdate")
msg.WriteString(json.serialize(tableToSend))
if SERVER then
Networking.Send(msg, reciverClient and reciverClient.Connection or nil)
else
Networking.Send(msg)
end
end
function NTConfig.ReceiveConfig(msg)
local RecivedTable = {}
RecivedTable = json.parse(msg.ReadString())
for key, value in pairs(RecivedTable) do
NTConfig.Set(key, value)
end
end
NT.ConfigData = {
NT_header1 = { name = "Neurotrauma", type = "category" },
NT_dislocationChance = {
name = "Dislocation chance",
default = 1,
range = { 0, 100 },
type = "float",
difficultyCharacteristics = { max = 5 },
},
NT_fractureChance = {
name = "Fracture chance",
default = 1,
range = { 0, 100 },
type = "float",
difficultyCharacteristics = { multiplier = 2, max = 5 },
},
NT_pneumothoraxChance = {
name = "Pneumothorax chance",
default = 1,
range = { 0, 100 },
type = "float",
difficultyCharacteristics = { max = 5 },
},
NT_tamponadeChance = {
name = "Tamponade chance",
default = 1,
range = { 0, 100 },
type = "float",
difficultyCharacteristics = { max = 3 },
},
NT_heartattackChance = {
name = "Heart attack chance",
default = 1,
range = { 0, 100 },
type = "float",
difficultyCharacteristics = { multiplier = 0.5, max = 1 },
},
NT_strokeChance = {
name = "Stroke chance",
default = 1,
range = { 0, 100 },
type = "float",
difficultyCharacteristics = { multiplier = 0.5, max = 1 },
},
NT_infectionRate = {
name = "Infection rate",
default = 1,
range = { 0, 100 },
type = "float",
difficultyCharacteristics = { multiplier = 1.5, max = 5 },
},
NT_CPRFractureChance = {
name = "CPR fracture chance",
default = 1,
range = { 0, 100 },
type = "float",
difficultyCharacteristics = { multiplier = 0.5, max = 1 },
},
NT_traumaticAmputationChance = {
name = "Traumatic amputation chance",
default = 1,
range = { 0, 100 },
type = "float",
difficultyCharacteristics = { max = 3 },
},
NT_neurotraumaGain = {
name = "Neurotrauma gain",
default = 1,
range = { 0, 100 },
type = "float",
difficultyCharacteristics = { multiplier = 3, max = 10 },
},
NT_organDamageGain = {
name = "Organ damage gain",
default = 1,
range = { 0, 100 },
type = "float",
difficultyCharacteristics = { multiplier = 2, max = 8 },
},
NT_fibrillationSpeed = {
name = "Fibrillation rate",
default = 1,
range = { 0, 100 },
type = "float",
difficultyCharacteristics = { multiplier = 1.5, max = 8 },
},
NT_gangrenespeed = {
name = "Gangrene rate",
default = 1,
range = { 0, 100 },
type = "float",
difficultyCharacteristics = { multiplier = 0.5, max = 5 },
},
NT_falldamage = {
name = "Falldamage",
default = 1,
range = { 0, 100 },
type = "float",
difficultyCharacteristics = { multiplier = 0.5, max = 5 },
},
NT_falldamageSeriousInjuryChance = {
name = "Falldamage serious injury chance",
default = 1,
range = { 0, 100 },
type = "float",
difficultyCharacteristics = { multiplier = 0.5, max = 5 },
},
NT_vanillaSkillCheck = {
name = "Vanilla skill check formula",
default = false,
type = "bool",
description = "Changes the chance to succeed a lua skillcheck from skill/requiredskill to 100-(requiredskill-skill))/100",
},
NT_disableBotAlgorithms = {
name = "Disable bot treatment algorithms",
default = true,
type = "bool",
description = "Prevents bots from attempting to treat afflictions.\nThis is desireable, because bots suck at treating things, and their bad attempts lag out the game immensely.",
},
NT_screams = { name = "Screams", default = true, type = "bool", description = "Characters scream when in pain." },
NT_ignoreModConflicts = {
name = "Ignore mod conflicts",
default = false,
type = "bool",
description = "Prevent the mod conflict affliction from showing up.",
},
NT_organRejection = {
name = "Organ rejection",
default = false,
type = "bool",
difficultyCharacteristics = { multiplier = 0.5 },
description = "When transplanting an organ, there is a chance that the organ gets rejected.\nThe higher the patients immunity at the time of the transplant, the higher the chance.",
},
NT_fracturesRemoveCasts = {
name = "Fractures remove casts",
default = true,
type = "bool",
difficultyCharacteristics = { multiplier = 0.5 },
description = "When receiving damage that would cause a fracture, remove plaster casts on the limb",
},
NTCRE_header1 = { name = "Consent Required", type = "category" },
NTCRE_ConsentRequired = {
name = "Enable Consent Required",
default = true,
type = "bool",
description = "Integrated consent required mod.\nIf disabled, none of NPCs will get aggravated by medical interactions.",
},
NTSCAN_header1 = { name = "Scanner Settings", type = "category" },
NTSCAN_enablecoloredscanner = {
name = "Enable Colored Scanner",
default = true,
type = "bool",
description = "Enable colored health scanner text messages.",
},
NTSCAN_lowmedThreshold = {
name = "Low-Medium Text Threshold",
default = 25,
range = { 0, 100 },
type = "float",
description = "Where the Low progress color ends and Medium progress color begins.",
},
NT_medhighThreshold = {
name = "Medium-High Text Threshold",
default = 65,
range = { 0, 100 },
type = "float",
description = "Where the Medium progress color ends and High progress color begins.",
},
NTSCAN_basecolor = {
name = "Base Text Color",
default = { "100,100,200" },
style = "R,G,B",
type = "string",
boxsize = 0.05,
description = "Scanner text color.",
},
NTSCAN_namecolor = {
name = "Name Text Color",
default = { "125,125,225" },
style = "R,G,B",
type = "string",
boxsize = 0.05,
description = "Scanner text color for player names.",
},
NTSCAN_lowcolor = {
name = "Low Priority Color",
default = { "100,200,100" },
style = "R,G,B",
type = "string",
boxsize = 0.05,
description = "Scanner text color for afflictions that have low progress.",
},
NTSCAN_medcolor = {
name = "Medium Priority Color",
default = { "200,200,100" },
style = "R,G,B",
type = "string",
boxsize = 0.05,
description = "Scanner text color for afflictions that have medium progress.",
},
NTSCAN_highcolor = {
name = "High Priority Color",
default = { "250,100,100" },
style = "R,G,B",
type = "string",
boxsize = 0.05,
description = "Scanner text color for afflictions that have high progress.",
},
NTSCAN_vitalcolor = {
name = "Vital Priority Color",
default = { "255,0,0" },
style = "R,G,B",
type = "string",
boxsize = 0.05,
description = "Scanner text color for vital afflictions (Arterial bleed, Traumatic amputation).",
},
NTSCAN_removalcolor = {
name = "Removed Organ Color",
default = { "0,255,255" },
style = "R,G,B",
type = "string",
boxsize = 0.05,
description = "Scanner text color for removed organs (Heart removed, leg amputation).",
},
NTSCAN_customcolor = {
name = "Custom Category Color",
default = { "180,50,200" },
style = "R,G,B",
type = "string",
boxsize = 0.05,
description = "Scanner text color for the custom category.",
},
NTSCAN_VitalCategory = {
name = "Included Vital Afflictions",
default = {
"cardiacarrest",
"ll_arterialcut",
"rl_arterialcut",
"la_arterialcut",
"ra_arterialcut",
"t_arterialcut",
"h_arterialcut",
"tra_amputation",
"tla_amputation",
"trl_amputation",
"tll_amputation",
"th_amputation",
},
style = "identifier,identifier",
type = "string",
boxsize = 0.1,
description = "You can add or remove afflictions to customize this list to your liking.",
},
NTSCAN_RemovalCategory = {
name = "Included Removal Affictions",
default = {
"heartremoved",
"brainremoved",
"lungremoved",
"kidneyremoved",
"liverremoved",
"sra_amputation",
"sla_amputation",
"srl_amputation",
"sll_amputation",
"sh_amputation",
},
style = "identifier, identifier",
type = "string",
boxsize = 0.1,
description = "You can add or remove afflictions to customize this list to your liking.",
},
NTSCAN_CustomCategory = {
name = "Custom Affliction Category",
default = {""},
style = "identifier,identifier",
type = "string",
boxsize = 0.1,
description = "You can add or remove afflictions to customize this list to your liking.",
},
NTSCAN_IgnoredCategory = {
name = "Ignored Afflictions",
default = { "" },
style = "identifier,identifier",
type = "string",
boxsize = 0.1,
description = "Afflictions added to this category will be ignored by the health scanner.",
},
}
NTConfig.AddConfigOptions(NT)
-- wait a bit before loading the config so all options have had time to be added
-- do note that this unintentionally causes a couple ticks time on load during which the config is always the default
-- remember to put default values in your NTConfig.Get calls!
Timer.Wait(function()
NTConfig.LoadConfig()
Timer.Wait(function()
NTConfig.SaveConfig()
end, 1000)
end, 50)