koishi-plugin-ggcevo-game 1.4.62 → 1.4.64

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 CHANGED
@@ -37,10 +37,12 @@ var weaponConfig = {
37
37
  type: "实弹武器",
38
38
  category: "实弹武器",
39
39
  damage: 10,
40
+ armorDamageReduction: 1,
41
+ // 每点护甲减伤1点伤害
40
42
  description: "标准配置武器,中距离作战利器",
41
43
  specialeffect: "",
42
44
  price: 100,
43
- redCrystalCost: 5,
45
+ redCrystalCost: 1,
44
46
  isantiair: true,
45
47
  tagEffects: {
46
48
  "轻甲": 1.5
@@ -52,15 +54,14 @@ var weaponConfig = {
52
54
  type: "能量武器",
53
55
  category: "能量武器",
54
56
  damage: 23,
57
+ armorDamageReduction: 0,
55
58
  description: "先进激光武器,远距离精准打击",
56
59
  specialeffect: "",
57
60
  price: 300,
58
- redCrystalCost: 5,
61
+ redCrystalCost: 3,
59
62
  isantiair: true,
60
63
  tagEffects: {
61
- "重甲": 1.5,
62
- // 对重甲目标造成150%伤害
63
- "护盾": 0.5
64
+ "重甲": 1.5
64
65
  }
65
66
  },
66
67
  "焚烧枪": {
@@ -68,14 +69,15 @@ var weaponConfig = {
68
69
  type: "热能武器",
69
70
  category: "热能武器",
70
71
  damage: 20,
72
+ armorDamageReduction: 0.25,
71
73
  description: "基于热能的强大武器,烧烬一切",
72
74
  specialeffect: "",
73
75
  price: 450,
74
- redCrystalCost: 5,
76
+ redCrystalCost: 4,
75
77
  isantiair: false,
76
78
  tagEffects: {
77
- "惧热": 2,
78
- "生物": 1.5,
79
+ "惧热": 1.5,
80
+ "生物": 1.2,
79
81
  "护盾": 0.5
80
82
  }
81
83
  },
@@ -84,25 +86,26 @@ var weaponConfig = {
84
86
  type: "能量武器",
85
87
  category: "能量武器",
86
88
  damage: 28,
89
+ armorDamageReduction: 0,
87
90
  description: "由激光步枪改良而来,高效的对重甲武器",
88
91
  specialeffect: "",
89
92
  price: 850,
90
- redCrystalCost: 10,
93
+ redCrystalCost: 8,
91
94
  isantiair: true,
92
95
  tagEffects: {
93
- "重甲": 1.8,
94
- "护盾": 0.2
96
+ "重甲": 1.75
95
97
  }
96
98
  },
97
99
  "等离子切割机": {
98
100
  id: 5,
99
101
  type: "实弹武器",
100
102
  category: "实弹武器",
101
- damage: 12,
103
+ damage: 20,
104
+ armorDamageReduction: 1,
102
105
  description: "一种改造后的采矿切割机,有效对抗重甲目标",
103
106
  specialeffect: "",
104
107
  price: 150,
105
- redCrystalCost: 5,
108
+ redCrystalCost: 1,
106
109
  isantiair: true,
107
110
  tagEffects: {
108
111
  "建筑": 2,
@@ -114,44 +117,45 @@ var weaponConfig = {
114
117
  id: 6,
115
118
  type: "实弹武器",
116
119
  category: "实弹武器",
117
- damage: 28,
120
+ damage: 48,
121
+ armorDamageReduction: 4,
118
122
  description: "近距离攻击武器,专为遭遇战设计使用",
119
123
  specialeffect: "",
120
124
  price: 325,
121
- redCrystalCost: 5,
125
+ redCrystalCost: 3,
122
126
  isantiair: false,
123
127
  tagEffects: {
124
- "轻甲": 2,
125
- "重甲": 0.5
128
+ "轻甲": 1.5
126
129
  }
127
130
  },
128
131
  "侦察步枪": {
129
132
  id: 7,
130
133
  type: "实弹武器",
131
134
  category: "实弹武器",
132
- damage: 50,
135
+ damage: 60,
136
+ armorDamageReduction: 3,
133
137
  description: "用于隐秘射击的最佳武器,但是无法穿透护甲",
134
138
  specialeffect: "",
135
139
  price: 550,
136
- redCrystalCost: 10,
140
+ redCrystalCost: 5,
137
141
  isantiair: true,
138
- tagEffects: {
139
- "重甲": 0.2
140
- }
142
+ tagEffects: {}
141
143
  },
142
144
  "零度之下": {
143
145
  id: 8,
144
146
  type: "热能武器",
145
147
  category: "热能武器",
146
148
  damage: 22,
149
+ armorDamageReduction: 1,
147
150
  description: "喷射稳定的液氮恒流,对长时间接触者造成致命的损伤",
148
151
  specialeffect: "攻击使目标叠加“寒冷”层数,每层使其受到的伤害+2.5%(至多+50%)",
149
152
  price: 775,
150
- redCrystalCost: 10,
153
+ redCrystalCost: 7,
151
154
  isantiair: false,
152
155
  tagEffects: {
153
156
  "惧寒": 2,
154
- "灵能": 1.5
157
+ "灵能": 1.5,
158
+ "护盾": 0.5
155
159
  }
156
160
  },
157
161
  "弧焊枪": {
@@ -159,10 +163,11 @@ var weaponConfig = {
159
163
  type: "能量武器",
160
164
  category: "能量武器",
161
165
  damage: 25,
166
+ armorDamageReduction: 0.5,
162
167
  description: "一种经过改造的电动工具,可对近距离的目标放出高压电",
163
168
  specialeffect: "攻击消耗目标200点能量",
164
169
  price: 750,
165
- redCrystalCost: 10,
170
+ redCrystalCost: 7,
166
171
  isantiair: true,
167
172
  tagEffects: {
168
173
  "机械": 2,
@@ -174,13 +179,15 @@ var weaponConfig = {
174
179
  type: "热能武器",
175
180
  category: "热能武器",
176
181
  damage: 24,
182
+ armorDamageReduction: 0.75,
177
183
  description: "一种高度危险性的武器,设计用辐射照射并伤害敌人",
178
184
  specialeffect: "攻击使生物目标(无机械标签)叠加“辐射”层数,每层使其受到的伤害+2.5%(至多+50%)",
179
185
  price: 825,
180
- redCrystalCost: 10,
186
+ redCrystalCost: 8,
181
187
  isantiair: true,
182
188
  tagEffects: {
183
189
  "生物": 1.5,
190
+ "护盾": 0.5,
184
191
  "机械": 0.2
185
192
  }
186
193
  },
@@ -189,10 +196,11 @@ var weaponConfig = {
189
196
  type: "能量武器",
190
197
  category: "能量武器",
191
198
  damage: 30,
199
+ armorDamageReduction: 0,
192
200
  description: "激光步枪的变种,采用折射技术升级",
193
201
  specialeffect: "拥有“散射”效果,对其他目标造成50%的伤害",
194
202
  price: 1450,
195
- redCrystalCost: 15,
203
+ redCrystalCost: 14,
196
204
  isantiair: true,
197
205
  tagEffects: {
198
206
  "灵能": 1.2
@@ -203,14 +211,14 @@ var weaponConfig = {
203
211
  type: "能量武器",
204
212
  category: "能量武器",
205
213
  damage: 30,
214
+ armorDamageReduction: 0.75,
206
215
  description: "面对护盾目标而开发的武器",
207
216
  specialeffect: "攻击无视护盾目标50%的减伤效果",
208
217
  price: 1050,
209
- redCrystalCost: 15,
218
+ redCrystalCost: 10,
210
219
  isantiair: true,
211
220
  tagEffects: {
212
- "护盾": 1.8,
213
- "重甲": 0.2
221
+ "护盾": 1.8
214
222
  }
215
223
  },
216
224
  "动力钻头": {
@@ -218,10 +226,11 @@ var weaponConfig = {
218
226
  type: "实弹武器",
219
227
  category: "实弹武器",
220
228
  damage: 30,
229
+ armorDamageReduction: 0.5,
221
230
  description: "这种强大的钻头是由那些想把矿工SCV上的大螺丝用作武器的人创造的",
222
231
  specialeffect: "",
223
232
  price: 1e3,
224
- redCrystalCost: 15,
233
+ redCrystalCost: 10,
225
234
  isantiair: true,
226
235
  tagEffects: {
227
236
  "建筑": 2,
@@ -233,7 +242,8 @@ var weaponConfig = {
233
242
  id: 14,
234
243
  type: "能量武器",
235
244
  category: "能量武器",
236
- damage: 35,
245
+ damage: 40,
246
+ armorDamageReduction: 1,
237
247
  description: "一种原型能量武器,能够发射强大的脉冲",
238
248
  specialeffect: "攻击使目标的技能层数减少2层",
239
249
  price: 1500,
@@ -246,6 +256,7 @@ var weaponConfig = {
246
256
  type: "热能武器",
247
257
  category: "热能武器",
248
258
  damage: 50,
259
+ armorDamageReduction: 0.5,
249
260
  description: "发射非常坚固的专属榴弹,对具有坚固防御的目标几乎没有效果",
250
261
  specialeffect: "",
251
262
  price: 2e3,
@@ -261,16 +272,16 @@ var weaponConfig = {
261
272
  id: 16,
262
273
  type: "能量武器",
263
274
  category: "能量武器",
264
- damage: 60,
275
+ damage: 64,
276
+ armorDamageReduction: 4,
265
277
  description: "用于解决高生命值目标的次时代武器,擅长对付护盾耗尽或没有护甲的敌人",
266
278
  specialeffect: "",
267
279
  price: 1750,
268
- redCrystalCost: 20,
280
+ redCrystalCost: 17,
269
281
  isantiair: true,
270
282
  tagEffects: {
271
283
  "生物": 1.5,
272
- "护盾": 0.2,
273
- "重甲": 0.2
284
+ "护盾": 0.5
274
285
  }
275
286
  },
276
287
  "聚变磁轨枪": {
@@ -278,18 +289,52 @@ var weaponConfig = {
278
289
  type: "能量武器",
279
290
  category: "能量武器",
280
291
  damage: 58,
292
+ armorDamageReduction: 0,
281
293
  description: "一种实验性的超级武器,能造成巨大的伤害",
282
294
  specialeffect: "",
283
295
  price: 1550,
284
- redCrystalCost: 20,
296
+ redCrystalCost: 15,
285
297
  isantiair: true,
286
298
  tagEffects: {}
287
299
  },
300
+ "M134轮转机枪": {
301
+ id: 18,
302
+ type: "实弹武器",
303
+ category: "实弹武器",
304
+ damage: 50,
305
+ armorDamageReduction: 0.1,
306
+ description: "二十一世纪的武器,经过修改以减少后坐力并提高远程精度",
307
+ specialeffect: "",
308
+ price: 2e3,
309
+ redCrystalCost: 20,
310
+ isantiair: true,
311
+ tagEffects: {
312
+ "轻甲": 1.5
313
+ }
314
+ },
315
+ "星灼灵焰炮": {
316
+ id: 19,
317
+ type: "能量武器",
318
+ category: "能量武器",
319
+ damage: 35,
320
+ armorDamageReduction: 1,
321
+ description: "这是在一位高级灵能者的帮助下,解析灵能力量制作出的高科技武器",
322
+ specialeffect: "",
323
+ price: 1550,
324
+ redCrystalCost: 15,
325
+ isantiair: true,
326
+ tagEffects: {
327
+ "机械": 2,
328
+ "建筑": 2,
329
+ "异形": 2
330
+ }
331
+ },
288
332
  "外星电浆": {
289
333
  id: 101,
290
334
  type: "能量武器",
291
335
  category: "传奇武器",
292
336
  damage: 88,
337
+ armorDamageReduction: 3,
293
338
  description: "一件传奇武器",
294
339
  specialeffect: "",
295
340
  price: 6400,
@@ -297,8 +342,7 @@ var weaponConfig = {
297
342
  isantiair: true,
298
343
  tagEffects: {
299
344
  "生物": 2,
300
- "护盾": 0.5,
301
- "重甲": 0.5
345
+ "护盾": 0.5
302
346
  }
303
347
  },
304
348
  "MK-4激光步枪": {
@@ -306,8 +350,9 @@ var weaponConfig = {
306
350
  type: "能量武器",
307
351
  category: "传奇武器",
308
352
  damage: 70,
353
+ armorDamageReduction: -1,
309
354
  description: "一件传奇武器",
310
- specialeffect: "攻击暴击率+80%",
355
+ specialeffect: "暴击率+80%",
311
356
  price: 6400,
312
357
  redCrystalCost: 200,
313
358
  isantiair: true,
@@ -320,6 +365,7 @@ var weaponConfig = {
320
365
  type: "实弹武器",
321
366
  category: "传奇武器",
322
367
  damage: 80,
368
+ armorDamageReduction: 0,
323
369
  description: "这是传说中的武器",
324
370
  specialeffect: "",
325
371
  price: 6400,
@@ -334,7 +380,8 @@ var weaponConfig = {
334
380
  id: 104,
335
381
  type: "实弹武器",
336
382
  category: "传奇武器",
337
- damage: 130,
383
+ damage: 125,
384
+ armorDamageReduction: -2,
338
385
  description: "一件传奇武器",
339
386
  specialeffect: "",
340
387
  price: 6400,
@@ -349,6 +396,7 @@ var weaponConfig = {
349
396
  type: "能量武器",
350
397
  category: "传奇武器",
351
398
  damage: 100,
399
+ armorDamageReduction: 0,
352
400
  description: "优雅而独特的武器",
353
401
  specialeffect: "无视目标100%的减伤效果",
354
402
  price: 6400,
@@ -361,6 +409,7 @@ var weaponConfig = {
361
409
  type: "能量武器",
362
410
  category: "传奇武器",
363
411
  damage: 100,
412
+ armorDamageReduction: 1,
364
413
  description: "一件传奇武器",
365
414
  specialeffect: "攻击消耗目标500点能量",
366
415
  price: 6400,
@@ -375,6 +424,7 @@ var weaponConfig = {
375
424
  type: "能量武器",
376
425
  category: "传奇武器",
377
426
  damage: 60,
427
+ armorDamageReduction: 0,
378
428
  description: "一件传奇武器",
379
429
  specialeffect: "攻击无视目标80%的减伤效果",
380
430
  price: 6400,
@@ -389,6 +439,7 @@ var weaponConfig = {
389
439
  type: "能量武器",
390
440
  category: "传奇武器",
391
441
  damage: 90,
442
+ armorDamageReduction: 0,
392
443
  description: "一件传奇武器",
393
444
  specialeffect: "",
394
445
  price: 6400,
@@ -415,47 +466,41 @@ var modConfig = {
415
466
  isExclusive: false
416
467
  },
417
468
  "破甲模块": {
418
- cost: 2750,
419
- effect: "攻击无视目标20%的减伤效果",
469
+ cost: 1250,
470
+ effect: "攻击无视目标10%的减伤效果",
420
471
  exclusiveTo: "",
421
472
  isExclusive: false
422
473
  },
423
474
  // 新增专属模块
424
475
  "裂甲核心": {
425
476
  cost: 750,
426
- effect: "伤害+40%,对重甲目标改为造成150%伤害",
477
+ effect: "攻击伤害+40%,攻击无视目标的40%减伤效果",
427
478
  exclusiveTo: "高斯步枪",
428
479
  // 指定专属武器
429
480
  isExclusive: true
430
481
  // 标记为专属模块
431
482
  },
432
483
  "棱镜超载核心": {
433
- cost: 2750,
484
+ cost: 3050,
434
485
  effect: "暴击率+80%",
435
486
  exclusiveTo: "激光步枪",
436
487
  isExclusive: true
437
488
  },
438
489
  "助燃核心": {
439
490
  cost: 2550,
440
- effect: "对惧热目标改为造成300%伤害; 对生物目标改为造成200%伤害",
491
+ effect: "对惧热目标改为造成300%伤害,对生物目标改为造成200%伤害",
441
492
  exclusiveTo: "焚烧枪",
442
493
  isExclusive: true
443
494
  },
444
495
  "光束曲射晶片": {
445
496
  cost: 2750,
446
- effect: "拥有“散射”效果,对其他目标造成50%的伤害",
447
- exclusiveTo: "碎骨步枪",
448
- isExclusive: true
449
- },
450
- "护盾崩解核心": {
451
- cost: 1250,
452
- effect: "对护盾目标改为造成80%伤害",
497
+ effect: "攻击时造成散射,只能对其他目标造成50%的伤害",
453
498
  exclusiveTo: "碎骨步枪",
454
499
  isExclusive: true
455
500
  },
456
501
  "金刚石瞄准镜": {
457
- cost: 1250,
458
- effect: "对重甲目标改为造成80%伤害",
502
+ cost: 2250,
503
+ effect: "无视目标20%的减伤效果",
459
504
  exclusiveTo: "侦察步枪",
460
505
  isExclusive: true
461
506
  },
@@ -673,7 +718,7 @@ var syndicatePirateConfig = [
673
718
  },
674
719
  {
675
720
  professionName: "猩红杀手",
676
- effect: "“侦察步枪”攻击伤害+15%; 使用“侦察步枪”攻击时无视目标20%的减伤效果; 购买DSR-55反器材步枪(传奇)享有50%的折扣",
721
+ effect: "“侦察步枪”攻击伤害+15%; 使用“侦察步枪”攻击时每1点护甲减少0点伤害; 购买DSR-55反器材步枪(传奇)享有50%的折扣",
677
722
  requirements: "“侦察步枪”武器等级≥3级",
678
723
  Jobtransfer: true,
679
724
  costredcrystal: 30
@@ -1057,47 +1102,42 @@ var Tasklist = {
1057
1102
  "伽马辐射": {
1058
1103
  id: 1,
1059
1104
  type: "可重复任务",
1060
- description: "利用【伽马枪】武器对目标造成辐射伤害",
1061
1105
  target: 1,
1062
1106
  price: 50,
1063
1107
  redCrystalCost: 0,
1064
- condition: "使用伽马枪攻击目标并成功增加其辐射层数"
1108
+ condition: "使用【伽马枪】攻击目标并成功增加其辐射层数"
1065
1109
  },
1066
1110
  "绝对零度": {
1067
1111
  id: 2,
1068
1112
  type: "可重复任务",
1069
- description: "利用【零度之下】武器对目标造成寒冷伤害",
1070
1113
  target: 1,
1071
1114
  price: 50,
1072
1115
  redCrystalCost: 0,
1073
- condition: "使用零度之下攻击目标并成功增加其寒冷层数"
1116
+ condition: "使用【零度之下】攻击目标并成功增加其寒冷层数"
1074
1117
  },
1075
1118
  "胆汁引爆": {
1076
1119
  id: 3,
1077
1120
  type: "可重复任务",
1078
- description: "利用【焚烧枪】武器引爆目标的胆汁",
1079
1121
  target: 1,
1080
1122
  price: 200,
1081
1123
  redCrystalCost: 0,
1082
- condition: "使用焚烧枪攻击目标并成功引爆其≥10层的胆汁"
1124
+ condition: "使用【焚烧枪】攻击目标并成功引爆其≥10层的胆汁"
1083
1125
  },
1084
1126
  "脉冲干扰": {
1085
1127
  id: 4,
1086
1128
  type: "可重复任务",
1087
- description: "利用【脉冲扰乱枪】武器干扰目标的技能释放",
1088
1129
  target: 1,
1089
1130
  price: 75,
1090
1131
  redCrystalCost: 0,
1091
- condition: "使用脉冲扰乱枪攻击目标并成功减少其技能层数"
1132
+ condition: "使用【脉冲扰乱枪】攻击目标并成功减少其技能层数"
1092
1133
  },
1093
- "弧能消耗": {
1134
+ "能量消耗": {
1094
1135
  id: 5,
1095
1136
  type: "可重复任务",
1096
- description: "利用【弧焊枪】武器消耗目标的能量",
1097
1137
  target: 1,
1098
1138
  price: 75,
1099
1139
  redCrystalCost: 0,
1100
- condition: "使用弧焊枪攻击目标并成功消耗其能量"
1140
+ condition: "使用【弧焊枪】或【DG-3电弧步枪】攻击目标并成功消耗其能量"
1101
1141
  }
1102
1142
  };
1103
1143
 
@@ -1109,7 +1149,10 @@ var bossPool = [
1109
1149
  name: "异齿猛兽首领",
1110
1150
  type: "主宰",
1111
1151
  maxHP: 15e3,
1152
+ maxShield: 5e3,
1112
1153
  maxEnergy: 0,
1154
+ armor: 9,
1155
+ shieldArmor: 25,
1113
1156
  maxStacks: 0,
1114
1157
  tags: ["重甲", "生物", "异形"],
1115
1158
  passive: ["异形甲壳"]
@@ -1119,7 +1162,10 @@ var bossPool = [
1119
1162
  name: "异齿猛兽",
1120
1163
  type: "子代",
1121
1164
  maxHP: 5e3,
1165
+ maxShield: 1e3,
1122
1166
  maxEnergy: 0,
1167
+ armor: 6,
1168
+ shieldArmor: 20,
1123
1169
  maxStacks: 0,
1124
1170
  tags: ["重甲", "生物", "重型", "异形"],
1125
1171
  passive: ["弱化形态", "异形甲壳"]
@@ -1132,7 +1178,10 @@ var bossPool = [
1132
1178
  name: "寒冰王蛇",
1133
1179
  type: "主宰",
1134
1180
  maxHP: 15e3,
1181
+ maxShield: 0,
1135
1182
  maxEnergy: 0,
1183
+ armor: 6,
1184
+ shieldArmor: 0,
1136
1185
  maxStacks: 0,
1137
1186
  tags: ["重甲", "生物", "惧热", "重型", "异形"],
1138
1187
  passive: ["冰霜环绕", "冰霜进化"]
@@ -1142,7 +1191,10 @@ var bossPool = [
1142
1191
  name: "冰蛇",
1143
1192
  type: "子代",
1144
1193
  maxHP: 5e3,
1194
+ maxShield: 0,
1145
1195
  maxEnergy: 0,
1196
+ armor: 4,
1197
+ shieldArmor: 0,
1146
1198
  maxStacks: 0,
1147
1199
  tags: ["生物", "惧热", "异形"],
1148
1200
  passive: ["弱化形态", "冰霜回复", "冰霜进化"]
@@ -1155,7 +1207,10 @@ var bossPool = [
1155
1207
  name: "莽兽",
1156
1208
  type: "主宰",
1157
1209
  maxHP: 12e3,
1210
+ maxShield: 0,
1158
1211
  maxEnergy: 0,
1212
+ armor: 8,
1213
+ shieldArmor: 0,
1159
1214
  maxStacks: 0,
1160
1215
  tags: ["重甲", "生物", "重型", "异形"],
1161
1216
  passive: ["应激甲壳II", "求生本能II", "冷适应"]
@@ -1165,18 +1220,24 @@ var bossPool = [
1165
1220
  name: "狂暴畸变体",
1166
1221
  type: "子代",
1167
1222
  maxHP: 4e3,
1223
+ maxShield: 0,
1168
1224
  maxEnergy: 0,
1225
+ armor: 5,
1226
+ shieldArmor: 0,
1169
1227
  maxStacks: 0,
1170
- tags: ["重甲", "生物", "重型", "异形"],
1228
+ tags: ["重甲", "生物", "重型", "极地", "异形"],
1171
1229
  passive: ["弱化形态", "应激甲壳I", "求生本能I", "冷适应"]
1172
1230
  },
1173
1231
  {
1174
1232
  name: "剧毒畸变体",
1175
1233
  type: "子代",
1176
1234
  maxHP: 4e3,
1235
+ maxShield: 0,
1177
1236
  maxEnergy: 0,
1237
+ armor: 7,
1238
+ shieldArmor: 0,
1178
1239
  maxStacks: 0,
1179
- tags: ["重甲", "生物", "重型", "异形"],
1240
+ tags: ["重甲", "生物", "重型", "极地", "异形"],
1180
1241
  passive: ["弱化形态", "应激甲壳I", "求生本能I", "冷适应"]
1181
1242
  }
1182
1243
  ]
@@ -1187,7 +1248,10 @@ var bossPool = [
1187
1248
  name: "空间站感染虫",
1188
1249
  type: "主宰",
1189
1250
  maxHP: 1e4,
1251
+ maxShield: 0,
1190
1252
  maxEnergy: 0,
1253
+ armor: 5,
1254
+ shieldArmor: 0,
1191
1255
  maxStacks: 0,
1192
1256
  tags: ["重甲", "生物", "机械", "异形"],
1193
1257
  passive: ["感染空间站", "病毒云", "霉菌滋生"]
@@ -1197,7 +1261,10 @@ var bossPool = [
1197
1261
  name: "机械感染虫",
1198
1262
  type: "子代",
1199
1263
  maxHP: 3e3,
1264
+ maxShield: 0,
1200
1265
  maxEnergy: 0,
1266
+ armor: 4,
1267
+ shieldArmor: 0,
1201
1268
  maxStacks: 0,
1202
1269
  tags: ["重甲", "生物", "机械", "异形"],
1203
1270
  passive: ["弱化形态", "病毒云", "霉菌滋生"]
@@ -1206,7 +1273,10 @@ var bossPool = [
1206
1273
  name: "空间站哨枪塔",
1207
1274
  type: "子代",
1208
1275
  maxHP: 5e3,
1276
+ maxShield: 0,
1209
1277
  maxEnergy: 0,
1278
+ armor: 6.5,
1279
+ shieldArmor: 0,
1210
1280
  maxStacks: 10,
1211
1281
  tags: ["重甲", "机械", "建筑"],
1212
1282
  passive: ["岗哨机枪", "结构装甲"]
@@ -1219,7 +1289,10 @@ var bossPool = [
1219
1289
  name: "吸血蝙蝠首领",
1220
1290
  type: "主宰",
1221
1291
  maxHP: 12e3,
1292
+ maxShield: 0,
1222
1293
  maxEnergy: 0,
1294
+ armor: 2.5,
1295
+ shieldArmor: 0,
1223
1296
  maxStacks: 20,
1224
1297
  tags: ["生物", "异形"],
1225
1298
  passive: ["吸血唾液", "进食", "吐血", "嗜血狂暴"]
@@ -1229,7 +1302,10 @@ var bossPool = [
1229
1302
  name: "吸血蝙蝠",
1230
1303
  type: "子代",
1231
1304
  maxHP: 4e3,
1305
+ maxShield: 0,
1232
1306
  maxEnergy: 0,
1307
+ armor: 2.5,
1308
+ shieldArmor: 0,
1233
1309
  maxStacks: 20,
1234
1310
  tags: ["生物", "异形"],
1235
1311
  passive: ["弱化形态", "吸血唾液", "进食", "吐血"]
@@ -1241,20 +1317,26 @@ var bossPool = [
1241
1317
  main: {
1242
1318
  name: "亚电主宰者",
1243
1319
  type: "主宰",
1244
- maxHP: 2e4,
1320
+ maxHP: 2e3,
1321
+ maxShield: 2e4,
1245
1322
  maxEnergy: 1e3,
1323
+ armor: 0,
1324
+ shieldArmor: 4,
1246
1325
  maxStacks: 0,
1247
- tags: ["护盾", "灵能", "重型", "异形"],
1326
+ tags: ["重甲", "灵能", "重型", "异形"],
1248
1327
  passive: ["超导体", "能源虹吸", "电能冲击波", "电能立场", "脉冲", "能量黑洞"]
1249
1328
  },
1250
1329
  minions: [
1251
1330
  {
1252
1331
  name: "亚电能者",
1253
1332
  type: "子代",
1254
- maxHP: 6e3,
1333
+ maxHP: 1e3,
1334
+ maxShield: 5e3,
1255
1335
  maxEnergy: 0,
1336
+ armor: 1,
1337
+ shieldArmor: 4,
1256
1338
  maxStacks: 0,
1257
- tags: ["护盾", "灵能", "异形"],
1339
+ tags: ["重甲", "灵能", "异形"],
1258
1340
  passive: ["弱化形态", "超导体", "能源虹吸", "能量黑洞"]
1259
1341
  }
1260
1342
  ]
@@ -1264,8 +1346,11 @@ var bossPool = [
1264
1346
  main: {
1265
1347
  name: "烈焰庞兽",
1266
1348
  type: "主宰",
1267
- maxHP: 2e4,
1349
+ maxHP: 15e3,
1350
+ maxShield: 5e3,
1268
1351
  maxEnergy: 0,
1352
+ armor: 5,
1353
+ shieldArmor: 20,
1269
1354
  maxStacks: 20,
1270
1355
  tags: ["重甲", "生物", "惧寒", "重型", "异形"],
1271
1356
  passive: ["火焰异形", "庞兽狂暴", "灼烧粘液", "炼狱爆弹", "火焰吐息", "太阳耀斑"]
@@ -1275,7 +1360,10 @@ var bossPool = [
1275
1360
  name: "火焰甲虫",
1276
1361
  type: "子代",
1277
1362
  maxHP: 5e3,
1363
+ maxShield: 1e3,
1278
1364
  maxEnergy: 0,
1365
+ armor: 5,
1366
+ shieldArmor: 15,
1279
1367
  maxStacks: 20,
1280
1368
  tags: ["重甲", "生物", "惧寒", "异形"],
1281
1369
  passive: ["弱化形态", "火焰异形", "灼烧粘液", "腐蚀胆汁", "燃烧潜地"]
@@ -1288,7 +1376,10 @@ var bossPool = [
1288
1376
  name: "狂猎猛禽首领",
1289
1377
  type: "主宰",
1290
1378
  maxHP: 2e4,
1379
+ maxShield: 0,
1291
1380
  maxEnergy: 0,
1381
+ armor: 3,
1382
+ shieldArmor: 0,
1292
1383
  maxStacks: 0,
1293
1384
  tags: ["生物", "异形"],
1294
1385
  passive: ["猎手异形", "致命一击", "狂暴", "伪装"]
@@ -1298,7 +1389,10 @@ var bossPool = [
1298
1389
  name: "狂猎猛禽1",
1299
1390
  type: "子代",
1300
1391
  maxHP: 5e3,
1392
+ maxShield: 0,
1301
1393
  maxEnergy: 0,
1394
+ armor: 2.5,
1395
+ shieldArmor: 0,
1302
1396
  maxStacks: 0,
1303
1397
  tags: ["生物", "异形"],
1304
1398
  passive: ["弱化形态", "猎手异形", "狂暴", "伪装"]
@@ -1307,7 +1401,10 @@ var bossPool = [
1307
1401
  name: "狂猎猛禽2",
1308
1402
  type: "子代",
1309
1403
  maxHP: 5e3,
1404
+ maxShield: 0,
1310
1405
  maxEnergy: 0,
1406
+ armor: 2.5,
1407
+ shieldArmor: 0,
1311
1408
  maxStacks: 0,
1312
1409
  tags: ["生物", "异形"],
1313
1410
  passive: ["弱化形态", "猎手异形", "狂暴", "伪装"]
@@ -1320,9 +1417,12 @@ var bossPool = [
1320
1417
  name: "宇宙界主",
1321
1418
  type: "主宰",
1322
1419
  maxHP: 2e4,
1420
+ maxShield: 2e3,
1323
1421
  maxEnergy: 1e3,
1422
+ armor: 2,
1423
+ shieldArmor: 0,
1324
1424
  maxStacks: 50,
1325
- tags: ["重甲", "护盾", "生物", "灵能", "异形"],
1425
+ tags: ["重甲", "生物", "灵能", "异形"],
1326
1426
  passive: ["宇宙能量", "复苏", "光影之刃", "远古预兆", "星界之风", "超视距穿梭"]
1327
1427
  },
1328
1428
  minions: [
@@ -1330,9 +1430,12 @@ var bossPool = [
1330
1430
  name: "宇宙战将",
1331
1431
  type: "子代",
1332
1432
  maxHP: 5e3,
1433
+ maxShield: 500,
1333
1434
  maxEnergy: 0,
1435
+ armor: 1,
1436
+ shieldArmor: 0,
1334
1437
  maxStacks: 0,
1335
- tags: ["重甲", "护盾", "生物", "灵能", "异形"],
1438
+ tags: ["重甲", "生物", "灵能", "异形"],
1336
1439
  passive: ["弱化形态", "心灵狂热", "星界之风"]
1337
1440
  }
1338
1441
  ]
@@ -1343,7 +1446,10 @@ var bossPool = [
1343
1446
  name: "猛毒异兽",
1344
1447
  type: "主宰",
1345
1448
  maxHP: 2e4,
1449
+ maxShield: 0,
1346
1450
  maxEnergy: 0,
1451
+ armor: 4,
1452
+ shieldArmor: 0,
1347
1453
  maxStacks: 20,
1348
1454
  tags: ["生物", "异形"],
1349
1455
  passive: ["毒性唾液", "剧毒狂暴", "毒气波", "淬毒撕咬", "酸蚀池", "剧毒突袭"]
@@ -1353,7 +1459,10 @@ var bossPool = [
1353
1459
  name: "剧毒蝙蝠",
1354
1460
  type: "子代",
1355
1461
  maxHP: 5e3,
1462
+ maxShield: 0,
1356
1463
  maxEnergy: 0,
1464
+ armor: 3,
1465
+ shieldArmor: 0,
1357
1466
  maxStacks: 20,
1358
1467
  tags: ["轻甲", "生物", "异形"],
1359
1468
  passive: ["弱化形态", "毒性唾液", "毒气波", "淬毒撕咬", "酸蚀池"]
@@ -1453,6 +1562,39 @@ function getMaxStacksByName(bossName) {
1453
1562
  return void 0;
1454
1563
  }
1455
1564
  __name(getMaxStacksByName, "getMaxStacksByName");
1565
+ function getMaxShieldByName(bossName) {
1566
+ if (bossName === "测试假人") return 0;
1567
+ for (const boss of bossPool) {
1568
+ if (boss.main.name === bossName) return boss.main.maxShield;
1569
+ for (const minion of boss.minions) {
1570
+ if (minion.name === bossName) return minion.maxShield;
1571
+ }
1572
+ }
1573
+ return void 0;
1574
+ }
1575
+ __name(getMaxShieldByName, "getMaxShieldByName");
1576
+ function getArmorByName(bossName) {
1577
+ if (bossName === "测试假人") return 0;
1578
+ for (const boss of bossPool) {
1579
+ if (boss.main.name === bossName) return boss.main.armor;
1580
+ for (const minion of boss.minions) {
1581
+ if (minion.name === bossName) return minion.armor;
1582
+ }
1583
+ }
1584
+ return void 0;
1585
+ }
1586
+ __name(getArmorByName, "getArmorByName");
1587
+ function getShieldArmorByName(bossName) {
1588
+ if (bossName === "测试假人") return 0;
1589
+ for (const boss of bossPool) {
1590
+ if (boss.main.name === bossName) return boss.main.shieldArmor;
1591
+ for (const minion of boss.minions) {
1592
+ if (minion.name === bossName) return minion.shieldArmor;
1593
+ }
1594
+ }
1595
+ return void 0;
1596
+ }
1597
+ __name(getShieldArmorByName, "getShieldArmorByName");
1456
1598
  var BattleEffectProcessor = {
1457
1599
  // 弱化形态
1458
1600
  handleWeakForm: /* @__PURE__ */ __name(function(targetBoss) {
@@ -1497,13 +1639,13 @@ var BattleEffectProcessor = {
1497
1639
  }
1498
1640
  return null;
1499
1641
  }, "handleIsolated"),
1500
- handleFrostRegeneration: /* @__PURE__ */ __name(function(targetBoss, activeBosses, maxStatsMap) {
1642
+ handleFrostRegeneration: /* @__PURE__ */ __name(function(targetBoss, activeBosses, maxStatsForTarget) {
1501
1643
  const messages = [];
1502
1644
  const otherUpdates = [];
1503
1645
  if (!targetBoss.skills.includes("冰霜回复")) {
1504
1646
  return null;
1505
1647
  }
1506
- const targetMaxHP = maxStatsMap[targetBoss.name].maxHP;
1648
+ const targetMaxHP = maxStatsForTarget.maxHP;
1507
1649
  const currentHP = targetBoss.HP;
1508
1650
  if (currentHP > targetMaxHP * 0.3) {
1509
1651
  return null;
@@ -1521,7 +1663,7 @@ var BattleEffectProcessor = {
1521
1663
  );
1522
1664
  otherSurvivingBosses.forEach((otherBoss) => {
1523
1665
  const otherName = otherBoss.name;
1524
- const otherMaxHP = maxStatsMap[otherBoss.name].maxHP;
1666
+ const otherMaxHP = maxStatsForTarget.maxHP;
1525
1667
  const otherHealAmount = Math.round(otherMaxHP * 0.1);
1526
1668
  otherUpdates.push({
1527
1669
  name: otherName,
@@ -2831,7 +2973,7 @@ var BattleEffectProcessor = {
2831
2973
  const effectiveLayers = Math.min(currentLayers, 20);
2832
2974
  const buffMultiplier = effectiveLayers * 0.025;
2833
2975
  if (effectiveLayers > 0) {
2834
- messages.push(`☢️ 【辐射】:当前${currentLayers}层,受到的伤害+${(effectiveLayers * 2.5).toFixed(1)}%(已达上限50%)`);
2976
+ messages.push(`☢️ 【辐射】:当前${currentLayers}层,受到的伤害+${(effectiveLayers * 2.5).toFixed(1)}%`);
2835
2977
  if (currentLayers > 20) {
2836
2978
  }
2837
2979
  }
@@ -2866,7 +3008,7 @@ var BattleEffectProcessor = {
2866
3008
  const effectiveLayers = Math.min(currentLayers, 20);
2867
3009
  const buffMultiplier = effectiveLayers * 0.025;
2868
3010
  if (effectiveLayers > 0) {
2869
- messages.push(`❄️ 【寒冷】:当前${currentLayers}层,受到的伤害+${(effectiveLayers * 2.5).toFixed(1)}%(已达上限50%)`);
3011
+ messages.push(`❄️ 【寒冷】:当前${currentLayers}层,受到的伤害+${(effectiveLayers * 2.5).toFixed(1)}%`);
2870
3012
  if (currentLayers > 20) {
2871
3013
  }
2872
3014
  }
@@ -2892,12 +3034,12 @@ var BattleEffectProcessor = {
2892
3034
  };
2893
3035
  }, "handleColdEffect"),
2894
3036
  // 统一的武器能量消耗处理函数
2895
- handleWeaponEnergyDrain: /* @__PURE__ */ __name(function(targetBoss, weaponName, maxStatsMap) {
3037
+ handleWeaponEnergyDrain: /* @__PURE__ */ __name(function(targetBoss, weaponName, maxStatsForTarget) {
2896
3038
  const weaponEnergyDrain = {
2897
3039
  "弧焊枪": 200,
2898
3040
  "DG-3电弧步枪": 500
2899
3041
  };
2900
- const targetmaxEnergy = maxStatsMap[targetBoss.name].maxEnergy;
3042
+ const targetmaxEnergy = maxStatsForTarget.maxEnergy;
2901
3043
  const drainValue = weaponEnergyDrain[weaponName];
2902
3044
  if (!drainValue || targetmaxEnergy === 0) {
2903
3045
  return null;
@@ -2925,13 +3067,14 @@ var BattleEffectProcessor = {
2925
3067
  };
2926
3068
  }, "handleWeaponEnergyDrain"),
2927
3069
  // 统一的武器层数减少处理函数
2928
- handleWeaponLayerReduction: /* @__PURE__ */ __name(function(targetBoss, weaponName) {
3070
+ handleWeaponLayerReduction: /* @__PURE__ */ __name(function(targetBoss, weaponName, maxStatsForTarget) {
2929
3071
  const weaponLayerReduction = {
2930
3072
  "脉冲扰乱枪": 2
2931
3073
  // 可以在这里添加其他武器及其减少层数
2932
3074
  };
3075
+ const maxStacks = maxStatsForTarget.maxStacks;
2933
3076
  const reductionAmount = weaponLayerReduction[weaponName];
2934
- if (!reductionAmount) {
3077
+ if (!reductionAmount || maxStacks === 0) {
2935
3078
  return null;
2936
3079
  }
2937
3080
  const messages = [];
@@ -3139,7 +3282,7 @@ var BattleEffectProcessor = {
3139
3282
  vulnerableType = "实弹武器";
3140
3283
  break;
3141
3284
  }
3142
- messages.push(`🛢️ 【酸蚀池】本次触发:${acidName}`);
3285
+ messages.push(`🛢️ 本次攻击触发的【酸蚀池】:${acidName}`);
3143
3286
  if (enhanced) {
3144
3287
  if (weaponType === resistType) {
3145
3288
  nerfMultiplier = 1;
@@ -3149,8 +3292,8 @@ var BattleEffectProcessor = {
3149
3292
  }
3150
3293
  } else {
3151
3294
  if (weaponType === resistType) {
3152
- nerfMultiplier = 0.8;
3153
- messages.push(`🛢️ 【酸蚀池】生效:受到${resistType}伤害-80%`);
3295
+ nerfMultiplier = 0.5;
3296
+ messages.push(`🛢️ 【酸蚀池】生效:受到${resistType}伤害-50%`);
3154
3297
  } else if (weaponType === vulnerableType) {
3155
3298
  buffMultiplier = 0.5;
3156
3299
  messages.push(`🛢️ 【酸蚀池】生效:受到${vulnerableType}伤害+50%`);
@@ -3196,7 +3339,7 @@ var BattleEffectProcessor = {
3196
3339
  };
3197
3340
  }, "handleToxicAssault")
3198
3341
  };
3199
- function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignoreRate) {
3342
+ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, hasCrit, ignoreRate) {
3200
3343
  const messages = [];
3201
3344
  let immune = false;
3202
3345
  let totalBuffMultiplier = 0;
@@ -3229,7 +3372,11 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
3229
3372
  if (!maxStatsMap[boss.name]) {
3230
3373
  maxStatsMap[boss.name] = {
3231
3374
  maxHP: getMaxHPByName(boss.name) || 0,
3232
- maxEnergy: getMaxEnergyByName(boss.name) || 0
3375
+ maxEnergy: getMaxEnergyByName(boss.name) || 0,
3376
+ maxStacks: getMaxStacksByName(boss.name) || 0,
3377
+ maxShield: getMaxShieldByName(boss.name) || 0,
3378
+ armor: getArmorByName(boss.name) || 0,
3379
+ shieldArmor: getShieldArmorByName(boss.name) || 0
3233
3380
  };
3234
3381
  }
3235
3382
  }
@@ -3367,7 +3514,7 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
3367
3514
  }
3368
3515
  }
3369
3516
  const healingEffects = [
3370
- { effect: BattleEffectProcessor.handleFrostRegeneration, args: [targetBoss, activeBosses, maxStatsMap] },
3517
+ { effect: BattleEffectProcessor.handleFrostRegeneration, args: [targetBoss, activeBosses, maxStatsForTarget] },
3371
3518
  { effect: BattleEffectProcessor.handleFrostAura, args: [targetBoss, activeBosses] },
3372
3519
  { effect: BattleEffectProcessor.handleSentryGun, args: [targetBoss, activeBosses] },
3373
3520
  { effect: BattleEffectProcessor.handleMoldGrowth, args: [targetBoss, activeBosses] },
@@ -3442,7 +3589,7 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
3442
3589
  }
3443
3590
  coldLayerAdded = coldResult.layerAdded;
3444
3591
  }
3445
- const energyDrainResult = BattleEffectProcessor.handleWeaponEnergyDrain(targetBoss, weaponName, maxStatsMap);
3592
+ const energyDrainResult = BattleEffectProcessor.handleWeaponEnergyDrain(targetBoss, weaponName, maxStatsForTarget);
3446
3593
  if (energyDrainResult) {
3447
3594
  messages.push(...energyDrainResult.messages);
3448
3595
  if (energyDrainResult.targetUpdates) {
@@ -3450,7 +3597,7 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
3450
3597
  }
3451
3598
  energyDrained = energyDrainResult.success || false;
3452
3599
  }
3453
- const layerReduceResult = BattleEffectProcessor.handleWeaponLayerReduction(targetBoss, weaponName);
3600
+ const layerReduceResult = BattleEffectProcessor.handleWeaponLayerReduction(targetBoss, weaponName, maxStatsForTarget);
3454
3601
  if (layerReduceResult) {
3455
3602
  messages.push(...layerReduceResult.messages);
3456
3603
  if (layerReduceResult.targetUpdates) {
@@ -3462,6 +3609,9 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
3462
3609
  let adjustedNerfMultiplier = totalNerfMultiplier * (1 - ignoreRate);
3463
3610
  const damageMultiplier = 1 + totalBuffMultiplier - adjustedNerfMultiplier;
3464
3611
  finalDamage = Math.max(1, Math.round(damage * damageMultiplier));
3612
+ if (hasCrit) {
3613
+ finalDamage *= 2;
3614
+ }
3465
3615
  const frostEvolutionResult = BattleEffectProcessor.handleFrostEvolution(
3466
3616
  targetBoss,
3467
3617
  weaponName,
@@ -3475,7 +3625,6 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
3475
3625
  }
3476
3626
  if (frostEvolutionResult.isImmune) {
3477
3627
  immune = true;
3478
- finalDamage = 0;
3479
3628
  }
3480
3629
  }
3481
3630
  const flameAlienResult = BattleEffectProcessor.handleFlameAlien(
@@ -3491,7 +3640,6 @@ function applyPassiveEffects(targetBoss, activeBosses, weaponName, damage, ignor
3491
3640
  }
3492
3641
  if (flameAlienResult.isImmune) {
3493
3642
  immune = true;
3494
- finalDamage = 0;
3495
3643
  }
3496
3644
  }
3497
3645
  const cosmicEnergyResult = BattleEffectProcessor.handleCosmicEnergy(
@@ -3757,7 +3905,7 @@ var passiveConfig = {
3757
3905
  },
3758
3906
  "剧毒狂暴": {
3759
3907
  type: "狂怒机制",
3760
- description: "生命值≤50%时,受击额外获得1层「吸血唾液」且受到的伤害降低20%"
3908
+ description: "生命值≤50%时,受击额外获得1层「毒性唾液」且受到的伤害降低20%"
3761
3909
  },
3762
3910
  "毒气波": {
3763
3911
  type: "概率叠层",
@@ -3769,7 +3917,7 @@ var passiveConfig = {
3769
3917
  },
3770
3918
  "酸蚀池": {
3771
3919
  type: "随机抗性",
3772
- description: "每次受击将会从3种酸液中顺序选择一种释放(脓蚀酸池:受到实弹武器伤害降低80%,受到能量武器伤害提高50%;蚀骨酸池:受到能量武器伤害降低80%,受到热能武器伤害提高50%;焦熔酸池:受到热能武器的伤害降低80%,受到实弹武器伤害提高50%)"
3920
+ description: "每次受击将会从3种酸液中顺序选择一种释放(脓蚀酸池:受到实弹武器伤害降低50%,受到能量武器伤害提高50%;蚀骨酸池:受到能量武器伤害降低50%,受到热能武器伤害提高50%;焦熔酸池:受到热能武器的伤害降低50%,受到实弹武器伤害提高50%)"
3773
3921
  },
3774
3922
  "剧毒突袭": {
3775
3923
  type: "强化效果",
@@ -4500,42 +4648,45 @@ var legendaryDiscounts = {
4500
4648
  async function calculateTotalDamage(ctx, session, config, equippedWeapon, targetBoss) {
4501
4649
  let effectMessage = [];
4502
4650
  const finalTags = targetBoss.tags || [];
4651
+ let armorDamageReduction = 0;
4503
4652
  const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
4504
4653
  const { regionId, realmId, profileId } = profile;
4505
4654
  const handle = `${regionId}-S2-${realmId}-${profileId}`;
4506
4655
  const weaponConfigEntry = Object.entries(weaponConfig).find(([_, c]) => c.id === equippedWeapon.weaponId);
4507
4656
  const [weaponName, weaponData] = weaponConfigEntry;
4657
+ const [careerData] = await ctx.database.get("ggcevo_careers", { handle });
4658
+ armorDamageReduction = weaponData.armorDamageReduction || 0;
4659
+ if (careerData.career === "猩红杀手" && weaponName === "侦察步枪") {
4660
+ armorDamageReduction = 0;
4661
+ }
4662
+ const armorReduction = armorDamageReduction * getArmorByName(targetBoss.name);
4663
+ const initialDamage = Math.max(weaponData.damage - armorReduction, 1);
4508
4664
  const isLegendary = weaponData.category === "传奇武器";
4509
4665
  const levelBonusRate = isLegendary ? 0.05 : 0.1;
4510
- const baseDamage = weaponData.damage * (1 + levelBonusRate * equippedWeapon.level);
4511
- const bonusPercent = (levelBonusRate * equippedWeapon.level * 100).toFixed(0);
4512
- effectMessage.push(`🔫 ${weaponName} Lv.${equippedWeapon.level}:基础伤害+${bonusPercent}%` + (isLegendary ? "(传奇武器)" : ""));
4513
- let totalAdditive = 0;
4666
+ const baseDamage = initialDamage * (1 + levelBonusRate * equippedWeapon.level);
4667
+ effectMessage.push(`🔫 ${weaponName} Lv.${equippedWeapon.level}:基础伤害${Math.round(baseDamage)}`);
4514
4668
  const tagAdditive = await calculateTagMultiplier(weaponData, finalTags, equippedWeapon);
4515
- totalAdditive += tagAdditive;
4516
- const { totalModAdd, hasCrit, modMessages } = calculateModifiers(
4517
- equippedWeapon,
4518
- weaponName,
4519
- await checkCritRhythm(ctx, handle)
4520
- );
4521
- totalAdditive += totalModAdd;
4669
+ const tagMultiplier = 1 + tagAdditive;
4670
+ if (tagAdditive !== 0) {
4671
+ const sign = tagAdditive >= 0 ? "+" : "";
4672
+ effectMessage.push(`📌 标签加成:攻击伤害${sign}${Math.round(tagAdditive * 100)}%`);
4673
+ }
4674
+ const { totalModAdd, modMessages } = calculateModifiers(equippedWeapon, weaponName);
4522
4675
  effectMessage.push(...modMessages);
4523
- const careerBonus = await calculateCareerAdditive(ctx, handle, weaponData.type, weaponData.id);
4524
- totalAdditive += careerBonus.value;
4525
- if (careerBonus.message) effectMessage.push(careerBonus.message);
4526
- const wishAdditive = await calculateWishAdditive(ctx, handle, equippedWeapon);
4527
- totalAdditive += wishAdditive.value;
4528
- if (wishAdditive.message) effectMessage.push(wishAdditive.message);
4676
+ const modMultiplier = 1 + totalModAdd;
4677
+ const careerAddResult = await calculateCareerAdditive(ctx, handle, weaponData.type, weaponData.id, careerData);
4678
+ if (careerAddResult.message) effectMessage.push(careerAddResult.message);
4679
+ const wishAddResult = await calculateWishAdditive(ctx, handle, equippedWeapon);
4680
+ if (wishAddResult.message) effectMessage.push(wishAddResult.message);
4529
4681
  const [rankRecord] = await ctx.database.get("ggcevo_rank", { handle, rankseason: config.rankseason });
4530
4682
  const rankAddResult = calculateRankAdditive(rankRecord);
4531
- totalAdditive += rankAddResult.value;
4532
- if (rankAddResult.message) {
4533
- effectMessage.push(rankAddResult.message);
4534
- }
4535
- let finalDamage = baseDamage * (1 + totalAdditive);
4536
- if (finalDamage < 1) {
4537
- finalDamage = 1;
4538
- }
4683
+ if (rankAddResult.message) effectMessage.push(rankAddResult.message);
4684
+ const otherAdditive = careerAddResult.value + wishAddResult.value + rankAddResult.value;
4685
+ const otherMultiplier = 1 + otherAdditive;
4686
+ let finalDamage = baseDamage * tagMultiplier * modMultiplier * otherMultiplier;
4687
+ const { hasCrit, critSources } = await calculateCrit(ctx, handle, equippedWeapon, weaponName);
4688
+ effectMessage.push(...critSources);
4689
+ finalDamage = Math.max(finalDamage, 1);
4539
4690
  return {
4540
4691
  damage: Math.round(finalDamage),
4541
4692
  hasCrit,
@@ -4543,23 +4694,42 @@ async function calculateTotalDamage(ctx, session, config, equippedWeapon, target
4543
4694
  };
4544
4695
  }
4545
4696
  __name(calculateTotalDamage, "calculateTotalDamage");
4546
- async function checkCritRhythm(ctx, handle) {
4547
- const [record] = await ctx.database.get("ggcevo_wish", {
4697
+ async function calculateCrit(ctx, handle, equippedWeapon, weaponName) {
4698
+ let critRate = 0;
4699
+ const critSources = [];
4700
+ if (equippedWeapon.installedMods?.includes("棱镜水晶")) {
4701
+ critRate += 20;
4702
+ critSources.push("🔼 棱镜水晶:暴击率+20%");
4703
+ }
4704
+ if (equippedWeapon.installedMods?.includes("棱镜超载核心") && modConfig["棱镜超载核心"]?.exclusiveTo === weaponName) {
4705
+ critRate += 80;
4706
+ critSources.push("🔼 棱镜超载核心:暴击率+80%");
4707
+ }
4708
+ const [critRhythm] = await ctx.database.get("ggcevo_wish", {
4548
4709
  handle,
4549
4710
  wishname: "暴击韵律",
4550
4711
  startTime: { $lte: /* @__PURE__ */ new Date() },
4551
4712
  endTime: { $gte: /* @__PURE__ */ new Date() }
4552
4713
  });
4553
- return !!record;
4714
+ if (critRhythm) {
4715
+ critRate += 20;
4716
+ critSources.push("🎵 暴击韵律祈愿:暴击率+20%");
4717
+ }
4718
+ if (weaponName === "MK-4激光步枪") {
4719
+ critRate += 80;
4720
+ critSources.push("🔫 MK-4激光步枪:暴击率+80%");
4721
+ }
4722
+ critSources.push(`📊 本次攻击总暴击率:${critRate}%`);
4723
+ return {
4724
+ hasCrit: Math.random() * 100 < critRate,
4725
+ critSources
4726
+ };
4554
4727
  }
4555
- __name(checkCritRhythm, "checkCritRhythm");
4728
+ __name(calculateCrit, "calculateCrit");
4556
4729
  async function calculateTagMultiplier(weaponData, tags, equippedWeapon) {
4557
4730
  const MOD_EFFECTS = [
4558
- { mod: "裂甲核心", tag: "重甲", value: 1.5 },
4559
4731
  { mod: "助燃核心", tag: "惧热", value: 3 },
4560
- { mod: "助燃核心", tag: "生物", value: 2 },
4561
- { mod: "金刚石瞄准镜", tag: "重甲", value: 0.8 },
4562
- { mod: "护盾崩解核心", tag: "护盾", value: 0.8 }
4732
+ { mod: "助燃核心", tag: "生物", value: 2 }
4563
4733
  ];
4564
4734
  let totalAdditive = 0;
4565
4735
  for (const tag of tags) {
@@ -4572,77 +4742,33 @@ async function calculateTagMultiplier(weaponData, tags, equippedWeapon) {
4572
4742
  return totalAdditive;
4573
4743
  }
4574
4744
  __name(calculateTagMultiplier, "calculateTagMultiplier");
4575
- function calculateModifiers(equippedWeapon, weaponName, hasCritRhythm) {
4745
+ function calculateModifiers(equippedWeapon, weaponName) {
4576
4746
  let totalModAdd = 0;
4577
- let hasCrit = false;
4578
4747
  const modMessages = [];
4579
- let crystalCrit = 0;
4580
- let overloadCrit = 0;
4581
- let rhythmCrit = 0;
4582
- let weaponCrit = 0;
4583
- if (weaponName === "MK-4激光步枪") {
4584
- weaponCrit = 80;
4585
- modMessages.push(`🔫 【MK-4激光步枪】武器效果:暴击率+${weaponCrit}%`);
4748
+ if (equippedWeapon.installedMods?.includes("动能增幅")) {
4749
+ totalModAdd += 0.2;
4750
+ modMessages.push(`🛠️ 【动能增幅】:伤害加成+20%`);
4586
4751
  }
4587
- equippedWeapon.installedMods.forEach((mod) => {
4588
- if (mod === "动能增幅") {
4589
- totalModAdd += 0.2;
4590
- modMessages.push(`🛠️ 【动能增幅】生效:攻击伤害+20%`);
4591
- }
4592
- if (mod === "裂甲核心" && weaponName === modConfig[mod].exclusiveTo) {
4593
- totalModAdd += 0.4;
4594
- modMessages.push(`🛠️ 【裂甲核心】生效:攻击伤害+40%`);
4595
- }
4596
- if (mod === "棱镜水晶") {
4597
- crystalCrit = 20;
4598
- modMessages.push(`🛠️ 【棱镜水晶】生效:暴击率+20%`);
4599
- }
4600
- if (mod === "棱镜超载核心" && weaponName === modConfig[mod].exclusiveTo) {
4601
- overloadCrit = 80;
4602
- modMessages.push(`🛠️ 【棱镜超载核心】生效:暴击率+80%`);
4603
- }
4604
- if (mod === "微型聚变核心") {
4605
- const currentCombo = equippedWeapon?.comboCount || 0;
4606
- const maxStacks = 6;
4607
- const bonusPerCombo = 0.075;
4608
- const effectiveStacks = Math.min(currentCombo, maxStacks);
4609
- const bonusDamage = effectiveStacks * bonusPerCombo;
4610
- totalModAdd += bonusDamage;
4611
- if (currentCombo > 0) {
4612
- modMessages.push(
4613
- `🛠️ 【微型聚变核心】生效:攻击伤害+${(bonusDamage * 100).toFixed(0)}%` + (effectiveStacks < currentCombo ? `(已达上限45%)` : "")
4614
- );
4615
- }
4616
- }
4617
- });
4618
- rhythmCrit = hasCritRhythm ? 20 : 0;
4619
- if (hasCritRhythm) {
4620
- modMessages.push(`🎵 暴击韵律祈愿:暴击率+20%`);
4752
+ if (equippedWeapon.installedMods?.includes("裂甲核心") && weaponName === modConfig["裂甲核心"]?.exclusiveTo) {
4753
+ totalModAdd += 0.4;
4754
+ modMessages.push(`🛠️ 【裂甲核心】:伤害加成+40%`);
4621
4755
  }
4622
- const totalCritRate = Math.min(
4623
- crystalCrit + overloadCrit + rhythmCrit + weaponCrit,
4624
- // 包含武器专属暴击
4625
- 100
4626
- );
4627
- if (totalCritRate > 0) {
4628
- }
4629
- if (totalCritRate > 0) {
4630
- const roll = Math.random() * 100;
4631
- if (roll <= totalCritRate) {
4632
- hasCrit = true;
4633
- totalModAdd += 1;
4634
- }
4756
+ if (equippedWeapon.installedMods?.includes("微型聚变核心")) {
4757
+ const currentCombo = equippedWeapon?.comboCount || 0;
4758
+ const maxStacks = 6;
4759
+ const bonusPerCombo = 0.075;
4760
+ const effectiveStacks = Math.min(currentCombo, maxStacks);
4761
+ const bonusDamage = effectiveStacks * bonusPerCombo;
4762
+ totalModAdd += bonusDamage;
4763
+ modMessages.push(`🛠️ 【微型聚变核心】:连击加成+${(bonusDamage * 100).toFixed(0)}%`);
4635
4764
  }
4636
4765
  return {
4637
4766
  totalModAdd,
4638
- hasCrit,
4639
4767
  modMessages
4640
- // 返回模块消息数组
4641
4768
  };
4642
4769
  }
4643
4770
  __name(calculateModifiers, "calculateModifiers");
4644
- async function calculateCareerAdditive(ctx, handle, weaponType, weaponId) {
4645
- const [careerData] = await ctx.database.get("ggcevo_careers", { handle });
4771
+ async function calculateCareerAdditive(ctx, handle, weaponType, weaponId, careerData) {
4646
4772
  let value = 0;
4647
4773
  let message = "";
4648
4774
  if (careerData?.career === "警卫长") {
@@ -4698,15 +4824,6 @@ async function calculateWishAdditive(ctx, handle, weapon) {
4698
4824
  value += levelBonus;
4699
4825
  messages.push(`🗡️ 悲鸣之锋祈愿:攻击伤害+${Math.round(levelBonus * 100)}%`);
4700
4826
  }
4701
- const [critRhythm] = await ctx.database.get("ggcevo_wish", {
4702
- handle,
4703
- wishname: "暴击韵律",
4704
- startTime: { $lte: /* @__PURE__ */ new Date() },
4705
- endTime: { $gte: /* @__PURE__ */ new Date() }
4706
- });
4707
- if (critRhythm) {
4708
- messages.push("🎵 暴击韵律祈愿:攻击暴击率+20%");
4709
- }
4710
4827
  return {
4711
4828
  value,
4712
4829
  message: messages.join(",")
@@ -4880,7 +4997,7 @@ __name(handleBossDefeatRewards, "handleBossDefeatRewards");
4880
4997
  async function handlePrimaryAttack(ctx, session, handle, config, equippedWeapon, targetBoss, activeBosses, weaponName) {
4881
4998
  const damageResult = await calculateTotalDamage(ctx, session, config, equippedWeapon, targetBoss);
4882
4999
  const ignoreReduction = await handleIgnoreReductionEffects(ctx, handle, weaponName, targetBoss);
4883
- const EffectProcessor = applyPassiveEffects(targetBoss, activeBosses, weaponName, damageResult.damage, ignoreReduction.ignoreRate);
5000
+ const EffectProcessor = applyPassiveEffects(targetBoss, activeBosses, weaponName, damageResult.damage, damageResult.hasCrit, ignoreReduction.ignoreRate);
4884
5001
  const initialDamage = EffectProcessor.finalDamage;
4885
5002
  await saveAndClearStats(ctx);
4886
5003
  const [currentboss] = await ctx.database.get("ggcevo_boss", { name: targetBoss.name });
@@ -4926,7 +5043,7 @@ async function handleScatterAttack(ctx, session, handle, config, equippedWeapon,
4926
5043
  );
4927
5044
  const secondaryDamage = Math.round(damageResult.damage * scatterRatio);
4928
5045
  const ignoreReduction = await handleIgnoreReductionEffects(ctx, handle, weaponName, secondaryTarget);
4929
- const EffectProcessor = applyPassiveEffects(secondaryTarget, activeBosses, weaponName, secondaryDamage, ignoreReduction.ignoreRate);
5046
+ const EffectProcessor = applyPassiveEffects(secondaryTarget, activeBosses, weaponName, secondaryDamage, damageResult.hasCrit, ignoreReduction.ignoreRate);
4930
5047
  const actualDamage = EffectProcessor.finalDamage;
4931
5048
  await saveAndClearStats(ctx);
4932
5049
  const [currentboss] = await ctx.database.get("ggcevo_boss", { name: secondaryTarget.name });
@@ -4993,6 +5110,11 @@ async function handleDeathTargets(ctx, deadTargets, killerName, killerHandle) {
4993
5110
  "🏆 伤害排行榜奖励:",
4994
5111
  ...rewardMessages
4995
5112
  );
5113
+ } else {
5114
+ await ctx.database.set("ggcevo_boss", { groupId: deadBoss.groupId }, {
5115
+ isActive: false,
5116
+ HP: 0
5117
+ });
4996
5118
  }
4997
5119
  }
4998
5120
  return {
@@ -5235,9 +5357,18 @@ async function handleIgnoreReductionEffects(ctx, handle, weaponName, targetBoss)
5235
5357
  handle,
5236
5358
  equipped: true
5237
5359
  });
5238
- if (equippedWeapon?.installedMods?.includes("破甲模块")) {
5360
+ if (!equippedWeapon?.installedMods) return;
5361
+ if (equippedWeapon.installedMods.includes("破甲模块")) {
5362
+ ignoreEffects.push(0.1);
5363
+ messages.push(`⚡ 【破甲模块】生效:无视10%减伤效果`);
5364
+ }
5365
+ if (weaponName === "高斯步枪" && equippedWeapon.installedMods.includes("裂甲核心")) {
5366
+ ignoreEffects.push(0.4);
5367
+ messages.push(`💥 【裂甲核心】生效:无视40%减伤效果`);
5368
+ }
5369
+ if (weaponName === "侦察步枪" && equippedWeapon.installedMods.includes("金刚石瞄准镜")) {
5239
5370
  ignoreEffects.push(0.2);
5240
- messages.push(`⚡ 【破甲模块】生效:无视20%减伤效果`);
5371
+ messages.push(`💥 【金刚石瞄准镜】生效:无视20%减伤效果`);
5241
5372
  }
5242
5373
  }, "handlePiercingMod");
5243
5374
  handleWeaponEffect();
@@ -5253,10 +5384,6 @@ async function handleIgnoreReductionEffects(ctx, handle, weaponName, targetBoss)
5253
5384
  ignoreEffects.push(0.1);
5254
5385
  messages.push(`🛰️ 【雷达面罩】生效:无视10%减伤效果`);
5255
5386
  }
5256
- if (careerData.career === "猩红杀手" && weaponName === "侦察步枪") {
5257
- ignoreEffects.push(0.2);
5258
- messages.push(`🎯 猩红杀手职业:无视20%减伤效果`);
5259
- }
5260
5387
  }, "handleCareerEffects");
5261
5388
  await handleCareerEffects();
5262
5389
  if (ignoreEffects.length === 0) return { ignoreRate: 0, messages: [] };
@@ -5273,7 +5400,7 @@ __name(handleIgnoreReductionEffects, "handleIgnoreReductionEffects");
5273
5400
  async function testAttackFunction(ctx, session, handle, config, equippedWeapon, targetBoss, activeBosses, weaponName) {
5274
5401
  const damageResult = await calculateTotalDamage(ctx, session, config, equippedWeapon, targetBoss);
5275
5402
  const ignoreReduction = await handleIgnoreReductionEffects(ctx, handle, weaponName, targetBoss);
5276
- const EffectProcessor = applyPassiveEffects(targetBoss, activeBosses, weaponName, damageResult.damage, ignoreReduction.ignoreRate);
5403
+ const EffectProcessor = applyPassiveEffects(targetBoss, activeBosses, weaponName, damageResult.damage, damageResult.hasCrit, ignoreReduction.ignoreRate);
5277
5404
  const initialDamage = EffectProcessor.finalDamage;
5278
5405
  return {
5279
5406
  initialDamage,
@@ -7327,13 +7454,23 @@ ${Object.keys(categoryStats).join("、")}`;
7327
7454
  if (config2.tagEffects && Object.keys(config2.tagEffects).length > 0) {
7328
7455
  tagEffectsDesc = Object.entries(config2.tagEffects).map(([tag, multiplier]) => `▸ 对${tag}目标造成${(multiplier * 100).toFixed(0)}%伤害`).join("\n");
7329
7456
  }
7330
- const specialEffect = config2.specialeffect ? `特殊效果:${config2.specialeffect}` : "";
7457
+ const armorDamageDesc = (() => {
7458
+ if (config2.armorDamageReduction === 0) {
7459
+ return `护甲减伤:0`;
7460
+ } else if (config2.armorDamageReduction > 0) {
7461
+ return `护甲减伤:${config2.armorDamageReduction}(每点护甲扣除${config2.armorDamageReduction}点伤害)`;
7462
+ } else {
7463
+ return `护甲减伤:${config2.armorDamageReduction}(每点护甲增加${Math.abs(config2.armorDamageReduction)}点伤害)`;
7464
+ }
7465
+ })();
7331
7466
  return [
7332
7467
  `【${name2}】`,
7333
7468
  `武器类型:${config2.type}`,
7334
7469
  `基础伤害:${config2.damage}`,
7470
+ armorDamageDesc,
7471
+ // 添加这里
7335
7472
  `价格:${priceDisplay}`,
7336
- specialEffect,
7473
+ config2.specialeffect && `特殊效果:${config2.specialeffect}`,
7337
7474
  "特性:",
7338
7475
  tagEffectsDesc,
7339
7476
  `描述:${config2.description}`,
@@ -7571,7 +7708,8 @@ ${validTypes.join("、")}`;
7571
7708
  const mods = w.installedMods.map((m) => m).join(" | ") || "无";
7572
7709
  return [
7573
7710
  `${statusIcon} ${weaponName} ${typeTag} ${statusText}`,
7574
- `等级:Lv.${w.level} | 改装槽:${w.modificationSlots} | 基础伤害:${damageFormatted}`,
7711
+ `等级:Lv.${w.level} | 改装槽:${w.modificationSlots}`,
7712
+ `基础伤害:${damageFormatted}`,
7575
7713
  `改装:${mods}`
7576
7714
  ].join("\n");
7577
7715
  }));
@@ -7647,20 +7785,36 @@ ${validTypes.join("、")}`;
7647
7785
  const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
7648
7786
  const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
7649
7787
  if (existingEntries.length > 0) return "⛔ 您已被列入黑名单。";
7650
- const isValidWeapon = weapon && weaponConfig[weapon]?.id !== void 0;
7788
+ const [techData] = await ctx.database.get("ggcevo_tech", { handle, techId: 3 }).catch(() => [{ level: 0 }]);
7789
+ const [careerData] = await ctx.database.get("ggcevo_careers", { handle });
7790
+ const techLevel = techData?.level || 0;
7791
+ const isCareerMatch = ["武器中士", "情报副官"].includes(careerData?.career);
7792
+ const calculateDiscountRate = /* @__PURE__ */ __name((isExclusive) => {
7793
+ if (isExclusive) {
7794
+ if (techLevel >= 2) {
7795
+ const baseDiscount = 5;
7796
+ const careerDiscount = isCareerMatch ? 10 : 0;
7797
+ return Math.max(baseDiscount, careerDiscount);
7798
+ }
7799
+ return 0;
7800
+ } else {
7801
+ if (techLevel >= 1) {
7802
+ const baseDiscount = 5;
7803
+ const careerDiscount = isCareerMatch ? 10 : 0;
7804
+ return Math.max(baseDiscount, careerDiscount);
7805
+ }
7806
+ return 0;
7807
+ }
7808
+ }, "calculateDiscountRate");
7651
7809
  const processModInstallation = /* @__PURE__ */ __name(async () => {
7652
7810
  const modInfo = modConfig[mod];
7653
- if (!modInfo) return "无效模块名称。";
7811
+ if (!modInfo) return "无效模块名称。";
7654
7812
  if (!weapon || !weaponConfig[weapon]?.id) {
7655
7813
  const validWeapons = Object.keys(weaponConfig).filter((k) => weaponConfig[k].id);
7656
7814
  return `❌ 无效武器名称。可选武器:${validWeapons.join("、")}`;
7657
7815
  }
7658
7816
  const weaponId = weaponConfig[weapon].id;
7659
- const [equipment] = await ctx.database.get("ggcevo_weapons", {
7660
- handle,
7661
- weaponId
7662
- // 使用已验证的weaponId
7663
- });
7817
+ const [equipment] = await ctx.database.get("ggcevo_weapons", { handle, weaponId });
7664
7818
  if (!equipment) {
7665
7819
  return `❌ 尚未获得【${weapon}】或武器名称错误`;
7666
7820
  }
@@ -7675,32 +7829,15 @@ ${validTypes.join("、")}`;
7675
7829
  if (equipment.installedMods.includes(mod)) {
7676
7830
  return "❌ 已安装相同模块。";
7677
7831
  }
7678
- const [techData] = await ctx.database.get("ggcevo_tech", { handle, techId: 3 }).catch(() => [{ level: 0 }]);
7679
- const [careerData] = await ctx.database.get("ggcevo_careers", { handle });
7680
- const techLevel = techData?.level || 0;
7681
- const isCareerMatch = Spacestationtechnology.find((t) => t.techId === 3).careerNames.includes(careerData?.career);
7682
- let discountRate = 0;
7683
- if (careerData?.group === "人类联盟") {
7684
- if (modInfo.isExclusive) {
7685
- if (techLevel >= 2) {
7686
- const baseDiscount = 5;
7687
- const careerDiscount = 10;
7688
- discountRate = Math.max(baseDiscount, careerDiscount);
7689
- }
7690
- } else {
7691
- const baseDiscount = 5;
7692
- const careerDiscount = 10;
7693
- discountRate = Math.max(baseDiscount, careerDiscount);
7694
- }
7695
- }
7832
+ const discountRate = calculateDiscountRate(modInfo.isExclusive);
7696
7833
  const actualCost = Math.floor(modInfo.cost * (1 - discountRate / 100));
7697
7834
  const [signInfo] = await ctx.database.get("ggcevo_sign", { handle });
7698
7835
  if ((signInfo?.totalRewards || 0) < actualCost) {
7699
- return `改装需要 ${actualCost} 金币,当前持有:${signInfo?.totalRewards || 0}`;
7836
+ return `❌ 改装需要 ${actualCost} 金币,当前持有:${signInfo?.totalRewards || 0}`;
7700
7837
  }
7701
7838
  await ctx.database.set(
7702
7839
  "ggcevo_weapons",
7703
- { handle, weaponId: weaponConfig[weapon].id },
7840
+ { handle, weaponId },
7704
7841
  { installedMods: [...equipment.installedMods, mod] }
7705
7842
  );
7706
7843
  await ctx.database.set("ggcevo_sign", { handle }, {
@@ -7709,41 +7846,41 @@ ${validTypes.join("、")}`;
7709
7846
  return [
7710
7847
  `✅ ${weapon} 成功安装 ${mod}!`,
7711
7848
  `花费金币:${actualCost}${discountRate > 0 ? ` (原价${modInfo.cost})` : ""}`,
7712
- discountRate > 0 && [
7713
- "💰 折扣明细:",
7714
- `▸ ⚙️ 武器升级平台Lv.${techLevel}:${discountRate}%折扣`
7715
- ].join("\n"),
7849
+ discountRate > 0 && `💰 折扣明细:${discountRate}% (⚙️ Lv.${techLevel})`,
7716
7850
  `改装槽:${equipment.installedMods.length + 1}/${equipment.modificationSlots}`
7717
7851
  ].filter(Boolean).join("\n");
7718
7852
  }, "processModInstallation");
7719
7853
  const showModList = /* @__PURE__ */ __name(async () => {
7720
- const [techData] = await ctx.database.get("ggcevo_tech", { handle, techId: 3 }).catch(() => [{ level: 0 }]);
7721
- const [careerData] = await ctx.database.get("ggcevo_careers", { handle });
7722
- const techLevel = techData?.level || 0;
7723
- const isCareerMatch = Spacestationtechnology.find((t) => t.techId === 3).careerNames.includes(careerData?.career);
7724
- const formatMod = /* @__PURE__ */ __name((name2, config2) => {
7725
- let discountRate = 0;
7726
- if (config2.isExclusive) {
7727
- if (techLevel >= 2 && isCareerMatch) discountRate = 10;
7728
- } else {
7729
- const baseDiscount = [5, 10][techLevel - 1] || 0;
7730
- const careerDiscount = techLevel >= 1 && isCareerMatch ? [10, 20][techLevel - 1] : 0;
7731
- discountRate = Math.max(baseDiscount, careerDiscount);
7732
- }
7733
- const actualPrice = Math.floor(config2.cost * (1 - discountRate / 100));
7734
- return [
7735
- `【${name2}】${config2.isExclusive ? ` (专属:${config2.exclusiveTo})` : ""}`,
7736
- `价格:${actualPrice}金币${discountRate > 0 ? ` (原价${config2.cost})` : ""}`,
7737
- `效果:${config2.effect}`,
7738
- "------------------"
7739
- ].filter(Boolean).join("\n");
7740
- }, "formatMod");
7741
- const baseUniversalDiscount = [5, 10][techLevel - 1] || 0;
7742
- const careerUniversalDiscount = techLevel >= 1 && isCareerMatch ? [10, 20][techLevel - 1] : 0;
7743
- const universalDiscountRate = Math.max(baseUniversalDiscount, careerUniversalDiscount);
7744
- const exclusiveDiscountRate = techLevel >= 2 && isCareerMatch ? 10 : 0;
7745
- if (isValidWeapon) {
7746
- const exclusiveMods = Object.entries(modConfig).filter(([_, m]) => m.isExclusive && m.exclusiveTo === weapon).map(([name2, cfg]) => formatMod(name2, cfg));
7854
+ const buildModList = /* @__PURE__ */ __name((isExclusive) => {
7855
+ const mods = Object.entries(modConfig).filter(([_, m]) => m.isExclusive === isExclusive).map(([name2, cfg]) => {
7856
+ const discountRate = calculateDiscountRate(cfg.isExclusive);
7857
+ const actualPrice = Math.floor(cfg.cost * (1 - discountRate / 100));
7858
+ return [
7859
+ `【${name2}】${cfg.isExclusive ? ` (专属:${cfg.exclusiveTo})` : ""}`,
7860
+ `价格:${actualPrice}金币${discountRate > 0 ? ` (原价${cfg.cost})` : ""}`,
7861
+ `效果:${cfg.effect}`,
7862
+ "------------------"
7863
+ ].join("\n");
7864
+ });
7865
+ if (mods.length === 0) return "该类别暂无可用模块";
7866
+ return mods.join("\n");
7867
+ }, "buildModList");
7868
+ const universalDiscountRate = calculateDiscountRate(false);
7869
+ const exclusiveDiscountRate = calculateDiscountRate(true);
7870
+ if (weapon && weaponConfig[weapon]?.id) {
7871
+ const weaponExclusiveMods = Object.entries(modConfig).filter(
7872
+ ([_, cfg]) => cfg.isExclusive && cfg.exclusiveTo === weapon
7873
+ );
7874
+ const exclusiveList = weaponExclusiveMods.length > 0 ? weaponExclusiveMods.map(([name2, cfg]) => {
7875
+ const discountRate = calculateDiscountRate(true);
7876
+ const actualPrice = Math.floor(cfg.cost * (1 - discountRate / 100));
7877
+ return [
7878
+ `【${name2}】`,
7879
+ `价格:${actualPrice}金币${discountRate > 0 ? ` (原价${cfg.cost})` : ""}`,
7880
+ `效果:${cfg.effect}`,
7881
+ "------------------"
7882
+ ].join("\n");
7883
+ }).join("\n") : "❌ 该武器没有可用的专属模块";
7747
7884
  return [
7748
7885
  `🛠️ ${weapon} 专属模块 🛠️`,
7749
7886
  "使用「改装 武器名称 模块名称」安装",
@@ -7751,10 +7888,9 @@ ${validTypes.join("、")}`;
7751
7888
  exclusiveDiscountRate > 0 && `💰 当前专属模块折扣:
7752
7889
  ▸ ⚙️ 武器升级平台Lv.${techLevel}:${exclusiveDiscountRate}%折扣`,
7753
7890
  "====================",
7754
- exclusiveMods.length ? exclusiveMods.join("\n") : "该武器暂无专属模块"
7891
+ exclusiveList
7755
7892
  ].filter(Boolean).join("\n");
7756
7893
  } else {
7757
- const universalMods = Object.entries(modConfig).filter(([_, m]) => !m.isExclusive).map(([name2, cfg]) => formatMod(name2, cfg));
7758
7894
  return [
7759
7895
  "🛠️ 通用武器模块 🛠️",
7760
7896
  "使用「改装 武器名称 模块名称」安装通用模块",
@@ -7762,7 +7898,7 @@ ${validTypes.join("、")}`;
7762
7898
  universalDiscountRate > 0 && `💰 当前通用模块折扣:
7763
7899
  ▸ ⚙️ 武器升级平台Lv.${techLevel}:${universalDiscountRate}%折扣`,
7764
7900
  "====================",
7765
- universalMods.join("\n")
7901
+ buildModList(false)
7766
7902
  ].filter(Boolean).join("\n");
7767
7903
  }
7768
7904
  }, "showModList");
@@ -8100,6 +8236,7 @@ ${testResult.passiveMessages.map((m) => `▸ ${m}`).join("\n")}`
8100
8236
  if (bossGroup.main.maxEnergy > 0) {
8101
8237
  result.push(`⚡ 能量:${mainBoss.energy}/1000`);
8102
8238
  }
8239
+ result.push(`🛡️ 护甲:${bossGroup.main.armor || 0}`);
8103
8240
  result.push(`🏷️ 标签:${mainBoss.tags?.join("、") || "无"}`);
8104
8241
  if (mainBoss.radiationLayers > 0) {
8105
8242
  result.push(`☢️ 辐射:${mainBoss.radiationLayers}层`);
@@ -8136,7 +8273,7 @@ ${testResult.passiveMessages.map((m) => `▸ ${m}`).join("\n")}`
8136
8273
  default:
8137
8274
  acidText = "未知状态";
8138
8275
  }
8139
- result.push(`🧪 酸蚀池:${acidText}`);
8276
+ result.push(`🧪 当前酸蚀池:${acidText}`);
8140
8277
  }
8141
8278
  if (mainBoss.lastWeaponName) {
8142
8279
  result.push(`🎭 记录武器:${mainBoss.lastWeaponName}`);
@@ -8154,6 +8291,7 @@ ${testResult.passiveMessages.map((m) => `▸ ${m}`).join("\n")}`
8154
8291
  if (minionConfig && minionConfig.maxEnergy > 0) {
8155
8292
  minionInfo.push(`⚡ 能量:${minion.energy}/1000`);
8156
8293
  }
8294
+ minionInfo.push(`🛡️ 护甲:${minionConfig?.armor || 0}`);
8157
8295
  minionInfo.push(`🏷️ 标签:${minion.tags?.join("、") || "无"}`);
8158
8296
  if (minion.radiationLayers > 0) {
8159
8297
  minionInfo.push(`☢️ 辐射:${minion.radiationLayers}层`);
@@ -8190,7 +8328,7 @@ ${testResult.passiveMessages.map((m) => `▸ ${m}`).join("\n")}`
8190
8328
  default:
8191
8329
  acidText = "未知状态";
8192
8330
  }
8193
- minionInfo.push(`🧪 酸蚀池:${acidText}`);
8331
+ minionInfo.push(`🧪 当前酸蚀池:${acidText}`);
8194
8332
  }
8195
8333
  if (minion.lastWeaponName) {
8196
8334
  minionInfo.push(`🎭 记录武器:${minion.lastWeaponName}`);
@@ -8408,7 +8546,7 @@ ${testResult.passiveMessages.map((m) => `▸ ${m}`).join("\n")}`
8408
8546
  return `您输入的是错误的阵营名称,请选择有效阵营:${validFactions.join(" / ")}`;
8409
8547
  }
8410
8548
  const [existing] = await ctx.database.get("ggcevo_careers", { handle });
8411
- if (existing.group === "人类联盟" || existing.group === "辛迪加海盗") {
8549
+ if (existing?.group === "人类联盟" || existing?.group === "辛迪加海盗") {
8412
8550
  return `你已经加入${existing.group}阵营,当前职业:${existing.career}`;
8413
8551
  }
8414
8552
  const [signData] = await ctx.database.get("ggcevo_sign", { handle });
@@ -8718,10 +8856,20 @@ ${testResult.passiveMessages.map((m) => `▸ ${m}`).join("\n")}`
8718
8856
  discountPrice = Math.floor(config2.redCrystalCost * 0.5);
8719
8857
  discountProfession = currentCareer;
8720
8858
  }
8859
+ const armorDamageDesc = (() => {
8860
+ if (config2.armorDamageReduction === 0) {
8861
+ return `护甲减伤:0`;
8862
+ } else if (config2.armorDamageReduction > 0) {
8863
+ return `护甲减伤:${config2.armorDamageReduction}(每点护甲扣除${config2.armorDamageReduction}点伤害)`;
8864
+ } else {
8865
+ return `护甲减伤:${config2.armorDamageReduction}(每点护甲增加${Math.abs(config2.armorDamageReduction)}点伤害)`;
8866
+ }
8867
+ })();
8721
8868
  const infoBlocks = [
8722
8869
  `【${name2}】`,
8723
8870
  `武器类型:${config2.type}`,
8724
- `基础伤害:${config2.damage}`
8871
+ `基础伤害:${config2.damage}`,
8872
+ armorDamageDesc
8725
8873
  ];
8726
8874
  if (discountPrice) {
8727
8875
  infoBlocks.push(
@@ -9180,7 +9328,6 @@ ${Spacestationtechnology.map((t) => t.techname).join("、")}`;
9180
9328
  taskList.push([
9181
9329
  `▸ 【${taskName}】`,
9182
9330
  `类型: ${task2.type}`,
9183
- `目标: ${task2.target}次`,
9184
9331
  `奖励: ${task2.price}金币`,
9185
9332
  `进度: ${completionStatus}/${task2.target}`,
9186
9333
  "------------------"
@@ -9213,9 +9360,6 @@ ${Spacestationtechnology.map((t) => t.techname).join("、")}`;
9213
9360
  `当前进度: ${progress}/${task.target}`,
9214
9361
  `累计完成: ${completions}次`,
9215
9362
  "------------------",
9216
- "任务描述:",
9217
- task.description,
9218
- "------------------",
9219
9363
  "完成条件:",
9220
9364
  task.condition,
9221
9365
  "====================",