function InheritFuncBynangua(SUser, ItemId) { local Config = GlobalConfig.Get("装备继承券配置_Nangua.json"); //获取玩家背包 local InvenObj = SUser.GetInven(); if(!InvenObj) { return; } //获取装备栏第一栏装备 local firstItemObj = InvenObj.GetSlot(Inven.INVENTORY_TYPE_ITEM, Config["继承配置"]["装备1摆放位置"]); //获取装备栏第二栏装备 local secondItemObj = InvenObj.GetSlot(Inven.INVENTORY_TYPE_ITEM, Config["继承配置"]["装备2摆放位置"]); //装备不存在 if (firstItemObj.IsEmpty || secondItemObj.IsEmpty) { _InheritBynangua.NotifyUserAndReturn(SUser, ItemId, Config["继承配置"]["继承失败提示1"]); return; } //获取ID local firstItemIndex = firstItemObj.GetIndex(); local secondItemIndex = secondItemObj.GetIndex(); //获取类型 local firstItemInfo = PvfItem.GetPvfItemById(firstItemIndex); local firstItemType = NativePointer(firstItemInfo.C_Object).add(141 * 4).readU32(); local secondItemInfo = PvfItem.GetPvfItemById(secondItemIndex); local secondItemType = NativePointer(secondItemInfo.C_Object).add(141 * 4).readU32(); //判断是否在禁止继承装备中 foreach(exceptItemIndex in Config["继承配置"]["禁止继承装备ID"]) { if(firstItemIndex == exceptItemIndex || secondItemIndex == exceptItemIndex) { //获取装备名字 local ItemName = PvfItem.GetNameById(exceptItemIndex); _InheritBynangua.NotifyUserAndReturn(SUser, ItemId, format(Config["继承配置"]["继承失败提示5"], ItemName)); return; } } // 禁止继承的装备类型(10武器,11称号,12上衣,13头肩,14下装,15鞋子,16腰带,17项链,18手镯,19戒指,20左槽,21右槽) if (Config["继承配置"]["禁止继承装备类型"].find(firstItemType || secondItemType) != null) { _InheritBynangua.NotifyUserAndReturn(SUser, ItemId, Config["继承配置"]["继承失败提示2"]); return; } // 1、2栏装备类型不同无法继承 if (firstItemType != secondItemType) { _InheritBynangua.NotifyUserAndReturn(SUser, ItemId, Config["继承配置"]["继承失败提示2"]); return; } //装备等级大于等于50级才可以继承,1、2栏装备等级差距超过5级无法继承 if (firstItemInfo.GetUsableLevel() < Config["继承配置"]["装备等级大于等于多少允许继承"] || secondItemInfo.GetUsableLevel() < Config["继承配置"]["装备等级大于等于多少允许继承"] || _InheritBynangua.CheckUsableLevelBynangua(firstItemInfo.GetUsableLevel() - secondItemInfo.GetUsableLevel()) > Config["继承配置"]["装备等级跨度超过多少不允许继承"]) { _InheritBynangua.NotifyUserAndReturn(SUser, ItemId, Config["继承配置"]["继承失败提示3"]); return; } //装备品级低于3无法继承 if (firstItemInfo.GetRarity() < Config["继承配置"]["装备品级低于多少不允许继承"] || secondItemInfo.GetRarity() < Config["继承配置"]["装备品级低于多少不允许继承"]) { _InheritBynangua.NotifyUserAndReturn(SUser, ItemId, Config["继承配置"]["继承失败提示4"]); return; } if (!Config["继承配置"]["是否允许不同品级的装备继承(true可以,false不可以)"]) { if (firstItemInfo.GetRarity() != secondItemInfo.GetRarity()) { _InheritBynangua.NotifyUserAndReturn(SUser, ItemId, Config["继承配置"]["继承失败提示4"]); return; } } //满足以上条件后开始执行继承逻辑 //将第一个装备的属性继承到第二个装备 Sq_CallFunc(S_Ptr("0x8671EB2"), "int", ["pointer", "pointer", "pointer"], SUser.C_Object, secondItemObj.C_Object, firstItemObj.C_Object); // 将第一个装备的镶嵌数据库ID设置为0 NativePointer(firstItemObj.C_Object).add(25).writeU32(0); //获取异界气息属性 local firstBreath = NativePointer(firstItemObj.C_Object).add(31).readU8(); local secondBreath = NativePointer(firstItemObj.C_Object).add(32).readU8(); if(firstBreath > 0 && Config["继承配置"]["是否允许继承异界气息(true可以,false不可以)"]) { //写入异界气息属性 NativePointer(secondItemObj.C_Object).add(31).writeU8(firstBreath); NativePointer(secondItemObj.C_Object).add(32).writeU8(secondBreath); //清除第一件装备异界气息属性 NativePointer(firstItemObj.C_Object).add(31).writeU8(0); NativePointer(firstItemObj.C_Object).add(32).writeU8(0); } //移除被继承装备属性 local removeAttributes = [6, 17, 51, 13]; foreach (attributes in removeAttributes) { NativePointer(firstItemObj.C_Object).add(attributes).writeU8(0); } //刷新背包信息 SUser.SendUpdateItemList(1, 0, Config["继承配置"]["装备1摆放位置"]); SUser.SendUpdateItemList(1, 0, Config["继承配置"]["装备2摆放位置"]); firstItemObj = InvenObj.GetSlot(Inven.INVENTORY_TYPE_ITEM, Config["继承配置"]["装备1摆放位置"]); secondItemObj = InvenObj.GetSlot(Inven.INVENTORY_TYPE_ITEM, Config["继承配置"]["装备2摆放位置"]); //获取装备名字 local firstItemName = PvfItem.GetNameById(firstItemObj.GetIndex()); local secondItemName = PvfItem.GetNameById(secondItemObj.GetIndex()); //获取强化信息 local upgrade = secondItemObj.GetUpgrade();//强化 //字符串合成 if (upgrade > 0) { secondItemName = "+" + upgrade + " " + secondItemName; } //组合消息 local AdMsgObj = AdMsg() AdMsgObj.PutType(Config["继承成功提示"]["信息发送位置"]); if (Config["继承成功提示"]["信息发送位置"] != 14){ AdMsgObj.PutString(" "); } AdMsgObj.PutImoticon(Config["继承成功提示"]["表情"]); AdMsgObj.PutString(Config["继承成功提示"]["信息1"]); AdMsgObj.PutEquipment("[" + firstItemName + "]", firstItemObj, _InheritBynangua.RarityColor(firstItemIndex)); AdMsgObj.PutString(Config["继承成功提示"]["信息2"]); AdMsgObj.PutEquipment("[" + secondItemName + "]", secondItemObj, _InheritBynangua.RarityColor(secondItemIndex)); AdMsgObj.Finalize(); SUser.Send(AdMsgObj.MakePack()); AdMsgObj.Delete(); } class _InheritBynangua { function CheckUsableLevelBynangua(value) { return value >= 0 ? value : -value; } function NotifyUserAndReturn(SUser, ItemId, message) { local Config = GlobalConfig.Get("装备继承券配置_Nangua.json"); //发送通知 if(Config["弹窗提示(true为开启,false为关闭)"]) { SUser.SendNotiBox(message, 1); }else{ SUser.SendNotiPacketMessage(message, 8); } //返还消耗的道具 SUser.GiveItem(ItemId, 1); } function RarityColor(item_id) { local PvfItemObj = PvfItem.GetPvfItemById(item_id); if (PvfItemObj == null) { return; } local CItem_get_rarity = PvfItemObj.GetRarity(); // 装备品级 return _InheritBynangua.rarityColorMap[(CItem_get_rarity).tostring()]; } //品级对应的RGB rarityColorMap = { "0": [255, 255, 255], // 普通 "1": [104, 213, 237], // 高级 "2": [179, 107, 255], // 稀有 "3": [255, 0, 255], // 神器 "4": [255, 180, 0], // 史诗 "5": [255, 102, 102], // 勇者 "6": [255, 20, 147], // 深粉红色 "7": [255, 215, 0] // 金色 }; } //加载入口 function _Dps_InheritItem_Main_() { _Dps_InheritItem_Logic_(); } //重载入口 function _Dps_InheritItem_Main_Reload_(OldConfig) { local Cofig = GlobalConfig.Get("装备继承券配置_Nangua.json"); Cb_Use_Item_Sp_Func.rawdelete(OldConfig["继承配置"]["继承券道具ID"].tointeger()); //重新注册 _Dps_InheritItem_Logic_(); } function _Dps_InheritItem_Logic_() { local Cofig = GlobalConfig.Get("装备继承券配置_Nangua.json"); // 装备继承 Cb_Use_Item_Sp_Func[Cofig["继承配置"]["继承券道具ID"]] <- InheritFuncBynangua; }