Удвоение первого доната после 12:00 (настраиваемо)

Скрипт удвоит первое пожертвование после указанного времени, а также будет напоминать игрокам об этом. Поможет привлечь игроков в непопулярное время на сервер, а также мотивирует на пожертвование тех, кто не уверен

Первый платеж после настроенного времени удвоится и тот, кто задонатил, получит двойную сумму

Код

Установка: закинуть по пути /addons/igs-modification/lua/igs/modules/doubledonation/_main.lua

if CLIENT then return end

--[[-------------------------------------------------------------------------
	Скрипт, удваивающий первый донат после 12 часов дня (опционально)
	Удвоение работает только для первого доната после выбранного времени
	Двойной донат может забрать только первый игрок, который задонатит
	Всем остальным придется ждать следующего дня
---------------------------------------------------------------------------]]


-- в 1 часу столько секунд. Не трогать
local HOUR = 3600

-- Бонус можно получить после 12 часов дня
-- Время указано в секундах от начала дня
local TIME_START = 22 * HOUR

-- Временная зона. Здесь МСК +3 часа
local TIMEZONE_OFFSET = 3 * HOUR

local function getTodayBonusTime()
	return sql.QueryValue("SELECT strftime('%s', datetime('now','start of day','+" .. TIME_START .. " seconds'));")
		+ TIMEZONE_OFFSET
end

-- Shitcoded tester (debug code) https://pastebin.com/gEDDGk7J
local function canReceiveBonusNow()
	local prev_x2_bonus = bib.getNum("igs:prev_x2_day_bonus_time", 0) -- последнее получение
	local today_bonus_time = getTodayBonusTime()


	local now = os.time()
	return (now - prev_x2_bonus) >= HOUR * 24
		or (prev_x2_bonus < today_bonus_time and now >= today_bonus_time)
end

hook.Add("IGS.PlayerDonate", "x2_day_bonus", function(pl, diff)
	if canReceiveBonusNow() then
		pl:AddIGSFunds(diff, "Бонус за первое пополнение после 12:00")
		IGS.NotifyAll(pl:Nick() .. " первым задонатил после 12:00 и получил в 2 раза больше")
		bib.setNum("igs:prev_x2_day_bonus_time", os.time())
		timer.Remove("igs_x2_bonus")
	end
end)

timer.Simple(0, function()
	timer.Create("igs_x2_bonus", 35, 0, function()
		if canReceiveBonusNow() then
			IGS.NotifyAll("Предложение дня! Первый донат с этого момента будет удвоен!")
			timer.Adjust("igs_x2_bonus", HOUR)
		end
	end)
end)
Оригинальный пост: Telegram
1 лайк

Ошибка

[donate_igs-modification] addons/donate_igs-modification/lua/igs/modules/double_donation/_main.lua:31: attempt to perform arithmetic on global 'previous_receive_time' (a nil value)
  1. canReceiveBonusNow - addons/donate_igs-modification/lua/igs/modules/double_donation/_main.lua:31
   2. unknown - addons/donate_igs-modification/lua/igs/modules/double_donation/_main.lua:46

Timer Failed! [igs_x2_bonus][@addons/donate_igs-modification/lua/igs/modules/double_donation/_main.lua (line 45)]

Перенес код сюда и исправил ошибку

1 лайк

На клиенте ошибка

[donate_igs-modification] addons/donate_igs-modification/lua/igs/modules/double_donation/_main.lua:47: attempt to call field 'NotifyAll' (a nil value)
  1. unknown - addons/donate_igs-modification/lua/igs/modules/double_donation/_main.lua:47

Timer Failed! [igs_x2_bonus][@addons/donate_igs-modification/lua/igs/modules/double_donation/_main.lua (line 45)]

добавь первой строкой к файлу if CLIENT then return end

1 лайк

Игрок пополнил счет, но ему не выдалось х2 пополнение

Там в конфиге по умолчанию стоит после 22:00

Измени настройку на нужную тебе. Если не сработает, то расставь принты, продебажь

А тогда возможно я обманул
Просто в чат написало в 16:15 ±
А я настройки никакие не менял