koishi-plugin-ggcevo-game 1.6.28 → 1.6.31
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 +170 -344
- package/lib/items.d.ts +5 -0
- package/lib/utils.d.ts +1 -0
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -510,7 +510,7 @@ var modConfig = {
|
|
|
510
510
|
},
|
|
511
511
|
"棱镜超载核心": {
|
|
512
512
|
cost: 2250,
|
|
513
|
-
effect: "暴击率提升20%;连续
|
|
513
|
+
effect: "暴击率提升20%;连续3次未暴击时,下次攻击必定暴击",
|
|
514
514
|
exclusiveTo: "激光步枪",
|
|
515
515
|
isExclusive: true
|
|
516
516
|
},
|
|
@@ -683,6 +683,7 @@ var initDefaultItems = {
|
|
|
683
683
|
"t2级宠物扭蛋": { id: 5, type: "宠物蛋", description: "用于兑换t2系列宠物" },
|
|
684
684
|
"t1级宠物扭蛋": { id: 6, type: "宠物蛋", description: "用于兑换t1系列宠物" },
|
|
685
685
|
"t0级宠物扭蛋": { id: 7, type: "宠物蛋", description: "用于兑换t0系列宠物" },
|
|
686
|
+
"资源兑换券": { id: 8, type: "兑换货币", description: "用于兑换咕咕之战资源" },
|
|
686
687
|
"🥇先行者赛季冠军勋章": { id: 101, type: "勋章", description: "" },
|
|
687
688
|
"🥈先行者赛季亚军勋章": { id: 102, type: "勋章", description: "" },
|
|
688
689
|
"🥉先行者赛季季军勋章": { id: 103, type: "勋章", description: "" },
|
|
@@ -737,7 +738,7 @@ var spaceStationCrewConfig = [
|
|
|
737
738
|
effect: "攻击获得的金币+50%",
|
|
738
739
|
requirements: "当期伤害榜累计造成100及以上伤害",
|
|
739
740
|
Jobtransfer: true,
|
|
740
|
-
costcoins:
|
|
741
|
+
costcoins: 2e3
|
|
741
742
|
},
|
|
742
743
|
{
|
|
743
744
|
professionName: "警卫长",
|
|
@@ -748,7 +749,7 @@ var spaceStationCrewConfig = [
|
|
|
748
749
|
},
|
|
749
750
|
{
|
|
750
751
|
professionName: "武器中士",
|
|
751
|
-
effect: "攻击伤害+15%;
|
|
752
|
+
effect: "攻击伤害+15%; 购买传奇武器无需权限次数(第一次购买将消耗权限次数半价购买传奇武器)",
|
|
752
753
|
requirements: "至少拥有一把6级及以上等级的武器",
|
|
753
754
|
Jobtransfer: true,
|
|
754
755
|
costcoins: 3e3
|
|
@@ -799,14 +800,14 @@ var spaceStationCrewConfig = [
|
|
|
799
800
|
var syndicatePirateConfig = [
|
|
800
801
|
{
|
|
801
802
|
professionName: "能量武器专家",
|
|
802
|
-
effect: "能量武器攻击伤害+20%; 购买MK-4激光步枪(传奇)享有50%的折扣",
|
|
803
|
+
effect: "能量武器攻击伤害+20%; 使用能量武器攻击时暴击率+10%; 购买MK-4激光步枪(传奇)享有50%的折扣",
|
|
803
804
|
requirements: "至少拥有一把3级及以上等级的能量武器",
|
|
804
805
|
Jobtransfer: true,
|
|
805
806
|
costredcrystal: 30
|
|
806
807
|
},
|
|
807
808
|
{
|
|
808
809
|
professionName: "清洁工",
|
|
809
|
-
effect: "
|
|
810
|
+
effect: "每次攻击额外获得1枚红晶,每造成100伤害额外获得1枚红晶(至多额外获得3枚)",
|
|
810
811
|
requirements: "当期伤害榜累计攻击4次及以上",
|
|
811
812
|
Jobtransfer: true,
|
|
812
813
|
costredcrystal: 20
|
|
@@ -820,7 +821,7 @@ var syndicatePirateConfig = [
|
|
|
820
821
|
},
|
|
821
822
|
{
|
|
822
823
|
professionName: "猩红杀手",
|
|
823
|
-
effect: "“侦察步枪”攻击伤害+15%; 使用“侦察步枪”攻击时每1点护甲改为减少
|
|
824
|
+
effect: "“侦察步枪”攻击伤害+15%; 使用“侦察步枪”攻击时每1点护甲改为减少0点伤害; 购买DSR-55反器材步枪(传奇)享有50%的折扣",
|
|
824
825
|
requirements: "“侦察步枪”武器等级≥3级",
|
|
825
826
|
Jobtransfer: true,
|
|
826
827
|
costredcrystal: 30
|
|
@@ -834,7 +835,7 @@ var syndicatePirateConfig = [
|
|
|
834
835
|
},
|
|
835
836
|
{
|
|
836
837
|
professionName: "辛迪加财务经理",
|
|
837
|
-
effect: "
|
|
838
|
+
effect: "每日签到能额外获得5枚红晶",
|
|
838
839
|
requirements: "当月累计签到14天及以上",
|
|
839
840
|
Jobtransfer: true,
|
|
840
841
|
costredcrystal: 40
|
|
@@ -844,7 +845,7 @@ var syndicatePirateConfig = [
|
|
|
844
845
|
effect: "黑市订购设备工具类享有50%折扣; 主动发起的PK胜率提高10%; 每日主动PK次数增加3次",
|
|
845
846
|
requirements: "仓库中至少拥有一个黑市订购的设备工具类物品",
|
|
846
847
|
Jobtransfer: true,
|
|
847
|
-
costredcrystal:
|
|
848
|
+
costredcrystal: 20
|
|
848
849
|
},
|
|
849
850
|
{
|
|
850
851
|
professionName: "指挥官",
|
|
@@ -4627,7 +4628,7 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, hasCr
|
|
|
4627
4628
|
}
|
|
4628
4629
|
let armorDamageReduction = weaponData.armorDamageReduction || 0;
|
|
4629
4630
|
if (careerData?.career === "猩红杀手" && weaponName === "侦察步枪") {
|
|
4630
|
-
armorDamageReduction =
|
|
4631
|
+
armorDamageReduction = 0;
|
|
4631
4632
|
}
|
|
4632
4633
|
if (equippedWeapon.installedMods?.includes("氮气压缩核心")) {
|
|
4633
4634
|
armorDamageReduction = 0;
|
|
@@ -5416,6 +5417,22 @@ var ggcevoUpdates = [
|
|
|
5416
5417
|
- 异形信息新增显示护甲削减值(动力钻头和传奇高斯的削减)
|
|
5417
5418
|
- 增强了辛迪加海盗阵营的破坏者和纵火狂
|
|
5418
5419
|
`.trim()
|
|
5420
|
+
},
|
|
5421
|
+
{
|
|
5422
|
+
version: "1.6.30",
|
|
5423
|
+
time: "2025-07-16",
|
|
5424
|
+
content: `
|
|
5425
|
+
- 增强了专属改装棱镜超载核心
|
|
5426
|
+
- 增强了能量武器专家职业效果
|
|
5427
|
+
- 重制了清洁工职业效果
|
|
5428
|
+
- 增强了猩红杀手职业效果
|
|
5429
|
+
- 重制了辛迪加财务经理职业效果
|
|
5430
|
+
- 下调了警卫员下士转职价格
|
|
5431
|
+
- 新增物品:资源兑换券(可用于兑换咕咕之战资源)
|
|
5432
|
+
- 重制了击败奖励
|
|
5433
|
+
- 重制了赛季奖励
|
|
5434
|
+
- 修改了竞猜项目ID为1的竞猜赔率,并设置了最低投注
|
|
5435
|
+
`.trim()
|
|
5419
5436
|
}
|
|
5420
5437
|
];
|
|
5421
5438
|
function compareVersions(a, b) {
|
|
@@ -6267,7 +6284,8 @@ var GUESSING_ITEMS = [
|
|
|
6267
6284
|
{
|
|
6268
6285
|
id: 1,
|
|
6269
6286
|
description: "猜测下一个复活主宰的名字",
|
|
6270
|
-
odds:
|
|
6287
|
+
odds: 9.5,
|
|
6288
|
+
minBet: 10,
|
|
6271
6289
|
status: "open"
|
|
6272
6290
|
}
|
|
6273
6291
|
// 可以继续添加更多竞猜项目
|
|
@@ -6315,7 +6333,7 @@ async function calculateTotalDamage(ctx, session, config, equippedWeapon, target
|
|
|
6315
6333
|
const otherAdditive = careerAddResult.value + wishAddResult.value + rankAddResult.value;
|
|
6316
6334
|
const otherMultiplier = 1 + otherAdditive;
|
|
6317
6335
|
let finalDamage = baseDamage * tagMultiplier * modMultiplier * otherMultiplier;
|
|
6318
|
-
const { hasCrit, critSources } = await calculateCrit(ctx, handle, equippedWeapon, weaponName);
|
|
6336
|
+
const { hasCrit, critSources } = await calculateCrit(ctx, handle, equippedWeapon, weaponName, careerData, weaponData.type);
|
|
6319
6337
|
effectMessage.push(...critSources);
|
|
6320
6338
|
finalDamage = Math.max(finalDamage, 1);
|
|
6321
6339
|
return {
|
|
@@ -6326,7 +6344,7 @@ async function calculateTotalDamage(ctx, session, config, equippedWeapon, target
|
|
|
6326
6344
|
};
|
|
6327
6345
|
}
|
|
6328
6346
|
__name(calculateTotalDamage, "calculateTotalDamage");
|
|
6329
|
-
async function calculateCrit(ctx, handle, equippedWeapon, weaponName) {
|
|
6347
|
+
async function calculateCrit(ctx, handle, equippedWeapon, weaponName, careerData, weaponType) {
|
|
6330
6348
|
let critRate = 0;
|
|
6331
6349
|
const pityCounter = equippedWeapon?.pityCounter || 0;
|
|
6332
6350
|
const critSources = [];
|
|
@@ -6342,12 +6360,16 @@ async function calculateCrit(ctx, handle, equippedWeapon, weaponName) {
|
|
|
6342
6360
|
critSources: ["🔫 MK-4激光步枪:保底暴击"]
|
|
6343
6361
|
};
|
|
6344
6362
|
}
|
|
6345
|
-
if (equippedWeapon.installedMods?.includes("棱镜超载核心") && modConfig["棱镜超载核心"]?.exclusiveTo === weaponName && pityCounter >=
|
|
6363
|
+
if (equippedWeapon.installedMods?.includes("棱镜超载核心") && modConfig["棱镜超载核心"]?.exclusiveTo === weaponName && pityCounter >= 3) {
|
|
6346
6364
|
return {
|
|
6347
6365
|
hasCrit: true,
|
|
6348
6366
|
critSources: ["⚙️ 【棱镜超载核心】:保底暴击"]
|
|
6349
6367
|
};
|
|
6350
6368
|
}
|
|
6369
|
+
if (careerData?.career === "能量武器专家" && weaponType === "能量武器") {
|
|
6370
|
+
critRate += 10;
|
|
6371
|
+
critSources.push("⚔️ 能量武器专家职业:暴击率+10%");
|
|
6372
|
+
}
|
|
6351
6373
|
if (equippedWeapon.installedMods?.includes("棱镜水晶")) {
|
|
6352
6374
|
critRate += 10;
|
|
6353
6375
|
critSources.push("⚙️ 【棱镜水晶】:暴击率+10%");
|
|
@@ -6520,31 +6542,6 @@ async function getCleanerRewardBroadcast(ctx, boss, killerHandle, killerName) {
|
|
|
6520
6542
|
const bossType = boss.type;
|
|
6521
6543
|
const bossName = boss.name;
|
|
6522
6544
|
const broadcastMessages = [];
|
|
6523
|
-
let cleanerBaseReward = 0;
|
|
6524
|
-
if (["巢穴雷兽", "巢穴战士", "巢穴甲虫"].includes(bossName)) {
|
|
6525
|
-
cleanerBaseReward = 2;
|
|
6526
|
-
} else {
|
|
6527
|
-
cleanerBaseReward = bossType === "主宰" ? 10 : 5;
|
|
6528
|
-
}
|
|
6529
|
-
const allCleaners = await ctx.database.get("ggcevo_careers", {
|
|
6530
|
-
career: "清洁工"
|
|
6531
|
-
});
|
|
6532
|
-
let cleanerKillerBonus = false;
|
|
6533
|
-
if (allCleaners.length > 0) {
|
|
6534
|
-
for (const cleaner of allCleaners) {
|
|
6535
|
-
let rewardAmount = cleanerBaseReward;
|
|
6536
|
-
if (cleaner.handle === killerHandle) {
|
|
6537
|
-
rewardAmount *= 2;
|
|
6538
|
-
cleanerKillerBonus = true;
|
|
6539
|
-
}
|
|
6540
|
-
await ctx.database.upsert("ggcevo_careers", [{
|
|
6541
|
-
handle: cleaner.handle,
|
|
6542
|
-
redcrystal: (cleaner.redcrystal || 0) + rewardAmount
|
|
6543
|
-
}], ["handle"]);
|
|
6544
|
-
}
|
|
6545
|
-
const cleanerMessage = `🧹 清洁工职业因清理 ${bossName} 尸体,获得 ${cleanerBaseReward} 红晶${cleanerKillerBonus ? ` (击败者 ${killerName} 获得双倍奖励)` : ""}`;
|
|
6546
|
-
broadcastMessages.push(cleanerMessage);
|
|
6547
|
-
}
|
|
6548
6545
|
let guardBaseReward = 0;
|
|
6549
6546
|
if (["巢穴雷兽", "巢穴战士", "巢穴甲虫"].includes(bossName)) {
|
|
6550
6547
|
guardBaseReward = 200;
|
|
@@ -6591,11 +6588,6 @@ async function handleBossDefeatRewards(ctx, targetBoss) {
|
|
|
6591
6588
|
return { rewardMessages };
|
|
6592
6589
|
}
|
|
6593
6590
|
const handles = damageRecords.map((r) => r.handle);
|
|
6594
|
-
const careerData = await ctx.database.get("ggcevo_careers", {
|
|
6595
|
-
handle: { $in: handles }
|
|
6596
|
-
});
|
|
6597
|
-
const groupMap = new Map(careerData.map((c) => [c.handle, c.group]));
|
|
6598
|
-
const pirateRedcrystalRewards = /* @__PURE__ */ new Map();
|
|
6599
6591
|
const doubleWishRecords = await ctx.database.get("ggcevo_wish", {
|
|
6600
6592
|
handle: { $in: handles },
|
|
6601
6593
|
wishname: "精灵双倍",
|
|
@@ -6605,127 +6597,83 @@ async function handleBossDefeatRewards(ctx, targetBoss) {
|
|
|
6605
6597
|
});
|
|
6606
6598
|
const doubleWishIds = doubleWishRecords.map((r) => r.id);
|
|
6607
6599
|
const doubleWishHandles = new Set(doubleWishRecords.map((r) => r.handle));
|
|
6608
|
-
const
|
|
6609
|
-
|
|
6600
|
+
const allRankRewards = [];
|
|
6601
|
+
damageRecords.forEach((record, index) => {
|
|
6610
6602
|
const rank = index + 1;
|
|
6611
|
-
let
|
|
6612
|
-
|
|
6613
|
-
|
|
6614
|
-
|
|
6615
|
-
|
|
6616
|
-
|
|
6617
|
-
|
|
6618
|
-
|
|
6619
|
-
gold = 2500;
|
|
6620
|
-
break;
|
|
6621
|
-
case rank === 3:
|
|
6622
|
-
guguCoins = 20;
|
|
6623
|
-
gold = 2e3;
|
|
6624
|
-
break;
|
|
6625
|
-
case rank <= 10:
|
|
6626
|
-
guguCoins = 15;
|
|
6627
|
-
gold = 1500;
|
|
6628
|
-
break;
|
|
6629
|
-
}
|
|
6603
|
+
let coupons = 0;
|
|
6604
|
+
if (rank === 1) coupons = 50;
|
|
6605
|
+
else if (rank === 2) coupons = 45;
|
|
6606
|
+
else if (rank === 3) coupons = 40;
|
|
6607
|
+
else if (rank <= 10) coupons = 30;
|
|
6608
|
+
else if (rank <= 20) coupons = 20;
|
|
6609
|
+
else if (rank <= 50) coupons = 10;
|
|
6610
|
+
else coupons = 5;
|
|
6630
6611
|
const hasDoubleWish = doubleWishHandles.has(record.handle);
|
|
6631
6612
|
if (hasDoubleWish) {
|
|
6632
|
-
|
|
6633
|
-
gold *= 2;
|
|
6613
|
+
coupons *= 2;
|
|
6634
6614
|
}
|
|
6635
6615
|
const reward = {
|
|
6636
|
-
|
|
6637
|
-
gold,
|
|
6616
|
+
coupons,
|
|
6638
6617
|
playerName: record.playerName,
|
|
6618
|
+
rank,
|
|
6639
6619
|
hasDoubleWish
|
|
6640
6620
|
};
|
|
6641
6621
|
rewardMap.set(record.handle, reward);
|
|
6642
|
-
|
|
6622
|
+
allRankRewards.push(reward);
|
|
6623
|
+
});
|
|
6624
|
+
allRankRewards.slice(0, 20).forEach((reward) => {
|
|
6625
|
+
const bonusNote = reward.hasDoubleWish ? " (🧝♀ 精灵双倍生效)" : "";
|
|
6643
6626
|
rewardMessages.push(
|
|
6644
|
-
`${rank}. ${
|
|
6645
|
-
` 获得奖励: ${guguCoins} 咕咕币 + ${gold} 金币${bonusNote}`
|
|
6627
|
+
`${reward.rank}. ${reward.playerName} 获得 ${reward.coupons} 资源兑换券${bonusNote}`
|
|
6646
6628
|
);
|
|
6647
|
-
const group = groupMap.get(record.handle);
|
|
6648
|
-
if (group === "辛迪加海盗") {
|
|
6649
|
-
let redcrystal = 0;
|
|
6650
|
-
if (rank === 1) redcrystal = 30;
|
|
6651
|
-
else if (rank === 2) redcrystal = 25;
|
|
6652
|
-
else if (rank === 3) redcrystal = 20;
|
|
6653
|
-
else if (rank <= 10) redcrystal = 15;
|
|
6654
|
-
else if (rank <= 20) redcrystal = 10;
|
|
6655
|
-
pirateRedcrystalRewards.set(record.handle, redcrystal);
|
|
6656
|
-
rewardMessages.push(` 辛迪加海盗奖励: ${redcrystal} 红晶`);
|
|
6657
|
-
}
|
|
6658
6629
|
});
|
|
6659
|
-
const
|
|
6660
|
-
|
|
6661
|
-
|
|
6662
|
-
|
|
6663
|
-
|
|
6664
|
-
|
|
6665
|
-
|
|
6666
|
-
|
|
6667
|
-
|
|
6668
|
-
|
|
6669
|
-
|
|
6670
|
-
|
|
6671
|
-
|
|
6672
|
-
|
|
6673
|
-
|
|
6674
|
-
});
|
|
6675
|
-
}
|
|
6676
|
-
const group = groupMap.get(record.handle);
|
|
6677
|
-
if (group === "辛迪加海盗") {
|
|
6678
|
-
const redcrystal = 3;
|
|
6679
|
-
pirateRedcrystalRewards.set(record.handle, redcrystal);
|
|
6680
|
-
pirateOtherRewards.push({
|
|
6681
|
-
playerName: record.playerName,
|
|
6682
|
-
redcrystal
|
|
6683
|
-
});
|
|
6684
|
-
}
|
|
6685
|
-
rewardMap.set(record.handle, {
|
|
6686
|
-
guguCoins,
|
|
6687
|
-
gold,
|
|
6688
|
-
playerName: record.playerName,
|
|
6689
|
-
hasDoubleWish
|
|
6690
|
-
});
|
|
6691
|
-
});
|
|
6692
|
-
rewardMessages.push(`其他参与者获得基础奖励: 300 金币`);
|
|
6693
|
-
if (doubleWishOthers.length > 0) {
|
|
6694
|
-
rewardMessages.push("🧝♀ 触发精灵双倍祈愿的参与者:");
|
|
6695
|
-
doubleWishOthers.forEach((player) => {
|
|
6696
|
-
rewardMessages.push(
|
|
6697
|
-
` ${player.playerName}: +${player.guguCoins} 咕咕币 +${player.gold} 金币`
|
|
6698
|
-
);
|
|
6699
|
-
});
|
|
6630
|
+
const rank21To50 = allRankRewards.slice(20, 50);
|
|
6631
|
+
if (rank21To50.length > 0) {
|
|
6632
|
+
const totalPlayers = rank21To50.length;
|
|
6633
|
+
const doubleWishCount = rank21To50.filter((p) => p.hasDoubleWish).length;
|
|
6634
|
+
const baseRewardPerPlayer = 10;
|
|
6635
|
+
rewardMessages.push(
|
|
6636
|
+
`21-50名: ${totalPlayers}人`,
|
|
6637
|
+
` 基础奖励: 每人 ${baseRewardPerPlayer} 资源兑换券`
|
|
6638
|
+
);
|
|
6639
|
+
if (doubleWishCount > 0) {
|
|
6640
|
+
rewardMessages.push(
|
|
6641
|
+
` 精灵双倍生效: ${doubleWishCount}人 每人额外获得 ${baseRewardPerPlayer} 资源兑换券`
|
|
6642
|
+
);
|
|
6643
|
+
} else {
|
|
6644
|
+
rewardMessages.push(` (无精灵双倍玩家)`);
|
|
6700
6645
|
}
|
|
6701
6646
|
}
|
|
6702
|
-
|
|
6703
|
-
|
|
6647
|
+
const participants = allRankRewards.slice(50);
|
|
6648
|
+
if (participants.length > 0) {
|
|
6649
|
+
const totalParticipants = participants.length;
|
|
6650
|
+
const doubleWishCount = participants.filter((p) => p.hasDoubleWish).length;
|
|
6651
|
+
const baseRewardPerPlayer = 5;
|
|
6652
|
+
rewardMessages.push(
|
|
6653
|
+
`参与奖: ${totalParticipants}人`,
|
|
6654
|
+
` 基础奖励: 每人 ${baseRewardPerPlayer} 资源兑换券`
|
|
6655
|
+
);
|
|
6656
|
+
if (doubleWishCount > 0) {
|
|
6657
|
+
rewardMessages.push(
|
|
6658
|
+
` 精灵双倍生效: ${doubleWishCount}人 每人额外获得 ${baseRewardPerPlayer} 资源兑换券`
|
|
6659
|
+
);
|
|
6660
|
+
} else {
|
|
6661
|
+
rewardMessages.push(` (无精灵双倍玩家)`);
|
|
6662
|
+
}
|
|
6704
6663
|
}
|
|
6705
6664
|
await ctx.database.withTransaction(async () => {
|
|
6706
6665
|
for (const [handle, reward] of rewardMap) {
|
|
6707
|
-
|
|
6708
|
-
|
|
6709
|
-
handle,
|
|
6710
|
-
totalRewards: (signData?.totalRewards || 0) + reward.gold
|
|
6711
|
-
}], ["handle"]);
|
|
6712
|
-
const [backpackData] = await ctx.database.get("ggcevo_backpack", {
|
|
6713
|
-
handle,
|
|
6714
|
-
itemId: 1
|
|
6715
|
-
});
|
|
6716
|
-
await ctx.database.upsert("ggcevo_backpack", [{
|
|
6717
|
-
handle,
|
|
6718
|
-
itemId: 1,
|
|
6719
|
-
quantity: (backpackData?.quantity || 0) + reward.guguCoins
|
|
6720
|
-
}], ["handle", "itemId"]);
|
|
6721
|
-
}
|
|
6722
|
-
for (const [handle, redcrystal] of pirateRedcrystalRewards) {
|
|
6723
|
-
const [career] = await ctx.database.get("ggcevo_careers", { handle });
|
|
6724
|
-
if (career) {
|
|
6725
|
-
await ctx.database.upsert("ggcevo_careers", [{
|
|
6666
|
+
if (reward.coupons > 0) {
|
|
6667
|
+
const [couponData] = await ctx.database.get("ggcevo_backpack", {
|
|
6726
6668
|
handle,
|
|
6727
|
-
|
|
6728
|
-
|
|
6669
|
+
itemId: 8
|
|
6670
|
+
// 资源兑换券ID
|
|
6671
|
+
});
|
|
6672
|
+
await ctx.database.upsert("ggcevo_backpack", [{
|
|
6673
|
+
handle,
|
|
6674
|
+
itemId: 8,
|
|
6675
|
+
quantity: (couponData?.quantity || 0) + reward.coupons
|
|
6676
|
+
}], ["handle", "itemId"]);
|
|
6729
6677
|
}
|
|
6730
6678
|
}
|
|
6731
6679
|
if (doubleWishIds.length > 0) {
|
|
@@ -6949,11 +6897,14 @@ async function calculateRewards(ctx, handle, totalDamage) {
|
|
|
6949
6897
|
const finalReward = Math.round(totalDamage * totalBonusFactor);
|
|
6950
6898
|
let redcrystalMessage = "";
|
|
6951
6899
|
if (career === "清洁工") {
|
|
6900
|
+
const baseRedCrystal = 1;
|
|
6901
|
+
const damageBonus = Math.min(Math.floor(totalDamage / 100), 3);
|
|
6902
|
+
const totalRedCrystal = baseRedCrystal + damageBonus;
|
|
6952
6903
|
await ctx.database.upsert("ggcevo_careers", [{
|
|
6953
6904
|
handle,
|
|
6954
|
-
redcrystal: (careerData?.redcrystal || 0) +
|
|
6905
|
+
redcrystal: (careerData?.redcrystal || 0) + totalRedCrystal
|
|
6955
6906
|
}], ["handle"]);
|
|
6956
|
-
redcrystalMessage =
|
|
6907
|
+
redcrystalMessage = `🔴 清洁工职业:+${totalRedCrystal}枚红晶`;
|
|
6957
6908
|
}
|
|
6958
6909
|
return {
|
|
6959
6910
|
finalReward,
|
|
@@ -7201,9 +7152,6 @@ async function testAttackFunction(ctx, session, handle, config, equippedWeapon,
|
|
|
7201
7152
|
const ignoreReduction = await handleIgnoreReductionEffects(ctx, handle, weaponName, targetBoss);
|
|
7202
7153
|
const EffectProcessor = applyPassiveEffects(targetBoss, activeBosses, weaponName, damageResult.damage, damageResult.hasCrit, ignoreReduction.ignoreRate, careerData, equippedWeapon);
|
|
7203
7154
|
const initialDamage = EffectProcessor.finalDamage;
|
|
7204
|
-
for (const name2 in battleStatsMap) {
|
|
7205
|
-
const stats = battleStatsMap[name2];
|
|
7206
|
-
}
|
|
7207
7155
|
Object.keys(battleStatsMap).forEach((key) => delete battleStatsMap[key]);
|
|
7208
7156
|
return {
|
|
7209
7157
|
initialDamage,
|
|
@@ -7686,8 +7634,8 @@ function apply(ctx, config) {
|
|
|
7686
7634
|
const now = /* @__PURE__ */ new Date();
|
|
7687
7635
|
const expiredGroups = await ctx.database.select("ggcevo_boss").where({
|
|
7688
7636
|
type: "主宰",
|
|
7689
|
-
respawnTime: { $
|
|
7690
|
-
//
|
|
7637
|
+
respawnTime: { $lte: now },
|
|
7638
|
+
// 修改为小于等于当前时间
|
|
7691
7639
|
isActive: false
|
|
7692
7640
|
}).execute();
|
|
7693
7641
|
for (const group of expiredGroups) {
|
|
@@ -7706,7 +7654,7 @@ function apply(ctx, config) {
|
|
|
7706
7654
|
);
|
|
7707
7655
|
const winMessages = [];
|
|
7708
7656
|
for (const winner of winners) {
|
|
7709
|
-
const prize = Math.floor(winner.amount *
|
|
7657
|
+
const prize = Math.floor(winner.amount * 9.5);
|
|
7710
7658
|
const [signInfo] = await ctx.database.get("ggcevo_sign", {
|
|
7711
7659
|
handle: winner.handle
|
|
7712
7660
|
});
|
|
@@ -8105,22 +8053,8 @@ ${itemDetails.join("\n")}`;
|
|
|
8105
8053
|
const finalTickets = Math.round(baseFinalTickets * multiplier);
|
|
8106
8054
|
let redCrystal = 0;
|
|
8107
8055
|
if (careerData?.group === "辛迪加海盗" && careerData.career === "辛迪加财务经理") {
|
|
8108
|
-
|
|
8109
|
-
|
|
8110
|
-
else if (monthlyDays < 21) redCrystal = 3;
|
|
8111
|
-
else if (monthlyDays < 28) redCrystal = 4;
|
|
8112
|
-
else redCrystal = 5;
|
|
8113
|
-
const crystalStock = careerData.redcrystal || 0;
|
|
8114
|
-
const extraBonus = Math.min(Math.floor(crystalStock / 20), 5);
|
|
8115
|
-
if (extraBonus > 0) {
|
|
8116
|
-
redCrystal += extraBonus;
|
|
8117
|
-
messages.push(
|
|
8118
|
-
`🎖️ 辛迪加财务经理职业:+${redCrystal - extraBonus}枚红晶
|
|
8119
|
-
▸ 红晶储量加成:额外+${extraBonus}枚红晶`
|
|
8120
|
-
);
|
|
8121
|
-
} else {
|
|
8122
|
-
messages.push(`🎖️ 辛迪加财务经理职业:+${redCrystal}枚红晶`);
|
|
8123
|
-
}
|
|
8056
|
+
redCrystal = 5;
|
|
8057
|
+
messages.push("🎖️ 辛迪加财务经理职业:+5枚红晶");
|
|
8124
8058
|
}
|
|
8125
8059
|
await ctx.database.withTransaction(async () => {
|
|
8126
8060
|
await ctx.database.upsert("ggcevo_sign", [{
|
|
@@ -8502,129 +8436,41 @@ ${ticketMessage}${effectMessage}`;
|
|
|
8502
8436
|
sort: { rank: "desc" },
|
|
8503
8437
|
limit: 20
|
|
8504
8438
|
});
|
|
8505
|
-
const allHandles = [...rankedPlayers.map((p) => p.handle)];
|
|
8506
|
-
const careerData = await ctx.database.get("ggcevo_careers", {
|
|
8507
|
-
handle: { $in: allHandles }
|
|
8508
|
-
});
|
|
8509
|
-
const groupMap = new Map(careerData.map((c) => [c.handle, c.group]));
|
|
8510
8439
|
let report = `=== ${currentSeason}赛季结算报告 ===
|
|
8511
8440
|
|
|
8512
8441
|
`;
|
|
8513
8442
|
const playerDetails = [];
|
|
8514
8443
|
let positiveCount = 0;
|
|
8515
8444
|
let negativeCount = 0;
|
|
8516
|
-
let pirateTopPlayers = 0;
|
|
8517
|
-
let piratePositive = 0;
|
|
8518
|
-
let pirateNegative = 0;
|
|
8519
8445
|
for (const [index, player] of rankedPlayers.entries()) {
|
|
8520
8446
|
const rank = index + 1;
|
|
8521
|
-
const
|
|
8522
|
-
|
|
8523
|
-
handle: player.handle,
|
|
8524
|
-
itemId: 1
|
|
8525
|
-
});
|
|
8526
|
-
await ctx.database.upsert("ggcevo_backpack", [{
|
|
8527
|
-
handle: player.handle,
|
|
8528
|
-
itemId: 1,
|
|
8529
|
-
quantity: (backpack?.quantity || 0) + coins
|
|
8530
|
-
}], ["handle", "itemId"]);
|
|
8531
|
-
const [signData] = await ctx.database.get("ggcevo_sign", { handle: player.handle });
|
|
8532
|
-
await ctx.database.upsert("ggcevo_sign", [{
|
|
8533
|
-
handle: player.handle,
|
|
8534
|
-
totalRewards: (signData?.totalRewards || 0) + gold
|
|
8535
|
-
}], ["handle"]);
|
|
8447
|
+
const coins = getCoinsByRank(rank);
|
|
8448
|
+
await updateBackpack(player.handle, 1, coins);
|
|
8536
8449
|
const medalType = getMedalType(rank);
|
|
8537
8450
|
const medalName = requiredMedals[medalType];
|
|
8538
8451
|
const medalId = initDefaultItems[medalName].id;
|
|
8539
|
-
|
|
8540
|
-
|
|
8541
|
-
itemId: medalId
|
|
8542
|
-
});
|
|
8543
|
-
await ctx.database.upsert("ggcevo_backpack", [{
|
|
8544
|
-
handle: player.handle,
|
|
8545
|
-
itemId: medalId,
|
|
8546
|
-
quantity: (medalData?.quantity || 0) + 1
|
|
8547
|
-
}], ["handle", "itemId"]);
|
|
8548
|
-
const group = groupMap.get(player.handle);
|
|
8549
|
-
let playerLine = `✦ 第${rank}名:${player.handle} - ${coins}咕咕币 + ${gold}金币 + ${medalName}`;
|
|
8550
|
-
if (group === "辛迪加海盗") {
|
|
8551
|
-
pirateTopPlayers++;
|
|
8552
|
-
const [career] = await ctx.database.get("ggcevo_careers", { handle: player.handle });
|
|
8553
|
-
if (career) {
|
|
8554
|
-
await ctx.database.upsert("ggcevo_careers", [{
|
|
8555
|
-
handle: player.handle,
|
|
8556
|
-
redcrystal: (career.redcrystal || 0) + redcrystal
|
|
8557
|
-
}], ["handle"]);
|
|
8558
|
-
}
|
|
8559
|
-
playerLine += ` + ${redcrystal}红晶(海盗专属)`;
|
|
8560
|
-
}
|
|
8561
|
-
playerDetails.push(playerLine);
|
|
8452
|
+
await updateBackpack(player.handle, medalId, 1);
|
|
8453
|
+
playerDetails.push(`✦ 第${rank}名:${player.handle} - ${coins}咕咕币 + ${medalName}`);
|
|
8562
8454
|
}
|
|
8563
|
-
report += "🏆
|
|
8564
|
-
report += playerDetails.join("\n") + "\n\n";
|
|
8565
|
-
report += `ℹ️ 辛迪加海盗阵营专属奖励:前20名中共有${pirateTopPlayers}名海盗玩家获得了红晶奖励
|
|
8566
|
-
|
|
8567
|
-
`;
|
|
8455
|
+
report += "🏆 精英玩家奖励:\n" + playerDetails.join("\n") + "\n\n";
|
|
8568
8456
|
const otherPlayers = await ctx.database.get("ggcevo_rank", {
|
|
8569
8457
|
Blacklist: false,
|
|
8570
8458
|
rankseason: currentSeason,
|
|
8571
8459
|
handle: { $nin: rankedPlayers.map((p) => p.handle) }
|
|
8572
8460
|
});
|
|
8573
|
-
const otherHandles = otherPlayers.map((p) => p.handle);
|
|
8574
|
-
const otherCareerData = await ctx.database.get("ggcevo_careers", {
|
|
8575
|
-
handle: { $in: otherHandles }
|
|
8576
|
-
});
|
|
8577
|
-
const otherGroupMap = new Map(otherCareerData.map((c) => [c.handle, c.group]));
|
|
8578
8461
|
for (const player of otherPlayers) {
|
|
8579
8462
|
if (player.rank > 0) {
|
|
8580
8463
|
positiveCount++;
|
|
8581
|
-
|
|
8582
|
-
|
|
8583
|
-
const [signData] = await ctx.database.get("ggcevo_sign", { handle: player.handle });
|
|
8584
|
-
await ctx.database.upsert("ggcevo_sign", [{
|
|
8585
|
-
handle: player.handle,
|
|
8586
|
-
totalRewards: (signData?.totalRewards || 0) + gold
|
|
8587
|
-
}], ["handle"]);
|
|
8588
|
-
const group = otherGroupMap.get(player.handle);
|
|
8589
|
-
if (group === "辛迪加海盗") {
|
|
8590
|
-
piratePositive++;
|
|
8591
|
-
const [career] = await ctx.database.get("ggcevo_careers", { handle: player.handle });
|
|
8592
|
-
if (career) {
|
|
8593
|
-
await ctx.database.upsert("ggcevo_careers", [{
|
|
8594
|
-
handle: player.handle,
|
|
8595
|
-
redcrystal: (career.redcrystal || 0) + redcrystal
|
|
8596
|
-
}], ["handle"]);
|
|
8597
|
-
}
|
|
8598
|
-
}
|
|
8599
|
-
} else if (player.rank <= 0) {
|
|
8464
|
+
await updateBackpack(player.handle, 1, 20);
|
|
8465
|
+
} else {
|
|
8600
8466
|
negativeCount++;
|
|
8601
|
-
|
|
8602
|
-
const redcrystal = 10;
|
|
8603
|
-
const [signData] = await ctx.database.get("ggcevo_sign", { handle: player.handle });
|
|
8604
|
-
await ctx.database.upsert("ggcevo_sign", [{
|
|
8605
|
-
handle: player.handle,
|
|
8606
|
-
totalRewards: (signData?.totalRewards || 0) + gold
|
|
8607
|
-
}], ["handle"]);
|
|
8608
|
-
const group = otherGroupMap.get(player.handle);
|
|
8609
|
-
if (group === "辛迪加海盗") {
|
|
8610
|
-
pirateNegative++;
|
|
8611
|
-
const [career] = await ctx.database.get("ggcevo_careers", { handle: player.handle });
|
|
8612
|
-
if (career) {
|
|
8613
|
-
await ctx.database.upsert("ggcevo_careers", [{
|
|
8614
|
-
handle: player.handle,
|
|
8615
|
-
redcrystal: (career.redcrystal || 0) + redcrystal
|
|
8616
|
-
}], ["handle"]);
|
|
8617
|
-
}
|
|
8618
|
-
}
|
|
8467
|
+
await updateBackpack(player.handle, 1, 10);
|
|
8619
8468
|
}
|
|
8620
8469
|
}
|
|
8621
8470
|
report += "🎉 参与奖励发放:\n";
|
|
8622
|
-
report += `✦ 积极玩家(分数>0):${positiveCount}
|
|
8623
|
-
`;
|
|
8624
|
-
report += `✦ 奋斗玩家(分数≤0):${negativeCount}人,每人获得1000枚金币 + 10红晶(海盗专属)
|
|
8625
|
-
|
|
8471
|
+
report += `✦ 积极玩家(分数>0):${positiveCount}人 × 20咕咕币
|
|
8626
8472
|
`;
|
|
8627
|
-
report +=
|
|
8473
|
+
report += `✦ 奋斗玩家(分数≤0):${negativeCount}人 × 10咕咕币
|
|
8628
8474
|
|
|
8629
8475
|
`;
|
|
8630
8476
|
report += `✅ 总计发放:
|
|
@@ -8633,37 +8479,28 @@ ${ticketMessage}${effectMessage}`;
|
|
|
8633
8479
|
`;
|
|
8634
8480
|
report += `- 参与玩家:${otherPlayers.length}人`;
|
|
8635
8481
|
await session.send(report);
|
|
8636
|
-
|
|
8637
|
-
|
|
8638
|
-
|
|
8639
|
-
|
|
8640
|
-
|
|
8641
|
-
|
|
8642
|
-
|
|
8643
|
-
|
|
8644
|
-
|
|
8645
|
-
|
|
8646
|
-
|
|
8647
|
-
|
|
8648
|
-
|
|
8649
|
-
|
|
8650
|
-
|
|
8651
|
-
{ coins: 80, gold: 8e3, redcrystal: 80 },
|
|
8652
|
-
// 第3名
|
|
8653
|
-
...Array(7).fill({ coins: 60, gold: 6e3, redcrystal: 60 }),
|
|
8654
|
-
// 4-10名
|
|
8655
|
-
...Array(10).fill({ coins: 40, gold: 4e3, redcrystal: 40 })
|
|
8656
|
-
// 11-20名
|
|
8657
|
-
];
|
|
8658
|
-
return rank <= rewards.length ? rewards[rank - 1] : { coins: 0, gold: 0, redcrystal: 0 };
|
|
8482
|
+
return `${currentSeason}赛季结算完成!`;
|
|
8483
|
+
async function updateBackpack(handle, itemId, quantity) {
|
|
8484
|
+
const [item] = await ctx.database.get("ggcevo_backpack", {
|
|
8485
|
+
handle,
|
|
8486
|
+
itemId
|
|
8487
|
+
});
|
|
8488
|
+
await ctx.database.upsert("ggcevo_backpack", [{
|
|
8489
|
+
handle,
|
|
8490
|
+
itemId,
|
|
8491
|
+
quantity: (item?.quantity || 0) + quantity
|
|
8492
|
+
}], ["handle", "itemId"]);
|
|
8493
|
+
}
|
|
8494
|
+
__name(updateBackpack, "updateBackpack");
|
|
8495
|
+
function getCoinsByRank(rank) {
|
|
8496
|
+
return rank === 1 ? 100 : rank === 2 ? 90 : rank === 3 ? 80 : rank <= 10 ? 60 : 40;
|
|
8659
8497
|
}
|
|
8660
|
-
__name(
|
|
8498
|
+
__name(getCoinsByRank, "getCoinsByRank");
|
|
8661
8499
|
function getMedalType(rank) {
|
|
8662
8500
|
if (rank === 1) return "champion";
|
|
8663
8501
|
if (rank === 2) return "runnerUp";
|
|
8664
8502
|
if (rank === 3) return "thirdPlace";
|
|
8665
|
-
|
|
8666
|
-
return "top20";
|
|
8503
|
+
return rank <= 10 ? "top10" : "top20";
|
|
8667
8504
|
}
|
|
8668
8505
|
__name(getMedalType, "getMedalType");
|
|
8669
8506
|
});
|
|
@@ -9876,7 +9713,7 @@ ${discountDetails.join("\n")}`;
|
|
|
9876
9713
|
}));
|
|
9877
9714
|
return [
|
|
9878
9715
|
`🛡️ ${session.username}的武器仓库`,
|
|
9879
|
-
'使用"
|
|
9716
|
+
'使用"装备武器 武器名称"来装备武器',
|
|
9880
9717
|
"⚡表示当前装备武器",
|
|
9881
9718
|
"──────────────",
|
|
9882
9719
|
...weaponDetails.length ? weaponDetails : ["空空如也,快去“武器库”看看吧!"],
|
|
@@ -9885,7 +9722,7 @@ ${discountDetails.join("\n")}`;
|
|
|
9885
9722
|
"🔧 改装效果在战斗中生效"
|
|
9886
9723
|
].join("\n");
|
|
9887
9724
|
});
|
|
9888
|
-
ctx.command("ggcevo
|
|
9725
|
+
ctx.command("ggcevo/装备武器 <weapon>").alias("装备").action(async ({ session }, weapon) => {
|
|
9889
9726
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
9890
9727
|
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
9891
9728
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
@@ -9893,8 +9730,8 @@ ${discountDetails.join("\n")}`;
|
|
|
9893
9730
|
if (existingEntries.length > 0) {
|
|
9894
9731
|
return `⛔ 您已被列入黑名单。`;
|
|
9895
9732
|
}
|
|
9896
|
-
if (!weapon) return "
|
|
9897
|
-
if (!weaponConfig[weapon]) return "
|
|
9733
|
+
if (!weapon) return "请输入“装备武器 武器名称”来装备一把你拥有的武器。";
|
|
9734
|
+
if (!weaponConfig[weapon]) return "武器名称错误,请输入“装备武器 武器名称”来装备一把你拥有的武器。";
|
|
9898
9735
|
const config2 = weaponConfig[weapon];
|
|
9899
9736
|
const [owned] = await ctx.database.get("ggcevo_weapons", {
|
|
9900
9737
|
handle,
|
|
@@ -9936,7 +9773,7 @@ ${discountDetails.join("\n")}`;
|
|
|
9936
9773
|
}
|
|
9937
9774
|
return handleTechUpgrade(ctx, handle, target);
|
|
9938
9775
|
});
|
|
9939
|
-
ctx.command("ggcevo/升级武器 <target>", "
|
|
9776
|
+
ctx.command("ggcevo/升级武器 <target>", "升级武器").alias("升级").action(async ({ session }, target) => {
|
|
9940
9777
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
9941
9778
|
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
9942
9779
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
@@ -12613,23 +12450,24 @@ ${Spacestationtechnology.map((t) => t.techname).join("、")}`;
|
|
|
12613
12450
|
if (!profile) return "🔒 需要先绑定游戏句柄";
|
|
12614
12451
|
const { regionId, realmId, profileId } = profile;
|
|
12615
12452
|
const handle = `${regionId}-S2-${realmId}-${profileId}`;
|
|
12453
|
+
const username = session.username;
|
|
12616
12454
|
if ((await ctx.database.get("ggcevo_blacklist", { handle })).length) {
|
|
12617
12455
|
return "⛔ 您已被列入黑名单。";
|
|
12618
12456
|
}
|
|
12619
12457
|
const [signInfo] = await ctx.database.get("ggcevo_sign", { handle });
|
|
12620
12458
|
if (!signInfo) return "⚠️ 账号数据异常,请重试";
|
|
12621
12459
|
const userCoins = signInfo.totalRewards;
|
|
12622
|
-
const username = session.username;
|
|
12623
12460
|
const availableItems = GUESSING_ITEMS.filter((item) => item.status === "open");
|
|
12624
12461
|
if (!itemId) {
|
|
12625
12462
|
return [
|
|
12626
12463
|
"🎯 可参与竞猜项目 🎯",
|
|
12627
12464
|
'使用"竞猜 项目ID 金额 内容"下注',
|
|
12628
|
-
"
|
|
12465
|
+
"=================================",
|
|
12629
12466
|
...availableItems.map(
|
|
12630
|
-
(item) => `▸ [ID
|
|
12467
|
+
(item) => `▸ [ID:${item.id}] ${item.description}
|
|
12468
|
+
赔率: ${item.odds}x | 最低投注: ${item.minBet}金币`
|
|
12631
12469
|
),
|
|
12632
|
-
"
|
|
12470
|
+
"================================="
|
|
12633
12471
|
].join("\n");
|
|
12634
12472
|
}
|
|
12635
12473
|
const parsedItemId = parseInt(itemId);
|
|
@@ -12647,12 +12485,19 @@ ${Spacestationtechnology.map((t) => t.techname).join("、")}`;
|
|
|
12647
12485
|
`📋 项目详情 [ID:${parsedItemId}]`,
|
|
12648
12486
|
`描述: ${targetItem.description}`,
|
|
12649
12487
|
`赔率: ${targetItem.odds}x`,
|
|
12488
|
+
`最低投注: ${targetItem.minBet}金币`,
|
|
12650
12489
|
`猜中次数: ${wins} 次`,
|
|
12651
12490
|
`您的状态: ${betInfo}`
|
|
12652
12491
|
].join("\n");
|
|
12653
12492
|
}
|
|
12654
12493
|
if (!amount) return "⚠️ 请输入下注金额";
|
|
12655
12494
|
if (!guess) return "⚠️ 请填写竞猜内容";
|
|
12495
|
+
const betAmount = parseInt(amount);
|
|
12496
|
+
if (isNaN(betAmount) || betAmount < 1) return "⚠️ 请输入有效金额";
|
|
12497
|
+
if (betAmount < targetItem.minBet) {
|
|
12498
|
+
return `⚠️ 下注金额必须≥${targetItem.minBet}金币 (当前项目最低投注)`;
|
|
12499
|
+
}
|
|
12500
|
+
if (betAmount > userCoins) return `⚠️ 金币不足,当前账户只有 ${userCoins} 金币`;
|
|
12656
12501
|
const [existingBet] = await ctx.database.get("ggcevo_guess", {
|
|
12657
12502
|
handle,
|
|
12658
12503
|
itemId: parsedItemId,
|
|
@@ -12664,9 +12509,6 @@ ${Spacestationtechnology.map((t) => t.techname).join("、")}`;
|
|
|
12664
12509
|
当前下注内容: ${existingBet.guessContent}
|
|
12665
12510
|
当前下注金额: ${existingBet.amount}金币`;
|
|
12666
12511
|
}
|
|
12667
|
-
const betAmount = parseInt(amount);
|
|
12668
|
-
if (isNaN(betAmount) || betAmount < 1) return "⚠️ 请输入有效金额";
|
|
12669
|
-
if (betAmount > userCoins) return `⚠️ 金币不足,当前账户只有 ${userCoins} 金币`;
|
|
12670
12512
|
const validBossNames = bossPool.map((pool) => pool.main.name);
|
|
12671
12513
|
if (!validBossNames.includes(guess)) {
|
|
12672
12514
|
return `⚠️ 无效的主宰名字,可用选项:
|
|
@@ -12712,11 +12554,7 @@ ${validBossNames.join("、")}`;
|
|
|
12712
12554
|
每天获得50-100金币
|
|
12713
12555
|
--------------
|
|
12714
12556
|
签到红晶奖励(辛迪加财务经理职业加成):
|
|
12715
|
-
|
|
12716
|
-
第7-13天每天获得2枚红晶
|
|
12717
|
-
第14-20天每天获得3枚红晶
|
|
12718
|
-
第21-27天每天获得4枚红晶
|
|
12719
|
-
第28天及以后每天获得5枚红晶
|
|
12557
|
+
每天签到获得5枚红晶
|
|
12720
12558
|
--------------
|
|
12721
12559
|
注意:补签只能获得咕咕币
|
|
12722
12560
|
`.trim();
|
|
@@ -12774,36 +12612,26 @@ PK同玩家限战:1次/日
|
|
|
12774
12612
|
🌟 异形主宰击败奖励规则 🌟
|
|
12775
12613
|
🏆 前20名奖励(按伤害排名):
|
|
12776
12614
|
1️⃣ 第1名:
|
|
12777
|
-
|
|
12615
|
+
50 资源兑换券
|
|
12778
12616
|
2️⃣ 第2名:
|
|
12779
|
-
|
|
12617
|
+
45 资源兑换券
|
|
12780
12618
|
3️⃣ 第3名:
|
|
12781
|
-
|
|
12619
|
+
40 资源兑换券
|
|
12782
12620
|
🎖️ 第4-10名:
|
|
12783
|
-
|
|
12621
|
+
30 资源兑换券
|
|
12784
12622
|
💫 第11-20名:
|
|
12785
|
-
|
|
12623
|
+
20 资源兑换券
|
|
12624
|
+
💫 第21-50名:
|
|
12625
|
+
10 资源兑换券
|
|
12786
12626
|
💝 其他参与者:
|
|
12787
|
-
|
|
12788
|
-
|
|
12789
|
-
|
|
12790
|
-
|
|
12791
|
-
🧹 清洁工职业加成:
|
|
12792
|
-
当子代被击败时,清理尸体获得 5 红晶
|
|
12793
|
-
当主宰被击败时,清理尸体获得 10 红晶
|
|
12794
|
-
若击败者(最后一击)为清洁工,则其获得双倍红晶奖励
|
|
12795
|
-
|
|
12796
|
-
|
|
12797
|
-
🌈 精灵双倍祈愿:
|
|
12798
|
-
生效时金币和咕咕币奖励翻倍
|
|
12799
|
-
(需要祈愿有效期内+首次使用)
|
|
12627
|
+
5 资源兑换券
|
|
12628
|
+
|
|
12629
|
+
🌈 精灵双倍祈愿生效期间,获得双倍的资源兑换券
|
|
12800
12630
|
|
|
12801
12631
|
💡 特殊说明:
|
|
12802
12632
|
1. 奖励自动发放到账户,无需手动领取
|
|
12803
|
-
2.
|
|
12804
|
-
3.
|
|
12805
|
-
4. 排名根据实际造成伤害计算
|
|
12806
|
-
5. 红晶 = 辛迪加海盗阵营货币,用途广泛
|
|
12633
|
+
2. 精灵双倍祈愿可通过“祈愿”指令概率获得
|
|
12634
|
+
3. 排名根据实际造成伤害计算
|
|
12807
12635
|
`.trim();
|
|
12808
12636
|
});
|
|
12809
12637
|
ctx.command("ggcevo/祈愿系统").action(({}) => {
|
|
@@ -12820,7 +12648,7 @@ PK同玩家限战:1次/日
|
|
|
12820
12648
|
|
|
12821
12649
|
🔮 稀有祈愿池(5%概率)
|
|
12822
12650
|
🗡️ 悲鸣之锋:攻击伤害提高10%,武器每等级提高5%伤害
|
|
12823
|
-
🧚
|
|
12651
|
+
🧚 精灵双倍:下一次击败主宰时可获得双倍的资源兑换券
|
|
12824
12652
|
🐾 喵喵财源:签到获得双倍的金币和咕咕币
|
|
12825
12653
|
🎵 暴击韵律:攻击暴击率提高20%
|
|
12826
12654
|
⚠️ 酥手空空:立即失去50枚金币(可触发彩蛋)
|
|
@@ -12830,20 +12658,18 @@ PK同玩家限战:1次/日
|
|
|
12830
12658
|
return `
|
|
12831
12659
|
🏆 赛季排名奖励规则:
|
|
12832
12660
|
🥇 第1名:
|
|
12833
|
-
100 咕咕币 +
|
|
12661
|
+
100 咕咕币 + 🥇 赛季冠军勋章
|
|
12834
12662
|
🥈 第2名:
|
|
12835
|
-
90 咕咕币 +
|
|
12663
|
+
90 咕咕币 + 🥈 赛季亚军勋章
|
|
12836
12664
|
🥉 第3名:
|
|
12837
|
-
80 咕咕币 +
|
|
12665
|
+
80 咕咕币 + 🥉 赛季季军勋章
|
|
12838
12666
|
🏅 第4-10名:
|
|
12839
|
-
60 咕咕币 +
|
|
12667
|
+
60 咕咕币 + 🏅 赛季前十勋章
|
|
12840
12668
|
🎖 第11-20名:
|
|
12841
|
-
40 咕咕币 +
|
|
12669
|
+
40 咕咕币 + 🎖 赛季前二十勋章
|
|
12842
12670
|
💝 参与奖励:
|
|
12843
|
-
▸ 所有积分 > 0 玩家:
|
|
12844
|
-
▸ 所有积分 ≤ 0 玩家:
|
|
12845
|
-
(不包含前20名已获得奖励玩家)
|
|
12846
|
-
注意:红晶只有辛迪加海盗阵营能获得
|
|
12671
|
+
▸ 所有积分 > 0 玩家:20 咕咕币
|
|
12672
|
+
▸ 所有积分 ≤ 0 玩家:10 咕咕币
|
|
12847
12673
|
|
|
12848
12674
|
📦 勋章系统:
|
|
12849
12675
|
● 每个勋章对应专属成就
|
|
@@ -12853,7 +12679,7 @@ PK同玩家限战:1次/日
|
|
|
12853
12679
|
📌 重要说明:
|
|
12854
12680
|
1. 结算后自动发放所有奖励
|
|
12855
12681
|
2. 勋章可通过背包查看
|
|
12856
|
-
3.
|
|
12682
|
+
3. 每个赛季2个月
|
|
12857
12683
|
`.trim();
|
|
12858
12684
|
});
|
|
12859
12685
|
}
|
package/lib/items.d.ts
CHANGED
|
@@ -126,6 +126,11 @@ export declare const initDefaultItems: {
|
|
|
126
126
|
type: string;
|
|
127
127
|
description: string;
|
|
128
128
|
};
|
|
129
|
+
资源兑换券: {
|
|
130
|
+
id: number;
|
|
131
|
+
type: string;
|
|
132
|
+
description: string;
|
|
133
|
+
};
|
|
129
134
|
'\uD83E\uDD47\u5148\u884C\u8005\u8D5B\u5B63\u51A0\u519B\u52CB\u7AE0': {
|
|
130
135
|
id: number;
|
|
131
136
|
type: string;
|
package/lib/utils.d.ts
CHANGED