mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-15 23:20:36 +01:00
Core/GameObjects: Transport (type 11) improvements
* Fully synchronize serverside animation progress with client * Implemented updating passenger positions on elevators * Removed visibility hack for elevators that always forced CreateObject packet to be sent to client
This commit is contained in:
@@ -357,28 +357,30 @@ void WorldSession::HandleMovementOpcode(OpcodeClient opcode, MovementInfo& movem
|
||||
{
|
||||
if (!plrMover->GetTransport())
|
||||
{
|
||||
if (Transport* transport = plrMover->GetMap()->GetTransport(movementInfo.transport.guid))
|
||||
transport->AddPassenger(plrMover);
|
||||
if (GameObject* go = plrMover->GetMap()->GetGameObject(movementInfo.transport.guid))
|
||||
if (TransportBase* transport = go->ToTransportBase())
|
||||
transport->AddPassenger(plrMover);
|
||||
}
|
||||
else if (plrMover->GetTransport()->GetGUID() != movementInfo.transport.guid)
|
||||
else if (plrMover->GetTransport()->GetTransportGUID() != movementInfo.transport.guid)
|
||||
{
|
||||
plrMover->GetTransport()->RemovePassenger(plrMover);
|
||||
if (Transport* transport = plrMover->GetMap()->GetTransport(movementInfo.transport.guid))
|
||||
transport->AddPassenger(plrMover);
|
||||
if (GameObject* go = plrMover->GetMap()->GetGameObject(movementInfo.transport.guid))
|
||||
{
|
||||
if (TransportBase* transport = go->ToTransportBase())
|
||||
transport->AddPassenger(plrMover);
|
||||
else
|
||||
movementInfo.ResetTransport();
|
||||
}
|
||||
else
|
||||
movementInfo.ResetTransport();
|
||||
}
|
||||
}
|
||||
|
||||
if (!mover->GetTransport() && !mover->GetVehicle())
|
||||
{
|
||||
GameObject* go = mover->GetMap()->GetGameObject(movementInfo.transport.guid);
|
||||
if (!go || go->GetGoType() != GAMEOBJECT_TYPE_TRANSPORT)
|
||||
movementInfo.transport.Reset();
|
||||
}
|
||||
movementInfo.transport.Reset();
|
||||
}
|
||||
else if (plrMover && plrMover->GetTransport()) // if we were on a transport, leave
|
||||
plrMover->m_transport->RemovePassenger(plrMover);
|
||||
plrMover->GetTransport()->RemovePassenger(plrMover);
|
||||
|
||||
// fall damage generation (ignore in flight case that can be triggered also at lags in moment teleportation to another map).
|
||||
if (opcode == CMSG_MOVE_FALL_LAND && plrMover && !plrMover->IsInFlight())
|
||||
|
||||
Reference in New Issue
Block a user