#include "../MQ2Plugin.h"
#include <vector>
PreSetup("MQ2SpellList");
char INISection[MAX_STRING];
bool FindSpell(PSPELL pSpell, vector<PSPELL> &v)
{
for (int i = 0; i < v.size();i++)
{
if (v->SpellGroup == pSpell->SpellGroup)
return true;
}
return false;
}
void MySpells(PSPAWNINFO pChar, PCHAR szLine)
{
if (GetGameState() == GAMESTATE_INGAME && GetCharInfo() && GetCharInfo()->pSpawn && GetCharInfo2())
{
int option = 0;
if (strlen(szLine) != 0)
{
CHAR Arg1[MAX_STRING] = { 0 };
GetArg(Arg1, szLine, 1);
if (!_stricmp(Arg1, "have"))
{
option = 1;
}
if (!_stricmp(Arg1, "missing"))
{
option = 0;
}
}
vector<PSPELL> MySpells, HaveSpells, MissingSpells;
for (unsigned long nCombatAbility = 0; nCombatAbility < NUM_COMBAT_ABILITIES; nCombatAbility++)
{
if (pCombatSkillsSelectWnd->ShouldDisplayThisSkill(nCombatAbility)) {
if (PSPELL pSpell = GetSpellByID(pPCData->GetCombatAbility(nCombatAbility)))
{
MySpells.push_back(pSpell);
}
}
}
for (unsigned long nAbility = 0; nAbility < NUM_ALT_ABILITIES; nAbility++)
{
if (PALTABILITY pAbility = pAltAdvManager->GetAAById(nAbility)) {
if (char *pName = pCDBStr->GetString(pAbility->nName, 1, NULL))
{
if (pAbility->SpellID != -1) {
if (PSPELL pSpell = GetSpellByID(pAbility->SpellID))
{
MySpells.push_back(pSpell);
}
}
}
}
}
for (DWORD nSpell = 0; nSpell < NUM_BOOK_SLOTS; nSpell++)
{
if (GetCharInfo2()->SpellBook[nSpell] != 0xFFFFFFFF)
{
if (PSPELL pSpell = GetSpellByID((GetCharInfo2()->SpellBook[nSpell])))
{
MySpells.push_back(pSpell);
}
}
}
{
for (int i = 0; i < 50000; i++)
{
if (PSPELL pSpell = GetSpellByID(i))
{
if (pSpell->ClassLevel[GetCharInfo()->pSpawn->Class] <= GetCharInfo2()->Level)
{
if (FindSpell(pSpell, MySpells))
HaveSpells.push_back(pSpell);
else
{
if (!FindSpell(pSpell, MissingSpells))
MissingSpells.push_back(pSpell);
else
continue;
}
}
}
}
}
char key[MAX_STRING]={ 0 }, total[MAX_STRING]={ 0 },spellName[MAX_STRING] = { 0 };
if (option == 0)
{
::sprintf(total,"%d",MissingSpells.size());
WritePrivateProfileString(INISection, "MissingTotal", total,INIFileName);
for (int i = 0; i < MissingSpells.size();i++)
{
::sprintf(key, "Missing%d", i);
::sprintf(spellName, "%s|%d", MissingSpells->Name, MissingSpells->ClassLevel[GetCharInfo()->pSpawn->Class]);
WritePrivateProfileString(INISection, key, spellName, INIFileName);
}
}
if (option == 1)
{
::sprintf(total,"%d",HaveSpells.size());
WritePrivateProfileString(INISection, "HaveTotal", total,INIFileName);
for (int i = 0; i < HaveSpells.size(); i++)
{
::sprintf(key, "Have%d", i);
::sprintf(spellName, "%s|%d", HaveSpells->Name, HaveSpells->ClassLevel[GetCharInfo()->pSpawn->Class]);
WritePrivateProfileString(INISection, key, spellName, INIFileName);
}
}
WriteChatf("Spell output complete");
return;
}
}
PLUGIN_API VOID InitializePlugin(VOID)
{
::sprintf(INIFileName, "%s\\%s_%s.ini", gszINIPath, EQADDR_SERVERNAME, GetCharInfo()->Name);
::sprintf(INISection, "%s_%d_%s_%s", PLUGIN_NAME, Level, pEverQuest->GetRaceDesc(Races), pEverQuest->GetClassDesc(Class));
DWORD Shrouded=false;
Shrouded = GetCharInfo2()->Shrouded;
if (!Shrouded)
INISection[strlen(PLUGIN_NAME)] = 0;
AddCommand("/myspells", MySpells);
}
PLUGIN_API VOID ShutdownPlugin(VOID)
{
RemoveCommand("/myspells");
}