1
0
mirror of https://github.com/TheFunny/ArisuAutoSweeper synced 2025-12-16 13:25:13 +00:00
ArisuAutoSweeper/tasks/shop/shop.py
RedDeadDepresso e0b139cc2f fix: shop
2024-01-10 21:11:17 +00:00

119 lines
4.1 KiB
Python

from enum import Flag
from module.base.timer import Timer
from module.exception import RequestHumanTakeover
from module.logger import logger
from module.ui.switch import Switch
from tasks.base.assets.assets_base_page import BACK
from tasks.base.page import page_main, page_shop
from tasks.shop.assets.assets_shop import *
from tasks.shop.ui import ShopUI
class ShopStatus(Flag):
SELECT_SHOP = 0
SELECT_ITEMS = 1
PURCHASE = 2
REFRESH = 3
END = 4
FINISH = -1
class Shop(ShopUI):
@property
def shop_info(self):
"""Similiar to bounty_info and scrimmage_info.
Returns a list with elements the select button, check button, how many times do make purchases and the list of items"""
info = []
if self.config.NormalShop_Enable:
normal_config = self.config.cross_get(["Shop", "NormalShop"])
normal_items = [num for num in range(1, 21) if normal_config[str(num)]]
if normal_items:
SWITCH_NORMAL = Switch('NormalShop_Switch')
SWITCH_NORMAL.add_state('on', NORMAL_ON)
SWITCH_NORMAL.add_state('off', NORMAL_OFF)
info.append([SWITCH_NORMAL, self.config.NormalShop_Purchases, normal_items])
if self.config.TacticalChallengeShop_Enable:
tc_config = self.config.cross_get(["Shop", "TacticalChallengeShop"])
tc_items = [num for num in range(1, 16) if tc_config[str(num)]]
if tc_items:
SWITCH_TC = Switch('TacticalChallengeShop_Switch')
SWITCH_TC.add_state('on', TC_ON)
SWITCH_TC.add_state('off', TC_OFF)
info.append([SWITCH_TC, self.config.TacticalChallengeShop_Purchases, tc_items])
return info
@property
def valid_task(self) -> list:
task = self.shop_info
if not task:
logger.warning('Shop enabled but no task set')
return task
@property
def current_shop(self):
return self.task[0][0]
@property
def current_purchase_count(self):
return self.task[0][1]
@property
def current_item_list(self):
return self.task[0][2]
def handle_shop(self, status):
match status:
case ShopStatus.SELECT_SHOP:
if not self.task:
return ShopStatus.FINISH
if self.select_shop(self.current_shop):
self.reset_swipe_flags()
return ShopStatus.SELECT_ITEMS
case ShopStatus.SELECT_ITEMS:
self.select_items(self.current_item_list)
return ShopStatus.PURCHASE
case ShopStatus.PURCHASE:
if self.make_purchase() and self.current_purchase_count > 1:
return ShopStatus.REFRESH
return ShopStatus.END
case ShopStatus.REFRESH:
if self.refresh_shop(self.current_purchase_count):
return ShopStatus.SELECT_SHOP
return ShopStatus.END
case ShopStatus.END:
if self.appear(page_shop.check_button) and self.match_color(page_shop.check_button):
self.task.pop(0)
return ShopStatus.SELECT_SHOP
self.click_with_interval(BACK, interval=2)
case ShopStatus.FINISH:
return status
case _:
logger.warning(f'Invalid status: {status}')
return status
def run(self):
"""Reset the shop and items position by going main and then shop"""
self.ui_ensure(page_main)
self.ui_ensure(page_shop)
self.task = self.valid_task
action_timer = Timer(0.5, 1)
status = ShopStatus.SELECT_SHOP
while 1:
self.device.screenshot()
if self.ui_additional():
continue
if action_timer.reached_and_reset():
logger.attr('Status', status)
status = self.handle_shop(status)
if status == ShopStatus.FINISH:
break
self.config.task_delay(server_update=True)