1
0
mirror of https://github.com/sui-feng-cb/AzurLaneAutoScript1.git synced 2026-08-15 19:43:28 +08:00

Add: [CN, JP] island freebie receive

This commit is contained in:
guoh064
2026-06-14 00:20:19 +08:00
parent 401d3d46e8
commit 76e3f23659
28 changed files with 305 additions and 0 deletions

View File

@@ -5,4 +5,12 @@ from module.base.template import Template
# Don't modify it manually.
ISLAND_CLICK_SAFE_AREA = Button(area={'cn': (596, 687, 680, 720), 'en': (596, 687, 680, 720), 'jp': (596, 687, 680, 720), 'tw': (596, 687, 680, 720)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255), 'jp': (255, 255, 255), 'tw': (255, 255, 255)}, button={'cn': (596, 687, 680, 720), 'en': (596, 687, 680, 720), 'jp': (596, 687, 680, 720), 'tw': (596, 687, 680, 720)}, file={'cn': './assets/cn/island/ISLAND_CLICK_SAFE_AREA.png', 'en': './assets/cn/island/ISLAND_CLICK_SAFE_AREA.png', 'jp': './assets/cn/island/ISLAND_CLICK_SAFE_AREA.png', 'tw': './assets/cn/island/ISLAND_CLICK_SAFE_AREA.png'})
ISLAND_FREEBIE_AVAILABLE = Button(area={'cn': (23, 608, 102, 688), 'en': (23, 608, 102, 688), 'jp': (23, 608, 102, 688), 'tw': (23, 608, 102, 688)}, color={'cn': (129, 124, 97), 'en': (129, 124, 97), 'jp': (129, 124, 97), 'tw': (129, 124, 97)}, button={'cn': (37, 622, 87, 672), 'en': (37, 622, 87, 672), 'jp': (37, 622, 87, 672), 'tw': (37, 622, 87, 672)}, file={'cn': './assets/cn/island/ISLAND_FREEBIE_AVAILABLE.gif', 'en': './assets/cn/island/ISLAND_FREEBIE_AVAILABLE.gif', 'jp': './assets/cn/island/ISLAND_FREEBIE_AVAILABLE.gif', 'tw': './assets/cn/island/ISLAND_FREEBIE_AVAILABLE.gif'})
ISLAND_FREEBIE_CLAIM = Button(area={'cn': (894, 381, 980, 406), 'en': (894, 381, 980, 406), 'jp': (890, 381, 984, 405), 'tw': (894, 381, 980, 406)}, color={'cn': (211, 211, 209), 'en': (211, 211, 209), 'jp': (194, 195, 196), 'tw': (211, 211, 209)}, button={'cn': (894, 381, 980, 406), 'en': (894, 381, 980, 406), 'jp': (890, 381, 984, 405), 'tw': (894, 381, 980, 406)}, file={'cn': './assets/cn/island/ISLAND_FREEBIE_CLAIM.png', 'en': './assets/cn/island/ISLAND_FREEBIE_CLAIM.png', 'jp': './assets/jp/island/ISLAND_FREEBIE_CLAIM.png', 'tw': './assets/cn/island/ISLAND_FREEBIE_CLAIM.png'})
ISLAND_FREEBIE_COOLDOWN = Button(area={'cn': (871, 381, 1001, 406), 'en': (871, 381, 1001, 406), 'jp': (870, 380, 1003, 406), 'tw': (871, 381, 1001, 406)}, color={'cn': (215, 214, 213), 'en': (215, 214, 213), 'jp': (200, 202, 201), 'tw': (215, 214, 213)}, button={'cn': (871, 381, 1001, 406), 'en': (871, 381, 1001, 406), 'jp': (870, 380, 1003, 406), 'tw': (871, 381, 1001, 406)}, file={'cn': './assets/cn/island/ISLAND_FREEBIE_COOLDOWN.png', 'en': './assets/cn/island/ISLAND_FREEBIE_COOLDOWN.png', 'jp': './assets/jp/island/ISLAND_FREEBIE_COOLDOWN.png', 'tw': './assets/cn/island/ISLAND_FREEBIE_COOLDOWN.png'})
ISLAND_FREEBIE_RECEIVE = Button(area={'cn': (893, 380, 980, 406), 'en': (893, 380, 980, 406), 'jp': (859, 380, 1012, 406), 'tw': (893, 380, 980, 406)}, color={'cn': (208, 207, 206), 'en': (208, 207, 206), 'jp': (205, 207, 206), 'tw': (208, 207, 206)}, button={'cn': (893, 380, 980, 406), 'en': (893, 380, 980, 406), 'jp': (859, 380, 1012, 406), 'tw': (893, 380, 980, 406)}, file={'cn': './assets/cn/island/ISLAND_FREEBIE_RECEIVE.png', 'en': './assets/cn/island/ISLAND_FREEBIE_RECEIVE.png', 'jp': './assets/jp/island/ISLAND_FREEBIE_RECEIVE.png', 'tw': './assets/cn/island/ISLAND_FREEBIE_RECEIVE.png'})
ISLAND_FREEBIE_SHARE = Button(area={'cn': (871, 381, 1002, 406), 'en': (871, 381, 1002, 406), 'jp': (849, 380, 1024, 406), 'tw': (871, 381, 1002, 406)}, color={'cn': (208, 208, 207), 'en': (208, 208, 207), 'jp': (210, 214, 214), 'tw': (208, 208, 207)}, button={'cn': (871, 381, 1002, 406), 'en': (871, 381, 1002, 406), 'jp': (849, 380, 1024, 406), 'tw': (871, 381, 1002, 406)}, file={'cn': './assets/cn/island/ISLAND_FREEBIE_SHARE.png', 'en': './assets/cn/island/ISLAND_FREEBIE_SHARE.png', 'jp': './assets/jp/island/ISLAND_FREEBIE_SHARE.png', 'tw': './assets/cn/island/ISLAND_FREEBIE_SHARE.png'})
ISLAND_FREEBIE_SHARE_ALL = Button(area={'cn': (728, 588, 810, 611), 'en': (728, 588, 810, 611), 'jp': (724, 587, 814, 613), 'tw': (728, 588, 810, 611)}, color={'cn': (93, 121, 142), 'en': (93, 121, 142), 'jp': (73, 104, 128), 'tw': (93, 121, 142)}, button={'cn': (728, 588, 810, 611), 'en': (728, 588, 810, 611), 'jp': (724, 587, 814, 613), 'tw': (728, 588, 810, 611)}, file={'cn': './assets/cn/island/ISLAND_FREEBIE_SHARE_ALL.png', 'en': './assets/cn/island/ISLAND_FREEBIE_SHARE_ALL.png', 'jp': './assets/jp/island/ISLAND_FREEBIE_SHARE_ALL.png', 'tw': './assets/cn/island/ISLAND_FREEBIE_SHARE_ALL.png'})
ISLAND_FREEBIE_SHARE_BACK = Button(area={'cn': (844, 101, 878, 135), 'en': (844, 101, 878, 135), 'jp': (844, 101, 878, 135), 'tw': (844, 101, 878, 135)}, color={'cn': (170, 213, 232), 'en': (170, 213, 232), 'jp': (170, 213, 232), 'tw': (170, 213, 232)}, button={'cn': (844, 101, 878, 135), 'en': (844, 101, 878, 135), 'jp': (844, 101, 878, 135), 'tw': (844, 101, 878, 135)}, file={'cn': './assets/cn/island/ISLAND_FREEBIE_SHARE_BACK.png', 'en': './assets/cn/island/ISLAND_FREEBIE_SHARE_BACK.png', 'jp': './assets/cn/island/ISLAND_FREEBIE_SHARE_BACK.png', 'tw': './assets/cn/island/ISLAND_FREEBIE_SHARE_BACK.png'})
ISLAND_FREEBIE_UNAVAILABLE = Button(area={'cn': (36, 631, 88, 683), 'en': (36, 631, 88, 683), 'jp': (36, 631, 88, 683), 'tw': (36, 631, 88, 683)}, color={'cn': (122, 122, 122), 'en': (122, 122, 122), 'jp': (122, 122, 122), 'tw': (122, 122, 122)}, button={'cn': (36, 631, 88, 683), 'en': (36, 631, 88, 683), 'jp': (36, 631, 88, 683), 'tw': (36, 631, 88, 683)}, file={'cn': './assets/cn/island/ISLAND_FREEBIE_UNAVAILABLE.png', 'en': './assets/cn/island/ISLAND_FREEBIE_UNAVAILABLE.png', 'jp': './assets/cn/island/ISLAND_FREEBIE_UNAVAILABLE.png', 'tw': './assets/cn/island/ISLAND_FREEBIE_UNAVAILABLE.png'})
ISLAND_LEVEL_UP = Button(area={'cn': (616, 339, 662, 377), 'en': (616, 339, 662, 377), 'jp': (616, 339, 662, 377), 'tw': (616, 339, 662, 377)}, color={'cn': (186, 213, 226), 'en': (186, 213, 226), 'jp': (186, 213, 226), 'tw': (186, 213, 226)}, button={'cn': (616, 339, 662, 377), 'en': (616, 339, 662, 377), 'jp': (616, 339, 662, 377), 'tw': (616, 339, 662, 377)}, file={'cn': './assets/cn/island/ISLAND_LEVEL_UP.png', 'en': './assets/cn/island/ISLAND_LEVEL_UP.png', 'jp': './assets/cn/island/ISLAND_LEVEL_UP.png', 'tw': './assets/cn/island/ISLAND_LEVEL_UP.png'})

