mirror of
https://github.com/LmeSzinc/StarRailCopilot.git
synced 2024-11-30 03:16:08 +00:00
Add: 增加了使用一键退役的支持
- 增加了根据设置选择切换函数的装饰器 - 增加了ADB截图和点击的设置, 默认使用ADB截图, uiautomator2点击 - 更新了assets.py文件, 上次commit忘记了
This commit is contained in:
parent
ad73de92dd
commit
91e83271a4
BIN
assets/retire/ONE_CLICK_RETIREMENT.png
Normal file
BIN
assets/retire/ONE_CLICK_RETIREMENT.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 7.2 KiB |
@ -36,6 +36,7 @@ enable_low_hp_withdraw = no
|
|||||||
scout_hp_difference_threshold = 0.2
|
scout_hp_difference_threshold = 0.2
|
||||||
low_hp_withdraw_threshold = 0.2
|
low_hp_withdraw_threshold = 0.2
|
||||||
enable_retirement = yes
|
enable_retirement = yes
|
||||||
|
use_one_click_retirement = no
|
||||||
retire_mode = retire_10
|
retire_mode = retire_10
|
||||||
retire_n = yes
|
retire_n = yes
|
||||||
retire_r = no
|
retire_r = no
|
||||||
@ -78,6 +79,8 @@ command = emulator
|
|||||||
serial = 127.0.0.1:62001
|
serial = 127.0.0.1:62001
|
||||||
package_name = com.bilibili.azurlane
|
package_name = com.bilibili.azurlane
|
||||||
enable_perspective_error_image_save = no
|
enable_perspective_error_image_save = no
|
||||||
|
use_adb_screenshot = yes
|
||||||
|
use_adb_control = no
|
||||||
|
|
||||||
[Daily]
|
[Daily]
|
||||||
enable_daily_mission = yes
|
enable_daily_mission = yes
|
||||||
|
68
module/base/decorator.py
Normal file
68
module/base/decorator.py
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
from functools import wraps
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
from module.logger import logger
|
||||||
|
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
"""
|
||||||
|
Decorator that calls different function with a same name according to config.
|
||||||
|
|
||||||
|
func_list likes:
|
||||||
|
func_list = {
|
||||||
|
'func1': [
|
||||||
|
{'options': {'ENABLE': True}, 'func': 1},
|
||||||
|
{'options': {'ENABLE': False}, 'func': 1}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
func_list = {}
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def when(cls, **kwargs):
|
||||||
|
"""
|
||||||
|
Args:
|
||||||
|
**kwargs: Any option in AzurLaneConfig.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
@Config.when(USE_ONE_CLICK_RETIREMENT=True)
|
||||||
|
def retire_ships(self, amount=None, rarity=None):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@Config.when(USE_ONE_CLICK_RETIREMENT=False)
|
||||||
|
def retire_ships(self, amount=None, rarity=None):
|
||||||
|
pass
|
||||||
|
"""
|
||||||
|
options = kwargs
|
||||||
|
|
||||||
|
def decorate(func):
|
||||||
|
name = func.__name__
|
||||||
|
data = {'options': options, 'func': func}
|
||||||
|
if name not in cls.func_list:
|
||||||
|
cls.func_list[name] = [data]
|
||||||
|
else:
|
||||||
|
cls.func_list[name].append(data)
|
||||||
|
|
||||||
|
@wraps(func)
|
||||||
|
def wrapper(self, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Args:
|
||||||
|
self: ModuleBase instance.
|
||||||
|
*args:
|
||||||
|
**kwargs:
|
||||||
|
"""
|
||||||
|
for record in cls.func_list[name]:
|
||||||
|
|
||||||
|
flag = [self.config.__getattribute__(key) == value for key, value in record['options'].items()]
|
||||||
|
if not np.all(flag):
|
||||||
|
continue
|
||||||
|
|
||||||
|
return record['func'](self, *args, **kwargs)
|
||||||
|
|
||||||
|
logger.warning(f'No option fits for {name}, using the last define func.')
|
||||||
|
return func(self, *args, **kwargs)
|
||||||
|
|
||||||
|
return wrapper
|
||||||
|
|
||||||
|
return decorate
|
@ -146,9 +146,10 @@ def main(ini_name=''):
|
|||||||
# 退役选项
|
# 退役选项
|
||||||
retire = setting_parser.add_argument_group('退役设置', '')
|
retire = setting_parser.add_argument_group('退役设置', '')
|
||||||
retire.add_argument('--启用退役', default=default('--启用退役'), choices=['是', '否'])
|
retire.add_argument('--启用退役', default=default('--启用退役'), choices=['是', '否'])
|
||||||
|
retire.add_argument('--使用一键退役', default=default('--使用一键退役'), choices=['是', '否'])
|
||||||
retire.add_argument('--退役方案', default=default('--退役方案'), choices=['退役全部', '退役10个'])
|
retire.add_argument('--退役方案', default=default('--退役方案'), choices=['退役全部', '退役10个'])
|
||||||
|
|
||||||
rarity = retire.add_argument_group('退役稀有度', '暂不支持舰种选择')
|
rarity = retire.add_argument_group('退役稀有度', '暂不支持舰种选择, 使用一键退役时忽略以下选项')
|
||||||
rarity.add_argument('--退役白皮', default=default('--退役白皮'), choices=['是', '否'], help='N')
|
rarity.add_argument('--退役白皮', default=default('--退役白皮'), choices=['是', '否'], help='N')
|
||||||
rarity.add_argument('--退役蓝皮', default=default('--退役蓝皮'), choices=['是', '否'], help='R')
|
rarity.add_argument('--退役蓝皮', default=default('--退役蓝皮'), choices=['是', '否'], help='R')
|
||||||
rarity.add_argument('--退役紫皮', default=default('--退役紫皮'), choices=['是', '否'], help='SR')
|
rarity.add_argument('--退役紫皮', default=default('--退役紫皮'), choices=['是', '否'], help='SR')
|
||||||
@ -208,9 +209,13 @@ def main(ini_name=''):
|
|||||||
emulator.add_argument('--设备', default=default('--设备'), help='例如 127.0.0.1:62001')
|
emulator.add_argument('--设备', default=default('--设备'), help='例如 127.0.0.1:62001')
|
||||||
emulator.add_argument('--包名', default=default('--包名'), help='如果不是Biliibli国服, 或者使用了非官方客户端, 需修改')
|
emulator.add_argument('--包名', default=default('--包名'), help='如果不是Biliibli国服, 或者使用了非官方客户端, 需修改')
|
||||||
|
|
||||||
debug = emulator_parser.add_argument_group('调试', '')
|
debug = emulator_parser.add_argument_group('调试设置', '')
|
||||||
debug.add_argument('--保存透视识别出错的图像', default=default('--保存透视识别出错的图像'), choices=['是', '否'])
|
debug.add_argument('--保存透视识别出错的图像', default=default('--保存透视识别出错的图像'), choices=['是', '否'])
|
||||||
|
|
||||||
|
adb = emulator_parser.add_argument_group('ADB设置', '')
|
||||||
|
adb.add_argument('--使用ADB截图', default=default('--使用ADB截图'), choices=['是', '否'], help='建议开启, 能减少CPU占用')
|
||||||
|
adb.add_argument('--使用ADB点击', default=default('--使用ADB点击'), choices=['是', '否'], help='建议关闭, 能加快点击速度')
|
||||||
|
|
||||||
# ==========每日任务==========
|
# ==========每日任务==========
|
||||||
daily_parser = subs.add_parser('每日任务困难演习')
|
daily_parser = subs.add_parser('每日任务困难演习')
|
||||||
|
|
||||||
|
@ -127,7 +127,7 @@ class AzurLaneConfig:
|
|||||||
SERIAL = '127.0.0.1:62001'
|
SERIAL = '127.0.0.1:62001'
|
||||||
PACKAGE_NAME = 'com.bilibili.azurlane'
|
PACKAGE_NAME = 'com.bilibili.azurlane'
|
||||||
COMMAND = ''
|
COMMAND = ''
|
||||||
USE_ADB_SCREENSHOT = False
|
USE_ADB_SCREENSHOT = True
|
||||||
USE_ADB_CONTROL = False
|
USE_ADB_CONTROL = False
|
||||||
SCREEN_SHOT_SAVE_FOLDER_BASE = './screenshot'
|
SCREEN_SHOT_SAVE_FOLDER_BASE = './screenshot'
|
||||||
SCREEN_SHOT_SAVE_FOLDER = ''
|
SCREEN_SHOT_SAVE_FOLDER = ''
|
||||||
@ -180,6 +180,7 @@ class AzurLaneConfig:
|
|||||||
module.retire
|
module.retire
|
||||||
"""
|
"""
|
||||||
ENABLE_RETIREMENT = True
|
ENABLE_RETIREMENT = True
|
||||||
|
USE_ONE_CLICK_RETIREMENT = False
|
||||||
DOCK_FULL_TRIGGERED = False
|
DOCK_FULL_TRIGGERED = False
|
||||||
RETIRE_MODE = '10' # all, 10
|
RETIRE_MODE = '10' # all, 10
|
||||||
RETIRE_N = True
|
RETIRE_N = True
|
||||||
@ -332,6 +333,8 @@ class AzurLaneConfig:
|
|||||||
self.SERIAL = option['serial']
|
self.SERIAL = option['serial']
|
||||||
self.PACKAGE_NAME = option['package_name'].strip()
|
self.PACKAGE_NAME = option['package_name'].strip()
|
||||||
self.ENABLE_PERSPECTIVE_ERROR_IMAGE_SAVE = to_bool(option['enable_perspective_error_image_save'])
|
self.ENABLE_PERSPECTIVE_ERROR_IMAGE_SAVE = to_bool(option['enable_perspective_error_image_save'])
|
||||||
|
self.USE_ADB_SCREENSHOT = to_bool(option['use_adb_screenshot'])
|
||||||
|
self.USE_ADB_CONTROL = to_bool(option['use_adb_control'])
|
||||||
|
|
||||||
option = config['Setting']
|
option = config['Setting']
|
||||||
# Stop condition
|
# Stop condition
|
||||||
@ -372,6 +375,7 @@ class AzurLaneConfig:
|
|||||||
self.SCREEN_SHOT_SAVE_FOLDER_BASE = option['drop_screenshot_folder']
|
self.SCREEN_SHOT_SAVE_FOLDER_BASE = option['drop_screenshot_folder']
|
||||||
# Retirement
|
# Retirement
|
||||||
self.ENABLE_RETIREMENT = to_bool(option['enable_retirement'])
|
self.ENABLE_RETIREMENT = to_bool(option['enable_retirement'])
|
||||||
|
self.USE_ONE_CLICK_RETIREMENT = to_bool(option['use_one_click_retirement'])
|
||||||
self.RETIRE_MODE = option['retire_mode'].split('_')[1]
|
self.RETIRE_MODE = option['retire_mode'].split('_')[1]
|
||||||
for r in ['n', 'r', 'sr', 'ssr']:
|
for r in ['n', 'r', 'sr', 'ssr']:
|
||||||
self.__setattr__(f'RETIRE_{r.upper()}', to_bool(option[f'retire_{r}']))
|
self.__setattr__(f'RETIRE_{r.upper()}', to_bool(option[f'retire_{r}']))
|
||||||
|
@ -70,6 +70,7 @@ dic_chi_to_eng = {
|
|||||||
'先锋血量平衡阈值': 'scout_hp_difference_threshold',
|
'先锋血量平衡阈值': 'scout_hp_difference_threshold',
|
||||||
'低血量撤退阈值': 'low_hp_withdraw_threshold',
|
'低血量撤退阈值': 'low_hp_withdraw_threshold',
|
||||||
'启用退役': 'enable_retirement',
|
'启用退役': 'enable_retirement',
|
||||||
|
'使用一键退役': 'use_one_click_retirement',
|
||||||
'退役方案': 'retire_mode',
|
'退役方案': 'retire_mode',
|
||||||
'退役白皮': 'retire_n',
|
'退役白皮': 'retire_n',
|
||||||
'退役蓝皮': 'retire_r',
|
'退役蓝皮': 'retire_r',
|
||||||
@ -105,6 +106,8 @@ dic_chi_to_eng = {
|
|||||||
'设备': 'serial',
|
'设备': 'serial',
|
||||||
'包名': 'package_name',
|
'包名': 'package_name',
|
||||||
'保存透视识别出错的图像': 'enable_perspective_error_image_save',
|
'保存透视识别出错的图像': 'enable_perspective_error_image_save',
|
||||||
|
'使用ADB截图': 'use_adb_screenshot',
|
||||||
|
'使用ADB点击': 'use_adb_control',
|
||||||
'打每日': 'enable_daily_mission',
|
'打每日': 'enable_daily_mission',
|
||||||
'打困难': 'enable_hard_campaign',
|
'打困难': 'enable_hard_campaign',
|
||||||
'打演习': 'enable_exercise',
|
'打演习': 'enable_exercise',
|
||||||
|
@ -10,7 +10,7 @@ FLEET_PREPARATION = Button(area=(981, 575, 1180, 636), color=(235, 185, 114), bu
|
|||||||
GET_EMERGENCY_REPAIR = Button(area=(645, 352, 666, 360), color=(255, 255, 255), button=(645, 352, 666, 360), file='./assets/daemon/GET_EMERGENCY_REPAIR.png')
|
GET_EMERGENCY_REPAIR = Button(area=(645, 352, 666, 360), color=(255, 255, 255), button=(645, 352, 666, 360), file='./assets/daemon/GET_EMERGENCY_REPAIR.png')
|
||||||
GET_ITEMS = Button(area=(538, 217, 741, 253), color=(160, 192, 248), button=(1120, 643, 1146, 666), file='./assets/daemon/GET_ITEMS.png')
|
GET_ITEMS = Button(area=(538, 217, 741, 253), color=(160, 192, 248), button=(1120, 643, 1146, 666), file='./assets/daemon/GET_ITEMS.png')
|
||||||
MAP_PREPARATION = Button(area=(853, 488, 1053, 549), color=(235, 186, 114), button=(853, 488, 1053, 549), file='./assets/daemon/MAP_PREPARATION.png')
|
MAP_PREPARATION = Button(area=(853, 488, 1053, 549), color=(235, 186, 114), button=(853, 488, 1053, 549), file='./assets/daemon/MAP_PREPARATION.png')
|
||||||
STORY_CHOOSE = Button(area=(902, 344, 959, 357), color=(98, 122, 156), button=(902, 344, 959, 357), file='./assets/daemon/STORY_CHOOSE.png')
|
STORY_CHOOCE = Button(area=(902, 344, 959, 357), color=(98, 122, 156), button=(902, 344, 959, 357), file='./assets/daemon/STORY_CHOOCE.png')
|
||||||
STORY_CHOOSE_2 = Button(area=(903, 388, 959, 399), color=(98, 121, 156), button=(903, 388, 959, 399), file='./assets/daemon/STORY_CHOOSE_2.png')
|
STORY_CHOOCE_2 = Button(area=(903, 388, 959, 399), color=(98, 121, 156), button=(903, 388, 959, 399), file='./assets/daemon/STORY_CHOOCE_2.png')
|
||||||
STORY_SKIP = Button(area=(1216, 676, 1258, 708), color=(148, 159, 178), button=(1180, 30, 1256, 49), file='./assets/daemon/STORY_SKIP.png')
|
STORY_SKIP = Button(area=(1216, 676, 1258, 708), color=(148, 159, 178), button=(1180, 30, 1256, 49), file='./assets/daemon/STORY_SKIP.png')
|
||||||
STRATEGY_OPEN = Button(area=(1102, 480, 1178, 482), color=(255, 223, 74), button=(1064, 405, 1093, 483), file='./assets/daemon/STRATEGY_OPEN.png')
|
STRATEGY_OPEN = Button(area=(1102, 480, 1178, 482), color=(255, 223, 74), button=(1064, 405, 1093, 483), file='./assets/daemon/STRATEGY_OPEN.png')
|
||||||
|
@ -45,18 +45,18 @@ class Control(Connection):
|
|||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def click(self, button, adb=False):
|
def click(self, button):
|
||||||
"""Method to click a button.
|
"""Method to click a button.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
button (button.Button): AzurLane Button instance.
|
button (button.Button): AzurLane Button instance.
|
||||||
adb (bool): If use adb.
|
|
||||||
"""
|
"""
|
||||||
self.click_record_check(button)
|
self.click_record_check(button)
|
||||||
x, y = random_rectangle_point(button.button)
|
x, y = random_rectangle_point(button.button)
|
||||||
logger.info(
|
logger.info(
|
||||||
'Click %s @ %s' % (self._point2str(x, y), button)
|
'Click %s @ %s' % (self._point2str(x, y), button)
|
||||||
)
|
)
|
||||||
|
adb = self.config.USE_ADB_CONTROL
|
||||||
if adb:
|
if adb:
|
||||||
self._click_adb(x, y)
|
self._click_adb(x, y)
|
||||||
else:
|
else:
|
||||||
@ -71,7 +71,7 @@ class Control(Connection):
|
|||||||
def _click_adb(self, x, y):
|
def _click_adb(self, x, y):
|
||||||
self.adb_shell(['input', 'tap', str(x), str(y)], serial=self.serial)
|
self.adb_shell(['input', 'tap', str(x), str(y)], serial=self.serial)
|
||||||
|
|
||||||
def multi_click(self, button, n, interval=(0.1, 0.2), adb=False):
|
def multi_click(self, button, n, interval=(0.1, 0.2)):
|
||||||
click_timer = Timer(0.1)
|
click_timer = Timer(0.1)
|
||||||
for _ in range(n):
|
for _ in range(n):
|
||||||
remain = ensure_time(interval) - click_timer.current()
|
remain = ensure_time(interval) - click_timer.current()
|
||||||
@ -79,7 +79,7 @@ class Control(Connection):
|
|||||||
self.sleep(remain)
|
self.sleep(remain)
|
||||||
|
|
||||||
click_timer.reset()
|
click_timer.reset()
|
||||||
self.click(button, adb=adb)
|
self.click(button)
|
||||||
|
|
||||||
def long_click(self, button, duration=(1, 1.2)):
|
def long_click(self, button, duration=(1, 1.2)):
|
||||||
"""Method to long click a button.
|
"""Method to long click a button.
|
||||||
|
@ -48,9 +48,9 @@ class Device(Screenshot, Control, AppControl):
|
|||||||
self.handle_night_commission()
|
self.handle_night_commission()
|
||||||
return super().screenshot()
|
return super().screenshot()
|
||||||
|
|
||||||
def click(self, button, adb=False):
|
def click(self, button):
|
||||||
self.handle_night_commission()
|
self.handle_night_commission()
|
||||||
return super().click(button, adb=adb)
|
return super().click(button)
|
||||||
|
|
||||||
def swipe(self, vector, box=(123, 159, 1193, 628), random_range=(0, 0, 0, 0), padding=15, duration=(0.1, 0.2)):
|
def swipe(self, vector, box=(123, 159, 1193, 628), random_range=(0, 0, 0, 0), padding=15, duration=(0.1, 0.2)):
|
||||||
self.handle_night_commission()
|
self.handle_night_commission()
|
||||||
|
@ -10,5 +10,9 @@ EQUIP_ENTER = Button(area=(351, 446, 361, 456), color=(252, 251, 252), button=(3
|
|||||||
EXERCISE_PREPARATION = Button(area=(543, 539, 741, 599), color=(235, 186, 114), button=(543, 539, 741, 599), file='./assets/exercise/EXERCISE_PREPARATION.png')
|
EXERCISE_PREPARATION = Button(area=(543, 539, 741, 599), color=(235, 186, 114), button=(543, 539, 741, 599), file='./assets/exercise/EXERCISE_PREPARATION.png')
|
||||||
NEW_OPPONENT = Button(area=(1065, 340, 1204, 382), color=(129, 166, 220), button=(1065, 340, 1204, 382), file='./assets/exercise/NEW_OPPONENT.png')
|
NEW_OPPONENT = Button(area=(1065, 340, 1204, 382), color=(129, 166, 220), button=(1065, 340, 1204, 382), file='./assets/exercise/NEW_OPPONENT.png')
|
||||||
OCR_EXERCISE_REMAIN = Button(area=(1148, 145, 1178, 160), color=(105, 148, 107), button=(1148, 145, 1178, 160), file='./assets/exercise/OCR_EXERCISE_REMAIN.png')
|
OCR_EXERCISE_REMAIN = Button(area=(1148, 145, 1178, 160), color=(105, 148, 107), button=(1148, 145, 1178, 160), file='./assets/exercise/OCR_EXERCISE_REMAIN.png')
|
||||||
|
OPPONENT_1 = Button(area=(104, 77, 316, 381), color=(101, 117, 136), button=(104, 77, 316, 381), file='./assets/exercise/OPPONENT_1.png')
|
||||||
|
OPPONENT_2 = Button(area=(348, 77, 560, 381), color=(105, 123, 149), button=(348, 77, 560, 381), file='./assets/exercise/OPPONENT_2.png')
|
||||||
|
OPPONENT_3 = Button(area=(592, 77, 804, 381), color=(106, 131, 158), button=(592, 77, 804, 381), file='./assets/exercise/OPPONENT_3.png')
|
||||||
|
OPPONENT_4 = Button(area=(836, 77, 1048, 381), color=(103, 118, 141), button=(836, 77, 1048, 381), file='./assets/exercise/OPPONENT_4.png')
|
||||||
QUIT_CONFIRM = Button(area=(420, 490, 593, 548), color=(199, 122, 114), button=(420, 490, 593, 548), file='./assets/exercise/QUIT_CONFIRM.png')
|
QUIT_CONFIRM = Button(area=(420, 490, 593, 548), color=(199, 122, 114), button=(420, 490, 593, 548), file='./assets/exercise/QUIT_CONFIRM.png')
|
||||||
QUIT_RECONFIRM = Button(area=(703, 492, 877, 550), color=(195, 111, 102), button=(703, 492, 877, 550), file='./assets/exercise/QUIT_RECONFIRM.png')
|
QUIT_RECONFIRM = Button(area=(703, 492, 877, 550), color=(195, 111, 102), button=(703, 492, 877, 550), file='./assets/exercise/QUIT_RECONFIRM.png')
|
||||||
|
@ -11,6 +11,7 @@ FLEET_UNLOCKED = Button(area=(1197, 502, 1274, 519), color=(195, 168, 168), butt
|
|||||||
FORMATION_1 = Button(area=(1108, 415, 1170, 477), color=(80, 82, 93), button=(1108, 415, 1170, 477), file='./assets/handler/FORMATION_1.png')
|
FORMATION_1 = Button(area=(1108, 415, 1170, 477), color=(80, 82, 93), button=(1108, 415, 1170, 477), file='./assets/handler/FORMATION_1.png')
|
||||||
FORMATION_2 = Button(area=(1108, 415, 1170, 477), color=(80, 82, 92), button=(1108, 415, 1170, 477), file='./assets/handler/FORMATION_2.png')
|
FORMATION_2 = Button(area=(1108, 415, 1170, 477), color=(80, 82, 92), button=(1108, 415, 1170, 477), file='./assets/handler/FORMATION_2.png')
|
||||||
FORMATION_3 = Button(area=(1108, 415, 1170, 477), color=(79, 82, 92), button=(1108, 415, 1170, 477), file='./assets/handler/FORMATION_3.png')
|
FORMATION_3 = Button(area=(1108, 415, 1170, 477), color=(79, 82, 92), button=(1108, 415, 1170, 477), file='./assets/handler/FORMATION_3.png')
|
||||||
|
FORMATION_LOCATION = Button(area=(145, 115, 437, 159), color=(103, 118, 118), button=(145, 115, 437, 159), file='./assets/handler/FORMATION_LOCATION.png')
|
||||||
GET_AMMO = Button(area=(792, 315, 794, 333), color=(251, 250, 255), button=(792, 315, 794, 333), file='./assets/handler/GET_AMMO.png')
|
GET_AMMO = Button(area=(792, 315, 794, 333), color=(251, 250, 255), button=(792, 315, 794, 333), file='./assets/handler/GET_AMMO.png')
|
||||||
GET_ITEMS_1 = Button(area=(538, 217, 741, 253), color=(160, 192, 248), button=(924, 653, 943, 672), file='./assets/handler/GET_ITEMS_1.png')
|
GET_ITEMS_1 = Button(area=(538, 217, 741, 253), color=(160, 192, 248), button=(924, 653, 943, 672), file='./assets/handler/GET_ITEMS_1.png')
|
||||||
GET_MISSION = Button(area=(553, 491, 727, 551), color=(96, 144, 204), button=(553, 491, 727, 551), file='./assets/handler/GET_MISSION.png')
|
GET_MISSION = Button(area=(553, 491, 727, 551), color=(96, 144, 204), button=(553, 491, 727, 551), file='./assets/handler/GET_MISSION.png')
|
||||||
|
@ -10,6 +10,7 @@ EQUIP_CONFIRM = Button(area=(871, 516, 1044, 573), color=(95, 143, 203), button=
|
|||||||
EQUIP_CONFIRM_2 = Button(area=(720, 541, 893, 598), color=(94, 142, 202), button=(720, 541, 893, 598), file='./assets/retire/EQUIP_CONFIRM_2.png')
|
EQUIP_CONFIRM_2 = Button(area=(720, 541, 893, 598), color=(94, 142, 202), button=(720, 541, 893, 598), file='./assets/retire/EQUIP_CONFIRM_2.png')
|
||||||
GET_ITEMS_1_RETIREMENT_SAVE = Button(area=(1031, 656, 1063, 688), color=(49, 44, 54), button=(1031, 656, 1063, 688), file='./assets/retire/GET_ITEMS_1_RETIREMENT_SAVE.png')
|
GET_ITEMS_1_RETIREMENT_SAVE = Button(area=(1031, 656, 1063, 688), color=(49, 44, 54), button=(1031, 656, 1063, 688), file='./assets/retire/GET_ITEMS_1_RETIREMENT_SAVE.png')
|
||||||
IN_RETIREMENT_CHECK = Button(area=(854, 641, 1027, 698), color=(184, 99, 89), button=(854, 641, 1027, 698), file='./assets/retire/IN_RETIREMENT_CHECK.png')
|
IN_RETIREMENT_CHECK = Button(area=(854, 641, 1027, 698), color=(184, 99, 89), button=(854, 641, 1027, 698), file='./assets/retire/IN_RETIREMENT_CHECK.png')
|
||||||
|
ONE_CLICK_RETIREMENT = Button(area=(639, 641, 811, 698), color=(94, 138, 194), button=(639, 641, 811, 698), file='./assets/retire/ONE_CLICK_RETIREMENT.png')
|
||||||
RETIRE_APPEAR_1 = Button(area=(353, 492, 527, 550), color=(96, 144, 204), button=(353, 492, 527, 550), file='./assets/retire/RETIRE_APPEAR_1.png')
|
RETIRE_APPEAR_1 = Button(area=(353, 492, 527, 550), color=(96, 144, 204), button=(353, 492, 527, 550), file='./assets/retire/RETIRE_APPEAR_1.png')
|
||||||
RETIRE_APPEAR_2 = Button(area=(553, 492, 727, 550), color=(94, 143, 204), button=(553, 492, 727, 550), file='./assets/retire/RETIRE_APPEAR_2.png')
|
RETIRE_APPEAR_2 = Button(area=(553, 492, 727, 550), color=(94, 143, 204), button=(553, 492, 727, 550), file='./assets/retire/RETIRE_APPEAR_2.png')
|
||||||
RETIRE_APPEAR_3 = Button(area=(753, 492, 927, 550), color=(94, 143, 202), button=(753, 492, 927, 550), file='./assets/retire/RETIRE_APPEAR_3.png')
|
RETIRE_APPEAR_3 = Button(area=(753, 492, 927, 550), color=(94, 143, 202), button=(753, 492, 927, 550), file='./assets/retire/RETIRE_APPEAR_3.png')
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
from module.base.button import ButtonGrid
|
from module.base.button import ButtonGrid
|
||||||
|
from module.base.decorator import Config
|
||||||
from module.base.utils import get_color, color_similar
|
from module.base.utils import get_color, color_similar
|
||||||
from module.combat.assets import GET_ITEMS_1
|
from module.combat.assets import GET_ITEMS_1
|
||||||
from module.handler.info_bar import InfoBarHandler
|
from module.handler.info_bar import InfoBarHandler
|
||||||
@ -115,7 +116,7 @@ class Retirement(UI, InfoBarHandler, PopupHandler):
|
|||||||
executed = False
|
executed = False
|
||||||
while 1:
|
while 1:
|
||||||
self.device.screenshot()
|
self.device.screenshot()
|
||||||
if self.config.RETIRE_SR or self.config.RETIRE_SSR:
|
if self.config.RETIRE_SR or self.config.RETIRE_SSR or self.config.USE_ONE_CLICK_RETIREMENT:
|
||||||
if self.handle_popup_confirm():
|
if self.handle_popup_confirm():
|
||||||
continue
|
continue
|
||||||
if self.appear_then_click(SHIP_CONFIRM, offset=30, interval=2):
|
if self.appear_then_click(SHIP_CONFIRM, offset=30, interval=2):
|
||||||
@ -172,6 +173,40 @@ class Retirement(UI, InfoBarHandler, PopupHandler):
|
|||||||
rarity.add('SSR')
|
rarity.add('SSR')
|
||||||
return rarity
|
return rarity
|
||||||
|
|
||||||
|
@Config.when(USE_ONE_CLICK_RETIREMENT=True)
|
||||||
|
def retire_ships(self, amount=None, rarity=None):
|
||||||
|
logger.hr('Retirement')
|
||||||
|
logger.info('Using one click retirement.')
|
||||||
|
if amount is None:
|
||||||
|
amount = self._retire_amount
|
||||||
|
end = False
|
||||||
|
total = 0
|
||||||
|
|
||||||
|
while 1:
|
||||||
|
self.handle_info_bar()
|
||||||
|
|
||||||
|
while 1:
|
||||||
|
self.device.screenshot()
|
||||||
|
if self.appear(SHIP_CONFIRM_2):
|
||||||
|
break
|
||||||
|
if self.info_bar_count():
|
||||||
|
logger.info('No more ships to retire.')
|
||||||
|
end = True
|
||||||
|
break
|
||||||
|
if self.appear_then_click(ONE_CLICK_RETIREMENT, interval=2):
|
||||||
|
continue
|
||||||
|
|
||||||
|
if end:
|
||||||
|
break
|
||||||
|
self._retirement_confirm()
|
||||||
|
total += 10
|
||||||
|
if total >= amount:
|
||||||
|
break
|
||||||
|
|
||||||
|
logger.info(f'Total retired round: {total // 10}')
|
||||||
|
return total
|
||||||
|
|
||||||
|
@Config.when(USE_ONE_CLICK_RETIREMENT=False)
|
||||||
def retire_ships(self, amount=None, rarity=None):
|
def retire_ships(self, amount=None, rarity=None):
|
||||||
"""
|
"""
|
||||||
Args:
|
Args:
|
||||||
|
@ -10,6 +10,7 @@ COMMISSION_DAILY = Button(area=(35, 132, 67, 186), color=(208, 172, 118), button
|
|||||||
COMMISSION_HAS_PENDING = Button(area=(357, 300, 359, 330), color=(86, 201, 173), button=(357, 300, 359, 330), file='./assets/reward/COMMISSION_HAS_PENDING.png')
|
COMMISSION_HAS_PENDING = Button(area=(357, 300, 359, 330), color=(86, 201, 173), button=(357, 300, 359, 330), file='./assets/reward/COMMISSION_HAS_PENDING.png')
|
||||||
COMMISSION_NOTICE_AT_CAMPAIGN = Button(area=(1054, 647, 1061, 654), color=(197, 89, 64), button=(1054, 647, 1061, 654), file='./assets/reward/COMMISSION_NOTICE_AT_CAMPAIGN.png')
|
COMMISSION_NOTICE_AT_CAMPAIGN = Button(area=(1054, 647, 1061, 654), color=(197, 89, 64), button=(1054, 647, 1061, 654), file='./assets/reward/COMMISSION_NOTICE_AT_CAMPAIGN.png')
|
||||||
COMMISSION_START = Button(area=(1028, 322, 1156, 383), color=(229, 175, 113), button=(1028, 322, 1156, 383), file='./assets/reward/COMMISSION_START.png')
|
COMMISSION_START = Button(area=(1028, 322, 1156, 383), color=(229, 175, 113), button=(1028, 322, 1156, 383), file='./assets/reward/COMMISSION_START.png')
|
||||||
|
COMMISSION_STOP_SCROLLING = Button(area=(115, 236, 179, 487), color=(50, 55, 74), button=(115, 236, 179, 487), file='./assets/reward/COMMISSION_STOP_SCROLLING.png')
|
||||||
COMMISSION_URGENT = Button(area=(35, 231, 68, 281), color=(215, 188, 124), button=(35, 231, 68, 281), file='./assets/reward/COMMISSION_URGENT.png')
|
COMMISSION_URGENT = Button(area=(35, 231, 68, 281), color=(215, 188, 124), button=(35, 231, 68, 281), file='./assets/reward/COMMISSION_URGENT.png')
|
||||||
EXP_INFO_S_REWARD = Button(area=(498, 140, 557, 154), color=(233, 241, 127), button=(498, 140, 557, 154), file='./assets/reward/EXP_INFO_S_REWARD.png')
|
EXP_INFO_S_REWARD = Button(area=(498, 140, 557, 154), color=(233, 241, 127), button=(498, 140, 557, 154), file='./assets/reward/EXP_INFO_S_REWARD.png')
|
||||||
MISSION_MULTI = Button(area=(1041, 8, 1101, 39), color=(226, 192, 142), button=(1041, 8, 1101, 39), file='./assets/reward/MISSION_MULTI.png')
|
MISSION_MULTI = Button(area=(1041, 8, 1101, 39), color=(226, 192, 142), button=(1041, 8, 1101, 39), file='./assets/reward/MISSION_MULTI.png')
|
||||||
|
@ -85,7 +85,7 @@ class Reward(RewardCommission):
|
|||||||
reward = True
|
reward = True
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if not self.appear(page_reward.check_button):
|
if not self.appear(page_reward.check_button) or self.info_bar_count():
|
||||||
exit_timer.reset()
|
exit_timer.reset()
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user