Code: Select all
COMMAND("Cast",CMD_CastSpell,true,false);
Code: Select all
// ***************************************************************************
// Function: CMD_CastSpell
// Description: Our '/cast' command
// Displays the direction and distance to the closest spawn
// Usage: /cast [list|#|"name of spell"|item "name of item"]
// ***************************************************************************
int CMD_CastSpell(int argc, char* argv[])
{
DWORD Index;
CHAR szBuffer[MAX_STRING] = {0};
if (gGameState!=GAMESTATE_INGAME)
return -1;
if (!cmdCast)
{
PCMDLIST pCmdListOrig = (PCMDLIST)EQADDR_CMDLIST;
for (int i=0;pCmdListOrig[i].fAddress != 0;i++) {
if (!strcmp(pCmdListOrig[i].szName,"/cast")) {
cmdCast = (fEQCommand)pCmdListOrig[i].fAddress;
}
}
}
if (!cmdCast) return -1;
if (argc<2)
{
WriteChatf("Syntax: %s [list|#|name of spell|item name of item]",argv[0]);
return 0;
}
if ( !ppSpellMgr || !ppCharData || !pCharData) {
return -1;
}
PCHARINFO pCharInfo = GetCharInfo();
if (NULL == pCharInfo) return -1;
if (argc == 2 && atoi(argv[1])){
cmdCast((PSPAWNINFO)pLocalPlayer, argv[1]);
return 0;
}
// CHAR szArg1[MAX_STRING] = {0};
// CHAR szArg2[MAX_STRING] = {0};
if (!stricmp(argv[1],"list")) {
WriteChatColor("Spells:",USERCOLOR_DEFAULT);
for (Index=0;Index<9;Index++) {
if (pCharInfo->MemorizedSpells[Index]==0xFFFFFFFF) {
sprintf(szBuffer,"%d. <Empty>",Index+1);
} else {
sprintf(szBuffer,"%d. %s",Index+1,GetSpellByID(pCharInfo->MemorizedSpells[Index]));
}
WriteChatColor(szBuffer,USERCOLOR_DEFAULT);
}
return 0;
}
// GetArg(szArg1,szLine,1);
// GetArg(szArg2,szLine,2);
// DebugSpew("Cast: szArg1 = %s szArg2 = %s",szArg1,szArg2);
if (!stricmp(argv[1],"item"))
{
CHAR szItemToCast[8192];
pISInterface->GetArgs(2,argc,argv,szItemToCast);
BOOL FOUND = FALSE;
DWORD item = 0;
DWORD slot = 0;
DWORD SpawnFooter = NULL;
SpawnFooter = (DWORD)pLocalPlayer;
for (int i=0;i<30;i++) {
if (pCharInfo->InventoryArray[i])
if (!_stricmp(szItemToCast,pCharInfo->InventoryArray[i]->Item->Name)) {
DebugSpew("cast test slot %d = %s address is %x",i,pCharInfo->InventoryArray[i]->Item->Name,&(pCharInfo->InventoryArray[i]));
item = (DWORD)&pCharInfo->InventoryArray[i];
slot = (DWORD)i;
FOUND = TRUE;
break;
}
}
if (FOUND) {
pCharData->CastSpell(10,0,(EQ_Item**)item,0,slot,-1,0,0);
return 0;
}
}
pISInterface->GetArgs(1,argc,argv,szBuffer);
//GetArg(szBuffer,szLine,1);
for (Index=0;Index<9;Index++) {
if (pCharInfo->MemorizedSpells[Index]!=0xFFFFFFFF) {
PCHAR SpellName = GetSpellNameByID(pCharInfo->MemorizedSpells[Index]);
if (!stricmp(szBuffer,SpellName)) {
DebugSpew("SpellName = %s",SpellName);
cmdCast((PSPAWNINFO)pLocalPlayer,itoa(Index+1,szBuffer,10));
DebugSpew("pChar = %x SpellName = %s %d",pCharInfo,SpellName,Index+1);
return 0;
}
}
}
WriteChatColor("You do not seem to have that spell memorized.",USERCOLOR_DEFAULT);
return 0;
}


