parent $physical object $exit var $exit source $void var $exit dest $void var $exit lock <$true_lock_class, []> var $root child_index 119 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."); // Send an event (.source()).announce_event($movement_event.new('departure, sender())); (.dest()).announce_event($movement_event.new('arrival, sender())); . 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(); .