Razor Scripting: Difference between revisions

From UO Outlands Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 17: Line 17:
==Commands==
==Commands==


A command to define a name for any value has been added to make scripts more readable:
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.


   define my_name 0x1234
   setvar my_name 0x123


This can be used for graphic IDs, hues, serials, names, and more. By default, defines are scoped so they go away when the current script exits. However, adding the `!` operator makes them global and persistent:
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.


   define! my_permanent_name 0x1234
   setvar! my_name 0x123


In the above example, `my_permanent_name` can now be used by other scripts until Razor is shut down.
Further, to define a purely local variable only for the current scope, use the @ operator in conjunction with the ! operator:
 
  @setvar! my_name 0x123
 
The variable `my_name` will only exist in this script.
 
Additionally, a command to unset variables has been added. It supports the same modified as setvar:
 
  unsetvar my_name


A command to explicitly set warmode state has been added:
A command to explicitly set warmode state has been added:

Revision as of 06:02, 30 May 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.

Expressions

A simple expression to count your current followers is available:

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

As is an expression to get the hue of an item:

 if hue ('serial') = 0x1809
   overhead "Found hue of my item!"
 endif

Commands

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

Further, to define a purely local variable only for the current scope, use the @ operator in conjunction with the ! operator:

 @setvar! my_name 0x123

The variable `my_name` will only exist in this script.

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

 unsetvar my_name

A command to explicitly set warmode state has been added:

 warmode ('on' / 'off')
  • Note that this will need a server patch to function correctly.

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

Operators

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

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 ('list name')

Create a new list

clearlist ('list name')

Clear an existing list

removelist ('list name')

Delete a list

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

Add an item to the front or back of the list

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

Remove an item from the front of back of the list

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 name) (operator) (value)

Compare the length of the list to an integer

inlist (list name) (element)

Test if an element is in a list.

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 (timer name)

Create a new timer, starting at 0.

removetimer (timer name)

Destroy an existing timer.

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 name') (operator) (value)

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

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