162 lines
5.6 KiB
Lua
162 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)
|