# HG changeset patch # User thenecromancer # Date 1252940871 -7200 # Branch trunk # Node ID 91683ef0630ba85ca2679c1e783df884495ec2c1 # Parent 521031034c94ce5773f80f1501eb334dd2f0ca69 Fix Cornered Talent working bad ( applied at learn/call ) and removed only if health is increased back from 35% ( and then never applied until recalled ) Fix previous commit about Feeding Frenzy diff -r 521031034c94 -r 91683ef0630b src/game/Pet.cpp --- a/src/game/Pet.cpp Mon Sep 14 16:54:22 2009 +0200 +++ b/src/game/Pet.cpp Mon Sep 14 17:07:51 2009 +0200 @@ -1331,7 +1331,7 @@ m_spells[spell_id] = newspell; - if (IsPassiveSpell(spell_id)) + if (IsPassiveSpell(spell_id) && (!spellInfo->CasterAuraState || HasAuraState(AuraState(spellInfo->CasterAuraState)))) CastSpell(this, spell_id, true); else m_charmInfo->AddSpellToActionBar(spell_id); diff -r 521031034c94 -r 91683ef0630b src/game/SpellAuras.cpp --- a/src/game/SpellAuras.cpp Mon Sep 14 16:54:22 2009 +0200 +++ b/src/game/SpellAuras.cpp Mon Sep 14 17:07:51 2009 +0200 @@ -6745,23 +6745,14 @@ } switch (spell->Id) { - Unit *petTarget=NULL; - if (m_target->GetTypeId() != TYPEID_PLAYER || !((Player*)m_target)->GetPet()) - return; - - petTarget = ((Player*)m_target)->GetPet()->getVictim(); - - if (!petTarget) - return; - // Feeding Frenzy Rank 1 case 53511: - if ( petTarget->GetHealth() * 100 < petTarget->GetMaxHealth() * 35 ) + if ( m_target->getVictim() && m_target->getVictim()->GetHealth() * 100 < m_target->getVictim()->GetMaxHealth() * 35 ) m_target->CastSpell(m_target, 60096, true, 0, this); return; // Feeding Frenzy Rank 2 case 53512: - if ( petTarget->GetHealth() * 100 < petTarget->GetMaxHealth() * 35 ) + if ( m_target->getVictim() && m_target->getVictim()->GetHealth() * 100 < m_target->getVictim()->GetMaxHealth() * 35 ) m_target->CastSpell(m_target, 60097, true, 0, this); return; default: diff -r 521031034c94 -r 91683ef0630b src/game/Unit.cpp --- a/src/game/Unit.cpp Mon Sep 14 16:54:22 2009 +0200 +++ b/src/game/Unit.cpp Mon Sep 14 17:07:51 2009 +0200 @@ -8620,6 +8620,18 @@ CastSpell(this, itr->first, true, NULL); } } + else if (((Creature*)this)->isPet()) + { + Pet *pet = ((Pet*)this); + for (PetSpellMap::const_iterator itr = pet->m_spells.begin(); itr != pet->m_spells.end(); ++itr) + { + if(itr->second.state == PLAYERSPELL_REMOVED) continue; + SpellEntry const *spellInfo = sSpellStore.LookupEntry(itr->first); + if (!spellInfo || !IsPassiveSpell(itr->first)) continue; + if (spellInfo->CasterAuraState == flag) + CastSpell(this, itr->first, true, NULL); + } + } } } else