initial release
This commit is contained in:
402
cosmic rage/scripts/exampscript.pys
Normal file
402
cosmic rage/scripts/exampscript.pys
Normal file
@@ -0,0 +1,402 @@
|
||||
# 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:
|
||||
#
|
||||
#
|
||||
# <aliases>
|
||||
# <alias
|
||||
# script="OnTeleport"
|
||||
# match="^teleport(.*)$"
|
||||
# enabled="y"
|
||||
# regexp="y"
|
||||
# sequence="100"
|
||||
# >
|
||||
# </alias>
|
||||
# </aliases>
|
||||
#
|
||||
# (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 = "<no rooms in teleport list>"
|
||||
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:
|
||||
#
|
||||
# <aliases>
|
||||
# <alias
|
||||
# script="OnAddTeleport"
|
||||
# match="^add_teleport(|\s*(\w*)\s*(\d*))$"
|
||||
# enabled="y"
|
||||
# regexp="y"
|
||||
# sequence="100"
|
||||
# >
|
||||
# </alias>
|
||||
# </aliases>
|
||||
#
|
||||
# (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:
|
||||
#
|
||||
# <aliases>
|
||||
# <alias
|
||||
# script="OnRepeat"
|
||||
# match="^#(\d+)\s+(.+)$"
|
||||
# enabled="y"
|
||||
# regexp="y"
|
||||
# sequence="100"
|
||||
# >
|
||||
# </alias>
|
||||
# </aliases>
|
||||
#
|
||||
# (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")
|
||||
|
||||
Reference in New Issue
Block a user