#!/usr/bin/env python import time from mudserver import MudServer import commands as cmd players = {} waitlist = {} def cmd_help(id, _params): cmd.help(mud, id) def cmd_go(id, params): cmd.go(mud, id, players, rooms, params) def cmd_say(id, params): cmd.say(mud, id, players, params) def cmd_look(id, params): cmd.look(mud, id, players, rooms, params) def cmd_open(id, params): cmd.open(mud, id, players, rooms, params) def cmd_whelp(id, params): if params: print("Not implemented") else: mud.send_message(id, ''' You can see a full list of available commands typing: help commands You can log in to your character typing: connect ''') def cmd_wconnect(id, params): params_list = params.split() if len(params_list) != 2: mud.send_message(id, "Invalid params") return if len(params_list) != 2: mud.send_message(id, "Invalid params") for name, pl in characters.items(): if params_list[0] != name: continue if params_list[1] != pl["password"]: mud.send_message(id, "Wrong password") continue for pid, pl in players.items(): if name in pl["name"]: mud.send_message(id, "That character is already connected") break else: add_player( id, name, pl["species"], pl["description"]) waitlist.pop(id) mud.send_message(id, "Connected as {} the {}." .format(players[id]["name"], players[id]["species"])) mud.send_message(id, rooms[players[id]["room"]]["description"]) break else: found = False for name, pl in characters.items(): if params_list[0] == name: found = True if not found: mud.send_message( id, "Character '{}' not found" .format(params_list[0])) def cmd_build(id, params): cmd.build(mud, id, players, rooms, params) def cmd_me(id, params): cmd.me(mud, id, players, rooms, params) def cmd_unknown(id, command): cmd.unknown(mud, command, id) commands = { "help": cmd_help, "look": cmd_look, "go": cmd_go, "say": cmd_say, "open": cmd_open, "build": cmd_build, "me": cmd_me } waitlist_commands = { "help": cmd_whelp, "connect": cmd_wconnect } rooms = { "Lobby": { "description": "You are in the Lobby", "exits": {"north": "Bar"}, "owner": "Dummy1", "builders": ["Dummy1"] }, "Bar": { "description": "You are in the Bar", "exits": {"outside": "Lobby"}, "owner": "Dummy1", "builders": ["Dummy1"] } } characters = { "Dummy1": { "password": "Dummy1", "species": "dummy", "description": "A practice dummy" }, "Dummy2": { "password": "Dummy2", "species": "dummy", "description": "A practice dummy" }, "Dummy3": { "password": "Dummy3", "species": "dummy", "description": "A practice dummy" }, "Dummy4": { "password": "Dummy4", "species": "dummy", "description": "A practice dummy" }, "Dummy5": { "password": "Dummy5", "species": "dummy", "description": "A practice dummy" }, "Dummy6": { "password": "Dummy6", "species": "dummy", "description": "A practice dummy" }, "Dummy7": { "password": "Dummy7", "species": "dummy", "description": "A practice dummy" }, "Dummy8": { "password": "Dummy8", "species": "dummy", "description": "A practice dummy" }, "Dummy9": { "password": "Dummy9", "species": "dummy", "description": "A practice dummy" } } mud = MudServer() def add_player(id, name, species, description, room="Lobby"): players[id] = { "name": name, "species": species, "description": description, "room": room } print("{} connected as '{}'".format(id, name)) def update(): # Update the server time.sleep(0.2) mud.update() # Add new connected players to the waitlist for id in mud.get_new_players(): waitlist[id] = id mud.send_message(id, ''' Welcome to the UNIX.dog MUCK!! Type help for a list of commands ''') print("{} joined the waitlist".format(id)) # Remove disconected players from the list for id in mud.get_disconnected_players(): if id not in players: continue print("{}('{}') disconnected".format(id, players[id]["name"])) for pid, pl in players.items(): mud.send_message(pid, "{} quit the game" .format(players[id]["name"])) del players[id] def handle_input(): for id, command, params in mud.get_commands(): execute = None if id in waitlist: execute = waitlist_commands.get(command, None) elif id in players: execute = commands.get(command, None) if execute: execute(id, params) else: cmd_unknown(id, command) while True: update() handle_input()