Exemplo n.º 1
0
    def first_login(self, username: str, password: str) -> bool:
        logger.info("first server fetching...")
        url_version = f"http://version.jr.moefantasy.com/index/checkVer/{self.version}/{self.channel}/2&version={self.version}&channel={self.channel}&market=2"
        # Pull version Info
        response_version = self.session.get(url=url_version,
                                            headers=HEADER,
                                            timeout=10)
        response_version = json.loads(response_version.text)

        if 'eid' in response_version:
            get_error(response_version['eid'])
            return False
        else:
            pass

        # Pull version number, login address
        # self.version = response_version["version"]["newVersionId"]
        self.login_server = response_version["loginServer"]
        self.hm_login_server = response_version["hmLoginServer"]

        # For game log in
        server_data = self.login_usual(username=username, password=password)
        if not server_data:
            return False

        self.uid = server_data["userId"]

        return True
Exemplo n.º 2
0
 def fetch_map_data(self) -> dict:
     map_data: dict = self.api.getPveData()
     if 'eid' in map_data:
         get_error(map_data['eid'])
         return {}
     if self.is_realrun is False:
         save_json('six_getPveData.json', map_data)
     return map_data
Exemplo n.º 3
0
 def fetch_fleet_info(self) -> dict:
     fleet_info: dict = self.api.getFleetInfo()
     if 'eid' in fleet_info:
         get_error(fleet_info['eid'])
         return {}
     if self.is_realrun is False:
         save_json('six_getFleetInfo.json', fleet_info)
     return fleet_info
Exemplo n.º 4
0
 def fetch_user_data(self) -> dict:
     user_data: dict = self.api.getUserData()
     if 'eid' in user_data:
         get_error(user_data['eid'])
         return {}
     if self.is_realrun is False:
         save_json('six_getUserData.json', user_data)
     return user_data
Exemplo n.º 5
0
 def _cancel() -> Tuple[bool, dict]:
     data = self.api.cancel(exp_map)
     res = False
     if 'eid' in data:
         get_error(data['eid'])
     elif 'status' in data:
         res = True
     else:
         self.logger.debug(data)
     return res, data
Exemplo n.º 6
0
 def _start() -> Tuple[bool, dict]:
     data = self.api.start(exp_map, fleet_id)
     res = False
     if 'eid' in data:
         get_error(data['eid'])
     elif 'pveExploreVo' in data:
         res = True
     else:
         self.logger.debug(data)
     return res, data
Exemplo n.º 7
0
 def _buy() -> Tuple[bool, dict]:
     data = self.api.chargeTicket(resource=resource_typd_id)
     res = False
     if 'eid' in data:
         get_error(data['eid'])
     elif 'userResVO' in data:
         res = True
     else:
         self.logger.debug(data)
     return res, data
Exemplo n.º 8
0
 def _buy_exp() -> Tuple[bool, dict]:
     data = self.api.adjutantExp()
     res = False
     if 'eid' in data:
         get_error(data['eid'])
     elif 'adjutantData' in data:
         res = True
     else:
         self.logger.debug(data)
     return res, data
Exemplo n.º 9
0
 def _reset() -> Tuple[bool, dict]:
     data = self.api.resetChapter(chapter_id)
     res = False
     if 'eid' in data:
         get_error(data['eid'])
     elif 'adjutantData' in data:
         res = True
     else:
         self.logger.debug(data)
     return res, data
Exemplo n.º 10
0
 def _set_fleets() -> Tuple[bool, dict]:
     data = self.api.setWarFleet(fleet)
     res = False
     if 'eid' in data:
         get_error(data['eid'])
     elif 'fleet' in data and len(data['fleet']) > 0:
         res = True
     else:
         self.logger.debug(data)
     return res, data
Exemplo n.º 11
0
 def _get_res() -> Tuple[bool, dict]:
     data = self.api.getResult(exp_map)
     res = False
     if 'eid' in data:
         get_error(data['eid'])
     elif 'pveExploreVo' in data:
         res = True
     else:
         self.logger.debug(data)
     return res, data
Exemplo n.º 12
0
 def _spy() -> Tuple[bool, dict]:
     data = self.api.spy()
     res = False
     if 'eid' in data:
         get_error(data['eid'])
     elif 'enemyVO' in data:
         res = True
     else:
         self.logger.debug(data)
     return res, data
