koishi-plugin-ggcevo-game 1.4.11 → 1.4.12
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/boss/passivehandler.d.ts +10 -4
- package/lib/index.js +374 -163
- package/lib/items.d.ts +16 -0
- package/package.json +1 -1
|
@@ -38,7 +38,7 @@ export declare const PassiveHandler: {
|
|
|
38
38
|
messages: string[];
|
|
39
39
|
skillUpdates: {
|
|
40
40
|
name: any;
|
|
41
|
-
remove: ("
|
|
41
|
+
remove: ("弱化形态" | "异形甲壳" | "孤立无援" | "冰霜回复" | "冰霜进化" | "冰霜环绕" | "寒霜地狱" | "应激甲壳I" | "应激甲壳II" | "求生本能I" | "求生本能II" | "冷适应" | "感染空间站" | "病毒云" | "霉菌滋生" | "岗哨机枪" | "结构装甲" | "吸血唾液" | "进食" | "嗜血狂暴" | "吐血" | "电能导体" | "超导体" | "能量虹吸" | "能源虹吸" | "电能立场" | "电能冲击波" | "脉冲" | "能量黑洞" | "火焰异形" | "庞兽狂暴" | "灼烧粘液" | "腐蚀胆汁" | "火焰吐息" | "太阳耀斑" | "燃烧潜地" | "炼狱爆弹" | "猎手异形" | "狂暴" | "伪装" | "致命一击")[];
|
|
42
42
|
}[];
|
|
43
43
|
};
|
|
44
44
|
handleInfectedStation: (ctx: Context, targetBoss: any) => Promise<{
|
|
@@ -105,6 +105,9 @@ export declare const PassiveHandler: {
|
|
|
105
105
|
handleArcWelderEffect: (ctx: Context, targetBoss: any, weaponName: string) => Promise<{
|
|
106
106
|
messages: string[];
|
|
107
107
|
}>;
|
|
108
|
+
handleArcRifleEffect: (ctx: Context, targetBoss: any, weaponName: string, messages: string[]) => Promise<{
|
|
109
|
+
drainAmount: number;
|
|
110
|
+
}>;
|
|
108
111
|
handleGiantRage: (targetBoss: any, currentHP: number, maxHP: number) => {
|
|
109
112
|
damageMultiplier: number;
|
|
110
113
|
messages: string[];
|
|
@@ -148,7 +151,7 @@ export declare const PassiveHandler: {
|
|
|
148
151
|
damageMultiplier: number;
|
|
149
152
|
messages: string[];
|
|
150
153
|
};
|
|
151
|
-
handleHunterAlien: (ctx: Context, targetBoss: any, weaponName: string
|
|
154
|
+
handleHunterAlien: (ctx: Context, targetBoss: any, weaponName: string) => Promise<{
|
|
152
155
|
immune: boolean;
|
|
153
156
|
messages: string[];
|
|
154
157
|
damageMultiplier?: undefined;
|
|
@@ -171,10 +174,13 @@ export declare const PassiveHandler: {
|
|
|
171
174
|
};
|
|
172
175
|
handleCorrosionModule: (installedMods: string[]) => number;
|
|
173
176
|
handleParticlePhaseEffect: (targetBoss: any, weaponName: string) => number;
|
|
174
|
-
handleIgnoreReductionEffects: (ctx: Context,
|
|
175
|
-
|
|
177
|
+
handleIgnoreReductionEffects: (ctx: Context, handle: string, weaponName: string, targetBoss: any, nerfMultiplier: number) => Promise<{
|
|
178
|
+
ignoreRate: number;
|
|
176
179
|
messages: any[];
|
|
177
180
|
}>;
|
|
181
|
+
handlePulseDisruptor: (ctx: Context, targetBoss: any, weaponName: string) => Promise<{
|
|
182
|
+
messages: string[];
|
|
183
|
+
}>;
|
|
178
184
|
handlePassives: (ctx: Context, handle: string, targetBoss: any, initialDamage: number, currentHP: number, maxHP: number, weaponName: string, weaponData: any, activeBosses: any[], bossGroup: any) => Promise<{
|
|
179
185
|
currentHP: any;
|
|
180
186
|
messages: any;
|
package/lib/index.js
CHANGED
|
@@ -237,7 +237,7 @@ var weaponConfig = {
|
|
|
237
237
|
category: "能量武器",
|
|
238
238
|
damage: 32,
|
|
239
239
|
description: "一种原型能量武器,能够发射强大的脉冲",
|
|
240
|
-
specialeffect: "
|
|
240
|
+
specialeffect: "攻击减少目标2层技能计数",
|
|
241
241
|
price: 1500,
|
|
242
242
|
redCrystalCost: 15,
|
|
243
243
|
isantiair: true,
|
|
@@ -263,14 +263,14 @@ var weaponConfig = {
|
|
|
263
263
|
id: 102,
|
|
264
264
|
type: "能量武器",
|
|
265
265
|
category: "传奇武器",
|
|
266
|
-
damage:
|
|
266
|
+
damage: 70,
|
|
267
267
|
description: "一件传奇武器",
|
|
268
|
-
specialeffect: "
|
|
268
|
+
specialeffect: "攻击暴击率+80%",
|
|
269
269
|
price: 7500,
|
|
270
270
|
redCrystalCost: 150,
|
|
271
271
|
isantiair: true,
|
|
272
272
|
tagEffects: {
|
|
273
|
-
"重甲":
|
|
273
|
+
"重甲": 1.5
|
|
274
274
|
}
|
|
275
275
|
},
|
|
276
276
|
"龙息霰弹枪": {
|
|
@@ -460,6 +460,22 @@ var SyndicatedItems = {
|
|
|
460
460
|
price: 0,
|
|
461
461
|
redCrystalCost: 10,
|
|
462
462
|
effects: "此物品存放于仓库自动生效(阵营必须为辛迪加海盗)。主动发起的PK对战结果为失败时上交给对方的金币-50%"
|
|
463
|
+
},
|
|
464
|
+
"雷达面罩": {
|
|
465
|
+
id: 6,
|
|
466
|
+
type: "设备工具",
|
|
467
|
+
description: "一个复杂的雷达面罩,用于远距离侦察或探测隐藏单位",
|
|
468
|
+
price: 0,
|
|
469
|
+
redCrystalCost: 25,
|
|
470
|
+
effects: "此物品存放于仓库自动生效(阵营必须为辛迪加海盗)。使用武器攻击时,无视目标10%的减伤效果"
|
|
471
|
+
},
|
|
472
|
+
"气喇叭": {
|
|
473
|
+
id: 7,
|
|
474
|
+
type: "设备工具",
|
|
475
|
+
description: "气喇叭一直被用于展示纯粹的勇气",
|
|
476
|
+
price: 0,
|
|
477
|
+
redCrystalCost: 30,
|
|
478
|
+
effects: "此物品存放于仓库自动生效(阵营必须为辛迪加海盗)。主动发起的PK对战结果为胜利时将获得辛迪加海盗总部发放的等额金币作为奖励"
|
|
463
479
|
}
|
|
464
480
|
};
|
|
465
481
|
var initDefaultItems = {
|
|
@@ -598,7 +614,7 @@ var syndicatePirateConfig = [
|
|
|
598
614
|
effect: "武器等级上限为7级; 升级武器享有10%的折扣; 解锁M4AE脉冲步枪(传奇)购买权限",
|
|
599
615
|
requirements: "至少拥有一把6级及以上等级的武器",
|
|
600
616
|
Jobtransfer: true,
|
|
601
|
-
costredcrystal:
|
|
617
|
+
costredcrystal: 35
|
|
602
618
|
},
|
|
603
619
|
{
|
|
604
620
|
professionName: "猩红杀手",
|
|
@@ -802,31 +818,31 @@ var Spacestationtechnology = [
|
|
|
802
818
|
level: 1,
|
|
803
819
|
cost: 500,
|
|
804
820
|
description: "提高挖矿效率,每日签到金币奖励+5%",
|
|
805
|
-
careerBonus: "
|
|
821
|
+
careerBonus: "每日签到金币奖励+10%"
|
|
806
822
|
},
|
|
807
823
|
{
|
|
808
824
|
level: 2,
|
|
809
825
|
cost: 1750,
|
|
810
826
|
description: "提高挖矿效率,每日签到金币奖励+10%",
|
|
811
|
-
careerBonus: "
|
|
827
|
+
careerBonus: "每日签到金币奖励+20%; 解锁太空“挖矿”权限"
|
|
812
828
|
},
|
|
813
829
|
{
|
|
814
830
|
level: 3,
|
|
815
831
|
cost: 2950,
|
|
816
832
|
description: "提高挖矿效率,每日签到金币奖励+15%",
|
|
817
|
-
careerBonus: "
|
|
833
|
+
careerBonus: "每日签到金币奖励+30%; 解锁太空“挖矿”权限; 建造矿骡协同挖矿,效率提高20%"
|
|
818
834
|
},
|
|
819
835
|
{
|
|
820
836
|
level: 4,
|
|
821
837
|
cost: 4250,
|
|
822
838
|
description: "提高挖矿效率,每日签到金币奖励+20%",
|
|
823
|
-
careerBonus: "
|
|
839
|
+
careerBonus: "每日签到金币奖励+40%; 解锁太空“挖矿”权限; 建造矿骡协同挖矿,效率提高40%"
|
|
824
840
|
},
|
|
825
841
|
{
|
|
826
842
|
level: 5,
|
|
827
843
|
cost: 5375,
|
|
828
844
|
description: "提高挖矿效率,每日签到金币奖励+25%",
|
|
829
|
-
careerBonus: "
|
|
845
|
+
careerBonus: "每日签到金币奖励+50%; 解锁太空“挖矿”权限; 建造矿骡协同挖矿,效率提高60%,并且单次挖矿时间上限增加至48小时"
|
|
830
846
|
}
|
|
831
847
|
]
|
|
832
848
|
},
|
|
@@ -841,31 +857,31 @@ var Spacestationtechnology = [
|
|
|
841
857
|
level: 1,
|
|
842
858
|
cost: 500,
|
|
843
859
|
description: "提升空间站武器等级,升级武器享有5%的折扣",
|
|
844
|
-
careerBonus: "
|
|
860
|
+
careerBonus: "升级武器享有10%的折扣"
|
|
845
861
|
},
|
|
846
862
|
{
|
|
847
863
|
level: 2,
|
|
848
864
|
cost: 1500,
|
|
849
865
|
description: "提升空间站武器等级,升级武器享有10%的折扣",
|
|
850
|
-
careerBonus: "
|
|
866
|
+
careerBonus: "升级武器享有20%的折扣"
|
|
851
867
|
},
|
|
852
868
|
{
|
|
853
869
|
level: 3,
|
|
854
870
|
cost: 2550,
|
|
855
871
|
description: "提升空间站武器等级,升级武器享有15%的折扣",
|
|
856
|
-
careerBonus: "
|
|
872
|
+
careerBonus: "升级武器享有30%的折扣"
|
|
857
873
|
},
|
|
858
874
|
{
|
|
859
875
|
level: 4,
|
|
860
876
|
cost: 3950,
|
|
861
877
|
description: "提升空间站武器等级,升级武器享有20%的折扣",
|
|
862
|
-
careerBonus: "
|
|
878
|
+
careerBonus: "在升级武器享有40%的折扣"
|
|
863
879
|
},
|
|
864
880
|
{
|
|
865
881
|
level: 5,
|
|
866
882
|
cost: 4650,
|
|
867
883
|
description: "提升空间站武器等级,升级武器享有25%的折扣",
|
|
868
|
-
careerBonus: "
|
|
884
|
+
careerBonus: "升级武器享有50%的折扣; 解锁传奇武器购买权限1次"
|
|
869
885
|
}
|
|
870
886
|
]
|
|
871
887
|
},
|
|
@@ -879,13 +895,13 @@ var Spacestationtechnology = [
|
|
|
879
895
|
level: 1,
|
|
880
896
|
cost: 750,
|
|
881
897
|
description: "重启武器升级站,武器改装通用模块享有5%的折扣",
|
|
882
|
-
careerBonus: "
|
|
898
|
+
careerBonus: "武器改装通用模块享有10%的折扣"
|
|
883
899
|
},
|
|
884
900
|
{
|
|
885
901
|
level: 2,
|
|
886
902
|
cost: 1e3,
|
|
887
903
|
description: "重启高级武器改装站,武器改装通用模块享有10%的折扣",
|
|
888
|
-
careerBonus: "
|
|
904
|
+
careerBonus: "武器改装通用模块享有20%的折扣; 武器改装专属模块享有10%的折扣"
|
|
889
905
|
}
|
|
890
906
|
]
|
|
891
907
|
},
|
|
@@ -900,31 +916,70 @@ var Spacestationtechnology = [
|
|
|
900
916
|
level: 1,
|
|
901
917
|
cost: 500,
|
|
902
918
|
description: "重启安防参数代码,攻击获得的金币+5%",
|
|
903
|
-
careerBonus: "
|
|
919
|
+
careerBonus: "攻击获得的金币+10%"
|
|
904
920
|
},
|
|
905
921
|
{
|
|
906
922
|
level: 2,
|
|
907
923
|
cost: 2050,
|
|
908
924
|
description: "提高空间站安防系统强度,攻击获得的金币+10%",
|
|
909
|
-
careerBonus: "
|
|
925
|
+
careerBonus: "攻击获得的金币+20%"
|
|
910
926
|
},
|
|
911
927
|
{
|
|
912
928
|
level: 3,
|
|
913
929
|
cost: 3250,
|
|
914
930
|
description: "进一步提高空间站安防系统强度,攻击获得的金币+15%",
|
|
915
|
-
careerBonus: "
|
|
931
|
+
careerBonus: "攻击获得的金币+30%"
|
|
916
932
|
},
|
|
917
933
|
{
|
|
918
934
|
level: 4,
|
|
919
935
|
cost: 4250,
|
|
920
936
|
description: "大幅提高空间站安防系统强度,攻击获得的金币+20%",
|
|
921
|
-
careerBonus: "
|
|
937
|
+
careerBonus: "攻击获得的金币+40%"
|
|
922
938
|
},
|
|
923
939
|
{
|
|
924
940
|
level: 5,
|
|
925
941
|
cost: 5350,
|
|
926
942
|
description: "完全恢复空间站安防系统,攻击获得的金币+25%",
|
|
927
|
-
careerBonus: "
|
|
943
|
+
careerBonus: "攻击获得的金币+50%; 获得一次打开安全军械库防爆门的权限,可以随机获得一把传奇武器"
|
|
944
|
+
}
|
|
945
|
+
]
|
|
946
|
+
},
|
|
947
|
+
{
|
|
948
|
+
techId: 5,
|
|
949
|
+
techname: "关键系统固件",
|
|
950
|
+
careerNames: ["舰长", "情报副官"],
|
|
951
|
+
// 新增职业名称字段
|
|
952
|
+
maxLevel: 5,
|
|
953
|
+
levels: [
|
|
954
|
+
{
|
|
955
|
+
level: 1,
|
|
956
|
+
cost: 500,
|
|
957
|
+
description: "升级空间站关键系统,完成任务奖励+5%",
|
|
958
|
+
careerBonus: "完成任务奖励+10%"
|
|
959
|
+
},
|
|
960
|
+
{
|
|
961
|
+
level: 2,
|
|
962
|
+
cost: 1250,
|
|
963
|
+
description: "升级空间站关键系统,完成任务奖励+10%",
|
|
964
|
+
careerBonus: "完成任务奖励+20%"
|
|
965
|
+
},
|
|
966
|
+
{
|
|
967
|
+
level: 3,
|
|
968
|
+
cost: 2250,
|
|
969
|
+
description: "升级空间站关键系统,完成任务奖励+15%",
|
|
970
|
+
careerBonus: "完成任务奖励+30%"
|
|
971
|
+
},
|
|
972
|
+
{
|
|
973
|
+
level: 4,
|
|
974
|
+
cost: 2950,
|
|
975
|
+
description: "升级空间站关键系统,完成任务奖励+20%",
|
|
976
|
+
careerBonus: "完成任务奖励+40%,移除签到7日以下奖励区间"
|
|
977
|
+
},
|
|
978
|
+
{
|
|
979
|
+
level: 5,
|
|
980
|
+
cost: 3550,
|
|
981
|
+
description: "升级空间站关键系统,完成任务奖励+25%",
|
|
982
|
+
careerBonus: "完成任务奖励+50%,移除签到14日以下奖励区间"
|
|
928
983
|
}
|
|
929
984
|
]
|
|
930
985
|
}
|
|
@@ -1456,6 +1511,10 @@ function calculateModifiers(equippedWeapon, weaponName, hasCritRhythm) {
|
|
|
1456
1511
|
let crystalCrit = 0;
|
|
1457
1512
|
let overloadCrit = 0;
|
|
1458
1513
|
let rhythmCrit = 0;
|
|
1514
|
+
let weaponCrit = 0;
|
|
1515
|
+
if (weaponName === "MK-4激光步枪") {
|
|
1516
|
+
weaponCrit = 80;
|
|
1517
|
+
}
|
|
1459
1518
|
equippedWeapon.installedMods.forEach((mod) => {
|
|
1460
1519
|
if (mod === "动能增幅") {
|
|
1461
1520
|
totalModAdd += 0.2;
|
|
@@ -1472,7 +1531,8 @@ function calculateModifiers(equippedWeapon, weaponName, hasCritRhythm) {
|
|
|
1472
1531
|
});
|
|
1473
1532
|
rhythmCrit = hasCritRhythm ? 20 : 0;
|
|
1474
1533
|
const totalCritRate = Math.min(
|
|
1475
|
-
crystalCrit + overloadCrit + rhythmCrit,
|
|
1534
|
+
crystalCrit + overloadCrit + rhythmCrit + weaponCrit,
|
|
1535
|
+
// 包含武器专属暴击
|
|
1476
1536
|
100
|
|
1477
1537
|
);
|
|
1478
1538
|
if (totalCritRate > 0) {
|
|
@@ -2777,6 +2837,24 @@ var PassiveHandler = {
|
|
|
2777
2837
|
}
|
|
2778
2838
|
return { messages };
|
|
2779
2839
|
}, "handleArcWelderEffect"),
|
|
2840
|
+
// 在 PassiveHandler 对象中添加新的处理函数
|
|
2841
|
+
handleArcRifleEffect: /* @__PURE__ */ __name(async function(ctx, targetBoss, weaponName, messages) {
|
|
2842
|
+
if (weaponName !== "DG-3电弧步枪") return null;
|
|
2843
|
+
const currentEnergy = targetBoss.energy || 0;
|
|
2844
|
+
const drainAmount = Math.min(500, currentEnergy);
|
|
2845
|
+
const newEnergy = currentEnergy - drainAmount;
|
|
2846
|
+
if (drainAmount <= 0) {
|
|
2847
|
+
return null;
|
|
2848
|
+
}
|
|
2849
|
+
await ctx.database.set(
|
|
2850
|
+
"ggcevo_boss",
|
|
2851
|
+
{ name: targetBoss.name },
|
|
2852
|
+
{ energy: newEnergy }
|
|
2853
|
+
);
|
|
2854
|
+
targetBoss.energy = newEnergy;
|
|
2855
|
+
messages.push(`⚡ 【DG-3电弧步枪】生效:消耗目标${drainAmount}点能量`);
|
|
2856
|
+
return { drainAmount };
|
|
2857
|
+
}, "handleArcRifleEffect"),
|
|
2780
2858
|
// 庞兽狂暴处理(血量低于50%时减伤)
|
|
2781
2859
|
handleGiantRage: /* @__PURE__ */ __name(function(targetBoss, currentHP, maxHP) {
|
|
2782
2860
|
if (!targetBoss.skills.includes("庞兽狂暴")) return null;
|
|
@@ -3034,7 +3112,7 @@ var PassiveHandler = {
|
|
|
3034
3112
|
};
|
|
3035
3113
|
}, "handleHellfireBomb"),
|
|
3036
3114
|
// 猎手异形处理(Hunter Alien)
|
|
3037
|
-
handleHunterAlien: /* @__PURE__ */ __name(async function(ctx, targetBoss, weaponName
|
|
3115
|
+
handleHunterAlien: /* @__PURE__ */ __name(async function(ctx, targetBoss, weaponName) {
|
|
3038
3116
|
if (!targetBoss.skills.includes("猎手异形")) return null;
|
|
3039
3117
|
if (weaponName === "焚烧枪" || weaponName === "零度之下") {
|
|
3040
3118
|
return {
|
|
@@ -3042,6 +3120,7 @@ var PassiveHandler = {
|
|
|
3042
3120
|
messages: [`🛡️ 【猎手异形】生效:免疫${weaponName === "焚烧枪" ? "火焰" : "寒冷"}伤害`]
|
|
3043
3121
|
};
|
|
3044
3122
|
}
|
|
3123
|
+
const activeBosses = await ctx.database.get("ggcevo_boss", { isActive: true });
|
|
3045
3124
|
const otherAlive = activeBosses.some(
|
|
3046
3125
|
(boss) => boss.groupId === targetBoss.groupId && boss.name !== targetBoss.name && boss.HP > 0
|
|
3047
3126
|
);
|
|
@@ -3108,67 +3187,92 @@ var PassiveHandler = {
|
|
|
3108
3187
|
if (!targetBoss || weaponName !== "粒子相位枪") return 0;
|
|
3109
3188
|
return targetBoss.tags.includes("护盾") ? 0.5 : 0;
|
|
3110
3189
|
}, "handleParticlePhaseEffect"),
|
|
3111
|
-
//
|
|
3112
|
-
handleIgnoreReductionEffects: /* @__PURE__ */ __name(async (ctx,
|
|
3113
|
-
|
|
3114
|
-
|
|
3115
|
-
|
|
3116
|
-
|
|
3117
|
-
|
|
3118
|
-
|
|
3119
|
-
|
|
3120
|
-
|
|
3121
|
-
|
|
3122
|
-
|
|
3123
|
-
|
|
3124
|
-
}
|
|
3125
|
-
const [equippedWeapon] = await ctx.database.get("ggcevo_equipment", {
|
|
3126
|
-
weaponId: weaponConfigData.id,
|
|
3127
|
-
handle: userId,
|
|
3128
|
-
equipped: true
|
|
3129
|
-
});
|
|
3130
|
-
if (!equippedWeapon || !equippedWeapon.installedMods) {
|
|
3131
|
-
return fallbackResult;
|
|
3132
|
-
}
|
|
3133
|
-
const ignoreEffects = [];
|
|
3190
|
+
// 修改后的无视减伤处理函数
|
|
3191
|
+
handleIgnoreReductionEffects: /* @__PURE__ */ __name(async (ctx, handle, weaponName, targetBoss, nerfMultiplier) => {
|
|
3192
|
+
if (nerfMultiplier >= 0) return null;
|
|
3193
|
+
const ignoreEffects = [];
|
|
3194
|
+
let messages = [];
|
|
3195
|
+
if (weaponName === "光剑") {
|
|
3196
|
+
ignoreEffects.push(1);
|
|
3197
|
+
messages.push(`⚔️ 【光剑】特效:无视目标100%减伤效果`);
|
|
3198
|
+
} else if (weaponName === "M4AE脉冲步枪") {
|
|
3199
|
+
ignoreEffects.push(0.8);
|
|
3200
|
+
messages.push(`🔫 【M4AE脉冲步枪】特效:无视目标80%减伤效果`);
|
|
3201
|
+
}
|
|
3202
|
+
if (weaponName !== "光剑" && weaponName !== "M4AE脉冲步枪") {
|
|
3134
3203
|
const particleEffect = PassiveHandler.handleParticlePhaseEffect(targetBoss, weaponName);
|
|
3135
3204
|
if (particleEffect > 0) {
|
|
3136
3205
|
ignoreEffects.push(particleEffect);
|
|
3137
|
-
}
|
|
3138
|
-
const corrosionEffect = PassiveHandler.handleCorrosionModule(equippedWeapon.installedMods);
|
|
3139
|
-
if (corrosionEffect > 0) {
|
|
3140
|
-
ignoreEffects.push(corrosionEffect);
|
|
3141
|
-
}
|
|
3142
|
-
if (ignoreEffects.length === 0) {
|
|
3143
|
-
return fallbackResult;
|
|
3144
|
-
}
|
|
3145
|
-
const totalIgnoreRate = ignoreEffects.reduce((sum, rate) => sum + rate, 0);
|
|
3146
|
-
const originalMultiplier = totalMultiplier;
|
|
3147
|
-
const effectiveMultiplier = totalMultiplier * (1 - totalIgnoreRate);
|
|
3148
|
-
const messages = [];
|
|
3149
|
-
if (particleEffect > 0) {
|
|
3150
3206
|
messages.push(`⚡ 【粒子相位枪】特效:无视护盾目标${particleEffect * 100}%减伤效果`);
|
|
3151
3207
|
}
|
|
3152
|
-
|
|
3153
|
-
|
|
3208
|
+
const weaponConfigData = weaponConfig[weaponName];
|
|
3209
|
+
if (weaponConfigData) {
|
|
3210
|
+
const [equippedWeapon] = await ctx.database.get("ggcevo_equipment", {
|
|
3211
|
+
weaponId: weaponConfigData.id,
|
|
3212
|
+
handle,
|
|
3213
|
+
equipped: true
|
|
3214
|
+
});
|
|
3215
|
+
if (equippedWeapon?.installedMods?.includes("破甲模块")) {
|
|
3216
|
+
const corrosionEffect = 0.2;
|
|
3217
|
+
ignoreEffects.push(corrosionEffect);
|
|
3218
|
+
messages.push(`⚡ 【破甲模块】生效:无视目标${corrosionEffect * 100}%减伤效果`);
|
|
3219
|
+
}
|
|
3220
|
+
}
|
|
3221
|
+
}
|
|
3222
|
+
try {
|
|
3223
|
+
const [careerData] = await ctx.database.get("ggcevo_careers", { handle });
|
|
3224
|
+
if (careerData?.group === "辛迪加海盗") {
|
|
3225
|
+
const [radarMask] = await ctx.database.get("ggcevo_warehouse", {
|
|
3226
|
+
handle,
|
|
3227
|
+
itemId: 6
|
|
3228
|
+
// 雷达面罩ID
|
|
3229
|
+
});
|
|
3230
|
+
if (radarMask && radarMask.quantity > 0) {
|
|
3231
|
+
const radarEffect = 0.1;
|
|
3232
|
+
ignoreEffects.push(radarEffect);
|
|
3233
|
+
messages.push(`🛰️ 【雷达面罩】生效:无视目标${radarEffect * 100}%减伤效果`);
|
|
3234
|
+
}
|
|
3154
3235
|
}
|
|
3155
|
-
messages.push(
|
|
3156
|
-
`⚡ 减伤系数由${(originalMultiplier * 100).toFixed(0)}% → ${(effectiveMultiplier * 100).toFixed(0)}%`
|
|
3157
|
-
);
|
|
3158
|
-
return {
|
|
3159
|
-
damageMultiplier: effectiveMultiplier,
|
|
3160
|
-
messages
|
|
3161
|
-
};
|
|
3162
3236
|
} catch (error) {
|
|
3163
|
-
|
|
3164
|
-
|
|
3237
|
+
console.error("检查雷达面罩效果时出错:", error);
|
|
3238
|
+
}
|
|
3239
|
+
if (ignoreEffects.length === 0) {
|
|
3240
|
+
return null;
|
|
3165
3241
|
}
|
|
3242
|
+
const totalIgnoreRate = Math.min(1, ignoreEffects.reduce((sum, rate) => sum + rate, 0));
|
|
3243
|
+
return {
|
|
3244
|
+
ignoreRate: totalIgnoreRate,
|
|
3245
|
+
messages
|
|
3246
|
+
};
|
|
3166
3247
|
}, "handleIgnoreReductionEffects"),
|
|
3167
|
-
//
|
|
3248
|
+
// 在PassiveHandler对象中添加处理脉冲扰乱枪效果的方法
|
|
3249
|
+
handlePulseDisruptor: /* @__PURE__ */ __name(async function(ctx, targetBoss, weaponName) {
|
|
3250
|
+
if (weaponName !== "脉冲扰乱枪") {
|
|
3251
|
+
return null;
|
|
3252
|
+
}
|
|
3253
|
+
const currentSkillCount = targetBoss.Skillcountpoints || 0;
|
|
3254
|
+
if (currentSkillCount <= 0) {
|
|
3255
|
+
return null;
|
|
3256
|
+
}
|
|
3257
|
+
const newCount = Math.max(0, currentSkillCount - 2);
|
|
3258
|
+
await ctx.database.set(
|
|
3259
|
+
"ggcevo_boss",
|
|
3260
|
+
{ name: targetBoss.name },
|
|
3261
|
+
{ Skillcountpoints: newCount }
|
|
3262
|
+
);
|
|
3263
|
+
targetBoss.Skillcountpoints = newCount;
|
|
3264
|
+
return {
|
|
3265
|
+
messages: [
|
|
3266
|
+
`⚡ 【脉冲扰乱枪】特效:减少${targetBoss.name} 2层技能计数(当前${newCount}层)`
|
|
3267
|
+
]
|
|
3268
|
+
};
|
|
3269
|
+
}, "handlePulseDisruptor"),
|
|
3270
|
+
// 修改后的伤害处理函数
|
|
3168
3271
|
handlePassives: /* @__PURE__ */ __name(async function(ctx, handle, targetBoss, initialDamage, currentHP, maxHP, weaponName, weaponData, activeBosses, bossGroup) {
|
|
3169
3272
|
let messages = [];
|
|
3170
3273
|
let skillUpdates = [];
|
|
3171
|
-
let
|
|
3274
|
+
let buffMultiplier = 0;
|
|
3275
|
+
let nerfMultiplier = 0;
|
|
3172
3276
|
let radiationApplied = false;
|
|
3173
3277
|
let freezing = false;
|
|
3174
3278
|
let bileStacks = 0;
|
|
@@ -3236,7 +3340,7 @@ var PassiveHandler = {
|
|
|
3236
3340
|
initialDamage: 0
|
|
3237
3341
|
};
|
|
3238
3342
|
}
|
|
3239
|
-
const hunterImmune = await this.handleHunterAlien(ctx, targetBoss, weaponName
|
|
3343
|
+
const hunterImmune = await this.handleHunterAlien(ctx, targetBoss, weaponName);
|
|
3240
3344
|
if (hunterImmune?.immune) {
|
|
3241
3345
|
return {
|
|
3242
3346
|
currentHP: targetBoss.HP,
|
|
@@ -3248,92 +3352,114 @@ var PassiveHandler = {
|
|
|
3248
3352
|
targetBoss.skills.forEach((skill) => {
|
|
3249
3353
|
const config = passiveConfig[skill];
|
|
3250
3354
|
if (config && config.effect !== void 0 && config.effect !== 0) {
|
|
3251
|
-
|
|
3355
|
+
if (config.effect > 0) {
|
|
3356
|
+
buffMultiplier += config.effect;
|
|
3357
|
+
} else {
|
|
3358
|
+
nerfMultiplier += config.effect;
|
|
3359
|
+
}
|
|
3252
3360
|
const effectPercent = Math.round(config.effect * 100);
|
|
3253
|
-
|
|
3361
|
+
const effectSign = config.effect > 0 ? "+" : "";
|
|
3362
|
+
messages.push(`📚 【${skill}】生效:受到的伤害${effectSign}${effectPercent}%`);
|
|
3254
3363
|
}
|
|
3255
3364
|
});
|
|
3365
|
+
const radiationCalc = this.calculateRadiationDamage(targetBoss);
|
|
3366
|
+
if (radiationCalc) {
|
|
3367
|
+
buffMultiplier += radiationCalc.damageMultiplier;
|
|
3368
|
+
messages.push(...radiationCalc.messages);
|
|
3369
|
+
}
|
|
3370
|
+
const coldDamageResult = this.calculateColdDamage(targetBoss);
|
|
3371
|
+
if (coldDamageResult) {
|
|
3372
|
+
buffMultiplier += coldDamageResult.damageMultiplier;
|
|
3373
|
+
messages.push(...coldDamageResult.messages);
|
|
3374
|
+
}
|
|
3256
3375
|
const infectionResult = await this.handleInfectedStation(ctx, targetBoss);
|
|
3257
3376
|
if (infectionResult) {
|
|
3258
|
-
|
|
3377
|
+
nerfMultiplier += infectionResult.damageMultiplier;
|
|
3259
3378
|
messages.push(...infectionResult.messages);
|
|
3260
3379
|
}
|
|
3261
3380
|
const armorResult = this.handleStructuralArmor(targetBoss, weaponData);
|
|
3262
3381
|
if (armorResult) {
|
|
3263
|
-
|
|
3382
|
+
nerfMultiplier += armorResult.damageMultiplier;
|
|
3264
3383
|
messages.push(...armorResult.messages);
|
|
3265
3384
|
}
|
|
3266
3385
|
const bloodEffect = this.handleBloodEffects(targetBoss, currentHP, maxHP);
|
|
3267
3386
|
if (bloodEffect) {
|
|
3268
|
-
|
|
3387
|
+
nerfMultiplier += bloodEffect.damageMultiplier;
|
|
3269
3388
|
messages.push(...bloodEffect.messages);
|
|
3270
3389
|
}
|
|
3271
3390
|
const siphonResult = this.handleEnergySiphon(targetBoss, currentHP, maxHP);
|
|
3272
3391
|
if (siphonResult) {
|
|
3273
|
-
|
|
3392
|
+
nerfMultiplier += siphonResult.damageMultiplier;
|
|
3274
3393
|
messages.push(...siphonResult.messages);
|
|
3275
3394
|
}
|
|
3276
3395
|
const powerSiphonResult = this.handlePowerSiphon(targetBoss);
|
|
3277
3396
|
if (powerSiphonResult) {
|
|
3278
|
-
|
|
3397
|
+
nerfMultiplier += powerSiphonResult.damageMultiplier;
|
|
3279
3398
|
messages.push(...powerSiphonResult.messages);
|
|
3280
3399
|
}
|
|
3281
3400
|
const giantRageResult = this.handleGiantRage(targetBoss, currentHP, maxHP);
|
|
3282
3401
|
if (giantRageResult) {
|
|
3283
|
-
|
|
3402
|
+
nerfMultiplier += giantRageResult.damageMultiplier;
|
|
3284
3403
|
messages.push(...giantRageResult.messages);
|
|
3285
3404
|
}
|
|
3286
3405
|
const hellfireBombResult = this.handleHellfireBomb(targetBoss, activeBosses);
|
|
3287
3406
|
if (hellfireBombResult) {
|
|
3288
|
-
|
|
3407
|
+
nerfMultiplier += hellfireBombResult.damageMultiplier;
|
|
3289
3408
|
messages.push(...hellfireBombResult.messages);
|
|
3290
3409
|
}
|
|
3291
3410
|
const disguiseResult = await this.handleDisguise(ctx, targetBoss, weaponName, initialDamage);
|
|
3292
3411
|
if (disguiseResult) {
|
|
3293
|
-
|
|
3412
|
+
nerfMultiplier += disguiseResult.damageMultiplier;
|
|
3294
3413
|
messages.push(...disguiseResult.messages);
|
|
3295
3414
|
}
|
|
3296
3415
|
if (hunterImmune && !hunterImmune.immune) {
|
|
3297
|
-
|
|
3416
|
+
const multiplier = hunterImmune.damageMultiplier;
|
|
3417
|
+
if (multiplier > 0) {
|
|
3418
|
+
buffMultiplier += multiplier;
|
|
3419
|
+
} else {
|
|
3420
|
+
nerfMultiplier += multiplier;
|
|
3421
|
+
}
|
|
3298
3422
|
messages.push(...hunterImmune.messages);
|
|
3299
3423
|
}
|
|
3300
3424
|
const rageResult = this.handleRage(targetBoss, currentHP, maxHP);
|
|
3301
3425
|
if (rageResult) {
|
|
3302
|
-
|
|
3426
|
+
nerfMultiplier += rageResult.damageMultiplier;
|
|
3303
3427
|
messages.push(...rageResult.messages);
|
|
3304
3428
|
}
|
|
3305
|
-
|
|
3306
|
-
|
|
3307
|
-
totalMultiplier += radiationCalc.damageMultiplier;
|
|
3308
|
-
messages.push(...radiationCalc.messages);
|
|
3309
|
-
}
|
|
3310
|
-
const coldDamageResult = this.calculateColdDamage(targetBoss);
|
|
3311
|
-
if (coldDamageResult) {
|
|
3312
|
-
totalMultiplier += coldDamageResult.damageMultiplier;
|
|
3313
|
-
messages.push(...coldDamageResult.messages);
|
|
3429
|
+
if (solarFlareResult.messages.length > 0) {
|
|
3430
|
+
messages.push(...solarFlareResult.messages);
|
|
3314
3431
|
}
|
|
3432
|
+
let baseMultiplier = buffMultiplier + nerfMultiplier;
|
|
3315
3433
|
const ignoreReductionResult = await this.handleIgnoreReductionEffects(
|
|
3316
3434
|
ctx,
|
|
3317
3435
|
handle,
|
|
3318
3436
|
weaponName,
|
|
3319
3437
|
targetBoss,
|
|
3320
|
-
|
|
3438
|
+
nerfMultiplier
|
|
3439
|
+
// 只传入减伤部分
|
|
3321
3440
|
);
|
|
3322
|
-
|
|
3323
|
-
|
|
3324
|
-
|
|
3325
|
-
|
|
3326
|
-
|
|
3327
|
-
|
|
3328
|
-
|
|
3329
|
-
|
|
3441
|
+
let effectiveMultiplier = baseMultiplier;
|
|
3442
|
+
let appliedIgnoreMessages = [];
|
|
3443
|
+
let effectiveNerf = nerfMultiplier;
|
|
3444
|
+
if (ignoreReductionResult) {
|
|
3445
|
+
appliedIgnoreMessages = ignoreReductionResult.messages;
|
|
3446
|
+
effectiveNerf = nerfMultiplier * (1 - ignoreReductionResult.ignoreRate);
|
|
3447
|
+
effectiveMultiplier = buffMultiplier + effectiveNerf;
|
|
3448
|
+
}
|
|
3449
|
+
const originalMultiplier = effectiveMultiplier;
|
|
3330
3450
|
if (originalMultiplier < -1) {
|
|
3331
3451
|
messages.push(`⚠️ 触发伤害保底机制:强制造成1点伤害`);
|
|
3332
3452
|
}
|
|
3333
|
-
let finalDamage = initialDamage * (1 +
|
|
3453
|
+
let finalDamage = initialDamage * (1 + effectiveMultiplier);
|
|
3334
3454
|
finalDamage = Math.floor(finalDamage);
|
|
3335
3455
|
finalDamage = Math.max(finalDamage, 1);
|
|
3336
3456
|
currentHP = targetBoss.HP - finalDamage;
|
|
3457
|
+
if (appliedIgnoreMessages.length > 0) {
|
|
3458
|
+
messages.push(...appliedIgnoreMessages);
|
|
3459
|
+
messages.push(
|
|
3460
|
+
`⚡ 减伤效果:${(nerfMultiplier * 100).toFixed(0)}% → ${(effectiveNerf * 100).toFixed(0)}%`
|
|
3461
|
+
);
|
|
3462
|
+
}
|
|
3337
3463
|
if (currentHP <= 0 && !targetBoss.skills.includes("求生本能I") && !targetBoss.skills.includes("求生本能II")) {
|
|
3338
3464
|
return {
|
|
3339
3465
|
currentHP,
|
|
@@ -3403,6 +3529,22 @@ var PassiveHandler = {
|
|
|
3403
3529
|
}
|
|
3404
3530
|
}
|
|
3405
3531
|
}
|
|
3532
|
+
const pulseDisruptorResult = await this.handlePulseDisruptor(
|
|
3533
|
+
ctx,
|
|
3534
|
+
targetBoss,
|
|
3535
|
+
weaponName
|
|
3536
|
+
);
|
|
3537
|
+
if (pulseDisruptorResult) {
|
|
3538
|
+
messages.push(...pulseDisruptorResult.messages);
|
|
3539
|
+
}
|
|
3540
|
+
const arcResult = await this.handleArcWelderEffect(ctx, targetBoss, weaponName);
|
|
3541
|
+
if (arcResult) {
|
|
3542
|
+
messages.push(...arcResult.messages);
|
|
3543
|
+
}
|
|
3544
|
+
const arcRifleResult = await this.handleArcRifleEffect(ctx, targetBoss, weaponName, messages);
|
|
3545
|
+
if (arcRifleResult) {
|
|
3546
|
+
messages.push(...arcRifleResult.messages);
|
|
3547
|
+
}
|
|
3406
3548
|
const coldAdaptResult = await this.handleColdAdaptation(ctx, targetBoss, weaponName);
|
|
3407
3549
|
if (coldAdaptResult) {
|
|
3408
3550
|
messages.push(...coldAdaptResult.messages);
|
|
@@ -3420,10 +3562,6 @@ var PassiveHandler = {
|
|
|
3420
3562
|
if (tagChangeResult) {
|
|
3421
3563
|
messages.push(...tagChangeResult.messages);
|
|
3422
3564
|
}
|
|
3423
|
-
const arcResult = await this.handleArcWelderEffect(ctx, targetBoss, weaponName);
|
|
3424
|
-
if (arcResult) {
|
|
3425
|
-
messages.push(...arcResult.messages);
|
|
3426
|
-
}
|
|
3427
3565
|
const shockwaveResult = await this.handleEnergyShockwave(ctx, targetBoss);
|
|
3428
3566
|
if (shockwaveResult) {
|
|
3429
3567
|
messages.push(...shockwaveResult.messages);
|
|
@@ -4590,12 +4728,30 @@ ${itemDetails.join("\n")}`;
|
|
|
4590
4728
|
} else if (monthlyDays === 28) {
|
|
4591
4729
|
tickets = 7;
|
|
4592
4730
|
}
|
|
4593
|
-
|
|
4594
|
-
|
|
4595
|
-
else if (monthlyDays < 21) basePoints = getRandomInt(60, 80);
|
|
4596
|
-
else if (monthlyDays < 28) basePoints = getRandomInt(80, 100);
|
|
4597
|
-
else basePoints = getRandomInt(100, 200);
|
|
4731
|
+
const [systemFirmwareTech] = await ctx.database.get("ggcevo_tech", { handle, techId: 5 }).catch(() => [{ level: 0 }]);
|
|
4732
|
+
const systemFirmwareLevel = Math.min(systemFirmwareTech?.level || 0, 5);
|
|
4598
4733
|
const [careerData] = await ctx.database.get("ggcevo_careers", { handle });
|
|
4734
|
+
const shouldApplyBonus = careerData?.group === "人类联盟" && ["舰长", "情报副官"].includes(careerData.career) && systemFirmwareLevel >= 4;
|
|
4735
|
+
if (shouldApplyBonus) {
|
|
4736
|
+
if (systemFirmwareLevel === 4) {
|
|
4737
|
+
if (monthlyDays < 14) basePoints = getRandomInt(40, 60);
|
|
4738
|
+
else if (monthlyDays < 21) basePoints = getRandomInt(60, 80);
|
|
4739
|
+
else if (monthlyDays < 28) basePoints = getRandomInt(80, 100);
|
|
4740
|
+
else basePoints = getRandomInt(100, 200);
|
|
4741
|
+
messages.push(`🛰️ 关键系统固件科技Lv4:移除签到7日以下奖励区间`);
|
|
4742
|
+
} else if (systemFirmwareLevel === 5) {
|
|
4743
|
+
if (monthlyDays < 21) basePoints = getRandomInt(60, 80);
|
|
4744
|
+
else if (monthlyDays < 28) basePoints = getRandomInt(80, 100);
|
|
4745
|
+
else basePoints = getRandomInt(100, 200);
|
|
4746
|
+
messages.push(`🛰️ 关键系统固件科技Lv5:移除签到14日以下奖励区间`);
|
|
4747
|
+
}
|
|
4748
|
+
} else {
|
|
4749
|
+
if (monthlyDays < 7) basePoints = getRandomInt(20, 40);
|
|
4750
|
+
else if (monthlyDays < 14) basePoints = getRandomInt(40, 60);
|
|
4751
|
+
else if (monthlyDays < 21) basePoints = getRandomInt(60, 80);
|
|
4752
|
+
else if (monthlyDays < 28) basePoints = getRandomInt(80, 100);
|
|
4753
|
+
else basePoints = getRandomInt(100, 200);
|
|
4754
|
+
}
|
|
4599
4755
|
if (careerData?.group === "人类联盟") {
|
|
4600
4756
|
totalBonus += 0.2;
|
|
4601
4757
|
messages.push("🏛️ 人类联盟阵营:+20%金币");
|
|
@@ -4618,7 +4774,7 @@ ${itemDetails.join("\n")}`;
|
|
|
4618
4774
|
}
|
|
4619
4775
|
if (careerData.career === "深空矿工") {
|
|
4620
4776
|
totalBonus += 0.5;
|
|
4621
|
-
messages.push("
|
|
4777
|
+
messages.push("⛏️ 深空矿工职业:+50%金币");
|
|
4622
4778
|
}
|
|
4623
4779
|
}
|
|
4624
4780
|
if (careerData?.group === "辛迪加海盗") {
|
|
@@ -4628,7 +4784,7 @@ ${itemDetails.join("\n")}`;
|
|
|
4628
4784
|
const additionalBonus = Math.min(humanPlayersCount, 50);
|
|
4629
4785
|
const credBonus = 0.5 + additionalBonus / 100;
|
|
4630
4786
|
totalBonus += credBonus;
|
|
4631
|
-
messages.push(`💎 CRED-17
|
|
4787
|
+
messages.push(`💎 CRED-17生效:+50%金币 (额外+${additionalBonus}%金币)`);
|
|
4632
4788
|
}
|
|
4633
4789
|
}
|
|
4634
4790
|
const [meowEffect] = await ctx.database.get("ggcevo_Wish_Record", {
|
|
@@ -5729,6 +5885,19 @@ ${items.join("、")}
|
|
|
5729
5885
|
computerExpertProtection = true;
|
|
5730
5886
|
goldTransfer = 0;
|
|
5731
5887
|
}
|
|
5888
|
+
let hornEffect = false;
|
|
5889
|
+
let extraGold = 0;
|
|
5890
|
+
if (isWin && initiatorCareer?.group === "辛迪加海盗") {
|
|
5891
|
+
const [hornItem] = await ctx.database.get("ggcevo_warehouse", {
|
|
5892
|
+
handle: initiatorHandle,
|
|
5893
|
+
itemId: 7
|
|
5894
|
+
// 气喇叭ID
|
|
5895
|
+
});
|
|
5896
|
+
if (hornItem && hornItem.quantity > 0) {
|
|
5897
|
+
hornEffect = true;
|
|
5898
|
+
extraGold = goldTransfer;
|
|
5899
|
+
}
|
|
5900
|
+
}
|
|
5732
5901
|
await ctx.database.withTransaction(async () => {
|
|
5733
5902
|
await ctx.database.upsert("ggcevo_pk", [
|
|
5734
5903
|
// 发起者记录
|
|
@@ -5769,7 +5938,11 @@ ${items.join("、")}
|
|
|
5769
5938
|
redcrystal: (initiatorCareer?.redcrystal || 0) + redcrystalAdd
|
|
5770
5939
|
}], ["handle"]);
|
|
5771
5940
|
}
|
|
5772
|
-
if (
|
|
5941
|
+
if (hornEffect) {
|
|
5942
|
+
await ctx.database.set("ggcevo_sign", initiatorHandle, {
|
|
5943
|
+
totalRewards: initiatorGold + goldTransfer + extraGold
|
|
5944
|
+
});
|
|
5945
|
+
} else if (computerExpertProtection) {
|
|
5773
5946
|
} else {
|
|
5774
5947
|
if (isWin) {
|
|
5775
5948
|
await ctx.database.set("ggcevo_sign", targetHandle, {
|
|
@@ -5810,7 +5983,10 @@ ${items.join("、")}
|
|
|
5810
5983
|
result.push(`💸 您从口袋里拿出了${goldTransfer}枚金币上交给对方`);
|
|
5811
5984
|
}
|
|
5812
5985
|
if (mp3Effect) {
|
|
5813
|
-
result.push(`💿 MP3
|
|
5986
|
+
result.push(`💿 MP3播放器生效:挑战者PK失败时上交的金币减少50%`);
|
|
5987
|
+
}
|
|
5988
|
+
if (hornEffect) {
|
|
5989
|
+
result.push(`📯 气喇叭生效:辛迪加海盗总部为您发放了额外${extraGold}金币奖励!`);
|
|
5814
5990
|
}
|
|
5815
5991
|
if (initiatorCareer?.group === "辛迪加海盗") {
|
|
5816
5992
|
result.push(`🔴 辛迪加海盗阵营:+1枚红晶`);
|
|
@@ -7423,7 +7599,7 @@ ${validTypes.join("、")}`;
|
|
|
7423
7599
|
'使用 "科技 科技名称" 查看详细信息',
|
|
7424
7600
|
isIntelligenceOfficer ? [
|
|
7425
7601
|
"💰 当前折扣:",
|
|
7426
|
-
"🎖️
|
|
7602
|
+
"🎖️ 情报副官职业:10%"
|
|
7427
7603
|
].join("\n") : "",
|
|
7428
7604
|
"====================",
|
|
7429
7605
|
...techList,
|
|
@@ -7452,7 +7628,7 @@ ${Spacestationtechnology.map((t) => t.techname).join("、")}`;
|
|
|
7452
7628
|
if (isIntelligenceOfficer) {
|
|
7453
7629
|
discountInfo = [
|
|
7454
7630
|
"💰 当前折扣:",
|
|
7455
|
-
"🎖️
|
|
7631
|
+
"🎖️ 情报副官职业:10%"
|
|
7456
7632
|
];
|
|
7457
7633
|
}
|
|
7458
7634
|
return [
|
|
@@ -7557,7 +7733,7 @@ ${Spacestationtechnology.map((t) => t.techname).join("、")}`;
|
|
|
7557
7733
|
}
|
|
7558
7734
|
reportLines.push(rewardLine);
|
|
7559
7735
|
if (tech.level >= 3) {
|
|
7560
|
-
reportLines.push(`🔧
|
|
7736
|
+
reportLines.push(`🔧 采掘系统科技Lv.${tech.level}(矿骡):+${multiplier * 100}%金币`);
|
|
7561
7737
|
}
|
|
7562
7738
|
reportLines.push(`🏆 历史总挖矿收益:${record.totalMined + total}金币`);
|
|
7563
7739
|
reportLines.push("💡 已自动开始下一轮挖矿");
|
|
@@ -7621,49 +7797,84 @@ ${Spacestationtechnology.map((t) => t.techname).join("、")}`;
|
|
|
7621
7797
|
].join("\n");
|
|
7622
7798
|
});
|
|
7623
7799
|
ctx.command("ggcevo/完成任务 <name:text>", "完成指定任务领取奖励").usage('输入"完成任务 任务名称"来完成任务并领取奖励').action(async ({ session }, name2) => {
|
|
7624
|
-
|
|
7625
|
-
|
|
7626
|
-
|
|
7627
|
-
|
|
7628
|
-
|
|
7629
|
-
|
|
7630
|
-
|
|
7631
|
-
(
|
|
7632
|
-
|
|
7633
|
-
|
|
7634
|
-
|
|
7635
|
-
|
|
7636
|
-
|
|
7637
|
-
|
|
7638
|
-
|
|
7639
|
-
|
|
7640
|
-
|
|
7641
|
-
|
|
7642
|
-
|
|
7800
|
+
try {
|
|
7801
|
+
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
7802
|
+
if (!profile) return "⚠️ 需要先绑定游戏句柄";
|
|
7803
|
+
const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
7804
|
+
if (await ctx.database.get("ggcevo_blacklist", { handle }).then((r) => r.length)) {
|
|
7805
|
+
return "⛔ 您已被列入黑名单。";
|
|
7806
|
+
}
|
|
7807
|
+
if (!name2) return '请输入"完成任务 任务名称"领取任务奖励';
|
|
7808
|
+
const taskEntry = Object.entries(Tasklist).find(
|
|
7809
|
+
([taskName2]) => taskName2.includes(name2)
|
|
7810
|
+
);
|
|
7811
|
+
if (!taskEntry) return `⚠️ 未找到名称包含"${name2}"的任务`;
|
|
7812
|
+
const [taskName, taskConfig] = taskEntry;
|
|
7813
|
+
const [taskData] = await ctx.database.get("ggcevo_task", {
|
|
7814
|
+
handle,
|
|
7815
|
+
taskId: taskConfig.id
|
|
7816
|
+
});
|
|
7817
|
+
if (!taskData) return `⚠️ 您尚未开始"${taskName}"任务`;
|
|
7818
|
+
if (taskData.progress < taskConfig.target) {
|
|
7819
|
+
return `⚠️ 任务进度不足!当前进度:${taskData.progress}/${taskConfig.target}`;
|
|
7820
|
+
}
|
|
7821
|
+
const newProgress = taskData.progress - taskConfig.target;
|
|
7822
|
+
const newCompletions = taskData.Completions + 1;
|
|
7823
|
+
const [careerData] = await ctx.database.get("ggcevo_careers", { handle });
|
|
7824
|
+
const [systemFirmwareTech] = await ctx.database.get("ggcevo_tech", { handle, techId: 5 }).catch(() => [{ level: 0 }]);
|
|
7825
|
+
const techLevel = Math.min(systemFirmwareTech?.level || 0, 5);
|
|
7826
|
+
let baseReward = taskConfig.price;
|
|
7827
|
+
let actualReward = baseReward;
|
|
7828
|
+
let bonusMessage = "";
|
|
7829
|
+
let bonusPercent = 0;
|
|
7830
|
+
if (techLevel > 0) {
|
|
7831
|
+
const normalBonus = [0, 5, 10, 15, 20, 25][techLevel];
|
|
7832
|
+
const careerBonus = careerData?.group === "人类联盟" && ["舰长", "情报副官"].includes(careerData.career) ? [0, 10, 20, 30, 40, 50][techLevel] : 0;
|
|
7833
|
+
bonusPercent = Math.max(normalBonus, careerBonus);
|
|
7834
|
+
if (bonusPercent > 0) {
|
|
7835
|
+
actualReward = Math.round(baseReward * (1 + bonusPercent / 100));
|
|
7836
|
+
bonusMessage = `(含科技加成 +${bonusPercent}%)`;
|
|
7837
|
+
}
|
|
7838
|
+
}
|
|
7839
|
+
await ctx.database.set("ggcevo_task", {
|
|
7840
|
+
handle,
|
|
7841
|
+
taskId: taskConfig.id
|
|
7842
|
+
}, {
|
|
7843
|
+
progress: newProgress,
|
|
7844
|
+
Completions: newCompletions
|
|
7845
|
+
});
|
|
7846
|
+
const [signData] = await ctx.database.get("ggcevo_sign", { handle });
|
|
7847
|
+
await ctx.database.upsert("ggcevo_sign", [{
|
|
7848
|
+
handle,
|
|
7849
|
+
totalRewards: (signData?.totalRewards || 0) + actualReward
|
|
7850
|
+
}], ["handle"]);
|
|
7851
|
+
const [updatedSignData] = await ctx.database.get("ggcevo_sign", { handle });
|
|
7852
|
+
const response = [
|
|
7853
|
+
`🎉 恭喜您成功完成【${taskName}】任务!`,
|
|
7854
|
+
`任务奖励:${actualReward}金币(基础值:${baseReward}金币)`
|
|
7855
|
+
];
|
|
7856
|
+
if (bonusPercent > 0) {
|
|
7857
|
+
let bonusType = "";
|
|
7858
|
+
if (careerData?.group === "人类联盟" && ["舰长", "情报副官"].includes(careerData.career)) {
|
|
7859
|
+
bonusType = "(职业专属加成)";
|
|
7860
|
+
} else {
|
|
7861
|
+
bonusType = "(普通加成)";
|
|
7862
|
+
}
|
|
7863
|
+
response.push(`⚙️ 关键系统固件科技Lv.${techLevel}:+${bonusPercent}%金币`);
|
|
7864
|
+
}
|
|
7865
|
+
response.push(
|
|
7866
|
+
`累计完成次数:${newCompletions}次`,
|
|
7867
|
+
`剩余进度点数:${newProgress}`,
|
|
7868
|
+
`当前拥有金币:${updatedSignData.totalRewards}`
|
|
7869
|
+
);
|
|
7870
|
+
if (newProgress >= taskConfig.target) {
|
|
7871
|
+
response.push(`💡 当前剩余进度可再完成${Math.floor(newProgress / taskConfig.target)}次任务`);
|
|
7872
|
+
}
|
|
7873
|
+
return response.join("\n");
|
|
7874
|
+
} catch (error) {
|
|
7875
|
+
console.error("完成任务命令时发生错误:", error);
|
|
7876
|
+
return "处理任务时发生错误,请稍后重试。";
|
|
7643
7877
|
}
|
|
7644
|
-
const newProgress = taskData.progress - taskConfig.target;
|
|
7645
|
-
const newCompletions = taskData.Completions + 1;
|
|
7646
|
-
await ctx.database.set("ggcevo_task", {
|
|
7647
|
-
handle,
|
|
7648
|
-
taskId: taskConfig.id
|
|
7649
|
-
}, {
|
|
7650
|
-
progress: newProgress,
|
|
7651
|
-
Completions: newCompletions
|
|
7652
|
-
});
|
|
7653
|
-
const [signData] = await ctx.database.get("ggcevo_sign", { handle });
|
|
7654
|
-
await ctx.database.upsert("ggcevo_sign", [{
|
|
7655
|
-
handle,
|
|
7656
|
-
totalRewards: (signData?.totalRewards || 0) + taskConfig.price
|
|
7657
|
-
}], ["handle"]);
|
|
7658
|
-
const [updatedSignData] = await ctx.database.get("ggcevo_sign", { handle });
|
|
7659
|
-
return [
|
|
7660
|
-
`🎉 恭喜您成功完成【${taskName}】任务!`,
|
|
7661
|
-
`任务奖励:${taskConfig.price}金币`,
|
|
7662
|
-
`累计完成次数:${newCompletions}次`,
|
|
7663
|
-
`剩余进度点数:${newProgress}`,
|
|
7664
|
-
`当前拥有金币:${updatedSignData.totalRewards}`,
|
|
7665
|
-
newProgress >= taskConfig.target ? `💡 当前剩余进度可再完成${Math.floor(newProgress / taskConfig.target)}次任务` : ``
|
|
7666
|
-
].join("\n");
|
|
7667
7878
|
});
|
|
7668
7879
|
}
|
|
7669
7880
|
__name(apply, "apply");
|
package/lib/items.d.ts
CHANGED
|
@@ -39,6 +39,22 @@ export declare const SyndicatedItems: {
|
|
|
39
39
|
redCrystalCost: number;
|
|
40
40
|
effects: string;
|
|
41
41
|
};
|
|
42
|
+
雷达面罩: {
|
|
43
|
+
id: number;
|
|
44
|
+
type: string;
|
|
45
|
+
description: string;
|
|
46
|
+
price: number;
|
|
47
|
+
redCrystalCost: number;
|
|
48
|
+
effects: string;
|
|
49
|
+
};
|
|
50
|
+
气喇叭: {
|
|
51
|
+
id: number;
|
|
52
|
+
type: string;
|
|
53
|
+
description: string;
|
|
54
|
+
price: number;
|
|
55
|
+
redCrystalCost: number;
|
|
56
|
+
effects: string;
|
|
57
|
+
};
|
|
42
58
|
};
|
|
43
59
|
export declare const initDefaultItems: {
|
|
44
60
|
咕咕币: {
|