Files
VnUtest/garrysmod/gamemodes/militaryrp/plugins/nlr/cl_plugin.lua
2026-03-31 10:27:04 +03:00

120 lines
4.4 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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