More work on update packets

This commit is contained in:
tomrus88 2009-02-26 19:55:45 +03:00
parent a8f7f57065
commit 42a8ae3752
11 changed files with 83 additions and 60 deletions

View file

@ -33,8 +33,8 @@ Corpse::Corpse(CorpseType type) : WorldObject()
{
m_objectType |= TYPEMASK_CORPSE;
m_objectTypeId = TYPEID_CORPSE;
// 2.3.2 - 0x58
m_updateFlag = (UPDATEFLAG_LOWGUID | UPDATEFLAG_HIGHGUID | UPDATEFLAG_HAS_POSITION);
// 3.1.0 - 0x148
m_updateFlag = (UPDATEFLAG_LOWGUID | UPDATEFLAG_HAS_POSITION | UPDATEFLAG_UNK1);
m_valuesCount = CORPSE_END;

View file

@ -35,8 +35,8 @@ DynamicObject::DynamicObject() : WorldObject()
{
m_objectType |= TYPEMASK_DYNAMICOBJECT;
m_objectTypeId = TYPEID_DYNAMICOBJECT;
// 2.3.2 - 0x58
m_updateFlag = (UPDATEFLAG_LOWGUID | UPDATEFLAG_HIGHGUID | UPDATEFLAG_HAS_POSITION);
// 3.1.0 - 0x48
m_updateFlag = (UPDATEFLAG_LOWGUID | UPDATEFLAG_HAS_POSITION);
m_valuesCount = DYNAMICOBJECT_END;
}

View file

@ -42,8 +42,8 @@ GameObject::GameObject() : WorldObject()
{
m_objectType |= TYPEMASK_GAMEOBJECT;
m_objectTypeId = TYPEID_GAMEOBJECT;
// 2.3.2 - 0x58
m_updateFlag = (UPDATEFLAG_LOWGUID | UPDATEFLAG_HIGHGUID | UPDATEFLAG_HAS_POSITION);
// 3.1.0 - 0x348
m_updateFlag = (UPDATEFLAG_LOWGUID | UPDATEFLAG_HAS_POSITION | UPDATEFLAG_UNK1 | UPDATEFLAG_UNK2);
m_valuesCount = GAMEOBJECT_END;
m_respawnTime = 0;

View file

@ -233,8 +233,8 @@ Item::Item( )
{
m_objectType |= TYPEMASK_ITEM;
m_objectTypeId = TYPEID_ITEM;
// 2.3.2 - 0x18
m_updateFlag = (UPDATEFLAG_LOWGUID | UPDATEFLAG_HIGHGUID);
// 3.1.0 - 0x08
m_updateFlag = UPDATEFLAG_LOWGUID;
m_valuesCount = ITEM_END;
m_slot = 0;

View file

@ -312,7 +312,7 @@ void Object::_BuildMovementUpdate(ByteBuffer * data, uint16 flags, uint32 flags2
{
if(GetTypeId() == TYPEID_PLAYER)
{
*data << (uint64)((Player*)this)->GetTransport()->GetGUID();
data->append(((Player*)this)->GetTransport()->GetPackGUID());
*data << (float)((Player*)this)->GetTransOffsetX();
*data << (float)((Player*)this)->GetTransOffsetY();
*data << (float)((Player*)this)->GetTransOffsetZ();
@ -470,14 +470,14 @@ void Object::_BuildMovementUpdate(ByteBuffer * data, uint16 flags, uint32 flags2
{
if(flags & UPDATEFLAG_UNK1)
{
*data << uint8(0); // PGUID
*data << float(0);
*data << float(0);
*data << float(0);
*data << float(0);
*data << float(0);
*data << float(0);
*data << float(0);
*data << uint8(0); // unk PGUID!
*data << ((WorldObject*)this)->GetPositionX();
*data << ((WorldObject*)this)->GetPositionY();
*data << ((WorldObject*)this)->GetPositionZ();
*data << ((WorldObject*)this)->GetPositionX();
*data << ((WorldObject*)this)->GetPositionY();
*data << ((WorldObject*)this)->GetPositionZ();
*data << ((WorldObject*)this)->GetOrientation();
*data << float(0);
}
else
@ -585,7 +585,22 @@ void Object::_BuildMovementUpdate(ByteBuffer * data, uint16 flags, uint32 flags2
// 0x200
if(flags & UPDATEFLAG_UNK2)
{
*data << uint64(0);
// may be precalculate it?
int64 rotation = 0;
float ang = ((WorldObject *)this)->GetOrientation();
float f_rot1 = sin(ang / 2.0f);
int64 i_rot1 = f_rot1 / atan(pow(2.0f, -20.0f));
rotation |= (i_rot1 << 43 >> 43) & 0x00000000001FFFFF;
//float f_rot2 = sin(0.0f / 2.0f);
//int64 i_rot2 = f_rot2 / atan(pow(2.0f, -20.0f));
//rotation |= (((i_rot2 << 22) >> 32) >> 11) & 0x000003FFFFE00000;
//float f_rot3 = sin(0.0f / 2.0f);
//int64 i_rot3 = f_rot3 / atan(pow(2.0f, -21.0f));
//rotation |= (i_rot3 >> 42) & 0x7FFFFC0000000000;
*data << uint64(rotation);
}
}

View file

@ -1228,21 +1228,25 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] =
/*0x4AF*/ { "UMSG_UNKNOWN_1199", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x4B0*/ { "UMSG_UNKNOWN_1200", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x4B1*/ { "UMSG_UNKNOWN_1201", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x4B2*/ { "CMSG_UNKNOWN_1202", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x4B3*/ { "SMSG_UNKNOWN_1203", STATUS_NEVER, &WorldSession::Handle_ServerSide },
/*0x4B4*/ { "CMSG_LFG_SET_ROLES", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x4B5*/ { "UMSG_UNKNOWN_1205", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x4B2*/ { "SMSG_UNKNOWN_1202", STATUS_NEVER, &WorldSession::Handle_ServerSide },
/*0x4B3*/ { "UMSG_UNKNOWN_1203", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x4B4*/ { "UMSG_UNKNOWN_1204", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x4B5*/ { "SMSG_UNKNOWN_1205", STATUS_NEVER, &WorldSession::Handle_ServerSide },
/*0x4B6*/ { "CMSG_UNKNOWN_1206", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x4B7*/ { "SMSG_UNKNOWN_1207", STATUS_NEVER, &WorldSession::Handle_ServerSide },
/*0x4B8*/ { "SMSG_UNKNOWN_1208", STATUS_NEVER, &WorldSession::Handle_ServerSide },
/*0x4B9*/ { "CMSG_UNKNOWN_1209", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x4B8*/ { "CMSG_LFG_SET_ROLES", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x4B9*/ { "UMSG_UNKNOWN_1209", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x4BA*/ { "CMSG_UNKNOWN_1210", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x4BB*/ { "SMSG_UNKNOWN_1211", STATUS_NEVER, &WorldSession::Handle_ServerSide },
/*0x4BC*/ { "SMSG_UNKNOWN_1212", STATUS_NEVER, &WorldSession::Handle_ServerSide },
/*0x4BD*/ { "CMSG_UNKNOWN_1213", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x4BE*/ { "CMSG_UNKNOWN_1214", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x4BF*/ { "UMSG_UNKNOWN_1215", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x4C0*/ { "UMSG_UNKNOWN_1216", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x4C1*/ { "UMSG_UNKNOWN_1217", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x4C2*/ { "UMSG_UNKNOWN_1218", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x4BF*/ { "SMSG_UNKNOWN_1215", STATUS_NEVER, &WorldSession::Handle_ServerSide },
/*0x4C0*/ { "SMSG_UNKNOWN_1216", STATUS_NEVER, &WorldSession::Handle_ServerSide },
/*0x4C1*/ { "CMSG_UNKNOWN_1217", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x4C2*/ { "CMSG_UNKNOWN_1218", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x4C3*/ { "UMSG_UNKNOWN_1219", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x4C4*/ { "UMSG_UNKNOWN_1220", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x4C5*/ { "UMSG_UNKNOWN_1221", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x4C6*/ { "UMSG_UNKNOWN_1222", STATUS_NEVER, &WorldSession::Handle_NULL },
};

View file

@ -1236,24 +1236,28 @@ enum Opcodes
UMSG_UNKNOWN_1199 = 0x4AF, // not found
UMSG_UNKNOWN_1200 = 0x4B0, // not found
UMSG_UNKNOWN_1201 = 0x4B1, // not found
CMSG_UNKNOWN_1202 = 0x4B2, // CMSG, uint32
SMSG_UNKNOWN_1203 = 0x4B3, // SMSG, string+float
CMSG_LFG_SET_ROLES = 0x4B4, // CMSG, empty, lua: SetLFGRoles
UMSG_UNKNOWN_1205 = 0x4B5, // not found
CMSG_UNKNOWN_1206 = 0x4B6, // CMSG, uint64, lua: CalendarContextEventSignUp
SMSG_UNKNOWN_1207 = 0x4B7, // SMSG, calendar related
SMSG_UNKNOWN_1208 = 0x4B8, // SMSG, equipment manager list?
CMSG_UNKNOWN_1209 = 0x4B9, // CMSG, lua: SaveEquipmentSet
CMSG_UNKNOWN_1210 = 0x4BA, // CMSG
SMSG_UNKNOWN_1211 = 0x4BB, // SMSG, uint64, uint8, 3 x float
SMSG_UNKNOWN_1212 = 0x4BC, // SMSG, talents related
CMSG_UNKNOWN_1213 = 0x4BD, // CMSG, lua: LearnPreviewTalents
CMSG_UNKNOWN_1214 = 0x4BE, // CMSG, lua: LearnPreviewTalents
UMSG_UNKNOWN_1215 = 0x4BF, // not found
UMSG_UNKNOWN_1216 = 0x4C0, // not found
UMSG_UNKNOWN_1217 = 0x4C1, // not found
UMSG_UNKNOWN_1218 = 0x4C2, // not found
NUM_MSG_TYPES = 0x4C3
SMSG_UNKNOWN_1202 = 0x4B2, // refund something
CMSG_UNKNOWN_1203 = 0x4B3, // refund request?
CMSG_UNKNOWN_1204 = 0x4B4, // lua: ContainerRefundItemPurchase
SMSG_UNKNOWN_1205 = 0x4B5, // refund something
CMSG_UNKNOWN_1206 = 0x4B6, // CMSG, uint32
SMSG_UNKNOWN_1207 = 0x4B7, // SMSG, string+float
CMSG_LFG_SET_ROLES = 0x4B8, // CMSG, empty, lua: SetLFGRoles
UMSG_UNKNOWN_1209 = 0x4B9, // not found
CMSG_UNKNOWN_1210 = 0x4BA, // CMSG, uint64, lua: CalendarContextEventSignUp
SMSG_UNKNOWN_1211 = 0x4BB, // SMSG, calendar related
SMSG_UNKNOWN_1212 = 0x4BC, // SMSG, equipment manager list?
CMSG_UNKNOWN_1213 = 0x4BD, // CMSG, lua: SaveEquipmentSet
CMSG_UNKNOWN_1214 = 0x4BE, // CMSG
SMSG_UNKNOWN_1215 = 0x4BF, // SMSG, uint64, uint8, 3 x float
SMSG_UNKNOWN_1216 = 0x4C0, // SMSG, talents related
CMSG_UNKNOWN_1217 = 0x4C1, // CMSG, lua: LearnPreviewTalents
CMSG_UNKNOWN_1218 = 0x4C2, // CMSG, lua: LearnPreviewTalents
UMSG_UNKNOWN_1219 = 0x4C3, // not found
UMSG_UNKNOWN_1220 = 0x4C4, // not found
UMSG_UNKNOWN_1221 = 0x4C5, // not found
UMSG_UNKNOWN_1222 = 0x4C6, // not found
NUM_MSG_TYPES = 0x4C7
};
/// Player state

View file

@ -134,8 +134,8 @@ void MapManager::LoadTransports()
Transport::Transport() : GameObject()
{
// 2.3.2 - 0x5A
m_updateFlag = (UPDATEFLAG_TRANSPORT | UPDATEFLAG_LOWGUID | UPDATEFLAG_HIGHGUID | UPDATEFLAG_HAS_POSITION);
// 3.1.0 - 0x34A
m_updateFlag = (UPDATEFLAG_TRANSPORT | UPDATEFLAG_LOWGUID | UPDATEFLAG_HAS_POSITION | UPDATEFLAG_UNK1 | UPDATEFLAG_UNK2);
}
bool Transport::Create(uint32 guidlow, uint32 mapid, float x, float y, float z, float ang, uint32 animprogress, uint32 dynflags)

View file

@ -70,6 +70,7 @@ class Transport : private GameObject
using GameObject::GetPositionZ;
using GameObject::BuildCreateUpdateBlockForPlayer;
using GameObject::BuildOutOfRangeUpdateBlock;
using GameObject::GetPackGUID;
bool Create(uint32 guidlow, uint32 mapid, float x, float y, float z, float ang, uint32 animprogress, uint32 dynflags);
bool GenerateWaypoints(uint32 pathid, std::set<uint32> &mapids);

View file

@ -73,8 +73,8 @@ Unit::Unit()
{
m_objectType |= TYPEMASK_UNIT;
m_objectTypeId = TYPEID_UNIT;
// 2.3.2 - 0x70
m_updateFlag = (UPDATEFLAG_LOWGUID | UPDATEFLAG_HIGHGUID | UPDATEFLAG_LIVING | UPDATEFLAG_HAS_POSITION);
// 3.1.0 - 0x60
m_updateFlag = (UPDATEFLAG_LIVING | UPDATEFLAG_HAS_POSITION);
m_attackTimer[BASE_ATTACK] = 0;
m_attackTimer[OFF_ATTACK] = 0;
@ -265,14 +265,14 @@ void Unit::SendMonsterMove(float NewPosX, float NewPosY, float NewPosZ, uint8 ty
data.append(GetPackGUID());
data << uint8(0); // new in 3.1
data << GetPositionX() << GetPositionY() << GetPositionZ();
data << getMSTime();
data << uint32(getMSTime());
data << uint8(type); // unknown
switch(type)
{
case 0: // normal packet
break;
case 1: // stop packet
case 1: // stop packet (raw pos?)
SendMessageToSet( &data, true );
return;
case 2: // facing spot, not used currently
@ -281,16 +281,15 @@ void Unit::SendMonsterMove(float NewPosX, float NewPosY, float NewPosZ, uint8 ty
data << float(0);
break;
case 3: // not used currently
data << uint64(0); // probably target guid
data << uint64(0); // probably target guid (facing target?)
break;
case 4: // not used currently
data << float(0); // facing angle
break;
}
//Movement Flags (0x0 = walk, 0x100 = run, 0x200 = fly/swim)
data << uint32(MovementFlags);
data << Time; // Time in between points
data << uint32(Time); // Time in between points
data << uint32(1); // 1 single waypoint
data << NewPosX << NewPosY << NewPosZ; // the single waypoint Point B

View file

@ -31,7 +31,7 @@
Vehicle::Vehicle() : Creature(), m_vehicleId(0)
{
m_isVehicle = true;
m_updateFlag = (UPDATEFLAG_LOWGUID | UPDATEFLAG_HIGHGUID | UPDATEFLAG_LIVING | UPDATEFLAG_HAS_POSITION | UPDATEFLAG_VEHICLE);
m_updateFlag = (UPDATEFLAG_LIVING | UPDATEFLAG_HAS_POSITION | UPDATEFLAG_VEHICLE);
}
Vehicle::~Vehicle()