* 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)
|
void WorldSession::_HandleUpdateObjectOpcode(WorldPacket& recvPacket)
|
||||||
{
|
{
|
||||||
uint8 utype;
|
uint8 utype;
|
||||||
//uint8 hasTransport;
|
uint8 hasTransport;
|
||||||
uint32 usize, ublocks, readblocks=0;
|
uint32 usize, ublocks, readblocks=0;
|
||||||
uint64 uguid;
|
uint64 uguid;
|
||||||
recvPacket >> ublocks; // >> hasTransport;
|
recvPacket >> ublocks; // >> hasTransport;
|
||||||
|
if(GetInstance()->GetConf()->clientbuild <= 6005)
|
||||||
|
recvPacket >> hasTransport;
|
||||||
//logdev("UpdateObject: blocks = %u, hasTransport = %u", ublocks, hasTransport);
|
//logdev("UpdateObject: blocks = %u, hasTransport = %u", ublocks, hasTransport);
|
||||||
logdev("UpdateObject: blocks = %u", ublocks);
|
logdev("UpdateObject: blocks = %u", ublocks);
|
||||||
while((recvPacket.rpos() < recvPacket.size())&& (readblocks < 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
|
MovementInfo mi; // TODO: use a reference to a MovementInfo in Unit/Player class once implemented
|
||||||
uint16 flags;
|
uint16 flags;
|
||||||
|
uint8 flags_6005;
|
||||||
// uint64 fullguid; // see below
|
// uint64 fullguid; // see below
|
||||||
float speedWalk, speedRun, speedSwimBack, speedSwim, speedWalkBack, speedTurn, speedFly, speedFlyBack, speedPitchRate;
|
float speedWalk, speedRun, speedSwimBack, speedSwim, speedWalkBack, speedTurn, speedFly, speedFlyBack, speedPitchRate;
|
||||||
uint32 unk32;
|
uint32 unk32;
|
||||||
|
|
||||||
|
uint16 cb = GetInstance()->GetConf()->clientbuild;
|
||||||
|
|
||||||
Object *obj = (Object*)objmgr.GetObj(uguid, true); // also depleted objects
|
Object *obj = (Object*)objmgr.GetObj(uguid, true); // also depleted objects
|
||||||
Unit *u = NULL;
|
Unit *u = NULL;
|
||||||
if(obj)
|
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);
|
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?)
|
mi.flags = 0; // not sure if its correct to set it to 0 (needs some starting flag?)
|
||||||
if(flags & UPDATEFLAG_LIVING)
|
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;
|
recvPacket >> unk32;
|
||||||
logdev("MovementUpdate: UPDATEFLAG_LOWGUID is set, got %X", 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
|
recvPacket >> unk32; // 2.0.6 - high guid was there, unk for 2.0.12
|
||||||
// not sure if this is correct, MaNGOS sends 0 always.
|
// 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
|
//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);
|
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)
|
if(flags & UPDATEFLAG_HAS_TARGET)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -26,6 +26,15 @@ enum OBJECT_UPDATE_FLAGS
|
|||||||
UPDATEFLAG_ROTATION = 0x0200
|
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
|
enum MovementFlags
|
||||||
{
|
{
|
||||||
MOVEMENTFLAG_NONE = 0x00000000,
|
MOVEMENTFLAG_NONE = 0x00000000,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user