113 lines
4.1 KiB
Lua
113 lines
4.1 KiB
Lua
PLUGIN.name = "NLR System"
|
||
PLUGIN.author = "RefoselTeamWork"
|
||
PLUGIN.description = "New Life Rule система для Military RP"
|
||
|
||
-- Конфигурация зон для каждой фракции
|
||
PLUGIN.config = {
|
||
-- Время NLR после смерти (в секундах)
|
||
nlrTime = 300, -- 5 минут
|
||
|
||
-- Время предупреждения перед смертью (в секундах)
|
||
warningTime = 15, -- 1 минута
|
||
|
||
-- Разрешенные зоны для каждой фракции
|
||
zones = {
|
||
-- Россия
|
||
[FACTION_RUSSIAN] = {
|
||
-- Основная база
|
||
{
|
||
min = Vector(16209.329102, 16203.910156, -1046.129639),
|
||
max = Vector(10388.949219, 9995.708984, 2110.358643),
|
||
name = "Российская база"
|
||
},
|
||
-- База Русичей (добавлено чтобы NLR не убивал при спавне)
|
||
{
|
||
min = Vector(7412.163574, 14589.896484, -287.295044),
|
||
max = Vector(6238.277832, 13538.660156, 769.099426),
|
||
name = "База Русичей"
|
||
},
|
||
-- База Украины (теперь РФ может быть тут без NLR)
|
||
{
|
||
min = Vector(-16190.572266, -12279.253906, 1879.668945),
|
||
max = Vector(-12284.045898, -4947.237305, -458.217285),
|
||
name = "Украинская база"
|
||
}
|
||
},
|
||
|
||
-- Украина
|
||
[FACTION_UKRAINE] = {
|
||
-- Основная база
|
||
{
|
||
min = Vector(-16190.572266, -12279.253906, 1879.668945),
|
||
max = Vector(-12284.045898, -4947.237305, -458.217285),
|
||
name = "Украинская база"
|
||
},
|
||
-- База России (теперь УК может быть тут без NLR)
|
||
{
|
||
min = Vector(16209.329102, 16203.910156, -1046.129639),
|
||
max = Vector(10388.949219, 9995.708984, 2110.358643),
|
||
name = "Российская база"
|
||
},
|
||
-- База Русичей
|
||
{
|
||
min = Vector(7412.163574, 14589.896484, -287.295044),
|
||
max = Vector(6238.277832, 13538.660156, 769.099426),
|
||
name = "База Русичей"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
-- Проверка, находится ли позиция в зоне
|
||
function PLUGIN:IsInZone(pos, zone)
|
||
-- Нормализуем координаты зоны (min должен быть меньше max)
|
||
local minX = math.min(zone.min.x, zone.max.x)
|
||
local maxX = math.max(zone.min.x, zone.max.x)
|
||
local minY = math.min(zone.min.y, zone.max.y)
|
||
local maxY = math.max(zone.min.y, zone.max.y)
|
||
local minZ = math.min(zone.min.z, zone.max.z)
|
||
local maxZ = math.max(zone.min.z, zone.max.z)
|
||
|
||
return pos.x >= minX and pos.x <= maxX and
|
||
pos.y >= minY and pos.y <= maxY and
|
||
pos.z >= minZ and pos.z <= maxZ
|
||
end
|
||
|
||
-- Проверка, находится ли игрок в разрешенной зоне
|
||
function PLUGIN:IsPlayerInAllowedZone(ply)
|
||
local char = ply:GetCharacter()
|
||
if not char then return false end
|
||
|
||
local faction = char:GetFaction()
|
||
local zones = self.config.zones[faction]
|
||
|
||
if not zones then return false end
|
||
|
||
local pos = ply:GetPos()
|
||
for _, zone in ipairs(zones) do
|
||
if self:IsInZone(pos, zone) then
|
||
return true, zone.name
|
||
end
|
||
end
|
||
|
||
return false
|
||
end
|
||
|
||
-- Локализация
|
||
if CLIENT then
|
||
ix.lang.AddTable("russian", {
|
||
nlrResetSuccess = "NLR игрока %s успешно сброшен",
|
||
nlrNotActive = "У игрока %s нет активного NLR",
|
||
cmdResetNLR = "Сбросить NLR игрока"
|
||
})
|
||
|
||
ix.lang.AddTable("english", {
|
||
nlrResetSuccess = "NLR of %s has been reset",
|
||
nlrNotActive = "Player %s has no active NLR",
|
||
cmdResetNLR = "Reset player's NLR"
|
||
})
|
||
end
|
||
|
||
ix.util.Include("sv_plugin.lua")
|
||
ix.util.Include("cl_plugin.lua")
|