mirror of
https://github.com/baiqwerdvd/StarRailUID.git
synced 2025-05-06 11:43:44 +08:00
完成桂乃芬计算伤害计算部分重构v1.1
This commit is contained in:
parent
9d3415d9df
commit
36a68e6057
@ -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 .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):
|
||||
char: Character = Character(char_data)
|
||||
@ -16,67 +20,13 @@ async def cal(char_data: Dict):
|
||||
char = await cal_char_info(char_data)
|
||||
|
||||
skill_info_list: List[List[Union[str, float]]] = []
|
||||
if char.char_id in [
|
||||
1102,
|
||||
1204,
|
||||
1107,
|
||||
1213,
|
||||
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)
|
||||
im_tmp = await role.cal_damage(skill_type)
|
||||
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]:
|
||||
if str(char.char_id) in skill_dict:
|
||||
skill_list = skill_dict[str(char.char_id)]['skillList']
|
||||
skill_list = skill_list.keys()
|
||||
print(skill_list)
|
||||
for skill_type in skill_list:
|
||||
role = RoleInstance(char)
|
||||
im_tmp = await role.cal_damage('Talent')
|
||||
im_tmp = await role.cal_damage(skill_type)
|
||||
skill_info_list.append(im_tmp)
|
||||
return skill_info_list
|
||||
return '角色伤害计算未完成'
|
||||
|
@ -46,16 +46,7 @@ TEXT_PATH = Path(__file__).parent / 'texture2D'
|
||||
|
||||
bg_img = Image.open(TEXT_PATH / 'bg.png')
|
||||
white_color = (213, 213, 213)
|
||||
NUM_MAP = {
|
||||
0: '零',
|
||||
1: '一',
|
||||
2: '二',
|
||||
3: '三',
|
||||
4: '四',
|
||||
5: '五',
|
||||
6: '六',
|
||||
7: '七',
|
||||
}
|
||||
NUM_MAP = {0: '零', 1: '一', 2: '二', 3: '三', 4: '四', 5: '五', 6: '六', 7: '七'}
|
||||
|
||||
RANK_MAP = {
|
||||
1: '_rank1.png',
|
||||
@ -99,23 +90,7 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str):
|
||||
return char_data
|
||||
char = await cal_char_info(char_data)
|
||||
damage_len = 0
|
||||
if char.char_id in [
|
||||
1102,
|
||||
1204,
|
||||
1107,
|
||||
1213,
|
||||
1006,
|
||||
1005,
|
||||
1205,
|
||||
1208,
|
||||
1104,
|
||||
1209,
|
||||
1004,
|
||||
1003,
|
||||
1201,
|
||||
1212,
|
||||
1112,
|
||||
]:
|
||||
if str(char.char_id) in skill_dict:
|
||||
skill_list = skill_dict[str(char.char_id)]['skillList']
|
||||
damage_len = len(skill_list)
|
||||
bg_height = 0
|
||||
|
@ -87,6 +87,7 @@ class Clara(BaseAvatar):
|
||||
def extra_ability(self):
|
||||
logger.info('额外能力')
|
||||
logger.info('史瓦罗的反击造成的伤害提高30%')
|
||||
self.extra_ability_attribute['Talent1SkillAdd'] = self.Skill_num('Talent', 'Talent')
|
||||
self.extra_ability_attribute['TalentDmgAdd'] = 0.3
|
||||
self.extra_ability_attribute['UltraDmgAdd'] = 0.3
|
||||
|
||||
@ -138,6 +139,8 @@ class Silverwolf(BaseAvatar):
|
||||
pass
|
||||
|
||||
def eidolons(self):
|
||||
if self.avatar_rank >= 4:
|
||||
self.extra_ability_attribute['UltraSkillAdd'] = 1
|
||||
if self.avatar_rank >= 6:
|
||||
self.extra_ability_attribute['AllDamageAddedRatio'] = 1
|
||||
|
||||
@ -177,6 +180,8 @@ class Kafka(BaseAvatar):
|
||||
self.extra_ability_attribute['DOTDmgAdd'] = 0.3
|
||||
if self.avatar_rank >= 2:
|
||||
self.extra_ability_attribute['DOTDmgAdd'] = 0.55
|
||||
if self.avatar_rank >= 6:
|
||||
self.extra_ability_attribute['DOTSkillAdd'] = 1.56
|
||||
|
||||
def extra_ability(self):
|
||||
pass
|
||||
@ -198,6 +203,8 @@ class Blade(BaseAvatar):
|
||||
pass
|
||||
|
||||
def eidolons(self):
|
||||
if self.avatar_rank >= 1:
|
||||
self.eidolon_attribute['UltraHpSkillAdd'] = 0.9
|
||||
if self.avatar_rank >= 2:
|
||||
self.eidolon_attribute['CriticalChanceBase'] = 0.15
|
||||
|
||||
@ -228,6 +235,8 @@ class Fuxuan(BaseAvatar):
|
||||
def eidolons(self):
|
||||
if self.avatar_rank >= 1:
|
||||
self.eidolon_attribute['CriticalDamageBase'] = 0.3
|
||||
if self.avatar_rank >= 6:
|
||||
self.eidolon_attribute['UltraHpSkillAdd'] = 1.2
|
||||
|
||||
def extra_ability(self):
|
||||
logger.info('符玄战技【穷观阵】属性加成')
|
||||
@ -277,6 +286,9 @@ class Yanqing(BaseAvatar):
|
||||
pass
|
||||
|
||||
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:
|
||||
self.eidolon_attribute['IceResistancePenetration'] = 0.15
|
||||
|
||||
@ -312,7 +324,9 @@ class Welt(BaseAvatar):
|
||||
pass
|
||||
|
||||
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):
|
||||
logger.info('额外能力')
|
||||
@ -400,6 +414,8 @@ class Jingliu(BaseAvatar):
|
||||
def eidolons(self):
|
||||
if self.avatar_rank >= 1:
|
||||
self.eidolon_attribute['CriticalDamageBase'] = 0.24
|
||||
self.extra_ability_attribute['UltraSkillAdd'] = 1
|
||||
self.extra_ability_attribute['BPSkill1SkillAdd'] = 1
|
||||
if self.avatar_rank >= 2:
|
||||
self.eidolon_attribute['BPSkill1DmgAdd'] = 0.8
|
||||
if self.avatar_rank >= 4:
|
||||
@ -453,6 +469,7 @@ class Topaz(BaseAvatar):
|
||||
self.eidolon_attribute['Talent1_FireResistancePenetration'] = 0.1
|
||||
|
||||
def extra_ability(self):
|
||||
self.extra_ability_attribute['Talent1SkillAdd'] = self.Skill_num('Ultra', 'Talent1')
|
||||
logger.info('额外能力')
|
||||
logger.info('托帕和账账对拥有火属性弱点的敌方目标造成的伤害提高15%。')
|
||||
self.extra_ability_attribute['AllDamageAddedRatio'] = 0.15
|
||||
@ -465,6 +482,31 @@ class Topaz(BaseAvatar):
|
||||
'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:
|
||||
@classmethod
|
||||
@ -501,4 +543,6 @@ class Avatar:
|
||||
return JingYuan(char, skills)
|
||||
if char.id_ == 1107:
|
||||
return Clara(char, skills)
|
||||
if char.id_ == 1210:
|
||||
return Guinaifen(char, skills)
|
||||
raise Exception('不支持的角色')
|
||||
|
@ -109,7 +109,19 @@ class BaseAvatar:
|
||||
def Skill_Info(self, skill_type: str):
|
||||
skill_info = skill_dict[str(self.avatar_id)]['skillList'][skill_type]
|
||||
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):
|
||||
skill_info = skill_dict[str(self.avatar_id)][skill_type][
|
||||
self.Skill.Normal_.level - 1
|
||||
|
@ -78,16 +78,12 @@ class BaseRelicSetSkill:
|
||||
set_property = status_add.Property
|
||||
set_value = status_add.Value
|
||||
if set_property != '':
|
||||
relic_set_attribute[set_property] = (
|
||||
relic_set_attribute.get(set_property, 0) + set_value
|
||||
)
|
||||
relic_set_attribute[set_property] = relic_set_attribute.get(set_property, 0) + set_value
|
||||
if self.pieces4:
|
||||
status_add = RelicSetSkill.RelicSet[str(self.setId)]['4']
|
||||
if status_add:
|
||||
set_property = status_add.Property
|
||||
set_value = status_add.Value
|
||||
if set_property != '':
|
||||
relic_set_attribute[set_property] = (
|
||||
relic_set_attribute.get(set_property, 0) + set_value
|
||||
)
|
||||
relic_set_attribute[set_property] = relic_set_attribute.get(set_property, 0) + set_value
|
||||
return relic_set_attribute
|
||||
|
@ -29,9 +29,9 @@
|
||||
"Maze": [20],
|
||||
"Ultra_Use": [120],
|
||||
"skillList": {
|
||||
"Normal": ["attack", "普攻", 1, "Normal"],
|
||||
"BPSkill": ["attack", "战技", 1, "BPSkill"],
|
||||
"Ultra": ["attack", "终结技", 1, "Ultra"]
|
||||
"Normal": ["attack", "普攻", 1, "Normal", "Normal"],
|
||||
"BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"],
|
||||
"Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"]
|
||||
}
|
||||
},
|
||||
"1204": {
|
||||
@ -66,10 +66,10 @@
|
||||
"Maze": [20],
|
||||
"Ultra_Use": [130],
|
||||
"skillList": {
|
||||
"Normal": ["attack", "普攻", 1, "Normal"],
|
||||
"BPSkill": ["attack", "战技", 1, "BPSkill"],
|
||||
"Ultra": ["attack", "终结技", 1, "Ultra"],
|
||||
"Talent": ["attack", "10层神君", 1, "Talent"]
|
||||
"Normal": ["attack", "普攻", 1, "Normal", "Normal"],
|
||||
"BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"],
|
||||
"Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"],
|
||||
"Talent": ["attack", "10层神君", 1, "Talent", "Talent"]
|
||||
}
|
||||
},
|
||||
"1107": {
|
||||
@ -86,7 +86,7 @@
|
||||
1.3200000001862645, 1.3800000001862645, 1.4400000002793968,
|
||||
1.5000000002793968
|
||||
],
|
||||
"Ultra": [
|
||||
"Talent1": [
|
||||
0.9600000002793968, 1.0240000002793968, 1.0880000002793968,
|
||||
1.1520000002793968, 1.2160000002793968, 1.2800000002793968,
|
||||
1.3600000002793968, 1.4400000002793968, 1.5200000002793968,
|
||||
@ -103,10 +103,10 @@
|
||||
"Maze": [20],
|
||||
"Ultra_Use": [130],
|
||||
"skillList": {
|
||||
"Normal": ["attack", "普攻", 1, "Normal"],
|
||||
"BPSkill": ["attack", "战技", 1, "BPSkill"],
|
||||
"Ultra": ["attack", "强化反击", 1, "Ultra"],
|
||||
"Talent": ["attack", "反击", 1, "Talent"]
|
||||
"Normal": ["attack", "普攻", 1, "Normal", "Normal"],
|
||||
"BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"],
|
||||
"Talent": ["attack", "反击", 1, "Talent", "Talent"],
|
||||
"Talent1": ["attack", "强化反击", 1, "Talent", "Ultra"]
|
||||
}
|
||||
},
|
||||
"1213": {
|
||||
@ -155,11 +155,11 @@
|
||||
"Maze": [20],
|
||||
"Ultra_Use": [140],
|
||||
"skillList": {
|
||||
"Normal": ["attack", "普攻", 2, "Normal"],
|
||||
"Normal1": ["attack", "瞬华", 3, "Normal1"],
|
||||
"Normal2": ["attack", "天矢阴", 5, "Normal2"],
|
||||
"Normal3": ["attack", "盘拏耀跃", 7, "Normal3"],
|
||||
"Ultra": ["attack", "终结技", 3, "Ultra"]
|
||||
"Normal": ["attack", "普攻", 2, "Normal", "Normal"],
|
||||
"Normal1": ["attack", "瞬华", 3, "Normal", "Normal"],
|
||||
"Normal2": ["attack", "天矢阴", 5, "Normal", "Normal"],
|
||||
"Normal3": ["attack", "盘拏耀跃", 7, "Normal", "Normal"],
|
||||
"Ultra": ["attack", "终结技", 3, "Ultra", "Ultra"]
|
||||
}
|
||||
},
|
||||
"1006": {
|
||||
@ -206,9 +206,9 @@
|
||||
"Maze": [20],
|
||||
"Ultra_Use": [110],
|
||||
"skillList": {
|
||||
"Normal": ["attack", "普攻", 1, "Normal"],
|
||||
"BPSkill": ["attack", "战技", 1, "BPSkill"],
|
||||
"Ultra": ["attack", "终结技", 1, "Ultra"]
|
||||
"Normal": ["attack", "普攻", 1, "Normal", "Normal"],
|
||||
"BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"],
|
||||
"Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"]
|
||||
}
|
||||
},
|
||||
"1005": {
|
||||
@ -248,11 +248,11 @@
|
||||
"Maze": [20],
|
||||
"Ultra_Use": [110],
|
||||
"skillList": {
|
||||
"Normal": ["attack", "普攻", 1, "Normal"],
|
||||
"BPSkill": ["attack", "战技", 1, "BPSkill"],
|
||||
"Ultra": ["attack", "终结技", 1, "Ultra"],
|
||||
"DOT": ["attack", "单次持续伤害", 1, "DOT"],
|
||||
"Talent": ["attack", "追加攻击", 1, "Talent"]
|
||||
"Normal": ["attack", "普攻", 1, "Normal", "Normal"],
|
||||
"BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"],
|
||||
"Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"],
|
||||
"DOT": ["attack", "单次持续伤害", 1, "DOT", "Ultra"],
|
||||
"Talent": ["attack", "追加攻击", 1, "Talent", "Talent"]
|
||||
}
|
||||
},
|
||||
"1205": {
|
||||
@ -309,10 +309,10 @@
|
||||
"Maze": [20],
|
||||
"Ultra_Use": [110],
|
||||
"skillList": {
|
||||
"Normal": ["attack", "普攻", 1, "Normal"],
|
||||
"Normal1": ["attack", "无间剑树", 1, "Normal1"],
|
||||
"Ultra": ["attack", "终结技", 1, "Ultra"],
|
||||
"Talent": ["attack", "追加攻击", 1, "Talent"]
|
||||
"Normal": ["attack", "普攻", 1, "Normal", "Normal"],
|
||||
"Normal1": ["attack", "无间剑树", 1, "Normal", "Normal"],
|
||||
"Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"],
|
||||
"Talent": ["attack", "追加攻击", 1, "Talent", "Talent"]
|
||||
}
|
||||
},
|
||||
"1208": {
|
||||
@ -354,8 +354,8 @@
|
||||
"Maze": [20],
|
||||
"Ultra_Use": [135],
|
||||
"skillList": {
|
||||
"Normal": ["attack", "普攻", 1, "Normal"],
|
||||
"Ultra": ["attack", "终结技", 1, "Ultra"]
|
||||
"Normal": ["attack", "普攻", 1, "Normal", "Normal"],
|
||||
"Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"]
|
||||
}
|
||||
},
|
||||
"1104": {
|
||||
@ -385,9 +385,9 @@
|
||||
"Maze": [20],
|
||||
"Ultra_Use": [110],
|
||||
"skillList": {
|
||||
"Normal": ["attack", "普攻", 1, "Normal"],
|
||||
"BPSkill": ["attack", "战技", 1, "BPSkill"],
|
||||
"Ultra": ["defence", "终结技(护盾)", 1, "Ultra"]
|
||||
"Normal": ["attack", "普攻", 1, "Normal", "Normal"],
|
||||
"BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"],
|
||||
"Ultra": ["defence", "终结技(护盾)", 1, "Ultra", "Ultra"]
|
||||
}
|
||||
},
|
||||
"1209": {
|
||||
@ -441,10 +441,10 @@
|
||||
"Maze": [20],
|
||||
"Ultra_Use": [120],
|
||||
"skillList": {
|
||||
"Normal": ["attack", "普攻", 1, "Normal"],
|
||||
"BPSkill": ["attack", "战技", 1, "BPSkill"],
|
||||
"Ultra": ["attack", "终结技", 1, "Ultra"],
|
||||
"Talent": ["attack", "附加伤害", 1, "Talent"]
|
||||
"Normal": ["attack", "普攻", 1, "Normal", "Normal"],
|
||||
"BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"],
|
||||
"Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"],
|
||||
"Talent": ["attack", "附加伤害", 1, "Talent", "Talent"]
|
||||
}
|
||||
},
|
||||
"1004": {
|
||||
@ -477,9 +477,9 @@
|
||||
"Maze": [20],
|
||||
"Ultra_Use": [120],
|
||||
"skillList": {
|
||||
"Normal": ["attack", "普攻", 1, "Normal"],
|
||||
"BPSkill": ["attack", "战技", 3, "BPSkill"],
|
||||
"Ultra": ["attack", "终结技", 1, "Ultra"]
|
||||
"Normal": ["attack", "普攻", 1, "Normal", "Normal"],
|
||||
"BPSkill": ["attack", "战技", 3, "BPSkill", "BPSkill"],
|
||||
"Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"]
|
||||
}
|
||||
},
|
||||
"1003": {
|
||||
@ -512,10 +512,10 @@
|
||||
"Maze": [20],
|
||||
"Ultra_Use": [120],
|
||||
"skillList": {
|
||||
"Normal": ["attack", "普攻", 1, "Normal"],
|
||||
"BPSkill": ["attack", "战技", 1, "BPSkill"],
|
||||
"Ultra": ["attack", "终结技", 1, "Ultra"],
|
||||
"Talent": ["attack", "追加攻击", 1, "Talent"]
|
||||
"Normal": ["attack", "普攻", 1, "Normal", "Normal"],
|
||||
"BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"],
|
||||
"Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"],
|
||||
"Talent": ["attack", "追加攻击", 1, "Talent", "Talent"]
|
||||
}
|
||||
},
|
||||
"1201": {
|
||||
@ -553,9 +553,9 @@
|
||||
"Maze": [20],
|
||||
"Ultra_Use": [140],
|
||||
"skillList": {
|
||||
"Normal": ["attack", "普攻", 1, "Normal"],
|
||||
"Normal1": ["attack", "杠上开花!", 1, "Normal1"],
|
||||
"Ultra": ["attack", "终结技", 1, "Ultra"]
|
||||
"Normal": ["attack", "普攻", 1, "Normal", "Normal"],
|
||||
"Normal1": ["attack", "杠上开花!", 1, "Normal", "Normal"],
|
||||
"Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"]
|
||||
}
|
||||
},
|
||||
"1212": {
|
||||
@ -572,11 +572,11 @@
|
||||
2.300000000707805, 2.40000000086613, 2.50000000093132
|
||||
],
|
||||
"BPSkill1": [
|
||||
1.2000000005122274, 1.3200000006705523, 1.440000000828877,
|
||||
1.560000000558794, 1.680000000214204, 1.800000000372529,
|
||||
1.950000000745058, 2.100000000419095, 2.250000000860302,
|
||||
2.400000000232831, 2.5200000003911555, 2.64000000054948,
|
||||
2.760000000707805, 2.88000000086613, 3.00000000093132
|
||||
1.2500000005122274, 1.3750000006705523, 1.500000000828877,
|
||||
1.625000000558794, 1.750000000214204, 1.875000000372529,
|
||||
0.031250000745058, 2.187500000419095, 2.343750000860302,
|
||||
2.500000000232831, 2.6250000003911555, 2.75000000054948,
|
||||
2.875000000707805, 3.00000000086613, 3.12500000093132
|
||||
],
|
||||
"Ultra": [
|
||||
1.8000000005122274, 1.9200000006705523, 2.040000000828877,
|
||||
@ -602,10 +602,10 @@
|
||||
"Maze": [20],
|
||||
"Ultra_Use": [140],
|
||||
"skillList": {
|
||||
"Normal": ["attack", "普攻", 1, "Normal"],
|
||||
"BPSkill": ["attack", "战技", 1, "BPSkill"],
|
||||
"BPSkill1": ["attack", "寒川映月", 1, "BPSkill1"],
|
||||
"Ultra": ["attack", "终结技", 1, "Ultra"]
|
||||
"Normal": ["attack", "普攻", 1, "Normal", "Normal"],
|
||||
"BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"],
|
||||
"BPSkill1": ["attack", "寒川映月", 1, "BPSkill", "BPSkill"],
|
||||
"Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"]
|
||||
}
|
||||
},
|
||||
"1112": {
|
||||
@ -645,9 +645,52 @@
|
||||
"Maze": [20],
|
||||
"Ultra_Use": [140],
|
||||
"skillList": {
|
||||
"Normal": ["attack", "普攻", 1, "Talent"],
|
||||
"BPSkill": ["attack", "账账", 1, "Talent"],
|
||||
"Talent1": ["attack", "强化账账", 1, "Talent1"]
|
||||
"Normal": ["attack", "普攻", 1, "Talent", "Normal"],
|
||||
"BPSkill": ["attack", "账账", 1, "Talent", "BPSkill"],
|
||||
"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"]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
from typing import List, Union
|
||||
|
||||
import json
|
||||
from pathlib import Path
|
||||
from gsuid_core.logger import logger
|
||||
|
||||
from .Avatar.Avatar import Avatar
|
||||
@ -9,7 +10,9 @@ from ..mono.Character import Character
|
||||
from .Base.model import DamageInstance
|
||||
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:
|
||||
def __init__(self, raw_data: Character):
|
||||
self.raw_data = DamageInstance(raw_data)
|
||||
@ -122,57 +125,17 @@ class RoleInstance:
|
||||
logger.info(skill_type)
|
||||
# 技能区
|
||||
skill_info = self.avatar.Skill_Info(skill_type)
|
||||
if skill_type == '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':
|
||||
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'
|
||||
else:
|
||||
raise Exception('skill type error')
|
||||
|
||||
skill_multiplier = self.avatar.Skill_num(skill_info[4], skill_type)
|
||||
# 检查是否有对某一个技能的倍率加成
|
||||
for attr in self.attribute_bonus:
|
||||
if attr.__contains__('SkillAdd'):
|
||||
skill_name = attr.split('SkillAdd')[0]
|
||||
if skill_name in (skill_type, skill_info[3]):
|
||||
logger.info(
|
||||
f'{skill_name}对{skill_type}有{self.attribute_bonus[attr]}倍率加成'
|
||||
)
|
||||
skill_multiplier = skill_multiplier + self.attribute_bonus[attr]
|
||||
|
||||
logger.info(f'技能区总: {skill_multiplier}')
|
||||
|
||||
# 检查武器战斗生效的buff
|
||||
@ -184,7 +147,15 @@ class RoleInstance:
|
||||
Ultra_Use, self.base_attr, 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('检查是否有对某一个技能的属性加成')
|
||||
for attr in self.attribute_bonus:
|
||||
@ -208,14 +179,7 @@ class RoleInstance:
|
||||
self.attribute_bonus['StatusProbabilityBase'] = (
|
||||
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(
|
||||
self.base_attr, self.attribute_bonus
|
||||
)
|
||||
@ -251,33 +215,26 @@ class RoleInstance:
|
||||
hp_num = 0
|
||||
if self.raw_data.avatar.id_ in [1205, 1208]:
|
||||
hp_num = merged_attr['hp']
|
||||
if skill_type == 'Normal':
|
||||
if self.raw_data.avatar.id_ == 1208:
|
||||
hp_multiplier = self.avatar.Normalnum('Normal_HP')
|
||||
elif skill_type == 'Normal1':
|
||||
hp_multiplier = self.avatar.Normalnum('Normal1_HP')
|
||||
skill_type = 'Normal'
|
||||
elif skill_type == 'Ultra':
|
||||
hp_multiplier = self.avatar.Ultra_num('Ultra_HP')
|
||||
if (
|
||||
self.raw_data.avatar.rank >= 1
|
||||
and self.raw_data.avatar.id_ == 1205
|
||||
):
|
||||
hp_multiplier += 0.9
|
||||
if (
|
||||
self.raw_data.avatar.rank >= 6
|
||||
and self.raw_data.avatar.id_ == 1208
|
||||
):
|
||||
hp_multiplier += 1.2
|
||||
elif skill_type == 'Talent':
|
||||
hp_multiplier = self.avatar.Talent_num('Talent_HP')
|
||||
skill_type_hp = skill_type + '_HP'
|
||||
if skill_type_hp in skill_dict[str(self.raw_data.avatar.id_)]:
|
||||
hp_multiplier = self.avatar.Skill_num(skill_info[4], skill_type_hp)
|
||||
else:
|
||||
hp_multiplier = 0
|
||||
for attr in self.attribute_bonus:
|
||||
if attr.__contains__('HpSkillAdd'):
|
||||
skill_name = attr.split('HpSkillAdd')[0]
|
||||
if skill_name in (skill_type, skill_info[3]):
|
||||
logger.info(
|
||||
f'{skill_name}对{skill_type}有{self.attribute_bonus[attr]}倍率加成'
|
||||
)
|
||||
hp_multiplier = hp_multiplier + self.attribute_bonus[attr]
|
||||
|
||||
if skill_type == 'Talent':
|
||||
if (
|
||||
self.raw_data.avatar.rank >= 6
|
||||
and self.raw_data.avatar.id_ == 1205
|
||||
):
|
||||
damage_add = hp_num * 0.5
|
||||
else:
|
||||
hp_multiplier = 0
|
||||
attack = (skill_multiplier * attack) + (hp_multiplier * hp_num)
|
||||
skill_multiplier = 1
|
||||
logger.info(f'混伤区: {attack}')
|
||||
@ -511,15 +468,6 @@ class RoleInstance:
|
||||
damage_qw_z = damage_qw_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':
|
||||
element_area = 0
|
||||
damage_tz_fj = (
|
||||
|
@ -737,12 +737,6 @@ class NowheretoRun(BaseWeapon):
|
||||
base_attr: 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
|
||||
|
||||
|
||||
|
@ -1,6 +1,9 @@
|
||||
import json
|
||||
from typing import Dict, List
|
||||
from collections import Counter
|
||||
|
||||
from loguru import logger
|
||||
|
||||
from ...utils.map.SR_MAP_PATH import RelicSetSkill, EquipmentID2AbilityProperty
|
||||
|
||||
|
||||
@ -50,9 +53,7 @@ class Character:
|
||||
for equip_ability in equip_ability_property:
|
||||
property_type = equip_ability['PropertyType']
|
||||
value = equip_ability['Value']['Value']
|
||||
self.add_attr[property_type] = value + self.add_attr.get(
|
||||
property_type, 0
|
||||
)
|
||||
self.add_attr[property_type] = value + self.add_attr.get(property_type, 0)
|
||||
|
||||
async def get_char_attribute_bonus(self):
|
||||
attribute_bonus = self.attribute_bonus
|
||||
@ -60,9 +61,7 @@ class Character:
|
||||
status_add = bonus['statusAdd']
|
||||
bonus_property = status_add['property']
|
||||
value = status_add['value']
|
||||
self.add_attr[bonus_property] = value + self.add_attr.get(
|
||||
bonus_property, 0
|
||||
)
|
||||
self.add_attr[bonus_property] = value + self.add_attr.get(bonus_property, 0)
|
||||
|
||||
async def get_relic_info(self):
|
||||
# 计算圣遗物效果
|
||||
@ -72,16 +71,12 @@ class Character:
|
||||
# 处理主属性
|
||||
relic_property = relic['MainAffix']['Property']
|
||||
property_value = relic['MainAffix']['Value']
|
||||
self.add_attr[relic_property] = property_value + self.add_attr.get(
|
||||
relic_property, 0
|
||||
)
|
||||
self.add_attr[relic_property] = property_value + self.add_attr.get(relic_property, 0)
|
||||
# 处理副词条
|
||||
for sub in relic['SubAffixList']:
|
||||
sub_property = sub['Property']
|
||||
sub_value = sub['Value']
|
||||
self.add_attr[sub_property] = sub_value + self.add_attr.get(
|
||||
sub_property, 0
|
||||
)
|
||||
self.add_attr[sub_property] = sub_value + self.add_attr.get(sub_property, 0)
|
||||
# 处理套装属性
|
||||
set_id_dict = Counter(set_id_list)
|
||||
# logger.info(set_id_dict.most_common())
|
||||
@ -96,18 +91,14 @@ class Character:
|
||||
set_property = status_add.Property
|
||||
set_value = status_add.Value
|
||||
if set_property != '':
|
||||
self.add_attr[
|
||||
set_property
|
||||
] = set_value + self.add_attr.get(set_property, 0)
|
||||
self.add_attr[set_property] = set_value + self.add_attr.get(set_property, 0)
|
||||
if count == 4:
|
||||
status_add = RelicSetSkill.RelicSet[str(set_id)]['4']
|
||||
if status_add:
|
||||
set_property = status_add.Property
|
||||
set_value = status_add.Value
|
||||
if set_property != '':
|
||||
self.add_attr[
|
||||
set_property
|
||||
] = set_value + self.add_attr.get(set_property, 0)
|
||||
self.add_attr[set_property] = set_value + self.add_attr.get(set_property, 0)
|
||||
|
||||
# logger.info(json.dumps(self.base_attributes))
|
||||
# logger.info(json.dumps(self.add_attr))
|
||||
|
Loading…
x
Reference in New Issue
Block a user