Exemplo n.º 13
0
 def _result() -> Tuple[bool, dict]:
     data = self.api.getWarResult(is_night)
     res = False
     if 'eid' in data:
         get_error(data['eid'])
     elif 'warResult' in data:
         res = True
     else:
         self.logger.debug(data)
     return res, data
Exemplo n.º 14
0
 def _challenge() -> Tuple[bool, dict]:
     data = self.api.challenge(formation)
     res = False
     if 'eid' in data:
         get_error(data['eid'])
     elif 'warReport' in data:
         res = True
     else:
         self.logger.debug(data)
     return res, data
Exemplo n.º 15
0
 def _pass() -> Tuple[bool, dict]:
     data = self.api.passLevel()
     res = False
     if 'eid' in data:
         get_error(data['eid'])
     elif 'code' in data:
         get_error(data['code'])
     elif 'attach' in data:
         res = True
     else:
         self.logger.debug(data)
     return res, data
Exemplo n.º 16
0
 def _supply_boats() -> Tuple[bool, dict]:
     data = self.api.supplyBoats(fleet)
     res = False
     if 'eid' in data:
         get_error(data['eid'])
         self.logger.warning("Supply ships failed...")
     elif 'userVo' in data:
         self.logger.info("Supply boats successfully!")
         res = True
     else:
         self.logger.debug(data)
     return res, data
Exemplo n.º 17
0
 def _repair() -> Tuple[bool, dict]:
     data = self.api.instantRepairShips(fleet)
     res = False
     if 'eid' in data:
         get_error(data['eid'])
         self.logger.warning(f"Failed to repair {fleet}")
     elif 'shipVOs' in data:
         self.logger.info("Repaired successfully")
         res = True
     else:
         self.logger.debug(data)
     return res, data
Exemplo n.º 18
0
 def _newNext() -> Tuple[bool, dict]:
     data = self.api.newNext(next_node)
     res = False
     if 'eid' in data:
         get_error(data['eid'])
     elif 'nodeId' in data:
         node_name = self.get_map_node_by_id(next_node)['flag']
         self.logger.info(f"Proceed to {node_name} succeed!")
         res = True
     else:
         self.logger.debug(data)
     return res, data
Exemplo n.º 19
0
 def _cast_skill() -> Tuple[bool, dict]:
     data = self.api.useAdjutant()
     res = False
     if 'eid' in data:
         get_error(data['eid'])
         self.logger.warning("Failed to cast adjutant skill...")
     elif 'adjutantData' in data:
         self.logger.info("Adjutant skill casted successfully!")
         res = True
     else:
         self.logger.debug(data)
     return res, data
Exemplo n.º 20
0
 def _selectBoat() -> [bool, object]:
     data = self.api.selectBoat(purchase_list, buff_card)
     res = False
     if 'eid' in data:
         get_error(data['eid'])
         self.logger.warning("Buying ships failed...")
     elif 'boatPool' in data:
         self.logger.info("Buying ships successfully!")
         res = True
     else:
         self.logger.debug(data)
     return res, data
Exemplo n.º 21
0
 def _withdraw() -> Tuple[bool, dict]:
     data = self.api.withdraw()
     res = False
     if 'eid' in data:
         get_error(data['eid'])
     elif 'code' in data:
         get_error(data['code'])
     elif 'getLevelList' in data:
         self.logger.info("Retreat success. Fresh start is ready.")
         res = True
     else:
         self.logger.debug(data)
     return res, data
Exemplo n.º 22
0
 def _canSelectList() -> Tuple[bool, dict]:
     data = self.api.canSelectList(is_refresh)
     res = False
     if 'eid' in data:
         get_error(data['eid'])
     elif '$ssss' in data:
         self.logger.info('Visiting shop succeed!')
         res = True
     elif 'hadResetSelectFlag' in data:
         res = True
     else:
         self.logger.error(data)
     return res, data
Exemplo n.º 23
0
 def _readyFire() -> Tuple[bool, int]:
     data = self.api.readyFire(sub_map_id)
     res = False
     if 'eid' in data:
         get_error(data['eid'])
         next_node_id = -1
     elif '$currentVo' in data:
         self.logger.info('Entering map succeed!')
         next_node_id = self.get_next_node_by_id(
             data['$currentVo']['nodeId'])
         res = True
     else:
         self.logger.debug(data)
         next_node_id = -1
     return res, next_node_id
