Skip to content

Commit

Permalink
Core/PacketIO: Enabled CMSG_REQUEST_VEHICLE_SWITCH_SEAT and fixed cli…
Browse files Browse the repository at this point in the history
…ent crashes when moving on vehicles

Closes #9622
  • Loading branch information
Shauren committed Jun 7, 2013
1 parent b77d6f5 commit 0e2053f
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 39 deletions.
67 changes: 31 additions & 36 deletions src/server/game/Entities/Unit/Unit.cpp
Expand Up @@ -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);
Expand Down Expand Up @@ -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;
Expand All @@ -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());
Expand All @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion src/server/game/Handlers/MovementHandler.cpp
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions src/server/game/Server/Protocol/Opcodes.cpp
Expand Up @@ -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 );
Expand Down Expand Up @@ -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 );
Expand Down

6 comments on commit 0e2053f

@vendethiel
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yay for you.

@vendethiel
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe you put your big boy pants on and DIY then :)

@Walkum
Copy link
Contributor

@Walkum Walkum commented on 0e2053f Jun 8, 2013

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@HellGuard0310 you are a stupid, this team make the work desinteresed for you can play free, and you say it without gratitude. Get out of here and go to fuck another.

@Aokromes
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You are free to code and PR fixes.

@DDuarte
Copy link
Contributor

@DDuarte DDuarte commented on 0e2053f Jun 8, 2013

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@HellGuard0310: 100% refund if not satisfied. You are allowed to criticize the less good things about Trinity, as long as you do it with respect and constructively, which you did not. You are also welcome to submit any fixes.

@Subv
Copy link
Contributor

@Subv Subv commented on 0e2053f Jun 9, 2013

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

38556441 1

Please sign in to comment.