コード例 #1
0
    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
コード例 #2
0
ファイル: sos.py プロジェクト: chenkid999/AzurLaneAutoScript
    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
コード例 #3
0
    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
コード例 #4
0
    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
コード例 #5
0
 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
コード例 #6
0
ファイル: raid.py プロジェクト: nEEtdo0d/AzurLaneAutoScript
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
コード例 #7
0
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:
コード例 #8
0
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:
        """
コード例 #9
0
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={},
コード例 #10
0
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)
コード例 #11
0
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,
コード例 #12
0
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):
        """
コード例 #13
0
ファイル: sos.py プロジェクト: chenkid999/AzurLaneAutoScript
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):
コード例 #14
0
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]
コード例 #15
0
ファイル: shop.py プロジェクト: chenkid999/AzurLaneAutoScript
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))
コード例 #16
0
                                   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:
コード例 #17
0
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
コード例 #18
0
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()
コード例 #19
0
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))
コード例 #20
0
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
コード例 #21
0
 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')
コード例 #22
0
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
コード例 #23
0
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
コード例 #24
0
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:
コード例 #25
0
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:
コード例 #26
0
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')
コード例 #27
0
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
コード例 #28
0
ファイル: dorm.py プロジェクト: zcxiong7/AzurLaneAutoScript
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=[])
コード例 #29
0
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.
コード例 #30
0
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: