[DarkRP] Как сделать X2 зарплату?

Здравствуйте. Подскажите как можно сделать 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)
1 лайк

Спасибо большое, работает)

Сможешь реализовать это как ITEM?
Чтобы игроки могли покупать “ивент” для всего сервера :upside_down_face:

Установка:
-- 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)
2 лайка

Или вот упрощенный вариант без лишнего кода. Можно оставить прямо в 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. Есть еще ± похожая тема: Увеличенная зарплата для групп и предметов

3 лайка


Не работает :frowning:
Есть варианты подружить его с SlownLS Mayor?

Могу дать тебе скрипт где увеличение зп идёт в зависимости от ранга.
Переписать на то что надо или для всех игроков думаю поймёшь сам.

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)

Слушайте, а есть варик сделать такой же ивент, только с временной випкой?

Чтобы у всех условно на час появлялась випка? Можно, но я не буду писать код для этого. Считаю это вредительским ивентом

почему вредительским? Как по мне, выдать вип всем игрокам на время глобального ивента для того, чтобы открыть доп профы и функции это наоборот очень полезно.

Что-то в стиле “бесплатные выходные в такой-то игре в стиме”, но только “бесплатная випка во время ивента”. Разве что дать пользователю ознакомиться с вип привилегиями (при условии что они что-то значат а не просто открытие к вип профам), больше тут плюсов не вижу.

Не совсем связано, но думаю, может быть интересно для читателей этой темы