Code: Select all
COMMAND("DoAbility",CMD_DoAbility,true,false);
Code: Select all
// ***************************************************************************
// Function: DoAbility
// Description: Our '/doability' command
// Does (or lists) your abilities
// Usage: /doability [list|ability|#]
// ***************************************************************************
int CMD_DoAbility(int argc, char *argv[])
{
if (!cmdDoAbility)
{
PCMDLIST pCmdListOrig = (PCMDLIST)EQADDR_CMDLIST;
for (int i=0;pCmdListOrig[i].fAddress != 0;i++) {
if (!strcmp(pCmdListOrig[i].szName,"/doability")) {
cmdDoAbility = (fEQCommand)pCmdListOrig[i].fAddress;
}
}
}
if (!cmdDoAbility) return -1;
if (argc<2 || atoi(argv[1]) || !EQADDR_DOABILITYLIST) {
cmdDoAbility((PSPAWNINFO)pLocalPlayer,argv[1]);
return 0;
}
DWORD Index, DoIndex = 0xFFFFFFFF;
CHAR szBuffer[MAX_STRING] = {0};
if (!stricmp(argv[1],"list") || !stricmp(argv[1], "-list")) {
WriteChatColor("Abilities:",USERCOLOR_DEFAULT);
for (Index=4;Index<10;Index++) {
if (EQADDR_DOABILITYLIST[Index]==0xFFFFFFFF) {
sprintf(szBuffer,"%d. <Empty>",Index-3);
} else if (szSkills[EQADDR_DOABILITYLIST[Index]]) {
sprintf(szBuffer,"%d. %s",Index-3,szSkills[EQADDR_DOABILITYLIST[Index]]);
} else {
sprintf(szBuffer,"%d. *Unknown%d",Index-3,EQADDR_DOABILITYLIST[Index]);
}
WriteChatColor(szBuffer,USERCOLOR_DEFAULT);
}
WriteChatColor("Combat Skills:",USERCOLOR_DEFAULT);
for (Index=0;Index<4;Index++) {
if (EQADDR_DOABILITYLIST[Index]==0xFFFFFFFF) {
sprintf(szBuffer,"%d. <Empty>",Index+7);
} else if (szSkills[EQADDR_DOABILITYLIST[Index]]) {
sprintf(szBuffer,"%d. %s",Index+7,szSkills[EQADDR_DOABILITYLIST[Index]]);
} else {
sprintf(szBuffer,"%d. *Unknown%d",Index+7,EQADDR_DOABILITYLIST[Index]);
}
WriteChatColor(szBuffer,USERCOLOR_DEFAULT);
}
WriteChatColor("Combat Abiilities:",USERCOLOR_DEFAULT);
for (Index=10;Index<18;Index++) {
if (EQADDR_DOABILITYLIST[Index]==0xFFFFFFFF) {
sprintf(szBuffer,"%d. <Empty>",Index+1);
} else if (EQADDR_DOABILITYLIST[Index] > 132) { // highest number we have defined so far
sprintf(szBuffer,"%d. *Unknown%d",Index+1,EQADDR_DOABILITYLIST[Index]);
} else if (szSkills[EQADDR_DOABILITYLIST[Index]]) {
sprintf(szBuffer,"%d. %s",Index+1,szSkills[EQADDR_DOABILITYLIST[Index]]);
} else {
sprintf(szBuffer,"%d. *Unknown%d",Index+1,EQADDR_DOABILITYLIST[Index]);
}
WriteChatColor(szBuffer,USERCOLOR_DEFAULT);
}
return 0;
}
pISInterface->GetArgs(1,argc,argv,szBuffer);
for (Index=0;Index<10;Index++) {
if (EQADDR_DOABILITYLIST[Index]!= 0xFFFFFFFF) {
if (!strnicmp(szBuffer,szSkills[EQADDR_DOABILITYLIST[Index]],strlen(szSkills[EQADDR_DOABILITYLIST[Index]]))) {
if (Index<4) {
DoIndex = Index+7; // 0-3 = Combat abilities (7-10)
} else {
DoIndex = Index-3; // 4-9 = Abilities (1-6)
}
}
}
}
if (DoIndex!=0xFFFFFFFF) {
cmdDoAbility((PSPAWNINFO)pLocalPlayer,itoa(DoIndex,szBuffer,10));
} else {
WriteChatColor("You do not seem to have that ability on a /doability button",USERCOLOR_DEFAULT);
}
return 0;
}