OnWaveInitFuncs = {} OnWaveStartFuncs = {} OnWaveSuccessFuncs = {} local function handleFuncsSafe(Funcs, ...) local args = table.pack(...) for _, func in pairs(Funcs) do local success, err = pcall(function() func(table.unpack(args)) end) if not success then util.PrintToChatAll("[LUA-CORE][ERROR]: ERROR LOADING FUNCTION, " .. err) util.PrintToChatAll(debug.traceback()) end end end function OnWaveInit(wave) handleFuncsSafe(OnWaveInitFuncs, wave) end function OnWaveStart(wave) handleFuncsSafe(OnWaveStartFuncs, wave) end function OnWaveSuccess(wave) handleFuncsSafe(OnWaveSuccessFuncs, wave) end function TableContains(tbl, target) for _, value in pairs(tbl) do if value == target then return true end end return false end function Extend(base, extra) local out = {} -- clones the base template for k, v in pairs(base) do out[k] = v end for k, v in pairs(extra) do out[k] = v end return out end function DeepClone(t1, t2) t2 = t2 or {} for k, v in pairs(t1) do if type(v) == "table" then t2[k] = DeepClone(v) else t2[k] = v end end return t2 end