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 +0 -1
- package/lib/index.js +136 -117
- package/lib/weapons.d.ts +1 -1
- package/package.json +1 -1
package/lib/database.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -162,7 +162,7 @@ var weaponConfig = {
|
|
|
162
162
|
category: "能量武器",
|
|
163
163
|
damage: 25,
|
|
164
164
|
description: "一种经过改造的电动工具,可对近距离的目标放出高压电",
|
|
165
|
-
specialeffect: "
|
|
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: "
|
|
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:
|
|
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:
|
|
266
|
+
damage: 50,
|
|
267
267
|
description: "一件传奇武器",
|
|
268
|
-
specialeffect: "",
|
|
269
|
-
price:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
335
|
+
damage: 50,
|
|
336
336
|
description: "一件传奇武器",
|
|
337
|
-
specialeffect: "",
|
|
338
|
-
price:
|
|
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:
|
|
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: "
|
|
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
|
|
851
|
+
careerBonus: "武器中士/情报副官: 升级武器享有30%的折扣"
|
|
852
852
|
},
|
|
853
853
|
{
|
|
854
854
|
level: 4,
|
|
855
855
|
cost: 3950,
|
|
856
856
|
description: "提升空间站武器等级,升级武器享有20%的折扣",
|
|
857
|
-
careerBonus: "武器中士/情报副官: 在升级武器享有40
|
|
857
|
+
careerBonus: "武器中士/情报副官: 在升级武器享有40%的折扣"
|
|
858
858
|
},
|
|
859
859
|
{
|
|
860
860
|
level: 5,
|
|
861
861
|
cost: 4650,
|
|
862
|
-
description: "提升空间站武器等级,升级武器享有25
|
|
863
|
-
careerBonus: "武器中士/情报副官: 升级武器享有50%的折扣;
|
|
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("
|
|
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(`⚡
|
|
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 = "(
|
|
3827
|
+
careerMessage = "(警卫员下士:金币+50%)";
|
|
3793
3828
|
} else if (career === "警卫长") {
|
|
3794
3829
|
careerMultiplier = 100;
|
|
3795
|
-
careerMessage = "(
|
|
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 = "
|
|
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(
|
|
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("
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
5813
|
-
|
|
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
|
|
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
|
-
|
|
5868
|
+
`武器类型:${config2.type}`,
|
|
5847
5869
|
`基础伤害:${config2.damage}`,
|
|
5848
|
-
`价格:${
|
|
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
|
-
|
|
5861
|
-
|
|
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
|
-
|
|
5940
|
-
|
|
5941
|
-
|
|
5942
|
-
|
|
5943
|
-
|
|
5944
|
-
|
|
5945
|
-
|
|
5946
|
-
|
|
5947
|
-
|
|
5948
|
-
|
|
5949
|
-
|
|
5950
|
-
|
|
5951
|
-
totalDiscount +=
|
|
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
|
-
|
|
5959
|
-
|
|
5960
|
-
|
|
5961
|
-
|
|
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
|
-
|
|
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
|
-
|
|
7110
|
-
|
|
7111
|
-
|
|
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