koishi-plugin-ggcevo-game 1.4.41 → 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.
@@ -317,7 +317,7 @@ export declare const BattleEffectProcessor: {
317
317
  } | null;
318
318
  } | null;
319
319
  /** 远古预兆处理(概率免疫能量伤害)- 增加boost参数 */
320
- handleAncientOmen: (targetBoss: any, weaponData: any, boost: number) => {
320
+ handleAncientOmen: (targetBoss: any, weaponData: any, boost?: number) => {
321
321
  isImmune: boolean;
322
322
  messages: string[];
323
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 { totalModAdd, hasCrit };
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) {
@@ -3510,6 +3529,7 @@ var BattleEffectProcessor = {
3510
3529
  }
3511
3530
  return { nerfMultiplier, doubleAstralWind, messages };
3512
3531
  }, "handleMindFrenzy"),
3532
+ //宇宙能量
3513
3533
  handleCosmicEnergy: /* @__PURE__ */ __name(function(targetBoss, damage) {
3514
3534
  if (!targetBoss.skills.includes("宇宙能量")) {
3515
3535
  return null;
@@ -3613,7 +3633,7 @@ var BattleEffectProcessor = {
3613
3633
  };
3614
3634
  }, "handleBladeOfLight"),
3615
3635
  /** 远古预兆处理(概率免疫能量伤害)- 增加boost参数 */
3616
- handleAncientOmen: /* @__PURE__ */ __name(function(targetBoss, weaponData, boost) {
3636
+ handleAncientOmen: /* @__PURE__ */ __name(function(targetBoss, weaponData, boost = 0) {
3617
3637
  const messages = [];
3618
3638
  let isImmune = false;
3619
3639
  let targetUpdates = null;
@@ -3981,21 +4001,12 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
3981
4001
  messages.push(...lightningResult.messages);
3982
4002
  }
3983
4003
  const coldImmuneEffects = [
3984
- {
3985
- effect: BattleEffectProcessor.handleFrostEvolution,
3986
- args: [targetBoss, weaponName, damage]
3987
- },
3988
4004
  {
3989
4005
  effect: BattleEffectProcessor.handleColdAdaptation,
3990
4006
  args: [targetBoss, weaponName]
3991
4007
  }
3992
4008
  ];
3993
- const fireImmuneEffects = [
3994
- {
3995
- effect: BattleEffectProcessor.handleFlameAlien,
3996
- args: [targetBoss, weaponName, damage]
3997
- }
3998
- ];
4009
+ const fireImmuneEffects = [];
3999
4010
  const chanceImmuneEffects = [
4000
4011
  {
4001
4012
  effect: BattleEffectProcessor.handleDeadlyHit,
@@ -4024,7 +4035,7 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
4024
4035
  updateStatsByName(solarFlareResult.targetUpdates.name, solarFlareResult.targetUpdates.updates);
4025
4036
  }
4026
4037
  }
4027
- const carpetBombResult = processEffect(BattleEffectProcessor.handleCarpetBombing, targetBoss);
4038
+ const carpetBombResult = BattleEffectProcessor.handleCarpetBombing(targetBoss);
4028
4039
  if (carpetBombResult) {
4029
4040
  isolatedImmunityMark = carpetBombResult.tempMark || false;
4030
4041
  if (carpetBombResult.nerfMultiplier) {
@@ -4043,6 +4054,8 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
4043
4054
  { effect: BattleEffectProcessor.handleEnergyBlackhole, args: [targetBoss] },
4044
4055
  { effect: BattleEffectProcessor.handleColossalRampage, args: [targetBoss] },
4045
4056
  { effect: BattleEffectProcessor.handleVomit, args: [targetBoss] },
4057
+ { effect: BattleEffectProcessor.handleRampage, args: [targetBoss] },
4058
+ { effect: BattleEffectProcessor.handleHyperRangeShift, args: [targetBoss] },
4046
4059
  // 双参数效果
4047
4060
  { effect: BattleEffectProcessor.handleStructuralArmor, args: [targetBoss, weaponData] },
4048
4061
  { effect: BattleEffectProcessor.handleDisguise, args: [targetBoss, weaponName] },
@@ -4050,9 +4063,7 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
4050
4063
  { effect: BattleEffectProcessor.handleIsolated, args: [targetBoss, activeBosses, isolatedImmunityMark] },
4051
4064
  { effect: BattleEffectProcessor.handleInfectedSpaceStation, args: [targetBoss, activeBosses] },
4052
4065
  { 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] }
4066
+ { effect: BattleEffectProcessor.handleHunterAlien, args: [targetBoss, activeBosses, weaponName] }
4056
4067
  ];
4057
4068
  for (const effectItem of damageAdjustEffects) {
4058
4069
  const result = processEffect(effectItem.effect, ...effectItem.args);
@@ -4098,7 +4109,6 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
4098
4109
  { effect: BattleEffectProcessor.handlePulse, args: [targetBoss, activeBosses] },
4099
4110
  { effect: BattleEffectProcessor.handleFeeding, args: [targetBoss] },
4100
4111
  { effect: BattleEffectProcessor.handleBurningBurrow, args: [targetBoss] },
4101
- { effect: BattleEffectProcessor.handleCosmicEnergy, args: [targetBoss, damage] },
4102
4112
  { effect: BattleEffectProcessor.handleBombardmentGuide, args: [targetBoss] },
4103
4113
  { effect: BattleEffectProcessor.handleOverdriveShield, args: [targetBoss, activeBosses] }
4104
4114
  ];
@@ -4182,14 +4192,56 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
4182
4192
  layerReduced = layerReduceResult.reductionSuccess || false;
4183
4193
  }
4184
4194
  let finalDamage = damage;
4185
- const isLethal = finalDamage >= targetBoss.HP && finalDamage > 0;
4186
- if (!immune) {
4187
- let adjustedNerfMultiplier = totalNerfMultiplier * (1 - ignoreRate);
4188
- const damageMultiplier = 1 + totalBuffMultiplier - adjustedNerfMultiplier;
4189
- finalDamage = Math.max(1, Math.round(damage * damageMultiplier));
4190
- } else {
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;
4212
+ }
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) {
4191
4242
  finalDamage = 0;
4192
4243
  }
4244
+ const isLethal = finalDamage >= targetBoss.HP && finalDamage > 0;
4193
4245
  const survivalSkills = [
4194
4246
  { func: BattleEffectProcessor.handleSurvivalInstinctI, name: "求生本能I" },
4195
4247
  { func: BattleEffectProcessor.handleSurvivalInstinctII, name: "求生本能II" },
@@ -4748,7 +4800,7 @@ async function handleIgnoreReductionEffects(ctx, handle, weaponName, targetBoss)
4748
4800
  }
4749
4801
  if (careerData.career === "猩红杀手" && weaponName === "侦察步枪") {
4750
4802
  ignoreEffects.push(0.2);
4751
- messages.push(`🎯 【猩红杀手】职业效果:无视20%减伤效果`);
4803
+ messages.push(`🎯 猩红杀手职业:无视20%减伤效果`);
4752
4804
  }
4753
4805
  }, "handleCareerEffects");
4754
4806
  await handleCareerEffects();
@@ -6991,12 +7043,12 @@ ${validTypes.join("、")}`;
6991
7043
  return [
6992
7044
  `${statusIcon} ${weaponName} ${statusText}`,
6993
7045
  `等级:Lv.${w.level} | 改装槽:${w.modificationSlots}`,
6994
- `伤害:${currentDamage.toFixed(1)}`,
7046
+ `基础伤害:${currentDamage.toFixed(1)}`,
6995
7047
  `改装:${mods}`
6996
7048
  ].join("\n");
6997
7049
  }));
6998
7050
  return [
6999
- `🛡️ ${session.username}的武器列表`,
7051
+ `🛡️ ${session.username}的武器仓库`,
7000
7052
  '使用"装备 武器名称"来装备武器',
7001
7053
  "⚡表示当前装备武器",
7002
7054
  "──────────────",
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.41",
4
+ "version": "1.4.42",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "files": [