koishi-plugin-ggcevo-game 1.4.6 → 1.4.8
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 +39 -39
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -525,7 +525,7 @@ var spaceStationCrewConfig = [
|
|
|
525
525
|
{
|
|
526
526
|
professionName: "警卫长",
|
|
527
527
|
effect: "攻击伤害+5%,攻击获得的金币+100%",
|
|
528
|
-
requirements: "
|
|
528
|
+
requirements: "当期伤害榜前二十名",
|
|
529
529
|
Jobtransfer: true,
|
|
530
530
|
costcoins: 3e3
|
|
531
531
|
},
|
|
@@ -696,11 +696,12 @@ async function checkTransferRequirements(ctx, handle, profession) {
|
|
|
696
696
|
return { success: false, message: "需要当前职业为警卫员下士" };
|
|
697
697
|
}
|
|
698
698
|
if (!mainBoss) return { success: false, message: "当前暂无伤害榜。" };
|
|
699
|
-
const
|
|
700
|
-
const
|
|
699
|
+
const top20 = await ctx.database.select("ggcevo_boss_damage").where({ bossGroupId: mainBoss.groupId }).orderBy("totalDamage", "desc").limit(20).execute();
|
|
700
|
+
const isInTop202 = top20.some((r) => r.handle === handle);
|
|
701
701
|
return {
|
|
702
|
-
success:
|
|
703
|
-
message: "
|
|
702
|
+
success: isInTop202,
|
|
703
|
+
message: isInTop202 ? "" : "需要当期伤害榜前二十名"
|
|
704
|
+
// 消息提示更新为前二十名
|
|
704
705
|
};
|
|
705
706
|
}
|
|
706
707
|
case "武器中士":
|
|
@@ -1918,7 +1919,7 @@ async function handleTechUpgrade(ctx, handle, target) {
|
|
|
1918
1919
|
if (careerData.career === "情报副官") {
|
|
1919
1920
|
discountApplied = true;
|
|
1920
1921
|
actualCost = Math.floor(originalCost * 0.9);
|
|
1921
|
-
discountDetails.push("🎖️
|
|
1922
|
+
discountDetails.push("🎖️ 情报副官职业:10%折扣");
|
|
1922
1923
|
}
|
|
1923
1924
|
const [signInfo] = await ctx.database.get("ggcevo_sign", { handle });
|
|
1924
1925
|
if (signInfo?.totalRewards < actualCost) {
|
|
@@ -2007,7 +2008,7 @@ async function handleWeaponUpgrade(ctx, handle, target) {
|
|
|
2007
2008
|
const isGunslinger = careerData?.career === "枪手";
|
|
2008
2009
|
if (isGunslinger) {
|
|
2009
2010
|
totalDiscount += 10;
|
|
2010
|
-
discountDetails.push("🔫
|
|
2011
|
+
discountDetails.push("🔫 枪手职业:10%折扣");
|
|
2011
2012
|
}
|
|
2012
2013
|
if (careerData?.group === "人类联盟") {
|
|
2013
2014
|
const [weaponTech] = await ctx.database.get("ggcevo_tech", { handle, techId: 2 }).catch(() => [{ level: 0 }]);
|
|
@@ -2021,14 +2022,14 @@ async function handleWeaponUpgrade(ctx, handle, target) {
|
|
|
2021
2022
|
if (weaponDiscount > 0) {
|
|
2022
2023
|
totalDiscount += weaponDiscount;
|
|
2023
2024
|
discountDetails.push(
|
|
2024
|
-
`⚙️
|
|
2025
|
+
`⚙️ 武器系统科技Lv${techLevel}:${weaponDiscount}%折扣`
|
|
2025
2026
|
);
|
|
2026
2027
|
}
|
|
2027
2028
|
}
|
|
2028
2029
|
const activeWish = await checkFoxBlessing(ctx, handle);
|
|
2029
2030
|
if (activeWish) {
|
|
2030
2031
|
totalDiscount += 20;
|
|
2031
|
-
discountDetails.push("🦊
|
|
2032
|
+
discountDetails.push("🦊 灵狐升运祈愿:20%折扣");
|
|
2032
2033
|
}
|
|
2033
2034
|
totalDiscount = Math.min(totalDiscount, 100);
|
|
2034
2035
|
const discountedCost = baseCost * (100 - totalDiscount) / 100;
|
|
@@ -2152,29 +2153,29 @@ ${priceInfo}`);
|
|
|
2152
2153
|
discountNotice.push("💰 当前折扣:");
|
|
2153
2154
|
}
|
|
2154
2155
|
if (isGunslinger) {
|
|
2155
|
-
discountNotice.push(`🔫
|
|
2156
|
+
discountNotice.push(`🔫 枪手职业:10%升级武器折扣`);
|
|
2156
2157
|
}
|
|
2157
2158
|
if (isAlliance && hasTechDiscount) {
|
|
2158
|
-
discountNotice.push(`⚙️
|
|
2159
|
+
discountNotice.push(`⚙️ 武器系统科技Lv${techLevel}:${techDiscountRate}%折扣`);
|
|
2159
2160
|
}
|
|
2160
2161
|
if (hasFoxDiscount) {
|
|
2161
|
-
discountNotice.push(`🦊
|
|
2162
|
+
discountNotice.push(`🦊 灵狐升运祈愿:20%折扣`);
|
|
2162
2163
|
}
|
|
2163
2164
|
if (!hasTechDiscount && !hasFoxDiscount && !hasGunslingerDiscount) {
|
|
2164
2165
|
if (isAlliance) {
|
|
2165
|
-
discountNotice.push("💡
|
|
2166
|
+
discountNotice.push("💡 提示:升级武器系统科技可获得折扣");
|
|
2166
2167
|
} else if (careerData?.group === "辛迪加海盗") {
|
|
2167
|
-
discountNotice.push("💡
|
|
2168
|
+
discountNotice.push("💡 提示:转职为枪手职业可获得折扣");
|
|
2168
2169
|
} else {
|
|
2169
2170
|
discountNotice.push("💡 提示:加入人类联盟或辛迪加海盗可获得折扣");
|
|
2170
2171
|
}
|
|
2171
2172
|
}
|
|
2172
2173
|
if (isGunslinger) {
|
|
2173
|
-
discountNotice.push("🔝
|
|
2174
|
+
discountNotice.push("🔝 枪手职业:武器等级上限提升至7级");
|
|
2174
2175
|
}
|
|
2175
2176
|
return [
|
|
2176
2177
|
"⚡ 武器升级价格表 ⚡",
|
|
2177
|
-
`武器等级上限: ${maxLevel}级(${isGunslinger ? "
|
|
2178
|
+
`武器等级上限: ${maxLevel}级(${isGunslinger ? "枪手职业" : "普通玩家"})`,
|
|
2178
2179
|
"使用「升级 武器名称」对武器进行等级升级",
|
|
2179
2180
|
...discountNotice,
|
|
2180
2181
|
"====================",
|
|
@@ -3709,8 +3710,6 @@ async function handleScatterAttack(ctx, session, config, handle, equippedWeapon,
|
|
|
3709
3710
|
scatterEffectMessages.push("🔆 【中子步枪】触发散射攻击!");
|
|
3710
3711
|
scatterRatio = 0.8;
|
|
3711
3712
|
}
|
|
3712
|
-
const baseDamage = weaponData.damage * (1 + 0.1 * equippedWeapon.level);
|
|
3713
|
-
const secondaryDamage = Math.round(baseDamage * scatterRatio);
|
|
3714
3713
|
for (const secondaryTarget of secondaryTargets) {
|
|
3715
3714
|
const damageResult = await calculateTotalDamage(
|
|
3716
3715
|
ctx,
|
|
@@ -3719,11 +3718,12 @@ async function handleScatterAttack(ctx, session, config, handle, equippedWeapon,
|
|
|
3719
3718
|
equippedWeapon,
|
|
3720
3719
|
secondaryTarget
|
|
3721
3720
|
);
|
|
3721
|
+
const secondaryDamage = Math.round(damageResult.damage * scatterRatio);
|
|
3722
3722
|
const passiveResult = await PassiveHandler.handlePassives(
|
|
3723
3723
|
ctx,
|
|
3724
3724
|
handle,
|
|
3725
3725
|
secondaryTarget,
|
|
3726
|
-
|
|
3726
|
+
secondaryDamage,
|
|
3727
3727
|
secondaryTarget.HP,
|
|
3728
3728
|
getBossMaxHP(secondaryTarget),
|
|
3729
3729
|
weaponName,
|
|
@@ -3875,10 +3875,10 @@ async function calculateRewards(ctx, handle, username, totalDamage) {
|
|
|
3875
3875
|
let careerMessage = "";
|
|
3876
3876
|
if (career === "警卫员下士") {
|
|
3877
3877
|
careerMultiplier = 50;
|
|
3878
|
-
careerMessage = "🛡️
|
|
3878
|
+
careerMessage = "🛡️ 警卫员下士职业:+50%金币";
|
|
3879
3879
|
} else if (career === "警卫长") {
|
|
3880
3880
|
careerMultiplier = 100;
|
|
3881
|
-
careerMessage = "🛡️
|
|
3881
|
+
careerMessage = "🛡️ 警卫长职业:+100%金币";
|
|
3882
3882
|
}
|
|
3883
3883
|
const totalBonusPercent = careerMultiplier + techBonusPercent;
|
|
3884
3884
|
const totalBonusFactor = 1 + totalBonusPercent / 100;
|
|
@@ -3889,7 +3889,7 @@ async function calculateRewards(ctx, handle, username, totalDamage) {
|
|
|
3889
3889
|
handle,
|
|
3890
3890
|
redcrystal: (careerData?.redcrystal || 0) + 1
|
|
3891
3891
|
}], ["handle"]);
|
|
3892
|
-
redcrystalMessage = "🔴
|
|
3892
|
+
redcrystalMessage = "🔴 清洁工职业:+1枚红晶";
|
|
3893
3893
|
}
|
|
3894
3894
|
return {
|
|
3895
3895
|
finalReward,
|
|
@@ -4599,7 +4599,7 @@ ${itemDetails.join("\n")}`;
|
|
|
4599
4599
|
const [careerData] = await ctx.database.get("ggcevo_careers", { handle });
|
|
4600
4600
|
if (careerData?.group === "人类联盟") {
|
|
4601
4601
|
totalBonus += 0.2;
|
|
4602
|
-
messages.push("🏛️
|
|
4602
|
+
messages.push("🏛️ 人类联盟阵营:+20%金币");
|
|
4603
4603
|
const [userMiningTech] = await ctx.database.get("ggcevo_tech", { handle, techId: 1 }).catch(() => [{ level: 0 }]);
|
|
4604
4604
|
const techLevel = Math.min(userMiningTech?.level || 0, 5);
|
|
4605
4605
|
const miningTechConfig = Spacestationtechnology.find((t) => t.techId === 1);
|
|
@@ -4614,12 +4614,12 @@ ${itemDetails.join("\n")}`;
|
|
|
4614
4614
|
const finalBonus = Math.max(baseTechBonus, careerTechBonus);
|
|
4615
4615
|
if (finalBonus > 0) {
|
|
4616
4616
|
totalBonus += finalBonus / 100;
|
|
4617
|
-
messages.push(`⚙️
|
|
4617
|
+
messages.push(`⚙️ 采掘系统科技Lv${techLevel}:+${finalBonus}%金币`);
|
|
4618
4618
|
}
|
|
4619
4619
|
}
|
|
4620
4620
|
if (careerData.career === "深空矿工") {
|
|
4621
4621
|
totalBonus += 0.5;
|
|
4622
|
-
messages.push("🎖️
|
|
4622
|
+
messages.push("🎖️ 深空矿工职业:+50%金币");
|
|
4623
4623
|
}
|
|
4624
4624
|
}
|
|
4625
4625
|
if (careerData?.group === "辛迪加海盗") {
|
|
@@ -4629,7 +4629,7 @@ ${itemDetails.join("\n")}`;
|
|
|
4629
4629
|
const additionalBonus = Math.min(humanPlayersCount, 50);
|
|
4630
4630
|
const credBonus = 0.5 + additionalBonus / 100;
|
|
4631
4631
|
totalBonus += credBonus;
|
|
4632
|
-
messages.push(`💎 CRED-17
|
|
4632
|
+
messages.push(`💎 CRED-17设备:+50%金币 (额外+${additionalBonus}%金币)`);
|
|
4633
4633
|
}
|
|
4634
4634
|
}
|
|
4635
4635
|
const [meowEffect] = await ctx.database.get("ggcevo_Wish_Record", {
|
|
@@ -4642,7 +4642,7 @@ ${itemDetails.join("\n")}`;
|
|
|
4642
4642
|
if (meowEffect) {
|
|
4643
4643
|
tickets *= 2;
|
|
4644
4644
|
totalBonus += 1;
|
|
4645
|
-
messages.push("🐾
|
|
4645
|
+
messages.push("🐾 喵喵财源祈愿:咕咕币+100%,金币+100%");
|
|
4646
4646
|
}
|
|
4647
4647
|
const finalPoints = Math.round(basePoints * (1 + totalBonus));
|
|
4648
4648
|
let redCrystal = 0;
|
|
@@ -4658,7 +4658,7 @@ ${itemDetails.join("\n")}`;
|
|
|
4658
4658
|
} else {
|
|
4659
4659
|
redCrystal = 5;
|
|
4660
4660
|
}
|
|
4661
|
-
messages.push(`🎖️
|
|
4661
|
+
messages.push(`🎖️ 辛迪加财务经理职业:+${redCrystal}枚红晶`);
|
|
4662
4662
|
}
|
|
4663
4663
|
await ctx.database.withTransaction(async () => {
|
|
4664
4664
|
await ctx.database.upsert("ggcevo_sign", [{
|
|
@@ -5804,20 +5804,20 @@ ${items.join("、")}
|
|
|
5804
5804
|
result.push(`🛡️ 人类联盟:应战者PK失败时仅损失1%的金币`);
|
|
5805
5805
|
}
|
|
5806
5806
|
if (computerExpertProtection) {
|
|
5807
|
-
result.push(`💻
|
|
5807
|
+
result.push(`💻 计算机专家职业:应战者PK失败时不损失金币`);
|
|
5808
5808
|
} else if (isWin) {
|
|
5809
5809
|
result.push(`💰 您从对方的口袋里抢夺了${goldTransfer}枚金币`);
|
|
5810
5810
|
} else {
|
|
5811
5811
|
result.push(`💸 您从口袋里拿出了${goldTransfer}枚金币上交给对方`);
|
|
5812
5812
|
}
|
|
5813
5813
|
if (mp3Effect) {
|
|
5814
|
-
result.push(`💿 MP3
|
|
5814
|
+
result.push(`💿 MP3播放器设备:挑战者PK失败时上交的金币减少50%`);
|
|
5815
5815
|
}
|
|
5816
5816
|
if (initiatorCareer?.group === "辛迪加海盗") {
|
|
5817
|
-
result.push(`🔴
|
|
5817
|
+
result.push(`🔴 辛迪加海盗阵营:+1枚红晶`);
|
|
5818
5818
|
}
|
|
5819
5819
|
if (isWin && initiatorCareer?.career === "辛迪加财务经理") {
|
|
5820
|
-
result.push(`🎖️
|
|
5820
|
+
result.push(`🎖️ 辛迪加财务经理职业:+1枚红晶`);
|
|
5821
5821
|
}
|
|
5822
5822
|
result.push(`📅 剩余挑战次数:${config.dailyPKLimit - (initiatorPK.todayCount + 1)}`);
|
|
5823
5823
|
return result.join("\n");
|
|
@@ -5869,7 +5869,7 @@ ${items.join("、")}
|
|
|
5869
5869
|
if (careerData?.career === "武器中士") {
|
|
5870
5870
|
const weaponSpecialistDiscount = 20;
|
|
5871
5871
|
totalDiscount += weaponSpecialistDiscount;
|
|
5872
|
-
discountDetails.push(`🎖️
|
|
5872
|
+
discountDetails.push(`🎖️ 武器中士职业:${weaponSpecialistDiscount}%折扣`);
|
|
5873
5873
|
}
|
|
5874
5874
|
const activeWish = await ctx.database.get("ggcevo_Wish_Record", {
|
|
5875
5875
|
handle,
|
|
@@ -5881,7 +5881,7 @@ ${items.join("、")}
|
|
|
5881
5881
|
if (activeWish) {
|
|
5882
5882
|
const grasshopperDiscount = 20;
|
|
5883
5883
|
totalDiscount += grasshopperDiscount;
|
|
5884
|
-
discountDetails.push(`🦗
|
|
5884
|
+
discountDetails.push(`🦗 蚱蜢优购祈愿:${grasshopperDiscount}%折扣`);
|
|
5885
5885
|
}
|
|
5886
5886
|
totalDiscount = Math.min(totalDiscount, 100);
|
|
5887
5887
|
const categoryStats = Object.values(weaponConfig).filter((weapon) => weapon.price !== 0).reduce((stats, weapon) => {
|
|
@@ -6035,13 +6035,13 @@ ${validTypes.join("、")}`;
|
|
|
6035
6035
|
if (activeWish) {
|
|
6036
6036
|
const wishDiscount = 20;
|
|
6037
6037
|
totalDiscount += wishDiscount;
|
|
6038
|
-
discountDetails.push(`🦗
|
|
6038
|
+
discountDetails.push(`🦗 蚱蜢优购祈愿:${wishDiscount}%折扣`);
|
|
6039
6039
|
}
|
|
6040
6040
|
}
|
|
6041
6041
|
if (isWeapon && careerData?.career === "武器中士") {
|
|
6042
6042
|
const specialistDiscount = 20;
|
|
6043
6043
|
totalDiscount += specialistDiscount;
|
|
6044
|
-
discountDetails.push(`🎖️
|
|
6044
|
+
discountDetails.push(`🎖️ 武器中士职业:${specialistDiscount}%折扣`);
|
|
6045
6045
|
}
|
|
6046
6046
|
totalDiscount = Math.min(totalDiscount, 100);
|
|
6047
6047
|
}
|
|
@@ -6287,7 +6287,7 @@ ${validTypes.join("、")}`;
|
|
|
6287
6287
|
`花费金币:${actualCost}${discountRate > 0 ? ` (原价${modInfo.cost})` : ""}`,
|
|
6288
6288
|
discountRate > 0 && [
|
|
6289
6289
|
"折扣明细:",
|
|
6290
|
-
`⚙️
|
|
6290
|
+
`⚙️ 武器升级平台科技Lv${techLevel}:${discountRate}%`
|
|
6291
6291
|
].join("\n"),
|
|
6292
6292
|
`改装槽:${equipment.installedMods.length + 1}/${equipment.modificationSlots}`
|
|
6293
6293
|
].filter(Boolean).join("\n");
|
|
@@ -6325,7 +6325,7 @@ ${validTypes.join("、")}`;
|
|
|
6325
6325
|
"使用「改装 武器名称 模块名称」安装",
|
|
6326
6326
|
"※ 每个武器只能安装一个专属模块",
|
|
6327
6327
|
exclusiveDiscountRate > 0 && `💰 当前专属模块折扣:
|
|
6328
|
-
⚙️
|
|
6328
|
+
⚙️ 武器升级平台科技Lv${techLevel}:${exclusiveDiscountRate}%`,
|
|
6329
6329
|
"====================",
|
|
6330
6330
|
exclusiveMods.length ? exclusiveMods.join("\n") : "该武器暂无专属模块"
|
|
6331
6331
|
].filter(Boolean).join("\n");
|
|
@@ -6336,7 +6336,7 @@ ${validTypes.join("、")}`;
|
|
|
6336
6336
|
"使用「改装 武器名称 模块名称」安装通用模块",
|
|
6337
6337
|
"使用「改装 武器名称」查询武器专属模块",
|
|
6338
6338
|
universalDiscountRate > 0 && `💰 当前通用模块折扣:
|
|
6339
|
-
⚙️
|
|
6339
|
+
⚙️ 武器升级平台科技Lv${techLevel}:${universalDiscountRate}%`,
|
|
6340
6340
|
"====================",
|
|
6341
6341
|
universalMods.join("\n")
|
|
6342
6342
|
].filter(Boolean).join("\n");
|