All pastes #1186156 Raw Edit

pet_auras

public diff v1 · immutable
#1186156 ·published 2008-08-27 08:26 UTC
rendered paste body
Index: src/game/Pet.cpp===================================================================--- src/game/Pet.cpp	(revision 6488)+++ src/game/Pet.cpp	(working copy)@@ -306,6 +306,9 @@     //load spells/cooldowns/auras     SetCanModifyStats(true);     _LoadAuras(timediff);+    +    // convert master's dummy effects to pet auras+    BuildPetAuras(owner);      //init AB     if(is_temporary_summoned)@@ -1690,3 +1693,132 @@             addSpell(*petSet);     } }++// lookup master's dummy effects to cast pet auras ( if needed )+void Pet::BuildPetAuras( Unit* owner )+{+    if(!owner)+        return;++	if ( getPetType()!=HUNTER_PET && (getPetType()!=SUMMON_PET || owner->getClass()!= CLASS_WARLOCK))+	    return;++    Unit::AuraList const& dummyList = owner->GetAurasByType(SPELL_AURA_DUMMY);+    for(Unit::AuraList::const_iterator itr = dummyList.begin();itr!=dummyList.end();++itr)+    {+        uint32 MD = 0;++        switch((*itr)->GetSpellProto()->Id)+        {+         // Spirit Bond+         case 19578:+             CastSpell(this, 19579, true);+             break;+         case 20895:+             CastSpell(this, 24529, true);+             break;+         // Stalker's Ally+         case 28757:+            CastSpell(this, 28758, true);+            break;+         // Master Demonologist+         case 23785:+         {+             switch(GetEntry())+             {+                 case 416: MD = 23759; break;	// imp+                 case 1860: MD = 23760; break;	// voidwalker+                 case 1863: MD = 23761; break;	// succubus+                 case 417: MD = 23762; break;	// felhunter+                 case 17252: MD = 35702; break;	// felguard+                 default: break;+             }+                if(MD) CastSpell(this, MD, true);+                break;+             }+             case 23822:+             {+                 switch(GetEntry())+                 { +                     case 416: MD = 23826; break;	// imp+                     case 1860: MD = 23841; break;	// voidwalker+                     case 1863: MD = 23833; break;	// succubus+                     case 417: MD = 23837; break;	// felhunter+                     case 17252: MD = 35703; break;	// felguard+                     default: break;+                 }+                 if(MD) CastSpell(this, MD, true);+                 break;+             }+             case 23823:+             {+                 switch(GetEntry())+                 {+                     case 416: MD = 23827; break;	// imp+                     case 1860: MD = 23842; break;	// voidwalker+                     case 1863: MD = 23834; break;	// succubus+                     case 417: MD = 23838; break;	// felhunter+                     case 17252: MD = 35704; break;	// felguard+                     default: break;+                 }+                 if(MD) CastSpell(this, MD, true);+                 break;+             }+             case 23824:+             {+                 switch(GetEntry())+                 {+                     case 416: MD = 23828; break;	// imp+			         case 1860: MD = 23842; break;	// voidwalker+			         case 1863: MD = 23835; break;	// succubus+			         case 417: MD = 23839; break;	// felhunter+			         case 17252: MD = 35705; break;	// felguard+			         default: break;+                 }+                 if(MD) CastSpell(this, MD, true);+			     break;+             }+		     case 23825:+             {+			     switch(GetEntry())+			     {+			         case 416: MD = 23829; break;	// imp+			         case 1860: MD = 23844; break;	// voidwalker+                     case 1863: MD = 23836; break;	// succubus+                     case 417: MD = 23840; break;	// felhunter+                     case 17252: MD = 35706; break;	// felguard+                     default: break;+                 }+                 if(MD) CastSpell(this, MD, true);+                 break;+             }+             // Demonic Knowledge+             case 35691:+             case 35692:+             case 35693:+             {+                 int32 DemonKnowledgeBasePoints0 = (*itr)->GetModifier()->m_amount;+                 DemonKnowledgeBasePoints0 = int32( DemonKnowledgeBasePoints0 * (GetStat(STAT_STAMINA) + GetStat(STAT_INTELLECT)) / 100.0f );+                 CastCustomSpell(this,35696,&DemonKnowledgeBasePoints0, NULL, NULL, true );+                 break;+             }+             default: break;+         }+    }+    // Focused Fire is has SPELL_AURA_ADD_FLAT_MODIFIER :-/+    Unit::AuraList const& flatModList = owner->GetAurasByType(SPELL_AURA_ADD_FLAT_MODIFIER);+    for(Unit::AuraList::const_iterator itr = flatModList.begin();itr!=flatModList.end();++itr)+    {+        switch((*itr)->GetSpellProto()->Id)+        {+            // Focused Fire+            case 35029:+                CastSpell(this, 35060, true);+                break;+		    case 35030:+			    CastSpell(this, 35061, true);+                break;+            default: break;+        }+    }+}Index: src/game/Pet.h===================================================================--- src/game/Pet.h	(revision 6488)+++ src/game/Pet.h	(working copy)@@ -176,6 +176,8 @@         void AddTeachSpell(uint32 learned_id, uint32 source_id) { m_teachspells[learned_id] = source_id; }          void LearnPetPassives();+	+	void BuildPetAuras(Unit* owner);          void _LoadSpellCooldowns();         void _SaveSpellCooldowns();Index: src/game/SpellAuras.cpp===================================================================--- src/game/SpellAuras.cpp	(revision 6488)+++ src/game/SpellAuras.cpp	(working copy)@@ -896,7 +896,7 @@     // passive auras (except totem auras) do not get placed in the slots     // area auras with SPELL_AURA_NONE are not shown on target     if((!m_isPassive || (caster && caster->GetTypeId() == TYPEID_UNIT && ((Creature*)caster)->isTotem())) && -        (m_modifier.m_auraname != SPELL_AURA_NONE || !IsAreaAura()))+        (m_spellProto->Effect[GetEffIndex()] != SPELL_EFFECT_APPLY_AREA_AURA_ENEMY || m_target != caster))     {         if(!samespell)                                      // new slot need         {Index: src/game/SpellEffects.cpp===================================================================--- src/game/SpellEffects.cpp	(revision 6488)+++ src/game/SpellEffects.cpp	(working copy)@@ -987,6 +987,15 @@                     m_caster->CastSpell(m_caster,45088,true);                     return;                 }+		case 19028:                                 // Soul Link+                {+                    if (!unitTarget)+                        return;++                    // Pet will cast aura+                    unitTarget->CastSpell(unitTarget,25228,true,NULL);+                    return;+                }		             }              //All IconID Check in there