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) <); .