Донат валюта за наигранное время

Мини-скрипт, который будет выдавать вашим игрокам 10 рублей спустя 2 часа игры (настраивается)

Скрипт предназначен для того, чтобы максимально длительный период времени удержать игрока на сервере, а не для выдачи бонуса каждые N часов

local HOUR = 60 * 60

-- Мини-настройки
local REWARD_AFTER = HOUR * 2
local RAWARD_SIZE  = 10 -- размер награды в донат валюте

local function isRewardReceivedToday(uid)
	return os.time() - tonumber(bib.get("igs:last_session_reward_time:" .. uid) or 0) <= (HOUR * 24)
end

local function updateLastRewadTime(uid)
	bib.set("igs:last_session_reward_time:" .. uid, os.time())
end

local function getPlayerSessionTime(pl)
	return pl.initial_spawn_time and os.time() - pl.initial_spawn_time or -1
end

timer.Create("igs.session_reward", 60, 0, function()
	for _,pl in ipairs(player.GetAll()) do
		if getPlayerSessionTime(pl) >= REWARD_AFTER and not isRewardReceivedToday(pl:AccountID()) then
			updateLastRewadTime(pl:AccountID())
			pl:AddIGSFunds(RAWARD_SIZE, "Награда за игру")
			IGS.Notify(pl, "Вы получили бонус за игру!")
		end
	end
end)

hook.Add("PlayerInitialSpawn", "igs.session_reward", function(pl)
	pl.initial_spawn_time = os.time()
end)
Прошлая версия

Telegram: Contact @gmodder

Установка

Создать файл по пути addons/igs-modification/lua/autorun/server/playtimebonus.lua с вышеуказанным кодом

Может заинтересовать:

1 лайк

Упрощенная версия скрипта. Дает награду каждый час (раз в час). Верхний скрипт предназначен для удержания игрока максимально длительное количество времени на сервере, а этот… Для дестабилизации экономики и потери донатов? Тем не менее, может, кому-то пригодится

local HOUR = 60 * 60 -- не менять

-- Мини-настройки
local REWARD_AFTER = HOUR * 1
local RAWARD_SIZE  = 1.5 -- размер награды в донат валюте

timer.Create("igs.session_reward", 60, 0, function()
	for _,pl in ipairs(player.GetAll()) do
		pl.igs_last_reward_time = pl.igs_last_reward_time or os.time()

		if os.time() - pl.igs_last_reward_time >= REWARD_AFTER then
			pl.igs_last_reward_time = os.time()
			pl:AddIGSFunds(RAWARD_SIZE, "Награда за игру")
			IGS.Notify(pl, "Вы получили бонус 1.5 руб за 1 час игры!")
		end
	end
end)

Как сделать так, чтобы человек получал 2 донат-монеты за час игры ПРИ УСЛОВИИ что он подпишется на группу вк?

Есть функция для проверки, подписан ли он на группу вк? Если есть, то скинь. Если нет, то сначала нужно написать скрипт, который проверяет подписку на группу ВК. По поводу написания скриптов на заказ лучше обращаться в раздел “Услуги”

PL_MONEY классная тема
Сообщение в чате чутка изменил вдруг кому нужно

-- Мини-настройки
local HOUR = 60 * 60
local REWARD_AFTER = HOUR * 1
local REWARD_SIZE  = 1 -- размер награды в донат валюте

timer.Create("igs.session_reward", 60, 0, function()
	for _,pl in ipairs(player.GetAll()) do
		pl.igs_last_reward_time = pl.igs_last_reward_time or os.time()

		if os.time() - pl.igs_last_reward_time >= REWARD_AFTER then
			pl.igs_last_reward_time = os.time()
			pl:AddIGSFunds(REWARD_SIZE, "Награда за игру")
			IGS.Notify(pl, "Вы получили бонус " .. PL_MONEY(REWARD_SIZE) .. " за " .. REWARD_AFTER .. " час игры")
		end
	end
end)

Можете подсказать, как сделать чтобы для определенных групп serverguard выдавало.

Изменил упрощенный код (добавил выдачу для конкретных групп)

local HOUR = 60 * 60 -- не менять

-- Мини-настройки
local REWARD_AFTER = HOUR * 1
local RAWARD_SIZE  = 1.5 -- размер награды в донат валюте

local usergroups = {
    ['superadmin'] = true,
    ['admin'] = true,
}

timer.Create("igs.session_reward", 60, 0, function()
	for _,pl in ipairs(player.GetAll()) do
        if not usergroups[pl:GetUserGroup()] then continue end
		pl.igs_last_reward_time = pl.igs_last_reward_time or os.time()

		if os.time() - pl.igs_last_reward_time >= REWARD_AFTER then
			pl.igs_last_reward_time = os.time()
			pl:AddIGSFunds(RAWARD_SIZE, "Награда за игру")
			IGS.Notify(pl, "Вы получили бонус 1.5 руб за 1 час игры!")
		end
	end
end)

Может быть интересно: Бонус за игру на сервере