Razor Scripting: Difference between revisions

From UO Outlands Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 5: Line 5:
Several commands and expressions that search by type have been greatly expanded:
Several commands and expressions that search by type have been greatly expanded:


===dclicktype===
   dclicktype ('name') OR ('graphic') [source] [hue] [quantity] [range]
   dclicktype ('name') OR ('graphic') [source] [hue] [quantity] [range]
===findtype===
   findtype ('name') OR ('graphic') [source] [hue] [quantity] [range]
   findtype ('name') OR ('graphic') [source] [hue] [quantity] [range]
===targettype===
   targettype ('name') OR ('graphic') [source] [hue] [quantity] [range]
   targettype ('name') OR ('graphic') [source] [hue] [quantity] [range]
===lifttype===
   lifttype ('name') OR ('graphic') [amount] [src] [hue]
   lifttype ('name') OR ('graphic') [amount] [src] [hue]


Line 17: Line 21:
==New Aliases==
==New Aliases==


===ground===
The 'ground' alias is now available. This is useful in the expanded targeting commands as the "source" parameter.
The 'ground' alias is now available. This is useful in the expanded targeting commands as the "source" parameter.


Line 23: Line 28:
==New Expressions==
==New Expressions==


===find===
Searching based on a serial number is now possible with the find expression:
Searching based on a serial number is now possible with the find expression:


Line 29: Line 35:
The parameters work exactly like the findtype command.
The parameters work exactly like the findtype command.


===findlayer===
Searching a character for equipped items is now possible:
Searching a character for equipped items is now possible:


Line 61: Line 68:
   innerlegs
   innerlegs


===targetexists===
An expression to test whether the client currently has a target cursor up:
An expression to test whether the client currently has a target cursor up:


   if targetexists ['any'/'beneficial'/'harmful]
   if targetexists ['any'/'beneficial'/'harmful]


===followers===
An expression to count your current followers:
An expression to count your current followers:


Line 71: Line 80:
   endif
   endif


===hue===
An expression to get the hue of an item:
An expression to get the hue of an item:


Line 77: Line 87:
   endif
   endif


===name===
An expression to get your current character's name:
An expression to get your current character's name:


Line 83: Line 94:
   endif
   endif


===paralyzed===
An expression to test if your character is paralyzed:
An expression to test if your character is paralyzed:


Line 89: Line 101:
   endif
   endif


===blessed===
An expression to test if your character is blessed (yellow health bar):
An expression to test if your character is blessed (yellow health bar):


Line 95: Line 108:
   endif
   endif


===warmode===
An expression to test if your character is in warmode:
An expression to test if your character is in warmode:


Line 101: Line 115:
   endif
   endif


===noto===
An expression to check any mobile's notoriety:
An expression to check any mobile's notoriety:


Line 116: Line 131:
   invulnerable (yellow)
   invulnerable (yellow)


===dead===
An expression to check if a mobile is dead:
An expression to check if a mobile is dead:


Line 126: Line 142:
==New Commands==
==New Commands==


===setvar===
The setvar command has been modified on Outlands to support a wider set of use cases. The optional second parameter is now the serial of the variable. If provided, you won't be prompted with a target cursor.
The setvar command has been modified on Outlands to support a wider set of use cases. The optional second parameter is now the serial of the variable. If provided, you won't be prompted with a target cursor.


Line 134: Line 151:
   setvar! my_name 0x123
   setvar! my_name 0x123


===unsetvar===
Additionally, a command to unset variables has been added. It supports the same modifiers as setvar:
Additionally, a command to unset variables has been added. It supports the same modifiers as setvar:


   unsetvar my_name
   unsetvar my_name


===ignore/clearignore===
An ignore list has been added to avoid finding objects when using the various search commands:
An ignore list has been added to avoid finding objects when using the various search commands:


Line 144: Line 163:


This also supports the same operators as setvar for controlling the scope of the ignore list.
This also supports the same operators as setvar for controlling the scope of the ignore list.
 
===warmode===
A command to explicitly set warmode state has been added:
A command to explicitly set warmode state has been added:


   warmode ('on' / 'off')
   warmode ('on' / 'off')


*Note that this will need a server patch to function correctly.
===getlabel===
 
A command to get an item's label - the text you see when single clicking it - has been added.
A command to get an item's label - the text you see when single clicking it - has been added.


Line 160: Line 179:
   overhead my_label
   overhead my_label


===rename===
A command to rename followers has been added:
A command to rename followers has been added:


   rename myFollower Bob
   rename myFollower Bob


===setskill===
A command to set skill gain locks has been added:
A command to set skill gain locks has been added:


Line 174: Line 195:
==New Operators==
==New Operators==


===as===
There is now an 'as' operator to capture the result of expressions as an alias. This is particularly useful for the `findtype` expression as follows
There is now an 'as' operator to capture the result of expressions as an alias. This is particularly useful for the `findtype` expression as follows


Line 180: Line 202:
   endif
   endif


===in===
There is additionally an 'in' operator that can be used to check whether one string is a substring of another:
There is additionally an 'in' operator that can be used to check whether one string is a substring of another:


Line 200: Line 223:
List support includes the following commands:
List support includes the following commands:


===createlist===
  createlist ('list name')
  createlist ('list name')


Create a new list
Create a new list


===clearlist===
  clearlist ('list name')
  clearlist ('list name')


Clear an existing list
Clear an existing list


===removelist===
  removelist ('list name')
  removelist ('list name')


Delete a list
Delete a list


===pushlist===
  pushlist ('list name') ('element value') ['front'/'back']
  pushlist ('list name') ('element value') ['front'/'back']


Add an item to the front or back of the list
Add an item to the front or back of the list


===poplist===
  poplist ('list name') ('element value'/'front'/'back')
  poplist ('list name') ('element value'/'front'/'back')


Remove an item from the front of back of the list
Remove an item from the front of back of the list


===listexists===
Additionally, the following list-related expressions have been added. These may be used within <code>if</code> and <code>while</code> statements.
Additionally, the following list-related expressions have been added. These may be used within <code>if</code> and <code>while</code> statements.
  listexists ('list name')
  listexists ('list name')


True if the list exists
True if the list exists


===list===
  list (list name) (operator) (value)
  list (list name) (operator) (value)


Compare the length of the list to an integer
Compare the length of the list to an integer


===inlist===
  inlist (list name) (element)
  inlist (list name) (element)


Test if an element is in a list.
Test if an element is in a list.


===Iterating lists===
Finally, <code>for</code> and <code>foreach</code> loops can be used for iteration as follows:
Finally, <code>for</code> and <code>foreach</code> loops can be used for iteration as follows:


Line 255: Line 286:
The following commands for working with timers have been added:
The following commands for working with timers have been added:


===createtimer===
  createtimer (timer name)
  createtimer (timer name)


Create a new timer, starting at 0.
Create a new timer, starting at 0.


===removetimer===
  removetimer (timer name)
  removetimer (timer name)


Destroy an existing timer.
Destroy an existing timer.


===settimer===
  settimer (timer name) (value)
  settimer (timer name) (value)


Line 269: Line 303:
Additionally, two expressions have been added for timers:
Additionally, two expressions have been added for timers:


===timer===
  timer ('timer name') (operator) (value)
  timer ('timer name') (operator) (value)


Compare the current value of the timer (the time elapsed since it was started in milliseconds) to a given value
Compare the current value of the timer (the time elapsed since it was started in milliseconds) to a given value


===timerexists===
  timerexists ('timer name')
  timerexists ('timer name')



Revision as of 23:10, 3 August 2021

The Razor assistant distributed with the Outlands client is a fork of Razor Community Edition. Outlands has additionally extended that scripting engine with the following features.

Modified Commands and Expressions

Several commands and expressions that search by type have been greatly expanded:

dclicktype

 dclicktype ('name') OR ('graphic') [source] [hue] [quantity] [range]

findtype

 findtype ('name') OR ('graphic') [source] [hue] [quantity] [range]

targettype

 targettype ('name') OR ('graphic') [source] [hue] [quantity] [range]

lifttype

 lifttype ('name') OR ('graphic') [amount] [src] [hue]

The hue allows limiting by hue. The source may be the serial of a specific container, 'self' for equipped items, or 'ground'. The quantity is the minimum quantity, and the range is the maximum range from the player. The lifttype expression is further limited to only operate on 'backpack', 'self', or 'ground' sources.


New Aliases

ground

The 'ground' alias is now available. This is useful in the expanded targeting commands as the "source" parameter.


New Expressions

find

Searching based on a serial number is now possible with the find expression:

 if find (serial) [src] [hue] [qty] [range]

The parameters work exactly like the findtype command.

findlayer

Searching a character for equipped items is now possible:

 if findlayer self gloves as mygloves
   overhead 'Wearing gloves!'
 endif

The valid layers are:

 righthand
 lefthand
 shoes
 pants
 shirt
 head
 gloves
 ring
 talisman
 neck
 hair
 waist
 innertorso
 bracelet
 face
 facialhair
 middletorso
 earrings
 arms
 cloak
 backpack
 outertorso
 outerlegs
 innerlegs

targetexists

An expression to test whether the client currently has a target cursor up:

 if targetexists ['any'/'beneficial'/'harmful]

followers

An expression to count your current followers:

 if followers < 5
   overhead "Can still tame stuff!"
 endif

hue

An expression to get the hue of an item:

 if hue someObject = 0x1809
   overhead "Found hue of my item!"
 endif

name

An expression to get your current character's name:

 if name = 'MyName'
   overhead "It's me!"
 endif

paralyzed

An expression to test if your character is paralyzed:

 if paralyzed
   overhead "Can't move!"
 endif

blessed

An expression to test if your character is blessed (yellow health bar):

 if blessed
   overhead "I'm gonna live forever!"
 endif

warmode

An expression to test if your character is in warmode:

 if warmode
   overhead "Ready to attack!"
 endif

noto

An expression to check any mobile's notoriety:

 if noto some_Mobile = hostile
   overhead "Safe to attack!"
 endif

The valid notorieties are

 innocent (blue)
 friend (green)
 hostile (gray)
 criminal (gray)
 enemy (orange)
 murderer (red)
 invulnerable (yellow)

dead

An expression to check if a mobile is dead:

 if dead someMobile
   overhead "He's dead, Jim!"
 endif


New Commands

setvar

The setvar command has been modified on Outlands to support a wider set of use cases. The optional second parameter is now the serial of the variable. If provided, you won't be prompted with a target cursor.

 setvar my_name 0x123

This can be used for graphic IDs, hues, serials, names, and more. By default, this creates a persistent variable that will remain even across restarts of the application. To make the variable only live for as long as the current program run, append the '!' operator. The variable will not appear in the Razor variables list, but will still be global and usable from any script while Razor is running.

 setvar! my_name 0x123

unsetvar

Additionally, a command to unset variables has been added. It supports the same modifiers as setvar:

 unsetvar my_name

ignore/clearignore

An ignore list has been added to avoid finding objects when using the various search commands:

 ignore (serial)
 clearignore

This also supports the same operators as setvar for controlling the scope of the ignore list.

warmode

A command to explicitly set warmode state has been added:

 warmode ('on' / 'off')

getlabel

A command to get an item's label - the text you see when single clicking it - has been added.

 getlabel (serial) (name)

This will fetch the label for the item identified by the serial and create a new variable with your choice of name that holds the text.

 getlabel backpack my_label
 overhead my_label

rename

A command to rename followers has been added:

 rename myFollower Bob

setskill

A command to set skill gain locks has been added:

 setskill Blacksmithing up

The valid choices are up, down, or locked.


New Operators

as

There is now an 'as' operator to capture the result of expressions as an alias. This is particularly useful for the `findtype` expression as follows

 if findtype dagger as mydagger
   dclick mydagger
 endif

in

There is additionally an 'in' operator that can be used to check whether one string is a substring of another:

 if this in thisthatandtheother
   overhead yes
 endif

These are particularly powerful when combined to sort through items:

 if findtype dagger as mydagger
   getlabel mydagger daggerlabel
   if blessed in daggerlabel
     overhead "Found newbie dagger"
   endif
 endif


Lists

List support includes the following commands:

createlist

createlist ('list name')

Create a new list

clearlist

clearlist ('list name')

Clear an existing list

removelist

removelist ('list name')

Delete a list

pushlist

pushlist ('list name') ('element value') ['front'/'back']

Add an item to the front or back of the list

poplist

poplist ('list name') ('element value'/'front'/'back')

Remove an item from the front of back of the list

listexists

Additionally, the following list-related expressions have been added. These may be used within if and while statements.

listexists ('list name')

True if the list exists

list

list (list name) (operator) (value)

Compare the length of the list to an integer

inlist

inlist (list name) (element)

Test if an element is in a list.

Iterating lists

Finally, for and foreach loops can be used for iteration as follows:

for 10
  say 'hello'
endfor

This will iterate exactly 10 times.

foreach x in my_list
  say x
endfor

This will iterate the elements in my_list, assigning the variable 'x' to the next element on each iteration.


Timers

Timers represent background timers that run while the rest of your script executes. All units are in milliseconds. They can be queried to check how much time has elapsed since they were started, or reset back to an earlier count.

The following commands for working with timers have been added:

createtimer

createtimer (timer name)

Create a new timer, starting at 0.

removetimer

removetimer (timer name)

Destroy an existing timer.

settimer

settimer (timer name) (value)

Set a timer to the given value. It will begin counting up from the given value immediately.

Additionally, two expressions have been added for timers:

timer

timer ('timer name') (operator) (value)

Compare the current value of the timer (the time elapsed since it was started in milliseconds) to a given value

timerexists

timerexists ('timer name')

Check if a timer exists

Example:

// Create a new timer
if not timerexists 'sample'
 createtimer 'sample'
endif
// Reset every 10 seconds
if timer 'sample' > 10000
 settimer 'sample' 0
endif