VR49 Macro Engine

 

Current Version: 1.86i [EARLY ACCESS VERSION!]

Update v1.86i [EAV]: Fixed bug caused by prior update that prevented multi-key poses and weapon actions from working properly.

Update v1.86h [EAV]: Fixed error of ==[USE] command allowing to fire even though conditions are not met, in the instances where multi-key features are used!
Implemented a better multi-key logistic checking system!

Update v1.86e [EAV]: Added a [Cancel] button to the auto-load for when you don't want to use the auto-load feature.

Update v1.86e [EAV]: Made it so that non-requested RPers don't see the auto-load interface.

Update v1.86d [EAV]: Added auto-load feature for RPers!  On request, RPers can ask to have their script peer-reviewed into the Macro Engine app so that the engine may auto-load the entire script the moment they step on it!

 

You can make a list of users in your script that you want to permanently block interactions with.  Scroll down in the manual for instructions on how to add it to the script. 
( Works only through importing via script! )

Current Default Distance Setting: 10 meters

 

This software covers a variety of abilities. I will section these features in manuals according to how they are meant to be used; However, you can find other uses for this software as you read the manuals and discover all of its abilities, and apply it for your own pleasures.

This software comes with these manuals:
0] The Flash Interface [ Available ]
1] The Keyboard and Trigger Binding [ Available ]
2] DJ Combo Trigger Binding and Delays [ Un-documented but Available ]
3] Animation and Pose Layering [ Un-documented but Available ]
4] The RPG System (Real-Time) [ Available ]
Coming Soon] The RPG System (Turn-Based)
Coming Soon] A.I. & NPC Spawning

Note: To use features of the Flash software that aren't documented in the manual, send me an inbox requesting instructions.
Current features available with the RPG system [ v1.34+ ]:
- Ability to interact with one or more other avatars. Your custom action causes their custom reaction.
- Ability to dodge/block/cover from interactions of other avatars
- Ability to customize multiple movements of avatars with one button
- Ability to run out of ammunition on ranged weapons
- Inability to use items that are considered holstered on your avatar until drawn-out from inventory
- Ability to lose or gain health defined in the Macro Engine
- Comes with Flash Chat-System
- Ability to check [ Events ] window for a diagnosis of your avatar's current health, ammunition, status and overall situation
- Ability to stun/daze opponents
- Inability to fire any buttons if your endurance is 0%
- Distance detection! Your ability to hit the target now depends on the range of your weapon!
- Pre-made scripts selectable in the flash interface, ready to play!
+ Much much more!

 

Engine-Compatible Combat Products!

Must-Have Action Pack made by Dnutt20X6!

UPDATE:  Engine will get ported from Flash to IMVUnity! Check out some of the early-stage demos!

 

 


[0] The Flash Interface

Most Flash furniture products on IMVU work with only the mouse and for a reason: There are steps that a user needs to take in the IMVU client to allow Flash to work with the keyboard as well. This Flash product relies heavily on keyboard events.

To free up keyboard control from IMVU and hand it over to the Flash app:

1) Click the comic-book bubble icon, located first from left on the bottom-center toolbar of your IMVU interface.
2) Click anywhere on the Flash interface.

When you do so, you tell IMVU with your mouse that you give keyboard control priority to the flash furniture product and take away keyboard control from typing on IMVU. As soon as you click anywhere off-Flash you lose keyboard control from Flash and give it back to IMVU. This could be the most common reason for your button presses, after binding your triggers, not to work.
 

 

 

 



[1] The Keyboard and Trigger Binding


This is the foundation feature of this Flash app. Here, you will learn:

- How to bind a trigger to a button on your keyboard.
- How to delete a bind you made from the list of binds.
- How to Save(Export) and Load(Import) your set of bound buttons for storage and for later use.

First, check the name of the trigger you want to use on your outfit. Lets say it's called jump1. It makes your avatar jump. We want to bind it to, lets say, the button J on your keyboard. To bind this trigger:

1) Click [Add] button. A text box pops up.
2) Type in the trigger jump1 into the text box. Notice that as you type, the button [Macro] pops up.
3) Click the [Macro] button. Another box pops up.
4) Press the button J. Notice that <J> becomes marked in the box that popped up earlier. The text-box [Target] and [Delay] pop up, as well as the button [Save?]. Click [Save?] to finalize the process. [Target] and [Delay] will be covered manual [2].

You can now activate the trigger jump1 with J, provided you have such a trigger in your outfit or anywhere in the room. To save triggers you need to click the (Log) button. Notice that, when you do, your trigger is displayed.

