完成桂乃芬计算伤害计算部分重构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 .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 '角色伤害计算未完成'

View File

@ -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

View File

@ -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('不支持的角色')

View File

@ -110,6 +110,18 @@ class BaseAvatar:
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

View File

@ -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

View File

@ -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"]
}
}
}

View File

@ -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,56 +125,16 @@ 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}')
@ -184,6 +147,14 @@ 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('检查是否有对某一个技能的属性加成')
@ -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 = (

View File

@ -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

View File

@ -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))