Important Safety Notes
- When using any of these macros, change variable names, dbg outputs, and as many of the commands as you can. You are putting yourself at risk if you don't do this. EAC is constantly scanning the RAM on your computer and can potentially find strings in these macros if you do not alter them.
- Speeder automatically encrypts all macros loaded into the program, so as long as you do not open your macro file while the game is open, they will be unable to scan your macros.
- Please be aware that opening a macro file in a program like notepad++.exe and then closing the tab without closing the entire program can result in the macro text remaining in the program's memory. Close the program entirely, or save yourself the headache, and make the macro(s) unique so you don't have to worry about it in the first place.
- If you design your own macros with your own variables and commands, it is perfectly fine to keep the macro file open while the game is running. These warnings only apply to people using shared macros (such as those listed below).
- Examples of what you can do to make the macro(s) unique to you:
- Change variable names like qDelay, rTimer, vKey, etc.
- Change all dbg statements like "dbg % hotbar 1" to something else or delete them entirely. They are not necessary.
- Change the commands themselves, such as "rand100,500" to "rand99,499," or perform more advanced adjustments, such as changing "rand100,500|mul % RAND,0.001" to "rand1000,5000|mul % RAND,0.0001."
- Change the order of the commands (if possible), such as "!eq % rTimer,0|ct % rTimer" to "ct % rTimer|!eq % rTimer,0."
How to Use
Copy-paste any of the below macros into your macro file (the .ini file in the same folder as config.txt) and change as much of the macro as you can for your own safety. The key to activate each macro is the number in brackets, such as [100] for NUMPAD4. You can find all virtual key codes here: Virtual-Key Codes.
Combat Macros
Hold NUMPAD4 down to have Speeder automatically use your cooldowns in 1,2,3,4,5,6,7,8,9,10,11,12 order. Feel free to adjust the lines as you see fit. This is your basic attack macro.
[100]
keys=!eq % rTimer,0|ct % rTimer|store % rTimer,0|(VAR % vKey)u|dbg % releasing (VAR % vKey)|store % vKey,0|rs50,100|gt*
keys2=!ct % rTimer|gt*
keys3=!eq % vKey,0|gt*
keys4=rand100,500|mul % RAND,0.001|store % qDelay,(VAR % RAND)
keys5=rand150,300|store % releaseDelay,(VAR % RAND)
keys6=ch1,(VAR % qDelay)|49d|dbg % hotbar 1|store % vKey,49|st % rTimer,(VAR % releaseDelay)|gt*
keys7=ch2,(VAR % qDelay)|50d|dbg % hotbar 2|store % vKey,50|st % rTimer,(VAR % releaseDelay)|gt*
keys8=ch3,(VAR % qDelay)|51d|dbg % hotbar 3|store % vKey,51|st % rTimer,(VAR % releaseDelay)|gt*
keys9=ch4,(VAR % qDelay)|52d|dbg % hotbar 4|store % vKey,52|st % rTimer,(VAR % releaseDelay)|gt*
keys10=ch5,(VAR % qDelay)|53d|dbg % hotbar 5|store % vKey,53|st % rTimer,(VAR % releaseDelay)|gt*
keys11=ch6,(VAR % qDelay)|54d|dbg % hotbar 6|store % vKey,54|st % rTimer,(VAR % releaseDelay)|gt*
keys12=ch7,(VAR % qDelay)|55d|dbg % hotbar 7|store % vKey,55|st % rTimer,(VAR % releaseDelay)|gt*
keys13=ch8,(VAR % qDelay)|56d|dbg % hotbar 8|store % vKey,56|st % rTimer,(VAR % releaseDelay)|gt*
keys14=ch9,(VAR % qDelay)|57d|dbg % hotbar 9|store % vKey,57|st % rTimer,(VAR % releaseDelay)|gt*
keys15=ch10,(VAR % qDelay)|48d|dbg % hotbar 10|store % vKey,48|st % rTimer,(VAR % releaseDelay)|gt*
keys16=ch11,(VAR % qDelay)|189d|dbg % hotbar 11|store % vKey,189|st % rTimer,(VAR % releaseDelay)|gt*
keys17=ch12,(VAR % qDelay)|187d|dbg % hotbar 12|store % vKey,187|st % rTimer,(VAR % releaseDelay)
keys18=s10
repeat=1
endkeys=dbg % stopped|store % rTimer,0|!eq % vKey,0|(VAR % vKey)u|store % vKey,0
Press F2 to have Speeder automatically target the nearest mob within 2000 distance and start attacking it. Press F2 again to stop. Speeder will use your cooldowns in 1,2,3,4,5,6,7,8,9,10,11,12 order. Feel free to adjust the lines as you see fit. If you want to use this in pvp, simply change "cnm" to "cnp" and "tcm" to "tcp."
[113]
keys=cnm1,2000|gt4
keys2=!eq % vKey,0|(VAR % vKey)u|dbg % releasing (VAR % vKey)|store % vKey,0
keys3=gt23
keys4=!it|lt-|tcm2000|gt6
keys5=lt
keys6=!eq % rTimer,0|ct % rTimer|store % rTimer,0|(VAR % vKey)u|dbg % releasing (VAR % vKey)|store % vKey,0|rs50,100|gt*
keys7=!ct % rTimer|gt*
keys8=!eq % vKey,0|gt*
keys9=rand100,500|mul % RAND,0.001|store % qDelay,(VAR % RAND)
keys10=rand150,300|store % releaseDelay,(VAR % RAND)
keys11=ch1,(VAR % qDelay)|49d|dbg % hotbar 1|store % vKey,49|st % rTimer,(VAR % releaseDelay)|gt*
keys12=ch2,(VAR % qDelay)|50d|dbg % hotbar 2|store % vKey,50|st % rTimer,(VAR % releaseDelay)|gt*
keys13=ch3,(VAR % qDelay)|51d|dbg % hotbar 3|store % vKey,51|st % rTimer,(VAR % releaseDelay)|gt*
keys14=ch4,(VAR % qDelay)|52d|dbg % hotbar 4|store % vKey,52|st % rTimer,(VAR % releaseDelay)|gt*
keys15=ch5,(VAR % qDelay)|53d|dbg % hotbar 5|store % vKey,53|st % rTimer,(VAR % releaseDelay)|gt*
keys16=ch6,(VAR % qDelay)|54d|dbg % hotbar 6|store % vKey,54|st % rTimer,(VAR % releaseDelay)|gt*
keys17=ch7,(VAR % qDelay)|55d|dbg % hotbar 7|store % vKey,55|st % rTimer,(VAR % releaseDelay)|gt*
keys18=ch8,(VAR % qDelay)|56d|dbg % hotbar 8|store % vKey,56|st % rTimer,(VAR % releaseDelay)|gt*
keys19=ch9,(VAR % qDelay)|57d|dbg % hotbar 9|store % vKey,57|st % rTimer,(VAR % releaseDelay)|gt*
keys20=ch10,(VAR % qDelay)|48d|dbg % hotbar 10|store % vKey,48|st % rTimer,(VAR % releaseDelay)|gt*
keys21=ch11,(VAR % qDelay)|189d|dbg % hotbar 11|store % vKey,189|st % rTimer,(VAR % releaseDelay)|gt*
keys22=ch12,(VAR % qDelay)|187d|dbg % hotbar 12|store % vKey,187|st % rTimer,(VAR % releaseDelay)
keys23=s10
repeat=2
endkeys=dbg % stopped|store % rTimer,0|lt-|!eq % vKey,0|(VAR % vKey)u|store % vKey,0
Press NUMPAD5 to have Speeder automatically use your cooldowns in 1,2,3,4,5,6,7,8,9,10 order only while attacking. Press NUMPAD5 again to stop.
[101]
keys=!ia|!eq % vKey,0|(VAR % vKey)u|store % rTimer,0|dbg % releasing (VAR % vKey)|store % vKey,0|gt*
keys2=!ia|gt*
keys3=!eq % rTimer,0|ct % rTimer|store % rTimer,0|(VAR % vKey)u|dbg % releasing (VAR % vKey)|store % vKey,0|rs50,100|gt*
keys4=!ct % rTimer|gt*
keys5=!eq % vKey,0|gt*
keys6=rand100,500|mul % RAND,0.001|store % qDelay,(VAR % RAND)
keys7=rand150,300|store % releaseDelay,(VAR % RAND)
keys8=ch1,(VAR % qDelay)|49d|dbg % hotbar 1|store % vKey,49|st % rTimer,(VAR % releaseDelay)|gt*
keys9=ch2,(VAR % qDelay)|50d|dbg % hotbar 2|store % vKey,50|st % rTimer,(VAR % releaseDelay)|gt*
keys10=ch3,(VAR % qDelay)|51d|dbg % hotbar 3|store % vKey,51|st % rTimer,(VAR % releaseDelay)|gt*
keys11=ch4,(VAR % qDelay)|52d|dbg % hotbar 4|store % vKey,52|st % rTimer,(VAR % releaseDelay)|gt*
keys12=ch5,(VAR % qDelay)|53d|dbg % hotbar 5|store % vKey,53|st % rTimer,(VAR % releaseDelay)|gt*
keys13=ch6,(VAR % qDelay)|54d|dbg % hotbar 6|store % vKey,54|st % rTimer,(VAR % releaseDelay)|gt*
keys14=ch7,(VAR % qDelay)|55d|dbg % hotbar 7|store % vKey,55|st % rTimer,(VAR % releaseDelay)|gt*
keys15=ch8,(VAR % qDelay)|56d|dbg % hotbar 8|store % vKey,56|st % rTimer,(VAR % releaseDelay)|gt*
keys16=ch9,(VAR % qDelay)|57d|dbg % hotbar 9|store % vKey,57|st % rTimer,(VAR % releaseDelay)|gt*
keys17=ch10,(VAR % qDelay)|48d|dbg % hotbar 10|store % vKey,48|st % rTimer,(VAR % releaseDelay)|gt*
keys18=ch11,(VAR % qDelay)|189d|dbg % hotbar 11|store % vKey,189|st % rTimer,(VAR % releaseDelay)|gt*
keys19=ch12,(VAR % qDelay)|187d|dbg % hotbar 12|store % vKey,187|st % rTimer,(VAR % releaseDelay)
keys20=s10
repeat=2
endkeys=dbg % stopped|store % rTimer,0|!eq % vKey,0|(VAR % vKey)u|store % vKey,0
Tips & Tricks
A question I often get asked is "how do I script charge attacks?" (i.e., attacks where you need to hold the button down). There are two main ways to do this, and both are quite simple.
The first is as follows:
keys19=ch8,0.3|56d|s300|ch*8,5000,1|56u|gt*
This example uses the "ch*" command to hold down the key until hotbar slot 8 goes on cooldown. Note how "s300" matches "0.3" so that the key is always held down the same amount of time before the ability is actually available (i.e., the queue delay).
The second is as follows:
keys19=ch8,0.3|56d|s300|wfa[ability ID],5000,1|56u|gt*
This example is very similar to the first but uses "wfa" instead of "ch*" to hold down the key until the attack activates. Replace "[ability ID]" with the ID of the ability you are charging. Ability IDs can be found with -displayaid or by checking out this site. Do not include the brackets. You may find this example more useful than the first if you are using an ability that does not go on cooldown (in which case, "ch*" will not work).
Finally, the "ic" (is charging) script command can be used to jump over everything in a macro if an attack is currently charging. This prevents other attacks or movement from interrupting the charging attack. Example:
keys=ic|gt*
You can put that somewhere near the top of your macro (change "keys" to the appropriate keys number), and if an attack is charging, Speeder will jump to the final line.
Using the game's memory to target entities has a lot of advantages. The major disadvantage is that you cannot visually see your target change. This can be problematic when you are targeting party members because you can lose track of whom you're targeting. One way to resolve this is to revert your target back to your original target once you have cast whatever you need to. For example:
keys=tar*|tphp0.5,1800|49d|wfa964684273|49u|te(VAR % TID)
In this example, I will target a party member whose HP is lower than 50%, cast Swift Healing, and then revert my target back to whatever I was targeting previously. By doing this, the target you visually see in the game will always match your actual target, except for the brief moment before Swift Healing is used.
Auto-Block/Dodge/Counter-Attack Macros
Even if you only care about PvP, I recommend testing the PvE auto-block macros first so that you know everything is working. The PvP auto-block is a bit more complex to set up, and it will be easier to diagnose issues if you know that the PvE one is working.
PvE
Press NUMPAD6 to have Speeder automatically block any fury attack from any mob as long as they are targeting you and are within 10000 distance. This assumes you have your block key set to the default Q (81) key. The Q key will be pressed 300 milliseconds before the attack activates. You may want to reduce/increase this depending on your ping.
I recommend trying this auto-block macro first to make sure everything is working.
Make sure you see "PvE auto-block enabled" when you press the macro key.
You may remove the "dbg % Blocking" statement once you confirm it works.
[102]
keys=!eq % msg1,1|store % msg1,1|dbg % PvE auto-block enabled
keys2=matt0,1,300,10000,-1,1|81d|store % blocked,1|dbg % Blocking|gt4
keys3=eq % blocked,1|81u|store % blocked,0
keys4=nop
endkeys=dbg % Stopped PvE auto-block|store % msg1,0
repeat=2
Press NUMPAD7 to have Speeder automatically dodge left when a wrath attack is detected. This is basically the same macro as above but with the "is fury or wrath" parameter changed to 2 and an 'A' keypress.
Unlike fury attacks, wrath attacks require you to set up the attack IDs on line 37 in config.txt.
You may remove the "dbg % Dodging" statement once you confirm it works.
[103]
keys=!eq % msg2,1|store % msg2,1|dbg % PvE auto-dodge enabled
keys2=matt0,2,400,10000,-1,1|65d|s100|81d|store % blocked,1|dbg % Dodging|gt4
keys3=eq % blocked,1|65u|81u|store % blocked,0
keys4=nop
endkeys=dbg % Stopped PvE auto-dodge|store % msg2,0
repeat=2
PvP
Press NUMPAD8 to have Speeder automatically block attacks from enemy players within 1000 distance. This assumes you have your block key set to the default Q (81) key. You must set up line 37 in config.txt in order for this command to work correctly.
You may remove the "dbg % Blocking" statement once you confirm it works.
[104]
keys=!eq % msg3,1|store % msg3,1|dbg % PvP auto-block enabled
keys2=patt0,1,0,1000,1,-1|81d|store % blocked,1|dbg % Blocking|gt4
keys3=eq % blocked,1|81u|store % blocked,0
keys4=nop
endkeys=dbg % PvP auto-block stopped|store % msg3,0
repeat=2
This macro (NUMPAD9) will instantly target any player within 2000 distance who is attacking you before you even see the counter-attack message. It WILL change your target if you already have one, which may not be desirable. Consider using the macro below this one if you don't want your target to change when you are already targeting something. If you are having issues with this macro working while moving, consider increasing the distance threshold on line 57 in config.txt.
[105]
keys=ibt2,2000|get % target|!eq % TID,(VAR % IBT)|te*(VAR % IBT)|dbg % Targeting attacker!
endkeys=dbg % Counter-attack stopped
repeat=2
Alternate NUMPAD9 macro that will not change your target if you already have one.
[105]
keys=!it|ibt2,2000|get % target|!eq % TID,(VAR % IBT)|te*(VAR % IBT)|dbg % Targeting attacker!
endkeys=dbg % Counter-attack stopped
repeat=2
PvE & PvP
Alternate NUMPAD6 macro that works with both players and mobs.
It activates based off your current target (and only your current target).
Some people prefer this (especially in arena).
You may remove the "dbg % Blocking" statement once you confirm it works.
[102]
keys=!eq % msg4,1|store % msg4,1|dbg % Target auto-block enabled
keys2=tatt0,1,300,-1,1|81d|store % blocked,1|dbg % Blocking|gt4
keys3=eq % blocked,1|81u|store % blocked,0
keys4=nop
endkeys=dbg % Stopped target auto-block|store % msg4,0
repeat=2
Targeting Macros
Hold F5 down to have Speeder target an entity with less than 50% hp.
[116]
Target something if there is no present target and make sure something is actually targeted. If not, jump to the end of the macro and repeat
keys=!it|9d|rs100,150|9u|!it|gt3
If target has greater than 50% hp, switch to a different target
keys2=!cthp0.5|9d|rs100,150|9u
Don't do anything because we either are targeting something with less than 50% hp or need to check the hp of a new target
keys3=nop
Repeat while the key is held down
repeat=1
Same as above but also checks the weapon of the targeted entity. You can use this logic to check for many different things, such as "cts" to check for status effects, "td" to check distance, etc.
[116]
Target something if there is no present target and make sure something is actually targeted. If not, jump to the end of the macro and repeat
keys=!it|9d|rs100,150|9u|!it|gt*
If target has greater than 50% hp, switch to a different target
keys2=!cthp0.5|9d|rs100,150|9u|gt*
If target has SnS equipped, switch to a different target
keys3=ctw2|9d|rs100,150|9u|gt*
Don't do anything because we either are targeting something with less than 50% hp or need to check the hp of a new target
keys4=nop
Repeat while the key is held down
repeat=1
Movement Hack Macros
Press Q to increase your movement speed and allow for movement while blocking. May be useful for other abilities. This macro will prevent the fishing bot from working.
[81]
keys=ms2.0
pass=1
repeat=0
endkeys=s1000|ms0