def manage_packages(self): def add(): menu = Menu([4325]) for p in get_packages(): if not p.is_active: menu.append([p.name], (p.add, voice)) menu.append([4118], None) menu.run() def deactivate(): menu = Menu([4326]) for p in get_packages(): if p.is_active: menu.append([p.name], p.deactivate) menu.append([4118], None) menu.run() def update(): menu = Menu([4327]) for p in get_packages(): if p.is_active: menu.append([p.name], (p.update, voice)) menu.append([4118], None) menu.run() menu = Menu([4324], [ ([4325], add), ([4326], deactivate), ([4327], update), ([4076], END_LOOP), ]) menu.loop() reload_all()
def mods_menu(): mods_menu = Menu([4341]) mods_menu.append([0], (set_and_launch_mod, "")) for mod in res.available_mods(): mods_menu.append([mod], (set_and_launch_mod, mod)) mods_menu.append([4118], END_LOOP) mods_menu.run() return END_LOOP
def make_menu(self): menu = Menu() for g in self.invitations: menu.append([4053] + g[1:], (self.server.write_line, "register %s" % g[0])) menu.append([4055], self._get_creation_submenu()) menu.append([4340], self._get_creation_submenu("public")) menu.append([4041], (self.server.write_line, "quit")) return menu
def mods_menu(): mods_menu = Menu(mp.MODS) mods_menu.append([0], (set_and_launch_mod, "")) for mod in res.available_mods(): mods_menu.append([mod], (set_and_launch_mod, mod)) mods_menu.append(mp.BACK, CLOSE_MENU) mods_menu.run() return CLOSE_MENU
def soundpacks_menu(): soundpacks_menu = Menu([4342]) soundpacks_menu.append([0], (set_and_launch_soundpack, "")) for soundpack in res.available_soundpacks(): soundpacks_menu.append([soundpack], (set_and_launch_soundpack, soundpack)) soundpacks_menu.append([4118], END_LOOP) soundpacks_menu.run() return END_LOOP
def soundpacks_menu(): soundpacks_menu = Menu(mp.SOUNDPACKS) soundpacks_menu.append(mp.NOTHING, (set_and_launch_soundpack, "")) for soundpack in res.available_soundpacks(): soundpacks_menu.append([soundpack], (set_and_launch_soundpack, soundpack)) soundpacks_menu.append(mp.BACK, CLOSE_MENU) soundpacks_menu.run() return CLOSE_MENU
def multiplayer_menu(): if config.login == "player": voice.alert(mp.ENTER_NEW_LOGIN) modify_login() menu = Menu(mp.MAKE_A_SELECTION, [ (mp.CHOOSE_SERVER_IN_LIST, choose_server_ip_in_a_list), (mp.ENTER_SERVER_IP, enter_server_ip), (mp.CANCEL, None), ]) menu.run()
def make_menu(self): menu = Menu() for g in self.invitations: menu.append(mp.ACCEPT_INVITATION_FROM + g[1:], (self.server.write_line, "register %s" % g[0])) menu.append(mp.START_A_GAME_ON, self._get_creation_submenu()) menu.append(mp.START_A_PUBLIC_GAME_ON, self._get_creation_submenu("public")) menu.append(mp.QUIT2, (self.server.write_line, "quit")) return menu
def choose_server_ip_in_a_list(self): servers_list = None try: f = urllib.urlopen(SERVERS_LIST_URL) if f.read(len(SERVERS_LIST_HEADER)) == SERVERS_LIST_HEADER: servers_list = f.readlines() except: pass if servers_list is None: voice.alert([1029]) # hostile sound warning("couldn't get the servers list from the metaserver" " => using the default servers list") servers_list = DEFAULT_SERVERS nb = 0 menu = Menu() for s in servers_list: try: ip, version, login, port = s.split()[1:] # ignore the first parameter (time) except: warning("line not recognized from the metaserver: %s", s) continue nb += 1 if version == VERSION: menu.append([login, 4073, login], (connect_and_play, ip, port)) menu.title = nb2msg(len(menu.choices)) + [4078] + nb2msg(nb) + [4079] menu.append([4075, 4076], None) menu.run()
def multiplayer_menu(self): revision_checker.start_if_needed() if config.login == "player": voice.alert([4235]) # type your new login self.modify_login() menu = Menu([4030], [ ([4119], self.choose_server_ip_in_a_list), ([4120], self.enter_server_ip), ([4048], None), ]) menu.run()
def soundpacks_menu(): soundpacks_menu = Menu(["Soundpacks"]) soundpacks_menu.append([0], (set_and_launch_soundpack, "")) for soundpack in res.available_soundpacks(): soundpacks_menu.append([soundpack], (set_and_launch_soundpack, soundpack)) soundpacks_menu.append([4118], END_LOOP) soundpacks_menu.run() return END_LOOP
def mods_menu(): mods_menu = Menu(["Mods"]) mods_menu.append([0], (set_and_launch_mod, "")) for mod in res.available_mods(): mods_menu.append([mod], (set_and_launch_mod, mod)) mods_menu.append([4118], END_LOOP) mods_menu.run() return END_LOOP
def build_training_menu_after_map(self): menu = Menu() if len(self.players) < self.map.nb_players_max: menu.append([4058, 4258], (self.training_menu_invite, "easy")) menu.append([4058, 4257], (self.training_menu_invite, "aggressive")) if len(self.players) >= self.map.nb_players_min: menu.append([4059], self.start_training_game) for pn, (p, pr) in enumerate(zip(self.players, self.factions)): self._add_faction_menu(menu, pn, p, pr) menu.append([4048, 4060], END_LOOP) return menu
def update(): menu = Menu([4327]) for p in get_packages(): if p.is_active: menu.append([p.name], (p.update, voice)) menu.append([4118], None) menu.run()
def deactivate(): menu = Menu([4326]) for p in get_packages(): if p.is_active: menu.append([p.name], p.deactivate) menu.append([4118], None) menu.run()
def add(): menu = Menu([4325]) for p in get_packages(): if not p.is_active: menu.append([p.name], (p.add, voice)) menu.append([4118], None) menu.run()
def replay_menu(self): menu = Menu([4315]) for n in sorted(os.listdir(REPLAYS_PATH), reverse=True): if n.endswith(".txt"): menu.append([time.strftime("%c", time.localtime(int(n[:-4])))], (self.replay, n)) menu.append([4041], None) menu.run()
def replay_menu(): menu = Menu(mp.OBSERVE_RECORDED_GAME) for n in sorted(os.listdir(REPLAYS_PATH), reverse=True): if n.endswith(".txt"): menu.append([time.strftime("%c", time.localtime(int(n[:-4])))], (replay, n)) menu.append(mp.QUIT2, None) menu.run()
def run(self): if self.mods is not None: res.set_mods(self.mods) try: self.load_resources() menu = Menu(self.title, []) if len(self._available_chapters()) > 1: ch = self._available_chapters()[-1] menu.append(mp.CONTINUE + ch.title, ch) for ch in self._available_chapters(): prefix = nb2msg(ch.id) if ch.id > 0 else [] menu.append(prefix + ch.title, ch) menu.append(mp.BACK, None) menu.run() finally: self.unload_resources()
def single_player_menu(): Menu( mp.MAKE_A_SELECTION, [(c.title, c) for c in campaigns()] + [ (mp.START_A_GAME_ON, TrainingMenu().run), # (mp.RESTORE, restore_game), (mp.BACK, CLOSE_MENU), ]).loop()
def options_menu(): Menu(mp.OPTIONS_MENU, [ (mp.MODIFY_LOGIN, modify_login), (mp.MODS, mods_menu), (mp.SOUNDPACKS, soundpacks_menu), (mp.OPEN_USER_FOLDER, open_user_folder), (mp.BACK, CLOSE_MENU), ]).loop()
def main(self): single_player_menu = Menu([4030], [(c.title, c) for c in campaigns()] + [ ([4055], self.training_menu), ([4113], self.restore_game), ([4118], END_LOOP), ]) server_menu = Menu([4043], [ ([4044, 4045], (start_server_and_connect, "admin_only")), ([4046, 4047], (start_server_and_connect, "")), ([4121, 4122], (start_server_and_connect, "admin_only no_metaserver")), ([4048], None), ]) options_menu = Menu([4086], [ ([4087], self.modify_login), ([4319], self.modify_default_mods), [[4323], self.manage_packages], ([4118], END_LOOP), ]) main_menu = Menu([4029, 4030], [ [[4031, 4032], single_player_menu.loop], [[4033, 4034], self.multiplayer_menu], [[4035, 4036], server_menu], [[4315], self.replay_menu], [[4037, 4038], options_menu.loop], [[4041, 4042], END_LOOP], ]) if "connect_localhost" in sys.argv: connect_and_play() else: main_menu.loop()
def make_menu(self): menu = Menu() for g in self.invitations: menu.append([4053] + g[1:], (self.server.write_line, "register %s" % g[0])) menu.append([4055], self._get_creation_submenu()) menu.append([4041], (self.server.write_line, "quit")) return menu
def run(self): if self.mods is not None: res.set_mods(self.mods) try: self.load_resources() menu = Menu(self.title, []) if len(self._available_chapters()) > 1: ch = self._available_chapters()[-1] menu.append([4011] + ch.title, ch) # "continue" for ch in self._available_chapters(): prefix = nb2msg(ch.id) if ch.id > 0 else [] menu.append(prefix + ch.title, ch) # menu.append([4113], "restore") menu.append([4118], None) # "cancel" menu.run() finally: self.unload_resources()
def select_next_mod(parent): def add_mod(mod): if mod not in mods: mods.append(mod) parent.title = mods menu = Menu([4320] + mods) for mod in available_mods(): menu.append([mod], (add_mod, mod)) menu.append([4118], None) menu.run()
def server_menu(): Menu(mp.WHAT_KIND_OF_SERVER, [ (mp.SIMPLE_SERVER, (start_server_and_connect, "admin_only"), mp.SIMPLE_SERVER_EXPLANATION), (mp.PUBLIC_SERVER, (start_server_and_connect, ""), mp.PUBLIC_SERVER_EXPLANATION), (mp.PRIVATE_SERVER, (start_server_and_connect, "admin_only no_metaserver"), mp.PRIVATE_SERVER_EXPLANATION), (mp.CANCEL, None), ]).run()
def _create_game(self, args): n, title = args Menu([4055] + title, [ ([4103], (self.server.write_line, "create %s 0.5" % n)), ([4104], (self.server.write_line, "create %s 1.0" % n)), ([4105] + nb2msg(2), (self.server.write_line, "create %s 2.0" % n)), ([4105] + nb2msg(4), (self.server.write_line, "create %s 4.0" % n)), ([4048], None), ], default_choice_index=1).run() # XXX not a ServerMenu
def modify_default_mods(self): def available_mods(): result = [] for path in get_all_packages_paths(): mods_path = os.path.join(path, "mods") for mod in os.listdir(mods_path): if os.path.isdir(os.path.join(mods_path, mod)) \ and mod not in result and mod not in mods: result.append(mod) return result def select_next_mod(parent): def add_mod(mod): if mod not in mods: mods.append(mod) parent.title = mods menu = Menu([4320] + mods) for mod in available_mods(): menu.append([mod], (add_mod, mod)) menu.append([4118], None) menu.run() def save(): previous_mods = config.mods config.config_mods = ",".join(mods) config.mods = config.config_mods config.save() if config.mods != previous_mods: reload_all() return END_LOOP mods = [] menu = Menu([4321]) # the list is empty menu.append([4320], (select_next_mod, menu)) menu.append([4096], save) menu.append([4098], END_LOOP) menu.loop()
def main_menu(): import version return Menu([ "SoundRTS %s %s %s," % (version.VERSION, res.mods, res.soundpacks), 4030 ], [ [[4031, 4032], single_player_menu.loop], [[4033, 4034], self.multiplayer_menu], [[4035, 4036], server_menu], [[4315], self.replay_menu], [[4037, 4038], options_menu.loop], [[4337], launch_manual], [[4041, 4042], END_LOOP], ])
def main_menu(): Menu(["SoundRTS %s %s %s," % (VERSION, res.mods, res.soundpacks)] + mp.MAKE_A_SELECTION, [ [ mp.SINGLE_PLAYER, single_player_menu, mp.SINGLE_PLAYER_EXPLANATION ], [mp.MULTIPLAYER2, multiplayer_menu, mp.MULTIPLAYER2_EXPLANATION], [mp.SERVER, server_menu, mp.SERVER_EXPLANATION], [mp.OBSERVE_RECORDED_GAME, replay_menu], [mp.OPTIONS, options_menu, mp.OPTIONS_EXPLANATION], [mp.DOCUMENTATION, launch_manual], [mp.QUIT2, CLOSE_MENU, mp.QUIT2_EXPLANATION], ]).loop()
def _create_game(self, args): n, title, is_public = args Menu(title, [([4103], (self.server.write_line, "create %s 0.5 %s" % (n, is_public))), ([4104], (self.server.write_line, "create %s 1.0 %s" % (n, is_public))), ([4105] + nb2msg(2), (self.server.write_line, "create %s 2.0 %s" % (n, is_public))), ([4105] + nb2msg(4), (self.server.write_line, "create %s 4.0 %s" % (n, is_public))), ([4048], None), ], default_choice_index=1).run() # XXX not a ServerMenu
def choose_server_ip_in_a_list(): servers = servers_list(voice) total = 0 compatible = 0 menu = Menu() for s in servers: try: _, ip, version, login, port = s.split() except ValueError: warning("line not recognized from the metaserver: %s", s) else: total += 1 if version == VERSION: compatible += 1 menu.append([login], (connect_and_play, ip, port), mp.SERVER_HOSTED_BY + [login]) menu.title = nb2msg(compatible) + mp.SERVERS_ON + nb2msg( total) + mp.ARE_COMPATIBLE menu.append(mp.CANCEL2, None, mp.GO_BACK_TO_PREVIOUS_MENU) menu.run()
def _get_speed_submenu(self, args): n, title, is_public = args def create_with_speed(speed): s = "create %s %s %s" % (n, speed, is_public) return (self.server.write_line, s) Menu(title, [ (mp.SET_SPEED_TO_SLOW, create_with_speed("0.5")), (mp.SET_SPEED_TO_NORMAL, create_with_speed("1.0")), (mp.SET_SPEED_TO_FAST + nb2msg(2), create_with_speed("2.0")), (mp.SET_SPEED_TO_FAST + nb2msg(4), create_with_speed("4.0")), (mp.CANCEL, None), ], default_choice_index=1).run()
def choose_server_ip_in_a_list(): servers = servers_list(voice) total = 0 compatible = 0 menu = Menu() for s in servers: try: _, ip, version, login, port = s.split() except ValueError: warning("line not recognized from the metaserver: %s", s) else: total += 1 if version == VERSION: compatible += 1 menu.append([login], (connect_and_play, ip, port), mp.SERVER_HOSTED_BY + [login]) menu.title = nb2msg(compatible) + mp.SERVERS_ON + nb2msg(total) + mp.ARE_COMPATIBLE menu.append(mp.CANCEL2, None, mp.GO_BACK_TO_PREVIOUS_MENU) menu.run()
def _defeat(self): menu = Menu([], []) menu.append([4266], self) # restart menu.append([4009], None) # cancel menu.run()
def _victory(self): menu = Menu([], []) menu.append([4011], self._get_next()) # continue menu.append([4009], None) # cancel menu.run()
def training_menu(self): menu = Menu([4055], remember="mapmenu") for m in res.worlds_multi(): menu.append(m.title, (self.training_menu_after_map, m)) menu.append([4041], None) menu.run()
def _build_players_menu(self): menu = Menu() if len(self._players) < self._map.nb_players_max: menu.append(mp.INVITE + mp.QUIET_COMPUTER, (self._add_ai, "easy")) menu.append(mp.INVITE + mp.AGGRESSIVE_COMPUTER, (self._add_ai, "aggressive")) menu.append(mp.INVITE + mp.AGGRESSIVE_COMPUTER + nb2msg(2), (self._add_ai, "ai2")) if len(self._players) >= self._map.nb_players_min: menu.append(mp.START, self._run_game) if len(self._map.factions) > 1: self._add_faction_menus(menu) menu.append(mp.CANCEL, CLOSE_MENU, mp.CANCEL_THIS_GAME) return menu
def _get_creation_submenu(self): menu = Menu([4055], remember="mapmenu") for n, m in enumerate(self.maps): menu.append(m, (self._create_game, (n, m))) menu.append([4048], None) return menu
def make_menu(self): menu = Menu(self.map.title) self._add_faction_menu(menu, *self._get_player()) menu.append([4041, 4061], (self.server.write_line, "unregister")) return menu
def make_menu(self): menu = Menu(self.map.title) if len(self.registered_players) < self.map.nb_players_max: for p in self.available_players: menu.append([4058, p], (self.server.write_line, "invite %s" % p)) menu.append([4058, 4258], (self.server.write_line, "invite_easy")) menu.append([4058, 4257], (self.server.write_line, "invite_aggressive")) if len(self.registered_players) >= self.map.nb_players_min: menu.append([4059], (self.server.write_line, "start")) for pn, (p, pa, pr) in enumerate(self.registered_players): pa = int(pa) for a in range(1, len(self.registered_players) + 1): if a != pa: menu.append([4284, p, 4285] + nb2msg(a), (self.server.write_line, "move_to_alliance %s %s" % (pn, a))) if p in (self.server.login, "ai"): self._add_faction_menu(menu, pn, p, pr) menu.append([4048, 4060], (self.server.write_line, "cancel_game")) return menu
def __init__(self, server): self.server = server Menu.__init__(self)
def run(self): menu = Menu(mp.START_A_GAME_ON, remember="mapmenu") for m in worlds_multi(): menu.append(m.title, (self._open_players_menu, m)) menu.append(mp.QUIT2, None) menu.run()