koishi-plugin-ggcevo-game 1.4.91 → 1.4.93

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.
@@ -394,7 +394,7 @@ export declare const BattleEffectProcessor: {
394
394
  updates: Partial<BattleStatistics>;
395
395
  } | null;
396
396
  } | null;
397
- handleRadiationEffect: (targetBoss: any, weaponName: string) => {
397
+ handleRadiationEffect: (targetBoss: any, weaponName: string, equippedWeapon: any) => {
398
398
  messages: string[];
399
399
  targetUpdates: {
400
400
  name: string;
@@ -255,4 +255,52 @@ export declare const passiveConfig: {
255
255
  type: string;
256
256
  description: string;
257
257
  };
258
+ 基因变异: {
259
+ type: string;
260
+ description: string;
261
+ };
262
+ 优化冗余片段: {
263
+ type: string;
264
+ description: string;
265
+ };
266
+ 开天眼: {
267
+ type: string;
268
+ description: string;
269
+ };
270
+ 环境适应: {
271
+ type: string;
272
+ description: string;
273
+ };
274
+ 加快分化: {
275
+ type: string;
276
+ description: string;
277
+ };
278
+ 耐力强化: {
279
+ type: string;
280
+ description: string;
281
+ };
282
+ 稳定DNA: {
283
+ type: string;
284
+ description: string;
285
+ };
286
+ 增厚甲壳: {
287
+ type: string;
288
+ description: string;
289
+ };
290
+ 质粒增殖: {
291
+ type: string;
292
+ description: string;
293
+ };
294
+ 加速代谢: {
295
+ type: string;
296
+ description: string;
297
+ };
298
+ 组织增生: {
299
+ type: string;
300
+ description: string;
301
+ };
302
+ 模仿生物签名: {
303
+ type: string;
304
+ description: string;
305
+ };
258
306
  };
package/lib/index.js CHANGED
@@ -303,7 +303,7 @@ var weaponConfig = {
303
303
  damage: 70,
304
304
  armorDamageReduction: 0.1,
305
305
  description: "二十一世纪的武器,经过修改以减少后坐力并提高远程精度",
306
- specialeffect: "连续攻击叠加[横冲直撞]效果,每层提高2.5%伤害(最多20层)",
306
+ specialeffect: "连续攻击叠加[横冲直撞]效果,每层提高2.5%伤害(至多提高50%伤害)",
307
307
  price: 2e3,
308
308
  redCrystalCost: 20,
309
309
  isantiair: true,
@@ -510,6 +510,18 @@ var modConfig = {
510
510
  effect: "连续攻击叠加[聚变]效果,每层提高10%伤害(最多6层)",
511
511
  exclusiveTo: "聚变磁轨枪",
512
512
  isExclusive: true
513
+ },
514
+ "辐射充能核心": {
515
+ cost: 1750,
516
+ effect: "双倍叠加[辐射]层数,对[生物]目标改为造成150%伤害",
517
+ exclusiveTo: "伽马枪",
518
+ isExclusive: true
519
+ },
520
+ "等离子轴承": {
521
+ cost: 3e3,
522
+ effect: "每层[横冲直撞]提供双倍伤害",
523
+ exclusiveTo: "M134轮转机枪",
524
+ isExclusive: true
513
525
  }
514
526
  };
515
527
 
@@ -740,7 +752,7 @@ var syndicatePirateConfig = [
740
752
  },
741
753
  {
742
754
  professionName: "计算机专家",
743
- effect: "黑市订购设备工具类享有50%折扣; 被动应战的PK对战结果为失败时,不会损失金币;每日获得3枚红晶(前日每被PK一次,红晶数量-1,下限为1)",
755
+ effect: "黑市订购设备工具类享有50%折扣; 主动发起的PK胜率提高10%; 每日主动PK次数增加3次;被动PK失败时有50%的概率不损失金币",
744
756
  requirements: "仓库中至少拥有一个黑市订购的设备工具类物品",
745
757
  Jobtransfer: true,
746
758
  costredcrystal: 30
@@ -1582,6 +1594,22 @@ var bossPool = [
1582
1594
  passive: []
1583
1595
  }
1584
1596
  ]
1597
+ },
1598
+ {
1599
+ id: 12,
1600
+ main: {
1601
+ name: "坏兄弟",
1602
+ type: "主宰",
1603
+ maxHP: 2e4,
1604
+ maxShield: 0,
1605
+ maxEnergy: 0,
1606
+ armor: 3,
1607
+ shieldArmor: 0,
1608
+ maxStacks: 20,
1609
+ tags: ["生物", "异形"],
1610
+ passive: ["基因变异"]
1611
+ },
1612
+ minions: []
1585
1613
  }
1586
1614
  ];
