koishi-plugin-ggcevo-game 1.4.57 → 1.4.58

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.
@@ -26,6 +26,7 @@ export declare function getMaxHPByName(bossName: string): number | undefined;
26
26
  * @returns 对应Boss的maxEnergy(未找到时返回undefined)
27
27
  */
28
28
  export declare function getMaxEnergyByName(bossName: string): number | undefined;
29
+ export declare function getMaxStacksByName(bossName: string): number | undefined;
29
30
  export declare const BattleEffectProcessor: {
30
31
  handleWeakForm: (targetBoss: any) => {
31
32
  buffMultiplier: number;
@@ -413,10 +414,6 @@ export declare const BattleEffectProcessor: {
413
414
  } | null;
414
415
  reductionSuccess: boolean;
415
416
  } | null;
416
- /**
417
- * 毒性唾液处理(叠层减伤)
418
- * 效果:受击时增加1层「毒性唾液」(上限20层),每层提供5%减伤
419
- */
420
417
  handleToxicSaliva: (targetBoss: any) => {
421
418
  nerfMultiplier: number;
422
419
  messages: string[];
@@ -5,6 +5,7 @@ export declare const bossPool: {
5
5
  type: string;
6
6
  maxHP: number;
7
7
  maxEnergy: number;
8
+ maxStacks: number;
8
9
  tags: string[];
9
10
  passive: string[];
10
11
  };
@@ -13,6 +14,7 @@ export declare const bossPool: {
13
14
  type: string;
14
15
  maxHP: number;
15
16
  maxEnergy: number;
17
+ maxStacks: number;
16
18
  tags: string[];
17
19
  passive: string[];
18
20
  }[];
package/lib/database.d.ts CHANGED
@@ -121,6 +121,7 @@ export interface WeaponInventory {
121
121
  modificationSlots: number;
122
122
  installedMods: string[];
123
123
  equipped: boolean;
124
+ comboCount: number;
124
125
  }
125
126
  export interface BossInfo {
126
127
  name: string;
package/lib/index.js CHANGED
@@ -90,8 +90,7 @@ var weaponConfig = {
90
90
  redCrystalCost: 10,
91
91
  isantiair: true,
92
92
  tagEffects: {
93
- "重甲": 2,
94
- "机械": 0.5,
93
+ "重甲": 1.8,
95
94
  "护盾": 0.2
96
95
  }
97
96
  },
@@ -137,7 +136,6 @@ var weaponConfig = {
137
136
  redCrystalCost: 10,
138
137
  isantiair: true,
139
138
  tagEffects: {
140
- "轻甲": 0.5,
141
139
  "重甲": 0.2
142
140
  }
143
141
  },
@@ -197,7 +195,7 @@ var weaponConfig = {
197
195
  redCrystalCost: 15,
198
196
  isantiair: true,
199
197
  tagEffects: {
200
- "灵能": 1.5
198
+ "灵能": 1.2
201
199
  }
202
200
  },
203
201
  "粒子相位枪": {
@@ -211,7 +209,7 @@ var weaponConfig = {
211
209
  redCrystalCost: 15,
212
210
  isantiair: true,
213
211
  tagEffects: {
214
- "护盾": 2,
212
+ "护盾": 1.8,
215
213
  "重甲": 0.2
216
214
  }
217
215
  },
@@ -270,7 +268,6 @@ var weaponConfig = {
270
268
  redCrystalCost: 20,
271
269
  isantiair: true,
272
270
  tagEffects: {
273
- "生物": 1.5,
274
271
  "护盾": 0.5,
275
272
  "重甲": 0.5
276
273
  }
@@ -279,7 +276,7 @@ var weaponConfig = {
279
276
  id: 17,
280
277
  type: "能量武器",
281
278
  category: "能量武器",
282
- damage: 70,
279
+ damage: 55,
283
280
  description: "一种实验性的超级武器,能造成巨大的伤害",
284
281
  specialeffect: "",
285
282
  price: 1550,
@@ -460,6 +457,12 @@ var modConfig = {
460
457
  effect: "对重甲目标改为造成80%伤害",
461
458
  exclusiveTo: "侦察步枪",
462
459
  isExclusive: true
460
+ },
461
+ "微型聚变核心": {
462
+ cost: 3500,
463
+ effect: "每次攻击提高5%的伤害(至多提高30%)",
464
+ exclusiveTo: "聚变磁轨枪",
465
+ isExclusive: true
463
466
  }
464
467
  };
465
468
 
@@ -1106,6 +1109,7 @@ var bossPool = [
1106
1109
  type: "主宰",
1107
1110
  maxHP: 15e3,
1108
1111
  maxEnergy: 0,
1112
+ maxStacks: 0,
1109
1113
  tags: ["重甲", "生物", "异形"],
1110
1114
  passive: ["异形甲壳"]
1111
1115
  },
@@ -1115,6 +1119,7 @@ var bossPool = [
1115
1119
  type: "子代",
1116
1120
  maxHP: 5e3,
1117
1121
  maxEnergy: 0,
1122
+ maxStacks: 0,
1118
1123
  tags: ["重甲", "生物", "重型", "异形"],
1119
1124
  passive: ["弱化形态", "异形甲壳"]
1120
1125
  }
@@ -1127,6 +1132,7 @@ var bossPool = [
1127
1132
  type: "主宰",
1128
1133
  maxHP: 15e3,
1129
1134
  maxEnergy: 0,
1135
+ maxStacks: 0,
1130
1136
  tags: ["重甲", "生物", "惧热", "重型", "异形"],
1131
1137
  passive: ["冰霜环绕", "冰霜进化"]
1132
1138
  },
@@ -1136,6 +1142,7 @@ var bossPool = [
1136
1142
  type: "子代",
1137
1143
  maxHP: 5e3,
1138
1144
  maxEnergy: 0,
1145
+ maxStacks: 0,
1139
1146
  tags: ["生物", "惧热", "异形"],
1140
1147
  passive: ["弱化形态", "冰霜回复", "冰霜进化"]
1141
1148
  }
@@ -1148,6 +1155,7 @@ var bossPool = [
1148
1155
  type: "主宰",
1149
1156
  maxHP: 12e3,
1150
1157
  maxEnergy: 0,
1158
+ maxStacks: 0,
1151
1159
  tags: ["重甲", "生物", "重型", "异形"],
1152
1160
  passive: ["应激甲壳II", "求生本能II", "冷适应"]
1153
1161
  },
@@ -1157,6 +1165,7 @@ var bossPool = [
1157
1165
  type: "子代",
1158
1166
  maxHP: 4e3,
1159
1167
  maxEnergy: 0,
1168
+ maxStacks: 0,
1160
1169
  tags: ["重甲", "生物", "重型", "异形"],
1161
1170
  passive: ["弱化形态", "应激甲壳I", "求生本能I", "冷适应"]
1162
1171
  },
@@ -1165,6 +1174,7 @@ var bossPool = [
1165
1174
  type: "子代",
1166
1175
  maxHP: 4e3,
1167
1176
  maxEnergy: 0,
1177
+ maxStacks: 0,
1168
1178
  tags: ["重甲", "生物", "重型", "异形"],
1169
1179
  passive: ["弱化形态", "应激甲壳I", "求生本能I", "冷适应"]
1170
1180
  }
@@ -1177,6 +1187,7 @@ var bossPool = [
1177
1187
  type: "主宰",
1178
1188
  maxHP: 1e4,
1179
1189
  maxEnergy: 0,
1190
+ maxStacks: 0,
1180
1191
  tags: ["重甲", "生物", "机械", "异形"],
1181
1192
  passive: ["感染空间站", "病毒云", "霉菌滋生"]
1182
1193
  },
@@ -1186,6 +1197,7 @@ var bossPool = [
1186
1197
  type: "子代",
1187
1198
  maxHP: 3e3,
1188
1199
  maxEnergy: 0,
1200
+ maxStacks: 0,
1189
1201
  tags: ["重甲", "生物", "机械", "异形"],
1190
1202
  passive: ["弱化形态", "病毒云", "霉菌滋生"]
1191
1203
  },
@@ -1194,6 +1206,7 @@ var bossPool = [
1194
1206
  type: "子代",
1195
1207
  maxHP: 5e3,
1196
1208
  maxEnergy: 0,
1209
+ maxStacks: 10,
1197
1210
  tags: ["重甲", "机械", "建筑"],
1198
1211
  passive: ["岗哨机枪", "结构装甲"]
1199
1212
  }
@@ -1206,6 +1219,7 @@ var bossPool = [
1206
1219
  type: "主宰",
1207
1220
  maxHP: 12e3,
1208
1221
  maxEnergy: 0,
1222
+ maxStacks: 20,
1209
1223
  tags: ["生物", "异形"],
1210
1224
  passive: ["吸血唾液", "进食", "吐血", "嗜血狂暴"]
1211
1225
  },
@@ -1215,6 +1229,7 @@ var bossPool = [
1215
1229
  type: "子代",
1216
1230
  maxHP: 4e3,
1217
1231
  maxEnergy: 0,
1232
+ maxStacks: 20,
1218
1233
  tags: ["生物", "异形"],
1219
1234
  passive: ["弱化形态", "吸血唾液", "进食", "吐血"]
1220
1235
  }
@@ -1227,6 +1242,7 @@ var bossPool = [
1227
1242
  type: "主宰",
1228
1243
  maxHP: 2e4,
1229
1244
  maxEnergy: 1e3,
1245
+ maxStacks: 0,
1230
1246
  tags: ["护盾", "灵能", "重型", "异形"],
1231
1247
  passive: ["超导体", "能源虹吸", "电能冲击波", "电能立场", "脉冲", "能量黑洞"]
1232
1248
  },
@@ -1236,6 +1252,7 @@ var bossPool = [
1236
1252
  type: "子代",
1237
1253
  maxHP: 6e3,
1238
1254
  maxEnergy: 0,
1255
+ maxStacks: 0,
1239
1256
  tags: ["护盾", "灵能", "异形"],
1240
1257
  passive: ["弱化形态", "超导体", "能源虹吸", "能量黑洞"]
1241
1258
  }
@@ -1248,6 +1265,7 @@ var bossPool = [
1248
1265
  type: "主宰",
1249
1266
  maxHP: 2e4,
1250
1267
  maxEnergy: 0,
1268
+ maxStacks: 20,
1251
1269
  tags: ["重甲", "生物", "惧寒", "重型", "异形"],
1252
1270
  passive: ["火焰异形", "庞兽狂暴", "灼烧粘液", "炼狱爆弹", "火焰吐息", "太阳耀斑"]
1253
1271
  },
@@ -1257,6 +1275,7 @@ var bossPool = [
1257
1275
  type: "子代",
1258
1276
  maxHP: 5e3,
1259
1277
  maxEnergy: 0,
1278
+ maxStacks: 20,
1260
1279
  tags: ["重甲", "生物", "惧寒", "异形"],
1261
1280
  passive: ["弱化形态", "火焰异形", "灼烧粘液", "腐蚀胆汁", "燃烧潜地"]
1262
1281
  }
@@ -1269,6 +1288,7 @@ var bossPool = [
1269
1288
  type: "主宰",
1270
1289
  maxHP: 2e4,
1271
1290
  maxEnergy: 0,
1291
+ maxStacks: 0,
1272
1292
  tags: ["生物", "异形"],
1273
1293
  passive: ["猎手异形", "致命一击", "狂暴", "伪装"]
1274
1294
  },
@@ -1278,6 +1298,7 @@ var bossPool = [
1278
1298
  type: "子代",
1279
1299
  maxHP: 5e3,
1280
1300
  maxEnergy: 0,
1301
+ maxStacks: 0,
1281
1302
  tags: ["生物", "异形"],
1282
1303
  passive: ["弱化形态", "猎手异形", "狂暴", "伪装"]
1283
1304
  },
@@ -1286,6 +1307,7 @@ var bossPool = [
1286
1307
  type: "子代",
1287
1308
  maxHP: 5e3,
1288
1309
  maxEnergy: 0,
1310
+ maxStacks: 0,
1289
1311
  tags: ["生物", "异形"],
1290
1312
  passive: ["弱化形态", "猎手异形", "狂暴", "伪装"]
1291
1313
  }
@@ -1298,6 +1320,7 @@ var bossPool = [
1298
1320
  type: "主宰",
1299
1321
  maxHP: 2e4,
1300
1322
  maxEnergy: 1e3,
1323
+ maxStacks: 50,
1301
1324
  tags: ["重甲", "护盾", "生物", "灵能", "异形"],
1302
1325
  passive: ["宇宙能量", "复苏", "光影之刃", "远古预兆", "星界之风", "超视距穿梭"]
1303
1326
  },
@@ -1307,6 +1330,7 @@ var bossPool = [
1307
1330
  type: "子代",
1308
1331
  maxHP: 5e3,
1309
1332
  maxEnergy: 0,
1333
+ maxStacks: 0,
1310
1334
  tags: ["重甲", "护盾", "生物", "灵能", "异形"],
1311
1335
  passive: ["弱化形态", "心灵狂热", "星界之风"]
1312
1336
  }
@@ -1319,6 +1343,7 @@ var bossPool = [
1319
1343
  type: "主宰",
1320
1344
  maxHP: 2e4,
1321
1345
  maxEnergy: 0,
1346
+ maxStacks: 20,
1322
1347
  tags: ["生物", "异形"],
1323
1348
  passive: ["毒性唾液", "剧毒狂暴", "毒气波", "淬毒撕咬", "酸蚀池", "剧毒突袭"]
1324
1349
  },
@@ -1328,6 +1353,7 @@ var bossPool = [
1328
1353
  type: "子代",
1329
1354
  maxHP: 5e3,
1330
1355
  maxEnergy: 0,
1356
+ maxStacks: 20,
1331
1357
  tags: ["轻甲", "生物", "异形"],
1332
1358
  passive: ["弱化形态", "毒性唾液", "毒气波", "淬毒撕咬", "酸蚀池"]
1333
1359
  }
@@ -1409,6 +1435,23 @@ function getMaxEnergyByName(bossName) {
1409
1435
  return void 0;
1410
1436
  }
1411
1437
  __name(getMaxEnergyByName, "getMaxEnergyByName");
1438
+ function getMaxStacksByName(bossName) {
1439
+ if (bossName === "测试假人") {
1440
+ return 100;
1441
+ }
1442
+ for (const boss of bossPool) {
1443
+ if (boss.main.name === bossName) {
1444
+ return boss.main.maxStacks;
1445
+ }
1446
+ for (const minion of boss.minions) {
1447
+ if (minion.name === bossName) {
1448
+ return minion.maxStacks;
1449
+ }
1450
+ }
1451
+ }
1452
+ return void 0;
1453
+ }
1454
+ __name(getMaxStacksByName, "getMaxStacksByName");
1412
1455
  var BattleEffectProcessor = {
1413
1456
  // 弱化形态
1414
1457
  handleWeakForm: /* @__PURE__ */ __name(function(targetBoss) {
@@ -2717,7 +2760,7 @@ var BattleEffectProcessor = {
2717
2760
  handleCollapsingPulse: /* @__PURE__ */ __name(function(targetBoss) {
2718
2761
  const messages = [];
2719
2762
  let targetUpdates = null;
2720
- const maxStacks = 49;
2763
+ const maxStacks = 50;
2721
2764
  if (!targetBoss.skills.includes("塌缩脉冲")) {
2722
2765
  return null;
2723
2766
  }
@@ -2787,7 +2830,7 @@ var BattleEffectProcessor = {
2787
2830
  const effectiveLayers = Math.min(currentLayers, 20);
2788
2831
  const buffMultiplier = effectiveLayers * 0.025;
2789
2832
  if (effectiveLayers > 0) {
2790
- messages.push(`☢️ 【辐射增伤】:当前${currentLayers}层,受到的伤害+${(effectiveLayers * 2.5).toFixed(1)}%`);
2833
+ messages.push(`☢️ 【辐射】:当前${currentLayers}层,受到的伤害+${(effectiveLayers * 2.5).toFixed(1)}%(已达上限50%)`);
2791
2834
  if (currentLayers > 20) {
2792
2835
  }
2793
2836
  }
@@ -2822,7 +2865,7 @@ var BattleEffectProcessor = {
2822
2865
  const effectiveLayers = Math.min(currentLayers, 20);
2823
2866
  const buffMultiplier = effectiveLayers * 0.025;
2824
2867
  if (effectiveLayers > 0) {
2825
- messages.push(`❄️ 【寒冷增伤】:当前${currentLayers}层,受到的伤害+${(effectiveLayers * 2.5).toFixed(1)}%`);
2868
+ messages.push(`❄️ 【寒冷】:当前${currentLayers}层,受到的伤害+${(effectiveLayers * 2.5).toFixed(1)}%(已达上限50%)`);
2826
2869
  if (currentLayers > 20) {
2827
2870
  }
2828
2871
  }
@@ -2911,10 +2954,6 @@ var BattleEffectProcessor = {
2911
2954
  reductionSuccess
2912
2955
  };
2913
2956
  }, "handleWeaponLayerReduction"),
2914
- /**
2915
- * 毒性唾液处理(叠层减伤)
2916
- * 效果:受击时增加1层「毒性唾液」(上限20层),每层提供5%减伤
2917
- */
2918
2957
  handleToxicSaliva: /* @__PURE__ */ __name(function(targetBoss) {
2919
2958
  const messages = [];
2920
2959
  let targetUpdates = null;
@@ -2925,19 +2964,18 @@ var BattleEffectProcessor = {
2925
2964
  const currentStacks = targetBoss.skillStacks || 0;
2926
2965
  const maxStacks = 20;
2927
2966
  nerfMultiplier = currentStacks * 0.05;
2928
- messages.push(`🧪 【毒性唾液】生效:当前${currentStacks}层,使受到的伤害-${(nerfMultiplier * 100).toFixed(0)}%`);
2929
- let newStacks = currentStacks;
2967
+ if (currentStacks > 0) {
2968
+ messages.push(`🧪 【毒性唾液】生效:当前${currentStacks}层,使受到的伤害-${(nerfMultiplier * 100).toFixed(0)}%`);
2969
+ }
2930
2970
  if (currentStacks < maxStacks) {
2931
- newStacks = currentStacks + 1;
2971
+ const newStacks = currentStacks + 1;
2932
2972
  targetUpdates = {
2933
2973
  name: targetBoss.name,
2934
2974
  updates: {
2935
2975
  skillStacksChanged: 1
2936
- // 层数+1
2937
2976
  }
2938
2977
  };
2939
2978
  messages.push(`🧪 【毒性唾液】生效:获得一层「毒性唾液」`);
2940
- } else {
2941
2979
  }
2942
2980
  return {
2943
2981
  nerfMultiplier,
@@ -2963,7 +3001,7 @@ var BattleEffectProcessor = {
2963
3001
  return null;
2964
3002
  }
2965
3003
  const currentStacks = targetBoss.skillStacks || 0;
2966
- const maxStacks = 19;
3004
+ const maxStacks = 20;
2967
3005
  nerfMultiplier = 0.2;
2968
3006
  messages.push(`💥 【剧毒狂暴】生效:生命值≤50%,受到的伤害额外降低20%`);
2969
3007
  if (currentStacks < maxStacks) {
@@ -3626,7 +3664,7 @@ var passiveConfig = {
3626
3664
  },
3627
3665
  "灼烧粘液": {
3628
3666
  type: "叠层治疗",
3629
- description: "受击获得1层「灼烧粘液」;受火焰攻击时消耗所有层数并回复(层数×10)点生命"
3667
+ description: "受击获得1层「灼烧粘液」(上限20层);受火焰攻击时消耗所有层数并回复(层数×10)点生命"
3630
3668
  },
3631
3669
  "腐蚀胆汁": {
3632
3670
  type: "叠层转化(群体治疗)",
@@ -4288,8 +4326,10 @@ async function handleWeaponUpgrade(ctx, handle, target) {
4288
4326
  );
4289
4327
  }
4290
4328
  });
4291
- const damage = (weaponData.damage * (1 + 0.1 * newLevel)).toFixed(1);
4292
- let msg = `${target} 升级成功!Lv.${newLevel}`;
4329
+ const isLegendary = weaponData.category === "传奇武器";
4330
+ const levelBonusRate = isLegendary ? 0.05 : 0.1;
4331
+ const damage = (weaponData.damage * (1 + levelBonusRate * newLevel)).toFixed(1);
4332
+ let msg = `${target} ${isLegendary ? "【传奇武器】 " : ""}升级成功!Lv.${newLevel}`;
4293
4333
  const priceInfo = totalDiscount > 0 ? `
4294
4334
  💸 花费:${actualCost}金币 (原价${baseCost}金币)` : `
4295
4335
  💸 花费:${actualCost}金币`;
@@ -4464,9 +4504,11 @@ async function calculateTotalDamage(ctx, session, config, equippedWeapon, target
4464
4504
  const handle = `${regionId}-S2-${realmId}-${profileId}`;
4465
4505
  const weaponConfigEntry = Object.entries(weaponConfig).find(([_, c]) => c.id === equippedWeapon.weaponId);
4466
4506
  const [weaponName, weaponData] = weaponConfigEntry;
4467
- const baseDamage = weaponData.damage * (1 + 0.1 * equippedWeapon.level);
4468
- const levelBonusPercent = (0.1 * equippedWeapon.level * 100).toFixed(0);
4469
- effectMessage.push(`🔫 ${weaponName}Lv.${equippedWeapon.level}:基础伤害+${levelBonusPercent}%`);
4507
+ const isLegendary = weaponData.category === "传奇武器";
4508
+ const levelBonusRate = isLegendary ? 0.05 : 0.1;
4509
+ const baseDamage = weaponData.damage * (1 + levelBonusRate * equippedWeapon.level);
4510
+ const bonusPercent = (levelBonusRate * equippedWeapon.level * 100).toFixed(0);
4511
+ effectMessage.push(`🔫 ${weaponName} Lv.${equippedWeapon.level}:基础伤害+${bonusPercent}%` + (isLegendary ? "(传奇武器)" : ""));
4470
4512
  let totalAdditive = 0;
4471
4513
  const tagAdditive = await calculateTagMultiplier(weaponData, finalTags, equippedWeapon);
4472
4514
  totalAdditive += tagAdditive;
@@ -4558,6 +4600,17 @@ function calculateModifiers(equippedWeapon, weaponName, hasCritRhythm) {
4558
4600
  overloadCrit = 80;
4559
4601
  modMessages.push(`🛠️ 【棱镜超载核心】生效:暴击率+80%`);
4560
4602
  }
4603
+ if (mod === "微型聚变核心") {
4604
+ const currentCombo = equippedWeapon?.comboCount || 0;
4605
+ const maxStacks = 6;
4606
+ const bonusPerCombo = 0.05;
4607
+ const effectiveStacks = Math.min(currentCombo, maxStacks);
4608
+ const bonusDamage = effectiveStacks * bonusPerCombo;
4609
+ totalModAdd += bonusDamage;
4610
+ modMessages.push(
4611
+ `🛠️ 【微型聚变核心】生效:连击数${currentCombo} → 伤害+${(bonusDamage * 100).toFixed(0)}%` + (effectiveStacks < currentCombo ? ` (已达上限${maxStacks}层)` : "")
4612
+ );
4613
+ }
4561
4614
  });
4562
4615
  rhythmCrit = hasCritRhythm ? 20 : 0;
4563
4616
  if (hasCritRhythm) {
@@ -5098,6 +5151,7 @@ async function updateDatabaseWithStats(ctx, stats) {
5098
5151
  const bossData = await ctx.database.get("ggcevo_boss", { name: stats.name });
5099
5152
  const maxHP = getMaxHPByName(stats.name);
5100
5153
  const maxEnergy = getMaxEnergyByName(stats.name);
5154
+ const maxStacks = getMaxStacksByName(stats.name);
5101
5155
  if (!bossData || bossData.length === 0) {
5102
5156
  return;
5103
5157
  }
@@ -5115,7 +5169,8 @@ async function updateDatabaseWithStats(ctx, stats) {
5115
5169
  updateData.skillStacks = Math.max(0, boss.skillStacks + stats.skillStacksChanged);
5116
5170
  }
5117
5171
  if (stats.skillStatusChanged !== 0) {
5118
- updateData.skillStatus = Math.max(0, boss.skillStatus + stats.skillStatusChanged);
5172
+ const newStatus = boss.skillStatus + stats.skillStatusChanged;
5173
+ updateData.skillStatus = Math.max(0, Math.min(maxStacks, newStatus));
5119
5174
  }
5120
5175
  if (stats.statusLayersChanged !== 0) {
5121
5176
  updateData.statusLayers = Math.max(0, boss.statusLayers + stats.statusLayersChanged);
@@ -5407,7 +5462,9 @@ function apply(ctx, config) {
5407
5462
  level: "unsigned",
5408
5463
  modificationSlots: "unsigned",
5409
5464
  installedMods: "list",
5410
- equipped: "boolean"
5465
+ equipped: "boolean",
5466
+ comboCount: "unsigned"
5467
+ // 新增:记录连续攻击次数的计数器
5411
5468
  }, {
5412
5469
  primary: ["handle", "weaponId"]
5413
5470
  });
@@ -7440,7 +7497,8 @@ ${validTypes.join("、")}`;
7440
7497
  weaponId: config2.id,
7441
7498
  level: 0,
7442
7499
  modificationSlots: 1,
7443
- equipped: false
7500
+ equipped: false,
7501
+ comboCount: 0
7444
7502
  }], ["handle", "weaponId"]);
7445
7503
  const equippedCount = await ctx.database.select("ggcevo_weapons").where({ handle, equipped: true }).execute((row) => import_koishi.$.count(row.weaponId));
7446
7504
  if (equippedCount === 0) {
@@ -7500,14 +7558,17 @@ ${validTypes.join("、")}`;
7500
7558
  const weaponDetails = await Promise.all(weapons.map(async (w) => {
7501
7559
  const weaponName = Object.entries(weaponConfig).find(([_, c]) => c.id === w.weaponId)[0];
7502
7560
  const config2 = weaponConfig[weaponName];
7561
+ const isLegendary = config2.category === "传奇武器";
7562
+ const levelBonusRate = isLegendary ? 0.05 : 0.1;
7563
+ const currentDamage = config2.damage * (1 + levelBonusRate * w.level);
7564
+ const typeTag = isLegendary ? "【传奇武器】" : "";
7565
+ const damageFormatted = currentDamage.toFixed(1);
7503
7566
  const statusIcon = w.equipped ? "⚡" : "・";
7504
7567
  const statusText = w.equipped ? "[已装备]" : "";
7505
- const currentDamage = config2.damage * (1 + 0.1 * w.level);
7506
7568
  const mods = w.installedMods.map((m) => m).join(" | ") || "无";
7507
7569
  return [
7508
- `${statusIcon} ${weaponName} ${statusText}`,
7509
- `等级:Lv.${w.level} | 改装槽:${w.modificationSlots}`,
7510
- `基础伤害:${currentDamage.toFixed(1)}`,
7570
+ `${statusIcon} ${weaponName} ${typeTag} ${statusText}`,
7571
+ `等级:Lv.${w.level} | 改装槽:${w.modificationSlots} | 基础伤害:${damageFormatted}`,
7511
7572
  `改装:${mods}`
7512
7573
  ].join("\n");
7513
7574
  }));
@@ -7863,6 +7924,19 @@ ${validTypes.join("、")}`;
7863
7924
  if (taskUpdates.length > 0) {
7864
7925
  await updateTaskProgress(ctx, handle, taskUpdates);
7865
7926
  }
7927
+ await ctx.database.set("ggcevo_weapons", {
7928
+ handle,
7929
+ weaponId: equippedWeapon.weaponId
7930
+ }, {
7931
+ comboCount: (equippedWeapon?.comboCount || 0) + 1
7932
+ });
7933
+ await ctx.database.set("ggcevo_weapons", {
7934
+ handle,
7935
+ weaponId: { $ne: equippedWeapon.weaponId }
7936
+ // 排除当前装备的武器
7937
+ }, {
7938
+ comboCount: 0
7939
+ });
7866
7940
  const resultMessage = buildResultMessage(
7867
7941
  session,
7868
7942
  weaponName,
@@ -7898,7 +7972,7 @@ ${validTypes.join("、")}`;
7898
7972
  const skillStacks = clampLayer(options.skillStacks);
7899
7973
  const radiationLayers = clampLayer(options.radiation);
7900
7974
  const coldLayers = clampLayer(options.cold);
7901
- const statusLayers = clampLayer(options.status);
7975
+ const skillStatus = clampLayer(options.status);
7902
7976
  const parseList = /* @__PURE__ */ __name((str) => str ? str.split(",").map((s) => s.trim()).filter(Boolean) : [], "parseList");
7903
7977
  const tags = parseList(options.tags);
7904
7978
  const passives = parseList(options.passives);
@@ -7921,14 +7995,13 @@ ${validTypes.join("、")}`;
7921
7995
  skills: passives || [],
7922
7996
  skillStacks,
7923
7997
  // 使用自定义技能层数
7998
+ skillStatus,
7924
7999
  radiationLayers,
7925
8000
  // 使用自定义辐射层数
7926
8001
  coldLayers,
7927
8002
  // 使用自定义寒冷层数
7928
8003
  energy,
7929
8004
  isActive: true,
7930
- statusLayers,
7931
- // 使用自定义状态层数
7932
8005
  lastWeaponName: ""
7933
8006
  };
7934
8007
  const activeBosses = [dummyBoss];
@@ -7949,12 +8022,12 @@ ${validTypes.join("、")}`;
7949
8022
  if (skillStacks > 0) layerInfo.push(`技能层数: ${skillStacks}`);
7950
8023
  if (radiationLayers > 0) layerInfo.push(`辐射层数: ${radiationLayers}`);
7951
8024
  if (coldLayers > 0) layerInfo.push(`寒冷层数: ${coldLayers}`);
7952
- if (statusLayers > 0) layerInfo.push(`状态层数: ${statusLayers}`);
8025
+ if (skillStatus > 0) layerInfo.push(`状态层数: ${skillStatus}`);
7953
8026
  const layerDisplay = layerInfo.length > 0 ? `📊 层数状态: ${layerInfo.join(" | ")}` : "";
7954
8027
  return [
7955
8028
  `🎯 使用武器 ${weaponName} 攻击 ${dummyBoss.name}`,
7956
8029
  `❤️ 假人血量:${dummyBoss.HP}/10000`,
7957
- `⚡ 假人能量:${dummyBoss.energy}/1000`,
8030
+ `🔋 假人能量:${dummyBoss.energy}/1000`,
7958
8031
  options.tags?.length && `🏷️ 模拟标签:${tags.join(", ")}`,
7959
8032
  options.passives?.length && `✨ 模拟被动:${passives.join(", ")}`,
7960
8033
  layerDisplay,
@@ -8037,10 +8110,13 @@ ${testResult.passiveMessages.map((m) => `▸ ${m}`).join("\n")}`
8037
8110
  } else {
8038
8111
  result.push("➤ 无");
8039
8112
  }
8040
- const countingSkill = mainBoss.skills?.find((s) => ["冷适应", "岗哨机枪", "吸血唾液", "灼烧粘液", "光影之刃", "毒性唾液"].includes(s));
8113
+ const countingSkill = mainBoss.skills?.find((s) => ["岗哨机枪", "吸血唾液", "灼烧粘液", "光影之刃", "毒性唾液"].includes(s));
8041
8114
  if (countingSkill) {
8042
8115
  result.push(`📈 ${countingSkill}:${mainBoss.skillStacks}层`);
8043
8116
  }
8117
+ if (mainBoss.skills.includes("冷适应")) {
8118
+ result.push(`🛡️ 冷适应:${mainBoss.statusLayers}层`);
8119
+ }
8044
8120
  if (mainBoss.skills.includes("酸蚀池")) {
8045
8121
  let acidText;
8046
8122
  switch (mainBoss.skillStatus) {
@@ -8088,10 +8164,13 @@ ${testResult.passiveMessages.map((m) => `▸ ${m}`).join("\n")}`
8088
8164
  } else {
8089
8165
  minionInfo.push("➤ 无");
8090
8166
  }
8091
- const minionCountingSkill = minion.skills?.find((s) => ["冷适应", "岗哨机枪", "吸血唾液", "灼烧粘液", "光影之刃", "毒性唾液"].includes(s));
8167
+ const minionCountingSkill = minion.skills?.find((s) => ["岗哨机枪", "吸血唾液", "灼烧粘液", "光影之刃", "毒性唾液"].includes(s));
8092
8168
  if (minionCountingSkill) {
8093
8169
  minionInfo.push(`📈 ${minionCountingSkill}:${minion.skillStacks}层`);
8094
8170
  }
8171
+ if (minion.skills.includes("冷适应")) {
8172
+ minionInfo.push(`🛡️ 冷适应:${minion.statusLayers}层`);
8173
+ }
8095
8174
  if (minion.skills.includes("酸蚀池")) {
8096
8175
  let acidText;
8097
8176
  switch (minion.skillStatus) {
@@ -8783,7 +8862,8 @@ ${testResult.passiveMessages.map((m) => `▸ ${m}`).join("\n")}`
8783
8862
  level: 0,
8784
8863
  modificationSlots: 1,
8785
8864
  installedMods: [],
8786
- equipped: false
8865
+ equipped: false,
8866
+ comboCount: 0
8787
8867
  });
8788
8868
  const equippedCount = await ctx.database.select("ggcevo_weapons").where({ handle, equipped: true }).execute((row) => import_koishi.$.count(row.weaponId));
8789
8869
  if (equippedCount === 0) {
@@ -9315,7 +9395,8 @@ ${Spacestationtechnology.map((t) => t.techname).join("、")}`;
9315
9395
  level: 0,
9316
9396
  modificationSlots: 1,
9317
9397
  installedMods: [],
9318
- equipped: false
9398
+ equipped: false,
9399
+ comboCount: 0
9319
9400
  }]);
9320
9401
  });
9321
9402
  return [
package/lib/weapons.d.ts CHANGED
@@ -56,7 +56,6 @@ export declare const weaponConfig: {
56
56
  isantiair: boolean;
57
57
  tagEffects: {
58
58
  重甲: number;
59
- 机械: number;
60
59
  护盾: number;
61
60
  };
62
61
  };
@@ -102,7 +101,6 @@ export declare const weaponConfig: {
102
101
  redCrystalCost: number;
103
102
  isantiair: boolean;
104
103
  tagEffects: {
105
- 轻甲: number;
106
104
  重甲: number;
107
105
  };
108
106
  };
@@ -235,7 +233,6 @@ export declare const weaponConfig: {
235
233
  redCrystalCost: number;
236
234
  isantiair: boolean;
237
235
  tagEffects: {
238
- 生物: number;
239
236
  护盾: number;
240
237
  重甲: number;
241
238
  };
@@ -423,4 +420,10 @@ export declare const modConfig: {
423
420
  exclusiveTo: string;
424
421
  isExclusive: boolean;
425
422
  };
423
+ 微型聚变核心: {
424
+ cost: number;
425
+ effect: string;
426
+ exclusiveTo: string;
427
+ isExclusive: boolean;
428
+ };
426
429
  };
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.57",
4
+ "version": "1.4.58",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "files": [