完成老杨姬子青雀伤害计算 (#73)

* 完成老杨姬子青雀伤害计算

* 🚨 `pre-commit-ci`修复格式错误

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
季落 2023-09-09 11:11:25 +08:00 committed by GitHub
parent 94ce5f64a1
commit 331f828a46
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 367 additions and 4 deletions

View File

@ -100,6 +100,9 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str):
1208, 1208,
1104, 1104,
1209, 1209,
1004,
1003,
1201,
]: ]:
skill_list = skill_dict[str(char.char_id)]['skilllist'] skill_list = skill_dict[str(char.char_id)]['skilllist']
damage_len = len(skill_list) damage_len = len(skill_list)
@ -749,6 +752,9 @@ async def cal(char_data: Dict):
1208, 1208,
1104, 1104,
1209, 1209,
1004,
1003,
1201,
]: ]:
if char.char_id == 1213: if char.char_id == 1213:
for skill_type in [ for skill_type in [
@ -771,7 +777,7 @@ async def cal(char_data: Dict):
role = RoleInstance(char) role = RoleInstance(char)
im_tmp = await role.cal_damage(skill_type) im_tmp = await role.cal_damage(skill_type)
skill_info_list.append(im_tmp) skill_info_list.append(im_tmp)
elif char.char_id == 1205: elif char.char_id in [1205, 1201]:
for skill_type in ['Normal', 'Normal1', 'Ultra']: for skill_type in ['Normal', 'Normal1', 'Ultra']:
role = RoleInstance(char) role = RoleInstance(char)
im_tmp = await role.cal_damage(skill_type) im_tmp = await role.cal_damage(skill_type)
@ -781,7 +787,7 @@ async def cal(char_data: Dict):
role = RoleInstance(char) role = RoleInstance(char)
im_tmp = await role.cal_damage(skill_type) im_tmp = await role.cal_damage(skill_type)
skill_info_list.append(im_tmp) skill_info_list.append(im_tmp)
if char.char_id in [1204, 1107, 1005, 1205, 1209]: if char.char_id in [1204, 1107, 1005, 1205, 1209, 1003]:
role = RoleInstance(char) role = RoleInstance(char)
im_tmp = await role.cal_damage('Talent') im_tmp = await role.cal_damage('Talent')
skill_info_list.append(im_tmp) skill_info_list.append(im_tmp)

View File

@ -207,7 +207,7 @@ class Blade(BaseAvatar):
self.eidolon_attribute['CriticalChanceBase'] = mp.mpf(0.15) self.eidolon_attribute['CriticalChanceBase'] = mp.mpf(0.15)
if self.avatar_rank >= 4: if self.avatar_rank >= 4:
self.extra_ability_attribute['HPAddedRatio'] = mp.mpf(0.4) self.eidolon_attribute['HPAddedRatio'] = mp.mpf(0.4)
def extra_ability(self): def extra_ability(self):
logger.info('额外能力') logger.info('额外能力')
@ -295,11 +295,103 @@ class Yanqing(BaseAvatar):
] = critical_chance_base + mp.mpf(0.6) ] = critical_chance_base + mp.mpf(0.6)
class Welt(BaseAvatar):
Buff: BaseAvatarBuff
def __init__(
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
):
super().__init__(char=char, skills=skills)
self.eidolon_attribute = {}
self.extra_ability_attribute = {}
self.eidolons()
self.extra_ability()
def Technique(self):
pass
def eidolons(self):
pass
def extra_ability(self):
logger.info('额外能力')
logger.info('施放终结技时有100%基础概率使目标受到的伤害提高12%持续2回合。')
logger.info('对被弱点击破的敌方目标造成的伤害提高20')
self.extra_ability_attribute['AllDamageAddedRatio'] = mp.mpf(0.32)
class Himeko(BaseAvatar):
Buff: BaseAvatarBuff
def __init__(
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
):
super().__init__(char=char, skills=skills)
self.eidolon_attribute = {}
self.extra_ability_attribute = {}
self.eidolons()
self.extra_ability()
def Technique(self):
pass
def eidolons(self):
if self.avatar_rank >= 1:
self.eidolon_attribute['SpeedAddedRatio'] = mp.mpf(0.1)
if self.avatar_rank >= 2:
self.eidolon_attribute['AllDamageAddedRatio'] = mp.mpf(0.15)
def extra_ability(self):
logger.info('额外能力')
logger.info('战技对灼烧状态下的敌方目标造成的伤害提高20%')
self.extra_ability_attribute['BPSkillDmgAdd'] = mp.mpf(0.2)
logger.info('若当前生命值百分比大于等于80%则暴击率提高15%')
self.extra_ability_attribute['CriticalChanceBase'] = mp.mpf(0.15)
class Qingque(BaseAvatar):
Buff: BaseAvatarBuff
def __init__(
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
):
super().__init__(char=char, skills=skills)
self.eidolon_attribute = {}
self.extra_ability_attribute = {}
self.eidolons()
self.extra_ability()
def Technique(self):
pass
def eidolons(self):
if self.avatar_rank >= 1:
self.eidolon_attribute['UltraDmgAdd'] = mp.mpf(0.1)
def extra_ability(self):
logger.info('额外能力')
logger.info('施放强化普攻后青雀的速度提高10%持续1回合。')
self.extra_ability_attribute['SpeedAddedRatio'] = mp.mpf(0.1)
logger.info('默认4层战技加伤害')
all_damage_added_ratio = self.BPSkill() + mp.mpf(0.1)
self.extra_ability_attribute['AllDamageAddedRatio'] = (
all_damage_added_ratio * 4
)
logger.info('默认暗杠加攻')
self.extra_ability_attribute['AttackAddedRatio'] = self.Talent()
class Avatar: class Avatar:
@classmethod @classmethod
def create( def create(
cls, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] cls, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
): ):
if char.id_ == 1201:
return Qingque(char, skills)
if char.id_ == 1003:
return Himeko(char, skills)
if char.id_ == 1004:
return Welt(char, skills)
if char.id_ == 1209: if char.id_ == 1209:
return Yanqing(char, skills) return Yanqing(char, skills)
if char.id_ == 1104: if char.id_ == 1104:

