@q @program goback.muf 1 9999 d i ( goback.muf v1.0 Jessy @ FurryMUCK 11/99 Actions linked to this program will return you to the last room you were in, provided that, 1, it is still a valid destination, and 2, it is not a room specifically excluded from this program with the #exclude option. A typical use for this program would be to allow players to return to an IC location from an OOC area. For example, if a Nexus were in an OOC environment room, one could create a 'goback' action attached to the OOC environment room, go to the OOC environment room, and #exclude it. The result would be that when people enter the OOC area, their last IC location is recorded. Because the OOC area is #excluded, this location would not be over-written as they move around in the OOC area. If they type 'goback' while in the OOC area, they would be returned to their last IC location. The 'goback' command would not be recognized in IC rooms. INSTALLATION: Set the program Link_OK and Wizard so that it can move with !Jump_OK players and destinations. Link either a global or area-specific command to the program. Set the _depart prop on room #0 to trigger the program: @propset #0=dbref:_depart/goback:<#dbref of program> Goback.muf may be freely ported. Please comment any changes. ) $define Tell me @ swap notify $enddef : DoHelp ( -- ) (* show help screen *) " " Tell prog name " (#" strcat prog intostr strcat ")" strcat Tell " " Tell "This command sends you back to the last room you were in, provided " "(1) it is still a valid destination, and (2) it is not a room " "specifically excluded from this program with the #exclude option." strcat strcat Tell " " Tell " $command .............. Return to last valid room" command @ "$command" subst Tell " $command #exclude ..... Exclude current room and any rooms " command @ "$command" subst Tell " contained by it from this program." Tell " You must control the room." " $command #include ..... Include current room and any rooms " command @ "$command" subst Tell " contained by it for this program." Tell " You must control the room." Tell " " Tell ; : DoSendTo ( d -- ) (* move user to room d *) me @ swap moveto trig "_/odr" getpropstr if me @ location me @ me @ name " " strcat trig "_/odr" getpropstr strcat notify_except then ; : main dup if "#help" over stringpfx if (* show help? *) DoHelp exit then "#exclude" over stringpfx if (* exclude room? *) me @ loc @ controls not if "Permission denied." Tell exit then loc @ "_gbignore" "yes" setprop ">> $command will now ignore this room " command @ "$command" subst "and any rooms contained in it" strcat Tell exit then "#include" over stringpfx if (* include room? *) me @ loc @ controls not if "Permission denied." Tell exit then loc @ "_gbignore" "yes" setprop ">> $command will record this room " command @ "$command" subst "and any rooms contained in it" strcat Tell exit then dup "Depart" smatch if (* movement triggered... record location *) loc @ "_gbignore" envpropstr pop not if (* unless _gbignore *) pop loc @ room? not if exit then me @ "@/goback" loc @ setprop then then else (* user is trying to goback... *) me @ "@/goback" getprop dup if (* get location and send *) dup ok? if dup room? if DoSendTo then else ">> Sorry, the room I'm told to return you to no longer exists." Tell pop then else trig "_default" getprop dup if DoSendTo else pop then then then ; . c q