koishi-plugin-ggcevo-game 1.4.2 → 1.4.3

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.
package/lib/database.d.ts CHANGED
@@ -184,5 +184,4 @@ export interface purchasepermissions {
184
184
  handle: string;
185
185
  legendarypermissions: number;
186
186
  explosiondoorauthority: number;
187
- syndicatelegendspermissions: number;
188
187
  }
package/lib/index.js CHANGED
@@ -162,7 +162,7 @@ var weaponConfig = {
162
162
  category: "能量武器",
163
163
  damage: 25,
164
164
  description: "一种经过改造的电动工具,可对近距离的目标放出高压电",
165
- specialeffect: "攻击拥有能量的目标将会消耗其200点能量",
165
+ specialeffect: "攻击消耗目标200点能量",
166
166
  price: 750,
167
167
  redCrystalCost: 10,
168
168
  isantiair: true,
@@ -206,7 +206,7 @@ var weaponConfig = {
206
206
  category: "能量武器",
207
207
  damage: 30,
208
208
  description: "面对护盾目标而开发的武器",
209
- specialeffect: "攻击护盾目标,无视其50%的减伤效果",
209
+ specialeffect: "攻击无视护盾目标50%的减伤效果",
210
210
  price: 1050,
211
211
  redCrystalCost: 15,
212
212
  isantiair: true,
@@ -238,7 +238,7 @@ var weaponConfig = {
238
238
  category: "能量武器",
239
239
  damage: 30,
240
240
  description: "一种原型能量武器,能够发射强大的脉冲",
241
- specialeffect: "",
241
+ specialeffect: "攻击不会触发目标的叠层技能",
242
242
  price: 1500,
243
243
  redCrystalCost: 15,
244
244
  isantiair: true,
@@ -251,7 +251,7 @@ var weaponConfig = {
251
251
  damage: 88,
252
252
  description: "一件传奇武器",
253
253
  specialeffect: "",
254
- price: 6400,
254
+ price: 7500,
255
255
  redCrystalCost: 150,
256
256
  isantiair: true,
257
257
  tagEffects: {
@@ -263,10 +263,10 @@ var weaponConfig = {
263
263
  id: 102,
264
264
  type: "能量武器",
265
265
  category: "传奇武器",
266
- damage: 36,
266
+ damage: 50,
267
267
  description: "一件传奇武器",
268
- specialeffect: "",
269
- price: 6400,
268
+ specialeffect: "攻击暴击率80%",
269
+ price: 7500,
270
270
  redCrystalCost: 150,
271
271
  isantiair: true,
272
272
  tagEffects: {
@@ -280,7 +280,7 @@ var weaponConfig = {
280
280
  damage: 80,
281
281
  description: "这是传说中的武器",
282
282
  specialeffect: "",
283
- price: 6400,
283
+ price: 7500,
284
284
  redCrystalCost: 150,
285
285
  isantiair: false,
286
286
  tagEffects: {
@@ -295,7 +295,7 @@ var weaponConfig = {
295
295
  damage: 145,
296
296
  description: "一件传奇武器",
297
297
  specialeffect: "",
298
- price: 6400,
298
+ price: 7500,
299
299
  redCrystalCost: 150,
300
300
  isantiair: true,
301
301
  tagEffects: {
@@ -309,7 +309,7 @@ var weaponConfig = {
309
309
  damage: 100,
310
310
  description: "优雅而独特的武器",
311
311
  specialeffect: "",
312
- price: 6400,
312
+ price: 7500,
313
313
  redCrystalCost: 150,
314
314
  isantiair: false,
315
315
  tagEffects: {}
@@ -320,8 +320,8 @@ var weaponConfig = {
320
320
  category: "传奇武器",
321
321
  damage: 100,
322
322
  description: "一件传奇武器",
323
- specialeffect: "",
324
- price: 6400,
323
+ specialeffect: "攻击消耗目标500点能量",
324
+ price: 7500,
325
325
  redCrystalCost: 150,
326
326
  isantiair: true,
327
327
  tagEffects: {
@@ -332,10 +332,10 @@ var weaponConfig = {
332
332
  id: 107,
333
333
  type: "能量武器",
334
334
  category: "传奇武器",
335
- damage: 30,
335
+ damage: 50,
336
336
  description: "一件传奇武器",
337
- specialeffect: "",
338
- price: 6400,
337
+ specialeffect: "攻击无视目标80%的减伤效果",
338
+ price: 7500,
339
339
  redCrystalCost: 150,
340
340
  isantiair: true,
341
341
  tagEffects: {
@@ -349,7 +349,7 @@ var weaponConfig = {
349
349
  damage: 110,
350
350
  description: "一件传奇武器",
351
351
  specialeffect: "",
352
- price: 6400,
352
+ price: 7500,
353
353
  redCrystalCost: 150,
354
354
  isantiair: true,
355
355
  tagEffects: {
@@ -372,9 +372,9 @@ var modConfig = {
372
372
  exclusiveTo: "",
373
373
  isExclusive: false
374
374
  },
375
- "穿蚀模块": {
375
+ "破甲模块": {
376
376
  cost: 2750,
377
- effect: "攻击时无视目标10%的减伤效果",
377
+ effect: "攻击无视目标20%的减伤效果",
378
378
  exclusiveTo: "",
379
379
  isExclusive: false
380
380
  },
@@ -848,19 +848,19 @@ var Spacestationtechnology = [
848
848
  level: 3,
849
849
  cost: 2550,
850
850
  description: "提升空间站武器等级,升级武器享有15%的折扣",
851
- careerBonus: "武器中士/情报副官: 升级武器享有30%的折扣; 购买武器享有10%的折扣(非传奇)"
851
+ careerBonus: "武器中士/情报副官: 升级武器享有30%的折扣"
852
852
  },
853
853
  {
854
854
  level: 4,
855
855
  cost: 3950,
856
856
  description: "提升空间站武器等级,升级武器享有20%的折扣",
857
- careerBonus: "武器中士/情报副官: 在升级武器享有40%的折扣; 购买武器享有15%的折扣(非传奇)"
857
+ careerBonus: "武器中士/情报副官: 在升级武器享有40%的折扣"
858
858
  },
859
859
  {
860
860
  level: 5,
861
861
  cost: 4650,
862
- description: "提升空间站武器等级,升级武器享有25%的折扣; 解锁购买传奇武器权限(仅限一把)",
863
- careerBonus: "武器中士/情报副官: 升级武器享有50%的折扣; 购买武器享有20%的折扣(非传奇); 解锁购买传奇武器权限(仅限一把),并且享有20%的折扣"
862
+ description: "提升空间站武器等级,升级武器享有25%的折扣",
863
+ careerBonus: "武器中士/情报副官: 升级武器享有50%的折扣; 解锁传奇武器购买权限1次"
864
864
  }
865
865
  ]
866
866
  },
@@ -919,7 +919,7 @@ var Spacestationtechnology = [
919
919
  level: 5,
920
920
  cost: 5350,
921
921
  description: "完全恢复空间站安防系统,攻击获得的金币+25%",
922
- careerBonus: "警卫员下士/警卫长/情报副官: 攻击获得的金币+50%; 打开安全军械库防爆门,随机获得一把传奇武器"
922
+ careerBonus: "警卫员下士/警卫长/情报副官: 攻击获得的金币+50%; 获得一次打开安全军械库防爆门的权限,可以随机获得一把传奇武器"
923
923
  }
924
924
  ]
925
925
  }
@@ -1920,6 +1920,23 @@ async function handleTechUpgrade(ctx, handle, target) {
1920
1920
  const priceHint = discountApplied ? ` (原价${originalCost}金币)` : "";
1921
1921
  return `❌ 金币不足!需要${actualCost}金币${priceHint},您当前拥有:${signInfo?.totalRewards || 0}金币`;
1922
1922
  }
1923
+ let permissionGrantInfo = null;
1924
+ if (tech.techname === "武器系统" && currentLevel === 4 && nextLevel === 5) {
1925
+ permissionGrantInfo = {
1926
+ type: "武器系统",
1927
+ field: "legendarypermissions",
1928
+ amount: 1,
1929
+ message: "🎉 解锁传奇武器购买权限1次!"
1930
+ };
1931
+ }
1932
+ if (tech.techname === "安防系统" && currentLevel === 4 && nextLevel === 5) {
1933
+ permissionGrantInfo = {
1934
+ type: "安防系统",
1935
+ field: "explosiondoorauthority",
1936
+ amount: 1,
1937
+ message: "🔓 解锁安全军械库防爆门权限1次!"
1938
+ };
1939
+ }
1923
1940
  await ctx.database.withTransaction(async () => {
1924
1941
  await ctx.database.set("ggcevo_sign", { handle }, {
1925
1942
  totalRewards: signInfo.totalRewards - actualCost
@@ -1929,6 +1946,14 @@ async function handleTechUpgrade(ctx, handle, target) {
1929
1946
  techId: tech.techId,
1930
1947
  level: nextLevel
1931
1948
  }], ["handle", "techId"]);
1949
+ if (permissionGrantInfo) {
1950
+ const [permissionRecord] = await ctx.database.get("ggcevo_purchasepermissions", { handle });
1951
+ const currentValue = permissionRecord?.[permissionGrantInfo.field] || 0;
1952
+ await ctx.database.upsert("ggcevo_purchasepermissions", [{
1953
+ handle,
1954
+ [permissionGrantInfo.field]: currentValue + permissionGrantInfo.amount
1955
+ }], ["handle"]);
1956
+ }
1932
1957
  });
1933
1958
  let discountInfo = [];
1934
1959
  if (discountApplied) {
@@ -1938,13 +1963,23 @@ async function handleTechUpgrade(ctx, handle, target) {
1938
1963
  ];
1939
1964
  }
1940
1965
  const costInfo = discountApplied ? `💰 花费金币:${actualCost} (原价${originalCost})` : `💰 花费金币:${actualCost}`;
1966
+ let permissionMessage = [];
1967
+ if (permissionGrantInfo) {
1968
+ const [permissionRecord] = await ctx.database.get("ggcevo_purchasepermissions", { handle });
1969
+ const newValue = permissionRecord?.[permissionGrantInfo.field] || permissionGrantInfo.amount;
1970
+ permissionMessage.push(
1971
+ permissionGrantInfo.message
1972
+ );
1973
+ }
1941
1974
  return [
1942
1975
  `✅ ${tech.techname} 升级至 Lv.${nextLevel}`,
1943
1976
  costInfo,
1944
1977
  ...discountInfo,
1945
- // 插入折扣明细
1978
+ // 折扣信息
1946
1979
  `📝 ${levelData.description}`,
1947
- `💼 ${levelData.careerBonus}`
1980
+ `💼 ${levelData.careerBonus}`,
1981
+ ...permissionMessage
1982
+ // 权限解锁信息
1948
1983
  ].filter(Boolean).join("\n");
1949
1984
  }
1950
1985
  __name(handleTechUpgrade, "handleTechUpgrade");
@@ -3012,10 +3047,10 @@ var PassiveHandler = {
3012
3047
  }
3013
3048
  return null;
3014
3049
  }, "handleCriticalHit"),
3015
- // 穿蚀模块效果处理
3050
+ // 破甲模块效果处理
3016
3051
  handleCorrosionModule: /* @__PURE__ */ __name((installedMods) => {
3017
3052
  if (!installedMods) return 0;
3018
- return installedMods.includes("穿蚀模块") ? 0.1 : 0;
3053
+ return installedMods.includes("破甲模块") ? 0.2 : 0;
3019
3054
  }, "handleCorrosionModule"),
3020
3055
  // 粒子相位枪效果处理
3021
3056
  handleParticlePhaseEffect: /* @__PURE__ */ __name((targetBoss, weaponName) => {
@@ -3064,7 +3099,7 @@ var PassiveHandler = {
3064
3099
  messages.push(`⚡ 【粒子相位枪】特效:无视护盾目标${particleEffect * 100}%减伤效果`);
3065
3100
  }
3066
3101
  if (corrosionEffect > 0) {
3067
- messages.push(`⚡ 【穿蚀模块】生效:无视目标${corrosionEffect * 100}%减伤效果`);
3102
+ messages.push(`⚡ 【破甲模块】生效:无视目标${corrosionEffect * 100}%减伤效果`);
3068
3103
  }
3069
3104
  messages.push(
3070
3105
  `⚡ 减伤系数由${(originalMultiplier * 100).toFixed(0)}% → ${(effectiveMultiplier * 100).toFixed(0)}%`
@@ -3789,10 +3824,10 @@ async function calculateRewards(ctx, handle, username, totalDamage) {
3789
3824
  let careerMessage = "";
3790
3825
  if (career === "警卫员下士") {
3791
3826
  careerMultiplier = 50;
3792
- careerMessage = "(+50% 警卫员下士职业加成)";
3827
+ careerMessage = "(警卫员下士:金币+50%)";
3793
3828
  } else if (career === "警卫长") {
3794
3829
  careerMultiplier = 100;
3795
- careerMessage = "(+100% 警卫长职业加成)";
3830
+ careerMessage = "(警卫长:金币+100%)";
3796
3831
  }
3797
3832
  const totalBonusPercent = careerMultiplier + techBonusPercent;
3798
3833
  const totalBonusFactor = 1 + totalBonusPercent / 100;
@@ -3803,7 +3838,7 @@ async function calculateRewards(ctx, handle, username, totalDamage) {
3803
3838
  handle,
3804
3839
  redcrystal: (careerData?.redcrystal || 0) + 1
3805
3840
  }], ["handle"]);
3806
- redcrystalMessage = "🔴 清洁工职业加成:获得1枚红晶";
3841
+ redcrystalMessage = "🎖️ 清洁工:+1枚红晶";
3807
3842
  }
3808
3843
  return {
3809
3844
  finalReward,
@@ -4168,8 +4203,7 @@ function apply(ctx, config) {
4168
4203
  ctx.model.extend("ggcevo_purchasepermissions", {
4169
4204
  handle: "string",
4170
4205
  legendarypermissions: "unsigned",
4171
- explosiondoorauthority: "unsigned",
4172
- syndicatelegendspermissions: "unsigned"
4206
+ explosiondoorauthority: "unsigned"
4173
4207
  }, {
4174
4208
  primary: "handle"
4175
4209
  });
@@ -5732,7 +5766,7 @@ ${items.join("、")}
5732
5766
  result.push(`🔴 辛迪加海盗:+1枚红晶`);
5733
5767
  }
5734
5768
  if (isWin && initiatorCareer?.career === "辛迪加财务经理") {
5735
- result.push(`💰 辛迪加财务经理:+1枚红晶`);
5769
+ result.push(`🎖️ 辛迪加财务经理:+1枚红晶`);
5736
5770
  }
5737
5771
  result.push(`📅 剩余挑战次数:${config.dailyPKLimit - (initiatorPK.todayCount + 1)}`);
5738
5772
  return result.join("\n");
@@ -5774,33 +5808,17 @@ ${items.join("、")}
5774
5808
  pageNum < totalPages ? `输入 pk榜 ${pageNum + 1} 查看下一页` : "已是最后一页"
5775
5809
  ].join("\n");
5776
5810
  });
5777
- ctx.command("ggcevo/武器库 [category]").usage("输入“武器库”查看类型,或“武器库 类型”查看详细武器信息").action(async ({ session }, category) => {
5811
+ ctx.command("ggcevo/武器库 [category]").usage('输入"武器库"查看类型,或"武器库 类型"查看详细武器信息').action(async ({ session }, category) => {
5778
5812
  const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
5779
5813
  if (!profile) return "⚠️ 需要先绑定游戏句柄";
5780
5814
  const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
5781
- const [techData] = await ctx.database.get("ggcevo_tech", { handle, techId: 2 }).catch(() => [{ level: 0 }]);
5782
5815
  const [careerData] = await ctx.database.get("ggcevo_careers", { handle });
5783
- const group = careerData?.group || "";
5784
5816
  const discountDetails = [];
5785
- let techDiscount = 0;
5786
- if (group === "人类联盟") {
5787
- const techLevel = techData?.level || 0;
5788
- if (techLevel > 0) {
5789
- const isCareerMatch = Spacestationtechnology.find((t) => t.techId === 2).careerNames.includes(careerData?.career);
5790
- const BASE_DISCOUNTS = [0, 0, 0, 0, 0];
5791
- const CAREER_DISCOUNTS = [0, 0, 10, 15, 20];
5792
- const baseDiscount = techLevel > 0 ? BASE_DISCOUNTS[techLevel - 1] : 0;
5793
- const careerDiscount = isCareerMatch ? CAREER_DISCOUNTS[techLevel - 1] : 0;
5794
- techDiscount = Math.max(baseDiscount, careerDiscount);
5795
- if (techDiscount > 0) {
5796
- discountDetails.push(`⚙️ 武器系统 Lv${techLevel}:${techDiscount}%折扣`);
5797
- }
5798
- }
5799
- }
5800
- let weaponSpecialistDiscount = 0;
5817
+ let totalDiscount = 0;
5801
5818
  if (careerData?.career === "武器中士") {
5802
- weaponSpecialistDiscount = 20;
5803
- discountDetails.push(`🎖️ 武器中士:20%折扣`);
5819
+ const weaponSpecialistDiscount = 20;
5820
+ totalDiscount += weaponSpecialistDiscount;
5821
+ discountDetails.push(`🎖️ 武器中士:${weaponSpecialistDiscount}%折扣`);
5804
5822
  }
5805
5823
  const activeWish = await ctx.database.get("ggcevo_Wish_Record", {
5806
5824
  handle,
@@ -5809,11 +5827,11 @@ ${items.join("、")}
5809
5827
  endTime: { $gte: /* @__PURE__ */ new Date() },
5810
5828
  isused: false
5811
5829
  }).then((records) => records[0]);
5812
- let grasshopperDiscount = activeWish ? 20 : 0;
5813
- if (grasshopperDiscount > 0) {
5830
+ if (activeWish) {
5831
+ const grasshopperDiscount = 20;
5832
+ totalDiscount += grasshopperDiscount;
5814
5833
  discountDetails.push(`🦗 蚱蜢优购:${grasshopperDiscount}%折扣`);
5815
5834
  }
5816
- let totalDiscount = techDiscount + weaponSpecialistDiscount + grasshopperDiscount;
5817
5835
  totalDiscount = Math.min(totalDiscount, 100);
5818
5836
  const categoryStats = Object.values(weaponConfig).filter((weapon) => weapon.price !== 0).reduce((stats, weapon) => {
5819
5837
  stats[weapon.category] = (stats[weapon.category] || 0) + 1;
@@ -5834,8 +5852,12 @@ ${discountDetails.length ? `${discountDetails.join("\n")}` : ""}`,
5834
5852
  return `无效武器分类,可用分类:
5835
5853
  ${Object.keys(categoryStats).join("、")}`;
5836
5854
  }
5855
+ const isLegendaryCategory = category === "传奇武器";
5837
5856
  const items = Object.entries(weaponConfig).filter(([_, config2]) => config2.category === category && config2.price !== 0).map(([name2, config2]) => {
5838
- const actualPrice = Math.floor(config2.price * (100 - totalDiscount) / 100);
5857
+ const shouldApplyDiscount = !isLegendaryCategory && config2.category !== "传奇武器";
5858
+ const displayPrice = shouldApplyDiscount ? Math.floor(config2.price * (100 - totalDiscount) / 100) : config2.price;
5859
+ const showOriginalPrice = shouldApplyDiscount && totalDiscount > 0;
5860
+ const priceDisplay = showOriginalPrice ? `${displayPrice}金币 (原价${config2.price})` : `${displayPrice}金币`;
5839
5861
  let tagEffectsDesc = "▸ 无特殊加成效果";
5840
5862
  if (config2.tagEffects && Object.keys(config2.tagEffects).length > 0) {
5841
5863
  tagEffectsDesc = Object.entries(config2.tagEffects).map(([tag, multiplier]) => `▸ 对${tag}目标造成${(multiplier * 100).toFixed(0)}%伤害`).join("\n");
@@ -5843,22 +5865,24 @@ ${Object.keys(categoryStats).join("、")}`;
5843
5865
  const specialEffect = config2.specialeffect ? `特殊效果:${config2.specialeffect}` : "";
5844
5866
  return [
5845
5867
  `【${name2}】`,
5846
- `攻击类型:${config2.type}`,
5868
+ `武器类型:${config2.type}`,
5847
5869
  `基础伤害:${config2.damage}`,
5848
- `价格:${actualPrice}金币${totalDiscount > 0 ? ` (原价${config2.price})` : ""}`,
5870
+ `价格:${priceDisplay}`,
5849
5871
  specialEffect,
5850
5872
  "特性:",
5851
5873
  tagEffectsDesc,
5852
- // 确保tagEffects为空时也显示"无特殊加成效果"
5853
5874
  `描述:${config2.description}`,
5854
5875
  "------------------"
5855
5876
  ].filter(Boolean).join("\n");
5856
5877
  });
5878
+ const shouldShowDiscountInfo = totalDiscount > 0 && !isLegendaryCategory;
5879
+ const discountInfo = shouldShowDiscountInfo ? `💰 当前折扣:
5880
+ ${discountDetails.length ? `${discountDetails.join("\n")}` : ""}` : null;
5857
5881
  return [
5858
5882
  `🏪 咕咕武器库 - ${category} 🏪`,
5859
5883
  '使用"购买 武器名称"指令进行购买',
5860
- totalDiscount > 0 && `💰 当前折扣:
5861
- ${discountDetails.length ? `${discountDetails.join("\n")}` : ""}`,
5884
+ discountInfo,
5885
+ // 传奇武器分类时不显示此信息
5862
5886
  "====================",
5863
5887
  ...items,
5864
5888
  items.length === 0 ? "⚠️ 该分类下暂无可用武器" : ""
@@ -5930,46 +5954,48 @@ ${validTypes.join("、")}`;
5930
5954
  if (!permissions || permissions.legendarypermissions <= 0) {
5931
5955
  return '❌ 购买传奇武器需要"传奇武器购买权限",您当前没有购买权限。';
5932
5956
  }
5957
+ const [careerData2] = await ctx.database.get("ggcevo_careers", { handle });
5958
+ const [weaponTech] = await ctx.database.get("ggcevo_tech", { handle, techId: 2 });
5959
+ if (!careerData2 || careerData2.group !== "人类联盟") {
5960
+ return '❌ 购买传奇武器需要在"人类联盟"阵营。';
5961
+ }
5962
+ const weaponSystemLevel = weaponTech?.level || 0;
5963
+ if (weaponSystemLevel < 5) {
5964
+ return `❌ 购买传奇武器需要将武器系统升级到5级(当前等级:${weaponSystemLevel})。`;
5965
+ }
5966
+ if (!careerData2.career || !["情报副官", "武器中士"].includes(careerData2.career)) {
5967
+ return `❌ 购买传奇武器需要成为"情报副官"或"武器中士"(当前职业:${careerData2.career || "无"})。`;
5968
+ }
5933
5969
  }
5934
5970
  const [signInfo] = await ctx.database.get("ggcevo_sign", { handle });
5935
5971
  const [careerData] = await ctx.database.get("ggcevo_careers", { handle });
5936
- const [weaponTech] = await ctx.database.get("ggcevo_tech", { handle, techId: 2 });
5937
5972
  let totalDiscount = 0;
5938
5973
  let discountDetails = [];
5939
- if (isWeapon && careerData?.group === "人类联盟") {
5940
- const techDiscountTable = {
5941
- 3: [0, 10],
5942
- 4: [0, 15],
5943
- 5: [0, 20]
5944
- };
5945
- const techLevel = weaponTech?.level || 0;
5946
- if (techLevel >= 3) {
5947
- const [baseDisc, careerDisc] = techDiscountTable[Math.min(techLevel, 5)] || [0, 0];
5948
- const isQualifiedCareer = careerData?.career && Spacestationtechnology.find((t) => t.techId === 2)?.careerNames.includes(careerData.career);
5949
- const techDiscount = isQualifiedCareer ? Math.max(baseDisc, careerDisc) : baseDisc;
5950
- if (techDiscount > 0) {
5951
- totalDiscount += techDiscount;
5952
- discountDetails.push(
5953
- `武器系统 Lv${techLevel}${isQualifiedCareer ? "(职业加成)" : ""}:${techDiscount}%折扣`
5954
- );
5974
+ let activeWish = null;
5975
+ if (!isLegendaryWeapon) {
5976
+ if (isWeapon) {
5977
+ activeWish = await ctx.database.get("ggcevo_Wish_Record", {
5978
+ handle,
5979
+ wishname: "蚱蜢优购",
5980
+ startTime: { $lte: /* @__PURE__ */ new Date() },
5981
+ endTime: { $gte: /* @__PURE__ */ new Date() },
5982
+ isused: false
5983
+ }).then((records) => records[0] || null);
5984
+ if (activeWish) {
5985
+ const wishDiscount = 20;
5986
+ totalDiscount += wishDiscount;
5987
+ discountDetails.push(`🦗 蚱蜢优购:${wishDiscount}%折扣`);
5955
5988
  }
5956
5989
  }
5957
- }
5958
- const activeWish = isWeapon ? await ctx.database.get("ggcevo_Wish_Record", {
5959
- handle,
5960
- wishname: "蚱蜢优购",
5961
- startTime: { $lte: /* @__PURE__ */ new Date() },
5962
- endTime: { $gte: /* @__PURE__ */ new Date() },
5963
- isused: false
5964
- }).then((records) => records[0]) : null;
5965
- if (activeWish) {
5966
- const wishDiscount = 20;
5967
- totalDiscount += wishDiscount;
5968
- discountDetails.push(`蚱蜢优购祈愿生效:${wishDiscount}%折扣`);
5990
+ if (isWeapon && careerData?.career === "武器中士") {
5991
+ const specialistDiscount = 20;
5992
+ totalDiscount += specialistDiscount;
5993
+ discountDetails.push(`🎖️ 武器中士:${specialistDiscount}%折扣`);
5994
+ }
5969
5995
  totalDiscount = Math.min(totalDiscount, 100);
5970
5996
  }
5971
5997
  let actualPrice = config2.price;
5972
- if (totalDiscount > 0) {
5998
+ if (!isLegendaryWeapon && totalDiscount > 0) {
5973
5999
  actualPrice = Math.floor(config2.price * (100 - totalDiscount) / 100);
5974
6000
  actualPrice = Math.max(actualPrice, 1);
5975
6001
  }
@@ -5977,6 +6003,8 @@ ${validTypes.join("、")}`;
5977
6003
  let priceInfo = `需要 ${actualPrice} 金币`;
5978
6004
  if (discountDetails.length > 0) {
5979
6005
  priceInfo += `(原价${config2.price})`;
6006
+ } else if (isLegendaryWeapon) {
6007
+ priceInfo = `需要 ${actualPrice} 金币 (传奇武器无折扣)`;
5980
6008
  }
5981
6009
  return `❌ 金币不足,${priceInfo}`;
5982
6010
  }
@@ -6036,11 +6064,12 @@ ${validTypes.join("、")}`;
6036
6064
  const [permissions] = await ctx.database.get("ggcevo_purchasepermissions", { handle });
6037
6065
  message += `
6038
6066
  扣除 1 次传奇武器购买权限,剩余次数:${permissions?.legendarypermissions || 0}`;
6039
- }
6040
- if (discountDetails.length > 0) {
6067
+ } else if (discountDetails.length > 0) {
6041
6068
  message += `(原价${config2.price} 金币)
6042
6069
  折扣明细:
6043
6070
  ▸ ${discountDetails.join("\n▸ ")}`;
6071
+ } else {
6072
+ message += ` (原价${config2.price} 金币)`;
6044
6073
  }
6045
6074
  if (isWeapon) {
6046
6075
  if (isAutoEquipped) {
@@ -7028,8 +7057,10 @@ ${validTypes.join("、")}`;
7028
7057
  ).map(([name2, config2]) => {
7029
7058
  const infoBlocks = [
7030
7059
  `【${name2}】`,
7031
- `攻击类型:${config2.type}`,
7060
+ `武器类型:${config2.type}`,
7032
7061
  // 保留攻击类型显示
7062
+ // +++ 为武器类物品添加基础伤害显示 +++
7063
+ `基础伤害:${config2.damage}`,
7033
7064
  `订购价:${config2.redCrystalCost}红晶`
7034
7065
  ];
7035
7066
  if (config2.specialeffect) {
@@ -7106,9 +7137,14 @@ ${validTypes.join("、")}`;
7106
7137
  if (!itemConfig2.redCrystalCost) return "⛔ 该物品不可订购";
7107
7138
  const isLegendaryWeapon = isWeapon && itemConfig2.category === "传奇武器";
7108
7139
  if (isLegendaryWeapon) {
7109
- const [permissions] = await ctx.database.get("ggcevo_purchasepermissions", { handle });
7110
- if (!permissions || permissions.syndicatelegendspermissions <= 0) {
7111
- return '❌ 购买传奇武器需要"辛迪加传奇武器购买权限",您当前没有购买权限。';
7140
+ if (item === "MK-4激光步枪" && careerData.career !== "能量武器专家") {
7141
+ return "❌ 购买MK-4激光步枪需要【能量武器专家】职业。";
7142
+ } else if (item === "DSR-55反器材步枪" && careerData.career !== "猩红杀手") {
7143
+ return "❌ 购买DSR-55反器材步枪需要【猩红杀手】职业。";
7144
+ } else if (item === "龙息霰弹枪" && careerData.career !== "纵火狂") {
7145
+ return "❌ 购买龙息霰弹枪需要【纵火狂】职业。";
7146
+ } else if (item !== "MK-4激光步枪" && item !== "DSR-55反器材步枪" && item !== "龙息霰弹枪") {
7147
+ return "❌ 未知的传奇武器或未开放购买权限";
7112
7148
  }
7113
7149
  }
7114
7150
  let isComputerExpertDiscount = false;
@@ -7136,16 +7172,6 @@ ${validTypes.join("、")}`;
7136
7172
  await ctx.database.set("ggcevo_careers", { handle }, {
7137
7173
  redcrystal: careerData.redcrystal - finalCost
7138
7174
  });
7139
- if (isLegendaryWeapon) {
7140
- const [permissionRecord] = await ctx.database.get("ggcevo_purchasepermissions", { handle });
7141
- if (!permissionRecord || permissionRecord.syndicatelegendspermissions <= 0) {
7142
- throw new Error("辛迪加传奇武器购买权限不足");
7143
- }
7144
- const remaining = permissionRecord.syndicatelegendspermissions - 1;
7145
- await ctx.database.set("ggcevo_purchasepermissions", { handle }, {
7146
- syndicatelegendspermissions: remaining
7147
- });
7148
- }
7149
7175
  if (isWeapon) {
7150
7176
  await ctx.database.create("ggcevo_equipment", {
7151
7177
  handle,
@@ -7177,11 +7203,6 @@ ${validTypes.join("、")}`;
7177
7203
  }
7178
7204
  });
7179
7205
  const buildResponse = /* @__PURE__ */ __name(async () => {
7180
- let permissionMessage = [];
7181
- if (isLegendaryWeapon) {
7182
- const [permissions] = await ctx.database.get("ggcevo_purchasepermissions", { handle });
7183
- permissionMessage.push(`扣除 1 次辛迪加传奇武器购买权限,剩余次数:${permissions?.syndicatelegendspermissions || 0}`);
7184
- }
7185
7206
  const discountLines = [];
7186
7207
  if (discountApplied) {
7187
7208
  discountLines.push("💻 计算机专家:设备工具类物品50%折扣");
@@ -7193,7 +7214,6 @@ ${validTypes.join("、")}`;
7193
7214
  const equippedStatus = isAutoEquipped ? "已自动装备武器" : "需手动装备武器";
7194
7215
  return [
7195
7216
  `✅ 成功订购【${item}】!`,
7196
- ...permissionMessage,
7197
7217
  ...priceInfo,
7198
7218
  discountApplied ? `折扣明细:
7199
7219
  ▸ ${discountLines.join("\n▸ ")}` : "",
@@ -7207,7 +7227,6 @@ ${validTypes.join("、")}`;
7207
7227
  }).then((r) => r[0]?.quantity || 1);
7208
7228
  return [
7209
7229
  `✅ 成功订购【${item}】x1!`,
7210
- ...permissionMessage,
7211
7230
  ...priceInfo,
7212
7231
  discountApplied ? `折扣明细:
7213
7232
  ▸ ${discountLines.join("\n▸ ")}` : "",
package/lib/weapons.d.ts CHANGED
@@ -337,7 +337,7 @@ export declare const modConfig: {
337
337
  exclusiveTo: string;
338
338
  isExclusive: boolean;
339
339
  };
340
- 穿蚀模块: {
340
+ 破甲模块: {
341
341
  cost: number;
342
342
  effect: string;
343
343
  exclusiveTo: string;
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.2",
4
+ "version": "1.4.3",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "files": [