✨sjy官网bot✨
传统的ID取物会被游戏限制,此方法可绕过限制。
local PreciseTable = {
[1] = {
info = {
iteminsid = "520",itemid = 1314,
},
}
}--预设物品框架
-- 工具函数:查找玩家背包可用空格子
local BackSpace = function(Playerid)
local SpaceGrid = {}
local SpaceNum = Backpack:CalcSpaceNumForItem(Playerid, 1)
-- 优先收纳栏 1000~1007
for i=1000,1007 do
local Itemid = Backpack:GetGridItemID(Playerid,i)
if Itemid == 0 then
table.insert(SpaceGrid,i)
if #SpaceGrid >= SpaceNum then
break
end
end
end
-- 收纳栏空位不足,检索快捷栏0~200
if #SpaceGrid < SpaceNum then
for i=0,200 do
local Itemid = Backpack:GetGridItemID(Playerid,i)
if Itemid == 0 then
table.insert(SpaceGrid,i)
if #SpaceGrid >= SpaceNum then
break
end
end
end
end
return SpaceGrid
end
local Script = {}
-- 开放自定义函数声明)
Script.openFnArgs = {
AddItem = {
displayName = "发放道具",
params = {("玩家"),Mini.Player,("道具"),Mini.Item,("量"),Mini.Number},
sort = 1,
}
}
-- 发放逻辑函数
function Script:AddItem(Playerid,Itemid,ItemNum)
local result = Backpack:AddItem(Playerid,Itemid,ItemNum)
-- 原生自动发放失败,执行强制格子填充
if not result then
local SpaceGrid = BackSpace(Playerid)
if #SpaceGrid ~= 0 then
local ItemStack = Item:GetAttr(Itemid,ItemAttr.Stackmax)
local CycleNum = math.ceil(ItemNum / ItemStack)
for i=1,CycleNum do
PreciseTable[1].info.itemid = Itemid
-- 计算单格堆叠数量
if ItemNum >= ItemStack * i then
PreciseTable[1].info.num = ItemStack
else
PreciseTable[1].info.num = ItemNum - ItemStack * (i - 1)
end
PreciseTable[1].index = SpaceGrid[i]
PreciseTable[1].info.durable = Item:GetAttr(Itemid,ItemAttr.Duration)
local ItemDataJson = Backpack:EncodeTableGridInfo(PreciseTable)
Backpack:LoadGridInfos(Playerid,ItemDataJson)
end
else
-- 无空位提示
Player:NotifyGameInfo2Self(Playerid,"背包没有空间,发放失败!")
end
end
end
return Script