163 lines
5.6 KiB
Lua
163 lines
5.6 KiB
Lua
|
local unbanConsentFrame
|
|||
|
|
|||
|
local performLayout = function(self)
|
|||
|
timer.Simple(0.2, function()
|
|||
|
if IsValid(self) then
|
|||
|
self:SizeToChildren(false, true)
|
|||
|
end
|
|||
|
end)
|
|||
|
end
|
|||
|
local sizeToY = function(self)
|
|||
|
self:SizeToContentsY()
|
|||
|
end
|
|||
|
|
|||
|
local function panel(parent, name, desc)
|
|||
|
|
|||
|
local pan = parent:Add 'DPanel'
|
|||
|
pan:Dock(TOP)
|
|||
|
pan:DockMargin(0,0,0,5)
|
|||
|
pan:DockPadding(5,5,5,5)
|
|||
|
pan.PerformLayout = performLayout
|
|||
|
|
|||
|
if name then
|
|||
|
local l = pan:Add 'DLabel'
|
|||
|
l:Dock(TOP)
|
|||
|
l:DockMargin(5,0,5,5)
|
|||
|
l:SetTall(25)
|
|||
|
l:SetFont('octolib.normal')
|
|||
|
l:SetText(name)
|
|||
|
pan.name = l
|
|||
|
end
|
|||
|
|
|||
|
if desc then
|
|||
|
local l = pan:Add 'DLabel'
|
|||
|
l:Dock(TOP)
|
|||
|
l:DockMargin(5,0,5,0)
|
|||
|
l:SetText(desc)
|
|||
|
l:SetWrap(true)
|
|||
|
l.PerformLayout = sizeToY
|
|||
|
pan.desc = l
|
|||
|
end
|
|||
|
|
|||
|
return pan
|
|||
|
end
|
|||
|
|
|||
|
netstream.Hook('dbg-unban.consent', function(data)
|
|||
|
if IsValid(unbanConsentFrame) then unbanConsentFrame:Close() end
|
|||
|
|
|||
|
local height = 550
|
|||
|
local fr = vgui.Create 'DFrame'
|
|||
|
fr:SetSize(500, 550)
|
|||
|
fr:SetSizable(true)
|
|||
|
function fr:OnSizeChanged(w, h)
|
|||
|
if w ~= 500 then fr:SetWide(500) end
|
|||
|
if h > height then fr:SetTall(height) end
|
|||
|
end
|
|||
|
fr:Center()
|
|||
|
fr:SetTitle('Разбан игрока ' .. data.target)
|
|||
|
fr:SetAlpha(0)
|
|||
|
fr:MakePopup()
|
|||
|
unbanConsentFrame = fr
|
|||
|
|
|||
|
local scr = fr:Add('DScrollPanel')
|
|||
|
scr:Dock(FILL)
|
|||
|
|
|||
|
panel(scr, nil, 'Ты собираешься разбанить игрока. Пожалуйста, проверь всю информацию о нем, чтобы убедиться в отсутствии последствий')
|
|||
|
local nick = panel(scr, 'Ник игрока', '')
|
|||
|
steamworks.RequestPlayerInfo(util.SteamIDTo64(data.target), function(name)
|
|||
|
nick.desc:SetText(name)
|
|||
|
end)
|
|||
|
panel(scr, 'SteamID', data.target)
|
|||
|
|
|||
|
local profile = panel(scr, 'Профиль в Steam', 'https://steamcommunity.com/profiles/' .. util.SteamIDTo64(data.target))
|
|||
|
profile.desc:SetMouseInputEnabled(true)
|
|||
|
profile.desc:SetCursor('hand')
|
|||
|
profile.desc:SetColor(Color(0,130,255))
|
|||
|
profile.desc.DoClick = function(self)
|
|||
|
octoesc.OpenURL(self:GetText())
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
panel(scr, 'Блокировку выдал админ', data.admin)
|
|||
|
if data.length == 0 then
|
|||
|
panel(scr, 'БЛОКИРОВКА БЕССРОЧНАЯ!', 'Особенно внимательно просмотри связанные аккаунты')
|
|||
|
else
|
|||
|
panel(scr, 'Примерный срок блокировки', octolib.time.formatDuration(data.length))
|
|||
|
end
|
|||
|
panel(scr, 'Причина', data.reason)
|
|||
|
panel(scr, 'Примерное время в блокировке', octolib.time.formatDuration(data.spent))
|
|||
|
|
|||
|
local unbanReason, unbanBtn = panel(scr, 'Причина снятия блокировки', 'Пожалуйста, укажи причину снятия блокировки аккаунта')
|
|||
|
data.unbanReason = data.unbanReason ~= '' and data.unbanReason or nil
|
|||
|
local e = unbanReason:Add 'DTextEntry'
|
|||
|
e:Dock(TOP)
|
|||
|
e:DockMargin(5,5,5,0)
|
|||
|
e:SetUpdateOnType(true)
|
|||
|
e:SetValue(data.unbanReason or '')
|
|||
|
e.OnValueChange = function(e)
|
|||
|
local val = string.Trim(e:GetText())
|
|||
|
data.unbanReason = val ~= '' and val or nil
|
|||
|
end
|
|||
|
|
|||
|
local familyPan = panel(scr, 'Связанные аккаунты', not data.family[1] and 'Нет связанных аккаунтов' or 'ПКМ или двойной ЛКМ по строке откроет профиль игрока в Steam')
|
|||
|
local lst = familyPan:Add('DListView')
|
|||
|
lst:Dock(TOP)
|
|||
|
lst:DockMargin(5,5,5,0)
|
|||
|
lst:AddColumn('Ник в стиме')
|
|||
|
lst:AddColumn('SteamID')
|
|||
|
lst:SetMultiSelect(false)
|
|||
|
for i, v in ipairs(data.family) do
|
|||
|
if v ~= data.target then
|
|||
|
local line = lst:AddLine('', v)
|
|||
|
steamworks.RequestPlayerInfo(util.SteamIDTo64(v), function(name)
|
|||
|
if IsValid(line) then line:SetColumnText(1, name) end
|
|||
|
end)
|
|||
|
end
|
|||
|
end
|
|||
|
function lst:OnRowRightClick(_, line)
|
|||
|
octolib.menu({{'Открыть профиль', 'icon16/user_go.png', function()
|
|||
|
octoesc.OpenURL('https://steamcommunity.com/profiles/' .. util.SteamIDTo64(line:GetColumnText(2)))
|
|||
|
end}}):Open()
|
|||
|
end
|
|||
|
function lst:OnDoubleClick(_, line)
|
|||
|
octoesc.OpenURL('https://steamcommunity.com/profiles/' .. util.SteamIDTo64(line:GetColumnText(2)))
|
|||
|
end
|
|||
|
lst:SetTall(lst:GetHeaderHeight() + lst:GetDataHeight() * #lst:GetLines())
|
|||
|
|
|||
|
panel(scr, nil, 'Нажми на кнопку ниже, чтобы выдать разбан. Об этом будет уведомлена старшая администрация\nЧтобы отменить снятие блокировки, закрой это окно')
|
|||
|
|
|||
|
local sec = data.length == 0 and 30 or 15
|
|||
|
unbanBtn = octolib.button(scr, 'Снять блокировку (' .. sec .. ')', function()
|
|||
|
if data.unbanReason == nil then return end
|
|||
|
netstream.Start('dbg-unban.consent', data.target, data.unbanReason)
|
|||
|
fr:Close()
|
|||
|
end)
|
|||
|
unbanBtn:SetFont('f4.normal')
|
|||
|
unbanBtn:SetTall(45)
|
|||
|
unbanBtn:SetEnabled(false)
|
|||
|
timer.Create('serverguard.unban.confirm-think', 1, 0, function()
|
|||
|
if not unbanBtn:IsValid() then return timer.Remove('serverguard.unban.confirm-think') end
|
|||
|
if data.unbanReason ~= nil then
|
|||
|
if sec == 0 then
|
|||
|
unbanBtn:SetText('Снять блокировку')
|
|||
|
unbanBtn:SetEnabled(true)
|
|||
|
else
|
|||
|
unbanBtn:SetText('Снять блокировку (' .. sec .. ')')
|
|||
|
sec = sec - 1
|
|||
|
end
|
|||
|
else
|
|||
|
unbanBtn:SetText('Укажи причину снятия блокировки')
|
|||
|
unbanBtn:SetEnabled(false)
|
|||
|
end
|
|||
|
end)
|
|||
|
fr:InvalidateChildren(true)
|
|||
|
timer.Simple(1, function()
|
|||
|
local h = octolib.table.reduce(scr:GetCanvas():GetChildren(), function(ch, child)
|
|||
|
return ch + child:GetTall() + select(2, child:GetDockMargin()) + select(4, child:GetDockMargin())
|
|||
|
end, 0)
|
|||
|
if fr:IsValid() then fr:AlphaTo(255, 0.5) end
|
|||
|
height = h + select(2, fr:GetDockPadding()) + select(4, fr:GetDockPadding())
|
|||
|
end)
|
|||
|
|
|||
|
end)
|