*Fixes in pet levelup spell system-pets no longer learn triggered spells and can cow learn 2 spells for 1 level.

--HG--
branch : trunk
This commit is contained in:
QAston
2009-04-06 14:54:56 +02:00
parent beabe1faba
commit 276084e294
3 changed files with 16 additions and 22 deletions
+6 -10
View File
@@ -1309,18 +1309,14 @@ bool Pet::learnSpell(uint32 spell_id)
void Pet::learnLevelupSpells()
{
PetLevelupSpellSet const *levelupSpells = spellmgr.GetPetLevelupSpellList(GetCreatureInfo()->family);
if(!levelupSpells)
return;
uint32 level = getLevel();
for(PetLevelupSpellSet::const_iterator itr = levelupSpells->begin(); itr != levelupSpells->end(); ++itr)
PetLevelupSpellMap const * spell_map = spellmgr.GetPetLevelupSpellMap();
int8 level = getLevel();
for(PetLevelupSpellMap::const_iterator itr = spell_map->lower_bound(GetCreatureInfo()->family); itr != spell_map->upper_bound(GetCreatureInfo()->family); ++itr)
{
if(itr->first <= level)
learnSpell(itr->second);
if(itr->second.first <= level)
learnSpell(itr->second.second);
else
unlearnSpell(itr->second);
unlearnSpell(itr->second.second);
}
}
+3 -1
View File
@@ -2500,7 +2500,9 @@ void SpellMgr::LoadPetLevelupSpellMap()
continue;
if (!spell->spellLevel)
continue;
mPetLevelupSpellMap[creatureFamily->ID][spell->spellLevel] = spell->Id;
if (!spell->SpellFamilyName)
continue;
mPetLevelupSpellMap.insert(PetLevelupSpellMap::value_type(creatureFamily->ID, std::make_pair(spell->spellLevel , spell->Id )));
count++;
}
}
+7 -11
View File
@@ -617,8 +617,8 @@ typedef std::multimap<uint32, SpellLearnSpellNode> SpellLearnSpellMap;
typedef std::multimap<uint32, SkillLineAbilityEntry const*> SkillLineAbilityMap;
typedef std::map<uint32, uint32> PetLevelupSpellSet;
typedef std::map<uint32, PetLevelupSpellSet> PetLevelupSpellMap;
typedef std::multimap<uint32, std::pair < uint32,uint32 > >PetLevelupSpellMap;
//typedef std::map<uint32, PetLevelupSpellSet> PetLevelupSpellMap;
inline bool IsPrimaryProfessionSkill(uint32 skill)
{
@@ -923,15 +923,6 @@ class SpellMgr
SpellEffectTargetTypes EffectTargetType[TOTAL_SPELL_EFFECTS];
SpellSelectTargetTypes SpellTargetType[TOTAL_SPELL_TARGETS];
PetLevelupSpellSet const* GetPetLevelupSpellList(uint32 petFamily) const
{
PetLevelupSpellMap::const_iterator itr = mPetLevelupSpellMap.find(petFamily);
if(itr != mPetLevelupSpellMap.end())
return &itr->second;
else
return NULL;
}
SpellCastResult GetSpellAllowedInLocationError(SpellEntry const *spellInfo, uint32 map_id, uint32 zone_id, uint32 area_id, Player const* player = NULL);
SpellAreaMapBounds GetSpellAreaMapBounds(uint32 spell_id) const
@@ -962,6 +953,11 @@ class SpellMgr
return SpellAreaForAreaMapBounds(mSpellAreaForAreaMap.lower_bound(area_id),mSpellAreaForAreaMap.upper_bound(area_id));
}
PetLevelupSpellMap const * GetPetLevelupSpellMap() const
{
return &mPetLevelupSpellMap;
}
// Modifiers
public:
static SpellMgr& Instance();