* Fixed SMSG_COMPRESSED_UPDATE_OBJECT

Probably needs more thorough checking
This commit is contained in:
shlainn 2011-09-07 23:39:37 +02:00
parent feafa87372
commit 5aaeba6aa5
2 changed files with 31 additions and 4 deletions

View File

@ -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)
{

View File

@ -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,