225 lines
5.3 KiB
Python
Executable File
225 lines
5.3 KiB
Python
Executable File
#!/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 <name> <password>
|
|
''')
|
|
|
|
|
|
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()
|