[IGS] Купоны на донат валюту в виде чат-команд

Альтернативная версия

  • :new: Добавлена возможность создавать купоны, которые можно активировать повторно через какое-то время
  • :one: Работа с существующей таблицей вместо создания новой в sv.db

Команда удаления всех активаций определенного купона заменена командой сбросой активации конкретного купона для конкретного игрока в связи с переходом на другой тип хранения данных

Установка

  1. Закинуть код снизу по пути addons/igs-modification/lua/autorun/server/coupons.lua
  2. Перезапустить сервер или попробовать выполнить lua_run include("autorun/server/coupons.lua")
local codes = {
	["/kit_daily"] = {10, 86400}, -- 10 руб раз в 24 часа (86400 сек)
	["/kit_start"] = {1000}, -- 1000 руб один раз за все время
}

hook.Add("PlayerSay", "babosiki", function(pl, code)
	if not codes[code] then return end
	local amount, cooldown = unpack(codes[code])

	local last_activated = cookie.GetNumber("igs_freemoney:" .. pl:SteamID64() .. ":" .. code)
	if last_activated then
		if not cooldown then DarkRP.notify(pl, 1, 5, "Ты уже активировал этот промокод") return "" end

		local time_ago = os.time() - (last_activated or 0)
		if time_ago < cooldown then DarkRP.notify(pl, 1, 5, "Ты сможешь активировать этот промокод через " .. string.NiceTime(cooldown - time_ago)) return "" end
	end

	cookie.Set("igs_freemoney:" .. pl:SteamID64() .. ":" .. code, os.time())
	pl:AddIGSFunds(amount)
	DarkRP.notify(pl, 0, 10, "Ты получил " .. string.Comma(amount) .. "р по промокоду!")
	return ""
end)

concommand.Add("igs_reset_player_code", function(pl, _, _, argss)
	if IsValid(pl) then return end

	local steamid, code = argss:match("(STEAM_%d:%d:%d+) (%w+)")
	if not (steamid and code) then print("Неверный стимайди или не введен код") return end

	cookie.Delete("igs_freemoney:" .. util.SteamIDTo64(steamid) .. ":" .. code)
	print("Сбросил активацию промокода для " .. steamid)
end)

Использование

В файле сверху список купонов настройка купонов.

Вместо слеша в начале названия купона можно использовать и другие символы, например убрать слеш совсем, либо заменить например на “!”.

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

Есть консольная команда igs_reset_player_code $steamid $code. Работает только через консоль сервера. Она удаляет информацию про активацию определенного купона на указанном игроке. В теории полезно для тестов, а по факту для тестов лучше просто создать купон с другим названием, а команду просто удалить.

:information_source: Может быть также интересно