完成桂乃芬计算伤害计算部分重构v1.1

This commit is contained in:
a376148946 2023-10-02 13:03:38 +08:00 committed by qwerdvd
parent 9d3415d9df
commit 36a68e6057
9 changed files with 227 additions and 274 deletions

View File

@ -1,8 +1,12 @@
from typing import Dict, List, Union import json
from pathlib import Path
from typing import Dict, List, Union
from .effect.Role import RoleInstance from .effect.Role import RoleInstance
from .mono.Character import Character from .mono.Character import Character
Excel_path = Path(__file__).parent / 'effect'
with Path.open(Excel_path / 'Excel' / 'SkillData.json', encoding='utf-8') as f:
skill_dict = json.load(f)
async def cal_char_info(char_data: Dict): async def cal_char_info(char_data: Dict):
char: Character = Character(char_data) char: Character = Character(char_data)
@ -16,67 +20,13 @@ async def cal(char_data: Dict):
char = await cal_char_info(char_data) char = await cal_char_info(char_data)
skill_info_list: List[List[Union[str, float]]] = [] skill_info_list: List[List[Union[str, float]]] = []
if char.char_id in [ if str(char.char_id) in skill_dict:
1102, skill_list = skill_dict[str(char.char_id)]['skillList']
1204, skill_list = skill_list.keys()
1107, print(skill_list)
1213, for skill_type in skill_list:
1006,
1005,
1205,
1208,
1104,
1209,
1004,
1003,
1201,
1212,
1112,
]:
if char.char_id == 1213:
for skill_type in [
'Normal',
'Normal1',
'Normal2',
'Normal3',
'Ultra',
]:
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 == 1005:
for skill_type in ['Normal', 'BPSkill', 'Ultra', 'DOT']:
role = RoleInstance(char)
im_tmp = await role.cal_damage(skill_type)
skill_info_list.append(im_tmp)
elif char.char_id == 1112:
for skill_type in ['Normal', 'BPSkill', 'Talent1']:
role = RoleInstance(char)
im_tmp = await role.cal_damage(skill_type)
skill_info_list.append(im_tmp)
elif char.char_id == 1212:
for skill_type in ['Normal', 'BPSkill', 'BPSkill1', 'Ultra']:
role = RoleInstance(char)
im_tmp = await role.cal_damage(skill_type)
skill_info_list.append(im_tmp)
elif char.char_id == 1208:
for skill_type in ['Normal', 'Ultra']:
role = RoleInstance(char)
im_tmp = await role.cal_damage(skill_type)
skill_info_list.append(im_tmp)
elif char.char_id in [1205, 1201]:
for skill_type in ['Normal', 'Normal1', 'Ultra']:
role = RoleInstance(char)
im_tmp = await role.cal_damage(skill_type)
skill_info_list.append(im_tmp)
else:
for skill_type in ['Normal', 'BPSkill', 'Ultra']:
role = RoleInstance(char)
im_tmp = await role.cal_damage(skill_type)
skill_info_list.append(im_tmp)
if char.char_id in [1204, 1107, 1005, 1205, 1209, 1003]:
role = RoleInstance(char)
im_tmp = await role.cal_damage('Talent')
skill_info_list.append(im_tmp)
return skill_info_list return skill_info_list
return '角色伤害计算未完成' return '角色伤害计算未完成'

View File

@ -46,16 +46,7 @@ TEXT_PATH = Path(__file__).parent / 'texture2D'
bg_img = Image.open(TEXT_PATH / 'bg.png') bg_img = Image.open(TEXT_PATH / 'bg.png')
white_color = (213, 213, 213) white_color = (213, 213, 213)
NUM_MAP = { NUM_MAP = {0: '', 1: '', 2: '', 3: '', 4: '', 5: '', 6: '', 7: ''}
0: '',
1: '',
2: '',
3: '',
4: '',
5: '',
6: '',
7: '',
}
RANK_MAP = { RANK_MAP = {
1: '_rank1.png', 1: '_rank1.png',
@ -99,23 +90,7 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str):
return char_data return char_data
char = await cal_char_info(char_data) char = await cal_char_info(char_data)
damage_len = 0 damage_len = 0
if char.char_id in [ if str(char.char_id) in skill_dict:
1102,
1204,
1107,
1213,
1006,
1005,
1205,
1208,
1104,
1209,
1004,
1003,
1201,
1212,
1112,
]:
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)
bg_height = 0 bg_height = 0

View File

