Здравствуйте. Подскажите как можно сделать x2 зарплату через хук darkrp ‘playerGetSalary’?
Пробовал через: ply:setSelfDarkRPVar(‘salary’, value * 2), но что-то не получается.
Установка:
-- addons/anyname/lua/autorun/server/double_salary.lua
hook.Add("playerGetSalary", "doubleSalary", function(ply, amount)
local salary = ply:getJobTable().salary
return false, nil, (salary * 2)
end)
Спасибо большое, работает)
Сможешь реализовать это как ITEM?
Чтобы игроки могли покупать “ивент” для всего сервера
Установка:
-- igs-modification/lua/igs/extensions/money.lua
if (not DarkRP) then return end
event = event or {}
event.TIME = (60 * 60)
event.TIME_EVENT = CurTime()
event.create = function(hour) -- указывать в цифрах: 1 - 1 час, 2 - 2 часа
event.TIME_EVENT = (hour == 1 and event.TIME or event.TIME * hour)
end
event.exist = function()
return (CurTime() > event.TIME_EVENT)
end
if (SERVER) then
-- Не знаю как по-другому сделать ограничение :c
hook.Add("IGS.CanPlayerActivateItem", "IGS_DoubleSalary", function(ply, meta)
local ITEM = meta:UID()
if ITEM == "event_x2_money" then
if event.exist() then
IGS.Notify(ply, "Ивент уже существует, ожидайте пока закончится!")
return false, "Ивент уже существует, ожидайте пока закончится"
end
end
end)
hook.Add("playerGetSalary", "IGS_DoubleSalary", function(ply, amount)
if not event.exist() then return end
local salary = ply:getJobTable().salary
return false, nil, (salary * 2)
end)
end
Добавить сам предмет:
-- igs-modification/lua/igs/settings/sh_additems.lua
IGS("Двойные деньги", "event_x2_money")
:SetPrice(100)
:SetDescription('Вы покупаете данный предмет, и запускаете ивент для игроков "Двойные деньги"')
:SetStackable()
:SetOnActivate(function()
event.create(1) -- 1 - час, 2 - часа и так далее
end)
Или вот упрощенный вариант без лишнего кода. Можно оставить прямо в sh_additems.lua
IGS("Ивент: x2 ЗП", "event_x2_salary", 100)
:SetDescription("Всем будет начисляться двойная ЗП на протяжении 1 часа!")
:SetStackable()
:SetCanActivate(function()
return SALARY_EVENT_START and "Событие уже активно" or nil
end)
:SetOnActivate(function(pl)
SALARY_EVENT_START = os.time()
IGS.NotifyAll(pl:Name() .. " шиканул и сделал всем двойную ЗП на час!!!")
end)
hook.Add(SERVER and "playerGetSalary" or "", "IGS.DoubleSalaryEvent", function(pl, amount)
if os.time() - (SALARY_EVENT_START or 0) < 3600 then -- со старта ивента прошло меньше часа
-- suppress, message, newAmount
return false, "ЗП удвоена в связи с x2 ивентом!", amount * 2
elseif SALARY_EVENT_START then
SALARY_EVENT_START = nil
end
end)
P.S. Насчет SERVER and 'bla' or ' '
P.S. Кто-то у меня когда-то спрашивал насчет странной конструкции в hook.Add с SERVER and "bla" or ""
, которую я применил в примере
Конструкция с SERVER and подразумевает, что хоть код исполняется в sh среде, рассчитан он именно для сервера. И даже если бы такой хук был на клиенте, то таким образом мы бы его автоматически отключили (ведь хука “” не существует и код никогда бы не выполнился). Для меня этот вариант более предпочтительный, чем пирамидки вида if SERVER then и дальше hook.Add с отступом
P.P.S. Есть еще ± похожая тема: Увеличенная зарплата для групп и предметов
Могу дать тебе скрипт где увеличение зп идёт в зависимости от ранга.
Переписать на то что надо или для всех игроков думаю поймёшь сам.
hook.Add("playerGetSalary", "moresalary", function(ply, salary)
if ply:IsUserGroup("vip") or ply:IsUserGroup("superadmin") then
local newsal = salary * 1.5
return false, "Благодаря вашей привилегии ваша зп увеличена на 50%", newsal
elseif ply:IsUserGroup("premium") then
local newsal = salary * 2.5
return false, "Благодаря вашей привилегии ваша зп увеличена на 150%", newsal
elseif ply:IsAdmin() then
local newsal = salary * 2
return false, "Благодаря вашей привилегии ваша зп увеличена на 100%", newsal
end
end)
Слушайте, а есть варик сделать такой же ивент, только с временной випкой?
Чтобы у всех условно на час появлялась випка? Можно, но я не буду писать код для этого. Считаю это вредительским ивентом
почему вредительским? Как по мне, выдать вип всем игрокам на время глобального ивента для того, чтобы открыть доп профы и функции это наоборот очень полезно.
Что-то в стиле “бесплатные выходные в такой-то игре в стиме”, но только “бесплатная випка во время ивента”. Разве что дать пользователю ознакомиться с вип привилегиями (при условии что они что-то значат а не просто открытие к вип профам), больше тут плюсов не вижу.
Не совсем связано, но думаю, может быть интересно для читателей этой темы