add sborka
This commit is contained in:
@@ -0,0 +1,138 @@
|
||||
local PLUGIN = PLUGIN
|
||||
|
||||
PLUGIN.name = "Murder Drones Death Screen"
|
||||
PLUGIN.description = "Добавляет кинематографичный экран смерти в стиле Murder Drones"
|
||||
PLUGIN.author = "Scripty & Ported to Helix"
|
||||
|
||||
-- Конфигурация
|
||||
ix.config.Add("deathScreenEnabled", true, "Включить экран смерти Murder Drones", nil, {
|
||||
category = "Death Screen"
|
||||
})
|
||||
|
||||
ix.config.Add("deathScreenDuration", 300, "Длительность показа экрана смерти (секунды)", nil, {
|
||||
data = {min = 1, max = 600, decimals = 1},
|
||||
category = "Death Screen"
|
||||
})
|
||||
|
||||
ix.config.Add("deathScreenMinDuration", 20, "Минимальное время до возможности возродиться (секунды)", nil, {
|
||||
data = {min = 0, max = 60, decimals = 1},
|
||||
category = "Death Screen"
|
||||
})
|
||||
|
||||
ix.config.Add("deathScreenFadeInSpeed", 5, "Скорость появления экрана", nil, {
|
||||
data = {min = 1, max = 20, decimals = 1},
|
||||
category = "Death Screen"
|
||||
})
|
||||
|
||||
ix.config.Add("deathScreenTextFadeSpeed", 0.5, "Скорость появления текста", nil, {
|
||||
data = {min = 0.1, max = 5, decimals = 1},
|
||||
category = "Death Screen"
|
||||
})
|
||||
|
||||
ix.config.Add("deathScreenTextColor", Color(132, 43, 60), "Цвет текста экрана смерти", nil, {
|
||||
category = "Death Screen"
|
||||
})
|
||||
|
||||
ix.config.Add("deathScreenMainText", "YOU'RE DEAD", "Основной текст экрана смерти", nil, {
|
||||
category = "Death Screen"
|
||||
})
|
||||
|
||||
ix.config.Add("deathScreenSubText", "[IDIOT]", "Подзаголовок экрана смерти", nil, {
|
||||
category = "Death Screen"
|
||||
})
|
||||
|
||||
ix.config.Add("deathScreenRespawnText", "НАЖМИТЕ [ПРОБЕЛ] ЧТОБЫ ВОЗРОДИТЬСЯ", "Текст подсказки для возрождения", nil, {
|
||||
category = "Death Screen"
|
||||
})
|
||||
|
||||
ix.config.Add("deathScreenDisableSound", true, "Отключить стандартный звук смерти", nil, {
|
||||
category = "Death Screen"
|
||||
})
|
||||
|
||||
ix.config.Add("deathPenaltyAmount", 3000, "Сумма штрафа за возрождение", nil, {
|
||||
data = {min = 0, max = 100000},
|
||||
category = "Death Screen"
|
||||
})
|
||||
|
||||
ix.config.Add("deathPenaltyWarningText", "При сдаче с вас спишут штраф: %s", "Текст предупреждения о штрафе", nil, {
|
||||
category = "Death Screen"
|
||||
})
|
||||
|
||||
ix.config.Add("deathRespawnMinBalance", 5000, "Минимальный баланс для возможности сдаться", nil, {
|
||||
data = {min = 0, max = 100000},
|
||||
category = "Death Screen"
|
||||
})
|
||||
|
||||
if SERVER then
|
||||
util.AddNetworkString("ixDeathScreen")
|
||||
util.AddNetworkString("ixPlayerRespawn")
|
||||
|
||||
function PLUGIN:PlayerDeath(ply, inflictor, attacker)
|
||||
if not ix.config.Get("deathScreenEnabled") then
|
||||
return
|
||||
end
|
||||
|
||||
local maxDuration = ix.config.Get("deathScreenDuration", 300)
|
||||
local minDuration = ix.config.Get("deathScreenMinDuration", 20)
|
||||
local killerName = "Неизвестно"
|
||||
|
||||
if (IsValid(attacker)) then
|
||||
if (attacker:IsPlayer()) then
|
||||
killerName = attacker:Name()
|
||||
elseif (attacker:IsNPC()) then
|
||||
killerName = attacker:GetClass()
|
||||
elseif (IsValid(attacker:GetOwner()) and attacker:GetOwner():IsPlayer()) then
|
||||
killerName = attacker:GetOwner():Name()
|
||||
elseif (attacker.GetCreator and IsValid(attacker:GetCreator()) and attacker:GetCreator():IsPlayer()) then
|
||||
killerName = attacker:GetCreator():Name()
|
||||
else
|
||||
killerName = (attacker:GetClass() != "worldspawn") and attacker:GetClass() or "Окружение"
|
||||
end
|
||||
end
|
||||
|
||||
net.Start("ixDeathScreen")
|
||||
net.WriteFloat(maxDuration)
|
||||
net.WriteFloat(minDuration)
|
||||
net.WriteString(killerName)
|
||||
net.Send(ply)
|
||||
|
||||
-- Блокируем стандартный спавн Helix
|
||||
local duration = RespawnTime[ply:GetUserGroup()] or 60
|
||||
ply.ixDeathTime = RealTime()
|
||||
ply.ixNextSpawn = RealTime() + duration
|
||||
ply:SetNetVar("deathTime", CurTime() + maxDuration)
|
||||
|
||||
-- Сохраняем реальное минимальное время для проверки
|
||||
ply.ixDeathScreenRespawnTime = CurTime() + minDuration
|
||||
end
|
||||
|
||||
-- Разрешаем создание стандартного регдолла Helix
|
||||
function PLUGIN:ShouldSpawnClientRagdoll(ply)
|
||||
return true
|
||||
end
|
||||
|
||||
net.Receive("ixPlayerRespawn", function(len, ply)
|
||||
if (IsValid(ply) and !ply:Alive() and ply:GetCharacter()) then
|
||||
if ((ply.ixDeathScreenRespawnTime or 0) <= CurTime()) then
|
||||
local character = ply:GetCharacter()
|
||||
local minBalance = ix.config.Get("deathRespawnMinBalance", 5000)
|
||||
|
||||
-- Проверка баланса перед спавном
|
||||
if (character:GetMoney() < minBalance) then
|
||||
ply:Notify("У вас недостаточно средств, чтобы сдаться. Нужно минимум " .. ix.currency.Get(minBalance))
|
||||
return
|
||||
end
|
||||
|
||||
local penalty = ix.config.Get("deathPenaltyAmount", 3000)
|
||||
if (penalty > 0) then
|
||||
character:TakeMoney(penalty)
|
||||
ply:Notify("Вы сдались. С вашего счета списано " .. ix.currency.Get(penalty) .. " штрафа.")
|
||||
end
|
||||
|
||||
ply:Spawn()
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
ix.util.Include("cl_deathscreen.lua")
|
||||
Reference in New Issue
Block a user