aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
authorMachiavelli <machiavelli.trinity@gmail.com>2010-12-30 17:33:51 +0100
committerMachiavelli <machiavelli.trinity@gmail.com>2010-12-30 17:33:51 +0100
commit8c8f4a828b7b5000f968e326fef76f48be8067ee (patch)
tree2cc38dcd3fceeb90cdd24e7c838e022ef814ce62 /src/server/game/Server
parent2325e8b3d60b112cba0667369d8b1c64094419fa (diff)
Core/Vehicles: - Prevent client ejecting passengers from non-ejectable seats.
- Chart some more VehicleSeatFlags and VehicleSeatFlagsB. Research by linencloth
Diffstat (limited to 'src/server/game/Server')
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/MovementHandler.cpp28
1 files changed, 22 insertions, 6 deletions
diff --git a/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp b/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp
index 08828f541d1..f6d5c038273 100755
--- a/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp
@@ -623,18 +623,34 @@ void WorldSession::HandleEnterPlayerVehicle(WorldPacket &data)
void WorldSession::HandleEjectPassenger(WorldPacket &data)
{
- if (_player->GetVehicleKit())
+ if (Vehicle* vehicle = _player->GetVehicleKit())
{
uint64 guid;
data >> guid;
- if (Player *plr = ObjectAccessor::FindPlayer(guid))
- plr->ExitVehicle();
- else if (Unit *unit = ObjectAccessor::GetUnit(*_player, guid)) // creatures can be ejected too from player mounts
+
+ if (IS_PLAYER_GUID(guid))
+ {
+ if (Player *plr = ObjectAccessor::FindPlayer(guid))
+ vehicle->EjectPassenger(plr);
+ 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));
+ }
+
+ else if (IS_CREATURE_GUID(guid))
{
- unit->ExitVehicle();
- unit->ToCreature()->ForcedDespawn(1000);
+ if (Unit *unit = ObjectAccessor::GetUnit(*_player, guid)) // creatures can be ejected too from player mounts
+ {
+ vehicle->EjectPassenger(unit);
+ 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));
}
+ else
+ sLog->outError("HandleEjectPassenger: Player %u tried to eject invalid GUID "UI64FMTD, GetPlayer()->GetGUIDLow(), guid);
}
+ else
+ sLog->outError("HandleEjectPassenger: Player %u is not in a vehicle!", GetPlayer()->GetGUIDLow());
}
void WorldSession::HandleRequestVehicleExit(WorldPacket &recv_data)