[IGS] Клиентские функции для покупки и активации предметов

Ооо, достойные вопросы подкатили

Вот, что тебе может пригодиться:

-- CLIENT'ские функции

-- Отправка запроса на покупку предмета
-- sItemUID это UID предмета (С sh_additems.lua)
-- callback это функция, которая выполнится после завершения процесса покупки
--    в callback первым параметром передается строка-ошибка или nil, если покупка успешна
--    вторым параметром передается ID предмета в инвентаре (если инвентарь используется на сервере)
IGS.Purchase(sItemUID, callback)

-- Активирует предмет с инвентаря
-- После первой функции можно сразу выполнить и эту,
-- чтобы игроку не пришлось даже в инвентарь заходить
-- iInvID это ИД предмета в инвентаре. Передается в callback в первой функции
-- в callback идет (bool ok, int iPurchID, string? sMsg_)
IGS.Activate(iInvID, callback)

Пример в коде (написал, но не тестировал)

-- Консольная команда, которая откроет модалку покупки предмета
concommand.Add("foobar", function(pl, _, args)
	local item_uid = args[1]
	if not item_uid then pl:ChatPrint("Не указан UID") return end

	local ITEM = IGS.GetItemByUID(item_uid)

	local price_int = ITEM:GetPrice(pl)
	local price_str = PL_MONEY(price_int)

	Derma_Query(
    "Хочешь купить " .. ITEM:Name() .. " за " .. price_str .. "?",
    "Подтверждение:",
    "Да", function() IGS.Purchase(item_uid, function(_err, _inv_id)
		if _err then
			pl:ChatPrint("Ошибка покупки: " .. _err)
		elseif _inv_id then
			pl:ChatPrint("Купили. Активируем! Если не активируется, то напиши /donate и активируй с инвентаря")
			IGS.Activate(_inv_id, function() pl:ChatPrint("Все, активировали") end)
		else
			pl:ChatPrint("Куплено и активировано!") -- инвентарь отключен в настройках. Ошибки нет, но и inv_id отсутствует
		end
	end) end,
	"Не", function() pl:ChatPrint("В мире загрустел один котик :(") end
	)
end)

-- Пример использования в коде
RunConsoleCommand("foobar", "admin_30d")

Вот тут можно посмотреть, как это обрабатывается сервером:

1 лайк