Files
DP-S_Script/示例项目/装备继承券/装备继承券.nut
2026-04-16 16:27:53 +08:00

166 lines
7.9 KiB
Plaintext
Raw 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.
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;
}