add sborka
This commit is contained in:
@@ -0,0 +1,212 @@
|
||||
local PLUGIN = PLUGIN
|
||||
|
||||
PLUGIN.name = "Система Ивентов"
|
||||
PLUGIN.author = "Scripty & RefoselTeamWork"
|
||||
PLUGIN.description = "Продвинутая система ивентов с сужающейся зоной и кастомными спавнами."
|
||||
|
||||
ix.config.Add("eventAllowedRanks", "superadmin,curator,ivent", "Ранги, которым разрешено управление ивентами (через запятую).", nil, {
|
||||
category = "Events"
|
||||
})
|
||||
|
||||
-- Shared Config (ported from sh_config.lua)
|
||||
PLUGIN.Config = {
|
||||
sounds = {
|
||||
event_start = "ambient/alarms/klaxon1.wav",
|
||||
event_end = "ambient/levels/citadel/citadel_hit.wav",
|
||||
player_join = "buttons/button15.wav"
|
||||
}
|
||||
}
|
||||
|
||||
ix.util.Include("sv_plugin.lua")
|
||||
ix.util.Include("sv_doomsday.lua")
|
||||
ix.util.Include("cl_plugin.lua")
|
||||
ix.util.Include("cl_doomsday.lua")
|
||||
|
||||
-- Commands Adaptation
|
||||
ix.command.Add("EventStart", {
|
||||
description = "Запустить стандартный боевой ивент.",
|
||||
privilege = "Manage Events",
|
||||
adminOnly = true,
|
||||
OnRun = function(self, client)
|
||||
if (PLUGIN.active) then
|
||||
return "Ивент уже активен!"
|
||||
end
|
||||
PLUGIN:StartEvent(client)
|
||||
return "Запуск ивента..."
|
||||
end
|
||||
})
|
||||
|
||||
ix.command.Add("EventStop", {
|
||||
description = "Остановить текущий активный ивент.",
|
||||
privilege = "Manage Events",
|
||||
adminOnly = true,
|
||||
OnRun = function(self, client)
|
||||
if (!PLUGIN.active) then
|
||||
return "Нет активного ивента для остановки!"
|
||||
end
|
||||
PLUGIN:EndEvent(client)
|
||||
return "Остановка ивента..."
|
||||
end
|
||||
})
|
||||
|
||||
ix.command.Add("EventOtkat", {
|
||||
description = "Отменить активный ивент с уведомлением.",
|
||||
privilege = "Manage Events",
|
||||
adminOnly = true,
|
||||
OnRun = function(self, client)
|
||||
if (!PLUGIN.active) then
|
||||
return "Нет активного ивента для отмены!"
|
||||
end
|
||||
PLUGIN:EndEvent(client, true)
|
||||
return "Отмена ивента..."
|
||||
end
|
||||
})
|
||||
|
||||
ix.command.Add("EventJoin", {
|
||||
description = "Присоединиться к активному ивенту.",
|
||||
OnRun = function(self, client)
|
||||
if (!PLUGIN.active) then
|
||||
return "Нет активного ивента для входа."
|
||||
end
|
||||
|
||||
if (PLUGIN.participants[client:SteamID()]) then
|
||||
return "Вы уже участвуете!"
|
||||
end
|
||||
|
||||
PLUGIN:AddParticipant(client)
|
||||
|
||||
local participants_count = table.Count(PLUGIN.participants)
|
||||
PLUGIN:BroadcastMessage(string.format("%s присоединился к ивенту! Участников: %d", client:Nick(), participants_count))
|
||||
end
|
||||
})
|
||||
|
||||
ix.command.Add("EventAddAll", {
|
||||
description = "Добавить всех игроков онлайн в ивент.",
|
||||
privilege = "Manage Events",
|
||||
adminOnly = true,
|
||||
OnRun = function(self, client)
|
||||
if (!PLUGIN.active) then
|
||||
return "Ивент не активен!"
|
||||
end
|
||||
PLUGIN:AddAllPlayers(client)
|
||||
end
|
||||
})
|
||||
|
||||
ix.command.Add("EventSetZone1", {
|
||||
description = "Установить первую точку зоны ивента.",
|
||||
privilege = "Manage Events",
|
||||
adminOnly = true,
|
||||
OnRun = function(self, client)
|
||||
PLUGIN:SetZonePoint1(client)
|
||||
end
|
||||
})
|
||||
|
||||
ix.command.Add("EventSetZone2", {
|
||||
description = "Установить вторую точку зоны ивента.",
|
||||
privilege = "Manage Events",
|
||||
adminOnly = true,
|
||||
OnRun = function(self, client)
|
||||
PLUGIN:SetZonePoint2(client)
|
||||
end
|
||||
})
|
||||
|
||||
ix.command.Add("EventClearZone", {
|
||||
description = "Очистить зону ивента.",
|
||||
privilege = "Manage Events",
|
||||
adminOnly = true,
|
||||
OnRun = function(self, client)
|
||||
PLUGIN:ClearZone(client)
|
||||
end
|
||||
})
|
||||
|
||||
ix.command.Add("EventZoneStart", {
|
||||
description = "Начать сужение зоны ивента.",
|
||||
privilege = "Manage Events",
|
||||
adminOnly = true,
|
||||
OnRun = function(self, client)
|
||||
PLUGIN:StartZoneShrinking(client)
|
||||
end
|
||||
})
|
||||
|
||||
ix.command.Add("EventZoneStop", {
|
||||
description = "Остановить сужение зоны ивента.",
|
||||
privilege = "Manage Events",
|
||||
adminOnly = true,
|
||||
OnRun = function(self, client)
|
||||
PLUGIN:StopZoneShrinking(client)
|
||||
end
|
||||
})
|
||||
|
||||
-- Temporary Spawns Commands
|
||||
ix.command.Add("EventSpawnAdd", {
|
||||
description = "Добавить временный спавн для фракции или spec_def.",
|
||||
privilege = "Manage Events",
|
||||
adminOnly = true,
|
||||
arguments = {
|
||||
ix.type.string, -- Faction Name
|
||||
bit.bor(ix.type.number, ix.type.optional) -- spec_def
|
||||
},
|
||||
OnRun = function(self, client, factionName, specDef)
|
||||
local faction = ix.faction.teams[factionName]
|
||||
if (!faction) then
|
||||
-- Try fuzzy match
|
||||
for _, v in pairs(ix.faction.indices) do
|
||||
if (ix.util.StringMatches(v.name, factionName) or ix.util.StringMatches(v.uniqueID, factionName)) then
|
||||
faction = v
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if (!faction) then
|
||||
return "Некорректное название фракции!"
|
||||
end
|
||||
|
||||
PLUGIN:AddTempSpawn(faction.uniqueID, specDef, client:GetPos(), client:GetAngles())
|
||||
|
||||
local msg = "Временный спавн добавлен для фракции: " .. faction.name
|
||||
if (specDef) then
|
||||
msg = msg .. " (spec_def: " .. specDef .. ")"
|
||||
end
|
||||
return msg
|
||||
end
|
||||
})
|
||||
|
||||
ix.command.Add("EventSpawnRemove", {
|
||||
description = "Удалить временные спавны ивента в радиусе.",
|
||||
privilege = "Manage Events",
|
||||
adminOnly = true,
|
||||
arguments = {
|
||||
bit.bor(ix.type.number, ix.type.optional) -- Radius
|
||||
},
|
||||
OnRun = function(self, client, radius)
|
||||
radius = radius or 120
|
||||
local count = PLUGIN:RemoveTempSpawns(client:GetPos(), radius)
|
||||
return "Удалено " .. count .. " временных спавнов."
|
||||
end
|
||||
})
|
||||
|
||||
-- Doomsday Commands
|
||||
ix.command.Add("DoomsdayStart", {
|
||||
description = "Запустить ивент Судная Ночь.",
|
||||
privilege = "Manage Events",
|
||||
adminOnly = true,
|
||||
OnRun = function(self, client)
|
||||
if (DoomsdayNight.active) then
|
||||
return "Судная Ночь уже активна!"
|
||||
end
|
||||
DoomsdayNight:StartEvent(client)
|
||||
end
|
||||
})
|
||||
|
||||
ix.command.Add("DoomsdayStop", {
|
||||
description = "Остановить ивент Судная Ночь.",
|
||||
privilege = "Manage Events",
|
||||
adminOnly = true,
|
||||
OnRun = function(self, client)
|
||||
if (!DoomsdayNight.active) then
|
||||
return "Судная Ночь не активна!"
|
||||
end
|
||||
DoomsdayNight:EndEvent(client, true)
|
||||
end
|
||||
})
|
||||
Reference in New Issue
Block a user