예제 #1
0
    'extra_part':
    ['初級木材輸送護衛', '中級木材輸送護衛', '上級木材輸送護衛', '初級鉄鋼輸送護衛', '中級鉄鋼輸送護衛', '上級鉄鋼輸送護衛'],
    'extra_cube': ['船団護衛演習', '艦隊輸送演習', '艦隊実弾演習', '装備慣熟演習', '艦隊慣熟演習', '艦隊運動演習'],
    'extra_oil': ['小型油田開発', '中型油田開発', '大型油田開発'],
    'extra_book': ['小型船団護衛', '中型船団護衛', '大型船団護衛'],
    'urgent_drill': ['敵偵察部隊迎撃', '敵主力艦隊撃破', '敵精鋭部隊撃破', '輸送部隊護衛'],
    'urgent_part':
    ['近海掃海任務', '近海航行展示', '離島火力支援', '離島兵員輸送', '外敵生態調査', '兵站航路確保'],
    'urgent_book':
    ['離島物資輸送', '近海パトロール', '離島漸減支援', '外敵動静哨戒', '前線部隊支援', '外敵中枢偵察'],
    'urgent_box': ['装備輸送', '物資交換', '装備試験'],
    'urgent_cube': ['船団救出', '敵襲'],
    'urgent_gem': ['要人護衛', '休暇護衛'],
    'urgent_ship': ['小型観艦式', '連合艦隊観艦式', '多国連合観艦式'],
}
COMMISSION_SWITCH = Switch('Commission_switch', is_selector=True)
COMMISSION_SWITCH.add_status('daily', COMMISSION_DAILY)
COMMISSION_SWITCH.add_status('urgent', COMMISSION_URGENT)
COMMISSION_SCROLL = Scroll(COMMISSION_SCROLL_AREA,
                           color=(247, 211, 66),
                           name='COMMISSION_SCROLL')


class Commission:
    button: Button
    name: str
    genre: str
    status: str
    duration: timedelta
    expire: timedelta
예제 #2
0
from module.base.button import ButtonGrid
from module.base.decorator import cached_property
from module.base.timer import Timer
from module.equipment.assets import *
from module.logger import logger
from module.ui.navbar import Navbar
from module.ui.ui import UI
from module.ui.switch import Switch

equipping_filter = Switch('Equiping_filter')
equipping_filter.add_status('on', check_button=EQUIPPING_ON)
equipping_filter.add_status('off', check_button=EQUIPPING_OFF)

SWIPE_DISTANCE = 250
SWIPE_RANDOM_RANGE = (-40, -20, 40, 20)


class Equipment(UI):
    equipment_has_take_on = False

    def equipping_set(self, enable=False):
        if equipping_filter.set('on' if enable else 'off', main=self):
            self.wait_until_stable(SWIPE_AREA)

    def _equip_view_swipe(self, distance, check_button=EQUIPMENT_OPEN):
        swipe_count = 0
        swipe_timer = Timer(5, count=10)
        self.ensure_no_info_bar(timeout=3)
        SWIPE_CHECK.load_color(self.device.image)
        SWIPE_CHECK._match_init = True  # Disable ensure_template() on match(), allows ship to be properly determined
        # whether actually different or not
예제 #3
0
from module.campaign.campaign_base import CampaignBase as CampaignBase_
from module.exception import RequestHumanTakeover
from module.logger import logger
from module.ui.assets import WAR_ARCHIVES_CHECK
from module.ui.page import page_archives
from module.ui.scroll import Scroll
from module.ui.switch import Switch
from module.war_archives.assets import (WAR_ARCHIVES_CAMPAIGN_CHECK,
                                        WAR_ARCHIVES_EX_ON,
                                        WAR_ARCHIVES_SCROLL,
                                        WAR_ARCHIVES_SP_ON)
from module.war_archives.dictionary import dic_archives_template

WAR_ARCHIVES_SWITCH = Switch('War_Archives_switch', is_selector=True)
WAR_ARCHIVES_SWITCH.add_status('ex', WAR_ARCHIVES_EX_ON)
WAR_ARCHIVES_SWITCH.add_status('sp', WAR_ARCHIVES_SP_ON)
WAR_ARCHIVES_SCROLL = Scroll(WAR_ARCHIVES_SCROLL,
                             color=(247, 211, 66),
                             name='WAR_ARCHIVES_SCROLL')


class CampaignBase(CampaignBase_):
    # Helper variable to keep track of whether is the first runthrough
    first_run = True

    def _get_archives_entrance(self, name):
        """
        Create entrance button to target archive campaign
        using a template acquired by event folder name

        Args:
예제 #4
0
from module.campaign.assets import *
from module.campaign.campaign_ocr import CampaignOcr
from module.exception import CampaignNameError, ScriptEnd
from module.logger import logger
from module.ui.switch import Switch
from module.ui.ui import UI

STAGE_SHOWN_WAIT = (1, 1.2)
MODE_SWITCH_1 = Switch('Mode_switch_1', offset=(30, 10))
MODE_SWITCH_1.add_status('normal', SWITCH_1_NORMAL, sleep=STAGE_SHOWN_WAIT)
MODE_SWITCH_1.add_status('hard', SWITCH_1_HARD, sleep=STAGE_SHOWN_WAIT)
MODE_SWITCH_2 = Switch('Mode_switch_2', offset=(30, 10))
MODE_SWITCH_2.add_status('hard', SWITCH_2_HARD, sleep=STAGE_SHOWN_WAIT)
MODE_SWITCH_2.add_status('ex', SWITCH_2_EX, sleep=STAGE_SHOWN_WAIT)


class CampaignUI(UI, CampaignOcr):
    ENTRANCE = Button(area=(), color=(), button=(), name='default_button')

    def campaign_ensure_chapter(self, index):
        """
        Args:
            index (int, str): Chapter. Such as 7, 'd', 'sp'.
        """
        index = self._campaign_get_chapter_index(index)

        # A tricky way to use ui_ensure_index.
        self.ui_ensure_index(index,
                             letter=self.get_chapter_index,
                             prev_button=CHAPTER_PREV,
                             next_button=CHAPTER_NEXT,
예제 #5
0
from module.base.utils import color_bar_percentage
from module.handler.assets import *
from module.handler.auto_search import AutoSearchHandler
from module.logger import logger
from module.ui.switch import Switch

fast_forward = Switch('Fast_Forward')
fast_forward.add_status('on', check_button=FAST_FORWARD_ON)
fast_forward.add_status('off', check_button=FAST_FORWARD_OFF)
fleet_lock = Switch('Fleet_Lock', offset=(5, 5))
fleet_lock.add_status('on', check_button=FLEET_LOCKED)
fleet_lock.add_status('off', check_button=FLEET_UNLOCKED)
auto_search = Switch('Auto_Search', offset=(20, 20))
auto_search.add_status('on', check_button=AUTO_SEARCH_ON)
auto_search.add_status('off', check_button=AUTO_SEARCH_OFF)
book_prep = Switch('2x Book Prep')
book_prep.add_status('on', check_button=BOOK_ON_PREP)
book_prep.add_status('off', check_button=BOOK_OFF_PREP)
book_auto = Switch('2x Book Auto')
book_auto.add_status('on', check_button=BOOK_ON_AUTO)
book_auto.add_status('off', check_button=BOOK_OFF_AUTO)


class FastForwardHandler(AutoSearchHandler):
    map_clear_percentage = 0.
    map_achieved_star_1 = False
    map_achieved_star_2 = False
    map_achieved_star_3 = False
    map_is_clear = False
    map_is_3_star = False
    map_is_green = False
예제 #6
0
from module.base.timer import Timer
from module.combat.assets import *
from module.exception import CampaignEnd
from module.handler.assets import *
from module.logger import logger
from module.os.assets import GLOBE_GOTO_MAP
from module.os_handler.assets import *
from module.os_handler.enemy_searching import EnemySearchingHandler
from module.ui.switch import Switch

fleet_lock = Switch('Fleet_Lock', offset=(10, 120))
fleet_lock.add_status('on', check_button=OS_FLEET_LOCKED)
fleet_lock.add_status('off', check_button=OS_FLEET_UNLOCKED)


class MapEventHandler(EnemySearchingHandler):
    ash_popup_canceled = False

    def handle_map_get_items(self, interval=2):
        if self.is_in_map():
            return False

        if self.appear(GET_ITEMS_1, interval=interval) \
                or self.appear(GET_ITEMS_2, interval=interval) \
                or self.appear(GET_ITEMS_3, interval=interval):
            self.device.click(CLICK_SAFE_AREA)
            return True
        if self.appear(GET_ADAPTABILITY, interval=interval):
            self.device.click(CLICK_SAFE_AREA)
            return True
        if self.appear(GET_MEOWFFICER_ITEMS_1, interval=interval):
예제 #7
0
import numpy as np

from module.handler.assets import *
from module.handler.info_handler import InfoHandler
from module.logger import logger
from module.template.assets import TEMPLATE_FORMATION_1, TEMPLATE_FORMATION_2, TEMPLATE_FORMATION_3
from module.ui.switch import Switch

formation = Switch('Formation', offset=120)
formation.add_status('line_ahead', check_button=FORMATION_1)
formation.add_status('double_line', check_button=FORMATION_2)
formation.add_status('diamond', check_button=FORMATION_3)

submarine_hunt = Switch('Submarine_hunt', offset=120)
submarine_hunt.add_status('on', check_button=SUBMARINE_HUNT_ON)
submarine_hunt.add_status('off', check_button=SUBMARINE_HUNT_OFF)

submarine_view = Switch('Submarine_view', offset=120)
submarine_view.add_status('on', check_button=SUBMARINE_VIEW_ON)
submarine_view.add_status('off', check_button=SUBMARINE_VIEW_OFF)


class StrategyHandler(InfoHandler):
    fleet_1_formation_fixed = False
    fleet_2_formation_fixed = False

    def strategy_open(self):
        logger.info('Strategy open')
        while 1:
            if self.appear(IN_MAP, interval=5) and not self.appear(
                    STRATEGY_OPENED, offset=120):
예제 #8
0
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):
        """
        Args:
            save_get_items (bool):

        Returns:
            bool:
예제 #9
0
from module.base.base import ModuleBase
from module.base.utils import color_bar_percentage
from module.handler.assets import *
from module.logger import logger
from module.ui.switch import Switch

fast_forward = Switch('Fast_Forward')
fast_forward.add_status('on', check_button=FAST_FORWARD_ON)
fast_forward.add_status('off', check_button=FAST_FORWARD_OFF)
fleet_lock = Switch('Fleet_Lock', offset=(5, 5))
fleet_lock.add_status('on', check_button=FLEET_LOCKED)
fleet_lock.add_status('off', check_button=FLEET_UNLOCKED)


class FastForwardHandler(ModuleBase):
    map_clear_percentage = 0.
    map_achieved_star_1 = False
    map_achieved_star_2 = False
    map_achieved_star_3 = False
    map_is_clear = False
    map_is_3_star = False
    map_is_green = False
    map_has_fast_forward = False
    map_is_clear_mode = False  # Clear mode == fast forward

    def map_get_info(self):
        """
        Logs:
            | INFO | [Map_info] 98%, star_1, star_2, star_3, clear, 3_star, green, fast_forward
        """
        self.map_clear_percentage = color_bar_percentage(
예제 #10
0
from module.base.button import ButtonGrid
from module.equipment.equipment import Equipment
from module.exception import ScriptError
from module.retire.assets import *
from module.ui.switch import Switch

dock_sorting = Switch('Dork_sorting')
dock_sorting.add_status('Ascending',
                        check_button=SORT_ASC,
                        click_button=SORTING_CLICK)
dock_sorting.add_status('Descending',
                        check_button=SORT_DESC,
                        click_button=SORTING_CLICK)

favourite_filter = Switch('Favourite_filter')
favourite_filter.add_status('on', check_button=COMMON_SHIP_FILTER_ENABLE)
favourite_filter.add_status('off', check_button=COMMON_SHIP_FILTER_DISABLE)

filter_extra_enhanceable = Switch('Filter_extra_enhanceable')
filter_extra_enhanceable.add_status('on',
                                    check_button=FILTER_EXTRA_ENHANCEABLE_ON)
filter_extra_enhanceable.add_status('off',
                                    check_button=FILTER_EXTRA_ENHANCEABLE_OFF)

filter_extra_no_limit = Switch('Filter_extra_no_limit')
filter_extra_no_limit.add_status('on', check_button=FILTER_EXTRA_NO_LIMIT_ON)
filter_extra_no_limit.add_status('off', check_button=FILTER_EXTRA_NO_LIMIT_OFF)

filter_index_all = Switch('Filter_index_all')
filter_index_all.add_status('on', check_button=FILTER_INDEX_ALL_ON)
filter_index_all.add_status('off', check_button=FILTER_INDEX_ALL_OFF)
예제 #11
0
import numpy as np

from module.base.timer import Timer
from module.handler.assets import *
from module.handler.info_handler import InfoHandler
from module.logger import logger
from module.template.assets import TEMPLATE_FORMATION_1, TEMPLATE_FORMATION_2, TEMPLATE_FORMATION_3
from module.ui.switch import Switch

formation = Switch('Formation', offset=120)
formation.add_status('1', check_button=FORMATION_1)
formation.add_status('2', check_button=FORMATION_2)
formation.add_status('3', check_button=FORMATION_3)

submarine_hunt = Switch('Submarine_hunt', offset=120)
submarine_hunt.add_status('on', check_button=SUBMARINE_HUNT_ON)
submarine_hunt.add_status('off', check_button=SUBMARINE_HUNT_OFF)


class SwitchWithHandler(Switch):
    @staticmethod
    def handle_submarine_zone_icon_bug(main):
        """
        When switching the submarine zone, the icon in the strategy don't change.
        If click submarine hunt, submarine zone will show the correct icon.
        So the key to deal with submarine zone icon bug, is to double click submarine_hunt.

        Args:
            main (ModuleBase):
        """
        current = submarine_hunt.get(main=main)
예제 #12
0
from module.campaign.assets import *
from module.campaign.campaign_ocr import CampaignOcr
from module.exception import CampaignNameError, ScriptEnd
from module.logger import logger
from module.ui.assets import CAMPAIGN_CHECK
from module.ui.switch import Switch
from module.ui.ui import UI

MODE_SWITCH_1 = Switch('Mode_switch_1', offset=(30, 10))
MODE_SWITCH_1.add_status('normal', SWITCH_1_NORMAL)
MODE_SWITCH_1.add_status('hard', SWITCH_1_HARD)
MODE_SWITCH_2 = Switch('Mode_switch_2', offset=(30, 10))
MODE_SWITCH_2.add_status('hard', SWITCH_2_HARD)
MODE_SWITCH_2.add_status('ex', SWITCH_2_EX)


class CampaignUI(UI, CampaignOcr):
    ENTRANCE = Button(area=(), color=(), button=(), name='default_button')

    def campaign_ensure_chapter(self, index):
        """
        Args:
            index (int, str): Chapter. Such as 7, 'd', 'sp'.
        """
        index = self._campaign_get_chapter_index(index)

        # A tricky way to use ui_ensure_index.
        self.ui_ensure_index(index,
                             letter=self.get_chapter_index,
                             prev_button=CHAPTER_PREV,
                             next_button=CHAPTER_NEXT,
예제 #13
0
from module.base.button import ButtonGrid
from module.equipment.equipment import Equipment
from module.exception import ScriptError
from module.retire.assets import *
from module.ui.switch import Switch

dock_sorting = Switch('Dork_sorting')
dock_sorting.add_status('Ascending', check_button=SORT_ASC, click_button=SORTING_CLICK)
dock_sorting.add_status('Descending', check_button=SORT_DESC, click_button=SORTING_CLICK)

favourite_filter = Switch('Favourite_filter')
favourite_filter.add_status('on', check_button=COMMON_SHIP_FILTER_ENABLE)
favourite_filter.add_status('off', check_button=COMMON_SHIP_FILTER_DISABLE)

FILTER_SORT_GRIDS = ButtonGrid(
    origin=(284, 109), delta=(157.5, 0), button_shape=(137, 38), grid_shape=(6, 1), name='FILTER_SORT')
FILTER_SORT_TYPES = [
    ['rarity', 'level', 'total', 'join', 'intimacy', 'stat']]  # stat has extra grid, not worth pursuing

FILTER_INDEX_GRIDS = ButtonGrid(
    origin=(284, 183), delta=(157.5, 56.5), button_shape=(137, 38), grid_shape=(6, 2), name='FILTER_INDEX')
FILTER_INDEX_TYPES = [['all', 'vanguard', 'main', 'dd', 'cl', 'ca'],
                      ['bb', 'cv', 'repair', 'ss', 'others', 'not_available']]

FILTER_FACTION_GRIDS = ButtonGrid(
    origin=(284, 316), delta=(157.5, 56.5), button_shape=(137, 38), grid_shape=(6, 2), name='FILTER_FACTION')
FILTER_FACTION_TYPES = [['all', 'eagle', 'royal', 'sakura', 'iron', 'dragon'],
                        ['sardegna', 'northern', 'iris', 'vichya', 'other', 'not_available']]

FILTER_RARITY_GRIDS = ButtonGrid(
    origin=(284, 449), delta=(157.5, 0), button_shape=(137, 38), grid_shape=(6, 1), name='FILTER_RARITY')
예제 #14
0
from module.base.timer import Timer
from module.base.utils import color_bar_percentage
from module.handler.assets import *
from module.handler.auto_search import AutoSearchHandler
from module.logger import logger
from module.ui.switch import Switch

fast_forward = Switch('Fast_Forward')
fast_forward.add_status('on', check_button=FAST_FORWARD_ON)
fast_forward.add_status('off', check_button=FAST_FORWARD_OFF)
fleet_lock = Switch('Fleet_Lock', offset=(5, 5))
fleet_lock.add_status('on', check_button=FLEET_LOCKED)
fleet_lock.add_status('off', check_button=FLEET_UNLOCKED)
auto_search = Switch('Auto_Search', offset=(20, 20))
auto_search.add_status('on', check_button=AUTO_SEARCH_ON)
auto_search.add_status('off', check_button=AUTO_SEARCH_OFF)


class FastForwardHandler(AutoSearchHandler):
    map_clear_percentage = 0.
    map_achieved_star_1 = False
    map_achieved_star_2 = False
    map_achieved_star_3 = False
    map_is_clear = False
    map_is_3_star = False
    map_is_green = False
    map_has_fast_forward = False
    map_is_clear_mode = False  # Clear mode == fast forward
    map_is_auto_search = False
    map_is_2x_book = False
예제 #15
0
from module.base.button import ButtonGrid
from module.equipment.equipment import Equipment
from module.logger import logger
from module.ocr.ocr import DigitCounter
from module.retire.assets import *
from module.ui.scroll import Scroll
from module.ui.switch import Switch

DOCK_SORTING = Switch('Dork_sorting')
DOCK_SORTING.add_status('Ascending',
                        check_button=SORT_ASC,
                        click_button=SORTING_CLICK)
DOCK_SORTING.add_status('Descending',
                        check_button=SORT_DESC,
                        click_button=SORTING_CLICK)

DOCK_FAVOURITE = Switch('Favourite_filter')
DOCK_FAVOURITE.add_status('on', check_button=COMMON_SHIP_FILTER_ENABLE)
DOCK_FAVOURITE.add_status('off', check_button=COMMON_SHIP_FILTER_DISABLE)

FILTER_SORT_GRIDS = ButtonGrid(origin=(284, 60),
                               delta=(158, 0),
                               button_shape=(137, 38),
                               grid_shape=(6, 1),
                               name='FILTER_SORT')
FILTER_SORT_TYPES = [['rarity', 'level', 'total', 'join', 'intimacy',
                      'stat']]  # stat has extra grid, not worth pursuing

FILTER_INDEX_GRIDS = ButtonGrid(origin=(284, 133),
                                delta=(158, 57),
                                button_shape=(137, 38),
예제 #16
0
from module.meowfficer.base import MeowfficerBase
from module.ui.switch import Switch

MEOWFFICER_TALENT_GRID_1 = ButtonGrid(origin=(875, 559),
                                      delta=(105, 0),
                                      button_shape=(16, 16),
                                      grid_shape=(3, 1),
                                      name='MEOWFFICER_TALENT_GRID_1')
MEOWFFICER_TALENT_GRID_2 = MEOWFFICER_TALENT_GRID_1.move(
    vector=(-40, -20), name='MEOWFFICER_TALENT_GRID_2')
MEOWFFICER_SHIFT_DETECT = Button(area=(1260, 669, 1280, 720),
                                 color=(117, 106, 84),
                                 button=(1260, 669, 1280, 720),
                                 name='MEOWFFICER_SHIFT_DETECT')

SWITCH_LOCK = Switch(name='Meowfficer_Lock', offset=(40, 40))
SWITCH_LOCK.add_status('lock',
                       check_button=MEOWFFICER_APPLY_UNLOCK,
                       click_button=MEOWFFICER_APPLY_LOCK)
SWITCH_LOCK.add_status('unlock',
                       check_button=MEOWFFICER_APPLY_LOCK,
                       click_button=MEOWFFICER_APPLY_UNLOCK)


class MeowfficerCollect(MeowfficerBase):
    def _meow_detect_shift(self, skip_first_screenshot=True):
        """
        Serves as innate wait mechanism for loading
        of meowfficer acquisition complete screen
        During which screen may shift left randomly