@ -87,6 +87,7 @@ class Clara(BaseAvatar):
def extra_ability(self): def extra_ability(self):
logger.info('额外能力') logger.info('额外能力')
logger.info('史瓦罗的反击造成的伤害提高30%') logger.info('史瓦罗的反击造成的伤害提高30%')
self.extra_ability_attribute['Talent1SkillAdd'] = self.Skill_num('Talent', 'Talent')
self.extra_ability_attribute['TalentDmgAdd'] = 0.3 self.extra_ability_attribute['TalentDmgAdd'] = 0.3
self.extra_ability_attribute['UltraDmgAdd'] = 0.3 self.extra_ability_attribute['UltraDmgAdd'] = 0.3
@ -138,6 +139,8 @@ class Silverwolf(BaseAvatar):
pass pass
def eidolons(self): def eidolons(self):
if self.avatar_rank >= 4:
self.extra_ability_attribute['UltraSkillAdd'] = 1
if self.avatar_rank >= 6: if self.avatar_rank >= 6:
self.extra_ability_attribute['AllDamageAddedRatio'] = 1 self.extra_ability_attribute['AllDamageAddedRatio'] = 1
@ -177,6 +180,8 @@ class Kafka(BaseAvatar):
self.extra_ability_attribute['DOTDmgAdd'] = 0.3 self.extra_ability_attribute['DOTDmgAdd'] = 0.3
if self.avatar_rank >= 2: if self.avatar_rank >= 2:
self.extra_ability_attribute['DOTDmgAdd'] = 0.55 self.extra_ability_attribute['DOTDmgAdd'] = 0.55
if self.avatar_rank >= 6:
self.extra_ability_attribute['DOTSkillAdd'] = 1.56
def extra_ability(self): def extra_ability(self):
pass pass
@ -198,6 +203,8 @@ class Blade(BaseAvatar):
pass pass
def eidolons(self): def eidolons(self):
if self.avatar_rank >= 1:
self.eidolon_attribute['UltraHpSkillAdd'] = 0.9
if self.avatar_rank >= 2: if self.avatar_rank >= 2:
self.eidolon_attribute['CriticalChanceBase'] = 0.15 self.eidolon_attribute['CriticalChanceBase'] = 0.15
@ -228,6 +235,8 @@ class Fuxuan(BaseAvatar):
def eidolons(self): def eidolons(self):
if self.avatar_rank >= 1: if self.avatar_rank >= 1:
self.eidolon_attribute['CriticalDamageBase'] = 0.3 self.eidolon_attribute['CriticalDamageBase'] = 0.3
if self.avatar_rank >= 6:
self.eidolon_attribute['UltraHpSkillAdd'] = 1.2
def extra_ability(self): def extra_ability(self):
logger.info('符玄战技【穷观阵】属性加成') logger.info('符玄战技【穷观阵】属性加成')
@ -277,6 +286,9 @@ class Yanqing(BaseAvatar):
pass pass
def eidolons(self): def eidolons(self):
self.eidolon_attribute['TalentSkillAdd'] = 0.3
if self.avatar_rank >= 1:
self.eidolon_attribute['TalentSkillAdd'] = 0.9
if self.avatar_rank >= 4: if self.avatar_rank >= 4:
self.eidolon_attribute['IceResistancePenetration'] = 0.15 self.eidolon_attribute['IceResistancePenetration'] = 0.15
@ -312,7 +324,9 @@ class Welt(BaseAvatar):
pass pass
def eidolons(self): def eidolons(self):
pass if self.avatar_rank >= 1:
self.eidolon_attribute['NormalSkillAdd'] = self.Skill_num('Normal', 'Normal') * 0.5
self.eidolon_attribute['BPSkillSkillAdd'] = self.Skill_num('BPSkill', 'BPSkill') * 0.8
def extra_ability(self): def extra_ability(self):
logger.info('额外能力') logger.info('额外能力')
@ -400,6 +414,8 @@ class Jingliu(BaseAvatar):
def eidolons(self): def eidolons(self):
if self.avatar_rank >= 1: if self.avatar_rank >= 1:
self.eidolon_attribute['CriticalDamageBase'] = 0.24 self.eidolon_attribute['CriticalDamageBase'] = 0.24
self.extra_ability_attribute['UltraSkillAdd'] = 1
self.extra_ability_attribute['BPSkill1SkillAdd'] = 1
if self.avatar_rank >= 2: if self.avatar_rank >= 2:
self.eidolon_attribute['BPSkill1DmgAdd'] = 0.8 self.eidolon_attribute['BPSkill1DmgAdd'] = 0.8
if self.avatar_rank >= 4: if self.avatar_rank >= 4:
@ -453,6 +469,7 @@ class Topaz(BaseAvatar):
self.eidolon_attribute['Talent1_FireResistancePenetration'] = 0.1 self.eidolon_attribute['Talent1_FireResistancePenetration'] = 0.1
def extra_ability(self): def extra_ability(self):
self.extra_ability_attribute['Talent1SkillAdd'] = self.Skill_num('Ultra', 'Talent1')
logger.info('额外能力') logger.info('额外能力')
logger.info('托帕和账账对拥有火属性弱点的敌方目标造成的伤害提高15%') logger.info('托帕和账账对拥有火属性弱点的敌方目标造成的伤害提高15%')
self.extra_ability_attribute['AllDamageAddedRatio'] = 0.15 self.extra_ability_attribute['AllDamageAddedRatio'] = 0.15
@ -465,6 +482,31 @@ class Topaz(BaseAvatar):
'BPSkill_add' 'BPSkill_add'
) )
class Guinaifen(BaseAvatar):
Buff: BaseAvatarBuff
def __init__(
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
):
super().__init__(char=char, skills=skills)
self.eidolon_attribute: Dict[str, float] = {}
self.extra_ability_attribute: Dict[str, float] = {}
self.eidolons()
self.extra_ability()
def Technique(self):
pass
def eidolons(self):
if self.avatar_rank >= 2:
self.eidolon_attribute['DOTSkillAdd'] = 0.4
def extra_ability(self):
self.extra_ability_attribute['AllDamageAddedRatio'] = 0.2
if self.avatar_rank >= 6:
self.extra_ability_attribute['DmgRatio'] = self.Talent_num('Talent') * 4
else:
self.extra_ability_attribute['DmgRatio'] = self.Talent_num('Talent') * 3
class Avatar: class Avatar:
@classmethod @classmethod
@ -501,4 +543,6 @@ class Avatar:
return JingYuan(char, skills) return JingYuan(char, skills)
if char.id_ == 1107: if char.id_ == 1107:
return Clara(char, skills) return Clara(char, skills)
if char.id_ == 1210:
return Guinaifen(char, skills)
raise Exception('不支持的角色') raise Exception('不支持的角色')

View File

@ -110,6 +110,18 @@ class BaseAvatar:
skill_info = skill_dict[str(self.avatar_id)]['skillList'][skill_type] skill_info = skill_dict[str(self.avatar_id)]['skillList'][skill_type]
return msgspec.convert(skill_info, type=List[Union[str, int]]) return msgspec.convert(skill_info, type=List[Union[str, int]])
def Skill_num(self, skill: str, skill_type: str):
if skill == 'Normal':
skill_level = self.Skill.Normal_.level - 1
if skill == 'BPSkill':
skill_level = self.Skill.BPSkill_.level - 1
if skill == 'Ultra':
skill_level = self.Skill.Ultra_.level - 1
if skill == 'Talent':
skill_level = self.Skill.Talent_.level - 1
skill_info = skill_dict[str(self.avatar_id)][skill_type][skill_level]
return msgspec.convert(skill_info, type=float)
def Normalnum(self, skill_type: str): def Normalnum(self, skill_type: str):
skill_info = skill_dict[str(self.avatar_id)][skill_type][ skill_info = skill_dict[str(self.avatar_id)][skill_type][
self.Skill.Normal_.level - 1 self.Skill.Normal_.level - 1

View File

@ -78,16 +78,12 @@ class BaseRelicSetSkill:
set_property = status_add.Property set_property = status_add.Property
set_value = status_add.Value set_value = status_add.Value
if set_property != '': if set_property != '':
relic_set_attribute[set_property] = ( relic_set_attribute[set_property] = relic_set_attribute.get(set_property, 0) + set_value
relic_set_attribute.get(set_property, 0) + set_value
)
if self.pieces4: if self.pieces4:
status_add = RelicSetSkill.RelicSet[str(self.setId)]['4'] status_add = RelicSetSkill.RelicSet[str(self.setId)]['4']
if status_add: if status_add:
set_property = status_add.Property set_property = status_add.Property
set_value = status_add.Value set_value = status_add.Value
if set_property != '': if set_property != '':
relic_set_attribute[set_property] = ( relic_set_attribute[set_property] = relic_set_attribute.get(set_property, 0) + set_value
relic_set_attribute.get(set_property, 0) + set_value
)
return relic_set_attribute return relic_set_attribute

View File

@ -29,9 +29,9 @@
"Maze": [20], "Maze": [20],
"Ultra_Use": [120], "Ultra_Use": [120],
"skillList": { "skillList": {
"Normal": ["attack", "普攻", 1, "Normal"], "Normal": ["attack", "普攻", 1, "Normal", "Normal"],
"BPSkill": ["attack", "战技", 1, "BPSkill"], "BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"],
"Ultra": ["attack", "终结技", 1, "Ultra"] "Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"]
} }
}, },
"1204": { "1204": {
@ -66,10 +66,10 @@
"Maze": [20], "Maze": [20],
"Ultra_Use": [130], "Ultra_Use": [130],
"skillList": { "skillList": {
"Normal": ["attack", "普攻", 1, "Normal"], "Normal": ["attack", "普攻", 1, "Normal", "Normal"],
"BPSkill": ["attack", "战技", 1, "BPSkill"], "BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"],
"Ultra": ["attack", "终结技", 1, "Ultra"], "Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"],
"Talent": ["attack", "10层神君", 1, "Talent"] "Talent": ["attack", "10层神君", 1, "Talent", "Talent"]
} }
}, },
"1107": { "1107": {
@ -86,7 +86,7 @@
1.3200000001862645, 1.3800000001862645, 1.4400000002793968, 1.3200000001862645, 1.3800000001862645, 1.4400000002793968,
1.5000000002793968 1.5000000002793968
], ],
"Ultra": [ "Talent1": [
0.9600000002793968, 1.0240000002793968, 1.0880000002793968, 0.9600000002793968, 1.0240000002793968, 1.0880000002793968,
1.1520000002793968, 1.2160000002793968, 1.2800000002793968, 1.1520000002793968, 1.2160000002793968, 1.2800000002793968,
1.3600000002793968, 1.4400000002793968, 1.5200000002793968, 1.3600000002793968, 1.4400000002793968, 1.5200000002793968,
@ -103,10 +103,10 @@
"Maze": [20], "Maze": [20],
"Ultra_Use": [130], "Ultra_Use": [130],
"skillList": { "skillList": {
"Normal": ["attack", "普攻", 1, "Normal"], "Normal": ["attack", "普攻", 1, "Normal", "Normal"],
"BPSkill": ["attack", "战技", 1, "BPSkill"], "BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"],
"Ultra": ["attack", "强化反击", 1, "Ultra"], "Talent": ["attack", "反击", 1, "Talent", "Talent"],
"Talent": ["attack", "反击", 1, "Talent"] "Talent1": ["attack", "强化反击", 1, "Talent", "Ultra"]
} }
}, },
"1213": { "1213": {
@ -155,11 +155,11 @@
"Maze": [20], "Maze": [20],
"Ultra_Use": [140], "Ultra_Use": [140],
"skillList": { "skillList": {
"Normal": ["attack", "普攻", 2, "Normal"], "Normal": ["attack", "普攻", 2, "Normal", "Normal"],
"Normal1": ["attack", "瞬华", 3, "Normal1"], "Normal1": ["attack", "瞬华", 3, "Normal", "Normal"],
"Normal2": ["attack", "天矢阴", 5, "Normal2"], "Normal2": ["attack", "天矢阴", 5, "Normal", "Normal"],
"Normal3": ["attack", "盘拏耀跃", 7, "Normal3"], "Normal3": ["attack", "盘拏耀跃", 7, "Normal", "Normal"],
"Ultra": ["attack", "终结技", 3, "Ultra"] "Ultra": ["attack", "终结技", 3, "Ultra", "Ultra"]
} }
}, },
"1006": { "1006": {
@ -206,9 +206,9 @@
"Maze": [20], "Maze": [20],
"Ultra_Use": [110], "Ultra_Use": [110],
"skillList": { "skillList": {
"Normal": ["attack", "普攻", 1, "Normal"], "Normal": ["attack", "普攻", 1, "Normal", "Normal"],
"BPSkill": ["attack", "战技", 1, "BPSkill"], "BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"],
"Ultra": ["attack", "终结技", 1, "Ultra"] "Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"]
} }
}, },
"1005": { "1005": {
@ -248,11 +248,11 @@
"Maze": [20], "Maze": [20],
"Ultra_Use": [110], "Ultra_Use": [110],
"skillList": { "skillList": {
"Normal": ["attack", "普攻", 1, "Normal"], "Normal": ["attack", "普攻", 1, "Normal", "Normal"],
"BPSkill": ["attack", "战技", 1, "BPSkill"], "BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"],
"Ultra": ["attack", "终结技", 1, "Ultra"], "Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"],
"DOT": ["attack", "单次持续伤害", 1, "DOT"], "DOT": ["attack", "单次持续伤害", 1, "DOT", "Ultra"],
"Talent": ["attack", "追加攻击", 1, "Talent"] "Talent": ["attack", "追加攻击", 1, "Talent", "Talent"]
} }
}, },
"1205": { "1205": {
@ -309,10 +309,10 @@
"Maze": [20], "Maze": [20],
"Ultra_Use": [110], "Ultra_Use": [110],
"skillList": { "skillList": {
"Normal": ["attack", "普攻", 1, "Normal"], "Normal": ["attack", "普攻", 1, "Normal", "Normal"],
"Normal1": ["attack", "无间剑树", 1, "Normal1"], "Normal1": ["attack", "无间剑树", 1, "Normal", "Normal"],
"Ultra": ["attack", "终结技", 1, "Ultra"], "Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"],
"Talent": ["attack", "追加攻击", 1, "Talent"] "Talent": ["attack", "追加攻击", 1, "Talent", "Talent"]
} }
}, },
"1208": { "1208": {
@ -354,8 +354,8 @@
"Maze": [20], "Maze": [20],
"Ultra_Use": [135], "Ultra_Use": [135],
"skillList": { "skillList": {
"Normal": ["attack", "普攻", 1, "Normal"], "Normal": ["attack", "普攻", 1, "Normal", "Normal"],
"Ultra": ["attack", "终结技", 1, "Ultra"] "Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"]
} }
}, },
"1104": { "1104": {
@ -385,9 +385,9 @@
"Maze": [20], "Maze": [20],
"Ultra_Use": [110], "Ultra_Use": [110],
"skillList": { "skillList": {
"Normal": ["attack", "普攻", 1, "Normal"], "Normal": ["attack", "普攻", 1, "Normal", "Normal"],
"BPSkill": ["attack", "战技", 1, "BPSkill"], "BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"],
"Ultra": ["defence", "终结技(护盾)", 1, "Ultra"] "Ultra": ["defence", "终结技(护盾)", 1, "Ultra", "Ultra"]
} }
}, },
"1209": { "1209": {
@ -441,10 +441,10 @@
"Maze": [20], "Maze": [20],
"Ultra_Use": [120], "Ultra_Use": [120],
"skillList": { "skillList": {
"Normal": ["attack", "普攻", 1, "Normal"], "Normal": ["attack", "普攻", 1, "Normal", "Normal"],
"BPSkill": ["attack", "战技", 1, "BPSkill"], "BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"],
"Ultra": ["attack", "终结技", 1, "Ultra"], "Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"],
"Talent": ["attack", "附加伤害", 1, "Talent"] "Talent": ["attack", "附加伤害", 1, "Talent", "Talent"]
} }
}, },
"1004": { "1004": {
@ -477,9 +477,9 @@
"Maze": [20], "Maze": [20],
"Ultra_Use": [120], "Ultra_Use": [120],
"skillList": { "skillList": {
"Normal": ["attack", "普攻", 1, "Normal"], "Normal": ["attack", "普攻", 1, "Normal", "Normal"],
"BPSkill": ["attack", "战技", 3, "BPSkill"], "BPSkill": ["attack", "战技", 3, "BPSkill", "BPSkill"],
"Ultra": ["attack", "终结技", 1, "Ultra"] "Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"]
} }
}, },
"1003": { "1003": {
@ -512,10 +512,10 @@
"Maze": [20], "Maze": [20],
"Ultra_Use": [120], "Ultra_Use": [120],
"skillList": { "skillList": {
"Normal": ["attack", "普攻", 1, "Normal"], "Normal": ["attack", "普攻", 1, "Normal", "Normal"],
"BPSkill": ["attack", "战技", 1, "BPSkill"], "BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"],
"Ultra": ["attack", "终结技", 1, "Ultra"], "Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"],
"Talent": ["attack", "追加攻击", 1, "Talent"] "Talent": ["attack", "追加攻击", 1, "Talent", "Talent"]
} }
}, },
"1201": { "1201": {
@ -553,9 +553,9 @@
"Maze": [20], "Maze": [20],
"Ultra_Use": [140], "Ultra_Use": [140],
"skillList": { "skillList": {
"Normal": ["attack", "普攻", 1, "Normal"], "Normal": ["attack", "普攻", 1, "Normal", "Normal"],
"Normal1": ["attack", "杠上开花!", 1, "Normal1"], "Normal1": ["attack", "杠上开花!", 1, "Normal", "Normal"],
"Ultra": ["attack", "终结技", 1, "Ultra"] "Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"]
} }
}, },
"1212": { "1212": {
@ -572,11 +572,11 @@
2.300000000707805, 2.40000000086613, 2.50000000093132 2.300000000707805, 2.40000000086613, 2.50000000093132
], ],
"BPSkill1": [ "BPSkill1": [
1.2000000005122274, 1.3200000006705523, 1.440000000828877, 1.2500000005122274, 1.3750000006705523, 1.500000000828877,
1.560000000558794, 1.680000000214204, 1.800000000372529, 1.625000000558794, 1.750000000214204, 1.875000000372529,
1.950000000745058, 2.100000000419095, 2.250000000860302, 0.031250000745058, 2.187500000419095, 2.343750000860302,
2.400000000232831, 2.5200000003911555, 2.64000000054948, 2.500000000232831, 2.6250000003911555, 2.75000000054948,
2.760000000707805, 2.88000000086613, 3.00000000093132 2.875000000707805, 3.00000000086613, 3.12500000093132
], ],
"Ultra": [ "Ultra": [
1.8000000005122274, 1.9200000006705523, 2.040000000828877, 1.8000000005122274, 1.9200000006705523, 2.040000000828877,
@ -602,10 +602,10 @@
"Maze": [20], "Maze": [20],
"Ultra_Use": [140], "Ultra_Use": [140],
"skillList": { "skillList": {
"Normal": ["attack", "普攻", 1, "Normal"], "Normal": ["attack", "普攻", 1, "Normal", "Normal"],
"BPSkill": ["attack", "战技", 1, "BPSkill"], "BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"],
"BPSkill1": ["attack", "寒川映月", 1, "BPSkill1"], "BPSkill1": ["attack", "寒川映月", 1, "BPSkill", "BPSkill"],
"Ultra": ["attack", "终结技", 1, "Ultra"] "Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"]
} }
}, },
"1112": { "1112": {
@ -645,9 +645,52 @@
"Maze": [20], "Maze": [20],
"Ultra_Use": [140], "Ultra_Use": [140],
"skillList": { "skillList": {
"Normal": ["attack", "普攻", 1, "Talent"], "Normal": ["attack", "普攻", 1, "Talent", "Normal"],
"BPSkill": ["attack", "账账", 1, "Talent"], "BPSkill": ["attack", "账账", 1, "Talent", "BPSkill"],
"Talent1": ["attack", "强化账账", 1, "Talent1"] "Talent1": ["attack", "强化账账", 1, "Talent", "Talent"]
}
},
"1210": {
"Normal": [
0.5000000004656613, 0.6000000005587935, 0.7000000006519258,
0.8000000007450581, 0.9000000008381903, 1.0000000000931323,
1.1000000000931323, 1.2000000001862645, 1.3000000002793968
],
"BPSkill": [
0.6000000005587935, 0.6600000006146729, 0.7200000006705523,
0.7800000007264316, 0.840000000782311, 0.9000000008381903,
0.9750000005587935, 1.0500000000465661, 1.1249999997671694,
1.2000000001862645, 1.2600000002421439, 1.3200000002980232,
1.3800000003539026, 1.440000000409782, 1.5000000004656613
],
"DOT": [
0.8390400004573166, 0.9229800018947572, 1.0069200003053993,
1.0908600010443479, 1.1748000003863126, 1.3007100007962435,
1.4685900008771569, 1.6784400006290525, 1.9302600014489144,
2.182080000638962, 2.2912020003423095, 2.400324000744149,
2.5094460004474968, 2.6185680008493364, 2.727690001251176
],
"Ultra": [
0.7200000006705523, 0.7680000001564622, 0.8160000003408641,
0.8640000005252659, 0.9120000007096678, 0.9600000008940697,
1.0200000000186265, 1.0800000000745058, 1.1400000001303852,
1.2000000001862645, 1.2479999996721745, 1.2959999998565763,
1.3440000000409782, 1.39200000022538, 1.440000000409782
],
"Talent": [
0.0400000000372529, 0.04299999983049929, 0.04599999962374568,
0.04899999941699207, 0.05199999990873039, 0.054999999701976776,
0.058750000316649675, 0.06250000023283064, 0.06625000014901161,
0.07000000006519258, 0.07299999985843897, 0.07599999965168536,
0.07899999944493175, 0.08199999993667006, 0.08499999972991645
],
"Maze": [20],
"Ultra_Use": [140],
"skillList": {
"Normal": ["attack", "普攻", 1, "Normal", "Normal"],
"BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"],
"Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"],
"DOT": ["attack", "每段灼烧", 1, "DOT", "BPSkill"]
} }
} }
} }

