mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 04:37:00 +00:00
[11149] Correct MSG_MOVE_SET_*_SPEED packet structures
Also update movementInfo ms time to actual server side time(need keep it updated at sending always)
This commit is contained in:
parent
ec432ea452
commit
4aa3361f51
2 changed files with 27 additions and 84 deletions
|
|
@ -434,6 +434,7 @@ void Unit::SendMonsterMoveWithSpeed(float x, float y, float z, uint32 transitTim
|
||||||
|
|
||||||
void Unit::SendHeartBeat(bool toSelf)
|
void Unit::SendHeartBeat(bool toSelf)
|
||||||
{
|
{
|
||||||
|
m_movementInfo.UpdateTime(WorldTimer::getMSTime());
|
||||||
WorldPacket data(MSG_MOVE_HEARTBEAT, 64);
|
WorldPacket data(MSG_MOVE_HEARTBEAT, 64);
|
||||||
data << GetPackGUID();
|
data << GetPackGUID();
|
||||||
data << m_movementInfo;
|
data << m_movementInfo;
|
||||||
|
|
@ -8343,103 +8344,45 @@ void Unit::SetSpeedRate(UnitMoveType mtype, float rate, bool forced)
|
||||||
|
|
||||||
propagateSpeedChange();
|
propagateSpeedChange();
|
||||||
|
|
||||||
WorldPacket data;
|
static const uint16 SetSpeed2Opc_table[MAX_MOVE_TYPE][2]=
|
||||||
if(!forced)
|
|
||||||
{
|
{
|
||||||
switch(mtype)
|
{MSG_MOVE_SET_WALK_SPEED, SMSG_FORCE_WALK_SPEED_CHANGE},
|
||||||
{
|
{MSG_MOVE_SET_RUN_SPEED, SMSG_FORCE_RUN_SPEED_CHANGE},
|
||||||
case MOVE_WALK:
|
{MSG_MOVE_SET_RUN_BACK_SPEED, SMSG_FORCE_RUN_BACK_SPEED_CHANGE},
|
||||||
data.Initialize(MSG_MOVE_SET_WALK_SPEED, 8+4+2+4+4+4+4+4+4+4);
|
{MSG_MOVE_SET_SWIM_SPEED, SMSG_FORCE_SWIM_SPEED_CHANGE},
|
||||||
break;
|
{MSG_MOVE_SET_SWIM_BACK_SPEED, SMSG_FORCE_SWIM_BACK_SPEED_CHANGE},
|
||||||
case MOVE_RUN:
|
{MSG_MOVE_SET_TURN_RATE, SMSG_FORCE_TURN_RATE_CHANGE},
|
||||||
data.Initialize(MSG_MOVE_SET_RUN_SPEED, 8+4+2+4+4+4+4+4+4+4);
|
{MSG_MOVE_SET_FLIGHT_SPEED, SMSG_FORCE_FLIGHT_SPEED_CHANGE},
|
||||||
break;
|
{MSG_MOVE_SET_FLIGHT_BACK_SPEED,SMSG_FORCE_FLIGHT_BACK_SPEED_CHANGE},
|
||||||
case MOVE_RUN_BACK:
|
{MSG_MOVE_SET_PITCH_RATE, SMSG_FORCE_PITCH_RATE_CHANGE},
|
||||||
data.Initialize(MSG_MOVE_SET_RUN_BACK_SPEED, 8+4+2+4+4+4+4+4+4+4);
|
};
|
||||||
break;
|
|
||||||
case MOVE_SWIM:
|
|
||||||
data.Initialize(MSG_MOVE_SET_SWIM_SPEED, 8+4+2+4+4+4+4+4+4+4);
|
|
||||||
break;
|
|
||||||
case MOVE_SWIM_BACK:
|
|
||||||
data.Initialize(MSG_MOVE_SET_SWIM_BACK_SPEED, 8+4+2+4+4+4+4+4+4+4);
|
|
||||||
break;
|
|
||||||
case MOVE_TURN_RATE:
|
|
||||||
data.Initialize(MSG_MOVE_SET_TURN_RATE, 8+4+2+4+4+4+4+4+4+4);
|
|
||||||
break;
|
|
||||||
case MOVE_FLIGHT:
|
|
||||||
data.Initialize(MSG_MOVE_SET_FLIGHT_SPEED, 8+4+2+4+4+4+4+4+4+4);
|
|
||||||
break;
|
|
||||||
case MOVE_FLIGHT_BACK:
|
|
||||||
data.Initialize(MSG_MOVE_SET_FLIGHT_BACK_SPEED, 8+4+2+4+4+4+4+4+4+4);
|
|
||||||
break;
|
|
||||||
case MOVE_PITCH_RATE:
|
|
||||||
data.Initialize(MSG_MOVE_SET_PITCH_RATE, 8+4+2+4+4+4+4+4+4+4);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
sLog.outError("Unit::SetSpeedRate: Unsupported move type (%d), data not sent to client.",mtype);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
data << GetPackGUID();
|
if (forced)
|
||||||
data << uint32(0); // movement flags
|
|
||||||
data << uint16(0); // unk flags
|
|
||||||
data << uint32(WorldTimer::getMSTime());
|
|
||||||
data << float(GetPositionX());
|
|
||||||
data << float(GetPositionY());
|
|
||||||
data << float(GetPositionZ());
|
|
||||||
data << float(GetOrientation());
|
|
||||||
data << uint32(0); // fall time
|
|
||||||
data << float(GetSpeed(mtype));
|
|
||||||
SendMessageToSet( &data, true );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
if(GetTypeId() == TYPEID_PLAYER)
|
if (GetTypeId() == TYPEID_PLAYER)
|
||||||
{
|
{
|
||||||
// register forced speed changes for WorldSession::HandleForceSpeedChangeAck
|
// register forced speed changes for WorldSession::HandleForceSpeedChangeAck
|
||||||
// and do it only for real sent packets and use run for run/mounted as client expected
|
// and do it only for real sent packets and use run for run/mounted as client expected
|
||||||
++((Player*)this)->m_forced_speed_changes[mtype];
|
++((Player*)this)->m_forced_speed_changes[mtype];
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(mtype)
|
WorldPacket data(SetSpeed2Opc_table[mtype][1], 18);
|
||||||
{
|
|
||||||
case MOVE_WALK:
|
|
||||||
data.Initialize(SMSG_FORCE_WALK_SPEED_CHANGE, 16);
|
|
||||||
break;
|
|
||||||
case MOVE_RUN:
|
|
||||||
data.Initialize(SMSG_FORCE_RUN_SPEED_CHANGE, 17);
|
|
||||||
break;
|
|
||||||
case MOVE_RUN_BACK:
|
|
||||||
data.Initialize(SMSG_FORCE_RUN_BACK_SPEED_CHANGE, 16);
|
|
||||||
break;
|
|
||||||
case MOVE_SWIM:
|
|
||||||
data.Initialize(SMSG_FORCE_SWIM_SPEED_CHANGE, 16);
|
|
||||||
break;
|
|
||||||
case MOVE_SWIM_BACK:
|
|
||||||
data.Initialize(SMSG_FORCE_SWIM_BACK_SPEED_CHANGE, 16);
|
|
||||||
break;
|
|
||||||
case MOVE_TURN_RATE:
|
|
||||||
data.Initialize(SMSG_FORCE_TURN_RATE_CHANGE, 16);
|
|
||||||
break;
|
|
||||||
case MOVE_FLIGHT:
|
|
||||||
data.Initialize(SMSG_FORCE_FLIGHT_SPEED_CHANGE, 16);
|
|
||||||
break;
|
|
||||||
case MOVE_FLIGHT_BACK:
|
|
||||||
data.Initialize(SMSG_FORCE_FLIGHT_BACK_SPEED_CHANGE, 16);
|
|
||||||
break;
|
|
||||||
case MOVE_PITCH_RATE:
|
|
||||||
data.Initialize(SMSG_FORCE_PITCH_RATE_CHANGE, 16);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
sLog.outError("Unit::SetSpeedRate: Unsupported move type (%d), data not sent to client.",mtype);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
data << GetPackGUID();
|
data << GetPackGUID();
|
||||||
data << (uint32)0; // moveEvent, NUM_PMOVE_EVTS = 0x39
|
data << (uint32)0; // moveEvent, NUM_PMOVE_EVTS = 0x39
|
||||||
if (mtype == MOVE_RUN)
|
if (mtype == MOVE_RUN)
|
||||||
data << uint8(0); // new 2.1.0
|
data << uint8(0); // new 2.1.0
|
||||||
data << float(GetSpeed(mtype));
|
data << float(GetSpeed(mtype));
|
||||||
SendMessageToSet( &data, true );
|
SendMessageToSet(&data, true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_movementInfo.UpdateTime(WorldTimer::getMSTime());
|
||||||
|
|
||||||
|
WorldPacket data(SetSpeed2Opc_table[mtype][0], 64);
|
||||||
|
data << GetPackGUID();
|
||||||
|
data << m_movementInfo;
|
||||||
|
data << float(GetSpeed(mtype));
|
||||||
|
SendMessageToSet(&data, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
CallForAllControlledUnits(SetSpeedRateHelper(mtype,forced), CONTROLLED_PET|CONTROLLED_GUARDIANS|CONTROLLED_CHARM|CONTROLLED_MINIPET);
|
CallForAllControlledUnits(SetSpeedRateHelper(mtype,forced), CONTROLLED_PET|CONTROLLED_GUARDIANS|CONTROLLED_CHARM|CONTROLLED_MINIPET);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "11148"
|
#define REVISION_NR "11149"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue