Index: src/game/Spell.cpp===================================================================--- src/game/Spell.cpp (revision 3913)+++ src/game/Spell.cpp (working copy)@@ -77,6 +77,9 @@ void SpellCastTargets::setUnitTarget(Unit *target) {+ if (!target)+ return;+ m_destX = target->GetPositionX(); m_destY = target->GetPositionY(); m_destZ = target->GetPositionZ();@@ -967,16 +970,19 @@ if ( ApplyDamageMultiplier ) DamageMultiplier *= m_spellInfo->DmgMultiplier[j];++ //Call scripted function for AI if this spell is casted upon a creature+ // Some Script Spell Destroy the target or something and the target is always the player+ // then re-find it in grids if this creature+ if(GUID_HIPART(*iunit)==HIGHGUID_UNIT)+ {+ Creature* creature = m_caster->GetGUID()==*iunit ? (Creature*)m_caster : ObjectAccessor::Instance().GetCreature(*m_caster,*iunit);+ if( creature && creature->AI() )+ creature->AI()->SpellHit(m_caster,m_spellInfo);+ } } }- //Call scripted function for AI if this spell is casted upon a creature- // Some Script Spell Destroy the target or something and the target is allways the player- // so here i overwrite that, Spell 8593, is a good example of this.- Unit * _target = ObjectAccessor::Instance().GetUnit(*m_caster, ((Player *)m_caster)->GetSelection());- if( _target && _target->GetTypeId() == TYPEID_UNIT && ((Creature*)_target)->AI())- ((Creature*)_target)->AI()->SpellHit(m_caster,m_spellInfo);- for(std::list<Item*>::iterator iitem = m_targetItems[j].begin();iitem != m_targetItems[j].end();iitem++) HandleEffects(NULL,(*iitem),NULL,j);@@ -1339,14 +1345,13 @@ // ignore autorepeat/melee casts for speed (not exist quest for spells (hm... ) if( m_caster->GetTypeId() == TYPEID_PLAYER && !IsAutoRepeat() && !IsMeleeSpell() && !IsChannelActive() ) {- if( m_targets.getUnitTarget() && m_targets.getUnitTarget()->GetTypeId() == TYPEID_UNIT )- ((Player*)m_caster)->CastedCreatureOrGO(m_targets.getUnitTarget()->GetEntry(),m_targets.getUnitTarget()->GetGUID(),m_spellInfo->Id);- else- { - //Some Spell like 8593, Overwrite Spell Target don't know why, so i overwrite here.- Unit * _target = ObjectAccessor::Instance().GetUnit(*m_caster, ((Player *)m_caster)->GetSelection());- if( _target && _target->GetTypeId() == TYPEID_UNIT)- ((Player*)m_caster)->CastedCreatureOrGO(_target->GetEntry(),_target->GetGUID(),m_spellInfo->Id);+ if( m_targets.getUnitTargetGUID() && GUID_HIPART(m_targets.getUnitTargetGUID())==HIGHGUID_UNIT )+ {+ // Some Script Spell Destroy the target or something and the target is always the player+ // then re-find it in grids if this creature+ Creature* creature = m_caster->GetGUID()==m_targets.getUnitTargetGUID() ? (Creature*)m_caster : ObjectAccessor::Instance().GetCreature(*m_caster,m_targets.getUnitTargetGUID());+ if( creature )+ ((Player*)m_caster)->CastedCreatureOrGO(creature->GetEntry(),creature->GetGUID(),m_spellInfo->Id); } if( m_targets.getGOTarget() )