409 lines
11 KiB
Lua
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)
|