# Example of coding script routines for MUSHclient in Python
# ----------------------------------------------------------
# Error codes returned by various functions
# ----------------------------------------------------------
eOK = 0 # No error
eWorldOpen = 30001 # The world is already open
eWorldClosed = 30002 # The world is closed, this action cannot be performed
eNoNameSpecified = 30003 # No name has been specified where one is required
eCannotPlaySound = 30004 # The sound file could not be played
eTriggerNotFound = 30005 # The specified trigger name does not exist
eTriggerAlreadyExists = 30006 # Attempt to add a trigger that already exists
eTriggerCannotBeEmpty = 30007 # The trigger "match" string cannot be empty
eInvalidObjectLabel = 30008 # The name of this object is invalid
eScriptNameNotLocated = 30009 # Script name is not in the script file
eAliasNotFound = 30010 # The specified alias name does not exist
eAliasAlreadyExists = 30011 # Attempt to add a alias that already exists
eAliasCannotBeEmpty = 30012 # The alias "match" string cannot be empty
eCouldNotOpenFile = 30013 # Unable to open requested file
eLogFileNotOpen = 30014 # Log file was not open
eLogFileAlreadyOpen = 30015 # Log file was already open
eLogFileBadWrite = 30016 # Bad write to log file
eTimerNotFound = 30017 # The specified timer name does not exist
eTimerAlreadyExists = 30018 # Attempt to add a timer that already exists
eVariableNotFound = 30019 # Attempt to delete a variable that does not exist
eCommandNotEmpty = 30020 # Attempt to use SetCommand with a non-empty command window
eBadRegularExpression = 30021 # Bad regular expression syntax
eTimeInvalid = 30022 # Time given to AddTimer is invalid
eBadMapItem = 30023 # Direction given to AddToMapper is invalid
eNoMapItems = 30024 # No items in mapper
eUnknownOption = 30025 # Option name not found
eOptionOutOfRange = 30026 # New value for option is out of range
eTriggerSequenceOutOfRange = 30027 # Trigger sequence value invalid
eTriggerSendToInvalid = 30028 # Where to send trigger text to is invalid
eTriggerLabelNotSpecified = 30029 # Trigger label not specified/invalid for 'send to variable'
ePluginFileNotFound = 30030 # File name specified for plugin not found
eProblemsLoadingPlugin = 30031 # There was a parsing or other problem loading the plugin
ePluginCannotSetOption = 30032 # Plugin is not allowed to set this option
ePluginCannotGetOption = 30033 # Plugin is not allowed to get this option
eNoSuchPlugin = 30034 # Requested plugin is not installed
eNotAPlugin = 30035 # Only a plugin can do this
eNoSuchRoutine = 30036 # Plugin does not support that subroutine (subroutine not in script)
ePluginDoesNotSaveState = 30037 # Plugin does not support saving state
ePluginCouldNotSaveState = 30037 # Plugin could not save state (eg. no state directory)
ePluginDisabled = 30039 # Plugin is currently disabled
eErrorCallingPluginRoutine = 30040 # Could not call plugin routine
eCommandsNestedTooDeeply = 30041 # Calls to "Execute" nested too deeply
eCannotCreateChatSocket = 30042 # Unable to create socket for chat connection
eCannotLookupDomainName = 30043 # Unable to do DNS (domain name) lookup for chat connection
eNoChatConnections = 30044 # No chat connections open
eChatPersonNotFound = 30045 # Requested chat person not connected
eBadParameter = 30046 # General problem with a parameter to a script call
eChatAlreadyListening = 30047 # Already listening for incoming chats
eChatIDNotFound = 30048 # Chat session with that ID not found
eChatAlreadyConnected = 30049 # Already connected to that server/port
eClipboardEmpty = 30050 # Cannot get (text from the) clipboard
eFileNotFound = 30051 # Cannot open the specified file
eAlreadyTransferringFile = 30052 # Already transferring a file
eNotTransferringFile = 30053 # Not transferring a file
eNoSuchCommand = 30054 # There is not a command of that name
eArrayAlreadyExists = 30055 # That array already exists
eBadKeyName = 30056 # That name is not permitted for a key
eArrayDoesNotExist = 30056 # That array does not exist
eArrayNotEvenNumberOfValues = 30057 # Values to be imported into array are not in pairs
eImportedWithDuplicates = 30058 # Import succeeded, however some values were overwritten
eBadDelimiter = 30059 # Import/export delimiter must be a single character, other than backslash
eSetReplacingExistingValue = 30060 # Array element set, existing value overwritten
eKeyDoesNotExist = 30061 # Array key does not exist
eCannotImport = 30062 # Cannot import because cannot find unused temporary character
# ----------------------------------------------------------
# Flags for AddTrigger
# ----------------------------------------------------------
eEnabled = 1 # enable trigger
eOmitFromLog = 2 # omit from log file
eOmitFromOutput = 4 # omit trigger from output
eKeepEvaluating = 8 # keep evaluating
eIgnoreCase = 16 # ignore case when matching
eTriggerRegularExpression = 32 # trigger uses regular expression
eExpandVariables = 512 # expand variables like @direction
eReplace = 1024 # replace existing trigger of same name
eLowercaseWildcard = 2048 # wildcards forced to lower-case
eTemporary = 16384 # temporary - do not save to world file
# ----------------------------------------------------------
# Colours for AddTrigger
# ----------------------------------------------------------
NOCHANGE = -1
custom1 = 0
custom2 = 1
custom3 = 2
custom4 = 3
custom5 = 4
custom6 = 5
custom7 = 6
custom8 = 7
custom9 = 8
custom10 = 9
custom11 = 10
custom12 = 11
custom13 = 12
custom14 = 13
custom15 = 14
custom16 = 15
# ----------------------------------------------------------
# Flags for AddAlias
# ----------------------------------------------------------
# eEnabled = 1 # same as for AddTrigger
eIgnoreAliasCase = 32 # ignore case when matching
eOmitFromLogFile = 64 # omit this alias from the log file
eAliasRegularExpression = 128 # alias is regular expressions
# eExpandVariables = 512 # same as for AddTrigger
# eReplace = 1024 # same as for AddTrigger
eAliasSpeedWalk = 2048 # interpret send string as a speed walk string
eAliasQueue = 4096 # queue this alias for sending at the speedwalking delay interval
eAliasMenu = 8192 # this alias appears on the alias menu
# eTemporary = 16384 # same as for AddTrigger
# ----------------------------------------------------------
# Flags for AddTimer
# ----------------------------------------------------------
# eEnabled = 1 # same as for AddTrigger
eAtTime = 2 # if not set, time is "every"
eOneShot = 4 # if set, timer only fires once
eTimerSpeedWalk = 8 # timer does a speed walk when it fires
eTimerNote = 16 # timer does a world.note when it fires
eActiveWhenClosed = 32 # timer fires even when world is disconnected
# eReplace = 1024 # same as for AddTrigger
# eTemporary = 16384 # same as for AddTrigger
# ----------------------------------------------------------
# Example showing iterating through all triggers
# ----------------------------------------------------------
def showtriggers ():
triggerlist = world.GetTriggerList
if (triggerlist):
for t in triggerlist : world.Note (t)
# -----------------------------------------------
# Example showing iterating through all variables
# ------------------------------------------------
def showvariables ():
variablelist = world.GetVariableList
if (variablelist ):
for v in variablelist : world.Note (v + " = " +
world.GetVariable(v))
# ----------------------------------------------------------
# Example showing iterating through all aliases
# ----------------------------------------------------------
def showaliases ():
aliaslist = world.GetAliasList
if (aliaslist ):
for a in aliaslist : world.Note (a)
# ---------------------------------------------------------
# Example showing running a script on world open
# ---------------------------------------------------------
def OnWorldOpen ():
world.Note ("---------- World Open ------------")
# ---------------------------------------------------------
# Example showing running a script on world close
# ---------------------------------------------------------
def OnWorldClose ():
world.Note ("---------- World Close ------------")
# ---------------------------------------------------------
# Example showing running a script on world connect
# ---------------------------------------------------------
def OnWorldConnect ():
world.Note ("---------- World Connect ------------")
# ---------------------------------------------------------
# Example showing running a script on world disconnect
# ---------------------------------------------------------
def OnWorldDisconnect ():
world.Note ("---------- World Disconnect ------------")
# ---------------------------------------------------------
# Example showing running a script on an alias
#
# This script is designed to be called by the alias below:
#
#
#
#
#
#
#
# (remove the leading #'s and paste into the alias configuration screen)
#
# It is for teleporting (going to) a room by number
#
# The room is entered by name and looked up in the variables
# list.
# ---------------------------------------------------------
def OnTeleport (thename, theoutput, wildcards):
sHelp = "";
sDestination = wildcards [0]
# remove leading spaces from destination
if len(sDestination) > 0:
while sDestination [0] == " ":
sDestination = sDestination [1:]
# if nothing entered echo possible destinations
if len(sDestination) == 0:
world.note ("-------- TELEPORT destinations ----------")
roomlist = world.GetVariableList
# find list of all variables
if roomlist :
# loop through each variable, and add to help if it starts with "teleport_"
for room in roomlist:
if room [:9] == "teleport_":
if len (sHelp) > 0:
sHelp += ", "
sHelp = sHelp + room [9:]
# if no destinations found, tell them
if sHelp == "":
sHelp = ""
world.note (sHelp)
return
# get contents of the destination variable
iRoom = world.GetVariable ("teleport_" + sDestination)
# if not found, or invalid name, that isn't in the list
if not iRoom:
world.note ("******** Destination " + sDestination + " unknown *********")
return
world.note ("------> Teleporting to " + sDestination)
world.send ("@teleport #" + iRoom)
# ---------------------------------------------------------
# Example showing running a script on an alias
#
# This script is designed to be called by an alias:
#
#
#
#
#
#
# (remove the leading #'s and paste into the alias configuration screen)
#
# It is for adding a room to the list of rooms to teleport to (by
# the earlier script).
#
# eg. ADD_TELEPORT dungeon 1234
#
# ---------------------------------------------------------
def OnAddTeleport (thename, theoutput, wildcards):
# wildcard one is the destination
sDestination = wildcards [1]
# remove leading spaces from destination
if len(sDestination) > 0:
while sDestination [0] == " ":
sDestination = sDestination [1:]
# if nothing entered tell them command syntax
if len (sDestination) == 0:
world.note ("Syntax: add_teleport name dbref")
world.note (" eg. add_teleport LandingBay 4421")
return
# wildcard 2 is the room to go to
iRoom= wildcards [2]
# add room and destination location to variable list
iStatus = world.SetVariable ("teleport_" + sDestination, int(iRoom))
if iStatus != 0:
world.note ("Room name must be alphabetic, you entered: " + sDestination)
return
world.note ("Teleport location " + sDestination + "(#"
+ iRoom + ") added to teleport list")
# ------------------------------------------
# Example showing a script called by a timer
# -------------------------------------------
def OnTimer (strTimerName):
world.note ("Timer " + strTimerName + " has fired!")
# --------------------------------------------
# Example showing a script called by a trigger
# Should be connected to a trigger matching on: <*hp *m *mv>*
# (the above example will work for SMAUG default prompts (eg. <100hp 10m 40mv>)
# it may need to be changed depending on the MUD prompt format).
# --------------------------------------------
def OnStats (strTriggerName, trig_line, wildcards):
iHP = wildcards [0]
iMana = wildcards [1]
iMV = wildcards [2]
world.Note ("Your HP are " + iHP)
world.Note ("Your Mana is " + iMana)
world.Note ("Your movement points are " + iMV)
# --------------------------------------------
# Subroutine to be called to repeat a command.
#
# Call from the alias:
#
#
#
#
#
#
# (remove the leading #'s and paste into the alias configuration screen)
#
# Example of use: #10 give sword to Trispis
# This would send "give sword to Trispis" 10 times
# --------------------------------------------
def OnRepeat (strAliasName, strOutput, wildcards):
for i in range (int (wildcards [0])):
world.Send (wildcards [1])
# --------------------------------------------
# Example showing iterating through all worlds
# --------------------------------------------
def showworlds ():
worldlist = world.GetworldList
if (worldlist ):
for w in worldlist : world.Note (w)
# --------------------------------------------------
# Example showing sending a message to another world
# --------------------------------------------------
def SendToWorld (name, message):
otherworld = world.getworld (name);
if otherworld:
otherworld.Send (message)
else:
world.note ("World " + name + " is not open")
return
# --------------------------------------------
# Example trigger routine that just shows what was passed to it
# --------------------------------------------
def ExampleTrigger (thename, theoutput, wildcards):
world.note ("Trigger " + thename + " fired.");
world.note ("Matching line was: " + theoutput);
for i in range (10):
if wildcards [i]:
world.note ("Wildcard " + str(i) + " = " + wildcards [i])
world.note ("Scripting enabled - script file processed")