57 lines
1.7 KiB
Lua
57 lines
1.7 KiB
Lua
--[[
|
|
Gate Loader
|
|
|
|
Define gate behavior in gates/*.lua.
|
|
]]
|
|
|
|
-- This separate table makes __newindex get called every time a gate is added, even if that gate was already added previously
|
|
-- This fixes the bug where duplicate gate entries would cause an error
|
|
local gates = {}
|
|
|
|
local gamt
|
|
gamt = {
|
|
curcat = "DEFAULT",
|
|
__newindex = function(t,k,v)
|
|
if not v.group then
|
|
v.group = gamt.curcat
|
|
end
|
|
rawset(gates,k,v)
|
|
end,
|
|
__index = function(t,k)
|
|
return rawget(gates,k)
|
|
end,
|
|
__call = function(t,s) --call the table to set a default category
|
|
gamt.curcat = s or "DEFAULT"
|
|
end
|
|
}
|
|
|
|
function LoadWireGates()
|
|
GateActions = {}
|
|
setmetatable(GateActions,gamt)
|
|
local entries = file.Find( "wire/gates/*.lua", "LUA" )
|
|
for _,v in pairs(entries) do
|
|
include("gates/"..v)
|
|
if (SERVER) then AddCSLuaFile("gates/"..v) end
|
|
end
|
|
GateActions = gates
|
|
|
|
WireGatesSorted = {}
|
|
for name,gate in pairs(GateActions) do
|
|
if not WireGatesSorted[gate.group] then
|
|
WireGatesSorted[gate.group] = {}
|
|
end
|
|
WireGatesSorted[gate.group][name] = gate
|
|
end
|
|
end
|
|
LoadWireGates()
|
|
|
|
local banned_categories_convar = CreateConVar("wire_banned_gate_categories", "", {FCVAR_ARCHIVE, FCVAR_REPLICATED, FCVAR_NOTIFY}, "For multiple categories, separate them with commas. If you change this, existing gates won't be affected.")
|
|
local function UpdateBannedGates(reload_spawnmenu)
|
|
local as_list = string.Explode(",", banned_categories_convar:GetString())
|
|
for _,v in pairs(GateActions) do
|
|
v.is_banned = table.HasValue(as_list, v.group)
|
|
end
|
|
if CLIENT and reload_spawnmenu then RunConsoleCommand("spawnmenu_reload") end
|
|
end
|
|
cvars.AddChangeCallback("wire_banned_gate_categories", function() UpdateBannedGates(true) end, "UpdateBannedGates")
|
|
UpdateBannedGates(false)
|