Timers returning Null

A forum for reporting bugs NOT related to custom plugins.

Moderator: MacroQuest Developers

Placemate
decaying skeleton
decaying skeleton
Posts: 3
Joined: Sat May 08, 2004 6:51 pm

Timers returning Null

Post by Placemate » Sat May 08, 2004 7:06 pm

I found a wierd bug when occasionally Event_Time will get passed a NULL instead of the timer that fired. It seems dependant on what value you set the timer to, as in if you set it to 12 some will fail, but it you set it to 10 they will run fine.

For example

Code: Select all


Sub Main
	/declare t1 timer outer
	/declare t2 timer outer
	/declare t3 timer outer
	/declare t4 timer outer
	/declare t5 timer outer
	/declare t6 timer outer
	/declare t7 timer outer
	/declare t8 timer outer
	/declare t9 timer outer
	/declare t0 timer outer
	
	/varset t1 12
	/varset t2 12
	/varset t3 12
	/varset t4 12
	/varset t5 12
	/varset t6 12
	/varset t7 12
	/varset t8 12
	/varset t9 12
	/varset t0 12
	
:Loop
	/doevent
	/goto :Loop
/return

Sub Event_Timer(Timer,Value)
	/echo ${Timer} ${Value}
	/varset ${Timer} 12
/return
If I run this, usually pretty quickly Event_Time will get passed a NULL, and it seems pretty random which ones will fail, someones t2, sometimes t6, etc.


I tried debugging it myself,

VOID DropTimers(VOID) is fine

VOID AddEvent(DWORD Event, PCHAR FirstArg, ...) appears to be fine

AddMQ2DataEventVariable(szParamName,"",pType,&pEvent->Parameters,CurrentArg); apears to pass the right info, but i lost my abillity to read whats going on past this point.

Lax
We're not worthy!
We're not worthy!
Posts: 3524
Joined: Thu Oct 17, 2002 1:01 pm
Location: ISBoxer
Contact:

Post by Lax » Sat May 08, 2004 7:24 pm

That's odd. I'll look into it
Lax Lacks
Master of MQ2 Disaster
Purveyor of premium, EULA-safe MMORPG Multiboxing Software
* Multiboxing with ISBoxer: Quick Start Video
* EQPlayNice, WinEQ 2.0

Placemate
decaying skeleton
decaying skeleton
Posts: 3
Joined: Sat May 08, 2004 6:51 pm

Post by Placemate » Tue May 11, 2004 3:52 am

Ok I've figured out whats causing the NULL events.

Anyway heres what I did to debug. First, added some debug statements

Code: Select all

VOID AddEvent(DWORD Event, PCHAR FirstArg, ...)
.
.
.
	if (!gEventStack) { 
		gEventStack = pEvent; 
		sprintf(Buffer,"START = 0x%p",pEvent);
	    WriteChatColor(Buffer,USERCOLOR_DEFAULT);
	} else { 
		PEVENTSTACK pTemp = NULL; 
		for (pTemp = gEventStack;pTemp->pNext;pTemp=pTemp->pNext) {
			sprintf(Buffer,"WTF = 0x%p",pTemp);
		    WriteChatColor(Buffer,USERCOLOR_DEFAULT);
		}
		sprintf(Buffer,"END = 0x%p",pEvent);
	    WriteChatColor(Buffer,USERCOLOR_DEFAULT);
		pTemp->pNext = pEvent; 
	} 
and

Code: Select all

VOID DoEvents(PSPAWNINFO pChar, PCHAR szLine)
.
.
.
    if (!pEventToRun || (SpecificEvent[0] && !Found)) return;
	sprintf(Buffer,"DoEvents: Running event %d\\%s = 0x%p",pEventToRun->Type,(pEventToRun->pEventList)?pEventToRun->pEventList->szName:"NULL",pEventToRun);
    WriteChatColor(Buffer,USERCOLOR_DEFAULT);
    DebugSpewNoFile("DoEvents: Running event %d\\%s = 0x%p",pEventToRun->Type,(pEventToRun->pEventList)?pEventToRun->pEventList->szName:"NULL",pEventToRun);

    pStack = (PMACROSTACK)malloc(sizeof(MACROSTACK));
    gMacroStack->Location = gMacroStack->Location->pPrev;
