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