* Fixed SMSG_COMPRESSED_UPDATE_OBJECT
Probably needs more thorough checking
This commit is contained in:
parent
feafa87372
commit
5aaeba6aa5
@ -37,10 +37,12 @@ void WorldSession::_HandleCompressedUpdateObjectOpcode(WorldPacket& recvPacket)
|
||||
void WorldSession::_HandleUpdateObjectOpcode(WorldPacket& recvPacket)
|
||||
{
|
||||
uint8 utype;
|
||||
//uint8 hasTransport;
|
||||
uint8 hasTransport;
|
||||
uint32 usize, ublocks, readblocks=0;
|
||||
uint64 uguid;
|
||||
recvPacket >> ublocks; // >> hasTransport;
|
||||
if(GetInstance()->GetConf()->clientbuild <= 6005)
|
||||
recvPacket >> hasTransport;
|
||||
//logdev("UpdateObject: blocks = %u, hasTransport = %u", ublocks, hasTransport);
|
||||
logdev("UpdateObject: blocks = %u", ublocks);
|
||||
while((recvPacket.rpos() < recvPacket.size())&& (readblocks < ublocks))
|
||||
@ -238,10 +240,13 @@ void WorldSession::_MovementUpdate(uint8 objtypeid, uint64 uguid, WorldPacket& r
|
||||
{
|
||||
MovementInfo mi; // TODO: use a reference to a MovementInfo in Unit/Player class once implemented
|
||||
uint16 flags;
|
||||
uint8 flags_6005;
|
||||
// uint64 fullguid; // see below
|
||||
float speedWalk, speedRun, speedSwimBack, speedSwim, speedWalkBack, speedTurn, speedFly, speedFlyBack, speedPitchRate;
|
||||
uint32 unk32;
|
||||
|
||||
uint16 cb = GetInstance()->GetConf()->clientbuild;
|
||||
|
||||
Object *obj = (Object*)objmgr.GetObj(uguid, true); // also depleted objects
|
||||
Unit *u = NULL;
|
||||
if(obj)
|
||||
@ -256,7 +261,13 @@ void WorldSession::_MovementUpdate(uint8 objtypeid, uint64 uguid, WorldPacket& r
|
||||
logerror("MovementUpdate for unknown object "I64FMT" typeid=%u",uguid,objtypeid);
|
||||
}
|
||||
|
||||
recvPacket >> flags;
|
||||
if(cb > 6005)
|
||||
recvPacket >> flags;
|
||||
else
|
||||
{
|
||||
recvPacket >> flags_6005;
|
||||
flags = flags_6005;
|
||||
}
|
||||
|
||||
mi.flags = 0; // not sure if its correct to set it to 0 (needs some starting flag?)
|
||||
if(flags & UPDATEFLAG_LIVING)
|
||||
@ -358,19 +369,26 @@ void WorldSession::_MovementUpdate(uint8 objtypeid, uint64 uguid, WorldPacket& r
|
||||
}
|
||||
}
|
||||
|
||||
if(flags & UPDATEFLAG_LOWGUID)
|
||||
if(cb > 6005 && flags & UPDATEFLAG_LOWGUID)
|
||||
{
|
||||
recvPacket >> unk32;
|
||||
logdev("MovementUpdate: UPDATEFLAG_LOWGUID is set, got %X", unk32);
|
||||
}
|
||||
|
||||
if(flags & UPDATEFLAG_HIGHGUID)
|
||||
if(cb > 6005 && flags & UPDATEFLAG_HIGHGUID)
|
||||
{
|
||||
recvPacket >> unk32; // 2.0.6 - high guid was there, unk for 2.0.12
|
||||
// not sure if this is correct, MaNGOS sends 0 always.
|
||||
//obj->SetUInt32Value(OBJECT_FIELD_GUID+1,higuid); // note that this sets only the high part of the guid
|
||||
logdev("MovementUpdate: UPDATEFLAG_HIGHGUID is set, got %X", unk32);
|
||||
}
|
||||
if(cb <= 6005 && flags & UPDATEFLAG_ALL_6005)
|
||||
{
|
||||
recvPacket >> unk32;
|
||||
// MaNGOS sends 1 always.
|
||||
logdev("MovementUpdate: UPDATEFLAG_ALL is set, got %X", unk32);
|
||||
}
|
||||
|
||||
|
||||
if(flags & UPDATEFLAG_HAS_TARGET)
|
||||
{
|
||||
|
||||
@ -26,6 +26,15 @@ enum OBJECT_UPDATE_FLAGS
|
||||
UPDATEFLAG_ROTATION = 0x0200
|
||||
};
|
||||
|
||||
enum OBJECT_UPDATE_FLAGS_6005 //UPDATEFLAGS with different meaning in 1.12.x
|
||||
{
|
||||
UPDATEFLAG_FULLGUID_6005= 0x0004,//6005 Never used in MaNGOS
|
||||
UPDATEFLAG_HIGHGUID_6005= 0x0008,//6005 Never used in MaNGOS
|
||||
UPDATEFLAG_ALL_6005 = 0x0010 //6005
|
||||
};
|
||||
|
||||
|
||||
|
||||
enum MovementFlags
|
||||
{
|
||||
MOVEMENTFLAG_NONE = 0x00000000,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user