Index: trunk/src/game/Unit.h
===================================================================
--- trunk/src/game/Unit.h (revision 186)
+++ trunk/src/game/Unit.h (revision 203)
@@ -943,4 +943,5 @@
         void DeMorph();
 
+        void SendAttackStart(Unit* pVictim); 
         void SendAttackStateUpdate(uint32 HitInfo, Unit *target, uint8 SwingType, SpellSchoolMask damageSchoolMask, uint32 Damage, uint32 AbsorbDamage, uint32 Resist, VictimState TargetState, uint32 BlockedAmount);
         void SendSpellNonMeleeDamageLog(Unit *target,uint32 SpellID,uint32 Damage, SpellSchoolMask damageSchoolMask,uint32 AbsorbedDamage, uint32 Resist,bool PhysicalDamage, uint32 Blocked, bool CriticalHit = false);
@@ -1353,5 +1354,5 @@
     private:
         void SendAttackStop(Unit* victim);                  // only from AttackStop(Unit*)
-        void SendAttackStart(Unit* pVictim);                // only from Unit::AttackStart(Unit*)
+        //void SendAttackStart(Unit* pVictim);                // only from Unit::AttackStart(Unit*)
 
         void ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag, AuraTypeSet const& procAuraTypes, WeaponAttackType attType, SpellEntry const * procSpell, uint32 damage, SpellSchoolMask damageSchoolMask );
Index: trunk/src/game/Object.cpp
===================================================================
--- trunk/src/game/Object.cpp (revision 178)
+++ trunk/src/game/Object.cpp (revision 203)
@@ -602,7 +602,17 @@
                     {
                         if(target->isGameMaster())
-                            *data << cinfo->Modelid1;
+                        {
+                            if(cinfo->Modelid2)
+                                *data << cinfo->Modelid1;
+                            else
+                                *data << 17519; // world invisible trigger's model
+                        }
                         else
-                            *data << cinfo->Modelid3;
+                        {
+                            if(cinfo->Modelid2)
+                                *data << cinfo->Modelid2;
+                            else
+                                *data << 11686; // world invisible trigger's model
+                        }
                     }
                     else
Index: trunk/src/game/GameObject.cpp
===================================================================
--- trunk/src/game/GameObject.cpp (revision 146)
+++ trunk/src/game/GameObject.cpp (revision 203)
@@ -1283,3 +1283,5 @@
         trigger->CastSpell(target, spell, true);
     }
-}
+    //trigger->setDeathState(JUST_DIED);
+    //trigger->RemoveCorpse();
+}
Index: trunk/src/game/Player.cpp
===================================================================
--- trunk/src/game/Player.cpp (revision 200)
+++ trunk/src/game/Player.cpp (revision 203)
@@ -16407,5 +16407,14 @@
             // send data at target visibility change (adding to client)
             if((*i)!=this && (*i)->isType(TYPEMASK_UNIT))
+            {
                 SendAuraDurationsForTarget(*i);
+                //if(((Unit*)(*i))->isAlive()) //should be always alive
+                {
+                    if((*i)->GetTypeId()==TYPEID_UNIT)
+                        ((Creature*)(*i))->SendMonsterMoveWithSpeedToCurrentDestination(this);
+                    if(((Unit*)(*i))->getVictim())
+                        ((Unit*)(*i))->SendAttackStart(((Unit*)(*i))->getVictim());
+                }
+            }
 
             i = stealthedUnits.erase(i);
@@ -17387,8 +17396,14 @@
             // send data at target visibility change (adding to client)
             if(target!=this && target->isType(TYPEMASK_UNIT))
+            {
                 SendAuraDurationsForTarget((Unit*)target);
-
-            if(target->GetTypeId()==TYPEID_UNIT && ((Creature*)target)->isAlive())
-                ((Creature*)target)->SendMonsterMoveWithSpeedToCurrentDestination(this);
+                if(((Unit*)target)->isAlive())
+                {
+                    if(target->GetTypeId()==TYPEID_UNIT)
+                        ((Creature*)target)->SendMonsterMoveWithSpeedToCurrentDestination(this);
+                    if(((Unit*)target)->getVictim())
+                        ((Unit*)target)->SendAttackStart(((Unit*)target)->getVictim());
+                }
+            }
         }
     }
Index: trunk/src/game/Spell.cpp
===================================================================
--- trunk/src/game/Spell.cpp (revision 197)
+++ trunk/src/game/Spell.cpp (revision 203)
@@ -1013,5 +1013,5 @@
             // for delayed spells ignore negative spells (after duel end) for friendly targets
             // TODO: this cause soul transfer bugged
-            if(m_spellInfo->speed > 0.0f && !IsPositiveSpell(m_spellInfo->Id))
+            if(m_spellInfo->speed > 0.0f && unit->GetTypeId() == TYPEID_PLAYER && !IsPositiveSpell(m_spellInfo->Id))
             {
                 m_caster->SendSpellMiss(unit, m_spellInfo->Id, SPELL_MISS_EVADE);
