diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/SharedDefines.h | 2 | ||||
-rw-r--r-- | src/game/SpellMgr.cpp | 67 | ||||
-rw-r--r-- | src/game/SpellMgr.h | 3 |
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) { |