View File

@ -989,5 +989,239 @@
"Ultra": ["attack","终结技", 1], "Ultra": ["attack","终结技", 1],
"Talent": ["attack","附加伤害", 1] "Talent": ["attack","附加伤害", 1]
} }
},
"1004": {
"Normal": [
0.5000000004656613,
0.6000000005587935,
0.7000000006519258,
0.8000000007450581,
0.9000000008381903,
1.0000000000931323,
1.1000000001862645,
1.2000000002793968
],
"BPSkill": [
1.0800000000931323,
1.1880000001955777,
1.2960000002980232,
1.4040000004004687,
1.5120000005029142,
1.6200000006053597,
1.7550000005587935,
1.8900000005122274,
2.0550000002328306,
2.1600000001862645,
2.26800000028871,
2.3760000003911555,
2.484000000493601,
2.5920000005960464,
2.700000000698492
],
"Ultra": [
0.9000000005122274,
0.9600000006705523,
1.020000000828877,
1.0800000000558794,
1.140000000214204,
1.200000000372529,
1.275000000745058,
1.350000000419095,
1.424999999860302,
1.500000000232831,
1.5600000003911555,
1.62000000054948,
1.680000000707805,
1.74000000086613,
1.800000000093132
],
"Talent": [
0.30000000037252903,
0.33000000040978193,
0.36000000044703484,
0.3900000004842877,
0.4200000005215406,
0.4500000005587935,
0.4875000006053597,
0.525000006519258,
0.5625000006984919,
0.6000000007450581,
0.63000000782311,
0.6600000008195639,
0.6900000008568168,
0.7200000008940697,
0.7500000008940697
],
"Maze": [
20
],
"Ultra_Use": [
120
],
"skilllist": {
"Normal": ["attack","普攻", 1],
"BPSkill": ["attack","战技", 3],
"Ultra": ["attack","终结技", 1]
}
},
"1003": {
"Normal": [
0.5000000004656613,
0.6000000005587935,
0.7000000006519258,
0.8000000007450581,
0.9000000008381903,
1.0000000000931323,
1.1000000001862645,
1.2000000002793968
],
"BPSkill": [
1.0000000000931323,
1.1000000001955777,
1.2000000002980232,
1.3000000004004687,
1.4000000005029142,
1.5000000006053597,
1.6250000005587935,
1.7500000005122274,
1.8750000002328306,
2.0000000001862645,
2.10000000028871,
2.2000000003911555,
2.300000000493601,
2.4000000005960464,
2.500000000698492
],
"Ultra": [
1.3800000005122274,
1.4720000006705523,
1.564000000828877,
1.6560000000558794,
1.748000000214204,
1.840000000372529,
1.955000000745058,
2.070000000419095,
2.185000000860302,
2.300000000232831,
2.3920000003911555,
2.48400000054948,
2.596000000707805,
2.66800000086613,
2.76000000093132
],
"Talent": [
0.70000000037252903,
0.77000000040978193,
0.84000000044703484,
0.9100000004842877,
0.9800000005215406,
1.0500000005587935,
1.1375000006053597,
1.225000006519258,
1.312500006984919,
1.4000000007450581,
1.47000000782311,
1.5400000008195639,
1.6100000008568168,
1.6800000008940697,
1.7500000008940697
],
"Maze": [
20
],
"Ultra_Use": [
120
],
"skilllist": {
"Normal": ["attack","普攻", 1],
"BPSkill": ["attack","战技", 3],
"Ultra": ["attack","终结技", 1],
"Talent": ["attack","追加攻击", 1]
}
},
"1201": {
"Normal": [
0.5000000004656613,
0.6000000005587935,
0.7000000006519258,
0.8000000007450581,
0.9000000008381903,
1.0000000000931323,
1.1000000001862645,
1.2000000002793968
],
"Normal1": [
1.2000000000931323,
1.4400000001955777,
1.6800000002980232,
1.9200000004004687,
2.1600000005029142,
2.4000000006053597,
2.6450000005587935,
2.8800000005122274,
3.1200000002328306
],
"BPSkill": [
0.14000000037252903,
0.15400000040978193,
0.16800000044703484,
0.1820000004842877,
0.1960000005215406,
0.2100000005587935,
0.2275000006053597,
0.2450000006519258,
0.2625000006984919,
0.2800000007450581,
0.294000000782311,
0.3080000008195639,
0.3220000008568168,
0.3360000008940697,
0.3500000008940697
],
"Ultra": [
1.2000000005122274,
1.2800000006705523,
1.360000000828877,
1.440000000558794,
1.520000000214204,
1.600000000372529,
1.700000000745058,
1.800000000419095,
1.900000000860302,
2.000000000232831,
2.0800000003911555,
2.16000000054948,
2.240000000707805,
2.32000000086613,
2.40000000093132
],
"Talent": [
0.36000000037252903,
0.39600000040978193,
0.43200000044703484,
0.4680000004842877,
0.5040000005215406,
0.5400000005587935,
0.5850000006053597,
0.6300000006519258,
0.6750000006984919,
0.7200000007450581,
0.756000000782311,
0.7920000008195639,
0.8280000008568168,
0.8640000008940697,
0.9000000008940697
],
"Maze": [
20
],
"Ultra_Use": [
140
],
"skilllist": {
"Normal": ["attack","普攻", 1],
"Normal1": ["attack","杠上开花!", 1],
"Ultra": ["attack","终结技", 1]
}
} }
} }

