diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 2443d11678e59..6c22669387105 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -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 = mover->m_movementInfo; + MovementInfo const& mi = 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) diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index fa9b99d22a476..2adc1fd2d89b2 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -392,7 +392,7 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvPacket) mover->UpdatePosition(movementInfo.pos); WorldPacket data(SMSG_PLAYER_MOVE, recvPacket.size()); - _player->WriteMovementInfo(data); + mover->WriteMovementInfo(data); mover->SendMessageToSet(&data, _player); if (plrMover) // nothing is charmed, or player charmed diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index df571c7a21f4b..5874973323fb2 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -462,7 +462,7 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER(CMSG_REQUEST_VEHICLE_EXIT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestVehicleExit ); DEFINE_OPCODE_HANDLER(CMSG_REQUEST_VEHICLE_NEXT_SEAT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChangeSeatsOnControlledVehicle); DEFINE_OPCODE_HANDLER(CMSG_REQUEST_VEHICLE_PREV_SEAT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChangeSeatsOnControlledVehicle); - DEFINE_OPCODE_HANDLER(CMSG_REQUEST_VEHICLE_SWITCH_SEAT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleChangeSeatsOnControlledVehicle); + DEFINE_OPCODE_HANDLER(CMSG_REQUEST_VEHICLE_SWITCH_SEAT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChangeSeatsOnControlledVehicle); DEFINE_OPCODE_HANDLER(CMSG_RESET_FACTION_CHEAT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER(CMSG_RESET_INSTANCES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleResetInstancesOpcode ); DEFINE_OPCODE_HANDLER(CMSG_RESURRECT_RESPONSE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleResurrectResponseOpcode ); @@ -1033,7 +1033,7 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER(SMSG_NOTIFY_DEST_LOC_SPELL_CAST, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_NPC_TEXT_UPDATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_OFFER_PETITION_ERROR, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - DEFINE_OPCODE_HANDLER(SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + DEFINE_OPCODE_HANDLER(SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_OPEN_CONTAINER, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_OPEN_LFG_DUNGEON_FINDER, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_OVERRIDE_LIGHT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );