ango commited on
Commit
effe13f
1 Parent(s): 8cd632a

5.9 commit

Browse files
base/buff.py CHANGED
@@ -15,6 +15,7 @@ class Buff:
15
  buff_stack: int = 1
16
 
17
  frame_shift: int = 0
 
18
  activate: bool = True
19
 
20
  max_stack: int = 1
@@ -30,6 +31,10 @@ class Buff:
30
  if self.gain_attributes is None:
31
  self.gain_attributes = {}
32
 
 
 
 
 
33
  @property
34
  def buff_name(self):
35
  if not isinstance(self._buff_name, list):
 
15
  buff_stack: int = 1
16
 
17
  frame_shift: int = 0
18
+ second_shift: int = 0
19
  activate: bool = True
20
 
21
  max_stack: int = 1
 
31
  if self.gain_attributes is None:
32
  self.gain_attributes = {}
33
 
34
+ @property
35
+ def shifted(self):
36
+ return self.second_shift or self.frame_shift
37
+
38
  @property
39
  def buff_name(self):
40
  if not isinstance(self._buff_name, list):
base/skill.py CHANGED
@@ -194,12 +194,12 @@ class BuffSkill(Skill):
194
  class DotSkill(Skill):
195
  def record(self, critical, parser):
196
  super().record(critical, parser)
197
- bind_skill = self.bind_skill
198
- if not parser.current_ticks[bind_skill]:
199
- parser.current_stacks[bind_skill] = 0
200
- parser.current_ticks[bind_skill] = self.tick
201
- parser.current_stacks[bind_skill] = min(parser.current_stacks[bind_skill] + 1, self.max_stack)
202
- parser.current_dot_snapshot[bind_skill] = parser.current_player_buffs.copy()
203
 
204
 
205
  class DotConsumeSkill(Skill):
@@ -336,7 +336,7 @@ class MagicalSkill(Skill):
336
  return damage, critical_damage, expected_damage, critical_strike
337
 
338
 
339
- class MixingSkill(Skill):
340
  def __call__(self, attribute: Attribute):
