Spaces:
Runtime error
Runtime error
File size: 4,496 Bytes
2452398 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
from PySide6.QtWidgets import QMessageBox
from qt.components.dashboard import DashboardWidget
from qt.constant import ATTR_TYPE_TRANSLATE
from qt.scripts.top import Parser
from qt.scripts.equipments import Equipments
# from qt.scripts.consumables import Consumables
# from qt.scripts.bonuses import Bonuses
from qt.scripts.recipes import Recipes
from qt.scripts.talents import Talents
from utils.analyzer import analyze_details
def summary_content(summary, total_damage):
content = []
for skill in sorted(summary, key=lambda x: summary[x]['damage'], reverse=True):
detail = summary[skill]
critical = round(detail['critical'], 2)
critical_rate = round(detail['critical'] / detail['count'] * 100, 2)
hit = round(detail['count'] - critical, 2)
hit_rate = round(100 - critical_rate, 2)
damage = round(detail['damage'], 2)
damage_rate = round(damage / total_damage * 100, 2)
content.append(
[f"{skill}/{detail['count']}",
f"{hit}/{hit_rate}%", f"{critical}/{critical_rate}%", f"{damage}/{damage_rate}%"]
)
return content
def detail_content(detail):
damage_content = [
["命中伤害", f"{detail['damage']}"],
["会心伤害", f"{detail['critical_damage']}"],
["期望会心", f"{round(detail['critical_strike'] * 100, 2)}%"],
["期望伤害", f"{round(detail['expected_damage'], 2)}"]
]
gradient_content = [
[ATTR_TYPE_TRANSLATE[k], f"{round(v / detail['expected_damage'] * 100, 2)}%"]
for k, v in detail['gradients'].items()
]
return damage_content, gradient_content
def dashboard_script(parser: Parser,
equipments: Equipments, talents: Talents, recipes: Recipes,
# consumables: Consumables, bonuses: Bonuses,
dashboard_widget: DashboardWidget):
def select_fight(text):
index = parser.record_index[text]
dashboard_widget.duration.set_value(parser.duration(index))
dashboard_widget.fight_select.combo_box.currentTextChanged.connect(select_fight)
def formulate():
duration = dashboard_widget.duration.spin_box.value()
record = parser.records[parser.record_index[dashboard_widget.fight_select.combo_box.currentText()]]
school = parser.school
attribute = school.attribute()
attribute.target_level = int(dashboard_widget.target_level.combo_box.currentText())
for attr, value in equipments.attrs.items():
setattr(attribute, attr, getattr(attribute, attr) + value)
# for attr, value in consumables.attrs.items():
# setattr(attribute, attr, getattr(attribute, attr) + value)
dashboard_widget.init_attribute.set_content(school.attr_content(attribute))
# gains = sum([equipments.gains, talents.gains, recipes.gains, bonuses.gains], [])
#
# dashboard_widget.final_attribute.set_text(school.attr_text(attribute))
total_damage, total_gradient, details, summary = analyze_details(record, attribute, school)
dashboard_widget.dps.set_text(str(round(total_damage / duration)))
dashboard_widget.gradients.set_content(
[[ATTR_TYPE_TRANSLATE[k], f"{round(v, 2)}%"] for k, v in total_gradient.items()]
)
dashboard_widget.details = details
dashboard_widget.skill_combo.set_items(list(details), default_index=-1)
dashboard_widget.summary.set_content(summary_content(summary, total_damage))
dashboard_widget.button.clicked.connect(formulate)
def select_skill(skill):
if skill:
dashboard_widget.status_combo.set_items(list(dashboard_widget.details[skill]))
else:
dashboard_widget.status_combo.combo_box.clear()
dashboard_widget.skill_combo.combo_box.currentTextChanged.connect(select_skill)
def select_status(status):
if status:
skill = dashboard_widget.skill_combo.combo_box.currentText()
detail = dashboard_widget.details[skill][status]
damage_content, gradient_content = detail_content(detail)
dashboard_widget.damage_detail.set_content(damage_content)
dashboard_widget.gradient_detail.set_content(gradient_content)
else:
dashboard_widget.damage_detail.table.clear()
dashboard_widget.gradient_detail.table.clear()
dashboard_widget.status_combo.combo_box.currentTextChanged.connect(select_status)
|