mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 13:37:05 +00:00
More work on update packets
This commit is contained in:
parent
a8f7f57065
commit
42a8ae3752
11 changed files with 83 additions and 60 deletions
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -302,17 +302,17 @@ void Object::_BuildMovementUpdate(ByteBuffer * data, uint16 flags, uint32 flags2
|
|||
*data << uint32(getMSTime()); // time (in milliseconds)
|
||||
|
||||
// position
|
||||
*data << ((WorldObject *)this)->GetPositionX();
|
||||
*data << ((WorldObject *)this)->GetPositionY();
|
||||
*data << ((WorldObject *)this)->GetPositionZ();
|
||||
*data << ((WorldObject *)this)->GetOrientation();
|
||||
*data << ((WorldObject*)this)->GetPositionX();
|
||||
*data << ((WorldObject*)this)->GetPositionY();
|
||||
*data << ((WorldObject*)this)->GetPositionZ();
|
||||
*data << ((WorldObject*)this)->GetOrientation();
|
||||
|
||||
// 0x00000200
|
||||
if(flags2 & MOVEMENTFLAG_ONTRANSPORT)
|
||||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 },
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue