add sborka
This commit is contained in:
119
garrysmod/gamemodes/militaryrp/plugins/nlr/cl_plugin.lua
Normal file
119
garrysmod/gamemodes/militaryrp/plugins/nlr/cl_plugin.lua
Normal 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
|
||||
Reference in New Issue
Block a user