Core/Movement: Properly handle cases when jumping from one transport directly to another

This commit is contained in:
zori
2012-06-02 18:38:02 +02:00
committed by Shauren
parent a80ee1379e
commit b90050a528
+33 -7
View File
@@ -295,16 +295,42 @@ void WorldSession::HandleMovementOpcodes(WorldPacket & recvData)
} }
// if we boarded a transport, add us to it // if we boarded a transport, add us to it
if (plrMover && !plrMover->GetTransport()) if (plrMover)
{ {
// elevators also cause the client to send MOVEMENTFLAG_ONTRANSPORT - just dismount if the guid can be found in the transport list if (!plrMover->GetTransport())
for (MapManager::TransportSet::const_iterator iter = sMapMgr->m_Transports.begin(); iter != sMapMgr->m_Transports.end(); ++iter)
{ {
if ((*iter)->GetGUID() == movementInfo.t_guid) // elevators also cause the client to send MOVEMENTFLAG_ONTRANSPORT - just dismount if the guid can be found in the transport list
for (MapManager::TransportSet::const_iterator iter = sMapMgr->m_Transports.begin(); iter != sMapMgr->m_Transports.end(); ++iter)
{ {
plrMover->m_transport = (*iter); if ((*iter)->GetGUID() == movementInfo.t_guid)
(*iter)->AddPassenger(plrMover); {
break; plrMover->m_transport = *iter;
(*iter)->AddPassenger(plrMover);
break;
}
}
}
else if (plrMover->GetTransport()->GetGUID() != movementInfo.t_guid)
{
bool foundNewTransport = false;
plrMover->m_transport->RemovePassenger(plrMover);
for (MapManager::TransportSet::const_iterator iter = sMapMgr->m_Transports.begin(); iter != sMapMgr->m_Transports.end(); ++iter)
{
if ((*iter)->GetGUID() == movementInfo.t_guid)
{
foundNewTransport = true;
plrMover->m_transport = *iter;
(*iter)->AddPassenger(plrMover);
break;
}
}
if (!foundNewTransport)
{
plrMover->m_transport = NULL;
movementInfo.t_pos.Relocate(0.0f, 0.0f, 0.0f, 0.0f);
movementInfo.t_time = 0;
movementInfo.t_seat = -1;
} }
} }
} }