This commit is contained in:
kyO The NinjA 2020-06-05 13:59:31 -03:00
commit 37f714fa24
20 changed files with 277 additions and 218 deletions

25
alas.py
View File

@ -37,6 +37,11 @@ class AzurLaneAutoScript:
with open(f'{folder}/log.txt', 'w') as f: with open(f'{folder}/log.txt', 'w') as f:
f.writelines(text) f.writelines(text)
def reward_when_finished(self):
from module.reward.reward import Reward
az = Reward(self.config)
az.reward_loop()
def setting(self): def setting(self):
for key, value in self.config.config['Setting'].items(): for key, value in self.config.config['Setting'].items():
print(f'{key} = {value}') print(f'{key} = {value}')
@ -49,9 +54,7 @@ class AzurLaneAutoScript:
print(f'{key} = {value}') print(f'{key} = {value}')
logger.hr('Reward Settings saved') logger.hr('Reward Settings saved')
from module.reward.reward import Reward self.reward_when_finished()
az = Reward(self.config)
az.reward_loop()
def emulator(self): def emulator(self):
for key, value in self.config.config['Emulator'].items(): for key, value in self.config.config['Emulator'].items():
@ -72,20 +75,18 @@ class AzurLaneAutoScript:
from module.campaign.run import CampaignRun from module.campaign.run import CampaignRun
az = CampaignRun(self.config) az = CampaignRun(self.config)
az.run(self.config.CAMPAIGN_NAME) az.run(self.config.CAMPAIGN_NAME)
self.reward_when_finished()
def daily(self): def daily(self):
""" """
Method to run daily missions. Method to run daily missions.
""" """
flag = True
if self.config.ENABLE_DAILY_MISSION: if self.config.ENABLE_DAILY_MISSION:
from module.daily.daily import Daily from module.daily.daily import Daily
az = Daily(self.config) az = Daily(self.config)
if not az.record_executed_since(): if not az.record_executed_since():
az.run() az.run()
az.record_save() az.record_save()
flag = True
if self.config.ENABLE_HARD_CAMPAIGN: if self.config.ENABLE_HARD_CAMPAIGN:
from module.hard.hard import CampaignHard from module.hard.hard import CampaignHard
@ -93,7 +94,6 @@ class AzurLaneAutoScript:
if not az.record_executed_since(): if not az.record_executed_since():
az.run() az.run()
az.record_save() az.record_save()
flag = True
if self.config.ENABLE_EXERCISE: if self.config.ENABLE_EXERCISE:
from module.exercise.exercise import Exercise from module.exercise.exercise import Exercise
@ -101,12 +101,8 @@ class AzurLaneAutoScript:
if not az.record_executed_since(): if not az.record_executed_since():
az.run() az.run()
az.record_save() az.record_save()
flag = True
if flag: self.reward_when_finished()
from module.reward.reward import Reward
az = Reward(self.config)
az.reward()
def event(self): def event(self):
""" """
@ -115,11 +111,13 @@ class AzurLaneAutoScript:
from module.campaign.run import CampaignRun from module.campaign.run import CampaignRun
az = CampaignRun(self.config) az = CampaignRun(self.config)
az.run(self.config.CAMPAIGN_EVENT, folder=self.config.EVENT_NAME) az.run(self.config.CAMPAIGN_EVENT, folder=self.config.EVENT_NAME)
self.reward_when_finished()
def event_daily_ab(self): def event_daily_ab(self):
from module.event.campaign_ab import CampaignAB from module.event.campaign_ab import CampaignAB
az = CampaignAB(self.config) az = CampaignAB(self.config)
az.run_event_daily() az.run_event_daily()
self.reward_when_finished()
def semi_auto(self): def semi_auto(self):
from module.daemon.daemon import AzurLaneDaemon from module.daemon.daemon import AzurLaneDaemon
@ -130,16 +128,19 @@ class AzurLaneAutoScript:
from module.campaign.run import CampaignRun from module.campaign.run import CampaignRun
az = CampaignRun(self.config) az = CampaignRun(self.config)
az.run('campaign_7_2_mystery_farming') az.run('campaign_7_2_mystery_farming')
self.reward_when_finished()
def c124_leveling(self): def c124_leveling(self):
from module.campaign.run import CampaignRun from module.campaign.run import CampaignRun
az = CampaignRun(self.config) az = CampaignRun(self.config)
az.run('campaign_12_4_leveling') az.run('campaign_12_4_leveling')
self.reward_when_finished()
def c122_leveling(self): def c122_leveling(self):
from module.campaign.run import CampaignRun from module.campaign.run import CampaignRun
az = CampaignRun(self.config) az = CampaignRun(self.config)
az.run('campaign_12_2_leveling') az.run('campaign_12_2_leveling')
self.reward_when_finished()
def retire(self): def retire(self):
from module.retire.retirement import Retirement from module.retire.retirement import Retirement

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

