dp-s_doc/Start/Example/9.md

184 lines
5.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 装备继承券 (贡献者: X)
> 首先我们先在dp_s文件夹中建立一个项目文件夹 MyProject 方便管理
![Alt text](../../image/6.png)
> 然后我们建立一个新文件 装备继承券.nut 用于编写我们的代码
![Alt text](../../image/30.png)
> 然后我们在装备继承券.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=武器;称号=1116=腰带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");
```
> 至此一个简单的装备继承券的逻辑就写完了