koishi-plugin-ggcevo-game 1.4.10 → 1.4.12

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.
@@ -38,7 +38,7 @@ export declare const PassiveHandler: {
38
38
  messages: string[];
39
39
  skillUpdates: {
40
40
  name: any;
41
- remove: ("冰霜环绕" | "寒霜地狱" | "冰霜回复" | "弱化形态" | "异形甲壳" | "孤立无援" | "冰霜进化" | "应激甲壳I" | "应激甲壳II" | "求生本能I" | "求生本能II" | "冷适应" | "感染空间站" | "病毒云" | "霉菌滋生" | "岗哨机枪" | "结构装甲" | "吸血唾液" | "进食" | "嗜血狂暴" | "吐血" | "电能导体" | "超导体" | "能量虹吸" | "能源虹吸" | "电能立场" | "电能冲击波" | "脉冲" | "能量黑洞" | "火焰异形" | "庞兽狂暴" | "灼烧粘液" | "腐蚀胆汁" | "火焰吐息" | "太阳耀斑" | "燃烧潜地" | "炼狱爆弹" | "猎手异形" | "狂暴" | "伪装" | "致命一击")[];
41
+ remove: ("弱化形态" | "异形甲壳" | "孤立无援" | "冰霜回复" | "冰霜进化" | "冰霜环绕" | "寒霜地狱" | "应激甲壳I" | "应激甲壳II" | "求生本能I" | "求生本能II" | "冷适应" | "感染空间站" | "病毒云" | "霉菌滋生" | "岗哨机枪" | "结构装甲" | "吸血唾液" | "进食" | "嗜血狂暴" | "吐血" | "电能导体" | "超导体" | "能量虹吸" | "能源虹吸" | "电能立场" | "电能冲击波" | "脉冲" | "能量黑洞" | "火焰异形" | "庞兽狂暴" | "灼烧粘液" | "腐蚀胆汁" | "火焰吐息" | "太阳耀斑" | "燃烧潜地" | "炼狱爆弹" | "猎手异形" | "狂暴" | "伪装" | "致命一击")[];
42
42
  }[];
43
43
  };