Then Ran this macro

Code: Select all

Sub Main
   /declare t1 timer outer
   /declare t2 timer outer
   /declare t3 timer outer
   /declare t4 timer outer
   /declare t5 timer outer
   /declare t6 timer outer
   /declare t7 timer outer
   /declare t8 timer outer
   /declare t9 timer outer
   /declare t0 timer outer
   
   /varset t1 10
   /varset t2 10
   /varset t3 10
   /varset t4 10
   /varset t5 10
   /varset t6 10
   /varset t7 10
   /varset t8 10
   /varset t9 10
   /varset t0 60000
   
:Loop
   /doevent Timer
   /goto :Loop
/return

Sub Event_Timer(Timer,Value)
   /echo ${Timer} ${Value} - ${t0}
   /varset ${Timer} 20
/return
Then here is the Log File

Code: Select all

[Tue May 11 03:27:24 2004] START = 0x0FA9E908
[Tue May 11 03:27:24 2004] END = 0x0FA9E958
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E908
[Tue May 11 03:27:24 2004] END = 0x0FA9E970
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E908
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E958
[Tue May 11 03:27:24 2004] END = 0x0FACC220
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E908
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E958
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E970
[Tue May 11 03:27:24 2004] END = 0x0FACE288
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E908
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E958
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E970
[Tue May 11 03:27:24 2004] WTF = 0x0FACC220
[Tue May 11 03:27:24 2004] END = 0x0FAD02F0
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E908
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E958
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E970
[Tue May 11 03:27:24 2004] WTF = 0x0FACC220
[Tue May 11 03:27:24 2004] WTF = 0x0FACE288
[Tue May 11 03:27:24 2004] END = 0x0FAD2358
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E908
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E958
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E970
[Tue May 11 03:27:24 2004] WTF = 0x0FACC220
[Tue May 11 03:27:24 2004] WTF = 0x0FACE288
[Tue May 11 03:27:24 2004] WTF = 0x0FAD02F0
[Tue May 11 03:27:24 2004] END = 0x0FAD43C0
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E908
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E958
[Tue May 11 03:27:24 2004] WTF = 0x0FA9E970
[Tue May 11 03:27:24 2004] WTF = 0x0FACC220
[Tue May 11 03:27:24 2004] WTF = 0x0FACE288
[Tue May 11 03:27:24 2004] WTF = 0x0FAD02F0
[Tue May 11 03:27:24 2004] WTF = 0x0FAD2358
[Tue May 11 03:27:24 2004] END = 0x0FAD6428
[Tue May 11 03:27:24 2004] DoEvents: Running event 1\NULL = 0x0FA9E908
[Tue May 11 03:27:24 2004] [MQ2] t9 10 - 59990
[Tue May 11 03:27:24 2004] DoEvents: Running event 1\NULL = 0x0FA9E958
[Tue May 11 03:27:24 2004] [MQ2] t8 10 - 59990
[Tue May 11 03:27:24 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:24 2004] [MQ2] t7 10 - 59989
[Tue May 11 03:27:24 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:24 2004] [MQ2] t6 10 - 59989
[Tue May 11 03:27:24 2004] DoEvents: Running event 1\NULL = 0x0FACE288
[Tue May 11 03:27:24 2004] [MQ2] t5 10 - 59988
[Tue May 11 03:27:24 2004] DoEvents: Running event 1\NULL = 0x0FAD02F0
[Tue May 11 03:27:24 2004] [MQ2] t4 10 - 59988
[Tue May 11 03:27:24 2004] DoEvents: Running event 1\NULL = 0x0FAD2358
[Tue May 11 03:27:24 2004] [MQ2] t3 10 - 59988
[Tue May 11 03:27:24 2004] DoEvents: Running event 1\NULL = 0x0FAD43C0
[Tue May 11 03:27:24 2004] [MQ2] t2 10 - 59987
[Tue May 11 03:27:24 2004] DoEvents: Running event 1\NULL = 0x0FAD6428
[Tue May 11 03:27:24 2004] [MQ2] t1 10 - 59987
[Tue May 11 03:27:26 2004] START = 0x0FACC220
[Tue May 11 03:27:26 2004] END = 0x0FA9E970
[Tue May 11 03:27:26 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:26 2004] [MQ2] t9 20 - 59970
[Tue May 11 03:27:26 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:26 2004] [MQ2] t8 20 - 59970
[Tue May 11 03:27:26 2004] START = 0x0FA9E970
[Tue May 11 03:27:26 2004] END = 0x0FACC220
[Tue May 11 03:27:26 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:26 2004] [MQ2] t7 20 - 59969
[Tue May 11 03:27:26 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:26 2004] START = 0x0FACC220
[Tue May 11 03:27:26 2004] END = 0x0FA9E970
[Tue May 11 03:27:26 2004] WTF = 0x0FACC220
[Tue May 11 03:27:26 2004] END = 0x0FA9E958
[Tue May 11 03:27:26 2004] [MQ2] t6 20 - 59968
[Tue May 11 03:27:26 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:26 2004] [MQ2] NULL NULL - 59968
[Tue May 11 03:27:26 2004] /varset failed, variable 'NULL' not found
[Tue May 11 03:27:26 2004] test.mac@35 (Event_Timer(Timer,Value)): /varset ${Timer} 20
[Tue May 11 03:27:26 2004] test.mac@28 (Main): :Loop
[Tue May 11 03:27:26 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:26 2004] END = 0x0FA9E970
[Tue May 11 03:27:26 2004] WTF = 0x0FA9E958
[Tue May 11 03:27:26 2004] END = 0x0FACC220
[Tue May 11 03:27:26 2004] [MQ2] t4 20 - 59967
[Tue May 11 03:27:26 2004] DoEvents: Running event 1\NULL = 0x0FA9E958
[Tue May 11 03:27:26 2004] [MQ2] t3 20 - 59967
[Tue May 11 03:27:26 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:26 2004] [MQ2] NULL NULL - 59967
[Tue May 11 03:27:26 2004] /varset failed, variable 'NULL' not found
[Tue May 11 03:27:26 2004] test.mac@35 (Event_Timer(Timer,Value)): /varset ${Timer} 20
[Tue May 11 03:27:26 2004] test.mac@28 (Main): :Loop
[Tue May 11 03:27:26 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:26 2004] [MQ2] t1 20 - 59966
[Tue May 11 03:27:28 2004] START = 0x0FACC220
[Tue May 11 03:27:28 2004] END = 0x0FA9E970
[Tue May 11 03:27:28 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:28 2004] [MQ2] t9 20 - 59950
[Tue May 11 03:27:28 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:28 2004] [MQ2] t8 20 - 59950
[Tue May 11 03:27:28 2004] START = 0x0FA9E970
[Tue May 11 03:27:28 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:28 2004] [MQ2] t7 20 - 59949
[Tue May 11 03:27:28 2004] START = 0x0FA9E970
[Tue May 11 03:27:28 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:28 2004] [MQ2] t6 20 - 59948
[Tue May 11 03:27:28 2004] START = 0x0FA9E970
[Tue May 11 03:27:28 2004] END = 0x0FACC220
[Tue May 11 03:27:28 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:28 2004] [MQ2] t4 20 - 59947
[Tue May 11 03:27:28 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:28 2004] [MQ2] t3 20 - 59947
[Tue May 11 03:27:28 2004] START = 0x0FACC220
[Tue May 11 03:27:28 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:28 2004] [MQ2] t1 20 - 59946
[Tue May 11 03:27:30 2004] START = 0x0FACC220
[Tue May 11 03:27:30 2004] END = 0x0FA9E970
[Tue May 11 03:27:30 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:30 2004] [MQ2] t9 20 - 59930
[Tue May 11 03:27:30 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:30 2004] [MQ2] t8 20 - 59930
[Tue May 11 03:27:30 2004] START = 0x0FA9E970
[Tue May 11 03:27:30 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:30 2004] [MQ2] t7 20 - 59929
[Tue May 11 03:27:30 2004] START = 0x0FA9E970
[Tue May 11 03:27:30 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:30 2004] [MQ2] t6 20 - 59928
[Tue May 11 03:27:30 2004] START = 0x0FA9E970
[Tue May 11 03:27:30 2004] END = 0x0FACC220
[Tue May 11 03:27:30 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:30 2004] [MQ2] t4 20 - 59927
[Tue May 11 03:27:30 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:30 2004] START = 0x0FACC220
[Tue May 11 03:27:30 2004] [MQ2] t3 20 - 59926
[Tue May 11 03:27:30 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:30 2004] [MQ2] NULL NULL - 59926
[Tue May 11 03:27:30 2004] /varset failed, variable 'NULL' not found
[Tue May 11 03:27:30 2004] test.mac@35 (Event_Timer(Timer,Value)): /varset ${Timer} 20
[Tue May 11 03:27:30 2004] test.mac@28 (Main): :Loop
[Tue May 11 03:27:32 2004] START = 0x0FACC220
[Tue May 11 03:27:32 2004] END = 0x0FA9E970
[Tue May 11 03:27:32 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:32 2004] [MQ2] t9 20 - 59910
[Tue May 11 03:27:32 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:32 2004] [MQ2] t8 20 - 59910
[Tue May 11 03:27:32 2004] START = 0x0FA9E970
[Tue May 11 03:27:32 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:32 2004] [MQ2] t7 20 - 59909
[Tue May 11 03:27:32 2004] START = 0x0FA9E970
[Tue May 11 03:27:32 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:32 2004] [MQ2] t6 20 - 59908
[Tue May 11 03:27:32 2004] START = 0x0FA9E970
[Tue May 11 03:27:32 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:32 2004] [MQ2] t4 20 - 59907
[Tue May 11 03:27:32 2004] START = 0x0FA9E970
[Tue May 11 03:27:32 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:32 2004] [MQ2] t3 20 - 59906
[Tue May 11 03:27:34 2004] START = 0x0FA9E970
[Tue May 11 03:27:34 2004] END = 0x0FACC220
[Tue May 11 03:27:34 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:34 2004] [MQ2] t9 20 - 59890
[Tue May 11 03:27:34 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:34 2004] [MQ2] t8 20 - 59890
[Tue May 11 03:27:34 2004] START = 0x0FACC220
[Tue May 11 03:27:34 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:34 2004] [MQ2] t7 20 - 59889
[Tue May 11 03:27:34 2004] START = 0x0FACC220
[Tue May 11 03:27:34 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:34 2004] [MQ2] t6 20 - 59888
[Tue May 11 03:27:34 2004] START = 0x0FACC220
[Tue May 11 03:27:34 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:34 2004] [MQ2] t4 20 - 59887
[Tue May 11 03:27:34 2004] START = 0x0FACC220
[Tue May 11 03:27:34 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:34 2004] [MQ2] t3 20 - 59886
[Tue May 11 03:27:36 2004] START = 0x0FACC220
[Tue May 11 03:27:36 2004] END = 0x0FA9E970
[Tue May 11 03:27:36 2004] DoEvents: Running event 1\NULL = 0x0FACC220
[Tue May 11 03:27:36 2004] [MQ2] t9 20 - 59870
[Tue May 11 03:27:36 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:36 2004] [MQ2] t8 20 - 59870
[Tue May 11 03:27:36 2004] START = 0x0FA9E970
[Tue May 11 03:27:36 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:36 2004] [MQ2] t7 20 - 59869
[Tue May 11 03:27:36 2004] START = 0x0FA9E970
[Tue May 11 03:27:36 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:36 2004] [MQ2] t6 20 - 59868
[Tue May 11 03:27:36 2004] START = 0x0FA9E970
[Tue May 11 03:27:36 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:36 2004] [MQ2] t4 20 - 59867
[Tue May 11 03:27:36 2004] START = 0x0FA9E970
[Tue May 11 03:27:36 2004] DoEvents: Running event 1\NULL = 0x0FA9E970
[Tue May 11 03:27:36 2004] [MQ2] t3 20 - 59866
[Tue May 11 03:27:37 2004] The current macro has ended.
[Tue May 11 03:29:00 2004] MQ2 Unloading...
[Tue May 11 03:29:00 2004] MQ2 Unloaded.