View File

@ -133,8 +133,18 @@ class RoleInstance:
skill_info = self.avatar.Skill_Info(skill_type) skill_info = self.avatar.Skill_Info(skill_type)
if skill_type == 'Normal': if skill_type == 'Normal':
skill_multiplier = self.avatar.Normal() skill_multiplier = self.avatar.Normal()
if (
self.raw_data.avatar.id_ == 1004
and self.raw_data.avatar.rank >= 1
):
skill_multiplier = skill_multiplier + (skill_multiplier * 0.5)
elif skill_type == 'BPSkill': elif skill_type == 'BPSkill':
skill_multiplier = self.avatar.BPSkill() skill_multiplier = self.avatar.BPSkill()
if (
self.raw_data.avatar.id_ == 1004
and self.raw_data.avatar.rank >= 1
):
skill_multiplier = skill_multiplier + (skill_multiplier * 0.8)
elif skill_type == 'Ultra': elif skill_type == 'Ultra':
if self.raw_data.avatar.id_ == 1107: if self.raw_data.avatar.id_ == 1107:
skill_multiplier = self.avatar.Talent() + self.avatar.Ultra() skill_multiplier = self.avatar.Talent() + self.avatar.Ultra()
@ -153,7 +163,7 @@ class RoleInstance:
else: else:
skill_multiplier = skill_multiplier + 0.3 skill_multiplier = skill_multiplier + 0.3
else: else:
if self.raw_data.avatar.id_ == 1213: if self.raw_data.avatar.id_ in [1213, 1201]:
skill_multiplier = self.avatar.Normalnum(skill_type) skill_multiplier = self.avatar.Normalnum(skill_type)
skill_type = 'Normal' skill_type = 'Normal'
elif self.raw_data.avatar.id_ == 1005: elif self.raw_data.avatar.id_ == 1005:
@ -237,6 +247,19 @@ class RoleInstance:
if skill_info[0] == 'attack': if skill_info[0] == 'attack':
skill_multiplier = skill_multiplier / skill_info[2] skill_multiplier = skill_multiplier / skill_info[2]
logger.info(f'技能区单段: {skill_multiplier}') logger.info(f'技能区单段: {skill_multiplier}')
if self.raw_data.avatar.id_ == 1004:
if self.raw_data.avatar.rank >= 6 and skill_type == 'BPSkill':
skill_info[2] = skill_info[2] + 1
multiplier_add = self.avatar.Talent()
skill_multiplier = skill_multiplier + multiplier_add
if (
self.raw_data.avatar.id_ == 1201
and self.raw_data.avatar.rank >= 4
and skill_type == 'Normal'
):
skill_info[2] = skill_info[2] + 1
attack = merged_attr['attack'] attack = merged_attr['attack']
if self.raw_data.avatar.id_ == 1104: if self.raw_data.avatar.id_ == 1104:
# 杰帕德天赋加攻 # 杰帕德天赋加攻
@ -479,6 +502,14 @@ class RoleInstance:
damage_tz_z += damage_tz damage_tz_z += damage_tz
if (
self.raw_data.avatar.id_ == 1003
and self.raw_data.avatar.rank >= 6
):
damage_cd_z = damage_cd_z * 1.8
damage_qw_z = damage_qw_z * 1.8
damage_tz_z = damage_tz_z * 1.8
if self.avatar.avatar_element == 'Thunder': if self.avatar.avatar_element == 'Thunder':
element_area = 0 element_area = 0
damage_tz_fj = ( damage_tz_fj = (