44
44
  handleInfectedStation: (ctx: Context, targetBoss: any) => Promise<{
@@ -105,6 +105,9 @@ export declare const PassiveHandler: {
105
105
  handleArcWelderEffect: (ctx: Context, targetBoss: any, weaponName: string) => Promise<{
106
106
  messages: string[];
107
107
  }>;
108
+ handleArcRifleEffect: (ctx: Context, targetBoss: any, weaponName: string, messages: string[]) => Promise<{
109
+ drainAmount: number;
110
+ }>;
108
111
  handleGiantRage: (targetBoss: any, currentHP: number, maxHP: number) => {
109
112
  damageMultiplier: number;
110
113
  messages: string[];
@@ -148,7 +151,7 @@ export declare const PassiveHandler: {
148
151
  damageMultiplier: number;
149
152
  messages: string[];
150
153
  };
151
- handleHunterAlien: (ctx: Context, targetBoss: any, weaponName: string, activeBosses: any[]) => Promise<{
154
+ handleHunterAlien: (ctx: Context, targetBoss: any, weaponName: string) => Promise<{
152
155
  immune: boolean;
153
156
  messages: string[];
154
157
  damageMultiplier?: undefined;
@@ -171,10 +174,13 @@ export declare const PassiveHandler: {
171
174
  };
172
175
  handleCorrosionModule: (installedMods: string[]) => number;
173
176
  handleParticlePhaseEffect: (targetBoss: any, weaponName: string) => number;
174
- handleIgnoreReductionEffects: (ctx: Context, userId: string, weaponName: string, targetBoss: any, totalMultiplier: number) => Promise<{
175
- damageMultiplier: number;
177
+ handleIgnoreReductionEffects: (ctx: Context, handle: string, weaponName: string, targetBoss: any, nerfMultiplier: number) => Promise<{
178
+ ignoreRate: number;
176
179
  messages: any[];
177
180
  }>;
181
+ handlePulseDisruptor: (ctx: Context, targetBoss: any, weaponName: string) => Promise<{
182
+ messages: string[];
183
+ }>;
178
184
  handlePassives: (ctx: Context, handle: string, targetBoss: any, initialDamage: number, currentHP: number, maxHP: number, weaponName: string, weaponData: any, activeBosses: any[], bossGroup: any) => Promise<{
179
185
  currentHP: any;
180
186
  messages: any;
package/lib/index.js CHANGED
@@ -237,7 +237,7 @@ var weaponConfig = {
237
237
  category: "能量武器",
238
238
  damage: 32,
239
239
  description: "一种原型能量武器,能够发射强大的脉冲",
240
- specialeffect: "攻击减少目标的2层技能计数",
240
+ specialeffect: "攻击减少目标2层技能计数",
241
241
  price: 1500,
242
242
  redCrystalCost: 15,
243
243
  isantiair: true,
@@ -263,14 +263,14 @@ var weaponConfig = {
263
263
  id: 102,
264
264
  type: "能量武器",
265
265
  category: "传奇武器",
266
- damage: 50,
266
+ damage: 70,
267
267
  description: "一件传奇武器",
268
- specialeffect: "攻击暴击率80%",
268
+ specialeffect: "攻击暴击率+80%",
269
269
  price: 7500,
270
270
  redCrystalCost: 150,
271
271
  isantiair: true,
272
272
  tagEffects: {
273
- "重甲": 2
273
+ "重甲": 1.5
274
274
  }
275
275
  },
276
276
  "龙息霰弹枪": {
@@ -460,6 +460,22 @@ var SyndicatedItems = {
460
460
  price: 0,
461
461
  redCrystalCost: 10,
462
462
  effects: "此物品存放于仓库自动生效(阵营必须为辛迪加海盗)。主动发起的PK对战结果为失败时上交给对方的金币-50%"
463
+ },
464
+ "雷达面罩": {
465
+ id: 6,
466
+ type: "设备工具",
467
+ description: "一个复杂的雷达面罩,用于远距离侦察或探测隐藏单位",
468
+ price: 0,
469
+ redCrystalCost: 25,
470
+ effects: "此物品存放于仓库自动生效(阵营必须为辛迪加海盗)。使用武器攻击时,无视目标10%的减伤效果"
471
+ },
472
+ "气喇叭": {
473
+ id: 7,
474
+ type: "设备工具",
475
+ description: "气喇叭一直被用于展示纯粹的勇气",
476
+ price: 0,
477
+ redCrystalCost: 30,
478
+ effects: "此物品存放于仓库自动生效(阵营必须为辛迪加海盗)。主动发起的PK对战结果为胜利时将获得辛迪加海盗总部发放的等额金币作为奖励"
463
479
  }
464
480
  };
465
481
  var initDefaultItems = {
@@ -598,7 +614,7 @@ var syndicatePirateConfig = [
598
614
  effect: "武器等级上限为7级; 升级武器享有10%的折扣; 解锁M4AE脉冲步枪(传奇)购买权限",
599
615
  requirements: "至少拥有一把6级及以上等级的武器",
600
616
  Jobtransfer: true,
601
- costredcrystal: 40
617
+ costredcrystal: 35
602
618
  },
603
619
  {
604
620
  professionName: "猩红杀手",
@@ -802,31 +818,31 @@ var Spacestationtechnology = [
802
818
  level: 1,
803
819
  cost: 500,
804
820
  description: "提高挖矿效率,每日签到金币奖励+5%",
805
- careerBonus: "深空矿工/情报副官: 每日签到金币奖励+10%"
821
+ careerBonus: "每日签到金币奖励+10%"
806
822
  },
807
823
  {
808
824
  level: 2,
809
825
  cost: 1750,
810
826
  description: "提高挖矿效率,每日签到金币奖励+10%",
811
- careerBonus: "深空矿工/情报副官: 每日签到金币奖励+20%; 解锁太空“挖矿”权限"
827
+ careerBonus: "每日签到金币奖励+20%; 解锁太空“挖矿”权限"
812
828
  },
813
829
  {
814
830
  level: 3,
815
831
  cost: 2950,
816
832
  description: "提高挖矿效率,每日签到金币奖励+15%",
817
- careerBonus: "深空矿工/情报副官: 每日签到金币奖励+30%; 解锁太空“挖矿”权限; 建造矿骡协同挖矿,效率提高20%"
833
+ careerBonus: "每日签到金币奖励+30%; 解锁太空“挖矿”权限; 建造矿骡协同挖矿,效率提高20%"
818
834
  },
819
835
  {
820
836
  level: 4,
821
837
  cost: 4250,
822
838
  description: "提高挖矿效率,每日签到金币奖励+20%",
823
- careerBonus: "深空矿工/情报副官: 每日签到金币奖励+40%; 解锁太空“挖矿”权限; 建造矿骡协同挖矿,效率提高40%"
839
+ careerBonus: "每日签到金币奖励+40%; 解锁太空“挖矿”权限; 建造矿骡协同挖矿,效率提高40%"
824
840
  },
825
841
  {
826
842
  level: 5,
827
843
  cost: 5375,
828
844
  description: "提高挖矿效率,每日签到金币奖励+25%",
829
- careerBonus: "深空矿工/情报副官: 每日签到金币奖励+50%; 解锁太空“挖矿”权限; 建造矿骡协同挖矿,效率提高60%,并且单次挖矿时间上限增加至48小时"
845
+ careerBonus: "每日签到金币奖励+50%; 解锁太空“挖矿”权限; 建造矿骡协同挖矿,效率提高60%,并且单次挖矿时间上限增加至48小时"
830
846
  }
831
847
  ]
832
848
  },
@@ -841,31 +857,31 @@ var Spacestationtechnology = [
841
857
  level: 1,
842
858
  cost: 500,
843
859
  description: "提升空间站武器等级,升级武器享有5%的折扣",
844
- careerBonus: "武器中士/情报副官: 升级武器享有10%的折扣"
860
+ careerBonus: "升级武器享有10%的折扣"
845
861
  },
846
862
  {
847
863
  level: 2,
848
864
  cost: 1500,
849
865
  description: "提升空间站武器等级,升级武器享有10%的折扣",
850
- careerBonus: "武器中士/情报副官: 升级武器享有20%的折扣"
866
+ careerBonus: "升级武器享有20%的折扣"
851
867
  },
852
868
  {
853
869
  level: 3,
854
870
  cost: 2550,
855
871
  description: "提升空间站武器等级,升级武器享有15%的折扣",
856
- careerBonus: "武器中士/情报副官: 升级武器享有30%的折扣"
872
+ careerBonus: "升级武器享有30%的折扣"
857
873
  },
858
874
  {
859
875
  level: 4,
860
876
  cost: 3950,
861
877
  description: "提升空间站武器等级,升级武器享有20%的折扣",
862
- careerBonus: "武器中士/情报副官: 在升级武器享有40%的折扣"
878
+ careerBonus: "在升级武器享有40%的折扣"
863
879
  },
864
880
  {
865
881
  level: 5,
866
882
  cost: 4650,
867
883
  description: "提升空间站武器等级,升级武器享有25%的折扣",
868
- careerBonus: "武器中士/情报副官: 升级武器享有50%的折扣; 解锁传奇武器购买权限1次"
884
+ careerBonus: "升级武器享有50%的折扣; 解锁传奇武器购买权限1次"
869
885
  }
870
886
  ]
871
887
  },
@@ -879,13 +895,13 @@ var Spacestationtechnology = [
879
895
  level: 1,
880
896
  cost: 750,
881
897
  description: "重启武器升级站,武器改装通用模块享有5%的折扣",
882
- careerBonus: "武器中士/情报副官: 武器改装通用模块享有10%的折扣"
898
+ careerBonus: "武器改装通用模块享有10%的折扣"
883
899
  },
884
900
  {
885
901
  level: 2,
886
902
  cost: 1e3,
887
903
  description: "重启高级武器改装站,武器改装通用模块享有10%的折扣",
888
- careerBonus: "武器中士/情报副官: 武器改装通用模块享有20%的折扣; 武器改装专属模块享有10%的折扣"
904
+ careerBonus: "武器改装通用模块享有20%的折扣; 武器改装专属模块享有10%的折扣"
889
905
  }
890
906
  ]
891
907
  },
@@ -900,31 +916,70 @@ var Spacestationtechnology = [
900
916
  level: 1,
901
917
  cost: 500,
902
918
  description: "重启安防参数代码,攻击获得的金币+5%",
903
- careerBonus: "警卫员下士/警卫长/情报副官: 攻击获得的金币+10%"
919
+ careerBonus: "攻击获得的金币+10%"
904
920
  },
905
921
  {
906
922
  level: 2,
907
923
  cost: 2050,
908
924
  description: "提高空间站安防系统强度,攻击获得的金币+10%",
909
- careerBonus: "警卫员下士/警卫长/情报副官: 攻击获得的金币+20%"
925
+ careerBonus: "攻击获得的金币+20%"
910
926
  },
911
927
  {
912
928
  level: 3,
913
929
  cost: 3250,
914
930
  description: "进一步提高空间站安防系统强度,攻击获得的金币+15%",
915
- careerBonus: "警卫员下士/警卫长/情报副官: 攻击获得的金币+30%"
931
+ careerBonus: "攻击获得的金币+30%"
916
932
  },
917
933
  {
918
934
  level: 4,
919
935
  cost: 4250,
920
936
  description: "大幅提高空间站安防系统强度,攻击获得的金币+20%",
921
- careerBonus: "警卫员下士/警卫长/情报副官: 攻击获得的金币+40%"
937
+ careerBonus: "攻击获得的金币+40%"
922
938
  },
923
939
  {
924
940
  level: 5,
925
941
  cost: 5350,
926
942
  description: "完全恢复空间站安防系统,攻击获得的金币+25%",
927
- careerBonus: "警卫员下士/警卫长/情报副官: 攻击获得的金币+50%; 获得一次打开安全军械库防爆门的权限,可以随机获得一把传奇武器"
943
+ careerBonus: "攻击获得的金币+50%; 获得一次打开安全军械库防爆门的权限,可以随机获得一把传奇武器"
944
+ }
945
+ ]
946
+ },
947
+ {
948
+ techId: 5,
949
+ techname: "关键系统固件",
950
+ careerNames: ["舰长", "情报副官"],
951
+ // 新增职业名称字段
952
+ maxLevel: 5,
953
+ levels: [
954
+ {
955
+ level: 1,
956
+ cost: 500,
957
+ description: "升级空间站关键系统,完成任务奖励+5%",
958
+ careerBonus: "完成任务奖励+10%"
959
+ },
960
+ {
961
+ level: 2,
962
+ cost: 1250,
963
+ description: "升级空间站关键系统,完成任务奖励+10%",
964
+ careerBonus: "完成任务奖励+20%"
965
+ },
966
+ {
967
+ level: 3,
968
+ cost: 2250,
969
+ description: "升级空间站关键系统,完成任务奖励+15%",
970
+ careerBonus: "完成任务奖励+30%"
971
+ },
972
+ {
973
+ level: 4,
974
+ cost: 2950,
975
+ description: "升级空间站关键系统,完成任务奖励+20%",
976
+ careerBonus: "完成任务奖励+40%,移除签到7日以下奖励区间"
977
+ },
978
+ {
979
+ level: 5,
980
+ cost: 3550,
981
+ description: "升级空间站关键系统,完成任务奖励+25%",
982
+ careerBonus: "完成任务奖励+50%,移除签到14日以下奖励区间"
928
983
  }
929
984
  ]
930
985
  }
@@ -1456,6 +1511,10 @@ function calculateModifiers(equippedWeapon, weaponName, hasCritRhythm) {
1456
1511
  let crystalCrit = 0;
1457
1512
  let overloadCrit = 0;
1458
1513
  let rhythmCrit = 0;
1514
+ let weaponCrit = 0;
1515
+ if (weaponName === "MK-4激光步枪") {
1516
+ weaponCrit = 80;
1517
+ }
1459
1518
  equippedWeapon.installedMods.forEach((mod) => {
1460
1519
  if (mod === "动能增幅") {
1461
1520
  totalModAdd += 0.2;
@@ -1472,7 +1531,8 @@ function calculateModifiers(equippedWeapon, weaponName, hasCritRhythm) {
1472
1531
  });
1473
1532
  rhythmCrit = hasCritRhythm ? 20 : 0;
1474
1533
  const totalCritRate = Math.min(
1475
- crystalCrit + overloadCrit + rhythmCrit,
1534
+ crystalCrit + overloadCrit + rhythmCrit + weaponCrit,
1535
+ // 包含武器专属暴击
1476
1536
  100
1477
1537
  );
1478
1538
  if (totalCritRate > 0) {
@@ -2777,6 +2837,24 @@ var PassiveHandler = {
2777
2837
  }
2778
2838
  return { messages };
2779
2839
  }, "handleArcWelderEffect"),
2840
+ // 在 PassiveHandler 对象中添加新的处理函数
2841
+ handleArcRifleEffect: /* @__PURE__ */ __name(async function(ctx, targetBoss, weaponName, messages) {
2842
+ if (weaponName !== "DG-3电弧步枪") return null;
2843
+ const currentEnergy = targetBoss.energy || 0;
2844
+ const drainAmount = Math.min(500, currentEnergy);
2845
+ const newEnergy = currentEnergy - drainAmount;
2846
+ if (drainAmount <= 0) {
2847
+ return null;
2848
+ }
2849
+ await ctx.database.set(
2850
+ "ggcevo_boss",
2851
+ { name: targetBoss.name },
2852
+ { energy: newEnergy }
2853
+ );
2854
+ targetBoss.energy = newEnergy;
2855
+ messages.push(`⚡ 【DG-3电弧步枪】生效:消耗目标${drainAmount}点能量`);
2856
+ return { drainAmount };
2857
+ }, "handleArcRifleEffect"),
2780
2858
  // 庞兽狂暴处理(血量低于50%时减伤)
2781
2859
  handleGiantRage: /* @__PURE__ */ __name(function(targetBoss, currentHP, maxHP) {
2782
2860
  if (!targetBoss.skills.includes("庞兽狂暴")) return null;
@@ -3034,7 +3112,7 @@ var PassiveHandler = {
3034
3112
  };
3035
3113
  }, "handleHellfireBomb"),
3036
3114
  // 猎手异形处理(Hunter Alien)
3037
- handleHunterAlien: /* @__PURE__ */ __name(async function(ctx, targetBoss, weaponName, activeBosses) {
3115
+ handleHunterAlien: /* @__PURE__ */ __name(async function(ctx, targetBoss, weaponName) {
3038
3116
  if (!targetBoss.skills.includes("猎手异形")) return null;
3039
3117
  if (weaponName === "焚烧枪" || weaponName === "零度之下") {
3040
3118
  return {
@@ -3042,6 +3120,7 @@ var PassiveHandler = {
3042
3120
  messages: [`🛡️ 【猎手异形】生效:免疫${weaponName === "焚烧枪" ? "火焰" : "寒冷"}伤害`]
3043
3121
  };
3044
3122
  }
3123
+ const activeBosses = await ctx.database.get("ggcevo_boss", { isActive: true });
3045
3124
  const otherAlive = activeBosses.some(
3046
3125
  (boss) => boss.groupId === targetBoss.groupId && boss.name !== targetBoss.name && boss.HP > 0
3047
3126
  );
@@ -3108,67 +3187,92 @@ var PassiveHandler = {
3108
3187
  if (!targetBoss || weaponName !== "粒子相位枪") return 0;
3109
3188
  return targetBoss.tags.includes("护盾") ? 0.5 : 0;
3110
3189
  }, "handleParticlePhaseEffect"),
3111
- // 修复handleIgnoreReductionEffects函数,确保始终返回有效对象
3112
- handleIgnoreReductionEffects: /* @__PURE__ */ __name(async (ctx, userId, weaponName, targetBoss, totalMultiplier) => {
3113
- const fallbackResult = {
3114
- damageMultiplier: totalMultiplier,
3115
- messages: []
3116
- };
3117
- try {
3118
- if (totalMultiplier >= 0) {
3119
- return fallbackResult;
3120
- }
3121
- const weaponConfigData = weaponConfig[weaponName];
3122
- if (!weaponConfigData) {
3123
- return fallbackResult;
3124
- }
3125
- const [equippedWeapon] = await ctx.database.get("ggcevo_equipment", {
3126
- weaponId: weaponConfigData.id,
3127
- handle: userId,
3128
- equipped: true
3129
- });
3130
- if (!equippedWeapon || !equippedWeapon.installedMods) {
3131
- return fallbackResult;
3132
- }
3133
- const ignoreEffects = [];
3190
+ // 修改后的无视减伤处理函数
3191
+ handleIgnoreReductionEffects: /* @__PURE__ */ __name(async (ctx, handle, weaponName, targetBoss, nerfMultiplier) => {
3192
+ if (nerfMultiplier >= 0) return null;
3193
+ const ignoreEffects = [];
3194
+ let messages = [];
3195
+ if (weaponName === "光剑") {
3196
+ ignoreEffects.push(1);
3197
+ messages.push(`⚔️ 【光剑】特效:无视目标100%减伤效果`);
3198
+ } else if (weaponName === "M4AE脉冲步枪") {
3199
+ ignoreEffects.push(0.8);
3200
+ messages.push(`🔫 【M4AE脉冲步枪】特效:无视目标80%减伤效果`);
3201
+ }
3202
+ if (weaponName !== "光剑" && weaponName !== "M4AE脉冲步枪") {
3134
3203
  const particleEffect = PassiveHandler.handleParticlePhaseEffect(targetBoss, weaponName);
3135
3204
  if (particleEffect > 0) {
3136
3205
  ignoreEffects.push(particleEffect);
3137
- }
3138
- const corrosionEffect = PassiveHandler.handleCorrosionModule(equippedWeapon.installedMods);
3139
- if (corrosionEffect > 0) {
3140
- ignoreEffects.push(corrosionEffect);
3141
- }
3142
- if (ignoreEffects.length === 0) {
3143
- return fallbackResult;
3144
- }
3145
- const totalIgnoreRate = ignoreEffects.reduce((sum, rate) => sum + rate, 0);
3146
- const originalMultiplier = totalMultiplier;
3147
- const effectiveMultiplier = totalMultiplier * (1 - totalIgnoreRate);
3148
- const messages = [];
3149
- if (particleEffect > 0) {
3150
3206
  messages.push(`⚡ 【粒子相位枪】特效:无视护盾目标${particleEffect * 100}%减伤效果`);
3151
3207
  }
3152
- if (corrosionEffect > 0) {
3153
- messages.push(`⚡ 【破甲模块】生效:无视目标${corrosionEffect * 100}%减伤效果`);
3208
+ const weaponConfigData = weaponConfig[weaponName];
3209
+ if (weaponConfigData) {
3210
+ const [equippedWeapon] = await ctx.database.get("ggcevo_equipment", {
3211
+ weaponId: weaponConfigData.id,
3212
+ handle,
3213
+ equipped: true
3214
+ });
3215
+ if (equippedWeapon?.installedMods?.includes("破甲模块")) {
3216
+ const corrosionEffect = 0.2;
3217
+ ignoreEffects.push(corrosionEffect);
3218
+ messages.push(`⚡ 【破甲模块】生效:无视目标${corrosionEffect * 100}%减伤效果`);
3219
+ }
3220
+ }
3221
+ }
3222
+ try {
3223
+ const [careerData] = await ctx.database.get("ggcevo_careers", { handle });
3224
+ if (careerData?.group === "辛迪加海盗") {
3225
+ const [radarMask] = await ctx.database.get("ggcevo_warehouse", {
3226
+ handle,
3227
+ itemId: 6
3228
+ // 雷达面罩ID
3229
+ });
3230
+ if (radarMask && radarMask.quantity > 0) {
3231
+ const radarEffect = 0.1;
3232
+ ignoreEffects.push(radarEffect);
3233
+ messages.push(`🛰️ 【雷达面罩】生效:无视目标${radarEffect * 100}%减伤效果`);
3234
+ }
3154
3235
  }
3155
- messages.push(
3156
- `⚡ 减伤系数由${(originalMultiplier * 100).toFixed(0)}% → ${(effectiveMultiplier * 100).toFixed(0)}%`
3157
- );
3158
- return {
3159
- damageMultiplier: effectiveMultiplier,
3160
- messages
3161
- };
3162
3236
  } catch (error) {
3163
- ctx.logger("PassiveHandler").warn("处理无视减伤效果失败", error);
3164
- return fallbackResult;
3237
+ console.error("检查雷达面罩效果时出错:", error);
3238
+ }
3239
+ if (ignoreEffects.length === 0) {
3240
+ return null;
3165
3241
  }
3242
+ const totalIgnoreRate = Math.min(1, ignoreEffects.reduce((sum, rate) => sum + rate, 0));
3243
+ return {
3244
+ ignoreRate: totalIgnoreRate,
3245
+ messages
3246
+ };
3166
3247
  }, "handleIgnoreReductionEffects"),
3167
- // 统一处理被动技能
3248
+ // 在PassiveHandler对象中添加处理脉冲扰乱枪效果的方法
3249
+ handlePulseDisruptor: /* @__PURE__ */ __name(async function(ctx, targetBoss, weaponName) {
3250
+ if (weaponName !== "脉冲扰乱枪") {
3251
+ return null;
3252
+ }
3253
+ const currentSkillCount = targetBoss.Skillcountpoints || 0;
3254
+ if (currentSkillCount <= 0) {
3255
+ return null;
3256
+ }
3257
+ const newCount = Math.max(0, currentSkillCount - 2);
3258
+ await ctx.database.set(
3259
+ "ggcevo_boss",
3260
+ { name: targetBoss.name },
3261
+ { Skillcountpoints: newCount }
3262
+ );
3263
+ targetBoss.Skillcountpoints = newCount;
3264
+ return {
3265
+ messages: [
3266
+ `⚡ 【脉冲扰乱枪】特效:减少${targetBoss.name} 2层技能计数(当前${newCount}层)`
3267
+ ]
3268
+ };
3269
+ }, "handlePulseDisruptor"),
3270
+ // 修改后的伤害处理函数
3168
3271
  handlePassives: /* @__PURE__ */ __name(async function(ctx, handle, targetBoss, initialDamage, currentHP, maxHP, weaponName, weaponData, activeBosses, bossGroup) {
3169
3272
  let messages = [];
3170
3273
  let skillUpdates = [];
3171
- let totalMultiplier = 0;
3274
+ let buffMultiplier = 0;
3275
+ let nerfMultiplier = 0;
3172
3276
  let radiationApplied = false;
3173
3277
  let freezing = false;
3174
3278
  let bileStacks = 0;
@@ -3236,7 +3340,7 @@ var PassiveHandler = {
3236
3340
  initialDamage: 0
3237
3341
  };
3238
3342
  }
3239
- const hunterImmune = await this.handleHunterAlien(ctx, targetBoss, weaponName, activeBosses);
3343
+ const hunterImmune = await this.handleHunterAlien(ctx, targetBoss, weaponName);
3240
3344
  if (hunterImmune?.immune) {
3241
3345
  return {
3242
3346
  currentHP: targetBoss.HP,
@@ -3248,92 +3352,114 @@ var PassiveHandler = {
3248
3352
  targetBoss.skills.forEach((skill) => {
3249
3353
  const config = passiveConfig[skill];
3250
3354
  if (config && config.effect !== void 0 && config.effect !== 0) {
3251
- totalMultiplier += config.effect;
3355
+ if (config.effect > 0) {
3356
+ buffMultiplier += config.effect;
3357
+ } else {
3358
+ nerfMultiplier += config.effect;
3359
+ }
3252
3360
  const effectPercent = Math.round(config.effect * 100);
3253
- messages.push(`📚 【${skill}】生效,受到的伤害${config.effect > 0 ? "+" : ""}${effectPercent}%`);
3361
+ const effectSign = config.effect > 0 ? "+" : "";
3362
+ messages.push(`📚 【${skill}】生效:受到的伤害${effectSign}${effectPercent}%`);
3254
3363
  }
3255
3364
  });
3365
+ const radiationCalc = this.calculateRadiationDamage(targetBoss);
3366
+ if (radiationCalc) {
3367
+ buffMultiplier += radiationCalc.damageMultiplier;
3368
+ messages.push(...radiationCalc.messages);
3369
+ }
3370
+ const coldDamageResult = this.calculateColdDamage(targetBoss);
3371
+ if (coldDamageResult) {
3372
+ buffMultiplier += coldDamageResult.damageMultiplier;
3373
+ messages.push(...coldDamageResult.messages);
3374
+ }
3256
3375
  const infectionResult = await this.handleInfectedStation(ctx, targetBoss);
3257
3376
  if (infectionResult) {
3258
- totalMultiplier += infectionResult.damageMultiplier;
3377
+ nerfMultiplier += infectionResult.damageMultiplier;
3259
3378
  messages.push(...infectionResult.messages);
3260
3379
  }
3261
3380
  const armorResult = this.handleStructuralArmor(targetBoss, weaponData);
3262
3381
  if (armorResult) {
3263
- totalMultiplier += armorResult.damageMultiplier;
3382
+ nerfMultiplier += armorResult.damageMultiplier;
3264
3383
  messages.push(...armorResult.messages);
3265
3384
  }
3266
3385
  const bloodEffect = this.handleBloodEffects(targetBoss, currentHP, maxHP);
3267
3386
  if (bloodEffect) {
3268
- totalMultiplier += bloodEffect.damageMultiplier;
3387
+ nerfMultiplier += bloodEffect.damageMultiplier;
3269
3388
  messages.push(...bloodEffect.messages);
3270
3389
  }
3271
3390
  const siphonResult = this.handleEnergySiphon(targetBoss, currentHP, maxHP);
3272
3391
  if (siphonResult) {
3273
- totalMultiplier += siphonResult.damageMultiplier;
3392
+ nerfMultiplier += siphonResult.damageMultiplier;
3274
3393
  messages.push(...siphonResult.messages);
3275
3394
  }
3276
3395
  const powerSiphonResult = this.handlePowerSiphon(targetBoss);
3277
3396
  if (powerSiphonResult) {
3278
- totalMultiplier += powerSiphonResult.damageMultiplier;
3397
+ nerfMultiplier += powerSiphonResult.damageMultiplier;
3279
3398
  messages.push(...powerSiphonResult.messages);
3280
3399
  }
3281
3400
  const giantRageResult = this.handleGiantRage(targetBoss, currentHP, maxHP);
3282
3401
  if (giantRageResult) {
3283
- totalMultiplier += giantRageResult.damageMultiplier;
3402
+ nerfMultiplier += giantRageResult.damageMultiplier;
3284
3403
  messages.push(...giantRageResult.messages);
3285
3404
  }
3286
3405
  const hellfireBombResult = this.handleHellfireBomb(targetBoss, activeBosses);
3287
3406
  if (hellfireBombResult) {
3288
- totalMultiplier += hellfireBombResult.damageMultiplier;
3407
+ nerfMultiplier += hellfireBombResult.damageMultiplier;
3289
3408
  messages.push(...hellfireBombResult.messages);
3290
3409
  }
3291
3410
  const disguiseResult = await this.handleDisguise(ctx, targetBoss, weaponName, initialDamage);
3292
3411
  if (disguiseResult) {
3293
- totalMultiplier += disguiseResult.damageMultiplier;
3412
+ nerfMultiplier += disguiseResult.damageMultiplier;
3294
3413
  messages.push(...disguiseResult.messages);
3295
3414
  }
3296
3415
  if (hunterImmune && !hunterImmune.immune) {
3297
- totalMultiplier += hunterImmune.damageMultiplier;
3416
+ const multiplier = hunterImmune.damageMultiplier;
3417
+ if (multiplier > 0) {
3418
+ buffMultiplier += multiplier;
3419
+ } else {
3420
+ nerfMultiplier += multiplier;
3421
+ }
3298
3422
  messages.push(...hunterImmune.messages);
3299
3423
  }
3300
3424
  const rageResult = this.handleRage(targetBoss, currentHP, maxHP);
3301
3425
  if (rageResult) {
3302
- totalMultiplier += rageResult.damageMultiplier;
3426
+ nerfMultiplier += rageResult.damageMultiplier;
3303
3427
  messages.push(...rageResult.messages);
3304
3428
  }
3305
- const radiationCalc = this.calculateRadiationDamage(targetBoss);
3306
- if (radiationCalc) {
3307
- totalMultiplier += radiationCalc.damageMultiplier;
3308
- messages.push(...radiationCalc.messages);
3309
- }
3310
- const coldDamageResult = this.calculateColdDamage(targetBoss);
3311
- if (coldDamageResult) {
3312
- totalMultiplier += coldDamageResult.damageMultiplier;
3313
- messages.push(...coldDamageResult.messages);
3429
+ if (solarFlareResult.messages.length > 0) {
3430
+ messages.push(...solarFlareResult.messages);
3314
3431
  }
3432
+ let baseMultiplier = buffMultiplier + nerfMultiplier;
3315
3433
  const ignoreReductionResult = await this.handleIgnoreReductionEffects(
3316
3434
  ctx,
3317
3435
  handle,
3318
3436
  weaponName,
3319
3437
  targetBoss,
3320
- totalMultiplier
3438
+ nerfMultiplier
3439
+ // 只传入减伤部分
3321
3440
  );
3322
- if (ignoreReductionResult && ignoreReductionResult.messages && ignoreReductionResult.messages.length > 0) {
3323
- totalMultiplier = ignoreReductionResult.damageMultiplier;
3324
- messages.push(...ignoreReductionResult.messages);
3325
- }
3326
- if (solarFlareResult.messages.length > 0) {
3327
- messages.push(...solarFlareResult.messages);
3328
- }
3329
- const originalMultiplier = totalMultiplier;
3441
+ let effectiveMultiplier = baseMultiplier;
3442
+ let appliedIgnoreMessages = [];
3443
+ let effectiveNerf = nerfMultiplier;
3444
+ if (ignoreReductionResult) {
3445
+ appliedIgnoreMessages = ignoreReductionResult.messages;
3446
+ effectiveNerf = nerfMultiplier * (1 - ignoreReductionResult.ignoreRate);
3447
+ effectiveMultiplier = buffMultiplier + effectiveNerf;
3448
+ }
3449
+ const originalMultiplier = effectiveMultiplier;
3330
3450
  if (originalMultiplier < -1) {
3331
3451
  messages.push(`⚠️ 触发伤害保底机制:强制造成1点伤害`);
3332
3452
  }
3333
- let finalDamage = initialDamage * (1 + totalMultiplier);
3453
+ let finalDamage = initialDamage * (1 + effectiveMultiplier);
3334
3454
  finalDamage = Math.floor(finalDamage);
3335
3455
  finalDamage = Math.max(finalDamage, 1);
3336
3456
  currentHP = targetBoss.HP - finalDamage;
3457
+ if (appliedIgnoreMessages.length > 0) {
3458
+ messages.push(...appliedIgnoreMessages);
3459
+ messages.push(
3460
+ `⚡ 减伤效果:${(nerfMultiplier * 100).toFixed(0)}% → ${(effectiveNerf * 100).toFixed(0)}%`
3461
+ );
3462
+ }
3337
3463
  if (currentHP <= 0 && !targetBoss.skills.includes("求生本能I") && !targetBoss.skills.includes("求生本能II")) {
3338
3464
  return {
3339
3465
  currentHP,
@@ -3403,6 +3529,22 @@ var PassiveHandler = {
3403
3529
  }
3404
3530
  }
3405
3531
  }
3532
+ const pulseDisruptorResult = await this.handlePulseDisruptor(
3533
+ ctx,
3534
+ targetBoss,
3535
+ weaponName
3536
+ );
3537
+ if (pulseDisruptorResult) {
3538
+ messages.push(...pulseDisruptorResult.messages);
3539
+ }
3540
+ const arcResult = await this.handleArcWelderEffect(ctx, targetBoss, weaponName);
3541
+ if (arcResult) {
3542
+ messages.push(...arcResult.messages);
3543
+ }
3544
+ const arcRifleResult = await this.handleArcRifleEffect(ctx, targetBoss, weaponName, messages);
3545
+ if (arcRifleResult) {
3546
+ messages.push(...arcRifleResult.messages);
3547
+ }
3406
3548
  const coldAdaptResult = await this.handleColdAdaptation(ctx, targetBoss, weaponName);
3407
3549
  if (coldAdaptResult) {
3408
3550
  messages.push(...coldAdaptResult.messages);
@@ -3420,10 +3562,6 @@ var PassiveHandler = {
3420
3562
  if (tagChangeResult) {
3421
3563
  messages.push(...tagChangeResult.messages);
3422
3564
  }
3423
- const arcResult = await this.handleArcWelderEffect(ctx, targetBoss, weaponName);
3424
- if (arcResult) {
3425
- messages.push(...arcResult.messages);
3426
- }
3427
3565
  const shockwaveResult = await this.handleEnergyShockwave(ctx, targetBoss);
3428
3566
  if (shockwaveResult) {
3429
3567
  messages.push(...shockwaveResult.messages);
@@ -3724,7 +3862,7 @@ async function handleScatterAttack(ctx, session, config, handle, equippedWeapon,
3724
3862
  secondaryTarget,
3725
3863
  secondaryDamage,
3726
3864
  secondaryTarget.HP,
3727
- getBossMaxHP(secondaryTarget),
3865
+ getBossMaxHP(secondaryTarget.name),
3728
3866
  weaponName,
3729
3867
  weaponData,
3730
3868
  secondaryTargets,
@@ -4590,12 +4728,30 @@ ${itemDetails.join("\n")}`;
4590
4728
  } else if (monthlyDays === 28) {
4591
4729
  tickets = 7;
4592
4730
  }
4593
- if (monthlyDays < 7) basePoints = getRandomInt(20, 40);
4594
- else if (monthlyDays < 14) basePoints = getRandomInt(40, 60);
4595
- else if (monthlyDays < 21) basePoints = getRandomInt(60, 80);
4596
- else if (monthlyDays < 28) basePoints = getRandomInt(80, 100);
4597
- else basePoints = getRandomInt(100, 200);
4731
+ const [systemFirmwareTech] = await ctx.database.get("ggcevo_tech", { handle, techId: 5 }).catch(() => [{ level: 0 }]);
4732
+ const systemFirmwareLevel = Math.min(systemFirmwareTech?.level || 0, 5);
4598
4733
  const [careerData] = await ctx.database.get("ggcevo_careers", { handle });
4734
+ const shouldApplyBonus = careerData?.group === "人类联盟" && ["舰长", "情报副官"].includes(careerData.career) && systemFirmwareLevel >= 4;
4735
+ if (shouldApplyBonus) {
4736
+ if (systemFirmwareLevel === 4) {
4737
+ if (monthlyDays < 14) basePoints = getRandomInt(40, 60);
4738
+ else if (monthlyDays < 21) basePoints = getRandomInt(60, 80);
4739
+ else if (monthlyDays < 28) basePoints = getRandomInt(80, 100);
4740
+ else basePoints = getRandomInt(100, 200);
4741
+ messages.push(`🛰️ 关键系统固件科技Lv4:移除签到7日以下奖励区间`);
4742
+ } else if (systemFirmwareLevel === 5) {
4743
+ if (monthlyDays < 21) basePoints = getRandomInt(60, 80);
4744
+ else if (monthlyDays < 28) basePoints = getRandomInt(80, 100);
4745
+ else basePoints = getRandomInt(100, 200);
4746
+ messages.push(`🛰️ 关键系统固件科技Lv5:移除签到14日以下奖励区间`);
4747
+ }
4748
+ } else {
4749
+ if (monthlyDays < 7) basePoints = getRandomInt(20, 40);
4750
+ else if (monthlyDays < 14) basePoints = getRandomInt(40, 60);
4751
+ else if (monthlyDays < 21) basePoints = getRandomInt(60, 80);
4752
+ else if (monthlyDays < 28) basePoints = getRandomInt(80, 100);
4753
+ else basePoints = getRandomInt(100, 200);
4754
+ }
4599
4755
  if (careerData?.group === "人类联盟") {
4600
4756
  totalBonus += 0.2;
4601
4757
  messages.push("🏛️ 人类联盟阵营:+20%金币");
@@ -4618,7 +4774,7 @@ ${itemDetails.join("\n")}`;
4618
4774
  }
4619
4775
  if (careerData.career === "深空矿工") {
4620
4776
  totalBonus += 0.5;
4621
- messages.push("🎖️ 深空矿工职业:+50%金币");
4777
+ messages.push("⛏️ 深空矿工职业:+50%金币");
4622
4778
  }
4623
4779
  }
4624
4780
  if (careerData?.group === "辛迪加海盗") {
@@ -4628,7 +4784,7 @@ ${itemDetails.join("\n")}`;
4628
4784
  const additionalBonus = Math.min(humanPlayersCount, 50);
4629
4785
  const credBonus = 0.5 + additionalBonus / 100;
4630
4786
  totalBonus += credBonus;
4631
- messages.push(`💎 CRED-17设备:+50%金币 (额外+${additionalBonus}%金币)`);
4787
+ messages.push(`💎 CRED-17生效:+50%金币 (额外+${additionalBonus}%金币)`);
4632
4788
  }
4633
4789
  }
4634
4790
  const [meowEffect] = await ctx.database.get("ggcevo_Wish_Record", {
@@ -5729,6 +5885,19 @@ ${items.join("、")}
5729
5885
  computerExpertProtection = true;
5730
5886
  goldTransfer = 0;
5731
5887
  }
5888
+ let hornEffect = false;
5889
+ let extraGold = 0;
5890
+ if (isWin && initiatorCareer?.group === "辛迪加海盗") {
5891
+ const [hornItem] = await ctx.database.get("ggcevo_warehouse", {
5892
+ handle: initiatorHandle,
5893
+ itemId: 7
5894
+ // 气喇叭ID
5895
+ });
5896
+ if (hornItem && hornItem.quantity > 0) {
5897
+ hornEffect = true;
5898
+ extraGold = goldTransfer;
5899
+ }
5900
+ }
5732
5901
  await ctx.database.withTransaction(async () => {
5733
5902
  await ctx.database.upsert("ggcevo_pk", [
5734
5903
  // 发起者记录
@@ -5769,7 +5938,11 @@ ${items.join("、")}
5769
5938
  redcrystal: (initiatorCareer?.redcrystal || 0) + redcrystalAdd
5770
5939
  }], ["handle"]);
5771
5940
  }
5772
- if (computerExpertProtection) {
5941
+ if (hornEffect) {
5942
+ await ctx.database.set("ggcevo_sign", initiatorHandle, {
5943
+ totalRewards: initiatorGold + goldTransfer + extraGold
5944
+ });
5945
+ } else if (computerExpertProtection) {
5773
5946
  } else {
5774
5947
  if (isWin) {
5775
5948
  await ctx.database.set("ggcevo_sign", targetHandle, {
@@ -5810,7 +5983,10 @@ ${items.join("、")}
5810
5983
  result.push(`💸 您从口袋里拿出了${goldTransfer}枚金币上交给对方`);
5811
5984
  }
5812
5985
  if (mp3Effect) {
5813
- result.push(`💿 MP3播放器设备:挑战者PK失败时上交的金币减少50%`);
5986
+ result.push(`💿 MP3播放器生效:挑战者PK失败时上交的金币减少50%`);
5987
+ }
5988
+ if (hornEffect) {
5989
+ result.push(`📯 气喇叭生效:辛迪加海盗总部为您发放了额外${extraGold}金币奖励!`);
5814
5990
  }
5815
5991
  if (initiatorCareer?.group === "辛迪加海盗") {
5816
5992
  result.push(`🔴 辛迪加海盗阵营:+1枚红晶`);
@@ -7423,7 +7599,7 @@ ${validTypes.join("、")}`;
7423
7599
  '使用 "科技 科技名称" 查看详细信息',
7424
7600
  isIntelligenceOfficer ? [
7425
7601
  "💰 当前折扣:",
7426
- "🎖️ 情报副官:10%"
7602
+ "🎖️ 情报副官职业:10%"
7427
7603
  ].join("\n") : "",
7428
7604
  "====================",
7429
7605
  ...techList,
@@ -7452,7 +7628,7 @@ ${Spacestationtechnology.map((t) => t.techname).join("、")}`;
7452
7628
  if (isIntelligenceOfficer) {
7453
7629
  discountInfo = [
7454
7630
  "💰 当前折扣:",
7455
- "🎖️ 情报副官:10%"
7631
+ "🎖️ 情报副官职业:10%"
7456
7632
  ];
7457
7633
  }
7458
7634
  return [
@@ -7557,7 +7733,7 @@ ${Spacestationtechnology.map((t) => t.techname).join("、")}`;
7557
7733
  }
7558
7734
  reportLines.push(rewardLine);
7559
7735
  if (tech.level >= 3) {
7560
- reportLines.push(`🔧 采掘系统 Lv.${tech.level}:金币+${multiplier * 100}%`);
7736
+ reportLines.push(`🔧 采掘系统科技Lv.${tech.level}(矿骡):+${multiplier * 100}%金币`);
7561
7737
  }
7562
7738
  reportLines.push(`🏆 历史总挖矿收益:${record.totalMined + total}金币`);
7563
7739
  reportLines.push("💡 已自动开始下一轮挖矿");
@@ -7621,49 +7797,84 @@ ${Spacestationtechnology.map((t) => t.techname).join("、")}`;
7621
7797
  ].join("\n");
7622
7798
  });
7623
7799
  ctx.command("ggcevo/完成任务 <name:text>", "完成指定任务领取奖励").usage('输入"完成任务 任务名称"来完成任务并领取奖励').action(async ({ session }, name2) => {
7624
- const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
7625
- if (!profile) return "⚠️ 需要先绑定游戏句柄";
7626
- const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
7627
- if (await ctx.database.get("ggcevo_blacklist", { handle }).then((r) => r.length)) {
7628
- return " 您已被列入黑名单。";
7629
- }
7630
- const taskEntry = Object.entries(Tasklist).find(
7631
- ([taskName2]) => taskName2.includes(name2)
7632
- );
7633
- if (!name2) return "请输入“完成任务 任务名称”领取任务奖励";
7634
- if (!taskEntry) return `⚠️ 未找到名称包含"${name2}"的任务`;
7635
- const [taskName, taskConfig] = taskEntry;
7636
- const [taskData] = await ctx.database.get("ggcevo_task", {
7637
- handle,
7638
- taskId: taskConfig.id
7639
- });
7640
- if (!taskData) return `⚠️ 您尚未开始"${taskName}"任务`;
7641
- if (taskData.progress < taskConfig.target) {
7642
- return `⚠️ 任务进度不足!当前进度:${taskData.progress}/${taskConfig.target}`;
7800
+ try {
7801
+ const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
7802
+ if (!profile) return "⚠️ 需要先绑定游戏句柄";
7803
+ const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
7804
+ if (await ctx.database.get("ggcevo_blacklist", { handle }).then((r) => r.length)) {
7805
+ return "⛔ 您已被列入黑名单。";
7806
+ }
7807
+ if (!name2) return '请输入"完成任务 任务名称"领取任务奖励';
7808
+ const taskEntry = Object.entries(Tasklist).find(
7809
+ ([taskName2]) => taskName2.includes(name2)
7810
+ );
7811
+ if (!taskEntry) return `⚠️ 未找到名称包含"${name2}"的任务`;
7812
+ const [taskName, taskConfig] = taskEntry;
7813
+ const [taskData] = await ctx.database.get("ggcevo_task", {
7814
+ handle,
7815
+ taskId: taskConfig.id
7816
+ });
7817
+ if (!taskData) return `⚠️ 您尚未开始"${taskName}"任务`;
7818
+ if (taskData.progress < taskConfig.target) {
7819
+ return `⚠️ 任务进度不足!当前进度:${taskData.progress}/${taskConfig.target}`;
7820
+ }
7821
+ const newProgress = taskData.progress - taskConfig.target;
7822
+ const newCompletions = taskData.Completions + 1;
7823
+ const [careerData] = await ctx.database.get("ggcevo_careers", { handle });
7824
+ const [systemFirmwareTech] = await ctx.database.get("ggcevo_tech", { handle, techId: 5 }).catch(() => [{ level: 0 }]);
7825
+ const techLevel = Math.min(systemFirmwareTech?.level || 0, 5);
7826
+ let baseReward = taskConfig.price;
7827
+ let actualReward = baseReward;
7828
+ let bonusMessage = "";
7829
+ let bonusPercent = 0;
7830
+ if (techLevel > 0) {
7831
+ const normalBonus = [0, 5, 10, 15, 20, 25][techLevel];
7832
+ const careerBonus = careerData?.group === "人类联盟" && ["舰长", "情报副官"].includes(careerData.career) ? [0, 10, 20, 30, 40, 50][techLevel] : 0;
7833
+ bonusPercent = Math.max(normalBonus, careerBonus);
7834
+ if (bonusPercent > 0) {
7835
+ actualReward = Math.round(baseReward * (1 + bonusPercent / 100));
7836
+ bonusMessage = `(含科技加成 +${bonusPercent}%)`;
7837
+ }
7838
+ }
7839
+ await ctx.database.set("ggcevo_task", {
7840
+ handle,
7841
+ taskId: taskConfig.id
7842
+ }, {
7843
+ progress: newProgress,
7844
+ Completions: newCompletions
7845
+ });
7846
+ const [signData] = await ctx.database.get("ggcevo_sign", { handle });
7847
+ await ctx.database.upsert("ggcevo_sign", [{
7848
+ handle,
7849
+ totalRewards: (signData?.totalRewards || 0) + actualReward
7850
+ }], ["handle"]);
7851
+ const [updatedSignData] = await ctx.database.get("ggcevo_sign", { handle });
7852
+ const response = [
7853
+ `🎉 恭喜您成功完成【${taskName}】任务!`,
7854
+ `任务奖励:${actualReward}金币(基础值:${baseReward}金币)`
7855
+ ];
7856
+ if (bonusPercent > 0) {
7857
+ let bonusType = "";
7858
+ if (careerData?.group === "人类联盟" && ["舰长", "情报副官"].includes(careerData.career)) {
7859
+ bonusType = "(职业专属加成)";
7860
+ } else {
7861
+ bonusType = "(普通加成)";
7862
+ }
7863
+ response.push(`⚙️ 关键系统固件科技Lv.${techLevel}:+${bonusPercent}%金币`);
7864
+ }
7865
+ response.push(
7866
+ `累计完成次数:${newCompletions}次`,
7867
+ `剩余进度点数:${newProgress}`,
7868
+ `当前拥有金币:${updatedSignData.totalRewards}`
7869
+ );
7870
+ if (newProgress >= taskConfig.target) {
7871
+ response.push(`💡 当前剩余进度可再完成${Math.floor(newProgress / taskConfig.target)}次任务`);
7872
+ }
7873
+ return response.join("\n");
7874
+ } catch (error) {
7875
+ console.error("完成任务命令时发生错误:", error);
7876
+ return "处理任务时发生错误,请稍后重试。";
7643
7877
  }
7644
- const newProgress = taskData.progress - taskConfig.target;
7645
- const newCompletions = taskData.Completions + 1;
7646
- await ctx.database.set("ggcevo_task", {
7647
- handle,
7648
- taskId: taskConfig.id
7649
- }, {
7650
- progress: newProgress,
7651
- Completions: newCompletions
7652
- });
7653
- const [signData] = await ctx.database.get("ggcevo_sign", { handle });
7654
- await ctx.database.upsert("ggcevo_sign", [{
7655
- handle,
7656
- totalRewards: (signData?.totalRewards || 0) + taskConfig.price
7657
- }], ["handle"]);
7658
- const [updatedSignData] = await ctx.database.get("ggcevo_sign", { handle });
7659
- return [
7660
- `🎉 恭喜您成功完成【${taskName}】任务!`,
7661
- `任务奖励:${taskConfig.price}金币`,
7662
- `累计完成次数:${newCompletions}次`,
7663
- `剩余进度点数:${newProgress}`,
7664
- `当前拥有金币:${updatedSignData.totalRewards}`,
7665
- newProgress >= taskConfig.target ? `💡 当前剩余进度可再完成${Math.floor(newProgress / taskConfig.target)}次任务` : ``
7666
- ].join("\n");
7667
7878
  });
7668
7879
  }
7669
7880
  __name(apply, "apply");
package/lib/items.d.ts CHANGED
@@ -39,6 +39,22 @@ export declare const SyndicatedItems: {
39
39
  redCrystalCost: number;
40
40
  effects: string;
41
41
  };
42
+ 雷达面罩: {
43
+ id: number;
44
+ type: string;
45
+ description: string;
46
+ price: number;
47
+ redCrystalCost: number;
48
+ effects: string;
49
+ };
50
+ 气喇叭: {
51
+ id: number;
52
+ type: string;
53
+ description: string;
54
+ price: number;
55
+ redCrystalCost: number;
56
+ effects: string;
57
+ };
42
58
  };
43
59
  export declare const initDefaultItems: {
44
60
  咕咕币: {
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.10",
4
+ "version": "1.4.12",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "files": [