add sborka

This commit is contained in:
2026-03-31 10:27:04 +03:00
commit f5e5f56c84
2345 changed files with 382127 additions and 0 deletions

View File

@@ -0,0 +1,116 @@
local PLUGIN = PLUGIN
local groupToConfig = {
["sponsor"] = "killRewardSponsor",
["premium"] = "killRewardPremium",
["vip_plus"] = "killRewardVIPPlus",
["vip"] = "killRewardVIP",
["admin"] = "killRewardAdmin",
["st.admin"] = "killRewardAdmin",
["curator"] = "killRewardAdmin",
["projectteam"] = "killRewardAdmin",
["teh.admin"] = "killRewardAdmin",
["superadmin"] = "killRewardAdmin"
}
-- Прямой вывод в консоль при загрузке файла для проверки
print("[KillRewards] Server-side script loaded successfully!")
local function FormatMoney(amount, ply)
local amountVal = math.floor(math.abs(amount))
local formatted = tostring(amountVal):reverse():gsub("(%d%d%d)", "%1 "):reverse():gsub("^ ", "")
local char = ply:GetCharacter()
if (!char) then return formatted end
local faction = char:GetFaction()
-- Логика из F4 меню (cl_plugin.lua:29-38)
if (faction == _G.FACTION_UKRAINE) then
return formatted .. " валюты "
elseif (faction == _G.FACTION_RUSSIAN) then
return formatted .. " валюты "
end
return formatted
end
-- Используем PLUGIN:PlayerDeath вместо hook.Add для лучшей интеграции с Helix
function PLUGIN:PlayerDeath(victim, inflictor, attacker)
if (!IsValid(victim) or !victim:IsPlayer()) then return end
local victimChar = victim:GetCharacter()
if (!victimChar) then return end
-- Штраф за смерть (УДАЛЕНО: теперь штраф списывается в плагине death_screen при нажатии Пробела)
--[[
local deathPenalty = ix.config.Get("deathPenalty", 3000)
if (deathPenalty > 0) then
local money = victimChar:GetMoney()
local toTake = math.min(money, deathPenalty)
if (toTake > 0) then
victimChar:TakeMoney(toTake)
victim:NotifyLocalized("deathPenaltyMsg", FormatMoney(toTake, victim))
end
end
]]
-- Пытаемся найти реального игрока-убийцу
local killer = attacker
if (IsValid(killer)) then
if (killer.GetDriver and IsValid(killer:GetDriver())) then
killer = killer:GetDriver()
elseif (killer.lvsGetDriver and IsValid(killer:lvsGetDriver())) then
killer = killer:lvsGetDriver()
elseif (killer:IsVehicle() and killer.GetPassenger and IsValid(killer:GetPassenger(0))) then
killer = killer:GetPassenger(0)
elseif (IsValid(killer:GetOwner()) and killer:GetOwner():IsPlayer()) then
killer = killer:GetOwner()
elseif (killer.GetCreator and IsValid(killer:GetCreator()) and killer:GetCreator():IsPlayer()) then
killer = killer:GetCreator()
end
end
-- Если убийца не игрок или убил сам себя - выходим
if (!IsValid(killer) or !killer:IsPlayer() or killer == victim) then
return
end
local killerChar = killer:GetCharacter()
if (!killerChar) then return end
-- Отладочная инфа в консоль сервера (безопасное форматирование через tostring)
MsgC(Color(0, 255, 0), string.format("[KillRewards] %s (F:%s) killed %s (F:%s)\n",
tostring(killer:Nick()),
tostring(killerChar:GetFaction()),
tostring(victim:Nick()),
tostring(victimChar:GetFaction())
))
-- Сравнение фракций. В Helix GetFaction() может возвращать как число, так и строку (internal name)
if (tostring(killerChar:GetFaction()) != tostring(victimChar:GetFaction())) then
-- НАГРАДА
local group = killer:GetUserGroup()
local confKey = groupToConfig[group] or "killRewardBase"
local reward = ix.config.Get(confKey, 300)
killerChar:GiveMoney(reward)
killer:NotifyLocalized("killRewardMsg", FormatMoney(reward, killer))
ix.log.Add(killer, "playerKillReward", victim:Nick(), reward)
else
-- ШТРАФ (FF)
local penalty = ix.config.Get("friendlyFirePenalty", 5000)
if (penalty > 0) then
local money = killerChar:GetMoney()
local toTake = math.min(money, penalty)
if (toTake > 0) then
killerChar:TakeMoney(toTake)
killer:NotifyLocalized("killPenaltyMsg", FormatMoney(toTake, killer))
ix.log.Add(killer, "playerKillPenalty", victim:Nick(), toTake)
end
end
end
end