130
module/island/freebie.py Normal file
View File

@@ -0,0 +1,130 @@
from module.base.timer import Timer
from module.exception import GameStuckError
from module.handler.assets import STORY_SKIP
from module.island.ui import IslandUI
from module.island.assets import *
from module.logger import logger
from module.ui.page import page_island, page_island_manage, page_island_phone
class IslandFreebie(IslandUI):
def island_freebie_notice_appear(self):
"""
Returns:
bool: If appear.
Page:
in: page_island_manage
"""
for _ in self.loop(timeout=5):
if self.match_template_color(ISLAND_FREEBIE_AVAILABLE, offset=(20, 20)):
return True
if self.match_template_color(ISLAND_FREEBIE_UNAVAILABLE, offset=(20, 20)):
return False
return False
def freebie_move_to(self):
"""
Page:
in: page_island_manage
out: page_island
"""
for _ in self.loop(timeout=30):
if self.appear_then_click(ISLAND_FREEBIE_AVAILABLE, offset=(20, 20), interval=3):
continue
if self.ui_page_appear(page_island_phone):
logger.info('Moved to location of freebie')
self.ui_goto(page_island)
break
else:
logger.warning('Failed to move to location of freebie after 30 seconds')
raise GameStuckError(f'Failed to move to location of freebie after 30 seconds')
def freebie_claim(self):
if not self.appear(ISLAND_FREEBIE_CLAIM, offset=(20, 20)):
logger.warning('No freebie claim button')
return False
retry_wait = Timer(3, count=5).reset()
for _ in self.loop(timeout=30):
if self.appear_then_click(ISLAND_FREEBIE_CLAIM, offset=(20, 20), interval=3):
continue
if self.appear(ISLAND_FREEBIE_COOLDOWN, offset=(20, 20)):
logger.info('Claimed freebie')
return True
elif self.ui_page_appear(page_island_phone):
logger.info('Misclicked into page_island_phone, go back')
self.ui_goto(page_island)
continue
elif retry_wait.reached_and_reset():
self.device.click(STORY_SKIP)
continue
else:
logger.warning('Failed to claim freebie after 30 seconds')
return False
def freebie_receive(self):
p1 = (217, 507)
p2 = (217 - 8, 507 + 36)
self.device.drag(p1, p2, point_random=(0, 0, 0, 0), shake_random=(0, 0, 0, 0), hold_duration=1.05)
self.device.screenshot()
if not self.appear(ISLAND_FREEBIE_RECEIVE, offset=(20, 20)):
logger.warning('Failed to receive freebie')
return False
confirm_timer = Timer(3, count=5).reset()
for _ in self.loop(timeout=30, skip_first=False):
if self.appear_then_click(ISLAND_FREEBIE_RECEIVE, offset=(20, 20), interval=3):
confirm_timer.reset()
continue
if self.handle_island_additional():
confirm_timer.reset()
continue
# End
if self.appear(ISLAND_FREEBIE_SHARE, offset=(20, 20)):
if confirm_timer.reached():
logger.info('Received freebie')
return True
else:
logger.warning('Failed to receive freebie after 30 seconds')
return False
def freebie_share(self):
if not self.appear(ISLAND_FREEBIE_SHARE, offset=(20, 20)):
logger.warning('No freebie share button')
return False
for _ in self.loop(timeout=30, skip_first=False):
if self.appear_then_click(ISLAND_FREEBIE_SHARE, offset=(20, 20), interval=3):
continue
if self.appear_then_click(ISLAND_FREEBIE_SHARE_ALL, offset=(20, 20), interval=3):
break
else:
logger.warning('Failed to open freebie share page after 30 seconds')
return False
for _ in self.loop(timeout=30, skip_first=False):
if self.appear_then_click(ISLAND_FREEBIE_SHARE_BACK, offset=(20, 20), interval=3):
continue
if self.ui_page_appear(page_island):
logger.info('Shared freebie')
return True
else:
logger.warning('Failed to leave freebie share page after 30 seconds')
return False
def run(self):
self.ui_ensure(page_island_manage)
if self.island_freebie_notice_appear():
self.freebie_move_to()
self.freebie_claim()
self.freebie_receive()
if self.config.IslandFreebie_Share:
self.freebie_share()
else:
logger.info('No freebie notice')
self.config.task_delay(server_update=True)