koishi-plugin-ggcevo-game 1.3.15 → 1.3.16
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 +129 -97
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -450,7 +450,7 @@ function apply(ctx, config) {
|
|
|
450
450
|
description: "一个小型辛迪加机器人,可以破坏电子银行账户",
|
|
451
451
|
price: 0,
|
|
452
452
|
redCrystalCost: 60,
|
|
453
|
-
effects: "
|
|
453
|
+
effects: "此物品存放于仓库,仅在处于辛迪加海盗阵营时生效。每日签到金币奖励+50%,每拥有100金币,增加1%(至多增加100%)。"
|
|
454
454
|
}
|
|
455
455
|
};
|
|
456
456
|
const modConfig = {
|
|
@@ -625,7 +625,7 @@ function apply(ctx, config) {
|
|
|
625
625
|
},
|
|
626
626
|
"辐射": {
|
|
627
627
|
effect: 0,
|
|
628
|
-
description: "受到伽马枪攻击时会积累辐射层数,每层使受到的伤害增加1%"
|
|
628
|
+
description: "受到伽马枪攻击时会积累辐射层数,每层使受到的伤害增加1%(至多增加100%)"
|
|
629
629
|
}
|
|
630
630
|
};
|
|
631
631
|
const defineBoss = /* @__PURE__ */ __name((config2) => config2, "defineBoss");
|
|
@@ -744,28 +744,28 @@ function apply(ctx, config) {
|
|
|
744
744
|
{
|
|
745
745
|
professionName: "深空矿工",
|
|
746
746
|
effect: "每日签到获得的金币收益增加50%",
|
|
747
|
-
requirements: "当月累计签到
|
|
747
|
+
requirements: "当月累计签到7天及以上",
|
|
748
748
|
Jobtransfer: true,
|
|
749
749
|
costcoins: 1500
|
|
750
750
|
},
|
|
751
751
|
{
|
|
752
752
|
professionName: "警卫员下士",
|
|
753
753
|
effect: "攻击获得的金币增加50%",
|
|
754
|
-
requirements: "
|
|
754
|
+
requirements: "当期伤害榜累计攻击4次及以上",
|
|
755
755
|
Jobtransfer: true,
|
|
756
756
|
costcoins: 2e3
|
|
757
757
|
},
|
|
758
758
|
{
|
|
759
759
|
professionName: "警卫长",
|
|
760
760
|
effect: "攻击伤害+5%,攻击获得的金币增加100%",
|
|
761
|
-
requirements: "
|
|
761
|
+
requirements: "当期伤害榜前十名",
|
|
762
762
|
Jobtransfer: true,
|
|
763
763
|
costcoins: 3e3
|
|
764
764
|
},
|
|
765
765
|
{
|
|
766
766
|
professionName: "武器中士",
|
|
767
767
|
effect: "攻击伤害+15%",
|
|
768
|
-
requirements: "
|
|
768
|
+
requirements: "当期伤害榜累计造成100及以上伤害",
|
|
769
769
|
Jobtransfer: true,
|
|
770
770
|
costcoins: 2e3
|
|
771
771
|
},
|
|
@@ -779,7 +779,7 @@ function apply(ctx, config) {
|
|
|
779
779
|
{
|
|
780
780
|
professionName: "情报副官",
|
|
781
781
|
effect: "升级空间站科技花费的金币是原价的80%",
|
|
782
|
-
requirements: "
|
|
782
|
+
requirements: "至少一个空间站科技等级≥3级",
|
|
783
783
|
Jobtransfer: true,
|
|
784
784
|
costcoins: 3e3
|
|
785
785
|
},
|
|
@@ -815,8 +815,8 @@ function apply(ctx, config) {
|
|
|
815
815
|
const syndicatePirateConfig = [
|
|
816
816
|
{
|
|
817
817
|
professionName: "能量武器专家",
|
|
818
|
-
effect: "能量武器攻击伤害+20
|
|
819
|
-
requirements: "
|
|
818
|
+
effect: "能量武器攻击伤害+20%; 解锁MK-4激光步枪(传奇)购买权限",
|
|
819
|
+
requirements: "至少拥有一把3级及以上等级的能量武器",
|
|
820
820
|
Jobtransfer: true,
|
|
821
821
|
costcoins: 0,
|
|
822
822
|
costredcrystal: 30
|
|
@@ -824,7 +824,7 @@ function apply(ctx, config) {
|
|
|
824
824
|
{
|
|
825
825
|
professionName: "清洁工",
|
|
826
826
|
effect: "击败主宰能够根据排名获得红晶; 每次攻击额外获得红晶",
|
|
827
|
-
requirements: "
|
|
827
|
+
requirements: "当期伤害榜前二十名",
|
|
828
828
|
Jobtransfer: true,
|
|
829
829
|
costcoins: 0,
|
|
830
830
|
costredcrystal: 20
|
|
@@ -839,16 +839,16 @@ function apply(ctx, config) {
|
|
|
839
839
|
},
|
|
840
840
|
{
|
|
841
841
|
professionName: "猩红杀手",
|
|
842
|
-
effect: "
|
|
843
|
-
requirements: "
|
|
844
|
-
Jobtransfer:
|
|
842
|
+
effect: "使用“侦查步枪”造成的伤害+15%; 解锁DSR-55反器材步枪(传奇)购买权限",
|
|
843
|
+
requirements: "“侦查步枪”武器等级≥3",
|
|
844
|
+
Jobtransfer: true,
|
|
845
845
|
costcoins: 0,
|
|
846
|
-
costredcrystal:
|
|
846
|
+
costredcrystal: 30
|
|
847
847
|
},
|
|
848
848
|
{
|
|
849
849
|
professionName: "纵火狂",
|
|
850
|
-
effect: "热能武器攻击伤害+20
|
|
851
|
-
requirements: "
|
|
850
|
+
effect: "热能武器攻击伤害+20%; 解锁龙息散弹枪(传奇)购买权限",
|
|
851
|
+
requirements: "至少拥有一把3级及以上等级的热能武器",
|
|
852
852
|
Jobtransfer: true,
|
|
853
853
|
costcoins: 0,
|
|
854
854
|
costredcrystal: 30
|
|
@@ -856,7 +856,7 @@ function apply(ctx, config) {
|
|
|
856
856
|
{
|
|
857
857
|
professionName: "辛迪加财务经理",
|
|
858
858
|
effect: "每日签到能额外获得红晶",
|
|
859
|
-
requirements: "当月累计签到
|
|
859
|
+
requirements: "当月累计签到14天及以上",
|
|
860
860
|
Jobtransfer: true,
|
|
861
861
|
costcoins: 0,
|
|
862
862
|
costredcrystal: 45
|
|
@@ -1063,7 +1063,7 @@ function apply(ctx, config) {
|
|
|
1063
1063
|
return passiveEffect;
|
|
1064
1064
|
}
|
|
1065
1065
|
__name(calculatePassiveEffects, "calculatePassiveEffects");
|
|
1066
|
-
async function calculateCareerBonus(ctx2, handle, currentDamage, weaponType) {
|
|
1066
|
+
async function calculateCareerBonus(ctx2, handle, currentDamage, weaponType, weaponId) {
|
|
1067
1067
|
const [careerData] = await ctx2.database.get("ggcevo_careers", { handle });
|
|
1068
1068
|
const career = careerData?.career;
|
|
1069
1069
|
const faction = careerData?.group;
|
|
@@ -1092,6 +1092,14 @@ function apply(ctx, config) {
|
|
|
1092
1092
|
message = "⚠️ 纵火狂:未装备热能武器,加成未生效";
|
|
1093
1093
|
}
|
|
1094
1094
|
}
|
|
1095
|
+
if (faction === "辛迪加海盗" && career === "猩红杀手") {
|
|
1096
|
+
if (weaponId === 7) {
|
|
1097
|
+
multiplier *= 1.15;
|
|
1098
|
+
message = "⚡ 职业加成:猩红杀手(侦查步枪伤害+15%)";
|
|
1099
|
+
} else {
|
|
1100
|
+
message = "⚠️ 猩红杀手:未装备侦查步枪,加成未生效";
|
|
1101
|
+
}
|
|
1102
|
+
}
|
|
1095
1103
|
return {
|
|
1096
1104
|
damage: currentDamage * multiplier,
|
|
1097
1105
|
message: message || void 0
|
|
@@ -1113,6 +1121,7 @@ function apply(ctx, config) {
|
|
|
1113
1121
|
const weaponConfigEntry = Object.entries(weaponConfig).find(([_, c]) => c.id === equippedWeapon.weaponId);
|
|
1114
1122
|
const [weaponName, weaponData] = weaponConfigEntry;
|
|
1115
1123
|
const weaponType = weaponData.type;
|
|
1124
|
+
const weaponId = weaponData.id;
|
|
1116
1125
|
let damage = weaponData.damage * (1 + 0.1 * equippedWeapon.level);
|
|
1117
1126
|
const [critRhythmEffect] = await ctx2.database.get("ggcevo_Wish_Record", {
|
|
1118
1127
|
handle,
|
|
@@ -1127,7 +1136,7 @@ function apply(ctx, config) {
|
|
|
1127
1136
|
);
|
|
1128
1137
|
damage *= 1 + totalModAdd;
|
|
1129
1138
|
if (critRhythmEffect) {
|
|
1130
|
-
effectMessage.push("🎵 暴击韵律祈愿生效(
|
|
1139
|
+
effectMessage.push("🎵 暴击韵律祈愿生效(武器暴击率+20%)");
|
|
1131
1140
|
}
|
|
1132
1141
|
const tagMultiplier = await calculateTagMultiplier(weaponData, finalTags, equippedWeapon);
|
|
1133
1142
|
damage *= 1 + tagMultiplier;
|
|
@@ -1137,8 +1146,9 @@ function apply(ctx, config) {
|
|
|
1137
1146
|
ctx2,
|
|
1138
1147
|
handle,
|
|
1139
1148
|
damage,
|
|
1140
|
-
weaponType
|
|
1149
|
+
weaponType,
|
|
1141
1150
|
// 新增参数
|
|
1151
|
+
weaponId
|
|
1142
1152
|
);
|
|
1143
1153
|
damage = careerDamage;
|
|
1144
1154
|
if (careerMessage) effectMessage.push(careerMessage);
|
|
@@ -1331,7 +1341,7 @@ function apply(ctx, config) {
|
|
|
1331
1341
|
const groupId = [...config.groupId];
|
|
1332
1342
|
if (totalBosses === 0) {
|
|
1333
1343
|
await activateNextBossGroup();
|
|
1334
|
-
await ctx.broadcast(groupId, `🔄
|
|
1344
|
+
await ctx.broadcast(groupId, `🔄 咕咕之战系统已初始化,首个主宰已登场!`);
|
|
1335
1345
|
return;
|
|
1336
1346
|
}
|
|
1337
1347
|
const now = /* @__PURE__ */ new Date();
|
|
@@ -1491,7 +1501,7 @@ function apply(ctx, config) {
|
|
|
1491
1501
|
const newDamage = Math.floor(initialDamage * 0.5);
|
|
1492
1502
|
return {
|
|
1493
1503
|
initialDamage: newDamage,
|
|
1494
|
-
messages: ["🛡️
|
|
1504
|
+
messages: ["🛡️ 【感染空间站】生效:空间站哨枪塔存活,受到的伤害减少50%"]
|
|
1495
1505
|
};
|
|
1496
1506
|
}
|
|
1497
1507
|
return null;
|
|
@@ -1605,6 +1615,9 @@ function apply(ctx, config) {
|
|
|
1605
1615
|
}, "handleStructuralArmor"),
|
|
1606
1616
|
// 处理吸血相关效果(加法减伤 + 独立增伤)
|
|
1607
1617
|
handleBloodEffects: /* @__PURE__ */ __name(function(targetBoss, initialDamage, currentHP, maxHP) {
|
|
1618
|
+
if (!targetBoss.skills.includes("吸血唾液")) {
|
|
1619
|
+
return null;
|
|
1620
|
+
}
|
|
1608
1621
|
let messages = [];
|
|
1609
1622
|
let newDamage = initialDamage;
|
|
1610
1623
|
const bloodStacks = targetBoss.Skillcountpoints || 0;
|
|
@@ -1612,23 +1625,26 @@ function apply(ctx, config) {
|
|
|
1612
1625
|
if (targetBoss.skills.includes("吸血唾液")) {
|
|
1613
1626
|
totalReduction += bloodStacks * 0.05;
|
|
1614
1627
|
if (bloodStacks > 0) {
|
|
1615
|
-
messages.push(`🩸
|
|
1628
|
+
messages.push(`🩸 【吸血唾液】技能生效:受到的伤害-${bloodStacks * 5}%`);
|
|
1616
1629
|
}
|
|
1617
1630
|
}
|
|
1618
1631
|
if (targetBoss.skills.includes("嗜血狂暴") && currentHP / maxHP < 0.5) {
|
|
1619
1632
|
totalReduction += 0.2;
|
|
1620
|
-
messages.push(`🔥 【嗜血狂暴】技能生效:血量低于50
|
|
1633
|
+
messages.push(`🔥 【嗜血狂暴】技能生效:血量低于50%,进入狂暴状态,受到的伤害-20%`);
|
|
1621
1634
|
}
|
|
1622
1635
|
if (totalReduction > 0) {
|
|
1623
1636
|
newDamage = Math.floor(initialDamage * (1 - totalReduction));
|
|
1624
1637
|
}
|
|
1625
1638
|
if (targetBoss.skills.includes("吐血") && bloodStacks < 1) {
|
|
1626
1639
|
newDamage = Math.floor(newDamage * 1.1);
|
|
1627
|
-
messages.push(`💔
|
|
1640
|
+
messages.push(`💔 【吐血】技能生效:无“吸血”层数,受到的伤害+10%`);
|
|
1628
1641
|
}
|
|
1629
1642
|
return newDamage !== initialDamage ? { initialDamage: newDamage, messages } : null;
|
|
1630
1643
|
}, "handleBloodEffects"),
|
|
1631
1644
|
handleBloodCount: /* @__PURE__ */ __name(async function(ctx2, targetBoss, currentHP, maxHP) {
|
|
1645
|
+
if (!targetBoss.skills.includes("吸血唾液")) {
|
|
1646
|
+
return null;
|
|
1647
|
+
}
|
|
1632
1648
|
let messages = [];
|
|
1633
1649
|
let updatedHP = currentHP;
|
|
1634
1650
|
const oldStacks = targetBoss.Skillcountpoints || 0;
|
|
@@ -1636,7 +1652,7 @@ function apply(ctx, config) {
|
|
|
1636
1652
|
const heal = Math.floor(maxHP * 0.2);
|
|
1637
1653
|
updatedHP = Math.min(currentHP + heal, maxHP);
|
|
1638
1654
|
await ctx2.database.set("ggcevo_boss", { name: targetBoss.name }, { Skillcountpoints: 0 });
|
|
1639
|
-
messages.push(`🍽️
|
|
1655
|
+
messages.push(`🍽️ 【进食】技能生效:自身回复20%最大生命值(+${heal}HP),“吸血”层数清零`);
|
|
1640
1656
|
return { updatedHP, messages };
|
|
1641
1657
|
}
|
|
1642
1658
|
let newStacks = oldStacks + 1;
|
|
@@ -1656,11 +1672,23 @@ function apply(ctx, config) {
|
|
|
1656
1672
|
if (weaponName !== "伽马枪") return null;
|
|
1657
1673
|
const messages = [];
|
|
1658
1674
|
const isNewRadiation = !targetBoss.skills.includes("辐射");
|
|
1675
|
+
const newSkills = isNewRadiation ? [...targetBoss.skills, "辐射"] : targetBoss.skills;
|
|
1676
|
+
const newVulnerability = isNewRadiation ? 1 : Math.min(targetBoss.Vulnerability + 1, 100);
|
|
1677
|
+
let layerMsg;
|
|
1678
|
+
if (isNewRadiation) {
|
|
1679
|
+
layerMsg = `☢️ 获得【辐射】效果`;
|
|
1680
|
+
} else {
|
|
1681
|
+
if (newVulnerability === targetBoss.Vulnerability) {
|
|
1682
|
+
layerMsg = `☢️ 辐射层数已达上限(100层)`;
|
|
1683
|
+
} else {
|
|
1684
|
+
const addedLayers = newVulnerability - targetBoss.Vulnerability;
|
|
1685
|
+
layerMsg = `☢️ 辐射层数+${addedLayers}`;
|
|
1686
|
+
}
|
|
1687
|
+
}
|
|
1659
1688
|
await ctx2.database.set("ggcevo_boss", { name: targetBoss.name }, {
|
|
1660
|
-
skills:
|
|
1661
|
-
Vulnerability:
|
|
1689
|
+
skills: newSkills,
|
|
1690
|
+
Vulnerability: newVulnerability
|
|
1662
1691
|
});
|
|
1663
|
-
const layerMsg = isNewRadiation ? `☢️ 获得【辐射】效果` : `☢️ 辐射层数+1`;
|
|
1664
1692
|
messages.push(`${targetBoss.name} ${layerMsg}`);
|
|
1665
1693
|
return { messages };
|
|
1666
1694
|
}, "handleGammaRadiation"),
|
|
@@ -1678,7 +1706,7 @@ function apply(ctx, config) {
|
|
|
1678
1706
|
return {
|
|
1679
1707
|
damage: amplifiedDamage,
|
|
1680
1708
|
messages: radiationLayers > 0 ? [
|
|
1681
|
-
`☢️ 【辐射】效果触发:当前${radiationLayers}
|
|
1709
|
+
`☢️ 【辐射】效果触发:当前${radiationLayers}层辐射,受到的伤害+${radiationLayers}%`
|
|
1682
1710
|
] : []
|
|
1683
1711
|
};
|
|
1684
1712
|
}, "calculateRadiationDamage"),
|
|
@@ -1968,42 +1996,39 @@ function apply(ctx, config) {
|
|
|
1968
1996
|
switch (profession) {
|
|
1969
1997
|
case "深空矿工":
|
|
1970
1998
|
return {
|
|
1971
|
-
success: signData?.monthlyDays >=
|
|
1972
|
-
message:
|
|
1999
|
+
success: signData?.monthlyDays >= 7,
|
|
2000
|
+
message: `需要当月累计签到7天及以上(当前${signData?.monthlyDays || 0}天)`
|
|
1973
2001
|
};
|
|
1974
2002
|
case "警卫员下士":
|
|
1975
2003
|
if (!mainBoss) return { success: false, message: "当前暂无伤害榜。" };
|
|
1976
2004
|
return {
|
|
1977
|
-
success: totalAttack >=
|
|
1978
|
-
message:
|
|
2005
|
+
success: totalAttack >= 4,
|
|
2006
|
+
message: `需要当期伤害榜累计攻击4次及以上(当前${totalAttack}次)`
|
|
1979
2007
|
};
|
|
1980
2008
|
case "警卫长": {
|
|
1981
2009
|
if (careerData?.career !== "警卫员下士") {
|
|
1982
2010
|
return { success: false, message: "需要当前职业为警卫员下士" };
|
|
1983
2011
|
}
|
|
1984
2012
|
if (!mainBoss) return { success: false, message: "当前暂无伤害榜。" };
|
|
1985
|
-
const
|
|
1986
|
-
|
|
1987
|
-
handle
|
|
1988
|
-
}).orderBy("totalDamage", "desc").limit(3).execute();
|
|
1989
|
-
const isInTop3 = top3.some((r) => r.handle === handle);
|
|
2013
|
+
const top10 = await ctx2.database.select("ggcevo_boss_damage").where({ bossGroupId: mainBoss.groupId }).orderBy("totalDamage", "desc").limit(10).execute();
|
|
2014
|
+
const isInTop10 = top10.some((r) => r.handle === handle);
|
|
1990
2015
|
return {
|
|
1991
|
-
success:
|
|
1992
|
-
message: "
|
|
2016
|
+
success: isInTop10,
|
|
2017
|
+
message: "需要当期伤害榜前十名"
|
|
1993
2018
|
};
|
|
1994
2019
|
}
|
|
1995
2020
|
case "武器中士":
|
|
1996
2021
|
if (!mainBoss) return { success: false, message: "当前暂无伤害榜。" };
|
|
1997
2022
|
return {
|
|
1998
|
-
success: totalDamage >=
|
|
1999
|
-
message:
|
|
2023
|
+
success: totalDamage >= 100,
|
|
2024
|
+
message: `需要当期伤害榜累计造成100及以上伤害(当前${totalDamage})`
|
|
2000
2025
|
};
|
|
2001
2026
|
case "情报副官":
|
|
2002
2027
|
const techs = await ctx2.database.get("ggcevo_tech", { handle });
|
|
2003
2028
|
const hasValidTech = techs.some((t) => t.level >= 3);
|
|
2004
2029
|
return {
|
|
2005
2030
|
success: hasValidTech,
|
|
2006
|
-
message: hasValidTech ? "" : "
|
|
2031
|
+
message: hasValidTech ? "" : "需要至少一个空间站科技等级≥3级"
|
|
2007
2032
|
};
|
|
2008
2033
|
case "能量武器专家":
|
|
2009
2034
|
const hasEnergyWeapon = weapons.some((weapon) => {
|
|
@@ -2012,7 +2037,7 @@ function apply(ctx, config) {
|
|
|
2012
2037
|
});
|
|
2013
2038
|
return {
|
|
2014
2039
|
success: hasEnergyWeapon,
|
|
2015
|
-
message:
|
|
2040
|
+
message: `需要至少拥有一把3级及以上等级的能量武器`
|
|
2016
2041
|
};
|
|
2017
2042
|
case "纵火狂":
|
|
2018
2043
|
const hasthermalWeapon = weapons.some((weapon) => {
|
|
@@ -2021,22 +2046,29 @@ function apply(ctx, config) {
|
|
|
2021
2046
|
});
|
|
2022
2047
|
return {
|
|
2023
2048
|
success: hasthermalWeapon,
|
|
2024
|
-
message:
|
|
2049
|
+
message: `需要至少拥有一把3级及以上等级的热能武器`
|
|
2025
2050
|
};
|
|
2051
|
+
case "猩红杀手":
|
|
2052
|
+
{
|
|
2053
|
+
const scoutRifle = weapons.find((weapon) => weapon.weaponId === 7);
|
|
2054
|
+
return {
|
|
2055
|
+
success: !!scoutRifle,
|
|
2056
|
+
message: scoutRifle ? "" : "需要“侦查步枪”武器等级≥3"
|
|
2057
|
+
};
|
|
2058
|
+
}
|
|
2059
|
+
;
|
|
2026
2060
|
case "清洁工":
|
|
2027
2061
|
if (!mainBoss) return { success: false, message: "当前暂无伤害榜。" };
|
|
2028
|
-
const
|
|
2029
|
-
|
|
2030
|
-
}).orderBy("totalDamage", "desc").limit(3).execute();
|
|
2031
|
-
const isCleanTop3 = cleanTop3.some((r) => r.handle === handle);
|
|
2062
|
+
const cleanTop20 = await ctx2.database.select("ggcevo_boss_damage").where({ bossGroupId: mainBoss.groupId }).orderBy("totalDamage", "desc").limit(20).execute();
|
|
2063
|
+
const isInTop20 = cleanTop20.some((r) => r.handle === handle);
|
|
2032
2064
|
return {
|
|
2033
|
-
success:
|
|
2034
|
-
message: "
|
|
2065
|
+
success: isInTop20,
|
|
2066
|
+
message: "需要当期伤害榜前二十名"
|
|
2035
2067
|
};
|
|
2036
2068
|
case "辛迪加财务经理":
|
|
2037
2069
|
return {
|
|
2038
|
-
success: signData?.monthlyDays >=
|
|
2039
|
-
message: `需要当月累计签到
|
|
2070
|
+
success: signData?.monthlyDays >= 14,
|
|
2071
|
+
message: `需要当月累计签到14天及以上(当前${signData?.monthlyDays || 0}天)`
|
|
2040
2072
|
};
|
|
2041
2073
|
default:
|
|
2042
2074
|
return { success: false, message: "未知职业要求" };
|
|
@@ -2321,7 +2353,7 @@ function apply(ctx, config) {
|
|
|
2321
2353
|
let hiddenWinCount = 0;
|
|
2322
2354
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
2323
2355
|
if (!profile) {
|
|
2324
|
-
return "
|
|
2356
|
+
return "🔒 需要先绑定游戏句柄。";
|
|
2325
2357
|
}
|
|
2326
2358
|
const { regionId, realmId, profileId } = profile;
|
|
2327
2359
|
const handle = `${regionId}-S2-${realmId}-${profileId}`;
|
|
@@ -2360,7 +2392,7 @@ function apply(ctx, config) {
|
|
|
2360
2392
|
const session = argv.session;
|
|
2361
2393
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
2362
2394
|
if (!profile) {
|
|
2363
|
-
return "
|
|
2395
|
+
return "🔒 需要先绑定游戏句柄。";
|
|
2364
2396
|
}
|
|
2365
2397
|
const { regionId, realmId, profileId } = profile;
|
|
2366
2398
|
const handle = `${regionId}-S2-${realmId}-${profileId}`;
|
|
@@ -2393,7 +2425,7 @@ function apply(ctx, config) {
|
|
|
2393
2425
|
let hiddenWinCount = 0;
|
|
2394
2426
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
2395
2427
|
if (!profile) {
|
|
2396
|
-
return "
|
|
2428
|
+
return "🔒 需要先绑定游戏句柄。";
|
|
2397
2429
|
}
|
|
2398
2430
|
const { regionId, realmId, profileId } = profile;
|
|
2399
2431
|
const handle = `${regionId}-S2-${realmId}-${profileId}`;
|
|
@@ -2431,7 +2463,7 @@ function apply(ctx, config) {
|
|
|
2431
2463
|
const session = argv.session;
|
|
2432
2464
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
2433
2465
|
if (!profile) {
|
|
2434
|
-
return "
|
|
2466
|
+
return "🔒 需要先绑定游戏句柄。";
|
|
2435
2467
|
}
|
|
2436
2468
|
const { regionId, realmId, profileId } = profile;
|
|
2437
2469
|
const handle = `${regionId}-S2-${realmId}-${profileId}`;
|
|
@@ -2446,7 +2478,7 @@ function apply(ctx, config) {
|
|
|
2446
2478
|
ctx.command("ggcevo/背包").action(async (argv) => {
|
|
2447
2479
|
const session = argv.session;
|
|
2448
2480
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
2449
|
-
if (!profile) return "
|
|
2481
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
2450
2482
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
2451
2483
|
const items = await ctx.database.get("ggcevo_backpack", { handle });
|
|
2452
2484
|
const validItems = items.filter((item) => item.quantity > 0);
|
|
@@ -2467,7 +2499,7 @@ ${itemDetails.join("\n")}`;
|
|
|
2467
2499
|
const session = argv.session;
|
|
2468
2500
|
let latestTime;
|
|
2469
2501
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
2470
|
-
if (!profile) return "
|
|
2502
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
2471
2503
|
const { regionId, realmId, profileId } = profile;
|
|
2472
2504
|
const handle = `${regionId}-S2-${realmId}-${profileId}`;
|
|
2473
2505
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
@@ -2649,7 +2681,7 @@ ${itemDetails.join("\n")}`;
|
|
|
2649
2681
|
try {
|
|
2650
2682
|
const session = argv.session;
|
|
2651
2683
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
2652
|
-
if (!profile) return "
|
|
2684
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
2653
2685
|
const { regionId, realmId, profileId } = profile;
|
|
2654
2686
|
const handle = `${regionId}-S2-${realmId}-${profileId}`;
|
|
2655
2687
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
@@ -2704,7 +2736,7 @@ ${itemDetails.join("\n")}`;
|
|
|
2704
2736
|
ctx.command("ggcevo/签到记录").action(async (argv) => {
|
|
2705
2737
|
const session = argv.session;
|
|
2706
2738
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
2707
|
-
if (!profile) return "
|
|
2739
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
2708
2740
|
const { regionId, realmId, profileId } = profile;
|
|
2709
2741
|
const handle = `${regionId}-S2-${realmId}-${profileId}`;
|
|
2710
2742
|
const [record] = await ctx.database.get("ggcevo_sign", { handle });
|
|
@@ -2729,7 +2761,7 @@ ${itemDetails.join("\n")}`;
|
|
|
2729
2761
|
ctx.guild().command("ggcevo/每月津贴").action(async (argv) => {
|
|
2730
2762
|
const session = argv.session;
|
|
2731
2763
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
2732
|
-
if (!profile) return "
|
|
2764
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
2733
2765
|
const { regionId, realmId, profileId } = profile;
|
|
2734
2766
|
const handle = `${regionId}-S2-${realmId}-${profileId}`;
|
|
2735
2767
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
@@ -2783,7 +2815,7 @@ ${itemDetails.join("\n")}`;
|
|
|
2783
2815
|
itemIdToName[item.id] = name3;
|
|
2784
2816
|
}
|
|
2785
2817
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
2786
|
-
if (!profile) return "
|
|
2818
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
2787
2819
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
2788
2820
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
2789
2821
|
if (existingEntries.length > 0) return "❌ 拒绝访问,您已被列入黑名单。";
|
|
@@ -3184,7 +3216,7 @@ ${itemDetails.join("\n")}`;
|
|
|
3184
3216
|
if (!player) {
|
|
3185
3217
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
3186
3218
|
if (!profile) {
|
|
3187
|
-
return "
|
|
3219
|
+
return "🔒 需要先绑定游戏句柄。";
|
|
3188
3220
|
}
|
|
3189
3221
|
const { regionId, realmId, profileId } = profile;
|
|
3190
3222
|
const handle = `${regionId}-S2-${realmId}-${profileId}`;
|
|
@@ -3300,7 +3332,7 @@ ${itemDetails.join("\n")}`;
|
|
|
3300
3332
|
let handle;
|
|
3301
3333
|
if (!user) {
|
|
3302
3334
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
3303
|
-
if (!profile) return "
|
|
3335
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
3304
3336
|
handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
3305
3337
|
} else {
|
|
3306
3338
|
const parsedUser = import_koishi.h.parse(user)[0];
|
|
@@ -3349,7 +3381,7 @@ ${itemDetails.join("\n")}`;
|
|
|
3349
3381
|
ctx.command("ggcevo/兑换", "兑换物品").action(async ({ session }) => {
|
|
3350
3382
|
try {
|
|
3351
3383
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
3352
|
-
if (!profile) return "
|
|
3384
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
3353
3385
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
3354
3386
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
3355
3387
|
if (existingEntries.length > 0) {
|
|
@@ -3465,7 +3497,7 @@ ${items.join("、")}
|
|
|
3465
3497
|
});
|
|
3466
3498
|
ctx.command("ggcevo/兑换记录").action(async ({ session }) => {
|
|
3467
3499
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
3468
|
-
if (!profile) return "
|
|
3500
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
3469
3501
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
3470
3502
|
const exchanges = await ctx.database.get("ggcevo_exchange", { handle });
|
|
3471
3503
|
if (!exchanges.length) return "您暂无兑换记录";
|
|
@@ -3484,7 +3516,7 @@ ${output}`;
|
|
|
3484
3516
|
});
|
|
3485
3517
|
ctx.command("ggcevo/兑换扭蛋币").action(async ({ session }) => {
|
|
3486
3518
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
3487
|
-
if (!profile) return "
|
|
3519
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
3488
3520
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
3489
3521
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
3490
3522
|
if (existingEntries.length > 0) {
|
|
@@ -3514,7 +3546,7 @@ ${output}`;
|
|
|
3514
3546
|
const session = argv.session;
|
|
3515
3547
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
3516
3548
|
if (!profile) {
|
|
3517
|
-
return "
|
|
3549
|
+
return "🔒 需要先绑定游戏句柄。";
|
|
3518
3550
|
}
|
|
3519
3551
|
const { regionId, realmId, profileId } = profile;
|
|
3520
3552
|
const handle = `${regionId}-S2-${realmId}-${profileId}`;
|
|
@@ -3606,7 +3638,7 @@ ${output}`;
|
|
|
3606
3638
|
ctx.command("ggcevo/成就").action(async ({ session }) => {
|
|
3607
3639
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
3608
3640
|
if (!profile) {
|
|
3609
|
-
return "
|
|
3641
|
+
return "🔒 需要先绑定游戏句柄。";
|
|
3610
3642
|
}
|
|
3611
3643
|
const { regionId, realmId, profileId } = profile;
|
|
3612
3644
|
const achievements = await ctx.database.get("ggcevo_achievements", {
|
|
@@ -3631,7 +3663,7 @@ ${achievementList.join("\n")}`;
|
|
|
3631
3663
|
const session = argv.session;
|
|
3632
3664
|
const output = [];
|
|
3633
3665
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
3634
|
-
if (!profile) return "
|
|
3666
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
3635
3667
|
const { regionId, realmId, profileId } = profile;
|
|
3636
3668
|
const handle = `${regionId}-S2-${realmId}-${profileId}`;
|
|
3637
3669
|
output.push(`🎮 游戏句柄:${handle}
|
|
@@ -3765,7 +3797,7 @@ ${achievementList.join("\n")}`;
|
|
|
3765
3797
|
const session = argv.session;
|
|
3766
3798
|
if (!user) return "缺少参数,请输入“pk @指定pk玩家”。";
|
|
3767
3799
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
3768
|
-
if (!profile) return "
|
|
3800
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
3769
3801
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
3770
3802
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
3771
3803
|
if (existingEntries.length > 0) {
|
|
@@ -3980,7 +4012,7 @@ ${achievementList.join("\n")}`;
|
|
|
3980
4012
|
});
|
|
3981
4013
|
ctx.command("ggcevo/切换pk", "切换玩家对战状态").alias("切换pk状态").action(async ({ session }) => {
|
|
3982
4014
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
3983
|
-
if (!profile) return "
|
|
4015
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
3984
4016
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
3985
4017
|
const [pkRecord] = await ctx.database.get("ggcevo_pk", { handle }) || [null];
|
|
3986
4018
|
const currentState = pkRecord?.enable ?? true;
|
|
@@ -4122,7 +4154,7 @@ ${validTypes.join("、")}`;
|
|
|
4122
4154
|
});
|
|
4123
4155
|
ctx.command("ggcevo/购买 <item>").action(async ({ session }, item) => {
|
|
4124
4156
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
4125
|
-
if (!profile) return "
|
|
4157
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
4126
4158
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
4127
4159
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
4128
4160
|
if (existingEntries.length > 0) return "❌ 拒绝访问,您已被列入黑名单。";
|
|
@@ -4248,7 +4280,7 @@ ${validTypes.join("、")}`;
|
|
|
4248
4280
|
});
|
|
4249
4281
|
ctx.command("ggcevo/武器仓库").action(async ({ session }) => {
|
|
4250
4282
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
4251
|
-
if (!profile) return "
|
|
4283
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
4252
4284
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
4253
4285
|
const weapons = await ctx.database.get("ggcevo_equipment", {
|
|
4254
4286
|
handle
|
|
@@ -4280,7 +4312,7 @@ ${validTypes.join("、")}`;
|
|
|
4280
4312
|
});
|
|
4281
4313
|
ctx.command("ggcevo/装备 <weapon>").action(async ({ session }, weapon) => {
|
|
4282
4314
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
4283
|
-
if (!profile) return "
|
|
4315
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
4284
4316
|
if (!weapon) return "请输入“装备 武器名称”来装备一把你拥有的武器。";
|
|
4285
4317
|
if (!weaponConfig[weapon]) return "请输入“装备 武器名称”来装备一把你拥有的武器。";
|
|
4286
4318
|
const config2 = weaponConfig[weapon];
|
|
@@ -4314,7 +4346,7 @@ ${validTypes.join("、")}`;
|
|
|
4314
4346
|
});
|
|
4315
4347
|
ctx.command("ggcevo/升级 <target>", "升级武器或科技").action(async ({ session }, target) => {
|
|
4316
4348
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
4317
|
-
if (!profile) return "
|
|
4349
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
4318
4350
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
4319
4351
|
if ((await ctx.database.get("ggcevo_blacklist", { handle })).length) {
|
|
4320
4352
|
return "❌ 拒绝访问,您已被列入黑名单";
|
|
@@ -4335,7 +4367,7 @@ ${validTypes.join("、")}`;
|
|
|
4335
4367
|
});
|
|
4336
4368
|
ctx.command("ggcevo/改装 <weapon> [mod]", "安装武器模块").action(async ({ session }, weapon, mod) => {
|
|
4337
4369
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
4338
|
-
if (!profile) return "
|
|
4370
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
4339
4371
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
4340
4372
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
4341
4373
|
if (existingEntries.length > 0) return "❌ 拒绝访问,您已被列入黑名单";
|
|
@@ -4428,7 +4460,7 @@ ${validTypes.join("、")}`;
|
|
|
4428
4460
|
exclusiveDiscountRate > 0 && `🔧 当前专属模块折扣:${exclusiveDiscountRate}% (武器升级平台 Lv${techLevel})`,
|
|
4429
4461
|
"====================",
|
|
4430
4462
|
exclusiveMods.length ? exclusiveMods.join("\n\n") : "该武器暂无专属模块"
|
|
4431
|
-
].join("\n\n");
|
|
4463
|
+
].filter(Boolean).join("\n\n");
|
|
4432
4464
|
} else {
|
|
4433
4465
|
const universalMods = Object.entries(modConfig).filter(([_, m]) => !m.isExclusive).map(([name2, cfg]) => formatMod(name2, cfg));
|
|
4434
4466
|
return [
|
|
@@ -4437,7 +4469,7 @@ ${validTypes.join("、")}`;
|
|
|
4437
4469
|
universalDiscountRate > 0 && `🔧 当前通用模块折扣:${universalDiscountRate}% (武器升级平台 Lv${techLevel})`,
|
|
4438
4470
|
"====================",
|
|
4439
4471
|
universalMods.join("\n\n")
|
|
4440
|
-
].join("\n\n");
|
|
4472
|
+
].filter(Boolean).join("\n\n");
|
|
4441
4473
|
}
|
|
4442
4474
|
}, "showModList");
|
|
4443
4475
|
if (mod) {
|
|
@@ -4468,7 +4500,7 @@ ${validTypes.join("、")}`;
|
|
|
4468
4500
|
请攻击当前存活的异形:${activeNames || "无"}。`;
|
|
4469
4501
|
}
|
|
4470
4502
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
4471
|
-
if (!profile) return "
|
|
4503
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
4472
4504
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
4473
4505
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
4474
4506
|
if (existingEntries.length > 0) return "❌ 拒绝访问,您已被列入黑名单。";
|
|
@@ -4674,7 +4706,7 @@ ${effectMessage.join("\n")}`
|
|
|
4674
4706
|
const tags = parseList(options.tags);
|
|
4675
4707
|
const passives = parseList(options.passives);
|
|
4676
4708
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
4677
|
-
if (!profile) return "
|
|
4709
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
4678
4710
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
4679
4711
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
4680
4712
|
if (existingEntries.length > 0) return "❌ 拒绝访问,您已被列入黑名单。";
|
|
@@ -4815,7 +4847,7 @@ ${effectMessage.join("\n")}`
|
|
|
4815
4847
|
ctx.command("ggcevo/祈愿").action(async (argv) => {
|
|
4816
4848
|
const session = argv.session;
|
|
4817
4849
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
4818
|
-
if (!profile) return "
|
|
4850
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
4819
4851
|
const { regionId, realmId, profileId } = profile;
|
|
4820
4852
|
const handle = `${regionId}-S2-${realmId}-${profileId}`;
|
|
4821
4853
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
@@ -4892,7 +4924,7 @@ ${effectMessage.join("\n")}`
|
|
|
4892
4924
|
});
|
|
4893
4925
|
ctx.command("兑换金币", "使用兑换券兑换金币").action(async ({ session }) => {
|
|
4894
4926
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
4895
|
-
if (!profile) return "
|
|
4927
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
4896
4928
|
const { regionId, realmId, profileId } = profile;
|
|
4897
4929
|
const handle = `${regionId}-S2-${realmId}-${profileId}`;
|
|
4898
4930
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
@@ -4931,7 +4963,7 @@ ${effectMessage.join("\n")}`
|
|
|
4931
4963
|
});
|
|
4932
4964
|
ctx.command("兑换红晶", "使用金币兑换红晶").action(async ({ session }) => {
|
|
4933
4965
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
4934
|
-
if (!profile) return "
|
|
4966
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
4935
4967
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
4936
4968
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
4937
4969
|
if (existingEntries.length > 0) {
|
|
@@ -4971,7 +5003,7 @@ ${effectMessage.join("\n")}`
|
|
|
4971
5003
|
});
|
|
4972
5004
|
ctx.command("ggcevo/加入 <faction>", "加入阵营").alias("加入阵营").action(async ({ session }, faction) => {
|
|
4973
5005
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
4974
|
-
if (!profile) return "
|
|
5006
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
4975
5007
|
const { regionId, realmId, profileId } = profile;
|
|
4976
5008
|
const handle = `${regionId}-S2-${realmId}-${profileId}`;
|
|
4977
5009
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
@@ -5040,7 +5072,7 @@ ${effectMessage.join("\n")}`
|
|
|
5040
5072
|
});
|
|
5041
5073
|
ctx.command("ggcevo/转职 [profession]", "转职系统").action(async ({ session }, profession) => {
|
|
5042
5074
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
5043
|
-
if (!profile) return "
|
|
5075
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
5044
5076
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
5045
5077
|
const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
|
|
5046
5078
|
if (existingEntries.length > 0) {
|
|
@@ -5125,7 +5157,7 @@ ${effectMessage.join("\n")}`
|
|
|
5125
5157
|
const [profile] = await ctx.database.get("sc2arcade_player", {
|
|
5126
5158
|
userId: session.userId
|
|
5127
5159
|
});
|
|
5128
|
-
if (!profile) return "
|
|
5160
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
5129
5161
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
5130
5162
|
const [careerData] = await ctx.database.get("ggcevo_careers", { handle });
|
|
5131
5163
|
if (!careerData) return "您尚未加入任何阵营。";
|
|
@@ -5164,7 +5196,7 @@ ${effectMessage.join("\n")}`
|
|
|
5164
5196
|
});
|
|
5165
5197
|
ctx.command("ggcevo/黑市 [type]", "辛迪加海盗专属黑市").usage("输入“黑市”查看类型,或“黑市 类型”查看详细").action(async ({ session }, type) => {
|
|
5166
5198
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
5167
|
-
if (!profile) return "
|
|
5199
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
5168
5200
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
5169
5201
|
const [careerData] = await ctx.database.get("ggcevo_careers", { handle });
|
|
5170
5202
|
if (!careerData || careerData.group !== "辛迪加海盗") {
|
|
@@ -5233,7 +5265,7 @@ ${effectMessage.join("\n")}`
|
|
|
5233
5265
|
});
|
|
5234
5266
|
ctx.command("ggcevo/订购 <item>").action(async ({ session }, item) => {
|
|
5235
5267
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
5236
|
-
if (!profile) return "
|
|
5268
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
5237
5269
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
5238
5270
|
if (await ctx.database.get("ggcevo_blacklist", { handle }).then((r) => r.length)) {
|
|
5239
5271
|
return "❌ 拒绝访问,您已被列入黑名单";
|
|
@@ -5319,7 +5351,7 @@ ${effectMessage.join("\n")}`
|
|
|
5319
5351
|
ctx.command("ggcevo/仓库").action(async (argv) => {
|
|
5320
5352
|
const session = argv.session;
|
|
5321
5353
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
5322
|
-
if (!profile) return "
|
|
5354
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
5323
5355
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
5324
5356
|
const [items, signData, careerData] = await Promise.all([
|
|
5325
5357
|
ctx.database.get("ggcevo_warehouse", { handle }),
|
|
@@ -5362,7 +5394,7 @@ ${effectMessage.join("\n")}`
|
|
|
5362
5394
|
ctx.command("ggcevo/使用 [itemName] [target]").action(async (argv, itemName, target) => {
|
|
5363
5395
|
const session = argv.session;
|
|
5364
5396
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
5365
|
-
if (!profile) return "🔒
|
|
5397
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
5366
5398
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
5367
5399
|
if (await ctx.database.get("ggcevo_blacklist", { handle }).then((r) => r.length)) {
|
|
5368
5400
|
return "⛔ 您已被列入黑名单";
|
|
@@ -5402,7 +5434,7 @@ ${effectMessage.join("\n")}`
|
|
|
5402
5434
|
});
|
|
5403
5435
|
ctx.command("ggcevo/科技 [techName]", "查看空间站科技信息").usage("输入“科技”查看列表,或“科技 科技名称”查看详细信息").action(async ({ session }, techName) => {
|
|
5404
5436
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
5405
|
-
if (!profile) return "🔒
|
|
5437
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
5406
5438
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
5407
5439
|
const [careerData] = await ctx.database.get("ggcevo_careers", { handle });
|
|
5408
5440
|
if (!careerData || careerData.group !== "人类联盟") {
|
|
@@ -5450,7 +5482,7 @@ ${Spacestationtechnology.map((t) => t.techname).join("、")}`;
|
|
|
5450
5482
|
return new Date(utcDate.getTime() + chinaOffset);
|
|
5451
5483
|
}, "convertUTCtoChinaTime");
|
|
5452
5484
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
5453
|
-
if (!profile) return "🔒
|
|
5485
|
+
if (!profile) return "🔒 需要先绑定游戏句柄。";
|
|
5454
5486
|
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
5455
5487
|
if (await ctx.database.get("ggcevo_blacklist", { handle }).then((r) => r.length)) {
|
|
5456
5488
|
return "⛔ 您已被列入黑名单";
|
|
@@ -5472,7 +5504,7 @@ ${Spacestationtechnology.map((t) => t.techname).join("、")}`;
|
|
|
5472
5504
|
startTime: /* @__PURE__ */ new Date()
|
|
5473
5505
|
// 记录当前时间为开始时间
|
|
5474
5506
|
});
|
|
5475
|
-
return "⛏️ 挖矿作业已开始,至少1
|
|
5507
|
+
return "⛏️ 挖矿作业已开始,至少1小时后可收获。";
|
|
5476
5508
|
}
|
|
5477
5509
|
const nowtime = /* @__PURE__ */ new Date();
|
|
5478
5510
|
const chinaStart = convertUTCtoChinaTime2(record.startTime);
|
|
@@ -5525,7 +5557,7 @@ ${Spacestationtechnology.map((t) => t.techname).join("、")}`;
|
|
|
5525
5557
|
`🕒 开始时间:${record.startTime.toLocaleString("zh-CN", { hour12: false })}`,
|
|
5526
5558
|
`⏱️ 结束时间:${nowtime.toLocaleString("zh-CN", { hour12: false })}`,
|
|
5527
5559
|
`⏳ 持续时间:${formatTime(duration)}`,
|
|
5528
|
-
...tech.level >=
|
|
5560
|
+
...tech.level >= 4 ? (
|
|
5529
5561
|
// 仅当科技等级≥3时显示加成信息
|
|
5530
5562
|
[`🔧 科技加成(Lv.${tech.level}):+${multiplier * 100}%`]
|
|
5531
5563
|
) : [],
|