1587
1615
 
@@ -3085,7 +3113,7 @@ var BattleEffectProcessor = {
3085
3113
  };
3086
3114
  }, "handleBombardmentGuide"),
3087
3115
  // 统一的辐射效果处理函数
3088
- handleRadiationEffect: /* @__PURE__ */ __name(function(targetBoss, weaponName) {
3116
+ handleRadiationEffect: /* @__PURE__ */ __name(function(targetBoss, weaponName, equippedWeapon) {
3089
3117
  const messages = [];
3090
3118
  let layerAdded = false;
3091
3119
  const currentLayers = targetBoss.radiationLayers || 0;
@@ -3094,18 +3122,20 @@ var BattleEffectProcessor = {
3094
3122
  messages.push(`☢️ 【辐射】:当前${currentLayers}层,护甲值减少${armorReduction.toFixed(2)}`);
3095
3123
  }
3096
3124
  let targetUpdates = null;
3097
- if (weaponName === "伽马枪" && // 使用伽马枪
3098
- !targetBoss.tags.includes("机械") && // 非机械目标
3099
- targetBoss.tags.includes("生物")) {
3125
+ if (weaponName === "伽马枪" && !targetBoss.tags.includes("机械") && targetBoss.tags.includes("生物")) {
3126
+ const hasRadiationCore = equippedWeapon?.installedMods?.some(
3127
+ (mod) => mod.name === "辐射充能核心"
3128
+ );
3129
+ const layerIncrement = hasRadiationCore ? 2 : 1;
3100
3130
  targetUpdates = {
3101
3131
  name: targetBoss.name,
3102
3132
  updates: {
3103
- radiationLayersChange: 1
3104
- // 辐射层数增加1
3133
+ radiationLayersChange: layerIncrement
3105
3134
  }
3106
3135
  };
3107
- const newLayers = currentLayers + 1;
3108
- messages.push(`☢️ 【伽马枪】武器效果:获得1层「辐射」并削减0.05护甲值`);
3136
+ messages.push(
3137
+ `☢️ 【伽马枪】武器效果:获得${layerIncrement}层「辐射」并削减${(layerIncrement * 0.05).toFixed(2)}护甲值`
3138
+ );
3109
3139
  layerAdded = true;
3110
3140
  }
3111
3141
  return {
@@ -3113,7 +3143,6 @@ var BattleEffectProcessor = {
3113
3143
  targetUpdates,
3114
3144
  armorReduction,
3115
3145
  layerAdded
3116
- // 返回层数增加标记
3117
3146
  };
3118
3147
  }, "handleRadiationEffect"),
3119
3148
  // 统一的寒冷效果处理函数
@@ -3974,7 +4003,7 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, hasCr
3974
4003
  updateStatsByName(psychicForgeResult.targetUpdates.name, psychicForgeResult.targetUpdates.updates);
3975
4004
  }
3976
4005
  }
3977
- const radiationResult = BattleEffectProcessor.handleRadiationEffect(targetBoss, weaponName);
4006
+ const radiationResult = BattleEffectProcessor.handleRadiationEffect(targetBoss, weaponName, equippedWeapon);
3978
4007
  if (radiationResult) {
3979
4008
  messages.push(...radiationResult.messages);
3980
4009
  if (radiationResult.targetUpdates) {
@@ -4379,6 +4408,54 @@ var passiveConfig = {
4379
4408
  "孵化": {
4380
4409
  type: "",
4381
4410
  description: "每受到10次攻击,如果没有存活的巢穴子代,则随机孵化1只巢穴子代(巢穴雷兽,巢穴战士,巢穴甲虫)"
4411
+ },
4412
+ "基因变异": {
4413
+ type: "",
4414
+ description: "移除孤立无援状态;每受击3次随机获得1个基因,累计获得4个基因后再次触发则移除全部基因"
4415
+ },
4416
+ "优化冗余片段": {
4417
+ type: "",
4418
+ description: ""
4419
+ },
4420
+ "开天眼": {
4421
+ type: "",
4422
+ description: ""
4423
+ },
4424
+ "环境适应": {
4425
+ type: "",
4426
+ description: ""
4427
+ },
4428
+ "加快分化": {
4429
+ type: "",
4430
+ description: ""
4431
+ },
4432
+ "耐力强化": {
4433
+ type: "",
4434
+ description: ""
4435
+ },
4436
+ "稳定DNA": {
4437
+ type: "",
4438
+ description: ""
4439
+ },
4440
+ "增厚甲壳": {
4441
+ type: "",
4442
+ description: ""
4443
+ },
4444
+ "质粒增殖": {
4445
+ type: "",
4446
+ description: ""
4447
+ },
4448
+ "加速代谢": {
4449
+ type: "",
4450
+ description: ""
4451
+ },
4452
+ "组织增生": {
4453
+ type: "",
4454
+ description: ""
4455
+ },
4456
+ "模仿生物签名": {
4457
+ type: "",
4458
+ description: ""
4382
4459
  }
4383
4460
  };
4384
4461
 
@@ -5209,7 +5286,8 @@ __name(calculateCrit, "calculateCrit");
5209
5286
  async function calculateTagMultiplier(weaponData, tags, equippedWeapon) {
5210
5287
  const MOD_EFFECTS = [
5211
5288
  { mod: "助燃核心", tag: "惧热", value: 3 },
5212
- { mod: "助燃核心", tag: "生物", value: 2 }
5289
+ { mod: "助燃核心", tag: "生物", value: 2 },
5290
+ { mod: "辐射充能核心", tag: "生物", value: 1.5 }
5213
5291
  ];
5214
5292
  let totalAdditive = 0;
5215
5293
  for (const tag of tags) {
@@ -5242,6 +5320,21 @@ function calculateModifiers(equippedWeapon, weaponName) {
5242
5320
  totalModAdd += bonusDamage;
5243
5321
  modMessages.push(`🛠️ 【微型聚变核心】:攻击伤害+${(bonusDamage * 100).toFixed(0)}%`);
5244
5322
  }
5323
+ if (weaponName === "M134轮转机枪") {
5324
+ const baseBonusPerStack = 0.025;
5325
+ const currentStacks = equippedWeapon.comboCount || 0;
5326
+ const hasPlasmaBearing = equippedWeapon.installedMods?.includes("等离子轴承");
5327
+ const bonusPerStack = hasPlasmaBearing ? baseBonusPerStack * 2 : baseBonusPerStack;
5328
+ const rawStacksBonus = currentStacks * bonusPerStack;
5329
+ const maxBonus = 0.5;
5330
+ const stacksBonus = Math.min(rawStacksBonus, maxBonus);
5331
+ totalModAdd += stacksBonus;
5332
+ let stacksMessage = `🔫 【横冲直撞】:连续攻击${currentStacks}次,伤害增加${(stacksBonus * 100).toFixed(1)}%`;
5333
+ if (rawStacksBonus >= maxBonus) {
5334
+ stacksMessage += ` (已达上限)`;
5335
+ }
5336
+ modMessages.push(stacksMessage);
5337
+ }
5245
5338
  return {
5246
5339
  totalModAdd,
5247
5340
  modMessages
@@ -5366,13 +5459,17 @@ async function handleBossDefeatRewards(ctx, targetBoss) {
5366
5459
  return { rewardMessages };
5367
5460
  }
5368
5461
  const handles = damageRecords.map((r) => r.handle);
5462
+ const careerData = await ctx.database.get("ggcevo_careers", {
5463
+ handle: { $in: handles }
5464
+ });
5465
+ const groupMap = new Map(careerData.map((c) => [c.handle, c.group]));
5466
+ const pirateRedcrystalRewards = /* @__PURE__ */ new Map();
5369
5467
  const doubleWishRecords = await ctx.database.get("ggcevo_wish", {
5370
5468
  handle: { $in: handles },
5371
5469
  wishname: "精灵双倍",
5372
5470
  startTime: { $lte: /* @__PURE__ */ new Date() },
5373
5471
  endTime: { $gte: /* @__PURE__ */ new Date() },
5374
5472
  isused: false
5375
- // 只查询未使用过的双倍祈愿
5376
5473
  });
5377
5474
  const doubleWishIds = doubleWishRecords.map((r) => r.id);
5378
5475
  const doubleWishHandles = new Set(doubleWishRecords.map((r) => r.handle));
@@ -5408,7 +5505,6 @@ async function handleBossDefeatRewards(ctx, targetBoss) {
5408
5505
  gold,
5409
5506
  playerName: record.playerName,
5410
5507
  hasDoubleWish
5411
- // 标记该记录使用了双倍祈愿
5412
5508
  };
5413
5509
  rewardMap.set(record.handle, reward);
5414
5510
  const bonusNote = hasDoubleWish ? " (🧝‍♀ 精灵双倍祈愿生效)" : "";
@@ -5416,9 +5512,21 @@ async function handleBossDefeatRewards(ctx, targetBoss) {
5416
5512
  `${rank}. ${record.playerName}`,
5417
5513
  ` 获得奖励: ${guguCoins} 咕咕币 + ${gold} 金币${bonusNote}`
5418
5514
  );
5515
+ const group = groupMap.get(record.handle);
5516
+ if (group === "辛迪加海盗") {
5517
+ let redcrystal = 0;
5518
+ if (rank === 1) redcrystal = 30;
5519
+ else if (rank === 2) redcrystal = 25;
5520
+ else if (rank === 3) redcrystal = 20;
5521
+ else if (rank <= 10) redcrystal = 15;
5522
+ else if (rank <= 20) redcrystal = 10;
5523
+ pirateRedcrystalRewards.set(record.handle, redcrystal);
5524
+ rewardMessages.push(` 辛迪加海盗奖励: ${redcrystal} 红晶`);
5525
+ }
5419
5526
  });
5420
5527
  const others = damageRecords.slice(20);
5421
5528
  const doubleWishOthers = [];
5529
+ const pirateOtherRewards = [];
5422
5530
  if (others.length > 0) {
5423
5531
  others.forEach((record) => {
5424
5532
  let guguCoins = 3;
@@ -5433,12 +5541,20 @@ async function handleBossDefeatRewards(ctx, targetBoss) {
5433
5541
  gold
5434
5542
  });
5435
5543
  }
5544
+ const group = groupMap.get(record.handle);
5545
+ if (group === "辛迪加海盗") {
5546
+ const redcrystal = 3;
5547
+ pirateRedcrystalRewards.set(record.handle, redcrystal);
5548
+ pirateOtherRewards.push({
5549
+ playerName: record.playerName,
5550
+ redcrystal
5551
+ });
5552
+ }
5436
5553
  rewardMap.set(record.handle, {
5437
5554
  guguCoins,
5438
5555
  gold,
5439
5556
  playerName: record.playerName,
5440
5557
  hasDoubleWish
5441
- // 标记该记录使用了双倍祈愿
5442
5558
  });
5443
5559
  });
5444
5560
  rewardMessages.push(`其他参与者获得基础奖励: 3 咕咕币 + 500 金币`);
@@ -5451,6 +5567,9 @@ async function handleBossDefeatRewards(ctx, targetBoss) {
5451
5567
  });
5452
5568
  }
5453
5569
  }
5570
+ if (pirateOtherRewards.length > 0) {
5571
+ rewardMessages.push(`🏴‍☠️ 辛迪加海盗成员获得额外参与者奖励: ${pirateOtherRewards.length} 位成员每人获得 3 红晶`);
5572
+ }
5454
5573
  await ctx.database.withTransaction(async () => {
5455
5574
  for (const [handle, reward] of rewardMap) {
5456
5575
  const [signData] = await ctx.database.get("ggcevo_sign", { handle });
@@ -5468,10 +5587,18 @@ async function handleBossDefeatRewards(ctx, targetBoss) {
5468
5587
  quantity: (backpackData?.quantity || 0) + reward.guguCoins
5469
5588
  }], ["handle", "itemId"]);
5470
5589
  }
5590
+ for (const [handle, redcrystal] of pirateRedcrystalRewards) {
5591
+ const [career] = await ctx.database.get("ggcevo_careers", { handle });
5592
+ if (career) {
5593
+ await ctx.database.upsert("ggcevo_careers", [{
5594
+ handle,
5595
+ redcrystal: (career?.redcrystal || 0) + redcrystal
5596
+ }], ["handle"]);
5597
+ }
5598
+ }
5471
5599
  if (doubleWishIds.length > 0) {
5472
5600
  await ctx.database.set("ggcevo_wish", { id: { $in: doubleWishIds } }, {
5473
5601
  isused: true
5474
- // 将使用过的双倍祈愿标记为已使用
5475
5602
  });
5476
5603
  }
5477
5604
  });