View File

@ -3,7 +3,6 @@ from module.map.map_base import CampaignMap
from module.map.map_grids import SelectedGrids, RoadGrids from module.map.map_grids import SelectedGrids, RoadGrids
from module.logger import logger from module.logger import logger
MAP = CampaignMap('10-1') MAP = CampaignMap('10-1')
MAP.shape = 'G6' MAP.shape = 'G6'
MAP.map_data = ''' MAP.map_data = '''
@ -15,12 +14,12 @@ MAP.map_data = '''
SP -- ++ ++ -- -- ++ SP -- ++ ++ -- -- ++
''' '''
MAP.weight_data = ''' MAP.weight_data = '''
10 10 10 10 40 40 10 50 50 50 50 50 40 50
10 20 10 30 30 40 40 50 50 50 30 30 50 40
10 40 30 30 30 10 10 50 40 30 30 30 50 05
10 10 10 10 30 10 10 50 25 20 20 30 50 05
10 10 10 10 10 10 10 50 50 50 15 10 10 05
10 10 10 10 10 10 10 50 50 50 50 50 50 50
''' '''
# MAP.camera_data = ['D3'] # MAP.camera_data = ['D3']
MAP.spawn_data = [ MAP.spawn_data = [
@ -67,6 +66,8 @@ class Campaign(CampaignBase):
MAP = MAP MAP = MAP
def battle_0(self): def battle_0(self):
self.fleet_2_push_forward()
if self.clear_roadblocks([road_main]): if self.clear_roadblocks([road_main]):
return True return True
if self.clear_potential_roadblocks([road_main]): if self.clear_potential_roadblocks([road_main]):

View File

@ -3,7 +3,6 @@ from module.map.map_base import CampaignMap
from module.map.map_grids import SelectedGrids, RoadGrids from module.map.map_grids import SelectedGrids, RoadGrids
from module.logger import logger from module.logger import logger
MAP = CampaignMap('10-2') MAP = CampaignMap('10-2')
MAP.shape = 'h6' MAP.shape = 'h6'
MAP.map_data = ''' MAP.map_data = '''

View File

@ -3,7 +3,6 @@ from module.map.map_base import CampaignMap
from module.map.map_grids import SelectedGrids, RoadGrids from module.map.map_grids import SelectedGrids, RoadGrids
from module.logger import logger from module.logger import logger
MAP = CampaignMap('10-4') MAP = CampaignMap('10-4')
MAP.shape = 'I6' MAP.shape = 'I6'
MAP.map_data = ''' MAP.map_data = '''

View File

@ -34,11 +34,10 @@ A4, B4, C4, D4, E4, F4, G4, \
class Config: class Config:
FLEET_BOSS = 1 FLEET_BOSS = 1
MAP_MYSTERY_HAS_CARRIER = True MAP_MYSTERY_HAS_CARRIER = True
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 40 INTERNAL_LINES_HOUGHLINES_THRESHOLD = 40
EDGE_LINES_HOUGHLINES_THRESHOLD = 40 EDGE_LINES_HOUGHLINES_THRESHOLD = 75
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
'height': (120, 255 - 40), 'height': (120, 255 - 40),
'width': (1.5, 10), 'width': (1.5, 10),

View File

@ -48,7 +48,6 @@ class Campaign(CampaignBase):
return self.battle_default() return self.battle_default()
def battle_3(self): def battle_3(self):
# print(H1.__dict__)
self.clear_all_mystery() self.clear_all_mystery()
if not self.check_accessibility(H1, fleet='boss'): if not self.check_accessibility(H1, fleet='boss'):

View File

@ -11,6 +11,7 @@ MAP.map_data = '''
SP -- ++ ++ -- ME ME MB SP -- ++ ++ -- ME ME MB
''' '''
MAP.camera_data = ['C1', 'E1'] MAP.camera_data = ['C1', 'E1']
MAP.camera_data_spawn_point = ['C1']
MAP.weight_data = ''' MAP.weight_data = '''
40 30 21 20 17 15 50 50 40 30 21 20 17 15 50 50
40 40 50 50 16 13 50 50 40 40 50 50 16 13 50 50