1) Click the (Log) button. It opens another interface, also drag-able.
2) Click (Export|. A [YES] and [NO] button will pop up on the side of the [Log]. Notice we have:

Key: <J> [Trigger: jump1 ] Delay: 20ms

This is the READABLE data. This is not the data that you should be saving. You need the RAW data. The RAW data for <J> would look like this:

|1>74 |2>106 |3>jump1 |4>20 <5><

The RAW data is achieved by clicking [YES]. So the final step is:

3) Click [YES]. The RAW data will appear. Select it all with shortcut key CTRL+A.
Copy it from Flash app with shortcut key CTRL+C.
Paste it to a text file you have ready with shortcut key CTRL+V.

That's the data you will be using when you want to [Import]/[Export] to use it in other places you travel in IMVU. This data is saved to a .txt file on your computer by you, manually; It is just text that the flash app translates into usable and then READABLE data for you to check up in the [Log]. You've now saved your trigger script.

To use this script:

1) Click the (Log) button to open the interface if it isn't already open.
2) Click |Import).
3) Copy the script from your text file and paste it with the shortcut key CTRL+V into the space provided in the Log. Click [YES] to confirm.

The Log will then present readable data for you to see and use. You can now play with your trigger!

v1.59: Alternatively, you can use the naming convention given to bind keys much more conveniently!  Instead of typing the keyCode in the |1> keyword you can type the name of the key!
Here is the list of keys and their names that the engine can understand:

