I'm a bit busy atm but, I'm guessing it's a dbc thing.
Just to document quickly:
Felhunter Summon Id: 691
Felhunter Creature Id: 417
Felhunter has no spells set to it in the DB, but it learns them whilst leveling.
It learns Devour Magic at level 30, which is also the spell's level value. See here:
This would also be my guess. Try setting the Spell and Base Level to whatever lower level your Warlock character is.
void Pet::InitLevelupSpellsForLevel()
{
uint8 level = getLevel();
if (PetLevelupSpellSet const* levelupSpells = GetCreatureTemplate()->family ? sSpellMgr->GetPetLevelupSpellList(GetCreatureTemplate()->family) : NULL)
{
// PetLevelupSpellSet ordered by levels, process in reversed order
for (PetLevelupSpellSet::const_reverse_iterator itr = levelupSpells->rbegin(); itr != levelupSpells->rend(); ++itr)
{
// will called first if level down
if (itr->first > level)
unlearnSpell(itr->second, true); // will learn prev rank if any
// will called if level up
else
learnSpell(itr->second); // will unlearn prev rank if any
}
}
int32 petSpellsId = GetCreatureTemplate()->PetSpellDataId ? -(int32)GetCreatureTemplate()->PetSpellDataId : GetEntry();
// default spells (can be not learned if pet level (as owner level decrease result for example) less first possible in normal game)
if (PetDefaultSpellsEntry const* defSpells = sSpellMgr->GetPetDefaultSpellsEntry(petSpellsId))
{
for (uint8 i = 0; i < MAX_CREATURE_SPELL_DATA_SLOT; ++i)
{
SpellInfo const* spellInfo = sSpellMgr->[COLOR="#FF0000"][B]GetSpellInfo[/B][/COLOR](defSpells->spellid[i]);
if (!spellInfo)
continue;
[B][COLOR="#FF0000"] // will called first if level down
if (spellInfo->SpellLevel > level)
unlearnSpell(spellInfo->Id, true);
// will called if level up
else
learnSpell(spellInfo->Id);[/COLOR][/B]
}
}
}