koishi-plugin-ggcevo-game 1.4.70 → 1.4.71
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 +59 -0
- package/lib/boss/attackhandling.d.ts +1 -0
- package/lib/boss/passive.d.ts +28 -0
- package/lib/index.js +326 -10
- package/package.json +1 -1
|
@@ -492,6 +492,64 @@ export declare const BattleEffectProcessor: {
|
|
|
492
492
|
updates: Partial<BattleStatistics>;
|
|
493
493
|
} | null;
|
|
494
494
|
} | null;
|
|
495
|
+
handleHiveMind: (targetBoss: any, activeBosses: any[], nestlingNames?: string[]) => {
|
|
496
|
+
nerfMultiplier: number;
|
|
497
|
+
messages: string[];
|
|
498
|
+
};
|
|
499
|
+
handleBurrowAmbush: (targetBoss: any, nestlingNames?: string[]) => {
|
|
500
|
+
messages: string[];
|
|
501
|
+
targetUpdates: {
|
|
502
|
+
name: any;
|
|
503
|
+
updates: Partial<BattleStatistics>;
|
|
504
|
+
};
|
|
505
|
+
spawnNewBossMark: string;
|
|
506
|
+
};
|
|
507
|
+
handleWeakeningSpit: (targetBoss: any, activeBosses: any[]) => any;
|
|
508
|
+
handleHealingSwarm: (targetBoss: any, activeBosses: any[]) => {
|
|
509
|
+
messages: string[];
|
|
510
|
+
targetUpdates: {
|
|
511
|
+
name: any;
|
|
512
|
+
updates: {
|
|
513
|
+
hpChange: number;
|
|
514
|
+
};
|
|
515
|
+
};
|
|
516
|
+
otherUpdates: {
|
|
517
|
+
name: string;
|
|
518
|
+
updates: Partial<BattleStatistics>;
|
|
519
|
+
}[];
|
|
520
|
+
};
|
|
521
|
+
handleReleasePheromones: (targetBoss: any) => {
|
|
522
|
+
messages: string[];
|
|
523
|
+
nerfMultiplier: number;
|
|
524
|
+
};
|
|
525
|
+
handleTerrifyingScreech: (targetBoss: any, activeBosses: any[], nestlingNames?: string[]) => {
|
|
526
|
+
targetUpdates: Partial<BattleStatistics>;
|
|
527
|
+
messages: string[];
|
|
528
|
+
spawnNewBossMark?: undefined;
|
|
529
|
+
} | {
|
|
530
|
+
targetUpdates: Partial<BattleStatistics>;
|
|
531
|
+
messages: string[];
|
|
532
|
+
spawnNewBossMark: string;
|
|
533
|
+
};
|
|
534
|
+
handleHatching: (targetBoss: any, activeBosses: any[], nestlingNames?: string[]) => {
|
|
535
|
+
targetUpdates: {
|
|
536
|
+
name: any;
|
|
537
|
+
updates: {
|
|
538
|
+
statusLayersChanged: number;
|
|
539
|
+
};
|
|
540
|
+
};
|
|
541
|
+
messages: string[];
|
|
542
|
+
spawnNewBossMark?: undefined;
|
|
543
|
+
} | {
|
|
544
|
+
targetUpdates: {
|
|
545
|
+
name: any;
|
|
546
|
+
updates: {
|
|
547
|
+
statusLayersChanged: number;
|
|
548
|
+
};
|
|
549
|
+
};
|
|
550
|
+
messages: string[];
|
|
551
|
+
spawnNewBossMark: string;
|
|
552
|
+
};
|
|
495
553
|
};
|
|
496
554
|
/**
|
|
497
555
|
* 统一处理所有被动效果(包含伤害修正、免疫检查、状态更新等)
|
|
@@ -509,4 +567,5 @@ export declare function applyPassiveEffects(targetBoss: any, activeBosses: any[]
|
|
|
509
567
|
energyDrained: boolean;
|
|
510
568
|
layerReduced: boolean;
|
|
511
569
|
bileDetonationTrigger: boolean;
|
|
570
|
+
spawnNewBossMarks: string[];
|
|
512
571
|
};
|
package/lib/boss/passive.d.ts
CHANGED
|
@@ -227,4 +227,32 @@ export declare const passiveConfig: {
|
|
|
227
227
|
type: string;
|
|
228
228
|
description: string;
|
|
229
229
|
};
|
|
230
|
+
虫巢思维: {
|
|
231
|
+
type: string;
|
|
232
|
+
description: string;
|
|
233
|
+
};
|
|
234
|
+
爆虫伏击: {
|
|
235
|
+
type: string;
|
|
236
|
+
description: string;
|
|
237
|
+
};
|
|
238
|
+
虚弱喷吐: {
|
|
239
|
+
type: string;
|
|
240
|
+
description: string;
|
|
241
|
+
};
|
|
242
|
+
治愈虫群: {
|
|
243
|
+
type: string;
|
|
244
|
+
description: string;
|
|
245
|
+
};
|
|
246
|
+
释放信息素: {
|
|
247
|
+
type: string;
|
|
248
|
+
description: string;
|
|
249
|
+
};
|
|
250
|
+
恐吓尖啸: {
|
|
251
|
+
type: string;
|
|
252
|
+
description: string;
|
|
253
|
+
};
|
|
254
|
+
孵化: {
|
|
255
|
+
type: string;
|
|
256
|
+
description: string;
|
|
257
|
+
};
|
|
230
258
|
};
|
package/lib/index.js
CHANGED
|
@@ -315,7 +315,7 @@ var weaponConfig = {
|
|
|
315
315
|
id: 19,
|
|
316
316
|
type: "能量武器",
|
|
317
317
|
category: "能量武器",
|
|
318
|
-
damage:
|
|
318
|
+
damage: 35,
|
|
319
319
|
armorDamageReduction: 1,
|
|
320
320
|
description: "这是在一位高级灵能者的帮助下,解析灵能力量制作出的高科技武器",
|
|
321
321
|
specialeffect: "",
|
|
@@ -348,7 +348,7 @@ var weaponConfig = {
|
|
|
348
348
|
id: 102,
|
|
349
349
|
type: "能量武器",
|
|
350
350
|
category: "传奇武器",
|
|
351
|
-
damage:
|
|
351
|
+
damage: 80,
|
|
352
352
|
armorDamageReduction: -1,
|
|
353
353
|
description: "一件传奇武器",
|
|
354
354
|
specialeffect: "暴击率+25%;若连续3次攻击没暴击,则下一次攻击必定暴击",
|
|
@@ -1475,6 +1475,71 @@ var bossPool = [
|
|
|
1475
1475
|
passive: ["弱化形态", "毒性唾液", "毒气波", "淬毒撕咬", "酸蚀池"]
|
|
1476
1476
|
}
|
|
1477
1477
|
]
|
|
1478
|
+
},
|
|
1479
|
+
{
|
|
1480
|
+
id: 11,
|
|
1481
|
+
main: {
|
|
1482
|
+
name: "虫群女王",
|
|
1483
|
+
type: "主宰",
|
|
1484
|
+
maxHP: 7500,
|
|
1485
|
+
maxShield: 0,
|
|
1486
|
+
maxEnergy: 0,
|
|
1487
|
+
armor: 5,
|
|
1488
|
+
shieldArmor: 0,
|
|
1489
|
+
maxStacks: 20,
|
|
1490
|
+
tags: ["生物", "灵能", "异形"],
|
|
1491
|
+
passive: ["虫巢思维", "爆虫伏击", "虚弱喷吐", "治愈虫群", "释放信息素", "恐吓尖啸"]
|
|
1492
|
+
},
|
|
1493
|
+
minions: [
|
|
1494
|
+
{
|
|
1495
|
+
name: "孵化场",
|
|
1496
|
+
type: "子代",
|
|
1497
|
+
maxHP: 2e4,
|
|
1498
|
+
maxShield: 0,
|
|
1499
|
+
maxEnergy: 0,
|
|
1500
|
+
armor: 4,
|
|
1501
|
+
shieldArmor: 0,
|
|
1502
|
+
maxStacks: 20,
|
|
1503
|
+
tags: ["重甲", "生物", "建筑", "异形"],
|
|
1504
|
+
passive: ["孵化"]
|
|
1505
|
+
},
|
|
1506
|
+
{
|
|
1507
|
+
name: "巢穴雷兽",
|
|
1508
|
+
type: "子代",
|
|
1509
|
+
maxHP: 4e3,
|
|
1510
|
+
maxShield: 0,
|
|
1511
|
+
maxEnergy: 0,
|
|
1512
|
+
armor: 15,
|
|
1513
|
+
shieldArmor: 0,
|
|
1514
|
+
maxStacks: 0,
|
|
1515
|
+
tags: ["重甲", "生物", "异形"],
|
|
1516
|
+
passive: []
|
|
1517
|
+
},
|
|
1518
|
+
{
|
|
1519
|
+
name: "巢穴战士",
|
|
1520
|
+
type: "子代",
|
|
1521
|
+
maxHP: 2e3,
|
|
1522
|
+
maxShield: 0,
|
|
1523
|
+
maxEnergy: 0,
|
|
1524
|
+
armor: 4,
|
|
1525
|
+
shieldArmor: 0,
|
|
1526
|
+
maxStacks: 0,
|
|
1527
|
+
tags: ["轻甲", "生物", "异形"],
|
|
1528
|
+
passive: []
|
|
1529
|
+
},
|
|
1530
|
+
{
|
|
1531
|
+
name: "巢穴甲虫",
|
|
1532
|
+
type: "子代",
|
|
1533
|
+
maxHP: 3e3,
|
|
1534
|
+
maxShield: 0,
|
|
1535
|
+
maxEnergy: 0,
|
|
1536
|
+
armor: 10,
|
|
1537
|
+
shieldArmor: 0,
|
|
1538
|
+
maxStacks: 0,
|
|
1539
|
+
tags: ["重甲", "生物", "异形"],
|
|
1540
|
+
passive: []
|
|
1541
|
+
}
|
|
1542
|
+
]
|
|
1478
1543
|
}
|
|
1479
1544
|
];
|
|
1480
1545
|
|
|
@@ -3345,7 +3410,169 @@ var BattleEffectProcessor = {
|
|
|
3345
3410
|
messages,
|
|
3346
3411
|
targetUpdates
|
|
3347
3412
|
};
|
|
3348
|
-
}, "handleToxicAssault")
|
|
3413
|
+
}, "handleToxicAssault"),
|
|
3414
|
+
// 虫巢思维 - 每有一只巢穴子代,减伤20%
|
|
3415
|
+
handleHiveMind: /* @__PURE__ */ __name(function(targetBoss, activeBosses, nestlingNames = ["巢穴雷兽", "巢穴战士", "巢穴甲虫"]) {
|
|
3416
|
+
if (!targetBoss.skills.includes("虫巢思维")) return null;
|
|
3417
|
+
const livingNestlings = activeBosses.filter(
|
|
3418
|
+
(boss) => boss.isActive && nestlingNames.includes(boss.name)
|
|
3419
|
+
).length;
|
|
3420
|
+
if (livingNestlings === 0) return null;
|
|
3421
|
+
const nerfMultiplier = livingNestlings * 0.2;
|
|
3422
|
+
const messages = [`🐛 【虫巢思维】生效:存在${livingNestlings}只巢穴子代,受到的伤害-${nerfMultiplier * 100}%`];
|
|
3423
|
+
return { nerfMultiplier, messages };
|
|
3424
|
+
}, "handleHiveMind"),
|
|
3425
|
+
// 爆虫伏击 - 血量低于50%时,立即随机孵化1只巢穴子代并移除技能
|
|
3426
|
+
handleBurrowAmbush: /* @__PURE__ */ __name(function(targetBoss, nestlingNames = ["巢穴雷兽", "巢穴战士", "巢穴甲虫"]) {
|
|
3427
|
+
if (!targetBoss.skills.includes("爆虫伏击")) return null;
|
|
3428
|
+
const maxHP = getMaxHPByName(targetBoss.name);
|
|
3429
|
+
const hpPercent = targetBoss.HP / maxHP;
|
|
3430
|
+
if (hpPercent >= 0.5) return null;
|
|
3431
|
+
const randomBossName = nestlingNames[Math.floor(Math.random() * nestlingNames.length)];
|
|
3432
|
+
const messages = [
|
|
3433
|
+
`🕳️ 【爆虫伏击】触发:生命值≤50%,需要孵化1只${randomBossName}`,
|
|
3434
|
+
`🕳️ 【爆虫伏击】技能移除`
|
|
3435
|
+
];
|
|
3436
|
+
return {
|
|
3437
|
+
messages,
|
|
3438
|
+
targetUpdates: {
|
|
3439
|
+
// 添加目标boss更新数据
|
|
3440
|
+
name: targetBoss.name,
|
|
3441
|
+
updates: {
|
|
3442
|
+
skillsRemoved: ["爆虫伏击"]
|
|
3443
|
+
// 移除此技能
|
|
3444
|
+
}
|
|
3445
|
+
},
|
|
3446
|
+
spawnNewBossMark: randomBossName
|
|
3447
|
+
// 返回生成标记
|
|
3448
|
+
};
|
|
3449
|
+
}, "handleBurrowAmbush"),
|
|
3450
|
+
// 虚弱喷吐 - 孵化场存活时减伤80%,死亡时增伤20%
|
|
3451
|
+
handleWeakeningSpit: /* @__PURE__ */ __name(function(targetBoss, activeBosses) {
|
|
3452
|
+
if (!targetBoss.skills.includes("虚弱喷吐")) return null;
|
|
3453
|
+
const hatcheryExists = activeBosses.some(
|
|
3454
|
+
(boss) => boss.name === "孵化场" && boss.isActive
|
|
3455
|
+
);
|
|
3456
|
+
let effect = null;
|
|
3457
|
+
if (hatcheryExists) {
|
|
3458
|
+
effect = { nerfMultiplier: 0.8, messages: ["🤢 【虚弱喷吐】生效:孵化场存活,受到的伤害-80%"] };
|
|
3459
|
+
} else {
|
|
3460
|
+
effect = { buffMultiplier: 0.2, messages: ["☠️ 【虚弱喷吐】生效:孵化场死亡,受到的伤害+20%"] };
|
|
3461
|
+
}
|
|
3462
|
+
return effect;
|
|
3463
|
+
}, "handleWeakeningSpit"),
|
|
3464
|
+
// 治愈虫群 - 血量低于30%时,自身回复40%生命值,所有异形回复10%生命值
|
|
3465
|
+
handleHealingSwarm: /* @__PURE__ */ __name(function(targetBoss, activeBosses) {
|
|
3466
|
+
if (!targetBoss.skills.includes("治愈虫群")) return null;
|
|
3467
|
+
const maxHP = getMaxHPByName(targetBoss.name);
|
|
3468
|
+
const hpPercent = targetBoss.HP / maxHP;
|
|
3469
|
+
let targetUpdates = null;
|
|
3470
|
+
if (hpPercent >= 0.3) return null;
|
|
3471
|
+
const selfHealAmount = Math.round(maxHP * 0.4);
|
|
3472
|
+
const messages = [`💫 【治愈虫群】触发:生命值≤30%,自身回复${selfHealAmount}点生命值`];
|
|
3473
|
+
const otherUpdates = [];
|
|
3474
|
+
const survivors = activeBosses.filter((boss) => boss.name !== targetBoss.name && boss.isActive);
|
|
3475
|
+
survivors.forEach((boss) => {
|
|
3476
|
+
const healAmount = Math.round(getMaxHPByName(boss.name) * 0.1);
|
|
3477
|
+
if (healAmount > 0) {
|
|
3478
|
+
otherUpdates.push({
|
|
3479
|
+
name: boss.name,
|
|
3480
|
+
updates: { hpChange: healAmount }
|
|
3481
|
+
});
|
|
3482
|
+
messages.push(`💫 「${boss.name}」回复${healAmount}点生命值`);
|
|
3483
|
+
}
|
|
3484
|
+
});
|
|
3485
|
+
return {
|
|
3486
|
+
messages,
|
|
3487
|
+
targetUpdates: {
|
|
3488
|
+
name: targetBoss.name,
|
|
3489
|
+
updates: { hpChange: selfHealAmount }
|
|
3490
|
+
},
|
|
3491
|
+
otherUpdates
|
|
3492
|
+
};
|
|
3493
|
+
}, "handleHealingSwarm"),
|
|
3494
|
+
// 释放信息素 - 所有存活巢穴子代减伤20%
|
|
3495
|
+
handleReleasePheromones: /* @__PURE__ */ __name(function(targetBoss) {
|
|
3496
|
+
if (!targetBoss.name.includes("巢穴雷兽") && !targetBoss.name.includes("巢穴战士") && !targetBoss.name.includes("巢穴甲虫")) return null;
|
|
3497
|
+
const messages = [`🌬️ 【释放信息素】生效:所有巢穴子代受到的伤害-20%`];
|
|
3498
|
+
const nerfMultiplier = 0.2;
|
|
3499
|
+
return { messages, nerfMultiplier };
|
|
3500
|
+
}, "handleReleasePheromones"),
|
|
3501
|
+
// 恐吓尖啸 - 每受到10次攻击,无巢穴子代时孵化1只
|
|
3502
|
+
handleTerrifyingScreech: /* @__PURE__ */ __name(function(targetBoss, activeBosses, nestlingNames = ["巢穴雷兽", "巢穴战士", "巢穴甲虫"]) {
|
|
3503
|
+
if (!targetBoss.skills.includes("恐吓尖啸")) return null;
|
|
3504
|
+
const currentCount = targetBoss.statusLayers || 0;
|
|
3505
|
+
if (currentCount < 10) {
|
|
3506
|
+
return {
|
|
3507
|
+
targetUpdates: {
|
|
3508
|
+
name: targetBoss.name,
|
|
3509
|
+
updates: { statusLayersChanged: 1 }
|
|
3510
|
+
},
|
|
3511
|
+
messages: [`😱 【恐吓尖啸】生效:获得一层恐吓尖啸`]
|
|
3512
|
+
};
|
|
3513
|
+
}
|
|
3514
|
+
const nestlingsExist = activeBosses.some(
|
|
3515
|
+
(boss) => boss.isActive && nestlingNames.includes(boss.name)
|
|
3516
|
+
);
|
|
3517
|
+
if (nestlingsExist) {
|
|
3518
|
+
return {
|
|
3519
|
+
targetUpdates: {
|
|
3520
|
+
name: targetBoss.name,
|
|
3521
|
+
updates: { statusLayersChanged: -10 }
|
|
3522
|
+
// 重置计数器
|
|
3523
|
+
},
|
|
3524
|
+
messages: []
|
|
3525
|
+
};
|
|
3526
|
+
}
|
|
3527
|
+
const randomBossName = nestlingNames[Math.floor(Math.random() * nestlingNames.length)];
|
|
3528
|
+
return {
|
|
3529
|
+
targetUpdates: {
|
|
3530
|
+
name: targetBoss.name,
|
|
3531
|
+
updates: { statusLayersChanged: -10 }
|
|
3532
|
+
// 重置计数器
|
|
3533
|
+
},
|
|
3534
|
+
messages: [`😱 【恐吓尖啸】触发:无巢穴子代存活,需要孵化1只${randomBossName}`],
|
|
3535
|
+
spawnNewBossMark: randomBossName
|
|
3536
|
+
// 返回生成标记
|
|
3537
|
+
};
|
|
3538
|
+
}, "handleTerrifyingScreech"),
|
|
3539
|
+
// 孵化 - 每受到10次攻击,无巢穴子代时孵化1只
|
|
3540
|
+
handleHatching: /* @__PURE__ */ __name(function(targetBoss, activeBosses, nestlingNames = ["巢穴雷兽", "巢穴战士", "巢穴甲虫"]) {
|
|
3541
|
+
if (!targetBoss.skills.includes("孵化")) return null;
|
|
3542
|
+
const currentCount = targetBoss.statusLayers || 0;
|
|
3543
|
+
if (currentCount < 10) {
|
|
3544
|
+
return {
|
|
3545
|
+
targetUpdates: {
|
|
3546
|
+
name: targetBoss.name,
|
|
3547
|
+
updates: { statusLayersChanged: 1 }
|
|
3548
|
+
},
|
|
3549
|
+
messages: [`🥚 【孵化】生效:获得一层孵化`]
|
|
3550
|
+
};
|
|
3551
|
+
}
|
|
3552
|
+
const hasNestlings = activeBosses.some(
|
|
3553
|
+
(boss) => boss.isActive && nestlingNames.includes(boss.name)
|
|
3554
|
+
);
|
|
3555
|
+
if (hasNestlings) {
|
|
3556
|
+
return {
|
|
3557
|
+
targetUpdates: {
|
|
3558
|
+
name: targetBoss.name,
|
|
3559
|
+
updates: { statusLayersChanged: -10 }
|
|
3560
|
+
// 重置计数器
|
|
3561
|
+
},
|
|
3562
|
+
messages: []
|
|
3563
|
+
};
|
|
3564
|
+
}
|
|
3565
|
+
const randomBossName = nestlingNames[Math.floor(Math.random() * nestlingNames.length)];
|
|
3566
|
+
return {
|
|
3567
|
+
targetUpdates: {
|
|
3568
|
+
name: targetBoss.name,
|
|
3569
|
+
updates: { statusLayersChanged: -10 }
|
|
3570
|
+
// 重置计数器
|
|
3571
|
+
},
|
|
3572
|
+
messages: [`🥚 【孵化】触发:成功孵化1只${randomBossName}`],
|
|
3573
|
+
spawnNewBossMark: randomBossName
|
|
3574
|
+
};
|
|
3575
|
+
}, "handleHatching")
|
|
3349
3576
|
};
|
|
3350
3577
|
function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, hasCrit, ignoreRate, careerData) {
|
|
3351
3578
|
const messages = [];
|
|
@@ -3357,6 +3584,7 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, hasCr
|
|
|
3357
3584
|
let energyDrained = false;
|
|
3358
3585
|
let layerReduced = false;
|
|
3359
3586
|
let bileDetonationTrigger = false;
|
|
3587
|
+
let spawnNewBossMarks = [];
|
|
3360
3588
|
const weaponData = weaponConfig[weaponName] || { type: "" };
|
|
3361
3589
|
let doubleAstralWind = false;
|
|
3362
3590
|
let isolatedImmunityMark = false;
|
|
@@ -3372,6 +3600,9 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, hasCr
|
|
|
3372
3600
|
updateStatsByName(update.name, update.updates);
|
|
3373
3601
|
}
|
|
3374
3602
|
}
|
|
3603
|
+
if (result.spawnNewBossMark) {
|
|
3604
|
+
spawnNewBossMarks.push(result.spawnNewBossMark);
|
|
3605
|
+
}
|
|
3375
3606
|
return result;
|
|
3376
3607
|
}, "processEffect");
|
|
3377
3608
|
const maxStatsMap = {};
|
|
@@ -3456,7 +3687,10 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, hasCr
|
|
|
3456
3687
|
{ effect: BattleEffectProcessor.handleIsolated, args: [targetBoss, activeBosses, isolatedImmunityMark] },
|
|
3457
3688
|
{ effect: BattleEffectProcessor.handleInfectedSpaceStation, args: [targetBoss, activeBosses] },
|
|
3458
3689
|
{ effect: BattleEffectProcessor.handleInfernalBomb, args: [targetBoss, activeBosses] },
|
|
3459
|
-
{ effect: BattleEffectProcessor.handleHunterAlien, args: [targetBoss, activeBosses, weaponName] }
|
|
3690
|
+
{ effect: BattleEffectProcessor.handleHunterAlien, args: [targetBoss, activeBosses, weaponName] },
|
|
3691
|
+
{ effect: BattleEffectProcessor.handleHiveMind, args: [targetBoss, activeBosses] },
|
|
3692
|
+
{ effect: BattleEffectProcessor.handleReleasePheromones, args: [targetBoss] },
|
|
3693
|
+
{ effect: BattleEffectProcessor.handleWeakeningSpit, args: [targetBoss, activeBosses] }
|
|
3460
3694
|
];
|
|
3461
3695
|
for (const effectItem of damageAdjustEffects) {
|
|
3462
3696
|
const result = processEffect(effectItem.effect, ...effectItem.args);
|
|
@@ -3492,13 +3726,15 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, hasCr
|
|
|
3492
3726
|
const stateChangeEffects = [
|
|
3493
3727
|
{ effect: BattleEffectProcessor.handleSuperconductor, args: [targetBoss] },
|
|
3494
3728
|
// 4. 剧毒突袭
|
|
3495
|
-
{ effect: BattleEffectProcessor.handleToxicAssault, args: [targetBoss] }
|
|
3729
|
+
{ effect: BattleEffectProcessor.handleToxicAssault, args: [targetBoss] },
|
|
3730
|
+
{ effect: BattleEffectProcessor.handleTerrifyingScreech, args: [targetBoss, activeBosses] },
|
|
3731
|
+
{ effect: BattleEffectProcessor.handleHatching, args: [targetBoss, activeBosses] }
|
|
3496
3732
|
];
|
|
3497
3733
|
for (const effectItem of stateChangeEffects) {
|
|
3498
3734
|
processEffect(effectItem.effect, ...effectItem.args);
|
|
3499
3735
|
}
|
|
3500
3736
|
let isEnhanced = false;
|
|
3501
|
-
if (targetBoss.statusLayers > 0) {
|
|
3737
|
+
if (targetBoss.statusLayers > 0 && targetBoss.skills.includes("酸蚀池")) {
|
|
3502
3738
|
isEnhanced = true;
|
|
3503
3739
|
updateStatsByName(targetBoss.name, {
|
|
3504
3740
|
statusLayersChanged: -1
|
|
@@ -3533,7 +3769,9 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, hasCr
|
|
|
3533
3769
|
{ effect: BattleEffectProcessor.handleBombardmentGuide, args: [targetBoss] },
|
|
3534
3770
|
{ effect: BattleEffectProcessor.handleOverdriveShield, args: [targetBoss, activeBosses] },
|
|
3535
3771
|
// 6. 淬毒撕咬
|
|
3536
|
-
{ effect: BattleEffectProcessor.handlePoisonedBite, args: [targetBoss] }
|
|
3772
|
+
{ effect: BattleEffectProcessor.handlePoisonedBite, args: [targetBoss] },
|
|
3773
|
+
{ effect: BattleEffectProcessor.handleHealingSwarm, args: [targetBoss, activeBosses] },
|
|
3774
|
+
{ effect: BattleEffectProcessor.handleBurrowAmbush, args: [targetBoss] }
|
|
3537
3775
|
];
|
|
3538
3776
|
for (const effectItem of healingEffects) {
|
|
3539
3777
|
processEffect(effectItem.effect, ...effectItem.args);
|
|
@@ -3702,7 +3940,9 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, hasCr
|
|
|
3702
3940
|
coldLayerAdded,
|
|
3703
3941
|
energyDrained,
|
|
3704
3942
|
layerReduced,
|
|
3705
|
-
bileDetonationTrigger
|
|
3943
|
+
bileDetonationTrigger,
|
|
3944
|
+
spawnNewBossMarks
|
|
3945
|
+
// +++ 新增生成标记 +++
|
|
3706
3946
|
};
|
|
3707
3947
|
}
|
|
3708
3948
|
__name(applyPassiveEffects, "applyPassiveEffects");
|
|
@@ -3936,6 +4176,34 @@ var passiveConfig = {
|
|
|
3936
4176
|
"剧毒突袭": {
|
|
3937
4177
|
type: "强化效果",
|
|
3938
4178
|
description: "「毒性唾液」≥20层时,受击消耗所有层数并强化下5次触发的「酸蚀池」(武器类型对应的增伤和减伤效果翻倍)"
|
|
4179
|
+
},
|
|
4180
|
+
"虫巢思维": {
|
|
4181
|
+
type: "",
|
|
4182
|
+
description: "每有一只巢穴子代,则受到的伤害降低20%"
|
|
4183
|
+
},
|
|
4184
|
+
"爆虫伏击": {
|
|
4185
|
+
type: "",
|
|
4186
|
+
description: "血量低于50%时,立即随机孵化1只巢穴子代(生效后移除)"
|
|
4187
|
+
},
|
|
4188
|
+
"虚弱喷吐": {
|
|
4189
|
+
type: "",
|
|
4190
|
+
description: "当孵化场存活时,自身受到的伤害降低80%;如果孵化场已死亡,则自身受到的伤害提高20%"
|
|
4191
|
+
},
|
|
4192
|
+
"治愈虫群": {
|
|
4193
|
+
type: "",
|
|
4194
|
+
description: "血量低于30%时,立即回复自身40%点生命值,同时回复所有存活异形10%点生命值"
|
|
4195
|
+
},
|
|
4196
|
+
"释放信息素": {
|
|
4197
|
+
type: "",
|
|
4198
|
+
description: "所有存活的巢穴子代受到的伤害降低20%"
|
|
4199
|
+
},
|
|
4200
|
+
"恐吓尖啸": {
|
|
4201
|
+
type: "",
|
|
4202
|
+
description: "每受到10次攻击,如果没有存活的巢穴子代,则随机孵化1只巢穴子代(巢穴雷兽,巢穴战士,巢穴甲虫)"
|
|
4203
|
+
},
|
|
4204
|
+
"孵化": {
|
|
4205
|
+
type: "",
|
|
4206
|
+
description: "每受到10次攻击,如果没有存活的巢穴子代,则随机孵化1只巢穴子代(巢穴雷兽,巢穴战士,巢穴甲虫)"
|
|
3939
4207
|
}
|
|
3940
4208
|
};
|
|
3941
4209
|
|
|
@@ -5006,6 +5274,11 @@ async function handlePrimaryAttack(ctx, session, handle, config, equippedWeapon,
|
|
|
5006
5274
|
const EffectProcessor = applyPassiveEffects(targetBoss, activeBosses, weaponName, damageResult.damage, damageResult.hasCrit, ignoreReduction.ignoreRate, careerData);
|
|
5007
5275
|
const initialDamage = EffectProcessor.finalDamage;
|
|
5008
5276
|
await saveAndClearStats(ctx);
|
|
5277
|
+
if (EffectProcessor.spawnNewBossMarks?.length) {
|
|
5278
|
+
for (const bossName of EffectProcessor.spawnNewBossMarks) {
|
|
5279
|
+
await createNestlingBosses(ctx, bossName);
|
|
5280
|
+
}
|
|
5281
|
+
}
|
|
5009
5282
|
const [currentboss] = await ctx.database.get("ggcevo_boss", { name: targetBoss.name });
|
|
5010
5283
|
const currentHP = currentboss.HP;
|
|
5011
5284
|
const isDefeated = currentHP <= 0;
|
|
@@ -5418,6 +5691,33 @@ async function testAttackFunction(ctx, session, handle, config, equippedWeapon,
|
|
|
5418
5691
|
};
|
|
5419
5692
|
}
|
|
5420
5693
|
__name(testAttackFunction, "testAttackFunction");
|
|
5694
|
+
async function createNestlingBosses(ctx, nestlingName) {
|
|
5695
|
+
let foundMinion = null;
|
|
5696
|
+
let groupId = null;
|
|
5697
|
+
for (const bossGroup of bossPool) {
|
|
5698
|
+
const minion = bossGroup.minions.find((m) => m.name === nestlingName);
|
|
5699
|
+
if (minion) {
|
|
5700
|
+
foundMinion = minion;
|
|
5701
|
+
groupId = bossGroup.id;
|
|
5702
|
+
break;
|
|
5703
|
+
}
|
|
5704
|
+
}
|
|
5705
|
+
if (!foundMinion) {
|
|
5706
|
+
throw new Error(`未知的巢穴子代名称: ${nestlingName}`);
|
|
5707
|
+
}
|
|
5708
|
+
return ctx.database.create("ggcevo_boss", {
|
|
5709
|
+
name: foundMinion.name,
|
|
5710
|
+
type: foundMinion.type,
|
|
5711
|
+
HP: foundMinion.maxHP,
|
|
5712
|
+
tags: foundMinion.tags,
|
|
5713
|
+
skills: [...foundMinion.passive],
|
|
5714
|
+
energy: foundMinion.maxEnergy,
|
|
5715
|
+
groupId,
|
|
5716
|
+
isActive: true,
|
|
5717
|
+
respawnTime: /* @__PURE__ */ new Date()
|
|
5718
|
+
});
|
|
5719
|
+
}
|
|
5720
|
+
__name(createNestlingBosses, "createNestlingBosses");
|
|
5421
5721
|
|
|
5422
5722
|
// src/index.ts
|
|
5423
5723
|
var name = "ggcevo-game";
|
|
@@ -7956,7 +8256,7 @@ ${validTypes.join("、")}`;
|
|
|
7956
8256
|
modInfo.isExclusive ? "ℹ️ 专属模块拆卸只返还50%" : ""
|
|
7957
8257
|
].filter(Boolean).join("\n");
|
|
7958
8258
|
});
|
|
7959
|
-
ctx.command("ggcevo/攻击 <bossName>").usage("请输入要攻击的异形名称(例如:攻击 异齿猛兽 或 攻击 寒冰王蛇)").action(async (argv, bossName) => {
|
|
8259
|
+
ctx.guild().command("ggcevo/攻击 <bossName>").usage("请输入要攻击的异形名称(例如:攻击 异齿猛兽 或 攻击 寒冰王蛇)").action(async (argv, bossName) => {
|
|
7960
8260
|
const session = argv.session;
|
|
7961
8261
|
let bossEventBroadcast = null;
|
|
7962
8262
|
let cleanerRewardBroadcast = null;
|
|
@@ -8278,6 +8578,12 @@ ${testResult.passiveMessages.map((m) => `▸ ${m}`).join("\n")}`
|
|
|
8278
8578
|
if (mainBoss.skills.includes("剧毒突袭")) {
|
|
8279
8579
|
result.push(`☠️ 剧毒突袭:${mainBoss.statusLayers}层`);
|
|
8280
8580
|
}
|
|
8581
|
+
if (mainBoss.skills.includes("恐吓尖啸")) {
|
|
8582
|
+
result.push(`😱 恐吓尖啸:${mainBoss.statusLayers}层`);
|
|
8583
|
+
}
|
|
8584
|
+
if (mainBoss.skills.includes("孵化")) {
|
|
8585
|
+
result.push(`🥚 孵化:${mainBoss.statusLayers}层`);
|
|
8586
|
+
}
|
|
8281
8587
|
if (mainBoss.skills.includes("酸蚀池")) {
|
|
8282
8588
|
let acidText;
|
|
8283
8589
|
switch (mainBoss.skillStatus) {
|
|
@@ -8336,6 +8642,12 @@ ${testResult.passiveMessages.map((m) => `▸ ${m}`).join("\n")}`
|
|
|
8336
8642
|
if (minion.skills.includes("剧毒突袭")) {
|
|
8337
8643
|
minionInfo.push(`☠️ 剧毒突袭:${minion.statusLayers}层`);
|
|
8338
8644
|
}
|
|
8645
|
+
if (minion.skills.includes("恐吓尖啸")) {
|
|
8646
|
+
minionInfo.push(`😱 恐吓尖啸:${mainBoss.statusLayers}层`);
|
|
8647
|
+
}
|
|
8648
|
+
if (minion.skills.includes("孵化")) {
|
|
8649
|
+
minionInfo.push(`🥚 孵化:${mainBoss.statusLayers}层`);
|
|
8650
|
+
}
|
|
8339
8651
|
if (minion.skills.includes("酸蚀池")) {
|
|
8340
8652
|
let acidText;
|
|
8341
8653
|
switch (minion.skillStatus) {
|
|
@@ -8382,7 +8694,11 @@ ${testResult.passiveMessages.map((m) => `▸ ${m}`).join("\n")}`
|
|
|
8382
8694
|
isActive: true,
|
|
8383
8695
|
respawnTime: /* @__PURE__ */ new Date()
|
|
8384
8696
|
});
|
|
8385
|
-
|
|
8697
|
+
const excludeNames = ["巢穴雷兽", "巢穴战士", "巢穴甲虫"];
|
|
8698
|
+
const validMinions = bossConfig.minions.filter(
|
|
8699
|
+
(minion) => !excludeNames.includes(minion.name)
|
|
8700
|
+
);
|
|
8701
|
+
for (const minion of validMinions) {
|
|
8386
8702
|
await ctx.database.create("ggcevo_boss", {
|
|
8387
8703
|
name: minion.name,
|
|
8388
8704
|
type: "子代",
|