@q
@program cmd-goto
1 9999 d
i
( cmd-goto Jessy @ FurryMUCK 9/96
This soft-coded version of the 'goto|go' command lets you 'go' through an
exit normally, or go to a room that you control, regardless of its location
or the MUCK's @teleport parameters.
Installation:
Port the program and link a command with a name such as 'goto;go' to it.
The program needs to be set W, for the FORCE primitive used to send
users through exits. It also requires lib-match.
Use:
To use the command to move around normally, simply type 'go <cmd or
exit>'. To go to a remote room you control, type 'goto <room #dbref>'.
Cmd-goto may be freely ported. Please comment any changes.
)
$include $lib/match
: DoHelp ( -- ) ( show help screen )
" " .tell
"cmd-goto" .tell
" " .tell
"This soft-coded version of the 'goto' command lets you 'go' through an "
"exit normally, or go to a room that you control, regardless of its "
"location or the MUCK's @teleport parameters. To use the command to move "
"around normally, simply type 'goto <cmd or exit>'. To go to a room you "
"own, type 'goto <room #dbref>'."
strcat strcat strcat strcat .tell
;
: DoRoom ( d -- ) ( move user to room d, provided that s/he controls it )
dup me @ swap controls not if
pop "Permission denied." .tell exit
then
me @ swap moveto
;
: DoExit ( d -- ) ( force user to use exit d )
name
dup ";" instr dup if
1 - strcut pop
else
pop
then
me @ swap force
;
: main
"me" match me !
dup not if
exit
then
strip dup "#*" smatch if
dup "#help" swap stringpfx if
DoHelp exit
then
dup 1 strcut swap pop atoi dbref
then
dup string? if
match
dup #-1 dbcmp if
"huh_mesg" sysparm
me @ swap notify exit
then
dup #-2 dbcmp if
"I don't know which one you mean!"
me @ swap notify exit
then
dup #-3 dbcmp if
pop me @ getlink
then
then
dup room? if
DoRoom exit
then
dup exit? if
DoExit exit
then
"Bad destination." .tell
;
.
c
q