View File

@ -1,5 +1,6 @@
from typing import List, Union from typing import List, Union
import json
from pathlib import Path
from gsuid_core.logger import logger from gsuid_core.logger import logger
from .Avatar.Avatar import Avatar from .Avatar.Avatar import Avatar
@ -9,7 +10,9 @@ from ..mono.Character import Character
from .Base.model import DamageInstance from .Base.model import DamageInstance
from .Relic.Relic import RelicSet, SingleRelic from .Relic.Relic import RelicSet, SingleRelic
Excel_path = Path(__file__).parent
with Path.open(Excel_path / 'Excel' / 'SkillData.json', encoding='utf-8') as f:
skill_dict = json.load(f)
class RoleInstance: class RoleInstance:
def __init__(self, raw_data: Character): def __init__(self, raw_data: Character):
self.raw_data = DamageInstance(raw_data) self.raw_data = DamageInstance(raw_data)
@ -122,56 +125,16 @@ class RoleInstance:
logger.info(skill_type) logger.info(skill_type)
# 技能区 # 技能区
skill_info = self.avatar.Skill_Info(skill_type) skill_info = self.avatar.Skill_Info(skill_type)
if skill_type == 'Normal': skill_multiplier = self.avatar.Skill_num(skill_info[4], skill_type)
skill_multiplier = self.avatar.Normal() # 检查是否有对某一个技能的倍率加成
if ( for attr in self.attribute_bonus:
self.raw_data.avatar.id_ == 1004 if attr.__contains__('SkillAdd'):
and self.raw_data.avatar.rank >= 1 skill_name = attr.split('SkillAdd')[0]
): if skill_name in (skill_type, skill_info[3]):
skill_multiplier = skill_multiplier + (skill_multiplier * 0.5) logger.info(
elif skill_type == 'BPSkill': f'{skill_name}{skill_type}{self.attribute_bonus[attr]}倍率加成'
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':
if self.raw_data.avatar.id_ == 1107:
skill_multiplier = self.avatar.Talent() + self.avatar.Ultra()
elif (
self.raw_data.avatar.id_ == 1006
and self.raw_data.avatar.rank >= 4
):
skill_multiplier = self.avatar.Ultra() + 1
else:
skill_multiplier = self.avatar.Ultra()
elif skill_type == 'Talent':
skill_multiplier = self.avatar.Talent()
if self.raw_data.avatar.id_ == 1209:
if self.raw_data.avatar.rank >= 1:
skill_multiplier = skill_multiplier + 0.9
else:
skill_multiplier = skill_multiplier + 0.3
elif self.raw_data.avatar.id_ in [1213, 1201]:
skill_multiplier = self.avatar.Normalnum(skill_type)
skill_type = 'Normal'
elif self.raw_data.avatar.id_ == 1005:
skill_multiplier = self.avatar.Ultra_num(skill_type)
if self.raw_data.avatar.rank >= 6:
skill_multiplier = skill_multiplier + 1.56
elif self.raw_data.avatar.id_ == 1205:
skill_multiplier = self.avatar.Normalnum(skill_type)
elif self.raw_data.avatar.id_ == 1212:
skill_multiplier = self.avatar.BPSkill_num(skill_type)
skill_type = 'BPSkill'
elif self.raw_data.avatar.id_ == 1112:
skill_multiplier = (
self.avatar.Ultra_num(skill_type) + self.avatar.BPSkill()
) )
skill_type = 'Talent' skill_multiplier = skill_multiplier + self.attribute_bonus[attr]
else:
raise Exception('skill type error')
logger.info(f'技能区总: {skill_multiplier}') logger.info(f'技能区总: {skill_multiplier}')
@ -184,6 +147,14 @@ class RoleInstance:
Ultra_Use, self.base_attr, self.attribute_bonus Ultra_Use, self.base_attr, self.attribute_bonus
) )
logger.info(self.attribute_bonus) logger.info(self.attribute_bonus)
logger.info('检查遗器套装战斗生效的buff')
for set_skill in self.relic_set.SetSkill:
self.attribute_bonus = await set_skill.set_skill_ability(
self.base_attr, self.attribute_bonus
)
if self.attribute_bonus is None:
raise Exception('attribute_bonus is None')
logger.info(self.attribute_bonus)
# 检查是否有对某一个技能的属性加成 # 检查是否有对某一个技能的属性加成
logger.info('检查是否有对某一个技能的属性加成') logger.info('检查是否有对某一个技能的属性加成')
@ -208,14 +179,7 @@ class RoleInstance:
self.attribute_bonus['StatusProbabilityBase'] = ( self.attribute_bonus['StatusProbabilityBase'] = (
status_probability + self.attribute_bonus[attr] status_probability + self.attribute_bonus[attr]
) )
logger.info(self.attribute_bonus)
logger.info('检查遗器套装战斗生效的buff')
for set_skill in self.relic_set.SetSkill:
self.attribute_bonus = await set_skill.set_skill_ability(
self.base_attr, self.attribute_bonus
)
if self.attribute_bonus is None:
raise Exception('attribute_bonus is None')
merged_attr = await merge_attribute( merged_attr = await merge_attribute(
self.base_attr, self.attribute_bonus self.base_attr, self.attribute_bonus
) )
@ -251,33 +215,26 @@ class RoleInstance:
hp_num = 0 hp_num = 0
if self.raw_data.avatar.id_ in [1205, 1208]: if self.raw_data.avatar.id_ in [1205, 1208]:
hp_num = merged_attr['hp'] hp_num = merged_attr['hp']
if skill_type == 'Normal': skill_type_hp = skill_type + '_HP'
if self.raw_data.avatar.id_ == 1208: if skill_type_hp in skill_dict[str(self.raw_data.avatar.id_)]:
hp_multiplier = self.avatar.Normalnum('Normal_HP') hp_multiplier = self.avatar.Skill_num(skill_info[4], skill_type_hp)
elif skill_type == 'Normal1': else:
hp_multiplier = self.avatar.Normalnum('Normal1_HP') hp_multiplier = 0
skill_type = 'Normal' for attr in self.attribute_bonus:
elif skill_type == 'Ultra': if attr.__contains__('HpSkillAdd'):
hp_multiplier = self.avatar.Ultra_num('Ultra_HP') skill_name = attr.split('HpSkillAdd')[0]
if ( if skill_name in (skill_type, skill_info[3]):
self.raw_data.avatar.rank >= 1 logger.info(
and self.raw_data.avatar.id_ == 1205 f'{skill_name}{skill_type}{self.attribute_bonus[attr]}倍率加成'
): )
hp_multiplier += 0.9 hp_multiplier = hp_multiplier + self.attribute_bonus[attr]
if (
self.raw_data.avatar.rank >= 6 if skill_type == 'Talent':
and self.raw_data.avatar.id_ == 1208
):
hp_multiplier += 1.2
elif skill_type == 'Talent':
hp_multiplier = self.avatar.Talent_num('Talent_HP')
if ( if (
self.raw_data.avatar.rank >= 6 self.raw_data.avatar.rank >= 6
and self.raw_data.avatar.id_ == 1205 and self.raw_data.avatar.id_ == 1205
): ):
damage_add = hp_num * 0.5 damage_add = hp_num * 0.5
else:
hp_multiplier = 0
attack = (skill_multiplier * attack) + (hp_multiplier * hp_num) attack = (skill_multiplier * attack) + (hp_multiplier * hp_num)
skill_multiplier = 1 skill_multiplier = 1
logger.info(f'混伤区: {attack}') logger.info(f'混伤区: {attack}')
@ -511,15 +468,6 @@ class RoleInstance:
damage_qw_z = damage_qw_z * 1.8 damage_qw_z = damage_qw_z * 1.8
damage_tz_z = damage_tz_z * 1.8 damage_tz_z = damage_tz_z * 1.8
if (
self.raw_data.avatar.id_ == 1212
and self.raw_data.avatar.rank >= 1
):
if skill_info[3] == 'BPSkill1' or skill_info[3] == 'Ultra':
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 = (

View File

@ -737,12 +737,6 @@ class NowheretoRun(BaseWeapon):
base_attr: Dict[str, float], base_attr: Dict[str, float],
attribute_bonus: Dict[str, float], attribute_bonus: Dict[str, float],
): ):
# attack_added_ratio = attribute_bonus.get('AttackAddedRatio', 0)
# attribute_bonus['AttackAddedRatio'] = attack_added_ratio + mp.mpf(
# weapon_effect['21033']['Param']['AttackAddedRatio'][
# self.weapon_rank - 1
# ]
# )
return attribute_bonus return attribute_bonus