@@ -7609,6 +7736,10 @@ ${items.join("、")}
7609
7736
  const [targetCareer] = await ctx.database.get("ggcevo_careers", {
7610
7737
  handle: targetHandle
7611
7738
  });
7739
+ let dailyPKLimit = config.dailyPKLimit;
7740
+ if (initiatorCareer?.career === "计算机专家") {
7741
+ dailyPKLimit += 3;
7742
+ }
7612
7743
  const validGroups = /* @__PURE__ */ new Set(["人类联盟", "辛迪加海盗"]);
7613
7744
  if (!initiatorCareer?.group || !validGroups.has(initiatorCareer.group)) {
7614
7745
  return "❌ 您尚未加入人类联盟或辛迪加海盗,不能参与PK";
@@ -7726,8 +7857,8 @@ ${protectionList}
7726
7857
  if (!isSameDate(convertUTCtoChinaTime(initiatorPK.lastPK), now)) {
7727
7858
  initiatorPK.todayCount = 0;
7728
7859
  }
7729
- if (initiatorPK.todayCount >= config.dailyPKLimit) {
7730
- return `今日挑战次数已用尽(${config.dailyPKLimit}次/日)。`;
7860
+ if (initiatorPK.todayCount >= dailyPKLimit) {
7861
+ return `今日挑战次数已用尽(${dailyPKLimit}次/日)。`;
7731
7862
  }
7732
7863
  const nowChina = convertUTCtoChinaTime(/* @__PURE__ */ new Date());
7733
7864
  const todayStart = new Date(nowChina);
@@ -7772,6 +7903,10 @@ ${protectionList}
7772
7903
  const powerDiff = initiatorPower - targetPower;
7773
7904
  let winRate = 50 + powerDiff / 100 * 0.1;
7774
7905
  winRate = Math.min(Math.max(winRate, 5), 95);
7906
+ if (initiatorCareer?.career === "计算机专家") {
7907
+ winRate += 10;
7908
+ }
7909
+ winRate = Math.min(Math.max(winRate, 5), 100);
7775
7910
  const randInt = Math.floor(Math.random() * 1e4);
7776
7911
  const winRateInt = Math.floor(winRate * 100);
7777
7912
  const isWin = randInt < winRateInt;
@@ -7790,8 +7925,10 @@ ${protectionList}
7790
7925
  }
7791
7926
  let computerExpertProtection = false;
7792
7927
  if (isWin && targetCareer?.career === "计算机专家") {
7793
- computerExpertProtection = true;
7794
- goldTransfer = 0;
7928
+ if (Math.random() < 0.5) {
7929
+ computerExpertProtection = true;
7930
+ goldTransfer = 0;
7931
+ }
7795
7932
  }
7796
7933
  let hornEffect = false;
7797
7934
  let extraGold = 0;
@@ -7889,6 +8026,14 @@ ${protectionList}
7889
8026
  result.push(`💸 您从口袋里拿出了${goldTransfer}枚金币上交给对方`);
7890
8027
  }
