diff options
| author | Machiavelli <machiavelli.trinity@gmail.com> | 2010-12-30 19:10:46 +0100 |
|---|---|---|
| committer | Machiavelli <machiavelli.trinity@gmail.com> | 2010-12-30 19:10:46 +0100 |
| commit | 948a2136c439c7cbc2a75c2e642bead75e2c80c8 (patch) | |
| tree | 061649586e70a86af548a2c7990fde27165b6988 /src/server/game/Server/Protocol | |
| parent | 71e959837b67e664ca23848f6a21c5e6d0dcfcb2 (diff) | |
Core/Vehicles: - Redefine VEHICLE_SEAT_FLAG_USABLE as VEHICLE_SEAT_FLAG_CAN_ENTER_OR_EXIT. This flag determines whether or not the player has control over entering/exiting a vehicleseat. Thanks to linencloth for help with research.
- Implement VEHICLE_SEAT_FLAG_CAN_ENTER_OR_EXIT exit restriction
- Remove MOVEMENTFLAG_ROOT on vehicle exit
Diffstat (limited to 'src/server/game/Server/Protocol')
| -rwxr-xr-x | src/server/game/Server/Protocol/Handlers/MovementHandler.cpp | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp b/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp index 25cfed8e3f1..0cd943ef9e7 100755 --- a/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp @@ -631,7 +631,11 @@ void WorldSession::HandleEjectPassenger(WorldPacket &data) if (IS_PLAYER_GUID(guid)) { if (Player *plr = ObjectAccessor::FindPlayer(guid)) - vehicle->EjectPassenger(plr, GetPlayer()); + { + VehicleSeatEntry const* seat = vehicle->GetSeatForPassenger(plr); + if (seat->IsEjectable()) + plr->ExitVehicle(); + } else sLog->outError("Player %u tried to eject player %u from vehicle, but the latter was not found in world!", GetPlayer()->GetGUIDLow(), GUID_LOPART(guid)); } @@ -640,8 +644,12 @@ void WorldSession::HandleEjectPassenger(WorldPacket &data) { if (Unit *unit = ObjectAccessor::GetUnit(*_player, guid)) // creatures can be ejected too from player mounts { - vehicle->EjectPassenger(unit, GetPlayer()); - unit->ToCreature()->ForcedDespawn(1000); + VehicleSeatEntry const* seat = vehicle->GetSeatForPassenger(unit); + if (seat->IsEjectable()) + { + unit->ExitVehicle(); + unit->ToCreature()->ForcedDespawn(1000); + } } else sLog->outError("Player %u tried to eject creature guid %u from vehicle, but the latter was not found in world!", GetPlayer()->GetGUIDLow(), GUID_LOPART(guid)); @@ -657,7 +665,16 @@ void WorldSession::HandleRequestVehicleExit(WorldPacket &recv_data) { sLog->outDebug("WORLD: Recvd CMSG_REQUEST_VEHICLE_EXIT"); recv_data.hexlike(); - GetPlayer()->ExitVehicle(); + + if (Vehicle* vehicle = GetPlayer()->GetVehicle()) + { + if (VehicleSeatEntry const* seat = vehicle->GetSeatForPassenger(GetPlayer())) + if (seat->CanEnterOrExit()) + GetPlayer()->ExitVehicle(); + else + sLog->outError("Player %u tried to exit vehicle, but seatflags %u (ID: %u) don't permit that.", + GetPlayer()->GetGUIDLow(), seat->m_ID, seat->m_flags); + } } void WorldSession::HandleMountSpecialAnimOpcode(WorldPacket& /*recv_data*/) |