Exemplo n.º 24
0
 def _set_fleets() -> Tuple[bool, dict]:
     data = self.api.setChapterBoat(chapter_map, fleet)
     res = False
     if 'eid' in data:
         get_error(data['eid'])
     elif 'chapterInfo' in data and 'boats' in data['chapterInfo']:
         if len(
                 set(fleet).difference(set(
                     data['chapterInfo']['boats']))) == 0:
             res = True
         else:
             self.logger.debug('undesired chapter ship set')
             self.logger.debug(data)
     else:
         self.logger.debug(data)
     return res, data
Exemplo n.º 25
0
    def resume_sortie(self) -> bool:
        # TODO: may still have some corner cases to catch
        self.logger.info(f"[RESUME] Sortie {self.curr_node}")
        self.is_running = True

        try:
            self.helper.enter_sub_map(self.curr_sub_map)
            self.check_sub_map_done()

            if self.is_running is False:
                return False

            buy_res = None
            # Access shop for the first time
            shop_res = self.api.canSelectList('0')
            if 'eid' in shop_res:
                get_error(shop_res['eid'])
            elif '$ssss' in shop_res:
                self.logger.debug("[RESUME]: Visiting shop")
                ss_list = self.find_SS(shop_res['boats'])
                if (len(ss_list) == 0) and (shop_res['hadResetSelectFlag']
                                            == 0):
                    # Access shop for the second time
                    shop_res = self.api.canSelectList('1')
                    ss_list = self.find_SS(shop_res['boats'])
                else:
                    pass
                is_buff = self.helper.is_buy_buff(self.curr_node)
                if len(ss_list) == 0:
                    pass
                else:
                    buy_res = self.buy_wanted_ships(purchase_list=ss_list,
                                                    shop_data=shop_res,
                                                    is_buff=is_buff)
            elif '$reset-$data' in shop_res and shop_res[
                    '$reset-$data'] is not None:
                self.logger.debug(
                    "[RESUME]: User has already used up purchase opportunity")
            else:
                self.logger.debug(shop_res)

            if buy_res is None:
                self.logger.debug("[RESUME] Use previous boat pool")
                self.set_fleet(self.user_data['boatPool'])
            else:
                self.logger.debug("[RESUME] Use new boat pool")
                self.set_boat_pool(boat_pool=buy_res['boatPool'])
                self.set_fleet(buy_res['boatPool'])

            if self.is_running is False:
                return False

            node_status = self.get_node_status(self.curr_node)
            self.logger.debug("node status = {}".format(node_status))
            if node_status == -1:
                self.logger.debug(self.curr_node)
                self.logger.debug(self.curr_sub_map)
                self.logger.debug(self.user_data['nodeList'])
            elif node_status == 3:
                next_node = self.helper.get_next_node_by_id(self.curr_node)
                while next_node not in T_CONST.BOSS_NODES:
                    if next_node == "-1":
                        raise wgv_error.ThermopylaeSortieExit("Quit on -1")
                    next_node = self.single_node_sortie(next_node)
                # boss fight
                self.single_node_sortie(next_node)
            elif node_status in [1, 2]:
                next_node = self.curr_node
                if node_status == 2:
                    next_node = self.resume_node_sortie(self.curr_node)
                while next_node not in T_CONST.BOSS_NODES:
                    if next_node == "-1":
                        raise wgv_error.ThermopylaeSortieExit("Quit on -1")
                    next_node = self.single_node_sortie(self.curr_node)
                # boss fight
                self.logger.info("[RESUME] Reaching Boss Node")
                self.single_node_sortie(next_node)
            else:
                self.logger.debug(self.curr_node)
        except wgv_error.ThermopylaeSortieExit as e:
            self.logger.warning(e)
            self.parent.button_fresh_sortie.setEnabled(True)
            return False
        except wgv_error.ThermopylaeSortieRestart as e:
            set_sleep()
            self.logger.warning(e)
            return self.start_fresh_sortie()
        except wgv_error.ThermopylaeSortieResume as e:
            set_sleep()
            self.logger.warning(e)
            return self.resume_sortie()
        except wgv_error.ThermopylaeSortieDone as e:
            self.logger.info(e)
            self._reset_chapter()
            return True