it will return -2 if a spell is not ready to be cast...
this code goes in EQLib_MacroParser.cpp
Code: Select all
[color=green] // $char(gem,xxx) example: /echo $char(gem,"Spirit of Wolf")[/color]
} else if (!strncmp("char(gem,",szVar,9)) {
if (!strstr(szVar,")")) {
DebugSpew("PMP - Bad $char() '%s'",szVar);
i--;
szOutput[j] = '@';
j++;
} else {
PEQCASTSPELLWINDOW pCastSpellWindow = NULL;
PEQCASTSPELLWINDOW pSpellSlot = NULL;
pCastSpellWindow = (PEQCASTSPELLWINDOW)*EQADDR_CLASSCASTSPELLWND;
i += (strstr(szVar,")")-szVar);
CHAR szTemp[MAX_STRING] = "0";
PCHAR szArg = szVar+9;
WORD Gem = atoi(szArg);
if (Gem==0 && szArg[0]!='0') {
if (szArg[0]=='"') szArg++;
DWORD sp;
for (sp=0;sp<8;sp++) {
pSpellSlot = NULL;
pSpellSlot = (PEQCASTSPELLWINDOW)pCastSpellWindow->SpellSlots[sp];
DebugSpew("%x",pSpellSlot->spellstate);
if (pCharInfo->MemorizedSpells[sp] != 0xFFFFFFFF) {
PCHAR SpellName = GetSpellByID(pCharInfo->MemorizedSpells[sp]);
if (!strnicmp(szArg,SpellName,strlen(SpellName))) {
if (!EQADDR_CLASSCASTSPELLWND) {
itoa(sp+1,szTemp,10);
} else {
if (pSpellSlot->spellstate != 0) {
strcpy(szTemp,"-2");
} else {
itoa(sp+1,szTemp,10);
}
}
}
}
}
} [color=red]else {
if (Gem>0 && Gem<9) {[/color] Code: Select all
DWORD *EQADDR_CLASSCASTSPELLWND;Code: Select all
GetPrivateProfileString("Class Locations","ClassCastSpellWnd","0",szBuffer,MAX_STRING,ClientINI); EQADDR_CLASSCASTSPELLWND = (PDWORD)strtoul(szBuffer,NULL,16);Code: Select all
extern DWORD *EQADDR_CLASSCASTSPELLWND;in MQ.h
Code: Select all
typedef struct _EQCASTSPELLWINDOW {
DWORD WindowID;
DWORD TimeMouseOver; //how many ms the window has had the mouse over it...
DWORD Unknown0x008; // 2000 seems a common value
DWORD Unknown0x00c; //500 seems a common value
BYTE Flag;
BYTE MouseOver; //01 yes 00 no
BYTE Unknown0x012;
BYTE Unknown0x013;
BYTE Unknown0x014[12];
struct _EQWINDOW *pDownTheTreeOnSameWindow;
struct _EQWINDOW *pNextWindow;
DWORD Flags4;
DWORD Z; //not sure but its logical to assume it at this point...
DWORD X;
DWORD Y;
DWORD Height;
DWORD Width;
DWORD Depth; //hmmm...
BYTE Unknown0x040[12];
BYTE Open; //1 open 0 closed
BYTE Unknown0x051[7];
DWORD somekindofID;
DWORD *pUnknownStruct0x060;
struct _EQWINDOWINFO *Info;
BYTE Unknown[88];
BYTE Unknown1[68];
DWORD SlotID;
BYTE Unknown2[16];
BYTE Selector; //this graphically selects an item on/off
BYTE Unknown3[7];
BYTE Unknown4[32];
struct _EQCASTSPELLWINDOW *SpellSlots[8];
DWORD Unknown5[3];
DWORD spellicon;//if this is equal to FFFFFFFF there is no spell memmed in this slot...
DWORD spellstate;// 1 = cast in progress or refreshtime not met 2 means we ducked or aborted cast, 0 means its ok to cast
} EQCASTSPELLWINDOW, *PEQCASTSPELLWINDOW;Code: Select all
[Class Locations]
ClassCastSpellWnd=005fe254
donations for this month's patches.
