Generic exit This object defines the behavior of exits. Public methods: go_through() Attempt to go through exit. Protected methods: verb_changed_in_leaf() Notification of verb changes Exit protocol methods: attach(place) Attach exit to a new source link(place) Link exit to a new place Verbs: lock_verb() Set lock. parent vr object exit var exit source 0 var exit dest 0 var exit lock 0 method init arg ancestors; (> pass(ancestors) <); if (definer() in ancestors) { source = $sys.exit_starting_room(); dest = source; source.add_exit(); lock = $true_lock_class.new(); } . eval .initialize(); .set_name("Generic exit"); .add_verb("@lock %this with *", 'lock_verb, 'remote); .set_fertile(1); . method show var output, i; output = pass(); output = output + ["Exit variables:"]; for i in (definer().parameters()) output = output + [" " + tostr(i) + ": " + toliteral(get_var(i))]; return output; . method verb_changed_in_leaf (> pass() <); source.verb_changed_inside(); . method go_through if (lock.try(sender())) sender().move(dest); else sender().tell("You can't go that way."); . method lock_verb arg dummy1, dummy2, dummy3, str; if (!.is_owned_by(sender())) sender().tell("Permission denied."); 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 place; if (!.is_owned_by(sender())) throw(~perm, "Sender does not own exit."); if (!place.follows('room)) throw(~type, "Place doesn't follow room protocol."); if (place == source) return; (> place.will_attach(sender()) <); source.remove_exit(); source = place; place.add_exit(); (| place.did_attach(sender()) |); . method link disallow_overrides; arg place; if (!.is_owned_by(sender())) throw(~perm, "Sender does not own exit."); if (!place.follows('room)) throw(~type, "Place doesn't follow room protocol."); (> place.will_link(sender()) <); dest = place; (| place.did_link(sender()) |); .