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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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