Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

修复了制造站切换产物函数的一些问题 #289

Merged
merged 2 commits into from
Sep 18, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
177 changes: 106 additions & 71 deletions arknights_mower/solvers/base_schedule.py
Original file line number Diff line number Diff line change
Expand Up @@ -1427,77 +1427,112 @@ def drone(self, room: str, not_customize=False, not_return=False, adjust_time=Fa
self.back(interval=2, rebuild=False)
self.back(interval=2)

# # 用于制造站切换产物,请注意在调用该函数前有足够的无人机,并补足相应制造站产物,目前仅支持中级作战记录与赤金之间的切换
# def 制造站切换产物(self, room: str, 目标产物: str, not_customize=False, not_return=False):
# # 点击进入该房间
# self.进入房间(room)
# while self.get_infra_scene() == 9:
# time.sleep(1)
# self.recog.update()
# # 进入房间详情
# self.tap((self.recog.w * 0.05, self.recog.h * 0.95), interval=3)
# # 关闭掉房间总览
# error_count = 0
# while self.find('factory_accelerate') is None:
# if error_count > 5:
# raise Exception('未成功进入制造详情界面')
# self.tap((self.recog.w * 0.05, self.recog.h * 0.95), interval=3)
# error_count += 1
# accelerate = self.find('factory_accelerate')
# 无人机数量 = 当前项目.digit_reader.get_drone(当前项目.recog.gray, 当前项目.recog.h, 当前项目.recog.w)
# if accelerate:
# self.tap_element('factory_accelerate')
# self.recog.update()
# 剩余制造加速总时间 = self.digit_reader.识别制造加速总剩余时间(self.recog.gray, self.recog.h, self.recog.w)
# # logger.info(f'制造站 B{room[5]}0{room[7]} 剩余制造总时间为 {剩余制造加速总时间}')
# 时 = int(剩余制造加速总时间[0:3])
# if 时 > 118: 当前产物 = '经验'
# else: 当前产物 = '赤金'
# if 当前产物 == 目标产物: self.返回基建主界面()
# else:
# logger.info(f'制造站 B{room[5]}0{room[7]} 当前产物为{当前产物},切换产物为{目标产物}')
# 需要无人机数 = 0
# while 需要无人机数 < 10:
# 总分钟数 = int(剩余制造加速总时间[4:6]) + 60 * 时
# if 当前产物 == '赤金':
# 需要无人机数 = (总分钟数 % 72) // 3 + 1
# elif 当前产物 == '经验':
# 需要无人机数 = (总分钟数 % 180) // 3 + 1
# else:
# logger.warning('目前不支持该产物切换策略,尚待完善')
# self.返回基建主界面()
# if 需要无人机数 > 无人机数量 - 10:
# logger.warning(f'''
# 切换产物需要无人机{需要无人机数}个,当前仅有{无人机数量}个,
# 无法切换产物,建议该任务至少在{(需要无人机数 - 无人机数量 + 10) * 3.5 // 3}分钟后再执行
# ''')
# self.返回基建主界面()
# else:
# logger.warning(f'需要加无人机{需要无人机数}个')
# for 次数 in range(需要无人机数):
# self.tap((self.recog.w * 1320 // 1920, self.recog.h * 502 // 1080), interval=0.05)
# self.recog.update()
# 剩余制造加速总时间 = self.digit_reader.识别制造加速总剩余时间(
# self.recog.gray, self.recog.h, self.recog.w)
# # logger.info(f'制造站 B{room[5]}0{room[7]} 剩余制造总时间为 {剩余制造加速总时间}')
# 总分钟数 = int(剩余制造加速总时间[4:6]) + 60 * 时
# if 当前产物 == '赤金':
# 需要无人机数 = (总分钟数 % 72) // 3 + 1
# elif 当前产物 == '经验':
# 需要无人机数 = (总分钟数 % 180) // 3 + 1
# else:
# logger.warning('目前不支持该产物切换策略,尚待完善')
# self.返回基建主界面()
# self.tap((self.recog.w * 3 // 4, self.recog.h * 4 // 5), interval=3) # 确认加速
# self.tap((self.recog.w * 9 // 10, self.recog.h // 2), interval=1) # 点击当前产品
# if 目标产物 == '经验':
# self.tap((self.recog.w // 2, self.recog.h // 2), interval=1) # 点击中级作战记录
# elif 目标产物 == '赤金':
# self.tap((self.recog.w // 10, self.recog.h // 3), interval=1) # 进入贵金属分类
# self.tap((self.recog.w // 2, self.recog.h // 4), interval=1) # 点击赤金
# self.tap((self.recog.w * 3 // 4, self.recog.h * 2 // 7), interval=1) # 点击最多
# self.tap((self.recog.w * 3 // 4, self.recog.h * 5 // 6), interval=1) # 确认数量
# self.tap((self.recog.w * 3 // 4, self.recog.h * 7 // 10), interval=1) # 确认更改

# 用于制造站切换产物,请注意在调用该函数前有足够的无人机,并补足相应制造站产物,目前仅支持中级作战记录与赤金之间的切换
# def 制造站切换产物(self, room: str, 目标产物: str, not_customize=False, not_return=False):
# # 点击进入该房间
# self.enter_room(room)
# while self.get_infra_scene() == 9:
# time.sleep(1)
# self.recog.update()
# # 进入房间详情
# self.tap((self.recog.w * 0.05, self.recog.h * 0.95), interval=3)
# # 关闭掉房间总览
# error_count = 0
# while self.find('factory_accelerate') is None:
# if error_count > 5:
# raise Exception('未成功进入制造详情界面')
# self.tap((self.recog.w * 0.05, self.recog.h * 0.95), interval=3)
# error_count += 1
# accelerate = self.find('factory_accelerate')
# 无人机数量 = self.digit_reader.get_drone(self.recog.gray, self.recog.h, self.recog.w)
# if accelerate:
# self.tap_element('factory_accelerate')
# self.recog.update()
# 剩余制造加速总时间 = self.digit_reader.识别制造加速总剩余时间(self.recog.gray, self.recog.h, self.recog.w)
# # logger.info(f'制造站 B{room[5]}0{room[7]} 剩余制造总时间为 {剩余制造加速总时间}')
# 时 = int(剩余制造加速总时间[0:3])
# if 时 > 118: 当前产物 = '经验'
# else: 当前产物 = '赤金'
# if 当前产物 == 目标产物:
# logger.info('返回基建主界面')
# while self.get_infra_scene() != 201:
# if self.find('index_infrastructure') is not None:
# self.tap_element('index_infrastructure')
# elif self.find('12cadpa') is not None:
# self.device.tap((self.recog.w // 2, self.recog.h // 2))
# else:
# self.back()
# self.recog.update()
# else:
# logger.info(f'制造站 B{room[5]}0{room[7]} 当前产物为{当前产物},切换产物为{目标产物}')
# 需要无人机数 = 0
# while 需要无人机数 < 10:
# 总分钟数 = int(剩余制造加速总时间[4:6]) + 60 * 时
# if 当前产物 == '赤金':
# 需要无人机数 = (总分钟数 % 72) // 3 + 1
# elif 当前产物 == '经验':
# 需要无人机数 = (总分钟数 % 180) // 3 + 1
# else:
# logger.warning('目前不支持该产物切换策略,尚待完善')
# logger.info('返回基建主界面')
# while self.get_infra_scene() != 201:
# if self.find('index_infrastructure') is not None:
# self.tap_element('index_infrastructure')
# elif self.find('12cadpa') is not None:
# self.device.tap((self.recog.w // 2, self.recog.h // 2))
# else:
# self.back()
# self.recog.update()
# if 需要无人机数 > 无人机数量 - 10:
# logger.warning(f'''
# 切换产物需要无人机{需要无人机数}个,当前仅有{无人机数量}个,
# 无法切换产物,建议该任务至少在{(需要无人机数 - 无人机数量 + 10) * 3.5 // 3}分钟后再执行
# ''')
# logger.info('返回基建主界面')
# while self.get_infra_scene() != 201:
# if self.find('index_infrastructure') is not None:
# self.tap_element('index_infrastructure')
# elif self.find('12cadpa') is not None:
# self.device.tap((self.recog.w // 2, self.recog.h // 2))
# else:
# self.back()
# self.recog.update()
# else:
# logger.warning(f'需要加无人机{需要无人机数}个')
# for 次数 in range(需要无人机数):
# self.tap((self.recog.w * 1320 // 1920, self.recog.h * 502 // 1080), interval=0.05)
# self.recog.update()
# 剩余制造加速总时间 = self.digit_reader.识别制造加速总剩余时间(
# self.recog.gray, self.recog.h, self.recog.w)
# # logger.info(f'制造站 B{room[5]}0{room[7]} 剩余制造总时间为 {剩余制造加速总时间}')
# 总分钟数 = int(剩余制造加速总时间[4:6]) + 60 * 时
# if 当前产物 == '赤金':
# 需要无人机数 = (总分钟数 % 72) // 3 + 1
# elif 当前产物 == '经验':
# 需要无人机数 = (总分钟数 % 180) // 3 + 1
# else:
# logger.warning('目前不支持该产物切换策略,尚待完善')
# logger.info('返回基建主界面')
# while self.get_infra_scene() != 201:
# if self.find('index_infrastructure') is not None:
# self.tap_element('index_infrastructure')
# elif self.find('12cadpa') is not None:
# self.device.tap((self.recog.w // 2, self.recog.h // 2))
# else:
# self.back()
# self.recog.update()
# self.tap((self.recog.w * 3 // 4, self.recog.h * 4 // 5), interval=3) # 确认加速
# self.tap((self.recog.w * 9 // 10, self.recog.h // 2), interval=1) # 点击当前产品
# if 目标产物 == '经验':
# self.tap((self.recog.w // 2, self.recog.h // 2), interval=1) # 点击中级作战记录
# elif 目标产物 == '赤金':
# self.tap((self.recog.w // 10, self.recog.h // 3), interval=1) # 进入贵金属分类
# self.tap((self.recog.w // 2, self.recog.h // 4), interval=1) # 点击赤金
# self.tap((self.recog.w * 3 // 4, self.recog.h * 2 // 7), interval=1) # 点击最多
# self.tap((self.recog.w * 3 // 4, self.recog.h * 5 // 6), interval=1) # 确认数量
# self.tap((self.recog.w * 3 // 4, self.recog.h * 7 // 10), interval=1) # 确认更改


def get_arrange_order(self) -> ArrangeOrder:
best_score, best_order = 0, None
Expand Down