koishi-plugin-ggcevo-game 1.3.62 → 1.3.63
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/index.js +590 -288
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -491,7 +491,7 @@ function apply(ctx, config) {
|
|
|
491
491
|
description: "一个小型辛迪加机器人,可以破坏电子银行账户",
|
|
492
492
|
price: 0,
|
|
493
493
|
redCrystalCost: 60,
|
|
494
|
-
effects: "此物品存放于仓库自动生效(阵营必须为辛迪加海盗)。每日签到金币奖励+50
|
|
494
|
+
effects: "此物品存放于仓库自动生效(阵营必须为辛迪加海盗)。每日签到金币奖励+50%,每有一名人类联盟玩家额外增加1%(至多额外增加50%)"
|
|
495
495
|
},
|
|
496
496
|
"脉冲手雷": {
|
|
497
497
|
id: 4,
|
|
@@ -526,7 +526,7 @@ function apply(ctx, config) {
|
|
|
526
526
|
// 新增专属模块
|
|
527
527
|
"裂甲核心": {
|
|
528
528
|
cost: 750,
|
|
529
|
-
effect: "伤害+40%,对重甲目标改为造成
|
|
529
|
+
effect: "伤害+40%,对重甲目标改为造成150%伤害",
|
|
530
530
|
exclusiveTo: "高斯步枪",
|
|
531
531
|
// 指定专属武器
|
|
532
532
|
isExclusive: true
|
|
@@ -680,7 +680,7 @@ function apply(ctx, config) {
|
|
|
680
680
|
},
|
|
681
681
|
"嗜血狂暴": {
|
|
682
682
|
effect: 0,
|
|
683
|
-
description: "血量低于50
|
|
683
|
+
description: "血量低于50%时,进入狂暴状态,每次受到攻击将会额外获得一层“吸血”,并且受到的伤害-20%"
|
|
684
684
|
},
|
|
685
685
|
"吐血": {
|
|
686
686
|
effect: 0,
|
|
@@ -721,6 +721,30 @@ function apply(ctx, config) {
|
|
|
721
721
|
"能量黑洞": {
|
|
722
722
|
effect: 0,
|
|
723
723
|
description: "存在“能量黑洞”,受到的伤害-10%; 每拥有一层“寒冷”,受到的伤害+5%"
|
|
724
|
+
},
|
|
725
|
+
"火焰异形": {
|
|
726
|
+
effect: 0,
|
|
727
|
+
description: "免疫火焰伤害,受到火焰伤害时会回复生命值"
|
|
728
|
+
},
|
|
729
|
+
"庞兽狂暴": {
|
|
730
|
+
effect: 0,
|
|
731
|
+
description: "血量低于50%后,进入狂暴状态,受到的伤害-50%"
|
|
732
|
+
},
|
|
733
|
+
"灼烧粘液": {
|
|
734
|
+
effect: 0,
|
|
735
|
+
description: "受到伤害后,会获得一层“胆汁”; 若存在“胆汁”层数下受到火焰攻击,将立刻引爆并使受到的伤害+100%,同时层数清零"
|
|
736
|
+
},
|
|
737
|
+
"腐蚀胆汁": {
|
|
738
|
+
effect: 0,
|
|
739
|
+
description: "当“胆汁”达到5层时,发射灼热强酸爆蛋并清空层数,治愈所有存活的异形500点血量"
|
|
740
|
+
},
|
|
741
|
+
"火焰吐息": {
|
|
742
|
+
effect: 0,
|
|
743
|
+
description: "当“胆汁”达到10层时,发射灼热强酸爆蛋并清空层数,治愈所有存活的异形20%最大生命值"
|
|
744
|
+
},
|
|
745
|
+
"太阳耀斑": {
|
|
746
|
+
effect: 0,
|
|
747
|
+
description: "当所有子代阵亡后,自身移除“惧寒”标签和“孤立无援”并免疫寒冷伤害"
|
|
724
748
|
}
|
|
725
749
|
};
|
|
726
750
|
const defineBoss = /* @__PURE__ */ __name((config2) => config2, "defineBoss");
|
|
@@ -874,6 +898,27 @@ function apply(ctx, config) {
|
|
|
874
898
|
passive: asPassives(["弱化形态", "电能导体", "能量虹吸", "能量黑洞"])
|
|
875
899
|
}
|
|
876
900
|
]
|
|
901
|
+
}),
|
|
902
|
+
defineBoss({
|
|
903
|
+
main: {
|
|
904
|
+
id: 7,
|
|
905
|
+
name: "烈焰庞兽",
|
|
906
|
+
type: "主宰",
|
|
907
|
+
maxHP: 2e4,
|
|
908
|
+
energy: 0,
|
|
909
|
+
tags: asBossTags(["重甲", "生物", "惧寒", "重型", "异形"]),
|
|
910
|
+
passive: asPassives(["火焰异形", "庞兽狂暴", "灼烧粘液", "火焰吐息", "太阳耀斑"])
|
|
911
|
+
},
|
|
912
|
+
minions: [
|
|
913
|
+
{
|
|
914
|
+
name: "火焰甲虫",
|
|
915
|
+
type: "子代",
|
|
916
|
+
maxHP: 5e3,
|
|
917
|
+
energy: 0,
|
|
918
|
+
tags: asBossTags(["重甲", "生物", "惧寒", "异形"]),
|
|
919
|
+
passive: asPassives(["弱化形态", "火焰异形", "灼烧粘液", "腐蚀胆汁"])
|
|
920
|
+
}
|
|
921
|
+
]
|
|
877
922
|
})
|
|
878
923
|
];
|
|
879
924
|
const spaceStationCrewConfig = [
|
|
@@ -1259,7 +1304,7 @@ function apply(ctx, config) {
|
|
|
1259
1304
|
__name(checkCritRhythm, "checkCritRhythm");
|
|
1260
1305
|
async function calculateTagMultiplier(weaponData, tags, equippedWeapon) {
|
|
1261
1306
|
const MOD_EFFECTS = [
|
|
1262
|
-
{ mod: "裂甲核心", tag: "重甲", value: 1.
|
|
1307
|
+
{ mod: "裂甲核心", tag: "重甲", value: 1.5 },
|
|
1263
1308
|
{ mod: "助燃核心", tag: "惧热", value: 3 },
|
|
1264
1309
|
{ mod: "助燃核心", tag: "生物", value: 2 }
|
|
1265
1310
|
];
|
|
@@ -1315,28 +1360,28 @@ function apply(ctx, config) {
|
|
|
1315
1360
|
let message = "";
|
|
1316
1361
|
if (careerData?.career === "警卫长") {
|
|
1317
1362
|
value += 0.05;
|
|
1318
|
-
message = "⚔️
|
|
1363
|
+
message = "⚔️ 警卫长:攻击伤害+5%";
|
|
1319
1364
|
}
|
|
1320
1365
|
if (careerData?.career === "武器中士") {
|
|
1321
1366
|
value += 0.15;
|
|
1322
|
-
message = "⚔️
|
|
1367
|
+
message = "⚔️ 武器中士:攻击伤害+15%";
|
|
1323
1368
|
}
|
|
1324
1369
|
if (careerData?.career === "能量武器专家") {
|
|
1325
1370
|
if (weaponType === "能量武器") {
|
|
1326
1371
|
value += 0.2;
|
|
1327
|
-
message = "⚔️
|
|
1372
|
+
message = "⚔️ 能量武器专家:能量武器攻击伤害+20%";
|
|
1328
1373
|
}
|
|
1329
1374
|
}
|
|
1330
1375
|
if (careerData?.career === "纵火狂") {
|
|
1331
1376
|
if (weaponType === "热能武器") {
|
|
1332
1377
|
value += 0.2;
|
|
1333
|
-
message = "⚔️
|
|
1378
|
+
message = "⚔️ 纵火狂:热能武器攻击伤害+20%";
|
|
1334
1379
|
}
|
|
1335
1380
|
}
|
|
1336
1381
|
if (careerData?.career === "猩红杀手") {
|
|
1337
1382
|
if (weaponId === 7) {
|
|
1338
1383
|
value += 0.15;
|
|
1339
|
-
message = "⚔️
|
|
1384
|
+
message = "⚔️ 猩红杀手:侦察步枪攻击伤害+15%";
|
|
1340
1385
|
}
|
|
1341
1386
|
}
|
|
1342
1387
|
return { value, message };
|
|
@@ -1353,7 +1398,7 @@ function apply(ctx, config) {
|
|
|
1353
1398
|
});
|
|
1354
1399
|
if (sovereign) {
|
|
1355
1400
|
value += 0.05;
|
|
1356
|
-
messages.push("👑
|
|
1401
|
+
messages.push("👑 王权增幅:攻击伤害+5%");
|
|
1357
1402
|
}
|
|
1358
1403
|
const [lament] = await ctx2.database.get("ggcevo_Wish_Record", {
|
|
1359
1404
|
handle,
|
|
@@ -1364,7 +1409,7 @@ function apply(ctx, config) {
|
|
|
1364
1409
|
if (lament) {
|
|
1365
1410
|
const levelBonus = 0.1 * (weapon.level + 1);
|
|
1366
1411
|
value += levelBonus;
|
|
1367
|
-
messages.push(`🗡️
|
|
1412
|
+
messages.push(`🗡️ 悲鸣之锋:攻击伤害+${Math.round(levelBonus * 100)}%`);
|
|
1368
1413
|
}
|
|
1369
1414
|
const [critRhythm] = await ctx2.database.get("ggcevo_Wish_Record", {
|
|
1370
1415
|
handle,
|
|
@@ -1373,7 +1418,7 @@ function apply(ctx, config) {
|
|
|
1373
1418
|
endTime: { $gte: /* @__PURE__ */ new Date() }
|
|
1374
1419
|
});
|
|
1375
1420
|
if (critRhythm) {
|
|
1376
|
-
messages.push("🎵
|
|
1421
|
+
messages.push("🎵 暴击韵律:攻击暴击率+20%");
|
|
1377
1422
|
}
|
|
1378
1423
|
return {
|
|
1379
1424
|
value,
|
|
@@ -1582,7 +1627,7 @@ function apply(ctx, config) {
|
|
|
1582
1627
|
updatedHP: Math.min(targetBoss.HP + healAmount, maxHP),
|
|
1583
1628
|
initialDamage: 0,
|
|
1584
1629
|
// 直接设置伤害为0
|
|
1585
|
-
messages: [`❄️
|
|
1630
|
+
messages: [`❄️ 【冰霜进化】生效:免疫寒冷伤害,${targetBoss.name}回复${healAmount}生命值`]
|
|
1586
1631
|
};
|
|
1587
1632
|
}
|
|
1588
1633
|
return null;
|
|
@@ -1695,7 +1740,7 @@ function apply(ctx, config) {
|
|
|
1695
1740
|
if (!effect) return null;
|
|
1696
1741
|
return {
|
|
1697
1742
|
updatedHP: effect.heal,
|
|
1698
|
-
messages: [`【${effect.skill}】生效,${targetBoss.name}
|
|
1743
|
+
messages: [`【${effect.skill}】生效,${targetBoss.name}濒死时瞬间回复${effect.heal}生命值`],
|
|
1699
1744
|
skillUpdates: [{
|
|
1700
1745
|
name: targetBoss.name,
|
|
1701
1746
|
remove: [effect.skill]
|
|
@@ -1710,7 +1755,7 @@ function apply(ctx, config) {
|
|
|
1710
1755
|
return {
|
|
1711
1756
|
damageMultiplier: -0.5,
|
|
1712
1757
|
// 50% 减伤
|
|
1713
|
-
messages: ["🛡️
|
|
1758
|
+
messages: ["🛡️ 【感染空间站】生效:空间站哨枪塔存活时,受到的伤害-50%"]
|
|
1714
1759
|
};
|
|
1715
1760
|
}
|
|
1716
1761
|
return null;
|
|
@@ -1815,10 +1860,10 @@ function apply(ctx, config) {
|
|
|
1815
1860
|
handleStructuralArmor: /* @__PURE__ */ __name((targetBoss, weaponData) => {
|
|
1816
1861
|
if (!targetBoss.skills.includes("结构装甲")) return null;
|
|
1817
1862
|
let reduction = 0.2;
|
|
1818
|
-
let msg = "
|
|
1863
|
+
let msg = "受到常规武器伤害-20%";
|
|
1819
1864
|
if (weaponData.type === "热能武器") {
|
|
1820
1865
|
reduction = 0.4;
|
|
1821
|
-
msg = "
|
|
1866
|
+
msg = "受到热能武器伤害-40%";
|
|
1822
1867
|
}
|
|
1823
1868
|
return {
|
|
1824
1869
|
damageMultiplier: -reduction,
|
|
@@ -1841,7 +1886,7 @@ function apply(ctx, config) {
|
|
|
1841
1886
|
}
|
|
1842
1887
|
if (targetBoss.skills.includes("嗜血狂暴") && currentHP / maxHP < 0.5) {
|
|
1843
1888
|
damageMultiplier -= 0.2;
|
|
1844
|
-
messages.push(`🔥
|
|
1889
|
+
messages.push(`🔥 【嗜血狂暴】生效:进入狂暴状态,受到的伤害-20%`);
|
|
1845
1890
|
}
|
|
1846
1891
|
if (targetBoss.skills.includes("吐血") && bloodStacks < 1) {
|
|
1847
1892
|
damageMultiplier += 0.2;
|
|
@@ -1874,7 +1919,7 @@ function apply(ctx, config) {
|
|
|
1874
1919
|
}
|
|
1875
1920
|
newStacks = Math.min(newStacks, 20);
|
|
1876
1921
|
if (oldStacks < 20 && newStacks >= 20) {
|
|
1877
|
-
messages.push(`🩸
|
|
1922
|
+
messages.push(`🩸 “吸血”达到${newStacks}层,下次受到攻击将触发【进食】`);
|
|
1878
1923
|
}
|
|
1879
1924
|
await ctx2.database.set("ggcevo_boss", { name: targetBoss.name }, { Skillcountpoints: newStacks });
|
|
1880
1925
|
return { updatedHP, messages };
|
|
@@ -2063,7 +2108,7 @@ function apply(ctx, config) {
|
|
|
2063
2108
|
return {
|
|
2064
2109
|
immune: true,
|
|
2065
2110
|
messages: [
|
|
2066
|
-
`🛡️
|
|
2111
|
+
`🛡️ 【电能立场】生效:免疫非寒冷伤害!`
|
|
2067
2112
|
]
|
|
2068
2113
|
};
|
|
2069
2114
|
}
|
|
@@ -2120,7 +2165,7 @@ function apply(ctx, config) {
|
|
|
2120
2165
|
await Promise.all(updates);
|
|
2121
2166
|
return {
|
|
2122
2167
|
messages: [
|
|
2123
|
-
`❤️
|
|
2168
|
+
`❤️ 【脉冲】生效:治疗全体异形`,
|
|
2124
2169
|
...healMessages
|
|
2125
2170
|
]
|
|
2126
2171
|
};
|
|
@@ -2169,6 +2214,184 @@ function apply(ctx, config) {
|
|
|
2169
2214
|
return null;
|
|
2170
2215
|
}
|
|
2171
2216
|
}, "handleParticlePhaseEffect"),
|
|
2217
|
+
// 火焰异形处理(免疫火焰伤害)
|
|
2218
|
+
handleFlameCreature: /* @__PURE__ */ __name(function(targetBoss, weaponName, damage, maxHP) {
|
|
2219
|
+
if (targetBoss.skills.includes("火焰异形") && weaponName === "焚烧枪") {
|
|
2220
|
+
const healAmount = damage;
|
|
2221
|
+
return {
|
|
2222
|
+
updatedHP: Math.min(targetBoss.HP + healAmount, maxHP),
|
|
2223
|
+
initialDamage: 0,
|
|
2224
|
+
messages: [`🔥 【火焰异形】生效:免疫火焰伤害,${targetBoss.name}回复${healAmount}生命值`]
|
|
2225
|
+
};
|
|
2226
|
+
}
|
|
2227
|
+
return null;
|
|
2228
|
+
}, "handleFlameCreature"),
|
|
2229
|
+
// 庞兽狂暴处理(每次攻击时检测血量)
|
|
2230
|
+
handleTitanRage: /* @__PURE__ */ __name(function(targetBoss, currentHP, maxHP) {
|
|
2231
|
+
if (!targetBoss.skills.includes("庞兽狂暴")) return null;
|
|
2232
|
+
const hpPercent = currentHP / maxHP;
|
|
2233
|
+
const isBelowThreshold = hpPercent < 0.5;
|
|
2234
|
+
if (isBelowThreshold) {
|
|
2235
|
+
return {
|
|
2236
|
+
damageMultiplier: -0.5,
|
|
2237
|
+
messages: [`🔥 【庞兽狂暴】生效:进入狂暴状态,受到的伤害-50%`]
|
|
2238
|
+
};
|
|
2239
|
+
}
|
|
2240
|
+
return null;
|
|
2241
|
+
}, "handleTitanRage"),
|
|
2242
|
+
// 胆汁效果处理(返回伤害调整系数)
|
|
2243
|
+
handleBileEffects: /* @__PURE__ */ __name(function(targetBoss, weaponName, initialDamage) {
|
|
2244
|
+
if (!targetBoss.skills.includes("灼烧粘液")) return null;
|
|
2245
|
+
const bileLayers = targetBoss.Skillcountpoints || 0;
|
|
2246
|
+
const messages = [];
|
|
2247
|
+
let currentDamage = initialDamage;
|
|
2248
|
+
if (weaponName === "焚烧枪" && bileLayers > 0) {
|
|
2249
|
+
currentDamage *= 2;
|
|
2250
|
+
messages.push(`🔥 【灼烧粘液】引爆:已有${bileLayers}层胆汁,本次伤害+100%`);
|
|
2251
|
+
return {
|
|
2252
|
+
messages,
|
|
2253
|
+
clearBile: true,
|
|
2254
|
+
currentDamage
|
|
2255
|
+
};
|
|
2256
|
+
}
|
|
2257
|
+
return null;
|
|
2258
|
+
}, "handleBileEffects"),
|
|
2259
|
+
// 胆汁叠层和效果触发处理
|
|
2260
|
+
handleBileCount: /* @__PURE__ */ __name(async function(ctx2, targetBoss, weaponName, bossGroup) {
|
|
2261
|
+
if (!targetBoss.skills.includes("灼烧粘液")) return null;
|
|
2262
|
+
const maxBile = targetBoss.type === "主宰" ? 10 : 5;
|
|
2263
|
+
const messages = [];
|
|
2264
|
+
const updates = [];
|
|
2265
|
+
const currentBile = targetBoss.Skillcountpoints || 0;
|
|
2266
|
+
if (currentBile >= 5 && targetBoss.skills.includes("腐蚀胆汁")) {
|
|
2267
|
+
await this.triggerCorrosiveBile(ctx2, targetBoss, bossGroup);
|
|
2268
|
+
updates.push(
|
|
2269
|
+
ctx2.database.set(
|
|
2270
|
+
"ggcevo_boss",
|
|
2271
|
+
{ name: targetBoss.name },
|
|
2272
|
+
{ Skillcountpoints: 0 }
|
|
2273
|
+
)
|
|
2274
|
+
);
|
|
2275
|
+
messages.push(`💚 【腐蚀胆汁】触发:胆汁达到5层,治愈所有存活的异形500点血量`);
|
|
2276
|
+
} else if (currentBile >= 10 && targetBoss.skills.includes("火焰吐息")) {
|
|
2277
|
+
await this.triggerFlamingBreath(ctx2, targetBoss, bossGroup);
|
|
2278
|
+
updates.push(
|
|
2279
|
+
ctx2.database.set(
|
|
2280
|
+
"ggcevo_boss",
|
|
2281
|
+
{ name: targetBoss.name },
|
|
2282
|
+
{ Skillcountpoints: 0 }
|
|
2283
|
+
)
|
|
2284
|
+
);
|
|
2285
|
+
messages.push(`🔥 【火焰吐息】触发:胆汁达到10层,治愈所有存活的异形20%最大生命值`);
|
|
2286
|
+
}
|
|
2287
|
+
if (updates.length > 0) {
|
|
2288
|
+
await Promise.all(updates);
|
|
2289
|
+
return { messages };
|
|
2290
|
+
}
|
|
2291
|
+
if (weaponName !== "焚烧枪" && currentBile < maxBile) {
|
|
2292
|
+
const newBile = currentBile + 1;
|
|
2293
|
+
updates.push(
|
|
2294
|
+
ctx2.database.set(
|
|
2295
|
+
"ggcevo_boss",
|
|
2296
|
+
{ name: targetBoss.name },
|
|
2297
|
+
{ Skillcountpoints: newBile }
|
|
2298
|
+
)
|
|
2299
|
+
);
|
|
2300
|
+
messages.push(`🟢 【灼烧粘液】生效:获得1层胆汁(当前${newBile}/${maxBile}层)`);
|
|
2301
|
+
if (newBile === 5 && targetBoss.skills.includes("腐蚀胆汁")) {
|
|
2302
|
+
messages.push(`💚 层数达到5层,下次受到攻击将触发【腐蚀胆汁】效果`);
|
|
2303
|
+
} else if (newBile === 10 && targetBoss.skills.includes("火焰吐息")) {
|
|
2304
|
+
messages.push(`🔥 层数达到10层,下次受到攻击将触发【火焰吐息】效果`);
|
|
2305
|
+
}
|
|
2306
|
+
}
|
|
2307
|
+
if (updates.length > 0) {
|
|
2308
|
+
await Promise.all(updates);
|
|
2309
|
+
}
|
|
2310
|
+
return { messages };
|
|
2311
|
+
}, "handleBileCount"),
|
|
2312
|
+
// 触发腐蚀胆汁效果
|
|
2313
|
+
triggerCorrosiveBile: /* @__PURE__ */ __name(async function(ctx2, targetBoss, bossGroup) {
|
|
2314
|
+
const updates = [];
|
|
2315
|
+
const activeMembers = await ctx2.database.get("ggcevo_boss", {
|
|
2316
|
+
groupId: targetBoss.groupId,
|
|
2317
|
+
isActive: true
|
|
2318
|
+
});
|
|
2319
|
+
for (const member of activeMembers) {
|
|
2320
|
+
const memberConfig = this.getMemberConfig(member.name, bossGroup);
|
|
2321
|
+
if (!memberConfig) continue;
|
|
2322
|
+
const maxHP = memberConfig.maxHP;
|
|
2323
|
+
const healAmount = 500;
|
|
2324
|
+
const newHP = Math.min(member.HP + healAmount, maxHP);
|
|
2325
|
+
updates.push(
|
|
2326
|
+
ctx2.database.set(
|
|
2327
|
+
"ggcevo_boss",
|
|
2328
|
+
{ name: member.name },
|
|
2329
|
+
{ HP: newHP }
|
|
2330
|
+
)
|
|
2331
|
+
);
|
|
2332
|
+
}
|
|
2333
|
+
if (updates.length > 0) {
|
|
2334
|
+
await Promise.all(updates);
|
|
2335
|
+
}
|
|
2336
|
+
}, "triggerCorrosiveBile"),
|
|
2337
|
+
// 触发火焰吐息效果
|
|
2338
|
+
triggerFlamingBreath: /* @__PURE__ */ __name(async function(ctx2, targetBoss, bossGroup) {
|
|
2339
|
+
const updates = [];
|
|
2340
|
+
const activeMembers = await ctx2.database.get("ggcevo_boss", {
|
|
2341
|
+
groupId: targetBoss.groupId,
|
|
2342
|
+
isActive: true
|
|
2343
|
+
});
|
|
2344
|
+
for (const member of activeMembers) {
|
|
2345
|
+
const memberConfig = this.getMemberConfig(member.name, bossGroup);
|
|
2346
|
+
if (!memberConfig) continue;
|
|
2347
|
+
const maxHP = memberConfig.maxHP;
|
|
2348
|
+
const healAmount = Math.floor(maxHP * 0.2);
|
|
2349
|
+
const newHP = Math.min(member.HP + healAmount, maxHP);
|
|
2350
|
+
updates.push(
|
|
2351
|
+
ctx2.database.set(
|
|
2352
|
+
"ggcevo_boss",
|
|
2353
|
+
{ name: member.name },
|
|
2354
|
+
{ HP: newHP }
|
|
2355
|
+
)
|
|
2356
|
+
);
|
|
2357
|
+
}
|
|
2358
|
+
if (updates.length > 0) {
|
|
2359
|
+
await Promise.all(updates);
|
|
2360
|
+
}
|
|
2361
|
+
}, "triggerFlamingBreath"),
|
|
2362
|
+
// 太阳耀斑处理(每次受到攻击时检测)
|
|
2363
|
+
handleSolarFlare: /* @__PURE__ */ __name(async function(ctx2, targetBoss, weaponName, activeBosses) {
|
|
2364
|
+
if (!targetBoss.skills.includes("太阳耀斑")) return null;
|
|
2365
|
+
const minionDead = activeBosses.every(
|
|
2366
|
+
(boss) => boss.groupId === targetBoss.groupId && boss.type === "子代" && (!boss.isActive || boss.HP <= 0)
|
|
2367
|
+
);
|
|
2368
|
+
if (!minionDead) return null;
|
|
2369
|
+
const messages = [];
|
|
2370
|
+
let immuneCold = false;
|
|
2371
|
+
if (targetBoss.tags.includes("惧寒")) {
|
|
2372
|
+
const newTags = targetBoss.tags.filter((tag) => tag !== "惧寒");
|
|
2373
|
+
await ctx2.database.set(
|
|
2374
|
+
"ggcevo_boss",
|
|
2375
|
+
{ name: targetBoss.name },
|
|
2376
|
+
{ tags: newTags }
|
|
2377
|
+
);
|
|
2378
|
+
messages.push(`☀️ 【太阳耀斑】降临:所有子代阵亡,${targetBoss.name}移除「惧寒」标签`);
|
|
2379
|
+
}
|
|
2380
|
+
if (targetBoss.skills.includes("孤立无援")) {
|
|
2381
|
+
const newSkills = targetBoss.skills.filter((skill) => skill !== "孤立无援");
|
|
2382
|
+
await ctx2.database.set(
|
|
2383
|
+
"ggcevo_boss",
|
|
2384
|
+
{ name: targetBoss.name },
|
|
2385
|
+
{ skills: newSkills }
|
|
2386
|
+
);
|
|
2387
|
+
messages.push(`${targetBoss.name}移除【孤立无援】效果`);
|
|
2388
|
+
}
|
|
2389
|
+
if (weaponName === "零度之下" && !targetBoss.tags.includes("惧寒")) {
|
|
2390
|
+
immuneCold = true;
|
|
2391
|
+
messages.push(`☀️ 【太阳耀斑】生效:免疫寒冷伤害`);
|
|
2392
|
+
}
|
|
2393
|
+
return { immuneCold, messages };
|
|
2394
|
+
}, "handleSolarFlare"),
|
|
2172
2395
|
// 统一处理被动技能
|
|
2173
2396
|
handlePassives: /* @__PURE__ */ __name(async function(ctx2, targetBoss, initialDamage, currentHP, maxHP, weaponName, weaponData, activeBosses, bossGroup) {
|
|
2174
2397
|
let messages = [];
|
|
@@ -2206,6 +2429,31 @@ function apply(ctx, config) {
|
|
|
2206
2429
|
};
|
|
2207
2430
|
}
|
|
2208
2431
|
}
|
|
2432
|
+
const solarFlareResult = await this.handleSolarFlare(ctx2, targetBoss, weaponName, activeBosses);
|
|
2433
|
+
if (solarFlareResult?.immuneCold && weaponName === "零度之下") {
|
|
2434
|
+
messages.push(...solarFlareResult.messages);
|
|
2435
|
+
return {
|
|
2436
|
+
currentHP,
|
|
2437
|
+
messages,
|
|
2438
|
+
initialDamage: 0
|
|
2439
|
+
};
|
|
2440
|
+
}
|
|
2441
|
+
const bileDetonationResult = await this.handleBileEffects(targetBoss, weaponName, initialDamage);
|
|
2442
|
+
if (bileDetonationResult) {
|
|
2443
|
+
messages.push(...bileDetonationResult.messages);
|
|
2444
|
+
initialDamage = bileDetonationResult.currentDamage;
|
|
2445
|
+
if (bileDetonationResult.clearBile) {
|
|
2446
|
+
targetBoss.Skillcountpoints = 0;
|
|
2447
|
+
}
|
|
2448
|
+
}
|
|
2449
|
+
const flameResult = this.handleFlameCreature(targetBoss, weaponName, initialDamage, maxHP);
|
|
2450
|
+
if (flameResult) {
|
|
2451
|
+
return {
|
|
2452
|
+
currentHP: flameResult.updatedHP,
|
|
2453
|
+
messages: flameResult.messages,
|
|
2454
|
+
initialDamage: 0
|
|
2455
|
+
};
|
|
2456
|
+
}
|
|
2209
2457
|
targetBoss.skills.forEach((skill) => {
|
|
2210
2458
|
const config2 = passiveConfig[skill];
|
|
2211
2459
|
if (config2 && config2.effect !== void 0 && config2.effect !== 0) {
|
|
@@ -2244,6 +2492,11 @@ function apply(ctx, config) {
|
|
|
2244
2492
|
totalMultiplier += blackholeResult.damageMultiplier;
|
|
2245
2493
|
messages.push(...blackholeResult.messages);
|
|
2246
2494
|
}
|
|
2495
|
+
const titanRageResult = this.handleTitanRage(targetBoss, currentHP, maxHP);
|
|
2496
|
+
if (titanRageResult) {
|
|
2497
|
+
totalMultiplier += titanRageResult.damageMultiplier;
|
|
2498
|
+
messages.push(...titanRageResult.messages);
|
|
2499
|
+
}
|
|
2247
2500
|
const radiationCalc = this.calculateRadiationDamage(targetBoss);
|
|
2248
2501
|
if (radiationCalc) {
|
|
2249
2502
|
totalMultiplier += radiationCalc.damageMultiplier;
|
|
@@ -2311,6 +2564,13 @@ function apply(ctx, config) {
|
|
|
2311
2564
|
currentHP = bloodCountResult.updatedHP;
|
|
2312
2565
|
messages.push(...bloodCountResult.messages);
|
|
2313
2566
|
}
|
|
2567
|
+
const bileCountResult = await this.handleBileCount(ctx2, targetBoss, weaponName, bossGroup);
|
|
2568
|
+
if (bileCountResult) {
|
|
2569
|
+
messages.push(...bileCountResult.messages);
|
|
2570
|
+
if (bileCountResult.newBile !== void 0) {
|
|
2571
|
+
targetBoss.Skillcountpoints = bileCountResult.newBile;
|
|
2572
|
+
}
|
|
2573
|
+
}
|
|
2314
2574
|
const sentryResult = await this.handleSentryGun(ctx2, targetBoss, bossGroup);
|
|
2315
2575
|
if (sentryResult) {
|
|
2316
2576
|
messages.push(...sentryResult.messages);
|
|
@@ -2521,6 +2781,7 @@ function apply(ctx, config) {
|
|
|
2521
2781
|
});
|
|
2522
2782
|
if (!allCleaners.length) return [];
|
|
2523
2783
|
let killerBonus = false;
|
|
2784
|
+
let killerBonusMessage = "";
|
|
2524
2785
|
for (const cleaner of allCleaners) {
|
|
2525
2786
|
let rewardAmount = baseReward;
|
|
2526
2787
|
if (cleaner.handle === killerHandle) {
|
|
@@ -2532,13 +2793,8 @@ function apply(ctx, config) {
|
|
|
2532
2793
|
redcrystal: (cleaner.redcrystal || 0) + rewardAmount
|
|
2533
2794
|
}], ["handle"]);
|
|
2534
2795
|
}
|
|
2535
|
-
const
|
|
2536
|
-
|
|
2537
|
-
];
|
|
2538
|
-
if (killerBonus) {
|
|
2539
|
-
rewardMessages.push(`🎖️ ${killerName}(致命一击)获得双倍红晶奖励!`);
|
|
2540
|
-
}
|
|
2541
|
-
return rewardMessages;
|
|
2796
|
+
const rewardMessage = `🧹 全体清洁工因清理 ${bossName} 获得 ${baseReward} 红晶${killerBonus ? ` (致命一击奖励 ${killerName})` : ""}`;
|
|
2797
|
+
return [rewardMessage];
|
|
2542
2798
|
} catch (error) {
|
|
2543
2799
|
ctx2.logger("ggcevo").warn("清洁工奖励发放失败", error);
|
|
2544
2800
|
return [];
|
|
@@ -2550,6 +2806,10 @@ function apply(ctx, config) {
|
|
|
2550
2806
|
const extraDamages = [];
|
|
2551
2807
|
const actuallyDead = [];
|
|
2552
2808
|
let scatterBroadcast = null;
|
|
2809
|
+
const allCleanerRewards = [];
|
|
2810
|
+
let masterDeathEvent = null;
|
|
2811
|
+
const otherBroadcastMessages = [];
|
|
2812
|
+
const processedGroups = /* @__PURE__ */ new Set();
|
|
2553
2813
|
const secondaryTargets = activeBosses.filter(
|
|
2554
2814
|
(boss) => boss.name !== targetBoss.name
|
|
2555
2815
|
);
|
|
@@ -2571,7 +2831,6 @@ function apply(ctx, config) {
|
|
|
2571
2831
|
scatterEffectMessages.push(scatterMsg);
|
|
2572
2832
|
const baseDamage = weaponData.damage * (1 + 0.1 * equippedWeapon.level);
|
|
2573
2833
|
const secondaryDamage = Math.round(baseDamage * scatterRatio);
|
|
2574
|
-
const cleanerRewards = [];
|
|
2575
2834
|
for (const secondaryTarget of secondaryTargets) {
|
|
2576
2835
|
const secondaryMaxHP = getBossMaxHP(secondaryTarget.name);
|
|
2577
2836
|
let currentDamage = secondaryDamage;
|
|
@@ -2631,24 +2890,17 @@ function apply(ctx, config) {
|
|
|
2631
2890
|
redcrystal: (cleaner.redcrystal || 0) + rewardAmount
|
|
2632
2891
|
}], ["handle"]);
|
|
2633
2892
|
}
|
|
2634
|
-
let rewardMsg = `🧹 全体清洁工因清理 ${bossName}
|
|
2893
|
+
let rewardMsg = `🧹 全体清洁工因清理 ${bossName} 获得 ${baseReward} 红晶`;
|
|
2635
2894
|
if (killerBonus) {
|
|
2636
|
-
rewardMsg += `
|
|
2637
|
-
🎖️ ${playerName}(致命一击)获得双倍红晶奖励!`;
|
|
2638
|
-
}
|
|
2639
|
-
if (!scatterBroadcast) {
|
|
2640
|
-
scatterBroadcast = [];
|
|
2641
|
-
}
|
|
2642
|
-
if (Array.isArray(scatterBroadcast)) {
|
|
2643
|
-
scatterBroadcast.push(rewardMsg);
|
|
2644
|
-
} else {
|
|
2645
|
-
scatterBroadcast = [rewardMsg];
|
|
2895
|
+
rewardMsg += ` (致命一击奖励 ${playerName})`;
|
|
2646
2896
|
}
|
|
2897
|
+
allCleanerRewards.push(rewardMsg);
|
|
2647
2898
|
}
|
|
2899
|
+
const groupId = secondaryTarget.groupId;
|
|
2648
2900
|
if (secondaryTarget.type === "子代") {
|
|
2649
2901
|
if (secondaryTarget.name === "机械感染虫") {
|
|
2650
2902
|
const [mainBoss] = await ctx2.database.get("ggcevo_boss", {
|
|
2651
|
-
groupId
|
|
2903
|
+
groupId,
|
|
2652
2904
|
type: "主宰",
|
|
2653
2905
|
isActive: true
|
|
2654
2906
|
});
|
|
@@ -2656,24 +2908,18 @@ function apply(ctx, config) {
|
|
|
2656
2908
|
await ctx2.database.set("ggcevo_boss", { name: mainBoss.name }, {
|
|
2657
2909
|
skills: [...mainBoss.skills, "孤立无援"]
|
|
2658
2910
|
});
|
|
2659
|
-
|
|
2660
|
-
if (!scatterBroadcast) {
|
|
2661
|
-
scatterBroadcast = isolationMsg;
|
|
2662
|
-
} else if (Array.isArray(scatterBroadcast)) {
|
|
2663
|
-
scatterBroadcast.push(isolationMsg);
|
|
2664
|
-
} else {
|
|
2665
|
-
scatterBroadcast = [scatterBroadcast, isolationMsg];
|
|
2666
|
-
}
|
|
2911
|
+
otherBroadcastMessages.push("💥 机械感染虫已阵亡,空间站感染虫进入【孤立无援】状态,受到的伤害+20%!");
|
|
2667
2912
|
}
|
|
2668
2913
|
} else {
|
|
2669
2914
|
const remainingMinions = await ctx2.database.get("ggcevo_boss", {
|
|
2670
|
-
groupId
|
|
2915
|
+
groupId,
|
|
2671
2916
|
type: "子代",
|
|
2672
2917
|
isActive: true
|
|
2673
2918
|
});
|
|
2674
|
-
if (remainingMinions.length === 0) {
|
|
2919
|
+
if (remainingMinions.length === 0 && !processedGroups.has(groupId)) {
|
|
2920
|
+
processedGroups.add(groupId);
|
|
2675
2921
|
const [mainBoss] = await ctx2.database.get("ggcevo_boss", {
|
|
2676
|
-
groupId
|
|
2922
|
+
groupId,
|
|
2677
2923
|
type: "主宰",
|
|
2678
2924
|
isActive: true
|
|
2679
2925
|
});
|
|
@@ -2681,21 +2927,14 @@ function apply(ctx, config) {
|
|
|
2681
2927
|
await ctx2.database.set("ggcevo_boss", { name: mainBoss.name }, {
|
|
2682
2928
|
skills: [...mainBoss.skills, "孤立无援"]
|
|
2683
2929
|
});
|
|
2684
|
-
|
|
2685
|
-
if (!scatterBroadcast) {
|
|
2686
|
-
scatterBroadcast = isolationMsg;
|
|
2687
|
-
} else if (Array.isArray(scatterBroadcast)) {
|
|
2688
|
-
scatterBroadcast.push(isolationMsg);
|
|
2689
|
-
} else {
|
|
2690
|
-
scatterBroadcast = [scatterBroadcast, isolationMsg];
|
|
2691
|
-
}
|
|
2930
|
+
otherBroadcastMessages.push(`💥 所有子代已阵亡,${mainBoss.name}进入【孤立无援】状态,受到的伤害+20%!`);
|
|
2692
2931
|
}
|
|
2693
2932
|
}
|
|
2694
2933
|
}
|
|
2695
2934
|
} else if (secondaryTarget.type === "主宰") {
|
|
2696
2935
|
await ctx2.database.set(
|
|
2697
2936
|
"ggcevo_boss",
|
|
2698
|
-
{ groupId
|
|
2937
|
+
{ groupId },
|
|
2699
2938
|
{ isActive: false, HP: 0 }
|
|
2700
2939
|
);
|
|
2701
2940
|
const respawnTime = /* @__PURE__ */ new Date();
|
|
@@ -2707,25 +2946,39 @@ function apply(ctx, config) {
|
|
|
2707
2946
|
);
|
|
2708
2947
|
const { rewardMessages } = await handleBossDefeatRewards(ctx2, secondaryTarget);
|
|
2709
2948
|
await ctx2.database.remove("ggcevo_boss_damage", {
|
|
2710
|
-
bossGroupId:
|
|
2949
|
+
bossGroupId: groupId
|
|
2711
2950
|
});
|
|
2712
|
-
|
|
2713
|
-
|
|
2714
|
-
|
|
2715
|
-
|
|
2716
|
-
|
|
2717
|
-
|
|
2718
|
-
|
|
2719
|
-
|
|
2720
|
-
|
|
2721
|
-
}
|
|
2722
|
-
scatterBroadcast.push(...defeatMsg);
|
|
2723
|
-
} else {
|
|
2724
|
-
scatterBroadcast = [scatterBroadcast, ...defeatMsg];
|
|
2725
|
-
}
|
|
2951
|
+
masterDeathEvent = {
|
|
2952
|
+
name: secondaryTarget.name,
|
|
2953
|
+
rewards: [
|
|
2954
|
+
`🎯 主宰 ${secondaryTarget.name} 已被 ${session.username} 的散射伤害击败!`,
|
|
2955
|
+
`所有子代已消失,下一个主宰将在1小时后重生`,
|
|
2956
|
+
"",
|
|
2957
|
+
"🏆 伤害排行榜奖励:",
|
|
2958
|
+
...rewardMessages
|
|
2959
|
+
]
|
|
2960
|
+
};
|
|
2726
2961
|
}
|
|
2727
2962
|
}
|
|
2728
2963
|
}
|
|
2964
|
+
if (allCleanerRewards.length > 0) {
|
|
2965
|
+
const combinedRewards = `✨ 散射攻击击败奖励
|
|
2966
|
+
${allCleanerRewards.join("\n")}`;
|
|
2967
|
+
otherBroadcastMessages.push(combinedRewards);
|
|
2968
|
+
}
|
|
2969
|
+
if (masterDeathEvent) {
|
|
2970
|
+
scatterBroadcast = [
|
|
2971
|
+
...masterDeathEvent.rewards
|
|
2972
|
+
];
|
|
2973
|
+
if (otherBroadcastMessages.length > 0) {
|
|
2974
|
+
scatterBroadcast.push("", ...otherBroadcastMessages);
|
|
2975
|
+
}
|
|
2976
|
+
} else if (otherBroadcastMessages.length > 0) {
|
|
2977
|
+
scatterBroadcast = otherBroadcastMessages;
|
|
2978
|
+
}
|
|
2979
|
+
if (Array.isArray(scatterBroadcast) && scatterBroadcast.length === 1) {
|
|
2980
|
+
scatterBroadcast = scatterBroadcast[0];
|
|
2981
|
+
}
|
|
2729
2982
|
return { scatterEffectMessages, extraDamages, actuallyDead, scatterBroadcast };
|
|
2730
2983
|
}
|
|
2731
2984
|
__name(handleSecondaryTargets, "handleSecondaryTargets");
|
|
@@ -2877,7 +3130,7 @@ function apply(ctx, config) {
|
|
|
2877
3130
|
});
|
|
2878
3131
|
return {
|
|
2879
3132
|
success: true,
|
|
2880
|
-
message:
|
|
3133
|
+
message: `成功引爆${itemName},对空间站哨枪塔造成${damageValue}点伤害,获得等额金币。`
|
|
2881
3134
|
};
|
|
2882
3135
|
}
|
|
2883
3136
|
if (itemConfig2.id === 2) {
|
|
@@ -2891,7 +3144,7 @@ function apply(ctx, config) {
|
|
|
2891
3144
|
});
|
|
2892
3145
|
if (!targetboss || targetboss?.Skillcountpoints === 0 || targetboss?.tags.includes("建筑") || targetboss?.tags.includes("重型")) return {
|
|
2893
3146
|
success: false,
|
|
2894
|
-
message: "
|
|
3147
|
+
message: "您无法对目标使用(目标已死亡/目标的技能计数为0/目标拥有“建筑”或“重型”标签)。"
|
|
2895
3148
|
};
|
|
2896
3149
|
await ctx.database.set(
|
|
2897
3150
|
"ggcevo_boss",
|
|
@@ -2900,7 +3153,7 @@ function apply(ctx, config) {
|
|
|
2900
3153
|
);
|
|
2901
3154
|
return {
|
|
2902
3155
|
success: true,
|
|
2903
|
-
message:
|
|
3156
|
+
message: `成功使用${itemName},已重置${target}的技能计数。`
|
|
2904
3157
|
};
|
|
2905
3158
|
}
|
|
2906
3159
|
if (itemConfig2.id === 3 || itemConfig2.id === 5) {
|
|
@@ -2920,7 +3173,7 @@ function apply(ctx, config) {
|
|
|
2920
3173
|
});
|
|
2921
3174
|
if (!targetboss || targetboss?.energy === 0) return {
|
|
2922
3175
|
success: false,
|
|
2923
|
-
message: "
|
|
3176
|
+
message: "您无法对目标使用(目标的能量为0)。"
|
|
2924
3177
|
};
|
|
2925
3178
|
await ctx.database.set(
|
|
2926
3179
|
"ggcevo_boss",
|
|
@@ -2930,18 +3183,18 @@ function apply(ctx, config) {
|
|
|
2930
3183
|
);
|
|
2931
3184
|
return {
|
|
2932
3185
|
success: true,
|
|
2933
|
-
message:
|
|
3186
|
+
message: `成功使用${itemName},消耗${target}500点能量。`
|
|
2934
3187
|
};
|
|
2935
3188
|
}
|
|
2936
3189
|
return {
|
|
2937
3190
|
success: false,
|
|
2938
|
-
message: `${itemName}
|
|
3191
|
+
message: `${itemName} 效果开发中,无法使用。`
|
|
2939
3192
|
};
|
|
2940
3193
|
} catch (error) {
|
|
2941
3194
|
console.error("物品效果处理失败:", error);
|
|
2942
3195
|
return {
|
|
2943
3196
|
success: false,
|
|
2944
|
-
message: "⚠️
|
|
3197
|
+
message: "⚠️ 物品效果处理异常,已回滚操作。"
|
|
2945
3198
|
};
|
|
2946
3199
|
}
|
|
2947
3200
|
}
|
|
@@ -2959,14 +3212,19 @@ function apply(ctx, config) {
|
|
|
2959
3212
|
if (currentLevel >= tech.maxLevel) return `❌ ${tech.techname}已达最高等级`;
|
|
2960
3213
|
const nextLevel = currentLevel + 1;
|
|
2961
3214
|
const levelData = tech.levels.find((l) => l.level === nextLevel);
|
|
2962
|
-
let
|
|
3215
|
+
let originalCost = levelData.cost;
|
|
3216
|
+
let actualCost = originalCost;
|
|
3217
|
+
let discountApplied = false;
|
|
3218
|
+
let discountDetails = [];
|
|
2963
3219
|
if (careerData.career === "情报副官") {
|
|
2964
|
-
|
|
3220
|
+
discountApplied = true;
|
|
3221
|
+
actualCost = Math.floor(originalCost * 0.8);
|
|
3222
|
+
discountDetails.push("🎖️ 情报副官:20%折扣");
|
|
2965
3223
|
}
|
|
2966
3224
|
const [signInfo] = await ctx.database.get("ggcevo_sign", { handle });
|
|
2967
3225
|
if (signInfo?.totalRewards < actualCost) {
|
|
2968
|
-
const
|
|
2969
|
-
return `❌
|
|
3226
|
+
const priceHint = discountApplied ? ` (原价${originalCost}金币)` : "";
|
|
3227
|
+
return `❌ 金币不足!需要${actualCost}金币${priceHint},您当前拥有:${signInfo?.totalRewards || 0}金币`;
|
|
2970
3228
|
}
|
|
2971
3229
|
await ctx.database.withTransaction(async () => {
|
|
2972
3230
|
await ctx.database.set("ggcevo_sign", { handle }, {
|
|
@@ -2978,13 +3236,22 @@ function apply(ctx, config) {
|
|
|
2978
3236
|
level: nextLevel
|
|
2979
3237
|
}], ["handle", "techId"]);
|
|
2980
3238
|
});
|
|
2981
|
-
|
|
2982
|
-
|
|
2983
|
-
|
|
2984
|
-
|
|
2985
|
-
${
|
|
2986
|
-
|
|
2987
|
-
|
|
3239
|
+
let discountInfo = [];
|
|
3240
|
+
if (discountApplied) {
|
|
3241
|
+
discountInfo = [
|
|
3242
|
+
"折扣明细:",
|
|
3243
|
+
...discountDetails.map((detail) => `▸ ${detail}`)
|
|
3244
|
+
];
|
|
3245
|
+
}
|
|
3246
|
+
const costInfo = discountApplied ? `💰 花费金币:${actualCost} (原价${originalCost})` : `💰 花费金币:${actualCost}`;
|
|
3247
|
+
return [
|
|
3248
|
+
`✅ ${tech.techname} 升级至 Lv.${nextLevel}`,
|
|
3249
|
+
costInfo,
|
|
3250
|
+
...discountInfo,
|
|
3251
|
+
// 插入折扣明细
|
|
3252
|
+
`📝 ${levelData.description}`,
|
|
3253
|
+
`💼 ${levelData.careerBonus}`
|
|
3254
|
+
].filter(Boolean).join("\n");
|
|
2988
3255
|
}
|
|
2989
3256
|
__name(handleTechUpgrade, "handleTechUpgrade");
|
|
2990
3257
|
async function handleWeaponUpgrade(handle, target) {
|
|
@@ -3014,22 +3281,22 @@ ${discountHint}${costLine}
|
|
|
3014
3281
|
if (weaponDiscount > 0) {
|
|
3015
3282
|
totalDiscount += weaponDiscount;
|
|
3016
3283
|
discountDetails.push(
|
|
3017
|
-
|
|
3284
|
+
`⚙️ 武器系统 Lv${techLevel}:${weaponDiscount}%折扣`
|
|
3018
3285
|
);
|
|
3019
3286
|
}
|
|
3020
3287
|
}
|
|
3021
3288
|
const activeWish = await checkFoxBlessing(handle);
|
|
3022
3289
|
if (activeWish) {
|
|
3023
3290
|
totalDiscount += 20;
|
|
3024
|
-
discountDetails.push("
|
|
3291
|
+
discountDetails.push("🦊 灵狐升运:20%折扣");
|
|
3025
3292
|
}
|
|
3026
3293
|
totalDiscount = Math.min(totalDiscount, 100);
|
|
3027
3294
|
const discountedCost = baseCost * (100 - totalDiscount) / 100;
|
|
3028
3295
|
const actualCost = Math.floor(discountedCost);
|
|
3029
3296
|
const [signInfo] = await ctx.database.get("ggcevo_sign", { handle });
|
|
3030
3297
|
if (signInfo?.totalRewards < actualCost) {
|
|
3031
|
-
const priceInfo2 = totalDiscount > 0 ?
|
|
3032
|
-
return `❌ ${priceInfo2}
|
|
3298
|
+
const priceInfo2 = totalDiscount > 0 ? `需要${actualCost}金币(原价${baseCost}金币)` : `需要${actualCost}金币`;
|
|
3299
|
+
return `❌ ${priceInfo2},您当前拥有:${signInfo?.totalRewards || 0}金币`;
|
|
3033
3300
|
}
|
|
3034
3301
|
await ctx.database.withTransaction(async () => {
|
|
3035
3302
|
await ctx.database.set("ggcevo_sign", { handle }, {
|
|
@@ -3055,18 +3322,18 @@ ${discountHint}${costLine}
|
|
|
3055
3322
|
const damage = (weaponData.damage * (1 + 0.1 * newLevel)).toFixed(1);
|
|
3056
3323
|
let msg = `${target} 升级成功!Lv.${newLevel}`;
|
|
3057
3324
|
const priceInfo = totalDiscount > 0 ? `
|
|
3058
|
-
💸 消耗:${actualCost}金币 (原价${baseCost})` : `
|
|
3325
|
+
💸 消耗:${actualCost}金币 (原价${baseCost}金币)` : `
|
|
3059
3326
|
💸 消耗:${actualCost}金币`;
|
|
3060
3327
|
msg += priceInfo;
|
|
3061
3328
|
if (discountDetails.length > 0) {
|
|
3062
3329
|
msg += `
|
|
3063
|
-
|
|
3330
|
+
💰 折扣明细:
|
|
3064
3331
|
${discountDetails.join("\n▸ ")}`;
|
|
3065
3332
|
}
|
|
3066
3333
|
msg += `
|
|
3067
3334
|
💥 伤害:${damage}`;
|
|
3068
3335
|
msg += `
|
|
3069
|
-
|
|
3336
|
+
🔧 改装槽:${Math.floor(newLevel / 3) + 1}个`;
|
|
3070
3337
|
return msg;
|
|
3071
3338
|
}
|
|
3072
3339
|
__name(handleWeaponUpgrade, "handleWeaponUpgrade");
|
|
@@ -3109,26 +3376,30 @@ ${discountDetails.join("\n▸ ")}`;
|
|
|
3109
3376
|
const showOriginal = finalPrice < baseCost;
|
|
3110
3377
|
return [
|
|
3111
3378
|
`等级 ${level.padEnd(5)}`,
|
|
3112
|
-
`▸ 价格: ${finalPrice.toString().padStart(4)}${showOriginal ? ` (
|
|
3379
|
+
`▸ 价格: ${finalPrice.toString().padStart(4)}${showOriginal ? ` (原价${baseCost})` : ""}`
|
|
3113
3380
|
].join("\n");
|
|
3114
3381
|
});
|
|
3115
3382
|
const discountNotice = [];
|
|
3383
|
+
if (hasTechDiscount || hasFoxDiscount) {
|
|
3384
|
+
discountNotice.push("💰 当前折扣:");
|
|
3385
|
+
}
|
|
3116
3386
|
if (hasTechDiscount) {
|
|
3117
|
-
discountNotice.push(
|
|
3387
|
+
discountNotice.push(`⚙️ 武器系统 Lv${techLevel}:${techDiscountRate}%折扣`);
|
|
3118
3388
|
}
|
|
3119
3389
|
if (hasFoxDiscount) {
|
|
3120
|
-
discountNotice.push(
|
|
3390
|
+
discountNotice.push(`🦊 灵狐升运:20%折扣`);
|
|
3121
3391
|
}
|
|
3122
3392
|
if (!hasTechDiscount && !hasFoxDiscount) {
|
|
3123
3393
|
discountNotice.push("💡 提示:加入人类联盟并升级武器系统可获得折扣");
|
|
3124
3394
|
}
|
|
3125
3395
|
return [
|
|
3126
3396
|
"⚡ 武器升级价格表 ⚡",
|
|
3397
|
+
"使用「升级 武器名称」对武器进行等级升级",
|
|
3127
3398
|
...discountNotice,
|
|
3399
|
+
// 现在折扣信息前有标题
|
|
3128
3400
|
"====================",
|
|
3129
3401
|
...priceDetails,
|
|
3130
|
-
"===================="
|
|
3131
|
-
"使用「升级 武器名称」进行具体升级"
|
|
3402
|
+
"===================="
|
|
3132
3403
|
].join("\n");
|
|
3133
3404
|
}
|
|
3134
3405
|
__name(generateUpgradePriceList, "generateUpgradePriceList");
|
|
@@ -3193,18 +3464,18 @@ ${discountDetails.join("\n▸ ")}`;
|
|
|
3193
3464
|
let hiddenWinCount = 0;
|
|
3194
3465
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
3195
3466
|
if (!profile) {
|
|
3196
|
-
return "🔒
|
|
3467
|
+
return "🔒 需要先绑定游戏句柄。";
|
|
3197
3468
|
}
|
|
3198
3469
|
const { regionId, realmId, profileId } = profile;
|
|
3199
3470
|
const handle = `${regionId}-S2-${realmId}-${profileId}`;
|
|
3200
3471
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
3201
3472
|
if (existingEntries.length > 0) {
|
|
3202
|
-
return `⛔
|
|
3473
|
+
return `⛔ 您已被列入黑名单。`;
|
|
3203
3474
|
}
|
|
3204
3475
|
const [backpack] = await ctx.database.get("ggcevo_backpack", { handle, itemId: 1 });
|
|
3205
3476
|
const quantity = backpack?.quantity;
|
|
3206
3477
|
if (quantity < 1) {
|
|
3207
|
-
return "
|
|
3478
|
+
return "您背包内的咕咕币不足。";
|
|
3208
3479
|
}
|
|
3209
3480
|
await ctx.database.upsert("ggcevo_backpack", [{
|
|
3210
3481
|
handle,
|
|
@@ -3219,27 +3490,27 @@ ${discountDetails.join("\n▸ ")}`;
|
|
|
3219
3490
|
}
|
|
3220
3491
|
const [record] = await ctx.database.get("ggcevo_records", { handle });
|
|
3221
3492
|
return [
|
|
3222
|
-
`🎰
|
|
3223
|
-
winCount > 0 ? `🎉
|
|
3493
|
+
`🎰 您使用了${quantity}枚咕咕币`,
|
|
3494
|
+
winCount > 0 ? `🎉 其中获得${winCount}张兑换券!` : "💔 本次未获得任何兑换券",
|
|
3224
3495
|
`📊 当前保底进度:${record.pityCounter}/90`,
|
|
3225
|
-
...hiddenWinCount > 0 ? [`🎉
|
|
3496
|
+
...hiddenWinCount > 0 ? [`🎉 恭喜你抽中隐藏奖励,额外获得${hiddenWinCount}张兑换券和${hiddenWinCount}枚扭蛋币!`] : []
|
|
3226
3497
|
].join("\n");
|
|
3227
3498
|
});
|
|
3228
3499
|
ctx.command("ggcevo/单抽").action(async (argv) => {
|
|
3229
3500
|
const session = argv.session;
|
|
3230
3501
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
3231
3502
|
if (!profile) {
|
|
3232
|
-
return "🔒
|
|
3503
|
+
return "🔒 需要先绑定游戏句柄。";
|
|
3233
3504
|
}
|
|
3234
3505
|
const { regionId, realmId, profileId } = profile;
|
|
3235
3506
|
const handle = `${regionId}-S2-${realmId}-${profileId}`;
|
|
3236
3507
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
3237
3508
|
if (existingEntries.length > 0) {
|
|
3238
|
-
return `⛔
|
|
3509
|
+
return `⛔ 您已被列入黑名单。`;
|
|
3239
3510
|
}
|
|
3240
3511
|
const [backpack] = await ctx.database.get("ggcevo_backpack", { handle, itemId: 1 });
|
|
3241
3512
|
if (backpack?.quantity < 1) {
|
|
3242
|
-
return "
|
|
3513
|
+
return "您背包内的咕咕币不足。";
|
|
3243
3514
|
}
|
|
3244
3515
|
await ctx.database.upsert("ggcevo_backpack", [{
|
|
3245
3516
|
handle,
|
|
@@ -3251,7 +3522,7 @@ ${discountDetails.join("\n▸ ")}`;
|
|
|
3251
3522
|
const [record] = await ctx.database.get("ggcevo_records", { handle });
|
|
3252
3523
|
return [
|
|
3253
3524
|
`${result ? "🎉 获得兑换券!" : "❌ 未中奖"} 保底进度:${record.pityCounter}/90`,
|
|
3254
|
-
...HiddenAward2 ? [`🎉 恭喜你抽中隐藏奖励,额外获得
|
|
3525
|
+
...HiddenAward2 ? [`🎉 恭喜你抽中隐藏奖励,额外获得1张兑换券和1枚扭蛋币!`] : []
|
|
3255
3526
|
].join("\n");
|
|
3256
3527
|
});
|
|
3257
3528
|
ctx.command("ggcevo/十连抽").action(async (argv) => {
|
|
@@ -3259,17 +3530,17 @@ ${discountDetails.join("\n▸ ")}`;
|
|
|
3259
3530
|
let hiddenWinCount = 0;
|
|
3260
3531
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
3261
3532
|
if (!profile) {
|
|
3262
|
-
return "🔒
|
|
3533
|
+
return "🔒 需要先绑定游戏句柄。";
|
|
3263
3534
|
}
|
|
3264
3535
|
const { regionId, realmId, profileId } = profile;
|
|
3265
3536
|
const handle = `${regionId}-S2-${realmId}-${profileId}`;
|
|
3266
3537
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
3267
3538
|
if (existingEntries.length > 0) {
|
|
3268
|
-
return `⛔
|
|
3539
|
+
return `⛔ 您已被列入黑名单。`;
|
|
3269
3540
|
}
|
|
3270
3541
|
const [backpack] = await ctx.database.get("ggcevo_backpack", { handle, itemId: 1 });
|
|
3271
3542
|
if (backpack?.quantity < 10) {
|
|
3272
|
-
return "
|
|
3543
|
+
return "您背包内的咕咕币不足。";
|
|
3273
3544
|
}
|
|
3274
3545
|
await ctx.database.upsert("ggcevo_backpack", [{
|
|
3275
3546
|
handle,
|
|
@@ -3287,13 +3558,13 @@ ${discountDetails.join("\n▸ ")}`;
|
|
|
3287
3558
|
"十连抽结果:",
|
|
3288
3559
|
...results.map((r) => r ? "🎉 获得兑换券" : "❌ 未中奖"),
|
|
3289
3560
|
`保底进度:${record.pityCounter}/90`,
|
|
3290
|
-
...hiddenWinCount > 0 ? [`🎉
|
|
3561
|
+
...hiddenWinCount > 0 ? [`🎉 恭喜你抽中隐藏奖励,额外获得${hiddenWinCount}张兑换券和${hiddenWinCount}枚扭蛋币!`] : []
|
|
3291
3562
|
].join("\n");
|
|
3292
3563
|
});
|
|
3293
3564
|
ctx.command("ggcevo/背包").action(async (argv) => {
|
|
3294
3565
|
const session = argv.session;
|
|
3295
3566
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
3296
|
-
if (!profile) return "🔒
|
|
3567
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
3297
3568
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
3298
3569
|
const items = await ctx.database.get("ggcevo_backpack", { handle });
|
|
3299
3570
|
const validItems = items.filter((item) => item.quantity > 0);
|
|
@@ -3314,11 +3585,11 @@ ${itemDetails.join("\n")}`;
|
|
|
3314
3585
|
const session = argv.session;
|
|
3315
3586
|
let latestTime;
|
|
3316
3587
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
3317
|
-
if (!profile) return "🔒
|
|
3588
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
3318
3589
|
const { regionId, realmId, profileId } = profile;
|
|
3319
3590
|
const handle = `${regionId}-S2-${realmId}-${profileId}`;
|
|
3320
3591
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
3321
|
-
if (existingEntries.length > 0) return "⛔
|
|
3592
|
+
if (existingEntries.length > 0) return "⛔ 您已被列入黑名单。";
|
|
3322
3593
|
const now = /* @__PURE__ */ new Date();
|
|
3323
3594
|
const currentChinaTime = convertUTCtoChinaTime(now);
|
|
3324
3595
|
if (config.signrequire) {
|
|
@@ -3380,7 +3651,7 @@ ${itemDetails.join("\n")}`;
|
|
|
3380
3651
|
const [careerData] = await ctx.database.get("ggcevo_careers", { handle });
|
|
3381
3652
|
if (careerData?.group === "人类联盟") {
|
|
3382
3653
|
totalBonus += 0.2;
|
|
3383
|
-
messages.push("🏛️
|
|
3654
|
+
messages.push("🏛️ 人类联盟:+20%金币");
|
|
3384
3655
|
const [userMiningTech] = await ctx.database.get("ggcevo_tech", { handle, techId: 1 }).catch(() => [{ level: 0 }]);
|
|
3385
3656
|
const techLevel = Math.min(userMiningTech?.level || 0, 5);
|
|
3386
3657
|
const miningTechConfig = Spacestationtechnology.find((t) => t.techId === 1);
|
|
@@ -3395,22 +3666,22 @@ ${itemDetails.join("\n")}`;
|
|
|
3395
3666
|
const finalBonus = Math.max(baseTechBonus, careerTechBonus);
|
|
3396
3667
|
if (finalBonus > 0) {
|
|
3397
3668
|
totalBonus += finalBonus / 100;
|
|
3398
|
-
messages.push(`⚙️ 采掘系统 Lv${techLevel}
|
|
3669
|
+
messages.push(`⚙️ 采掘系统 Lv${techLevel}:+${finalBonus}%金币`);
|
|
3399
3670
|
}
|
|
3400
3671
|
}
|
|
3401
3672
|
if (careerData.career === "深空矿工") {
|
|
3402
3673
|
totalBonus += 0.5;
|
|
3403
|
-
messages.push("
|
|
3674
|
+
messages.push("🎖️ 深空矿工:+50%金币");
|
|
3404
3675
|
}
|
|
3405
3676
|
}
|
|
3406
3677
|
if (careerData?.group === "辛迪加海盗") {
|
|
3407
3678
|
const [cred17Item] = await ctx.database.get("ggcevo_warehouse", { handle, itemId: 3 });
|
|
3408
3679
|
if (cred17Item?.quantity >= 1) {
|
|
3409
|
-
const
|
|
3410
|
-
const
|
|
3411
|
-
const credBonus = 0.5 +
|
|
3680
|
+
const humanPlayersCount = await ctx.database.select("ggcevo_careers").where({ group: "人类联盟" }).execute((row) => import_koishi.$.count(row.handle));
|
|
3681
|
+
const additionalBonus = Math.min(humanPlayersCount, 50);
|
|
3682
|
+
const credBonus = 0.5 + additionalBonus / 100;
|
|
3412
3683
|
totalBonus += credBonus;
|
|
3413
|
-
messages.push(`💎 CRED-17
|
|
3684
|
+
messages.push(`💎 CRED-17:+50%金币 (${additionalBonus}名人类联盟玩家,额外+${additionalBonus}%金币)`);
|
|
3414
3685
|
}
|
|
3415
3686
|
}
|
|
3416
3687
|
const [meowEffect] = await ctx.database.get("ggcevo_Wish_Record", {
|
|
@@ -3423,7 +3694,7 @@ ${itemDetails.join("\n")}`;
|
|
|
3423
3694
|
if (meowEffect) {
|
|
3424
3695
|
tickets *= 2;
|
|
3425
3696
|
totalBonus += 1;
|
|
3426
|
-
messages.push("🐾
|
|
3697
|
+
messages.push("🐾 喵喵财源:咕咕币+100%,金币+100%");
|
|
3427
3698
|
}
|
|
3428
3699
|
const finalPoints = Math.round(basePoints * (1 + totalBonus));
|
|
3429
3700
|
let redCrystal = 0;
|
|
@@ -3439,7 +3710,7 @@ ${itemDetails.join("\n")}`;
|
|
|
3439
3710
|
} else {
|
|
3440
3711
|
redCrystal = 5;
|
|
3441
3712
|
}
|
|
3442
|
-
messages.push(
|
|
3713
|
+
messages.push(`🎖️ 辛迪加财务经理:+${redCrystal}枚红晶`);
|
|
3443
3714
|
}
|
|
3444
3715
|
await ctx.database.withTransaction(async () => {
|
|
3445
3716
|
await ctx.database.upsert("ggcevo_sign", [{
|
|
@@ -3476,11 +3747,11 @@ ${itemDetails.join("\n")}`;
|
|
|
3476
3747
|
try {
|
|
3477
3748
|
const session = argv.session;
|
|
3478
3749
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
3479
|
-
if (!profile) return "🔒
|
|
3750
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
3480
3751
|
const { regionId, realmId, profileId } = profile;
|
|
3481
3752
|
const handle = `${regionId}-S2-${realmId}-${profileId}`;
|
|
3482
3753
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
3483
|
-
if (existingEntries.length > 0) return "⛔
|
|
3754
|
+
if (existingEntries.length > 0) return "⛔ 您已被列入黑名单。";
|
|
3484
3755
|
const [record] = await ctx.database.get("ggcevo_sign", { handle });
|
|
3485
3756
|
if (!record) return "暂未查询到您的签到记录";
|
|
3486
3757
|
const lastSignChina = convertUTCtoChinaTime(record.lastSign);
|
|
@@ -3495,7 +3766,7 @@ ${itemDetails.join("\n")}`;
|
|
|
3495
3766
|
}
|
|
3496
3767
|
const costPoints = 100;
|
|
3497
3768
|
if (record.totalRewards < costPoints) {
|
|
3498
|
-
return `补签需要消耗${costPoints}
|
|
3769
|
+
return `补签需要消耗${costPoints}枚金币,您当前拥有:${record.totalRewards}枚金币`;
|
|
3499
3770
|
}
|
|
3500
3771
|
const newMonthlyDays = record.monthlyDays + 1;
|
|
3501
3772
|
let tickets = 3, points = 0;
|
|
@@ -3521,7 +3792,7 @@ ${itemDetails.join("\n")}`;
|
|
|
3521
3792
|
await ctx.database.set("ggcevo_backpack", { handle, itemId: 1 }, {
|
|
3522
3793
|
quantity: (backpack?.quantity || 0) + tickets
|
|
3523
3794
|
});
|
|
3524
|
-
const rewardsMessage = points > 0 ? `获得${points}枚金币和${tickets}
|
|
3795
|
+
const rewardsMessage = points > 0 ? `获得${points}枚金币和${tickets}枚咕咕币。` : `获得${tickets}枚咕咕币。`;
|
|
3525
3796
|
return `补签成功!本月累计签到${newMonthlyDays}天,消耗${costPoints}枚金币,${rewardsMessage}`;
|
|
3526
3797
|
} catch (error) {
|
|
3527
3798
|
console.error("补签错误:", error);
|
|
@@ -3531,13 +3802,13 @@ ${itemDetails.join("\n")}`;
|
|
|
3531
3802
|
ctx.guild().command("ggcevo/每月津贴").action(async (argv) => {
|
|
3532
3803
|
const session = argv.session;
|
|
3533
3804
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
3534
|
-
if (!profile) return "🔒
|
|
3805
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
3535
3806
|
const { regionId, realmId, profileId } = profile;
|
|
3536
3807
|
const handle = `${regionId}-S2-${realmId}-${profileId}`;
|
|
3537
3808
|
const [backpack] = await ctx.database.get("ggcevo_backpack", { handle, itemId: 1 });
|
|
3538
3809
|
const memberInfo = await session.event?.member?.roles;
|
|
3539
3810
|
if (memberInfo?.includes("member")) {
|
|
3540
|
-
return "❌
|
|
3811
|
+
return "❌ 仅限管理员和群主领取每月津贴。";
|
|
3541
3812
|
}
|
|
3542
3813
|
const now = /* @__PURE__ */ new Date();
|
|
3543
3814
|
const chinatime = convertUTCtoChinaTime(now);
|
|
@@ -3551,7 +3822,7 @@ ${itemDetails.join("\n")}`;
|
|
|
3551
3822
|
const lastYear = lastSignTime.getUTCFullYear();
|
|
3552
3823
|
const lastMonth = lastSignTime.getUTCMonth();
|
|
3553
3824
|
if (lastYear === currentYear && lastMonth === currentMonth) {
|
|
3554
|
-
return `您的本月管理津贴已领取,${currentMonth + 2}月1
|
|
3825
|
+
return `您的本月管理津贴已领取,${currentMonth + 2}月1日后可再次领取。`;
|
|
3555
3826
|
}
|
|
3556
3827
|
}
|
|
3557
3828
|
await ctx.database.upsert("ggcevo_adminbenefit", [{
|
|
@@ -3566,15 +3837,15 @@ ${itemDetails.join("\n")}`;
|
|
|
3566
3837
|
itemId: 1,
|
|
3567
3838
|
quantity: (backpack?.quantity || 0) + 50
|
|
3568
3839
|
}]);
|
|
3569
|
-
return `[管理专属]
|
|
3840
|
+
return `[管理专属] 您成功领取本月津贴,获得了50枚咕咕币!`;
|
|
3570
3841
|
});
|
|
3571
3842
|
ctx.command("ggcevo/领取 [name]").action(async (argv, name2) => {
|
|
3572
3843
|
const session = argv.session;
|
|
3573
3844
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
3574
|
-
if (!profile) return "🔒
|
|
3845
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
3575
3846
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
3576
3847
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
3577
|
-
if (existingEntries.length > 0) return "⛔
|
|
3848
|
+
if (existingEntries.length > 0) return "⛔ 您已被列入黑名单。";
|
|
3578
3849
|
if (!name2) {
|
|
3579
3850
|
await session.send("请在30秒内输入活动名称:");
|
|
3580
3851
|
name2 = await session.prompt(3e4);
|
|
@@ -3655,7 +3926,7 @@ ${itemDetails.join("\n")}`;
|
|
|
3655
3926
|
});
|
|
3656
3927
|
ctx.command("ggcevo/活动列表").action(async ({ session }) => {
|
|
3657
3928
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
3658
|
-
if (!profile) return "🔒
|
|
3929
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
3659
3930
|
const activities = await ctx.database.get(
|
|
3660
3931
|
"ggcevo_activity",
|
|
3661
3932
|
{ status: "进行中" },
|
|
@@ -3821,7 +4092,7 @@ ${itemDetails.join("\n")}`;
|
|
|
3821
4092
|
});
|
|
3822
4093
|
ctx.command("ggcevo/胜点榜 [page]").usage("输入 胜点榜 [页码] 查看对应页的排行榜,每页10条").action(async ({ session }, page) => {
|
|
3823
4094
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
3824
|
-
if (!profile) return "🔒
|
|
4095
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
3825
4096
|
const pageNum = parseInt(page) || 1;
|
|
3826
4097
|
if (pageNum < 1) return "请输入有效的页码。";
|
|
3827
4098
|
const offset = (pageNum - 1) * 10;
|
|
@@ -3830,7 +4101,7 @@ ${itemDetails.join("\n")}`;
|
|
|
3830
4101
|
ctx.database.select("ggcevo_rank").where({ Blacklist: false, rankseason: config.rankseason }).execute((row) => import_koishi.$.count(row.handle))
|
|
3831
4102
|
]);
|
|
3832
4103
|
const totalPages = Math.ceil(total / 10);
|
|
3833
|
-
if (pageNum > totalPages) return
|
|
4104
|
+
if (pageNum > totalPages) return `查询失败,最多有${totalPages}页`;
|
|
3834
4105
|
const processedRecords = await Promise.all(
|
|
3835
4106
|
records.map(async (item) => ({
|
|
3836
4107
|
...item,
|
|
@@ -3993,7 +4264,7 @@ ${itemDetails.join("\n")}`;
|
|
|
3993
4264
|
if (!player) {
|
|
3994
4265
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
3995
4266
|
if (!profile) {
|
|
3996
|
-
return "🔒
|
|
4267
|
+
return "🔒 需要先绑定游戏句柄。";
|
|
3997
4268
|
}
|
|
3998
4269
|
const { regionId, realmId, profileId } = profile;
|
|
3999
4270
|
const handle = `${regionId}-S2-${realmId}-${profileId}`;
|
|
@@ -4009,7 +4280,7 @@ ${itemDetails.join("\n")}`;
|
|
|
4009
4280
|
) + 1;
|
|
4010
4281
|
const isSafe = await checkSensitiveWord(user.name);
|
|
4011
4282
|
const displayName = isSafe ? user.name : (user.name[0] || "") + "***";
|
|
4012
|
-
return `🎮
|
|
4283
|
+
return `🎮 咕咕排名信息 🎮
|
|
4013
4284
|
------------------------------
|
|
4014
4285
|
昵称:${displayName}
|
|
4015
4286
|
句柄:${user.handle}
|
|
@@ -4043,7 +4314,7 @@ ${itemDetails.join("\n")}`;
|
|
|
4043
4314
|
) + 1;
|
|
4044
4315
|
const isSafe = await checkSensitiveWord(user.name);
|
|
4045
4316
|
const displayName = isSafe ? user.name : (user.name[0] || "") + "***";
|
|
4046
|
-
return `🎮
|
|
4317
|
+
return `🎮 咕咕排名信息 🎮
|
|
4047
4318
|
------------------------------
|
|
4048
4319
|
昵称:${displayName}
|
|
4049
4320
|
句柄:${user.handle}
|
|
@@ -4069,7 +4340,7 @@ ${itemDetails.join("\n")}`;
|
|
|
4069
4340
|
lastSign: signData?.lastSign || /* @__PURE__ */ new Date(0),
|
|
4070
4341
|
monthlyDays: signData?.monthlyDays || 0
|
|
4071
4342
|
}]);
|
|
4072
|
-
return
|
|
4343
|
+
return `✅ 成功为 ${handle} 添加 ${parsedAmount} 金币!用户当前总数:${newTotal}`;
|
|
4073
4344
|
} else if (itemName === "红晶") {
|
|
4074
4345
|
const [careerData] = await ctx.database.get("ggcevo_careers", { handle });
|
|
4075
4346
|
const currentRed = careerData?.redcrystal || 0;
|
|
@@ -4081,7 +4352,7 @@ ${itemDetails.join("\n")}`;
|
|
|
4081
4352
|
career: careerData?.career || "",
|
|
4082
4353
|
date: careerData?.date || /* @__PURE__ */ new Date()
|
|
4083
4354
|
}]);
|
|
4084
|
-
return
|
|
4355
|
+
return `✅ 成功为 ${handle} 添加 ${parsedAmount} 红晶!用户当前总数:${newRed}`;
|
|
4085
4356
|
} else {
|
|
4086
4357
|
const validItems = Object.keys(initDefaultItems);
|
|
4087
4358
|
if (!validItems.includes(itemName)) {
|
|
@@ -4095,7 +4366,7 @@ ${itemDetails.join("\n")}`;
|
|
|
4095
4366
|
itemId,
|
|
4096
4367
|
quantity: newQuantity
|
|
4097
4368
|
}], ["handle", "itemId"]);
|
|
4098
|
-
return
|
|
4369
|
+
return `✅ 成功为 ${handle} 添加 ${parsedAmount} 个${itemName}!用户当前总数:${newQuantity}`;
|
|
4099
4370
|
}
|
|
4100
4371
|
} catch (err) {
|
|
4101
4372
|
console.error("[给予命令错误]", err);
|
|
@@ -4109,7 +4380,7 @@ ${itemDetails.join("\n")}`;
|
|
|
4109
4380
|
let handle;
|
|
4110
4381
|
if (!user) {
|
|
4111
4382
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
4112
|
-
if (!profile) return "🔒
|
|
4383
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
4113
4384
|
handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
4114
4385
|
} else {
|
|
4115
4386
|
const parsedUser = import_koishi.h.parse(user)[0];
|
|
@@ -4158,11 +4429,11 @@ ${itemDetails.join("\n")}`;
|
|
|
4158
4429
|
ctx.command("ggcevo/兑换", "兑换物品").action(async ({ session }) => {
|
|
4159
4430
|
try {
|
|
4160
4431
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
4161
|
-
if (!profile) return "🔒
|
|
4432
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
4162
4433
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
4163
4434
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
4164
4435
|
if (existingEntries.length > 0) {
|
|
4165
|
-
return `⛔
|
|
4436
|
+
return `⛔ 您已被列入黑名单。`;
|
|
4166
4437
|
}
|
|
4167
4438
|
const currentSeason = config.rankseason;
|
|
4168
4439
|
const qualityGroups = {};
|
|
@@ -4243,7 +4514,7 @@ ${items.join("、")}
|
|
|
4243
4514
|
}
|
|
4244
4515
|
const [coupon] = await ctx.database.get("ggcevo_backpack", { handle, itemId });
|
|
4245
4516
|
if (!coupon || coupon.quantity < cost) {
|
|
4246
|
-
const requireMsg = petItems.has(name2) ? `需要1个${configname.quality}
|
|
4517
|
+
const requireMsg = petItems.has(name2) ? `需要1个${configname.quality}级宠物扭蛋或${configname.cost}张兑奖券` : `需要${configname.cost}张兑奖券`;
|
|
4247
4518
|
return `${requireMsg}
|
|
4248
4519
|
您当前持有:${coupon?.quantity || 0}个${couponName}`;
|
|
4249
4520
|
}
|
|
@@ -4266,7 +4537,7 @@ ${items.join("、")}
|
|
|
4266
4537
|
season: currentSeason
|
|
4267
4538
|
});
|
|
4268
4539
|
});
|
|
4269
|
-
return `🎉
|
|
4540
|
+
return `🎉 恭喜!您使用${cost}个${couponName}兑换了【${name2}】`;
|
|
4270
4541
|
} catch (error) {
|
|
4271
4542
|
console.error("兑换失败:", error);
|
|
4272
4543
|
return "兑换失败";
|
|
@@ -4274,11 +4545,11 @@ ${items.join("、")}
|
|
|
4274
4545
|
});
|
|
4275
4546
|
ctx.command("ggcevo/兑换扭蛋币").action(async ({ session }) => {
|
|
4276
4547
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
4277
|
-
if (!profile) return "🔒
|
|
4548
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
4278
4549
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
4279
4550
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
4280
4551
|
if (existingEntries.length > 0) {
|
|
4281
|
-
return `⛔
|
|
4552
|
+
return `⛔ 您已被列入黑名单。`;
|
|
4282
4553
|
}
|
|
4283
4554
|
await session.send(`您确定要使用3张兑换券换取一枚扭蛋币吗?(请在30秒内回复“是”确认)`);
|
|
4284
4555
|
const confirm = await session.prompt(3e4);
|
|
@@ -4286,7 +4557,7 @@ ${items.join("、")}
|
|
|
4286
4557
|
const [backpack] = await ctx.database.get("ggcevo_backpack", { handle, itemId: 3 });
|
|
4287
4558
|
const [coupon] = await ctx.database.get("ggcevo_backpack", { handle, itemId: 2 });
|
|
4288
4559
|
if (!coupon || coupon.quantity < 3) {
|
|
4289
|
-
return `兑换扭蛋币需要3张兑奖券,您当前持有:${coupon?.quantity || 0}
|
|
4560
|
+
return `兑换扭蛋币需要3张兑奖券,您当前持有:${coupon?.quantity || 0}张兑换券`;
|
|
4290
4561
|
}
|
|
4291
4562
|
await ctx.database.set(
|
|
4292
4563
|
"ggcevo_backpack",
|
|
@@ -4298,23 +4569,23 @@ ${items.join("、")}
|
|
|
4298
4569
|
itemId: 3,
|
|
4299
4570
|
quantity: (backpack?.quantity || 0) + 1
|
|
4300
4571
|
}]);
|
|
4301
|
-
return `🎉恭喜!您使用
|
|
4572
|
+
return `🎉恭喜!您使用3张兑奖券兑换了1枚扭蛋币`;
|
|
4302
4573
|
});
|
|
4303
4574
|
ctx.command("ggcevo/扭蛋").action(async (argv) => {
|
|
4304
4575
|
const session = argv.session;
|
|
4305
4576
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
4306
4577
|
if (!profile) {
|
|
4307
|
-
return "🔒
|
|
4578
|
+
return "🔒 需要先绑定游戏句柄。";
|
|
4308
4579
|
}
|
|
4309
4580
|
const { regionId, realmId, profileId } = profile;
|
|
4310
4581
|
const handle = `${regionId}-S2-${realmId}-${profileId}`;
|
|
4311
4582
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
4312
4583
|
if (existingEntries.length > 0) {
|
|
4313
|
-
return `⛔
|
|
4584
|
+
return `⛔ 您已被列入黑名单。`;
|
|
4314
4585
|
}
|
|
4315
4586
|
const [backpack] = await ctx.database.get("ggcevo_backpack", { handle, itemId: 3 });
|
|
4316
4587
|
if (!backpack || backpack.quantity < 1) {
|
|
4317
|
-
return
|
|
4588
|
+
return `当前扭蛋币不足,您当前拥有:${backpack?.quantity || 0}枚扭蛋币`;
|
|
4318
4589
|
}
|
|
4319
4590
|
const awardName = PetCapsuleToy();
|
|
4320
4591
|
const awardItem = Object.entries(initDefaultItems).find(
|
|
@@ -4336,7 +4607,7 @@ ${items.join("、")}
|
|
|
4336
4607
|
itemId: itemData.id,
|
|
4337
4608
|
quantity: currentQuantity + 1
|
|
4338
4609
|
}]);
|
|
4339
|
-
return `🎉
|
|
4610
|
+
return `🎉 恭喜!您获得了${itemName}`;
|
|
4340
4611
|
});
|
|
4341
4612
|
ctx.command("ggcevo/拉黑 [handle]", "添加用户到黑名单").action(async (argv, handle) => {
|
|
4342
4613
|
const session = argv.session;
|
|
@@ -4401,7 +4672,7 @@ ${items.join("、")}
|
|
|
4401
4672
|
const session = argv.session;
|
|
4402
4673
|
const output = [];
|
|
4403
4674
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
4404
|
-
if (!profile) return "🔒
|
|
4675
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
4405
4676
|
const { regionId, realmId, profileId } = profile;
|
|
4406
4677
|
const handle = `${regionId}-S2-${realmId}-${profileId}`;
|
|
4407
4678
|
output.push(`🎮 游戏句柄:${handle}
|
|
@@ -4459,7 +4730,7 @@ ${items.join("、")}
|
|
|
4459
4730
|
lottery && "抽奖",
|
|
4460
4731
|
exchanges.length && "兑换"
|
|
4461
4732
|
].filter(Boolean);
|
|
4462
|
-
output.push(`📊
|
|
4733
|
+
output.push(`📊 共查询到${existModules.length}类信息`);
|
|
4463
4734
|
return output.join("\n");
|
|
4464
4735
|
});
|
|
4465
4736
|
const processedLobbies = /* @__PURE__ */ new Set();
|
|
@@ -4534,11 +4805,11 @@ ${items.join("、")}
|
|
|
4534
4805
|
try {
|
|
4535
4806
|
const session = argv.session;
|
|
4536
4807
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
4537
|
-
if (!profile) return "🔒
|
|
4808
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
4538
4809
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
4539
4810
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
4540
4811
|
if (existingEntries.length > 0) {
|
|
4541
|
-
return `⛔
|
|
4812
|
+
return `⛔ 您已被列入黑名单。`;
|
|
4542
4813
|
}
|
|
4543
4814
|
if (!user) return "请输入“pk @玩家”。";
|
|
4544
4815
|
const parsedUser = import_koishi.h.parse(user)[0];
|
|
@@ -4589,7 +4860,7 @@ ${items.join("、")}
|
|
|
4589
4860
|
const hasProtection = diffInDays < 30;
|
|
4590
4861
|
const isPKDisabled = targetPKRecord && !targetPKRecord.enable;
|
|
4591
4862
|
if ((isNewPlayer || isPKDisabled) && hasProtection) {
|
|
4592
|
-
return `🛡️
|
|
4863
|
+
return `🛡️ 该玩家是人类联盟成员,当前处于30天保护期内(剩余${30 - diffInDays}天),无法PK`;
|
|
4593
4864
|
}
|
|
4594
4865
|
}
|
|
4595
4866
|
let initiatorPK;
|
|
@@ -4783,23 +5054,23 @@ ${items.join("、")}
|
|
|
4783
5054
|
`🎰 金币变动:${stealPercentage}%`
|
|
4784
5055
|
];
|
|
4785
5056
|
if (targetCareer.group === "人类联盟" && isWin) {
|
|
4786
|
-
result.push(`🛡️
|
|
5057
|
+
result.push(`🛡️ 人类联盟:应战者PK失败时仅损失1%的金币`);
|
|
4787
5058
|
}
|
|
4788
5059
|
if (computerExpertProtection) {
|
|
4789
|
-
result.push(`💻
|
|
5060
|
+
result.push(`💻 计算机专家:应战者PK失败时不损失金币`);
|
|
4790
5061
|
} else if (isWin) {
|
|
4791
5062
|
result.push(`💰 您从对方的口袋里抢夺了${goldTransfer}枚金币`);
|
|
4792
5063
|
} else {
|
|
4793
5064
|
result.push(`💸 您从口袋里拿出了${goldTransfer}枚金币上交给对方`);
|
|
4794
5065
|
}
|
|
4795
5066
|
if (mp3Effect) {
|
|
4796
|
-
result.push(`💿 MP3
|
|
5067
|
+
result.push(`💿 MP3播放器:挑战者PK失败时上交的金币减少50%`);
|
|
4797
5068
|
}
|
|
4798
5069
|
if (initiatorCareer?.group === "辛迪加海盗") {
|
|
4799
|
-
result.push(`🔴
|
|
5070
|
+
result.push(`🔴 辛迪加海盗:+1枚红晶`);
|
|
4800
5071
|
}
|
|
4801
5072
|
if (isWin && initiatorCareer?.career === "辛迪加财务经理") {
|
|
4802
|
-
result.push(`💰
|
|
5073
|
+
result.push(`💰 辛迪加财务经理:+1枚红晶`);
|
|
4803
5074
|
}
|
|
4804
5075
|
result.push(`📅 剩余挑战次数:${config.dailyPKLimit - (initiatorPK.todayCount + 1)}`);
|
|
4805
5076
|
return result.join("\n");
|
|
@@ -4810,7 +5081,7 @@ ${items.join("、")}
|
|
|
4810
5081
|
});
|
|
4811
5082
|
ctx.command("ggcevo/pk榜 [page]", "查看玩家PK排行榜").usage("输入 pk榜 [页码] 查看对应页的排行榜,每页10条").action(async ({ session }, page) => {
|
|
4812
5083
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
4813
|
-
if (!profile) return "🔒
|
|
5084
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
4814
5085
|
const pageNum = parseInt(page) || 1;
|
|
4815
5086
|
if (pageNum < 1) return "请输入有效的页码。";
|
|
4816
5087
|
const offset = (pageNum - 1) * 10;
|
|
@@ -4860,14 +5131,14 @@ ${items.join("、")}
|
|
|
4860
5131
|
const careerDiscount = isCareerMatch ? CAREER_DISCOUNTS[techLevel - 1] : 0;
|
|
4861
5132
|
techDiscount = Math.max(baseDiscount, careerDiscount);
|
|
4862
5133
|
if (techDiscount > 0) {
|
|
4863
|
-
discountDetails.push(`⚙️ 武器系统 Lv${techLevel}:${techDiscount}
|
|
5134
|
+
discountDetails.push(`⚙️ 武器系统 Lv${techLevel}:${techDiscount}%折扣`);
|
|
4864
5135
|
}
|
|
4865
5136
|
}
|
|
4866
5137
|
}
|
|
4867
5138
|
let weaponSpecialistDiscount = 0;
|
|
4868
5139
|
if (careerData?.career === "武器中士") {
|
|
4869
5140
|
weaponSpecialistDiscount = 20;
|
|
4870
|
-
discountDetails.push(`🎖️ 武器中士:20
|
|
5141
|
+
discountDetails.push(`🎖️ 武器中士:20%折扣`);
|
|
4871
5142
|
}
|
|
4872
5143
|
const activeWish = await ctx.database.get("ggcevo_Wish_Record", {
|
|
4873
5144
|
handle,
|
|
@@ -4878,7 +5149,7 @@ ${items.join("、")}
|
|
|
4878
5149
|
}).then((records) => records[0]);
|
|
4879
5150
|
let grasshopperDiscount = activeWish ? 20 : 0;
|
|
4880
5151
|
if (grasshopperDiscount > 0) {
|
|
4881
|
-
discountDetails.push(`🦗 蚱蜢优购:${grasshopperDiscount}
|
|
5152
|
+
discountDetails.push(`🦗 蚱蜢优购:${grasshopperDiscount}%折扣`);
|
|
4882
5153
|
}
|
|
4883
5154
|
let totalDiscount = techDiscount + weaponSpecialistDiscount + grasshopperDiscount;
|
|
4884
5155
|
totalDiscount = Math.min(totalDiscount, 100);
|
|
@@ -4970,10 +5241,10 @@ ${validTypes.join("、")}`;
|
|
|
4970
5241
|
});
|
|
4971
5242
|
ctx.command("ggcevo/购买 <item>").action(async ({ session }, item) => {
|
|
4972
5243
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
4973
|
-
if (!profile) return "🔒
|
|
5244
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
4974
5245
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
4975
5246
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
4976
|
-
if (existingEntries.length > 0) return "⛔
|
|
5247
|
+
if (existingEntries.length > 0) return "⛔ 您已被列入黑名单。";
|
|
4977
5248
|
const allItems = { ...weaponConfig, ...SyndicatedItems };
|
|
4978
5249
|
if (!item) return "请输入“购买 物品名称”来购买所需物品。";
|
|
4979
5250
|
const config2 = allItems[item];
|
|
@@ -5032,7 +5303,7 @@ ${validTypes.join("、")}`;
|
|
|
5032
5303
|
if ((signInfo?.totalRewards || 0) < actualPrice) {
|
|
5033
5304
|
let priceInfo = `需要 ${actualPrice} 金币`;
|
|
5034
5305
|
if (discountDetails.length > 0) {
|
|
5035
|
-
priceInfo += `(
|
|
5306
|
+
priceInfo += `(原价${config2.price})`;
|
|
5036
5307
|
}
|
|
5037
5308
|
return `❌ 金币不足,${priceInfo}`;
|
|
5038
5309
|
}
|
|
@@ -5079,7 +5350,7 @@ ${validTypes.join("、")}`;
|
|
|
5079
5350
|
`;
|
|
5080
5351
|
message += `花费 ${actualPrice} 金币`;
|
|
5081
5352
|
if (discountDetails.length > 0) {
|
|
5082
|
-
message += `(
|
|
5353
|
+
message += `(原价${config2.price} 金币)
|
|
5083
5354
|
折扣明细:
|
|
5084
5355
|
▸ ${discountDetails.join("\n▸ ")}`;
|
|
5085
5356
|
}
|
|
@@ -5097,7 +5368,7 @@ ${validTypes.join("、")}`;
|
|
|
5097
5368
|
});
|
|
5098
5369
|
ctx.command("ggcevo/武器仓库").action(async ({ session }) => {
|
|
5099
5370
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
5100
|
-
if (!profile) return "🔒
|
|
5371
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
5101
5372
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
5102
5373
|
const weapons = await ctx.database.get("ggcevo_equipment", {
|
|
5103
5374
|
handle
|
|
@@ -5129,11 +5400,11 @@ ${validTypes.join("、")}`;
|
|
|
5129
5400
|
});
|
|
5130
5401
|
ctx.command("ggcevo/装备 <weapon>").action(async ({ session }, weapon) => {
|
|
5131
5402
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
5132
|
-
if (!profile) return "🔒
|
|
5403
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
5133
5404
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
5134
5405
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
5135
5406
|
if (existingEntries.length > 0) {
|
|
5136
|
-
return `⛔
|
|
5407
|
+
return `⛔ 您已被列入黑名单。`;
|
|
5137
5408
|
}
|
|
5138
5409
|
if (!weapon) return "请输入“装备 武器名称”来装备一把你拥有的武器。";
|
|
5139
5410
|
if (!weaponConfig[weapon]) return "武器名称错误,请输入“装备 武器名称”来装备一把你拥有的武器。";
|
|
@@ -5163,10 +5434,10 @@ ${validTypes.join("、")}`;
|
|
|
5163
5434
|
});
|
|
5164
5435
|
ctx.command("ggcevo/升级 <target>", "升级武器或科技").action(async ({ session }, target) => {
|
|
5165
5436
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
5166
|
-
if (!profile) return "🔒
|
|
5437
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
5167
5438
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
5168
5439
|
if ((await ctx.database.get("ggcevo_blacklist", { handle })).length) {
|
|
5169
|
-
return "⛔
|
|
5440
|
+
return "⛔ 您已被列入黑名单。";
|
|
5170
5441
|
}
|
|
5171
5442
|
if (!target) {
|
|
5172
5443
|
return generateUpgradePriceList(handle);
|
|
@@ -5184,10 +5455,10 @@ ${validTypes.join("、")}`;
|
|
|
5184
5455
|
});
|
|
5185
5456
|
ctx.command("ggcevo/改装 <weapon> [mod]", "安装武器模块").action(async ({ session }, weapon, mod) => {
|
|
5186
5457
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
5187
|
-
if (!profile) return "🔒
|
|
5458
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
5188
5459
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
5189
5460
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
5190
|
-
if (existingEntries.length > 0) return "⛔
|
|
5461
|
+
if (existingEntries.length > 0) return "⛔ 您已被列入黑名单。";
|
|
5191
5462
|
const isValidWeapon = weapon && weaponConfig[weapon]?.id !== void 0;
|
|
5192
5463
|
const processModInstallation = /* @__PURE__ */ __name(async () => {
|
|
5193
5464
|
const modInfo = modConfig[mod];
|
|
@@ -5311,10 +5582,10 @@ ${validTypes.join("、")}`;
|
|
|
5311
5582
|
});
|
|
5312
5583
|
ctx.command("ggcevo/拆卸 <weapon> <mod>", "卸载武器模块,专属模块返还50%金币,通用模块返还80%金币").action(async ({ session }, weapon, mod) => {
|
|
5313
5584
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
5314
|
-
if (!profile) return "🔒
|
|
5585
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
5315
5586
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
5316
5587
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
5317
|
-
if (existingEntries.length > 0) return "⛔
|
|
5588
|
+
if (existingEntries.length > 0) return "⛔ 您已被列入黑名单。";
|
|
5318
5589
|
const weaponId = weaponConfig[weapon]?.id;
|
|
5319
5590
|
if (!weaponId) return "❌ 请输入“拆卸 武器名称 模块名称”\n注意:专属模块返还50%金币,通用模块返还80%金币";
|
|
5320
5591
|
const modInfo = modConfig[mod];
|
|
@@ -5356,10 +5627,10 @@ ${validTypes.join("、")}`;
|
|
|
5356
5627
|
let scatterBroadcast = null;
|
|
5357
5628
|
let cleanerRewardBroadcast = null;
|
|
5358
5629
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
5359
|
-
if (!profile) return "🔒
|
|
5630
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
5360
5631
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
5361
5632
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
5362
|
-
if (existingEntries.length > 0) return "⛔
|
|
5633
|
+
if (existingEntries.length > 0) return "⛔ 您已被列入黑名单。";
|
|
5363
5634
|
const getActiveBossNames = /* @__PURE__ */ __name(async () => {
|
|
5364
5635
|
const activeBosses2 = await ctx.database.get("ggcevo_boss", { isActive: true });
|
|
5365
5636
|
return activeBosses2.map((b) => b.name).join(",");
|
|
@@ -5522,12 +5793,14 @@ ${validTypes.join("、")}`;
|
|
|
5522
5793
|
"🏆 伤害排行榜奖励:",
|
|
5523
5794
|
...rewardMessages
|
|
5524
5795
|
];
|
|
5525
|
-
|
|
5526
|
-
|
|
5527
|
-
|
|
5528
|
-
|
|
5529
|
-
|
|
5530
|
-
|
|
5796
|
+
if (!(equippedWeapon.installedMods?.includes("光束曲射晶片") && weaponName === "碎骨步枪") && !(weaponName === "中子步枪")) {
|
|
5797
|
+
cleanerRewardBroadcast = await getCleanerRewardBroadcast(
|
|
5798
|
+
ctx,
|
|
5799
|
+
targetBoss,
|
|
5800
|
+
handle,
|
|
5801
|
+
session.username
|
|
5802
|
+
);
|
|
5803
|
+
}
|
|
5531
5804
|
} else {
|
|
5532
5805
|
await ctx.database.set(
|
|
5533
5806
|
"ggcevo_boss",
|
|
@@ -5573,12 +5846,14 @@ ${validTypes.join("、")}`;
|
|
|
5573
5846
|
}
|
|
5574
5847
|
}
|
|
5575
5848
|
bossEventBroadcast = broadcastMessages2;
|
|
5576
|
-
|
|
5577
|
-
|
|
5578
|
-
|
|
5579
|
-
|
|
5580
|
-
|
|
5581
|
-
|
|
5849
|
+
if (!(equippedWeapon.installedMods?.includes("光束曲射晶片") && weaponName === "碎骨步枪") && !(weaponName === "中子步枪")) {
|
|
5850
|
+
cleanerRewardBroadcast = await getCleanerRewardBroadcast(
|
|
5851
|
+
ctx,
|
|
5852
|
+
targetBoss,
|
|
5853
|
+
handle,
|
|
5854
|
+
session.username
|
|
5855
|
+
);
|
|
5856
|
+
}
|
|
5582
5857
|
}
|
|
5583
5858
|
} else {
|
|
5584
5859
|
await ctx.database.set(
|
|
@@ -5666,17 +5941,19 @@ ${scatterEffectMessages.map((m) => `▸ ${m}`).join("\n")}`
|
|
|
5666
5941
|
isDefeated ? `🎉 恭喜,已成功击败 ${targetBoss.name}!` : ""
|
|
5667
5942
|
].filter((line) => line).join("\n");
|
|
5668
5943
|
await session.send(resultMessage);
|
|
5944
|
+
const isScatterAttack = equippedWeapon.installedMods?.includes("光束曲射晶片") && weaponName === "碎骨步枪" || weaponName === "中子步枪";
|
|
5669
5945
|
const broadcastMessages = [];
|
|
5670
5946
|
const groupId = [...config2.groupId];
|
|
5671
5947
|
if (scatterBroadcast) {
|
|
5672
5948
|
const scatterMsg = Array.isArray(scatterBroadcast) ? scatterBroadcast.join("\n") : scatterBroadcast;
|
|
5673
|
-
broadcastMessages.push(
|
|
5949
|
+
broadcastMessages.push(`✨ 散射攻击结果
|
|
5950
|
+
${scatterMsg}`);
|
|
5674
5951
|
}
|
|
5675
5952
|
if (bossEventBroadcast) {
|
|
5676
5953
|
const bossMsg = Array.isArray(bossEventBroadcast) ? bossEventBroadcast.join("\n") : bossEventBroadcast;
|
|
5677
5954
|
broadcastMessages.push(bossMsg);
|
|
5678
5955
|
}
|
|
5679
|
-
if (cleanerRewardBroadcast && cleanerRewardBroadcast.length > 0) {
|
|
5956
|
+
if (!isScatterAttack && cleanerRewardBroadcast && cleanerRewardBroadcast.length > 0) {
|
|
5680
5957
|
broadcastMessages.push(cleanerRewardBroadcast.join("\n"));
|
|
5681
5958
|
}
|
|
5682
5959
|
if (broadcastMessages.length > 0) {
|
|
@@ -5689,10 +5966,10 @@ ${scatterEffectMessages.map((m) => `▸ ${m}`).join("\n")}`
|
|
|
5689
5966
|
const parseList = /* @__PURE__ */ __name((str) => str ? str.split(",").map((s) => s.trim()).filter(Boolean) : [], "parseList");
|
|
5690
5967
|
const tags = parseList(options.tags);
|
|
5691
5968
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
5692
|
-
if (!profile) return "🔒
|
|
5969
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
5693
5970
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
5694
5971
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
5695
|
-
if (existingEntries.length > 0) return "⛔
|
|
5972
|
+
if (existingEntries.length > 0) return "⛔ 您已被列入黑名单。";
|
|
5696
5973
|
const [equippedWeapon] = await ctx.database.get("ggcevo_equipment", {
|
|
5697
5974
|
handle,
|
|
5698
5975
|
equipped: true
|
|
@@ -5772,7 +6049,7 @@ ${scatterEffectMessages.map((m) => `▸ ${m}`).join("\n")}`
|
|
|
5772
6049
|
const mainBossHpBar = createHpBar(mainBoss.HP, bossGroup.main.maxHP);
|
|
5773
6050
|
const result = [
|
|
5774
6051
|
`🔴 主宰:${mainBoss.name}`,
|
|
5775
|
-
|
|
6052
|
+
`${mainBossHpBar} (${mainBoss.HP}/${bossGroup.main.maxHP})`
|
|
5776
6053
|
];
|
|
5777
6054
|
if (bossGroup.main.energy > 0) {
|
|
5778
6055
|
result.push(`⚡ 能量:${mainBoss.energy}/1000`);
|
|
@@ -5801,8 +6078,8 @@ ${scatterEffectMessages.map((m) => `▸ ${m}`).join("\n")}`
|
|
|
5801
6078
|
const minionConfig = bossGroup.minions.find((m) => m.name === minion.name);
|
|
5802
6079
|
const minionHpBar = createHpBar(minion.HP, minionConfig?.maxHP || 1e3);
|
|
5803
6080
|
const minionInfo = [
|
|
5804
|
-
|
|
5805
|
-
|
|
6081
|
+
`❤️ ${minion.name}`,
|
|
6082
|
+
`${minionHpBar} (${minion.HP}/${minionConfig?.maxHP || "未知"})`
|
|
5806
6083
|
];
|
|
5807
6084
|
if (minionConfig && minionConfig.energy > 0) {
|
|
5808
6085
|
minionInfo.push(`⚡ 能量:${minion.energy}/1000`);
|
|
@@ -5866,11 +6143,11 @@ ${scatterEffectMessages.map((m) => `▸ ${m}`).join("\n")}`
|
|
|
5866
6143
|
ctx.command("ggcevo/祈愿").action(async (argv) => {
|
|
5867
6144
|
const session = argv.session;
|
|
5868
6145
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
5869
|
-
if (!profile) return "🔒
|
|
6146
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
5870
6147
|
const { regionId, realmId, profileId } = profile;
|
|
5871
6148
|
const handle = `${regionId}-S2-${realmId}-${profileId}`;
|
|
5872
6149
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
5873
|
-
if (existingEntries.length > 0) return "⛔
|
|
6150
|
+
if (existingEntries.length > 0) return "⛔ 您已被列入黑名单。";
|
|
5874
6151
|
const [sign] = await ctx.database.get("ggcevo_sign", { handle });
|
|
5875
6152
|
if (!sign || sign.totalRewards < 50) return "需要50金币进行祈愿,您的金币不足。";
|
|
5876
6153
|
const now = /* @__PURE__ */ new Date();
|
|
@@ -5943,12 +6220,12 @@ ${scatterEffectMessages.map((m) => `▸ ${m}`).join("\n")}`
|
|
|
5943
6220
|
});
|
|
5944
6221
|
ctx.command("ggcevo/兑换金币", "使用兑换券兑换金币").action(async ({ session }) => {
|
|
5945
6222
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
5946
|
-
if (!profile) return "🔒
|
|
6223
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
5947
6224
|
const { regionId, realmId, profileId } = profile;
|
|
5948
6225
|
const handle = `${regionId}-S2-${realmId}-${profileId}`;
|
|
5949
6226
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
5950
6227
|
if (existingEntries.length > 0) {
|
|
5951
|
-
return `⛔
|
|
6228
|
+
return `⛔ 您已被列入黑名单。`;
|
|
5952
6229
|
}
|
|
5953
6230
|
await session.send(`请输入你要使用多少张兑换券来兑换金币?(请在30秒内回复数字,回复“0”为取消兑换)
|
|
5954
6231
|
注意:1张兑换券=2000金币`);
|
|
@@ -5982,11 +6259,11 @@ ${scatterEffectMessages.map((m) => `▸ ${m}`).join("\n")}`
|
|
|
5982
6259
|
});
|
|
5983
6260
|
ctx.command("ggcevo/兑换红晶", "使用金币兑换红晶").action(async ({ session }) => {
|
|
5984
6261
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
5985
|
-
if (!profile) return "🔒
|
|
6262
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
5986
6263
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
5987
6264
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
5988
6265
|
if (existingEntries.length > 0) {
|
|
5989
|
-
return `⛔
|
|
6266
|
+
return `⛔ 您已被列入黑名单。`;
|
|
5990
6267
|
}
|
|
5991
6268
|
const [careerData] = await ctx.database.get("ggcevo_careers", { handle });
|
|
5992
6269
|
if (!careerData || careerData.group !== "辛迪加海盗") {
|
|
@@ -6022,12 +6299,12 @@ ${scatterEffectMessages.map((m) => `▸ ${m}`).join("\n")}`
|
|
|
6022
6299
|
});
|
|
6023
6300
|
ctx.command("ggcevo/加入 <faction>", "加入阵营").alias("加入阵营").action(async ({ session }, faction) => {
|
|
6024
6301
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
6025
|
-
if (!profile) return "🔒
|
|
6302
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
6026
6303
|
const { regionId, realmId, profileId } = profile;
|
|
6027
6304
|
const handle = `${regionId}-S2-${realmId}-${profileId}`;
|
|
6028
6305
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
6029
6306
|
if (existingEntries.length > 0) {
|
|
6030
|
-
return `⛔
|
|
6307
|
+
return `⛔ 您已被列入黑名单。`;
|
|
6031
6308
|
}
|
|
6032
6309
|
const validFactions = ["人类联盟", "辛迪加海盗"];
|
|
6033
6310
|
if (!faction) return `请输入“加入 阵营名称”加入对应阵营
|
|
@@ -6088,11 +6365,11 @@ ${scatterEffectMessages.map((m) => `▸ ${m}`).join("\n")}`
|
|
|
6088
6365
|
});
|
|
6089
6366
|
ctx.command("ggcevo/转职 [profession]", "转职系统").action(async ({ session }, profession) => {
|
|
6090
6367
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
6091
|
-
if (!profile) return "🔒
|
|
6368
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
6092
6369
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
6093
6370
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
6094
6371
|
if (existingEntries.length > 0) {
|
|
6095
|
-
return `⛔
|
|
6372
|
+
return `⛔ 您已被列入黑名单。`;
|
|
6096
6373
|
}
|
|
6097
6374
|
const [careerData] = await ctx.database.get("ggcevo_careers", { handle });
|
|
6098
6375
|
if (!careerData) return "请先加入阵营后使用转职功能。";
|
|
@@ -6172,7 +6449,7 @@ ${scatterEffectMessages.map((m) => `▸ ${m}`).join("\n")}`
|
|
|
6172
6449
|
const [profile] = await ctx.database.get("sc2arcade_player", {
|
|
6173
6450
|
userId: session.userId
|
|
6174
6451
|
});
|
|
6175
|
-
if (!profile) return "🔒
|
|
6452
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
6176
6453
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
6177
6454
|
const [careerData] = await ctx.database.get("ggcevo_careers", { handle });
|
|
6178
6455
|
if (!careerData) return "您尚未加入任何阵营。";
|
|
@@ -6215,7 +6492,7 @@ ${scatterEffectMessages.map((m) => `▸ ${m}`).join("\n")}`
|
|
|
6215
6492
|
});
|
|
6216
6493
|
ctx.command("ggcevo/黑市 [type]", "辛迪加海盗专属黑市").usage("输入“黑市”查看类型,或“黑市 类型”查看详细").action(async ({ session }, type) => {
|
|
6217
6494
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
6218
|
-
if (!profile) return "🔒
|
|
6495
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
6219
6496
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
6220
6497
|
const [careerData] = await ctx.database.get("ggcevo_careers", { handle });
|
|
6221
6498
|
if (!careerData || careerData.group !== "辛迪加海盗") {
|
|
@@ -6231,13 +6508,16 @@ ${scatterEffectMessages.map((m) => `▸ ${m}`).join("\n")}`
|
|
|
6231
6508
|
});
|
|
6232
6509
|
if (!type) {
|
|
6233
6510
|
return [
|
|
6234
|
-
"
|
|
6511
|
+
"🏴 辛迪加黑市 🏴",
|
|
6235
6512
|
'使用 "黑市 类型名称" 查看详细信息',
|
|
6513
|
+
// 添加计算机专家提示 - 优化为带emoji的分行显示
|
|
6514
|
+
isComputerExpert ? [
|
|
6515
|
+
"💰 当前折扣:",
|
|
6516
|
+
"💻 计算机专家:设备工具类物品50%折扣"
|
|
6517
|
+
].join("\n") : "",
|
|
6236
6518
|
"====================",
|
|
6237
6519
|
...Object.entries(typeStats).map(([typeName, count]) => `▸ ${typeName} (${count}种)`),
|
|
6238
|
-
"===================="
|
|
6239
|
-
// 添加计算机专家提示
|
|
6240
|
-
isComputerExpert ? "💳 计算机专家可享受设备工具类物品50%折扣!" : ""
|
|
6520
|
+
"===================="
|
|
6241
6521
|
].join("\n");
|
|
6242
6522
|
}
|
|
6243
6523
|
const normalizedType = Object.keys(typeStats).find((t) => t === type);
|
|
@@ -6260,7 +6540,7 @@ ${scatterEffectMessages.map((m) => `▸ ${m}`).join("\n")}`
|
|
|
6260
6540
|
}
|
|
6261
6541
|
infoBlocks.push(
|
|
6262
6542
|
`描述:${config2.description}`,
|
|
6263
|
-
"
|
|
6543
|
+
"------------------"
|
|
6264
6544
|
);
|
|
6265
6545
|
return infoBlocks.join("\n");
|
|
6266
6546
|
}),
|
|
@@ -6284,26 +6564,33 @@ ${scatterEffectMessages.map((m) => `▸ ${m}`).join("\n")}`
|
|
|
6284
6564
|
infoBlocks.push(
|
|
6285
6565
|
`特殊效果:${item.effects}`,
|
|
6286
6566
|
`描述:${item.description}`,
|
|
6287
|
-
"
|
|
6567
|
+
"------------------"
|
|
6288
6568
|
);
|
|
6289
6569
|
return infoBlocks.join("\n");
|
|
6290
6570
|
})
|
|
6291
6571
|
];
|
|
6572
|
+
let discountInfo = [];
|
|
6573
|
+
if (isComputerExpert && normalizedType === "设备工具") {
|
|
6574
|
+
discountInfo = [
|
|
6575
|
+
"💰 当前折扣:",
|
|
6576
|
+
"💻 计算机专家:设备工具类物品50%折扣"
|
|
6577
|
+
];
|
|
6578
|
+
}
|
|
6292
6579
|
return [
|
|
6293
6580
|
`🏴☠️ 辛迪加黑市 - ${normalizedType} 🏴☠️`,
|
|
6294
|
-
"
|
|
6295
|
-
//
|
|
6296
|
-
|
|
6581
|
+
'使用"订购 物品名称"进行购买(仅消耗红晶)',
|
|
6582
|
+
// 显示折扣信息(如果有)
|
|
6583
|
+
...discountInfo,
|
|
6297
6584
|
"====================",
|
|
6298
6585
|
...items
|
|
6299
|
-
].filter(Boolean).join("\n
|
|
6586
|
+
].filter(Boolean).join("\n");
|
|
6300
6587
|
});
|
|
6301
6588
|
ctx.command("ggcevo/订购 <item>").action(async ({ session }, item) => {
|
|
6302
6589
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
6303
|
-
if (!profile) return "🔒
|
|
6590
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
6304
6591
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
6305
6592
|
if (await ctx.database.get("ggcevo_blacklist", { handle }).then((r) => r.length)) {
|
|
6306
|
-
return "⛔
|
|
6593
|
+
return "⛔ 您已被列入黑名单。";
|
|
6307
6594
|
}
|
|
6308
6595
|
const [careerData] = await ctx.database.get("ggcevo_careers", { handle });
|
|
6309
6596
|
if (!careerData || careerData.group !== "辛迪加海盗") {
|
|
@@ -6368,44 +6655,50 @@ ${scatterEffectMessages.map((m) => `▸ ${m}`).join("\n")}`
|
|
|
6368
6655
|
}], ["handle", "itemId"]);
|
|
6369
6656
|
}
|
|
6370
6657
|
});
|
|
6371
|
-
|
|
6372
|
-
|
|
6373
|
-
|
|
6374
|
-
|
|
6375
|
-
}
|
|
6376
|
-
if (isWeapon) {
|
|
6377
|
-
const equippedStatus = await ctx.database.get("ggcevo_equipment", {
|
|
6378
|
-
handle,
|
|
6379
|
-
weaponId: itemConfig2.id
|
|
6380
|
-
}).then((r) => r[0]?.equipped ? "已自动装备武器" : "需手动装备武器");
|
|
6381
|
-
return [
|
|
6382
|
-
`✅ 成功订购【${item}】!`,
|
|
6383
|
-
`消耗红晶:${finalCost}${discountInfo}`,
|
|
6384
|
-
`装备状态:${equippedStatus}`,
|
|
6385
|
-
'输入 "武器仓库" 管理武器'
|
|
6386
|
-
].join("\n");
|
|
6387
|
-
} else {
|
|
6388
|
-
const currentStock = await ctx.database.get("ggcevo_warehouse", {
|
|
6389
|
-
handle,
|
|
6390
|
-
itemId: itemConfig2.id
|
|
6391
|
-
}).then((r) => r[0]?.quantity || 1);
|
|
6392
|
-
let priceInfo = `消耗红晶:${finalCost}`;
|
|
6393
|
-
if (isComputerExpertDiscount) {
|
|
6394
|
-
priceInfo += `(原价${originalPrice})`;
|
|
6658
|
+
const buildResponse = /* @__PURE__ */ __name(async () => {
|
|
6659
|
+
const discountLines = [];
|
|
6660
|
+
if (discountApplied) {
|
|
6661
|
+
discountLines.push("💻 计算机专家:设备工具类物品50%折扣");
|
|
6395
6662
|
}
|
|
6396
|
-
priceInfo
|
|
6397
|
-
|
|
6398
|
-
|
|
6399
|
-
|
|
6400
|
-
|
|
6401
|
-
|
|
6402
|
-
|
|
6403
|
-
|
|
6663
|
+
const priceInfo = [
|
|
6664
|
+
`消耗红晶:${finalCost}${discountApplied ? ` (原价${originalPrice})` : ""}`
|
|
6665
|
+
];
|
|
6666
|
+
if (discountApplied) {
|
|
6667
|
+
priceInfo.push("折扣明细:");
|
|
6668
|
+
priceInfo.push(...discountLines);
|
|
6669
|
+
}
|
|
6670
|
+
if (isWeapon) {
|
|
6671
|
+
const equippedStatus = await ctx.database.get("ggcevo_equipment", {
|
|
6672
|
+
handle,
|
|
6673
|
+
weaponId: itemConfig2.id
|
|
6674
|
+
}).then((r) => r[0]?.equipped ? "已自动装备武器" : "需手动装备武器");
|
|
6675
|
+
return [
|
|
6676
|
+
`✅ 成功订购【${item}】!`,
|
|
6677
|
+
...priceInfo,
|
|
6678
|
+
// 价格和折扣信息显示在一起
|
|
6679
|
+
`装备状态:${equippedStatus}`,
|
|
6680
|
+
'输入 "武器仓库" 管理武器'
|
|
6681
|
+
].filter(Boolean).join("\n");
|
|
6682
|
+
} else {
|
|
6683
|
+
const currentStock = await ctx.database.get("ggcevo_warehouse", {
|
|
6684
|
+
handle,
|
|
6685
|
+
itemId: itemConfig2.id
|
|
6686
|
+
}).then((r) => r[0]?.quantity || 1);
|
|
6687
|
+
return [
|
|
6688
|
+
`✅ 成功订购【${item}】x1!`,
|
|
6689
|
+
...priceInfo,
|
|
6690
|
+
// 价格和折扣信息显示在一起
|
|
6691
|
+
`当前库存:${currentStock}件`,
|
|
6692
|
+
'输入 "仓库" 查看所有物品'
|
|
6693
|
+
].filter(Boolean).join("\n");
|
|
6694
|
+
}
|
|
6695
|
+
}, "buildResponse");
|
|
6696
|
+
return await buildResponse();
|
|
6404
6697
|
});
|
|
6405
6698
|
ctx.command("ggcevo/仓库").action(async (argv) => {
|
|
6406
6699
|
const session = argv.session;
|
|
6407
6700
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
6408
|
-
if (!profile) return "🔒
|
|
6701
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
6409
6702
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
6410
6703
|
const [items, signData, careerData] = await Promise.all([
|
|
6411
6704
|
ctx.database.get("ggcevo_warehouse", { handle }),
|
|
@@ -6449,10 +6742,10 @@ ${scatterEffectMessages.map((m) => `▸ ${m}`).join("\n")}`
|
|
|
6449
6742
|
ctx.command("ggcevo/使用 [itemName] [target]").action(async (argv, itemName, target) => {
|
|
6450
6743
|
const session = argv.session;
|
|
6451
6744
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
6452
|
-
if (!profile) return "🔒
|
|
6745
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
6453
6746
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
6454
6747
|
if (await ctx.database.get("ggcevo_blacklist", { handle }).then((r) => r.length)) {
|
|
6455
|
-
return "⛔
|
|
6748
|
+
return "⛔ 您已被列入黑名单。";
|
|
6456
6749
|
}
|
|
6457
6750
|
try {
|
|
6458
6751
|
if (!itemName) return "请输入“使用 物品名称 (可选目标)”使用仓库中的物品。";
|
|
@@ -6479,9 +6772,8 @@ ${scatterEffectMessages.map((m) => `▸ ${m}`).join("\n")}`
|
|
|
6479
6772
|
);
|
|
6480
6773
|
return [
|
|
6481
6774
|
`✅ 成功使用 ${itemNameConfirmed}`,
|
|
6482
|
-
|
|
6483
|
-
|
|
6484
|
-
"─".repeat(14)
|
|
6775
|
+
`剩余数量:${newQuantity}`,
|
|
6776
|
+
`效果触发:${effectResult.message}`
|
|
6485
6777
|
].join("\n");
|
|
6486
6778
|
} catch (error) {
|
|
6487
6779
|
ctx.logger("GGCEVO").error(error);
|
|
@@ -6490,7 +6782,7 @@ ${scatterEffectMessages.map((m) => `▸ ${m}`).join("\n")}`
|
|
|
6490
6782
|
});
|
|
6491
6783
|
ctx.command("ggcevo/科技 [techName]", "查看空间站科技信息").usage("输入“科技”查看列表,或“科技 科技名称”查看详细信息").action(async ({ session }, techName) => {
|
|
6492
6784
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
6493
|
-
if (!profile) return "🔒
|
|
6785
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
6494
6786
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
6495
6787
|
const [careerData] = await ctx.database.get("ggcevo_careers", { handle });
|
|
6496
6788
|
if (!careerData || careerData.group !== "人类联盟") {
|
|
@@ -6505,11 +6797,13 @@ ${scatterEffectMessages.map((m) => `▸ ${m}`).join("\n")}`
|
|
|
6505
6797
|
return [
|
|
6506
6798
|
"🛰️ 空间站科技系统 🛰️",
|
|
6507
6799
|
'使用 "科技 科技名称" 查看详细信息',
|
|
6800
|
+
isIntelligenceOfficer ? [
|
|
6801
|
+
"💰 当前折扣:",
|
|
6802
|
+
"🎖️ 情报副官:20%"
|
|
6803
|
+
].join("\n") : "",
|
|
6508
6804
|
"====================",
|
|
6509
6805
|
...techList,
|
|
6510
|
-
"===================="
|
|
6511
|
-
isIntelligenceOfficer && "※ 情报副官享受20%升级折扣"
|
|
6512
|
-
// 新增折扣提示
|
|
6806
|
+
"===================="
|
|
6513
6807
|
].filter(Boolean).join("\n");
|
|
6514
6808
|
}
|
|
6515
6809
|
const tech = Spacestationtechnology.find(
|
|
@@ -6530,22 +6824,29 @@ ${Spacestationtechnology.map((t) => t.techname).join("、")}`;
|
|
|
6530
6824
|
"------------------"
|
|
6531
6825
|
].join("\n");
|
|
6532
6826
|
});
|
|
6827
|
+
let discountInfo = [];
|
|
6828
|
+
if (isIntelligenceOfficer) {
|
|
6829
|
+
discountInfo = [
|
|
6830
|
+
"💰 当前折扣:",
|
|
6831
|
+
"🎖️ 情报副官:20%"
|
|
6832
|
+
];
|
|
6833
|
+
}
|
|
6533
6834
|
return [
|
|
6534
6835
|
`🛠️ ${tech.techname} 科技详情 🛠️`,
|
|
6535
6836
|
`最大可升级等级:${romanNumerals[tech.maxLevel]}`,
|
|
6536
6837
|
'使用 "升级 科技名称" 进行升级',
|
|
6838
|
+
...discountInfo,
|
|
6839
|
+
// 插入折扣信息
|
|
6537
6840
|
"====================",
|
|
6538
|
-
...techDetails
|
|
6539
|
-
isIntelligenceOfficer && "※ 情报副官享受20%升级折扣"
|
|
6540
|
-
// 新增折扣提示
|
|
6841
|
+
...techDetails
|
|
6541
6842
|
].filter(Boolean).join("\n");
|
|
6542
6843
|
});
|
|
6543
6844
|
ctx.command("ggcevo/挖矿").action(async ({ session }) => {
|
|
6544
6845
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
6545
|
-
if (!profile) return "🔒
|
|
6846
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
6546
6847
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
6547
6848
|
if (await ctx.database.get("ggcevo_blacklist", { handle }).then((r) => r.length)) {
|
|
6548
|
-
return "⛔
|
|
6849
|
+
return "⛔ 您已被列入黑名单。";
|
|
6549
6850
|
}
|
|
6550
6851
|
const [career] = await ctx.database.get("ggcevo_careers", { handle });
|
|
6551
6852
|
if (!career || career.group !== "人类联盟") {
|
|
@@ -6652,7 +6953,8 @@ ${Spacestationtechnology.map((t) => t.techname).join("、")}`;
|
|
|
6652
6953
|
`类型: ${task2.type}`,
|
|
6653
6954
|
`目标: ${task2.target}次`,
|
|
6654
6955
|
`奖励: ${task2.price}金币`,
|
|
6655
|
-
`进度: ${completionStatus}
|
|
6956
|
+
`进度: ${completionStatus}`,
|
|
6957
|
+
"------------------"
|
|
6656
6958
|
].join("\n"));
|
|
6657
6959
|
}
|
|
6658
6960
|
return [
|
|
@@ -6661,7 +6963,7 @@ ${Spacestationtechnology.map((t) => t.techname).join("、")}`;
|
|
|
6661
6963
|
"====================",
|
|
6662
6964
|
...taskList,
|
|
6663
6965
|
"===================="
|
|
6664
|
-
].join("\n
|
|
6966
|
+
].join("\n");
|
|
6665
6967
|
}
|
|
6666
6968
|
const task = Object.entries(Tasklist).find(
|
|
6667
6969
|
([taskName]) => taskName === name2
|
|
@@ -6682,10 +6984,10 @@ ${Spacestationtechnology.map((t) => t.techname).join("、")}`;
|
|
|
6682
6984
|
`任务奖励: ${task.price}金币`,
|
|
6683
6985
|
`当前进度: ${progress}/${task.target}`,
|
|
6684
6986
|
`累计完成: ${completions}次`,
|
|
6685
|
-
"
|
|
6987
|
+
"------------------",
|
|
6686
6988
|
"任务描述:",
|
|
6687
6989
|
task.description,
|
|
6688
|
-
"
|
|
6990
|
+
"------------------",
|
|
6689
6991
|
"完成条件:",
|
|
6690
6992
|
task.condition,
|
|
6691
6993
|
"====================",
|
|
@@ -6697,7 +6999,7 @@ ${Spacestationtechnology.map((t) => t.techname).join("、")}`;
|
|
|
6697
6999
|
if (!profile) return "⚠️ 需要先绑定游戏句柄";
|
|
6698
7000
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
6699
7001
|
if (await ctx.database.get("ggcevo_blacklist", { handle }).then((r) => r.length)) {
|
|
6700
|
-
return "⛔
|
|
7002
|
+
return "⛔ 您已被列入黑名单。";
|
|
6701
7003
|
}
|
|
6702
7004
|
const taskEntry = Object.entries(Tasklist).find(
|
|
6703
7005
|
([taskName2]) => taskName2.includes(name2)
|