So Anyway the upshot of all this is right here.


START = 0x0FA9E970 ---- t7 Gets Adds
END = 0x0FACC220 ---- t6 Gets Adds
DoEvents: Running event 1\NULL = 0x0FA9E970 ---- Run t7
[MQ2] t7 20 - 59969 - t7 runs
DoEvents: Running event 1\NULL = 0x0FACC220 ---- Run t6
START = 0x0FACC220 ---- t5 gets added before t6 runs on the same address ( THIS IS THE TROUBLE MAKER)
END = 0x0FA9E970 ---- t4 gets added
WTF = 0x0FACC220
END = 0x0FA9E958 ---- t3 gets added
[MQ2] t6 20 - 59968 ---- t6 Runs and clears the events
DoEvents: Running event 1\NULL = 0x0FACC220 --- Run t5
[MQ2] NULL NULL - 59968 --- We try the run t5 but the event has been clear, thus NULLS
/varset failed, variable 'NULL' not found
test.mac@35 (Event_Timer(Timer,Value)): /varset ${Timer} 20
test.mac@28 (Main): :Loop
DoEvents: Running event 1\NULL = 0x0FA9E970 --- Run t4
END = 0x0FA9E970 --- t2 gets added
WTF = 0x0FA9E958
END = 0x0FACC220 --- t1 Gets added
[MQ2] t4 20 - 59967 -- t4 Runs and clears the event that was added on t2
DoEvents: Running event 1\NULL = 0x0FA9E958 --- Run t3
[MQ2] t3 20 - 59967 --- t3 Runs
DoEvents: Running event 1\NULL = 0x0FA9E970 --- Run t2
[MQ2] NULL NULL - 59967 --- Event was clears so we get Nulls
/varset failed, variable 'NULL' not found
test.mac@35 (Event_Timer(Timer,Value)): /varset ${Timer} 20
test.mac@28 (Main): :Loop