341
  damage = init_result(
342
  self.damage_base, self.damage_rand,
@@ -348,12 +348,12 @@ class MixingSkill(Skill):
348
  damage = damage_addition_result(damage, attribute.damage_addition + self.skill_damage_addition)
349
  damage = overcome_result(damage, attribute.overcome,
350
  attribute.level_shield_base + attribute.shield_base,
351
- attribute.magical_shield_gain + self.skill_shield_gain,
352
- attribute.magical_shield_ignore,
353
  attribute.shield_constant)
354
 
355
- critical_power_gain = attribute.physical_critical_power_gain + self.skill_critical_power
356
- critical_damage = critical_result(damage, attribute.base_physical_critical_power, critical_power_gain)
357
 
358
  damage = level_reduction_result(damage, attribute.level_reduction)
359
  critical_damage = level_reduction_result(critical_damage, attribute.level_reduction)
@@ -361,9 +361,9 @@ class MixingSkill(Skill):
361
  critical_damage = strain_result(critical_damage, attribute.base_strain, attribute.strain_gain)
362
  damage = pve_addition_result(damage, attribute.pve_addition + self.skill_pve_addition)
363
  critical_damage = pve_addition_result(critical_damage, attribute.pve_addition + self.skill_pve_addition)
364
- damage = vulnerable_result(damage, attribute.magical_vulnerable)
365
- critical_damage = vulnerable_result(critical_damage, attribute.magical_vulnerable)
366
- critical_strike = min(1, attribute.physical_critical_strike + self.skill_critical_strike / DECIMAL_SCALE)
367
 
368
  expected_damage = critical_strike * critical_damage + (1 - critical_strike) * damage
369
 
@@ -386,7 +386,7 @@ class MagicalDamage(MagicalSkill, Damage):
386
  return MAGICAL_ATTACK_POWER_COF(super().attack_power_cof + self.interval)
387
 
388
 
389
- class MixingDamage(MixingSkill, Damage):
390
  @Damage.attack_power_cof.getter
391
  def attack_power_cof(self):
392
  return MAGICAL_ATTACK_POWER_COF(super().attack_power_cof + self.interval)
@@ -404,7 +404,7 @@ class MagicalDotDamage(MagicalSkill, DotDamage):
404
  return MAGICAL_DOT_ATTACK_POWER_COF(super().attack_power_cof, self.interval)
405
 
406
 
407
- class MixingDotDamage(MixingSkill, DotDamage):
408
  @Damage.attack_power_cof.getter
409
  def attack_power_cof(self):
410
  return MAGICAL_DOT_ATTACK_POWER_COF(super().attack_power_cof, self.interval)
 
194
  class DotSkill(Skill):
195
  def record(self, critical, parser):
196
  super().record(critical, parser)
197
+ bind_skill = parser.current_school.skills[self.bind_skill]
198
+ if not parser.current_ticks[self.bind_skill]:
199
+ parser.current_stacks[self.bind_skill] = 0
200
+ parser.current_ticks[self.bind_skill] = bind_skill.tick
201
+ parser.current_stacks[self.bind_skill] = min(parser.current_stacks[self.bind_skill] + 1, bind_skill.max_stack)
202
+ parser.current_dot_snapshot[self.bind_skill] = parser.current_player_buffs.copy()
203
 
204
 
205
  class DotConsumeSkill(Skill):
 
336
  return damage, critical_damage, expected_damage, critical_strike
337
 
338
 
339
+ class AdaptiveSkill(Skill):
340
  def __call__(self, attribute: Attribute):
341
  damage = init_result(
342
  self.damage_base, self.damage_rand,
 
348
  damage = damage_addition_result(damage, attribute.damage_addition + self.skill_damage_addition)
349
  damage = overcome_result(damage, attribute.overcome,
350
  attribute.level_shield_base + attribute.shield_base,
351
+ attribute.strain_gain + self.skill_shield_gain,
352
+ attribute.shield_ignore,
353
  attribute.shield_constant)
354
 
355
+ critical_power_gain = attribute.critical_power_gain + self.skill_critical_power
356
+ critical_damage = critical_result(damage, attribute.base_critical_power, critical_power_gain)
357
 
358
  damage = level_reduction_result(damage, attribute.level_reduction)
359
  critical_damage = level_reduction_result(critical_damage, attribute.level_reduction)
 
361
  critical_damage = strain_result(critical_damage, attribute.base_strain, attribute.strain_gain)
362
  damage = pve_addition_result(damage, attribute.pve_addition + self.skill_pve_addition)
363
  critical_damage = pve_addition_result(critical_damage, attribute.pve_addition + self.skill_pve_addition)
364
+ damage = vulnerable_result(damage, attribute.vulnerable)
365
+ critical_damage = vulnerable_result(critical_damage, attribute.vulnerable)
366
+ critical_strike = min(1, attribute.critical_strike + self.skill_critical_strike / DECIMAL_SCALE)
367
 
368
  expected_damage = critical_strike * critical_damage + (1 - critical_strike) * damage
369
 
 
386
  return MAGICAL_ATTACK_POWER_COF(super().attack_power_cof + self.interval)
387
 
388
 
389
+ class MixingDamage(AdaptiveSkill, Damage):
390
  @Damage.attack_power_cof.getter
391
  def attack_power_cof(self):
392
  return MAGICAL_ATTACK_POWER_COF(super().attack_power_cof + self.interval)
 
404
  return MAGICAL_DOT_ATTACK_POWER_COF(super().attack_power_cof, self.interval)
405
 
406
 
407
+ class MixingDotDamage(AdaptiveSkill, DotDamage):
408
  @Damage.attack_power_cof.getter
409
  def attack_power_cof(self):
410
  return MAGICAL_DOT_ATTACK_POWER_COF(super().attack_power_cof, self.interval)
general/buffs/equipment.py CHANGED
@@ -2,7 +2,7 @@ from base.buff import Buff
2
 
3
  GENERAL_BUFFS = {
4
  15455: {
5
- "buff_name": "输出伤害波动",
6
  "gain_attributes": {
7
  "all_damage_addition": [10, 51]
8
  }
 
2
 
3
  GENERAL_BUFFS = {
4
  15455: {
5
+ "buff_name": "伤害波动",
6
  "gain_attributes": {
7
  "all_damage_addition": [10, 51]
8
  }
general/buffs/team.py CHANGED
@@ -1,6 +1,13 @@
1
  from base.buff import Buff
2
 
3
  GENERAL_BUFFS = {
 
 
 
 
 
 
 
4
  20938: {
5
  "buff_name": "左旋右转",
6
  "gain_attributes": {
@@ -13,6 +20,12 @@ GENERAL_BUFFS = {
13
  "all_damage_addition": 154
14
  }
15
  },
 
 
 
 
 
 
16
  23107: {
17
  "buff_name": "号令三军",
18
  "gain_attributes": {
 
1
  from base.buff import Buff
2
 
3
  GENERAL_BUFFS = {
4
+ 15413: {
5
+ "buff_name": "基础攻击",
6
+ "gain_attributes": {
7
+ "physical_attack_power_base": [0] * 8 + [371, 450, 495, 549],
8
+ "magical_attack_power_base": [0] * 8 + [442, 538, 591, 655]
9
+ }
10
+ },
11
  20938: {
12
  "buff_name": "左旋右转",
13
  "gain_attributes": {
 
20
  "all_damage_addition": 154
21
  }
22
  },
23
+ 3465: {
24
+ "buff_name": "破甲",
25
+ "gain_attributes": {
26
+ "physical_shield_gain": -102
27
+ }
28
+ },
29
  23107: {
30
  "buff_name": "号令三军",
31
  "gain_attributes": {
general/gains/team.py CHANGED
@@ -3,16 +3,27 @@ from typing import Dict
3
  from base.attribute import Attribute
4
  from base.buff import Buff
5
  from base.gain import Gain
 
6
  from general.buffs.team import GENERAL_BUFFS
 
7
 
8
 
9
  class RealTeamGain(Gain):
 
10
  buff_ids = list(GENERAL_BUFFS)
11
 
 
 
 
 
12
  def add_buffs(self, buffs: Dict[int, Buff]):
13
  for buff_id in self.buff_ids:
14
  buffs[buff_id].activate = True
15
 
 
 
 
 
16
  def sub_buffs(self, buffs: Dict[int, Buff]):
17
  for buff_id in self.buff_ids:
18
  buffs[buff_id].activate = False
@@ -180,10 +191,6 @@ class 疏狂(TeamGain):
180
  """ 药宗 """
181
 
182
 
183
- class 飘黄:
184
- pass
185
-
186
-
187
  class 配伍(TeamGain):
188
  gain_attributes = {"all_major_gain": 10 * 5}
189
 
@@ -246,6 +253,5 @@ TEAM_GAINS = {
246
 
247
  "疏狂": 疏狂,
248
 
249
- "飘黄": 飘黄,
250
  "配伍": 配伍,
251
  }
 
3
  from base.attribute import Attribute
4
  from base.buff import Buff
5
  from base.gain import Gain
6
+ from base.skill import Skill
7
  from general.buffs.team import GENERAL_BUFFS
8
+ from general.skills.team import GENERAL_SKILLS
9
 
10
 
11
  class RealTeamGain(Gain):
12
+ skill_ids = list(GENERAL_SKILLS)
13
  buff_ids = list(GENERAL_BUFFS)
14
 
15
+ def add_skills(self, skills: Dict[int, Skill]):
16
+ for skill_id in self.skill_ids:
17
+ skills[skill_id].activate = True
18
+
19
  def add_buffs(self, buffs: Dict[int, Buff]):
20
  for buff_id in self.buff_ids:
21
  buffs[buff_id].activate = True
22
 
23
+ def sub_skills(self, skills: Dict[int, Skill]):
24
+ for skill_id in self.skill_ids:
25
+ skills[skill_id].activate = False
26
+
27
  def sub_buffs(self, buffs: Dict[int, Buff]):
28
  for buff_id in self.buff_ids:
29
  buffs[buff_id].activate = False
 
191
  """ 药宗 """
192
 
193
 
 
 
 
 
194
  class 配伍(TeamGain):
195
  gain_attributes = {"all_major_gain": 10 * 5}
196
 
 
253
 
254
  "疏狂": 疏狂,
255
 
 
256
  "配伍": 配伍,
257
  }
general/skills/team.py CHANGED
@@ -1,8 +1,14 @@
1
  from typing import Dict
2
 
3
- from base.skill import PhysicalDamage, MagicalDamage, Skill, PureDamage
4
 
5
  GENERAL_SKILLS: Dict[int, Skill | dict] = {
 
 
 
 
 
 
6
  29535: {
7
  "skill_class": MagicalDamage,
8
  "skill_name": "逐云寒蕊",
 
1
  from typing import Dict
2
 
3
+ from base.skill import PhysicalDamage, MagicalDamage, Skill, PureDamage, BuffSkill
4
 
5
  GENERAL_SKILLS: Dict[int, Skill | dict] = {
6
+ 13778: {
7
+ "skill_class": BuffSkill,
8
+ "skill_name": "乘龙箭",
9
+ "bind_buff": 3465,
10
+ "duration": 128
11
+ },
12
  29535: {
13
  "skill_class": MagicalDamage,
14
  "skill_name": "逐云寒蕊",
parse_new_school.py CHANGED
@@ -59,4 +59,4 @@ class Parser:
59
 
60
  if __name__ == '__main__':
61
  parser = Parser()
62
- parser(r"new.jcl")
 
59
 
60
  if __name__ == '__main__':
61
  parser = Parser()
62
+ parser(r"qi_chun.jcl")
schools/bei_ao_jue/skills.py CHANGED
@@ -26,11 +26,9 @@ SKILLS: Dict[int, Skill | dict] = {
26
  skill_id: {
27
  "skill_class": PhysicalDamage,
28
  "skill_name": "雷走风切",
29
- "damage_base": [35, 45, 55, 70, 85, 100, 115, 130, 145, 175],
30
- "damage_rand": [5, 5, 5, 5, 5, 10, 10, 10, 10, 15],
31
- "attack_power_cof": [45 * 0.8 * 0.7] +
32
- [(16 + (i - 1) * 17) * 0.8 * 0.7 for i in range(2, 10)] +
33
- [224 * 0.8 * 0.7],
34
  } for skill_id in (16599, 16631)
35
  },
36
  11447: {
@@ -40,13 +38,13 @@ SKILLS: Dict[int, Skill | dict] = {
40
  "attack_power_cof": [50] +
41
  [50 + (i - 1) * 25 for i in range(2, 10)] +
42
  [280],
43
- "interval": 48
 
44
  },
45
  17060: {
46
  "skill_class": DotSkill,
47
  "skill_name": "闹须弥",
48
  "bind_skill": 11447,
49
- "tick": 8
50
  },
51
  16933: {
52
  "skill_class": PhysicalDamage,
@@ -270,7 +268,6 @@ SKILLS: Dict[int, Skill | dict] = {
270
  "attack_power_cof": [60 * 1.45 * 1.1 * 0.7] +
271
  [(60 + (i - 1) * 10) * 1.45 * 1.1 * 0.7 for i in range(2, 10)] +
272
  [160 * 1.45 * 0.9 * 1.1 * 0.7],
273
- # "weapon_damage_cof": 1024 * 1.45 * 0.25
274
  },
275
  37458: {
276
  "skill_class": PhysicalDamage,
@@ -291,15 +288,14 @@ SKILLS: Dict[int, Skill | dict] = {
291
  "skill_name": "背水沉舟(DOT)",
292
  "damage_base": 25,
293
  "attack_power_cof": 380,
294
- "interval": 48
295
-
 
296
  },
297
  26934: {
298
  "skill_class": DotSkill,
299
  "skill_name": "背水沉舟",
300
  "bind_skill": 19555,
301
- "max_stack": 3,
302
- "tick": 6
303
  }
304
  }
305
 
 
26
  skill_id: {
27
  "skill_class": PhysicalDamage,
28
  "skill_name": "雷走风切",
29
+ "damage_base": 175,
30
+ "damage_rand": 15,
31
+ "attack_power_cof": 224 * 0.8 * 0.7,
 
 
32
  } for skill_id in (16599, 16631)
33
  },
34
  11447: {
 
38
  "attack_power_cof": [50] +
39
  [50 + (i - 1) * 25 for i in range(2, 10)] +
40
  [280],
41
+ "interval": 48,
42
+ "tick": 8
43
  },
44
  17060: {
45
  "skill_class": DotSkill,
46
  "skill_name": "闹须弥",
47
  "bind_skill": 11447,
 
48
  },
49
  16933: {
50
  "skill_class": PhysicalDamage,
 
268
  "attack_power_cof": [60 * 1.45 * 1.1 * 0.7] +
269
  [(60 + (i - 1) * 10) * 1.45 * 1.1 * 0.7 for i in range(2, 10)] +
270
  [160 * 1.45 * 0.9 * 1.1 * 0.7],
 
271
  },
272
  37458: {
273
  "skill_class": PhysicalDamage,
 
288
  "skill_name": "背水沉舟(DOT)",
289
  "damage_base": 25,
290
  "attack_power_cof": 380,
291
+ "interval": 48,
292
+ "max_stack": 3,
293
+ "tick": 6
294
  },
295
  26934: {
296
  "skill_class": DotSkill,
297
  "skill_name": "背水沉舟",
298
  "bind_skill": 19555,
 
 
299
  }
300
  }
301
 
schools/bing_xin_jue/skills.py CHANGED
@@ -26,14 +26,14 @@ SKILLS: Dict[int, Skill | dict] = {
26
  "skill_name": "急曲(DOT)",
27
  "damage_base": 100,
28
  "attack_power_cof": 114 * 1.1 * 0.9 * 1.1,
29
- "interval": 48
 
 
30
  },
31
  18716: {
32
  "skill_class": DotSkill,
33
  "skill_name": "急曲",
34
- "bind_skill": 2920,
35
- "max_stack": 3,
36
- "tick": 6
37
  },
38
  6559: {
39
  "skill_class": type("Mixing", (MagicalDamage, DotConsumeSkill), {}),
@@ -206,14 +206,14 @@ SKILLS: Dict[int, Skill | dict] = {
206
  "skill_name": "气吞长江(DOT)",
207
  "damage_base": 25,
208
  "attack_power_cof": 400 * 1.4,
209
- "interval": 48
 
 
210
  },
211
  25757: {
212
  "skill_class": DotSkill,
213
  "skill_name": "气吞长江",
214
  "bind_skill": 18512,
215
- "max_stack": 3,
216
- "tick": 10
217
  }
218
  }
219
 
 
26
  "skill_name": "急曲(DOT)",
27
  "damage_base": 100,
28
  "attack_power_cof": 114 * 1.1 * 0.9 * 1.1,
29
+ "interval": 48,
30
+ "max_stack": 3,
31
+ "tick": 6
32
  },
33
  18716: {
34
  "skill_class": DotSkill,
35
  "skill_name": "急曲",
36
+ "bind_skill": 2920
 
 
37
  },
38
  6559: {
39
  "skill_class": type("Mixing", (MagicalDamage, DotConsumeSkill), {}),
 
206
  "skill_name": "气吞长江(DOT)",
207
  "damage_base": 25,
208
  "attack_power_cof": 400 * 1.4,
209
+ "interval": 48,
210
+ "max_stack": 3,
211
+ "tick": 10
212
  },
213
  25757: {
214
  "skill_class": DotSkill,
215
  "skill_name": "气吞长江",
216
  "bind_skill": 18512,
 
 
217
  }
218
  }
219
 
schools/fen_shan_jing/attribute.py CHANGED
@@ -3,19 +3,14 @@ from base.constant import *
3
 
4
 
5
  class FenShanJing(PhysicalAttribute):
6
- AGILITY_TO_ATTACK_POWER = 1485 / BINARY_SCALE
7
- AGILITY_TO_CRITICAL_STRIKE = 594 / BINARY_SCALE
8
 
9
  def __init__(self):
10
  super().__init__()
11
- self.physical_attack_power_base += 3277
12
- self.physical_critical_strike_base += 2929
13
- self.pve_addition += 82
14
 
15
  @property
16
  def extra_physical_attack_power(self):
17
  return int(self.agility * self.AGILITY_TO_ATTACK_POWER)
18
-
19
- @property
20
- def extra_physical_critical_strike(self):
21
- return int(self.agility * self.AGILITY_TO_CRITICAL_STRIKE)
 
3
 
4
 
5
  class FenShanJing(PhysicalAttribute):
6
+ AGILITY_TO_ATTACK_POWER = 1751 / BINARY_SCALE
 
7
 
8
  def __init__(self):
9
  super().__init__()
10
+ self.physical_attack_power_base += 3449
11
+ self.physical_overcome_base += 1526
12
+ self.pve_addition += 92
13
 
14
  @property
15
  def extra_physical_attack_power(self):
16
  return int(self.agility * self.AGILITY_TO_ATTACK_POWER)
 
 
 
 
schools/fen_shan_jing/buffs.py CHANGED
@@ -4,27 +4,64 @@ from base.buff import Buff
4
  from general.buffs import GENERAL_BUFFS
5
 
6
  BUFFS: Dict[int, Buff | dict] = {
7
- 16025: {
8
- "buff_name": "雷引",
9
  "activate": False,
10
  "gain_attributes": {
11
  "physical_critical_strike_gain": 400,
12
  "physical_critical_power_gain": 41
13
  }
14
  },
15
- 26857: {
16
- "buff_name": "承契",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  "gain_attributes": {
18
- "all_damage_addition": 62
19
  }
20
  },
21
- 27099: {
22
- "buff_name": "诸怀",
 
 
 
 
 
 
 
 
 
 
 
 
23
  "gain_attributes": {
24
- "all_shield_ignore": 205,
25
  "physical_attack_power_gain": 102
26
  }
27
  },
 
 
 
 
 
 
28
  }
29
 
30
  for buff_id, detail in BUFFS.items():
 
4
  from general.buffs import GENERAL_BUFFS
5
 
6
  BUFFS: Dict[int, Buff | dict] = {
7
+ 1428: {
8
+ "buff_name": "军啸",
9
  "activate": False,
10
  "gain_attributes": {
11
  "physical_critical_strike_gain": 400,
12
  "physical_critical_power_gain": 41
13
  }
14
  },
15
+ 9052: {
16
+ "buff_name": "绝刀",
17
+ "gain_skills": {
18
+ 13075: {
19
+ "skill_damage_addition": [205, 410, 614, 819] * 2
20
+ }
21
+ }
22
+ },
23
+ 8244: {
24
+ "buff_name": "血怒",
25
+ "gain_attributes": {
26
+ "physical_attack_power_gain": 102
27
+ }
28
+ },
29
+ 8627: {
30
+ "buff_name": "刀魂",
31
+ "gain_attributes": {
32
+ "physical_attack_power_gain": 154
33
+ }
34
+ },
35
+ 17176: {
36
+ "buff_name": "分野",
37
  "gain_attributes": {
38
+ "all_damage_addition": 51
39
  }
40
  },
41
+ 8267: {
42
+ "buff_name": "恋战",
43
+ "gain_attributes": {
44
+ "physical_critical_strike_gain": 300,
45
+ }
46
+ },
47
+ 14309: {
48
+ "buff_name": "锋鸣",
49
+ "gain_attributes": {
50
+ "physical_overcome_gain": 154
51
+ }
52
+ },
53
+ 27161: {
54
+ "buff_name": "血怒·惊涌",
55
  "gain_attributes": {
 
56
  "physical_attack_power_gain": 102
57
  }
58
  },
59
+ 9889: {
60
+ "buff_name": "蔑视",
61
+ "gain_attributes": {
62
+ "all_shield_ignore": 512
63
+ }
64
+ },
65
  }
66
 
67
  for buff_id, detail in BUFFS.items():
schools/fen_shan_jing/gains.py CHANGED
@@ -4,14 +4,16 @@ from base.gain import Gain
4
 
5
 
6
  GAINS = {
7
- 2568: CriticalSet(16025),
8
- 5438: damage_addition_recipe([35987], 102),
9
- 5461: damage_addition_recipe([36157], 51),
10
- 5462: damage_addition_recipe([35987], 51),
11
- 5463: critical_strike_recipe([36157], 500),
12
- 2572: Gain(),
13
- 2571: Gain(),
14
- 17470: Gain(),
15
- 17471: Gain(),
 
 
16
  **EQUIPMENT_GAINS,
17
  }
 
4
 
5
 
6
  GAINS = {
7
+ 1923: CriticalSet(1428),
8
+ 1932: damage_addition_recipe([13075], 102),
9
+ 1933: damage_addition_recipe([19409], 102),
10
+ 1937: damage_addition_recipe([13463], 51),
11
+ 1938: damage_addition_recipe([13092], 51),
12
+ 1934: critical_strike_recipe([13044], 500),
13
+ 1936: critical_strike_recipe([13092, 8249], 500),
14
+ 2408: Gain(),
15
+ 1940: Gain(),
16
+ 17447: Gain(),
17
+ 17448: Gain(),
18
  **EQUIPMENT_GAINS,
19
  }
schools/fen_shan_jing/recipes.py CHANGED
@@ -1,26 +1,58 @@
1
  from typing import Dict, List
2
 
3
  from base.gain import Gain
4
- from base.recipe import damage_addition_recipe, critical_strike_recipe, pve_addition_recipe
5
-
6
 
7
  RECIPE_GAINS: Dict[str, Dict[str, Gain]] = {
8
- "劲风簇": {
9
- "4%会心": critical_strike_recipe([35866], 400),
10
- "3%伤害": damage_addition_recipe([35866], 31),
11
- "3%会心": critical_strike_recipe([35866], 300),
12
- "2%伤害": damage_addition_recipe([35866], 21)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  },
14
- "饮羽簇": {
15
- "15%伤害": pve_addition_recipe([35987], 154),
16
- "4%会心": critical_strike_recipe([35987], 400),
17
- "3%伤害": damage_addition_recipe([35987], 31),
18
- "3%会心": critical_strike_recipe([35987], 300),
19
- "2%伤害": damage_addition_recipe([35987], 21)
20
  },
21
  }
22
 
23
  RECIPES: Dict[str, List[str]] = {
24
- "劲风簇": ["4%会心", "3%伤害", "3%会心", "2%伤害"],
25
- "饮羽簇": ["15%伤害", "4%会心", "3%伤害", "3%会心", "2%伤害"],
 
 
 
 
26
  }
 
1
  from typing import Dict, List
2
 
3
  from base.gain import Gain
4
+ from base.recipe import damage_addition_recipe, critical_strike_recipe
 
5
 
6
  RECIPE_GAINS: Dict[str, Dict[str, Gain]] = {
7
+ "盾刀": {
8
+ "5%伤害": damage_addition_recipe([13044], 51),
9
+ "4%伤害": damage_addition_recipe([13044], 41),
10
+ "3%伤害": damage_addition_recipe([13044], 31),
11
+ "4%会心": critical_strike_recipe([13044], 400),
12
+ "3%会心": critical_strike_recipe([13044], 300),
13
+ "2%会心": critical_strike_recipe([13044], 200),
14
+ },
15
+ "盾压": {
16
+ "5%伤害": damage_addition_recipe([19409], 51),
17
+ "4%伤害": damage_addition_recipe([19409], 41),
18
+ "4%会心": critical_strike_recipe([19409], 400),
19
+ "3%会心": critical_strike_recipe([19409], 300),
20
+ },
21
+ "劫刀": {
22
+ "5%伤害": damage_addition_recipe([28479], 51),
23
+ "4%伤害": damage_addition_recipe([28479], 41),
24
+ "3%伤害": damage_addition_recipe([28479], 31),
25
+ "4%会心": critical_strike_recipe([28479], 400),
26
+ "3%会心": critical_strike_recipe([28479], 300),
27
+ "2%会心": critical_strike_recipe([28479], 200),
28
+ },
29
+ "斩刀": {
30
+ "5%伤害": damage_addition_recipe([13092], 41),
31
+ "4%伤害": damage_addition_recipe([13092], 31),
32
+ "3%伤害": damage_addition_recipe([13092], 21),
33
+ "4%会心": critical_strike_recipe([13092, 8249], 400),
34
+ "3%会心": critical_strike_recipe([13092, 8249], 300),
35
+ "2%会心": critical_strike_recipe([13092, 8249], 200),
36
+ },
37
+ "绝刀": {
38
+ "5%伤害": damage_addition_recipe([13075], 51),
39
+ "4%伤害": damage_addition_recipe([13075], 41),
40
+ "4%会心": critical_strike_recipe([13075], 400),
41
+ "3%会心": critical_strike_recipe([13075], 300),
42
  },
43
+ "盾飞": {
44
+ "4%伤害": damage_addition_recipe([13463], 41),
45
+ "3%伤害": damage_addition_recipe([13463], 31),
46
+ "3%会心": critical_strike_recipe([13463], 300),
47
+ "2%会心": critical_strike_recipe([13463], 200),
 
48
  },
49
  }
50
 
51
  RECIPES: Dict[str, List[str]] = {
52
+ "盾刀": ["5%伤害", "4%伤害", "4%会心", "3%伤害", "3%会心", "2%会心"],
53
+ "盾压": ["5%伤害", "4%伤害", "4%会心", "3%会心"],
54
+ "劫刀": ["4%伤害", "4%会心", "3%伤害", "3%会心", "2%伤害", "2%会心"],
55
+ "斩刀": ["5%伤害", "4%伤害", "4%会心", "3%伤害", "3%会心", "2%会心"],
56
+ "绝刀": ["5%伤害", "4%伤害", "4%会心", "3%会心"],
57
+ "盾飞": ["4%伤害", "3%伤害", "3%会心", "2%会心"],
58
  }
schools/fen_shan_jing/skills.py CHANGED
@@ -1,152 +1,262 @@
1
  from typing import Dict
2
 
3
- from base.constant import DOT_DAMAGE_SCALE, FRAME_PER_SECOND
4
  from base.skill import Skill, DotSkill, DotConsumeSkill, PhysicalDamage, PhysicalDotDamage
5
  from general.skills import GENERAL_SKILLS
6
 
7
  SKILLS: Dict[int, Skill | dict] = {
8
- 36177: {
9
  "skill_class": PhysicalDamage,
10
  "skill_name": "破",
11
  "surplus_cof": [
12
- 1048576 * (0.3 - 1),
13
- 1048576 * (0.3 - 1)
 
 
 
14
  ]
15
  },
16
- 35894: {
17
  "skill_class": PhysicalDamage,
18
- "skill_name": "风矢",
19
  "attack_power_cof": 16,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  "weapon_damage_cof": 1024,
21
- "skill_damage_addition": 205
22
  },
23
- 35866: {
24
  "skill_class": PhysicalDamage,
25
- "skill_name": "劲风簇",
26
- "damage_base": [35, 70, 105, 140, 157, 175, 193, 210, 228, 245, 263, 280, 298, 315, 333],
27
- "damage_rand": 5,
28
- "attack_power_cof": [25 * 0.9 * 0.9 * 0.95] * 3 +
29
- [(25 + (i - 4) * 10) * 0.9 * 0.9 * 0.95 for i in range(4, 15)] +
30
- [175 * 0.9 * 0.9 * 0.95],
31
- "weapon_damage_cof": 1024
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  },
33
- 35987: {
34
- "skill_class": PhysicalDamage,
35
- "skill_name": "饮羽簇",
36
- "damage_base": [77, 154, 321, 308, 347, 385, 424, 462, 501, 539, 578, 616, 655, 693, 732],
37
- "damage_rand": [5, 5, 5, 5, 5, 5, 5, 5, 10, 10, 10, 10, 10, 10, 10],
38
- "attack_power_cof": [66 * 0.9 * 0.9 * 0.95 * 0.9 * 0.95] * 3 +
39
- [(66 + (i - 4) * 38) * 0.9 * 0.9 * 0.95 * 0.9 * 0.95 for i in range(4, 15)] +
40
- [552 * 0.9 * 0.9 * 0.95 * 0.9 * 0.95],
41
- "weapon_damage_cof": 2048
42
- },
43
- 36056: {
44
- "skill_class": PhysicalDamage,
45
- "skill_name": "践踏",
46
- "damage_base": [16, 44, 72, 100, 128, 156, 184, 212, 240, 268, 296],
47
- "damage_rand": 20,
48
- "attack_power_cof": [70 * 1.05] * 2 +
49
- [(70 + (i - 3) * 58) * 1.05 for i in range(3, 11)] +
50
- [607 * 1.05],
51
- "skill_damage_addition": 62
52
- },
53
- 36057: {
54
- "skill_class": PhysicalDamage,
55
- "skill_name": "重击",
56
- "damage_base": [16, 44, 72, 100, 128, 156, 184, 212, 240, 268, 296],
57
- "damage_rand": 20,
58
- "attack_power_cof": [33 * 1.05] * 2 +
59
- [(33 + (i - 3) * 26) * 1.05 for i in range(3, 11)] +
60
- [276 * 1.05],
61
- "skill_damage_addition": 62
62
- },
63
- 36111: {
64
- "skill_class": PhysicalDamage,
65
- "skill_name": "攻击",
66
- "damage_base": [16, 44, 72, 100, 128, 156, 184, 212, 240, 268, 296],
67
- "damage_rand": 20,
68
- "attack_power_cof": [33 * 1.05] * 2 +
69
- [(33 + (i - 3) * 26) * 1.05 for i in range(3, 11)] +
70
- [276 * 1.05],
71
- "skill_damage_addition": 62
72
- },
73
- 36112: {
74
- "skill_class": PhysicalDamage,
75
- "skill_name": "攻击",
76
- "damage_base": [48, 132, 216, 300, 384, 468, 552, 636, 720, 804, 296],
77
- "damage_rand": 20,
78
- "attack_power_cof": [99 * 1.05] * 2 +
79
- [(99 + (i - 3) * 26) * 1.05 for i in range(3, 11)] +
80
- [828 * 1.05],
81
- "skill_damage_addition": 62
82
- },
83
- 36113: {
84
- "skill_class": PhysicalDamage,
85
- "skill_name": "攻击",
86
- "damage_base": [16, 44, 72, 100, 128, 156, 184, 212, 240, 268, 296],
87
- "damage_rand": 20,
88
- "attack_power_cof": [70 * 1.05] * 2 +
89
- [(70 + (i - 3) * 26) * 1.05 for i in range(3, 11)] +
90
- [607 * 1.05],
91
- "skill_damage_addition": 62
92
- },
93
- 36114: {
94
- "skill_class": PhysicalDamage,
95
- "skill_name": "攻击",
96
- "damage_base": [16, 44, 72, 100, 128, 156, 184, 212, 240, 268, 296],
97
- "damage_rand": 20,
98
- "attack_power_cof": [23 * 1.05] * 2 +
99
- [(23 + (i - 3) * 26) * 1.05 for i in range(3, 11)] +
100
- [165 * 1.05],
101
- "skill_damage_addition": 62
102
- },
103
- 36157: {
104
- "skill_class": PhysicalDamage,
105
- "skill_name": "标鹄",
106
- "damage_base": 30,
107
- "damage_rand": 20,
108
- "attack_power_cof": 512 * 1.15 * 0.9 * 0.95
109
- },
110
- 26856: {
111
  "skill_class": PhysicalDotDamage,
112
- "skill_name": "贯穿(DOT)",
113
- "damage_base": 32,
114
- "attack_power_cof": 215 * 0.7 * 1.15 * 0.9 * 0.9 * 0.9,
115
- "interval": FRAME_PER_SECOND * DOT_DAMAGE_SCALE / 4
116
- },
117
- 36165: {
118
- "skill_class": DotConsumeSkill,
119
- "skill_name": "贯穿",
120
- "bind_skill": 26856,
121
- "tick": 3
122
- },
123
- 35771: {
124
  "skill_class": DotSkill,
125
- "skill_name": "贯穿",
126
- "bind_skill": 26856,
127
- "max_stack": 6,
128
- "tick": 4
 
 
 
 
 
 
 
 
 
 
 
 
 
129
  },
130
- 36453: {
131
  "skill_class": PhysicalDamage,
132
- "skill_name": "朝仪万汇",
133
- "damage_base": 37,
134
- "damage_rand": 5,
135
- "attack_power_cof": 215
 
 
 
 
 
 
 
 
136
  },
137
- 36579: {
138
  "skill_class": PhysicalDamage,
139
- "skill_name": "劲风簇·神兵",
140
- "damage_base": 20,
141
- "damage_rand": 2,
142
- "attack_power_cof": 60
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
143
  },
144
- 36580: {
145
  "skill_class": PhysicalDamage,
146
- "skill_name": "月弦激星",
147
  "damage_base": 20,
148
  "damage_rand": 2,
149
- "attack_power_cof": 390
150
  }
151
  }
152
 
 
1
  from typing import Dict
2
 
 
3
  from base.skill import Skill, DotSkill, DotConsumeSkill, PhysicalDamage, PhysicalDotDamage
4
  from general.skills import GENERAL_SKILLS
5
 
6
  SKILLS: Dict[int, Skill | dict] = {
7
+ 32745: {
8
  "skill_class": PhysicalDamage,
9
  "skill_name": "破",
10
  "surplus_cof": [
11
+ 1048576 * (0.4 - 1),
12
+ 1048576 * (0.55 * 0.33 - 1),
13
+ 1048576 * (0.7 - 1),
14
+ 1048576 * (0.8 * 0.33 - 1),
15
+ 1048576 * (0.9 - 1),
16
  ]
17
  },
18
+ 13039: {
19
  "skill_class": PhysicalDamage,
20
+ "skill_name": "卷雪刀",
21
  "attack_power_cof": 16,
22
+ "weapon_damage_cof": 1024
23
+ },
24
+ **{
25
+ skill_id: {
26
+ "skill_class": PhysicalDamage,
27
+ "skill_name": "盾击",
28
+ "damage_base": [150, 180, 210, 240, 270, 300, 320, 340, 360, 380, 400, 420, 440, 460, 480, 520],
29
+ "damage_rand": [e * 0.1 for e in
30
+ [50, 80, 100, 120, 140, 160, 180, 200, 240, 280, 320, 360, 400, 440, 480, 520]],
31
+ "damage_gain": 1 / 5,
32
+ "attack_power_cof": [16 * 1.05 * 1.05 * 1.1 * 1.1] * 4 +
33
+ [(16 + (i - 4) * 5) * 1.05 * 1.05 * 1.1 * 1.1 for i in range(5, 16)] +
34
+ [100 * 1.05 * 1.05 * 1.1 * 1.1],
35
+ "weapon_damage_cof": 1024,
36
+ "skill_shield_gain": -512,
37
+ } for skill_id in (13106, 13160, 13161)
38
+ },
39
+ 19409: {
40
+ "skill_class": PhysicalDamage,
41
+ "skill_name": "盾压",
42
+ "damage_base": [30, 75, 90, 105, 120, 135, 150, 165, 180, 195, 210, 225, 240, 255, 270, 285, 300, 315, 330, 345,
43
+ 360, 375, 390, 405],
44
+ "damage_rand": [e * 0.1 for e in
45
+ [20, 45, 60, 75, 90, 105, 120, 135, 150, 165, 180, 195, 210, 225, 240, 255, 270, 285, 300, 315,
46
+ 330, 345, 360, 375]],
47
+ "damage_gain": 1 / 2,
48
+ "attack_power_cof": [40 * 1.05 * 1.05 * 1.05 * 1.1] * 4 +
49
+ [(40 + (i - 4) * 7) * 1.05 * 1.05 * 1.05 * 1.1 for i in range(5, 24)] +
50
+ [190 * 1.05 * 1.05 * 1.05 * 1.1],
51
  "weapon_damage_cof": 1024,
 
52
  },
53
+ 13099: {
54
  "skill_class": PhysicalDamage,
55
+ "skill_name": "盾猛",
56
+ "damage_base": [35, 75, 85, 95, 105, 115, 125, 135, 150, 165, 180, 195, 210, 225, 240, 255, 270, 285, 300, 315,
57
+ 330, 345, 360, 375, 390],
58
+ "damage_rand": [e * 0.1 for e in
59
+ [35, 45, 55, 65, 75, 85, 95, 105, 120, 135, 150, 165, 180, 195, 210, 225, 240, 255, 270, 285,
60
+ 300, 315, 330, 345, 360]],
61
+ "damage_gain": 1 / 3,
62
+ "attack_power_cof": [40 * 1.05 * 1.05 * 1.05] * 4 +
63
+ [(40 + (i - 4) * 4) * 1.05 * 1.05 * 1.05 for i in range(5, 25)] +
64
+ [150 * 1.05 * 1.05 * 1.05],
65
+ "weapon_damage_cof": 1024,
66
+ },
67
+ 13463: {
68
+ "skill_class": PhysicalDamage,
69
+ "skill_name": "盾飞",
70
+ "damage_base": [30, 45, 60, 75, 90, 105, 120, 135, 150, 165, 180, 195, 210, 225, 240, 255, 270, 300],
71
+ "damage_rand": [e * 0.1 for e in
72
+ [20, 45, 60, 75, 90, 105, 120, 135, 150, 165, 180, 195, 210, 225, 240, 255, 270, 300]],
73
+ "damage_gain": 1 / 10,
74
+ "attack_power_cof": [16] * 4 +
75
+ [16 + (i - 4) * 1 for i in range(5, 18)] +
76
+ [35],
77
+ "weapon_damage_cof": 1024,
78
  },
79
+ 13044: {
80
+ "skill_class": PhysicalDamage,
81
+ "skill_name": "盾刀",
82
+ "damage_base": [31, 40, 45, 48, 55, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96,
83
+ 98, 102, 106, 110, 114, 118, 122, 126, 130],
84
+ "damage_rand": [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 15, 15, 15, 15, 15, 15,
85
+ 15, 15, 15, 15, 15, 15, 15],
86
+ "attack_power_cof": [16 * 1.05 * 1.05 * 1.1] * 4 +
87
+ [(16 + (i - 4) * 3) * 1.05 * 1.05 * 1.1 for i in range(5, 33)] +
88
+ [100 * 1.05 * 1.05 * 1.1],
89
+ "weapon_damage_cof": 1024,
90
+ },
91
+ 8249: {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92
  "skill_class": PhysicalDotDamage,
93
+ "skill_name": "流血(DOT)",
94
+ "damage_base": 47,
95
+ "attack_power_cof": [16 * 1.5 * 2 * 1.05 * 1.1] * 9 +
96
+ [(16 + (i - 9) * 4) * 1.5 * 2 * 1.05 * 1.1 for i in range(10, 22)] +
97
+ [70 * 1.5 * 2 * 1.05 * 1.1],
98
+ "interval": 32,
99
+ "tick": 13
100
+ },
101
+ 29188: {
 
 
 
102
  "skill_class": DotSkill,
103
+ "skill_name": "流血",
104
+ "bind_skill": 8249
105
+ },
106
+ 13075: {
107
+ "skill_class": PhysicalDamage,
108
+ "skill_name": "绝刀",
109
+ "damage_base": [240, 270, 300, 330, 350, 370, 390, 410, 430, 450, 470, 490, 510, 540, 570, 600, 630, 660, 690,
110
+ 720],
111
+ "damage_rand": [e * 0.1 for e in
112
+ [80, 100, 120, 140, 160, 180, 200, 220, 240, 260, 280, 300, 320, 340, 360, 380, 400, 420, 440,
113
+ 500]],
114
+ "damage_gain": 1 / 4,
115
+ "attack_power_cof": [60 * 0.9 * 0.75 * 0.9 * 1.1 * 1.05 * 1.05 * 1.05 * 1.22 * 1.05 * 1.05 * 1.1 * 1.06] * 4 +
116
+ [(60 + (i - 4) * 12) * 0.9 * 0.75 * 0.9 * 1.1 * 1.05 * 1.05 * 1.05 * 1.22 * 1.05 * 1.05 *
117
+ 1.1 * 1.06 for i in range(5, 20)] +
118
+ [250 * 0.75 * 0.9 * 1.1 * 1.05 * 1.05 * 1.05 * 1.22 * 1.05 * 1.05 * 1.1 * 1.06],
119
+ "weapon_damage_cof": 1024,
120
  },
121
+ 13092: {
122
  "skill_class": PhysicalDamage,
123
+ "skill_name": "斩刀",
124
+ "damage_base": [230, 260, 290, 320, 350, 380, 410, 440, 470, 510, 550, 580, 610, 640, 670, 700, 710, 720, 730,
125
+ 740, 750, 760],
126
+ "damage_rand": [e * 0.1 for e in
127
+ [20, 45, 60, 75, 90, 105, 120, 135, 150, 165, 180, 195, 210, 225, 240, 255, 270, 285, 300, 315,
128
+ 330, 345]],
129
+ "damage_gain": 0.3,
130
+ "attack_power_cof": [50 * 0.9 * 0.85 * 1.05 * 1.1 * 1.15 * 1.15 * 1.05 * 1.1 * 1.1 * 1.06 * 1.2] * 4 +
131
+ [(50 + (i - 4) * 10) * 0.9 * 0.85 * 1.05 * 1.1 * 1.15 * 1.15 * 1.05 * 1.1 * 1.1 * 1.06 * 1.2
132
+ for i in range(5, 22)] +
133
+ [250 * 0.9 * 0.85 * 1.05 * 1.1 * 1.15 * 1.15 * 1.05 * 1.1 * 1.1 * 1.06 * 1.2],
134
+ "weapon_damage_cof": 1024,
135
  },
136
+ 28479: {
137
  "skill_class": PhysicalDamage,
138
+ "skill_name": "劫刀",
139
+ "damage_base": [e / 5 for e in
140
+ [120, 150, 180, 210, 230, 250, 270, 290, 310, 330, 350, 370, 390, 400, 410, 420, 430, 440, 450,
141
+ 460, 470, 480, 490, 500, 510, 520, 530, 550]],
142
+ "damage_rand": [e * 0.1 for e in
143
+ [80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 120, 130, 140, 150, 160, 170, 180, 190, 200,
144
+ 210, 220, 230, 240, 250, 260, 270, 280, 290]],
145
+ "attack_power_cof": [20 * 1.1 * 1.05 * 1.1 * 1.05 * 1.1 * 1.05 * 1.06] * 9 +
146
+ [(20 + (i - 9) * 7) * 1.1 * 1.05 * 1.1 * 1.05 * 1.1 * 1.05 * 1.06
147
+ for i in range(10, 28)] +
148
+ [160 * 1.1 * 1.05 * 1.1 * 1.05 * 1.1 * 1.05 * 1.06],
149
+ "weapon_damage_cof": 1024,
150
+ },
151
+ 36065: {
152
+ "skill_class": PhysicalDamage,
153
+ "skill_name": ["击破·援戈", "斩破·惊涌", "绝破·惊涌", "闪破·惊涌", "劫破·惊涌"],
154
+ "surplus_cof": [
155
+ 1048576 * (0.697 * 0.5 * 1.2 - 1),
156
+ 1048576 * (0.697 * 0.14 * 1.2 * 1.2 - 1),
157
+ 1048576 * (0.697 * 0.14 * 1.2 * 1.2 - 1),
158
+ 1048576 * (0.697 * 0.14 * 1.2 - 1),
159
+ 1048576 * (0.697 * 0.14 * 1.2 - 1),
160
+ ]
161
+ },
162
+ 36482: {
163
+ "skill_class": PhysicalDamage,
164
+ "skill_name": "援戈·血影",
165
+ "damage_base": 400 / 5,
166
+ "damage_rand": 150 * 0.1,
167
+ "attack_power_cof": 300 * 2.3 * 0.83 * 1.2,
168
+ "weapon_damage_cof": 1024
169
+ },
170
+ 37253: {
171
+ "skill_class": PhysicalDamage,
172
+ "skill_name": "麾远",
173
+ "damage_base": 400 / 5,
174
+ "damage_rand": 150 * 0.1,
175
+ "attack_power_cof": 170 * 2,
176
+ },
177
+ 34673: {
178
+ "skill_class": PhysicalDamage,
179
+ "skill_name": "业火焚城",
180
+ "attack_power_cof": 40,
181
+ "weapon_damage_cof": 1024
182
+ },
183
+ 34674: {
184
+ "skill_class": PhysicalDamage,
185
+ "skill_name": "麟光甲寒",
186
+ "damage_base": 400 / 5,
187
+ "damage_rand": 150 * 0.1,
188
+ "attack_power_cof": 220 * 1.3 * 1.2,
189
+ "weapon_damage_cof": 1024
190
+ },
191
+ 34714: {
192
+ "skill_class": PhysicalDamage,
193
+ "skill_name": "业火焚城·云盾",
194
+ "damage_base": 400 / 5,
195
+ "damage_rand": 150 * 0.1,
196
+ "attack_power_cof": 160 * 1.3,
197
+ "weapon_damage_cof": 1024
198
+ },
199
+ 37448: {
200
+ "skill_class": PhysicalDamage,
201
+ "skill_name": "破·麟光",
202
+ "surplus_cof": 1048576 * (0.697 * 0.14 * 1.2 - 1)
203
+ },
204
+ 30925: {
205
+ "skill_class": PhysicalDamage,
206
+ "skill_name": "阵云结晦",
207
+ "damage_base": 240,
208
+ "damage_rand": 80 * 0.1,
209
+ "damage_gain": 1.2 / 4,
210
+ "attack_power_cof": 80 * 2 * 1.5,
211
+ "weapon_damage_cof": 1024,
212
+ "skill_pve_addition": 614
213
+ },
214
+ 30926: {
215
+ "skill_class": PhysicalDamage,
216
+ "skill_name": "月照连营",
217
+ "damage_base": 320,
218
+ "damage_rand": 120 * 0.1,
219
+ "damage_gain": 1.2 / 4,
220
+ "attack_power_cof": 100 * 2 * 1.5,
221
+ "weapon_damage_cof": 1024,
222
+ "skill_pve_addition": 614
223
+ },
224
+ 30857: {
225
+ "skill_class": PhysicalDamage,
226
+ "skill_name": "雁门迢递",
227
+ "damage_base": [400, 460, 520, 580, 640, 700, 760],
228
+ "damage_rand": [e * 0.1 for e in [300, 320, 340, 360, 380, 400, 420]],
229
+ "damage_gain": 1.2 / 4,
230
+ "attack_power_cof": 120 * 2 * 1.5,
231
+ "weapon_damage_cof": 1024,
232
+ "skill_pve_addition": 614
233
+ },
234
+ 30858: {
235
+ "skill_class": PhysicalDamage,
236
+ "skill_name": "绝国",
237
+ "damage_base": 24,
238
+ "damage_rand": 15 * 0.1,
239
+ "damage_gain": 1.2 / 4,
240
+ "attack_power_cof": [20 * (i + 1) * 1.2 * 1.3 for i in range(16)] +
241
+ [40 * (i + 1) * 1.2 * 1.3 for i in range(16, 80)],
242
+ "weapon_damage_cof": 1024,
243
+ },
244
+ 30859: {
245
+ "skill_class": PhysicalDamage,
246
+ "skill_name": "阵云绝",
247
+ "damage_base": 47,
248
+ "damage_rand": 28 * 0.1,
249
+ "damage_gain": 1.2 / 4,
250
+ "attack_power_cof": 80 * 1.2,
251
+ "weapon_damage_cof": 1024,
252
+ "skill_pve_addition": 614
253
  },
254
+ 25780: {
255
  "skill_class": PhysicalDamage,
256
+ "skill_name": "盾击·神兵",
257
  "damage_base": 20,
258
  "damage_rand": 2,
259
+ "attack_power_cof": 50
260
  }
261
  }
262
 
schools/fen_shan_jing/talents.py CHANGED
@@ -1,95 +1,47 @@
1
  from typing import Dict
2
 
3
- from base.attribute import Attribute
4
  from base.gain import Gain
5
  from base.skill import Skill
6
 
7
 
8
- class 彤弓(Gain):
9
  def add_skills(self, skills: Dict[int, Skill]):
10
- skills[35866].skill_critical_strike += 1000
11
- skills[35866].skill_critical_power += 102
12
 
13
  def sub_skills(self, skills: Dict[int, Skill]):
14
- skills[35866].skill_critical_strike -= 1000
15
- skills[35866].skill_critical_power -= 102
16
-
17
-
18
- class 素矰(Gain):
19
- def add_skills(self, skills: Dict[int, Skill]):
20
- skills[26856].attack_power_cof_gain *= 1.05
21
-
22
- def sub_skills(self, skills: Dict[int, Skill]):
23
- skills[26856].attack_power_cof_gain /= 1.05
24
-
25
-
26
- class 孰湖(Gain):
27
- def add_skills(self, skills: Dict[int, Skill]):
28
- for skill_id in (36056, 36057, 36111, 36112, 36113, 36114):
29
- skills[skill_id].skill_damage_addition += 62
30
-
31
- def sub_skills(self, skills: Dict[int, Skill]):
32
- for skill_id in (36056, 36057, 36111, 36112, 36113, 36114):
33
- skills[skill_id].skill_damage_addition -= 62
34
-
35
-
36
- class 桑柘(Gain):
37
- def add_skills(self, skills: Dict[int, Skill]):
38
- skills[35771].tick += 1
39
-
40
- def sub_skills(self, skills: Dict[int, Skill]):
41
- skills[35771].tick -= 1
42
-
43
-
44
- class 卢令(Gain):
45
- def add_attribute(self, attribute: Attribute):
46
- attribute.agility_gain += 102
47
-
48
- def sub_attribute(self, attribute: Attribute):
49
- attribute.agility_gain -= 102
50
-
51
-
52
- class 贯侯(Gain):
53
- def add_skills(self, skills: Dict[int, Skill]):
54
- skills[36157].skill_pve_addition += 205
55
-
56
- def sub_skills(self, skills: Dict[int, Skill]):
57
- skills[36157].skill_pve_addition -= 205
58
 
59
 
60
  TALENT_GAINS: Dict[int, Gain] = {
61
- 35715: 素矰("素矰"),
62
- 35714: 彤弓("彤弓"),
63
- 35718: Gain("棘矢"),
64
- 35719: 孰湖("孰湖"),
65
- 35721: Gain("襄尺"),
66
- 35725: Gain("长右"),
67
- 35729: Gain("鹿蜀"),
68
- 35736: 桑柘("桑柘"),
69
- 35733: Gain("诸怀"),
70
- 35737: Gain("于狩"),
71
- 35745: 卢令("卢令"),
72
- 35749: Gain("托月"),
73
- 35751: Gain("佩弦"),
74
- 35754: Gain("丛云隐月"),
75
- 35757: 贯侯("贯侯"),
76
- 35764: Gain("朝仪万汇"),
77
- 35761: Gain("朱厌")
78
  }
79
 
80
  TALENTS = [
81
- [35715, 35714],
82
- [35718, 35719],
83
- [35721],
84
- [35725],
85
- [35729],
86
- [35736, 35733],
87
- [35737],
88
- [35745],
89
- [35749],
90
- [35751, 35754],
91
- [35757],
92
- [35764, 35761]
93
  ]
94
  TALENT_DECODER = {talent_id: talent.gain_name for talent_id, talent in TALENT_GAINS.items()}
95
  TALENT_ENCODER = {v: k for k, v in TALENT_DECODER.items()}
 
1
  from typing import Dict
2
 
 
3
  from base.gain import Gain
4
  from base.skill import Skill
5
 
6
 
7
+ class 分野(Gain):
8
  def add_skills(self, skills: Dict[int, Skill]):
9
+ skills[13075].skill_critical_strike += 1500
10
+ skills[13075].skill_critical_power += 200
11
 
12
  def sub_skills(self, skills: Dict[int, Skill]):
13
+ skills[13075].skill_critical_strike -= 1500
14
+ skills[13075].skill_critical_power -= 200
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
 
16
 
17
  TALENT_GAINS: Dict[int, Gain] = {
18
+ 13317: Gain("刀魂"),
19
+ 13090: Gain("绝返"),
20
+ 13087: 分野("分野"),
21
+ 21281: Gain("血魄"),
22
+ 22897: Gain("锋鸣"),
23
+ 37239: Gain("麾远"),
24
+ 34912: Gain("业火麟光"),
25
+ 13126: Gain("恋战"),
26
+ 36058: Gain("援戈"),
27
+ 36205: Gain("惊涌"),
28
+ 14838: Gain("蔑视"),
29
+ 30769: Gain("阵云结晦")
 
 
 
 
 
30
  }
31
 
32
  TALENTS = [
33
+ [13317],
34
+ [13090],
35
+ [13087],
36
+ [21281],
37
+ [22897],
38
+ [37239],
39
+ [34912],
40
+ [13126],
41
+ [36058],
42
+ [36205],
43
+ [14838],
44
+ [30769]
45
  ]
46
  TALENT_DECODER = {talent_id: talent.gain_name for talent_id, talent in TALENT_GAINS.items()}
47
  TALENT_ENCODER = {v: k for k, v in TALENT_DECODER.items()}
schools/gu_feng_jue/skills.py CHANGED
@@ -7,14 +7,14 @@ from general.skills import GENERAL_SKILLS
7
 
8
  class 横刀断浪流血(Skill):
9
  def record(self, critical, parser):
10
- bind_skill = self.bind_skill
11
  bind_buff = self.bind_buff
12
- parser.current_ticks[bind_skill] = self.tick
13
- parser.current_stacks[bind_skill] = self.max_stack
14
  for level in range(self.max_stack):
15
  parser.current_target_buffs.pop((bind_buff, level + 1), None)
16
  parser.current_target_buffs[(bind_buff, self.max_stack)] = 1
17
- parser.current_dot_snapshot[bind_skill] = parser.current_player_buffs.copy()
18
 
19
 
20
  SKILLS: Dict[int, Skill | dict] = {
@@ -36,7 +36,8 @@ SKILLS: Dict[int, Skill | dict] = {
36
  "skill_name": "避实击虚",
37
  "damage_base": [35, 42, 45, 50, 55, 60],
38
  "damage_rand": 5,
39
- "attack_power_cof": [80 * 0.9, 100 * 0.9 * 0.9, 120 * 0.9 * 0.9, 160 * 0.8 * 0.9, 160 * 0.9, 200 * 0.9]
 
40
  },
41
  32246: {
42
  "skill_class": PhysicalDamage,
@@ -168,6 +169,14 @@ SKILLS: Dict[int, Skill | dict] = {
168
  [290],
169
  "weapon_damage_cof": 3072
170
  },
 
 
 
 
 
 
 
 
171
  **{
172
  skill_id: {
173
  "skill_class": 横刀断浪流血,
@@ -175,16 +184,8 @@ SKILLS: Dict[int, Skill | dict] = {
175
  "bind_skill": 24443,
176
  "bind_buff": -32513,
177
  "max_stack": i + 1,
178
- "tick": 3
179
  } for i, skill_id in enumerate([32874, 32873, 32872, 32871, 32870, 32869])
180
  },
181
- 24443: {
182
- "skill_class": PhysicalDotDamage,
183
- "skill_name": "流血(DOT)",
184
- "damage_base": 114,
185
- "attack_power_cof": 100,
186
- "interval": FRAME_PER_SECOND * DOT_DAMAGE_SCALE / 3
187
- },
188
  32234: {
189
  "skill_class": PhysicalDamage,
190
  "skill_name": "横云断浪",
 
7
 
8
  class 横刀断浪流血(Skill):
9
  def record(self, critical, parser):
10
+ bind_skill = parser.current_school.skills(self.bind_skill)
11
  bind_buff = self.bind_buff
12
+ parser.current_ticks[self.bind_skill] = bind_skill.tick
13
+ parser.current_stacks[self.bind_skill] = self.max_stack
14
  for level in range(self.max_stack):
15
  parser.current_target_buffs.pop((bind_buff, level + 1), None)
16
  parser.current_target_buffs[(bind_buff, self.max_stack)] = 1
17
+ parser.current_dot_snapshot[self.bind_skill] = parser.current_player_buffs.copy()
18
 
19
 
20
  SKILLS: Dict[int, Skill | dict] = {
 
36
  "skill_name": "避实击虚",
37
  "damage_base": [35, 42, 45, 50, 55, 60],
38
  "damage_rand": 5,
39
+ "attack_power_cof": [80 * 0.9, 100 * 0.9 * 0.9, 120 * 0.9 * 0.9, 160 * 0.8 * 0.9, 160 * 0.9, 200 * 0.9],
40
+ "weapon_damage_cof": 1024,
41
  },
42
  32246: {
43
  "skill_class": PhysicalDamage,
 
169
  [290],
170
  "weapon_damage_cof": 3072
171
  },
172
+ 24443: {
173
+ "skill_class": PhysicalDotDamage,
174
+ "skill_name": "流血(DOT)",
175
+ "damage_base": 114,
176
+ "attack_power_cof": 100,
177
+ "interval": FRAME_PER_SECOND * DOT_DAMAGE_SCALE / 3,
178
+ "tick": 3
179
+ },
180
  **{
181
  skill_id: {
182
  "skill_class": 横刀断浪流血,
 
184
  "bind_skill": 24443,
185
  "bind_buff": -32513,
186
  "max_stack": i + 1,
 
187
  } for i, skill_id in enumerate([32874, 32873, 32872, 32871, 32870, 32869])
188
  },
 
 
 
 
 
 
 
189
  32234: {
190
  "skill_class": PhysicalDamage,
191
  "skill_name": "横云断浪",
schools/gu_feng_jue/talents.py CHANGED
@@ -42,12 +42,10 @@ class 放皓(Gain):
42
 
43
  class 涣衍(Gain):
44
  def add_skills(self, skills: Dict[int, Skill]):
45
- for skill_id in (32874, 32873, 32872, 32871, 32870, 32869):
46
- skills[skill_id].tick += 3
47
 
48
  def sub_skills(self, skills: Dict[int, Skill]):
49
- for skill_id in (32874, 32873, 32872, 32871, 32870, 32869):
50
- skills[skill_id].tick -= 3
51
 
52
 
53
  class 涤瑕(Gain):
 
42
 
43
  class 涣衍(Gain):
44
  def add_skills(self, skills: Dict[int, Skill]):
45
+ skills[24443].tick += 3
 
46
 
47
  def sub_skills(self, skills: Dict[int, Skill]):
48
+ skills[24443].tick -= 3
 
49
 
50
 
51
  class 涤瑕(Gain):
schools/hua_jian_you/skills.py CHANGED
@@ -22,11 +22,10 @@ class DotConsumeSkill(Skill):
22
  new_status_tuple = status_tuple
23
  skill_id, skill_level, skill_stack = skill_tuple
24
  parser.current_ticks[skill_id] += 1
25
- tick = min(parser.current_ticks[skill_id], self.tick)
26
  parser.current_records[(skill_id, skill_level, skill_stack * tick)][new_status_tuple].append(
27
  parser.current_records[skill_tuple][status_tuple].pop()
28
  )
29
- parser.current_ticks[skill_id] -= tick
30
 
31
 
32
  class GeneraConsumeSkill(DotConsumeSkill):
@@ -68,21 +67,20 @@ SKILLS: Dict[int, Skill | dict] = {
68
  [(28 + (48 + (i - 9) * 9) * 0.9 * 1.25 * 1.15 * 1.05 * 1.1 * 1.05 * 1.15 * 1.1) * 1.05 *
69
  1.05 * 1.05 for i in range(10, 19)] +
70
  [(28 + 155 * 0.9 * 1.25 * 1.15 * 1.05 * 1.1 * 1.05 * 1.15 * 1.1) * 1.05 * 1.05 * 1.05],
71
- "interval": 48
 
72
  },
73
  **{
74
  skill_id: {
75
  "skill_class": DotSkill,
76
  "skill_name": "兰摧玉折",
77
- "bind_skill": 711,
78
- "tick": 6 + 1
79
  } for skill_id in (13848, 6136) # 18730
80
  },
81
  6129: {
82
  "skill_class": DotConsumeSkill,
83
  "skill_name": "兰摧玉折",
84
  "bind_skill": 711,
85
- "tick": 99,
86
  "bind_buff_levels": {5: 2, 6: 1}
87
  },
88
  714: {
@@ -93,21 +91,20 @@ SKILLS: Dict[int, Skill | dict] = {
93
  [(48 + (i - 9) * 8) * 0.9 * 1.25 * 1.15 * 1.05 * 1.15 * 1.1 * 1.05 * 1.05 * 1.05 for i in
94
  range(10, 24)] +
95
  [175 * 0.9 * 1.25 * 1.15 * 1.05 * 1.15 * 1.1 * 1.05 * 1.05 * 1.05],
96
- "interval": 48
 
97
  },
98
  **{
99
  skill_id: {
100
  "skill_class": DotSkill,
101
  "skill_name": "钟林毓秀",
102
- "bind_skill": 714,
103
- "tick": 6 + 1
104
  } for skill_id in (285, 13847, 6135)
105
  },
106
  6126: {
107
  "skill_class": DotConsumeSkill,
108
  "skill_name": "钟林毓秀",
109
  "bind_skill": 714,
110
- "tick": 99,
111
  "bind_buff_levels": {5: 2, 6: 1}
112
  },
113
  14941: {
@@ -129,21 +126,20 @@ SKILLS: Dict[int, Skill | dict] = {
129
  [(64 + (i - 9) * 4) * 0.9 * 1.25 * 1.15 * 1.05 * 1.15 * 1.05 * 1.05 * 1.1 for i in
130
  range(10, 29)] +
131
  [161 * 0.9 * 1.25 * 1.15 * 1.05 * 1.15 * 1.05 * 1.05 * 1.1],
132
- "interval": 48
 
133
  },
134
  **{
135
  skill_id: {
136
  "skill_class": DotSkill,
137
  "skill_name": "商阳指",
138
- "bind_skill": 666,
139
- "tick": 6 + 1
140
  } for skill_id in (180, 6134)
141
  },
142
  6128: {
143
  "skill_class": DotConsumeSkill,
144
  "skill_name": "商阳指",
145
  "bind_skill": 666,
146
- "tick": 99,
147
  "bind_buff_levels": {5: 2, 6: 1}
148
  },
149
  6693: {
@@ -184,22 +180,21 @@ SKILLS: Dict[int, Skill | dict] = {
184
  "skill_name": "快雪时晴(DOT)",
185
  "damage_base": 38,
186
  "attack_power_cof": (28 + 155 * 0.9 * 1.25 * 1.15 * 1.05 * 1.1 * 1.05 * 1.15 * 1.1) * 1.05 * 1.2 * 0.12,
187
- "interval": 64
 
 
188
  },
189
  **{
190
  skill_id: {
191
  "skill_class": DotSkill,
192
  "skill_name": "快雪时晴",
193
- "bind_skill": 24158,
194
- "tick": 7,
195
- "max_stack": 6
196
  } for skill_id in (32409, 32481)
197
  },
198
  32410: {
199
  "skill_class": DotConsumeSkill,
200
  "skill_name": "快雪时晴",
201
  "bind_skill": 24158,
202
- "tick": 99,
203
  "bind_buff_levels": {2: 2, 3: 1}
204
  },
205
  601: {
 
22
  new_status_tuple = status_tuple
23
  skill_id, skill_level, skill_stack = skill_tuple
24
  parser.current_ticks[skill_id] += 1
25
+ tick = parser.current_ticks.pop(skill_id)
26
  parser.current_records[(skill_id, skill_level, skill_stack * tick)][new_status_tuple].append(
27
  parser.current_records[skill_tuple][status_tuple].pop()
28
  )
 
29
 
30
 
31
  class GeneraConsumeSkill(DotConsumeSkill):
 
67
  [(28 + (48 + (i - 9) * 9) * 0.9 * 1.25 * 1.15 * 1.05 * 1.1 * 1.05 * 1.15 * 1.1) * 1.05 *
68
  1.05 * 1.05 for i in range(10, 19)] +
69
  [(28 + 155 * 0.9 * 1.25 * 1.15 * 1.05 * 1.1 * 1.05 * 1.15 * 1.1) * 1.05 * 1.05 * 1.05],
70
+ "interval": 48,
71
+ "tick": 6 + 1
72
  },
73
  **{
74
  skill_id: {
75
  "skill_class": DotSkill,
76
  "skill_name": "兰摧玉折",
77
+ "bind_skill": 711
 
78
  } for skill_id in (13848, 6136) # 18730
79
  },
80
  6129: {
81
  "skill_class": DotConsumeSkill,
82
  "skill_name": "兰摧玉折",
83
  "bind_skill": 711,
 
84
  "bind_buff_levels": {5: 2, 6: 1}
85
  },
86
  714: {
 
91
  [(48 + (i - 9) * 8) * 0.9 * 1.25 * 1.15 * 1.05 * 1.15 * 1.1 * 1.05 * 1.05 * 1.05 for i in
92
  range(10, 24)] +
93
  [175 * 0.9 * 1.25 * 1.15 * 1.05 * 1.15 * 1.1 * 1.05 * 1.05 * 1.05],
94
+ "interval": 48,
95
+ "tick": 6 + 1
96
  },
97
  **{
98
  skill_id: {
99
  "skill_class": DotSkill,
100
  "skill_name": "钟林毓秀",
101
+ "bind_skill": 714
 
102
  } for skill_id in (285, 13847, 6135)
103
  },
104
  6126: {
105
  "skill_class": DotConsumeSkill,
106
  "skill_name": "钟林毓秀",
107
  "bind_skill": 714,
 
108
  "bind_buff_levels": {5: 2, 6: 1}
109
  },
110
  14941: {
 
126
  [(64 + (i - 9) * 4) * 0.9 * 1.25 * 1.15 * 1.05 * 1.15 * 1.05 * 1.05 * 1.1 for i in
127
  range(10, 29)] +
128
  [161 * 0.9 * 1.25 * 1.15 * 1.05 * 1.15 * 1.05 * 1.05 * 1.1],
129
+ "interval": 48,
130
+ "tick": 6 + 1
131
  },
132
  **{
133
  skill_id: {
134
  "skill_class": DotSkill,
135
  "skill_name": "商阳指",
136
+ "bind_skill": 666
 
137
  } for skill_id in (180, 6134)
138
  },
139
  6128: {
140
  "skill_class": DotConsumeSkill,
141
  "skill_name": "商阳指",
142
  "bind_skill": 666,
 
143
  "bind_buff_levels": {5: 2, 6: 1}
144
  },
145
  6693: {
 
180
  "skill_name": "快雪时晴(DOT)",
181
  "damage_base": 38,
182
  "attack_power_cof": (28 + 155 * 0.9 * 1.25 * 1.15 * 1.05 * 1.1 * 1.05 * 1.15 * 1.1) * 1.05 * 1.2 * 0.12,
183
+ "interval": 64,
184
+ "tick": 7,
185
+ "max_stack": 6
186
  },
187
  **{
188
  skill_id: {
189
  "skill_class": DotSkill,
190
  "skill_name": "快雪时晴",
191
+ "bind_skill": 24158
 
 
192
  } for skill_id in (32409, 32481)
193
  },
194
  32410: {
195
  "skill_class": DotConsumeSkill,
196
  "skill_name": "快雪时晴",
197
  "bind_skill": 24158,
 
198
  "bind_buff_levels": {2: 2, 3: 1}
199
  },
200
  601: {
schools/ling_hai_jue/skills.py CHANGED
@@ -166,15 +166,14 @@ SKILLS: Dict[int, Skill | dict] = {
166
  "skill_name": "青冥(DOT)",
167
  "damage_base": 50,
168
  "attack_power_cof": 550,
169
- "interval": 32
170
-
 
171
  },
172
  25640: {
173
  "skill_class": DotSkill,
174
  "skill_name": "青冥",
175
- "bind_skill": 18386,
176
- "max_stack": 6,
177
- "tick": 6
178
  },
179
  25783: {
180
  "skill_class": PhysicalDamage,
@@ -188,15 +187,15 @@ SKILLS: Dict[int, Skill | dict] = {
188
  "skill_name": "御波驾澜(DOT)",
189
  "damage_base": 25,
190
  "attack_power_cof": 680,
191
- "interval": 48
 
 
192
 
193
  },
194
  26935: {
195
  "skill_class": DotSkill,
196
  "skill_name": "御波驾澜",
197
- "bind_skill": 19557,
198
- "max_stack": 3,
199
- "tick": 6
200
  }
201
  }
202
 
 
166
  "skill_name": "青冥(DOT)",
167
  "damage_base": 50,
168
  "attack_power_cof": 550,
169
+ "interval": 32,
170
+ "max_stack": 6,
171
+ "tick": 6
172
  },
173
  25640: {
174
  "skill_class": DotSkill,
175
  "skill_name": "青冥",
176
+ "bind_skill": 18386
 
 
177
  },
178
  25783: {
179
  "skill_class": PhysicalDamage,
 
187
  "skill_name": "御波驾澜(DOT)",
188
  "damage_base": 25,
189
  "attack_power_cof": 680,
190
+ "interval": 48,
191
+ "max_stack": 3,
192
+ "tick": 6
193
 
194
  },
195
  26935: {
196
  "skill_class": DotSkill,
197
  "skill_name": "御波驾澜",
198
+ "bind_skill": 19557
 
 
199
  }
200
  }
201
 
schools/mo_wen/skills.py CHANGED
@@ -51,14 +51,14 @@ SKILLS: Dict[int, Skill | dict] = {
51
  [(48 + (i - 9) * 7) * 1.1 * 1.05 * 1.05 * 1.05 * 1.12 * 1.05 * 1.1 * 1.05 for i in
52
  range(10, 25)] +
53
  [160 * 1.1 * 1.05 * 1.05 * 1.05 * 1.12 * 1.05 * 1.1 * 1.05],
54
- "interval": 48
 
55
  },
56
  **{
57
  skill_id: {
58
  "skill_class": DotSkill,
59
  "skill_name": "商",
60
- "bind_skill": 9357,
61
- "tick": 6
62
  } for skill_id in (14287, 17788)
63
  },
64
  14311: {
@@ -81,14 +81,14 @@ SKILLS: Dict[int, Skill | dict] = {
81
  [(48 + (i - 9) * 8) * 1.05 * 1.05 * 1.12 * 1.05 * 1.1 * 1.05 for i in
82
  range(10, 25)] +
83
  [180 * 1.05 * 1.05 * 1.12 * 1.05 * 1.1 * 1.05],
84
- "interval": 48
 
85
  },
86
  **{
87
  skill_id: {
88
  "skill_class": DotSkill,
89
  "skill_name": "角",
90
- "bind_skill": 9361,
91
- "tick": 6
92
  } for skill_id in (14291, 17792)
93
  },
94
  14312: {
@@ -189,14 +189,14 @@ SKILLS: Dict[int, Skill | dict] = {
189
  "skill_name": "神兵·宫(DOT)",
190
  "damage_base": 58,
191
  "attack_power_cof": 360 * 1.1 * 1.05 * 1.05 * 1.05 * 1.35,
192
- "interval": 48
 
 
193
  },
194
  31005: {
195
  "skill_class": DotSkill,
196
  "skill_name": "神兵·宫",
197
- "bind_skill": 23187,
198
- "max_stack": 3,
199
- "tick": 10
200
  }
201
  }
202
 
 
51
  [(48 + (i - 9) * 7) * 1.1 * 1.05 * 1.05 * 1.05 * 1.12 * 1.05 * 1.1 * 1.05 for i in
52
  range(10, 25)] +
53
  [160 * 1.1 * 1.05 * 1.05 * 1.05 * 1.12 * 1.05 * 1.1 * 1.05],
54
+ "interval": 48,
55
+ "tick": 6
56
  },
57
  **{
58
  skill_id: {
59
  "skill_class": DotSkill,
60
  "skill_name": "商",
61
+ "bind_skill": 9357
 
62
  } for skill_id in (14287, 17788)
63
  },
64
  14311: {
 
81
  [(48 + (i - 9) * 8) * 1.05 * 1.05 * 1.12 * 1.05 * 1.1 * 1.05 for i in
82
  range(10, 25)] +
83
  [180 * 1.05 * 1.05 * 1.12 * 1.05 * 1.1 * 1.05],
84
+ "interval": 48,
85
+ "tick": 6
86
  },
87
  **{
88
  skill_id: {
89
  "skill_class": DotSkill,
90
  "skill_name": "角",
91
+ "bind_skill": 9361
 
92
  } for skill_id in (14291, 17792)
93
  },
94
  14312: {
 
189
  "skill_name": "神兵·宫(DOT)",
190
  "damage_base": 58,
191
  "attack_power_cof": 360 * 1.1 * 1.05 * 1.05 * 1.05 * 1.35,
192
+ "interval": 48,
193
+ "max_stack": 3,
194
+ "tick": 10
195
  },
196
  31005: {
197
  "skill_class": DotSkill,
198
  "skill_name": "神兵·宫",
199
+ "bind_skill": 23187
 
 
200
  }
201
  }
202
 
schools/shan_hai_xin_jue/skills.py CHANGED
@@ -112,7 +112,14 @@ SKILLS: Dict[int, Skill | dict] = {
112
  "skill_name": "贯穿(DOT)",
113
  "damage_base": 32,
114
  "attack_power_cof": 215 * 0.7 * 1.15 * 0.9 * 0.9 * 0.9,
115
- "interval": FRAME_PER_SECOND * DOT_DAMAGE_SCALE / 4
 
 
 
 
 
 
 
116
  },
117
  36165: {
118
  "skill_class": DotConsumeSkill,
@@ -120,13 +127,6 @@ SKILLS: Dict[int, Skill | dict] = {
120
  "bind_skill": 26856,
121
  "tick": 3
122
  },
123
- 35771: {
124
- "skill_class": DotSkill,
125
- "skill_name": "贯穿",
126
- "bind_skill": 26856,
127
- "max_stack": 6,
128
- "tick": 4
129
- },
130
  36453: {
131
  "skill_class": PhysicalDamage,
132
  "skill_name": "朝仪万汇",
 
112
  "skill_name": "贯穿(DOT)",
113
  "damage_base": 32,
114
  "attack_power_cof": 215 * 0.7 * 1.15 * 0.9 * 0.9 * 0.9,
115
+ "interval": FRAME_PER_SECOND * DOT_DAMAGE_SCALE / 4,
116
+ "max_stack": 6,
117
+ "tick": 4
118
+ },
119
+ 35771: {
120
+ "skill_class": DotSkill,
121
+ "skill_name": "贯穿",
122
+ "bind_skill": 26856
123
  },
124
  36165: {
125
  "skill_class": DotConsumeSkill,
 
127
  "bind_skill": 26856,
128
  "tick": 3
129
  },
 
 
 
 
 
 
 
130
  36453: {
131
  "skill_class": PhysicalDamage,
132
  "skill_name": "朝仪万汇",
schools/shan_hai_xin_jue/talents.py CHANGED
@@ -35,10 +35,10 @@ class 孰湖(Gain):
35
 
36
  class 桑柘(Gain):
37
  def add_skills(self, skills: Dict[int, Skill]):
38
- skills[35771].tick += 1
39
 
40
  def sub_skills(self, skills: Dict[int, Skill]):
41
- skills[35771].tick -= 1
42
 
43
 
44
  class 卢令(Gain):
 
35
 
36
  class 桑柘(Gain):
37
  def add_skills(self, skills: Dict[int, Skill]):
38
+ skills[26856].tick += 1
39
 
40
  def sub_skills(self, skills: Dict[int, Skill]):
41
+ skills[26856].tick -= 1
42
 
43
 
44
  class 卢令(Gain):
schools/tai_xu_jian_yi/buffs.py CHANGED
@@ -22,6 +22,7 @@ BUFFS: Dict[int, Buff | dict] = {
22
  },
23
  2757: {
24
  "buff_name": "紫气东来",
 
25
  "gain_attributes": {
26
  "physical_attack_power_gain": [256, 256, 512, 256],
27
  "magical_attack_power_gain": [256, 256, 512, 256],
 
22
  },
23
  2757: {
24
  "buff_name": "紫气东来",
25
+ "frame_shift": -1,
26
  "gain_attributes": {
27
  "physical_attack_power_gain": [256, 256, 512, 256],
28
  "magical_attack_power_gain": [256, 256, 512, 256],
schools/tai_xu_jian_yi/skills.py CHANGED
@@ -25,14 +25,14 @@ SKILLS: Dict[int, Skill | dict] = {
25
  "skill_name": "叠刃(DOT)",
26
  "damage_base": 10,
27
  "attack_power_cof": 58 * 1.15 * 1.1 * 1.1,
28
- "interval": 48
 
 
29
  },
30
  600: {
31
  "skill_class": DotSkill,
32
  "skill_name": "叠刃",
33
- "bind_skill": 748,
34
- "max_stack": 5,
35
- "tick": 8
36
  },
37
  **{
38
  skill_id: {
@@ -98,13 +98,13 @@ SKILLS: Dict[int, Skill | dict] = {
98
  "skill_name": "人剑合一(DOT)",
99
  "damage_base": 16,
100
  "attack_power_cof": 450,
101
- "interval": 48
 
102
  },
103
  37453: {
104
  "skill_class": DotSkill,
105
  "skill_name": "人剑合一",
106
- "bind_skill": 889,
107
- "tick": 4
108
  },
109
  21979: {
110
  "skill_class": PhysicalDamage,
@@ -148,14 +148,14 @@ SKILLS: Dict[int, Skill | dict] = {
148
  "skill_name": "万象归元(DOT)",
149
  "damage_base": 10,
150
  "attack_power_cof": 450,
151
- "interval": 48
 
 
152
  },
153
  30944: {
154
  "skill_class": DotSkill,
155
  "skill_name": "万象归元",
156
- "bind_skill": 23170,
157
- "max_stack": 3,
158
- "tick": 10
159
  }
160
  }
161
 
 
25
  "skill_name": "叠刃(DOT)",
26
  "damage_base": 10,
27
  "attack_power_cof": 58 * 1.15 * 1.1 * 1.1,
28
+ "interval": 48,
29
+ "max_stack": 5,
30
+ "tick": 8
31
  },
32
  600: {
33
  "skill_class": DotSkill,
34
  "skill_name": "叠刃",
35
+ "bind_skill": 748
 
 
36
  },
37
  **{
38
  skill_id: {
 
98
  "skill_name": "人剑合一(DOT)",
99
  "damage_base": 16,
100
  "attack_power_cof": 450,
101
+ "interval": 48,
102
+ "tick": 4
103
  },
104
  37453: {
105
  "skill_class": DotSkill,
106
  "skill_name": "人剑合一",
107
+ "bind_skill": 889
 
108
  },
109
  21979: {
110
  "skill_class": PhysicalDamage,
 
148
  "skill_name": "万象归元(DOT)",
149
  "damage_base": 10,
150
  "attack_power_cof": 450,
151
+ "interval": 48,
152
+ "max_stack": 3,
153
+ "tick": 10
154
  },
155
  30944: {
156
  "skill_class": DotSkill,
157
  "skill_name": "万象归元",
158
+ "bind_skill": 23170
 
 
159
  }
160
  }
161
 
schools/tai_xu_jian_yi/talents.py CHANGED
@@ -29,10 +29,10 @@ class 无意(Gain):
29
 
30
  class 裂云(Gain):
31
  def add_skills(self, skills: Dict[int, Skill]):
32
- skills[600].max_stack += 2
33
 
34
  def sub_skills(self, skills: Dict[int, Skill]):
35
- skills[600].max_stack -= 2
36
 
37
 
38
  class 虚极(Gain):
 
29
 
30
  class 裂云(Gain):
31
  def add_skills(self, skills: Dict[int, Skill]):
32
+ skills[748].max_stack += 2
33
 
34
  def sub_skills(self, skills: Dict[int, Skill]):
35
+ skills[748].max_stack -= 2
36
 
37
 
38
  class 虚极(Gain):
schools/tian_luo_gui_dao/buffs.py CHANGED
@@ -63,12 +63,12 @@ BUFFS = {
63
  } for skill_id in (3313, 36502, 30894, 30727)
64
  }
65
  },
66
- 24668: {
67
- "buff_name": "杀机断魂",
68
- "gain_attributes": {
69
- "all_damage_addition": 103
70
- }
71
- }
72
  }
73
 
74
  for buff_id, detail in BUFFS.items():
 
63
  } for skill_id in (3313, 36502, 30894, 30727)
64
  }
65
  },
66
+ # 24668: {
67
+ # "buff_name": "杀机断魂",
68
+ # "gain_attributes": {
69
+ # "all_damage_addition": 103
70
+ # }
71
+ # }
72
  }
73
 
74
  for buff_id, detail in BUFFS.items():
schools/tian_luo_gui_dao/skills.py CHANGED
@@ -65,14 +65,14 @@ SKILLS: Dict[int, Skill | dict] = {
65
  "skill_class": MixingDotDamage,
66
  "skill_name": "化血(DOT)",
67
  "damage_base": 90,
68
- "attack_power_cof": 140 * 1.3 * 1.05*2.0*1.1,
69
- "interval": 48
 
70
  },
71
  21266: {
72
  "skill_class": DotSkill,
73
  "skill_name": "化血",
74
- "bind_skill": 14611,
75
- "tick": 16
76
  },
77
  3105: {
78
  "skill_class": MixingDamage,
 
65
  "skill_class": MixingDotDamage,
66
  "skill_name": "化血(DOT)",
67
  "damage_base": 90,
68
+ "attack_power_cof": 140 * 1.3 * 1.05 * 2.0 * 1.1,
69
+ "interval": 48,
70
+ "tick": 16
71
  },
72
  21266: {
73
  "skill_class": DotSkill,
74
  "skill_name": "化血",
75
+ "bind_skill": 14611
 
76
  },
77
  3105: {
78
  "skill_class": MixingDamage,
schools/tian_luo_gui_dao/talents.py CHANGED
@@ -14,12 +14,16 @@ class 流星赶月(Gain):
14
  skills[3228].skill_critical_power -= 102
15
 
16
 
17
- class 疾根(Gain):
18
  def add_skills(self, skills: Dict[int, Skill]):
19
- skills[27560].tick += 1
 
 
20
 
21
  def sub_skills(self, skills: Dict[int, Skill]):
22
- skills[27560].tick -= 1
 
 
23
 
24
 
25
  TALENT_GAINS: Dict[int, Gain] = {
@@ -30,7 +34,7 @@ TALENT_GAINS: Dict[int, Gain] = {
30
  37326: 流星赶月("流星赶月"),
31
  6451: Gain("聚精凝神"),
32
  18249: Gain("化血迷心"),
33
- 33134: Gain("杀机断魂"),
34
  6461: Gain("秋风散影"),
35
  37327: Gain("云合影从"),
36
  14856: Gain("曙色催寒"),
 
14
  skills[3228].skill_critical_power -= 102
15
 
16
 
17
+ class 杀机断魂(Gain):
18
  def add_skills(self, skills: Dict[int, Skill]):
19
+ for skill_id in (36502, 30894, 30727):
20
+ skills[skill_id].skill_damage_addition += 103 * 2 * 3
21
+ skills[3313].skill_damage_addition += 103 * 3
22
 
23
  def sub_skills(self, skills: Dict[int, Skill]):
24
+ for skill_id in (36502, 30894, 30727):
25
+ skills[skill_id].skill_damage_addition -= 103 * 2 * 3
26
+ skills[3313].skill_damage_addition -= 103 * 3
27
 
28
 
29
  TALENT_GAINS: Dict[int, Gain] = {
 
34
  37326: 流星赶月("流星赶月"),
35
  6451: Gain("聚精凝神"),
36
  18249: Gain("化血迷心"),
37
+ 33134: 杀机断魂("杀机断魂"),
38
  6461: Gain("秋风散影"),
39
  37327: Gain("云合影从"),
40
  14856: Gain("曙色催寒"),
schools/wu_fang/skills.py CHANGED
@@ -37,14 +37,14 @@ SKILLS: Dict[int, Skill | dict] = {
37
  "skill_name": "逆乱(DOT)",
38
  "damage_base": 95,
39
  "attack_power_cof": 90 * 1.5 * 0.8 * 1.05 * 1.1,
40
- "interval": 32
 
 
41
  },
42
  27560: {
43
  "skill_class": DotSkill,
44
  "skill_name": "逆乱",
45
- "bind_skill": 20052,
46
- "max_stack": 8,
47
- "tick": 7
48
  },
49
  27552: {
50
  "skill_class": MagicalDamage,
 
37
  "skill_name": "逆乱(DOT)",
38
  "damage_base": 95,
39
  "attack_power_cof": 90 * 1.5 * 0.8 * 1.05 * 1.1,
40
+ "interval": 32,
41
+ "max_stack": 8,
42
+ "tick": 7
43
  },
44
  27560: {
45
  "skill_class": DotSkill,
46
  "skill_name": "逆乱",
47
+ "bind_skill": 20052
 
 
48
  },
49
  27552: {
50
  "skill_class": MagicalDamage,
schools/wu_fang/talents.py CHANGED
@@ -15,10 +15,10 @@ class 鸩羽(Gain):
15
 
16
  class 疾根(Gain):
17
  def add_skills(self, skills: Dict[int, Skill]):
18
- skills[27560].tick += 1
19
 
20
  def sub_skills(self, skills: Dict[int, Skill]):
21
- skills[27560].tick -= 1
22
 
23
 
24
  TALENT_GAINS: Dict[int, Gain] = {
 
15
 
16
  class 疾根(Gain):
17
  def add_skills(self, skills: Dict[int, Skill]):
18
+ skills[20052].tick += 1
19
 
20
  def sub_skills(self, skills: Dict[int, Skill]):
21
+ skills[20052].tick -= 1
22
 
23
 
24
  TALENT_GAINS: Dict[int, Gain] = {
schools/yi_jin_jing/skills.py CHANGED
@@ -79,7 +79,8 @@ SKILLS: Dict[int, Skill | dict] = {
79
  "skill_name": "横扫六合(DOT)",
80
  "damage_base": 45,
81
  "attack_power_cof": 70 * 1.2 * 1.65 * 1.15 * 1.15 * 1.05 * 1.25 * 1.1 * 1.1,
82
- "interval": 32
 
83
  },
84
  3810: {
85
  "skill_class": type("Mixing", (MagicalDamage, DotSkill), {}),
@@ -88,8 +89,7 @@ SKILLS: Dict[int, Skill | dict] = {
88
  66, 68, 71, 73, 75, 36, 39, 41, 43, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
89
  60, 61, 62, 63, 64, 66, 68, 71, 73, 75],
90
  "attack_power_cof": 70 * 1.2 * 1.65 * 1.15 * 1.15 * 1.05 * 1.25 * 1.1 * 1.1,
91
- "bind_skill": 743,
92
- "tick": 6 + 3
93
  },
94
  3848: {
95
  "skill_class": type("Mixing", (MagicalDamage, BuffSkill), {}),
 
79
  "skill_name": "横扫六合(DOT)",
80
  "damage_base": 45,
81
  "attack_power_cof": 70 * 1.2 * 1.65 * 1.15 * 1.15 * 1.05 * 1.25 * 1.1 * 1.1,
82
+ "interval": 32,
83
+ "tick": 6 + 3
84
  },
85
  3810: {
86
  "skill_class": type("Mixing", (MagicalDamage, DotSkill), {}),
 
89
  66, 68, 71, 73, 75, 36, 39, 41, 43, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
90
  60, 61, 62, 63, 64, 66, 68, 71, 73, 75],
91
  "attack_power_cof": 70 * 1.2 * 1.65 * 1.15 * 1.15 * 1.05 * 1.25 * 1.1 * 1.1,
92
+ "bind_skill": 743
 
93
  },
94
  3848: {
95
  "skill_class": type("Mixing", (MagicalDamage, BuffSkill), {}),
schools/zi_xia_gong/__init__.py CHANGED
@@ -7,4 +7,4 @@ from schools.zi_xia_gong.attribute import ZiXiaGong
7
 
8
 
9
  def prepare(self, player_id):
10
- self.status[player_id][(17918, 1)] = 1
 
7
 
8
 
9
  def prepare(self, player_id):
10
+ self.player_buffs[player_id][(17918, 1)] = 1
schools/zi_xia_gong/buffs.py CHANGED
@@ -4,14 +4,6 @@ from base.buff import Buff
4
  from general.buffs import GENERAL_BUFFS
5
 
6
  BUFFS: Dict[int, Buff | dict] = {
7
- 375: {
8
- "buff_name": "破苍穹",
9
- "gain_attributes": {
10
- "magical_critical_strike_gain": [300, 350, 400, 450, 0, 600, 700, 800, 900, 500, 500, 1000, 500, 1000],
11
- "magical_critical_power_gain": [61, 71, 81, 82, 102, 122, 143, 163, 184, 102, 102, 204, 102, 204],
12
- "all_shield_ignore": [0] * 12 + [614] * 2
13
- }
14
- },
15
  1439: {
16
  "buff_name": "气涌",
17
  "activate": False,
@@ -20,6 +12,14 @@ BUFFS: Dict[int, Buff | dict] = {
20
  "magical_critical_power_gain": 41
21
  }
22
  },
 
 
 
 
 
 
 
 
23
  1908: {
24
  "buff_name": "会神",
25
  "gain_attributes": {
@@ -28,6 +28,7 @@ BUFFS: Dict[int, Buff | dict] = {
28
  },
29
  2757: {
30
  "buff_name": "紫气东来",
 
31
  "gain_attributes": {
32
  "physical_attack_power_gain": [256, 256, 512, 256],
33
  "magical_attack_power_gain": [256, 256, 512, 256],
@@ -36,7 +37,7 @@ BUFFS: Dict[int, Buff | dict] = {
36
  }
37
  },
38
  9966: {
39
- "buff_name": "六合独尊加伤害实际表现",
40
  "gain_skills": {
41
  18670: {
42
  "skill_damage_addition": [358, 716, 1075, 1433]
@@ -44,7 +45,7 @@ BUFFS: Dict[int, Buff | dict] = {
44
  }
45
  },
46
  # 12550: {
47
- # "buff_name": "气剑提升四象轮回伤害",
48
  # "gain_skills": {
49
  # 896: {
50
  # "skill_damage_addition": [40, 81, 122, 163, 204]
@@ -52,7 +53,7 @@ BUFFS: Dict[int, Buff | dict] = {
52
  # }
53
  # },
54
  # 12551: {
55
- # "buff_name": "气剑提升两仪化形伤害",
56
  # "gain_skills": {
57
  # skill_id: {
58
  # "skill_damage_addition": [40, 81, 122, 163, 204]
@@ -60,7 +61,7 @@ BUFFS: Dict[int, Buff | dict] = {
60
  # }
61
  # },
62
  17918: {
63
- "buff_name": "镇山河",
64
  "gain_skills": {
65
  skill_id: {
66
  "skill_pve_addition": 1331
 
4
  from general.buffs import GENERAL_BUFFS
5
 
6
  BUFFS: Dict[int, Buff | dict] = {
 
 
 
 
 
 
 
 
7
  1439: {
8
  "buff_name": "气涌",
9
  "activate": False,
 
12
  "magical_critical_power_gain": 41
13
  }
14
  },
15
+ 375: {
16
+ "buff_name": "破苍穹",
17
+ "gain_attributes": {
18
+ "magical_critical_strike_gain": [300, 350, 400, 450, 0, 600, 700, 800, 900, 500, 500, 1000, 500, 1000],
19
+ "magical_critical_power_gain": [61, 71, 81, 82, 102, 122, 143, 163, 184, 102, 102, 204, 102, 204],
20
+ "all_shield_ignore": [0] * 12 + [614] * 2
21
+ }
22
+ },
23
  1908: {
24
  "buff_name": "会神",
25
  "gain_attributes": {
 
28
  },
29
  2757: {
30
  "buff_name": "紫气东来",
31
+ "frame_shift": -1,
32
  "gain_attributes": {
33
  "physical_attack_power_gain": [256, 256, 512, 256],
34
  "magical_attack_power_gain": [256, 256, 512, 256],
 
37
  }
38
  },
39
  9966: {
40
+ "buff_name": "同尘",
41
  "gain_skills": {
42
  18670: {
43
  "skill_damage_addition": [358, 716, 1075, 1433]
 
45
  }
46
  },
47
  # 12550: {
48
+ # "buff_name": "跬步",
49
  # "gain_skills": {
50
  # 896: {
51
  # "skill_damage_addition": [40, 81, 122, 163, 204]
 
53
  # }
54
  # },
55
  # 12551: {
56
+ # "buff_name": "跬步",
57
  # "gain_skills": {
58
  # skill_id: {
59
  # "skill_damage_addition": [40, 81, 122, 163, 204]
 
61
  # }
62
  # },
63
  17918: {
64
+ "buff_name": "破势",
65
  "gain_skills": {
66
  skill_id: {
67
  "skill_pve_addition": 1331
schools/zi_xia_gong/gains.py CHANGED
@@ -22,6 +22,6 @@ GAINS = {
22
  # 无界特效1
23
  17300: Gain(),
24
  # 无界特效2
25
- 17239: Gain(),
26
  **EQUIPMENT_GAINS,
27
  }
 
22
  # 无界特效1
23
  17300: Gain(),
24
  # 无界特效2
25
+ 17312: Gain(),
26
  **EQUIPMENT_GAINS,
27
  }
schools/zi_xia_gong/skills.py CHANGED
@@ -4,6 +4,23 @@ from base.skill import Skill, DotSkill, PhysicalDamage, MagicalDamage, MagicalDo
4
  from general.skills import GENERAL_SKILLS
5
 
6
  SKILLS: Dict[int, Skill | dict] = {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  303: {
8
  "skill_class": MagicalDamage,
9
  "skill_name": "三才化生",
@@ -45,20 +62,6 @@ SKILLS: Dict[int, Skill | dict] = {
45
  "attack_power_cof": [(14 * i * 0.8) for i in range(1, 11)],
46
  } for skill_id in (6091, 6092, 6093, 6094, 6095, 6096, 6097, 6098, 6099, 6100)
47
  },
48
- 6424: {
49
- "skill_class": MagicalDotDamage,
50
- "skill_name": "气竭(DOT)",
51
- "damage_base": 10,
52
- "attack_power_cof": 229 * 1.7,
53
- "interval": 48
54
- },
55
- 18121: {
56
- "skill_class": PhysicalDamage,
57
- "skill_name": "三柴剑法",
58
- "attack_power_cof": 16,
59
- "weapon_damage_cof": 1024,
60
- "skill_damage_addition": 205
61
- },
62
  **{
63
  skill_id: {
64
  "skill_class": MagicalDamage,
@@ -81,6 +84,13 @@ SKILLS: Dict[int, Skill | dict] = {
81
  "damage_rand": 78,
82
  "attack_power_cof": 300 * 1.1 * 1.15 * 1.1 * 1.12
83
  },
 
 
 
 
 
 
 
84
  25770: {
85
  "skill_class": MagicalDamage,
86
  "skill_name": "四象轮回·神兵",
@@ -88,30 +98,20 @@ SKILLS: Dict[int, Skill | dict] = {
88
  "damage_rand": 2,
89
  "attack_power_cof": 65
90
  },
91
- 32813: {
92
- "skill_class": MagicalDamage,
93
- "skill_name": "",
94
- "surplus_cof": [
95
- 1024 * 1024 * (0.06 - 1),
96
- 1024 * 1024 * (0.30 - 1),
97
- 1024 * 1024 * (0.83 - 1),
98
- 1024 * 1024 * (0.60 - 1)
99
- ]
100
  },
101
  33592: {
102
  "skill_class": DotSkill,
103
  "skill_name": "气竭",
104
- "bind_skill": 6424,
105
- "max_stack": 3,
106
- "tick": 10
107
  },
108
- 36439: {
109
- "skill_class": MagicalDamage,
110
- "skill_name": "颠越苍穹击",
111
- "damage_base": 1038,
112
- "damage_rand": 104,
113
- "attack_power_cof": 155 * 0.9
114
- }
115
  }
116
 
117
  for skill_id, detail in SKILLS.items():
 
4
  from general.skills import GENERAL_SKILLS
5
 
6
  SKILLS: Dict[int, Skill | dict] = {
7
+ 32813: {
8
+ "skill_class": MagicalDamage,
9
+ "skill_name": "破",
10
+ "surplus_cof": [
11
+ 1024 * 1024 * (0.06 - 1),
12
+ 1024 * 1024 * (0.30 - 1),
13
+ 1024 * 1024 * (0.83 - 1),
14
+ 1024 * 1024 * (0.60 - 1)
15
+ ]
16
+ },
17
+ 18121: {
18
+ "skill_class": PhysicalDamage,
19
+ "skill_name": "三柴剑法",
20
+ "attack_power_cof": 16,
21
+ "weapon_damage_cof": 1024,
22
+ "skill_damage_addition": 205
23
+ },
24
  303: {
25
  "skill_class": MagicalDamage,
26
  "skill_name": "三才化生",
 
62
  "attack_power_cof": [(14 * i * 0.8) for i in range(1, 11)],
63
  } for skill_id in (6091, 6092, 6093, 6094, 6095, 6096, 6097, 6098, 6099, 6100)
64
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  **{
66
  skill_id: {
67
  "skill_class": MagicalDamage,
 
84
  "damage_rand": 78,
85
  "attack_power_cof": 300 * 1.1 * 1.15 * 1.1 * 1.12
86
  },
87
+ 36439: {
88
+ "skill_class": MagicalDamage,
89
+ "skill_name": "颠越苍穹击",
90
+ "damage_base": 1038,
91
+ "damage_rand": 104,
92
+ "attack_power_cof": 155 * 0.9
93
+ },
94
  25770: {
95
  "skill_class": MagicalDamage,
96
  "skill_name": "四象轮回·神兵",
 
98
  "damage_rand": 2,
99
  "attack_power_cof": 65
100
  },
101
+ 6424: {
102
+ "skill_class": MagicalDotDamage,
103
+ "skill_name": "气竭(DOT)",
104
+ "damage_base": 10,
105
+ "attack_power_cof": 229 * 1.7,
106
+ "interval": 48,
107
+ "max_stack": 3,
108
+ "tick": 10
 
109
  },
110
  33592: {
111
  "skill_class": DotSkill,
112
  "skill_name": "气竭",
113
+ "bind_skill": 6424
 
 
114
  },
 
 
 
 
 
 
 
115
  }
116
 
117
  for skill_id, detail in SKILLS.items():
schools/zi_xia_gong/talents.py CHANGED
@@ -65,7 +65,7 @@ TALENT_GAINS: Dict[int, Gain] = {
65
  5846: Gain("无形"),
66
  23614: Gain("归元"),
67
  5819: Gain("同尘"),
68
- 18695: 跬步("跬步"),
69
  32411: Gain("正气"),
70
  14834: Gain("抱阳"),
71
  18679: Gain("浮生"),
 
65
  5846: Gain("无形"),
66
  23614: Gain("归元"),
67
  5819: Gain("同尘"),
68
+ 18695: Gain("跬步"),
69
  32411: Gain("正气"),
70
  14834: Gain("抱阳"),
71
  18679: Gain("浮生"),
utils/damage.py CHANGED
@@ -8,7 +8,6 @@ def defense_result(shield_base, shield_gain, shield_ignore, shield_constant):
8
  shield = shield_base
9
  shield += int(shield * shield_gain / BINARY_SCALE)
10
  shield -= int(shield * shield_ignore / BINARY_SCALE)
11
- shield = max(0, shield)
12
  return int(shield * BINARY_SCALE / (shield + shield_constant))
13
 
14
 
 
8
  shield = shield_base
9
  shield += int(shield * shield_gain / BINARY_SCALE)
10
  shield -= int(shield * shield_ignore / BINARY_SCALE)
 
11
  return int(shield * BINARY_SCALE / (shield + shield_constant))
12
 
13
 
utils/parser.py CHANGED
@@ -4,7 +4,8 @@ from base.constant import FRAME_PER_SECOND
4
  from schools import *
5
  from utils.lua import parse
6
 
7
- FRAME_TYPE, PLAYER_ID_TYPE, PLAYER_NAME_TYPE, TARGET_ID_TYPE, PET_ID_TYPE = int, int, int, int, int
 
8
  CASTER_ID_TYPE = PLAYER_ID_TYPE | PET_ID_TYPE
9
  SKILL_ID_TYPE, SKILL_LEVEL_TYPE, SKILL_STACK_TYPE, SKILL_CRITICAL_TYPE = int, int, int, bool
10
  SKILL_TYPE = Tuple[SKILL_ID_TYPE, SKILL_LEVEL_TYPE, SKILL_STACK_TYPE]
@@ -39,14 +40,17 @@ class Parser:
39
  current_caster: CASTER_ID_TYPE
40
  current_target: TARGET_ID_TYPE
41
  current_skill: SKILL_ID_TYPE
 
42
  current_frame: FRAME_TYPE
 
43
 
44
  id2name: Dict[PLAYER_ID_TYPE | TARGET_ID_TYPE, PLAYER_NAME_TYPE]
45
  name2id: Dict[PLAYER_NAME_TYPE, PLAYER_ID_TYPE | TARGET_ID_TYPE]
46
  pets: Dict[PET_ID_TYPE, PLAYER_ID_TYPE]
47
  records: Dict[PLAYER_ID_TYPE, Dict[TARGET_ID_TYPE, RECORD_TYPE]]
48
 
49
- shift_buffs: Dict[FRAME_TYPE, Dict[PLAYER_ID_TYPE, Dict[BUFF_TYPE, BUFF_STACK_TYPE]]]
 
50
  hidden_buffs: Dict[TARGET_ID_TYPE, Dict[PLAYER_ID_TYPE, Dict[BUFF_TYPE, FRAME_TYPE]]]
51
 
52
  player_buffs: Dict[PLAYER_ID_TYPE, Dict[BUFF_TYPE, BUFF_STACK_TYPE]]
@@ -127,6 +131,7 @@ class Parser:
127
 
128
  def reset(self):
129
  self.current_frame = 0
 
130
 
131
  self.id2name = {}
132
  self.name2id = {}
@@ -135,7 +140,8 @@ class Parser:
135
  self.records = defaultdict(lambda: defaultdict(lambda: defaultdict(lambda: defaultdict(list))))
136
 
137
  self.hidden_buffs = defaultdict(lambda: defaultdict(dict))
138
- self.shift_buffs = defaultdict(lambda: defaultdict(dict))
 
139
 
140
  self.player_buffs = defaultdict(dict)
141
  self.target_buffs = defaultdict(lambda: defaultdict(dict))
@@ -219,16 +225,28 @@ class Parser:
219
  buff_id, buff_stack, buff_level = int(detail[4]), int(detail[5]), int(detail[8])
220
  if buff_id not in self.players[player_id].buffs:
221
  return
222
-
223
- frame_shift = self.players[player_id].buffs[buff_id].frame_shift
224
- if frame_shift:
225
- self.shift_buffs[self.current_frame + frame_shift][player_id][(buff_id, buff_level)] = buff_stack
226
-
227
- def parse_shift_status(self):
228
- for frame in list(self.shift_buffs):
 
229
  if frame > self.current_frame:
230
  break
231
- for player_id, shift_buffs in self.shift_buffs.pop(frame).items():
 
 
 
 
 
 
 
 
 
 
 
232
  for buff, buff_stack in shift_buffs.items():
233
  if buff_stack:
234
  self.player_buffs[player_id][buff] = buff_stack
@@ -337,13 +355,19 @@ class Parser:
337
 
338
  for row in rows:
339
  self.current_frame = int(row[1])
 
340
  if row[4] == "13":
341
  self.parse_shift_buff(row[-1])
342
 
343
  for row in rows:
344
- self.current_frame = int(row[1])
345
- self.parse_shift_status()
346
- self.parse_hidden_buffs()
 
 
 
 
 
347
  if row[4] == "8":
348
  self.parse_pet(row[-1])
349
  elif row[4] == "13":
 
4
  from schools import *
5
  from utils.lua import parse
6
 
7
+ FRAME_TYPE, SECOND_TYPE = int, int
8
+ PLAYER_ID_TYPE, PLAYER_NAME_TYPE, TARGET_ID_TYPE, PET_ID_TYPE = int, int, int, int
9
  CASTER_ID_TYPE = PLAYER_ID_TYPE | PET_ID_TYPE
10
  SKILL_ID_TYPE, SKILL_LEVEL_TYPE, SKILL_STACK_TYPE, SKILL_CRITICAL_TYPE = int, int, int, bool
11
  SKILL_TYPE = Tuple[SKILL_ID_TYPE, SKILL_LEVEL_TYPE, SKILL_STACK_TYPE]
 
40
  current_caster: CASTER_ID_TYPE
41
  current_target: TARGET_ID_TYPE
42
  current_skill: SKILL_ID_TYPE
43
+
44
  current_frame: FRAME_TYPE
45
+ current_second: SECOND_TYPE
46
 
47
  id2name: Dict[PLAYER_ID_TYPE | TARGET_ID_TYPE, PLAYER_NAME_TYPE]
48
  name2id: Dict[PLAYER_NAME_TYPE, PLAYER_ID_TYPE | TARGET_ID_TYPE]
49
  pets: Dict[PET_ID_TYPE, PLAYER_ID_TYPE]
50
  records: Dict[PLAYER_ID_TYPE, Dict[TARGET_ID_TYPE, RECORD_TYPE]]
51
 
52
+ frame_shift_buffs: Dict[FRAME_TYPE, Dict[PLAYER_ID_TYPE, Dict[BUFF_TYPE, BUFF_STACK_TYPE]]]
53
+ second_shift_buffs: Dict[SECOND_TYPE, Dict[PLAYER_ID_TYPE, Dict[BUFF_TYPE, BUFF_STACK_TYPE]]]
54
  hidden_buffs: Dict[TARGET_ID_TYPE, Dict[PLAYER_ID_TYPE, Dict[BUFF_TYPE, FRAME_TYPE]]]
55
 
56
  player_buffs: Dict[PLAYER_ID_TYPE, Dict[BUFF_TYPE, BUFF_STACK_TYPE]]
 
131
 
132
  def reset(self):
133
  self.current_frame = 0
134
+ self.current_second = 0
135
 
136
  self.id2name = {}
137
  self.name2id = {}
 
140
  self.records = defaultdict(lambda: defaultdict(lambda: defaultdict(lambda: defaultdict(list))))
141
 
142
  self.hidden_buffs = defaultdict(lambda: defaultdict(dict))
143
+ self.frame_shift_buffs = defaultdict(lambda: defaultdict(dict))
144
+ self.second_shift_buffs = defaultdict(lambda: defaultdict(dict))
145
 
146
  self.player_buffs = defaultdict(dict)
147
  self.target_buffs = defaultdict(lambda: defaultdict(dict))
 
225
  buff_id, buff_stack, buff_level = int(detail[4]), int(detail[5]), int(detail[8])
226
  if buff_id not in self.players[player_id].buffs:
227
  return
228
+ buff = self.players[player_id].buffs[buff_id]
229
+ if frame_shift := buff.frame_shift:
230
+ self.frame_shift_buffs[self.current_frame + frame_shift][player_id][(buff_id, buff_level)] = buff_stack
231
+ # elif second_shift := buff.second_shift:
232
+ # self.second_shift_buffs[self.current_second + second_shift][player_id][(buff_id, buff_level)] = buff_stack
233
+
234
+ def parse_frame_shift_status(self):
235
+ for frame in list(self.frame_shift_buffs):
236
  if frame > self.current_frame:
237
  break
238
+ for player_id, shift_buffs in self.frame_shift_buffs.pop(frame).items():
239
+ for buff, buff_stack in shift_buffs.items():
240
+ if buff_stack:
241
+ self.player_buffs[player_id][buff] = buff_stack
242
+ else:
243
+ self.player_buffs[player_id].pop(buff, None)
244
+
245
+ def parse_second_shift_status(self):
246
+ for second in list(self.second_shift_buffs):
247
+ if second > self.current_second:
248
+ break
249
+ for player_id, shift_buffs in self.second_shift_buffs.pop(second).items():
250
  for buff, buff_stack in shift_buffs.items():
251
  if buff_stack:
252
  self.player_buffs[player_id][buff] = buff_stack
 
355
 
356
  for row in rows:
357
  self.current_frame = int(row[1])
358
+ # self.current_second = int(row[3])
359
  if row[4] == "13":
360
  self.parse_shift_buff(row[-1])
361
 
362
  for row in rows:
363
+ if (current_frame := int(row[1])) != self.current_frame:
364
+ self.current_frame = current_frame
365
+ self.parse_frame_shift_status()
366
+ self.parse_hidden_buffs()
367
+ # if (current_second := int(row[3])) != self.current_second:
368
+ # self.current_second = current_second
369
+ # self.parse_frame_shift_status()
370
+
371
  if row[4] == "8":
372
  self.parse_pet(row[-1])
373
  elif row[4] == "13":