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,119 @@
local PLUGIN = PLUGIN
if CLIENT then
-- Данные NLR
local nlrEndTime = 0
local inWarning = false
local warningEndTime = 0
-- Шрифты
surface.CreateFont("NLRTimer", {
font = "Exo 2",
size = 32,
weight = 700
})
surface.CreateFont("NLRWarning", {
font = "Exo 2",
size = 48,
weight = 700
})
-- Получение сетевых сообщений
net.Receive("ixNLRStart", function()
nlrEndTime = net.ReadFloat()
inWarning = false
warningEndTime = 0
end)
net.Receive("ixNLREnd", function()
nlrEndTime = 0
inWarning = false
warningEndTime = 0
end)
net.Receive("ixNLRWarning", function()
inWarning = net.ReadBool()
warningEndTime = net.ReadFloat()
end)
-- Отрисовка эффектов
function PLUGIN:HUDPaint()
local ply = LocalPlayer()
if not IsValid(ply) or not ply:Alive() then return end
local scrW, scrH = ScrW(), ScrH()
local currentTime = CurTime()
-- Если NLR активен
if nlrEndTime > 0 and currentTime < nlrEndTime then
local timeLeft = math.ceil(nlrEndTime - currentTime)
local minutes = math.floor(timeLeft / 60)
local seconds = timeLeft % 60
-- Таймер NLR
local timerText = string.format("NLR: %02d:%02d", minutes, seconds)
draw.SimpleText(timerText, "NLRTimer", scrW / 2, 50, Color(255, 200, 0), TEXT_ALIGN_CENTER, TEXT_ALIGN_TOP)
end
-- Если игрок вне зоны (предупреждение)
if inWarning and warningEndTime > 0 then
local warningTimeLeft = math.ceil(warningEndTime - currentTime)
if warningTimeLeft > 0 then
-- Красный экран
local alpha = 100 + math.sin(currentTime * 5) * 50
surface.SetDrawColor(255, 0, 0, alpha)
surface.DrawRect(0, 0, scrW, scrH)
-- Рамка
surface.SetDrawColor(255, 0, 0, 255)
surface.DrawOutlinedRect(10, 10, scrW - 20, scrH - 20, 5)
-- Предупреждение
local warningText = "ВЕРНИТЕСЬ НА БАЗУ!"
draw.SimpleText(warningText, "NLRWarning", scrW / 2, scrH / 2 - 50, Color(255, 255, 255), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
-- Таймер предупреждения
local warningTimerText = string.format("Осталось: %d секунд", warningTimeLeft)
draw.SimpleText(warningTimerText, "NLRTimer", scrW / 2, scrH / 2 + 20, Color(255, 255, 255), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
end
end
end
-- Отображение информации о зонах (для дебага)
function PLUGIN:DrawNLRZones()
if not GetConVar("developer"):GetBool() then return end
local ply = LocalPlayer()
if not IsValid(ply) then return end
local char = ply:GetCharacter()
if not char then return end
local faction = char:GetFaction()
local zones = self.config.zones[faction]
if not zones then return end
for _, zone in ipairs(zones) do
-- Рисуем границы зоны (упрощенно)
local corners = {
Vector(zone.min.x, zone.min.y, zone.min.z),
Vector(zone.max.x, zone.min.y, zone.min.z),
Vector(zone.max.x, zone.max.y, zone.min.z),
Vector(zone.min.x, zone.max.y, zone.min.z),
Vector(zone.min.x, zone.min.y, zone.max.z),
Vector(zone.max.x, zone.min.y, zone.max.z),
Vector(zone.max.x, zone.max.y, zone.max.z),
Vector(zone.min.x, zone.max.y, zone.max.z),
}
for i = 1, 4 do
debugoverlay.Line(corners[i], corners[i % 4 + 1], 0.1, Color(0, 255, 0), true)
debugoverlay.Line(corners[i + 4], corners[(i % 4 + 1) + 4], 0.1, Color(0, 255, 0), true)
debugoverlay.Line(corners[i], corners[i + 4], 0.1, Color(0, 255, 0), true)
end
end
end
end