Продвинутые купоны (бесконечные активации, любые действия)

Эта тема скорее пример того, как можно на купоны вешать абсолютно любые действия и делать какое угодно количество активаций, включая бесконечные активации.

  • Здесь нет интерфейса
  • Настройка производится через код
  • Купон в панели GMD не создается

но

  • Можно делать бесконечные купоны
  • Можно делать купоны для выдачи услуг
  • Можно делать купоны на скидку
  • Можно запускать внутриигровые ивенты
  • И выполнять на купоне вообще любую функцию
-- addons/igs-modification/lua/autorun/server/advcoupons.lua

local coupons = {
	["BLOGGER123"] = {
		action = function(pl)
			-- Выдает 100 валюты
			pl:AddIGSFunds(100, "Купон от блоггера")
		end,
		amount_total = nil, -- бесконечно
	},
	["KITSTART"] = {
		action = function(pl)
			-- Активирует действие предмета на игроке и сохраняет в БД
			IGS.PlayerActivateItem(pl, "item_uid")
			pl:ChatPrint("Вы получили предмет")
		end,
		amount_total = 100, -- 100 человек может активировать
	},
}

hook.Add("IGS.PlayerEnterCoupon", "advanced_coupons", function(pl, code)
	if not coupons[code] then return end

	local coup = coupons[code]

	local activated_times  = cookie.GetNumber("igs_advcoup_activations:" .. code, 0)
	local activations_left = coup.amount_total and coup.amount_total - activated_times

	if coup.amount_total and activations_left <= 0 then
		return false, "Этот купон активирован максимальное количество раз"
	end

	local is_player_activated_this_coupon = cookie.GetString("igs_advcoup_pl:" .. pl:UniqueID() .. ":" .. code, "f")
	if is_player_activated_this_coupon == "t" then
		return false, "Вы уже активировали этот купон"
	end

	if coup.amount_total then cookie.Set("igs_advcoup_activations:" .. code, activated_times + 1) end
	cookie.Set("igs_advcoup_pl:" .. pl:UniqueID() .. ":" .. code, "t")

	coup.action(pl)
end)

:warning: Код не тестировался. Напишите, работает ли кто-нибудь

Да работает.
Спасибо.

1 лайк

Куда сохраняются данные и как их посмотреть?

Какие данные?

например кто ввел итд

Я заметил, что когда вводишь купон и он активируется, то появляется сообщение о том, что купона не существует.

сними видео, пожалуйста. И может кто-то еще это подвердить?

кто активировал, сохраняется в панели на сайте GMD

но как сделать обнуление? например обнулить использование чтоб могли еще раз ввести тот же промокод?

cookie.Delete("igs_advcoup_pl:" .. pl:UniqueID() .. ":" .. code)