koishi-plugin-ggcevo-game 1.4.41 → 1.4.43
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 +2 -8
- package/lib/boss/passive.d.ts +0 -4
- package/lib/index.js +93 -70
- package/package.json +1 -1
|
@@ -317,7 +317,7 @@ export declare const BattleEffectProcessor: {
|
|
|
317
317
|
} | null;
|
|
318
318
|
} | null;
|
|
319
319
|
/** 远古预兆处理(概率免疫能量伤害)- 增加boost参数 */
|
|
320
|
-
handleAncientOmen: (targetBoss: any, weaponData: any
|
|
320
|
+
handleAncientOmen: (targetBoss: any, weaponData: any) => {
|
|
321
321
|
isImmune: boolean;
|
|
322
322
|
messages: string[];
|
|
323
323
|
targetUpdates: {
|
|
@@ -325,12 +325,6 @@ export declare const BattleEffectProcessor: {
|
|
|
325
325
|
updates: Partial<BattleStatistics>;
|
|
326
326
|
} | null;
|
|
327
327
|
} | null;
|
|
328
|
-
/** 闪电冲锋处理(提升其他技能概率) - 修正版 */
|
|
329
|
-
handleLightningCharge: (targetBoss: any) => {
|
|
330
|
-
ancientOmenBoost: number;
|
|
331
|
-
psychicForgeBoost: number;
|
|
332
|
-
messages: string[];
|
|
333
|
-
};
|
|
334
328
|
/** 超视距穿梭处理(层数相关伤害调整) */
|
|
335
329
|
handleHyperRangeShift: (targetBoss: any) => {
|
|
336
330
|
nerfMultiplier: number;
|
|
@@ -338,7 +332,7 @@ export declare const BattleEffectProcessor: {
|
|
|
338
332
|
messages: string[];
|
|
339
333
|
};
|
|
340
334
|
/** 灵能构造炉处理(随机获得技能)- 增加boost参数 */
|
|
341
|
-
handlePsychicForge: (targetBoss: any
|
|
335
|
+
handlePsychicForge: (targetBoss: any) => {
|
|
342
336
|
messages: string[];
|
|
343
337
|
newSkill: string | null;
|
|
344
338
|
targetUpdates: {
|
package/lib/boss/passive.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -1449,12 +1449,8 @@ var passiveConfig = {
|
|
|
1449
1449
|
description: "受击获得1层「光影之刃」(上限50层)"
|
|
1450
1450
|
},
|
|
1451
1451
|
"远古预兆": {
|
|
1452
|
-
type: "
|
|
1453
|
-
description: "受击时1%概率免疫非热能伤害并回复100
|
|
1454
|
-
},
|
|
1455
|
-
"闪电冲锋": {
|
|
1456
|
-
type: "状态增强(触发概率提升)",
|
|
1457
|
-
description: "每层「光影之刃」使「远古预兆」和「灵能构造炉」触发概率提升0.5%"
|
|
1452
|
+
type: "状态免疫(伤害免疫)+状态增强(触发概率提升)",
|
|
1453
|
+
description: "受击时1%概率免疫非热能伤害并回复100点能量,每层「光影之刃」使触发概率提升0.5%"
|
|
1458
1454
|
},
|
|
1459
1455
|
"超视距穿梭": {
|
|
1460
1456
|
type: "伤害增减(条件性)",
|
|
@@ -1478,7 +1474,7 @@ var passiveConfig = {
|
|
|
1478
1474
|
},
|
|
1479
1475
|
"轰炸引导": {
|
|
1480
1476
|
type: "生存强化(能量回复)",
|
|
1481
|
-
description: "受击时10%概率回复(「光影之刃」层数×
|
|
1477
|
+
description: "受击时10%概率回复(「光影之刃」层数×10)点能量"
|
|
1482
1478
|
}
|
|
1483
1479
|
};
|
|
1484
1480
|
|
|
@@ -1542,15 +1538,18 @@ async function calculateTotalDamage(ctx, session, config, equippedWeapon, target
|
|
|
1542
1538
|
const weaponConfigEntry = Object.entries(weaponConfig).find(([_, c]) => c.id === equippedWeapon.weaponId);
|
|
1543
1539
|
const [weaponName, weaponData] = weaponConfigEntry;
|
|
1544
1540
|
const baseDamage = weaponData.damage * (1 + 0.1 * equippedWeapon.level);
|
|
1541
|
+
const levelBonusPercent = (0.1 * equippedWeapon.level * 100).toFixed(0);
|
|
1542
|
+
effectMessage.push(`🔫 ${weaponName}Lv.${equippedWeapon.level}:基础伤害+${levelBonusPercent}%`);
|
|
1545
1543
|
let totalAdditive = 0;
|
|
1546
1544
|
const tagAdditive = await calculateTagMultiplier(weaponData, finalTags, equippedWeapon);
|
|
1547
1545
|
totalAdditive += tagAdditive;
|
|
1548
|
-
const { totalModAdd, hasCrit } = calculateModifiers(
|
|
1546
|
+
const { totalModAdd, hasCrit, modMessages } = calculateModifiers(
|
|
1549
1547
|
equippedWeapon,
|
|
1550
1548
|
weaponName,
|
|
1551
1549
|
await checkCritRhythm(ctx, handle)
|
|
1552
1550
|
);
|
|
1553
1551
|
totalAdditive += totalModAdd;
|
|
1552
|
+
effectMessage.push(...modMessages);
|
|
1554
1553
|
const careerBonus = await calculateCareerAdditive(ctx, handle, weaponData.type, weaponData.id);
|
|
1555
1554
|
totalAdditive += careerBonus.value;
|
|
1556
1555
|
if (careerBonus.message) effectMessage.push(careerBonus.message);
|
|
@@ -1566,7 +1565,6 @@ async function calculateTotalDamage(ctx, session, config, equippedWeapon, target
|
|
|
1566
1565
|
let finalDamage = baseDamage * (1 + totalAdditive);
|
|
1567
1566
|
if (finalDamage < 1) {
|
|
1568
1567
|
finalDamage = 1;
|
|
1569
|
-
effectMessage.push("⚠️ 触发伤害保底机制:强制造成1点伤害");
|
|
1570
1568
|
}
|
|
1571
1569
|
return {
|
|
1572
1570
|
damage: Math.round(finalDamage),
|
|
@@ -1607,33 +1605,45 @@ __name(calculateTagMultiplier, "calculateTagMultiplier");
|
|
|
1607
1605
|
function calculateModifiers(equippedWeapon, weaponName, hasCritRhythm) {
|
|
1608
1606
|
let totalModAdd = 0;
|
|
1609
1607
|
let hasCrit = false;
|
|
1608
|
+
const modMessages = [];
|
|
1610
1609
|
let crystalCrit = 0;
|
|
1611
1610
|
let overloadCrit = 0;
|
|
1612
1611
|
let rhythmCrit = 0;
|
|
1613
1612
|
let weaponCrit = 0;
|
|
1614
1613
|
if (weaponName === "MK-4激光步枪") {
|
|
1615
1614
|
weaponCrit = 80;
|
|
1615
|
+
modMessages.push(`🔫 【MK-4激光步枪】武器效果:暴击率+${weaponCrit}%`);
|
|
1616
1616
|
}
|
|
1617
1617
|
equippedWeapon.installedMods.forEach((mod) => {
|
|
1618
1618
|
if (mod === "动能增幅") {
|
|
1619
1619
|
totalModAdd += 0.2;
|
|
1620
|
+
modMessages.push(`🛠️ 【动能增幅】生效:攻击伤害+20%`);
|
|
1620
1621
|
}
|
|
1621
1622
|
if (mod === "裂甲核心" && weaponName === modConfig[mod].exclusiveTo) {
|
|
1622
1623
|
totalModAdd += 0.4;
|
|
1624
|
+
modMessages.push(`🛠️ 【裂甲核心】生效:攻击伤害+40%`);
|
|
1623
1625
|
}
|
|
1624
1626
|
if (mod === "棱镜水晶") {
|
|
1625
1627
|
crystalCrit = 20;
|
|
1628
|
+
modMessages.push(`🛠️ 【棱镜水晶】生效:暴击率+20%`);
|
|
1626
1629
|
}
|
|
1627
1630
|
if (mod === "棱镜超载核心" && weaponName === modConfig[mod].exclusiveTo) {
|
|
1628
1631
|
overloadCrit = 80;
|
|
1632
|
+
modMessages.push(`🛠️ 【棱镜超载核心】生效:暴击率+80%`);
|
|
1629
1633
|
}
|
|
1630
1634
|
});
|
|
1631
1635
|
rhythmCrit = hasCritRhythm ? 20 : 0;
|
|
1636
|
+
if (hasCritRhythm) {
|
|
1637
|
+
modMessages.push(`🎵 暴击韵律祈愿:暴击率+20%`);
|
|
1638
|
+
}
|
|
1632
1639
|
const totalCritRate = Math.min(
|
|
1633
1640
|
crystalCrit + overloadCrit + rhythmCrit + weaponCrit,
|
|
1634
1641
|
// 包含武器专属暴击
|
|
1635
1642
|
100
|
|
1636
1643
|
);
|
|
1644
|
+
if (totalCritRate > 0) {
|
|
1645
|
+
modMessages.push(`🎯 总暴击率:${totalCritRate}%`);
|
|
1646
|
+
}
|
|
1637
1647
|
if (totalCritRate > 0) {
|
|
1638
1648
|
const roll = Math.random() * 100;
|
|
1639
1649
|
if (roll <= totalCritRate) {
|
|
@@ -1641,7 +1651,12 @@ function calculateModifiers(equippedWeapon, weaponName, hasCritRhythm) {
|
|
|
1641
1651
|
totalModAdd += 1;
|
|
1642
1652
|
}
|
|
1643
1653
|
}
|
|
1644
|
-
return {
|
|
1654
|
+
return {
|
|
1655
|
+
totalModAdd,
|
|
1656
|
+
hasCrit,
|
|
1657
|
+
modMessages
|
|
1658
|
+
// 返回模块消息数组
|
|
1659
|
+
};
|
|
1645
1660
|
}
|
|
1646
1661
|
__name(calculateModifiers, "calculateModifiers");
|
|
1647
1662
|
async function calculateCareerAdditive(ctx, handle, weaponType, weaponId) {
|
|
@@ -3510,6 +3525,7 @@ var BattleEffectProcessor = {
|
|
|
3510
3525
|
}
|
|
3511
3526
|
return { nerfMultiplier, doubleAstralWind, messages };
|
|
3512
3527
|
}, "handleMindFrenzy"),
|
|
3528
|
+
//宇宙能量
|
|
3513
3529
|
handleCosmicEnergy: /* @__PURE__ */ __name(function(targetBoss, damage) {
|
|
3514
3530
|
if (!targetBoss.skills.includes("宇宙能量")) {
|
|
3515
3531
|
return null;
|
|
@@ -3613,7 +3629,7 @@ var BattleEffectProcessor = {
|
|
|
3613
3629
|
};
|
|
3614
3630
|
}, "handleBladeOfLight"),
|
|
3615
3631
|
/** 远古预兆处理(概率免疫能量伤害)- 增加boost参数 */
|
|
3616
|
-
handleAncientOmen: /* @__PURE__ */ __name(function(targetBoss, weaponData
|
|
3632
|
+
handleAncientOmen: /* @__PURE__ */ __name(function(targetBoss, weaponData) {
|
|
3617
3633
|
const messages = [];
|
|
3618
3634
|
let isImmune = false;
|
|
3619
3635
|
let targetUpdates = null;
|
|
@@ -3623,8 +3639,11 @@ var BattleEffectProcessor = {
|
|
|
3623
3639
|
if (weaponData.type === "热能武器") {
|
|
3624
3640
|
return null;
|
|
3625
3641
|
}
|
|
3642
|
+
const lightBladeStacks = targetBoss.skillStacks || 0;
|
|
3643
|
+
const boostPerStack = 5e-3;
|
|
3644
|
+
const totalBoost = lightBladeStacks * boostPerStack;
|
|
3626
3645
|
const baseProbability = 0.01;
|
|
3627
|
-
const actualProbability = Math.min(baseProbability +
|
|
3646
|
+
const actualProbability = Math.min(baseProbability + totalBoost, 1);
|
|
3628
3647
|
if (Math.random() >= actualProbability) {
|
|
3629
3648
|
return null;
|
|
3630
3649
|
}
|
|
@@ -3644,24 +3663,6 @@ var BattleEffectProcessor = {
|
|
|
3644
3663
|
targetUpdates
|
|
3645
3664
|
};
|
|
3646
3665
|
}, "handleAncientOmen"),
|
|
3647
|
-
/** 闪电冲锋处理(提升其他技能概率) - 修正版 */
|
|
3648
|
-
handleLightningCharge: /* @__PURE__ */ __name(function(targetBoss) {
|
|
3649
|
-
const messages = [];
|
|
3650
|
-
let ancientOmenBoost = 0;
|
|
3651
|
-
let psychicForgeBoost = 0;
|
|
3652
|
-
if (!targetBoss.skills.includes("闪电冲锋")) {
|
|
3653
|
-
return null;
|
|
3654
|
-
}
|
|
3655
|
-
const lightBladeStacks = targetBoss.skillStacks || 0;
|
|
3656
|
-
const boostPerStack = 5e-3;
|
|
3657
|
-
const totalBoost = lightBladeStacks * boostPerStack;
|
|
3658
|
-
ancientOmenBoost = totalBoost;
|
|
3659
|
-
psychicForgeBoost = totalBoost;
|
|
3660
|
-
if (totalBoost > 0) {
|
|
3661
|
-
messages.push(`⚡ 【闪电冲锋】生效:「光影之刃」当前${lightBladeStacks}层,「远古预兆」触发概率+${(ancientOmenBoost * 100).toFixed(1)}%,「灵能构造炉」触发概率+${(psychicForgeBoost * 100).toFixed(1)}%`);
|
|
3662
|
-
}
|
|
3663
|
-
return { ancientOmenBoost, psychicForgeBoost, messages };
|
|
3664
|
-
}, "handleLightningCharge"),
|
|
3665
3666
|
/** 超视距穿梭处理(层数相关伤害调整) */
|
|
3666
3667
|
handleHyperRangeShift: /* @__PURE__ */ __name(function(targetBoss) {
|
|
3667
3668
|
const messages = [];
|
|
@@ -3686,7 +3687,7 @@ var BattleEffectProcessor = {
|
|
|
3686
3687
|
return { nerfMultiplier, buffMultiplier, messages };
|
|
3687
3688
|
}, "handleHyperRangeShift"),
|
|
3688
3689
|
/** 灵能构造炉处理(随机获得技能)- 增加boost参数 */
|
|
3689
|
-
handlePsychicForge: /* @__PURE__ */ __name(function(targetBoss
|
|
3690
|
+
handlePsychicForge: /* @__PURE__ */ __name(function(targetBoss) {
|
|
3690
3691
|
const messages = [];
|
|
3691
3692
|
let newSkill = null;
|
|
3692
3693
|
let targetUpdates = null;
|
|
@@ -3700,8 +3701,7 @@ var BattleEffectProcessor = {
|
|
|
3700
3701
|
return null;
|
|
3701
3702
|
}
|
|
3702
3703
|
const baseProbability = 0.05;
|
|
3703
|
-
|
|
3704
|
-
if (Math.random() >= actualProbability) {
|
|
3704
|
+
if (Math.random() >= baseProbability) {
|
|
3705
3705
|
return null;
|
|
3706
3706
|
}
|
|
3707
3707
|
const availableSkills = possibleSkills.filter(
|
|
@@ -3717,7 +3717,7 @@ var BattleEffectProcessor = {
|
|
|
3717
3717
|
skillsAdded: [newSkill]
|
|
3718
3718
|
}
|
|
3719
3719
|
};
|
|
3720
|
-
messages.push(`⚙️ 【灵能构造炉】触发:${(
|
|
3720
|
+
messages.push(`⚙️ 【灵能构造炉】触发:${(baseProbability * 100).toFixed(2)}%概率获得新技能「${newSkill}」`);
|
|
3721
3721
|
return {
|
|
3722
3722
|
messages,
|
|
3723
3723
|
newSkill,
|
|
@@ -3798,7 +3798,7 @@ var BattleEffectProcessor = {
|
|
|
3798
3798
|
return null;
|
|
3799
3799
|
}
|
|
3800
3800
|
const currentStacks = targetBoss.skillStacks || 0;
|
|
3801
|
-
const energyGained = currentStacks *
|
|
3801
|
+
const energyGained = currentStacks * 10;
|
|
3802
3802
|
targetUpdates = {
|
|
3803
3803
|
name: targetBoss.name,
|
|
3804
3804
|
updates: {
|
|
@@ -3956,8 +3956,6 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
|
|
|
3956
3956
|
let layerReduced = false;
|
|
3957
3957
|
let bileDetonationTrigger = false;
|
|
3958
3958
|
const weaponData = weaponConfig[weaponName] || { type: "" };
|
|
3959
|
-
let ancientOmenBoost = 0;
|
|
3960
|
-
let psychicForgeBoost = 0;
|
|
3961
3959
|
let doubleAstralWind = false;
|
|
3962
3960
|
let isolatedImmunityMark = false;
|
|
3963
3961
|
const processEffect = /* @__PURE__ */ __name((effect, ...args) => {
|
|
@@ -3974,28 +3972,13 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
|
|
|
3974
3972
|
}
|
|
3975
3973
|
return result;
|
|
3976
3974
|
}, "processEffect");
|
|
3977
|
-
const lightningResult = BattleEffectProcessor.handleLightningCharge(targetBoss);
|
|
3978
|
-
if (lightningResult) {
|
|
3979
|
-
ancientOmenBoost = lightningResult.ancientOmenBoost || 0;
|
|
3980
|
-
psychicForgeBoost = lightningResult.psychicForgeBoost || 0;
|
|
3981
|
-
messages.push(...lightningResult.messages);
|
|
3982
|
-
}
|
|
3983
3975
|
const coldImmuneEffects = [
|
|
3984
|
-
{
|
|
3985
|
-
effect: BattleEffectProcessor.handleFrostEvolution,
|
|
3986
|
-
args: [targetBoss, weaponName, damage]
|
|
3987
|
-
},
|
|
3988
3976
|
{
|
|
3989
3977
|
effect: BattleEffectProcessor.handleColdAdaptation,
|
|
3990
3978
|
args: [targetBoss, weaponName]
|
|
3991
3979
|
}
|
|
3992
3980
|
];
|
|
3993
|
-
const fireImmuneEffects = [
|
|
3994
|
-
{
|
|
3995
|
-
effect: BattleEffectProcessor.handleFlameAlien,
|
|
3996
|
-
args: [targetBoss, weaponName, damage]
|
|
3997
|
-
}
|
|
3998
|
-
];
|
|
3981
|
+
const fireImmuneEffects = [];
|
|
3999
3982
|
const chanceImmuneEffects = [
|
|
4000
3983
|
{
|
|
4001
3984
|
effect: BattleEffectProcessor.handleDeadlyHit,
|
|
@@ -4007,7 +3990,7 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
|
|
|
4007
3990
|
},
|
|
4008
3991
|
{
|
|
4009
3992
|
effect: BattleEffectProcessor.handleAncientOmen,
|
|
4010
|
-
args: [targetBoss, weaponData
|
|
3993
|
+
args: [targetBoss, weaponData]
|
|
4011
3994
|
}
|
|
4012
3995
|
];
|
|
4013
3996
|
const allImmuneEffects = [...coldImmuneEffects, ...fireImmuneEffects, ...chanceImmuneEffects];
|
|
@@ -4024,7 +4007,7 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
|
|
|
4024
4007
|
updateStatsByName(solarFlareResult.targetUpdates.name, solarFlareResult.targetUpdates.updates);
|
|
4025
4008
|
}
|
|
4026
4009
|
}
|
|
4027
|
-
const carpetBombResult =
|
|
4010
|
+
const carpetBombResult = BattleEffectProcessor.handleCarpetBombing(targetBoss);
|
|
4028
4011
|
if (carpetBombResult) {
|
|
4029
4012
|
isolatedImmunityMark = carpetBombResult.tempMark || false;
|
|
4030
4013
|
if (carpetBombResult.nerfMultiplier) {
|
|
@@ -4043,6 +4026,8 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
|
|
|
4043
4026
|
{ effect: BattleEffectProcessor.handleEnergyBlackhole, args: [targetBoss] },
|
|
4044
4027
|
{ effect: BattleEffectProcessor.handleColossalRampage, args: [targetBoss] },
|
|
4045
4028
|
{ effect: BattleEffectProcessor.handleVomit, args: [targetBoss] },
|
|
4029
|
+
{ effect: BattleEffectProcessor.handleRampage, args: [targetBoss] },
|
|
4030
|
+
{ effect: BattleEffectProcessor.handleHyperRangeShift, args: [targetBoss] },
|
|
4046
4031
|
// 双参数效果
|
|
4047
4032
|
{ effect: BattleEffectProcessor.handleStructuralArmor, args: [targetBoss, weaponData] },
|
|
4048
4033
|
{ effect: BattleEffectProcessor.handleDisguise, args: [targetBoss, weaponName] },
|
|
@@ -4050,9 +4035,7 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
|
|
|
4050
4035
|
{ effect: BattleEffectProcessor.handleIsolated, args: [targetBoss, activeBosses, isolatedImmunityMark] },
|
|
4051
4036
|
{ effect: BattleEffectProcessor.handleInfectedSpaceStation, args: [targetBoss, activeBosses] },
|
|
4052
4037
|
{ effect: BattleEffectProcessor.handleInfernalBomb, args: [targetBoss, activeBosses] },
|
|
4053
|
-
{ effect: BattleEffectProcessor.handleHunterAlien, args: [targetBoss, activeBosses, weaponName] }
|
|
4054
|
-
{ effect: BattleEffectProcessor.handleRampage, args: [targetBoss, activeBosses] },
|
|
4055
|
-
{ effect: BattleEffectProcessor.handleHyperRangeShift, args: [targetBoss] }
|
|
4038
|
+
{ effect: BattleEffectProcessor.handleHunterAlien, args: [targetBoss, activeBosses, weaponName] }
|
|
4056
4039
|
];
|
|
4057
4040
|
for (const effectItem of damageAdjustEffects) {
|
|
4058
4041
|
const result = processEffect(effectItem.effect, ...effectItem.args);
|
|
@@ -4098,7 +4081,6 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
|
|
|
4098
4081
|
{ effect: BattleEffectProcessor.handlePulse, args: [targetBoss, activeBosses] },
|
|
4099
4082
|
{ effect: BattleEffectProcessor.handleFeeding, args: [targetBoss] },
|
|
4100
4083
|
{ effect: BattleEffectProcessor.handleBurningBurrow, args: [targetBoss] },
|
|
4101
|
-
{ effect: BattleEffectProcessor.handleCosmicEnergy, args: [targetBoss, damage] },
|
|
4102
4084
|
{ effect: BattleEffectProcessor.handleBombardmentGuide, args: [targetBoss] },
|
|
4103
4085
|
{ effect: BattleEffectProcessor.handleOverdriveShield, args: [targetBoss, activeBosses] }
|
|
4104
4086
|
];
|
|
@@ -4134,8 +4116,7 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
|
|
|
4134
4116
|
}
|
|
4135
4117
|
}
|
|
4136
4118
|
const psychicForgeResult = BattleEffectProcessor.handlePsychicForge(
|
|
4137
|
-
targetBoss
|
|
4138
|
-
psychicForgeBoost
|
|
4119
|
+
targetBoss
|
|
4139
4120
|
);
|
|
4140
4121
|
if (psychicForgeResult) {
|
|
4141
4122
|
messages.push(...psychicForgeResult.messages);
|
|
@@ -4182,14 +4163,56 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
|
|
|
4182
4163
|
layerReduced = layerReduceResult.reductionSuccess || false;
|
|
4183
4164
|
}
|
|
4184
4165
|
let finalDamage = damage;
|
|
4185
|
-
|
|
4186
|
-
|
|
4187
|
-
|
|
4188
|
-
|
|
4189
|
-
|
|
4190
|
-
|
|
4166
|
+
let adjustedNerfMultiplier = totalNerfMultiplier * (1 - ignoreRate);
|
|
4167
|
+
const damageMultiplier = 1 + totalBuffMultiplier - adjustedNerfMultiplier;
|
|
4168
|
+
finalDamage = Math.max(1, Math.round(damage * damageMultiplier));
|
|
4169
|
+
const frostEvolutionResult = BattleEffectProcessor.handleFrostEvolution(
|
|
4170
|
+
targetBoss,
|
|
4171
|
+
weaponName,
|
|
4172
|
+
finalDamage
|
|
4173
|
+
// 使用最新计算的finalDamage
|
|
4174
|
+
);
|
|
4175
|
+
if (frostEvolutionResult) {
|
|
4176
|
+
messages.push(...frostEvolutionResult.messages);
|
|
4177
|
+
if (frostEvolutionResult.targetUpdates) {
|
|
4178
|
+
updateStatsByName(frostEvolutionResult.targetUpdates.name, frostEvolutionResult.targetUpdates.updates);
|
|
4179
|
+
}
|
|
4180
|
+
if (frostEvolutionResult.isImmune) {
|
|
4181
|
+
immune = true;
|
|
4182
|
+
finalDamage = 0;
|
|
4183
|
+
}
|
|
4184
|
+
}
|
|
4185
|
+
const flameAlienResult = BattleEffectProcessor.handleFlameAlien(
|
|
4186
|
+
targetBoss,
|
|
4187
|
+
weaponName,
|
|
4188
|
+
finalDamage
|
|
4189
|
+
// 使用最新计算的finalDamage
|
|
4190
|
+
);
|
|
4191
|
+
if (flameAlienResult) {
|
|
4192
|
+
messages.push(...flameAlienResult.messages);
|
|
4193
|
+
if (flameAlienResult.targetUpdates) {
|
|
4194
|
+
updateStatsByName(flameAlienResult.targetUpdates.name, flameAlienResult.targetUpdates.updates);
|
|
4195
|
+
}
|
|
4196
|
+
if (flameAlienResult.isImmune) {
|
|
4197
|
+
immune = true;
|
|
4198
|
+
finalDamage = 0;
|
|
4199
|
+
}
|
|
4200
|
+
}
|
|
4201
|
+
const cosmicEnergyResult = BattleEffectProcessor.handleCosmicEnergy(
|
|
4202
|
+
targetBoss,
|
|
4203
|
+
finalDamage
|
|
4204
|
+
// 使用最新计算的finalDamage
|
|
4205
|
+
);
|
|
4206
|
+
if (cosmicEnergyResult) {
|
|
4207
|
+
messages.push(...cosmicEnergyResult.messages);
|
|
4208
|
+
if (cosmicEnergyResult.targetUpdates) {
|
|
4209
|
+
updateStatsByName(cosmicEnergyResult.targetUpdates.name, cosmicEnergyResult.targetUpdates.updates);
|
|
4210
|
+
}
|
|
4211
|
+
}
|
|
4212
|
+
if (immune) {
|
|
4191
4213
|
finalDamage = 0;
|
|
4192
4214
|
}
|
|
4215
|
+
const isLethal = finalDamage >= targetBoss.HP && finalDamage > 0;
|
|
4193
4216
|
const survivalSkills = [
|
|
4194
4217
|
{ func: BattleEffectProcessor.handleSurvivalInstinctI, name: "求生本能I" },
|
|
4195
4218
|
{ func: BattleEffectProcessor.handleSurvivalInstinctII, name: "求生本能II" },
|
|
@@ -4748,7 +4771,7 @@ async function handleIgnoreReductionEffects(ctx, handle, weaponName, targetBoss)
|
|
|
4748
4771
|
}
|
|
4749
4772
|
if (careerData.career === "猩红杀手" && weaponName === "侦察步枪") {
|
|
4750
4773
|
ignoreEffects.push(0.2);
|
|
4751
|
-
messages.push(`🎯
|
|
4774
|
+
messages.push(`🎯 猩红杀手职业:无视20%减伤效果`);
|
|
4752
4775
|
}
|
|
4753
4776
|
}, "handleCareerEffects");
|
|
4754
4777
|
await handleCareerEffects();
|
|
@@ -6991,12 +7014,12 @@ ${validTypes.join("、")}`;
|
|
|
6991
7014
|
return [
|
|
6992
7015
|
`${statusIcon} ${weaponName} ${statusText}`,
|
|
6993
7016
|
`等级:Lv.${w.level} | 改装槽:${w.modificationSlots}`,
|
|
6994
|
-
|
|
7017
|
+
`基础伤害:${currentDamage.toFixed(1)}`,
|
|
6995
7018
|
`改装:${mods}`
|
|
6996
7019
|
].join("\n");
|
|
6997
7020
|
}));
|
|
6998
7021
|
return [
|
|
6999
|
-
`🛡️ ${session.username}
|
|
7022
|
+
`🛡️ ${session.username}的武器仓库`,
|
|
7000
7023
|
'使用"装备 武器名称"来装备武器',
|
|
7001
7024
|
"⚡表示当前装备武器",
|
|
7002
7025
|
"──────────────",
|