7891
8028
  const bonusEffects = [];
8029
+ if (initiatorCareer?.career === "计算机专家") {
8030
+ const usedCount = initiatorPK.todayCount + 1;
8031
+ bonusEffects.push(
8032
+ `▸ 💻 计算机专家特权:`,
8033
+ ` - 主动PK胜率+10%(最高可至100%)`,
8034
+ ` - 每日挑战次数+3(${usedCount}/${dailyPKLimit})`
8035
+ );
8036
+ }
7892
8037
  if (targetCareer.group === "人类联盟" && isWin) {
7893
8038
  bonusEffects.push(`▸ 🛡️ 人类联盟:应战者PK失败时仅损失1%的金币`);
7894
8039
  }
@@ -7908,7 +8053,7 @@ ${protectionList}
7908
8053
  result.push(`⚡ 加成效果:`);
7909
8054
  result.push(...bonusEffects);
7910
8055
  }
7911
- result.push(`📅 剩余挑战次数:${config.dailyPKLimit - (initiatorPK.todayCount + 1)}`);
8056
+ result.push(`📅 剩余挑战次数:${dailyPKLimit - (initiatorPK.todayCount + 1)}`);
7912
8057
  return result.join("\n");
7913
8058
  } catch (error) {
7914
8059
  console.error("PK系统异常:", error);
@@ -8619,7 +8764,11 @@ ${validTypes.join("、")}`;
8619
8764
  await updateSignRecord(ctx, handle, finalReward);
8620
8765
  const taskUpdates = [];
8621
8766
  if (primaryAttackResult.radiationApplied) {
8622
- taskUpdates.push({ taskId: 1, count: 1 });
8767
+ const hasRadiationCore = equippedWeapon.installedMods?.some(
8768
+ (mod) => mod.name === "辐射充能核心"
8769
+ );
8770
+ const count = hasRadiationCore ? 2 : 1;
8771
+ taskUpdates.push({ taskId: 1, count });
8623
8772
  }
8624
8773
  if (primaryAttackResult.freezing) {
8625
8774
  taskUpdates.push({ taskId: 2, count: 1 });
package/lib/weapons.d.ts CHANGED
@@ -472,4 +472,16 @@ export declare const modConfig: {
472
472
  exclusiveTo: string;
473
473
  isExclusive: boolean;
474
474
  };
475
+ 辐射充能核心: {
476
+ cost: number;
477
+ effect: string;
478
+ exclusiveTo: string;
479
+ isExclusive: boolean;
480
+ };
481
+ 等离子轴承: {
482
+ cost: number;
483
+ effect: string;
484
+ exclusiveTo: string;
485
+ isExclusive: boolean;
486
+ };
475
487
  };
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.91",
4
+ "version": "1.4.93",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "files": [