prev | toc | next

2.3 Overview: Exits and Locks

An `exit' is a link between two objects on a MUCK. When the two objects are rooms, the exit creates a virtual `door' between them. When the destination is a program, the exit serves as a user-created command. Other combinations are possible. Exits are also called `actions'. Use of exits (as well as objects of other types) is controlled by `locks': an expression that evaluates as either `true' (in which case the exit/object can be used) or `false' (in which case it cannot). An exit is characterized by having a starting point (an object to which it is `attached') and a destination point (an object to which it is `linked').


Exits are created with either the @open or @action command. Both create an exit (an object with type flag E), but the syntax and defaults are slightly different.

The basic syntax of the @open command is @open <exit name>. An exit created in this way will be attached to (i.e., start from) the room in which one issues the command, and it will not be linked to anything (it won't lead anywhere). The exit can be linked to another object on the MUCK with the @link command, syntax @link <exit name> = <destination>. Since the destination will usually be somewhere else on the MUCK, it will need to be specified by dbref rather than name.

Hooking up an exit in two steps...
> @open out
  Exit opened with number #1766.
> @find hallway
  Ansley Inn, Hallway(#198R)
  1 objects found.
  ***End of List***
> @link out = #98
  Linked to Ansley Inn, Hallway(#98R)

Hooking up an exit in one step...
> @open out = #98
  Exit opened with #1766.
  Linked to Ansley Inn, Hallway(#198R)

An exit does not have to be attached to a room, however: an exit can be attached to anything except a program or another exit. The @action command (abbreviated as @act) creates an action/exit attached to an object specified at the time of creation:

> @act myplace = me
  Action created with number #1236 and attached.
> @link myplace = #1234
  Linked to Cashmere's Den(#1234).

Many MUCKs have a soft-coded @action command, that allows you to specify both the source and destination at the time of the exit's creation:

> @act myplace = me,#1234
  Action created with number #1236 and attached.
  Trying to link...
  Linked ot Cashmere's Den(#1234)

The attachments and links of exits can be changed. To relink an exit, issue the @unlink command and then @link the exit to the new destination.

> @unlink myplace
> @link myplace = #1768
  Linked to Cashmere's Bachelor Pad(#5784R).

To change an exit's point of attachment, use the @attach command, syntax @attach <exit> = <new attachment point>

> @attach refrigerator = here
  Action re-attached.

(Obvious-exit programs generally list exits in the order of first-attached to last-attached, or the reverse. Therefore, the order in which exits appear on the list can be changed by using @attach to re-attach exits to the room: the exit will then become the last-attached exit, and move to either the first or last position in the list.)

To reiterate, exits have a source (the object to which they are attached) and a destination (the object to which they are linked). This means that they are one way. This point often causes confusion for new builders: in order to create a `door' between two rooms, one needs to create two exits, one leading in each direction. The following example illustrates this: Cashmere's Bachelor Pad has dbref #5784. From the Bachelor Pad, he will create a Bedroom, and then create two exits that make a door between the Pad and the Bedroom.

> @dig Cashmere's Bedroom
  Cashmere's Bedroom created with #5792.
  Parent set to BD's Environment Room(#4989RA).
> @open Bedroom = #5792
  Exit opened with number #5793.
> bedroom
  Cashmere's Bedroom(#5792)
> @open Out = #5784
  Exit opened with number #5784.
  Linked to Cashmere's Bachelor Pad(#5784R).

Exits linked to things move the the thing to the point of attachment when used (rather than moving the user to the thing).

> @act getpup = me
  Action created with number #4684 and attached.
> @link getpup = $pup
  Linked to Squiggy(#128629XZ).
> getpup
> i
  You are carrying:
  You have 10664 wet cats.

Exits' names can include `aliases', other names that can be used as the exit name. An existing exit can be renamed to include aliases with the @name command, or the aliases can be specified at the time of the exit's creation.

Renaming an existing exit...
> @name bedroom = Bedroom <B>;bedroom;bed;b
  Name set.

Creating an exit with aliases...
> @open Out <O>;out;ou;o
  Exit opened with number #5785.

Each string separated by a ; semi-colon is an alias for the exit. In the `out' example above, typing either out <o>, out, ou, or o would cause the player to use the out exit. Only the first name or alias is shown a list of obvious exits. The above examples follow the common and useful convention of supplying a `full' exit name along with a simple abbreviation in the first alias.

> look
  Cashmere's Bachelor Pad(#5784R)
  Obvious Exits:
        Bedroom <B>      Out <O>

prev | toc | top | next