200字
无视解锁道具发放脚本
2026-08-16
2026-08-16
✨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

无视解锁道具发放脚本

评论