koishi-plugin-ggcevo-game 1.4.26 → 1.4.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/boss/boss.d.ts +18 -0
- package/lib/boss/passive.d.ts +55 -3
- package/lib/boss/passivehandler.d.ts +46 -2
- package/lib/index.js +586 -65
- package/package.json +1 -1
package/lib/boss/boss.d.ts
CHANGED
|
@@ -164,4 +164,22 @@ export declare const bossPool: readonly [{
|
|
|
164
164
|
tags: ("生物" | "异形")[];
|
|
165
165
|
passive: ("弱化形态" | "猎手异形" | "狂暴" | "伪装")[];
|
|
166
166
|
}[];
|
|
167
|
+
}, {
|
|
168
|
+
main: {
|
|
169
|
+
id: number;
|
|
170
|
+
name: string;
|
|
171
|
+
type: "主宰";
|
|
172
|
+
maxHP: number;
|
|
173
|
+
energy: number;
|
|
174
|
+
tags: ("重甲" | "护盾" | "生物" | "灵能" | "异形")[];
|
|
175
|
+
passive: ("星界之风" | "宇宙能量" | "复苏" | "光影之刃" | "远古预兆" | "闪电冲锋" | "超视距穿梭")[];
|
|
176
|
+
};
|
|
177
|
+
minions: {
|
|
178
|
+
name: string;
|
|
179
|
+
type: "子代";
|
|
180
|
+
maxHP: number;
|
|
181
|
+
energy: number;
|
|
182
|
+
tags: ("重甲" | "护盾" | "生物" | "灵能" | "异形")[];
|
|
183
|
+
passive: ("弱化形态" | "星界之风" | "心灵狂热")[];
|
|
184
|
+
}[];
|
|
167
185
|
}];
|
package/lib/boss/passive.d.ts
CHANGED
|
@@ -97,11 +97,11 @@ export declare const passiveConfig: {
|
|
|
97
97
|
};
|
|
98
98
|
readonly 能源虹吸: {
|
|
99
99
|
readonly effect: 0;
|
|
100
|
-
readonly description: "
|
|
100
|
+
readonly description: "当“能量”≥80%的时候,受到的伤害-50%; 当“能量”≥50%的时候,受到的伤害-30%";
|
|
101
101
|
};
|
|
102
102
|
readonly 电能立场: {
|
|
103
103
|
readonly effect: 0;
|
|
104
|
-
readonly description: "当“能量”≥
|
|
104
|
+
readonly description: "当“能量”≥30%的时候,每次受到攻击有55%的概率免疫此次伤害(无法免疫寒冷伤害); 每拥有一层“寒冷”则降低5%的概率";
|
|
105
105
|
};
|
|
106
106
|
readonly 电能冲击波: {
|
|
107
107
|
readonly effect: 0;
|
|
@@ -109,7 +109,7 @@ export declare const passiveConfig: {
|
|
|
109
109
|
};
|
|
110
110
|
readonly 脉冲: {
|
|
111
111
|
readonly effect: 0;
|
|
112
|
-
readonly description: "当“能量”≥
|
|
112
|
+
readonly description: "当“能量”≥30%的时候,每次受到攻击有60%的概率回复所有存活的异形100点血量; 每拥有一层“寒冷”则降低5%的概率";
|
|
113
113
|
};
|
|
114
114
|
readonly 能量黑洞: {
|
|
115
115
|
readonly effect: -0.2;
|
|
@@ -163,4 +163,56 @@ export declare const passiveConfig: {
|
|
|
163
163
|
readonly effect: 0;
|
|
164
164
|
readonly description: "受到伤害时,有5%的概率免疫此次伤害";
|
|
165
165
|
};
|
|
166
|
+
readonly 星界之风: {
|
|
167
|
+
readonly effect: 0;
|
|
168
|
+
readonly description: "受到伤害时,有5%的概率回复所有存活异形200点血量";
|
|
169
|
+
};
|
|
170
|
+
readonly 心灵狂热: {
|
|
171
|
+
readonly effect: 0;
|
|
172
|
+
readonly description: "当血量低于50%时,进入心灵狂热状态,受到的伤害-20%,并且触发“星界之风”技能的概率翻倍";
|
|
173
|
+
};
|
|
174
|
+
readonly 宇宙能量: {
|
|
175
|
+
readonly effect: 0;
|
|
176
|
+
readonly description: "受到攻击时回复与该攻击伤害等额的“能量”; 若“能量”已满,则回复与该攻击伤害等额的血量";
|
|
177
|
+
};
|
|
178
|
+
readonly 复苏: {
|
|
179
|
+
readonly effect: 0;
|
|
180
|
+
readonly description: "受到致命伤害时,免于死亡,快速回复自身100%的最大生命值和100%的“能量”,并且获得“灵能构造炉”技能(触发后移除)";
|
|
181
|
+
};
|
|
182
|
+
readonly 光影之刃: {
|
|
183
|
+
readonly effect: 0;
|
|
184
|
+
readonly description: "受到伤害后,获得一层“光影之刃”";
|
|
185
|
+
};
|
|
186
|
+
readonly 远古预兆: {
|
|
187
|
+
readonly effect: 0;
|
|
188
|
+
readonly description: "受到伤害时,有1%的概率免疫此次伤害并且回复100点“能量”";
|
|
189
|
+
};
|
|
190
|
+
readonly 闪电冲锋: {
|
|
191
|
+
readonly effect: 0;
|
|
192
|
+
readonly description: "每层“光影之刃”使触发“星界之风”,“远古预兆”和“灵能构造炉”技能的概率+1%";
|
|
193
|
+
};
|
|
194
|
+
readonly 超视距穿梭: {
|
|
195
|
+
readonly effect: 0;
|
|
196
|
+
readonly description: "当“能量”≥30%时,每层“光影之刃”使受到的伤害-5%; 当“能量”≥60%时,每层“光影之刃”使受到的伤害-10%; 当“能量”≤10%时,每层“光影之刃”使受到的伤害+5%";
|
|
197
|
+
};
|
|
198
|
+
readonly 灵能构造炉: {
|
|
199
|
+
readonly effect: 0;
|
|
200
|
+
readonly description: "受到攻击后,有5%的概率会随机获得以下4个技能之一(天启超载护盾,塌缩脉冲,地毯式轰炸,轰炸引导)";
|
|
201
|
+
};
|
|
202
|
+
readonly 天启超载护盾: {
|
|
203
|
+
readonly effect: 0;
|
|
204
|
+
readonly description: "受到伤害后,有10%的概率回复所有存活异形X点血量(X为“光影之刃”层数 x 50)";
|
|
205
|
+
};
|
|
206
|
+
readonly 塌缩脉冲: {
|
|
207
|
+
readonly effect: 0;
|
|
208
|
+
readonly description: "受到伤害后,额外获得一层“光影之刃”";
|
|
209
|
+
};
|
|
210
|
+
readonly 地毯式轰炸: {
|
|
211
|
+
readonly effect: 0;
|
|
212
|
+
readonly description: "我心中的怒火胜过千万个太阳!移除自身的“孤立无援”,并使受到的伤害-50%";
|
|
213
|
+
};
|
|
214
|
+
readonly 轰炸引导: {
|
|
215
|
+
readonly effect: 0;
|
|
216
|
+
readonly description: "受到伤害后,有10%的概率概率回复自身X点“能量”(X为“光影之刃”层数 x 100)";
|
|
217
|
+
};
|
|
166
218
|
};
|
|
@@ -38,7 +38,7 @@ export declare const PassiveHandler: {
|
|
|
38
38
|
messages: string[];
|
|
39
39
|
skillUpdates: {
|
|
40
40
|
name: any;
|
|
41
|
-
remove: ("
|
|
41
|
+
remove: ("弱化形态" | "异形甲壳" | "孤立无援" | "冰霜回复" | "冰霜进化" | "冰霜环绕" | "寒霜地狱" | "应激甲壳I" | "应激甲壳II" | "求生本能I" | "求生本能II" | "冷适应" | "感染空间站" | "病毒云" | "霉菌滋生" | "岗哨机枪" | "结构装甲" | "吸血唾液" | "进食" | "嗜血狂暴" | "吐血" | "电能导体" | "超导体" | "能量虹吸" | "能源虹吸" | "电能立场" | "电能冲击波" | "脉冲" | "能量黑洞" | "火焰异形" | "庞兽狂暴" | "灼烧粘液" | "腐蚀胆汁" | "火焰吐息" | "太阳耀斑" | "燃烧潜地" | "炼狱爆弹" | "猎手异形" | "狂暴" | "伪装" | "致命一击" | "星界之风" | "心灵狂热" | "宇宙能量" | "复苏" | "光影之刃" | "远古预兆" | "闪电冲锋" | "超视距穿梭" | "灵能构造炉" | "天启超载护盾" | "塌缩脉冲" | "地毯式轰炸" | "轰炸引导")[];
|
|
42
42
|
}[];
|
|
43
43
|
};
|
|
44
44
|
handleInfectedStation: (ctx: Context, targetBoss: any) => Promise<{
|
|
@@ -56,7 +56,8 @@ export declare const PassiveHandler: {
|
|
|
56
56
|
messages: string[];
|
|
57
57
|
};
|
|
58
58
|
handleBloodEffects: (targetBoss: any, currentHP: number, maxHP: number) => {
|
|
59
|
-
|
|
59
|
+
buffAmount: number;
|
|
60
|
+
nerfAmount: number;
|
|
60
61
|
messages: string[];
|
|
61
62
|
};
|
|
62
63
|
handleBloodCount: (ctx: Context, targetBoss: any, currentHP: number, maxHP: number) => Promise<{
|
|
@@ -181,6 +182,49 @@ export declare const PassiveHandler: {
|
|
|
181
182
|
handlePulseDisruptor: (ctx: Context, targetBoss: any, weaponName: string) => Promise<{
|
|
182
183
|
messages: string[];
|
|
183
184
|
}>;
|
|
185
|
+
handleStellarWind: (ctx: Context, targetBoss: any, initialDamage: number, maxHP: number, activeBosses: any[], bossGroup: BossPoolItem) => Promise<{
|
|
186
|
+
messages: string[];
|
|
187
|
+
}>;
|
|
188
|
+
handlePsychicFrenzy: (targetBoss: any, currentHP: number, maxHP: number) => {
|
|
189
|
+
damageMultiplier: number;
|
|
190
|
+
messages: string[];
|
|
191
|
+
};
|
|
192
|
+
handleCosmicEnergy: (ctx: Context, targetBoss: any, initialDamage: number, bossGroup: any) => Promise<{
|
|
193
|
+
messages: string[];
|
|
194
|
+
healAmount: number;
|
|
195
|
+
}>;
|
|
196
|
+
handleLightblade: (ctx: Context, targetBoss: any) => Promise<{
|
|
197
|
+
messages: string[];
|
|
198
|
+
}>;
|
|
199
|
+
handleAncientOmen: (ctx: Context, targetBoss: any) => Promise<{
|
|
200
|
+
immune: boolean;
|
|
201
|
+
messages: string[];
|
|
202
|
+
}>;
|
|
203
|
+
handleHyperspaceSkip: (targetBoss: any) => {
|
|
204
|
+
reduction: number;
|
|
205
|
+
increase: number;
|
|
206
|
+
messages: string[];
|
|
207
|
+
};
|
|
208
|
+
handleRevival: (ctx: Context, targetBoss: any, currentHP: number, maxHP: number) => Promise<{
|
|
209
|
+
updatedHP: number;
|
|
210
|
+
messages: string[];
|
|
211
|
+
}>;
|
|
212
|
+
handleConstructor: (ctx: Context, targetBoss: any) => Promise<{
|
|
213
|
+
messages: string[];
|
|
214
|
+
}>;
|
|
215
|
+
handleTyrsShield: (ctx: Context, targetBoss: any, activeBosses: any[], bossGroup: BossPoolItem) => Promise<{
|
|
216
|
+
messages: string[];
|
|
217
|
+
}>;
|
|
218
|
+
handleCollapsePulse: (ctx: Context, targetBoss: any) => Promise<{
|
|
219
|
+
messages: string[];
|
|
220
|
+
}>;
|
|
221
|
+
handleCarpetBombing: (ctx: Context, targetBoss: any) => Promise<{
|
|
222
|
+
messages: string[];
|
|
223
|
+
damageMultiplier: number;
|
|
224
|
+
}>;
|
|
225
|
+
handleBombardmentGuidance: (ctx: Context, targetBoss: any) => Promise<{
|
|
226
|
+
messages: string[];
|
|
227
|
+
}>;
|
|
184
228
|
handlePassives: (ctx: Context, handle: string, targetBoss: any, initialDamage: number, currentHP: number, maxHP: number, weaponName: string, weaponData: any, bossGroup: any) => Promise<{
|
|
185
229
|
currentHP: any;
|
|
186
230
|
messages: any;
|
package/lib/index.js
CHANGED
|
@@ -437,7 +437,7 @@ var SyndicatedItems = {
|
|
|
437
437
|
price: 75,
|
|
438
438
|
redCrystalCost: 0,
|
|
439
439
|
condition: "目标无建筑标签和重型标签",
|
|
440
|
-
effects: "
|
|
440
|
+
effects: "使目标的技能层数减少10层"
|
|
441
441
|
},
|
|
442
442
|
"CRED-17": {
|
|
443
443
|
id: 3,
|
|
@@ -1231,6 +1231,27 @@ var bossPool = [
|
|
|
1231
1231
|
passive: asPassives(["弱化形态", "猎手异形", "狂暴", "伪装"])
|
|
1232
1232
|
}
|
|
1233
1233
|
]
|
|
1234
|
+
}),
|
|
1235
|
+
defineBoss({
|
|
1236
|
+
main: {
|
|
1237
|
+
id: 9,
|
|
1238
|
+
name: "宇宙界主",
|
|
1239
|
+
type: "主宰",
|
|
1240
|
+
maxHP: 2e4,
|
|
1241
|
+
energy: 1e3,
|
|
1242
|
+
tags: asBossTags(["重甲", "护盾", "生物", "灵能", "异形"]),
|
|
1243
|
+
passive: asPassives(["宇宙能量", "复苏", "光影之刃", "闪电冲锋", "远古预兆", "星界之风", "超视距穿梭"])
|
|
1244
|
+
},
|
|
1245
|
+
minions: [
|
|
1246
|
+
{
|
|
1247
|
+
name: "宇宙战将",
|
|
1248
|
+
type: "子代",
|
|
1249
|
+
maxHP: 5e3,
|
|
1250
|
+
energy: 0,
|
|
1251
|
+
tags: asBossTags(["重甲", "护盾", "生物", "灵能", "异形"]),
|
|
1252
|
+
passive: asPassives(["弱化形态", "心灵狂热", "星界之风"])
|
|
1253
|
+
}
|
|
1254
|
+
]
|
|
1234
1255
|
})
|
|
1235
1256
|
];
|
|
1236
1257
|
|
|
@@ -1334,11 +1355,11 @@ var passiveConfig = {
|
|
|
1334
1355
|
},
|
|
1335
1356
|
"能源虹吸": {
|
|
1336
1357
|
effect: 0,
|
|
1337
|
-
description: "
|
|
1358
|
+
description: "当“能量”≥80%的时候,受到的伤害-50%; 当“能量”≥50%的时候,受到的伤害-30%"
|
|
1338
1359
|
},
|
|
1339
1360
|
"电能立场": {
|
|
1340
1361
|
effect: 0,
|
|
1341
|
-
description: "当“能量”≥
|
|
1362
|
+
description: "当“能量”≥30%的时候,每次受到攻击有55%的概率免疫此次伤害(无法免疫寒冷伤害); 每拥有一层“寒冷”则降低5%的概率"
|
|
1342
1363
|
},
|
|
1343
1364
|
"电能冲击波": {
|
|
1344
1365
|
effect: 0,
|
|
@@ -1346,7 +1367,7 @@ var passiveConfig = {
|
|
|
1346
1367
|
},
|
|
1347
1368
|
"脉冲": {
|
|
1348
1369
|
effect: 0,
|
|
1349
|
-
description: "当“能量”≥
|
|
1370
|
+
description: "当“能量”≥30%的时候,每次受到攻击有60%的概率回复所有存活的异形100点血量; 每拥有一层“寒冷”则降低5%的概率"
|
|
1350
1371
|
},
|
|
1351
1372
|
"能量黑洞": {
|
|
1352
1373
|
effect: -0.2,
|
|
@@ -1399,6 +1420,58 @@ var passiveConfig = {
|
|
|
1399
1420
|
"致命一击": {
|
|
1400
1421
|
effect: 0,
|
|
1401
1422
|
description: "受到伤害时,有5%的概率免疫此次伤害"
|
|
1423
|
+
},
|
|
1424
|
+
"星界之风": {
|
|
1425
|
+
effect: 0,
|
|
1426
|
+
description: "受到伤害时,有5%的概率回复所有存活异形200点血量"
|
|
1427
|
+
},
|
|
1428
|
+
"心灵狂热": {
|
|
1429
|
+
effect: 0,
|
|
1430
|
+
description: "当血量低于50%时,进入心灵狂热状态,受到的伤害-20%,并且触发“星界之风”技能的概率翻倍"
|
|
1431
|
+
},
|
|
1432
|
+
"宇宙能量": {
|
|
1433
|
+
effect: 0,
|
|
1434
|
+
description: "受到攻击时回复与该攻击伤害等额的“能量”; 若“能量”已满,则回复与该攻击伤害等额的血量"
|
|
1435
|
+
},
|
|
1436
|
+
"复苏": {
|
|
1437
|
+
effect: 0,
|
|
1438
|
+
description: "受到致命伤害时,免于死亡,快速回复自身100%的最大生命值和100%的“能量”,并且获得“灵能构造炉”技能(触发后移除)"
|
|
1439
|
+
},
|
|
1440
|
+
"光影之刃": {
|
|
1441
|
+
effect: 0,
|
|
1442
|
+
description: "受到伤害后,获得一层“光影之刃”"
|
|
1443
|
+
},
|
|
1444
|
+
"远古预兆": {
|
|
1445
|
+
effect: 0,
|
|
1446
|
+
description: "受到伤害时,有1%的概率免疫此次伤害并且回复100点“能量”"
|
|
1447
|
+
},
|
|
1448
|
+
"闪电冲锋": {
|
|
1449
|
+
effect: 0,
|
|
1450
|
+
description: "每层“光影之刃”使触发“星界之风”,“远古预兆”和“灵能构造炉”技能的概率+1%"
|
|
1451
|
+
},
|
|
1452
|
+
"超视距穿梭": {
|
|
1453
|
+
effect: 0,
|
|
1454
|
+
description: "当“能量”≥30%时,每层“光影之刃”使受到的伤害-5%; 当“能量”≥60%时,每层“光影之刃”使受到的伤害-10%; 当“能量”≤10%时,每层“光影之刃”使受到的伤害+5%"
|
|
1455
|
+
},
|
|
1456
|
+
"灵能构造炉": {
|
|
1457
|
+
effect: 0,
|
|
1458
|
+
description: "受到攻击后,有5%的概率会随机获得以下4个技能之一(天启超载护盾,塌缩脉冲,地毯式轰炸,轰炸引导)"
|
|
1459
|
+
},
|
|
1460
|
+
"天启超载护盾": {
|
|
1461
|
+
effect: 0,
|
|
1462
|
+
description: "受到伤害后,有10%的概率回复所有存活异形X点血量(X为“光影之刃”层数 x 50)"
|
|
1463
|
+
},
|
|
1464
|
+
"塌缩脉冲": {
|
|
1465
|
+
effect: 0,
|
|
1466
|
+
description: "受到伤害后,额外获得一层“光影之刃”"
|
|
1467
|
+
},
|
|
1468
|
+
"地毯式轰炸": {
|
|
1469
|
+
effect: 0,
|
|
1470
|
+
description: "我心中的怒火胜过千万个太阳!移除自身的“孤立无援”,并使受到的伤害-50%"
|
|
1471
|
+
},
|
|
1472
|
+
"轰炸引导": {
|
|
1473
|
+
effect: 0,
|
|
1474
|
+
description: "受到伤害后,有10%的概率概率回复自身X点“能量”(X为“光影之刃”层数 x 100)"
|
|
1402
1475
|
}
|
|
1403
1476
|
};
|
|
1404
1477
|
|
|
@@ -1570,28 +1643,28 @@ async function calculateCareerAdditive(ctx, handle, weaponType, weaponId) {
|
|
|
1570
1643
|
let message = "";
|
|
1571
1644
|
if (careerData?.career === "警卫长") {
|
|
1572
1645
|
value += 0.05;
|
|
1573
|
-
message = "⚔️
|
|
1646
|
+
message = "⚔️ 警卫长职业:攻击伤害+5%";
|
|
1574
1647
|
}
|
|
1575
1648
|
if (careerData?.career === "武器中士") {
|
|
1576
1649
|
value += 0.15;
|
|
1577
|
-
message = "⚔️
|
|
1650
|
+
message = "⚔️ 武器中士职业:攻击伤害+15%";
|
|
1578
1651
|
}
|
|
1579
1652
|
if (careerData?.career === "能量武器专家") {
|
|
1580
1653
|
if (weaponType === "能量武器") {
|
|
1581
1654
|
value += 0.2;
|
|
1582
|
-
message = "⚔️
|
|
1655
|
+
message = "⚔️ 能量武器专家职业:能量武器攻击伤害+20%";
|
|
1583
1656
|
}
|
|
1584
1657
|
}
|
|
1585
1658
|
if (careerData?.career === "纵火狂") {
|
|
1586
1659
|
if (weaponType === "热能武器") {
|
|
1587
1660
|
value += 0.2;
|
|
1588
|
-
message = "⚔️
|
|
1661
|
+
message = "⚔️ 纵火狂职业:热能武器攻击伤害+20%";
|
|
1589
1662
|
}
|
|
1590
1663
|
}
|
|
1591
1664
|
if (careerData?.career === "猩红杀手") {
|
|
1592
1665
|
if (weaponId === 7) {
|
|
1593
1666
|
value += 0.15;
|
|
1594
|
-
message = "⚔️
|
|
1667
|
+
message = "⚔️ 猩红杀手职业:侦察步枪攻击伤害+15%";
|
|
1595
1668
|
}
|
|
1596
1669
|
}
|
|
1597
1670
|
return { value, message };
|
|
@@ -1608,7 +1681,7 @@ async function calculateWishAdditive(ctx, handle, weapon) {
|
|
|
1608
1681
|
});
|
|
1609
1682
|
if (sovereign) {
|
|
1610
1683
|
value += 0.1;
|
|
1611
|
-
messages.push("👑
|
|
1684
|
+
messages.push("👑 王权增幅祈愿:攻击伤害+10%");
|
|
1612
1685
|
}
|
|
1613
1686
|
const [lament] = await ctx.database.get("ggcevo_Wish_Record", {
|
|
1614
1687
|
handle,
|
|
@@ -1619,7 +1692,7 @@ async function calculateWishAdditive(ctx, handle, weapon) {
|
|
|
1619
1692
|
if (lament) {
|
|
1620
1693
|
const levelBonus = 0.1 * (weapon.level + 1);
|
|
1621
1694
|
value += levelBonus;
|
|
1622
|
-
messages.push(`🗡️
|
|
1695
|
+
messages.push(`🗡️ 悲鸣之锋祈愿:攻击伤害+${Math.round(levelBonus * 100)}%`);
|
|
1623
1696
|
}
|
|
1624
1697
|
const [critRhythm] = await ctx.database.get("ggcevo_Wish_Record", {
|
|
1625
1698
|
handle,
|
|
@@ -1628,7 +1701,7 @@ async function calculateWishAdditive(ctx, handle, weapon) {
|
|
|
1628
1701
|
endTime: { $gte: /* @__PURE__ */ new Date() }
|
|
1629
1702
|
});
|
|
1630
1703
|
if (critRhythm) {
|
|
1631
|
-
messages.push("🎵
|
|
1704
|
+
messages.push("🎵 暴击韵律祈愿:攻击暴击率+20%");
|
|
1632
1705
|
}
|
|
1633
1706
|
return {
|
|
1634
1707
|
value,
|
|
@@ -1920,18 +1993,33 @@ async function applyItemEffect(ctx, session, handle, itemConfig2, target) {
|
|
|
1920
1993
|
name: target,
|
|
1921
1994
|
isActive: true
|
|
1922
1995
|
});
|
|
1923
|
-
if (!targetboss
|
|
1996
|
+
if (!targetboss) return {
|
|
1924
1997
|
success: false,
|
|
1925
|
-
message: "
|
|
1998
|
+
message: "无法找到指定的目标。"
|
|
1926
1999
|
};
|
|
2000
|
+
if (targetboss.tags.includes("建筑") || targetboss.tags.includes("重型")) {
|
|
2001
|
+
return {
|
|
2002
|
+
success: false,
|
|
2003
|
+
message: `目标${target}拥有"${targetboss.tags.includes("建筑") ? "建筑" : "重型"}"标签,无法使用此物品。`
|
|
2004
|
+
};
|
|
2005
|
+
}
|
|
2006
|
+
const currentCount = targetboss.Skillcountpoints || 0;
|
|
2007
|
+
if (currentCount <= 0) {
|
|
2008
|
+
return {
|
|
2009
|
+
success: false,
|
|
2010
|
+
message: `目标${target}的技能层数已为0,无需使用此物品。`
|
|
2011
|
+
};
|
|
2012
|
+
}
|
|
2013
|
+
const newCount = Math.max(0, currentCount - 10);
|
|
2014
|
+
const reducedAmount = currentCount - newCount;
|
|
1927
2015
|
await ctx.database.set(
|
|
1928
2016
|
"ggcevo_boss",
|
|
1929
2017
|
{ name: target },
|
|
1930
|
-
{ Skillcountpoints:
|
|
2018
|
+
{ Skillcountpoints: newCount }
|
|
1931
2019
|
);
|
|
1932
2020
|
return {
|
|
1933
2021
|
success: true,
|
|
1934
|
-
message: `成功使用${itemName}
|
|
2022
|
+
message: `成功使用${itemName},使${target}的技能层数减少${reducedAmount}层(当前:${newCount}层)。`
|
|
1935
2023
|
};
|
|
1936
2024
|
}
|
|
1937
2025
|
if (itemConfig2.id === 3 || itemConfig2.id === 5) {
|
|
@@ -1951,7 +2039,7 @@ async function applyItemEffect(ctx, session, handle, itemConfig2, target) {
|
|
|
1951
2039
|
});
|
|
1952
2040
|
if (!targetboss || targetboss?.energy === 0) return {
|
|
1953
2041
|
success: false,
|
|
1954
|
-
message: "
|
|
2042
|
+
message: "您无法对没有能量的目标使用。"
|
|
1955
2043
|
};
|
|
1956
2044
|
await ctx.database.set(
|
|
1957
2045
|
"ggcevo_boss",
|
|
@@ -2539,28 +2627,36 @@ var PassiveHandler = {
|
|
|
2539
2627
|
messages: [`🛡️ 【结构装甲】生效:${msg}`]
|
|
2540
2628
|
};
|
|
2541
2629
|
}, "handleStructuralArmor"),
|
|
2542
|
-
//
|
|
2630
|
+
// 修改 handleBloodEffects 函数
|
|
2543
2631
|
handleBloodEffects: /* @__PURE__ */ __name(function(targetBoss, currentHP, maxHP) {
|
|
2544
2632
|
if (!targetBoss.skills.includes("吸血唾液")) return null;
|
|
2545
2633
|
const bloodStacks = targetBoss.Skillcountpoints || 0;
|
|
2546
|
-
let
|
|
2634
|
+
let buffAmount = 0;
|
|
2635
|
+
let nerfAmount = 0;
|
|
2547
2636
|
const messages = [];
|
|
2548
|
-
if (
|
|
2637
|
+
if (bloodStacks > 0) {
|
|
2549
2638
|
const reduction = bloodStacks * 0.05;
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
messages.push(`🩸 【吸血唾液】生效:受到的伤害-${bloodStacks * 5}%`);
|
|
2553
|
-
}
|
|
2639
|
+
nerfAmount += reduction;
|
|
2640
|
+
messages.push(`🩸 【吸血唾液】生效:受到的伤害-${(reduction * 100).toFixed(0)}%`);
|
|
2554
2641
|
}
|
|
2555
2642
|
if (targetBoss.skills.includes("嗜血狂暴") && currentHP / maxHP < 0.5) {
|
|
2556
|
-
|
|
2643
|
+
nerfAmount += 0.2;
|
|
2557
2644
|
messages.push(`🔥 【嗜血狂暴】生效:进入狂暴状态,受到的伤害-20%`);
|
|
2558
2645
|
}
|
|
2559
2646
|
if (targetBoss.skills.includes("吐血") && bloodStacks < 1) {
|
|
2560
|
-
|
|
2561
|
-
messages.push(`💔
|
|
2647
|
+
buffAmount += 0.2;
|
|
2648
|
+
messages.push(`💔 【吐血】生效:无"吸血"层数,受到的伤害+20%`);
|
|
2562
2649
|
}
|
|
2563
|
-
|
|
2650
|
+
if (buffAmount > 0 || nerfAmount > 0) {
|
|
2651
|
+
return {
|
|
2652
|
+
buffAmount,
|
|
2653
|
+
// 正值增伤系数
|
|
2654
|
+
nerfAmount,
|
|
2655
|
+
// 正值减伤系数
|
|
2656
|
+
messages
|
|
2657
|
+
};
|
|
2658
|
+
}
|
|
2659
|
+
return null;
|
|
2564
2660
|
}, "handleBloodEffects"),
|
|
2565
2661
|
handleBloodCount: /* @__PURE__ */ __name(async function(ctx, targetBoss, currentHP, maxHP) {
|
|
2566
2662
|
if (!targetBoss.skills.includes("吸血唾液")) {
|
|
@@ -2606,7 +2702,7 @@ var PassiveHandler = {
|
|
|
2606
2702
|
{ name: targetBoss.name },
|
|
2607
2703
|
{ Vulnerability: newLayers }
|
|
2608
2704
|
);
|
|
2609
|
-
messages.push(`☢️ ${targetBoss.name}获得1
|
|
2705
|
+
messages.push(`☢️ ${targetBoss.name}获得1层“辐射”`);
|
|
2610
2706
|
radiationApplied = true;
|
|
2611
2707
|
return {
|
|
2612
2708
|
messages,
|
|
@@ -2621,7 +2717,7 @@ var PassiveHandler = {
|
|
|
2621
2717
|
const damageIncrease = effectiveLayers * 2.5;
|
|
2622
2718
|
const maxIncrease = 50;
|
|
2623
2719
|
const messages = [];
|
|
2624
|
-
let statusMsg = `☢️ 【辐射】生效:当前${radiationLayers}
|
|
2720
|
+
let statusMsg = `☢️ 【辐射】生效:当前${radiationLayers}层“辐射”`;
|
|
2625
2721
|
statusMsg += `,受到的伤害+${damageIncrease}%`;
|
|
2626
2722
|
if (damageIncrease >= maxIncrease) {
|
|
2627
2723
|
statusMsg += ``;
|
|
@@ -2647,7 +2743,7 @@ var PassiveHandler = {
|
|
|
2647
2743
|
{ name: targetBoss.name },
|
|
2648
2744
|
{ freezing: newFreezing }
|
|
2649
2745
|
);
|
|
2650
|
-
messages.push(`❄️ ${targetBoss.name} 获得1
|
|
2746
|
+
messages.push(`❄️ ${targetBoss.name} 获得1层“寒冷”`);
|
|
2651
2747
|
freezing = true;
|
|
2652
2748
|
return {
|
|
2653
2749
|
messages,
|
|
@@ -2662,7 +2758,7 @@ var PassiveHandler = {
|
|
|
2662
2758
|
const damageIncrease = effectiveLayers * 2.5;
|
|
2663
2759
|
const maxIncrease = 50;
|
|
2664
2760
|
const messages = [];
|
|
2665
|
-
let statusMsg = `❄️ 【寒冷】生效:当前${freezingLayers}
|
|
2761
|
+
let statusMsg = `❄️ 【寒冷】生效:当前${freezingLayers}层“寒冷”`;
|
|
2666
2762
|
statusMsg += `,受到的伤害+${damageIncrease}%`;
|
|
2667
2763
|
if (damageIncrease >= maxIncrease) {
|
|
2668
2764
|
statusMsg += ``;
|
|
@@ -2761,7 +2857,7 @@ var PassiveHandler = {
|
|
|
2761
2857
|
const currentFreezing = targetBoss.freezing || 0;
|
|
2762
2858
|
let immuneChance = 55 - currentFreezing * 5;
|
|
2763
2859
|
immuneChance = Math.max(immuneChance, 5);
|
|
2764
|
-
if (currentEnergy <
|
|
2860
|
+
if (currentEnergy < 300) {
|
|
2765
2861
|
return null;
|
|
2766
2862
|
}
|
|
2767
2863
|
const roll = Math.random() * 100;
|
|
@@ -2789,7 +2885,7 @@ var PassiveHandler = {
|
|
|
2789
2885
|
const currentEnergy = targetBoss.energy || 0;
|
|
2790
2886
|
const currentFreezing = targetBoss.freezing || 0;
|
|
2791
2887
|
const maxEnergy = 1e3;
|
|
2792
|
-
if (currentEnergy < maxEnergy * 0.
|
|
2888
|
+
if (currentEnergy < maxEnergy * 0.3) {
|
|
2793
2889
|
return null;
|
|
2794
2890
|
}
|
|
2795
2891
|
let triggerChance = 60 - currentFreezing * 5;
|
|
@@ -3288,10 +3384,352 @@ var PassiveHandler = {
|
|
|
3288
3384
|
targetBoss.Skillcountpoints = newCount;
|
|
3289
3385
|
return {
|
|
3290
3386
|
messages: [
|
|
3291
|
-
`⚡
|
|
3387
|
+
`⚡ 【脉冲扰乱枪】武器效果:使${targetBoss.name}的技能层数减少2层(当前${newCount}层)`
|
|
3292
3388
|
]
|
|
3293
3389
|
};
|
|
3294
3390
|
}, "handlePulseDisruptor"),
|
|
3391
|
+
// === 星界之风 ===
|
|
3392
|
+
handleStellarWind: /* @__PURE__ */ __name(async (ctx, targetBoss, initialDamage, maxHP, activeBosses, bossGroup) => {
|
|
3393
|
+
if (!targetBoss.skills.includes("星界之风") || initialDamage === 0) return null;
|
|
3394
|
+
let baseChance = 5;
|
|
3395
|
+
const hasPsychicFrenzy = targetBoss.skills.includes("心灵狂热");
|
|
3396
|
+
const isInFrenzy = targetBoss.HP / maxHP < 0.5;
|
|
3397
|
+
if (hasPsychicFrenzy && isInFrenzy) {
|
|
3398
|
+
baseChance *= 2;
|
|
3399
|
+
}
|
|
3400
|
+
let lightbladeStacks = 0;
|
|
3401
|
+
if (targetBoss.skills.includes("闪电冲锋")) {
|
|
3402
|
+
lightbladeStacks = targetBoss?.Skillcountpoints || 0;
|
|
3403
|
+
}
|
|
3404
|
+
const triggerChance = baseChance + lightbladeStacks;
|
|
3405
|
+
if (Math.random() * 100 < triggerChance) {
|
|
3406
|
+
const groupMembers = activeBosses.filter(
|
|
3407
|
+
(b) => b.groupId === targetBoss.groupId && b.HP > 0
|
|
3408
|
+
);
|
|
3409
|
+
const updates = [];
|
|
3410
|
+
const messages = [`🌠 【星界之风】生效:治疗所有存活异形200点血量`];
|
|
3411
|
+
for (const member of groupMembers) {
|
|
3412
|
+
const maxHP2 = PassiveHandler.getMemberConfig(member.name, bossGroup)?.maxHP;
|
|
3413
|
+
if (!maxHP2) continue;
|
|
3414
|
+
const healAmount = 200;
|
|
3415
|
+
const newHP = Math.min(member.HP + healAmount, maxHP2);
|
|
3416
|
+
updates.push(
|
|
3417
|
+
ctx.database.set(
|
|
3418
|
+
"ggcevo_boss",
|
|
3419
|
+
{ name: member.name },
|
|
3420
|
+
{ HP: newHP }
|
|
3421
|
+
)
|
|
3422
|
+
);
|
|
3423
|
+
messages.push(`${member.name} +${healAmount}HP`);
|
|
3424
|
+
}
|
|
3425
|
+
if (hasPsychicFrenzy && isInFrenzy) {
|
|
3426
|
+
}
|
|
3427
|
+
await Promise.all(updates);
|
|
3428
|
+
return { messages };
|
|
3429
|
+
}
|
|
3430
|
+
return null;
|
|
3431
|
+
}, "handleStellarWind"),
|
|
3432
|
+
// === 心灵狂热 ===
|
|
3433
|
+
handlePsychicFrenzy: /* @__PURE__ */ __name(function(targetBoss, currentHP, maxHP) {
|
|
3434
|
+
if (!targetBoss.skills.includes("心灵狂热")) return null;
|
|
3435
|
+
if (currentHP / maxHP < 0.5) {
|
|
3436
|
+
return {
|
|
3437
|
+
damageMultiplier: -0.2,
|
|
3438
|
+
// 受到的伤害-20%
|
|
3439
|
+
messages: [
|
|
3440
|
+
`🌀 【心灵狂热】生效:进入心灵狂热状态,受到的伤害-20%`
|
|
3441
|
+
]
|
|
3442
|
+
};
|
|
3443
|
+
}
|
|
3444
|
+
return null;
|
|
3445
|
+
}, "handlePsychicFrenzy"),
|
|
3446
|
+
// === 宇宙能量 ===
|
|
3447
|
+
handleCosmicEnergy: /* @__PURE__ */ __name(async (ctx, targetBoss, initialDamage, bossGroup) => {
|
|
3448
|
+
if (!targetBoss.skills.includes("宇宙能量")) return null;
|
|
3449
|
+
const maxEnergy = 1e3;
|
|
3450
|
+
const currentEnergy = targetBoss.energy || 0;
|
|
3451
|
+
const availableSpace = maxEnergy - currentEnergy;
|
|
3452
|
+
const energyToAdd = Math.min(initialDamage, availableSpace);
|
|
3453
|
+
const newEnergy = currentEnergy + energyToAdd;
|
|
3454
|
+
let healAmount = 0;
|
|
3455
|
+
let messages = [];
|
|
3456
|
+
if (energyToAdd > 0) {
|
|
3457
|
+
messages.push(`🌌 获得${energyToAdd}点能量`);
|
|
3458
|
+
}
|
|
3459
|
+
if (newEnergy >= maxEnergy) {
|
|
3460
|
+
const overflow = initialDamage - energyToAdd;
|
|
3461
|
+
if (overflow > 0) {
|
|
3462
|
+
const maxHP = PassiveHandler.getMemberConfig(targetBoss.name, bossGroup)?.maxHP || 0;
|
|
3463
|
+
if (maxHP > 0) {
|
|
3464
|
+
healAmount = Math.min(overflow, maxHP - targetBoss.HP);
|
|
3465
|
+
messages.push(`💫 能量溢出回复${healAmount}点生命值`);
|
|
3466
|
+
}
|
|
3467
|
+
}
|
|
3468
|
+
}
|
|
3469
|
+
if (energyToAdd === 0 && healAmount === 0) {
|
|
3470
|
+
return null;
|
|
3471
|
+
}
|
|
3472
|
+
await ctx.database.set(
|
|
3473
|
+
"ggcevo_boss",
|
|
3474
|
+
{ name: targetBoss.name },
|
|
3475
|
+
{ energy: newEnergy }
|
|
3476
|
+
);
|
|
3477
|
+
return {
|
|
3478
|
+
messages: [`🌌 【宇宙能量】生效:${messages.join(",")}`],
|
|
3479
|
+
healAmount
|
|
3480
|
+
};
|
|
3481
|
+
}, "handleCosmicEnergy"),
|
|
3482
|
+
// === 光影之刃 ===
|
|
3483
|
+
handleLightblade: /* @__PURE__ */ __name(async (ctx, targetBoss) => {
|
|
3484
|
+
if (!targetBoss.skills.includes("光影之刃")) return null;
|
|
3485
|
+
const currentStacks = targetBoss.Skillcountpoints || 0;
|
|
3486
|
+
const newStacks = currentStacks + 1;
|
|
3487
|
+
await ctx.database.set(
|
|
3488
|
+
"ggcevo_boss",
|
|
3489
|
+
{ name: targetBoss.name },
|
|
3490
|
+
{ Skillcountpoints: newStacks }
|
|
3491
|
+
);
|
|
3492
|
+
return {
|
|
3493
|
+
messages: [`✨ 【光影之刃】生效:获得1层“光影之刃”`]
|
|
3494
|
+
};
|
|
3495
|
+
}, "handleLightblade"),
|
|
3496
|
+
// === 远古预兆 ===
|
|
3497
|
+
handleAncientOmen: /* @__PURE__ */ __name(async (ctx, targetBoss) => {
|
|
3498
|
+
if (!targetBoss.skills.includes("远古预兆")) return null;
|
|
3499
|
+
let lightbladeStacks = 0;
|
|
3500
|
+
if (targetBoss.skills.includes("闪电冲锋")) {
|
|
3501
|
+
lightbladeStacks = targetBoss?.Skillcountpoints || 0;
|
|
3502
|
+
}
|
|
3503
|
+
const totalChance = 1 + lightbladeStacks;
|
|
3504
|
+
if (Math.random() * 100 < totalChance) {
|
|
3505
|
+
const maxEnergy = 1e3;
|
|
3506
|
+
const currentEnergy = targetBoss.energy || 0;
|
|
3507
|
+
const newEnergy = Math.min(currentEnergy + 100, maxEnergy);
|
|
3508
|
+
await ctx.database.set(
|
|
3509
|
+
"ggcevo_boss",
|
|
3510
|
+
{ name: targetBoss.name },
|
|
3511
|
+
{ energy: newEnergy }
|
|
3512
|
+
);
|
|
3513
|
+
return {
|
|
3514
|
+
immune: true,
|
|
3515
|
+
messages: [
|
|
3516
|
+
`🔮 【远古预兆】生效:免疫此次伤害,并且回复100点能量`
|
|
3517
|
+
]
|
|
3518
|
+
};
|
|
3519
|
+
}
|
|
3520
|
+
return null;
|
|
3521
|
+
}, "handleAncientOmen"),
|
|
3522
|
+
// === 超视距穿梭 ===
|
|
3523
|
+
handleHyperspaceSkip: /* @__PURE__ */ __name(function(targetBoss) {
|
|
3524
|
+
if (!targetBoss.skills.includes("超视距穿梭")) return null;
|
|
3525
|
+
const maxEnergy = 1e3;
|
|
3526
|
+
const currentEnergy = targetBoss.energy || 0;
|
|
3527
|
+
const lightbladeStacks = targetBoss.Skillcountpoints || 0;
|
|
3528
|
+
let reduction = 0;
|
|
3529
|
+
let increase = 0;
|
|
3530
|
+
const effectParts = [];
|
|
3531
|
+
if (currentEnergy >= maxEnergy * 0.3) {
|
|
3532
|
+
const baseReduction = lightbladeStacks * 0.05;
|
|
3533
|
+
reduction += baseReduction;
|
|
3534
|
+
effectParts.push(`能量≥30%:减伤${(baseReduction * 100).toFixed(0)}%`);
|
|
3535
|
+
if (currentEnergy >= maxEnergy * 0.6) {
|
|
3536
|
+
const bonusReduction = lightbladeStacks * 0.05;
|
|
3537
|
+
reduction += bonusReduction;
|
|
3538
|
+
effectParts.push(`能量≥60%:额外减伤${(bonusReduction * 100).toFixed(0)}%`);
|
|
3539
|
+
}
|
|
3540
|
+
}
|
|
3541
|
+
if (currentEnergy <= maxEnergy * 0.1) {
|
|
3542
|
+
increase = lightbladeStacks * 0.05;
|
|
3543
|
+
effectParts.push(`能量≤10%:增伤${(increase * 100).toFixed(0)}%`);
|
|
3544
|
+
}
|
|
3545
|
+
if (reduction > 0 || increase > 0) {
|
|
3546
|
+
const effectDescription = effectParts.join(",");
|
|
3547
|
+
return {
|
|
3548
|
+
reduction,
|
|
3549
|
+
// 返沪减伤系数(正值)
|
|
3550
|
+
increase,
|
|
3551
|
+
// 返沪增伤系数(正值)
|
|
3552
|
+
messages: [
|
|
3553
|
+
`🚀 【超视距穿梭】生效:${effectDescription}(当前${lightbladeStacks}层光影之刃)`
|
|
3554
|
+
]
|
|
3555
|
+
};
|
|
3556
|
+
}
|
|
3557
|
+
return null;
|
|
3558
|
+
}, "handleHyperspaceSkip"),
|
|
3559
|
+
// === 复苏 ===
|
|
3560
|
+
handleRevival: /* @__PURE__ */ __name(async function(ctx, targetBoss, currentHP, maxHP) {
|
|
3561
|
+
if (!targetBoss.skills.includes("复苏") || currentHP > 0) return null;
|
|
3562
|
+
const updatedHP = maxHP;
|
|
3563
|
+
const maxEnergy = 1e3;
|
|
3564
|
+
let newSkills = targetBoss.skills;
|
|
3565
|
+
if (!newSkills.includes("灵能构造炉")) {
|
|
3566
|
+
newSkills = [...newSkills, "灵能构造炉"];
|
|
3567
|
+
}
|
|
3568
|
+
newSkills = newSkills.filter((skill) => skill !== "复苏");
|
|
3569
|
+
await ctx.database.set(
|
|
3570
|
+
"ggcevo_boss",
|
|
3571
|
+
{ name: targetBoss.name },
|
|
3572
|
+
{
|
|
3573
|
+
HP: updatedHP,
|
|
3574
|
+
energy: maxEnergy,
|
|
3575
|
+
skills: newSkills
|
|
3576
|
+
}
|
|
3577
|
+
);
|
|
3578
|
+
return {
|
|
3579
|
+
updatedHP,
|
|
3580
|
+
messages: [
|
|
3581
|
+
`🔥 【复苏】生效:免于死亡,回复自身100%的最大生命值和100%的“能量”,并且获得新技能【灵能构造炉】`
|
|
3582
|
+
]
|
|
3583
|
+
};
|
|
3584
|
+
}, "handleRevival"),
|
|
3585
|
+
// === 灵能构造炉 ===
|
|
3586
|
+
handleConstructor: /* @__PURE__ */ __name(async function(ctx, targetBoss) {
|
|
3587
|
+
if (!targetBoss.skills.includes("灵能构造炉")) return null;
|
|
3588
|
+
const allSkills = ["天启超载护盾", "塌缩脉冲", "地毯式轰炸", "轰炸引导"];
|
|
3589
|
+
const hasAllSkills = allSkills.every((skill) => targetBoss.skills.includes(skill));
|
|
3590
|
+
if (hasAllSkills) {
|
|
3591
|
+
const newSkills = targetBoss.skills.filter((skill) => skill !== "灵能构造炉");
|
|
3592
|
+
await ctx.database.set(
|
|
3593
|
+
"ggcevo_boss",
|
|
3594
|
+
{ name: targetBoss.name },
|
|
3595
|
+
{ skills: newSkills }
|
|
3596
|
+
);
|
|
3597
|
+
return {
|
|
3598
|
+
messages: [
|
|
3599
|
+
`⚙️ 【灵能构造炉】生效:所有技能已获取完毕,此技能已移除`
|
|
3600
|
+
]
|
|
3601
|
+
};
|
|
3602
|
+
}
|
|
3603
|
+
let lightbladeStacks = 0;
|
|
3604
|
+
if (targetBoss.skills.includes("闪电冲锋")) {
|
|
3605
|
+
lightbladeStacks = targetBoss.Skillcountpoints || 0;
|
|
3606
|
+
}
|
|
3607
|
+
const totalChance = 5 + lightbladeStacks;
|
|
3608
|
+
if (Math.random() * 100 < totalChance) {
|
|
3609
|
+
const availableSkills = allSkills.filter(
|
|
3610
|
+
(skill) => !targetBoss.skills.includes(skill)
|
|
3611
|
+
);
|
|
3612
|
+
if (availableSkills.length === 0) return null;
|
|
3613
|
+
const randomSkill = availableSkills[Math.floor(Math.random() * availableSkills.length)];
|
|
3614
|
+
const newSkills = [...targetBoss.skills, randomSkill];
|
|
3615
|
+
await ctx.database.set(
|
|
3616
|
+
"ggcevo_boss",
|
|
3617
|
+
{ name: targetBoss.name },
|
|
3618
|
+
{ skills: newSkills }
|
|
3619
|
+
);
|
|
3620
|
+
return {
|
|
3621
|
+
messages: [
|
|
3622
|
+
`⚙️ 【灵能构造炉】生效:获得新技能【${randomSkill}】`
|
|
3623
|
+
]
|
|
3624
|
+
};
|
|
3625
|
+
}
|
|
3626
|
+
return null;
|
|
3627
|
+
}, "handleConstructor"),
|
|
3628
|
+
// 修改后 - 移除了层数清零操作
|
|
3629
|
+
handleTyrsShield: /* @__PURE__ */ __name(async function(ctx, targetBoss, activeBosses, bossGroup) {
|
|
3630
|
+
if (!targetBoss.skills.includes("天启超载护盾")) return null;
|
|
3631
|
+
const lightbladeStacks = targetBoss.Skillcountpoints || 0;
|
|
3632
|
+
if (lightbladeStacks === 0) return null;
|
|
3633
|
+
const triggerChance = 10;
|
|
3634
|
+
if (Math.random() * 100 < triggerChance) {
|
|
3635
|
+
const groupMembers = activeBosses.filter(
|
|
3636
|
+
(b) => b.groupId === targetBoss.groupId && b.HP > 0
|
|
3637
|
+
);
|
|
3638
|
+
const healAmount = lightbladeStacks * 50;
|
|
3639
|
+
const updates = [];
|
|
3640
|
+
const messages = [`🛡️ 【天启超载护盾】生效:治疗所有存活异形`];
|
|
3641
|
+
for (const member of groupMembers) {
|
|
3642
|
+
const maxHP = this.getMemberConfig(member.name, bossGroup)?.maxHP;
|
|
3643
|
+
if (!maxHP) continue;
|
|
3644
|
+
const heal = Math.min(healAmount, maxHP - member.HP);
|
|
3645
|
+
if (heal > 0) {
|
|
3646
|
+
const newHP = member.HP + heal;
|
|
3647
|
+
updates.push(
|
|
3648
|
+
ctx.database.set(
|
|
3649
|
+
"ggcevo_boss",
|
|
3650
|
+
{ name: member.name },
|
|
3651
|
+
{ HP: newHP }
|
|
3652
|
+
)
|
|
3653
|
+
);
|
|
3654
|
+
messages.push(`${member.name} +${heal}HP`);
|
|
3655
|
+
}
|
|
3656
|
+
}
|
|
3657
|
+
await Promise.all(updates);
|
|
3658
|
+
return {
|
|
3659
|
+
messages
|
|
3660
|
+
// 不再清除层数
|
|
3661
|
+
};
|
|
3662
|
+
}
|
|
3663
|
+
return null;
|
|
3664
|
+
}, "handleTyrsShield"),
|
|
3665
|
+
// === 塌缩脉冲 ===
|
|
3666
|
+
handleCollapsePulse: /* @__PURE__ */ __name(async function(ctx, targetBoss) {
|
|
3667
|
+
if (!targetBoss.skills.includes("塌缩脉冲")) return null;
|
|
3668
|
+
const triggerChance = 100;
|
|
3669
|
+
if (Math.random() * 100 < triggerChance) {
|
|
3670
|
+
const currentStacks = targetBoss.Skillcountpoints || 0;
|
|
3671
|
+
const newStacks = currentStacks + 1;
|
|
3672
|
+
await ctx.database.set(
|
|
3673
|
+
"ggcevo_boss",
|
|
3674
|
+
{ name: targetBoss.name },
|
|
3675
|
+
{ Skillcountpoints: newStacks }
|
|
3676
|
+
);
|
|
3677
|
+
return {
|
|
3678
|
+
messages: [`💥 【塌缩脉冲】生效:额外获得1层光影之刃`]
|
|
3679
|
+
};
|
|
3680
|
+
}
|
|
3681
|
+
return null;
|
|
3682
|
+
}, "handleCollapsePulse"),
|
|
3683
|
+
// === 地毯式轰炸 ===
|
|
3684
|
+
handleCarpetBombing: /* @__PURE__ */ __name(async function(ctx, targetBoss) {
|
|
3685
|
+
if (!targetBoss.skills.includes("地毯式轰炸")) return null;
|
|
3686
|
+
const triggerChance = 100;
|
|
3687
|
+
const messages = [];
|
|
3688
|
+
let damageMultiplier = 0;
|
|
3689
|
+
if (Math.random() * 100 < triggerChance) {
|
|
3690
|
+
const hasLoneWolf = targetBoss.skills.includes("孤立无援");
|
|
3691
|
+
if (hasLoneWolf) {
|
|
3692
|
+
const newSkills = targetBoss.skills.filter((skill) => skill !== "孤立无援");
|
|
3693
|
+
await ctx.database.set(
|
|
3694
|
+
"ggcevo_boss",
|
|
3695
|
+
{ name: targetBoss.name },
|
|
3696
|
+
{ skills: newSkills }
|
|
3697
|
+
);
|
|
3698
|
+
messages.push(`🔥 【地毯式轰炸】生效:移除“孤立无援”`);
|
|
3699
|
+
} else {
|
|
3700
|
+
}
|
|
3701
|
+
damageMultiplier = -0.5;
|
|
3702
|
+
messages.push(`🔥 【地毯式轰炸】生效:我心中的怒火胜过千万个太阳!受到的伤害-50%`);
|
|
3703
|
+
}
|
|
3704
|
+
return {
|
|
3705
|
+
messages,
|
|
3706
|
+
damageMultiplier
|
|
3707
|
+
};
|
|
3708
|
+
}, "handleCarpetBombing"),
|
|
3709
|
+
// 修改后 - 移除了层数清零操作
|
|
3710
|
+
handleBombardmentGuidance: /* @__PURE__ */ __name(async function(ctx, targetBoss) {
|
|
3711
|
+
if (!targetBoss.skills.includes("轰炸引导")) return null;
|
|
3712
|
+
const lightbladeStacks = targetBoss.Skillcountpoints || 0;
|
|
3713
|
+
if (lightbladeStacks === 0) return null;
|
|
3714
|
+
const triggerChance = 10;
|
|
3715
|
+
if (Math.random() * 100 < triggerChance) {
|
|
3716
|
+
const energyGain = lightbladeStacks * 100;
|
|
3717
|
+
const maxEnergy = 1e3;
|
|
3718
|
+
const currentEnergy = targetBoss.energy || 0;
|
|
3719
|
+
const newEnergy = Math.min(currentEnergy + energyGain, maxEnergy);
|
|
3720
|
+
await ctx.database.set(
|
|
3721
|
+
"ggcevo_boss",
|
|
3722
|
+
{ name: targetBoss.name },
|
|
3723
|
+
{ energy: newEnergy }
|
|
3724
|
+
);
|
|
3725
|
+
return {
|
|
3726
|
+
messages: [
|
|
3727
|
+
`🎯 【轰炸引导】生效:回复${energyGain}点能量`
|
|
3728
|
+
]
|
|
3729
|
+
};
|
|
3730
|
+
}
|
|
3731
|
+
return null;
|
|
3732
|
+
}, "handleBombardmentGuidance"),
|
|
3295
3733
|
// 修改后的伤害处理函数
|
|
3296
3734
|
handlePassives: /* @__PURE__ */ __name(async function(ctx, handle, targetBoss, initialDamage, currentHP, maxHP, weaponName, weaponData, bossGroup) {
|
|
3297
3735
|
let messages = [];
|
|
@@ -3375,6 +3813,15 @@ var PassiveHandler = {
|
|
|
3375
3813
|
initialDamage: 0
|
|
3376
3814
|
};
|
|
3377
3815
|
}
|
|
3816
|
+
const ancientOmenResult = await this.handleAncientOmen(ctx, targetBoss);
|
|
3817
|
+
if (ancientOmenResult?.immune) {
|
|
3818
|
+
return {
|
|
3819
|
+
currentHP: targetBoss.HP,
|
|
3820
|
+
messages: ancientOmenResult.messages,
|
|
3821
|
+
skillUpdates: [],
|
|
3822
|
+
initialDamage: 0
|
|
3823
|
+
};
|
|
3824
|
+
}
|
|
3378
3825
|
targetBoss.skills.forEach((skill) => {
|
|
3379
3826
|
const config = passiveConfig[skill];
|
|
3380
3827
|
if (config && config.effect !== void 0 && config.effect !== 0) {
|
|
@@ -3410,7 +3857,12 @@ var PassiveHandler = {
|
|
|
3410
3857
|
}
|
|
3411
3858
|
const bloodEffect = this.handleBloodEffects(targetBoss, currentHP, maxHP);
|
|
3412
3859
|
if (bloodEffect) {
|
|
3413
|
-
|
|
3860
|
+
if (bloodEffect.buffAmount > 0) {
|
|
3861
|
+
buffMultiplier += bloodEffect.buffAmount;
|
|
3862
|
+
}
|
|
3863
|
+
if (bloodEffect.nerfAmount > 0) {
|
|
3864
|
+
nerfMultiplier -= bloodEffect.nerfAmount;
|
|
3865
|
+
}
|
|
3414
3866
|
messages.push(...bloodEffect.messages);
|
|
3415
3867
|
}
|
|
3416
3868
|
const siphonResult = this.handleEnergySiphon(targetBoss, currentHP, maxHP);
|
|
@@ -3452,6 +3904,26 @@ var PassiveHandler = {
|
|
|
3452
3904
|
nerfMultiplier += rageResult.damageMultiplier;
|
|
3453
3905
|
messages.push(...rageResult.messages);
|
|
3454
3906
|
}
|
|
3907
|
+
const hyperspaceResult = this.handleHyperspaceSkip(targetBoss);
|
|
3908
|
+
if (hyperspaceResult) {
|
|
3909
|
+
if (hyperspaceResult.reduction > 0) {
|
|
3910
|
+
nerfMultiplier -= hyperspaceResult.reduction;
|
|
3911
|
+
}
|
|
3912
|
+
if (hyperspaceResult.increase > 0) {
|
|
3913
|
+
buffMultiplier += hyperspaceResult.increase;
|
|
3914
|
+
}
|
|
3915
|
+
messages.push(...hyperspaceResult.messages);
|
|
3916
|
+
}
|
|
3917
|
+
const frenzyResult = this.handlePsychicFrenzy(targetBoss, currentHP, maxHP);
|
|
3918
|
+
if (frenzyResult) {
|
|
3919
|
+
nerfMultiplier += frenzyResult.damageMultiplier;
|
|
3920
|
+
messages.push(...frenzyResult.messages);
|
|
3921
|
+
}
|
|
3922
|
+
const bombingResult = await this.handleCarpetBombing(ctx, targetBoss);
|
|
3923
|
+
if (bombingResult) {
|
|
3924
|
+
nerfMultiplier += bombingResult.damageMultiplier;
|
|
3925
|
+
messages.push(...bombingResult.messages);
|
|
3926
|
+
}
|
|
3455
3927
|
if (solarFlareResult.messages.length > 0) {
|
|
3456
3928
|
messages.push(...solarFlareResult.messages);
|
|
3457
3929
|
}
|
|
@@ -3480,13 +3952,16 @@ var PassiveHandler = {
|
|
|
3480
3952
|
finalDamage = Math.floor(finalDamage);
|
|
3481
3953
|
finalDamage = Math.max(finalDamage, 1);
|
|
3482
3954
|
currentHP = targetBoss.HP - finalDamage;
|
|
3955
|
+
if (currentHP < 0) {
|
|
3956
|
+
currentHP = 0;
|
|
3957
|
+
}
|
|
3483
3958
|
if (appliedIgnoreMessages.length > 0) {
|
|
3484
3959
|
messages.push(...appliedIgnoreMessages);
|
|
3485
3960
|
messages.push(
|
|
3486
3961
|
`⚡ 减伤效果:${(nerfMultiplier * 100).toFixed(0)}% → ${(effectiveNerf * 100).toFixed(0)}%`
|
|
3487
3962
|
);
|
|
3488
3963
|
}
|
|
3489
|
-
if (currentHP <= 0 && !targetBoss.skills.includes("求生本能I") && !targetBoss.skills.includes("求生本能II")) {
|
|
3964
|
+
if (currentHP <= 0 && !targetBoss.skills.includes("求生本能I") && !targetBoss.skills.includes("求生本能II") && !targetBoss.skills.includes("复苏")) {
|
|
3490
3965
|
return {
|
|
3491
3966
|
currentHP,
|
|
3492
3967
|
messages,
|
|
@@ -3518,12 +3993,6 @@ var PassiveHandler = {
|
|
|
3518
3993
|
if (moldResult) {
|
|
3519
3994
|
messages.push(...moldResult.messages);
|
|
3520
3995
|
}
|
|
3521
|
-
const survivalResult = this.handleSurvivalInstinct(targetBoss, currentHP, maxHP);
|
|
3522
|
-
if (survivalResult) {
|
|
3523
|
-
currentHP = survivalResult.updatedHP;
|
|
3524
|
-
messages.push(...survivalResult.messages);
|
|
3525
|
-
skillUpdates.push(...survivalResult.skillUpdates);
|
|
3526
|
-
}
|
|
3527
3996
|
const pulseResult = await this.handlePulse(
|
|
3528
3997
|
ctx,
|
|
3529
3998
|
targetBoss,
|
|
@@ -3555,6 +4024,25 @@ var PassiveHandler = {
|
|
|
3555
4024
|
}
|
|
3556
4025
|
}
|
|
3557
4026
|
}
|
|
4027
|
+
const stellarWindResult = await this.handleStellarWind(ctx, targetBoss, initialDamage, maxHP, activeBosses, bossGroup);
|
|
4028
|
+
if (stellarWindResult) {
|
|
4029
|
+
messages.push(...stellarWindResult.messages);
|
|
4030
|
+
}
|
|
4031
|
+
const shieldResult = await this.handleTyrsShield(ctx, targetBoss, activeBosses, bossGroup);
|
|
4032
|
+
if (shieldResult) {
|
|
4033
|
+
messages.push(...shieldResult.messages);
|
|
4034
|
+
}
|
|
4035
|
+
const survivalResult = this.handleSurvivalInstinct(targetBoss, currentHP, maxHP);
|
|
4036
|
+
if (survivalResult) {
|
|
4037
|
+
currentHP = survivalResult.updatedHP;
|
|
4038
|
+
messages.push(...survivalResult.messages);
|
|
4039
|
+
skillUpdates.push(...survivalResult.skillUpdates);
|
|
4040
|
+
}
|
|
4041
|
+
const revivalResult = await this.handleRevival(ctx, targetBoss, currentHP, maxHP);
|
|
4042
|
+
if (revivalResult) {
|
|
4043
|
+
currentHP = revivalResult.updatedHP;
|
|
4044
|
+
messages.push(...revivalResult.messages);
|
|
4045
|
+
}
|
|
3558
4046
|
const pulseDisruptorResult = await this.handlePulseDisruptor(
|
|
3559
4047
|
ctx,
|
|
3560
4048
|
targetBoss,
|
|
@@ -3584,28 +4072,51 @@ var PassiveHandler = {
|
|
|
3584
4072
|
if (sentryResult) {
|
|
3585
4073
|
messages.push(...sentryResult.messages);
|
|
3586
4074
|
}
|
|
3587
|
-
const
|
|
3588
|
-
if (
|
|
3589
|
-
messages.push(...
|
|
4075
|
+
const lightbladeResult = await this.handleLightblade(ctx, targetBoss);
|
|
4076
|
+
if (lightbladeResult) {
|
|
4077
|
+
messages.push(...lightbladeResult.messages);
|
|
4078
|
+
}
|
|
4079
|
+
const CollapsepulseResult = await this.handleCollapsePulse(ctx, targetBoss);
|
|
4080
|
+
if (CollapsepulseResult) {
|
|
4081
|
+
messages.push(...CollapsepulseResult.messages);
|
|
4082
|
+
}
|
|
4083
|
+
const bileStackResult = await this.handleBileStacking(ctx, targetBoss, skipBileStacking);
|
|
4084
|
+
if (bileStackResult) {
|
|
4085
|
+
messages.push(...bileStackResult.messages);
|
|
3590
4086
|
}
|
|
3591
4087
|
const shockwaveResult = await this.handleEnergyShockwave(ctx, targetBoss);
|
|
3592
4088
|
if (shockwaveResult) {
|
|
3593
4089
|
messages.push(...shockwaveResult.messages);
|
|
3594
4090
|
}
|
|
4091
|
+
const cosmicResult = await this.handleCosmicEnergy(ctx, targetBoss, finalDamage, bossGroup);
|
|
4092
|
+
if (cosmicResult) {
|
|
4093
|
+
messages.push(...cosmicResult.messages);
|
|
4094
|
+
if (cosmicResult.healAmount > 0) {
|
|
4095
|
+
currentHP = Math.min(targetBoss.HP + cosmicResult.healAmount, maxHP);
|
|
4096
|
+
}
|
|
4097
|
+
}
|
|
4098
|
+
const guidanceResult = await this.handleBombardmentGuidance(ctx, targetBoss);
|
|
4099
|
+
if (guidanceResult) {
|
|
4100
|
+
messages.push(...guidanceResult.messages);
|
|
4101
|
+
}
|
|
3595
4102
|
const gammaRadResult = await this.handleGammaRadiation(ctx, targetBoss, weaponName);
|
|
3596
4103
|
if (gammaRadResult) {
|
|
3597
4104
|
messages.push(...gammaRadResult.messages);
|
|
3598
4105
|
radiationApplied = gammaRadResult.radiationApplied;
|
|
3599
4106
|
}
|
|
3600
|
-
const bileStackResult = await this.handleBileStacking(ctx, targetBoss, skipBileStacking);
|
|
3601
|
-
if (bileStackResult) {
|
|
3602
|
-
messages.push(...bileStackResult.messages);
|
|
3603
|
-
}
|
|
3604
4107
|
const coldEffectResult = await this.handleColdEffect(ctx, targetBoss, weaponName);
|
|
3605
4108
|
if (coldEffectResult) {
|
|
3606
4109
|
messages.push(...coldEffectResult.messages);
|
|
3607
4110
|
freezing = coldEffectResult.freezing;
|
|
3608
4111
|
}
|
|
4112
|
+
const tagChangeResult = await this.handleConductorTagChange(ctx, targetBoss, currentHP, maxHP);
|
|
4113
|
+
if (tagChangeResult) {
|
|
4114
|
+
messages.push(...tagChangeResult.messages);
|
|
4115
|
+
}
|
|
4116
|
+
const constructorResult = await this.handleConstructor(ctx, targetBoss);
|
|
4117
|
+
if (constructorResult) {
|
|
4118
|
+
messages.push(...constructorResult.messages);
|
|
4119
|
+
}
|
|
3609
4120
|
return {
|
|
3610
4121
|
currentHP,
|
|
3611
4122
|
messages,
|
|
@@ -4756,16 +5267,14 @@ ${itemDetails.join("\n")}`;
|
|
|
4756
5267
|
}
|
|
4757
5268
|
const messages = [];
|
|
4758
5269
|
let totalBonus = 0;
|
|
4759
|
-
let
|
|
4760
|
-
if (monthlyDays
|
|
4761
|
-
|
|
4762
|
-
|
|
4763
|
-
|
|
4764
|
-
|
|
4765
|
-
|
|
4766
|
-
|
|
4767
|
-
tickets = 7;
|
|
4768
|
-
}
|
|
5270
|
+
let baseTickets = 0;
|
|
5271
|
+
if (monthlyDays < 7) baseTickets = 3;
|
|
5272
|
+
else if (monthlyDays === 7) baseTickets = 4;
|
|
5273
|
+
else if (monthlyDays === 14) baseTickets = 5;
|
|
5274
|
+
else if (monthlyDays === 21) baseTickets = 6;
|
|
5275
|
+
else if (monthlyDays === 28) baseTickets = 7;
|
|
5276
|
+
else baseTickets = 3;
|
|
5277
|
+
let tickets = baseTickets;
|
|
4769
5278
|
const [systemFirmwareTech] = await ctx.database.get("ggcevo_tech", { handle, techId: 5 }).catch(() => [{ level: 0 }]);
|
|
4770
5279
|
const systemFirmwareLevel = Math.min(systemFirmwareTech?.level || 0, 5);
|
|
4771
5280
|
const [careerData] = await ctx.database.get("ggcevo_careers", { handle });
|
|
@@ -4839,9 +5348,9 @@ ${itemDetails.join("\n")}`;
|
|
|
4839
5348
|
isused: false
|
|
4840
5349
|
});
|
|
4841
5350
|
if (meowEffect) {
|
|
4842
|
-
tickets
|
|
5351
|
+
tickets = baseTickets * 2;
|
|
4843
5352
|
totalBonus += 1;
|
|
4844
|
-
messages.push("🐾
|
|
5353
|
+
messages.push("🐾 喵喵财源祈愿:金币+100%,咕咕币+100%");
|
|
4845
5354
|
}
|
|
4846
5355
|
const finalPoints = Math.round(basePoints * (1 + totalBonus));
|
|
4847
5356
|
let redCrystal = 0;
|
|
@@ -4884,7 +5393,19 @@ ${itemDetails.join("\n")}`;
|
|
|
4884
5393
|
⚡ 加成效果:
|
|
4885
5394
|
▸ ${messages.join("\n▸ ")}`;
|
|
4886
5395
|
}
|
|
4887
|
-
|
|
5396
|
+
let coinMessage = `💰 金币 x ${finalPoints}`;
|
|
5397
|
+
if (totalBonus > 0) {
|
|
5398
|
+
coinMessage += ` (基础值:${basePoints}金币)`;
|
|
5399
|
+
}
|
|
5400
|
+
let ticketMessage;
|
|
5401
|
+
if (meowEffect) {
|
|
5402
|
+
ticketMessage = `🪙 咕咕币 x ${tickets} (基础值:${baseTickets}枚)`;
|
|
5403
|
+
} else {
|
|
5404
|
+
ticketMessage = `🪙 咕咕币 x ${tickets}`;
|
|
5405
|
+
}
|
|
5406
|
+
return `签到成功!本月累计签到${monthlyDays}天,获得:
|
|
5407
|
+
${coinMessage}
|
|
5408
|
+
${ticketMessage}${effectMessage}`;
|
|
4888
5409
|
} catch (error) {
|
|
4889
5410
|
console.error("签到命令时发生错误:", error);
|
|
4890
5411
|
return "服务器繁忙,请稍后尝试。";
|
|
@@ -6876,7 +7397,7 @@ ${validTypes.join("、")}`;
|
|
|
6876
7397
|
} else {
|
|
6877
7398
|
result.push("➤ 无");
|
|
6878
7399
|
}
|
|
6879
|
-
const countingSkill = mainBoss.skills?.find((s) => ["冷适应", "岗哨机枪", "吸血唾液", "灼烧粘液"].includes(s));
|
|
7400
|
+
const countingSkill = mainBoss.skills?.find((s) => ["冷适应", "岗哨机枪", "吸血唾液", "灼烧粘液", "光影之刃"].includes(s));
|
|
6880
7401
|
if (countingSkill) {
|
|
6881
7402
|
result.push(`📈 ${countingSkill}:${mainBoss.Skillcountpoints}层`);
|
|
6882
7403
|
}
|
|
@@ -6909,7 +7430,7 @@ ${validTypes.join("、")}`;
|
|
|
6909
7430
|
} else {
|
|
6910
7431
|
minionInfo.push("➤ 无");
|
|
6911
7432
|
}
|
|
6912
|
-
const minionCountingSkill = minion.skills?.find((s) => ["冷适应", "岗哨机枪", "吸血唾液", "灼烧粘液"].includes(s));
|
|
7433
|
+
const minionCountingSkill = minion.skills?.find((s) => ["冷适应", "岗哨机枪", "吸血唾液", "灼烧粘液", "光影之刃"].includes(s));
|
|
6913
7434
|
if (minionCountingSkill) {
|
|
6914
7435
|
minionInfo.push(`📈 ${minionCountingSkill}:${minion.Skillcountpoints}层`);
|
|
6915
7436
|
}
|