aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Object
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2012-07-12 21:20:34 +0200
committerShauren <shauren.trinity@gmail.com>2012-07-12 21:20:34 +0200
commit0b22b329d6d63af4b8ed73e2906c71236349b1bd (patch)
treeebad14a643b7c017e5a5921566788d176c218e51 /src/server/game/Entities/Object
parent55bd065ddad8dcf50fcda9128b86a18d1a892072 (diff)
Core/PacketIO: Updated SMSG_UPDATE_OBJECT structure
Diffstat (limited to 'src/server/game/Entities/Object')
-rwxr-xr-xsrc/server/game/Entities/Object/Object.cpp338
-rwxr-xr-xsrc/server/game/Entities/Object/ObjectDefines.h35
-rwxr-xr-xsrc/server/game/Entities/Object/Updates/UpdateData.cpp4
-rwxr-xr-xsrc/server/game/Entities/Object/Updates/UpdateData.h30
4 files changed, 286 insertions, 121 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index d21ae63be45..f6c350ecb87 100755
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -295,119 +295,281 @@ void Object::DestroyForPlayer(Player* target, bool onDeath) const
void Object::_BuildMovementUpdate(ByteBuffer* data, uint16 flags) const
{
- *data << uint16(flags); // update flags
+ uint32 unkLoopCounter = 0;
+ // Bit content
+ data->WriteBit(0);
+ data->WriteBit(0);
+ data->WriteBit(flags & UPDATEFLAG_ROTATION);
+ data->WriteBit(flags & UPDATEFLAG_ANIMKITS);
+ data->WriteBit(flags & UPDATEFLAG_HAS_TARGET);
+ data->WriteBit(flags & UPDATEFLAG_SELF);
+ data->WriteBit(flags & UPDATEFLAG_VEHICLE);
+ data->WriteBit(flags & UPDATEFLAG_LIVING);
+ data->WriteBits(unkLoopCounter, 24);
+ data->WriteBit(0);
+ data->WriteBit(flags & UPDATEFLAG_GO_TRANSPORT_POSITION);
+ data->WriteBit(flags & UPDATEFLAG_STATIONARY_POSITION);
+ data->WriteBit(0);
+ data->WriteBit(0);
+ data->WriteBit(flags & UPDATEFLAG_TRANSPORT);
- // 0x20
if (flags & UPDATEFLAG_LIVING)
{
Unit const* self = ToUnit();
- self->BuildMovementPacket(data);
+ ObjectGuid guid = GetGUID();
+ uint32 movementFlags = self->m_movementInfo.GetMovementFlags();
+ uint16 movementFlagsExtra = self->m_movementInfo.GetExtraMovementFlags();
+
+ data->WriteBit(!movementFlags);
+ data->WriteBit(0); // Has Orientation
+ data->WriteBit(guid[7]);
+ data->WriteBit(guid[3]);
+ data->WriteBit(guid[2]);
+ if (movementFlags)
+ data->WriteBits(movementFlags, 30);
+
+ data->WriteBit(0);
+ data->WriteBit(!((movementFlags & (MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING)) ||
+ (movementFlagsExtra & MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING))); // Has pitch
+ data->WriteBit(movementFlags & MOVEMENTFLAG_SPLINE_ENABLED); // Has spline data
+ data->WriteBit(movementFlagsExtra & MOVEMENTFLAG2_INTERPOLATED_TURNING);// Has fall data
+ data->WriteBit(!(movementFlags & MOVEMENTFLAG_SPLINE_ELEVATION)); // Has spline elevation
+ data->WriteBit(guid[5]);
+ data->WriteBit(movementFlags & MOVEMENTFLAG_ONTRANSPORT); // Has transport data
+ data->WriteBit(0); // Is missing time
+ if (movementFlags & MOVEMENTFLAG_ONTRANSPORT)
+ {
+ ObjectGuid transGuid = self->m_movementInfo.t_guid;
+
+ data->WriteBit(transGuid[1]);
+ data->WriteBit(movementFlagsExtra & MOVEMENTFLAG2_INTERPOLATED_MOVEMENT);
+ data->WriteBit(transGuid[4]);
+ data->WriteBit(transGuid[0]);
+ data->WriteBit(transGuid[6]);
+ data->WriteBit(0); // Has transport time 3
+ data->WriteBit(transGuid[7]);
+ data->WriteBit(transGuid[5]);
+ data->WriteBit(transGuid[3]);
+ data->WriteBit(transGuid[2]);
+ }
- *data << self->GetSpeed(MOVE_WALK);
- *data << self->GetSpeed(MOVE_RUN);
- *data << self->GetSpeed(MOVE_RUN_BACK);
- *data << self->GetSpeed(MOVE_SWIM);
- *data << self->GetSpeed(MOVE_SWIM_BACK);
- *data << self->GetSpeed(MOVE_FLIGHT);
- *data << self->GetSpeed(MOVE_FLIGHT_BACK);
- *data << self->GetSpeed(MOVE_TURN_RATE);
- *data << self->GetSpeed(MOVE_PITCH_RATE);
+ data->WriteBit(guid[4]);
+ if (movementFlags & MOVEMENTFLAG_SPLINE_ENABLED)
+ {
+ data->WriteBit(1); // Has extended spline data
+ Movement::PacketBuilder::WriteCreateBits(*self->movespline, *data);
+ }
+
+ data->WriteBit(guid[6]);
+ if (movementFlagsExtra & MOVEMENTFLAG2_INTERPOLATED_TURNING)
+ data->WriteBit(movementFlags & MOVEMENTFLAG_FALLING);
- // 0x08000000
- if (self->m_movementInfo.HasMovementFlag(MOVEMENTFLAG_SPLINE_ENABLED))
- Movement::PacketBuilder::WriteCreate(*self->movespline, *data);
+ data->WriteBit(guid[0]);
+ data->WriteBit(guid[1]);
+ data->WriteBit(0);
+ data->WriteBit(!movementFlagsExtra);
+ if (movementFlagsExtra)
+ data->WriteBits(movementFlagsExtra, 12);
}
- else
+
+ if (flags & UPDATEFLAG_GO_TRANSPORT_POSITION)
{
- WorldObject* worldObj = ((WorldObject*)this);
- if (flags & UPDATEFLAG_POSITION)
- {
- Transport* transport = worldObj->GetTransport();
- if (transport)
- data->append(transport->GetPackGUID());
- else
- *data << uint8(0);
-
- *data << worldObj->GetPositionX();
- *data << worldObj->GetPositionY();
- *data << worldObj->GetPositionZ();
- *data << worldObj->GetOrientation();
- if (isType(TYPEMASK_UNIT))
- *data << ((Unit*)this)->GetPositionZMinusOffset();
- else
- *data << worldObj->GetPositionZ();
+ WorldObject const* self = static_cast<WorldObject const*>(this);
+ ObjectGuid transGuid = self->m_movementInfo.t_guid;
+ data->WriteBit(transGuid[5]);
+ data->WriteBit(0); // Has GO transport time 3
+ data->WriteBit(transGuid[0]);
+ data->WriteBit(transGuid[3]);
+ data->WriteBit(transGuid[6]);
+ data->WriteBit(transGuid[1]);
+ data->WriteBit(transGuid[4]);
+ data->WriteBit(transGuid[2]);
+ data->WriteBit(0); // Has GO transport time 2
+ data->WriteBit(transGuid[7]);
+ }
- if (transport)
- {
- *data << worldObj->GetTransOffsetX();
- *data << worldObj->GetTransOffsetY();
- *data << worldObj->GetTransOffsetZ();
- }
- else
- {
- *data << worldObj->GetPositionX();
- *data << worldObj->GetPositionY();
- if (isType(TYPEMASK_UNIT))
- *data << ((Unit*)this)->GetPositionZMinusOffset();
- else
- *data << worldObj->GetPositionZ();
- }
+ if (flags & UPDATEFLAG_HAS_TARGET)
+ {
+ ObjectGuid victimGuid = ToUnit()->getVictim()->GetGUID(); // checked in BuildCreateUpdateBlockForPlayer
+ data->WriteBit(victimGuid[2]);
+ data->WriteBit(victimGuid[7]);
+ data->WriteBit(victimGuid[0]);
+ data->WriteBit(victimGuid[4]);
+ data->WriteBit(victimGuid[5]);
+ data->WriteBit(victimGuid[6]);
+ data->WriteBit(victimGuid[1]);
+ data->WriteBit(victimGuid[3]);
+ }
- *data << worldObj->GetOrientation();
+ if (flags & UPDATEFLAG_ANIMKITS)
+ {
+ data->WriteBit(1); // Missing AnimKit1
+ data->WriteBit(1); // Missing AnimKit2
+ data->WriteBit(1); // Missing AnimKit3
+ }
- if (GetTypeId() == TYPEID_CORPSE)
- *data << worldObj->GetOrientation();
- else
- *data << float(0);
- }
- else
+ data->FlushBits();
+
+ // Data
+ for (uint32 i = 0; i < unkLoopCounter; ++i)
+ *data << uint32(0);
+
+ if (flags & UPDATEFLAG_LIVING)
+ {
+ Unit const* self = ToUnit();
+ ObjectGuid guid = GetGUID();
+ uint32 movementFlags = self->m_movementInfo.GetMovementFlags();
+ uint16 movementFlagsExtra = self->m_movementInfo.GetExtraMovementFlags();
+
+ data->WriteByteSeq(guid[4]);
+ *data << self->GetSpeed(MOVE_RUN_BACK);
+ if (movementFlagsExtra & MOVEMENTFLAG2_INTERPOLATED_TURNING)
{
- // 0x40
- if (flags & UPDATEFLAG_STATIONARY_POSITION)
+ if (movementFlags & MOVEMENTFLAG_FALLING)
{
- *data << worldObj->GetPositionX();
- *data << worldObj->GetPositionY();
- if (isType(TYPEMASK_UNIT))
- *data << ((Unit*)this)->GetPositionZMinusOffset();
- else
- *data << worldObj->GetPositionZ();
- *data << worldObj->GetOrientation();
+ *data << float(self->m_movementInfo.j_cosAngle);
+ *data << float(self->m_movementInfo.j_xyspeed);
+ *data << float(self->m_movementInfo.j_sinAngle);
}
+
+ *data << uint32(self->m_movementInfo.fallTime);
+ *data << float(self->m_movementInfo.j_zspeed);
}
- }
- // 0x4
- if (flags & UPDATEFLAG_HAS_TARGET)
- {
- if (Unit* victim = this->ToUnit()->getVictim())
- data->append(victim->GetPackGUID());
- else
- *data << uint8(0);
- }
+ *data << self->GetSpeed(MOVE_SWIM_BACK);
+ if (movementFlags & MOVEMENTFLAG_SPLINE_ELEVATION)
+ *data << float(self->m_movementInfo.splineElevation);
- // 0x2
- if (flags & UPDATEFLAG_TRANSPORT)
- *data << uint32(getMSTime()); // Unknown - getMSTime is wrong.
+ if (movementFlags & MOVEMENTFLAG_SPLINE_ENABLED)
+ Movement::PacketBuilder::WriteCreateData(*self->movespline, *data);
+
+ *data << float(self->GetPositionZMinusOffset());
+ data->WriteByteSeq(guid[5]);
+ if (movementFlags & MOVEMENTFLAG_ONTRANSPORT)
+ {
+ ObjectGuid transGuid = self->m_movementInfo.t_guid;
+
+ data->WriteByteSeq(transGuid[5]);
+ data->WriteByteSeq(transGuid[7]);
+ *data << uint32(self->GetTransTime());
+ *data << float(self->GetTransOffsetO());
+ if (movementFlagsExtra & MOVEMENTFLAG2_INTERPOLATED_MOVEMENT)
+ *data << uint32(0);
+
+ *data << float(self->GetTransOffsetY());
+ *data << float(self->GetTransOffsetX());
+ data->WriteByteSeq(transGuid[3]);
+ *data << float(self->GetTransOffsetZ());
+ data->WriteByteSeq(transGuid[0]);
+ //if (hasTransportTime3)
+ // *data << uint32(0);
+
+ *data << int8(self->GetTransSeat());
+ data->WriteByteSeq(transGuid[1]);
+ data->WriteByteSeq(transGuid[6]);
+ data->WriteByteSeq(transGuid[2]);
+ data->WriteByteSeq(transGuid[4]);
+ }
+
+ *data << float(self->GetPositionX());
+ *data << self->GetSpeed(MOVE_PITCH_RATE);
+ data->WriteByteSeq(guid[0]);
+ data->WriteByteSeq(guid[3]);
+ *data << self->GetSpeed(MOVE_SWIM);
+ *data << float(self->GetPositionX());
+ data->WriteByteSeq(guid[7]);
+ data->WriteByteSeq(guid[1]);
+ data->WriteByteSeq(guid[2]);
+ *data << self->GetSpeed(MOVE_WALK);
+
+ //if (true) // Has time, controlled by bit just after HasTransport
+ *data << uint32(getMSTime());
+
+ *data << self->GetSpeed(MOVE_FLIGHT_BACK);
+ data->WriteByteSeq(guid[6]);
+ *data << self->GetSpeed(MOVE_TURN_RATE);
+ *data << float(self->GetOrientation());
+ *data << self->GetSpeed(MOVE_RUN);
+ if ((movementFlags & (MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING)) ||
+ (movementFlagsExtra & MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING))
+ *data << float(self->m_movementInfo.pitch);
+
+ *data << self->GetSpeed(MOVE_FLIGHT);
+ }
- // 0x80
if (flags & UPDATEFLAG_VEHICLE)
{
- // TODO: Allow players to aquire this updateflag.
- *data << uint32(((Unit*)this)->GetVehicleKit()->GetVehicleInfo()->m_ID);
- *data << float(((Creature*)this)->GetOrientation());
+ Unit const* self = ToUnit();
+ *data << float(self->GetOrientation());
+ *data << uint32(self->GetVehicleKit()->GetVehicleInfo()->m_ID);
}
- // 0x800 - AnimKits
- if (flags & UPDATEFLAG_ANIMKITS)
- *data << uint16(0) << uint16(0) << uint16(0); //unk
+ if (flags & UPDATEFLAG_GO_TRANSPORT_POSITION)
+ {
+ WorldObject const* self = static_cast<WorldObject const*>(this);
+ ObjectGuid transGuid = self->m_movementInfo.t_guid;
+
+ data->WriteBit(transGuid[0]);
+ data->WriteBit(transGuid[5]);
+ //if (hasTransportTime3)
+ // *data << uint32(0);
+
+ data->WriteBit(transGuid[3]);
+ *data << float(self->GetTransOffsetX());
+ data->WriteBit(transGuid[4]);
+ data->WriteBit(transGuid[6]);
+ data->WriteBit(transGuid[1]);
+ *data << uint32(self->GetTransTime());
+ *data << float(self->GetTransOffsetY());
+ data->WriteBit(transGuid[2]);
+ data->WriteBit(transGuid[7]);
+ *data << float(self->GetTransOffsetZ());
+ *data << int8(self->GetTransSeat());
+ *data << float(self->GetTransOffsetO());
+ //if (hasTransportTime2)
+ // *data << uint32(0);
+ }
- // 0x200
if (flags & UPDATEFLAG_ROTATION)
- *data << int64(((GameObject*)this)->GetRotation());
+ *data << uint64(ToGameObject()->GetRotation());
- // 0x1000
- if (flags & UPDATEFLAG_UNK3)
- *data << uint8(0);//unk counter to read uint32 values
+ if (flags & UPDATEFLAG_STATIONARY_POSITION)
+ {
+ WorldObject const* self = static_cast<WorldObject const*>(this);
+ *data << float(self->GetOrientation());
+ *data << float(self->GetPositionX());
+ *data << float(self->GetPositionY());
+ if (Unit const* unit = ToUnit())
+ *data << float(unit->GetPositionZMinusOffset());
+ else
+ *data << float(self->GetPositionZ());
+ }
+
+ if (flags & UPDATEFLAG_HAS_TARGET)
+ {
+ ObjectGuid victimGuid = ToUnit()->getVictim()->GetGUID(); // checked in BuildCreateUpdateBlockForPlayer
+ data->WriteByteSeq(victimGuid[0]);
+ data->WriteByteSeq(victimGuid[3]);
+ data->WriteByteSeq(victimGuid[5]);
+ data->WriteByteSeq(victimGuid[7]);
+ data->WriteByteSeq(victimGuid[6]);
+ data->WriteByteSeq(victimGuid[2]);
+ data->WriteByteSeq(victimGuid[1]);
+ data->WriteByteSeq(victimGuid[4]);
+ }
+
+ //if (flags & UPDATEFLAG_ANIMKITS)
+ //{
+ // if (hasAnimKit1)
+ // *data << uint16(animKit1);
+ // if (hasAnimKit2)
+ // *data << uint16(animKit2);
+ // if (hasAnimKit3)
+ // *data << uint16(animKit3);
+ //}
+
+ if (flags & UPDATEFLAG_TRANSPORT)
+ *data << uint32(getMSTime()); // Unknown - getMSTime is wrong.
}
void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask* updateMask, Player* target) const
diff --git a/src/server/game/Entities/Object/ObjectDefines.h b/src/server/game/Entities/Object/ObjectDefines.h
index a9d14b85a59..ef1eeb237b7 100755
--- a/src/server/game/Entities/Object/ObjectDefines.h
+++ b/src/server/game/Entities/Object/ObjectDefines.h
@@ -33,18 +33,18 @@
enum HighGuid
{
- HIGHGUID_ITEM = 0x4000, // blizz 4000
- HIGHGUID_CONTAINER = 0x4000, // blizz 4000
- HIGHGUID_PLAYER = 0x0000, // blizz 0000
- HIGHGUID_GAMEOBJECT = 0xF110, // blizz F110
- HIGHGUID_TRANSPORT = 0xF120, // blizz F120 (for GAMEOBJECT_TYPE_TRANSPORT)
- HIGHGUID_UNIT = 0xF130, // blizz F130
- HIGHGUID_PET = 0xF140, // blizz F140
- HIGHGUID_VEHICLE = 0xF150, // blizz F550
- HIGHGUID_DYNAMICOBJECT = 0xF100, // blizz F100
+ HIGHGUID_ITEM = 0x400, // blizz 4000
+ HIGHGUID_CONTAINER = 0x400, // blizz 4000
+ HIGHGUID_PLAYER = 0x000, // blizz 0000
+ HIGHGUID_GAMEOBJECT = 0xF11, // blizz F110
+ HIGHGUID_TRANSPORT = 0xF12, // blizz F120 (for GAMEOBJECT_TYPE_TRANSPORT)
+ HIGHGUID_UNIT = 0xF13, // blizz F130
+ HIGHGUID_PET = 0xF14, // blizz F140
+ HIGHGUID_VEHICLE = 0xF15, // blizz F550
+ HIGHGUID_DYNAMICOBJECT = 0xF10, // blizz F100
HIGHGUID_CORPSE = 0xF101, // blizz F100
- HIGHGUID_MO_TRANSPORT = 0x1FC0, // blizz 1FC0 (for GAMEOBJECT_TYPE_MO_TRANSPORT)
- HIGHGUID_GROUP = 0x1F50,
+ HIGHGUID_MO_TRANSPORT = 0x1FC, // blizz 1FC0 (for GAMEOBJECT_TYPE_MO_TRANSPORT)
+ HIGHGUID_GROUP = 0x1F5,
HIGHGUID_GUILD = 0x1FF5, // new 4.x
};
@@ -70,15 +70,20 @@ enum HighGuid
// l - OBJECT_FIELD_GUID
// e - OBJECT_FIELD_ENTRY for GO (except GAMEOBJECT_TYPE_MO_TRANSPORT) and creatures or UNIT_FIELD_PETNUMBER for pets
// h - OBJECT_FIELD_GUID + 1
-#define MAKE_NEW_GUID(l, e, h) uint64(uint64(l) | (uint64(e) << 24) | (uint64(h) << 48))
+#define MAKE_NEW_GUID(l, e, h) uint64(uint64(l) | (uint64(e) << 32) | (uint64(h) << ((h == HIGHGUID_GUILD || h == HIGHGUID_CORPSE) ? 48 : 52)))
-#define GUID_HIPART(x) (uint32)((uint64(x) >> 48) & 0x0000FFFF)
+//#define GUID_HIPART(x) (uint32)((uint64(x) >> 52)) & 0x0000FFFF)
+inline uint32 GUID_HIPART(uint64 guid)
+{
+ uint32 t = ((uint64(guid) >> 48) & 0x0000FFFF);
+ return (t == HIGHGUID_GUILD || t == HIGHGUID_CORPSE) ? t : ((uint32(t) >> 4) & 0x00000FFF);
+}
// We have different low and middle part size for different guid types
#define _GUID_ENPART_2(x) 0
-#define _GUID_ENPART_3(x) (uint32)((uint64(x) >> 24) & UI64LIT(0x0000000000FFFFFF))
+#define _GUID_ENPART_3(x) (uint32)((uint64(x) >> 32) & UI64LIT(0x0000000000FFFFFF))
#define _GUID_LOPART_2(x) (uint32)(uint64(x) & UI64LIT(0x00000000FFFFFFFF))
-#define _GUID_LOPART_3(x) (uint32)(uint64(x) & UI64LIT(0x0000000000FFFFFF))
+#define _GUID_LOPART_3(x) (uint32)(uint64(x) & UI64LIT(0x00000000FFFFFFFF))
inline bool IsGuidHaveEnPart(uint64 guid)
{
diff --git a/src/server/game/Entities/Object/Updates/UpdateData.cpp b/src/server/game/Entities/Object/Updates/UpdateData.cpp
index f9536122f73..1a1b0984f03 100755
--- a/src/server/game/Entities/Object/Updates/UpdateData.cpp
+++ b/src/server/game/Entities/Object/Updates/UpdateData.cpp
@@ -51,7 +51,7 @@ bool UpdateData::BuildPacket(WorldPacket* packet)
packet->Initialize(SMSG_UPDATE_OBJECT, 2 + 4 + (m_outOfRangeGUIDs.empty() ? 0 : 1 + 4 + 9 * m_outOfRangeGUIDs.size()) + m_data.wpos());
*packet << uint16(m_map);
- *packet << uint32(m_blockCount);
+ *packet << uint32(m_blockCount + (m_outOfRangeGUIDs.empty() ? 0 : 1));
if (!m_outOfRangeGUIDs.empty())
{
@@ -59,9 +59,7 @@ bool UpdateData::BuildPacket(WorldPacket* packet)
*packet << uint32(m_outOfRangeGUIDs.size());
for (std::set<uint64>::const_iterator i = m_outOfRangeGUIDs.begin(); i != m_outOfRangeGUIDs.end(); ++i)
- {
packet->appendPackGUID(*i);
- }
}
packet->append(m_data);
diff --git a/src/server/game/Entities/Object/Updates/UpdateData.h b/src/server/game/Entities/Object/Updates/UpdateData.h
index 11d54ac488e..27a42be5c2d 100755
--- a/src/server/game/Entities/Object/Updates/UpdateData.h
+++ b/src/server/game/Entities/Object/Updates/UpdateData.h
@@ -32,21 +32,21 @@ enum OBJECT_UPDATE_TYPE
enum OBJECT_UPDATE_FLAGS
{
- UPDATEFLAG_NONE = 0x0000,
- UPDATEFLAG_SELF = 0x0001,
- UPDATEFLAG_TRANSPORT = 0x0002,
- UPDATEFLAG_HAS_TARGET = 0x0004,
- UPDATEFLAG_UNKNOWN = 0x0008,
- UPDATEFLAG_LOWGUID = 0x0010,
- UPDATEFLAG_LIVING = 0x0020,
- UPDATEFLAG_STATIONARY_POSITION = 0x0040,
- UPDATEFLAG_VEHICLE = 0x0080,
- UPDATEFLAG_POSITION = 0x0100,
- UPDATEFLAG_ROTATION = 0x0200,
- UPDATEFLAG_UNK3 = 0x0400,
- UPDATEFLAG_ANIMKITS = 0x0800,
- UPDATEFLAG_UNK5 = 0x1000,
- UPDATEFLAG_UNK6 = 0x2000
+ UPDATEFLAG_NONE = 0x0000,
+ UPDATEFLAG_SELF = 0x0001,
+ UPDATEFLAG_TRANSPORT = 0x0002,
+ UPDATEFLAG_HAS_TARGET = 0x0004,
+ UPDATEFLAG_UNKNOWN = 0x0008,
+ UPDATEFLAG_LOWGUID = 0x0010,
+ UPDATEFLAG_LIVING = 0x0020,
+ UPDATEFLAG_STATIONARY_POSITION = 0x0040,
+ UPDATEFLAG_VEHICLE = 0x0080,
+ UPDATEFLAG_GO_TRANSPORT_POSITION = 0x0100,
+ UPDATEFLAG_ROTATION = 0x0200,
+ UPDATEFLAG_UNK3 = 0x0400,
+ UPDATEFLAG_ANIMKITS = 0x0800,
+ UPDATEFLAG_UNK5 = 0x1000,
+ UPDATEFLAG_UNK6 = 0x2000,
};
class UpdateData