Загрузка данных
-- Tab_kdm1eHvH.lua
-- ============ Блокировка таба DarkRP ============
-- 1. Хук ScoreboardShow — перехватываем открытие любого таба
hook.Add("ScoreboardShow", "kdm1eHvH_BlockScoreboard", function()
return true
end)
-- 2. Заглушаем методы геймода
hook.Add("InitPostEntity", "kdm1eHvH_BlockGM", function()
timer.Simple(3, function()
if not GAMEMODE then return end
GAMEMODE.ScoreboardShow = function() end
GAMEMODE.ScoreboardHide = function() end
GAMEMODE.ScoreboardPaint = function() end
end)
end)
-- 3. Каждый кадр прячем любые VGUI-панели "таба"
hook.Add("Think", "kdm1eHvH_HideVGUI", function()
if not input.IsKeyDown(KEY_TAB) then return end
for _, pnl in ipairs(vgui.GetAll()) do
if not IsValid(pnl) then continue end
local cls = string.lower(pnl:GetClassName() or "")
if string.find(cls, "scoreboard") or string.find(cls, "playerlist") then
pnl:SetVisible(false)
end
end
end)
-- ============ Настройки ============
local ACCENT = Color(220, 40, 40)
local TEXT = Color(235, 235, 235)
local DIM = Color(150, 150, 160)
local BG = Color(10, 10, 15, 245)
local HEAD = Color(35, 35, 48, 255)
local ROW = Color(22, 22, 30, 220)
local ROW2 = Color(28, 28, 36, 220)
-- ============ Шрифты ============
surface.CreateFont("tab_title", { font = "Roboto", size = 30, weight = 900, extended = true })
surface.CreateFont("tab_header", { font = "Roboto", size = 15, weight = 700, extended = true })
surface.CreateFont("tab_nick", { font = "Roboto", size = 18, weight = 600, extended = true })
surface.CreateFont("tab_value", { font = "Roboto", size = 18, weight = 700, extended = true })
surface.CreateFont("tab_small", { font = "Roboto", size = 14, weight = 500, extended = true })
-- ============ Утилиты ============
local function pingColor(ping)
if ping < 60 then return Color(80, 220, 120) end
if ping < 120 then return Color(240, 200, 60) end
return Color(240, 80, 80)
end
local function sortedPlayers()
local tbl = {}
for _, ply in ipairs(player.GetAll()) do
if IsValid(ply) and not ply:IsBot() then
table.insert(tbl, ply)
end
end
table.sort(tbl, function(a, b)
local ka = a:GetNWInt("PersistentKills", a:Frags())
local kb = b:GetNWInt("PersistentKills", b:Frags())
if ka ~= kb then return ka > kb end
return a:Nick() < b:Nick()
end)
return tbl
end
local function drawAvatar(ply, x, y, size)
local av = ply:GetAvatar()
if av then
surface.SetDrawColor(255, 255, 255)
surface.SetMaterial(av)
surface.DrawTexturedRect(x, y, size, size)
else
surface.SetDrawColor(50, 50, 60)
surface.DrawRect(x, y, size, size)
end
surface.SetDrawColor(pingColor(ply:Ping()))
surface.DrawOutlinedRect(x - 1, y - 1, size + 2, size + 2, 2)
end
-- ============ Отрисовка ============
local function drawScoreboard()
local players = sortedPlayers()
local count = #players
local panelW = math.min(860, ScrW() - 200)
local rowH = 54
local headH = 48
local panelH = headH + math.max(1, count) * rowH + 30
local x = (ScrW() - panelW) / 2
local y = (ScrH() - panelH) / 2
-- Заголовок kdm1eHvH
surface.SetFont("tab_title")
local t1, t2 = "kdm1e", "HvH"
local w1 = surface.GetTextSize(t1)
local w2 = surface.GetTextSize(t2)
local totalW = w1 + w2
draw.SimpleText(t1, "tab_title", x + panelW/2 - totalW/2, y - 46, color_white, TEXT_ALIGN_LEFT, TEXT_ALIGN_TOP)
draw.SimpleText(t2, "tab_title", x + panelW/2 - totalW/2 + w1, y - 46, ACCENT, TEXT_ALIGN_LEFT, TEXT_ALIGN_TOP)
-- Тень и фон
surface.SetDrawColor(0, 0, 0, 200)
surface.DrawRect(x + 5, y + 5, panelW, panelH)
surface.SetDrawColor(BG)
surface.DrawRect(x, y, panelW, panelH)
-- Красная полоса
surface.SetDrawColor(ACCENT)
surface.DrawRect(x, y, panelW, 4)
-- Шапка
surface.SetDrawColor(HEAD)
surface.DrawRect(x, y + 4, panelW, headH)
local colAvatar = x + 20
local colNick = x + 88
local colKills = x + panelW - 260
local colPing = x + panelW - 160
local colID = x + panelW - 70
local hy = y + 4 + headH / 2
draw.SimpleText("ИГРОК", "tab_header", colNick, hy, DIM, TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER)
draw.SimpleText("УБИЙСТВА", "tab_header", colKills, hy, DIM, TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER)
draw.SimpleText("ПИНГ", "tab_header", colPing, hy, DIM, TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER)
draw.SimpleText("ID", "tab_header", colID, hy, DIM, TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER)
-- Строки
local startY = y + 4 + headH
for i = 1, count do
local ply = players[i]
local ry = startY + (i - 1) * rowH
local isMe = (ply == LocalPlayer())
surface.SetDrawColor(i % 2 == 1 and ROW or ROW2)
surface.DrawRect(x, ry, panelW, rowH)
if isMe then
surface.SetDrawColor(ACCENT)
surface.DrawRect(x, ry, 3, rowH)
end
surface.SetDrawColor(0, 0, 0, 100)
surface.DrawRect(x, ry + rowH - 1, panelW, 1)
local cy = ry + rowH / 2
local avSize = rowH - 14
drawAvatar(ply, colAvatar, ry + 7, avSize)
draw.SimpleText(ply:Nick(), "tab_nick", colNick, cy,
isMe and Color(255, 220, 220) or TEXT,
TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER)
draw.SimpleText(tostring(ply:GetNWInt("PersistentKills", ply:Frags())),
"tab_value", colKills, cy, ACCENT,
TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER)
draw.SimpleText(ply:Ping() .. " ms", "tab_value", colPing, cy,
pingColor(ply:Ping()), TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER)
draw.SimpleText(tostring(ply:UserID()), "tab_small", colID, cy, DIM,
TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER)
end
-- Футер
local fy = y + panelH - 22
draw.SimpleText("Игроков: " .. count, "tab_small", x + 20, fy, DIM, TEXT_ALIGN_LEFT, TEXT_ALIGN_TOP)
draw.SimpleText(GetHostName() or "", "tab_small", x + panelW - 20, fy, DIM, TEXT_ALIGN_RIGHT, TEXT_ALIGN_TOP)
end
-- ============ Хуки ============
hook.Add("HUDPaint", "Tab_kdm1eHvH", function()
if not input.IsKeyDown(KEY_TAB) then return end
drawScoreboard()
end)
hook.Add("HUDShouldDraw", "Tab_kdm1eHvH_HideDefault", function(name)
if name == "CHudPlayerList" then return false end
end)
print("[kdm1eHvH] Таб загружен успешно!")