View File

@ -1,6 +1,9 @@
import json
from typing import Dict, List from typing import Dict, List
from collections import Counter from collections import Counter
from loguru import logger
from ...utils.map.SR_MAP_PATH import RelicSetSkill, EquipmentID2AbilityProperty from ...utils.map.SR_MAP_PATH import RelicSetSkill, EquipmentID2AbilityProperty
@ -50,9 +53,7 @@ class Character:
for equip_ability in equip_ability_property: for equip_ability in equip_ability_property:
property_type = equip_ability['PropertyType'] property_type = equip_ability['PropertyType']
value = equip_ability['Value']['Value'] value = equip_ability['Value']['Value']
self.add_attr[property_type] = value + self.add_attr.get( self.add_attr[property_type] = value + self.add_attr.get(property_type, 0)
property_type, 0
)
async def get_char_attribute_bonus(self): async def get_char_attribute_bonus(self):
attribute_bonus = self.attribute_bonus attribute_bonus = self.attribute_bonus
@ -60,9 +61,7 @@ class Character:
status_add = bonus['statusAdd'] status_add = bonus['statusAdd']
bonus_property = status_add['property'] bonus_property = status_add['property']
value = status_add['value'] value = status_add['value']
self.add_attr[bonus_property] = value + self.add_attr.get( self.add_attr[bonus_property] = value + self.add_attr.get(bonus_property, 0)
bonus_property, 0
)
async def get_relic_info(self): async def get_relic_info(self):
# 计算圣遗物效果 # 计算圣遗物效果
@ -72,16 +71,12 @@ class Character:
# 处理主属性 # 处理主属性
relic_property = relic['MainAffix']['Property'] relic_property = relic['MainAffix']['Property']
property_value = relic['MainAffix']['Value'] property_value = relic['MainAffix']['Value']
self.add_attr[relic_property] = property_value + self.add_attr.get( self.add_attr[relic_property] = property_value + self.add_attr.get(relic_property, 0)
relic_property, 0
)
# 处理副词条 # 处理副词条
for sub in relic['SubAffixList']: for sub in relic['SubAffixList']:
sub_property = sub['Property'] sub_property = sub['Property']
sub_value = sub['Value'] sub_value = sub['Value']
self.add_attr[sub_property] = sub_value + self.add_attr.get( self.add_attr[sub_property] = sub_value + self.add_attr.get(sub_property, 0)
sub_property, 0
)
# 处理套装属性 # 处理套装属性
set_id_dict = Counter(set_id_list) set_id_dict = Counter(set_id_list)
# logger.info(set_id_dict.most_common()) # logger.info(set_id_dict.most_common())
@ -96,18 +91,14 @@ class Character:
set_property = status_add.Property set_property = status_add.Property
set_value = status_add.Value set_value = status_add.Value
if set_property != '': if set_property != '':
self.add_attr[ self.add_attr[set_property] = set_value + self.add_attr.get(set_property, 0)
set_property
] = set_value + self.add_attr.get(set_property, 0)
if count == 4: if count == 4:
status_add = RelicSetSkill.RelicSet[str(set_id)]['4'] status_add = RelicSetSkill.RelicSet[str(set_id)]['4']
if status_add: if status_add:
set_property = status_add.Property set_property = status_add.Property
set_value = status_add.Value set_value = status_add.Value
if set_property != '': if set_property != '':
self.add_attr[ self.add_attr[set_property] = set_value + self.add_attr.get(set_property, 0)
set_property
] = set_value + self.add_attr.get(set_property, 0)
# logger.info(json.dumps(self.base_attributes)) # logger.info(json.dumps(self.base_attributes))
# logger.info(json.dumps(self.add_attr)) # logger.info(json.dumps(self.add_attr))