aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/SharedDefines.h2
-rw-r--r--src/game/SpellMgr.cpp67
-rw-r--r--src/game/SpellMgr.h3
3 files changed, 64 insertions, 8 deletions
diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h
index a068815bb1c..57858df5ea8 100644
--- a/src/game/SharedDefines.h
+++ b/src/game/SharedDefines.h
@@ -1865,6 +1865,8 @@ enum CreatureFamily
CREATURE_FAMILY_SPIRIT_BEAST = 46
};
+#define MAX_CREATURE_FAMILY 47
+
enum CreatureTypeFlags
{
CREATURE_TYPEFLAGS_TAMEABLE = 0x0001,
diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp
index d1349dc760e..e497884eb79 100644
--- a/src/game/SpellMgr.cpp
+++ b/src/game/SpellMgr.cpp
@@ -1888,15 +1888,65 @@ void SpellMgr::LoadSpellPetAuras()
sLog.outString( ">> Loaded %u spell pet auras", count );
}
+static uint32 family2skillline[MAX_CREATURE_FAMILY][2] = {
+ /* ----------------------------- = 0 */ {0, 0 },
+ /*CREATURE_FAMILY_WOLF = 1 */ {208, 270},
+ /*CREATURE_FAMILY_CAT = 2 */ {209, 270},
+ /*CREATURE_FAMILY_SPIDER = 3 */ {203, 270},
+ /*CREATURE_FAMILY_BEAR = 4 */ {210, 270},
+ /*CREATURE_FAMILY_BOAR = 5 */ {211, 270},
+ /*CREATURE_FAMILY_CROCOLISK = 6 */ {212, 270},
+ /*CREATURE_FAMILY_CARRION_BIRD = 7 */ {213, 270},
+ /*CREATURE_FAMILY_CRAB = 8 */ {214, 270},
+ /*CREATURE_FAMILY_GORILLA = 9 */ {215, 270},
+ /*CREATURE_FAMILY_HORSE_CUSTOM = 10*/ {0, 0 },
+ /*CREATURE_FAMILY_RAPTOR = 11*/ {217, 270},
+ /*CREATURE_FAMILY_TALLSTRIDER = 12*/ {218, 270},
+ /* ----------------------------- = 13*/ {0, 0 },
+ /* ----------------------------- = 14*/ {0, 0 },
+ /*CREATURE_FAMILY_FELHUNTER = 15*/ {189, 0 },
+ /*CREATURE_FAMILY_VOIDWALKER = 16*/ {204, 0 },
+ /*CREATURE_FAMILY_SUCCUBUS = 17*/ {205, 0 },
+ /* ----------------------------- = 18*/ {0, 0 },
+ /*CREATURE_FAMILY_DOOMGUARD = 19*/ {207, 0 },
+ /*CREATURE_FAMILY_SCORPID = 20*/ {236, 270},
+ /*CREATURE_FAMILY_TURTLE = 21*/ {251, 270},
+ /* ----------------------------- = 22*/ {0, 0 },
+ /*CREATURE_FAMILY_IMP = 23*/ {188, 0 },
+ /*CREATURE_FAMILY_BAT = 24*/ {653, 270},
+ /*CREATURE_FAMILY_HYENA = 25*/ {654, 270},
+ /*CREATURE_FAMILY_BIRD_OF_PREY = 26*/ {655, 270},
+ /*CREATURE_FAMILY_WIND_SERPENT = 27*/ {656, 270},
+ /*CREATURE_FAMILY_REMOTE_CONTROL = 28*/ {758, 0 },
+ /*CREATURE_FAMILY_FELGUARD = 29*/ {761, 0 },
+ /*CREATURE_FAMILY_DRAGONHAWK = 30*/ {763, 270},
+ /*CREATURE_FAMILY_RAVAGER = 31*/ {767, 270},
+ /*CREATURE_FAMILY_WARP_STALKER = 32*/ {766, 270},
+ /*CREATURE_FAMILY_SPOREBAT = 33*/ {765, 270},
+ /*CREATURE_FAMILY_NETHER_RAY = 34*/ {764, 270},
+ /*CREATURE_FAMILY_SERPENT = 35*/ {768, 270},
+ /* ----------------------------- = 36*/ {0, 0 },
+ /*CREATURE_FAMILY_MOTH = 37*/ {775, 270},
+ /*CREATURE_FAMILY_CHIMAERA = 38*/ {780, 270},
+ /*CREATURE_FAMILY_DEVILSAUR = 39*/ {781, 270},
+ /*CREATURE_FAMILY_GHOUL = 40*/ {782, 0 },
+ /*CREATURE_FAMILY_SILITHID = 41*/ {783, 270},
+ /*CREATURE_FAMILY_WORM = 42*/ {784, 270},
+ /*CREATURE_FAMILY_RHINO = 43*/ {786, 270},
+ /*CREATURE_FAMILY_WASP = 44*/ {785, 270},
+ /*CREATURE_FAMILY_CORE_HOUND = 45*/ {787, 270},
+ /*CREATURE_FAMILY_SPIRIT_BEAST = 46*/ {788, 270}
+};
+
/// Some checks for spells, to prevent adding depricated/broken spells for trainers, spell book, etc
void SpellMgr::LoadPetLevelupSpellMap()
{
mPetLevelupSpellMap.clear(); // need for reload case
- uint32 count=0;
+ uint32 count = 0;
for (uint32 i = 0; i < sCreatureFamilyStore.GetNumRows(); ++i)
{
- CreatureFamilyEntry const *creatureFamily=sCreatureFamilyStore.LookupEntry(i);
+ CreatureFamilyEntry const *creatureFamily = sCreatureFamilyStore.LookupEntry(i);
if(!creatureFamily) // not exist
continue;
@@ -1905,19 +1955,22 @@ void SpellMgr::LoadPetLevelupSpellMap()
if (creatureFamily->skillLine[j]==0)
continue;
- for (uint32 k=0;k<sSkillLineAbilityStore.GetNumRows();++k)
+ for (uint32 k = 0; k < sSkillLineAbilityStore.GetNumRows(); ++k)
{
SkillLineAbilityEntry const *skillLine = sSkillLineAbilityStore.LookupEntry(k);
- if (!skillLine)
+ if( !skillLine )
continue;
- if (creatureFamily->skillLine[j]!=skillLine->skillId)
+
+ if (skillLine->skillId!=creatureFamily->skillLine[j])
continue;
+
+ if(skillLine->learnOnGetSkill != ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL)
+ continue;
+
SpellEntry const *spell = sSpellStore.LookupEntry(skillLine->spellId);
// not exist or triggered or talent
if(!spell || !spell->spellLevel)
continue;
- if(skillLine->learnOnGetSkill != ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL)
- continue;
mPetLevelupSpellMap.insert(PetLevelupSpellMap::value_type(creatureFamily->ID, std::make_pair(spell->spellLevel , spell->Id )));
count++;
}
diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h
index ffaa5f3e32e..785f042b595 100644
--- a/src/game/SpellMgr.h
+++ b/src/game/SpellMgr.h
@@ -668,8 +668,9 @@ typedef std::multimap<uint32, SpellLearnSpellNode> SpellLearnSpellMap;
typedef std::multimap<uint32, SkillLineAbilityEntry const*> SkillLineAbilityMap;
-typedef std::multimap<uint32, std::pair < uint32,uint32 > >PetLevelupSpellMap;
+//typedef std::multimap<uint32, uint32> PetLevelupSpellSet;
//typedef std::map<uint32, PetLevelupSpellSet> PetLevelupSpellMap;
+typedef std::multimap<uint32, std::pair < uint32,uint32 > >PetLevelupSpellMap;
inline bool IsPrimaryProfessionSkill(uint32 skill)
{