View File

@ -3,7 +3,6 @@ from module.map.map_base import CampaignMap
from module.map.map_grids import SelectedGrids, RoadGrids from module.map.map_grids import SelectedGrids, RoadGrids
from module.logger import logger from module.logger import logger
MAP = CampaignMap('9-2') MAP = CampaignMap('9-2')
MAP.shape = 'I5' MAP.shape = 'I5'
MAP.map_data = ''' MAP.map_data = '''
@ -13,14 +12,14 @@ MAP.map_data = '''
-- ++ -- -- ++ SP -- ME -- -- ++ -- -- ++ SP -- ME --
-- ME -- SP ++ SP -- -- -- -- ME -- SP ++ SP -- -- --
''' '''
#MAP.weight_data = ''' MAP.weight_data = '''
# 10 10 30 10 10 10 10 10 10 10 10 30 10 10 10 10 10 10
# 10 10 20 30 10 30 10 10 10 10 10 20 30 10 30 10 10 10
# 30 10 20 10 10 10 10 10 10 30 10 20 10 10 10 10 10 10
# 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
# 10 30 10 10 10 10 10 10 10 10 30 10 10 10 10 10 10 10
#''' '''
#MAP.camera_data = ['D4'] MAP.camera_data = ['D4']
MAP.spawn_data = [ MAP.spawn_data = [
{'battle': 0, 'enemy': 3}, {'battle': 0, 'enemy': 3},
{'battle': 1, 'enemy': 2}, {'battle': 1, 'enemy': 2},
@ -40,7 +39,6 @@ A5, B5, C5, D5, E5, F5, G5, H5, I5, \
road_main = RoadGrids([C3, C2, [C1, D2], F1, H1, H2, H3, H4]) road_main = RoadGrids([C3, C2, [C1, D2], F1, H1, H2, H3, H4])
class Config: class Config:
SUBMARINE = 0 SUBMARINE = 0
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 40 INTERNAL_LINES_HOUGHLINES_THRESHOLD = 40
@ -60,6 +58,7 @@ class Config:
'wlen': 1000, 'wlen': 1000,
} }
class Campaign(CampaignBase): class Campaign(CampaignBase):
MAP = MAP MAP = MAP

View File

@ -3,7 +3,6 @@ from module.map.map_base import CampaignMap
from module.map.map_grids import SelectedGrids, RoadGrids from module.map.map_grids import SelectedGrids, RoadGrids
from module.logger import logger from module.logger import logger
MAP = CampaignMap('9-3') MAP = CampaignMap('9-3')
MAP.shape = 'H6' MAP.shape = 'H6'
MAP.map_data = ''' MAP.map_data = '''
@ -42,6 +41,7 @@ A6, B6, C6, D6, E6, F6, G6, H6, \
road_main = RoadGrids([A2, A3, C5, D6, F2, F3, F6, G6, H4]) road_main = RoadGrids([A2, A3, C5, D6, F2, F3, F6, G6, H4])
class Config: class Config:
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 40 INTERNAL_LINES_HOUGHLINES_THRESHOLD = 40
EDGE_LINES_HOUGHLINES_THRESHOLD = 40 EDGE_LINES_HOUGHLINES_THRESHOLD = 40
@ -60,6 +60,7 @@ class Config:
'wlen': 1000, 'wlen': 1000,
} }
class Campaign(CampaignBase): class Campaign(CampaignBase):
MAP = MAP MAP = MAP

View File

@ -43,6 +43,7 @@ A6, B6, C6, D6, E6, F6, G6, H6, I6, \
road_main = RoadGrids([A3, D6, [E5, F6], G4, I4]) road_main = RoadGrids([A3, D6, [E5, F6], G4, I4])
class Config: class Config:
INTERNAL_LINES_HOUGHLINES_THRESHOLD = 40 INTERNAL_LINES_HOUGHLINES_THRESHOLD = 40
EDGE_LINES_HOUGHLINES_THRESHOLD = 40 EDGE_LINES_HOUGHLINES_THRESHOLD = 40
@ -61,6 +62,7 @@ class Config:
'wlen': 1000, 'wlen': 1000,
} }
class Campaign(CampaignBase): class Campaign(CampaignBase):
MAP = MAP MAP = MAP

View File

@ -382,6 +382,11 @@ class AzurLaneConfig:
logger.warning(f'Mob fleet [{self.FLEET_1}] and boss fleet [{self.FLEET_2}] is the same') logger.warning(f'Mob fleet [{self.FLEET_1}] and boss fleet [{self.FLEET_2}] is the same')
logger.warning('They should to be set to different fleets') logger.warning('They should to be set to different fleets')
exit(1) exit(1)
if self.COMMAND.lower() == 'main' and self.CAMPAIGN_NAME.startswith('campaign_'):
if int(self.CAMPAIGN_NAME.split('_')[1]) >= 7 and self.FLEET_2 == 0:
logger.warning('You should use 2 fleets from chapter 7 to 13')
logger.warning(f'Current: mob fleet [{self.FLEET_1}], boss fleet [{self.FLEET_2}]')
exit(1)
def save(self): def save(self):
self.config.write(codecs.open(self.CONFIG_FILE, "w+", "utf8")) self.config.write(codecs.open(self.CONFIG_FILE, "w+", "utf8"))

View File

@ -113,7 +113,7 @@ class Camera(InfoHandler):
try: try:
self.grids = Grids(self.device.image, config=self.config) self.grids = Grids(self.device.image, config=self.config)
except PerspectiveError as e: except Exception as e:
if self.info_bar_count(): if self.info_bar_count():
logger.info('Perspective error cause by info bar. Waiting.') logger.info('Perspective error cause by info bar. Waiting.')
self.handle_info_bar() self.handle_info_bar()
@ -258,8 +258,15 @@ class Camera(InfoHandler):
self.map.reset_fleet() self.map.reset_fleet()
queue = self.map.camera_data queue = self.map.camera_data
if battle_count == 0:
queue.add(self.map.camera_data_spawn_point)
while len(queue) > 0: while len(queue) > 0:
if self.map.missing_is_none(battle_count, mystery_count, siren_count, carrier_count): if self.map.missing_is_none(battle_count, mystery_count, siren_count, carrier_count):
if battle_count == 0 and queue.count != queue.delete(self.map.camera_data_spawn_point).count:
logger.info('Continue scanning spawn points.')
pass
else:
logger.info('All spawn found, Early stopped.') logger.info('All spawn found, Early stopped.')
break break
queue = queue.sort_by_camera_distance(self.camera) queue = queue.sort_by_camera_distance(self.camera)

View File

@ -45,6 +45,7 @@ class CampaignMap:
self._spawn_data = [] self._spawn_data = []
self._spawn_data_backup = [] self._spawn_data_backup = []
self._camera_data = [] self._camera_data = []
self._camera_data_spawn_point = []
self.in_map_swipe_preset_data = None self.in_map_swipe_preset_data = None
self.poor_map_data = False self.poor_map_data = False
self.camera_sight = (-3, -1, 3, 2) self.camera_sight = (-3, -1, 3, 2)
@ -89,6 +90,7 @@ class CampaignMap:
# camera_data can be generate automatically, but it's better to set it manually. # camera_data can be generate automatically, but it's better to set it manually.
self.camera_data = [location2node(loca) for loca in camera_2d(self._shape, sight=self.camera_sight)] self.camera_data = [location2node(loca) for loca in camera_2d(self._shape, sight=self.camera_sight)]
self.camera_data_spawn_point = []
# weight_data set to 10. # weight_data set to 10.
for grid in self: for grid in self:
grid.weight = 10. grid.weight = 10.
@ -208,6 +210,23 @@ class CampaignMap:
""" """
self._camera_data = SelectedGrids([self[node2location(node)] for node in nodes]) self._camera_data = SelectedGrids([self[node2location(node)] for node in nodes])
@property
def camera_data_spawn_point(self):
"""Additional camera_data to detect fleets at spawn point.
Returns:
SelectedGrids:
"""
return self._camera_data_spawn_point
@camera_data_spawn_point.setter
def camera_data_spawn_point(self, nodes):
"""
Args:
nodes (list): Contains str.
"""
self._camera_data_spawn_point = SelectedGrids([self[node2location(node)] for node in nodes])
@property @property
def spawn_data(self): def spawn_data(self):
return self._spawn_data return self._spawn_data

View File

@ -92,7 +92,7 @@ class SelectedGrids:
Returns: Returns:
SelectedGrids: SelectedGrids:
""" """
return SelectedGrids(self.grids + grids.grids) return SelectedGrids(list(set(self.grids + grids.grids)))
def delete(self, grids): def delete(self, grids):
""" """

View File

@ -9,6 +9,8 @@ COMMISSION_ADVICE = Button(area={'cn': (871, 322, 999, 383), 'en': (871, 328, 10
COMMISSION_DAILY = Button(area={'cn': (35, 132, 67, 186), 'en': (30, 126, 75, 188)}, color={'cn': (208, 172, 118), 'en': (170, 132, 92)}, button={'cn': (35, 132, 67, 186), 'en': (30, 126, 75, 188)}, file={'cn': './assets/cn/reward/COMMISSION_DAILY.png', 'en': './assets/en/reward/COMMISSION_DAILY.png'}) COMMISSION_DAILY = Button(area={'cn': (35, 132, 67, 186), 'en': (30, 126, 75, 188)}, color={'cn': (208, 172, 118), 'en': (170, 132, 92)}, button={'cn': (35, 132, 67, 186), 'en': (30, 126, 75, 188)}, file={'cn': './assets/cn/reward/COMMISSION_DAILY.png', 'en': './assets/en/reward/COMMISSION_DAILY.png'})
COMMISSION_HAS_PENDING = Button(area={'cn': (357, 300, 359, 330), 'en': (357, 300, 359, 330)}, color={'cn': (86, 201, 173), 'en': (81, 205, 174)}, button={'cn': (357, 300, 359, 330), 'en': (357, 300, 359, 330)}, file={'cn': './assets/cn/reward/COMMISSION_HAS_PENDING.png', 'en': './assets/en/reward/COMMISSION_HAS_PENDING.png'}) COMMISSION_HAS_PENDING = Button(area={'cn': (357, 300, 359, 330), 'en': (357, 300, 359, 330)}, color={'cn': (86, 201, 173), 'en': (81, 205, 174)}, button={'cn': (357, 300, 359, 330), 'en': (357, 300, 359, 330)}, file={'cn': './assets/cn/reward/COMMISSION_HAS_PENDING.png', 'en': './assets/en/reward/COMMISSION_HAS_PENDING.png'})
COMMISSION_NOTICE_AT_CAMPAIGN = Button(area={'cn': (1054, 647, 1061, 654), 'en': (1054, 647, 1061, 654)}, color={'cn': (197, 89, 64), 'en': (197, 89, 64)}, button={'cn': (1054, 647, 1061, 654), 'en': (1054, 647, 1061, 654)}, file={'cn': './assets/cn/reward/COMMISSION_NOTICE_AT_CAMPAIGN.png', 'en': './assets/en/reward/COMMISSION_NOTICE_AT_CAMPAIGN.png'}) COMMISSION_NOTICE_AT_CAMPAIGN = Button(area={'cn': (1054, 647, 1061, 654), 'en': (1054, 647, 1061, 654)}, color={'cn': (197, 89, 64), 'en': (197, 89, 64)}, button={'cn': (1054, 647, 1061, 654), 'en': (1054, 647, 1061, 654)}, file={'cn': './assets/cn/reward/COMMISSION_NOTICE_AT_CAMPAIGN.png', 'en': './assets/en/reward/COMMISSION_NOTICE_AT_CAMPAIGN.png'})
COMMISSION_SCROLL = Button(area={'cn': (1255, 0, 1260, 720), 'en': (1255, 0, 1260, 720)}, color={'cn': (111, 104, 69), 'en': (111, 104, 69)}, button={'cn': (1255, 0, 1260, 720), 'en': (1255, 0, 1260, 720)}, file={'cn': './assets/cn/reward/COMMISSION_SCROLL.png', 'en': './assets/en/reward/COMMISSION_SCROLL.png'})
COMMISSION_SCROLL_TOP = Button(area={'cn': (1254, 81, 1261, 88), 'en': (1254, 81, 1261, 88)}, color={'cn': (247, 209, 66), 'en': (247, 209, 66)}, button={'cn': (1254, 81, 1261, 88), 'en': (1254, 81, 1261, 88)}, file={'cn': './assets/cn/reward/COMMISSION_SCROLL_TOP.png', 'en': './assets/en/reward/COMMISSION_SCROLL_TOP.png'})
COMMISSION_START = Button(area={'cn': (1028, 322, 1156, 383), 'en': (1031, 333, 1147, 383)}, color={'cn': (229, 175, 113), 'en': (227, 169, 108)}, button={'cn': (1028, 322, 1156, 383), 'en': (1031, 333, 1147, 383)}, file={'cn': './assets/cn/reward/COMMISSION_START.png', 'en': './assets/en/reward/COMMISSION_START.png'}) COMMISSION_START = Button(area={'cn': (1028, 322, 1156, 383), 'en': (1031, 333, 1147, 383)}, color={'cn': (229, 175, 113), 'en': (227, 169, 108)}, button={'cn': (1028, 322, 1156, 383), 'en': (1031, 333, 1147, 383)}, file={'cn': './assets/cn/reward/COMMISSION_START.png', 'en': './assets/en/reward/COMMISSION_START.png'})
COMMISSION_STOP_SCROLLING = Button(area={'cn': (115, 236, 179, 487), 'en': (115, 236, 179, 487)}, color={'cn': (50, 55, 74), 'en': (50, 55, 74)}, button={'cn': (115, 236, 179, 487), 'en': (115, 236, 179, 487)}, file={'cn': './assets/cn/reward/COMMISSION_STOP_SCROLLING.png', 'en': './assets/en/reward/COMMISSION_STOP_SCROLLING.png'}) COMMISSION_STOP_SCROLLING = Button(area={'cn': (115, 236, 179, 487), 'en': (115, 236, 179, 487)}, color={'cn': (50, 55, 74), 'en': (50, 55, 74)}, button={'cn': (115, 236, 179, 487), 'en': (115, 236, 179, 487)}, file={'cn': './assets/cn/reward/COMMISSION_STOP_SCROLLING.png', 'en': './assets/en/reward/COMMISSION_STOP_SCROLLING.png'})
COMMISSION_URGENT = Button(area={'cn': (35, 231, 68, 281), 'en': (28, 221, 76, 283)}, color={'cn': (215, 188, 124), 'en': (169, 138, 95)}, button={'cn': (35, 231, 68, 281), 'en': (28, 221, 76, 283)}, file={'cn': './assets/cn/reward/COMMISSION_URGENT.png', 'en': './assets/en/reward/COMMISSION_URGENT.png'}) COMMISSION_URGENT = Button(area={'cn': (35, 231, 68, 281), 'en': (28, 221, 76, 283)}, color={'cn': (215, 188, 124), 'en': (169, 138, 95)}, button={'cn': (35, 231, 68, 281), 'en': (28, 221, 76, 283)}, file={'cn': './assets/cn/reward/COMMISSION_URGENT.png', 'en': './assets/en/reward/COMMISSION_URGENT.png'})

View File

@ -9,6 +9,7 @@ from module.base.decorator import Config
from module.base.ocr import Ocr from module.base.ocr import Ocr
from module.base.timer import Timer from module.base.timer import Timer
from module.base.utils import area_offset, get_color, random_rectangle_vector from module.base.utils import area_offset, get_color, random_rectangle_vector
from module.base.utils import color_similar_1d, random_rectangle_point
from module.handler.info_handler import InfoHandler from module.handler.info_handler import InfoHandler
from module.logger import logger from module.logger import logger
from module.reward.assets import * from module.reward.assets import *
@ -413,6 +414,26 @@ class RewardCommission(UI, InfoHandler):
self.device.sleep(0.3) self.device.sleep(0.3)
self.device.screenshot() self.device.screenshot()
def _commission_swipe_to_top(self, bar_padding_y=10):
if self.appear(COMMISSION_SCROLL_TOP):
# Already at top
return False
mean = np.mean(self.device.image.crop(COMMISSION_SCROLL.area), axis=1)
bar = np.where(color_similar_1d(mean, color=(247, 211, 66)))[0]
if len(bar) < bar_padding_y * 2:
# No scroll found.
return False
bar = (COMMISSION_SCROLL.area[0], np.min(bar) + bar_padding_y,
COMMISSION_SCROLL.area[2], np.max(bar) - bar_padding_y)
p1 = random_rectangle_point(bar)
p2 = random_rectangle_point(COMMISSION_SCROLL_TOP.area)
self.device.drag(p1, p2, shake=(15, 0), point_random=(0, 0, 0, 0))
self.device.sleep(0.3)
self.device.screenshot()
return True
def _commission_scan_list(self): def _commission_scan_list(self):
commission = CommissionGroup(self.config) commission = CommissionGroup(self.config)
commission.merge(self.device.image) commission.merge(self.device.image)
@ -432,10 +453,12 @@ class RewardCommission(UI, InfoHandler):
def _commission_scan_all(self): def _commission_scan_all(self):
logger.hr('Scan daily') logger.hr('Scan daily')
self._commission_ensure_mode('daily') self._commission_ensure_mode('daily')
self._commission_swipe_to_top()
daily = self._commission_scan_list() daily = self._commission_scan_list()
logger.hr('Scan urgent') logger.hr('Scan urgent')
self._commission_ensure_mode('urgent') self._commission_ensure_mode('urgent')
self._commission_swipe_to_top()
urgent = self._commission_scan_list() urgent = self._commission_scan_list()
logger.hr('Showing commission') logger.hr('Showing commission')
@ -529,11 +552,13 @@ class RewardCommission(UI, InfoHandler):
for comm in self.daily_choose: for comm in self.daily_choose:
if not self._commission_ensure_mode('daily'): if not self._commission_ensure_mode('daily'):
self._commission_mode_reset() self._commission_mode_reset()
self._commission_swipe_to_top()
self._commission_find_and_start(comm) self._commission_find_and_start(comm)
if self.urgent_choose: if self.urgent_choose:
for comm in self.urgent_choose: for comm in self.urgent_choose:
if not self._commission_ensure_mode('urgent'): if not self._commission_ensure_mode('urgent'):
self._commission_mode_reset() self._commission_mode_reset()
self._commission_swipe_to_top()
self._commission_find_and_start(comm) self._commission_find_and_start(comm)
if not self.daily_choose and not self.urgent_choose: if not self.daily_choose and not self.urgent_choose:
logger.info('No commission chose') logger.info('No commission chose')