parent $physical
object $exit
var $exit source $void
var $exit dest $void
var $exit lock <$true_lock_class, []>
var $root child_index 388
var $root owners [$exit]
var $root fertile 1
var $has_verbs verbs #[["@lock %this with *", ['lock_vrb, 'remote]]]
var $root inited 1
var $root owned [$exit]
var $gendered gender $gender_neuter
var $described prose #[]
var $root manager $exit
var $root writable [$exit]
var $root readable ['parameters, 'methods, 'code]
var $root dbref 'exit
var $named name ['uniq, "Generic Exit"]
var $named name_aliases []
method init_exit
.perms($root, caller());
source = $places.place('default);
dest = source;
source.add_exit(0, 0);
lock = $true_lock_class.new();
.
method uninit_exit
.perms(caller(), $root);
(| source.del_exit() |);
(| source.did_detach() |);
(| dest.did_detach() |);
source = 0;
dest = 0;
lock = 0;
.
method environment
return [this()] + setremove(source.environment(), this());
.
method invoke
var actor, here;
if (!valid(.dest()))
$parse.tell_error((((.name()) + " has an invalid destination, notify the manager (") + ((.manager()).namef('ref))) + ").", "", actor);
if (lock.try(sender()))
sender().move_to(.dest());
else
sender().tell((.name()) + " is locked.");
// we could do this as an event, but in leiu of simplicity and speed
// this is better.
(.source()).exit_departure(sender());
(.dest()).exit_arrival(sender());
// Send an event for everybody else
($movement_event.new(sender(), .source(), .dest())).dispatch();
.
method lock_vrb
arg cmd, this, prep, str;
.perms(sender());
catch ~objnf, ~parse {
lock = $lock.parse(str, sender());
sender().tell("Locked.");
} with handler {
switch (error()) {
case ~objnf:
sender().tell("Object not found in lock string.");
case ~parse:
sender().tell("Invalid lock string.");
}
}
.
method attach
disallow_overrides;
arg source_place, dest_place, radial, azimuth;
// radial/azimuth coordinates.
(> .perms(sender()) <);
(> $places.is_place(source_place) <);
(> $places.is_place(dest_place) <);
if (source_place == source)
return;
(> source_place.will_attach('source, sender()) <);
(> dest_place.will_attach('dest, sender()) <);
(| source.del_exit() |);
source = source_place;
dest = dest_place;
source_place.add_exit(radial, azimuth);
(| source_place.did_attach('source, sender()) |);
(| dest_place.did_attach('dest, sender()) |);
.
method dest
return dest;
.
method source
return source;
.
method place_destroyed
arg place;
.perms(caller(), $place);
.destroy();
.
method description
arg actor, [exclude];
var out, prose;
prose = .prose('long, "");
if (!prose)
return (| (.dest()).description(actor, @exclude) |) || (.prose('short));
return [.name('def), @.prose('short)];
.
method short_description
arg actor, [exclude];
var prose;
return .long_description(actor, @exclude);
.
method long_description
arg actor, [exclude];
var prose;
prose = .prose('literal);
if (!(| prose['long] |))
return (| (.dest()).short_description(sender(), sender()) |) || (> pass(actor, @exclude) <);
return (> pass(actor, @exclude) <);
.