koishi-plugin-ggcevo-game 1.4.79 → 1.4.81
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 +5 -1
- package/lib/index.js +33 -15
- package/package.json +1 -1
|
@@ -573,6 +573,10 @@ export declare const BattleEffectProcessor: {
|
|
|
573
573
|
} | null;
|
|
574
574
|
messages: string[];
|
|
575
575
|
};
|
|
576
|
+
handleFusionCannonEffect: (weaponName: string, equippedWeapon: any) => {
|
|
577
|
+
fusionExplosionTriggered: boolean;
|
|
578
|
+
messages: string[];
|
|
579
|
+
};
|
|
576
580
|
};
|
|
577
581
|
/**
|
|
578
582
|
* 统一处理所有被动效果(包含伤害修正、免疫检查、状态更新等)
|
|
@@ -582,7 +586,7 @@ export declare const BattleEffectProcessor: {
|
|
|
582
586
|
* @param activeBosses 当前所有活跃Boss列表
|
|
583
587
|
* @returns 包含最终伤害值和所有效果消息的对象
|
|
584
588
|
*/
|
|
585
|
-
export declare function applyPassiveEffects(targetBoss: any, activeBosses: any[], weaponName: string, damage: number, hasCrit: boolean, ignoreRate: number, careerData: any): {
|
|
589
|
+
export declare function applyPassiveEffects(targetBoss: any, activeBosses: any[], weaponName: string, damage: number, hasCrit: boolean, ignoreRate: number, careerData: any, equippedWeapon: any): {
|
|
586
590
|
finalDamage: number;
|
|
587
591
|
messages: string[];
|
|
588
592
|
radiationLayerAdded: boolean;
|
package/lib/index.js
CHANGED
|
@@ -426,7 +426,7 @@ var weaponConfig = {
|
|
|
426
426
|
damage: 80,
|
|
427
427
|
armorDamageReduction: 0,
|
|
428
428
|
description: "一件传奇武器",
|
|
429
|
-
specialeffect: "无法暴击;无视50
|
|
429
|
+
specialeffect: "无法暴击;无视50%伤害减免;每次攻击时有33%的概率发射脉冲榴弹,额外造成50%伤害并降低目标0.5护甲值",
|
|
430
430
|
price: 6400,
|
|
431
431
|
redCrystalCost: 200,
|
|
432
432
|
isantiair: true,
|
|
@@ -441,7 +441,7 @@ var weaponConfig = {
|
|
|
441
441
|
damage: 90,
|
|
442
442
|
armorDamageReduction: 0,
|
|
443
443
|
description: "一件传奇武器",
|
|
444
|
-
specialeffect: "",
|
|
444
|
+
specialeffect: "无法暴击;每次攻击时有20%的概率造成核爆,额外造成50%的伤害,连续攻击每次提升5%概率",
|
|
445
445
|
price: 6400,
|
|
446
446
|
redCrystalCost: 200,
|
|
447
447
|
isantiair: true,
|
|
@@ -3431,7 +3431,7 @@ var BattleEffectProcessor = {
|
|
|
3431
3431
|
).length;
|
|
3432
3432
|
if (livingNestlings === 0) return null;
|
|
3433
3433
|
const nerfMultiplier = livingNestlings * 0.2;
|
|
3434
|
-
const messages = [`🐛 【虫巢思维】生效:存在${livingNestlings}只巢穴子代,受到的伤害-${nerfMultiplier * 100}%`];
|
|
3434
|
+
const messages = [`🐛 【虫巢思维】生效:存在${livingNestlings}只巢穴子代,受到的伤害-${Math.round(nerfMultiplier * 100)}%`];
|
|
3435
3435
|
return { nerfMultiplier, messages };
|
|
3436
3436
|
}, "handleHiveMind"),
|
|
3437
3437
|
// 爆虫伏击 - 血量低于50%时,立即孵化巢穴子代直至上限(生效后移除)
|
|
@@ -3632,9 +3632,26 @@ var BattleEffectProcessor = {
|
|
|
3632
3632
|
targetUpdates,
|
|
3633
3633
|
messages
|
|
3634
3634
|
};
|
|
3635
|
-
}, "handlePulseRifleEffect")
|
|
3635
|
+
}, "handlePulseRifleEffect"),
|
|
3636
|
+
// 核聚变重炮特殊效果处理
|
|
3637
|
+
handleFusionCannonEffect: /* @__PURE__ */ __name(function(weaponName, equippedWeapon) {
|
|
3638
|
+
const messages = [];
|
|
3639
|
+
let fusionExplosionTriggered = false;
|
|
3640
|
+
if (weaponName !== "核聚变重炮") return null;
|
|
3641
|
+
const currentCombo = equippedWeapon?.comboCount || 0;
|
|
3642
|
+
const fusionTriggerProbability = 0.2 + currentCombo * 0.05;
|
|
3643
|
+
if (Math.random() < fusionTriggerProbability) {
|
|
3644
|
+
fusionExplosionTriggered = true;
|
|
3645
|
+
messages.push(`💥 【核聚变爆炸】触发:额外造成50%伤害`);
|
|
3646
|
+
return {
|
|
3647
|
+
fusionExplosionTriggered,
|
|
3648
|
+
messages
|
|
3649
|
+
};
|
|
3650
|
+
}
|
|
3651
|
+
return null;
|
|
3652
|
+
}, "handleFusionCannonEffect")
|
|
3636
3653
|
};
|
|
3637
|
-
function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, hasCrit, ignoreRate, careerData) {
|
|
3654
|
+
function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, hasCrit, ignoreRate, careerData, equippedWeapon) {
|
|
3638
3655
|
const messages = [];
|
|
3639
3656
|
let immune = false;
|
|
3640
3657
|
let totalBuffMultiplier = 0;
|
|
@@ -3723,6 +3740,10 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, hasCr
|
|
|
3723
3740
|
updateStatsByName(pulseEffect.targetUpdates.name, pulseEffect.targetUpdates.updates);
|
|
3724
3741
|
}
|
|
3725
3742
|
}
|
|
3743
|
+
const fusionEffect = BattleEffectProcessor.handleFusionCannonEffect(weaponName, equippedWeapon);
|
|
3744
|
+
if (fusionEffect) {
|
|
3745
|
+
messages.push(...fusionEffect.messages);
|
|
3746
|
+
}
|
|
3726
3747
|
const carpetBombResult = BattleEffectProcessor.handleCarpetBombing(targetBoss);
|
|
3727
3748
|
if (carpetBombResult) {
|
|
3728
3749
|
isolatedImmunityMark = carpetBombResult.tempMark || false;
|
|
@@ -3920,7 +3941,7 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, hasCr
|
|
|
3920
3941
|
let adjustedNerfMultiplier = totalNerfMultiplier * (1 - ignoreRate);
|
|
3921
3942
|
const damageMultiplier = 1 + totalBuffMultiplier - adjustedNerfMultiplier;
|
|
3922
3943
|
finalDamage = damage * damageMultiplier;
|
|
3923
|
-
if (pulseEffect?.pulseGrenadeTriggered) {
|
|
3944
|
+
if (pulseEffect?.pulseGrenadeTriggered || fusionEffect?.fusionExplosionTriggered) {
|
|
3924
3945
|
finalDamage *= 1.5;
|
|
3925
3946
|
}
|
|
3926
3947
|
if (hasCrit) {
|
|
@@ -3930,10 +3951,7 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, hasCr
|
|
|
3930
3951
|
if (careerData?.career === "猩红杀手" && weaponName === "侦察步枪") {
|
|
3931
3952
|
armorDamageReduction = 1;
|
|
3932
3953
|
}
|
|
3933
|
-
armor = targetBoss.armor - targetBoss.radiationLayers;
|
|
3934
|
-
if (targetBoss.name === "测试假人") {
|
|
3935
|
-
armor = targetBoss.armor;
|
|
3936
|
-
}
|
|
3954
|
+
armor = targetBoss.armor - targetBoss.radiationLayers * 0.05;
|
|
3937
3955
|
const armorReduction = armorDamageReduction * armor;
|
|
3938
3956
|
if (armorReduction !== 0) {
|
|
3939
3957
|
messages.push(`护甲减伤: ${armorReduction.toFixed(2)}点`);
|
|
@@ -5054,7 +5072,7 @@ async function calculateCrit(ctx, handle, equippedWeapon, weaponName) {
|
|
|
5054
5072
|
let critRate = 0;
|
|
5055
5073
|
const pityCounter = equippedWeapon?.pityCounter || 0;
|
|
5056
5074
|
const critSources = [];
|
|
5057
|
-
if (weaponName === "M4AE脉冲步枪") {
|
|
5075
|
+
if (weaponName === "M4AE脉冲步枪" || weaponName === "核聚变重炮") {
|
|
5058
5076
|
return {
|
|
5059
5077
|
hasCrit: false,
|
|
5060
5078
|
critSources: []
|
|
@@ -5375,7 +5393,7 @@ __name(handleBossDefeatRewards, "handleBossDefeatRewards");
|
|
|
5375
5393
|
async function handlePrimaryAttack(ctx, session, handle, config, equippedWeapon, targetBoss, activeBosses, weaponName, careerData) {
|
|
5376
5394
|
const damageResult = await calculateTotalDamage(ctx, session, config, equippedWeapon, targetBoss, careerData);
|
|
5377
5395
|
const ignoreReduction = await handleIgnoreReductionEffects(ctx, handle, weaponName, targetBoss);
|
|
5378
|
-
const EffectProcessor = applyPassiveEffects(targetBoss, activeBosses, weaponName, damageResult.damage, damageResult.hasCrit, ignoreReduction.ignoreRate, careerData);
|
|
5396
|
+
const EffectProcessor = applyPassiveEffects(targetBoss, activeBosses, weaponName, damageResult.damage, damageResult.hasCrit, ignoreReduction.ignoreRate, careerData, equippedWeapon);
|
|
5379
5397
|
const initialDamage = EffectProcessor.finalDamage;
|
|
5380
5398
|
await saveAndClearStats(ctx);
|
|
5381
5399
|
if (EffectProcessor.spawnNewBossMarks?.length) {
|
|
@@ -5430,7 +5448,7 @@ async function handleScatterAttack(ctx, session, handle, config, equippedWeapon,
|
|
|
5430
5448
|
);
|
|
5431
5449
|
const secondaryDamage = Math.round(damageResult.baseDamage * scatterRatio);
|
|
5432
5450
|
const ignoreReduction = await handleIgnoreReductionEffects(ctx, handle, weaponName, secondaryTarget);
|
|
5433
|
-
const EffectProcessor = applyPassiveEffects(secondaryTarget, activeBosses, weaponName, secondaryDamage, damageResult.hasCrit, ignoreReduction.ignoreRate, careerData);
|
|
5451
|
+
const EffectProcessor = applyPassiveEffects(secondaryTarget, activeBosses, weaponName, secondaryDamage, damageResult.hasCrit, ignoreReduction.ignoreRate, careerData, equippedWeapon);
|
|
5434
5452
|
const actualDamage = EffectProcessor.finalDamage;
|
|
5435
5453
|
await saveAndClearStats(ctx);
|
|
5436
5454
|
const [currentboss] = await ctx.database.get("ggcevo_boss", { name: secondaryTarget.name });
|
|
@@ -5794,7 +5812,7 @@ __name(handleIgnoreReductionEffects, "handleIgnoreReductionEffects");
|
|
|
5794
5812
|
async function testAttackFunction(ctx, session, handle, config, equippedWeapon, targetBoss, activeBosses, weaponName, careerData) {
|
|
5795
5813
|
const damageResult = await calculateTotalDamage(ctx, session, config, equippedWeapon, targetBoss, careerData);
|
|
5796
5814
|
const ignoreReduction = await handleIgnoreReductionEffects(ctx, handle, weaponName, targetBoss);
|
|
5797
|
-
const EffectProcessor = applyPassiveEffects(targetBoss, activeBosses, weaponName, damageResult.damage, damageResult.hasCrit, ignoreReduction.ignoreRate, careerData);
|
|
5815
|
+
const EffectProcessor = applyPassiveEffects(targetBoss, activeBosses, weaponName, damageResult.damage, damageResult.hasCrit, ignoreReduction.ignoreRate, careerData, equippedWeapon);
|
|
5798
5816
|
const initialDamage = EffectProcessor.finalDamage;
|
|
5799
5817
|
return {
|
|
5800
5818
|
initialDamage,
|
|
@@ -8463,7 +8481,7 @@ ${validTypes.join("、")}`;
|
|
|
8463
8481
|
}
|
|
8464
8482
|
let scatterResult = null;
|
|
8465
8483
|
const hasOtherBosses = activeBosses.some((b) => b.name !== targetBoss.name);
|
|
8466
|
-
const isScatterAttack = (equippedWeapon.installedMods?.includes("光束曲射晶片") && weaponName === "碎骨步枪" || weaponName === "中子步枪") && hasOtherBosses;
|
|
8484
|
+
const isScatterAttack = (equippedWeapon.installedMods?.includes("光束曲射晶片") && weaponName === "碎骨步枪" || weaponName === "中子步枪" || weaponName === "DG-3电弧步枪") && hasOtherBosses;
|
|
8467
8485
|
if (isScatterAttack) {
|
|
8468
8486
|
scatterResult = await handleScatterAttack(
|
|
8469
8487
|
ctx,
|