Difference between revisions of "Meta Expressions"
(→Examples) |
|||
(16 intermediate revisions by 2 users not shown) | |||
Line 29: | Line 29: | ||
* All numbers in a string must also be escaped. | * All numbers in a string must also be escaped. | ||
+ | |||
+ | == Language Details: Operators == | ||
+ | The following operators are recognized (listed in order of precedence): | ||
+ | |||
+ | * \ escapes a special character so that it is treated as part of a string. For instance, ".\*" yields the string ".*" rather than attempting to multiply. | ||
+ | * ( and ) allow grouping of expressions to change precedence. | ||
+ | * % performs integer [http://en.wikipedia.org/wiki/Modulo_operation modulo division]. For instance, 13%3 yields 1. | ||
+ | * / performs division. | ||
+ | * * performs multiplication. | ||
+ | * + performs addition on numbers, or concatenates two strings. | ||
+ | * - performs subtraction. | ||
+ | * # performs a regex match, yielding true if the match succeeded or false otherwise. The item after the # is the regex and the one before it is the string to match against. For instance, abc#b returns true, because 'abc' contains b. | ||
+ | * !=, ==, >, <, >=, <= comparison operators: compares two expressions and yields true or false. The two expressions to be compared must be of the same type. String comparisons are not case sensitive. | ||
+ | * && yields true if two boolean expressions are both true. | ||
+ | * || yields true if either of two boolean expressions are true. | ||
+ | * ^ performs a bitwise [https://en.wikipedia.org/wiki/Exclusive_or exclusive or] on two numbers, treating them as integers. | ||
+ | |||
+ | |||
+ | == Language Details: Strings == | ||
+ | Strings in an expression are a continuous series of letters, spaces, and escaped characters. Anything other than a letter or a space should be escaped by adding a \ in front of it. | ||
+ | |||
+ | Examples: | ||
+ | * Desired string: "hello world" Expression string: "hello world" | ||
+ | * Desired string: "a-b" Expression string: "a\-b" | ||
+ | * Desired string: "a! b-~! c123'." Expression string: "a\! b\-\~\! c\1\2\3\'\." | ||
== Function Information == | == Function Information == | ||
Line 34: | Line 59: | ||
Expand to view details and available examples. | Expand to view details and available examples. | ||
− | There are currently | + | There are currently 67 meta functions. |
+ | |||
+ | See the [[Virindi Tank Changelog]] for the most recent additions. | ||
Line 45: | Line 72: | ||
'''Param 0 (String)''': The variable name to test | '''Param 0 (String)''': The variable name to test | ||
− | '''Example''': ''testvar[ | + | '''Example''': ''testvar[exampleVar]''</div> |
</div> | </div> | ||
Line 146: | Line 173: | ||
'''Param 0 (Number)''': StringValueKey property id.</div> | '''Param 0 (Number)''': StringValueKey property id.</div> | ||
+ | </div> | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | ||
+ | '''getisspellknown[1]''' | ||
+ | <div class="mw-collapsible-content">'''Description''': Returns true if a given spell id is learned, or false otherwise. | ||
+ | |||
+ | '''Parameter count''': 1 | ||
+ | |||
+ | '''Param 0 (Number)''':The SpellId to query </div> | ||
+ | </div> | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | ||
+ | '''getcancastspell_hunt[1]''' | ||
+ | <div class="mw-collapsible-content">'''Description''': Queries if a spell can be cast using the current VTank settings. This examines scarab count, buffed skill, and presence in the spellbook. Skill is checked against SpellDiffExcessThreshold-Hunt. | ||
+ | |||
+ | '''Parameter count''': 1 | ||
+ | |||
+ | '''Param 0 (Number)''':The SpellId to query </div> | ||
+ | </div> | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | ||
+ | '''getcancastspell_buff[1]''' | ||
+ | <div class="mw-collapsible-content">'''Description''': Queries if a spell can be cast using the current VTank settings. This examines scarab count, buffed skill, and presence in the spellbook. Skill is checked against SpellDiffExcessThreshold-Buff. | ||
+ | |||
+ | '''Parameter count''': 1 | ||
+ | |||
+ | '''Param 0 (Number)''':The SpellId to query </div> | ||
+ | </div> | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | ||
+ | '''getcharvital_base[1]''' | ||
+ | <div class="mw-collapsible-content">'''Description''': Get the base value of the character's health, stamina, or mana. | ||
+ | |||
+ | '''Parameter count''': 1 | ||
+ | |||
+ | '''Param 0 (Number)''': Which vital to examine. 1 = Health, 2 = Stamina, 3 = Mana. </div> | ||
+ | </div> | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | ||
+ | '''getcharvital_current[1]''' | ||
+ | <div class="mw-collapsible-content">'''Description''': Get the current value of the character's health, stamina, or mana. | ||
+ | |||
+ | '''Parameter count''': 1 | ||
+ | |||
+ | '''Param 0 (Number)''': Which vital to examine. 1 = Health, 2 = Stamina, 3 = Mana. </div> | ||
+ | </div> | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | ||
+ | '''getcharvital_buffedmax[1]''' | ||
+ | <div class="mw-collapsible-content">'''Description''': Get the buffed maximum value of the character's health, stamina, or mana. | ||
+ | |||
+ | '''Parameter count''': 1 | ||
+ | |||
+ | '''Param 0 (Number)''': Which vital to examine. 1 = Health, 2 = Stamina, 3 = Mana. </div> | ||
+ | </div> | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | ||
+ | '''getcharskill_traininglevel[1]''' | ||
+ | <div class="mw-collapsible-content">'''Description''': Get the character's current training level for a skill. 0 = Unusable, 1 = Untrained, 2 = Trained, 3 = Specialized. | ||
+ | |||
+ | '''Parameter count''': 1 | ||
+ | |||
+ | '''Param 0 (Number)''': Which skillid to examine. </div> | ||
+ | </div> | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | ||
+ | '''getcharskill_base[1]''' | ||
+ | <div class="mw-collapsible-content">'''Description''': Get the character's base ability for a skill. | ||
+ | |||
+ | '''Parameter count''': 1 | ||
+ | |||
+ | '''Param 0 (Number)''': Which skillid to examine. </div> | ||
+ | </div> | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | ||
+ | '''getcharskill_buffed[1]''' | ||
+ | <div class="mw-collapsible-content">'''Description''': Get the character's buffed ability for a skill. | ||
+ | |||
+ | '''Parameter count''': 1 | ||
+ | |||
+ | '''Param 0 (Number)''': Which skillid to examine. </div> | ||
</div> | </div> | ||
Line 215: | Line 323: | ||
'''Param 0 (Coordinates)''': The first coordinates object. | '''Param 0 (Coordinates)''': The first coordinates object. | ||
− | '''Param 1 (Coordinates)''': The second coordinates object.</div> | + | '''Param 1 (Coordinates)''': The second coordinates object. |
+ | |||
+ | '''Example''': [http://www.immortalbob.com/phpBB3/viewtopic.php?f=24&t=120 Landscape Item Pickup Tutorial] </div> | ||
</div> | </div> | ||
Line 296: | Line 406: | ||
'''Parameter count''': 1 | '''Parameter count''': 1 | ||
− | '''Param 0 (Number)''': The objectclass number to look for.</div> | + | '''Param 0 (Number)''': The objectclass number to look for. |
+ | |||
+ | '''Notes''': As of Virindi Tank 0.3.1.172 this function no longer returns the current player. It will return the nearest player to you.</div> | ||
</div> | </div> | ||
Line 339: | Line 451: | ||
<div class="mw-collapsible-content">'''Description''': Returns a world object for the player. | <div class="mw-collapsible-content">'''Description''': Returns a world object for the player. | ||
− | '''Parameter count''': 0 | + | '''Parameter count''': 0</div> |
− | </div> | ||
</div> | </div> | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | ||
+ | '''wobjectfindnearestbynameandobjectclass[2]''' | ||
+ | <div class="mw-collapsible-content">'''Description''': Returns a world object for the nearest object whose name matches a given regular expression and whose objectclass is a particular value. | ||
+ | |||
+ | '''Parameter count''': 2 | ||
+ | |||
+ | '''Param 0 (Number)''': The objectclass number to look for. | ||
+ | |||
+ | '''Param 1 (String)''': The name of the object to search for. This parameter is a regex. | ||
+ | </div></div> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | <div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | ||
Line 372: | Line 494: | ||
'''Param 1 (WorldObject)''': The world object to be used on.</div> | '''Param 1 (WorldObject)''': The world object to be used on.</div> | ||
+ | </div> | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | ||
+ | '''actiontrygiveitem[2]''' | ||
+ | <div class="mw-collapsible-content">'''Description''': Attempts to hand an item to a player or NPC. Returns false if failed and true if the attempt could possibly succeed. | ||
+ | |||
+ | '''Parameter count''': 2 | ||
+ | |||
+ | '''Param 0 (WorldObject)''': The world object to give. | ||
+ | |||
+ | '''Param 1 (WorldObject)''': The world object to be given to (ie. player or NPC).</div> | ||
+ | </div> | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | ||
+ | '''actiontryequipanywand[0]''' | ||
+ | <div class="mw-collapsible-content">'''Description''': Attempts to take one step towards equipping any wand from the current profile's items list. Returns true if a wand is already equipped, otherwise false.<br> | ||
+ | '''Parameter count''': 0</div> | ||
+ | </div> | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | ||
+ | '''actiontrycastbyid[1]''' | ||
+ | <div class="mw-collapsible-content">'''Description''': Attempts to cast a particular spell without a target (like a self spell). Checks the spell requirements as if it were a 'hunting' spell. If the character is not in magic mode, one step is taken towards equipping any wand. Returns 1 if the attempt has begun, 0 if the attempt has not yet been made, or 2 if the attempt is impossible. | ||
+ | |||
+ | '''Parameter count''': 1 | ||
+ | |||
+ | '''Param 0 (Number)''': The spell ID to cast.</div> | ||
+ | </div> | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | ||
+ | '''actiontrycastbyidontarget[2]''' | ||
+ | <div class="mw-collapsible-content">'''Description''': Attempts to cast a particular spell on a target WorldObject. Checks the spell requirements as if it were a 'hunting' spell. If the character is not in magic mode, one step is taken towards equipping any wand. Returns 1 if the attempt has begun, 0 if the attempt has not yet been made, or 2 if the attempt is impossible. | ||
+ | |||
+ | '''Parameter count''': 2 | ||
+ | |||
+ | '''Param 0 (Number)''': The spell ID to cast. | ||
+ | |||
+ | '''Param 1 (WorldObject)''': The object to target with the spell.</div> | ||
+ | </div> | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | ||
+ | '''chatbox[1]''' | ||
+ | <div class="mw-collapsible-content">'''Description''': Sends a string to the chatbox. | ||
+ | |||
+ | '''Parameter count''': 1 | ||
+ | |||
+ | '''Param 0 (String)''': The string to send.</div> | ||
+ | </div> | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | ||
+ | '''chatboxpaste[1]''' | ||
+ | <div class="mw-collapsible-content">'''Description''': Pastes a partial string to the chatbox so that the user can complete typing it. Returns true if succeeded. | ||
+ | |||
+ | '''Parameter count''': 1 | ||
+ | |||
+ | '''Param 0 (String)''': The string to send.</div> | ||
+ | </div> | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | ||
+ | '''statushud[2]''' | ||
+ | <div class="mw-collapsible-content">'''Description''': Updates an entry in the Virindi HUDs Status HUD. | ||
+ | |||
+ | '''Parameter count''': 2 | ||
+ | |||
+ | '''Param 0 (String)''': The key | ||
+ | |||
+ | '''Param 1 (String)''': The value</div> | ||
+ | </div> | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | ||
+ | '''statushudcolored[2]''' | ||
+ | <div class="mw-collapsible-content">'''Description''': Updates an entry in the Virindi HUDs Status HUD. | ||
+ | |||
+ | '''Parameter count''': 3 | ||
+ | |||
+ | '''Param 0 (String)''': The key | ||
+ | |||
+ | '''Param 1 (String)''': The value | ||
+ | |||
+ | '''Param 2 (String)''': The color, in RGB number format. For example, pure red is 16711680 (0xFF0000).</div> | ||
+ | </div> | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | ||
+ | '''uigetcontrol[2]''' | ||
+ | <div class="mw-collapsible-content">'''Description''': Gets a control reference for a control in a Meta View. | ||
+ | |||
+ | '''Parameter count''': 2 | ||
+ | |||
+ | '''Param 0 (String)''': The window name. | ||
+ | |||
+ | '''Param 1 (String)''': The control name.</div> | ||
+ | </div> | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | ||
+ | '''uisetlabel[2]''' | ||
+ | <div class="mw-collapsible-content">'''Description''': Sets the text label of a Meta View control. Works on Buttons. | ||
+ | |||
+ | '''Parameter count''': 2 | ||
+ | |||
+ | '''Param 0 (ViewControl)''': The control object. | ||
+ | |||
+ | '''Param 1 (String)''': The label text.</div> | ||
</div> | </div> | ||
Line 407: | Line 630: | ||
<div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | <div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | ||
'''randint[2]''' | '''randint[2]''' | ||
− | <div class="mw-collapsible-content">'''Description''': Returns a random integer between min and max | + | <div class="mw-collapsible-content">'''Description''': Returns a random integer between min and (max - 1) |
'''Parameter count''': 2 | '''Parameter count''': 2 | ||
Line 413: | Line 636: | ||
'''Param 0 (Number)''': Minimum | '''Param 0 (Number)''': Minimum | ||
− | '''Param 1 (Number)''': Maximum</div> | + | '''Param 1 (Number)''': Maximum |
+ | |||
+ | '''Example''': | ||
+ | |||
+ | Randint[0,2] will return 0 or 1, but never 2. | ||
+ | |||
+ | Randint[5,10] will return 5, 6, 7, 8, or 9, but never 10.</div> | ||
</div> | </div> | ||
Line 475: | Line 704: | ||
'''stopwatchstop[1]''' | '''stopwatchstop[1]''' | ||
<div class="mw-collapsible-content">'''Description''': Starts counting on a stopwatch. Returns the stopwatch. | <div class="mw-collapsible-content">'''Description''': Starts counting on a stopwatch. Returns the stopwatch. | ||
+ | |||
'''Parameter count''': 1 | '''Parameter count''': 1 | ||
+ | |||
'''Param 0 (Stopwatch)''': The stopwatch to stop</div> | '''Param 0 (Stopwatch)''': The stopwatch to stop</div> | ||
</div> | </div> | ||
Line 488: | Line 719: | ||
</div> | </div> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | ||
+ | '''cnumber[1]''' | ||
+ | <div class="mw-collapsible-content">'''Description''': Converts a string to a number (floating point). Returns 0 if the format is invalid. | ||
+ | |||
+ | '''Parameter count''': 1 | ||
+ | |||
+ | '''Param 0 (String)''': The string to convert</div> | ||
+ | </div> | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | ||
+ | '''floor[1]''' | ||
+ | <div class="mw-collapsible-content">'''Description''': Determines the largest integer less than or equal to the input value. | ||
+ | |||
+ | '''Parameter count''': 1 | ||
+ | |||
+ | '''Param 0 (Number)''': The number</div> | ||
+ | </div> | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | ||
+ | '''ceiling[1]''' | ||
+ | <div class="mw-collapsible-content">'''Description''': Determines the smallest integer greater than or equal to the input value. | ||
+ | |||
+ | '''Parameter count''': 1 | ||
+ | |||
+ | '''Param 0 (Number)''': The number</div> | ||
+ | </div> | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | ||
+ | '''round[1]''' | ||
+ | <div class="mw-collapsible-content">'''Description''': Rounds a number to the nearest whole integer. | ||
+ | |||
+ | '''Parameter count''': 1 | ||
+ | |||
+ | '''Param 0 (Number)''': The number</div> | ||
+ | </div> | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:65%"> | ||
+ | '''abs[1]''' | ||
+ | <div class="mw-collapsible-content">'''Description''': Determines the absolute value of a number. | ||
+ | |||
+ | '''Parameter count''': 1 | ||
+ | '''Param 0 (Number)''': The number</div> | ||
+ | </div> | ||
== Object Properties == | == Object Properties == | ||
[http://pastebin.com/X05rYnYU Vtank Object Prop Enums] | [http://pastebin.com/X05rYnYU Vtank Object Prop Enums] | ||
− | |||
− | |||
{| class="mw-collapsible mw-collapsed wikitable" style="width:20%" | {| class="mw-collapsible mw-collapsed wikitable" style="width:20%" | ||
Line 850: | Line 1,122: | ||
|AuraManaFlow | |AuraManaFlow | ||
|339 | |339 | ||
+ | |- | ||
+ | |AuraManaInfusion | ||
+ | |340 | ||
|- | |- | ||
|AuraPurity | |AuraPurity | ||
Line 928: | Line 1,203: | ||
|} | |} | ||
+ | {| class="mw-collapsible mw-collapsed wikitable" style="width:20%" | ||
+ | |'''Skill IDs''' | ||
+ | | | ||
+ | |- | ||
+ | |Melee Defense | ||
+ | |6 | ||
+ | |- | ||
+ | |Missile Defense | ||
+ | |7 | ||
+ | |- | ||
+ | |Arcane Lore | ||
+ | |14 | ||
+ | |- | ||
+ | |Magic Defense | ||
+ | |15 | ||
+ | |- | ||
+ | |Mana Conversion | ||
+ | |16 | ||
+ | |- | ||
+ | |Item Tinkering | ||
+ | |18 | ||
+ | |- | ||
+ | |Assess Person | ||
+ | |19 | ||
+ | |- | ||
+ | |Deception | ||
+ | |20 | ||
+ | |- | ||
+ | |Healing | ||
+ | |21 | ||
+ | |- | ||
+ | |Jump | ||
+ | |22 | ||
+ | |- | ||
+ | |Lockpick | ||
+ | |23 | ||
+ | |- | ||
+ | |Run | ||
+ | |24 | ||
+ | |- | ||
+ | |Assess Creature | ||
+ | |27 | ||
+ | |- | ||
+ | |Weapon Tinkering | ||
+ | |28 | ||
+ | |- | ||
+ | |Armor Tinkering | ||
+ | |29 | ||
+ | |- | ||
+ | |Magic Item Tinkering | ||
+ | |30 | ||
+ | |- | ||
+ | |Creature Enchantment | ||
+ | |31 | ||
+ | |- | ||
+ | |Item Enchantment | ||
+ | |32 | ||
+ | |- | ||
+ | |Life Magic | ||
+ | |33 | ||
+ | |- | ||
+ | |War Magic | ||
+ | |34 | ||
+ | |- | ||
+ | |Leadership | ||
+ | |35 | ||
+ | |- | ||
+ | |Loyalty | ||
+ | |36 | ||
+ | |- | ||
+ | |Fletching | ||
+ | |37 | ||
+ | |- | ||
+ | |Alchemy | ||
+ | |38 | ||
+ | |- | ||
+ | |Cooking | ||
+ | |39 | ||
+ | |- | ||
+ | |Salvaging | ||
+ | |40 | ||
+ | |- | ||
+ | |Two-Handed Combat | ||
+ | |41 | ||
+ | |- | ||
+ | |Void | ||
+ | |43 | ||
+ | |- | ||
+ | |Heavy Weapons | ||
+ | |44 | ||
+ | |- | ||
+ | |Light Weapons | ||
+ | |45 | ||
+ | |- | ||
+ | |Finesse Weapons | ||
+ | |46 | ||
+ | |- | ||
+ | |Missile Weapons | ||
+ | |47 | ||
+ | |- | ||
+ | |Summoning | ||
+ | |54 | ||
+ | |} | ||
== Examples == | == Examples == | ||
− | '''Test for proximity to any portal | + | '''Test for proximity to any portal:''' |
coordinatedistancewithz[wobjectgetphysicscoordinates[wobjectfindnearestbyobjectclass[14]],getplayercoordinates[]]<5 | coordinatedistancewithz[wobjectgetphysicscoordinates[wobjectfindnearestbyobjectclass[14]],getplayercoordinates[]]<5 | ||
− | '''Check if you have any Aged or Durable Legendary Keys in your inventory | + | '''Check if you have any Aged or Durable Legendary Keys in your inventory:''' |
getobjectinternaltype[wobjectfindininventorybynamerx[\^\(Aged\|Durable\) Legendary Key\$]]==7 | getobjectinternaltype[wobjectfindininventorybynamerx[\^\(Aged\|Durable\) Legendary Key\$]]==7 | ||
− | '''Check if there is any object currently selected | + | '''Check if there is any object currently selected:''' |
getobjectinternaltype[wobjectgetselection[]]==7 | getobjectinternaltype[wobjectgetselection[]]==7 | ||
− | '''Save the selected items name in a variable | + | '''Save the selected items name in a variable:''' |
setvar[keyName,wobjectgetname[wobjectgetselection[]]] | setvar[keyName,wobjectgetname[wobjectgetselection[]]] | ||
Line 1,003: | Line 1,381: | ||
− | '''Use nearest portal | + | '''Use nearest portal:''' |
actiontryuseitem[wobjectfindnearestbyobjectclass[14]] | actiontryuseitem[wobjectfindnearestbyobjectclass[14]] | ||
− | '''Use a Massive Mana Charge on yourself by name''' | + | '''Use a Massive Mana Charge on yourself by name:''' |
actiontryapplyitem[wobjectfindininventorybyname[Massive Mana Charge], wobjectgetplayer[]] | actiontryapplyitem[wobjectfindininventorybyname[Massive Mana Charge], wobjectgetplayer[]] | ||
− | '''Use a Mana Stone on yourself by template type''' | + | '''Use a Mana Stone on yourself by template type:''' |
actiontryapplyitem[wobjectfindininventorybytemplatetype[9060],wobjectgetplayer[]] | actiontryapplyitem[wobjectfindininventorybytemplatetype[9060],wobjectgetplayer[]] | ||
Line 1,021: | Line 1,399: | ||
actiontryuseitem[wobjectfindininventorybytemplatetype[#]] | actiontryuseitem[wobjectfindininventorybytemplatetype[#]] | ||
+ | |||
+ | |||
+ | '''Check if your luminance is full (1.5mil):''' | ||
+ | |||
+ | getcharquadprop[6]==1500000 |
Latest revision as of 17:27, 10 December 2016
These expressions can set and retrieve variables, react to object/char properties, use and combine objects, and more.
This adds the "Expression" meta condition and the "Expression Action" and "Chat Expression" meta actions.
The "/vt mexec [expression]" command can be used instead of the meta rules when appropriate. It is also a great testing tool.
There are two ways to use Expressions, your situation will determine the best choice.
The first is through sending the command like any other chat command. Ex: "/vt mexec [expression]". This can be useful if you want to issue the command without using a meta rule, or simply want to test an expression without using meta.
The second is by utilizing the "Expression" meta condition and the "Expression Action" and "Chat Expression" meta actions.
The "Expression" meta condition is like any other meta condition, if the parameters are met then it will initiate the action. You can use this to detect world objects, character properties, react to custom variables and more.
The "Expression Action" meta action initiates the expression written within.
The "Expression Chat" meta action is used to output expression strings to chat. You can use regex and meta functions to format an expression. When outputting numbers from a variable you must first convert it to a string.
Contents
Notes
- true is the same as 1, false is the same as 0. There are no actual booleans, just numbers.
- There are two extra operators added since monster expressions: the ^ (xor) operator, and the ; operator. The ; operator works on any two types and simply returns the value of the first one. It has the lowest possible precedence. The idea is to use it to string together commands when you don't care about the result.
- Unlike monster expressions, meta expressions do not trim spaces from the ends of strings.
- Set variables persist until cleared by a command or until relog.
- Formatting during the conversion of number to string is a string like this: http://msdn.microsoft.com/en-us/library/kfsatb94%28v=vs.110%29.aspx
- All operator characters which occur in a string must be escaped with \
- All numbers in a string must also be escaped.
Language Details: Operators
The following operators are recognized (listed in order of precedence):
- \ escapes a special character so that it is treated as part of a string. For instance, ".\*" yields the string ".*" rather than attempting to multiply.
- ( and ) allow grouping of expressions to change precedence.
- % performs integer modulo division. For instance, 13%3 yields 1.
- / performs division.
- * performs multiplication.
- + performs addition on numbers, or concatenates two strings.
- - performs subtraction.
- # performs a regex match, yielding true if the match succeeded or false otherwise. The item after the # is the regex and the one before it is the string to match against. For instance, abc#b returns true, because 'abc' contains b.
- !=, ==, >, <, >=, <= comparison operators: compares two expressions and yields true or false. The two expressions to be compared must be of the same type. String comparisons are not case sensitive.
- && yields true if two boolean expressions are both true.
- || yields true if either of two boolean expressions are true.
- ^ performs a bitwise exclusive or on two numbers, treating them as integers.
Language Details: Strings
Strings in an expression are a continuous series of letters, spaces, and escaped characters. Anything other than a letter or a space should be escaped by adding a \ in front of it.
Examples:
- Desired string: "hello world" Expression string: "hello world"
- Desired string: "a-b" Expression string: "a\-b"
- Desired string: "a! b-~! c123'." Expression string: "a\! b\-\~\! c\1\2\3\'\."
Function Information
Expand to view details and available examples.
There are currently 67 meta functions.
See the Virindi Tank Changelog for the most recent additions.
testvar[1]
Parameter count: 1
Param 0 (String): The variable name to test
Example: testvar[exampleVar]getvar[1]
Parameter count: 1
Param 0 (String): The variable name to get
Example: getvar[exampleVar]setvar[2]
Parameter count: 2
Param 0 (String): The variable name to set
Example: variables can be strings or integers
setvar[exampleVar, variable]
setvar[exampleVar, 1]touchvar[1]
Parameter count: 1
Param 0 (String): The variable name to touch
Example: touchvar[exampleVar]clearallvars[]
Parameter count: 0
clearvar[1]
Parameter count: 1
Param 0 (String): The variable name to clear
Example: clearvar[exampleVar]getcharintprop[1]
Parameter count: 1
Param 0 (Number): IntValueKey property id.getchardoubleprop[1]
Parameter count: 1
Param 0 (Number): DoubleValueKey property id.getcharquadprop[1]
Parameter count: 1
Param 0 (Number): QuadValueKey property idgetcharboolprop[1]
Parameter count: 1
Param 0 (Number): BoolValueKey property idgetcharstringprop[1]
Parameter count: 1
Param 0 (Number): StringValueKey property id.getisspellknown[1]
Parameter count: 1
Param 0 (Number):The SpellId to querygetcancastspell_hunt[1]
Parameter count: 1
Param 0 (Number):The SpellId to querygetcancastspell_buff[1]
Parameter count: 1
Param 0 (Number):The SpellId to querygetcharvital_base[1]
Parameter count: 1
Param 0 (Number): Which vital to examine. 1 = Health, 2 = Stamina, 3 = Mana.getcharvital_current[1]
Parameter count: 1
Param 0 (Number): Which vital to examine. 1 = Health, 2 = Stamina, 3 = Mana.getcharvital_buffedmax[1]
Parameter count: 1
Param 0 (Number): Which vital to examine. 1 = Health, 2 = Stamina, 3 = Mana.getcharskill_traininglevel[1]
Parameter count: 1
Param 0 (Number): Which skillid to examine.getcharskill_base[1]
Parameter count: 1
Param 0 (Number): Which skillid to examine.getcharskill_buffed[1]
Parameter count: 1
Param 0 (Number): Which skillid to examine.getplayerlandcell[0]
Parameter count: 0
getplayercoordinates[0]
Parameter count: 0
coordinategetns[1]
Parameter count: 1
Param 0 (Coordinates): The coordinates object.coordinategetwe[1]
Parameter count: 1
Param 0 (Coordinates): The coordinates object.coordinategetz[1]
Parameter count: 1
Param 0 (Coordinates): The coordinates object.coordinatetostring[1]
Parameter count: 1
Param 0 (Coordinates): The coordinates object.coordinateparse[1]
Parameter count: 1
Param 0 (String): The coordinates string.coordinatedistancewithz[2]
Parameter count: 2
Param 0 (Coordinates): The first coordinates object.
Param 1 (Coordinates): The second coordinates object.
Example: Landscape Item Pickup Tutorialcoordinatedistanceflat[2]
Parameter count: 2
Param 0 (Coordinates): The first coordinates object.
Param 1 (Coordinates): The second coordinates object.wobjectgetphysicscoordinates[1]
Parameter count: 1
Param 0 (WorldObject): The world object to examine.wobjectgetname[1]
Parameter count: 1
Param 0 (WorldObject): The world object to examine.wobjectgetobjectclass[1]
Parameter count: 1
Param 0 (WorldObject): The world object to examine.wobjectgettemplatetype[1]
Parameter count: 1
Param 0 (WorldObject): The world object to examine.wobjectgetisdooropen[1]
Parameter count: 1
Param 0 (WorldObject): The door world object to examine.wobjectfindnearestmonster[0]
Parameter count: 0
wobjectfindnearestdoor[0]
Parameter count: 0
Example: http://www.virindi.net/junk/door.jpgwobjectfindnearestbyobjectclass[1]
Parameter count: 1
Param 0 (Number): The objectclass number to look for.
Notes: As of Virindi Tank 0.3.1.172 this function no longer returns the current player. It will return the nearest player to you.wobjectfindininventorybytemplatetype[1]
Parameter count: 1
Param 0 (Number): The template type number to look for.
Example: http://www.virindi.net/junk/expr-usingtemplates.jpgwobjectfindininventorybyname[1]
Parameter count: 1
Param 0 (String): The item name to look for.wobjectfindininventorybynamerx[1]
Parameter count: 1
Param 0 (String): The item name to look for. This parameter is a regex.wobjectgetselection[0]
Parameter count: 0
wobjectgetplayer[0]
wobjectfindnearestbynameandobjectclass[2]
Parameter count: 2
Param 0 (Number): The objectclass number to look for.
Param 1 (String): The name of the object to search for. This parameter is a regex.
actiontryselect[1]
Parameter count: 1
Param 0 (WorldObject): The world object to attempt to select.
Example: http://www.virindi.net/junk/select.jpgactiontryuseitem[1]
Parameter count: 1
Param 0 (WorldObject): The world object to attempt to use.actiontryapplyitem[2]
Parameter count: 2
Param 0 (WorldObject): The world object to use first.
Param 1 (WorldObject): The world object to be used on.actiontrygiveitem[2]
Parameter count: 2
Param 0 (WorldObject): The world object to give.
Param 1 (WorldObject): The world object to be given to (ie. player or NPC).actiontryequipanywand[0]
Parameter count: 0
actiontrycastbyid[1]
Parameter count: 1
Param 0 (Number): The spell ID to cast.actiontrycastbyidontarget[2]
Parameter count: 2
Param 0 (Number): The spell ID to cast.
Param 1 (WorldObject): The object to target with the spell.chatbox[1]
Parameter count: 1
Param 0 (String): The string to send.chatboxpaste[1]
Parameter count: 1
Param 0 (String): The string to send.statushud[2]
Parameter count: 2
Param 0 (String): The key
Param 1 (String): The valuestatushudcolored[2]
Parameter count: 3
Param 0 (String): The key
Param 1 (String): The value
Param 2 (String): The color, in RGB number format. For example, pure red is 16711680 (0xFF0000).uigetcontrol[2]
Parameter count: 2
Param 0 (String): The window name.
Param 1 (String): The control name.uisetlabel[2]
Parameter count: 2
Param 0 (ViewControl): The control object.
Param 1 (String): The label text.isfalse[1]
Parameter count: 1
Param 0 (Any): The object to examineistrue[1]
Parameter count: 1
Param 0 (Any): The object to examineiif[3]
Parameter count: 3
Param 0 (Any): The object to examine
Param 1 (Any): What to return if the first parameter is true.
Param 2 (Any): What to return if the first parameter is not truerandint[2]
Parameter count: 2
Param 0 (Number): Minimum
Param 1 (Number): Maximum
Example:
Randint[0,2] will return 0 or 1, but never 2.
Randint[5,10] will return 5, 6, 7, 8, or 9, but never 10.cstr[1]
Parameter count: 1
Param 0 (Number): The number to convertstrlen[1]
Parameter count: 1
Param 0 (String): The string to examinegetobjectinternaltype[1]
Parameter count: 1
Param 0 (Any): The object to examinecstrf[2]
Parameter count: 2
Param 0 (Number): The number to convert
Param 1 (String): The format string to use. See: http://msdn.microsoft.com/en-us/library/kfsatb94.aspxstopwatchcreate[0]
Parameter count: 0
Example: http://www.virindi.net/junk/stopwatch.jpgstopwatchstart[1]
Parameter count: 1
Param 0 (Stopwatch): The stopwatch to startstopwatchstop[1]
Parameter count: 1
Param 0 (Stopwatch): The stopwatch to stopstopwatchelapsedseconds[1]
Parameter count: 1
Param 0 (Stopwatch): The stopwatch to querycnumber[1]
Parameter count: 1
Param 0 (String): The string to convertfloor[1]
Parameter count: 1
Param 0 (Number): The numberceiling[1]
Parameter count: 1
Param 0 (Number): The numberround[1]
Parameter count: 1
Param 0 (Number): The numberabs[1]
Parameter count: 1
Param 0 (Number): The numberObject Properties
ObjectClass | |
Unknown | 0 |
MeleeWeapon | 1 |
Armor | 2 |
Clothing | 3 |
Jewelry | 4 |
Monster | 5 |
Food | 6 |
Money | 7 |
Misc | 8 |
MissileWeapon | 9 |
Container | 10 |
Gem | 11 |
SpellComponent | 12 |
Key | 13 |
Portal | 14 |
TradeNote | 15 |
ManaStone | 16 |
Plant | 17 |
BaseCooking | 18 |
BaseAlchemy | 19 |
BaseFletching | 20 |
CraftedCooking | 21 |
CraftedAlchemy | 22 |
CraftedFletching | 23 |
Player | 24 |
Vendor | 25 |
Door | 26 |
Corpse | 27 |
Lifestone | 28 |
HealingKit | 29 |
Lockpick | 30 |
WandStaffOrb | 31 |
Bundle | 32 |
Book | 33 |
Journal | 34 |
Sign | 35 |
Housing | 36 |
Npc | 37 |
Foci | 38 |
Salvage | 39 |
Ust | 40 |
Services | 41 |
Scroll | 42 |
CombatPet | 43 |
NumObjectClasses | 44 |
getcharintprop | |
Species | 2 |
ContainerSlots | 7 |
BurdenUnits | 5 |
TotalValue(pyreal) | 20 |
SkillCreditsAvail | 24 |
Level | 25 |
Rank | 30 |
Deaths | 43 |
DateOfBirth(unix) | 98 |
Gender | 11 |
Age(seconds) | 125 |
XPForVPReduction | 129 |
ChessRank | 181 |
Heritage | 188 |
FishingSkill | 192 |
TitlesEarned | 262 |
SocRibbonCount(CH) | 287 |
SocRibbonCount(WEB) | 288 |
SocRibbonCount(RB) | 289 |
MeleeMastery | 354 |
RangedMastery | 355 |
SummoningMastery | 362 |
Augmentations | |
Reinforcement of the Lugians | 218 |
Bleeargh's Fortitude | 219 |
Oswald's Enchantment | 220 |
Siraluun's Blessing | 221 |
Enduring Calm | 222 |
Steadfast Will | 223 |
Ciandra's Essence | 224 |
Yoshi's Essence | 225 |
Jibril's Essence | 226 |
Celdiseth's Essence | 227 |
Koga's Essence | 228 |
Shadow of the Seventh Mule | 229 |
Might of the Seventh Mule | 230 |
Clutch of the Miser | 231 |
Enduring Enchantment | 232 |
Critical Protection | 233 |
Quick Learner | 234 |
Charmed Smith | 236 |
Innate Renewal | 237 |
Archmage's Endurance | 238 |
Enhancement of the Blade Turner | 240 |
Enhancement of the Arrow Turner | 241 |
Enhancement of the Mace Turner | 242 |
Caustic Enhancement | 243 |
Fiery Enhancement | 244 |
Icy Enhancement | 245 |
Storm's Enhancement | 246 |
Infused Creature Magic | 294 |
Infused Item Magic | 295 |
Infused Life Magic | 296 |
Infused War Magic | 297 |
Eye of the Remorseless | 298 |
Hand of the Remorseless | 299 |
Master of the Steel Circle | 300 |
Master of the Focused Eye | 301 |
Master of the Five Fold Path | 302 |
Frenzy of the Slayer | 309 |
Iron Skin of the Invincible | 310 |
Jack of All Trades | 326 |
Infused Void Magic | 328 |
InfusedVoid | 328 |
Luminance/Ratings | |
AuraValor | 333 |
AuraProtection | 334 |
AuraGlory | 335 |
AuraTemperance | 336 |
AuraAetheria | 338 |
AuraManaFlow | 339 |
AuraManaInfusion | 340 |
AuraPurity | 342 |
AuraCraftsman | 343 |
AuraSpecialization | 344 |
AuraWorld | 365 |
HealBoost Rating(armor/jewelry) | 376 |
Vitality Rating(armor/jewelry) | 379 |
Total DmgRating | 307 |
Total DmgResist | 308 |
Total CritDmg | 314 |
Total CritDmgResist | 316 |
Total DmgResist from Lum (nali + seer) | 334 |
Total CritDmgResist from Lum (nali + seer) | 336 |
getcharquadprop | |
TotalExperience | 1 |
UnassignedExperience | 2 |
LuminancePointsCurrent | 6 |
getcharstringprop | |
Name | 1 |
Title | 5 |
FellowshipName | 10 |
MonarchName | 21 |
Patron | 35 |
DateBorn | 43 |
MonarchyDescription | 47 |
Skill IDs | |
Melee Defense | 6 |
Missile Defense | 7 |
Arcane Lore | 14 |
Magic Defense | 15 |
Mana Conversion | 16 |
Item Tinkering | 18 |
Assess Person | 19 |
Deception | 20 |
Healing | 21 |
Jump | 22 |
Lockpick | 23 |
Run | 24 |
Assess Creature | 27 |
Weapon Tinkering | 28 |
Armor Tinkering | 29 |
Magic Item Tinkering | 30 |
Creature Enchantment | 31 |
Item Enchantment | 32 |
Life Magic | 33 |
War Magic | 34 |
Leadership | 35 |
Loyalty | 36 |
Fletching | 37 |
Alchemy | 38 |
Cooking | 39 |
Salvaging | 40 |
Two-Handed Combat | 41 |
Void | 43 |
Heavy Weapons | 44 |
Light Weapons | 45 |
Finesse Weapons | 46 |
Missile Weapons | 47 |
Summoning | 54 |
Examples
Test for proximity to any portal:
coordinatedistancewithz[wobjectgetphysicscoordinates[wobjectfindnearestbyobjectclass[14]],getplayercoordinates[]]<5
Check if you have any Aged or Durable Legendary Keys in your inventory:
getobjectinternaltype[wobjectfindininventorybynamerx[\^\(Aged\|Durable\) Legendary Key\$]]==7
Check if there is any object currently selected:
getobjectinternaltype[wobjectgetselection[]]==7
Save the selected items name in a variable:
setvar[keyName,wobjectgetname[wobjectgetselection[]]]
Combine items in inventory by name:
actiontryapplyitem[wobjectfindininventorybyname[itemName], wobjectfindininventorybyname[itemName]]
Combine items in inventory by template type:
actiontryapplyitem[wobjectfindininventorybytemplatetype[#],wobjectfindininventorybytemplatetype[#]]
Where # is the template type number. Use wobjectgettemplatetype[wobjectgetselection[]] to obtain the template type number from an object.
Select item in inventory by name:
actiontryselect[wobjectfindininventorybyname[itemName]]
Select Nearest Monster:
actiontryselect[wobjectfindnearestmonster[]]
Select World Object by ObjectClass:
actiontryselect[wobjectfindnearestbyobjectclass[#]] -- Where # is the object class
Select Nearest Vendor:
actiontryselect[wobjectfindnearestbyobjectclass[25]]
Select Nearest NPC:
actiontryselect[wobjectfindnearestbyobjectclass[37]]
Use Nearest Vendor:
actiontryuseitem[wobjectfindnearestbyobjectclass[25]]
Use Nearest NPC:
actiontryuseitem[wobjectfindnearestbyobjectclass[37]]
Use Nearest door:
actiontryuseitem[wobjectfindnearestdoor[]]
Use nearest portal:
actiontryuseitem[wobjectfindnearestbyobjectclass[14]]
Use a Massive Mana Charge on yourself by name:
actiontryapplyitem[wobjectfindininventorybyname[Massive Mana Charge], wobjectgetplayer[]]
Use a Mana Stone on yourself by template type:
actiontryapplyitem[wobjectfindininventorybytemplatetype[9060],wobjectgetplayer[]]
Use inventory item by template type:
actiontryuseitem[wobjectfindininventorybytemplatetype[#]]
Check if your luminance is full (1.5mil):
getcharquadprop[6]==1500000