58 lines
1.7 KiB
Lua
58 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)
|