I have found and resolved the issue around timing! LAX please correct me if I'm wrong on any assumptions please.
Since IsBoxer operates on several layers, it is important to honor those when running it. Take for example my warrior:
Virtual Combat -> Combat HotKeys -> Warrior Combat -> DPS Rotation -> Sub-Rotations
Those are FIVE layers, each with a 0.1s delay, so it seems before passing the next key, there is already a 0.5s "lag" in the system that I have to honor. (LAX can you verify?)
Additionally, my EQ client usually has a client-server lag of around 50-60ms, which means I usually add 300ms to any roundrip command to be within safe limits. Hence my "/pause 3" (300ms) in front of actions such as "/xtarget target 1" in-game.
Now, my Warrior does the following sequence in his "DPS Rotation" steps:
- Code:
1. Engage Defensives (Multi-Step Sub-Rotation)
2. Engage Aggro Building (Multi-Step Sub-Rotation)
3. Hit Battle Spam 1 (button with a bunch of AA abilities and discs)
4. Hit Battle Spam 2 (button with a bunch of AA abilities and discs)
5. Hit Battle Spam 3 (button with a bunch of AA abilities and discs)
Engage Defensives (Sub-Rotation):
- Code:
1. Field Defender Button
2. Stout Defense Button
Engage Offensives (Sub-Rotation, this is not accurate as I'm writing it from work):
- Code:
1. Phantom Agressor Button
2. Insult Button
3. Roar Button
+2 more forgot which ones.
So, the sub-rotation "Engage Defenses" is a 2-step sub-rotation that simply ensures Field Defender and Stout are up constantly. I do the usual "disable this step until it's clickable again"
The "Engage Offensives" is far more interesting. It does not give any meaning to just spam aggro keys over and over again on repop, so I've spaced them out with a 5 second interval. This means, the NEXT offensive disc/aa being used disables the entire sub-rotation in "DPS Steps" for 5 seconds. That way, I can take and keep aggro easilly over long fights, because there is always something that is up within the next 5 seconds that can be tossed at the mob.
So, when I'm spamming the Warrior combat key, here's what happens:
1. If defenses sub-rotation is enabled, then it hits (Field Defender, Stout Defense) before anything else. Then the entire "Defense" Sub-Rotation is disabled for 5 seconds
2. The first available aggro ability is invoked, then the entire "Agro" sub-rotation is disabled for 5 seconds
3. Spam Key 1 is hit
4. Spam Key 2 is hit
5. Spam key 3 is hit
It is VITAL that any multi-step rotation containing Sub-Rotations actually DISABLES the sub-rotation for some duration, or innerspace never leaves it. (lax, verify? is there a way around this?)
Also, there is a "Warrior Global Cooldown" timer that I use to disable and re-enable the "Virtual Combat DPS Rotation" for one full second after every keypress. Any mapped key that actually does a keypress invokes this "pause" so that I have a nice, decent queue of things that need to happen. I need to know if it is possible for me to reduce this amount of time (I can be very trigger-happy at times, and hammer that key like my life depended on it, but I see that Innerspace needs some internal time)
For FirescueLax is right indeed on that if you have 1 timer (and not 0) for any given thing, you do not need the reset timer instruction. This is working as intended for me.
I am operating with the following timers:
* Warrior Global Cooldown (invokes a pause on the Virtual Combat DPS Rotation key after each "real" in-game keypress)
* Warrior Defensive Sub-Rotation toggle timer (used to pause the sub-rotation to allow the rotation on DPS Rotation one layer up to continue to execute)
* Warrior Aggro abilities Sub-Rotation toggle timer (used to pause the sub-rotation to allow the rotation on DPS Rotation one layer up to continue to execute)
* ...and then a timer for every ability that has a 10s or more reuse timer
Assumption for LaxI am assuming that STEPS in a mapped key execute sequentially, and that all Actions within a step is done either in parallel, or "asap". Is it correct of me to assume that you have hard-coded a minimal delay of 100ms for each step to execute within, or is that plain wrong?
Feature RequestFor the innerspace debugger, it would help me ALOT to see:
* Mapped Key Duration - how long does a mapped key take to execute (sum of time spent executing steps in ms)
* Step Duration - how long does a single step take to execute (sum of time spent executing actions, in ms)
* Actions duration - how long does a single action take to execute (in ms)
Feature Request 2Debug print as a new "Debug" action
In isboxer, be able to add some text that will only, and only appear when the debugger window is up, and it's only output is to that window. It would be VERY handy to use this together with the first feature request, i.e. "Debug.Print "Step 'Stout Defense' executed in {STEPDURATION} ms"
Feature Request 3The last thing that I'm missing, that would be equally handy is a "Simulator", so that I don't have to be running an EQ Client in order to test out new configurations w/timings.
I'll volunteer for beta if you need a decent tester