koishi-plugin-ggcevo-game 1.4.40 → 1.4.42
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 +4 -5
- package/lib/index.js +122 -48
- package/package.json +2 -2
|
@@ -80,14 +80,14 @@ export declare const BattleEffectProcessor: {
|
|
|
80
80
|
nerfMultiplier: number;
|
|
81
81
|
messages: string[];
|
|
82
82
|
};
|
|
83
|
-
handleSurvivalInstinctI: (targetBoss: any) => {
|
|
83
|
+
handleSurvivalInstinctI: (targetBoss: any, damageAmount: number) => {
|
|
84
84
|
messages: string[];
|
|
85
85
|
targetUpdates: {
|
|
86
86
|
name: string;
|
|
87
87
|
updates: Partial<BattleStatistics>;
|
|
88
88
|
} | null;
|
|
89
89
|
} | null;
|
|
90
|
-
handleSurvivalInstinctII: (targetBoss: any) => {
|
|
90
|
+
handleSurvivalInstinctII: (targetBoss: any, damageAmount: number) => {
|
|
91
91
|
messages: string[];
|
|
92
92
|
targetUpdates: {
|
|
93
93
|
name: string;
|
|
@@ -301,8 +301,7 @@ export declare const BattleEffectProcessor: {
|
|
|
301
301
|
updates: Partial<BattleStatistics>;
|
|
302
302
|
} | null;
|
|
303
303
|
} | null;
|
|
304
|
-
|
|
305
|
-
handleRevival: (targetBoss: any) => {
|
|
304
|
+
handleRevival: (targetBoss: any, damageAmount: number) => {
|
|
306
305
|
messages: string[];
|
|
307
306
|
targetUpdates: {
|
|
308
307
|
name: string;
|
|
@@ -318,7 +317,7 @@ export declare const BattleEffectProcessor: {
|
|
|
318
317
|
} | null;
|
|
319
318
|
} | null;
|
|
320
319
|
/** 远古预兆处理(概率免疫能量伤害)- 增加boost参数 */
|
|
321
|
-
handleAncientOmen: (targetBoss: any, weaponData: any, boost
|
|
320
|
+
handleAncientOmen: (targetBoss: any, weaponData: any, boost?: number) => {
|
|
322
321
|
isImmune: boolean;
|
|
323
322
|
messages: string[];
|
|
324
323
|
targetUpdates: {
|
package/lib/index.js
CHANGED
|
@@ -1542,15 +1542,18 @@ async function calculateTotalDamage(ctx, session, config, equippedWeapon, target
|
|
|
1542
1542
|
const weaponConfigEntry = Object.entries(weaponConfig).find(([_, c]) => c.id === equippedWeapon.weaponId);
|
|
1543
1543
|
const [weaponName, weaponData] = weaponConfigEntry;
|
|
1544
1544
|
const baseDamage = weaponData.damage * (1 + 0.1 * equippedWeapon.level);
|
|
1545
|
+
const levelBonusPercent = (0.1 * equippedWeapon.level * 100).toFixed(0);
|
|
1546
|
+
effectMessage.push(`🔫 ${weaponName}Lv.${equippedWeapon.level}:基础伤害+${levelBonusPercent}%`);
|
|
1545
1547
|
let totalAdditive = 0;
|
|
1546
1548
|
const tagAdditive = await calculateTagMultiplier(weaponData, finalTags, equippedWeapon);
|
|
1547
1549
|
totalAdditive += tagAdditive;
|
|
1548
|
-
const { totalModAdd, hasCrit } = calculateModifiers(
|
|
1550
|
+
const { totalModAdd, hasCrit, modMessages } = calculateModifiers(
|
|
1549
1551
|
equippedWeapon,
|
|
1550
1552
|
weaponName,
|
|
1551
1553
|
await checkCritRhythm(ctx, handle)
|
|
1552
1554
|
);
|
|
1553
1555
|
totalAdditive += totalModAdd;
|
|
1556
|
+
effectMessage.push(...modMessages);
|
|
1554
1557
|
const careerBonus = await calculateCareerAdditive(ctx, handle, weaponData.type, weaponData.id);
|
|
1555
1558
|
totalAdditive += careerBonus.value;
|
|
1556
1559
|
if (careerBonus.message) effectMessage.push(careerBonus.message);
|
|
@@ -1566,7 +1569,6 @@ async function calculateTotalDamage(ctx, session, config, equippedWeapon, target
|
|
|
1566
1569
|
let finalDamage = baseDamage * (1 + totalAdditive);
|
|
1567
1570
|
if (finalDamage < 1) {
|
|
1568
1571
|
finalDamage = 1;
|
|
1569
|
-
effectMessage.push("⚠️ 触发伤害保底机制:强制造成1点伤害");
|
|
1570
1572
|
}
|
|
1571
1573
|
return {
|
|
1572
1574
|
damage: Math.round(finalDamage),
|
|
@@ -1607,33 +1609,45 @@ __name(calculateTagMultiplier, "calculateTagMultiplier");
|
|
|
1607
1609
|
function calculateModifiers(equippedWeapon, weaponName, hasCritRhythm) {
|
|
1608
1610
|
let totalModAdd = 0;
|
|
1609
1611
|
let hasCrit = false;
|
|
1612
|
+
const modMessages = [];
|
|
1610
1613
|
let crystalCrit = 0;
|
|
1611
1614
|
let overloadCrit = 0;
|
|
1612
1615
|
let rhythmCrit = 0;
|
|
1613
1616
|
let weaponCrit = 0;
|
|
1614
1617
|
if (weaponName === "MK-4激光步枪") {
|
|
1615
1618
|
weaponCrit = 80;
|
|
1619
|
+
modMessages.push(`🔫 【MK-4激光步枪】武器效果:暴击率+${weaponCrit}%`);
|
|
1616
1620
|
}
|
|
1617
1621
|
equippedWeapon.installedMods.forEach((mod) => {
|
|
1618
1622
|
if (mod === "动能增幅") {
|
|
1619
1623
|
totalModAdd += 0.2;
|
|
1624
|
+
modMessages.push(`🛠️ 【动能增幅】生效:攻击伤害+20%`);
|
|
1620
1625
|
}
|
|
1621
1626
|
if (mod === "裂甲核心" && weaponName === modConfig[mod].exclusiveTo) {
|
|
1622
1627
|
totalModAdd += 0.4;
|
|
1628
|
+
modMessages.push(`🛠️ 【裂甲核心】生效:攻击伤害+40%`);
|
|
1623
1629
|
}
|
|
1624
1630
|
if (mod === "棱镜水晶") {
|
|
1625
1631
|
crystalCrit = 20;
|
|
1632
|
+
modMessages.push(`🛠️ 【棱镜水晶】生效:暴击率+20%`);
|
|
1626
1633
|
}
|
|
1627
1634
|
if (mod === "棱镜超载核心" && weaponName === modConfig[mod].exclusiveTo) {
|
|
1628
1635
|
overloadCrit = 80;
|
|
1636
|
+
modMessages.push(`🛠️ 【棱镜超载核心】生效:暴击率+80%`);
|
|
1629
1637
|
}
|
|
1630
1638
|
});
|
|
1631
1639
|
rhythmCrit = hasCritRhythm ? 20 : 0;
|
|
1640
|
+
if (hasCritRhythm) {
|
|
1641
|
+
modMessages.push(`🎵 暴击韵律祈愿:暴击率+20%`);
|
|
1642
|
+
}
|
|
1632
1643
|
const totalCritRate = Math.min(
|
|
1633
1644
|
crystalCrit + overloadCrit + rhythmCrit + weaponCrit,
|
|
1634
1645
|
// 包含武器专属暴击
|
|
1635
1646
|
100
|
|
1636
1647
|
);
|
|
1648
|
+
if (totalCritRate > 0) {
|
|
1649
|
+
modMessages.push(`🎯 总暴击率:${totalCritRate}%`);
|
|
1650
|
+
}
|
|
1637
1651
|
if (totalCritRate > 0) {
|
|
1638
1652
|
const roll = Math.random() * 100;
|
|
1639
1653
|
if (roll <= totalCritRate) {
|
|
@@ -1641,7 +1655,12 @@ function calculateModifiers(equippedWeapon, weaponName, hasCritRhythm) {
|
|
|
1641
1655
|
totalModAdd += 1;
|
|
1642
1656
|
}
|
|
1643
1657
|
}
|
|
1644
|
-
return {
|
|
1658
|
+
return {
|
|
1659
|
+
totalModAdd,
|
|
1660
|
+
hasCrit,
|
|
1661
|
+
modMessages
|
|
1662
|
+
// 返回模块消息数组
|
|
1663
|
+
};
|
|
1645
1664
|
}
|
|
1646
1665
|
__name(calculateModifiers, "calculateModifiers");
|
|
1647
1666
|
async function calculateCareerAdditive(ctx, handle, weaponType, weaponId) {
|
|
@@ -2642,22 +2661,25 @@ var BattleEffectProcessor = {
|
|
|
2642
2661
|
}
|
|
2643
2662
|
return null;
|
|
2644
2663
|
}, "handleStressShellII"),
|
|
2645
|
-
|
|
2664
|
+
// 求生本能I (修改后)
|
|
2665
|
+
handleSurvivalInstinctI: /* @__PURE__ */ __name(function(targetBoss, damageAmount) {
|
|
2646
2666
|
const messages = [];
|
|
2647
2667
|
if (!targetBoss.skills.includes("求生本能I")) {
|
|
2648
2668
|
return null;
|
|
2649
2669
|
}
|
|
2650
2670
|
const targetMaxHP = getMaxHPByName(targetBoss.name);
|
|
2651
|
-
const
|
|
2652
|
-
if (
|
|
2671
|
+
const isLethal = damageAmount >= targetBoss.HP;
|
|
2672
|
+
if (!isLethal) {
|
|
2653
2673
|
return null;
|
|
2654
2674
|
}
|
|
2655
2675
|
const selfHealAmount = Math.round(targetMaxHP * 0.3);
|
|
2656
2676
|
const updates = {
|
|
2657
2677
|
hpChange: selfHealAmount,
|
|
2678
|
+
// 回复生命值
|
|
2658
2679
|
skillsRemoved: ["求生本能I"]
|
|
2680
|
+
// 移除技能
|
|
2659
2681
|
};
|
|
2660
|
-
messages.push(`❤️ 【求生本能I
|
|
2682
|
+
messages.push(`❤️ 【求生本能I】触发:承受致命伤害时,回复${selfHealAmount}点生命值`);
|
|
2661
2683
|
messages.push(`❤️ 【求生本能I】技能移除`);
|
|
2662
2684
|
return {
|
|
2663
2685
|
messages,
|
|
@@ -2667,14 +2689,15 @@ var BattleEffectProcessor = {
|
|
|
2667
2689
|
}
|
|
2668
2690
|
};
|
|
2669
2691
|
}, "handleSurvivalInstinctI"),
|
|
2670
|
-
|
|
2692
|
+
// 求生本能II (修改后)
|
|
2693
|
+
handleSurvivalInstinctII: /* @__PURE__ */ __name(function(targetBoss, damageAmount) {
|
|
2671
2694
|
const messages = [];
|
|
2672
2695
|
if (!targetBoss.skills.includes("求生本能II")) {
|
|
2673
2696
|
return null;
|
|
2674
2697
|
}
|
|
2675
2698
|
const targetMaxHP = getMaxHPByName(targetBoss.name);
|
|
2676
|
-
const
|
|
2677
|
-
if (
|
|
2699
|
+
const isLethal = damageAmount >= targetBoss.HP;
|
|
2700
|
+
if (!isLethal) {
|
|
2678
2701
|
return null;
|
|
2679
2702
|
}
|
|
2680
2703
|
const selfHealAmount = Math.round(targetMaxHP * 0.5);
|
|
@@ -2684,7 +2707,7 @@ var BattleEffectProcessor = {
|
|
|
2684
2707
|
skillsRemoved: ["求生本能II"]
|
|
2685
2708
|
// 移除的技能
|
|
2686
2709
|
};
|
|
2687
|
-
messages.push(`❤️ 【求生本能II
|
|
2710
|
+
messages.push(`❤️ 【求生本能II】触发:承受致命伤害时,回复${selfHealAmount}点生命值`);
|
|
2688
2711
|
messages.push(`❤️ 【求生本能II】技能移除`);
|
|
2689
2712
|
return {
|
|
2690
2713
|
messages,
|
|
@@ -3506,6 +3529,7 @@ var BattleEffectProcessor = {
|
|
|
3506
3529
|
}
|
|
3507
3530
|
return { nerfMultiplier, doubleAstralWind, messages };
|
|
3508
3531
|
}, "handleMindFrenzy"),
|
|
3532
|
+
//宇宙能量
|
|
3509
3533
|
handleCosmicEnergy: /* @__PURE__ */ __name(function(targetBoss, damage) {
|
|
3510
3534
|
if (!targetBoss.skills.includes("宇宙能量")) {
|
|
3511
3535
|
return null;
|
|
@@ -3549,13 +3573,14 @@ var BattleEffectProcessor = {
|
|
|
3549
3573
|
}
|
|
3550
3574
|
};
|
|
3551
3575
|
}, "handleCosmicEnergy"),
|
|
3552
|
-
|
|
3553
|
-
handleRevival: /* @__PURE__ */ __name(function(targetBoss) {
|
|
3576
|
+
// 复苏 (修改后)
|
|
3577
|
+
handleRevival: /* @__PURE__ */ __name(function(targetBoss, damageAmount) {
|
|
3554
3578
|
const messages = [];
|
|
3555
3579
|
if (!targetBoss.skills.includes("复苏")) {
|
|
3556
3580
|
return null;
|
|
3557
3581
|
}
|
|
3558
|
-
|
|
3582
|
+
const isLethal = damageAmount >= targetBoss.HP;
|
|
3583
|
+
if (!isLethal) {
|
|
3559
3584
|
return null;
|
|
3560
3585
|
}
|
|
3561
3586
|
const maxHP = getMaxHPByName(targetBoss.name);
|
|
@@ -3566,7 +3591,7 @@ var BattleEffectProcessor = {
|
|
|
3566
3591
|
name: targetBoss.name,
|
|
3567
3592
|
updates: {
|
|
3568
3593
|
hpChange: healAmount,
|
|
3569
|
-
// 回复
|
|
3594
|
+
// 回复60%最大生命值
|
|
3570
3595
|
energyChange: energyGain,
|
|
3571
3596
|
// 回复100%能量
|
|
3572
3597
|
skillsRemoved: ["复苏"],
|
|
@@ -3608,7 +3633,7 @@ var BattleEffectProcessor = {
|
|
|
3608
3633
|
};
|
|
3609
3634
|
}, "handleBladeOfLight"),
|
|
3610
3635
|
/** 远古预兆处理(概率免疫能量伤害)- 增加boost参数 */
|
|
3611
|
-
handleAncientOmen: /* @__PURE__ */ __name(function(targetBoss, weaponData, boost) {
|
|
3636
|
+
handleAncientOmen: /* @__PURE__ */ __name(function(targetBoss, weaponData, boost = 0) {
|
|
3612
3637
|
const messages = [];
|
|
3613
3638
|
let isImmune = false;
|
|
3614
3639
|
let targetUpdates = null;
|
|
@@ -3976,21 +4001,12 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
|
|
|
3976
4001
|
messages.push(...lightningResult.messages);
|
|
3977
4002
|
}
|
|
3978
4003
|
const coldImmuneEffects = [
|
|
3979
|
-
{
|
|
3980
|
-
effect: BattleEffectProcessor.handleFrostEvolution,
|
|
3981
|
-
args: [targetBoss, weaponName, damage]
|
|
3982
|
-
},
|
|
3983
4004
|
{
|
|
3984
4005
|
effect: BattleEffectProcessor.handleColdAdaptation,
|
|
3985
4006
|
args: [targetBoss, weaponName]
|
|
3986
4007
|
}
|
|
3987
4008
|
];
|
|
3988
|
-
const fireImmuneEffects = [
|
|
3989
|
-
{
|
|
3990
|
-
effect: BattleEffectProcessor.handleFlameAlien,
|
|
3991
|
-
args: [targetBoss, weaponName, damage]
|
|
3992
|
-
}
|
|
3993
|
-
];
|
|
4009
|
+
const fireImmuneEffects = [];
|
|
3994
4010
|
const chanceImmuneEffects = [
|
|
3995
4011
|
{
|
|
3996
4012
|
effect: BattleEffectProcessor.handleDeadlyHit,
|
|
@@ -4019,7 +4035,7 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
|
|
|
4019
4035
|
updateStatsByName(solarFlareResult.targetUpdates.name, solarFlareResult.targetUpdates.updates);
|
|
4020
4036
|
}
|
|
4021
4037
|
}
|
|
4022
|
-
const carpetBombResult =
|
|
4038
|
+
const carpetBombResult = BattleEffectProcessor.handleCarpetBombing(targetBoss);
|
|
4023
4039
|
if (carpetBombResult) {
|
|
4024
4040
|
isolatedImmunityMark = carpetBombResult.tempMark || false;
|
|
4025
4041
|
if (carpetBombResult.nerfMultiplier) {
|
|
@@ -4038,6 +4054,8 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
|
|
|
4038
4054
|
{ effect: BattleEffectProcessor.handleEnergyBlackhole, args: [targetBoss] },
|
|
4039
4055
|
{ effect: BattleEffectProcessor.handleColossalRampage, args: [targetBoss] },
|
|
4040
4056
|
{ effect: BattleEffectProcessor.handleVomit, args: [targetBoss] },
|
|
4057
|
+
{ effect: BattleEffectProcessor.handleRampage, args: [targetBoss] },
|
|
4058
|
+
{ effect: BattleEffectProcessor.handleHyperRangeShift, args: [targetBoss] },
|
|
4041
4059
|
// 双参数效果
|
|
4042
4060
|
{ effect: BattleEffectProcessor.handleStructuralArmor, args: [targetBoss, weaponData] },
|
|
4043
4061
|
{ effect: BattleEffectProcessor.handleDisguise, args: [targetBoss, weaponName] },
|
|
@@ -4045,9 +4063,7 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
|
|
|
4045
4063
|
{ effect: BattleEffectProcessor.handleIsolated, args: [targetBoss, activeBosses, isolatedImmunityMark] },
|
|
4046
4064
|
{ effect: BattleEffectProcessor.handleInfectedSpaceStation, args: [targetBoss, activeBosses] },
|
|
4047
4065
|
{ 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] }
|
|
4066
|
+
{ effect: BattleEffectProcessor.handleHunterAlien, args: [targetBoss, activeBosses, weaponName] }
|
|
4051
4067
|
];
|
|
4052
4068
|
for (const effectItem of damageAdjustEffects) {
|
|
4053
4069
|
const result = processEffect(effectItem.effect, ...effectItem.args);
|
|
@@ -4088,15 +4104,11 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
|
|
|
4088
4104
|
{ effect: BattleEffectProcessor.handleFrostRegeneration, args: [targetBoss, activeBosses] },
|
|
4089
4105
|
{ effect: BattleEffectProcessor.handleFrostAura, args: [targetBoss, activeBosses] },
|
|
4090
4106
|
{ effect: BattleEffectProcessor.handleSentryGun, args: [targetBoss, activeBosses] },
|
|
4091
|
-
{ effect: BattleEffectProcessor.handleSurvivalInstinctI, args: [targetBoss] },
|
|
4092
|
-
{ effect: BattleEffectProcessor.handleSurvivalInstinctII, args: [targetBoss] },
|
|
4093
4107
|
{ effect: BattleEffectProcessor.handleMoldGrowth, args: [targetBoss, activeBosses] },
|
|
4094
4108
|
{ effect: BattleEffectProcessor.handleElectricShockwave, args: [targetBoss] },
|
|
4095
4109
|
{ effect: BattleEffectProcessor.handlePulse, args: [targetBoss, activeBosses] },
|
|
4096
4110
|
{ effect: BattleEffectProcessor.handleFeeding, args: [targetBoss] },
|
|
4097
4111
|
{ effect: BattleEffectProcessor.handleBurningBurrow, args: [targetBoss] },
|
|
4098
|
-
{ effect: BattleEffectProcessor.handleRevival, args: [targetBoss] },
|
|
4099
|
-
{ effect: BattleEffectProcessor.handleCosmicEnergy, args: [targetBoss, damage] },
|
|
4100
4112
|
{ effect: BattleEffectProcessor.handleBombardmentGuide, args: [targetBoss] },
|
|
4101
4113
|
{ effect: BattleEffectProcessor.handleOverdriveShield, args: [targetBoss, activeBosses] }
|
|
4102
4114
|
];
|
|
@@ -4180,18 +4192,80 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
|
|
|
4180
4192
|
layerReduced = layerReduceResult.reductionSuccess || false;
|
|
4181
4193
|
}
|
|
4182
4194
|
let finalDamage = damage;
|
|
4183
|
-
|
|
4184
|
-
|
|
4185
|
-
|
|
4186
|
-
|
|
4187
|
-
|
|
4188
|
-
|
|
4189
|
-
|
|
4190
|
-
|
|
4195
|
+
let adjustedNerfMultiplier = totalNerfMultiplier * (1 - ignoreRate);
|
|
4196
|
+
const damageMultiplier = 1 + totalBuffMultiplier - adjustedNerfMultiplier;
|
|
4197
|
+
finalDamage = Math.max(1, Math.round(damage * damageMultiplier));
|
|
4198
|
+
const frostEvolutionResult = BattleEffectProcessor.handleFrostEvolution(
|
|
4199
|
+
targetBoss,
|
|
4200
|
+
weaponName,
|
|
4201
|
+
finalDamage
|
|
4202
|
+
// 使用最新计算的finalDamage
|
|
4203
|
+
);
|
|
4204
|
+
if (frostEvolutionResult) {
|
|
4205
|
+
messages.push(...frostEvolutionResult.messages);
|
|
4206
|
+
if (frostEvolutionResult.targetUpdates) {
|
|
4207
|
+
updateStatsByName(frostEvolutionResult.targetUpdates.name, frostEvolutionResult.targetUpdates.updates);
|
|
4208
|
+
}
|
|
4209
|
+
if (frostEvolutionResult.isImmune) {
|
|
4210
|
+
immune = true;
|
|
4211
|
+
finalDamage = 0;
|
|
4191
4212
|
}
|
|
4192
|
-
}
|
|
4213
|
+
}
|
|
4214
|
+
const flameAlienResult = BattleEffectProcessor.handleFlameAlien(
|
|
4215
|
+
targetBoss,
|
|
4216
|
+
weaponName,
|
|
4217
|
+
finalDamage
|
|
4218
|
+
// 使用最新计算的finalDamage
|
|
4219
|
+
);
|
|
4220
|
+
if (flameAlienResult) {
|
|
4221
|
+
messages.push(...flameAlienResult.messages);
|
|
4222
|
+
if (flameAlienResult.targetUpdates) {
|
|
4223
|
+
updateStatsByName(flameAlienResult.targetUpdates.name, flameAlienResult.targetUpdates.updates);
|
|
4224
|
+
}
|
|
4225
|
+
if (flameAlienResult.isImmune) {
|
|
4226
|
+
immune = true;
|
|
4227
|
+
finalDamage = 0;
|
|
4228
|
+
}
|
|
4229
|
+
}
|
|
4230
|
+
const cosmicEnergyResult = BattleEffectProcessor.handleCosmicEnergy(
|
|
4231
|
+
targetBoss,
|
|
4232
|
+
finalDamage
|
|
4233
|
+
// 使用最新计算的finalDamage
|
|
4234
|
+
);
|
|
4235
|
+
if (cosmicEnergyResult) {
|
|
4236
|
+
messages.push(...cosmicEnergyResult.messages);
|
|
4237
|
+
if (cosmicEnergyResult.targetUpdates) {
|
|
4238
|
+
updateStatsByName(cosmicEnergyResult.targetUpdates.name, cosmicEnergyResult.targetUpdates.updates);
|
|
4239
|
+
}
|
|
4240
|
+
}
|
|
4241
|
+
if (immune) {
|
|
4193
4242
|
finalDamage = 0;
|
|
4194
4243
|
}
|
|
4244
|
+
const isLethal = finalDamage >= targetBoss.HP && finalDamage > 0;
|
|
4245
|
+
const survivalSkills = [
|
|
4246
|
+
{ func: BattleEffectProcessor.handleSurvivalInstinctI, name: "求生本能I" },
|
|
4247
|
+
{ func: BattleEffectProcessor.handleSurvivalInstinctII, name: "求生本能II" },
|
|
4248
|
+
{ func: BattleEffectProcessor.handleRevival, name: "复苏" }
|
|
4249
|
+
];
|
|
4250
|
+
let revivalTriggered = false;
|
|
4251
|
+
if (isLethal) {
|
|
4252
|
+
for (const skill of survivalSkills) {
|
|
4253
|
+
if (targetBoss.skills.includes(skill.name)) {
|
|
4254
|
+
const result = skill.func(targetBoss, finalDamage);
|
|
4255
|
+
if (result) {
|
|
4256
|
+
updateStatsByName(result.targetUpdates.name, result.targetUpdates.updates);
|
|
4257
|
+
messages.push(...result.messages);
|
|
4258
|
+
revivalTriggered = true;
|
|
4259
|
+
break;
|
|
4260
|
+
}
|
|
4261
|
+
}
|
|
4262
|
+
}
|
|
4263
|
+
}
|
|
4264
|
+
if (!revivalTriggered && !immune && finalDamage > 0) {
|
|
4265
|
+
updateStatsByName(targetBoss.name, {
|
|
4266
|
+
hpChange: -finalDamage
|
|
4267
|
+
});
|
|
4268
|
+
}
|
|
4195
4269
|
return {
|
|
4196
4270
|
finalDamage,
|
|
4197
4271
|
messages,
|
|
@@ -4726,7 +4800,7 @@ async function handleIgnoreReductionEffects(ctx, handle, weaponName, targetBoss)
|
|
|
4726
4800
|
}
|
|
4727
4801
|
if (careerData.career === "猩红杀手" && weaponName === "侦察步枪") {
|
|
4728
4802
|
ignoreEffects.push(0.2);
|
|
4729
|
-
messages.push(`🎯
|
|
4803
|
+
messages.push(`🎯 猩红杀手职业:无视20%减伤效果`);
|
|
4730
4804
|
}
|
|
4731
4805
|
}, "handleCareerEffects");
|
|
4732
4806
|
await handleCareerEffects();
|
|
@@ -5303,7 +5377,7 @@ function apply(ctx, config) {
|
|
|
5303
5377
|
const [itemName, itemData] = entry;
|
|
5304
5378
|
return itemData.description ? `${itemName} x ${userItem.quantity}:${itemData.description}` : `${itemName} x ${userItem.quantity}`;
|
|
5305
5379
|
});
|
|
5306
|
-
return `【${
|
|
5380
|
+
return `【${session.username}的背包】
|
|
5307
5381
|
${itemDetails.join("\n")}`;
|
|
5308
5382
|
});
|
|
5309
5383
|
ctx.command("ggcevo/签到").action(async (argv) => {
|
|
@@ -6969,12 +7043,12 @@ ${validTypes.join("、")}`;
|
|
|
6969
7043
|
return [
|
|
6970
7044
|
`${statusIcon} ${weaponName} ${statusText}`,
|
|
6971
7045
|
`等级:Lv.${w.level} | 改装槽:${w.modificationSlots}`,
|
|
6972
|
-
|
|
7046
|
+
`基础伤害:${currentDamage.toFixed(1)}`,
|
|
6973
7047
|
`改装:${mods}`
|
|
6974
7048
|
].join("\n");
|
|
6975
7049
|
}));
|
|
6976
7050
|
return [
|
|
6977
|
-
`🛡️ ${
|
|
7051
|
+
`🛡️ ${session.username}的武器仓库`,
|
|
6978
7052
|
'使用"装备 武器名称"来装备武器',
|
|
6979
7053
|
"⚡表示当前装备武器",
|
|
6980
7054
|
"──────────────",
|
|
@@ -8151,7 +8225,7 @@ ${validTypes.join("、")}`;
|
|
|
8151
8225
|
]);
|
|
8152
8226
|
const totalRewards = signData[0]?.totalRewards || 0;
|
|
8153
8227
|
const redcrystal = careerData[0]?.redcrystal || 0;
|
|
8154
|
-
const message = [`【${
|
|
8228
|
+
const message = [`【${session.username}的仓库】`];
|
|
8155
8229
|
message.push(`💰 金币:${totalRewards}`);
|
|
8156
8230
|
if (careerData[0]?.group === "辛迪加海盗") {
|
|
8157
8231
|
message.push(`🔴 红晶:${redcrystal}`);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "koishi-plugin-ggcevo-game",
|
|
3
3
|
"description": "《星际争霸2》咕咕虫-evolved地图的专属游戏助手插件,集成天梯排行、抽奖系统、签到福利、兑换商城等丰富功能。",
|
|
4
|
-
"version": "1.4.
|
|
4
|
+
"version": "1.4.42",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"typings": "lib/index.d.ts",
|
|
7
7
|
"files": [
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"peerDependencies": {
|
|
20
20
|
"@koishijs/plugin-proxy-agent": "^0.3.3",
|
|
21
21
|
"koishi": "^4.18.7",
|
|
22
|
-
"koishi-plugin-sc2arcade-search": "^1.1.
|
|
22
|
+
"koishi-plugin-sc2arcade-search": "^1.1.19"
|
|
23
23
|
},
|
|
24
24
|
"koishi": {
|
|
25
25
|
"service": {
|