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

61 lines
1.8 KiB
Lua

gmpanel = gmpanel or {}
local permission, permissionGlobal = 'DBG: Панель ивентов', 'DBG: Расширенный доступ к панели ивентов'
function gmpanel.checkPermissions(ply)
return ply:query(permission) or ply:query(permissionGlobal)
end
function gmpanel.buildTargets(opts)
local targets = {}
for _,id in ipairs(opts) do
local pl = player.GetBySteamID(id)
if IsValid(pl) then
targets[#targets + 1] = pl
end
end
return targets
end
local actions = {}
function gmpanel.registerAction(action, callback)
actions[action] = callback
end
hook.Add('dbg-event.testExecution', 'dbg-event.checkPermissions', function(ply, action)
if action == 'global' and not ply:query(permissionGlobal) then return false end
if not ply:query(permission) then return false end
end)
netstream.Hook('dbg-event.execute', function(ply, action, opts)
local can, msg = hook.Run('dbg-event.testExecution', ply, action, opts)
if can == false then
ply:Notify('warning', msg or L.not_have_access)
return
end
local func = actions[action]
if not func then
ply:Notify('warning', 'Неизвестный метод')
return
end
if func(opts, ply) == false then return end
local log = octologs.createLog(octologs.CAT_GMPANEL)
:Add(octologs.ply(ply), ' performed action on gmpanel: ', octologs.string(action), ', ')
local players = opts.players
if players then
log:Add(octologs.table('players', players), ', ')
opts.players = nil
end
log:Add(octologs.table('data', opts, true)):Save()
end)
netstream.Listen('dbg-event.mapPlayerNames', function(reply, ply, sids)
if not (istable(sids) and gmpanel.checkPermissions(ply)) then return reply({}) end
reply(octolib.table.mapSequential(gmpanel.buildTargets(sids), function(pl)
return pl:Name()
end))
end)