rendered paste bodyIndex: src/game/SpellAuras.cpp===================================================================--- src/game/SpellAuras.cpp (revision 5333)+++ src/game/SpellAuras.cpp (working copy)@@ -305,7 +305,8 @@ m_procCharges(0), m_spellmod(NULL), m_spellId(spellproto->Id), m_effIndex(eff), m_caster_guid(0), m_target(target), m_timeCla(1000), m_castItemGuid(castItem?castItem->GetGUID():0), m_auraSlot(MAX_AURAS), m_positive(false), m_permanent(false), m_isPeriodic(false), m_isTrigger(false), m_isAreaAura(false), m_isPersistent(false),-m_periodicTimer(0), m_PeriodicEventId(0), m_updated(false), m_removeOnDeath(false),m_fearMoveAngle(0), m_isRemovedOnShapeLost(true)+m_periodicTimer(0), m_PeriodicEventId(0), m_updated(false), m_removeOnDeath(false),m_fearMoveAngle(0), m_isRemovedOnShapeLost(true),+m_casters_target_guid(0) { assert(target); @@ -334,6 +335,7 @@ else { m_caster_guid = caster->GetGUID();+ m_casters_target_guid = caster->GetUInt64Value(UNIT_FIELD_TARGET); damage = caster->CalculateSpellDamage(m_spellProto,m_effIndex,m_currentBasePoints,target); m_maxduration = caster->CalculateSpellDuration(m_spellProto);@@ -1077,14 +1079,6 @@ case 29528: trigger_spell_id = 28713; break; // Inoculation case 29917: trigger_spell_id = 29916; break; // Feed Captured Animal- case 1515: // Tame Beast- {- // TODO: currently this used as hack for Tame beast triggered spell,- // BUT this can be correct way to provide target for ALL this function calls- // in case m_target==caster (or GetSpellProto()->EffectImplicitTargetA[m_effIndex]==TARGET_SELF )- target = ObjectAccessor::GetUnit(*m_target, m_target->GetUInt64Value(UNIT_FIELD_TARGET));- break;- } case 1010: // Curse of Idiocy { // TODO: spell casted by result in correct way mostly@@ -1153,6 +1147,18 @@ return; } + bool hasTargetSingleEnemy = false;+ for (int i = 0; i < 3; ++i)+ hasTargetSingleEnemy |= (triggredSpellInfo->EffectImplicitTargetA[i] == TARGET_SINGLE_ENEMY);++ if (hasTargetSingleEnemy)+ {+ target = ObjectAccessor::GetUnit(*m_target, m_casters_target_guid);+ + if (!target)+ return;+ }+ Spell *spell = new Spell(caster, triggredSpellInfo, true, originalCasterGUID ); SpellCastTargets targets;Index: src/game/SpellAuras.h===================================================================--- src/game/SpellAuras.h (revision 5333)+++ src/game/SpellAuras.h (working copy)@@ -272,6 +272,7 @@ int32 m_currentBasePoints; // cache SpellEntry::EffectBasePoints and use for set custom base points uint64 m_caster_guid; Unit* m_target;+ uint64 m_casters_target_guid; int32 m_maxduration; int32 m_duration; int32 m_timeCla;Index: src/game/SpellEffects.cpp===================================================================--- src/game/SpellEffects.cpp (revision 5333)+++ src/game/SpellEffects.cpp (working copy)@@ -1645,26 +1645,6 @@ sLog.outDebug("Spell: Additional Aura is: %u", AdditionalSpellInfo->EffectApplyAuraName[0]); } }-- // arcane missiles, do not affect tame beast- if(Aur->IsTrigger() && m_spellInfo->Id != 1515)- {- SpellEntry const *spellInfo = sSpellStore.LookupEntry(m_spellInfo->EffectTriggerSpell[i]);- if (!spellInfo) return;- if (m_caster->GetTypeId() == TYPEID_PLAYER && spellInfo->EffectImplicitTargetA[0] == TARGET_SINGLE_ENEMY)- {- Unit *target = ObjectAccessor::GetUnit(*m_caster, ((Player*)m_caster)->GetSelection());- if (target)- {- if (!m_caster->IsFriendlyTo(target))- Aur->SetTarget(target);- else- cancel();- }- else- cancel();- }- } } void Spell::EffectUnlearnSpecialization( uint32 i )