add sborka

This commit is contained in:
2026-03-31 10:27:04 +03:00
commit f5e5f56c84
2345 changed files with 382127 additions and 0 deletions

View File

@@ -0,0 +1,194 @@
local PLUGIN = PLUGIN
function PLUGIN:HUDPaint()
local client = LocalPlayer()
if not IsValid(client) then return end
if not client:IsAdminMode() then return end
local scrW, scrH = ScrW(), ScrH()
local w, h = 220, 36
local x, y = scrW / 2 - w / 2, 20
surface.SetDrawColor(13, 13, 13, 220)
surface.DrawRect(x, y, w, h)
surface.SetDrawColor(200, 80, 80, 255)
surface.DrawOutlinedRect(x, y, w, h, 2)
draw.SimpleText("ADMIN MODE", "ixMenuButtonFont", scrW / 2, y + h / 2,
Color(255, 255, 255), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
end
surface.CreateFont("AdminESPFontSmall", {
font = "Arial",
size = 12,
weight = 500
})
CLIENT_ADMIN_GROUPS = CLIENT_ADMIN_GROUPS or {}
local function Draw3DBox(ent, color)
local mins, maxs = ent:OBBMins(), ent:OBBMaxs()
local corners = {
Vector(mins.x, mins.y, mins.z),
Vector(mins.x, maxs.y, mins.z),
Vector(maxs.x, maxs.y, mins.z),
Vector(maxs.x, mins.y, mins.z),
Vector(mins.x, mins.y, maxs.z),
Vector(mins.x, maxs.y, maxs.z),
Vector(maxs.x, maxs.y, maxs.z),
Vector(maxs.x, mins.y, maxs.z),
}
local lines = {
{1,2},{2,3},{3,4},{4,1},
{5,6},{6,7},{7,8},{8,5},
{1,5},{2,6},{3,7},{4,8}
}
cam.Start3D()
render.SetColorMaterial()
for _, l in ipairs(lines) do
render.DrawLine(
ent:LocalToWorld(corners[l[1]]),
ent:LocalToWorld(corners[l[2]]),
color, true
)
end
cam.End3D()
end
local function CanSeeESP()
local client = LocalPlayer()
if not IsValid(client) then return false end
if not client:IsAdminMode() then return false end
local group = client:GetUserGroup()
if not CLIENT_ADMIN_GROUPS[group] then return false end
return true
end
hook.Add("HUDPaint", "AdminMode_ESP", function()
if not CanSeeESP() then return end
local client = LocalPlayer()
for _, ply in ipairs(player.GetAll()) do
if ply ~= client and ply:Alive() then
local distance = client:GetPos():Distance(ply:GetPos())
Draw3DBox(ply, Color(255, 60, 60))
local char = ply:GetCharacter()
local top = (ply:GetPos() + Vector(0,0,85)):ToScreen()
local bottom = (ply:GetPos() + Vector(0,0,5)):ToScreen()
local faction = "Неизвестно"
local podr = "Неизвестно"
local spec = "Неизвестно"
local rank = "Неизвестно"
local samGroup = ply:GetUserGroup()
local samName = samGroup
if sam and sam.ranks and sam.ranks[samGroup] and sam.ranks[samGroup].Name then
samName = sam.ranks[samGroup].Name
end
if char then
local factionID = char:GetFaction()
local factionTable = ix.faction.indices[factionID]
if factionTable and factionTable.name then
faction = factionTable.name
end
if factionTable and factionTable.Podr and char.GetPodr then
local id = char:GetPodr()
if factionTable.Podr[id] and factionTable.Podr[id].name then
podr = factionTable.Podr[id].name
end
end
if factionTable and factionTable.Spec and char.GetSpec then
local id = char:GetSpec()
if factionTable.Spec[id] and factionTable.Spec[id].name then
spec = factionTable.Spec[id].name
end
end
if factionTable and factionTable.Ranks and char.GetRank then
local id = char:GetRank()
if factionTable.Ranks[id] and factionTable.Ranks[id][1] then
rank = factionTable.Ranks[id][1]
end
end
end
local steamid = ply:SteamID()
local hp = ply:Health()
local armor = ply:Armor()
local wep = IsValid(ply:GetActiveWeapon()) and ply:GetActiveWeapon():GetClass() or ""
local topLines = {}
if distance > 500 then
-- Издалека: только ник
topLines = { ply:Name() }
elseif distance > 200 then
-- Средняя дальность: ник + фракция + SteamID
topLines = {
ply:Name(),
"" .. faction,
"" .. steamid
}
else
-- Близко: вся информация
topLines = {
ply:Name(),
"" .. faction,
"" .. podr,
"" .. spec,
"" .. rank,
"" .. samName,
"" .. steamid
}
end
local y = top.y
for _, text in ipairs(topLines) do
surface.SetDrawColor(0, 0, 0, 160)
surface.DrawRect(top.x - 50, y - 5, 100, 12)
draw.SimpleText(text, "AdminESPFontSmall", top.x, y,
Color(255,255,255), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
y = y + 15
end
-- Нижняя информация всегда показывается близко
if distance <= 200 then
local bottomLines = {
"HP: " .. hp,
"Armor: " .. armor,
"Weapon: " .. wep
}
local y2 = bottom.y
for _, text in ipairs(bottomLines) do
surface.SetDrawColor(0, 0, 0, 160)
surface.DrawRect(bottom.x - 40, y2 - 5, 80, 10)
draw.SimpleText(text, "AdminESPFontSmall", bottom.x, y2,
Color(255,255,255), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
y2 = y2 + 12
end
end
end
end
end)