add sborka
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user