aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2022-05-25 22:14:32 +0200
committerShauren <shauren.trinity@gmail.com>2022-05-25 22:14:32 +0200
commit630b60eb0dcd3d9ce41582664ab822b049365431 (patch)
treeb5d60fe41ca49846524ddbc7f9409194b76e7849 /src/server/game/Handlers
parent3031fbb63bfb2df2aa041bd9c04c5c42b0c07c05 (diff)
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
Diffstat (limited to 'src/server/game/Handlers')
-rw-r--r--src/server/game/Handlers/MovementHandler.cpp24
1 files changed, 13 insertions, 11 deletions
diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp
index 4fd59ea3aa7..2c8f70db994 100644
--- a/src/server/game/Handlers/MovementHandler.cpp
+++ b/src/server/game/Handlers/MovementHandler.cpp
@@ -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())