Files
2026-03-31 10:27:04 +03:00

132 lines
5.0 KiB
Lua

local PLUGIN = PLUGIN
local event_active = false
local event_start_time = 0
local event_zone_active = false
local event_zone_min = nil
local event_zone_max = nil
-- Net Receivers
net.Receive("events_system_notification", function()
local message = net.ReadString()
local lines = string.Split(message, "\n")
for _, line in ipairs(lines) do
if (string.Trim(line) != "") then
chat.AddText(Color(255, 100, 100), " [EVENT] ", Color(255, 255, 255), line)
end
end
surface.PlaySound("buttons/button15.wav")
end)
net.Receive("events_system_hud_update", function()
event_active = net.ReadBool()
event_start_time = net.ReadInt(32)
end)
net.Receive("events_system_zone_update", function()
event_zone_active = net.ReadBool()
if (event_zone_active) then
event_zone_min = net.ReadVector()
event_zone_max = net.ReadVector()
else
event_zone_min = nil
event_zone_max = nil
end
end)
-- Fonts
surface.CreateFont("EventHUD_Title", { font = "Roboto", size = 24, weight = 700, antialias = true, shadow = true })
surface.CreateFont("EventHUD_Time", { font = "Roboto", size = 32, weight = 800, antialias = true, shadow = false })
surface.CreateFont("EventHUD_Label", { font = "Roboto", size = 16, weight = 500, antialias = true })
surface.CreateFont("EventHUD_Warning", { font = "Roboto", size = 14, weight = 600, antialias = true })
local function DrawGradientBox(x, y, w, h, color1, color2, vertical)
local steps = 20
local step_size = vertical and (h / steps) or (w / steps)
for i = 0, steps - 1 do
local t = i / steps
local r = Lerp(t, color1.r, color2.r)
local g = Lerp(t, color1.g, color2.g)
local b = Lerp(t, color1.b, color2.b)
local a = Lerp(t, color1.a, color2.a)
surface.SetDrawColor(r, g, b, a)
if (vertical) then
surface.DrawRect(x, y + i * step_size, w, step_size + 1)
else
surface.DrawRect(x + i * step_size, y, step_size + 1, h)
end
end
end
function PLUGIN:DrawEventHUD()
local active = event_active or GetGlobalBool("events_system_active", false)
local start_time = event_start_time == 0 and GetGlobalInt("events_system_start_time", 0) or event_start_time
if (!active or start_time == 0) then return end
local elapsed = CurTime() - start_time
local minutes = math.floor(elapsed / 60)
local seconds = math.floor(elapsed % 60)
local padding = 20
local x = ScrW() - 320 - padding
local y = padding
local w, h = 320, 140
DrawGradientBox(x, y, w, h, Color(15, 15, 20, 220), Color(25, 25, 35, 200), true)
local pulse = math.abs(math.sin(CurTime() * 2))
DrawGradientBox(x, y, w, 4, Color(255, 50, 80, 180 + pulse * 75), Color(255, 100, 50, 180 + pulse * 75), false)
surface.SetDrawColor(255, 80, 100, 100 + pulse * 80)
for i = 1, 2 do surface.DrawOutlinedRect(x - i, y - i, w + i * 2, h + i * 2, 1) end
local offsetY = y + 15
surface.SetFont("EventHUD_Title")
surface.SetTextColor(255, 80 + pulse * 50, 80 + pulse * 50, 255)
local title = "⚔ БОЕВОЙ ИВЕНТ"
local tw, th = surface.GetTextSize(title)
surface.SetTextPos(x + (w - tw) / 2, offsetY)
surface.DrawText(title)
offsetY = offsetY + th + 10
surface.SetFont("EventHUD_Time")
surface.SetTextColor(255, 255, 255, 255)
local time_text = string.format("%02d:%02d", minutes, seconds)
tw, th = surface.GetTextSize(time_text)
surface.SetTextPos(x + (w - tw) / 2, offsetY)
surface.DrawText(time_text)
offsetY = offsetY + th + 10
surface.SetFont("EventHUD_Warning")
surface.SetTextColor(255, 220, 100, 200 + pulse * 55)
local warning = "⚠ При смерти выбываете"
tw, th = surface.GetTextSize(warning)
surface.SetTextPos(x + (w - tw) / 2, offsetY)
surface.DrawText(warning)
end
function PLUGIN:PostDrawTranslucentRenderables()
if (!event_zone_active or !event_zone_min or !event_zone_max) then return end
local min, max = event_zone_min, event_zone_max
local corners = {
Vector(min.x, min.y, min.z), Vector(max.x, min.y, min.z), Vector(max.x, max.y, min.z), Vector(min.x, max.y, min.z),
Vector(min.x, min.y, max.z), Vector(max.x, min.y, max.z), Vector(max.x, max.y, max.z), Vector(min.x, max.y, max.z)
}
local color = Color(0, 255, 100, 150)
render.DrawLine(corners[1], corners[2], color, true)
render.DrawLine(corners[2], corners[3], color, true)
render.DrawLine(corners[3], corners[4], color, true)
render.DrawLine(corners[4], corners[1], color, true)
render.DrawLine(corners[5], corners[6], color, true)
render.DrawLine(corners[6], corners[7], color, true)
render.DrawLine(corners[7], corners[8], color, true)
render.DrawLine(corners[8], corners[5], color, true)
render.DrawLine(corners[1], corners[5], color, true)
render.DrawLine(corners[2], corners[6], color, true)
render.DrawLine(corners[3], corners[7], color, true)
render.DrawLine(corners[4], corners[8], color, true)
end