The key name shift is the keyCode = Keyboard.SHIFT;
The key name ctrl OR The key name control is the keyCode = Keyboard.CONTROL;
The key name space OR The key name spacebar OR The key name space-bar is the keyCode = 32;
The key name capslck OR The key name capslock OR The key name caps-lock OR The key name caps is the keyCode = 20;
The key name tab is the keyCode = 9;
The key name enter OR The key name return is the keyCode = 13;
The key name backspc OR The key name backspace OR The key name back-space is the keyCode = 8;
The key name OR The key name backslash OR The key name back-slash is the keyCode = 220;
The key name // OR The key name slash OR The key name divide is the keyCode = 191;
The key name . OR The key name dot is the keyCode = 190;
The key name , OR The key name comma is the keyCode = 188;
The key name ; OR The key name semicolon OR The key name semi-colon is the keyCode = 186;
The key name ] is the keyCode = 221;
The key name [ is the keyCode = 219;
The key name - OR The key name minus is the keyCode = 189;
The key name = OR The key name equals is the keyCode = 187;
The key name ' OR The key name apostrophe is the keyCode = 222;
The key name insert is the keyCode = 45;
The key name delete OR The key name del is the keyCode = 46;
The key name home is the keyCode = 36;
The key name end is the keyCode = 35;
The key name pageup is the keyCode = 33;
The key name pagedown is the keyCode= 34;
The key name numlock is the keyCode = 144;
The key name num/ is the keyCode = 111;
The key name num* is the keyCode = 106;
The key name num+ is the keyCode = 107;
The key name num. is the keyCode = 110;
The key name num0 is the keyCode = 96;
The key name num1 is the keyCode = 97;
The key name num2 is the keyCode = 98;
The key name num3 is the keyCode = 99;
The key name num4 is the keyCode = 100;
The key name num5 is the keyCode = 101;
The key name num6 is the keyCode = 102;
The key name num7 is the keyCode = 103;
The key name num8 is the keyCode = 104;
The key name num9 is the keyCode = 105;
The key name f1 is the keyCode = 112;
The key name f2 is the keyCode = 113;
The key name f3 is the keyCode = 114;
The key name f4 is the keyCode = 115;
The key name f5 is the keyCode = 116;
The key name f6 is the keyCode = 117;
The key name f7 is the keyCode = 118;
The key name f8 is the keyCode = 119;
The key name f9 is the keyCode = 120;
The key name f10 is the keyCode = 121;
The key name f11 is the keyCode = 122;
The key name f12 is the keyCode = 123;
The key name sclock OR The key name scrolllock OR The key name scroll-lock is the keyCode = 145;
The key name pause is the keyCode = 19;
The key name up is the keyCode = 38;
The key name left is the keyCode = 37;
The key name right is the keyCode = 39;
The key name down is the keyCode = 40;
The key name q is the keyCode = 81;
The key name w is the keyCode = 87;
The key name e is the keyCode = 69;
The key name r is the keyCode = 82;
The key name t is the keyCode = 84;
The key name y is the keyCode = 89;
The key name u is the keyCode = 85;
The key name i is the keyCode = 73;
The key name o is the keyCode = 79;
The key name p is the keyCode = 80;
The key name a is the keyCode = 65;
The key name s is the keyCode = 83;
The key name d is the keyCode = 68;
The key name f is the keyCode = 70;
The key name g is the keyCode = 71;
The key name h is the keyCode = 72;
The key name j is the keyCode = 74;
The key name k is the keyCode = 75;
The key name l is the keyCode = 76;
The key name z is the keyCode = 90;
The key name x is the keyCode = 88;
The key name c is the keyCode = 67;
The key name v is the keyCode = 86;
The key name b is the keyCode = 66;
The key name n is the keyCode = 78;
The key name m is the keyCode = 77;
The key name ~ OR The key name tilde is the keyCode = 192;
The key name one is the keyCode = 49;
The key name two is the keyCode = 50;
The key name three is the keyCode = 51;
The key name four is the keyCode = 52;
The key name five is the keyCode = 53;
The key name six is the keyCode = 54;
The key name seven is the keyCode = 55;
The key name eight is the keyCode = 56;
The key name nine is the keyCode = 57;
The key name zero is the keyCode = 48;


That said, you can write a line like this: |1>74 |2>106 |3>jump1 |4>20 <5><

Or you can write that same line like this: 1>J |2>0 |3>jump1 |4>20 <5><

The engine converts all characters to lower-case, which means that your key name does not have to be case-sensitive.

The |2> keyword:
The |2> keyword compares the weapon name within its key set and if it matches, fires only those lines associated with that weapon name. This is designed so that you can bind the attacks/abilities of multiple weapons into one key! Here’s an example:
|1>G |2>Gun |3>gunshot2 |4>20 <5><
|1>G |2>Gun |3>==[R]Gun:10,10,D,1-5m |4>20 <5><
|1>G |2>Knife |3>knifestab1 |4>20 <5><
|1>G |2>Knife |3>==[M]Knife:H,0.7m |4>20 <5><

In this example above, the Gun is currently Drawn out. We named our |2> keywords: Gun and Knife to match the weapon names of the ==[M] and ==[R] lines. If you pressed G to fire, all the lines with |2>Gun in it would activate and all the other lines of the G key will be ignored/skipped in execution.

New! [Button] mode! If toggled ON, all your key commands will transform into buttons and generate on the screen!  Align them as you see fit and click away! The |2> keyword is used in this case to name the keys as you see fit! Also, if you add (-) to the |2> keyword like this example:
|2>[Swing Left] (-)
It will cause the engine to ignore creating a button for this line!

New! |W> and |O> keywords! The |O> keyword generates when you export a script and saves your current outfit layout.  If you were the newly generated script, it would make your avatar wear the outfit layout saved in it.  If you dont want to use it, just delete the |O> line.
The |W> allows you to add your own product IDs of products you want to wear.  It's a sepparate line from the |O> keyword.  These keywords only take spaces and numbers (productIDs) and are closed by the < bracket. Examples:
|W>
6052209 18692593>
|O>8450679 6860651 18690459<

If you were to add these two lines at the bottom of your script, they would import all the PIDs associated inside the brackets, from both statements.

 

[Pre-Made] Interface:

The [Pre-Made] button in the engine consists of already made and usable scripts bound to specific product ids from the IMVU shop.  All the products used and the developers that made them are listed  in the [Pre-Made] on this page.  This button opens up a menu that has various sub-menus that list categories by type or developer.  Simply select which category you want to use and then which item;  Then, select one of the available targets in the list of users also logged into the widget to interact with them using the items you selected!
Alternatively, the [Pre-Made] scripts that load after your selection come with the default keyboard bind, Tab, which allows you to cycle through all the players connected to the Macro Engine in the room.
 

 

[TECHNICAL DOCUMENT OVERVIEW] This document will be transformed to a more consumer-friendly readable form in the future.
 

ACTION/REACTION: Simple Avatar Interaction.   This does not require the RPG System.  It just gives simple customizable non-distance-detecting interaction back and forth between avatars.

1] The ==LOOP[ ]: forces an entire set bound to the same key to loop over the set interval determined by it's command's delay time setting.
Ex: ==LOOP[5]

2] The ==ACTION: command is bound to a trigger set.  When executed, the number stated after the colon is looked for in the ==REACTION: command set of the targeted avatar.
Example: ==ACTION:42
In this example the command is set to activate the ==REACTION:42 command on the target avatar. When the key-set is pressed which executes the trigger and this ==ACTION, the ==REACTION will commense ONLY if they match numbers, which in this case is 42.

3] The ==REACTION: command is bound to a trigger set.  It is automatically executed when another avatar activates the ==ACTION: command with the same number after the colon as the one you stated in your reactive command.
Example: ==REACTION:42
In this example the command is activated from the other avatar's ==ACTION:42 command onto your avatar. It auto-activates for you the key and trigger bound to the set which has the ==REACTION command number ONLY if they match numbers, which in this case is 42.

4] The ==NEXT:TARGET== allows you to cycle through all the users connected to the flash widget.  This command cycles in incrementing order, beginning to end of array, then repeats.  Bind this command to a button then press that button to cycle through players.

5] The ==PREV:TARGET== allows you to cycle through all the users connected to the flash widget.  This command cycles in decrementing order, end to beginning of array, then repeats.  Bind this command to a button then press that button to cycle through all the previous players.

In summary these commands are all you need to work with simple multiplayer action/reaction interactions with the Macro Engine.  For utilizing game-play dynamics and features of the RPG system, read bellow.

6] The ==SAY: allows your avatar to speak what is said after the semicolon in place. Ex:
==SAY: Hello world!
The output will be: Hello world!

7] The ==NARRATE: allows your avatar to narrate what it is doing.  Ex:
==NARRATE: has moved an object.
The output will be: AvatarName has moved an object.

8] The ==[DR] allows a random modular room to load with a random item inside it, designed for RPG dungeon room and furni randomized generation!  Example:
==[DR]28838129, 28825687: 28846438, 28809596
The above example will spawn a modular room with pid 28838129 or 28825687 and one of the the items: 28846438 or 28809596.  You can put as many diff variations as you want, as long as you put commas and separate the rooms from the items with the colon symbol.

9] The ==[ROLL] allows the rolling of dice to be outputed to chat for table-top games!  Here's an example of what to write:
==[ROLL]4d20
The above example will chat out the total of rolling 4 dice with 20 sides on each dice.

10] The ==[RANDOMIZE] reads all the names you inputed in it, sepparated by commas, then searches every line in script for |2> keywords, and matches the naming from the keyword to the name inputed in the command, and activates/fires one of them,  randomly.  If you want to increase chance of one of these firing more often, then you write more of them, sepparated by commas. Usage example:
==[RANDOMIZE]Bob,Marcy,[Left Button],Daryl,Bob,Springer,Bob,Bob

11] The ==[REMOVE] command removes PIDs one by one at a given interval, in descending order, sepparated by commas, following a delay between them, sepparated by a colon. Example:
==[REMOVE]24195145 29080243 21334190 18792100 28969123 28968724 23748029:600

Above example activates REMOVE command which slowly deletes the given PIDs in a room, starting from 23748029 and ending with 24195145 at 600ms per each PID.

12] ==NEXT:TEAM== and ==PREV:TEAM== work in conjunction with |TEAM> keyword, in which it filters avatar targets only from the targeted team.
So if you were to write |TEAM>Hardcore< at the end of your script, and activate either of the team next/prev commands above, it will look at available multiplayer teams and select one.  If none are applicable it will select team Hardcore or none (aka un-signed team, default).

New! 13] ==TARGET:SELF== is a convenient command to set yourself as a target immediately upon activation, rather then cycle next/prev target commands until you find yourself.  Useful for healing yourself or setting self-auras, protection spells, etc..

New! 14] ==[OUTFIT] is a convenient command to list all PIDs in chat so you can share them.  Useful for handing info quickly over to your scripting partner.

New! 15] ==TARGET: allows you to specify the exact IMVU username of the player so you can specifically target them, on demand, on button press.
Ex: ==TARGET:Ivan==
 


4] The RPG System (Real-Time)

1] Using the ==CONNECT== keyword, you can force animations to play out on avatars in a room that you've targeted accordingly in the script or while adding a command in the VR49:M interface. The end-time on the delay set on this command is when the command communicates to the other avatar. The user is responsible for designing their script with delays suitable for the trigger animations being used.  Along with this command you can now layer different types of attacks.  This is their list and what they do:
UNCOVER: This command allows you expose enemy targets through their cover fire.
DAZE: This command allows you to stun an target for a period of time set by them in their script,  opening them up for combo attacks!
HEAL: This command allows you to heal a target for a random value (Note: In future versions, you will be able to configure the heal amount).
REVIVE: This command allows you to revive a target back to 1% health and enables them to control their avatar once more!
KNOCKBACK:Xm: This command allows you to knock-back a target while you hit them.  The X value is where you write the number for how far you want the target to get knocked back from you.  You close it with the m character.
POSSESS: This command allows you to take control of a target for a specific duration of time.  It holds 2 necessary properties: a type and a duration period.  The types that can be used are currently only the property called PARTIALLY, allowing partial possession, which means you control your target and yourself for the duration period, specified in milliseconds (ms).
Example: ==CONNECT:POSSESS:PARTIALLY:4000ms
When you've successfully attacked your target with the key bound to this command, you are able to control your target as well as yourself for the specified duration of 4000 milliseconds.

Here are some examples of how to layer the CONNECT commands together:
==CONNECT:UNCOVER:DAZE==
==CONNECT:KNOCKBACK:4m
==CONNECT:DAZE:HEAL==
==CONNECT:REVIVE==
==CONNECT:UNCOVER:DAZE:HEAL:KNOCKBACK:21m
(In case you wanted to activate everything lol)

2] The ==CONNECT== keyword plays the button combinations that have these keywords in them:
==HIT==
The ==CONNECT== statement chooses randomly a HIT command and plays it out. The target is responsible for including the statement for reacting to actions of their attackers in their script.  Leaving the delay default to 20ms (shortest) is recommended. Delays set on this keyword prevent your avatar from getting hit again for the duration of the delay. During the duration of the delay it also prevents you from activating any buttons because you are in the process of getting hurt.

3] The ==COVER== keyword protects the avatar from exposure to all attacks of the ==CONNECT== keyword. It does not protect from the ==CONNECT:UNCOVER== keyword. The ==COVER== keyword is meant to be used with trigger actions that make the avatar look like he is taking cover, either by prone-ing, crouching, ducking, or standing behind a wall. You are considered covered until you fire a trigger. When you fire a trigger you automatically expose yourself until the ==END== duration of your trigger, where you go back to being covered. Setting a delay on this means that you start being covered only the end of the delay.

4] The ==IDLE== keyword does the opposite of the ==COVER== keyword; It exposes you permanently again to being fired upon, until a ==COVER== button is once again activated. This is used for aiming, standing idly or resting avatar poses.

5] ==BLOCK== keyword is a guaranteed defensive command that blocks an interaction from another avatar. You are immune to attacks for the duration of the delay set on this command. It is stronger then the ==CONNECT== and ==CONNECT:UNCOVER== commands initiated by the attacker. The block command runs for the duration of the delay set. During this duration the ==BLOCK== transforms into ==BLOCKING== which means that it is in effect. The buttons bound to the ==BLOCK== keyword show up in the Events page for the user to know if the block is being used or if it is in transition of ==BLOCKING==. Animation triggers that look like you are blocking/dodging/dealing against the attacker's attack are designed to work with this command. This command works best with the optional command, ==BLOCKED==.

6] ==BLOCKED== is a keyword that automatically gets used in your script whenever you have successfully blocked an attack. It is a command that is designed to work with animation triggers that look like your avatar is reacting to a successful disable of the attacker's attempted attack. If your script has ==BLOCKED== bound to a button trigger combo while you are considered covered in the Events window, then it plays out every time you are considered under attack. With the cover mode, this is best used in situations where you are exposed to fire but are defending with a shield or in a defensive idle animation mode. With the block mode, this is best used to parry or defend yourself from an attack and play out the reacting element of successfully blocking the attack. It is not necessary to put any delays on the ==BLOCKED== keyword.

7] ==END== is a cool-down keyword that applies a cool-down period set by the delay. This disables you from spamming attacks until the delay is done; A self-inflicted rule, optional but recommended. It prevents animations overlaying that you do not want to overlay and insures proper sequencing of combo attacks during game-play. The delay set on ==END== should always be either as long as the longest delay line for the specific keyword or trigger set, or longer. The order in which you set your lines in doesn't matter but the delay does.
Simmilarily, if you used ==END:PRIORITY== instead, it would execute the set bound to the key of this command and any sets that damage or cause a reaction on the character (==HIT1==,==HIT2==...., ==DAZED==, ==KO==) should you get hit or finished off, during a ==END:PRIORITY== execution.

8]==KO== is the keyword that activates when your health reaches 0.  You become incapacitated and unable to move until you import a script again through the Log.  The delay set on this loops the set for the button the ==KO== is bound to until you either reset the script using the [ Import ] feature in the Log.  You will also notice that in the Events page you are listed as KNOCKED OUT which prevents you from firing absolutely any triggers other then the ==KO== one.  It is recommended that you bind the trigger with the ==KO== command with an animation that persistently keeps your avatar on the floor and set the delay of the ==KO== command to be as long as that animation for best visual effect.12] ==DAZED== is the keyword that activates when you are hit with a ==CONNECT:DAZE== or ==CONNECT:UNCOVER:DAZE== command from an opponent targeting you.  The animation plays out that is bound to this set command for the duration of the delay, setting you as DAZED in the Events window.  You are unable to execute attacks and commanded sets but you are still able to be attacked and hurt.  The ==DAZED== command does not damage your health.

9] ==HEAL== is the keyword that activates when you are hit with a ==CONNECT:HEAL== keyword.  It animates whatever trigger is set with the ==HEAL== keyword and restores a random amount of health to the avatar.  You cannot heal KNOCKED OUT avatars nor can you heal yourself if KOed.

10] ==REVIVE== is required to be implemented in an avatar's script in order for them to get successfully revived by someone else.  It follows the same principle as the ==HEAL== command only the ==REVIVE== command is the only command that can push through a KNOCKED OUT state, provided someone else has activated their ==CONNECT:REVIVE== set on you.

11] Blocking users from interacting with you.  This can only be done from the script-side.  You would have to go to the [Log] and |Import) a script that has this command:
Example: |B>TomJones<
In this example the user, TomJones, has been blocked. Now you cannot receive any more interactions from that user. This is useful in instances where a user spams or abuses the Macro Engine, which is very easy to do provided with the freedom it gives and the capabilities. There are two ways to stop user interactions:
1] Keep your mouse on either the Chat window or the Log window. Notice your Events window will declare your avatar as IMMOBILE. That is the fastest way to block ALL user interaction on your from other users, but it starts again as soon as you move the mouse out of either window. To block multiple users, simply put:
Example:
|B>TomJones<
|B>JohnDoe<
|B>Bob<
|B>Sally<
|B>John<


At the bottom of your script. Now you have effectively blocked interactions with all the users listed in-between the |B>< command.

12] Setting the default distance between all targets.  This can only be done from the script-side.  You would have to go to the [Log] and |Import) a script that has this command:
Example: |DFT>50<
In this example you set the range for all your targets to be at 50 meters (metric). This is useful for setting distances and ranges for custom battles with custom scripts.

13] ==INV:NEXT== & ==INV:PREV== are commands that allow you to conveniently cycle through your weapons or inventory slots.  After writing your script with your weapon preferences and triggers, bind button(s) to one or both of these commands and press it!  The weapons will cycle in selection onto your avatar, corresponding to the triggers and properties you've set for your weapons in your script.  +New! They also now allow you to use attack keys that are on the same bind as another attack, by detecting the |2> keyword when it is named the same!
Example:
|1>R |2>Hammer Left |3>==[M]Hammer Left:H,1m |4>20 <5><
|1>R |2>Hammer Left |3>a1 |4>20 <5><
|1>R |2>Hammer Right |3>==[M]Hammer Right:H,1m |4>20 <5><
|1>R |2>Hammer Right |3>a2 |4>20 <5><

If ==INV:NEXT== or ==INV:PREV== cycles into any of these hammers, the R key will only use the sets named according to the un-holstered hammer!  The draw and holster command sets also have to be configured however, in advance.  the INV command will simply detect them once set!

14] ==[GIVE] command allows you to give a specific value of a stat off your Avatar and onto another players.  It's followed by a stat name then the value then the meter range number, in this format: ==[GIVE] Stat name:value:Rangem (PID number)
Example: ==[GIVE]Gold:100:1m (17687431)
In this example you are giving 100 gold to a targeted avatar, if they are within 1 meter of range to receive it.  If they also own the PID product 17687431, then the product will get removed from your avatar and be attempted to be worn on targeted avatar, thus simulating that you've given the target avatar something.  Works only with accessory product IDs.
This command is designed to be used with the interactive trigger script.

15] ==[USE] command allows you to write specific requirements, stat-wise, for being able to activate an ability.  The command checks if the stat is available (and in the quantity required) before it deducts it from your stat total of that type.  If you do not meet the requirement, the command prevents you from executing the key it is bound to (much like the ranged command when your ranged weapon is out of ammunition).
Example: ==[USE]Stamina:10,Mana:5==
In this example the command requires you to have at least 10 of Stamina and 5 of Mana in your Avatar stats pool in order to let you use all the features associated with the button it is bound to.  If you meet these requirements it will deduct -10 from your Stamina and -5 from your Mana.  Both stats need to meet requirements in order to be deducted and allow you to use the key the command is bound to, for executing actions.  You can stack more stat requirements by using a , (comma) to separate more stat requirements and a == to finish the list of stats to use.

16] ==[REQ] command does the same thing as ==[USE] command, except it does not subtract stats as it's doing it.  This command just simply checks if the requirements are met, and if not, disables the entire ability bound to that button set from happening.  The example of syntax is the same as the ==[USE] command above, except you would write ==[REQ] instead of ==[USE].

17] ==[GET] works similar to ==[REQ] except instead of checking requirements and taking stats away from your avatar...it adds stats to your avatar!
Example: ==[GET]Stamina:10,Mana:5==

18] Customizing the Combo Timer.  The combo timer is customized with the |CT> keyword.  The Combo Timer allows you to set up instances of the |S>X< keyword which cycles triggers for the value of X, in a numerical order.  The Combo Timer insures that, when no key is cycling for that combo set, the combo doesn't reset for the specified time in the |CT><.  Example: |CT>5000<
 

Keeping the mouse cursor on the Chat window or on the Log window renders your avatar IMMOBILE in the Events window.  It is a convenience feature to prevent triggers and attacks executing while you are editing settings in the Macro Engine.


>MOVEMENT OVERVIEW<
The Engine supports the ability to detect the distance between you and a certain target.  There are two movement commands that either close or create range between you and the target. The measurement is metric.  The default distance is set by the game, temporarily, to prevent de-synchronization (Check the top of the product page for current default distance).  The movement commands bellow determine if you are subtracting or adding from the default distance and they are updated to you and your targets only.  The maximum you can get close to a target is hard-wired at 0.5 meters.  That's as close as you can get to the target.  The farthest you can get away from the target is infinite.  You can also move while attacking and retreat while attacking.  If you get attacked of course, you cannot move until you get up again from being injured.

1] ==ADVANCE: is the keyword for advancing towards the target.  The command comes with one property: range in meters (Number).
Example: ==ADVANCE: 0.5m
When the command executes it advances you half a meter towards the target.  Each time you activate this command you move half a meter closer to the target, subtracting from the current distance between you and your target by the number set in the ==ADVANCE: command, timed to execute at the end of the delay set.

2] ==RETREAT: is the keyword for moving back.  The command comes with one property: range in meters (Number).
Example: ==RETREAT: 0.6m
When the command executes it retreats you 0.6 meters from the target.  Each time you activate this command you move 0.6 meters from the target, adding to the current distance between you and your target by the number set in the ==RETREAT: command, timed to execute at the end of the delay set.

3] ==TELEPORT: is a keyword for instant displacement.  The command comes with one property: range in meters (Number).
Example: ==TELEPORT: 21m
When the command executes it teleports you 21 meters from the target.  Executing this command does not increment or decrement the number but synchronizes you and your target with 21 meters of range, exactly.

 

 >WEAPONS OVERVIEW<
One can use the above commands to fight without using the commands bellow. The commands bellow are designed to set limitations in the game, for a more realistic or enjoyable experience. These commands work in accordance with the VR49: Macro Engine's RPG combat system. Setting the properties of your weapons allows you to:
- Run out of ammunition on a specific weapon
- Force you to reload to regain ammunition for the specific weapon
- Disable you to fire triggers bound to buttons on weapon that are currently considered holstered on your avatar
- Disable you to re-holster or re-draw your weapon trigger animation if you've already done so
- Share ammunition stock with other weapons
- Activate all these effects at the end of the command's delay


>RANGED COMMAND<
==[R]: This command spawns a weapon in the Events page and comes with properties required to be set. It is designed to tell the game that this avatar's script has a ranged weapon, and the current situation of that weapon.
==[R] The weapon's name (String): the maximum ammunition it can carry (Number), the current ammunition it is carrying (Number), if it is holstered or drawn-out and in the avatar's hands (H/D) and the range of the weapon (Number) ending with letter 'm' for meters to finalize command ( Metric Measurement ).  You can optionally set it to have a minimum range too, as shown bellow:
Example: ==[R] Desert Eagle .50: 7, 4, D, 0.2-100m
This ranged weapon is named Desert Eagle .50. It has a maximum cartridge of 7 bullets. It currently has 4 bullets. It is drawn out and in the avatars hands.  It has a minimum range of 0.2 meters and a maximum range of 100 meters.  If your target is 0.2 meters or closer to you, you cannot hit it.  If an attack on a target with this weapon is issued above or bellow the range  threshold, the attack will miss.


The structure of the command is as follows: ==[R]____:__,__,_,_-_m

Any button you bind the ==[R] command with, that has the same name of the weapon, uses the same ammunition stock and functions depending if the weapon is drawn out or holstered.
The ==[R] command can also be used for non-ranged weapons in scenarios where the weapon has limited durability after a certain number of uses.


>MELEE COMMAND<
==[M]: This command spawns a weapon in the Events page and comes with properties required to be set. It is designed to tell the game that this avatar's script has a melee weapon, and the current situation of that weapon.
==[M] The weapon's name (String): if it is holstered or drawn-out (H/D) and the range of the weapon (Number) ending with letter 'm' for meters to finalize command ( Metric Measurement ).  You can optionally set it to have a minimum range too, as shown bellow:
Example: ==[M] Short Sword: H, 0.5-1.4m

This melee weapon is named Short Sword. It is currently holstered on the avatar.  It has a minimum range of 0.5 meters and a max range of 1.4 meters.  If an attack on a target with this weapon is issued above or bellow the range  threshold, the attack will miss.

The structure of the command is as follows: ==[M]____:__,_-_m

Any button you bind the ==[M] command with, that has the same name of the weapon, functions depending if the weapon is drawn out or holstered. The ==[M] command can also be used for ranged weapons that have unlimited stock of ammunition.


>DRAW/HOLSTER WEAPON COMMANDS<
These commands work with ranged and melee keywords: ==[R] and/or ==[M]

==[DRW]: This command is the abbreviation of the word DRAW and changes the property of a weapon in the Events window to be drawn-out. It is designed to modify the weapon's holster/un-holster property so you can use the weapon. This command un-holsters the weapon of the same (String) name.
==[DRW] The weapon's name here==
Example: ==[DRW] Desert Eagle .50==
This command un-holsters the avatar's Desert Eagle .50 weapon. That weapon can now be fired, reloaded or used as melee by the avatar.

The structure of the command is as follows: ==[DRW]____==

Any button you bind the ==[DRW] command makes sure the weapon in the Events window is considered drawn-out and ready to be used.


==[HOL]: This command is the abbreviation of the word HOLSTER and changes the property of a weapon in the Events window to be holstered. It is designed to modify the weapon's holster/un-holster property so you can use the weapon. This command holsters the weapon of the same (String) name.
==[HOL] The weapon's name here==
Example: ==[HOL] Desert Eagle .50==
This command holsters the avatar's Desert Eagle .50 weapon. That weapon cannot be used now until un-holstered. All the trigger buttons used for that weapon are now disabled.

The structure of the command is as follows: ==[HOL]____==

Any button you bind the ==[HOL] command makes sure the weapon in the Events window is considered holstered and not ready to be used.


>RELOADING COMMAND<
This command works with the ==[R] keyword. It replenishes the Current Ammunition property of the ranged weapon by the amount set. If the amount is over the limit of the Maximum Capacity of the stock, then the amount set is forced to equal the Maximum Capacity of the weapon's stock.

==[RLD]: This command is the abbreviation of the word RELOAD and changes the property of a weapon in the Events window to replenish its ammo. It is designed to modify the weapon's current ammo capacity so that you can fire with the weapon again. This command replenishes the ammo of the weapon of the same (String) name.
==[RLD] The weapon's name here: the amount of ammo to replenish==
Example: ==[RLD] Desert Eagle .50: 7 ==
This command reloads the avatar's Desert Eagle .50 weapon's clip with 7 bullets. That weapon can now fire 7 times more.

The structure of the command is as follows: ==[RLD]____:__==

Any button you bind the ==[RLD] command makes sure the weapon in the Events window adds as much ammunition to the current stock as given in the ==[RLD] command when used.

 

Legal information and product usage guidelines:
You cannot interact with other avatars unless they have also activated themselves and their scripts and items;  Then, you have to target them in the VR49:Macro Engine and the interaction can commence.
This program is not a source for avatar violence.  All triggers used to perform interactions between avatars and all triggers listed on this product page have gone through normal peer review.  The Macro Engine cannot produce triggers out of thin air.  It can only combine them in timed execution.
This program follows a 5 step consent system on an avatar that insures an avatar cannot be forced upon unless they have voluntarily gone through the 5 step process in the Macro Engine, and those are:
1.) Step on the flash widget VR49: Macro Engine.
2.) Activate a custom script or activate a Pre-Made menu script.
3.) Wear the products that work with the scripts.
4.) Not be modifying options during interaction.  If you're modifying options while someone is trying to interact you, they will not be able to interact with you, since modifying options temporarily disable interactions done to your avatar until done.
5.) As described in the command listing and at the top of the page, you can issue a script command to block specific avatars from interacting with you, while being able to interact with other avatars.  Check out the |B> command keyword in the manual section of this page for more info on how to use this feature.

Therefore, it is virtually impossible to be engaged upon involuntarily unless you and other avatars have gone through this 5 step consent process.  It is not only a security feature, it is the only possible way you can even interact using the VR49: Macro Engine on IMVU, as designed by IMVU.