koishi-plugin-ggcevo-game 1.4.80 → 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.
@@ -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%伤害减免;33%几率发射脉冲榴弹,额外造成50%伤害并降低目标0.5护甲值",
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,
@@ -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) {
@@ -5051,7 +5072,7 @@ async function calculateCrit(ctx, handle, equippedWeapon, weaponName) {
5051
5072
  let critRate = 0;
5052
5073
  const pityCounter = equippedWeapon?.pityCounter || 0;
5053
5074
  const critSources = [];
5054
- if (weaponName === "M4AE脉冲步枪") {
5075
+ if (weaponName === "M4AE脉冲步枪" || weaponName === "核聚变重炮") {
5055
5076
  return {
5056
5077
  hasCrit: false,
5057
5078
  critSources: []
@@ -5372,7 +5393,7 @@ __name(handleBossDefeatRewards, "handleBossDefeatRewards");
5372
5393
  async function handlePrimaryAttack(ctx, session, handle, config, equippedWeapon, targetBoss, activeBosses, weaponName, careerData) {
5373
5394
  const damageResult = await calculateTotalDamage(ctx, session, config, equippedWeapon, targetBoss, careerData);
5374
5395
  const ignoreReduction = await handleIgnoreReductionEffects(ctx, handle, weaponName, targetBoss);
5375
- 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);
5376
5397
  const initialDamage = EffectProcessor.finalDamage;
5377
5398
  await saveAndClearStats(ctx);
5378
5399
  if (EffectProcessor.spawnNewBossMarks?.length) {
@@ -5427,7 +5448,7 @@ async function handleScatterAttack(ctx, session, handle, config, equippedWeapon,
5427
5448
  );
5428
5449
  const secondaryDamage = Math.round(damageResult.baseDamage * scatterRatio);
5429
5450
  const ignoreReduction = await handleIgnoreReductionEffects(ctx, handle, weaponName, secondaryTarget);
5430
- 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);
5431
5452
  const actualDamage = EffectProcessor.finalDamage;
5432
5453
  await saveAndClearStats(ctx);
5433
5454
  const [currentboss] = await ctx.database.get("ggcevo_boss", { name: secondaryTarget.name });
@@ -5791,7 +5812,7 @@ __name(handleIgnoreReductionEffects, "handleIgnoreReductionEffects");
5791
5812
  async function testAttackFunction(ctx, session, handle, config, equippedWeapon, targetBoss, activeBosses, weaponName, careerData) {
5792
5813
  const damageResult = await calculateTotalDamage(ctx, session, config, equippedWeapon, targetBoss, careerData);
5793
5814
  const ignoreReduction = await handleIgnoreReductionEffects(ctx, handle, weaponName, targetBoss);
5794
- 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);
5795
5816
  const initialDamage = EffectProcessor.finalDamage;
5796
5817
  return {
5797
5818
  initialDamage,
@@ -8460,7 +8481,7 @@ ${validTypes.join("、")}`;
8460
8481
  }
8461
8482
  let scatterResult = null;
8462
8483
  const hasOtherBosses = activeBosses.some((b) => b.name !== targetBoss.name);
8463
- const isScatterAttack = (equippedWeapon.installedMods?.includes("光束曲射晶片") && weaponName === "碎骨步枪" || weaponName === "中子步枪") && hasOtherBosses;
8484
+ const isScatterAttack = (equippedWeapon.installedMods?.includes("光束曲射晶片") && weaponName === "碎骨步枪" || weaponName === "中子步枪" || weaponName === "DG-3电弧步枪") && hasOtherBosses;
8464
8485
  if (isScatterAttack) {
8465
8486
  scatterResult = await handleScatterAttack(
8466
8487
  ctx,
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.80",
4
+ "version": "1.4.81",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "files": [