def parse_ship_descriptor(ship: Ship, line: dict, lines: list, event: tuple): """ Parse an event_descriptor of the SHIP type. Supports ability, component and crew type operations. :param ship: Ship instance for the spawn described by lines :param line: Trigger line dictionary :param lines: List of lines in this spawn :param event: Event descriptor tuple (PatternParser docstring) :return: The result of results this SHIP event descriptor """ if event[0] != Patterns.SHIP: raise InvalidDescriptor(event) event_type, args = event[1], event[2:] # "ability", "component", "crew" # Parse Component selected if event_type == "component": # Component must be selected on the Ship for this spawn component, = args return PatternParser.get_component_in_ship(lines, ship, component) # Parse Crew selected elif event_type == "crew": crew, = args return PatternParser.get_crew_in_ship(ship, crew) # Parse Ability Available elif event_type == "ability": return PatternParser.parse_ability_availability(line, lines, event, ship) # Parse ship type selected elif event_type == "type": # TODO: Optimize usage player = Parser.get_player_id_list(lines) abs_dict = Parser.get_abilities_dict(lines, player) ship_name = ship.name if ship is None else Parser.get_ship_for_dict(abs_dict) ship_type, = args return get_ship_category(ship_name) == ship_type raise InvalidDescriptor(event)
def check_ships_file(dictionary, abilities): for list in abilities: for dict in list: ships_list = Parser.get_ship_for_dict(dict) print(ships_list) for ship, intvar in dictionary.items(): if intvar.get() == 1: print("Required: ", ship) if variables.settings["gui"]["faction"] == "empire": pass elif variables.settings["gui"]["faction"] == "republic": ships_list = [abls.rep_ships[name] for name in ships_list] else: raise ValueError("faction found not valid") if ship in ships_list: return True return False
def _select_date(self, date: datetime): """Callback for Calendar widget selection command""" self.clear_data_widgets() self._tree.delete(*self._tree.get_children("")) if date not in self._dates: return self._files: List[str] = self._dates[date] for f, file in enumerate(sorted(self._files)): name = Parser.get_player_name_raw(file) cube, matches, spawns = Parser.split_combatlog_file(file) for m, match in enumerate(sorted(matches[::2])): match = datetime.strftime(match, "%H:%M, {}".format(name)) match_iid = "{},{}".format(f, m) self._tree.insert("", tk.END, text=match, iid=match_iid) for s, spawn in enumerate(sorted(spawns[m])): spawn = datetime.strftime(spawn, "%H:%M:%S") player_list: List[str] = Parser.get_player_id_list(cube[m][s]) abs_dict: Dict[str: int] = Parser.get_abilities_dict(cube[m][s], player_list) ships: List[str] = Parser.get_ship_for_dict(abs_dict) ship = self.format_ships_list(ships) spawn = "{}{}".format(spawn, ship) spawn_iid = "{},{},{}".format(f, m, s) self._tree.insert(match_iid, tk.END, text=spawn, iid=spawn_iid)