Привет, хотелось бы узнать, как сделать так, чтобы при нажатии кнопки в том же F4 (например, админка), вылазило меню с подтверждением покупки этой самой админки?
Т.е чтобы человек не искал в донат-меню этот предмет, а мог по нажатию кнопки сразу купить этот предмет.
Ооо, достойные вопросы подкатили
Вот, что тебе может пригодиться:
-- 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 лайк
Тебе виднее. Ты же кнопку где-то хочешь
- cl / sv / sh часть?
- Куда кидать эти клиентские функции?
- Что делать с ошибкой ?
- Как узнать ID предмета?
1-2. addons/zakupka/lua/autorun/client/zakup.lua
3. IGS/sh_additems.lua at main · GM-DONATE/IGS (github.com) (2 аргумент)
А куда это закидывать?
Спойлер
Я же написал путь, нет разве?
То путь для
IGS.Purchase(sItemUID, callback)
и
IGS.Activate(iInvID, callback)
Это он рассказывает, как работают функции и их аргументы
[zakupka] addons/zakupka/lua/autorun/client/zakup.lua:7: attempt to call method ‘GetPrice’ (a nil value)
- unknown - addons/zakupka/lua/autorun/client/zakup.lua:7
- unknown - lua/includes/modules/concommand.lua:54
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:Price()
--[[
https://github.com/GM-DONATE/IGS/blob/643ad83fff52d99c939523f8b36705265de6632f/addons/igs-core/lua/igs/objects/shop_item.lua#L65
lua_run_cl print(IGS.GetItemByUID("wep_arbalet"):GetPrice())
[ERROR] LuaCmd:1: attempt to call method 'GetPrice' (a nil value)
]]
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)
2 лайка
работает
2 лайка
да, сорри, это в следующей версии уже будет
1 лайк
Забавный получился мем
Версия опубликована. Пишу changelog и инструкцию по обновлению