添加示例项目

This commit is contained in:
2026-04-16 16:27:53 +08:00
parent 69a2141804
commit 721fb5a992
192 changed files with 10148 additions and 0 deletions

View File

@@ -0,0 +1,166 @@
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;
}