[10647] Show die animation at totem destroy.

Or any creature type die with linked unsummon.

Original patch provided by Eggxp.
This commit is contained in:
VladimirMangos 2010-10-26 16:41:40 +04:00
parent edbb840103
commit fd7e86c79b
4 changed files with 14 additions and 8 deletions

View file

@ -723,7 +723,7 @@ Map::Remove(T *obj, bool remove)
else else
obj->RemoveFromWorld(); obj->RemoveFromWorld();
UpdateObjectVisibility(obj,cell,p); // i think will be better to call this function while object still in grid, this changes nothing but logically is better(as for me) UpdateObjectVisibility(obj,cell,p); // i think will be better to call this function while object still in grid, this changes nothing but logically is better(as for me)
RemoveFromGrid(obj,grid,cell); RemoveFromGrid(obj,grid,cell);
obj->ResetMap(); obj->ResetMap();

View file

@ -220,7 +220,7 @@ void Object::DestroyForPlayer( Player *target, bool anim ) const
{ {
MANGOS_ASSERT(target); MANGOS_ASSERT(target);
WorldPacket data(SMSG_DESTROY_OBJECT, 8); WorldPacket data(SMSG_DESTROY_OBJECT, 9);
data << GetObjectGuid(); data << GetObjectGuid();
data << uint8(anim ? 1 : 0); // WotLK (bool), may be despawn animation data << uint8(anim ? 1 : 0); // WotLK (bool), may be despawn animation
target->GetSession()->SendPacket(&data); target->GetSession()->SendPacket(&data);
@ -2084,4 +2084,4 @@ bool WorldObject::IsControlledByPlayer() const
default: default:
return false; return false;
} }
} }

View file

@ -19359,12 +19359,18 @@ void Player::UpdateVisibilityOf(WorldObject const* viewPoint, WorldObject* targe
{ {
if(!target->isVisibleForInState(this, viewPoint, true)) if(!target->isVisibleForInState(this, viewPoint, true))
{ {
if (target->GetTypeId()==TYPEID_UNIT)
BeforeVisibilityDestroy<Creature>((Creature*)target,this);
ObjectGuid t_guid = target->GetGUID(); ObjectGuid t_guid = target->GetGUID();
target->DestroyForPlayer(this); if (target->GetTypeId()==TYPEID_UNIT)
{
BeforeVisibilityDestroy<Creature>((Creature*)target,this);
// at remove from map (destroy) show kill animation (in different out of range/stealth case)
target->DestroyForPlayer(this, !target->IsInWorld() && ((Creature*)target)->isDead());
}
else
target->DestroyForPlayer(this);
m_clientGUIDs.erase(t_guid); m_clientGUIDs.erase(t_guid);
DEBUG_FILTER_LOG(LOG_FILTER_VISIBILITY_CHANGES, "%s out of range for player %u. Distance = %f",t_guid.GetString().c_str(),GetGUIDLow(),GetDistance(target)); DEBUG_FILTER_LOG(LOG_FILTER_VISIBILITY_CHANGES, "%s out of range for player %u. Distance = %f",t_guid.GetString().c_str(),GetGUIDLow(),GetDistance(target));

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__ #ifndef __REVISION_NR_H__
#define __REVISION_NR_H__ #define __REVISION_NR_H__
#define REVISION_NR "10646" #define REVISION_NR "10647"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__