Core/PacketIO: Enabled CMSG_REQUEST_VEHICLE_SWITCH_SEAT and fixed client crashes when moving on vehicles
Closes #9622
This commit is contained in:
1 parent
b77d6f50dc
commit
0e2053fb4b
3 files changed
+34
-39
No files matched your search
@@ -10346,8 +10346,7 @@ void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry)
|
||||
data << uint32(VehicleId);
|
||||
SendMessageToSet(&data, true);
|
||||
|
||||
data.Initialize(SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA, 0);
|
||||
player->GetSession()->SendPacket(&data);
|
||||
player->SendOnCancelExpectedVehicleRideAura();
|
||||
|
||||
// mounts can also have accessories
|
||||
GetVehicleKit()->InstallAllAccessories(false);
|
||||
@@ -16041,18 +16040,14 @@ void Unit::NearTeleportTo(float x, float y, float z, float orientation, bool cas
|
||||
|
||||
void Unit::WriteMovementInfo(WorldPacket& data, Movement::ExtraMovementStatusElement* extras /*= NULL*/)
|
||||
{
|
||||
Unit const* mover = GetCharmerGUID() ? GetCharmer() : this;
|
||||
if (Player const* player = ToPlayer())
|
||||
mover = player->m_mover;
|
||||
MovementInfo const& mi = m_movementInfo;
|
||||
|
||||
MovementInfo const& mi = mover->m_movementInfo;
|
||||
|
||||
bool hasMovementFlags = mover->GetUnitMovementFlags() != 0;
|
||||
bool hasMovementFlags2 = mover->GetExtraUnitMovementFlags() != 0;
|
||||
bool hasMovementFlags = GetUnitMovementFlags() != 0;
|
||||
bool hasMovementFlags2 = GetExtraUnitMovementFlags() != 0;
|
||||
bool hasTimestamp = true;
|
||||
bool hasOrientation = !G3D::fuzzyEq(mover->GetOrientation(), 0.0f);
|
||||
bool hasOrientation = !G3D::fuzzyEq(GetOrientation(), 0.0f);
|
||||
bool hasTransportData = GetTransGUID() != 0;
|
||||
bool hasSpline = mover->IsSplineEnabled();
|
||||
bool hasSpline = IsSplineEnabled();
|
||||
|
||||
bool hasTransportTime2;
|
||||
bool hasTransportTime3;
|
||||
@@ -16063,24 +16058,24 @@ void Unit::WriteMovementInfo(WorldPacket& data, Movement::ExtraMovementStatusEle
|
||||
|
||||
if (GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
hasTimestamp = mover->m_movementInfo.time != 0;
|
||||
hasTransportTime2 = mover->m_movementInfo.bits.hasTransportTime2;
|
||||
hasTransportTime3 = mover->m_movementInfo.bits.hasTransportTime3;
|
||||
hasPitch = mover->m_movementInfo.bits.hasPitch;
|
||||
hasFallData = mover->m_movementInfo.bits.hasFallData;
|
||||
hasFallDirection = mover->m_movementInfo.bits.hasFallDirection;
|
||||
hasSplineElevation = mover->m_movementInfo.bits.hasSplineElevation;
|
||||
hasTimestamp = m_movementInfo.time != 0;
|
||||
hasTransportTime2 = m_movementInfo.bits.hasTransportTime2;
|
||||
hasTransportTime3 = m_movementInfo.bits.hasTransportTime3;
|
||||
hasPitch = m_movementInfo.bits.hasPitch;
|
||||
hasFallData = m_movementInfo.bits.hasFallData;
|
||||
hasFallDirection = m_movementInfo.bits.hasFallDirection;
|
||||
hasSplineElevation = m_movementInfo.bits.hasSplineElevation;
|
||||
}
|
||||
else
|
||||
{
|
||||
hasTransportTime2 = mover->HasExtraUnitMovementFlag(MOVEMENTFLAG2_INTERPOLATED_MOVEMENT);
|
||||
hasTransportTime2 = HasExtraUnitMovementFlag(MOVEMENTFLAG2_INTERPOLATED_MOVEMENT);
|
||||
hasTransportTime3 = false;
|
||||
hasPitch = mover->HasUnitMovementFlag(MovementFlags(MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING)) || mover->HasExtraUnitMovementFlag(MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING);
|
||||
hasFallDirection = mover->HasUnitMovementFlag(MOVEMENTFLAG_FALLING);
|
||||
hasPitch = HasUnitMovementFlag(MovementFlags(MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING)) || HasExtraUnitMovementFlag(MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING);
|
||||
hasFallDirection = HasUnitMovementFlag(MOVEMENTFLAG_FALLING);
|
||||
hasFallData = hasFallDirection; // FallDirection implies that FallData is set as well
|
||||
// the only case when hasFallData = 1 && hasFallDirection = 0
|
||||
// is for MSG_MOVE_LAND, which is handled above, in player case
|
||||
hasSplineElevation = mover->HasUnitMovementFlag(MOVEMENTFLAG_SPLINE_ELEVATION);
|
||||
hasSplineElevation = HasUnitMovementFlag(MOVEMENTFLAG_SPLINE_ELEVATION);
|
||||
}
|
||||
|
||||
MovementStatusElements const* sequence = GetMovementStatusElementsSequence(data.GetOpcode());
|
||||
@@ -16090,7 +16085,7 @@ void Unit::WriteMovementInfo(WorldPacket& data, Movement::ExtraMovementStatusEle
|
||||
return;
|
||||
}
|
||||
|
||||
ObjectGuid guid = mover->GetGUID();
|
||||
ObjectGuid guid = GetGUID();
|
||||
ObjectGuid tguid = hasTransportData ? GetTransGUID() : 0;
|
||||
|
||||
for (; *sequence != MSEEnd; ++sequence)
|
||||
@@ -16182,52 +16177,52 @@ void Unit::WriteMovementInfo(WorldPacket& data, Movement::ExtraMovementStatusEle
|
||||
break;
|
||||
case MSEMovementFlags:
|
||||
if (hasMovementFlags)
|
||||
data.WriteBits(mover->GetUnitMovementFlags(), 30);
|
||||
data.WriteBits(GetUnitMovementFlags(), 30);
|
||||
break;
|
||||
case MSEMovementFlags2:
|
||||
if (hasMovementFlags2)
|
||||
data.WriteBits(mover->GetExtraUnitMovementFlags(), 12);
|
||||
data.WriteBits(GetExtraUnitMovementFlags(), 12);
|
||||
break;
|
||||
case MSETimestamp:
|
||||
if (hasTimestamp)
|
||||
data << getMSTime();
|
||||
break;
|
||||
case MSEPositionX:
|
||||
data << mover->GetPositionX();
|
||||
data << GetPositionX();
|
||||
break;
|
||||
case MSEPositionY:
|
||||
data << mover->GetPositionY();
|
||||
data << GetPositionY();
|
||||
break;
|
||||
case MSEPositionZ:
|
||||
data << mover->GetPositionZ();
|
||||
data << GetPositionZ();
|
||||
break;
|
||||
case MSEOrientation:
|
||||
if (hasOrientation)
|
||||
data << mover->GetOrientation();
|
||||
data << GetOrientation();
|
||||
break;
|
||||
case MSETransportPositionX:
|
||||
if (hasTransportData)
|
||||
data << mover->GetTransOffsetX();
|
||||
data << GetTransOffsetX();
|
||||
break;
|
||||
case MSETransportPositionY:
|
||||
if (hasTransportData)
|
||||
data << mover->GetTransOffsetY();
|
||||
data << GetTransOffsetY();
|
||||
break;
|
||||
case MSETransportPositionZ:
|
||||
if (hasTransportData)
|
||||
data << mover->GetTransOffsetZ();
|
||||
data << GetTransOffsetZ();
|
||||
break;
|
||||
case MSETransportOrientation:
|
||||
if (hasTransportData)
|
||||
data << mover->GetTransOffsetO();
|
||||
data << GetTransOffsetO();
|
||||
break;
|
||||
case MSETransportSeat:
|
||||
if (hasTransportData)
|
||||
data << mover->GetTransSeat();
|
||||
data << GetTransSeat();
|
||||
break;
|
||||
case MSETransportTime:
|
||||
if (hasTransportData)
|
||||
data << mover->GetTransTime();
|
||||
data << GetTransTime();
|
||||
break;
|
||||
case MSETransportTime2:
|
||||
if (hasTransportData && hasTransportTime2)
|
||||
@@ -16848,7 +16843,7 @@ void Unit::SendMovementSetSplineAnim(Movement::AnimType anim)
|
||||
|
||||
bool Unit::IsSplineEnabled() const
|
||||
{
|
||||
return movespline->Initialized();
|
||||
return movespline->Initialized() && !movespline->Finalized();
|
||||
}
|
||||
|
||||
void Unit::SetTarget(uint64 guid)
|
||||
|
||||
Reference in new issue
Block a user