移除OfficialProject和OfficialConfig的Git追踪,添加忽略规则
This commit is contained in:
parent
e52606e756
commit
6e250e7fa4
|
|
@ -1,24 +0,0 @@
|
||||||
{
|
|
||||||
"烟花道具ID": 7577,
|
|
||||||
"提示1": "很遗憾,您没有获得任何物品",
|
|
||||||
"提示2": "获得周年庆爆竹奖励 [%s]",
|
|
||||||
"提示1类型": 1,
|
|
||||||
"提示2类型": 1,
|
|
||||||
"道具列表": [
|
|
||||||
{
|
|
||||||
"itemId": 3037,
|
|
||||||
"count": 10,
|
|
||||||
"probability": 100
|
|
||||||
},{
|
|
||||||
"itemId": 3038,
|
|
||||||
"count": 20,
|
|
||||||
"probability": 100
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"itemId": null,
|
|
||||||
"count": 20,
|
|
||||||
"probability": 100
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"PK经验道具ID": 7576
|
|
||||||
}
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
{
|
|
||||||
"转职初始职业":[7577],
|
|
||||||
"转职第一职业":[7577],
|
|
||||||
"转职第二职业":[7577],
|
|
||||||
"转职第三职业":[7577],
|
|
||||||
"转职第四职业":[7577],
|
|
||||||
"转职第五职业":[7577]
|
|
||||||
}
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
{
|
|
||||||
"副本播报开关(true开启,false关闭)":true,
|
|
||||||
"不需要播报的副本ID(实例中的ID为怪物攻城的副本ID尽量不要删)":[20002, 20001, 20002, 20003, 20004, 20005, 20006, 20007, 20008, 20009, 20010, 20020, 20021, 20022, 20023, 20024],
|
|
||||||
"指定角色CID不播报":[1, 2],
|
|
||||||
"提示": "角色ID可以查看数据库中 taiwan_cain → charac_info → charac_no代表角色ID",
|
|
||||||
"通关播报信息":"玩家[%s]通关[%s - %s]用时:[%s],击杀怪物数量<%d>",
|
|
||||||
"未通过一个小地图播报信息":"玩家[%s]在[%s%s-%s]中连一个地图都没通过,击杀怪物数量<%d>",
|
|
||||||
"放弃副本":"很遗憾,玩家[%s]在[%s%s-%s]中被打的落荒而逃,用时: %s,击杀怪物数量<%d>",
|
|
||||||
"在队伍中提前退出副本":"玩家[%s]在<%s>的队伍中,提前退出了[%s%s-%s],用时: %s,击杀怪物数量<%d>",
|
|
||||||
"发送信息位置":14,
|
|
||||||
"副本难度命名" : {
|
|
||||||
"0": "普通级",
|
|
||||||
"1": "冒险级",
|
|
||||||
"2": "勇士级",
|
|
||||||
"3": "王者级",
|
|
||||||
"4": "地狱级"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,132 +0,0 @@
|
||||||
{
|
|
||||||
"信息提示窗口提示(true开启/false关闭)": false,
|
|
||||||
"信息播报发送位置": 37,
|
|
||||||
"品级回收配置": {
|
|
||||||
"开启品级以及装备等级的回收(true开启/false关闭)": false,
|
|
||||||
"提示": "奖励[道具ID(0代表点券),数量最小值,数量最大值]",
|
|
||||||
"配置列表": [
|
|
||||||
{
|
|
||||||
"奖励": [
|
|
||||||
[
|
|
||||||
3037,
|
|
||||||
10,
|
|
||||||
20
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"装备品级": 2,
|
|
||||||
"装备等级": 55
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"奖励": [
|
|
||||||
[
|
|
||||||
7421,
|
|
||||||
10,
|
|
||||||
20
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"装备品级": 3,
|
|
||||||
"装备等级": 10
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"奖励": [
|
|
||||||
[
|
|
||||||
3037,
|
|
||||||
10,
|
|
||||||
20
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"装备品级": 4,
|
|
||||||
"装备等级": 50
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"奖励": [
|
|
||||||
[
|
|
||||||
3037,
|
|
||||||
10,
|
|
||||||
20
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"装备品级": 4,
|
|
||||||
"装备等级": 55
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"奖励": [
|
|
||||||
[
|
|
||||||
3037,
|
|
||||||
10,
|
|
||||||
20
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"装备品级": 4,
|
|
||||||
"装备等级": 60
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"奖励": [
|
|
||||||
[
|
|
||||||
3037,
|
|
||||||
10,
|
|
||||||
20
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"装备品级": 4,
|
|
||||||
"装备等级": 65
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"奖励": [
|
|
||||||
[
|
|
||||||
3037,
|
|
||||||
10,
|
|
||||||
20
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"装备品级": 4,
|
|
||||||
"装备等级": 70
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"回收失败信息": " 装备回收失败\n 没有合适的装备或已上锁",
|
|
||||||
"回收成功是否返还回收券道具(true返还/false不返还)": false,
|
|
||||||
"回收配置": {
|
|
||||||
"回收位置": [
|
|
||||||
140,
|
|
||||||
156
|
|
||||||
],
|
|
||||||
"回收箱道具ID": 75771,
|
|
||||||
"指定宠物装备回收": [
|
|
||||||
[
|
|
||||||
64007,
|
|
||||||
3340,
|
|
||||||
1,
|
|
||||||
10
|
|
||||||
],
|
|
||||||
[
|
|
||||||
27102,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
10
|
|
||||||
],
|
|
||||||
[
|
|
||||||
2711001,
|
|
||||||
3038,
|
|
||||||
1,
|
|
||||||
10
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"指定装备ID不参与回收": [
|
|
||||||
27099,
|
|
||||||
27100,
|
|
||||||
27101
|
|
||||||
],
|
|
||||||
"提示1": "[回收装备的ID,奖励道具的ID(0代表点券),数量最小值,数量最大值]",
|
|
||||||
"提示2": "回收位置快捷栏(快捷栏3-8),装备栏(快捷栏9-56,如第一排为9-16,第二排为17-24,第三排为25-32,第四排为33-40,第五排为41-48,第六排为49-56)",
|
|
||||||
"提示3": "如果指定装备回收和品级回收都命中的情况下,优先以指定装备回收为准",
|
|
||||||
"提示4": "排除装备ID中的装备不会参与回收,即使它们符合其他回收条件"
|
|
||||||
},
|
|
||||||
"成功回收": {
|
|
||||||
"单位": "个",
|
|
||||||
"奖励提示": "奖励",
|
|
||||||
"标题": " 成功回收"
|
|
||||||
},
|
|
||||||
"提示": "开启弹窗提示需在群文件下载 <客户端消息框233.dll> 插件,否则会导致游戏崩溃",
|
|
||||||
"表情ID": 59
|
|
||||||
}
|
|
||||||
|
|
@ -1,23 +0,0 @@
|
||||||
{
|
|
||||||
"抗魔值进入副本":{
|
|
||||||
"提示":"抗魔值进入副本配置(副本ID[普通级,所需抗魔值,冒险级,所需抗魔值,勇士级,所需抗魔值,王者级,所需抗魔值,地狱级,所需抗魔值])",
|
|
||||||
"抗魔值进入副本开关(true为开启,false为关闭)":true,
|
|
||||||
"副本配置":{
|
|
||||||
"1":[0, 0, 1, 200, 2, 300, 3, 400, 4, 500, 5, 600],
|
|
||||||
"2":[0, 100, 1, 200, 2, 300, 3, 400, 4, 500, 5, 600],
|
|
||||||
"3":[0, 100, 1, 200, 2, 300, 3, 400, 4, 500, 5, 600],
|
|
||||||
"4":[0, 100, 1, 200, 2, 300, 3, 400, 4, 500, 5, 600],
|
|
||||||
"5":[0, 100, 1, 200, 2, 300, 3, 400, 4, 500, 5, 600],
|
|
||||||
"6":[0, 100, 1, 200, 2, 300, 3, 400, 4, 500, 5, 600],
|
|
||||||
"7":[0, 100, 1, 200, 2, 300, 3, 400, 4, 500, 5, 600]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"副本难度命名" : {
|
|
||||||
"0": "普通级",
|
|
||||||
"1": "冒险级",
|
|
||||||
"2": "勇士级",
|
|
||||||
"3": "王者级",
|
|
||||||
"4": "地狱级"
|
|
||||||
},
|
|
||||||
"PVF储存路径_没有更改的话不要改动此配置":"/home/neople/game/Script.pvf"
|
|
||||||
}
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
{
|
|
||||||
"1" : "哥布林",
|
|
||||||
"2" : "投掷哥布林"
|
|
||||||
}
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
{
|
|
||||||
"时装清除卷ID": 2021458808,
|
|
||||||
"宠物清除卷ID": 2021458807,
|
|
||||||
"时装清除完成提示": "清除前两行时装成功",
|
|
||||||
"宠物清除完成提示": "清除前两行宠物成功",
|
|
||||||
"时装清除券是否返还": true,
|
|
||||||
"宠物清除券是否返还": true,
|
|
||||||
"数据库IP 不是外置数据库不要更改": "127.0.0.1",
|
|
||||||
"数据库端口 不懂不要更改": 3306,
|
|
||||||
"数据库用户名 本地用户名不懂不要更改": "game",
|
|
||||||
"数据库密码 本地密码不懂不要更改": "uu5!^%jg"
|
|
||||||
}
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
{
|
|
||||||
"副本集合": {
|
|
||||||
"1": 0.2,
|
|
||||||
"2": 0.01,
|
|
||||||
"3": 0.01
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
{
|
|
||||||
"充值卡配置": {
|
|
||||||
"2024120601": 1000,
|
|
||||||
"2024120602": 5000,
|
|
||||||
"2024120603": 10000,
|
|
||||||
"2024120604": 30000,
|
|
||||||
"2024120605": 50000
|
|
||||||
},
|
|
||||||
"提示": "如果使用233发包需要客户端插件,在群文件搜索<客户端插件消息框233>下载使用,否则会导致游戏崩溃",
|
|
||||||
"启用233发包(true/false)": false,
|
|
||||||
"充值成功提示": "成功充值 %d 点券"
|
|
||||||
}
|
|
||||||
|
|
@ -1,132 +0,0 @@
|
||||||
{
|
|
||||||
"信息提示窗口提示(true开启/false关闭)": false,
|
|
||||||
"信息播报发送位置": 37,
|
|
||||||
"品级回收配置": {
|
|
||||||
"开启品级以及装备等级的回收(true开启/false关闭)": false,
|
|
||||||
"提示": "奖励[道具ID(0代表点券),数量最小值,数量最大值]",
|
|
||||||
"配置列表": [
|
|
||||||
{
|
|
||||||
"奖励": [
|
|
||||||
[
|
|
||||||
3037,
|
|
||||||
10,
|
|
||||||
20
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"装备品级": 2,
|
|
||||||
"装备等级": 55
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"奖励": [
|
|
||||||
[
|
|
||||||
7421,
|
|
||||||
10,
|
|
||||||
20
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"装备品级": 3,
|
|
||||||
"装备等级": 10
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"奖励": [
|
|
||||||
[
|
|
||||||
3037,
|
|
||||||
10,
|
|
||||||
20
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"装备品级": 4,
|
|
||||||
"装备等级": 50
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"奖励": [
|
|
||||||
[
|
|
||||||
3037,
|
|
||||||
10,
|
|
||||||
20
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"装备品级": 4,
|
|
||||||
"装备等级": 55
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"奖励": [
|
|
||||||
[
|
|
||||||
3037,
|
|
||||||
10,
|
|
||||||
20
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"装备品级": 4,
|
|
||||||
"装备等级": 60
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"奖励": [
|
|
||||||
[
|
|
||||||
3037,
|
|
||||||
10,
|
|
||||||
20
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"装备品级": 4,
|
|
||||||
"装备等级": 65
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"奖励": [
|
|
||||||
[
|
|
||||||
3037,
|
|
||||||
10,
|
|
||||||
20
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"装备品级": 4,
|
|
||||||
"装备等级": 70
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"回收失败信息": " 装备回收失败\n 没有合适的装备或已上锁",
|
|
||||||
"回收成功是否返还回收券道具(true返还/false不返还)": false,
|
|
||||||
"回收配置": {
|
|
||||||
"回收位置": [
|
|
||||||
9,
|
|
||||||
16
|
|
||||||
],
|
|
||||||
"回收箱道具ID": 17577,
|
|
||||||
"指定装备ID不参与回收": [
|
|
||||||
27099,
|
|
||||||
27100,
|
|
||||||
27101
|
|
||||||
],
|
|
||||||
"指定装备回收": [
|
|
||||||
[
|
|
||||||
27098,
|
|
||||||
3340,
|
|
||||||
1,
|
|
||||||
10
|
|
||||||
],
|
|
||||||
[
|
|
||||||
27102,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
10
|
|
||||||
],
|
|
||||||
[
|
|
||||||
2711001,
|
|
||||||
3038,
|
|
||||||
1,
|
|
||||||
10
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"提示1": "[回收装备的ID,奖励道具的ID(0代表点券),数量最小值,数量最大值]",
|
|
||||||
"提示2": "回收位置快捷栏(快捷栏3-8),装备栏(快捷栏9-56,如第一排为9-16,第二排为17-24,第三排为25-32,第四排为33-40,第五排为41-48,第六排为49-56)",
|
|
||||||
"提示3": "如果指定装备回收和品级回收都命中的情况下,优先以指定装备回收为准",
|
|
||||||
"提示4": "排除装备ID中的装备不会参与回收,即使它们符合其他回收条件"
|
|
||||||
},
|
|
||||||
"成功回收": {
|
|
||||||
"单位": "个",
|
|
||||||
"奖励提示": "奖励",
|
|
||||||
"标题": " 成功回收"
|
|
||||||
},
|
|
||||||
"提示": "开启弹窗提示需在群文件下载 <客户端消息框233.dll> 插件,否则会导致游戏崩溃",
|
|
||||||
"表情ID": 59
|
|
||||||
}
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
{
|
|
||||||
"数据库IP 不是外置数据库不要更改": "127.0.0.1",
|
|
||||||
"数据库端口 不懂不要更改": 3306,
|
|
||||||
"数据库用户名 本地用户名不懂不要更改": "game",
|
|
||||||
"数据库密码 本地密码不懂不要更改": "uu5!^%jg"
|
|
||||||
}
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
{
|
|
||||||
"门票进入副本":{
|
|
||||||
"提示":"门票进入副本配置(副本ID[普通级,门票,冒险级,门票,勇士级,门票,王者级,门票,地狱级,门票])",
|
|
||||||
"门票进入副本开关(true为开启,false为关闭)":true,
|
|
||||||
"副本配置":{
|
|
||||||
"1":[0, 3037, 1, 3037, 2, 3037, 3, 3037, 4, 3037, 5, 3037]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"副本难度命名" : {
|
|
||||||
"0": "普通级",
|
|
||||||
"1": "冒险级",
|
|
||||||
"2": "勇士级",
|
|
||||||
"3": "王者级",
|
|
||||||
"4": "地狱级"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
{
|
|
||||||
"制裁开关(true开启false关闭)": true,
|
|
||||||
"制裁配置 达到次数 制裁时长(秒)": [2, 300],
|
|
||||||
"角色CID白名单": [1, 2],
|
|
||||||
"副本ID白名单(非正常副本接口进入的副本)": [11111,222222],
|
|
||||||
"温馨提示1":"副本ID白名单并不是加了就关闭检测,只是关闭其中一项检测",
|
|
||||||
"温馨提示2": "角色ID可以查看数据库中 taiwan_cain → charac_info → charac_no代表角色ID",
|
|
||||||
|
|
||||||
"msgtype1": "你已经被限制获取道具和金币,剩余:[%d]秒...",
|
|
||||||
"msgtype2": "你已经被限制获取经验,剩余:[%d]秒...",
|
|
||||||
"msgtype3": "玩家[%s]因使用第三方软件已被限制进入副本,剩余:[%d]秒..."
|
|
||||||
}
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
{
|
|
||||||
"ProjectName": "全职业通用转职书",
|
|
||||||
"ProjectDescribe": "全职业都可用的转职书。每个转职职业是个数组,可以写多个转职卷编号,仿照7577的道具类型即可,使用\",\"隔开。",
|
|
||||||
"ProjectAuthor": "倾泪寒",
|
|
||||||
"ProjectVersion": 1.0,
|
|
||||||
"ProjectConfig": "",
|
|
||||||
"ProjectConfig": "全职业通用转职书_Lenheart.json",
|
|
||||||
"ProjectFiles": [
|
|
||||||
"全职业通用转职书.nut"
|
|
||||||
],
|
|
||||||
"ProjectRunFunc": "_Dps_GeneralJobTransferCertificateForAllProfessions_Main_"
|
|
||||||
}
|
|
||||||
|
|
@ -1,50 +0,0 @@
|
||||||
/*
|
|
||||||
文件名:全职业通用转职书.nut
|
|
||||||
路径:OfficialProject/全职业通用转职书/全职业通用转职书.nut
|
|
||||||
创建日期:2025-10-24 22:26
|
|
||||||
文件用途:
|
|
||||||
*/
|
|
||||||
|
|
||||||
//重载入口
|
|
||||||
function _Dps_GeneralJobTransferCertificateForAllProfessions_Main_Reload_(OldConfig) {
|
|
||||||
//先销毁原来注册的
|
|
||||||
local JobArr = [];
|
|
||||||
JobArr.push(GlobalConfig["转职初始职业"]);
|
|
||||||
JobArr.push(GlobalConfig["转职第一职业"]);
|
|
||||||
JobArr.push(GlobalConfig["转职第二职业"]);
|
|
||||||
JobArr.push(GlobalConfig["转职第三职业"]);
|
|
||||||
JobArr.push(GlobalConfig["转职第四职业"]);
|
|
||||||
JobArr.push(GlobalConfig["转职第五职业"]);
|
|
||||||
|
|
||||||
foreach(Index, arr in JobArr) {
|
|
||||||
foreach(ItemId in arr) {
|
|
||||||
if (Cb_Use_Item_Sp_Func.rawin(ItemId)) Cb_Use_Item_Sp_Func.rawdelete(ItemId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//重新注册
|
|
||||||
_Dps_GeneralJobTransferCertificateForAllProfessions_Main_();
|
|
||||||
}
|
|
||||||
|
|
||||||
function _Dps_GeneralJobTransferCertificateForAllProfessions_Main_() {
|
|
||||||
local Config = GlobalConfig.Get("全职业通用转职书_Lenheart.json");
|
|
||||||
local JobArr = [];
|
|
||||||
JobArr.push(Config["转职初始职业"]);
|
|
||||||
JobArr.push(Config["转职第一职业"]);
|
|
||||||
JobArr.push(Config["转职第二职业"]);
|
|
||||||
JobArr.push(Config["转职第三职业"]);
|
|
||||||
JobArr.push(Config["转职第四职业"]);
|
|
||||||
JobArr.push(Config["转职第五职业"]);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
foreach(Index, arr in JobArr) {
|
|
||||||
foreach(ItemId in arr) {
|
|
||||||
Cb_Use_Item_Sp_Func[ItemId] <- function(SUser, ItemId) {
|
|
||||||
SUser.ChangeGrowType(Index, 0);
|
|
||||||
SUser.SendNotiPacket(0, 2, 0);
|
|
||||||
SUser.InitSkillW(0, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
{
|
|
||||||
"ProjectName": "宠物装备回收",
|
|
||||||
"ProjectDescribe": "宠物装备回收,根据指定回收的ID奖励随机数量的奖励,以及根据品级以及装备等级进行回收给与奖励",
|
|
||||||
"ProjectAuthor": "猫咪",
|
|
||||||
"ProjectVersion": 1.4,
|
|
||||||
"ProjectConfig": "宠物装备回收配置_Maomi.json",
|
|
||||||
"ProjectFiles": [
|
|
||||||
"宠物装备回收.nut"
|
|
||||||
],
|
|
||||||
"ProjectRunFunc": "_Dps_PetEquipmentRecycling_Main_"
|
|
||||||
}
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
{}
|
|
||||||
|
|
@ -1,341 +0,0 @@
|
||||||
// 回收装备的主函数
|
|
||||||
function PetEquipmentRecyclingFuncBymaomi(SUser, ItemId) {
|
|
||||||
local Config = GlobalConfig.Get("宠物装备回收配置_Maomi.json");
|
|
||||||
|
|
||||||
// 获取用户的背包对象,如果不存在则直接返回
|
|
||||||
local InvenObj = SUser.GetInven();
|
|
||||||
if (!InvenObj) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
local foundValidSlot = false;
|
|
||||||
local index = 0;
|
|
||||||
local allRewards = [];
|
|
||||||
|
|
||||||
// 遍历装备栏指定范围的格子
|
|
||||||
for (local i = Config["回收配置"]["回收位置"][0]; i <= Config["回收配置"]["回收位置"][1]; i++) {
|
|
||||||
local ItemObj = InvenObj.GetSlot(3, i);
|
|
||||||
|
|
||||||
// 如果该槽为空,跳过
|
|
||||||
if (ItemObj.IsEmpty) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 检查装备是否上锁,若上锁则跳过该装备
|
|
||||||
local CheckItemLock = Sq_CallFunc(S_Ptr("0x8646942"), "int", ["pointer", "int", "int"], SUser.C_Object, 1, i);
|
|
||||||
if (CheckItemLock) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
local Item_Id = ItemObj.GetIndex();
|
|
||||||
|
|
||||||
// 检查装备是否在排除列表中,如果在则跳过
|
|
||||||
if ("指定装备ID不参与回收" in Config["回收配置"] && Config["回收配置"]["指定装备ID不参与回收"].len() > 0) {
|
|
||||||
local isExcluded = false;
|
|
||||||
foreach (excludeId in Config["回收配置"]["指定装备ID不参与回收"]) {
|
|
||||||
if (excludeId == Item_Id) {
|
|
||||||
isExcluded = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isExcluded) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
local PvfItemObj = PvfItem.GetPvfItemById(Item_Id);
|
|
||||||
local rarity = PvfItemObj.GetRarity();
|
|
||||||
local level = PvfItemObj.GetUsableLevel();
|
|
||||||
local Recycleitem_name = PvfItem.GetNameById(Item_Id);
|
|
||||||
|
|
||||||
// 检查指定宠物装备回收配置
|
|
||||||
local found = false;
|
|
||||||
foreach(item in Config["回收配置"]["指定宠物装备回收"]) {
|
|
||||||
if(item[0] == Item_Id) {
|
|
||||||
local Rewarditem = item[1];
|
|
||||||
local minCount = item[2];
|
|
||||||
local maxCount = item[3];
|
|
||||||
local Rewarditem_name = PvfItem.GetNameById(Rewarditem);
|
|
||||||
local RewardItemObj = PvfItem.GetPvfItemById(Rewarditem);
|
|
||||||
local item_upgrade = ItemObj.GetUpgrade();
|
|
||||||
local totalRewards = [];
|
|
||||||
if (item_upgrade > 0) {
|
|
||||||
Recycleitem_name = "+" + item_upgrade + Recycleitem_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
local count = MathClass.Rand(minCount, maxCount + 1);
|
|
||||||
if (Rewarditem == 0) {
|
|
||||||
SUser.RechargeCera(count);
|
|
||||||
_RecycleItem_nangua.sendRewardMessageForCera(SUser, Recycleitem_name, ItemObj, count, Item_Id);
|
|
||||||
} else {
|
|
||||||
local equ_type = NativePointer(RewardItemObj.C_Object).add(141 * 4).readU32();
|
|
||||||
if (equ_type > 0) {
|
|
||||||
count = 1;
|
|
||||||
}
|
|
||||||
totalRewards.append([Rewarditem, count]);
|
|
||||||
allRewards.append([Rewarditem, count]); // 添加到总奖励列表
|
|
||||||
_RecycleItem_nangua.api_CUser_Add_Item_list(SUser, totalRewards);
|
|
||||||
_RecycleItem_nangua.sendRewardMessageForItem(SUser, Recycleitem_name, ItemObj, Rewarditem_name, count, equ_type, Item_Id, Rewarditem);
|
|
||||||
}
|
|
||||||
foundValidSlot = true;
|
|
||||||
ItemObj.Delete();
|
|
||||||
SUser.SendUpdateItemList(1, 3, i);
|
|
||||||
index++;
|
|
||||||
found = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(found) continue;
|
|
||||||
|
|
||||||
// 检查品级回收配置
|
|
||||||
if (Config["品级回收配置"]["开启品级以及装备等级的回收(true开启/false关闭)"]) {
|
|
||||||
foreach(cfg in Config["品级回收配置"]["配置列表"]) {
|
|
||||||
if (cfg["装备品级"] == rarity && cfg["装备等级"] == level) {
|
|
||||||
foundValidSlot = true;
|
|
||||||
local reward = cfg["奖励"][0];
|
|
||||||
local count = MathClass.Rand(reward[1], reward[2] + 1);
|
|
||||||
local totalReward = [];
|
|
||||||
if (reward[0] == 0) {
|
|
||||||
SUser.RechargeCera(count);
|
|
||||||
_RecycleItem_nangua.sendRewardMessageForCera(SUser, Recycleitem_name, ItemObj, count, Item_Id);
|
|
||||||
} else {
|
|
||||||
local Rewarditem_name = PvfItem.GetNameById(reward[0]);
|
|
||||||
// 获取装备类型大于0为装备
|
|
||||||
local RewardItemObj = PvfItem.GetPvfItemById(reward[0]);
|
|
||||||
local equ_type = NativePointer(RewardItemObj.C_Object).add(141 * 4).readU32();
|
|
||||||
if (equ_type > 0) {
|
|
||||||
count = 1;
|
|
||||||
}
|
|
||||||
totalReward.append([reward[0], count]);
|
|
||||||
allRewards.append([reward[0], count]);
|
|
||||||
_RecycleItem_nangua.api_CUser_Add_Item_list(SUser, totalReward);
|
|
||||||
_RecycleItem_nangua.sendRewardMessageForItem(SUser, Recycleitem_name, ItemObj, Rewarditem_name, count, equ_type, Item_Id, reward[0]);
|
|
||||||
}
|
|
||||||
ItemObj.Delete();
|
|
||||||
SUser.SendUpdateItemList(1, 0, i);
|
|
||||||
index++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 发送结果消息
|
|
||||||
if (foundValidSlot) {
|
|
||||||
if (index > 0) {
|
|
||||||
SUser.SendNotiPacketMessage("恭喜: " + index + " 件宠物装备回收成功。", Config["信息播报发送位置"]);
|
|
||||||
if (allRewards.len() > 0) {
|
|
||||||
_RecycleItem_nangua.SendItemWindowNotification(SUser, allRewards);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(Config["回收成功是否返还回收券道具(true返还/false不返还)"]){
|
|
||||||
SUser.GiveItem(ItemId, 1);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
_RecycleItem_nangua.RecycleError(SUser, Config["回收失败信息"], ItemId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
class _RecycleItem_nangua {
|
|
||||||
// 发送通知和返还道具
|
|
||||||
function RecycleError(SUser, msg, ItemId) {
|
|
||||||
local Config = GlobalConfig.Get("宠物装备回收配置_Maomi.json");
|
|
||||||
if(Config["信息提示窗口提示(true开启/false关闭)"]) {
|
|
||||||
SUser.SendNotiBox(msg, 1);
|
|
||||||
} else {
|
|
||||||
SUser.SendNotiPacketMessage(msg, Config["信息播报发送位置"]);
|
|
||||||
}
|
|
||||||
SUser.GiveItem(ItemId, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 发送点券奖励消息
|
|
||||||
function sendRewardMessageForCera(SUser, Recycleitem_name, ItemObj, count, Item_Id) {
|
|
||||||
local Config = GlobalConfig.Get("宠物装备回收配置_Maomi.json");
|
|
||||||
local AdMsgObj = AdMsg();
|
|
||||||
AdMsgObj.PutType(Config["信息播报发送位置"]);
|
|
||||||
AdMsgObj.PutString(" ");
|
|
||||||
AdMsgObj.PutImoticon(Config["表情ID"]);
|
|
||||||
AdMsgObj.PutString(Config["成功回收"]["标题"]);
|
|
||||||
AdMsgObj.PutEquipment("[" + Recycleitem_name + "]", ItemObj, _RecycleItem_nangua.RarityColor(Item_Id));
|
|
||||||
AdMsgObj.PutString(Config["成功回收"]["奖励提示"]);
|
|
||||||
AdMsgObj.PutColorString("[" + count + "]", [255, 20, 0]);
|
|
||||||
AdMsgObj.PutString("点券");
|
|
||||||
AdMsgObj.Finalize();
|
|
||||||
SUser.Send(AdMsgObj.MakePack());
|
|
||||||
AdMsgObj.Delete();
|
|
||||||
}
|
|
||||||
|
|
||||||
// 发送道具奖励消息
|
|
||||||
function sendRewardMessageForItem(SUser, Recycleitem_name, ItemObj, Rewarditem_name, count, equ_type, Item_Id, Rewarditem) {
|
|
||||||
local Config = GlobalConfig.Get("宠物装备回收配置_Maomi.json");
|
|
||||||
local AdMsgObj = AdMsg();
|
|
||||||
AdMsgObj.PutType(Config["信息播报发送位置"]);
|
|
||||||
AdMsgObj.PutString(" ");
|
|
||||||
AdMsgObj.PutImoticon(Config["表情ID"]);
|
|
||||||
AdMsgObj.PutString(Config["成功回收"]["标题"]);
|
|
||||||
AdMsgObj.PutEquipment("[" + Recycleitem_name + "]", ItemObj, _RecycleItem_nangua.RarityColor(Item_Id));
|
|
||||||
AdMsgObj.PutString(Config["成功回收"]["奖励提示"]);
|
|
||||||
if (equ_type > 0) {
|
|
||||||
AdMsgObj.PutColorString("[" + Rewarditem_name + "]", _RecycleItem_nangua.RarityColor(Rewarditem));
|
|
||||||
} else {
|
|
||||||
AdMsgObj.PutColorString("[" + count + "]", [255, 20, 0]);
|
|
||||||
AdMsgObj.PutString(Config["成功回收"]["单位"]);
|
|
||||||
AdMsgObj.PutColorString("[" + Rewarditem_name + "]", _RecycleItem_nangua.RarityColor(Rewarditem));
|
|
||||||
}
|
|
||||||
AdMsgObj.Finalize();
|
|
||||||
SUser.Send(AdMsgObj.MakePack());
|
|
||||||
AdMsgObj.Delete();
|
|
||||||
}
|
|
||||||
function RarityColor(item_id) {
|
|
||||||
local PvfItemObj = PvfItem.GetPvfItemById(item_id);
|
|
||||||
if (PvfItemObj == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
local CItem_get_rarity = PvfItemObj.GetRarity(); // 装备品级
|
|
||||||
return _RecycleItem_nangua.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 api_CUser_Add_Item_list(SUser, item_list) {
|
|
||||||
for (local i = 0; i < item_list.len(); i++) {
|
|
||||||
local item_id = item_list[i][0]; // 道具代码
|
|
||||||
local quantity = item_list[i][1]; // 道具数量
|
|
||||||
local InvenObj = SUser.GetInven();
|
|
||||||
|
|
||||||
// 获取道具对象
|
|
||||||
local PvfItemObj = PvfItem.GetPvfItemById(item_id);
|
|
||||||
// 获取道具类型
|
|
||||||
local equ_type = NativePointer(PvfItemObj.C_Object).add(141 * 4).readU32();
|
|
||||||
// 获取最大堆叠数量
|
|
||||||
local maxStack = Sq_CallFunc(S_Ptr("0x0822C9FC"), "int", ["pointer"], PvfItemObj.C_Object);
|
|
||||||
|
|
||||||
// 如果是装备,直接检查空格并处理
|
|
||||||
if (equ_type > 0) {
|
|
||||||
local cnt = _RecycleItem_nangua.checkInventorySlot(SUser, item_id);
|
|
||||||
if (cnt == 1) {
|
|
||||||
SUser.GiveItem(item_id, quantity);
|
|
||||||
} else {
|
|
||||||
local RewardItems = [];
|
|
||||||
RewardItems.append([item_id, quantity]);
|
|
||||||
local title = "GM";
|
|
||||||
local Text = "由于背包空间不足,已通过邮件发送,请查收!";
|
|
||||||
SUser.ReqDBSendMultiMail(title, Text, 0, RewardItems);
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取道具在背包中的槽位
|
|
||||||
local slot = InvenObj.GetSlotById(item_id);
|
|
||||||
if (slot != -1) {
|
|
||||||
// 获取槽位中的道具对象
|
|
||||||
local ItemObj = InvenObj.GetSlot(1, slot);
|
|
||||||
// 获取当前堆叠数量
|
|
||||||
local currentCount = Sq_CallFunc(S_Ptr("0x80F783A"), "int", ["pointer"], ItemObj.C_Object);
|
|
||||||
|
|
||||||
// 如果当前堆叠未满,计算可以添加的数量
|
|
||||||
if (currentCount < maxStack) {
|
|
||||||
local canAdd = maxStack - currentCount;
|
|
||||||
if (quantity <= canAdd) {
|
|
||||||
// 如果奖励数量小于等于可添加数量,直接添加
|
|
||||||
Sq_CallFunc(S_Ptr("0x80CB884"), "int", ["pointer", "int"], ItemObj.C_Object, currentCount + quantity);
|
|
||||||
// 刷新背包显示
|
|
||||||
SUser.SendUpdateItemList(1, 0, slot);
|
|
||||||
} else {
|
|
||||||
// 如果奖励数量大于可添加数量
|
|
||||||
// 先将当前堆叠设置为最大
|
|
||||||
Sq_CallFunc(S_Ptr("0x80CB884"), "int", ["pointer", "int"], ItemObj.C_Object, maxStack);
|
|
||||||
SUser.SendUpdateItemList(1, 0, slot);
|
|
||||||
// 将剩余数量通过邮件发送
|
|
||||||
local remaining = quantity - canAdd;
|
|
||||||
local RewardItems = [];
|
|
||||||
RewardItems.append([item_id, remaining]);
|
|
||||||
local title = "GM";
|
|
||||||
local Text = "由于背包堆叠已满,部分道具已通过邮件发送,请查收!";
|
|
||||||
SUser.ReqDBSendMultiMail(title, Text, 0, RewardItems);
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
} else {
|
|
||||||
local RewardItems = [];
|
|
||||||
RewardItems.append([item_id, quantity]);
|
|
||||||
local title = "GM";
|
|
||||||
local Text = "由于背包堆叠已满,已通过邮件发送,请查收!";
|
|
||||||
SUser.ReqDBSendMultiMail(title, Text, 0, RewardItems);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果道具不在背包中,检查空格
|
|
||||||
local cnt = _RecycleItem_nangua.checkInventorySlot(SUser, item_id);
|
|
||||||
if (cnt == 1) {
|
|
||||||
// 如果道具有空格,直接添加到背包
|
|
||||||
SUser.GiveItem(item_id, quantity);
|
|
||||||
} else {
|
|
||||||
// 如果背包空间不足,通过邮件发送
|
|
||||||
local RewardItems = [];
|
|
||||||
RewardItems.append([item_id, quantity]);
|
|
||||||
local title = "GM";
|
|
||||||
local Text = "由于背包空间不足,已通过邮件发送,请查收!";
|
|
||||||
SUser.ReqDBSendMultiMail(title, Text, 0, RewardItems);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function SendItemWindowNotification(SUser, item_list) {
|
|
||||||
local Pack = Packet();
|
|
||||||
Pack.Put_Header(1, 163); //协议
|
|
||||||
Pack.Put_Byte(1); //默认1
|
|
||||||
Pack.Put_Short(0); //槽位id 填入0即可
|
|
||||||
Pack.Put_Int(0); //未知 0以上即可
|
|
||||||
Pack.Put_Short(item_list.len()); //道具组数
|
|
||||||
//写入道具代码和道具数量
|
|
||||||
for (local i = 0; i < item_list.len(); i++) {
|
|
||||||
Pack.Put_Int(item_list[i][0]); //道具代码
|
|
||||||
Pack.Put_Int(item_list[i][1]); //道具数量 装备/时装时 任意均可
|
|
||||||
}
|
|
||||||
Pack.Finalize(true); //确定发包内容
|
|
||||||
SUser.Send(Pack); //发包
|
|
||||||
Pack.Delete(); //清空buff区
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* 根据道具类型背包空格数量
|
|
||||||
* @param {pointer} SUser - 用户
|
|
||||||
* @param {int} item_id - 需要查找的道具ID
|
|
||||||
* @returns {int} - 空格数量
|
|
||||||
*/
|
|
||||||
function checkInventorySlot(SUser, itemid) {
|
|
||||||
local InvenObj = SUser.GetInven();
|
|
||||||
local type = Sq_CallFunc(S_Ptr("0x085018D2"), "int", ["pointer", "int"], InvenObj.C_Object, itemid);
|
|
||||||
local cnt = Sq_CallFunc(S_Ptr("0x08504F64"), "int", ["pointer", "int", "int"], InvenObj.C_Object, type, 1);
|
|
||||||
|
|
||||||
return cnt;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//加载入口
|
|
||||||
function _Dps_PetEquipmentRecycling_Main_() {
|
|
||||||
_Dps_PetEquipmentRecycling_Logic_();
|
|
||||||
}
|
|
||||||
|
|
||||||
//重载入口
|
|
||||||
function _Dps_PetEquipmentRecycling_Main_Reload_(OldConfig) {
|
|
||||||
local Cofig = GlobalConfig.Get("宠物装备回收配置_Maomi.json");
|
|
||||||
Cb_Use_Item_Sp_Func.rawdelete(OldConfig["回收配置"]["回收箱道具ID"].tointeger());
|
|
||||||
|
|
||||||
//重新注册
|
|
||||||
_Dps_PetEquipmentRecycling_Logic_();
|
|
||||||
}
|
|
||||||
|
|
||||||
function _Dps_PetEquipmentRecycling_Logic_() {
|
|
||||||
local Cofig = GlobalConfig.Get("宠物装备回收配置_Maomi.json");
|
|
||||||
// 宠物装备回收
|
|
||||||
Cb_Use_Item_Sp_Func[Cofig["回收配置"]["回收箱道具ID"]] <- PetEquipmentRecyclingFuncBymaomi;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,81 +0,0 @@
|
||||||
{
|
|
||||||
"回收配置": {
|
|
||||||
"回收箱道具ID": 2021458811,
|
|
||||||
"回收位置": [9, 16],
|
|
||||||
"指定宠物装备回收": [
|
|
||||||
[27098, 3340, 1, 10],
|
|
||||||
[27102, 0, 1, 10],
|
|
||||||
[2711001, 3038, 1, 10]
|
|
||||||
],
|
|
||||||
"指定装备ID不参与回收": [27099, 27100, 27101],
|
|
||||||
"提示1":"[回收装备的ID,奖励道具的ID(0代表点券),数量最小值,数量最大值]",
|
|
||||||
"提示2":"回收位置快捷栏(快捷栏3-8),装备栏(快捷栏9-56,如第一排为9-16,第二排为17-24,第三排为25-32,第四排为33-40,第五排为41-48,第六排为49-56)",
|
|
||||||
"提示3":"如果指定装备回收和品级回收都命中的情况下,优先以指定装备回收为准",
|
|
||||||
"提示4":"排除装备ID中的装备不会参与回收,即使它们符合其他回收条件"
|
|
||||||
},
|
|
||||||
"品级回收配置": {
|
|
||||||
"开启品级以及装备等级的回收(true开启/false关闭)": false,
|
|
||||||
"提示": "奖励[道具ID(0代表点券),数量最小值,数量最大值]",
|
|
||||||
"配置列表": [{
|
|
||||||
"装备品级": 2,
|
|
||||||
"装备等级": 55,
|
|
||||||
"奖励": [
|
|
||||||
[3037, 10, 20]
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"装备品级": 3,
|
|
||||||
"装备等级": 10,
|
|
||||||
"奖励": [
|
|
||||||
[7421, 10, 20]
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"装备品级": 4,
|
|
||||||
"装备等级": 50,
|
|
||||||
"奖励": [
|
|
||||||
[3037, 10, 20]
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"装备品级": 4,
|
|
||||||
"装备等级": 55,
|
|
||||||
"奖励": [
|
|
||||||
[3037, 10, 20]
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"装备品级": 4,
|
|
||||||
"装备等级": 60,
|
|
||||||
"奖励": [
|
|
||||||
[3037, 10, 20]
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"装备品级": 4,
|
|
||||||
"装备等级": 65,
|
|
||||||
"奖励": [
|
|
||||||
[3037, 10, 20]
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"装备品级": 4,
|
|
||||||
"装备等级": 70,
|
|
||||||
"奖励": [
|
|
||||||
[3037, 10, 20]
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"回收失败信息": " 装备回收失败\n 没有合适的装备或已上锁",
|
|
||||||
"信息播报发送位置": 37,
|
|
||||||
"信息提示窗口提示(true开启/false关闭)": false,
|
|
||||||
"提示":"开启弹窗提示需在群文件下载 <客户端消息框233.dll> 插件,否则会导致游戏崩溃",
|
|
||||||
"回收成功是否返还回收券道具(true返还/false不返还)":false,
|
|
||||||
"表情ID": 59,
|
|
||||||
"成功回收": {
|
|
||||||
"标题": " 成功回收",
|
|
||||||
"奖励提示":"奖励",
|
|
||||||
"单位": "个"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
{
|
|
||||||
"ProjectName": "宠物附魔",
|
|
||||||
"ProjectDescribe": "可以实现宠物附魔,需要登录器或dll支持!",
|
|
||||||
"ProjectAuthor": "七游云赞助",
|
|
||||||
"ProjectVersion": 1.0,
|
|
||||||
"ProjectConfig": "",
|
|
||||||
"ProjectFiles": [
|
|
||||||
"宠物附魔.nut"
|
|
||||||
],
|
|
||||||
"ProjectRunFunc": "_Dps_PetEnchantment_Main_"
|
|
||||||
}
|
|
||||||
|
|
@ -1,84 +0,0 @@
|
||||||
function _Dps_UpdateCreatureEnchantMysql_(card_id, charac_no, uuid) {
|
|
||||||
local sql = "select card from `taiwan_cain_2nd`.`creature_items_enchant` where ui_id = " + uuid + ";";
|
|
||||||
local column_type_list = ["int"];
|
|
||||||
local SqlObj = MysqlPool.GetInstance().GetConnect();
|
|
||||||
local result = SqlObj.Select(sql, column_type_list);
|
|
||||||
local UpdateSql = "update `taiwan_cain_2nd`.`creature_items_enchant` set `card` = " + card_id + " where `ui_id` = " + uuid + ";";
|
|
||||||
if (result.len() <= 0 || result[0].len() <= 0) {
|
|
||||||
UpdateSql = "INSERT INTO `taiwan_cain_2nd`.`creature_items_enchant`(`ui_id`, `charac_no`, `card`) VALUES (" + uuid + "," + charac_no + "," + card_id + ");";
|
|
||||||
}
|
|
||||||
SqlObj.Exec_Sql(UpdateSql);
|
|
||||||
MysqlPool.GetInstance().PutConnect(SqlObj);
|
|
||||||
}
|
|
||||||
|
|
||||||
function _Dps_GetCreatureEnchantMysql_(charac_no) {
|
|
||||||
local sql = "select ui_id,card from `taiwan_cain_2nd`.`creature_items_enchant` where charac_no = " + charac_no + ";";
|
|
||||||
local column_type_list = ["int", "int"];
|
|
||||||
local SqlObj = MysqlPool.GetInstance().GetConnect();
|
|
||||||
local result = SqlObj.Select(sql, column_type_list);
|
|
||||||
MysqlPool.GetInstance().PutConnect(SqlObj);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
function _Dps_PetEnchantment_Main_() {
|
|
||||||
//初始建表指令
|
|
||||||
local CreateSql = "CREATE TABLE `taiwan_cain_2nd`.`creature_items_enchant` (`ui_id` int(11) NOT NULL DEFAULT '0',`charac_no` int(11) DEFAULT NULL,`card` int(11) NOT NULL DEFAULT '0',PRIMARY KEY (`ui_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;";
|
|
||||||
local SqlObj = MysqlPool.GetInstance().GetConnect();
|
|
||||||
SqlObj.Exec_Sql(CreateSql);
|
|
||||||
MysqlPool.GetInstance().PutConnect(SqlObj);
|
|
||||||
//忽略宠物附魔错误
|
|
||||||
Sq_WriteByteArr(S_Ptr("0x850dede"), array(2, 0x90));
|
|
||||||
|
|
||||||
Cb_ExpertOnEnchantByBead_Leave_Func["宠物附魔"] <- function(args) {
|
|
||||||
if (args[5] > 56) {
|
|
||||||
local SUser = User(args[1]);
|
|
||||||
local InvenObj = SUser.GetInven();
|
|
||||||
local Bead_id = InvenObj.GetSlot(1, args[3]).GetIndex()
|
|
||||||
local PvfItemObj = PvfItem.GetPvfItemById(InvenObj.GetSlot(1, args[3]).GetIndex())
|
|
||||||
local Card_Id = Sq_CallFunc(S_Ptr("0x0849F530"), "int", ["pointer"], PvfItemObj.C_Object);
|
|
||||||
local a7 = args[5] - 57;
|
|
||||||
local ItemObj = InvenObj.GetSlot(3, a7)
|
|
||||||
local Item_Id = ItemObj.GetIndex();
|
|
||||||
NativePointer(ItemObj.C_Object).add(13).writeU32(Card_Id);
|
|
||||||
if (a7< 140) {
|
|
||||||
local uuid = NativePointer(ItemObj.C_Object).add(7).readInt();
|
|
||||||
_Dps_UpdateCreatureEnchantMysql_(Card_Id, SUser.GetCID(), uuid);
|
|
||||||
}
|
|
||||||
local Pack = Packet();
|
|
||||||
Pack.Put_Header(1, 275);
|
|
||||||
Pack.Put_Byte(1);
|
|
||||||
Pack.Finalize(true);
|
|
||||||
SUser.Send(Pack);
|
|
||||||
Pack.Delete();
|
|
||||||
SUser.SendUpdateItemList(1, 7, a7);
|
|
||||||
InvenObj.DeleteItemCount(Bead_id, 1);
|
|
||||||
SUser.SendUpdateItemList(1, 0, args[3]);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Cb_reach_game_world_Func["宠物附魔"] <- function(SUser) {
|
|
||||||
local Data = _Dps_GetCreatureEnchantMysql_(SUser.GetCID());
|
|
||||||
local DMap = {};
|
|
||||||
foreach(data_obj in Data) {
|
|
||||||
local uuid = data_obj[0];
|
|
||||||
local card_id = data_obj[1];
|
|
||||||
DMap.rawset(uuid, card_id);
|
|
||||||
}
|
|
||||||
local InvenObj = SUser.GetInven();
|
|
||||||
for (local i = 0; i< 141; i++) {
|
|
||||||
local equ;
|
|
||||||
if (i == 140) {
|
|
||||||
equ = InvenObj.GetSlot(0, 22); //获取当前格子的宠物
|
|
||||||
} else {
|
|
||||||
equ = InvenObj.GetSlot(3, i);
|
|
||||||
}
|
|
||||||
local equ_uuid = NativePointer(equ.C_Object).add(7).readInt();
|
|
||||||
if (DMap.rawin(equ_uuid)) {
|
|
||||||
NativePointer(equ.C_Object).add(13).writeU32(DMap[equ_uuid]);
|
|
||||||
if (i == 140) SUser.SendUpdateItemList(1, 0, 22);
|
|
||||||
else SUser.SendUpdateItemList(1, 7, i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
{
|
|
||||||
"ProjectName": "技能拓展14键",
|
|
||||||
"ProjectDescribe": "14键位技能的服务端修复程序,需要客户端已经加载了14键技能的插件。",
|
|
||||||
"ProjectAuthor": "倾泪寒",
|
|
||||||
"ProjectVersion": 1.0,
|
|
||||||
"ProjectConfig": "",
|
|
||||||
"ProjectFiles": [
|
|
||||||
"技能拓展14键.nut"
|
|
||||||
],
|
|
||||||
"ProjectRunFunc": "_Dps_SkillExpansion_14Keys_Main_"
|
|
||||||
}
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function _Dps_SkillExpansion_14Keys_Main_()
|
|
||||||
{
|
|
||||||
GameManager.Fix14Skill();
|
|
||||||
}
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
{
|
|
||||||
"ProjectName": "抗魔值进入副本",
|
|
||||||
"ProjectDescribe": "指定的副本按难度及抗魔值才能进入副本",
|
|
||||||
"ProjectAuthor": "南瓜",
|
|
||||||
"ProjectVersion": 1.0,
|
|
||||||
"ProjectConfig": "抗魔值进入副本配置_Nangua.json",
|
|
||||||
"ProjectFiles": [
|
|
||||||
"抗魔值进入副本.nut"
|
|
||||||
],
|
|
||||||
"ProjectRunFunc": "_Dps_anti_evilDgnBynangua_Main_"
|
|
||||||
}
|
|
||||||
|
|
@ -1,123 +0,0 @@
|
||||||
class _evilDgnBynangua {
|
|
||||||
function get_required_gradeBynangua(dgn_id, dgn_diff) {
|
|
||||||
local Config = GlobalConfig.Get("抗魔值进入副本配置_Nangua.json");
|
|
||||||
if (Config["抗魔值进入副本"]["副本配置"].rawin(dgn_id.tostring())) {
|
|
||||||
local requirements = Config["抗魔值进入副本"]["副本配置"][dgn_id.tostring()];
|
|
||||||
for (local i = 0; i < requirements.len(); i += 2) {
|
|
||||||
if (requirements[i] == dgn_diff) {
|
|
||||||
return requirements[i + 1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
function api_CDungeon_getDungeonName(dungeon_id) {
|
|
||||||
local G_CDataManager = Sq_CallFunc(S_Ptr("0x80CC19B"), "pointer", []);
|
|
||||||
local cdungeon = Sq_CallFunc(S_Ptr("0x835F9F8"), "pointer", ["pointer", "int"], G_CDataManager, dungeon_id);
|
|
||||||
if (!cdungeon) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (cdungeon) {
|
|
||||||
local dgnobj = Sq_CallFunc(S_Ptr("0x81455A6"), "pointer", ["pointer"], cdungeon);
|
|
||||||
local name = NativePointer(dgnobj).readUtf8String();
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
function join(array, delimiter) {
|
|
||||||
local result = "";
|
|
||||||
for (local i = 0; i < array.len(); ++i) {
|
|
||||||
if (i > 0) {
|
|
||||||
result += delimiter;
|
|
||||||
}
|
|
||||||
result += array[i];
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
getroottable()._Nangua_EquipmentData_List_ <- {};
|
|
||||||
getroottable()._Nangua_EquipmentData_Anti_ <- {};
|
|
||||||
function _Nangua_GetEquipmentData_Anti_(Equipment_id) {
|
|
||||||
try {
|
|
||||||
//如果数据存在 返回数据
|
|
||||||
if (getroottable()._Nangua_EquipmentData_Anti_.rawin(Equipment_id))return getroottable()._Nangua_EquipmentData_Anti_[Equipment_id];
|
|
||||||
//通过装备ID获取装备路径
|
|
||||||
local Path = getroottable()._Nangua_EquipmentData_List_[Equipment_id];
|
|
||||||
Path = "equipment/" + Path;
|
|
||||||
//读取装备数据
|
|
||||||
local Data = ScriptData.GetFileData(Path, function(DataTable, Data) {
|
|
||||||
while (!Data.Eof()) {
|
|
||||||
local Key = Data.Get();
|
|
||||||
if (Key == "[anti evil]") {
|
|
||||||
getroottable()._Nangua_EquipmentData_Anti_[Equipment_id] <- Data.Get();
|
|
||||||
return getroottable()._Nangua_EquipmentData_Anti_[Equipment_id];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} catch (exception){
|
|
||||||
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
function _Dps_anti_evilDgnBynangua_Main_() {
|
|
||||||
local Config = GlobalConfig.Get("抗魔值进入副本配置_Nangua.json");
|
|
||||||
Script(Config["PVF储存路径_没有更改的话不要改动此配置"]);
|
|
||||||
//if (Config["PVF储存路径_没有更改的话不要改动此配置"].len() > 0) Script(Config["PVF储存路径_没有更改的话不要改动此配置"]);
|
|
||||||
//else Script();
|
|
||||||
|
|
||||||
//读取装备列表
|
|
||||||
getroottable()._Nangua_EquipmentData_List_ = ScriptData.GetFileData("equipment/equipment.lst", function(DataTable, Data) {
|
|
||||||
while (!Data.Eof()) {
|
|
||||||
local Key = Data.Get();
|
|
||||||
//注册装备列表 路径写入 数据未读取
|
|
||||||
DataTable.rawset(Key, Data.Get());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Cb_SelectDungeon_Check_Error_Leave_Func.Check_anti_evilByNangua <- function(args) {
|
|
||||||
local Config = GlobalConfig.Get("抗魔值进入副本配置_Nangua.json");
|
|
||||||
local SUser = User(args[1]);
|
|
||||||
local msg_base = args[2];
|
|
||||||
local PartyObj = SUser.GetParty();
|
|
||||||
local dgn_id = NativePointer(msg_base).add(13).readU16(); // 获取副本ID
|
|
||||||
local dgn_diff = NativePointer(msg_base).add(15).readU8(); // 获取副本难度
|
|
||||||
local required_grade = _evilDgnBynangua.get_required_gradeBynangua(dgn_id, dgn_diff);
|
|
||||||
local diff_name = Config["副本难度命名"][(dgn_diff).tostring()];
|
|
||||||
local Dungeon_Name = _evilDgnBynangua.api_CDungeon_getDungeonName(dgn_id);
|
|
||||||
|
|
||||||
if (PartyObj && Config["抗魔值进入副本"]["抗魔值进入副本开关(true为开启,false为关闭)"]) {
|
|
||||||
local not_enough_users = [];
|
|
||||||
for (local i = 0; i < 4; ++i) {
|
|
||||||
local Tuser = PartyObj.GetUser(i);
|
|
||||||
if (Tuser) {
|
|
||||||
local total_grade = 0;
|
|
||||||
local InvenObj = Tuser.GetInven();
|
|
||||||
if (InvenObj) {
|
|
||||||
for (local j = 0; j <= 25; j++) {
|
|
||||||
local ItemObj = InvenObj.GetSlot(0, j);
|
|
||||||
if (!ItemObj.IsEmpty) {
|
|
||||||
local item_id = ItemObj.GetIndex();
|
|
||||||
print(item_id);
|
|
||||||
local Anti = _Nangua_GetEquipmentData_Anti_(item_id);
|
|
||||||
total_grade += Anti;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 比对抗魔值是否足够
|
|
||||||
if (total_grade < required_grade) {
|
|
||||||
not_enough_users.push(Tuser.GetCharacName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 处理未达到抗魔值要求的用户
|
|
||||||
if (not_enough_users.len() > 0) {
|
|
||||||
local joinedNames = _evilDgnBynangua.join(not_enough_users, ", ");
|
|
||||||
SUser.SendNotiBox("队伍中玩家[" + joinedNames + "] 抗魔值低于 " + required_grade + " ,无法进入 [" + Dungeon_Name + " - " + diff_name + "]", 2)
|
|
||||||
return 1; // 禁止进入副本
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
{
|
|
||||||
"ProjectName": "点券充值卡",
|
|
||||||
"ProjectDescribe": "根据道具ID充值对应的点券数量",
|
|
||||||
"ProjectAuthor": "南瓜",
|
|
||||||
"ProjectVersion": 1.0,
|
|
||||||
"ProjectConfig": "点券充值卡配置_Nangua.json",
|
|
||||||
"ProjectFiles": [
|
|
||||||
"点券充值卡.nut"
|
|
||||||
],
|
|
||||||
"ProjectRunFunc": "_Dps_handleCeraCard_Main_"
|
|
||||||
}
|
|
||||||
|
|
@ -1,68 +0,0 @@
|
||||||
CeraCardCoolT <- {};
|
|
||||||
|
|
||||||
function handleCeraCardBynangua(SUser, ItemId) {
|
|
||||||
local Config = GlobalConfig.Get("点券充值卡配置_Nangua.json");
|
|
||||||
local ItemIdStr = ItemId.tostring();
|
|
||||||
local UseCount = 0;
|
|
||||||
|
|
||||||
|
|
||||||
if (!CeraCardCoolT.rawin(SUser.GetUID())) {
|
|
||||||
CeraCardCoolT.rawset(SUser.GetUID(), 0);
|
|
||||||
} else {
|
|
||||||
UseCount = CeraCardCoolT.rawget(SUser.GetUID());
|
|
||||||
}
|
|
||||||
if (UseCount >= 30) {
|
|
||||||
if (Config["启用233发包(true/false)"]) {
|
|
||||||
SUser.SendNotiBox("点券充值卡已达到本日使用上限!", 1);
|
|
||||||
} else {
|
|
||||||
SUser.SendNotiPacketMessage("点券充值卡已达到本日使用上限!", 8);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Config["充值卡配置"].rawin(ItemIdStr)) {
|
|
||||||
local CeraAmount = Config["充值卡配置"][ItemIdStr];
|
|
||||||
SUser.RechargeCera(CeraAmount);
|
|
||||||
if (Config["启用233发包(true/false)"]) {
|
|
||||||
SUser.SendNotiBox(format(Config["充值成功提示"], CeraAmount), 1);
|
|
||||||
SUser.SendNotiBox(format("充值卡本日已使用次数%d / 30", UseCount + 1), 1);
|
|
||||||
} else {
|
|
||||||
SUser.SendNotiPacketMessage(format(Config["充值成功提示"], CeraAmount), 8);
|
|
||||||
SUser.SendNotiPacketMessage(format("充值卡本日已使用次数%d / 30", UseCount + 1), 8);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
CeraCardCoolT.rawset(SUser.GetUID(), UseCount + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
//加载入口
|
|
||||||
function _Dps_handleCeraCard_Main_() {
|
|
||||||
_Dps_handleCeraCard_Logic_();
|
|
||||||
|
|
||||||
|
|
||||||
Timer.SetCronTask(function() {
|
|
||||||
getroottable().CeraCardCoolT = {};
|
|
||||||
}, {
|
|
||||||
Cron = "0 0 6 * * *",
|
|
||||||
Name = "刷新点卷充值卡每日限额"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//重载入口
|
|
||||||
function _Dps_handleCeraCard_Main_Reload_(OldConfig) {
|
|
||||||
local Config = GlobalConfig.Get("点券充值卡配置_Nangua.json");
|
|
||||||
// 删除旧的注册
|
|
||||||
foreach(itemId, _ in OldConfig["充值卡配置"]) {
|
|
||||||
Cb_Use_Item_Sp_Func.rawdelete(itemId.tointeger());
|
|
||||||
}
|
|
||||||
//重新注册
|
|
||||||
_Dps_handleCeraCard_Logic_();
|
|
||||||
}
|
|
||||||
|
|
||||||
function _Dps_handleCeraCard_Logic_() {
|
|
||||||
local Config = GlobalConfig.Get("点券充值卡配置_Nangua.json");
|
|
||||||
// 注册所有充值卡
|
|
||||||
foreach(itemId, _ in Config["充值卡配置"]) {
|
|
||||||
Cb_Use_Item_Sp_Func[itemId.tointeger()] <- handleCeraCardBynangua;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Loading…
Reference in New Issue