Ооо, достойные вопросы подкатили
Вот, что тебе может пригодиться:
-- 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")
Вот тут можно посмотреть, как это обрабатывается сервером: