dp-s_doc/Start/Example/4.md

6.3 KiB
Raw Blame History

装备继承卷 (贡献者: X)

首先我们先在dp_s文件夹中建立一个项目文件夹 MyProject 方便管理

Alt text

然后我们建立一个新文件 装备继承卷.nut 用于编写我们的代码

Alt text

然后我们在装备继承卷.nut中写入以下代码

//本例子由X提供


//提示弹窗需配合233.dll插件(插件在群文件内)。不用233插件请将此方法SUser.SendNotiBox("这里写提示文字",1);修改为SUser.SendNotiPacketMessage("这里写提示文字", 8);
Cb_Use_Item_Sp_Func[2023629246] <- function(SUser, ItemId) {
    local InvenObj = SUser.GetInven();
    if (InvenObj) {
        //获取玩家背包类型1的第9个格子
        local ItemObj1 = InvenObj.GetSlot(1, 9);
        local ItemObj2 = InvenObj.GetSlot(1, 10);


        //空装备
        if (ItemObj1.IsEmpty || ItemObj2.IsEmpty) {
            //发送通知
            SUser.SendNotiBox("请将已强化/增幅/锻造的装备放到\n[装备栏] 的第一格,要继承的装备放到第二格。", 1);
            //返还消耗的道具
            SUser.GiveItem(ItemId, 1);
            return;
        }
        //获取物品ID
        local ItemId1 = ItemObj1.GetIndex();
        local ItemId2 = ItemObj2.GetIndex();



        //限制类型 10=武器;称号=1116=腰带15=鞋子14=下装13=护肩12=上衣;项链=17手镯=18戒指=19;魔法石=21辅助装备=20
        local itemType1 = PvfItem.GetPvfData(ItemId1).add(141 * 4).readU32();
        local itemType2 = PvfItem.GetPvfData(ItemId2).add(141 * 4).readU32();
        if (itemType1 == 11 || itemType2 == 11) {
            SUser.SendNotiBox("继承或要继承的装备不能是称号!", 1);
            SUser.GiveItem(ItemId, 1);
            return;
        }
        if (itemType1 == 10) {
            if (itemType1 == itemType2) {
                jc(SUser, ItemId, ItemObj1, ItemObj2);
            } else {
                SUser.SendNotiBox("继承失败!\n[武器]\n只能继承至\n[武器]", 1);
                SUser.GiveItem(ItemId, 1);
                return;
            }
            return;
        }

        if (itemType1 == 17 || itemType1 == 18 || itemType1 == 19) {
            if (itemType2 == 17 || itemType2 == 18 || itemType2 == 19) {
                jc(SUser, ItemId, ItemObj1, ItemObj2);
            } else {
                SUser.SendNotiBox("继承失败!\n[首饰]\n只能继承至\n[首饰]", 1);
                SUser.GiveItem(ItemId, 1);

            }
            return;
        }


        if (itemType1 == 21 || itemType1 == 20) {
            if (itemType2 == 21 || itemType2 == 20) {

                jc(SUser, ItemId, ItemObj1, ItemObj2);
            } else {
                SUser.SendNotiBox("继承失败!\n[魔法石、辅助装备]只能继承至:\n[魔法石或辅助装备]", 1);
                SUser.GiveItem(ItemId, 1);
                return;
            }
            return;
        }

        if (itemType1 == 12 || itemType1 == 13 || itemType1 == 14 || itemType1 == 15 || itemType1 == 16) {
            if (itemType2 == 12 || itemType2 == 13 || itemType2 == 14 || itemType2 == 15 || itemType2 == 16) {

                jc(SUser, ItemId, ItemObj1, ItemObj2);
            } else {
                SUser.SendNotiBox("继承失败!\n[护肩、上衣、下装、腰带、鞋]\n只能继承至\n[护肩、上衣、下装、腰带、鞋]", 1);
                SUser.GiveItem(ItemId, 1);
                return;
            }
            return;
        }

    } else {
        SUser.GiveItem(ItemId, 1);
        SUser.SendNotiBox("遇到错误,暂无法继承。", 1);
    }


}

function jc(SUser, ItemId, ItemObj1, ItemObj2) {
    SUser.SendNotiPacketMessage("开始继承了", 8);
    //获取物品ID
    local ItemId1 = ItemObj1.GetIndex();
    local ItemId2 = ItemObj2.GetIndex();


    //获得pvf中物品
    local PvfItem1 = PvfItem.GetPvfItemById(ItemId1);
    local PvfItem2 = PvfItem.GetPvfItemById(ItemId2);
    //获取装备名称
    local itemName1 = PvfItem1.GetName();
    local itemName2 = PvfItem2.GetName();



    //获取物品1和2的等级与品级
    local itemLevel1 = PvfItem1.GetUsableLevel();
    local itemLevel2 = PvfItem2.GetUsableLevel();
    //限制继承装备的级别
    if (itemLevel1< 60 || itemLevel2< 60) {
        SUser.SendNotiBox("只有大于或者等于 【60级】 的装备才可以继承。", 1);
        SUser.GiveItem(ItemId, 1);
        return;
    }

    //获取品级
    local itemRarity1 = PvfItem1.GetRarity();
    local itemRarity2 = PvfItem2.GetRarity();
    //限制品级
    if (itemRarity1< 3 || itemRarity2< 3) {
        SUser.SendNotiBox("只有 【神器】 以上的品级才能继承。", 1);
        SUser.GiveItem(ItemId, 1);
        return;
    }

    //获取物品1的属性
    local itemType1 = PvfItem.GetPvfData(ItemId1).add(141 * 4).readU32();
    local itemType2 = PvfItem.GetPvfData(ItemId2).add(141 * 4).readU32();
    local forging = ItemObj1.GetForging(); //锻造
    local upgrade = ItemObj1.GetUpgrade(); //强化
    local amplification = ItemObj1.GetAmplification(); //增幅
    local enchanting = ItemObj1.GetEnchanting(); //附魔

    if (itemType1 == 10 && itemType2 == 10 && forging > 0) {
        ItemObj2.SetForging(forging);
    }

    if (upgrade > 0) {
        ItemObj2.SetUpgrade(upgrade);
    }

    if (amplification != 0) {
        ItemObj2.SetAmplification(amplification);
    }
    ItemObj2.SetEnchanting(enchanting);

    //删除原武器,若不删除就把原武器的属性清掉。
    ItemObj1.Delete();
    //刷新背包
    SUser.SendUpdateItemList(1, 0, 9);
    ItemObj2.Flush();
    SUser.SendUpdateItemList(1, 0, 10);
    SUser.SendNotiBox("装备继承成功!\n获得\n[+" + upgrade + " " + itemName2 + "]", 1);
    return;
}

Alt text

最后我们回到dp_s文件夹中打开Main.nut 加载我们刚才编写的逻辑

sq_RunScript("MyProject/装备继承卷.nut");

Alt text

至此一个简单的装备继承卷的逻辑就写完了,然后我们就可以在游戏中使用道具7577来融合了