koishi-plugin-ggcevo-game 1.4.37 → 1.4.39
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/BattleEffectProcessor.d.ts +19 -6
- package/lib/boss/attackhandling.d.ts +0 -1
- package/lib/index.js +366 -415
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -919,8 +919,8 @@ var Spacestationtechnology = [
|
|
|
919
919
|
{
|
|
920
920
|
level: 2,
|
|
921
921
|
cost: 1e3,
|
|
922
|
-
description: "重启高级武器改装站,武器改装通用模块享有
|
|
923
|
-
careerBonus: "武器改装通用模块享有
|
|
922
|
+
description: "重启高级武器改装站,武器改装通用模块享有5%的折扣; 武器改装专属模块享有5%的折扣",
|
|
923
|
+
careerBonus: "武器改装通用模块享有10%的折扣; 武器改装专属模块享有10%的折扣"
|
|
924
924
|
}
|
|
925
925
|
]
|
|
926
926
|
},
|
|
@@ -1274,211 +1274,211 @@ var bossPool = [
|
|
|
1274
1274
|
var passiveConfig = {
|
|
1275
1275
|
"弱化形态": {
|
|
1276
1276
|
type: "伤害增减(负面)",
|
|
1277
|
-
description: "
|
|
1277
|
+
description: "子代防御脆弱,受到的伤害提高10%"
|
|
1278
1278
|
},
|
|
1279
1279
|
"异形甲壳": {
|
|
1280
1280
|
type: "伤害增减(正面)",
|
|
1281
|
-
description: "
|
|
1281
|
+
description: "受到的伤害降低20%"
|
|
1282
1282
|
},
|
|
1283
1283
|
"冰霜回复": {
|
|
1284
1284
|
type: "生存强化(生命回复)",
|
|
1285
|
-
description: "
|
|
1285
|
+
description: "生命值≤30%时,立即回复自身40%最大生命值,并为所有其他存活异形回复10%最大生命值(生效后移除)"
|
|
1286
1286
|
},
|
|
1287
1287
|
"冰霜进化": {
|
|
1288
1288
|
type: "状态免疫(寒冷伤害免疫)",
|
|
1289
|
-
description: "
|
|
1289
|
+
description: "免疫寒冷伤害,受到寒冷攻击时回复等量生命值"
|
|
1290
1290
|
},
|
|
1291
1291
|
"冰霜环绕": {
|
|
1292
1292
|
type: "生存强化(生命回复+群体增益)",
|
|
1293
|
-
description: "
|
|
1293
|
+
description: "生命值≤30%时,立即回复自身45%最大生命值,并使所有存活异形获得「寒霜地狱」技能(生效后移除)"
|
|
1294
1294
|
},
|
|
1295
1295
|
"寒霜地狱": {
|
|
1296
1296
|
type: "伤害增减(正面)",
|
|
1297
|
-
description: "
|
|
1297
|
+
description: "受到的伤害降低30%"
|
|
1298
1298
|
},
|
|
1299
1299
|
"应激甲壳I": {
|
|
1300
1300
|
type: "伤害增减(正面)",
|
|
1301
|
-
description: "
|
|
1301
|
+
description: "受到的伤害降低20%"
|
|
1302
1302
|
},
|
|
1303
1303
|
"应激甲壳II": {
|
|
1304
1304
|
type: "伤害增减(正面)",
|
|
1305
|
-
description: "
|
|
1305
|
+
description: "受到的伤害降低25%"
|
|
1306
1306
|
},
|
|
1307
1307
|
"求生本能I": {
|
|
1308
1308
|
type: "生存强化(生命回复)",
|
|
1309
|
-
description: "
|
|
1309
|
+
description: "濒死时立即回复自身30%最大生命值(生效后移除)"
|
|
1310
1310
|
},
|
|
1311
1311
|
"求生本能II": {
|
|
1312
1312
|
type: "生存强化(生命回复)",
|
|
1313
|
-
description: "
|
|
1313
|
+
description: "濒死时立即回复自身50%最大生命值(生效后移除)"
|
|
1314
1314
|
},
|
|
1315
1315
|
"冷适应": {
|
|
1316
1316
|
type: "状态免疫(寒冷伤害免疫)",
|
|
1317
|
-
description: "累计承受10
|
|
1317
|
+
description: "累计承受10次寒冷伤害后,获得「惧热」标签并永久免疫寒冷伤害"
|
|
1318
1318
|
},
|
|
1319
1319
|
"感染空间站": {
|
|
1320
1320
|
type: "伤害增减(正面)",
|
|
1321
|
-
description: "
|
|
1321
|
+
description: "当空间站哨枪塔存活时,自身受到的伤害降低50%"
|
|
1322
1322
|
},
|
|
1323
1323
|
"病毒云": {
|
|
1324
1324
|
type: "伤害增减(正面)",
|
|
1325
|
-
description: "
|
|
1325
|
+
description: "受到的伤害降低10%"
|
|
1326
1326
|
},
|
|
1327
1327
|
"霉菌滋生": {
|
|
1328
1328
|
type: "生存强化(生命回复)",
|
|
1329
|
-
description: "
|
|
1329
|
+
description: "受击后,若空间站哨枪塔存活,为其回复1%最大生命值"
|
|
1330
1330
|
},
|
|
1331
1331
|
"岗哨机枪": {
|
|
1332
1332
|
type: "生存强化(生命回复)",
|
|
1333
|
-
description: "每累计承受10
|
|
1333
|
+
description: "每累计承受10次攻击,为所有其他存活异形回复10%最大生命值"
|
|
1334
1334
|
},
|
|
1335
1335
|
"结构装甲": {
|
|
1336
1336
|
type: "伤害增减(正面)",
|
|
1337
|
-
description: "
|
|
1337
|
+
description: "受实弹/能量武器伤害降低20%,受热能武器伤害降低40%"
|
|
1338
1338
|
},
|
|
1339
1339
|
"吸血唾液": {
|
|
1340
1340
|
type: "伤害增减(正面)",
|
|
1341
|
-
description: "
|
|
1341
|
+
description: "受击获得1层「吸血唾液」(上限20层),每层使受到的伤害降低5%"
|
|
1342
1342
|
},
|
|
1343
1343
|
"进食": {
|
|
1344
1344
|
type: "生存强化(生命回复)",
|
|
1345
|
-
description: "
|
|
1345
|
+
description: "「吸血唾液」≥20层时,下次受击消耗所有层数并回复自身20%最大生命值"
|
|
1346
1346
|
},
|
|
1347
1347
|
"嗜血狂暴": {
|
|
1348
1348
|
type: "伤害增减(正面)",
|
|
1349
|
-
description: "
|
|
1349
|
+
description: "生命值≤50%时,受击额外获得1层「吸血唾液」且受到的伤害降低20%"
|
|
1350
1350
|
},
|
|
1351
1351
|
"吐血": {
|
|
1352
1352
|
type: "伤害增减(负面)",
|
|
1353
|
-
description: "
|
|
1353
|
+
description: "无「吸血唾液」层数时,受到的伤害提高20%"
|
|
1354
1354
|
},
|
|
1355
1355
|
"超导体": {
|
|
1356
1356
|
type: "状态转换(护盾→重甲)",
|
|
1357
|
-
description: "
|
|
1357
|
+
description: "生命值≤10%时,护盾标签永久转换为重甲标签"
|
|
1358
1358
|
},
|
|
1359
1359
|
"能量虹吸": {
|
|
1360
1360
|
type: "伤害增减(正面)",
|
|
1361
|
-
description: "生命值≥70
|
|
1361
|
+
description: "生命值≥70%时伤害降低40%,30%-70%时伤害降低20%"
|
|
1362
1362
|
},
|
|
1363
1363
|
"能源虹吸": {
|
|
1364
1364
|
type: "伤害增减(正面)",
|
|
1365
|
-
description: "能量值≥80
|
|
1365
|
+
description: "能量值≥80%时伤害降低50%,50%-80%时伤害降低30%"
|
|
1366
1366
|
},
|
|
1367
1367
|
"电能立场": {
|
|
1368
1368
|
type: "状态免疫(伤害免疫)",
|
|
1369
|
-
description: "能量值≥30
|
|
1369
|
+
description: "能量值≥30%时,55%概率免疫非热能伤害(每层寒冷降低5%触发概率)"
|
|
1370
1370
|
},
|
|
1371
1371
|
"电能冲击波": {
|
|
1372
1372
|
type: "生存强化(能量回复)",
|
|
1373
|
-
description: "
|
|
1373
|
+
description: "受击后回复100点能量"
|
|
1374
1374
|
},
|
|
1375
1375
|
"脉冲": {
|
|
1376
1376
|
type: "生存强化(生命回复)",
|
|
1377
|
-
description: "能量值≥30
|
|
1377
|
+
description: "能量值≥30%时,60%概率为所有存活异形回复100点生命(每层寒冷降低5%触发概率)"
|
|
1378
1378
|
},
|
|
1379
1379
|
"能量黑洞": {
|
|
1380
1380
|
type: "伤害增减(正面)",
|
|
1381
|
-
description: "
|
|
1381
|
+
description: "存在能量黑洞时,受到的伤害降低20%"
|
|
1382
1382
|
},
|
|
1383
1383
|
"火焰异形": {
|
|
1384
1384
|
type: "状态免疫(火焰伤害免疫)",
|
|
1385
|
-
description: "
|
|
1385
|
+
description: "免疫火焰伤害,受到火焰攻击时回复等量生命值"
|
|
1386
1386
|
},
|
|
1387
1387
|
"庞兽狂暴": {
|
|
1388
1388
|
type: "伤害增减(正面)",
|
|
1389
|
-
description: "
|
|
1389
|
+
description: "生命值≤50%时,受到的伤害降低50%"
|
|
1390
1390
|
},
|
|
1391
1391
|
"灼烧粘液": {
|
|
1392
1392
|
type: "生存强化(生命回复)",
|
|
1393
|
-
description: "
|
|
1393
|
+
description: "受击获得1层「灼烧粘液」;受火焰攻击时消耗所有层数并回复(层数×10)点生命"
|
|
1394
1394
|
},
|
|
1395
1395
|
"腐蚀胆汁": {
|
|
1396
1396
|
type: "生存强化(生命回复)",
|
|
1397
|
-
description: "
|
|
1397
|
+
description: "「灼烧粘液」≥10层时,下次受击消耗所有层数并为所有存活异形回复1000点生命"
|
|
1398
1398
|
},
|
|
1399
1399
|
"火焰吐息": {
|
|
1400
1400
|
type: "生存强化(生命回复)",
|
|
1401
|
-
description: "
|
|
1401
|
+
description: "「灼烧粘液」≥20层时,下次攻击消耗所有层数并为所有存活异形回复20%最大生命值"
|
|
1402
1402
|
},
|
|
1403
1403
|
"太阳耀斑": {
|
|
1404
1404
|
type: "状态移除+状态免疫(寒冷伤害免疫)",
|
|
1405
|
-
description: "
|
|
1405
|
+
description: "所有子代阵亡后,移除惧寒标签和孤立无援状态,并永久免疫寒冷伤害"
|
|
1406
1406
|
},
|
|
1407
1407
|
"燃烧潜地": {
|
|
1408
1408
|
type: "生存强化(生命回复)",
|
|
1409
|
-
description: "
|
|
1409
|
+
description: "生命值≤10%时立即回复50%最大生命值(生效后移除)"
|
|
1410
1410
|
},
|
|
1411
1411
|
"炼狱爆弹": {
|
|
1412
1412
|
type: "伤害增减(正面)",
|
|
1413
|
-
description: "
|
|
1413
|
+
description: "每层「灼烧粘液」使受到的伤害降低5%,存活子代存在时每层额外降低5%"
|
|
1414
1414
|
},
|
|
1415
1415
|
"猎手异形": {
|
|
1416
1416
|
type: "伤害增减(条件性)+状态免疫(火焰/寒冷伤害免疫)",
|
|
1417
|
-
description: "
|
|
1417
|
+
description: "存在其他存活异形时伤害降低20%,无其他存活异形时伤害提高20%;免疫火焰及寒冷伤害"
|
|
1418
1418
|
},
|
|
1419
1419
|
"狂暴": {
|
|
1420
1420
|
type: "伤害增减(正面)",
|
|
1421
|
-
description: "
|
|
1421
|
+
description: "生命值≤50%时,受到的伤害降低50%"
|
|
1422
1422
|
},
|
|
1423
1423
|
"伪装": {
|
|
1424
1424
|
type: "伤害增减(正面)",
|
|
1425
|
-
description: "
|
|
1425
|
+
description: "受击记录伤害来源武器名称,下次被同名武器攻击时伤害降低80%"
|
|
1426
1426
|
},
|
|
1427
1427
|
"致命一击": {
|
|
1428
1428
|
type: "状态免疫(伤害免疫)",
|
|
1429
|
-
description: "
|
|
1429
|
+
description: "受击时5%概率免疫该次伤害"
|
|
1430
1430
|
},
|
|
1431
1431
|
"星界之风": {
|
|
1432
1432
|
type: "生存强化(生命回复)",
|
|
1433
|
-
description: "
|
|
1433
|
+
description: "受击时5%概率为所有存活异形回复200点生命"
|
|
1434
1434
|
},
|
|
1435
1435
|
"心灵狂热": {
|
|
1436
1436
|
type: "伤害增减(正面)",
|
|
1437
|
-
description: "
|
|
1437
|
+
description: "生命值<50%时伤害降低20%且「星界之风」触发概率翻倍"
|
|
1438
1438
|
},
|
|
1439
1439
|
"宇宙能量": {
|
|
1440
1440
|
type: "生存强化(能量/生命回复)",
|
|
1441
|
-
description: "
|
|
1441
|
+
description: "受击回复等量能量值,能量溢出时转换为生命回复"
|
|
1442
1442
|
},
|
|
1443
1443
|
"复苏": {
|
|
1444
1444
|
type: "生存强化(生命/能量回复)",
|
|
1445
|
-
description: "
|
|
1445
|
+
description: "免疫致命伤害,回复50%最大生命与100%能量值,并获得「灵能构造炉」技能(生效后移除)"
|
|
1446
1446
|
},
|
|
1447
1447
|
"光影之刃": {
|
|
1448
1448
|
type: "状态叠加(层数叠加)",
|
|
1449
|
-
description: "
|
|
1449
|
+
description: "受击获得1层「光影之刃」(上限50层)"
|
|
1450
1450
|
},
|
|
1451
1451
|
"远古预兆": {
|
|
1452
1452
|
type: "状态免疫(能量伤害免疫)",
|
|
1453
|
-
description: "
|
|
1453
|
+
description: "受击时1%概率免疫非热能伤害并回复100点能量"
|
|
1454
1454
|
},
|
|
1455
1455
|
"闪电冲锋": {
|
|
1456
1456
|
type: "状态增强(触发概率提升)",
|
|
1457
|
-
description: "
|
|
1457
|
+
description: "每层「光影之刃」使「远古预兆」和「灵能构造炉」触发概率提升0.5%"
|
|
1458
1458
|
},
|
|
1459
1459
|
"超视距穿梭": {
|
|
1460
1460
|
type: "伤害增减(条件性)",
|
|
1461
|
-
description: "
|
|
1461
|
+
description: "能量≥60%时每层「光影之刃」使伤害降低10%,30%-60%时每层降低5%,能量≤10%时每层提高5%"
|
|
1462
1462
|
},
|
|
1463
1463
|
"灵能构造炉": {
|
|
1464
1464
|
type: "状态获得(技能获得)",
|
|
1465
|
-
description: "
|
|
1465
|
+
description: "受击时5%概率随机获得以下技能之一:天启超载护盾/塌缩脉冲/地毯式轰炸/轰炸引导"
|
|
1466
1466
|
},
|
|
1467
1467
|
"天启超载护盾": {
|
|
1468
1468
|
type: "生存强化(生命回复)",
|
|
1469
|
-
description: "
|
|
1469
|
+
description: "受击时10%概率为所有存活异形回复(「光影之刃」层数×10)点生命"
|
|
1470
1470
|
},
|
|
1471
1471
|
"塌缩脉冲": {
|
|
1472
1472
|
type: "状态叠加(层数叠加)",
|
|
1473
|
-
description: "
|
|
1473
|
+
description: "受击后额外获得1层「光影之刃」"
|
|
1474
1474
|
},
|
|
1475
1475
|
"地毯式轰炸": {
|
|
1476
1476
|
type: "状态移除+伤害增减(正面)",
|
|
1477
|
-
description: "
|
|
1477
|
+
description: "移除孤立无援状态,受到的伤害降低100%"
|
|
1478
1478
|
},
|
|
1479
1479
|
"轰炸引导": {
|
|
1480
1480
|
type: "生存强化(能量回复)",
|
|
1481
|
-
description: "
|
|
1481
|
+
description: "受击时10%概率回复(「光影之刃」层数×50)点能量"
|
|
1482
1482
|
}
|
|
1483
1483
|
};
|
|
1484
1484
|
|
|
@@ -2448,7 +2448,7 @@ var BattleEffectProcessor = {
|
|
|
2448
2448
|
handleWeakForm: /* @__PURE__ */ __name(function(targetBoss) {
|
|
2449
2449
|
if (targetBoss.skills.includes("弱化形态")) {
|
|
2450
2450
|
const newBuffMultiplier = 0.1;
|
|
2451
|
-
const messages = [`📚
|
|
2451
|
+
const messages = [`📚 【弱化形态】生效:子代防御脆弱,受到的伤害+10%`];
|
|
2452
2452
|
return {
|
|
2453
2453
|
buffMultiplier: newBuffMultiplier,
|
|
2454
2454
|
messages
|
|
@@ -2460,7 +2460,7 @@ var BattleEffectProcessor = {
|
|
|
2460
2460
|
handleAlienShell: /* @__PURE__ */ __name(function(targetBoss) {
|
|
2461
2461
|
if (targetBoss.skills.includes("异形甲壳")) {
|
|
2462
2462
|
const newNerfMultiplier = 0.2;
|
|
2463
|
-
const messages = [`🛡️
|
|
2463
|
+
const messages = [`🛡️ 【异形甲壳】生效:受到的伤害-20%`];
|
|
2464
2464
|
return {
|
|
2465
2465
|
nerfMultiplier: newNerfMultiplier,
|
|
2466
2466
|
messages
|
|
@@ -2469,13 +2469,16 @@ var BattleEffectProcessor = {
|
|
|
2469
2469
|
return null;
|
|
2470
2470
|
}, "handleAlienShell"),
|
|
2471
2471
|
// 孤立无援处理(活跃Boss中仅自己时增伤20%)
|
|
2472
|
-
handleIsolated: /* @__PURE__ */ __name(function(targetBoss, activeBosses) {
|
|
2472
|
+
handleIsolated: /* @__PURE__ */ __name(function(targetBoss, activeBosses, tempMark) {
|
|
2473
|
+
if (tempMark) {
|
|
2474
|
+
return null;
|
|
2475
|
+
}
|
|
2473
2476
|
const isIsolated = activeBosses.length === 1 && // 活跃Boss仅1个
|
|
2474
2477
|
activeBosses[0].name === targetBoss.name;
|
|
2475
2478
|
if (isIsolated) {
|
|
2476
2479
|
const newBuffMultiplier = 0.2;
|
|
2477
2480
|
const messages = [
|
|
2478
|
-
|
|
2481
|
+
`📚 【孤立无援】生效:无存活子代时,受到的伤害+20%`
|
|
2479
2482
|
];
|
|
2480
2483
|
return {
|
|
2481
2484
|
buffMultiplier: newBuffMultiplier,
|
|
@@ -2502,7 +2505,7 @@ var BattleEffectProcessor = {
|
|
|
2502
2505
|
skillsRemoved: ["冰霜回复"]
|
|
2503
2506
|
// 移除技能
|
|
2504
2507
|
};
|
|
2505
|
-
messages.push(`❄️
|
|
2508
|
+
messages.push(`❄️ 【冰霜回复】触发:生命值≤30%,自身回复${selfHealAmount}点生命值`);
|
|
2506
2509
|
const otherSurvivingBosses = activeBosses.filter(
|
|
2507
2510
|
(boss) => boss.name !== targetBoss.name && boss.isActive
|
|
2508
2511
|
);
|
|
@@ -2516,7 +2519,7 @@ var BattleEffectProcessor = {
|
|
|
2516
2519
|
});
|
|
2517
2520
|
messages.push(`❄️ 「${otherName}」回复${otherHealAmount}点生命值`);
|
|
2518
2521
|
});
|
|
2519
|
-
messages.push(`❄️
|
|
2522
|
+
messages.push(`❄️ 【冰霜回复】技能移除`);
|
|
2520
2523
|
return {
|
|
2521
2524
|
messages,
|
|
2522
2525
|
targetUpdates: {
|
|
@@ -2547,8 +2550,8 @@ var BattleEffectProcessor = {
|
|
|
2547
2550
|
skillsAdded: ["寒霜地狱"]
|
|
2548
2551
|
// 新增【寒霜地狱】技能(自身)
|
|
2549
2552
|
};
|
|
2550
|
-
messages.push(`❄️
|
|
2551
|
-
messages.push(`❄️ 「${targetBoss.name}
|
|
2553
|
+
messages.push(`❄️ 【冰霜环绕】触发:生命值≤30%,自身回复${selfHealAmount}点生命值`);
|
|
2554
|
+
messages.push(`❄️ 「${targetBoss.name}」获得「寒霜地狱」技能`);
|
|
2552
2555
|
const survivingMinions = activeBosses.filter(
|
|
2553
2556
|
(boss) => boss.name !== targetBoss.name && boss.isActive
|
|
2554
2557
|
);
|
|
@@ -2563,10 +2566,10 @@ var BattleEffectProcessor = {
|
|
|
2563
2566
|
name: minionName,
|
|
2564
2567
|
updates: minionUpdates
|
|
2565
2568
|
});
|
|
2566
|
-
messages.push(`❄️ 「${minionName}
|
|
2569
|
+
messages.push(`❄️ 「${minionName}」获得「寒霜地狱」技能`);
|
|
2567
2570
|
});
|
|
2568
2571
|
}
|
|
2569
|
-
messages.push(`❄️
|
|
2572
|
+
messages.push(`❄️ 【冰霜环绕】技能移除`);
|
|
2570
2573
|
return {
|
|
2571
2574
|
messages,
|
|
2572
2575
|
targetUpdates: {
|
|
@@ -2596,8 +2599,7 @@ var BattleEffectProcessor = {
|
|
|
2596
2599
|
// 生命值变化量
|
|
2597
2600
|
}
|
|
2598
2601
|
};
|
|
2599
|
-
messages.push(`❄️
|
|
2600
|
-
messages.push(`❄️ 恢复${healAmount}点生命值`);
|
|
2602
|
+
messages.push(`❄️ 【冰霜进化】生效:免疫寒冷伤害并回复${healAmount}点生命值`);
|
|
2601
2603
|
return {
|
|
2602
2604
|
isImmune,
|
|
2603
2605
|
messages,
|
|
@@ -2608,7 +2610,7 @@ var BattleEffectProcessor = {
|
|
|
2608
2610
|
handleFrostHell: /* @__PURE__ */ __name(function(targetBoss) {
|
|
2609
2611
|
if (targetBoss.skills.includes("寒霜地狱")) {
|
|
2610
2612
|
const newNerfMultiplier = 0.3;
|
|
2611
|
-
const messages = [`❄️
|
|
2613
|
+
const messages = [`❄️ 【寒霜地狱】生效:受到的伤害-30%`];
|
|
2612
2614
|
return {
|
|
2613
2615
|
nerfMultiplier: newNerfMultiplier,
|
|
2614
2616
|
messages
|
|
@@ -2620,7 +2622,7 @@ var BattleEffectProcessor = {
|
|
|
2620
2622
|
handleStressShellI: /* @__PURE__ */ __name(function(targetBoss) {
|
|
2621
2623
|
if (targetBoss.skills.includes("应激甲壳I")) {
|
|
2622
2624
|
const newNerfMultiplier = 0.2;
|
|
2623
|
-
const messages = [`🛡️ 【应激甲壳I
|
|
2625
|
+
const messages = [`🛡️ 【应激甲壳I】生效:受到的伤害-20%`];
|
|
2624
2626
|
return {
|
|
2625
2627
|
nerfMultiplier: newNerfMultiplier,
|
|
2626
2628
|
messages
|
|
@@ -2632,7 +2634,7 @@ var BattleEffectProcessor = {
|
|
|
2632
2634
|
handleStressShellII: /* @__PURE__ */ __name(function(targetBoss) {
|
|
2633
2635
|
if (targetBoss.skills.includes("应激甲壳II")) {
|
|
2634
2636
|
const newNerfMultiplier = 0.25;
|
|
2635
|
-
const messages = [`🛡️ 【应激甲壳II
|
|
2637
|
+
const messages = [`🛡️ 【应激甲壳II】生效:受到的伤害-25%`];
|
|
2636
2638
|
return {
|
|
2637
2639
|
nerfMultiplier: newNerfMultiplier,
|
|
2638
2640
|
messages
|
|
@@ -2655,8 +2657,8 @@ var BattleEffectProcessor = {
|
|
|
2655
2657
|
hpChange: selfHealAmount,
|
|
2656
2658
|
skillsRemoved: ["求生本能I"]
|
|
2657
2659
|
};
|
|
2658
|
-
messages.push(`❤️ 【求生本能I
|
|
2659
|
-
messages.push(`❤️
|
|
2660
|
+
messages.push(`❤️ 【求生本能I】触发:濒死时,回复${selfHealAmount}点生命值`);
|
|
2661
|
+
messages.push(`❤️ 【求生本能I】技能移除`);
|
|
2660
2662
|
return {
|
|
2661
2663
|
messages,
|
|
2662
2664
|
targetUpdates: {
|
|
@@ -2682,8 +2684,8 @@ var BattleEffectProcessor = {
|
|
|
2682
2684
|
skillsRemoved: ["求生本能II"]
|
|
2683
2685
|
// 移除的技能
|
|
2684
2686
|
};
|
|
2685
|
-
messages.push(`❤️ 【求生本能II
|
|
2686
|
-
messages.push(`❤️
|
|
2687
|
+
messages.push(`❤️ 【求生本能II】触发:濒死时,回复${selfHealAmount}点生命值`);
|
|
2688
|
+
messages.push(`❤️ 【求生本能II】技能移除`);
|
|
2687
2689
|
return {
|
|
2688
2690
|
messages,
|
|
2689
2691
|
targetUpdates: {
|
|
@@ -2720,11 +2722,10 @@ var BattleEffectProcessor = {
|
|
|
2720
2722
|
// 层数+1
|
|
2721
2723
|
}
|
|
2722
2724
|
};
|
|
2723
|
-
messages.push(`❄️
|
|
2725
|
+
messages.push(`❄️ 【冷适应】叠层:当前${newLayers}/10次寒冷伤害`);
|
|
2724
2726
|
if (newLayers >= 10) {
|
|
2725
2727
|
targetUpdates.updates.tagsAdded = ["惧热"];
|
|
2726
|
-
messages.push(`🧊
|
|
2727
|
-
messages.push(`🧊 【冷适应】获得永久免疫寒冷伤害效果`);
|
|
2728
|
+
messages.push(`🧊 【冷适应】生效:获得「惧热」标签并免疫寒冷伤害`);
|
|
2728
2729
|
}
|
|
2729
2730
|
}
|
|
2730
2731
|
return {
|
|
@@ -2746,7 +2747,7 @@ var BattleEffectProcessor = {
|
|
|
2746
2747
|
return null;
|
|
2747
2748
|
}
|
|
2748
2749
|
const newNerfMultiplier = 0.5;
|
|
2749
|
-
messages.push(`🛸
|
|
2750
|
+
messages.push(`🛸 【感染空间站】生效:「空间站哨枪塔」存活,受到的伤害-50%`);
|
|
2750
2751
|
return {
|
|
2751
2752
|
nerfMultiplier: newNerfMultiplier,
|
|
2752
2753
|
// 返回调整后的减伤系数
|
|
@@ -2760,7 +2761,7 @@ var BattleEffectProcessor = {
|
|
|
2760
2761
|
return null;
|
|
2761
2762
|
}
|
|
2762
2763
|
const newNerfMultiplier = 0.1;
|
|
2763
|
-
messages.push(`☁️
|
|
2764
|
+
messages.push(`☁️ 【病毒云】生效:受到的伤害-10%`);
|
|
2764
2765
|
return {
|
|
2765
2766
|
nerfMultiplier: newNerfMultiplier,
|
|
2766
2767
|
// 返回调整后的减伤系数
|
|
@@ -2787,7 +2788,7 @@ var BattleEffectProcessor = {
|
|
|
2787
2788
|
hpChange: healAmount
|
|
2788
2789
|
}
|
|
2789
2790
|
};
|
|
2790
|
-
messages.push(`🍄
|
|
2791
|
+
messages.push(`🍄 【霉菌滋生】生效:为「空间站哨枪塔」回复${healAmount}点生命值`);
|
|
2791
2792
|
return {
|
|
2792
2793
|
messages,
|
|
2793
2794
|
spaceStationUpdates
|
|
@@ -2811,7 +2812,7 @@ var BattleEffectProcessor = {
|
|
|
2811
2812
|
}
|
|
2812
2813
|
};
|
|
2813
2814
|
const newStacks = currentStacks + 1;
|
|
2814
|
-
messages.push(`🔫
|
|
2815
|
+
messages.push(`🔫 【岗哨机枪】充能:当前${newStacks}/10次攻击`);
|
|
2815
2816
|
return {
|
|
2816
2817
|
messages,
|
|
2817
2818
|
targetUpdates,
|
|
@@ -2825,7 +2826,6 @@ var BattleEffectProcessor = {
|
|
|
2825
2826
|
// 重置层数
|
|
2826
2827
|
}
|
|
2827
2828
|
};
|
|
2828
|
-
messages.push(`🔫 【岗哨机枪】生效:累计承受10次攻击,为所有其他存活异形回复生命值`);
|
|
2829
2829
|
const otherSurvivingBosses = activeBosses.filter(
|
|
2830
2830
|
(boss) => boss.name !== targetBoss.name && boss.isActive
|
|
2831
2831
|
);
|
|
@@ -2857,7 +2857,7 @@ var BattleEffectProcessor = {
|
|
|
2857
2857
|
const weaponType = weaponData.type;
|
|
2858
2858
|
const isHeatWeapon = weaponType === "热能武器";
|
|
2859
2859
|
const nerfMultiplier = isHeatWeapon ? 0.4 : 0.2;
|
|
2860
|
-
messages.push(`🛡️
|
|
2860
|
+
messages.push(`🛡️ 【结构装甲】生效:受到${weaponType}的伤害-${nerfMultiplier * 100}%`);
|
|
2861
2861
|
return {
|
|
2862
2862
|
nerfMultiplier,
|
|
2863
2863
|
messages
|
|
@@ -2882,8 +2882,8 @@ var BattleEffectProcessor = {
|
|
|
2882
2882
|
}
|
|
2883
2883
|
};
|
|
2884
2884
|
}
|
|
2885
|
-
|
|
2886
|
-
messages.push(`🩸
|
|
2885
|
+
messages.push(`🩸 【吸血唾液】生效:当前${currentStacks}层,受到的伤害-${(addedReduction * 100).toFixed(0)}%`);
|
|
2886
|
+
messages.push(`🩸 【吸血唾液】叠层:「吸血唾液」层数+1`);
|
|
2887
2887
|
return {
|
|
2888
2888
|
nerfMultiplier: addedReduction,
|
|
2889
2889
|
messages,
|
|
@@ -2911,7 +2911,7 @@ var BattleEffectProcessor = {
|
|
|
2911
2911
|
// 生命值回复
|
|
2912
2912
|
}
|
|
2913
2913
|
};
|
|
2914
|
-
messages.push(`🍽️
|
|
2914
|
+
messages.push(`🍽️ 【进食】触发:消耗20层「吸血唾液」,回复${healAmount}点生命值`);
|
|
2915
2915
|
return {
|
|
2916
2916
|
messages,
|
|
2917
2917
|
targetUpdates
|
|
@@ -2940,8 +2940,7 @@ var BattleEffectProcessor = {
|
|
|
2940
2940
|
};
|
|
2941
2941
|
}
|
|
2942
2942
|
nerfMultiplier = 0.2;
|
|
2943
|
-
|
|
2944
|
-
messages.push(`🔥 【嗜血狂暴】生效:HP≤50%,${stackMessage},并且获得20%额外减伤`);
|
|
2943
|
+
messages.push(`🔥 【嗜血狂暴】生效:生命值≤50%,每次受击+1层「吸血唾液」且受到的伤害-20%`);
|
|
2945
2944
|
}
|
|
2946
2945
|
return {
|
|
2947
2946
|
nerfMultiplier,
|
|
@@ -2959,7 +2958,7 @@ var BattleEffectProcessor = {
|
|
|
2959
2958
|
const isTriggered = currentVampireStacks === 0;
|
|
2960
2959
|
const buffMultiplier = isTriggered ? 0.2 : 0;
|
|
2961
2960
|
if (isTriggered) {
|
|
2962
|
-
messages.push(`🩸
|
|
2961
|
+
messages.push(`🩸 【吐血】生效:无「吸血唾液」层数,受到的伤害+20%`);
|
|
2963
2962
|
}
|
|
2964
2963
|
return {
|
|
2965
2964
|
buffMultiplier,
|
|
@@ -2988,7 +2987,7 @@ var BattleEffectProcessor = {
|
|
|
2988
2987
|
// 添加重甲标签
|
|
2989
2988
|
}
|
|
2990
2989
|
};
|
|
2991
|
-
messages.push(`🛡️
|
|
2990
|
+
messages.push(`🛡️ 【超导体】触发:生命值≤10%,「护盾」标签转换为「重甲」标签`);
|
|
2992
2991
|
return {
|
|
2993
2992
|
messages,
|
|
2994
2993
|
targetUpdates
|
|
@@ -3003,10 +3002,10 @@ var BattleEffectProcessor = {
|
|
|
3003
3002
|
let nerfMultiplier = 0;
|
|
3004
3003
|
if (hpPercent >= 0.7) {
|
|
3005
3004
|
nerfMultiplier = 0.4;
|
|
3006
|
-
messages.push(`⚡ 【能量虹吸】生效:生命值≥70
|
|
3005
|
+
messages.push(`⚡ 【能量虹吸】生效:生命值≥70%,受到的伤害-40%`);
|
|
3007
3006
|
} else if (hpPercent >= 0.3) {
|
|
3008
3007
|
nerfMultiplier = 0.2;
|
|
3009
|
-
messages.push(`⚡ 【能量虹吸】生效:生命值≥30
|
|
3008
|
+
messages.push(`⚡ 【能量虹吸】生效:生命值≥30%,受到的伤害-20%`);
|
|
3010
3009
|
}
|
|
3011
3010
|
return { nerfMultiplier, messages };
|
|
3012
3011
|
}, "handleEnergySiphon"),
|
|
@@ -3020,18 +3019,20 @@ var BattleEffectProcessor = {
|
|
|
3020
3019
|
let nerfMultiplier = 0;
|
|
3021
3020
|
if (energyPercent >= 0.8) {
|
|
3022
3021
|
nerfMultiplier = 0.5;
|
|
3023
|
-
messages.push(`⚡
|
|
3022
|
+
messages.push(`⚡ 【能源虹吸】生效:能量值≥80%,受到的伤害-50%`);
|
|
3024
3023
|
} else if (energyPercent >= 0.5) {
|
|
3025
3024
|
nerfMultiplier = 0.3;
|
|
3026
|
-
messages.push(`⚡
|
|
3025
|
+
messages.push(`⚡ 【能源虹吸】生效:能量值≥50%,受到的伤害-30%`);
|
|
3027
3026
|
}
|
|
3028
3027
|
return { nerfMultiplier, messages };
|
|
3029
3028
|
}, "handleEnergyAbsorption"),
|
|
3030
|
-
|
|
3031
|
-
handleElectricField: /* @__PURE__ */ __name(function(targetBoss) {
|
|
3029
|
+
handleElectricField: /* @__PURE__ */ __name(function(targetBoss, weaponData) {
|
|
3032
3030
|
const messages = [];
|
|
3033
3031
|
let isImmune = false;
|
|
3034
3032
|
if (!targetBoss.skills.includes("电能立场")) return null;
|
|
3033
|
+
if (weaponData.type === "热能武器") {
|
|
3034
|
+
return null;
|
|
3035
|
+
}
|
|
3035
3036
|
const currentEnergy = targetBoss.energy;
|
|
3036
3037
|
const maxEnergy = getMaxEnergyByName(targetBoss.name);
|
|
3037
3038
|
const energyPercent = currentEnergy / maxEnergy;
|
|
@@ -3043,8 +3044,10 @@ var BattleEffectProcessor = {
|
|
|
3043
3044
|
const coldPenalty = coldLayers * 0.05;
|
|
3044
3045
|
const immuneChance = Math.max(baseChance - coldPenalty, 0.05);
|
|
3045
3046
|
isImmune = Math.random() < immuneChance;
|
|
3046
|
-
|
|
3047
|
-
|
|
3047
|
+
if (isImmune) {
|
|
3048
|
+
const chancePercent = Math.round(immuneChance * 100);
|
|
3049
|
+
messages.push(`⚡ 【电能立场】生效:能量值≥30%,${chancePercent}%概率成功免疫非热能武器伤害`);
|
|
3050
|
+
}
|
|
3048
3051
|
return { isImmune, messages };
|
|
3049
3052
|
}, "handleElectricField"),
|
|
3050
3053
|
// 电能冲击波(能量回复)
|
|
@@ -3058,11 +3061,7 @@ var BattleEffectProcessor = {
|
|
|
3058
3061
|
const maxHealAmount = 100;
|
|
3059
3062
|
const actualHealAmount = Math.min(maxHealAmount, maxEnergy - currentEnergy);
|
|
3060
3063
|
if (actualHealAmount <= 0) {
|
|
3061
|
-
|
|
3062
|
-
return {
|
|
3063
|
-
messages,
|
|
3064
|
-
targetUpdates: null
|
|
3065
|
-
};
|
|
3064
|
+
return null;
|
|
3066
3065
|
}
|
|
3067
3066
|
const targetUpdates = {
|
|
3068
3067
|
name: targetBoss.name,
|
|
@@ -3117,7 +3116,7 @@ var BattleEffectProcessor = {
|
|
|
3117
3116
|
handleEnergyBlackhole: /* @__PURE__ */ __name(function(targetBoss) {
|
|
3118
3117
|
const messages = [];
|
|
3119
3118
|
if (!targetBoss.skills.includes("能量黑洞")) return null;
|
|
3120
|
-
messages.push(`⚡
|
|
3119
|
+
messages.push(`⚡ 【能量黑洞】生效:存在「能量黑洞」时,受到的伤害-20%`);
|
|
3121
3120
|
return { nerfMultiplier: 0.2, messages };
|
|
3122
3121
|
}, "handleEnergyBlackhole"),
|
|
3123
3122
|
// 火焰异形(免疫伤害并回复生命值)
|
|
@@ -3140,8 +3139,7 @@ var BattleEffectProcessor = {
|
|
|
3140
3139
|
// 生命值变化量
|
|
3141
3140
|
}
|
|
3142
3141
|
};
|
|
3143
|
-
messages.push(`🔥
|
|
3144
|
-
messages.push(`🔥 恢复${healAmount}点生命值`);
|
|
3142
|
+
messages.push(`🔥 【火焰异形】生效:免疫火焰伤害并回复${healAmount}点生命值`);
|
|
3145
3143
|
return {
|
|
3146
3144
|
isImmune,
|
|
3147
3145
|
messages,
|
|
@@ -3157,9 +3155,9 @@ var BattleEffectProcessor = {
|
|
|
3157
3155
|
const maxHP = getMaxHPByName(targetBoss.name);
|
|
3158
3156
|
const hpPercent = targetBoss.HP / maxHP;
|
|
3159
3157
|
let nerfMultiplier = 0;
|
|
3160
|
-
if (hpPercent
|
|
3158
|
+
if (hpPercent <= 0.5) {
|
|
3161
3159
|
nerfMultiplier = 0.5;
|
|
3162
|
-
messages.push(`💥
|
|
3160
|
+
messages.push(`💥 【庞兽狂暴】生效:生命值≤50%,受到的伤害-50%`);
|
|
3163
3161
|
}
|
|
3164
3162
|
return { nerfMultiplier, messages };
|
|
3165
3163
|
}, "handleColossalRampage"),
|
|
@@ -3177,17 +3175,15 @@ var BattleEffectProcessor = {
|
|
|
3177
3175
|
if (!isFireDamage && currentStacks < maxStacks) {
|
|
3178
3176
|
updates.skillStacksChanged = 1;
|
|
3179
3177
|
const newStacks = currentStacks + 1;
|
|
3180
|
-
messages.push(`🔥
|
|
3178
|
+
messages.push(`🔥 【灼烧粘液】叠层:当前${newStacks}/20层`);
|
|
3181
3179
|
}
|
|
3182
3180
|
if (isFireDamage && currentStacks > 0) {
|
|
3183
3181
|
const healAmount = currentStacks * 10;
|
|
3184
3182
|
updates.hpChange = healAmount;
|
|
3185
3183
|
updates.skillStacksChanged = -currentStacks;
|
|
3184
|
+
messages.push(`🔥 【灼烧粘液】触发:消耗${currentStacks}层「灼烧粘液」,回复${healAmount}点生命值`);
|
|
3186
3185
|
if (currentStacks >= 10) {
|
|
3187
3186
|
isHighStackHeal = true;
|
|
3188
|
-
messages.push(`🔥 【灼烧粘液】强力回复:消耗${currentStacks}层(≥10),回复${healAmount}点生命值!`);
|
|
3189
|
-
} else {
|
|
3190
|
-
messages.push(`🔥 【灼烧粘液】生效:消耗${currentStacks}层,回复${healAmount}点生命值`);
|
|
3191
3187
|
}
|
|
3192
3188
|
}
|
|
3193
3189
|
if (Object.keys(updates).length > 0) {
|
|
@@ -3226,7 +3222,7 @@ var BattleEffectProcessor = {
|
|
|
3226
3222
|
// 重置层数为0
|
|
3227
3223
|
}
|
|
3228
3224
|
};
|
|
3229
|
-
messages.push(`🧪
|
|
3225
|
+
messages.push(`🧪 【腐蚀胆汁】触发:消耗${currentStacks}层「灼烧粘液」`);
|
|
3230
3226
|
otherSurvivingBosses.forEach((otherBoss) => {
|
|
3231
3227
|
const otherName = otherBoss.name;
|
|
3232
3228
|
const healAmount = 1e3;
|
|
@@ -3235,7 +3231,7 @@ var BattleEffectProcessor = {
|
|
|
3235
3231
|
name: otherName,
|
|
3236
3232
|
updates: { hpChange: healAmount }
|
|
3237
3233
|
});
|
|
3238
|
-
messages.push(`🧪
|
|
3234
|
+
messages.push(`🧪 【腐蚀胆汁】触发:为「${otherName}」回复${healAmount}点生命值`);
|
|
3239
3235
|
}
|
|
3240
3236
|
});
|
|
3241
3237
|
return {
|
|
@@ -3267,7 +3263,7 @@ var BattleEffectProcessor = {
|
|
|
3267
3263
|
// 重置层数为0
|
|
3268
3264
|
}
|
|
3269
3265
|
};
|
|
3270
|
-
messages.push(`🔥
|
|
3266
|
+
messages.push(`🔥 【火焰吐息】触发:消耗${currentStacks}层「灼烧粘液」`);
|
|
3271
3267
|
otherSurvivingBosses.forEach((otherBoss) => {
|
|
3272
3268
|
const otherName = otherBoss.name;
|
|
3273
3269
|
const maxHP = getMaxHPByName(otherName);
|
|
@@ -3277,7 +3273,7 @@ var BattleEffectProcessor = {
|
|
|
3277
3273
|
name: otherName,
|
|
3278
3274
|
updates: { hpChange: healAmount }
|
|
3279
3275
|
});
|
|
3280
|
-
messages.push(`🔥
|
|
3276
|
+
messages.push(`🔥 【火焰吐息】触发:为「${otherName}」回复${healAmount}点生命值`);
|
|
3281
3277
|
}
|
|
3282
3278
|
});
|
|
3283
3279
|
return {
|
|
@@ -3287,7 +3283,7 @@ var BattleEffectProcessor = {
|
|
|
3287
3283
|
};
|
|
3288
3284
|
}, "handleFlameBreath"),
|
|
3289
3285
|
// 太阳耀斑 - 移除状态并获得免疫
|
|
3290
|
-
handleSolarFlare: /* @__PURE__ */ __name(function(targetBoss, weaponName,
|
|
3286
|
+
handleSolarFlare: /* @__PURE__ */ __name(function(targetBoss, weaponName, activeBosses) {
|
|
3291
3287
|
const messages = [];
|
|
3292
3288
|
let isImmune = false;
|
|
3293
3289
|
let targetUpdates = null;
|
|
@@ -3298,25 +3294,29 @@ var BattleEffectProcessor = {
|
|
|
3298
3294
|
(boss) => boss.name !== targetBoss.name && boss.isActive
|
|
3299
3295
|
);
|
|
3300
3296
|
const hasFearColdTag = targetBoss.tags.includes("惧寒") || false;
|
|
3301
|
-
if (hasLivingOffspring
|
|
3297
|
+
if (hasLivingOffspring) {
|
|
3302
3298
|
return null;
|
|
3303
3299
|
}
|
|
3304
|
-
|
|
3305
|
-
|
|
3306
|
-
|
|
3307
|
-
|
|
3308
|
-
|
|
3309
|
-
|
|
3310
|
-
|
|
3300
|
+
if (hasFearColdTag) {
|
|
3301
|
+
targetUpdates = {
|
|
3302
|
+
name: targetBoss.name,
|
|
3303
|
+
updates: {
|
|
3304
|
+
tagsRemoved: ["惧寒"]
|
|
3305
|
+
}
|
|
3306
|
+
};
|
|
3307
|
+
messages.push(`☀️ 【太阳耀斑】触发:移除「惧寒」标签`);
|
|
3308
|
+
}
|
|
3311
3309
|
const isColdWeapon = weaponName === "零度之下";
|
|
3312
3310
|
if (isColdWeapon) {
|
|
3313
3311
|
isImmune = true;
|
|
3314
|
-
messages.push(`☀️
|
|
3312
|
+
messages.push(`☀️ 【太阳耀斑】生效:免疫寒冷伤害`);
|
|
3315
3313
|
}
|
|
3316
3314
|
return {
|
|
3317
3315
|
isImmune,
|
|
3318
3316
|
messages,
|
|
3319
|
-
targetUpdates
|
|
3317
|
+
targetUpdates,
|
|
3318
|
+
tempMark: true
|
|
3319
|
+
// 添加临时标记
|
|
3320
3320
|
};
|
|
3321
3321
|
}, "handleSolarFlare"),
|
|
3322
3322
|
// 燃烧潜地 - 低生命回复
|
|
@@ -3342,7 +3342,8 @@ var BattleEffectProcessor = {
|
|
|
3342
3342
|
// 回复生命值
|
|
3343
3343
|
}
|
|
3344
3344
|
};
|
|
3345
|
-
messages.push(`🔥
|
|
3345
|
+
messages.push(`🔥 【燃烧潜地】触发:生命值≤10%,回复${healAmount}点生命值`);
|
|
3346
|
+
messages.push(`🔥 【燃烧潜地】技能移除`);
|
|
3346
3347
|
return {
|
|
3347
3348
|
messages,
|
|
3348
3349
|
targetUpdates
|
|
@@ -3368,7 +3369,7 @@ var BattleEffectProcessor = {
|
|
|
3368
3369
|
if (nerfMultiplier > 0) {
|
|
3369
3370
|
const reductionPercent = Math.round(nerfMultiplier * 100);
|
|
3370
3371
|
const offspringMsg = hasLivingOffspring ? "(存在子代,额外加成)" : "";
|
|
3371
|
-
messages.push(`💣
|
|
3372
|
+
messages.push(`💣 【炼狱爆弹】生效:当前${currentStacks}层「灼烧粘液」,受到的伤害-${reductionPercent}%${offspringMsg}`);
|
|
3372
3373
|
}
|
|
3373
3374
|
return { nerfMultiplier, messages };
|
|
3374
3375
|
}, "handleInfernalBomb"),
|
|
@@ -3392,10 +3393,10 @@ var BattleEffectProcessor = {
|
|
|
3392
3393
|
).length;
|
|
3393
3394
|
if (otherLivingAliens > 0) {
|
|
3394
3395
|
nerfMultiplier = 0.2;
|
|
3395
|
-
messages.push(`🦖
|
|
3396
|
+
messages.push(`🦖 【猎手异形】生效:存在其他存活异形,受到的伤害-20%`);
|
|
3396
3397
|
} else {
|
|
3397
3398
|
buffMultiplier = 0.2;
|
|
3398
|
-
messages.push(`🦖
|
|
3399
|
+
messages.push(`🦖 【猎手异形】生效:无其他存活异形,受到的伤害+20%`);
|
|
3399
3400
|
}
|
|
3400
3401
|
return {
|
|
3401
3402
|
buffMultiplier,
|
|
@@ -3413,9 +3414,9 @@ var BattleEffectProcessor = {
|
|
|
3413
3414
|
}
|
|
3414
3415
|
const maxHP = getMaxHPByName(targetBoss.name);
|
|
3415
3416
|
const currentHP = targetBoss.HP;
|
|
3416
|
-
if (currentHP
|
|
3417
|
+
if (currentHP <= maxHP * 0.5) {
|
|
3417
3418
|
nerfMultiplier = 0.5;
|
|
3418
|
-
messages.push(`💥
|
|
3419
|
+
messages.push(`💥 【狂暴】生效:生命值≤50%,受到的伤害-50%`);
|
|
3419
3420
|
}
|
|
3420
3421
|
return { nerfMultiplier, messages };
|
|
3421
3422
|
}, "handleRampage"),
|
|
@@ -3430,7 +3431,7 @@ var BattleEffectProcessor = {
|
|
|
3430
3431
|
const lastWeapon = targetBoss.lastWeaponName || null;
|
|
3431
3432
|
if (lastWeapon && lastWeapon === weaponName) {
|
|
3432
3433
|
nerfMultiplier = 0.8;
|
|
3433
|
-
messages.push(`🎭 【伪装】生效:已适应武器「${weaponName}
|
|
3434
|
+
messages.push(`🎭 【伪装】生效:已适应武器「${weaponName}」,本次受到的伤害-80%`);
|
|
3434
3435
|
} else {
|
|
3435
3436
|
targetUpdates = {
|
|
3436
3437
|
name: targetBoss.name,
|
|
@@ -3439,7 +3440,7 @@ var BattleEffectProcessor = {
|
|
|
3439
3440
|
// 记录当前武器
|
|
3440
3441
|
}
|
|
3441
3442
|
};
|
|
3442
|
-
messages.push(`🎭 【伪装】生效:记录新武器「${weaponName}
|
|
3443
|
+
messages.push(`🎭 【伪装】生效:记录新武器「${weaponName}」`);
|
|
3443
3444
|
}
|
|
3444
3445
|
return {
|
|
3445
3446
|
nerfMultiplier,
|
|
@@ -3456,7 +3457,7 @@ var BattleEffectProcessor = {
|
|
|
3456
3457
|
}
|
|
3457
3458
|
if (Math.random() < 0.05) {
|
|
3458
3459
|
isImmune = true;
|
|
3459
|
-
messages.push(`💀 【致命一击】生效:5
|
|
3460
|
+
messages.push(`💀 【致命一击】生效:5%概率免疫伤害`);
|
|
3460
3461
|
}
|
|
3461
3462
|
return { isImmune, messages };
|
|
3462
3463
|
}, "handleDeadlyHit"),
|
|
@@ -3481,13 +3482,8 @@ var BattleEffectProcessor = {
|
|
|
3481
3482
|
updates: { hpChange: baseHealAmount }
|
|
3482
3483
|
});
|
|
3483
3484
|
}
|
|
3484
|
-
messages.push(`🌬️
|
|
3485
|
+
messages.push(`🌬️ 【星界之风】触发:为「${bossName}」回复${baseHealAmount}点生命值`);
|
|
3485
3486
|
});
|
|
3486
|
-
if (doubleChance) {
|
|
3487
|
-
messages.unshift(`🌬️ 【星界之风】生效:心灵狂热状态(触发概率10%)为所有存活异形回复生命值`);
|
|
3488
|
-
} else {
|
|
3489
|
-
messages.unshift(`🌬️ 【星界之风】生效:5%概率触发,为所有存活异形回复生命值`);
|
|
3490
|
-
}
|
|
3491
3487
|
return {
|
|
3492
3488
|
messages,
|
|
3493
3489
|
otherUpdates
|
|
@@ -3503,41 +3499,54 @@ var BattleEffectProcessor = {
|
|
|
3503
3499
|
}
|
|
3504
3500
|
const maxHP = getMaxHPByName(targetBoss.name);
|
|
3505
3501
|
const hpPercent = targetBoss.HP / maxHP;
|
|
3506
|
-
if (hpPercent
|
|
3502
|
+
if (hpPercent <= 0.5) {
|
|
3507
3503
|
nerfMultiplier = 0.2;
|
|
3508
3504
|
doubleAstralWind = true;
|
|
3509
|
-
messages.push(`🧠
|
|
3505
|
+
messages.push(`🧠 【心灵狂热】生效:生命值≤50%,受到的伤害-20%,「星界之风」触发概率翻倍`);
|
|
3510
3506
|
}
|
|
3511
3507
|
return { nerfMultiplier, doubleAstralWind, messages };
|
|
3512
3508
|
}, "handleMindFrenzy"),
|
|
3513
|
-
|
|
3514
|
-
handleCosmicEnergy: /* @__PURE__ */ __name(function(targetBoss, activeBosses, damage) {
|
|
3515
|
-
const messages = [];
|
|
3516
|
-
let targetUpdates = null;
|
|
3509
|
+
handleCosmicEnergy: /* @__PURE__ */ __name(function(targetBoss, damage) {
|
|
3517
3510
|
if (!targetBoss.skills.includes("宇宙能量")) {
|
|
3518
3511
|
return null;
|
|
3519
3512
|
}
|
|
3520
3513
|
const maxEnergy = getMaxEnergyByName(targetBoss.name);
|
|
3521
3514
|
const currentEnergy = targetBoss.energy || 0;
|
|
3522
3515
|
const energyToAdd = damage;
|
|
3523
|
-
|
|
3516
|
+
if (energyToAdd <= 0) {
|
|
3517
|
+
return null;
|
|
3518
|
+
}
|
|
3519
|
+
let energyGained = 0;
|
|
3520
|
+
let overflowHeal = 0;
|
|
3524
3521
|
if (currentEnergy + energyToAdd <= maxEnergy) {
|
|
3525
|
-
|
|
3526
|
-
messages.push(`🌌 【宇宙能量】生效:吸收伤害值,获得${energyToAdd}点能量`);
|
|
3522
|
+
energyGained = energyToAdd;
|
|
3527
3523
|
} else {
|
|
3528
|
-
|
|
3524
|
+
energyGained = maxEnergy - currentEnergy;
|
|
3525
|
+
overflowHeal = currentEnergy + energyToAdd - maxEnergy;
|
|
3526
|
+
}
|
|
3527
|
+
if (energyGained <= 0 && overflowHeal <= 0) {
|
|
3528
|
+
return null;
|
|
3529
|
+
}
|
|
3530
|
+
const messages = [];
|
|
3531
|
+
const updates = {};
|
|
3532
|
+
let messageParts = [];
|
|
3533
|
+
if (energyGained > 0) {
|
|
3534
|
+
messageParts.push(`获得${energyGained}点能量`);
|
|
3529
3535
|
updates.energyChange = energyGained;
|
|
3530
|
-
|
|
3536
|
+
}
|
|
3537
|
+
if (overflowHeal > 0) {
|
|
3538
|
+
messageParts.push(`${overflowHeal}点溢出伤害转为生命回复`);
|
|
3531
3539
|
updates.hpChange = overflowHeal;
|
|
3532
|
-
messages.push(`🌌 【宇宙能量】生效:获得${energyGained}点能量,${overflowHeal}点溢出伤害转为生命回复`);
|
|
3533
3540
|
}
|
|
3534
|
-
|
|
3535
|
-
|
|
3536
|
-
|
|
3537
|
-
};
|
|
3541
|
+
if (messageParts.length > 0) {
|
|
3542
|
+
messages.push(`🌌 【宇宙能量】生效:${messageParts.join(",")}`);
|
|
3543
|
+
}
|
|
3538
3544
|
return {
|
|
3539
3545
|
messages,
|
|
3540
|
-
targetUpdates
|
|
3546
|
+
targetUpdates: {
|
|
3547
|
+
name: targetBoss.name,
|
|
3548
|
+
updates
|
|
3549
|
+
}
|
|
3541
3550
|
};
|
|
3542
3551
|
}, "handleCosmicEnergy"),
|
|
3543
3552
|
/** 复苏处理(免疫死亡并回复) */
|
|
@@ -3566,9 +3575,8 @@ var BattleEffectProcessor = {
|
|
|
3566
3575
|
// 添加新技能
|
|
3567
3576
|
}
|
|
3568
3577
|
};
|
|
3569
|
-
messages.push(`🔥
|
|
3570
|
-
messages.push(`🔥
|
|
3571
|
-
messages.push(`🔥 获得【灵能构造炉】技能,复苏效果移除`);
|
|
3578
|
+
messages.push(`🔥 【复苏】生效:承受致命伤害时免疫死亡,回复${healAmount}点生命值和${energyGain}点能量,获得「灵能构造炉」技能`);
|
|
3579
|
+
messages.push(`🔥 【复苏】技能移除`);
|
|
3572
3580
|
return {
|
|
3573
3581
|
messages,
|
|
3574
3582
|
targetUpdates
|
|
@@ -3584,11 +3592,7 @@ var BattleEffectProcessor = {
|
|
|
3584
3592
|
}
|
|
3585
3593
|
const currentStacks = targetBoss.skillStacks || 0;
|
|
3586
3594
|
if (currentStacks >= maxStacks) {
|
|
3587
|
-
|
|
3588
|
-
return {
|
|
3589
|
-
messages,
|
|
3590
|
-
targetUpdates: null
|
|
3591
|
-
};
|
|
3595
|
+
return null;
|
|
3592
3596
|
}
|
|
3593
3597
|
targetUpdates = {
|
|
3594
3598
|
name: targetBoss.name,
|
|
@@ -3597,21 +3601,21 @@ var BattleEffectProcessor = {
|
|
|
3597
3601
|
}
|
|
3598
3602
|
};
|
|
3599
3603
|
const newStacks = currentStacks + 1;
|
|
3600
|
-
messages.push(`✨
|
|
3604
|
+
messages.push(`✨ 【光影之刃】生效:获得1层「光影之刃」`);
|
|
3601
3605
|
return {
|
|
3602
3606
|
messages,
|
|
3603
3607
|
targetUpdates
|
|
3604
3608
|
};
|
|
3605
3609
|
}, "handleBladeOfLight"),
|
|
3606
3610
|
/** 远古预兆处理(概率免疫能量伤害)- 增加boost参数 */
|
|
3607
|
-
handleAncientOmen: /* @__PURE__ */ __name(function(targetBoss, weaponData, boost
|
|
3611
|
+
handleAncientOmen: /* @__PURE__ */ __name(function(targetBoss, weaponData, boost) {
|
|
3608
3612
|
const messages = [];
|
|
3609
3613
|
let isImmune = false;
|
|
3610
3614
|
let targetUpdates = null;
|
|
3611
3615
|
if (!targetBoss.skills.includes("远古预兆")) {
|
|
3612
3616
|
return null;
|
|
3613
3617
|
}
|
|
3614
|
-
if (weaponData.type
|
|
3618
|
+
if (weaponData.type === "热能武器") {
|
|
3615
3619
|
return null;
|
|
3616
3620
|
}
|
|
3617
3621
|
const baseProbability = 0.01;
|
|
@@ -3628,8 +3632,7 @@ var BattleEffectProcessor = {
|
|
|
3628
3632
|
// 回复100点能量
|
|
3629
3633
|
}
|
|
3630
3634
|
};
|
|
3631
|
-
messages.push(`🔮
|
|
3632
|
-
messages.push(`🔮 回复${energyGained}点能量`);
|
|
3635
|
+
messages.push(`🔮 【远古预兆】触发:${(actualProbability * 100).toFixed(2)}%概率免疫非热能武器伤害,并回复${energyGained}点能量`);
|
|
3633
3636
|
return {
|
|
3634
3637
|
isImmune,
|
|
3635
3638
|
messages,
|
|
@@ -3650,8 +3653,7 @@ var BattleEffectProcessor = {
|
|
|
3650
3653
|
ancientOmenBoost = totalBoost;
|
|
3651
3654
|
psychicForgeBoost = totalBoost;
|
|
3652
3655
|
if (totalBoost > 0) {
|
|
3653
|
-
messages.push(`⚡
|
|
3654
|
-
messages.push(` → 当前${lightBladeStacks}层,远古预兆+${(ancientOmenBoost * 100).toFixed(1)}%,灵能构造炉+${(psychicForgeBoost * 100).toFixed(1)}%`);
|
|
3656
|
+
messages.push(`⚡ 【闪电冲锋】生效:「光影之刃」当前${lightBladeStacks}层,「远古预兆」触发概率+${(ancientOmenBoost * 100).toFixed(1)}%,「灵能构造炉」触发概率+${(psychicForgeBoost * 100).toFixed(1)}%`);
|
|
3655
3657
|
}
|
|
3656
3658
|
return { ancientOmenBoost, psychicForgeBoost, messages };
|
|
3657
3659
|
}, "handleLightningCharge"),
|
|
@@ -3668,13 +3670,13 @@ var BattleEffectProcessor = {
|
|
|
3668
3670
|
const energyPercent = currentEnergy / maxEnergy;
|
|
3669
3671
|
if (energyPercent >= 0.6) {
|
|
3670
3672
|
nerfMultiplier = targetBoss.skillStacks * 0.1;
|
|
3671
|
-
messages.push(`🚀
|
|
3673
|
+
messages.push(`🚀 【超视距穿梭】生效:能量值≥60%,受到的伤害-${(nerfMultiplier * 100).toFixed(0)}%`);
|
|
3672
3674
|
} else if (energyPercent >= 0.3) {
|
|
3673
3675
|
nerfMultiplier = targetBoss.skillStacks * 0.05;
|
|
3674
|
-
messages.push(`🚀
|
|
3676
|
+
messages.push(`🚀 【超视距穿梭】生效:能量值≥30%,受到的伤害-${(nerfMultiplier * 100).toFixed(0)}%`);
|
|
3675
3677
|
} else if (energyPercent <= 0.1) {
|
|
3676
3678
|
buffMultiplier = targetBoss.skillStacks * 0.05;
|
|
3677
|
-
messages.push(`🚀
|
|
3679
|
+
messages.push(`🚀 【超视距穿梭】生效:能量值≤10%,受到的伤害+${(buffMultiplier * 100).toFixed(0)}%`);
|
|
3678
3680
|
}
|
|
3679
3681
|
return { nerfMultiplier, buffMultiplier, messages };
|
|
3680
3682
|
}, "handleHyperRangeShift"),
|
|
@@ -3710,7 +3712,7 @@ var BattleEffectProcessor = {
|
|
|
3710
3712
|
skillsAdded: [newSkill]
|
|
3711
3713
|
}
|
|
3712
3714
|
};
|
|
3713
|
-
messages.push(`⚙️
|
|
3715
|
+
messages.push(`⚙️ 【灵能构造炉】触发:${(actualProbability * 100).toFixed(2)}%概率获得新技能「${newSkill}」`);
|
|
3714
3716
|
return {
|
|
3715
3717
|
messages,
|
|
3716
3718
|
newSkill,
|
|
@@ -3724,7 +3726,7 @@ var BattleEffectProcessor = {
|
|
|
3724
3726
|
if (!targetBoss.skills.includes("天启超载护盾")) {
|
|
3725
3727
|
return null;
|
|
3726
3728
|
}
|
|
3727
|
-
if (Math.random() >= 0.
|
|
3729
|
+
if (Math.random() >= 0.1) {
|
|
3728
3730
|
return null;
|
|
3729
3731
|
}
|
|
3730
3732
|
const baseHealAmount = (targetBoss.skillStacks || 0) * 10;
|
|
@@ -3737,9 +3739,8 @@ var BattleEffectProcessor = {
|
|
|
3737
3739
|
updates: { hpChange: baseHealAmount }
|
|
3738
3740
|
});
|
|
3739
3741
|
}
|
|
3740
|
-
messages.push(`🛡️
|
|
3742
|
+
messages.push(`🛡️ 【天启超载护盾】触发:为「${bossName}」回复${baseHealAmount}点生命值`);
|
|
3741
3743
|
});
|
|
3742
|
-
messages.unshift(`🛡️ 【天启超载护盾】生效:5%概率触发,为所有存活异形回复生命值`);
|
|
3743
3744
|
return {
|
|
3744
3745
|
messages,
|
|
3745
3746
|
otherUpdates
|
|
@@ -3755,11 +3756,7 @@ var BattleEffectProcessor = {
|
|
|
3755
3756
|
}
|
|
3756
3757
|
const currentStacks = targetBoss.skillStacks || 0;
|
|
3757
3758
|
if (currentStacks >= maxStacks) {
|
|
3758
|
-
|
|
3759
|
-
return {
|
|
3760
|
-
messages,
|
|
3761
|
-
targetUpdates: null
|
|
3762
|
-
};
|
|
3759
|
+
return null;
|
|
3763
3760
|
}
|
|
3764
3761
|
targetUpdates = {
|
|
3765
3762
|
name: targetBoss.name,
|
|
@@ -3768,7 +3765,7 @@ var BattleEffectProcessor = {
|
|
|
3768
3765
|
}
|
|
3769
3766
|
};
|
|
3770
3767
|
const newStacks = currentStacks + 1;
|
|
3771
|
-
messages.push(`🌀
|
|
3768
|
+
messages.push(`🌀 【塌缩脉冲】生效:额外获得1层「光影之刃」`);
|
|
3772
3769
|
return {
|
|
3773
3770
|
messages,
|
|
3774
3771
|
targetUpdates
|
|
@@ -3782,8 +3779,8 @@ var BattleEffectProcessor = {
|
|
|
3782
3779
|
return null;
|
|
3783
3780
|
}
|
|
3784
3781
|
nerfMultiplier = 1;
|
|
3785
|
-
messages.push(`💣
|
|
3786
|
-
return { nerfMultiplier, messages };
|
|
3782
|
+
messages.push(`💣 【地毯式轰炸】生效:受到的伤害-100%`);
|
|
3783
|
+
return { nerfMultiplier, messages, tempMark: true };
|
|
3787
3784
|
}, "handleCarpetBombing"),
|
|
3788
3785
|
/** 轰炸引导处理(层数相关能量回复) */
|
|
3789
3786
|
handleBombardmentGuide: /* @__PURE__ */ __name(function(targetBoss) {
|
|
@@ -3792,7 +3789,7 @@ var BattleEffectProcessor = {
|
|
|
3792
3789
|
if (!targetBoss.skills.includes("轰炸引导")) {
|
|
3793
3790
|
return null;
|
|
3794
3791
|
}
|
|
3795
|
-
if (Math.random() >= 0.
|
|
3792
|
+
if (Math.random() >= 0.1) {
|
|
3796
3793
|
return null;
|
|
3797
3794
|
}
|
|
3798
3795
|
const currentStacks = targetBoss.skillStacks || 0;
|
|
@@ -3803,7 +3800,7 @@ var BattleEffectProcessor = {
|
|
|
3803
3800
|
energyChange: energyGained
|
|
3804
3801
|
}
|
|
3805
3802
|
};
|
|
3806
|
-
messages.push(`🎯
|
|
3803
|
+
messages.push(`🎯 【轰炸引导】触发:当前${currentStacks}层「光影之刃」,获得${energyGained}点能量`);
|
|
3807
3804
|
return {
|
|
3808
3805
|
messages,
|
|
3809
3806
|
targetUpdates
|
|
@@ -3817,9 +3814,9 @@ var BattleEffectProcessor = {
|
|
|
3817
3814
|
const effectiveLayers = Math.min(currentLayers, 20);
|
|
3818
3815
|
const buffMultiplier = effectiveLayers * 0.025;
|
|
3819
3816
|
if (effectiveLayers > 0) {
|
|
3820
|
-
messages.push(`☢️ 【辐射增伤】:当前${currentLayers}
|
|
3817
|
+
messages.push(`☢️ 【辐射增伤】:当前${currentLayers}层,受到的伤害+${(effectiveLayers * 2.5).toFixed(1)}%`);
|
|
3821
3818
|
if (currentLayers > 20) {
|
|
3822
|
-
messages.push(`☢️ 注意:超过20
|
|
3819
|
+
messages.push(`☢️ 注意:超过20层的辐射不会提供额外增伤`);
|
|
3823
3820
|
}
|
|
3824
3821
|
}
|
|
3825
3822
|
let targetUpdates = null;
|
|
@@ -3834,7 +3831,7 @@ var BattleEffectProcessor = {
|
|
|
3834
3831
|
}
|
|
3835
3832
|
};
|
|
3836
3833
|
const newLayers = currentLayers + 1;
|
|
3837
|
-
messages.push(`☢️
|
|
3834
|
+
messages.push(`☢️ 【伽马枪】武器效果:获得1层「辐射」`);
|
|
3838
3835
|
layerAdded = true;
|
|
3839
3836
|
}
|
|
3840
3837
|
return {
|
|
@@ -3853,9 +3850,9 @@ var BattleEffectProcessor = {
|
|
|
3853
3850
|
const effectiveLayers = Math.min(currentLayers, 20);
|
|
3854
3851
|
const buffMultiplier = effectiveLayers * 0.025;
|
|
3855
3852
|
if (effectiveLayers > 0) {
|
|
3856
|
-
messages.push(`❄️ 【寒冷增伤】:当前${currentLayers}
|
|
3853
|
+
messages.push(`❄️ 【寒冷增伤】:当前${currentLayers}层,受到的伤害+${(effectiveLayers * 2.5).toFixed(1)}%`);
|
|
3857
3854
|
if (currentLayers > 20) {
|
|
3858
|
-
messages.push(`❄️ 注意:超过20
|
|
3855
|
+
messages.push(`❄️ 注意:超过20层的寒冷不会提供额外增伤`);
|
|
3859
3856
|
}
|
|
3860
3857
|
}
|
|
3861
3858
|
let targetUpdates = null;
|
|
@@ -3868,7 +3865,7 @@ var BattleEffectProcessor = {
|
|
|
3868
3865
|
}
|
|
3869
3866
|
};
|
|
3870
3867
|
const newLayers = currentLayers + 1;
|
|
3871
|
-
messages.push(
|
|
3868
|
+
messages.push(`❄️【零度之下】武器效果: 获得1层「寒冷」`);
|
|
3872
3869
|
layerAdded = true;
|
|
3873
3870
|
}
|
|
3874
3871
|
return {
|
|
@@ -3903,7 +3900,7 @@ var BattleEffectProcessor = {
|
|
|
3903
3900
|
}
|
|
3904
3901
|
const weaponDisplayName = weaponName === "弧焊枪" ? "弧焊枪" : "DG-3电弧步枪";
|
|
3905
3902
|
if (success) {
|
|
3906
|
-
messages.push(`⚡ 【${weaponDisplayName}
|
|
3903
|
+
messages.push(`⚡ 【${weaponDisplayName}】武器效果:消耗${drainValue}点能量`);
|
|
3907
3904
|
}
|
|
3908
3905
|
return {
|
|
3909
3906
|
messages,
|
|
@@ -3934,7 +3931,7 @@ var BattleEffectProcessor = {
|
|
|
3934
3931
|
};
|
|
3935
3932
|
}
|
|
3936
3933
|
if (reductionSuccess) {
|
|
3937
|
-
messages.push(`⚡ 【${weaponName}
|
|
3934
|
+
messages.push(`⚡ 【${weaponName}】武器效果:技能层数减少${reductionAmount}层`);
|
|
3938
3935
|
}
|
|
3939
3936
|
return {
|
|
3940
3937
|
messages,
|
|
@@ -3957,178 +3954,192 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
|
|
|
3957
3954
|
let ancientOmenBoost = 0;
|
|
3958
3955
|
let psychicForgeBoost = 0;
|
|
3959
3956
|
let doubleAstralWind = false;
|
|
3957
|
+
let isolatedImmunityMark = false;
|
|
3958
|
+
const processEffect = /* @__PURE__ */ __name((effect, ...args) => {
|
|
3959
|
+
const result = effect(...args);
|
|
3960
|
+
if (!result) return null;
|
|
3961
|
+
messages.push(...result.messages || []);
|
|
3962
|
+
if (result.targetUpdates) {
|
|
3963
|
+
updateStatsByName(result.targetUpdates.name, result.targetUpdates.updates);
|
|
3964
|
+
}
|
|
3965
|
+
if (result.otherUpdates) {
|
|
3966
|
+
for (const update of result.otherUpdates) {
|
|
3967
|
+
updateStatsByName(update.name, update.updates);
|
|
3968
|
+
}
|
|
3969
|
+
}
|
|
3970
|
+
return result;
|
|
3971
|
+
}, "processEffect");
|
|
3960
3972
|
const lightningResult = BattleEffectProcessor.handleLightningCharge(targetBoss);
|
|
3961
3973
|
if (lightningResult) {
|
|
3974
|
+
ancientOmenBoost = lightningResult.ancientOmenBoost || 0;
|
|
3975
|
+
psychicForgeBoost = lightningResult.psychicForgeBoost || 0;
|
|
3962
3976
|
messages.push(...lightningResult.messages);
|
|
3963
|
-
ancientOmenBoost += lightningResult.ancientOmenBoost || 0;
|
|
3964
|
-
psychicForgeBoost += lightningResult.psychicForgeBoost || 0;
|
|
3965
3977
|
}
|
|
3966
3978
|
const coldImmuneEffects = [
|
|
3967
|
-
|
|
3968
|
-
|
|
3969
|
-
|
|
3979
|
+
{
|
|
3980
|
+
effect: BattleEffectProcessor.handleFrostEvolution,
|
|
3981
|
+
args: [targetBoss, weaponName, damage]
|
|
3982
|
+
},
|
|
3983
|
+
{
|
|
3984
|
+
effect: BattleEffectProcessor.handleColdAdaptation,
|
|
3985
|
+
args: [targetBoss, weaponName]
|
|
3986
|
+
}
|
|
3970
3987
|
];
|
|
3971
3988
|
const fireImmuneEffects = [
|
|
3972
|
-
|
|
3989
|
+
{
|
|
3990
|
+
effect: BattleEffectProcessor.handleFlameAlien,
|
|
3991
|
+
args: [targetBoss, weaponName, damage]
|
|
3992
|
+
}
|
|
3973
3993
|
];
|
|
3974
|
-
|
|
3975
|
-
|
|
3976
|
-
|
|
3977
|
-
|
|
3978
|
-
|
|
3979
|
-
|
|
3980
|
-
|
|
3981
|
-
|
|
3982
|
-
|
|
3983
|
-
|
|
3994
|
+
const chanceImmuneEffects = [
|
|
3995
|
+
{
|
|
3996
|
+
effect: BattleEffectProcessor.handleDeadlyHit,
|
|
3997
|
+
args: [targetBoss]
|
|
3998
|
+
},
|
|
3999
|
+
{
|
|
4000
|
+
effect: BattleEffectProcessor.handleElectricField,
|
|
4001
|
+
args: [targetBoss, weaponData]
|
|
4002
|
+
},
|
|
4003
|
+
{
|
|
4004
|
+
effect: BattleEffectProcessor.handleAncientOmen,
|
|
4005
|
+
args: [targetBoss, weaponData, ancientOmenBoost]
|
|
3984
4006
|
}
|
|
4007
|
+
];
|
|
4008
|
+
const allImmuneEffects = [...coldImmuneEffects, ...fireImmuneEffects, ...chanceImmuneEffects];
|
|
4009
|
+
for (const immuneEffect of allImmuneEffects) {
|
|
4010
|
+
const result = processEffect(immuneEffect.effect, ...immuneEffect.args);
|
|
4011
|
+
if (result?.isImmune) immune = true;
|
|
3985
4012
|
}
|
|
3986
|
-
|
|
3987
|
-
|
|
3988
|
-
|
|
3989
|
-
|
|
3990
|
-
|
|
3991
|
-
|
|
3992
|
-
|
|
3993
|
-
updateStatsByName(result.targetUpdates.name, result.targetUpdates.updates);
|
|
3994
|
-
}
|
|
3995
|
-
}
|
|
4013
|
+
const solarFlareResult = BattleEffectProcessor.handleSolarFlare(targetBoss, weaponName, activeBosses);
|
|
4014
|
+
if (solarFlareResult) {
|
|
4015
|
+
isolatedImmunityMark = solarFlareResult.tempMark || false;
|
|
4016
|
+
if (solarFlareResult.isImmune) immune = true;
|
|
4017
|
+
messages.push(...solarFlareResult.messages);
|
|
4018
|
+
if (solarFlareResult.targetUpdates) {
|
|
4019
|
+
updateStatsByName(solarFlareResult.targetUpdates.name, solarFlareResult.targetUpdates.updates);
|
|
3996
4020
|
}
|
|
3997
4021
|
}
|
|
3998
|
-
const
|
|
3999
|
-
|
|
4000
|
-
|
|
4001
|
-
|
|
4002
|
-
|
|
4003
|
-
for (const effect of chanceImmuneEffects) {
|
|
4004
|
-
if (effect === BattleEffectProcessor.handleAncientOmen) {
|
|
4005
|
-
const result = effect(targetBoss, weaponData, ancientOmenBoost);
|
|
4006
|
-
if (result && result.isImmune) {
|
|
4007
|
-
immune = true;
|
|
4008
|
-
messages.push(...result.messages);
|
|
4009
|
-
if (result.targetUpdates) {
|
|
4010
|
-
updateStatsByName(result.targetUpdates.name, result.targetUpdates.updates);
|
|
4011
|
-
}
|
|
4012
|
-
}
|
|
4013
|
-
} else {
|
|
4014
|
-
const result = effect(targetBoss, weaponData);
|
|
4015
|
-
if (result && result.isImmune) {
|
|
4016
|
-
immune = true;
|
|
4017
|
-
messages.push(...result.messages);
|
|
4018
|
-
}
|
|
4022
|
+
const carpetBombResult = processEffect(BattleEffectProcessor.handleCarpetBombing, targetBoss);
|
|
4023
|
+
if (carpetBombResult) {
|
|
4024
|
+
isolatedImmunityMark = carpetBombResult.tempMark || false;
|
|
4025
|
+
if (carpetBombResult.nerfMultiplier) {
|
|
4026
|
+
totalNerfMultiplier += carpetBombResult.nerfMultiplier;
|
|
4019
4027
|
}
|
|
4028
|
+
messages.push(...carpetBombResult.messages);
|
|
4020
4029
|
}
|
|
4021
4030
|
const damageAdjustEffects = [
|
|
4022
|
-
|
|
4023
|
-
BattleEffectProcessor.
|
|
4024
|
-
BattleEffectProcessor.
|
|
4025
|
-
BattleEffectProcessor.handleFrostHell,
|
|
4026
|
-
BattleEffectProcessor.handleStressShellI,
|
|
4027
|
-
BattleEffectProcessor.handleStressShellII,
|
|
4028
|
-
BattleEffectProcessor.
|
|
4029
|
-
BattleEffectProcessor.
|
|
4030
|
-
BattleEffectProcessor.
|
|
4031
|
-
BattleEffectProcessor.
|
|
4032
|
-
|
|
4033
|
-
BattleEffectProcessor.
|
|
4034
|
-
BattleEffectProcessor.
|
|
4035
|
-
|
|
4036
|
-
BattleEffectProcessor.
|
|
4037
|
-
BattleEffectProcessor.
|
|
4038
|
-
BattleEffectProcessor.handleInfernalBomb,
|
|
4039
|
-
BattleEffectProcessor.handleHunterAlien,
|
|
4040
|
-
BattleEffectProcessor.handleRampage,
|
|
4041
|
-
BattleEffectProcessor.
|
|
4042
|
-
BattleEffectProcessor.handleHyperRangeShift,
|
|
4043
|
-
BattleEffectProcessor.handleCarpetBombing
|
|
4031
|
+
// 单参数效果
|
|
4032
|
+
{ effect: BattleEffectProcessor.handleWeakForm, args: [targetBoss] },
|
|
4033
|
+
{ effect: BattleEffectProcessor.handleAlienShell, args: [targetBoss] },
|
|
4034
|
+
{ effect: BattleEffectProcessor.handleFrostHell, args: [targetBoss] },
|
|
4035
|
+
{ effect: BattleEffectProcessor.handleStressShellI, args: [targetBoss] },
|
|
4036
|
+
{ effect: BattleEffectProcessor.handleStressShellII, args: [targetBoss] },
|
|
4037
|
+
{ effect: BattleEffectProcessor.handleVirusCloud, args: [targetBoss] },
|
|
4038
|
+
{ effect: BattleEffectProcessor.handleEnergyBlackhole, args: [targetBoss] },
|
|
4039
|
+
{ effect: BattleEffectProcessor.handleColossalRampage, args: [targetBoss] },
|
|
4040
|
+
{ effect: BattleEffectProcessor.handleVomit, args: [targetBoss] },
|
|
4041
|
+
// 双参数效果
|
|
4042
|
+
{ effect: BattleEffectProcessor.handleStructuralArmor, args: [targetBoss, weaponData] },
|
|
4043
|
+
{ effect: BattleEffectProcessor.handleDisguise, args: [targetBoss, weaponName] },
|
|
4044
|
+
// 多参数效果
|
|
4045
|
+
{ effect: BattleEffectProcessor.handleIsolated, args: [targetBoss, activeBosses, isolatedImmunityMark] },
|
|
4046
|
+
{ effect: BattleEffectProcessor.handleInfectedSpaceStation, args: [targetBoss, activeBosses] },
|
|
4047
|
+
{ effect: BattleEffectProcessor.handleInfernalBomb, args: [targetBoss, activeBosses] },
|
|
4048
|
+
{ effect: BattleEffectProcessor.handleHunterAlien, args: [targetBoss, activeBosses, weaponName] },
|
|
4049
|
+
{ effect: BattleEffectProcessor.handleRampage, args: [targetBoss, activeBosses] },
|
|
4050
|
+
{ effect: BattleEffectProcessor.handleHyperRangeShift, args: [targetBoss] }
|
|
4044
4051
|
];
|
|
4045
|
-
for (const
|
|
4046
|
-
|
|
4047
|
-
if (effect === BattleEffectProcessor.handleIsolated || effect === BattleEffectProcessor.handleInfectedSpaceStation || effect === BattleEffectProcessor.handleInfernalBomb || effect === BattleEffectProcessor.handleHunterAlien) {
|
|
4048
|
-
result = effect(targetBoss, activeBosses, weaponName);
|
|
4049
|
-
} else if (effect === BattleEffectProcessor.handleStructuralArmor) {
|
|
4050
|
-
result = effect(targetBoss, weaponData);
|
|
4051
|
-
} else if (effect === BattleEffectProcessor.handleBloodlust || effect === BattleEffectProcessor.handleVampireSaliva || effect === BattleEffectProcessor.handleHyperRangeShift) {
|
|
4052
|
-
result = effect(targetBoss, activeBosses);
|
|
4053
|
-
} else {
|
|
4054
|
-
result = effect(targetBoss, activeBosses, weaponName);
|
|
4055
|
-
}
|
|
4052
|
+
for (const effectItem of damageAdjustEffects) {
|
|
4053
|
+
const result = processEffect(effectItem.effect, ...effectItem.args);
|
|
4056
4054
|
if (result) {
|
|
4057
|
-
|
|
4058
|
-
if (result.
|
|
4059
|
-
|
|
4060
|
-
}
|
|
4061
|
-
if (result.nerfMultiplier !== void 0 && typeof result.nerfMultiplier === "number") {
|
|
4062
|
-
totalNerfMultiplier += result.nerfMultiplier;
|
|
4063
|
-
}
|
|
4055
|
+
if (result.buffMultiplier !== void 0) totalBuffMultiplier += result.buffMultiplier;
|
|
4056
|
+
if (result.nerfMultiplier !== void 0) totalNerfMultiplier += result.nerfMultiplier;
|
|
4057
|
+
bileDetonationTrigger ||= result.bileDetonationTrigger === true;
|
|
4064
4058
|
}
|
|
4065
4059
|
}
|
|
4066
|
-
const
|
|
4067
|
-
|
|
4068
|
-
|
|
4069
|
-
|
|
4060
|
+
const mindFrenzyResult = BattleEffectProcessor.handleMindFrenzy(targetBoss);
|
|
4061
|
+
if (mindFrenzyResult) {
|
|
4062
|
+
messages.push(...mindFrenzyResult.messages);
|
|
4063
|
+
if (mindFrenzyResult.nerfMultiplier) {
|
|
4064
|
+
totalNerfMultiplier += mindFrenzyResult.nerfMultiplier;
|
|
4065
|
+
}
|
|
4066
|
+
doubleAstralWind = mindFrenzyResult.doubleAstralWind || false;
|
|
4067
|
+
}
|
|
4068
|
+
const layerDependentEffects = [
|
|
4069
|
+
{ effect: BattleEffectProcessor.handleVampireSaliva, args: [targetBoss] },
|
|
4070
|
+
{ effect: BattleEffectProcessor.handleBloodlust, args: [targetBoss] },
|
|
4071
|
+
{ effect: BattleEffectProcessor.handleBladeOfLight, args: [targetBoss] },
|
|
4072
|
+
{ effect: BattleEffectProcessor.handleCollapsingPulse, args: [targetBoss] }
|
|
4070
4073
|
];
|
|
4071
|
-
for (const
|
|
4072
|
-
const result = effect
|
|
4074
|
+
for (const effectItem of layerDependentEffects) {
|
|
4075
|
+
const result = processEffect(effectItem.effect, ...effectItem.args);
|
|
4073
4076
|
if (result) {
|
|
4074
|
-
|
|
4075
|
-
if (result.
|
|
4076
|
-
updateStatsByName(result.targetUpdates.name, result.targetUpdates.updates);
|
|
4077
|
-
}
|
|
4077
|
+
if (result.buffMultiplier !== void 0) totalBuffMultiplier += result.buffMultiplier;
|
|
4078
|
+
if (result.nerfMultiplier !== void 0) totalNerfMultiplier += result.nerfMultiplier;
|
|
4078
4079
|
}
|
|
4079
4080
|
}
|
|
4081
|
+
const stateChangeEffects = [
|
|
4082
|
+
{ effect: BattleEffectProcessor.handleSuperconductor, args: [targetBoss] }
|
|
4083
|
+
];
|
|
4084
|
+
for (const effectItem of stateChangeEffects) {
|
|
4085
|
+
processEffect(effectItem.effect, ...effectItem.args);
|
|
4086
|
+
}
|
|
4087
|
+
const healingEffects = [
|
|
4088
|
+
{ effect: BattleEffectProcessor.handleFrostRegeneration, args: [targetBoss, activeBosses] },
|
|
4089
|
+
{ effect: BattleEffectProcessor.handleFrostAura, args: [targetBoss, activeBosses] },
|
|
4090
|
+
{ effect: BattleEffectProcessor.handleSentryGun, args: [targetBoss, activeBosses] },
|
|
4091
|
+
{ effect: BattleEffectProcessor.handleSurvivalInstinctI, args: [targetBoss] },
|
|
4092
|
+
{ effect: BattleEffectProcessor.handleSurvivalInstinctII, args: [targetBoss] },
|
|
4093
|
+
{ effect: BattleEffectProcessor.handleMoldGrowth, args: [targetBoss, activeBosses] },
|
|
4094
|
+
{ effect: BattleEffectProcessor.handleElectricShockwave, args: [targetBoss] },
|
|
4095
|
+
{ effect: BattleEffectProcessor.handlePulse, args: [targetBoss, activeBosses] },
|
|
4096
|
+
{ effect: BattleEffectProcessor.handleFeeding, args: [targetBoss] },
|
|
4097
|
+
{ effect: BattleEffectProcessor.handleBurningBurrow, args: [targetBoss] },
|
|
4098
|
+
{ effect: BattleEffectProcessor.handleRevival, args: [targetBoss] },
|
|
4099
|
+
{ effect: BattleEffectProcessor.handleCosmicEnergy, args: [targetBoss, damage] },
|
|
4100
|
+
{ effect: BattleEffectProcessor.handleBombardmentGuide, args: [targetBoss] },
|
|
4101
|
+
{ effect: BattleEffectProcessor.handleOverdriveShield, args: [targetBoss, activeBosses] }
|
|
4102
|
+
];
|
|
4103
|
+
for (const effectItem of healingEffects) {
|
|
4104
|
+
processEffect(effectItem.effect, ...effectItem.args);
|
|
4105
|
+
}
|
|
4080
4106
|
const burningSlimeResult = BattleEffectProcessor.handleBurningSlime(targetBoss, weaponName);
|
|
4081
4107
|
if (burningSlimeResult) {
|
|
4082
4108
|
messages.push(...burningSlimeResult.messages);
|
|
4083
4109
|
if (burningSlimeResult.targetUpdates) {
|
|
4084
4110
|
updateStatsByName(burningSlimeResult.targetUpdates.name, burningSlimeResult.targetUpdates.updates);
|
|
4085
4111
|
}
|
|
4086
|
-
bileDetonationTrigger = burningSlimeResult.isHighStackHeal;
|
|
4112
|
+
bileDetonationTrigger = burningSlimeResult.isHighStackHeal || false;
|
|
4087
4113
|
}
|
|
4088
|
-
const
|
|
4089
|
-
BattleEffectProcessor.
|
|
4090
|
-
BattleEffectProcessor.
|
|
4091
|
-
BattleEffectProcessor.handleSurvivalInstinctI,
|
|
4092
|
-
BattleEffectProcessor.handleSurvivalInstinctII,
|
|
4093
|
-
BattleEffectProcessor.handleSentryGun,
|
|
4094
|
-
BattleEffectProcessor.handleFeeding,
|
|
4095
|
-
BattleEffectProcessor.handleMoldGrowth,
|
|
4096
|
-
BattleEffectProcessor.handleElectricShockwave,
|
|
4097
|
-
BattleEffectProcessor.handlePulse,
|
|
4098
|
-
BattleEffectProcessor.handleCorrosiveBile,
|
|
4099
|
-
BattleEffectProcessor.handleFlameBreath,
|
|
4100
|
-
BattleEffectProcessor.handleBurningBurrow,
|
|
4101
|
-
BattleEffectProcessor.handleRevival,
|
|
4102
|
-
BattleEffectProcessor.handleCosmicEnergy,
|
|
4103
|
-
BattleEffectProcessor.handleBombardmentGuide,
|
|
4104
|
-
BattleEffectProcessor.handleOverdriveShield
|
|
4114
|
+
const bileEffects = [
|
|
4115
|
+
{ effect: BattleEffectProcessor.handleCorrosiveBile, args: [targetBoss, activeBosses] },
|
|
4116
|
+
{ effect: BattleEffectProcessor.handleFlameBreath, args: [targetBoss, activeBosses] }
|
|
4105
4117
|
];
|
|
4106
|
-
for (const
|
|
4107
|
-
|
|
4108
|
-
|
|
4109
|
-
|
|
4110
|
-
|
|
4111
|
-
|
|
4112
|
-
|
|
4113
|
-
|
|
4114
|
-
|
|
4115
|
-
|
|
4116
|
-
|
|
4117
|
-
|
|
4118
|
-
updateStatsByName(
|
|
4119
|
-
}
|
|
4120
|
-
if (result.otherUpdates) {
|
|
4121
|
-
for (const update of result.otherUpdates) {
|
|
4122
|
-
updateStatsByName(update.name, update.updates);
|
|
4123
|
-
}
|
|
4118
|
+
for (const effectItem of bileEffects) {
|
|
4119
|
+
processEffect(effectItem.effect, ...effectItem.args);
|
|
4120
|
+
}
|
|
4121
|
+
const astralWindResult = BattleEffectProcessor.handleAstralWind(
|
|
4122
|
+
targetBoss,
|
|
4123
|
+
activeBosses,
|
|
4124
|
+
doubleAstralWind
|
|
4125
|
+
);
|
|
4126
|
+
if (astralWindResult) {
|
|
4127
|
+
messages.push(...astralWindResult.messages);
|
|
4128
|
+
if (astralWindResult.otherUpdates) {
|
|
4129
|
+
for (const update of astralWindResult.otherUpdates) {
|
|
4130
|
+
updateStatsByName(update.name, update.updates);
|
|
4124
4131
|
}
|
|
4125
4132
|
}
|
|
4126
4133
|
}
|
|
4127
|
-
const
|
|
4128
|
-
|
|
4129
|
-
|
|
4130
|
-
|
|
4131
|
-
|
|
4134
|
+
const psychicForgeResult = BattleEffectProcessor.handlePsychicForge(
|
|
4135
|
+
targetBoss,
|
|
4136
|
+
psychicForgeBoost
|
|
4137
|
+
);
|
|
4138
|
+
if (psychicForgeResult) {
|
|
4139
|
+
messages.push(...psychicForgeResult.messages);
|
|
4140
|
+
if (psychicForgeResult.targetUpdates) {
|
|
4141
|
+
updateStatsByName(psychicForgeResult.targetUpdates.name, psychicForgeResult.targetUpdates.updates);
|
|
4142
|
+
}
|
|
4132
4143
|
}
|
|
4133
4144
|
const radiationResult = BattleEffectProcessor.handleRadiationEffect(targetBoss, weaponName);
|
|
4134
4145
|
if (radiationResult) {
|
|
@@ -4158,7 +4169,7 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
|
|
|
4158
4169
|
if (energyDrainResult.targetUpdates) {
|
|
4159
4170
|
updateStatsByName(energyDrainResult.targetUpdates.name, energyDrainResult.targetUpdates.updates);
|
|
4160
4171
|
}
|
|
4161
|
-
energyDrained = energyDrainResult.success;
|
|
4172
|
+
energyDrained = energyDrainResult.success || false;
|
|
4162
4173
|
}
|
|
4163
4174
|
const layerReduceResult = BattleEffectProcessor.handleWeaponLayerReduction(targetBoss, weaponName);
|
|
4164
4175
|
if (layerReduceResult) {
|
|
@@ -4166,48 +4177,19 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
|
|
|
4166
4177
|
if (layerReduceResult.targetUpdates) {
|
|
4167
4178
|
updateStatsByName(layerReduceResult.targetUpdates.name, layerReduceResult.targetUpdates.updates);
|
|
4168
4179
|
}
|
|
4169
|
-
layerReduced = layerReduceResult.reductionSuccess;
|
|
4170
|
-
}
|
|
4171
|
-
const astralWindResult = BattleEffectProcessor.handleAstralWind(targetBoss, activeBosses, doubleAstralWind);
|
|
4172
|
-
if (astralWindResult) {
|
|
4173
|
-
messages.push(...astralWindResult.messages);
|
|
4174
|
-
if (astralWindResult.otherUpdates) {
|
|
4175
|
-
for (const update of astralWindResult.otherUpdates) {
|
|
4176
|
-
updateStatsByName(update.name, update.updates);
|
|
4177
|
-
}
|
|
4178
|
-
}
|
|
4179
|
-
}
|
|
4180
|
-
const psychicForgeResult = BattleEffectProcessor.handlePsychicForge(targetBoss, psychicForgeBoost);
|
|
4181
|
-
if (psychicForgeResult) {
|
|
4182
|
-
messages.push(...psychicForgeResult.messages);
|
|
4183
|
-
if (psychicForgeResult.targetUpdates) {
|
|
4184
|
-
updateStatsByName(psychicForgeResult.targetUpdates.name, psychicForgeResult.targetUpdates.updates);
|
|
4185
|
-
}
|
|
4180
|
+
layerReduced = layerReduceResult.reductionSuccess || false;
|
|
4186
4181
|
}
|
|
4187
4182
|
let finalDamage = damage;
|
|
4188
4183
|
if (!immune) {
|
|
4189
4184
|
let adjustedNerfMultiplier = totalNerfMultiplier * (1 - ignoreRate);
|
|
4190
|
-
if (ignoreRate > 0 && totalNerfMultiplier > 0) {
|
|
4191
|
-
messages.push(`🗡️ 无视减伤: 无视了${(ignoreRate * 100).toFixed(1)}%减伤效果`);
|
|
4192
|
-
messages.push(` 减伤系数由${(totalNerfMultiplier * 100).toFixed(1)}%降低至${(adjustedNerfMultiplier * 100).toFixed(1)}%`);
|
|
4193
|
-
}
|
|
4194
4185
|
const damageMultiplier = 1 + totalBuffMultiplier - adjustedNerfMultiplier;
|
|
4195
4186
|
finalDamage = Math.max(1, Math.round(damage * damageMultiplier));
|
|
4196
|
-
if (damage !== finalDamage) {
|
|
4197
|
-
const adjustmentPercent = ((damageMultiplier - 1) * 100).toFixed(1);
|
|
4198
|
-
if (damageMultiplier > 1) {
|
|
4199
|
-
messages.push(`⚔️ 伤害增益: 总计增加${adjustmentPercent}%伤害`);
|
|
4200
|
-
} else if (damageMultiplier < 1) {
|
|
4201
|
-
messages.push(`🛡️ 伤害减免: 总计减少${Math.abs(Number(adjustmentPercent))}%伤害`);
|
|
4202
|
-
}
|
|
4203
|
-
}
|
|
4204
4187
|
if (finalDamage > 0) {
|
|
4205
4188
|
updateStatsByName(targetBoss.name, {
|
|
4206
4189
|
hpChange: -finalDamage
|
|
4207
4190
|
});
|
|
4208
4191
|
}
|
|
4209
|
-
}
|
|
4210
|
-
if (immune) {
|
|
4192
|
+
} else {
|
|
4211
4193
|
finalDamage = 0;
|
|
4212
4194
|
}
|
|
4213
4195
|
return {
|
|
@@ -4399,7 +4381,6 @@ __name(handlePrimaryAttack, "handlePrimaryAttack");
|
|
|
4399
4381
|
async function handleScatterAttack(ctx, session, handle, config, equippedWeapon, targetBoss, weaponName, activeBosses) {
|
|
4400
4382
|
const secondaryTargets = activeBosses.filter((boss) => boss.name !== targetBoss.name);
|
|
4401
4383
|
const scatterEffectMessages = [];
|
|
4402
|
-
const ignoreMessage = [];
|
|
4403
4384
|
const extraDamages = [];
|
|
4404
4385
|
const actuallyDead = [];
|
|
4405
4386
|
const taskUpdates = [];
|
|
@@ -4447,14 +4428,12 @@ async function handleScatterAttack(ctx, session, handle, config, equippedWeapon,
|
|
|
4447
4428
|
}
|
|
4448
4429
|
const isDead = currentHP <= 0;
|
|
4449
4430
|
scatterEffectMessages.push(...EffectProcessor.messages.map((m) => ` 对 ${secondaryTarget.name} ${m}`));
|
|
4450
|
-
ignoreMessage.push(...ignoreReduction.messages.map((m) => ` 对 ${secondaryTarget.name} ${m}`));
|
|
4451
4431
|
if (isDead) {
|
|
4452
4432
|
actuallyDead.push(secondaryTarget.name);
|
|
4453
4433
|
}
|
|
4454
4434
|
}
|
|
4455
4435
|
return {
|
|
4456
4436
|
scatterEffectMessages,
|
|
4457
|
-
ignoreMessage,
|
|
4458
4437
|
extraDamages,
|
|
4459
4438
|
actuallyDead,
|
|
4460
4439
|
taskUpdates
|
|
@@ -4555,7 +4534,7 @@ async function updateSignRecord(ctx, handle, reward) {
|
|
|
4555
4534
|
}
|
|
4556
4535
|
__name(updateSignRecord, "updateSignRecord");
|
|
4557
4536
|
function buildResultMessage(session, weaponName, targetBoss, primaryResult, scatterResult, finalReward, careerMessage, techMessage, redcrystalMessage) {
|
|
4558
|
-
const maxHP =
|
|
4537
|
+
const maxHP = getMaxHPByName(targetBoss.name);
|
|
4559
4538
|
const messages = [
|
|
4560
4539
|
`🔥 ${session.username} 使用武器 ${weaponName} 对 ${targetBoss.name} 发起攻击!`,
|
|
4561
4540
|
...primaryResult.effectMessage.length > 0 ? [
|
|
@@ -4574,10 +4553,6 @@ ${primaryResult.passiveMessages.map((m) => `▸ ${m}`).join("\n")}`
|
|
|
4574
4553
|
];
|
|
4575
4554
|
if (scatterResult) {
|
|
4576
4555
|
messages.push(
|
|
4577
|
-
...scatterResult.ignoreMessage.length > 0 ? [
|
|
4578
|
-
`🗡️ 无视减伤效果:
|
|
4579
|
-
${scatterResult.ignoreMessage.map((m) => `▸ ${m}`).join("\n")}`
|
|
4580
|
-
] : [],
|
|
4581
4556
|
`⚡ 散射效果:
|
|
4582
4557
|
${scatterResult.scatterEffectMessages.map((m) => `▸ ${m}`).join("\n")}`,
|
|
4583
4558
|
`散射伤害:`,
|
|
@@ -4651,38 +4626,10 @@ async function updateTaskProgress(ctx, handle, taskUpdates) {
|
|
|
4651
4626
|
}
|
|
4652
4627
|
}
|
|
4653
4628
|
__name(updateTaskProgress, "updateTaskProgress");
|
|
4654
|
-
function getMaxHPByName2(bossName) {
|
|
4655
|
-
for (const boss of bossPool) {
|
|
4656
|
-
if (boss.main.name === bossName) {
|
|
4657
|
-
return boss.main.maxHP;
|
|
4658
|
-
}
|
|
4659
|
-
for (const minion of boss.minions) {
|
|
4660
|
-
if (minion.name === bossName) {
|
|
4661
|
-
return minion.maxHP;
|
|
4662
|
-
}
|
|
4663
|
-
}
|
|
4664
|
-
}
|
|
4665
|
-
return void 0;
|
|
4666
|
-
}
|
|
4667
|
-
__name(getMaxHPByName2, "getMaxHPByName");
|
|
4668
|
-
function getMaxEnergyByName2(bossName) {
|
|
4669
|
-
for (const boss of bossPool) {
|
|
4670
|
-
if (boss.main.name === bossName) {
|
|
4671
|
-
return boss.main.maxEnergy;
|
|
4672
|
-
}
|
|
4673
|
-
for (const minion of boss.minions) {
|
|
4674
|
-
if (minion.name === bossName) {
|
|
4675
|
-
return minion.maxEnergy;
|
|
4676
|
-
}
|
|
4677
|
-
}
|
|
4678
|
-
}
|
|
4679
|
-
return void 0;
|
|
4680
|
-
}
|
|
4681
|
-
__name(getMaxEnergyByName2, "getMaxEnergyByName");
|
|
4682
4629
|
async function updateDatabaseWithStats(ctx, stats) {
|
|
4683
4630
|
const bossData = await ctx.database.get("ggcevo_boss", { name: stats.name });
|
|
4684
|
-
const maxHP =
|
|
4685
|
-
const maxEnergy =
|
|
4631
|
+
const maxHP = getMaxHPByName(stats.name);
|
|
4632
|
+
const maxEnergy = getMaxEnergyByName(stats.name);
|
|
4686
4633
|
if (!bossData || bossData.length === 0) {
|
|
4687
4634
|
return;
|
|
4688
4635
|
}
|
|
@@ -4742,13 +4689,13 @@ async function handleIgnoreReductionEffects(ctx, handle, weaponName, targetBoss)
|
|
|
4742
4689
|
const handleWeaponEffect = /* @__PURE__ */ __name(() => {
|
|
4743
4690
|
if (weaponName === "光剑") {
|
|
4744
4691
|
ignoreEffects.push(1);
|
|
4745
|
-
messages.push(`⚔️
|
|
4692
|
+
messages.push(`⚔️ 【光剑】武器效果:无视100%减伤效果`);
|
|
4746
4693
|
} else if (weaponName === "M4AE脉冲步枪") {
|
|
4747
4694
|
ignoreEffects.push(0.8);
|
|
4748
|
-
messages.push(`🔫 【M4AE
|
|
4695
|
+
messages.push(`🔫 【M4AE脉冲步枪】武器效果:无视80%减伤效果`);
|
|
4749
4696
|
} else if (weaponName === "粒子相位枪" && targetBoss?.tags.includes("护盾")) {
|
|
4750
4697
|
ignoreEffects.push(0.5);
|
|
4751
|
-
messages.push(`⚡
|
|
4698
|
+
messages.push(`⚡ 【粒子相位枪】武器效果:无视50%减伤效果`);
|
|
4752
4699
|
}
|
|
4753
4700
|
}, "handleWeaponEffect");
|
|
4754
4701
|
const handlePiercingMod = /* @__PURE__ */ __name(async () => {
|
|
@@ -4761,7 +4708,7 @@ async function handleIgnoreReductionEffects(ctx, handle, weaponName, targetBoss)
|
|
|
4761
4708
|
});
|
|
4762
4709
|
if (equippedWeapon?.installedMods?.includes("破甲模块")) {
|
|
4763
4710
|
ignoreEffects.push(0.2);
|
|
4764
|
-
messages.push(`⚡
|
|
4711
|
+
messages.push(`⚡ 【破甲模块】生效:无视20%减伤效果`);
|
|
4765
4712
|
}
|
|
4766
4713
|
}, "handlePiercingMod");
|
|
4767
4714
|
handleWeaponEffect();
|
|
@@ -4775,11 +4722,11 @@ async function handleIgnoreReductionEffects(ctx, handle, weaponName, targetBoss)
|
|
|
4775
4722
|
});
|
|
4776
4723
|
if (radarMask?.quantity > 0) {
|
|
4777
4724
|
ignoreEffects.push(0.1);
|
|
4778
|
-
messages.push(`🛰️
|
|
4725
|
+
messages.push(`🛰️ 【雷达面罩】生效:无视10%减伤效果`);
|
|
4779
4726
|
}
|
|
4780
4727
|
if (careerData.career === "猩红杀手" && weaponName === "侦察步枪") {
|
|
4781
4728
|
ignoreEffects.push(0.2);
|
|
4782
|
-
messages.push(`🎯
|
|
4729
|
+
messages.push(`🎯 【猩红杀手】职业效果:无视20%减伤效果`);
|
|
4783
4730
|
}
|
|
4784
4731
|
}, "handleCareerEffects");
|
|
4785
4732
|
await handleCareerEffects();
|
|
@@ -7133,10 +7080,14 @@ ${validTypes.join("、")}`;
|
|
|
7133
7080
|
let discountRate = 0;
|
|
7134
7081
|
if (careerData?.group === "人类联盟") {
|
|
7135
7082
|
if (modInfo.isExclusive) {
|
|
7136
|
-
if (techLevel >= 2
|
|
7083
|
+
if (techLevel >= 2) {
|
|
7084
|
+
const baseDiscount = 5;
|
|
7085
|
+
const careerDiscount = 10;
|
|
7086
|
+
discountRate = Math.max(baseDiscount, careerDiscount);
|
|
7087
|
+
}
|
|
7137
7088
|
} else {
|
|
7138
|
-
const baseDiscount =
|
|
7139
|
-
const careerDiscount =
|
|
7089
|
+
const baseDiscount = 5;
|
|
7090
|
+
const careerDiscount = 10;
|
|
7140
7091
|
discountRate = Math.max(baseDiscount, careerDiscount);
|
|
7141
7092
|
}
|
|
7142
7093
|
}
|