Updated 15th June 1997.
The main drawback with the simple example is that you have to amend the script every time you want to add a new location to teleport to.
This example shows how to store teleport locations as a MUSHclient "variable", so that you can add new locations "on-the-fly". As the variables are stored in the world file they are saved when you save the world, and available next time you use that world.
sub OnTeleport (thename, theoutput, thewildcards)
dim sDestination
dim sRoomList
dim sHelp
dim iSubscript
dim iRoom
sDestination = Trim (thewildcards(1))
' if nothing entered echo possible destinations
if sDestination = "" then
world.note "-------- TELEPORT destinations ----------"
' find list of all variables
sRoomList = world.GetVariableList
if not IsEmpty (sRoomList) then
' loop through each variable, and add to help if it starts with "teleport_"
for iSubscript = lbound (sRoomList) to ubound (sRoomList)
if Left (sRoomList (iSubscript), 9) = "teleport_" then
if sHelp <> "" then
sHelp = sHelp & ", "
end if
sHelp = sHelp & Mid (sRoomList (iSubscript), 10)
end if ' variable starts with "teleport_"
next ' loop through sRoomList
end if
' if no destinations found, tell them
if sHelp = "" then
sHelp = "<no rooms in teleport list>"
end if ' no destinations found in list
world.note sHelp
exit sub
end if ' no destination supplied
' get contents of the destination variable
iRoom = world.GetVariable ("teleport_" & lCase (sDestination))
' if not found, or invalid name, that isn't in the list
if IsEmpty (iRoom) or IsNull (iRoom) then
world.note "******** Destination " & sDestination & " unknown *********"
exit sub
end if
world.note "------> Teleporting to " & sDestination
world.send "@teleport #" & cstr (iRoom)
end sub
The resulting alias will look like this:
^teleport(.*)$
so MUSHclient knows to send the rest of what you type after the word "teleport"
to the script subroutine.
add_teleport RocketShip 3321The subroutine uses two wildcards to allow you to type in two words separated by a space. It does a couple of checks (eg. that the second word is a number) and then calls "world.setvariable" to add it to the variables list. The subroutine looks like this:
sub OnAddTeleport (thename, theoutput, thewildcards)
dim sDestination
dim iRoom
dim iStatus
dim sCurrentLocation
' wildcard one is the destination
sDestination = Trim (thewildcards (1))
' if nothing entered tell them command syntax
if sDestination = "" then
world.note "Syntax: add_teleport name dbref"
world.note " eg. add_teleport LandingBay 4421"
exit sub
end if
' wildcard 2 is the room to go to
iRoom= Trim (thewildcards (2))
if not IsNumeric (iRoom) then
world.note "Room to teleport to must be a number, you entered: " & iRoom
exit sub
end if
' add room and destination location to variable list
iStatus = world.SetVariable ("teleport_" & sDestination, iRoom)
if iStatus <> 0 then
world.note "Room name must be alphabetic, you entered: " & sDestination
exit sub
end if
world.note "Teleport location " & sDestination & "(#" _
& iRoom & ") added to teleport list"
end sub
You will now need to add an alias which matches on "add_teleport" with a script subroutine of "OnAddTeleport", using a very similar method to the one for adding the "teleport" alias.
In this case, however, you need to match on:
add_teleport * *
The first wildcard is the room name, the second wildcard is the room number.
First type in:
add_teleport bazaar 34
And then type in:
teleport bazaar
Here is what it looked like for me...
If you get syntax errors, just edit the script file and correct them. If you are using Window NT, MUSHclient will automatically detect that you have changed the script file and offer to reprocess it. If you are using Windows 95, just use the "reload script file" function (Shift+Ctrl+R).
Comments to Gammon Software support
Page updated on Tuesday, 6 December 2005