So basically we're adding events to the stack that MQ thinks are done but actually haven't finished running yet, thus they get added to the same address, when The event does run it clear the new event we are interested in so, when they run they return NULLS.


Looks like a side effect of the new turbo code. Should be a pretty easy fix, but I'm not sure which way you guys would want to attack it.

Lax
We're not worthy!
We're not worthy!
Posts: 3524
Joined: Thu Oct 17, 2002 1:01 pm
Location: ISBoxer
Contact:

Post by Lax » Tue May 11, 2004 4:12 am

Not turbo-related, but good analysis. I'll figure out how to fix this. ;)
Lax Lacks
Master of MQ2 Disaster
Purveyor of premium, EULA-safe MMORPG Multiboxing Software
* Multiboxing with ISBoxer: Quick Start Video
* EQPlayNice, WinEQ 2.0

Lax
We're not worthy!
We're not worthy!
Posts: 3524
Joined: Thu Oct 17, 2002 1:01 pm
Location: ISBoxer
Contact:

Post by Lax » Wed May 12, 2004 3:09 am

Okay, after hours and hours of debugging I finally realized the fucking problem :evil: :x :shock: (note that it really had nothing to do with your analysis and your interpretation and guesses were pretty far off anyway :) )
fixed for patch tomorrow, thank you.
Lax Lacks
Master of MQ2 Disaster
Purveyor of premium, EULA-safe MMORPG Multiboxing Software
* Multiboxing with ISBoxer: Quick Start Video
* EQPlayNice, WinEQ 2.0

Placemate
decaying skeleton
decaying skeleton
Posts: 3
Joined: Sat May 08, 2004 6:51 pm

Post by Placemate » Wed May 12, 2004 1:34 pm

Damn I thought I was on to something (and it took me several hours to reach that point :/ ). Well, many thanks for fixing it and sorry if I lead you in the wrong direction.

Lax
We're not worthy!
We're not worthy!
Posts: 3524
Joined: Thu Oct 17, 2002 1:01 pm
Location: ISBoxer
Contact:

Post by Lax » Wed May 12, 2004 1:56 pm

heheh dont worry about it, you got me started in the right direction, it just took me a while to realize why it was happening. I had debug info everywhere trying to track it down ;)
Lax Lacks
Master of MQ2 Disaster
Purveyor of premium, EULA-safe MMORPG Multiboxing Software
* Multiboxing with ISBoxer: Quick Start Video
* EQPlayNice, WinEQ 2.0