def get_common_rarity_dd(self): """ Get a common rarity dd with level is 100 and highest emotion Returns: Button: """ logger.hr('FINDING VANGUARD') level_grids = CARD_LEVEL_GRIDS card_grids = CARD_GRIDS emotion_grids = CARD_EMOTION_GRIDS level_ocr = LevelOcr(level_grids.buttons, name='DOCK_LEVEL_OCR', threshold=64) list_level = level_ocr.ocr(self.device.image) emotion_ocr = Digit(emotion_grids.buttons, name='DOCK_EMOTION_OCR', threshold=176) list_emotion = emotion_ocr.ocr(self.device.image) button_list = list(zip(card_grids.buttons, list_level, list_emotion))[::-1] # for : # if level == 100 and emotion == 150: # return button button, _, _ = max(filter(lambda a: a[1] == 100, button_list), key=lambda a: a[2]) return button
def _find_target_chapter(self, chapter): """ find the target chapter search button or goto button. Args: chapter (int): SOS target chapter Returns: Button: signal search button or goto button of the target chapter """ signal_search_buttons = TEMPLATE_SIGNAL_SEARCH.match_multi(self.device.image) sos_goto_buttons = TEMPLATE_SIGNAL_GOTO.match_multi(self.device.image) all_buttons = sos_goto_buttons + signal_search_buttons if not len(all_buttons): logger.info('No SOS chapter found') return None chapter_buttons = [button.crop(self._sos_chapter_crop) for button in all_buttons] ocr_chapters = Digit(chapter_buttons, letter=[132, 230, 115], threshold=136, name='OCR_SOS_CHAPTER') chapter_list = ocr_chapters.ocr(self.device.image) if not isinstance(chapter_list, list): chapter_list = [chapter_list] if chapter in chapter_list: logger.info('Target SOS chapter found') return all_buttons[chapter_list.index(chapter)] else: logger.info('Target SOS chapter not found') return None
def get_power(self, image): grids = ButtonGrid(origin=(222, 257), delta=(244, 30), button_shape=(72, 28), grid_shape=(4, 2), name='POWER') power = [grids[self.index, 0], grids[self.index, 1]] power = Digit(power, name='POWER', letter=(255, 223, 57), threshold=128) result = power.ocr(image) return result
def get_power(self, image): """ Args: image: Screenshot in page_exercise. Returns: list[int]: Fleet power, such as [14848, 13477]. """ grids = ButtonGrid(origin=(222, 257), delta=(244, 30), button_shape=(72, 28), grid_shape=(4, 2), name='POWER') power = [grids[self.index, 0], grids[self.index, 1]] power = Digit(power, name='POWER', letter=(255, 223, 57), threshold=128) result = power.ocr(image) return result
def shop_medal_items(self): """ Returns: ShopItemGrid: """ # JP has thinner letters, increase threshold to 128 price_ocr = Digit([], letter=(255, 223, 57), threshold=128, name='Price_ocr') shop_grid = self.shop_medal_grid shop_medal_items = ShopItemGrid( shop_grid, templates={}, amount_area=(60, 74, 96, 95), price_area=(52, 135, 132, 162)) shop_medal_items.load_template_folder('./assets/shop/medal') shop_medal_items.load_cost_template_folder('./assets/shop/cost') shop_medal_items.similarity = 0.88 # Lower the threshold for consistent matches of PR/DRBP shop_medal_items.price_ocr = price_ocr return shop_medal_items
def pt_ocr(raid): """ Args: raid (str): Raid name, such as raid_20200624, raid_20210708. Returns: Digit: """ raid = raid_name_shorten(raid) key = f'{raid}_OCR_PT' try: button = globals()[key] if raid == 'IRIS': return Digit(button, letter=(181, 178, 165), threshold=128) except KeyError: # raise ScriptError(f'Raid pt ocr asset not exists: {key}') return None
import numpy as np from module.base.utils import get_color from module.combat.assets import BATTLE_PREPARATION from module.daily.assets import * from module.equipment.fleet_equipment import DailyEquipment from module.logger import logger from module.ocr.ocr import Digit from module.reward.reward import Reward from module.ui.ui import page_daily, page_campaign_menu, BACK_ARROW, DAILY_CHECK DAILY_MISSION_LIST = [DAILY_MISSION_1, DAILY_MISSION_2, DAILY_MISSION_3] OCR_REMAIN = Digit(OCR_REMAIN, threshold=128, alphabet='0123') OCR_DAILY_FLEET_INDEX = Digit(OCR_DAILY_FLEET_INDEX, letter=(90, 154, 255), threshold=128, alphabet='123456') RECORD_OPTION = ('DailyRecord', 'daily') RECORD_SINCE = (0,) class Daily(Reward, DailyEquipment): daily_current: int daily_checked: list daily_auto_checked = False def is_active(self): color = get_color(image=self.device.image, area=DAILY_ACTIVE.area) color = np.array(color).astype(float) color = (np.max(color) + np.min(color)) / 2 active = color > 30 if active: logger.attr(f'Daily_{self.daily_current}', 'active') else:
from module.base.decorator import Config, cached_property from module.base.timer import Timer from module.exception import ScriptError from module.logger import logger from module.ocr.ocr import Digit from module.shop.assets import * from module.shop.base import ShopItemGrid from module.shop.clerk import ShopClerk from module.shop.ui import ShopUI OCR_SHOP_GUILD_COINS = Digit(SHOP_GUILD_COINS, letter=(255, 255, 255), name='OCR_SHOP_GUILD_COINS') class GuildShop(ShopClerk, ShopUI): @cached_property def shop_filter(self): """ Returns: str: """ return self.config.GuildShop_Filter.strip() @cached_property @Config.when(SERVER='cn') def shop_guild_items(self): """ Returns: ShopItemGrid: """
from module.base.decorator import cached_property from module.logger import logger from module.ocr.ocr import Digit from module.shop.assets import * from module.shop.base import ShopItemGrid from module.shop.clerk import ShopClerk from module.shop.ui import ShopUI OCR_SHOP_MERIT = Digit(SHOP_MERIT, letter=(239, 239, 239), name='OCR_SHOP_MERIT') class MeritShop(ShopClerk, ShopUI): @cached_property def shop_filter(self): """ Returns: str: """ return self.config.MeritShop_Filter.strip() @cached_property def shop_merit_items(self): """ Returns: ShopItemGrid: """ shop_grid = self.shop_grid shop_merit_items = ShopItemGrid(shop_grid, templates={},
SHIPYARD_FACE_GRID = ButtonGrid(origin=(188, 607), delta=(181, 0), button_shape=(181, 80), grid_shape=(6, 1), name='SHIPYARD_FACE_GRID') SHIPYARD_BP_COUNT_GRID = ButtonGrid(origin=(324, 688), delta=(181, 0), button_shape=(45, 30), grid_shape=(6, 1), name='SHIPYARD_BP_COUNT_GRID') SHIPYARD_SERIES_GRID = ButtonGrid(origin=(450, 260), delta=(280, 90), button_shape=(155, 40), grid_shape=(2, 3), name='SHIPYARD_SERIES_GRID') OCR_SHIPYARD_BP_COUNT_GRID = Digit(SHIPYARD_BP_COUNT_GRID.buttons, letter=(255, 247, 247), name=f'OCR_BP_COUNT') OCR_SHIPYARD_TOTAL_DEV = Digit(SHIPYARD_TOTAL_DEV, letter=(255, 247, 247), threshold=64) OCR_SHIPYARD_TOTAL_FATE = Digit(SHIPYARD_TOTAL_FATE, letter=(255, 247, 247), threshold=64)
from module.base.button import ButtonGrid from module.base.utils import * from module.logger import logger from module.ocr.ocr import Digit, DigitCounter from module.os_handler.assets import * from module.statistics.item import ItemGrid from module.ui.assets import OS_CHECK from module.ui.ui import UI OCR_ACTION_POINT_REMAIN = Digit(ACTION_POINT_REMAIN, letter=(255, 219, 66), name='OCR_ACTION_POINT_REMAIN') # Letters in ACTION_POINT_BUY_REMAIN are not the numeric fonts usually used in azur lane. OCR_ACTION_POINT_BUY_REMAIN = DigitCounter(ACTION_POINT_BUY_REMAIN, letter=(148, 247, 99), lang='cnocr', name='OCR_ACTION_POINT_BUY_REMAIN') ACTION_POINT_GRID = ButtonGrid(origin=(323, 274), delta=(173, 0), button_shape=(115, 115), grid_shape=(4, 1), name='ACTION_POINT_GRID') ACTION_POINT_ITEMS = ItemGrid(ACTION_POINT_GRID, templates={}, amount_area=(43, 89, 113, 113)) ACTION_POINTS_COST = { 1: 5, 2: 10, 3: 15, 4: 20, 5: 30,
from module.base.timer import Timer from module.base.utils import color_bar_percentage from module.combat.combat import Combat, BATTLE_PREPARATION, GET_ITEMS_1 from module.logger import logger from module.ocr.ocr import Digit, DigitCounter from module.os_ash.assets import * from module.os_handler.assets import IN_MAP from module.ui.page import page_os from module.ui.switch import Switch from module.ui.ui import UI OCR_BEACON_REMAIN = DigitCounter(BEACON_REMAIN, threshold=256, name='OCR_ASH_REMAIN') OCR_BEACON_TIER = Digit(BEACON_TIER, name='OCR_ASH_TIER') OCR_ASH_COLLECT_STATUS = DigitCounter(ASH_COLLECT_STATUS, letter=(235, 235, 235), threshold=160, name='OCR_ASH_COLLECT_STATUS') SWITCH_BEACON = Switch(name='Beacon', offset=(20, 20)) SWITCH_BEACON.add_status('mine', BEACON_LIST) SWITCH_BEACON.add_status('list', BEACON_MY) RECORD_OPTION = ('DailyRecord', 'ash') RECORD_SINCE = (0, ) class AshCombat(Combat): def handle_battle_status(self, save_get_items=False): """
from campaign.campaign_sos.campaign_base import CampaignBase from module.base.decorator import Config from module.base.decorator import cached_property from module.base.utils import area_pad, random_rectangle_vector from module.campaign.run import CampaignRun from module.logger import logger from module.ocr.ocr import Digit from module.sos.assets import * from module.template.assets import * from module.ui.assets import CAMPAIGN_CHECK from module.ui.page import page_campaign from module.ui.scroll import Scroll OCR_SOS_SIGNAL = Digit(OCR_SIGNAL, letter=(255, 255, 255), threshold=128, name='OCR_SOS_SIGNAL') class CampaignSos(CampaignRun, CampaignBase): @cached_property @Config.when(SERVER='en') def _sos_chapter_crop(self): return [-330, 8, -285, 45] @cached_property @Config.when(SERVER='jp') def _sos_chapter_crop(self): return [-430, 8, -382, 45] @cached_property @Config.when(SERVER='tw') def _sos_chapter_crop(self):
from module.base.button import ButtonGrid from module.base.decorator import cached_property from module.base.timer import Timer from module.base.utils import * from module.combat.assets import GET_ITEMS_1 from module.guild.assets import * from module.guild.base import GuildBase from module.handler.assets import POPUP_CONFIRM from module.logger import logger from module.ocr.ocr import Digit from module.statistics.item import ItemGrid RECORD_OPTION = ('RewardRecord', 'logistics_exchange') RECORD_SINCE = (0, ) GUILD_EXCHANGE_LIMIT = Digit(OCR_GUILD_EXCHANGE_LIMIT, threshold=64) EXCHANGE_GRIDS = ButtonGrid(origin=(470, 470), delta=(198.5, 0), button_shape=(83, 83), grid_shape=(3, 1), name='EXCHANGE_GRID') DEFAULT_ITEM_PRIORITY = [ 't1', 't2', 't3', 'oxycola', 'coolant', 'coins', 'oil', 'merit' ] DEFAULT_PLATE_PRIORITY = ['torpedo', 'antiair', 'plane', 'gun', 'general'] GRADES = [s for s in DEFAULT_ITEM_PRIORITY if len(s) == 2]
from module.base.button import ButtonGrid from module.base.decorator import cached_property from module.logger import logger from module.ocr.ocr import Digit from module.os_handler.assets import * from module.os_handler.map_event import MapEventHandler from module.statistics.item import ItemGrid, Item from module.ui.ui import UI OCR_SHOP_YELLOW_COINS = Digit(SHOP_YELLOW_COINS, letter=(239, 239, 239), name='OCR_SHOP_YELLOW_COINS') OCR_SHOP_PURPLE_COINS = Digit(SHOP_PURPLE_COINS, letter=(255, 255, 255), name='OCR_SHOP_PURPLE_COINS') class OSShopHandler(UI, MapEventHandler): _shop_yellow_coins = 0 _shop_purple_coins = 0 def os_shop_get_coins(self): self._shop_yellow_coins = OCR_SHOP_YELLOW_COINS.ocr(self.device.image) self._shop_purple_coins = OCR_SHOP_PURPLE_COINS.ocr(self.device.image) logger.info(f'Yellow coins: {self._shop_yellow_coins}, purple coins: {self._shop_purple_coins}') @cached_property def os_shop_items(self): """ Returns: ItemGrid: """ shop_grid = ButtonGrid( origin=(237, 219), delta=(189, 224), button_shape=(98, 98), grid_shape=(4, 2), name='SHOP_GRID') shop_items = ItemGrid(shop_grid, templates={}, amount_area=(60, 74, 96, 95))
threshold=64) MEOWFFICER_QUEUE = DigitCounter(OCR_MEOWFFICER_QUEUE, letter=(131, 121, 123), threshold=64) MEOWFFICER_BOX_GRID = ButtonGrid(origin=(460, 210), delta=(160, 0), button_shape=(30, 30), grid_shape=(3, 1), name='MEOWFFICER_BOX_GRID') MEOWFFICER_BOX_COUNT_GRID = ButtonGrid(origin=(776, 21), delta=(133, 0), button_shape=(65, 27), grid_shape=(3, 1), name='MEOWFFICER_BOX_COUNT_GRID') MEOWFFICER_BOX_COUNT = Digit(MEOWFFICER_BOX_COUNT_GRID.buttons, letter=(16, 12, 0), threshold=64, name='MEOWFFICER_BOX_COUNT') class MeowfficerTrain(MeowfficerCollect, MeowfficerEnhance): def _meow_queue_enter(self, skip_first_screenshot=True): """ Transition into the queuing window to enqueue meowfficer boxes May fail to enter so limit to 3 tries before giving up Args: skip_first_screenshot (bool): Returns:
from module.config.utils import get_server_last_update from module.exercise.assets import * from module.exercise.combat import ExerciseCombat from module.logger import logger from module.ocr.ocr import Digit from module.ui.ui import page_exercise OCR_EXERCISE_REMAIN = Digit(OCR_EXERCISE_REMAIN, letter=(173, 247, 74), threshold=128) class Exercise(ExerciseCombat): opponent_change_count = 0 remain = 0 def _new_opponent(self): logger.info('New opponent') self.appear_then_click(NEW_OPPONENT) self.opponent_change_count += 1 logger.attr("Change_opponent_count", self.opponent_change_count) self.config.set_record(Exercise_OpponentRefreshValue=self.opponent_change_count) self.ensure_no_info_bar(timeout=3) def _opponent_fleet_check_all(self): if self.config.Exercise_OpponentChooseMode != 'leftmost': super()._opponent_fleet_check_all() def _opponent_sort(self, method=None): if method is None: method = self.config.Exercise_OpponentChooseMode
from module.base.decorator import cached_property, Config from module.base.timer import Timer from module.exception import ScriptError from module.logger import logger from module.ocr.ocr import Digit from module.shop.assets import * from module.shop.base import ShopBase, ShopItemGrid from module.shop.shop_guild_globals import * from module.shop.ui import ShopUI SHOP_SELECT_PR = [SHOP_SELECT_PR1, SHOP_SELECT_PR2, SHOP_SELECT_PR3] OCR_SHOP_GUILD_COINS = Digit(SHOP_GUILD_COINS, letter=(255, 255, 255), name='OCR_SHOP_GUILD_COINS') OCR_SHOP_SELECT_TOTAL_PRICE = Digit(SHOP_SELECT_TOTAL_PRICE, letter=(255, 255, 255), name='OCR_SHOP_SELECT_TOTAL_PRICE') class GuildShop(ShopBase, ShopUI): _shop_guild_coins = 0 @cached_property def shop_filter(self): """ Returns: str: """ return self.config.GuildShop_Filter.strip()
from module.base.decorator import cached_property from module.logger import logger from module.ocr.ocr import Digit from module.shop.assets import * from module.shop.base import ShopItemGrid from module.shop.clerk import ShopClerk from module.shop.ui import ShopUI OCR_SHOP_GOLD_COINS = Digit(SHOP_GOLD_COINS, letter=(239, 239, 239), name='OCR_SHOP_GOLD_COINS') OCR_SHOP_GEMS = Digit(SHOP_GEMS, letter=(255, 243, 82), name='OCR_SHOP_GEMS') class GeneralShop(ShopClerk, ShopUI): gems = 0 @cached_property def shop_filter(self): """ Returns: str: """ return self.config.GeneralShop_Filter.strip() @cached_property def shop_general_items(self): """ Returns: ShopItemGrid: """ shop_grid = self.shop_grid shop_general_items = ShopItemGrid(shop_grid, templates={}, amount_area=(60, 74, 96, 95))
from module.logger import logger from module.ocr.ocr import Digit from module.raid.assets import * from module.raid.run import RaidRun from module.ui.page import page_raid RECORD_OPTION = ('DailyRecord', 'raid') RECORD_SINCE = (0, ) LETTER = (57, 52, 255) THRESHOLD = 128 OCR_EASY = Digit(OCR_REMAIN_EASY, letter=LETTER, threshold=THRESHOLD) OCR_NORMAL = Digit(OCR_REMAIN_NORMAL, letter=LETTER, threshold=THRESHOLD) OCR_HARD = Digit(OCR_REMAIN_HARD, letter=LETTER, threshold=THRESHOLD) class RaidDaily(RaidRun): def get_remain(self, mode): """ Args: mode (str): easy, normal, hard Returns: int: """ if mode == 'easy': ocr = OCR_EASY elif mode == 'normal': ocr = OCR_NORMAL elif mode == 'hard': ocr = OCR_HARD
def _dorm_food_ocr(self): grids = self._dorm_food.crop((65, 66, 128, 91), name='FOOD_AMOUNT') return Digit(grids.buttons, letter=(255, 255, 255), threshold=128, name='OCR_DORM_FOOD')
from module.base.button import ButtonGrid from module.base.decorator import Config from module.base.decorator import cached_property from module.logger import logger from module.ocr.ocr import Digit from module.shop.assets import * from module.shop.base import ShopBase, ShopItemGrid OCR_SHOP_MEDAL = Digit(SHOP_MEDAL, letter=(239, 239, 239), name='OCR_SHOP_MEDAL') class MedalShop(ShopBase): _shop_medal = 0 def shop_medal_get_currency(self): """ Ocr shop medal currency """ self._shop_medal = OCR_SHOP_MEDAL.ocr(self.device.image) logger.info(f'Medal: {self._shop_medal}') return self._shop_medal @cached_property def shop_medal_grid(self): """ Returns: ButtonGrid: """ shop_grid = ButtonGrid( origin=(197, 193), delta=(223, 190), button_shape=(100.5, 101.5), grid_shape=(3, 2), name='SHOP_MEDAL_GRID') return shop_grid
from module.base.decorator import cached_property from module.exception import ScriptError from module.logger import logger from module.ocr.ocr import Digit from module.shop.assets import * from module.shop.base import ShopBase, ShopItemGrid OCR_SHOP_CORE = Digit(SHOP_CORE, letter=(239, 239, 239), name='OCR_SHOP_CORE') OCR_SHOP_AMOUNT = Digit(SHOP_AMOUNT, letter=(239, 239, 239), name='OCR_SHOP_AMOUNT') class CoreShop(ShopBase): _shop_core = 0 @cached_property def shop_filter(self): """ Returns: str: """ return self.config.CoreShop_Filter.strip() @cached_property def shop_core_items(self): """ Returns: ShopItemGrid: """ shop_grid = self.shop_grid
from module.base.timer import Timer from module.combat.assets import GET_SHIP from module.gacha.assets import * from module.gacha.ui import GachaUI from module.handler.assets import POPUP_CONFIRM, STORY_SKIP from module.logger import logger from module.ocr.ocr import Digit from module.retire.retirement import Retirement from module.shop.shop_general import GeneralShop RECORD_GACHA_OPTION = ('RewardRecord', 'gacha') RECORD_GACHA_SINCE = (0,) OCR_BUILD_CUBE_COUNT = Digit(BUILD_CUBE_COUNT, letter=(255, 247, 247), threshold=64) OCR_BUILD_TICKET_COUNT = Digit(BUILD_TICKET_COUNT, letter=(255, 247, 247), threshold=64) OCR_BUILD_SUBMIT_COUNT = Digit(BUILD_SUBMIT_COUNT, letter=(255, 247, 247), threshold=64) OCR_BUILD_SUBMIT_WW_COUNT = Digit(BUILD_SUBMIT_WW_COUNT, letter=(255, 247, 247), threshold=64) class RewardGacha(GachaUI, GeneralShop, Retirement): build_cube_count = 0 build_ticket_count = 0 def gacha_prep(self, target, skip_first_screenshot=True): """ Initiate preparation to submit build orders. Args: target (int): Number of build orders to submit skip_first_screenshot (bool): Returns:
class AmountOcr(Digit): def pre_process(self, image): """ Args: image (np.ndarray): Shape (height, width, channel) Returns: np.ndarray: Shape (width, height) """ image = extract_white_letters(image, threshold=self.threshold) return image.astype(np.uint8) AMOUNT_OCR = AmountOcr([], threshold=96, name='Amount_ocr') PRICE_OCR = Digit([], letter=(255, 223, 57), threshold=32, name='Price_ocr') class Item: IMAGE_SHAPE = (96, 96) def __init__(self, image, button): """ Args: image: button: """ self.image_raw = image self._button = button image = np.array(image.crop(button.area)) if image.shape == self.IMAGE_SHAPE:
from module.base.decorator import cached_property from module.exception import ScriptError from module.logger import logger from module.ocr.ocr import Digit from module.shop.assets import * from module.shop.base import ShopItemGrid from module.shop.clerk import ShopClerk OCR_SHOP_CORE = Digit(SHOP_CORE, letter=(239, 239, 239), name='OCR_SHOP_CORE') class CoreShop(ShopClerk): @cached_property def shop_filter(self): """ Returns: str: """ return self.config.CoreShop_Filter.strip() @cached_property def shop_core_items(self): """ Returns: ShopItemGrid: """ shop_grid = self.shop_grid shop_core_items = ShopItemGrid(shop_grid, templates={}, amount_area=(60, 74, 96, 95)) shop_core_items.load_template_folder('./assets/shop/core')
import importlib from campaign.campaign_hard.campaign_hard import Campaign from module.campaign.run import CampaignRun from module.hard.assets import * from module.logger import logger from module.ocr.ocr import Digit OCR_HARD_REMAIN = Digit(OCR_HARD_REMAIN, letter=(123, 227, 66), threshold=128, alphabet='0123') class CampaignHard(CampaignRun): equipment_has_take_on = False campaign: Campaign def run(self): logger.hr('Campaign hard', level=1) chapter, stage = self.config.Hard_HardStage.split('-') name = f'campaign_{chapter}_{stage}' self.config.override( Campaign_Mode='hard', Campaign_UseFleetLock=True, Campaign_UseAutoSearch=True, Fleet_FleetOrder='fleet1_all_fleet2_standby' if self.config.Hard_HardFleet == 1 else 'fleet1_standby_fleet2_all', Emotion_CalculateEmotion=False, ) # Equipment take on # campaign/campaign_hard/campaign_hard.py Campaign.fleet_preparation() # Initial self.load_campaign(name='campaign_hard', folder='campaign_hard') # Load campaign file
MASK_DORM = Mask(file='./assets/mask/MASK_DORM.png') DORM_CAMERA_SWIPE = (300, 250) DORM_CAMERA_RANDOM = (-20, -20, 20, 20) RECORD = ('RewardRecord', 'dorm') FOOD = ButtonGrid(origin=(298, 375), delta=(156, 0), button_shape=(112, 66), grid_shape=(6, 1), name='FOOD') FOOD_AMOUNT = ButtonGrid(origin=(343, 411), delta=(156, 0), button_shape=(70, 33), grid_shape=(6, 1), name='FOOD_AMOUNT') OCR_FOOD = Digit(FOOD_AMOUNT.buttons(), letter=(255, 255, 255), threshold=128, name='OCR_DORM_FOOD') OCR_FILL = DigitCounter(OCR_DORM_FILL, letter=(255, 247, 247), threshold=128, name='OCR_DORM_FILL') class Food: def __init__(self, feed, amount): self.feed = feed self.amount = amount FOOD_FEED_AMOUNT = [1000, 2000, 3000, 5000, 10000, 20000] FOOD_FILTER = Filter(regex=re.compile('(\d+)'), attr=['feed'], preset=[])
import copy import importlib import os from datetime import datetime from module.campaign.assets import * from module.campaign.campaign_base import CampaignBase from module.config.config import AzurLaneConfig, ConfigBackup from module.exception import ScriptEnd from module.logger import logger from module.ocr.ocr import Digit from module.reward.reward import Reward OCR_OIL = Digit(OCR_OIL, name='OCR_OIL', letter=(247, 247, 247), threshold=128) class CampaignRun(Reward): folder: str name: str stage: str module = None config: AzurLaneConfig campaign: CampaignBase run_count: int def load_campaign(self, name, folder='campaign_main'): """ Args: name (str): Name of .py file under module.campaign. folder (str): Name of the file folder under campaign.
from module.combat.assets import GET_ITEMS_1 from module.logger import logger from module.ocr.ocr import Ocr, Digit from module.reward.assets import * from module.ui.ui import UI, page_meowfficer, BACK_ARROW_DORM BUY_MAX = 15 BUY_PRIZE = 1500 MEOWFFICER = Ocr(OCR_MEOWFFICER, letter=(140, 113, 99), threshold=64, alphabet='0123456789/') MEOWFFICER_CHOOSE = Digit(OCR_MEOWFFICER_CHOOSE, letter=(140, 113, 99), threshold=64) MEOWDDICER_COINS = Digit(OCR_MEOWDDICER_COINS, letter=(99, 69, 41), threshold=64) class RewardMeowfficer(UI): def moew_choose(self, count): """ Pages: in: page_moewfficer out: MEOWFFICER_BUY Args: count (int): 0 to 15. Returns: