コード例 #1
0
 def __init__(
         self,
         current_strength=None,  # 当前理智
         adb_host=None,  # 当前绑定到的设备
         out_put=True,  # 是否有命令行输出
         call_by_gui=False):  # 是否为从 GUI 程序调用
     ensure_adb_alive()
     self.adb = ADBConnector(adb_serial=adb_host)
     self.__is_game_active = False
     self.__call_by_gui = call_by_gui
     self.is_called_by_gui = call_by_gui
     self.viewport = self.adb.screenshot().size
     self.operation_time = []
     self.delay_impl = sleep
     if DEBUG_LEVEL >= 1:
         self.__print_info()
     self.refill_with_item = config.get('behavior/refill_ap_with_item',
                                        False)
     self.refill_with_originium = config.get(
         'behavior/refill_ap_with_originium', False)
     self.use_refill = self.refill_with_item or self.refill_with_originium
     self.loots = {}
     self.use_penguin_report = config.get('reporting/enabled', False)
     if self.use_penguin_report:
         self.penguin_reporter = penguin_stats.reporter.PenguinStatsReporter(
         )
     self.refill_count = 0
     self.max_refill_count = None
     logger.debug("成功初始化模块")
コード例 #2
0
 def connect_device(self):
     # # select from multiple devices
     # ensure_adb_alive()
     # try:
     #     self.adb = ADBConnector.auto_connect()
     # except IndexError:
     #     print("detected multiple devices")
     #     devices = ADBConnector.available_devices()
     #     for i, (serial, status) in enumerate(devices):
     #         print("%2d. %s\t[%s]" % (i, serial, status))
     #     while True:
     #         try:
     #             num = int(input("please input number of the device you select: "))
     #             if not 0 <= num < len(devices):
     #                 raise ValueError()
     #             break
     #         except ValueError:
     #             print("invalid input, please try again")
     #     device_name = devices[num][0]
     #     self.adb = ADBConnector(device_name)
     ensure_adb_alive()
     try:
         self.adb = ADBConnector.auto_connect()
     except (IndexError, RuntimeError, EOFError):
         return False
     self.adb.ensure_alive()
     self.viewport = self.adb.screen_size
     self._print_info()
     return True
コード例 #3
0
def _connect_adb(args):
    from connector.ADBConnector import ADBConnector, ensure_adb_alive
    ensure_adb_alive()
    global device
    if len(args) == 0:
        try:
            device = ADBConnector.auto_connect()
        except IndexError:
            print("检测到多台设备")
            devices = ADBConnector.available_devices()
            for i, (serial, status) in enumerate(devices):
                print("%2d. %s\t[%s]" % (i, serial, status))
            num = 0
            while True:
                try:
                    num = int(input("请输入序号选择设备: "))
                    if not 0 <= num < len(devices):
                        raise ValueError()
                    break
                except ValueError:
                    print("输入不合法,请重新输入")
            device_name = devices[num][0]
            device = ADBConnector(device_name)
    else:
        serial = args[0]
        device = ADBConnector(serial)
コード例 #4
0
    def __init__(
            self,
            current_strength=None,  # 当前理智
            adb_host=None,  # 当前绑定到的设备
            out_put=True,  # 是否有命令行输出
            call_by_gui=False):  # 是否为从 GUI 程序调用
        ensure_adb_alive()
        self.adb = ADBConnector(adb_serial=adb_host)
        self.__is_game_active = False
        self.__call_by_gui = call_by_gui
        self.is_called_by_gui = call_by_gui
        self.viewport = self.adb.screen_size
        self.operation_time = []
        self.delay_impl = sleep
        if DEBUG_LEVEL >= 1:
            self.__print_info()
        self.refill_with_item = config.get('behavior/refill_ap_with_item',
                                           False)
        self.refill_with_originium = config.get(
            'behavior/refill_ap_with_originium', False)
        self.use_refill = self.refill_with_item or self.refill_with_originium
        self.loots = {}
        self.use_penguin_report = config.get('reporting/enabled', False)
        if self.use_penguin_report:
            self.penguin_reporter = penguin_stats.reporter.PenguinStatsReporter(
            )
        self.refill_count = 0
        self.max_refill_count = None
        if Fraction(self.viewport[0], self.viewport[1]) < Fraction(16, 9):
            logger.warn('当前分辨率(%dx%d)不符合要求', self.viewport[0],
                        self.viewport[1])
            if Fraction(self.viewport[1], self.viewport[0]) >= Fraction(16, 9):
                logger.info('屏幕截图可能需要旋转,请尝试在 device-config 中指定旋转角度')
                img = self.adb.screenshot()
                imgfile = os.path.join(
                    config.SCREEN_SHOOT_SAVE_PATH,
                    'orientation-diagnose-%s.png' %
                    time.strftime("%Y%m%d-%H%M%S"))
                img.save(imgfile)
                import json
                logger.info(
                    '参考 %s 以更正 device-config.json[%s]["screenshot_rotate"]',
                    imgfile, json.dumps(self.adb.config_key))

        logger.debug("成功初始化模块")
コード例 #5
0
 def restart_adb(self, kill=False):
     logger.notice("关闭adb中...", flush=False)
     try:
         del self.adb
     except AttributeError:
         pass
     if kill:
         self._kill_adb()
     logger.notice("关闭adb中...完成。正在重启adb")
     ensure_adb_alive()
     self.adb = ADBConnector(adb_serial=self.__adb_host)
     # mumu_handler.regetgame()
     self.reGetGame()
     if self.handler[1] != -1:
         if self.handler[0][4] == 1280 and self.handler[0][5] == 809:
             logger.system("检测到Mumu模拟器,已开启快速图像采集")
             self.getScreenShot = getscreenshot
         else:
             logger.notice("检测到Mumu模拟器,请使用1280x720模式以开启快速图像采集!")
コード例 #6
0
ファイル: worker.py プロジェクト: zxcplll/ArknightsAutoHelper
 def run(self):
     print("starting worker thread")
     loghandler = WebHandler(self.output)
     loghandler.setLevel(logging.INFO)
     logging.root.addHandler(loghandler)
     version = config.version
     if config.get_instance_id() != 0:
         version += f" (instance {config.get_instance_id()})"
     self.notify("web:version", version)
     ensure_adb_alive()
     devices = ADBConnector.available_devices()
     devices = ["adb:" + x[0] for x in devices]
     self.notify("web:availiable-devices", devices)
     self.helper = Arknights.helper.ArknightsHelper(frontend=self)
     while True:
         self.notify("worker:idle")
         command: dict = self.input.get(block=True)
         if command.get('type', None) == "call":
             self.interrupt_event.clear()
             self.notify('worker:busy')
             tag = command.get('tag', None)
             action = command.get('action', None)
             return_value = None
             exc = None
             try:
                 func = self.allowed_calls[action]
                 args = command.get('args', [])
                 return_value = func(*args)
             except:
                 exc = sys.exc_info()
             if exc is None:
                 result = dict(type='call-result',
                               status='resolved',
                               tag=tag,
                               return_value=return_value)
             else:
                 result = dict(type='call-result',
                               status='exception',
                               tag=tag,
                               exception=format_exception(*exc))
             if tag is not None:
                 self.output.put_nowait(result)
コード例 #7
0
 def __init__(self, adb_host=None, gui_enabled=False, with_commander=False):
     os.system("cls")
     ensure_adb_alive()
     self.Thread = Job()
     self.after_finish_Thread = Job()
     self.has_after_finish_Thread = False
     self.__adb_host = adb_host
     self.adb = ADBConnector(adb_serial=adb_host)
     self.root = Path(__file__).parent
     self.gui_enabled = gui_enabled
     self.gameTemp = GameTemplate("./imgReco/img/")
     RootData.set("gameTempGlobal", self.gameTemp)
     self.handler = mumu_handler.getSelectGameNow()
     self.getScreenShot = self.adb.screenshot
     self.reconizerC, self.reconizerE, self.reconizerN, self.reconizerN2 = getReconizer(
     )
     self.time_sleep = time_sleep
     self.clicker = Clicker(self.adb)
     self.mapper = Mapping.Mapping("./ArkMapping/MapData2.dat")
     self.material_planner = MaterialPlanning()
     self.playerInfo = None
     self.in_attack = False
     self.total_itemStack = ItemStack()
     self.current_itemStack = ItemStack()
     self._force_stop = False
     self.mapData = ArkMap(self)
     self.dropLinker = ItemDropLinker()
     if with_commander:
         self.commander = commander()
         self.commandRegister(self.commander)
         self.commander.StartTrack()
     if self.handler[1] != -1:
         if self.handler[0][4] == 1280 and self.handler[0][5] == 809:
             logger.system("检测到Mumu模拟器,已开启快速图像采集")
             self.getScreenShot = getscreenshot
         else:
             logger.notice("检测到Mumu模拟器,请使用1280x720模式以开启快速图像采集!")
コード例 #8
0
def _connect_adb(args):
    from connector.ADBConnector import ADBConnector, ensure_adb_alive
    ensure_adb_alive()
    global device
    if len(args) == 0:
        try:
            device = ADBConnector.auto_connect()
        except IndexError:
            print("检测到多台设备")
            devices = ADBConnector.available_devices()
            for i, (serial, status) in enumerate(devices):
                print("%2d. %s\t[%s]" % (i, serial, status))
            num = 0
            while True:
                try:
                    num = int(input("请输入序号选择设备: "))
                    if not 0 <= num < len(devices):
                        raise ValueError()
                    break
                except ValueError:
                    print("输入不合法,请重新输入")
            device_name = devices[num][0]
            device = ADBConnector(device_name)
    else:
        serial = args[0]
        try:
            device = ADBConnector(serial)
        except RuntimeError as e:
            if e.args and isinstance(e.args[0],
                                     bytes) and b'not found' in e.args[0]:
                if ':' in serial and serial.split(':')[-1].isdigit():
                    print('adb connect', serial)
                    ADBConnector.paranoid_connect(serial)
                    device = ADBConnector(serial)
                    return
            raise