147 lines
4.4 KiB
Lua
147 lines
4.4 KiB
Lua
|
local plugin = plugin
|
|||
|
|
|||
|
plugin.name = 'Octostuff'
|
|||
|
plugin.author = 'chelog'
|
|||
|
plugin.version = '1.0'
|
|||
|
plugin.description = 'Useful stuff for Octothorp Team\'s servers'
|
|||
|
plugin.permissions = {
|
|||
|
'Link Accounts',
|
|||
|
'List Linked Accounts',
|
|||
|
'LuaDev',
|
|||
|
'octolib.flyEditor',
|
|||
|
}
|
|||
|
|
|||
|
plugin:IncludeFile('cl_bans.lua', SERVERGUARD.STATE.CLIENT)
|
|||
|
plugin:IncludeFile('sv_bans.lua', SERVERGUARD.STATE.SERVER)
|
|||
|
|
|||
|
local command = {};
|
|||
|
|
|||
|
command.help = 'Link player accounts';
|
|||
|
command.command = 'link';
|
|||
|
command.arguments = {'steamid', 'steamid'};
|
|||
|
command.permissions = 'Link Accounts';
|
|||
|
command.immunity = SERVERGUARD.IMMUNITY.LESSOREQUAL;
|
|||
|
|
|||
|
function command:Execute(admin, silent, args)
|
|||
|
if not SERVER then return true end
|
|||
|
local pID, fID = args[1], args[2]
|
|||
|
if not octolib.string.isSteamID(pID) or not octolib.string.isSteamID(fID) then
|
|||
|
admin:Notify('Неправильный формат SteamID')
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
plugin.addFamilyLink(pID, fID):Then(function()
|
|||
|
admin:Notify(('Аккаунты %s и %s теперь связаны'):format(pID, fID))
|
|||
|
end):Catch(function()
|
|||
|
admin:Notify('warning', 'Произошла ошибка при попытке связать аккаунты ' .. pID .. ' и ' .. fID)
|
|||
|
end)
|
|||
|
|
|||
|
return true;
|
|||
|
end;
|
|||
|
|
|||
|
serverguard.command:Add(command);
|
|||
|
|
|||
|
local command = {};
|
|||
|
|
|||
|
command.help = 'List linked Steam accounts';
|
|||
|
command.command = 'listlinked';
|
|||
|
command.arguments = {'steamid'};
|
|||
|
command.permissions = 'List Linked Accounts';
|
|||
|
command.immunity = SERVERGUARD.IMMUNITY.LESSOREQUAL;
|
|||
|
|
|||
|
function command:Execute(admin, silent, args)
|
|||
|
if not SERVER then return true end
|
|||
|
local steamID = args[1]
|
|||
|
if not octolib.string.isSteamID(steamID) then return end
|
|||
|
|
|||
|
octolib.getDBVar(steamID, 'family'):Then(function(family)
|
|||
|
if istable(family) then
|
|||
|
admin:Notify(('Список связанных с %s аккаунтов, которые появлялись на сервере: %s'):format(steamID, table.concat(family, ', ')))
|
|||
|
else
|
|||
|
admin:Notify('Аккаунты, связанные семейным доступом с этим SteamID, не появлялись на этом сервере')
|
|||
|
end
|
|||
|
end):Catch(function()
|
|||
|
admin:Notify('Данные не найдены')
|
|||
|
end)
|
|||
|
|
|||
|
return true;
|
|||
|
end;
|
|||
|
|
|||
|
serverguard.command:Add(command);
|
|||
|
|
|||
|
local capturing = {}
|
|||
|
local command = {}
|
|||
|
|
|||
|
command.help = 'Grab player screen'
|
|||
|
command.command = 'capture'
|
|||
|
command.arguments = {'player'}
|
|||
|
command.permissions = 'Screencap'
|
|||
|
command.immunity = SERVERGUARD.IMMUNITY.LESSOREQUAL
|
|||
|
|
|||
|
local function notifyWaiting(sid, msg)
|
|||
|
for _,v in ipairs(capturing[sid]) do
|
|||
|
if IsValid(v) then v:Notify('rp', unpack(octolib.string.splitByUrl(msg))) end
|
|||
|
end
|
|||
|
capturing[sid] = nil
|
|||
|
end
|
|||
|
|
|||
|
local errmsg = 'Не удалось получить скриншот экрана %s (%s): %s'
|
|||
|
function command:OnPlayerExecute(admin, target)
|
|||
|
if not IsValid(target) then return end
|
|||
|
if not SERVER then return true end
|
|||
|
local name, sid = target:Name(), target:SteamID()
|
|||
|
admin:Notify(('Захват экрана %s (%s)...'):format(name, sid))
|
|||
|
if not capturing[sid] then
|
|||
|
capturing[sid] = {}
|
|||
|
octolib.screen.sendToImgur(target):Then(function(r)
|
|||
|
local msg
|
|||
|
if not r.success then
|
|||
|
msg = errmsg:format(name, sid, tostring(r.data.error))
|
|||
|
else msg = ('Скриншот экрана %s (%s): %s'):format(name, sid, r.data.link) end
|
|||
|
notifyWaiting(sid, msg)
|
|||
|
end):Catch(function(r)
|
|||
|
notifyWaiting(sid, errmsg:format(name, sid, tostring(r)))
|
|||
|
end)
|
|||
|
end
|
|||
|
capturing[sid][#capturing[sid] + 1] = admin
|
|||
|
return true
|
|||
|
end
|
|||
|
|
|||
|
serverguard.command:Add(command)
|
|||
|
|
|||
|
local command = {};
|
|||
|
|
|||
|
command.help = 'Transfer members from one rank to another'
|
|||
|
command.command = 'ranktransfer'
|
|||
|
command.arguments = {'from', 'to'}
|
|||
|
command.permissions = 'Edit Ranks'
|
|||
|
command.immunity = SERVERGUARD.IMMUNITY.LESSOREQUAL;
|
|||
|
|
|||
|
function command:Execute(admin, silent, args)
|
|||
|
|
|||
|
if not SERVER then return true end
|
|||
|
local rankFrom = args[1]
|
|||
|
local rankTo = args[2]
|
|||
|
if not rankFrom or not rankTo or not serverguard.ranks:FindByID(rankTo) then return end
|
|||
|
|
|||
|
local queryObj = serverguard.mysql:Select('serverguard_users')
|
|||
|
queryObj:Where('rank', rankFrom)
|
|||
|
queryObj:Callback(function(result, status, lastID)
|
|||
|
if not istable(result) or #result < 1 then return end
|
|||
|
for _, row in ipairs(result) do
|
|||
|
serverguard.command.Run(admin, 'rank', false, row.steam_id, rankTo, 0)
|
|||
|
end
|
|||
|
end)
|
|||
|
queryObj:Execute()
|
|||
|
|
|||
|
return true
|
|||
|
|
|||
|
end
|
|||
|
|
|||
|
serverguard.command:Add(command)
|
|||
|
|
|||
|
local meta = FindMetaTable 'Player'
|
|||
|
function meta:query(priv)
|
|||
|
return serverguard.player:HasPermission(self, priv)
|
|||
|
end
|