aboutsummaryrefslogtreecommitdiff
path: root/src/game/WorldSession.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/WorldSession.cpp')
-rw-r--r--src/game/WorldSession.cpp55
1 files changed, 51 insertions, 4 deletions
diff --git a/src/game/WorldSession.cpp b/src/game/WorldSession.cpp
index bbcf4fcbf70..569c8fade62 100644
--- a/src/game/WorldSession.cpp
+++ b/src/game/WorldSession.cpp
@@ -655,13 +655,15 @@ void WorldSession::SetAccountData(AccountDataType type, time_t time_, std::strin
m_accountData[type].Data = data;
}
-void WorldSession::SendAccountDataTimes()
+void WorldSession::SendAccountDataTimes(uint32 mask)
{
- WorldPacket data( SMSG_ACCOUNT_DATA_TIMES, 4+1+8*4 ); // changed in WotLK
+ WorldPacket data( SMSG_ACCOUNT_DATA_TIMES, 4+1+4+8*4 ); // changed in WotLK
data << uint32(time(NULL)); // unix time of something
data << uint8(1);
- for (int i = 0; i < NUM_ACCOUNT_DATA_TYPES; ++i)
- data << uint32(m_accountData[i].Time); // also unix time
+ data << uint32(mask); // type mask
+ for(uint32 i = 0; i < NUM_ACCOUNT_DATA_TYPES; ++i)
+ if(mask & (1 << i))
+ data << uint32(GetAccountData(AccountDataType(i))->Time);// also unix time
SendPacket(&data);
}
@@ -768,6 +770,51 @@ void WorldSession::ReadMovementInfo(WorldPacket &data, MovementInfo *mi)
}
}
+void WorldSession::WriteMovementInfo(WorldPacket *data, MovementInfo *mi)
+{
+ data->appendPackGUID(mi->guid);
+
+ *data << mi->flags;
+ *data << mi->unk1;
+ *data << mi->time;
+ *data << mi->x;
+ *data << mi->y;
+ *data << mi->z;
+ *data << mi->o;
+
+ if(mi->HasMovementFlag(MOVEMENTFLAG_ONTRANSPORT))
+ {
+ data->appendPackGUID(mi->t_guid);
+
+ *data << mi->t_x;
+ *data << mi->t_y;
+ *data << mi->t_z;
+ *data << mi->t_o;
+ *data << mi->t_time;
+ *data << mi->t_seat;
+ }
+
+ if((mi->HasMovementFlag(MovementFlags(MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING))) || (mi->unk1 & 0x20))
+ {
+ *data << mi->s_pitch;
+ }
+
+ *data << mi->fallTime;
+
+ if(mi->HasMovementFlag(MOVEMENTFLAG_JUMPING))
+ {
+ *data << mi->j_zspeed;
+ *data << mi->j_sinAngle;
+ *data << mi->j_cosAngle;
+ *data << mi->j_xyspeed;
+ }
+
+ if(mi->HasMovementFlag(MOVEMENTFLAG_SPLINE))
+ {
+ *data << mi->u_unk1;
+ }
+}
+
void WorldSession::ReadAddonsInfo(WorldPacket &data)
{
if (data.rpos() + 4 > data.size())