✅ Выдача предметов Pointshop 2

Ни у кого нет идеи как реализовать следующее: в автодонате есть услуга купить какой-нибудь какой-нибудь предмет (свэп, оружие, pac3), но после покупки предмет должен переходить игроку в инвентарь Pointshop 2, а не igs? Может у кого уже есть готовое решение?

Если загрузишь сюда в архиве поинтшоп аддон, то кто-то, возможно и я, посмотрю API аддона и напишу интеграцию

Pointshop2-master (2).zip (573.9 КБ)

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

local STORE_ITEM = FindMetaTable("IGSItem")

local function giveItem(pl, sItemName, amount)
	KInventory.Inventory.findByOwnerId( pl.kPlayerId ):Then(function( inv )
		if not inv then
			IGS.Notify(pl, "У вас невалидный PS2 инвентарь. Сделайте скриншот и сообщите администрации")
			return
		end

		local itemClass = KInventory.Items[sItemName]

		local itemsGiven = 0
		local item = itemClass:new()
		local promise = inv:addItem( item ):Then(function()
			itemsGiven = itemsGiven + 1
		end)

		for _ = 2, amount do
			local item = itemClass:new()
			promise = promise:Then(function()
				inv:addItem( item )
			end):Then(function()
				itemsGiven = itemsGiven + 1
			end)
		end

		promise:Then(function()
			IGS.Notify(pl, "Вы получили " .. amount .. " " .. sItemName)
		end, function(errid, err)
			if errid > 0 then
				IGS.Notify(pl, "Ошибка выдачи: " .. err ..", было выдано " .. itemsGiven .. " предметов")
			else
				IGS.Notify("Внутренняя ошибка выдачи предметов: " .. errid .. ". Запомните точное время и сообщите администрации")
				error("IGS: Ошибка выдачи PS2 предметов: " .. errid .. ", " .. err )
			end
		end)
	end)
end

--[[---------------------------------------------------------------
	При покупке, игрок получит в PointShop2 инвентарь sItemName
-----------------------------------------------------------------]]
function STORE_ITEM:SetPS2Item(sItemName, iAmountToGive)
	return self:SetInstaller(function(pl)
		giveItem(pl, sItemName, iAmountToGive or 1)
	end):SetCanActivate(function(pl)
		local itemClass = KInventory.Items[sItemName]
		if not itemClass then
			return "Предмета " .. sItemName .. " не существует. Обратитесь к администрации"
		end
	end)
end

Код помести в файл addons/igs-modification/lua/igs/extensions/ps2inventory.lua

Затем создай предмет. Пример:

IGS("Поинтшоп итем", "ps2_item", 10)
	:SetPS2Item("item_uid", 5)
	:SetDescription("Выдаст в инвентарь PS2 5шт item_uid")
	:SetStackable()

@nxcel скрипт сверху работает?

Можно любые предметы добавлять, которые созданы в луа файлах и на самом сервере. Номер предмета в поинтшопе, можно найти в базе данных. В таблице ps2_itempersistence, столбец id.
Код для добавления предмета, вместо 1 ставите id нужного Вам предмета.
:SetOnActivate(function(pl)
pl:PS2_EasyAddItem(“1”) --Выдаёт предмет ноты
end)

1 лайк

Круто. Спасибо за такое дополнение