ango
5.16 commit
1cc60af
from typing import Dict
from base.constant import DOT_DAMAGE_SCALE, FRAME_PER_SECOND
from base.skill import Skill, DotSkill, PhysicalDamage, PhysicalDotDamage
from general.skills import GENERAL_SKILLS
class 横刀断浪流血(Skill):
bind_buff: int = -24222
stack: int
def record(self, critical, parser):
bind_skill = parser.current_school.skills[self.bind_skill]
bind_buff = self.bind_buff
for level in range(self.stack):
parser.clear_target_buff(bind_buff, level + 1)
parser.refresh_target_buff(bind_buff, self.stack, 1)
parser.current_dot_ticks[self.bind_skill] = bind_skill.tick
parser.current_dot_stacks[self.bind_skill] = self.stack
parser.current_dot_buffs[self.bind_skill] = parser.current_buffs.copy()
SKILLS: Dict[int, Skill | dict] = {
33146: {
"skill_class": PhysicalDamage,
"skill_name": "破",
"surplus_cof": 1048576 * (0.48 - 1)
},
**{
skill_id: {
"skill_class": PhysicalDamage,
"skill_name": "云刀",
"attack_power_cof": 16,
"weapon_damage_cof": 1024
} for skill_id in (32974, 32975)
},
32510: {
"skill_class": PhysicalDamage,
"skill_name": "避实击虚",
"damage_base": [35, 42, 45, 50, 55, 60],
"damage_rand": 5,
"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],
"weapon_damage_cof": 1024,
},
32246: {
"skill_class": PhysicalDamage,
"skill_name": "留客雨",
"damage_base": [35, 42, 45, 50, 52, 55, 56, 58, 60, 62, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 109, 115,
120, 130, 140, 150, 160],
"damage_rand": [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 10, 10, 10, 10, 10, 10, 10, 10, 15, 15, 15, 15, 15, 15, 15, 15,
15],
"damage_gain": 1.1,
"attack_power_cof": [90] * 11 +
[(100 + (i - 12) * 5) for i in range(12, 27)] +
[200],
"weapon_damage_cof": 1024
},
32766: {
"skill_class": PhysicalDamage,
"skill_name": "触石雨",
"damage_base": [180, 200],
"damage_rand": [15, 30],
"attack_power_cof": [200, 200 * 1.6]
},
32149: {
"skill_class": PhysicalDamage,
"skill_name": "行云势·一",
"damage_base": [35, 42, 45, 50, 52, 55, 56, 58, 60, 62, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 109, 115,
120, 130, 140, 150, 160, 170, 180],
"damage_rand": [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 10, 10, 10, 10, 10, 10, 10, 10, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15],
"attack_power_cof": [40 * 1.5] * 12 +
[(40 + (i - 12) * 5) * 1.5 for i in range(13, 30)] +
[135 * 1.5],
"weapon_damage_cof": 1024
},
32150: {
"skill_class": PhysicalDamage,
"skill_name": "行云势·二",
"damage_base": [35, 42, 45, 50, 52, 55, 56, 58, 60, 62, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 109, 115,
120, 130, 140, 150, 160, 170, 180],
"damage_rand": [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 10, 10, 10, 10, 10, 10, 10, 10, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15],
"damage_gain": 1.2,
"attack_power_cof": [50 * 1.5] * 12 +
[(50 + (i - 12) * 5) * 1.5 for i in range(13, 30)] +
[159 * 1.5],
"weapon_damage_cof": 2048
},
32151: {
"skill_class": PhysicalDamage,
"skill_name": "行云势·三",
"damage_base": [35, 42, 45, 50, 52, 55, 56, 58, 60, 62, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 109, 115,
120, 130, 140, 150, 160, 170, 180],
"damage_rand": [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 10, 10, 10, 10, 10, 10, 10, 10, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15],
"damage_gain": 1.5,
"attack_power_cof": [70 * 1.5 * 1.5] * 12 +
[(70 + (i - 12) * 5) * 1.5 * 1.5 for i in range(13, 30)] +
[190 * 1.5 * 1.5],
"weapon_damage_cof": 2048
},
32154: {
"skill_class": PhysicalDamage,
"skill_name": "决云势",
"damage_base": [107, 120, 132, 144, 157, 55, 56, 58, 60, 62, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 109,
115, 120, 130, 140, 150, 160],
"damage_rand": [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 10, 10, 10, 10, 10, 10, 10, 10, 15, 15, 15, 15, 15, 15, 15, 15,
15],
"damage_gain": 1.25,
"attack_power_cof": [50 + i * 15 for i in range(1, 3)] +
[80 + i * 20 for i in range(3, 5)] +
[188],
"weapon_damage_cof": 1024
},
32167: {
"skill_class": PhysicalDamage,
"skill_name": "断云势",
"damage_base": [62, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 109, 115],
"damage_rand": [5, 5, 10, 10, 10, 10, 10, 10, 10, 10, 15, 15, 15, 15],
"damage_gain": 1.5,
"attack_power_cof": [(120 + i * 10) * 0.9 for i in range(1, 6)] +
[(150 + i * 15) * 0.9 for i in range(6, 14)] +
[380 * 0.9],
"weapon_damage_cof": 2048
},
32348: {
"skill_class": PhysicalDamage,
"skill_name": "断云势",
"damage_base": [62, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 109, 115],
"damage_rand": [5, 5, 10, 10, 10, 10, 10, 10, 10, 10, 15, 15, 15, 15],
"damage_gain": 1.5 * 0.4,
"attack_power_cof": [(120 + i * 10) * 0.9 for i in range(1, 6)] +
[(150 + i * 15) * 0.9 for i in range(6, 14)] +
[380 * 0.9],
"attack_power_cof_gain": 0.4,
"weapon_damage_cof": 2048
},
32602: {
"skill_class": PhysicalDamage,
"skill_name": "沧浪三叠·一",
"damage_base": [76, 85, 94, 107, 118, 125, 135, 145, 155, 165, 175, 185, 190, 200, 205, 210, 215, 220, 225, 230,
235, 240, 245, 250, 255],
"damage_rand": [5, 5, 5, 5, 5, 5, 5, 10, 10, 10, 10, 10, 15, 15, 15, 15, 15, 15, 15, 20, 20, 20, 20, 20, 20],
"damage_gain": 0.8,
"attack_power_cof": [130] * 11 +
[(160 + (i - 12) * 5) for i in range(12, 25)] +
[230],
"weapon_damage_cof": 2048
},
32603: {
"skill_class": PhysicalDamage,
"skill_name": "沧浪三叠·二",
"damage_base": [76, 85, 94, 107, 118, 125, 135, 145, 155, 165, 175, 185, 190, 200, 205, 210, 215, 220, 225, 230,
235, 240, 245, 250, 255],
"damage_rand": [5, 5, 5, 5, 5, 5, 5, 10, 10, 10, 10, 10, 15, 15, 15, 15, 15, 15, 15, 20, 20, 20, 20, 20, 20],
"damage_gain": 1.05,
"attack_power_cof": [155] * 11 +
[(185 + (i - 12) * 5) for i in range(12, 25)] +
[255],
"weapon_damage_cof": 2560
},
32604: {
"skill_class": PhysicalDamage,
"skill_name": "沧浪三叠·三",
"damage_base": [76, 85, 94, 107, 118, 125, 135, 145, 155, 165, 175, 185, 190, 200, 205, 210, 215, 220, 225, 230,
235, 240, 245, 250, 255],
"damage_rand": [5, 5, 5, 5, 5, 5, 5, 10, 10, 10, 10, 10, 15, 15, 15, 15, 15, 15, 15, 20, 20, 20, 20, 20, 20],
"damage_gain": 1.15,
"attack_power_cof": [180] * 11 +
[(210 + (i - 12) * 5) for i in range(12, 25)] +
[290],
"weapon_damage_cof": 3072
},
24443: {
"skill_class": PhysicalDotDamage,
"skill_name": "流血(DOT)",
"damage_base": 114,
"attack_power_cof": 100,
"interval": FRAME_PER_SECOND * DOT_DAMAGE_SCALE / 3,
"tick": 3
},
**{
skill_id: {
"skill_class": 横刀断浪流血,
"skill_name": "流血",
"bind_skill": 24443,
"stack": i + 1,
} for i, skill_id in enumerate([32874, 32873, 32872, 32871, 32870, 32869])
},
32234: {
"skill_class": PhysicalDamage,
"skill_name": "横云断浪",
"damage_base": [547, 588, 629, 670, 711, 752, 793, 834, 875, 916, 957, 998, 1039, 1080, 1121, 1162, 1203],
"damage_rand": [e * 0.1 for e in
[547, 588, 629, 670, 711, 752, 793, 834, 875, 916, 957, 998, 1039, 1080, 1121, 1162, 1203]],
"damage_gain": 0.6,
"attack_power_cof": [300 * 0.8] * 5 +
[(320 + (i - 6) * 10) * 0.8 for i in range(6, 17)] +
[450 * 0.8],
"weapon_damage_cof": 3072
},
**{
skill_id: {
"skill_class": PhysicalDamage,
"skill_name": "孤锋破浪",
"damage_base": [90, 98, 110, 130, 150, 170, 190, 210, 230, 250, 270, 290],
"damage_rand": [5, 5, 5, 5, 5, 10, 10, 10, 10, 15, 15, 15],
"damage_gain": 5,
"attack_power_cof": [400 * 0.9 * 0.85 * 0.9 * 1.1] * 4 +
[(400 + (i - 5) * 30) * 0.9 * 0.85 * 0.9 * 1.1 for i in range(5, 12)] +
[650 * 0.9 * 0.85 * 0.9 * 1.1],
"weapon_damage_cof": 3072
} for skill_id in (32235, 32236, 32237, 32238, 32239, 32891, 32892)
},
32357: {
"skill_class": PhysicalDamage,
"skill_name": "驰风八步",
"damage_base": [10, 13, 16, 19, 22, 25],
"damage_rand": 5,
"attack_power_cof": 45,
},
36118: {
"skill_class": PhysicalDamage,
"skill_name": "潋风·携刃",
"damage_base": 78,
"damage_rand": 10,
"attack_power_cof": 150 * 1.1 * 1.25,
},
33239: {
"skill_class": PhysicalDamage,
"skill_name": "行云势·神兵",
"damage_base": 20,
"damage_rand": 2,
"attack_power_cof": 60
},
27820: {
"skill_class": PhysicalDotDamage,
"skill_name": "斩浪破锋(DOT)",
"damage_base": 25,
"attack_power_cof": 500,
"interval": 48
},
36851: {
"skill_class": DotSkill,
"skill_name": "斩浪破锋",
"bind_skill": 27820,
"max_stack": 3,
"tick": 6
}
}
for skill_id, detail in SKILLS.items():
SKILLS[skill_id] = detail.pop('skill_class')(skill_id)
for attr, value in detail.items():
setattr(SKILLS[skill_id], attr, value)
for skill_id, skill in GENERAL_SKILLS.items():
SKILLS[skill_id] = skill