dobrograd-13-06-2022/garrysmod/addons/feature-wire/lua/wire/wiregates.lua
Jonny_Bro (Nikita) e4d5311906 first commit
2023-11-16 15:01:19 +05:00

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)