184 lines
5.0 KiB
Markdown
184 lines
5.0 KiB
Markdown
|
|
## 装备继承券 (贡献者: X)
|
|||
|
|
|
|||
|
|
> 首先我们先在dp_s文件夹中建立一个项目文件夹 MyProject 方便管理
|
|||
|
|
|
|||
|
|

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

|
|||
|
|
|
|||
|
|
> 然后我们在装备继承券.nut中写入以下代码
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
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=武器;称号=11;16=腰带;15=鞋子;14=下装;13=护肩;12=上衣;项链=17;手镯=18;戒指=19;魔法石=21;辅助装备=20;
|
|||
|
|
|
|||
|
|
local pP1 = PvfItem.GetPvfItemById(ItemId1);
|
|||
|
|
|
|||
|
|
local itemType1 = NativePointer(pP1.C_Object).add(141*4).readU32();
|
|||
|
|
|
|||
|
|
local pP2 = PvfItem.GetPvfItemById(ItemId2);
|
|||
|
|
|
|||
|
|
local itemType2 = NativePointer(pP2.C_Object).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,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,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,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,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,ItemObj1,ItemObj2){
|
|||
|
|
|
|||
|
|
//获取物品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;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
local forging = ItemObj1.GetForging();//锻造
|
|||
|
|
local upgrade = ItemObj1.GetUpgrade();//强化
|
|||
|
|
local amplification = ItemObj1.GetAmplification();//增幅
|
|||
|
|
local enchanting = ItemObj1.GetEnchanting();//附魔
|
|||
|
|
|
|||
|
|
if(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;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
> 最后我们回到dp_s文件夹中,打开Main.nut 加载我们刚才编写的逻辑
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
sq_RunScript("MyProject/装备继承券.nut");
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
> 至此一个简单的装备继承券的逻辑就写完了
|