<html> <head> <link href="../tutorial.css" rel="stylesheet" type="text/css"> </head> <body> <div class="header"> The NakedMud Tutorial :: Room Commands </div> <!-- content starts here --> <div class="content-wrap"><div class="content-body-wrap"><div class="content"> <div class="head">Room Comands</div> <div class="info"> NakedMud has a global command handler. When a new command is added to the game, it is entered into the global command handler. However, each individual room also has a local command handler. Rooms can have their own unique commands added. In fact, when a room has a unique exit, all that happens is a command is added to the room that allows movement between multiple rooms. Commands are functions that take three arguments: a character, the command name, and the argument supplied to the command: <pre class="code"> def cmd_touch(ch, cmd, arg): try: obj, = parse_args(ch, True, cmd, arg, "[the] obj.room") except: return # are we touching the activator device? if obj.isinstance("mage_teleport_orb"): try: map = {"mage_guild_entrance@moonhaven" : "magic_tower01@moonhaven", "magic_tower01@moonhaven" : "mage_guild_entrance@moonhaven"} dest = map[ch.room.proto] except: # no destination (or source) was found message(ch, obj, None, None, False, "to_char", "You reach out and touch $o, but nothing happens.") return ch.send("As you reach out and touch the orb, your mind clouds with a " "blue haze. Once the haze fades, you find your surroundings " "have changed.") ch.room = dest ch.act("look") # or are we just touching any old random object? else: message(ch, obj, None, None, False, "to_char", "You reach out and touch $o, but nothing happens.") me.add_cmd("touch", None, cmd_touch, "player", True) </pre> Rooms, like the mud module, has an add_cmd method that can be called. Commands can be set up and added in the extra code section of a room prototype. The add_cmd method takes five arguments: the command name, and abbrevation (if any, e.g., ne for northeast), the command itself, the player group that can use the command, and a truth value whether or not mobiles can use the command. <p></p> Checks can also be added to room commands: <pre class="code"> def chk_unconscious(ch, cmd): if ch.pos == "unconscious" or ch.pos == "sleeping": return False return True me.add_cmd_check("touch", chk_unconscious) </pre> </div> <!-- content ends here--> </div></div></div> <!-- navigation starts here --> <div class="nav-wrap"><div class="nav"> <iframe src="nav.html" height="100%" width="100%" scrolling=no frameborder=0> </iframe> <!-- navigation ends here --> </div></div> <!--div class="footer">Edit Date: Nov 15, 2008. By Geoff Hollis</div--> </body> </html>