gmod-replace-hostile-npc/lua/autorun/hostile_npcs_tocitizen.lua

83 lines
2.8 KiB
Lua

local npcs = list.Get("NPC")
local citizenEnemy = npcs["npc_citizen_rebel_enemy"]
local originalListSet = list.Set
local function loadNPCBlacklist()
local json = file.Read("npc_blacklist.json", "DATA")
print(json)
if not json or json == "" then return {} end
local data = util.JSONToTable(json)
return istable(data) and data or {}
end
function list.Set(listType, class, npc)
if listType == "NPC" then
if npc["Class"] == "npc_combine_s" and npc["Category"] ~= "#spawnmenu.category.combine" then
npc["Class"] = citizenEnemy["Class"]
npc["KeyValues"] = {
Hostile = 1,
SquadName = "overwatch",
citizentype = 4
}
end
end
originalListSet(listType, class, npc)
end
CreateClientConVar("replacehostile_blacklist", "", false, false, "Blacklist NPC Classes")
hook.Add("PopulateToolMenu", "ReplaceHostileMenu", function()
local blacklist = loadNPCBlacklist()
local defaultBlacklistStr = table.concat(blacklist, ",")
RunConsoleCommand("replacehostile_blacklist", defaultBlacklistStr)
spawnmenu.AddToolMenuOption("Options", "Replace Hostile", "ReplaceHostileConfig", "Settings", "", "", function(panel)
panel:ClearControls()
local blacklistEntry = panel:TextEntry("Blacklist Classes", "replacehostile_blacklist")
panel:ControlHelp("Separate classes with commas.\nExample: npc_my_custom_hostile,npc_my_hostile,npc_hostile_test")
blacklistEntry.OnChange = function(self)
local val = self:GetValue() or ""
local newBlacklist = {}
for e in string.gmatch(val, '([^,]+)') do
local trimmed = string.Trim(e)
if trimmed ~= "" then
table.insert(newBlacklist, trimmed)
end
end
local valid = true
for _, v in ipairs(newBlacklist) do
if type(v) ~= "string" or v == "" then
valid = false
break
end
end
if valid then
file.Write("npc_blacklist.json", util.TableToJSON(newBlacklist, false))
end
end
panel:Help("NOTE: Restart the map to apply the changes.")
end)
end)
-- Second stage. idk if one of these necessary
timer.Simple(0, function ()
for class, npc in pairs(npcs) do
if npc["Class"] == "npc_combine_s" and npc["Category"] ~= "#spawnmenu.category.combine" then
npc["Class"] = citizenEnemy["Class"]
npc["KeyValues"] = {
Hostile = 1,
SquadName = "overwatch",
citizentype = 4
}
originalListSet("NPC", class, npc)
end
end
end)