Skip to content

Commit

Permalink
#337 重构整合指南里的副本
Browse files Browse the repository at this point in the history
  • Loading branch information
DoctorReid committed Jun 22, 2024
1 parent b8fa2cb commit 6a1329a
Show file tree
Hide file tree
Showing 22 changed files with 588 additions and 534 deletions.
8 changes: 4 additions & 4 deletions src/gui/settings/settings_echo_of_war_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
from sr.app.echo_of_war.echo_of_war_config import EchoOfWarPlanItem, EchoOfWarConfig
from sr.const.character_const import CHARACTER_LIST
from sr.context import Context
from sr.interastral_peace_guide.survival_index_mission import SurvivalIndexCategoryEnum, SurvivalIndexMission, \
SurvivalIndexMissionEnum
from sr.interastral_peace_guide.guide_const import GuideCategoryEnum, GuideMission, \
GuideMissionEnum


class PlanListItem(ft.Row):
Expand All @@ -22,7 +22,7 @@ def __init__(self, item: EchoOfWarPlanItem,
on_value_changed: Callable,
on_click_support: Callable):
self.value: EchoOfWarPlanItem = item
mission_list = SurvivalIndexMissionEnum.get_list_by_category(SurvivalIndexCategoryEnum.ECHO_OF_WAR.value)
mission_list = GuideMissionEnum.get_list_by_category(GuideCategoryEnum.ECHO_OF_WAR.value)
self.war_dropdown = ft.Dropdown(options=[
ft.dropdown.Option(text=i.ui_cn, key=i.unique_id) for i in mission_list
],
Expand Down Expand Up @@ -169,7 +169,7 @@ def handle_after_show(self):

def show_choose_support_character(self, target: PlanListItem):
self.chosen_plan_item = target
chosen_point: Optional[SurvivalIndexMission] = SurvivalIndexMissionEnum.get_by_unique_id(target.value['mission_id'])
chosen_point: Optional[GuideMission] = GuideMissionEnum.get_by_unique_id(target.value['mission_id'])
self.character_card.update_title('%s %s' % (gt('支援角色', 'ui'), chosen_point.ui_cn))
chosen_list: List[str] = []
if target.support_dropdown.value is not None and target.support_dropdown.value != 'none':
Expand Down
21 changes: 10 additions & 11 deletions src/gui/settings/settings_trailblaze_power_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
from sr.app.trailblaze_power.trailblaze_power_config import TrailblazePowerPlanItem
from sr.const.character_const import CHARACTER_LIST
from sr.context import Context
from sr.interastral_peace_guide.survival_index_mission import SurvivalIndexCategory, SurvivalIndexCategoryEnum, \
SurvivalIndexMission, SurvivalIndexMissionEnum
from sr.interastral_peace_guide.guide_const import GuideCategory, GuideCategoryEnum, \
GuideMission, GuideMissionEnum


class PlanListItem(ft.Row):
Expand All @@ -26,18 +26,17 @@ def __init__(self, ctx: Context,
self.ctx: Context = ctx
self.value: Optional[TrailblazePowerPlanItem] = item
if self.value is None:
mission_id = SurvivalIndexMissionEnum.BUD_1_YLL_1.value.unique_id
mission_id = GuideMissionEnum.BUD_1_YLL_1.value.unique_id
history: TrailblazePowerPlanItem = self.ctx.tp_config.get_history_by_id(mission_id)
self.value = TrailblazePowerPlanItem(
point_id=mission_id,
mission_id=mission_id,
point_id=mission_id, mission_id=mission_id, diff=0,
plan_times=1, run_times=0,
team_num=1 if history is None else history['team_num'],
support='none' if history is None else history['support'])
self.category_dropdown = ft.Dropdown(options=[
ft.dropdown.Option(text=i.value.ui_cn, key=i.value.ui_cn)
for i in SurvivalIndexCategoryEnum
if i not in [SurvivalIndexCategoryEnum.ECHO_OF_WAR, SurvivalIndexCategoryEnum.SU_SIM_UNI, SurvivalIndexCategoryEnum.ORNAMENT_EXTRACTION]
for i in GuideCategoryEnum
if i not in [GuideCategoryEnum.ECHO_OF_WAR, GuideCategoryEnum.SU_SIM_UNI, GuideCategoryEnum.SU_OE]
],
label='类目', width=100, on_change=self._on_category_changed)
self.tp_dropdown = ft.Dropdown(label='挑战关卡', width=180, on_change=self._on_tp_changed)
Expand All @@ -53,7 +52,7 @@ def __init__(self, ctx: Context,
width=80, on_change=self._on_plan_times_changed)
self.run_times_input = ft.TextField(label='本轮完成', keyboard_type=ft.KeyboardType.NUMBER,
width=80, on_change=self._on_run_times_changed)
self.chosen_point: Optional[SurvivalIndexMission] = SurvivalIndexMissionEnum.get_by_unique_id(self.value['mission_id'])
self.chosen_point: Optional[GuideMission] = GuideMissionEnum.get_by_unique_id(self.value['mission_id'])

self.category_dropdown.value = self.chosen_point.cate.ui_cn
self._update_tp_dropdown_list()
Expand All @@ -74,8 +73,8 @@ def __init__(self, ctx: Context,
self.up_app_btn, self.del_btn])

def _update_tp_dropdown_list(self):
cate: SurvivalIndexCategory = SurvivalIndexCategoryEnum.get_by_ui_cn(self.category_dropdown.value)
point_list: List[SurvivalIndexMission] = SurvivalIndexMissionEnum.get_list_by_category(cate)
cate: GuideCategory = GuideCategoryEnum.get_by_ui_cn(self.category_dropdown.value)
point_list: List[GuideMission] = GuideMissionEnum.get_list_by_category(cate)
if point_list is None:
point_list = []
self.tp_dropdown.options = [ft.dropdown.Option(text=i.ui_cn, key=i.unique_id) for i in point_list]
Expand Down Expand Up @@ -274,7 +273,7 @@ def handle_after_show(self):

def show_choose_support_character(self, target: PlanListItem):
self.chosen_plan_item = target
chosen_point: Optional[SurvivalIndexMission] = SurvivalIndexMissionEnum.get_by_unique_id(target.value['mission_id'])
chosen_point: Optional[GuideMission] = GuideMissionEnum.get_by_unique_id(target.value['mission_id'])
self.character_card.update_title('%s %s' % (gt('支援角色', 'ui'), chosen_point.ui_cn))
chosen_list: List[str] = []
if target.support_dropdown.value is not None and target.support_dropdown.value != 'none':
Expand Down
4 changes: 2 additions & 2 deletions src/sr/app/daily_training/daily_training_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@
from sr.operation.combine.dt_use_2_technique import Use2Technique
from sr.operation.combine.salvage_relic import SalvageRelic
from sr.operation.common.back_to_normal_world_plus import BackToNormalWorldPlus
from sr.operation.unit.guide import GuideTabEnum
from sr.operation.unit.guide.choose_guide_tab import ChooseGuideTab
from sr.interastral_peace_guide.guide_const import GuideTabEnum
from sr.interastral_peace_guide.choose_guide_tab import ChooseGuideTab
from sr.operation.unit.guide.claim_training_reward import ClaimTrainingReward
from sr.operation.unit.guide.claim_training_score import ClaimTrainingScore
from sr.operation.unit.guide.get_training_score import GetTrainingScore
Expand Down
4 changes: 2 additions & 2 deletions src/sr/app/echo_of_war/echo_of_war_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
from sr.app.echo_of_war.echo_of_war_run_record import EchoOfWarRunRecord
from sr.context import Context
from sr.image.sceenshot import large_map
from sr.interastral_peace_guide.survival_index_mission import SurvivalIndexMission, SurvivalIndexMissionEnum
from sr.interastral_peace_guide.guide_const import GuideMission, GuideMissionEnum
from sr.operation import Operation, StateOperationEdge, StateOperationNode, OperationOneRoundResult
from sr.operation.combine.challenge_ehco_of_war import ChallengeEchoOfWar
from sr.operation.common.back_to_normal_world_plus import BackToNormalWorldPlus
Expand Down Expand Up @@ -60,7 +60,7 @@ def _use_power(self) -> OperationOneRoundResult:
if plan is None:
return self.round_success('无挑战计划')

point: Optional[SurvivalIndexMission] = SurvivalIndexMissionEnum.get_by_unique_id(plan['mission_id'])
point: Optional[GuideMission] = GuideMissionEnum.get_by_unique_id(plan['mission_id'])

run_times: int = self.power // point.power

Expand Down
4 changes: 2 additions & 2 deletions src/sr/app/echo_of_war/echo_of_war_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from basic.config import ConfigHolder
from sr.app.app_description import AppDescriptionEnum
from sr.interastral_peace_guide.survival_index_mission import SurvivalIndexMissionEnum, SurvivalIndexCategoryEnum
from sr.interastral_peace_guide.guide_const import GuideCategoryEnum, GuideMissionEnum


class EchoOfWarPlanItem(TypedDict):
Expand Down Expand Up @@ -37,7 +37,7 @@ def _init_after_read_file(self):
any_changed = True

# 兼容旧配置 将新增的历战余响加入
mission_list = SurvivalIndexMissionEnum.get_list_by_category(SurvivalIndexCategoryEnum.ECHO_OF_WAR.value)
mission_list = GuideMissionEnum.get_list_by_category(GuideCategoryEnum.ECHO_OF_WAR.value)
for i in mission_list:
existed = False
for plan_item in plan_list:
Expand Down
21 changes: 10 additions & 11 deletions src/sr/app/sim_uni/sim_uni_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,28 +13,27 @@
from sr.context import Context
from sr.image.sceenshot import screen_state, mini_map
from sr.image.sceenshot.screen_state_enum import ScreenState
from sr.interastral_peace_guide.survival_index_mission import SurvivalIndexCategoryEnum
from sr.interastral_peace_guide.choose_guide_mission import ChooseGuideMission
from sr.interastral_peace_guide.choose_guide_tab import ChooseGuideTab
from sr.interastral_peace_guide.guide_const import GuideTabEnum, GuideCategoryEnum, GuideMissionEnum
from sr.operation import OperationResult, Operation, StateOperationEdge, StateOperationNode, \
OperationOneRoundResult
from sr.operation.unit.back_to_world import BackToWorld
from sr.operation.unit.guide import GuideTabEnum
from sr.operation.unit.guide.choose_guide_tab import ChooseGuideTab
from sr.operation.unit.guide.mission_transport import ChooseGuideMissionCategory, ChooseGuideMission, MISSION_SU_NORMAL
from sr.operation.unit.interact import Interact
from sr.operation.unit.menu.click_phone_menu_item import ClickPhoneMenuItem
from sr.operation.unit.menu.open_phone_menu import OpenPhoneMenu
from sr.screen_area.interastral_peace_guide import ScreenGuide
from sr.screen_area.screen_normal_world import ScreenNormalWorld
from sr.screen_area.screen_sim_uni import ScreenSimUni
from sr.sim_uni.op.choose_sim_uni_category import ChooseSimUniCategory
from sr.sim_uni.op.choose_sim_uni_diff import ChooseSimUniDiff
from sr.sim_uni.op.choose_sim_uni_num import ChooseSimUniNum
from sr.sim_uni.op.choose_sim_uni_path import ChooseSimUniPath
from sr.sim_uni.op.choose_sim_uni_type import ChooseSimUniType
from sr.sim_uni.op.sim_uni_battle import SimUniEnterFight
from sr.sim_uni.op.sim_uni_claim_weekly_reward import SimUniClaimWeeklyReward
from sr.sim_uni.op.sim_uni_exit import SimUniExit
from sr.sim_uni.op.sim_uni_start import SimUniStart
from sr.sim_uni.sim_uni_const import SimUniType, SimUniPath, SimUniWorldEnum
from sr.sim_uni.sim_uni_const import SimUniTypeEnum, SimUniPath, SimUniWorldEnum


class SimUniApp(Application):
Expand Down Expand Up @@ -88,13 +87,13 @@ def __init__(self, ctx: Context,
choose_in_su = StateOperationNode('模拟宇宙中选择模拟宇宙', self.choose_in_sim_uni)
edges.append(StateOperationEdge(choose_sim_category, choose_in_su))

si_transport = StateOperationNode('生存索引中传送', self._transport)
si_transport = StateOperationNode('生存索引中传送', op=ChooseGuideMission(ctx, GuideMissionEnum.SIM_UNI_00.value))
edges.append(StateOperationEdge(choose_in_si, si_transport))

su_transport = StateOperationNode('模拟宇宙中传送', op=ChooseGuideMission(ctx, MISSION_SU_NORMAL))
su_transport = StateOperationNode('模拟宇宙中传送', op=ChooseGuideMission(ctx, GuideMissionEnum.SIM_UNI_00.value))
edges.append(StateOperationEdge(choose_in_su, su_transport))

choose_normal_universe = StateOperationNode('普通宇宙', op=ChooseSimUniType(ctx, SimUniType.NORMAL))
choose_normal_universe = StateOperationNode('普通宇宙', op=ChooseSimUniCategory(ctx, SimUniTypeEnum.NORMAL))
edges.append(StateOperationEdge(si_transport, choose_normal_universe))
edges.append(StateOperationEdge(su_transport, choose_normal_universe))
edges.append(StateOperationEdge(check_initial_screen, choose_normal_universe,
Expand Down Expand Up @@ -299,7 +298,7 @@ def choose_in_survival_index(self) -> OperationOneRoundResult:
area = ScreenGuide.SURVIVAL_INDEX_CATE.value
part = cv2_utils.crop_image_only(screen, area.rect)

target = SurvivalIndexCategoryEnum.SI_SIM_UNI.value
target = GuideCategoryEnum.SI_SIM_UNI.value
ocr_result_map = self.ctx.ocr.run_ocr(part)

for k, v in ocr_result_map.items():
Expand Down Expand Up @@ -327,7 +326,7 @@ def choose_in_sim_uni(self) -> OperationOneRoundResult:
area = ScreenGuide.SURVIVAL_INDEX_CATE.value
part = cv2_utils.crop_image_only(screen, area.rect)

target = SurvivalIndexCategoryEnum.SI_SIM_UNI.value
target = GuideCategoryEnum.SI_SIM_UNI.value
ocr_result_map = self.ctx.ocr.run_ocr(part)

for k, v in ocr_result_map.items():
Expand Down
10 changes: 4 additions & 6 deletions src/sr/app/trailblaze_power/trailblaze_power_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,12 @@
from sr.const import phone_menu_const
from sr.const.map_const import TransportPoint
from sr.context import Context
from sr.interastral_peace_guide.survival_index_mission import SurvivalIndexMission, \
SurvivalIndexMissionEnum
from sr.operation import StateOperationNode, StateOperationEdge, OperationOneRoundResult
from sr.operation.combine.use_trailblaze_power import UseTrailblazePower
from sr.operation.common.back_to_normal_world_plus import BackToNormalWorldPlus
from sr.operation.common.cancel_mission_trace import CancelMissionTrace
from sr.operation.unit.guide import GuideTabEnum
from sr.operation.unit.guide.choose_guide_tab import ChooseGuideTab
from sr.interastral_peace_guide.guide_const import GuideTabEnum, GuideMission, GuideMissionEnum
from sr.interastral_peace_guide.choose_guide_tab import ChooseGuideTab
from sr.operation.unit.menu.click_phone_menu_item import ClickPhoneMenuItem
from sr.operation.unit.menu.open_phone_menu import OpenPhoneMenu
from sr.sim_uni.sim_uni_const import SimUniWorld, OrnamentExtraction
Expand Down Expand Up @@ -67,7 +65,7 @@ def __init__(self, ctx: Context):

def _init_before_execute(self):
super()._init_before_execute()
self.last_mission: Optional[SurvivalIndexMission] = None # 上一个挑战副本
self.last_mission: Optional[GuideMission] = None # 上一个挑战副本
self.power: int = 0 # 剩余开拓力
self.qty: int = 0 # 沉浸器数量

Expand Down Expand Up @@ -133,7 +131,7 @@ def _get_power_and_qty(self, screen: MatLike) -> Tuple[int, int]:

def _execute_plan(self) -> OperationOneRoundResult:
plan: Optional[TrailblazePowerPlanItem] = self.ctx.tp_config.next_plan_item
mission: Optional[SurvivalIndexMission] = SurvivalIndexMissionEnum.get_by_unique_id(plan['mission_id'])
mission: Optional[GuideMission] = GuideMissionEnum.get_by_unique_id(plan['mission_id'])
can_run_times: int = self.power // mission.power
if isinstance(mission.tp, (SimUniWorld, OrnamentExtraction)): # 模拟宇宙相关的增加沉浸器数量
can_run_times += self.qty
Expand Down
1 change: 1 addition & 0 deletions src/sr/app/trailblaze_power/trailblaze_power_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ class TrailblazePowerPlanItem(TypedDict):
support: str
plan_times: int # 计划通关次数
run_times: int # 已经通关次数
diff: int # 难度 0代表自动最高


class TrailblazePowerConfig(ConfigHolder):
Expand Down
4 changes: 2 additions & 2 deletions src/sr/app/trailblaze_power/trailblaze_power_run_record.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from sr.app.app_description import AppDescriptionEnum
from sr.app.app_run_record import AppRunRecord
from sr.app.trailblaze_power.trailblaze_power_config import TrailblazePowerConfig
from sr.interastral_peace_guide.survival_index_mission import SurvivalIndexMission, SurvivalIndexMissionEnum
from sr.interastral_peace_guide.guide_const import GuideMission, GuideMissionEnum
from sr.mystools.one_dragon_mys_config import MysConfig


Expand All @@ -26,6 +26,6 @@ def _should_reset_by_dt(self):
time_usage = now - mys.refresh_time
power = mys.current_stamina + time_usage // 360 # 6分钟恢复一点体力
if self.tp_config.next_plan_item is not None:
point: Optional[SurvivalIndexMission] = SurvivalIndexMissionEnum.get_by_unique_id(self.tp_config.next_plan_item['mission_id'])
point: Optional[GuideMission] = GuideMissionEnum.get_by_unique_id(self.tp_config.next_plan_item['mission_id'])
return point is not None and power >= point.power
return False
4 changes: 2 additions & 2 deletions src/sr/app/treasures_lightward/treasures_lightward_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
from sr.operation import StateOperationEdge, StateOperationNode, OperationResult, OperationOneRoundResult, Operation
from sr.operation.common.back_to_normal_world_plus import BackToNormalWorldPlus
from sr.operation.unit.forgotten_hall.get_reward_in_fh import GetRewardInForgottenHall
from sr.operation.unit.guide import GuideTabEnum
from sr.operation.unit.guide.choose_guide_tab import ChooseGuideTab
from sr.interastral_peace_guide.guide_const import GuideTabEnum
from sr.interastral_peace_guide.choose_guide_tab import ChooseGuideTab
from sr.operation.unit.menu.click_phone_menu_item import ClickPhoneMenuItem
from sr.operation.unit.menu.open_phone_menu import OpenPhoneMenu
from sr.screen_area.screen_treasures_lightward import ScreenTreasuresLightWard
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,17 @@
from basic.img import cv2_utils
from basic.log_utils import log
from sr.context import Context
from sr.interastral_peace_guide.survival_index_mission import SurvivalIndexCategory
from sr.interastral_peace_guide.guide_const import GuideCategory
from sr.operation import Operation, StateOperation, StateOperationNode, OperationOneRoundResult
from sr.screen_area.interastral_peace_guide import ScreenGuide


class SurvivalIndexChooseCategory(StateOperation):
class ChooseGuideCategory(StateOperation):

def __init__(self, ctx: Context, target: SurvivalIndexCategory,
def __init__(self, ctx: Context, target: GuideCategory,
skip_wait: bool = True):
"""
在 星际和平指南-生存索引 画面中使用
在 星际和平指南 画面中使用
选择左方的一个类目
:param ctx: 上下文
:param target: 目标类目
Expand All @@ -25,20 +25,28 @@ def __init__(self, ctx: Context, target: SurvivalIndexCategory,
nodes.append(StateOperationNode('选择', self._choose))

super().__init__(ctx, try_times=5,
op_name='%s %s' % (gt('生存索引', 'ui'), gt(target.cn, 'ui')),
op_name='%s %s' % (gt('指南', 'ui'), gt(target.cn, 'ui')),
nodes=nodes
)

self.target: SurvivalIndexCategory = target
self.target: GuideCategory = target

def _wait(self) -> OperationOneRoundResult:
"""
等待画面加载 左上角出现对应tab的
:return:
"""
screen = self.screenshot()

area = ScreenGuide.SURVIVAL_INDEX_TITLE.value
if self.find_area(area, screen):
part = cv2_utils.crop_image_only(screen, area.rect)

target_tab = self.target.tab.cn
ocr_result = self.ctx.ocr.ocr_for_single_line(part)
if str_utils.find_by_lcs(ocr_result, gt(target_tab, 'ocr'), percent=0.55):
return self.round_success()
else:
return self.round_retry('未在%s画面' % area.text)
return self.round_retry('未在%s画面' % target_tab)

def _choose(self) -> OperationOneRoundResult:
screen = self.screenshot()
Expand Down
Loading

0 comments on commit 6a1329a

Please sign in to comment.