Core/Vehicles: - Prevent client ejecting passengers from non-ejectable seats.

- Chart some more VehicleSeatFlags and VehicleSeatFlagsB. Research by linencloth
This commit is contained in:
Machiavelli
2010-12-30 17:33:51 +01:00
parent 2325e8b3d6
commit 8c8f4a828b
4 changed files with 42 additions and 8 deletions
@@ -423,6 +423,17 @@ void Vehicle::RemovePassenger(Unit *unit)
sScriptMgr->OnRemovePassenger(this, unit);
}
void Vehicle::EjectPassenger(Unit* passenger, Unit* controller)
{
SeatMap::const_iterator m_SeatsItr;
for (m_SeatsItr = m_Seats.begin(); m_SeatsItr != m_Seats.end(); ++m_SeatsItr)
if (m_SeatsItr->second.passenger == passenger)
if (m_SeatsItr->second.seatInfo->IsEjectable())
return passenger->ExitVehicle();
else
sLog->outError("Player %u attempted to eject unit GUID "UI64FMTD" from non-ejectable seat.", controller->GetGUIDLow(), passenger->GetGUID());
}
void Vehicle::RelocatePassengers(float x, float y, float z, float ang)
{
Map *map = me->GetMap();
+8 -2
View File
@@ -50,7 +50,7 @@ enum VehicleFlags
enum VehicleSeatFlags
{
VEHICLE_SEAT_FLAG_HIDE_PASSENGER = 0x00000200, // Passenger is hidden
VEHICLE_SEAT_FLAG_UNK11 = 0x00000400,
VEHICLE_SEAT_FLAG_UNK11 = 0x00000400, // needed for CGCamera__SyncFreeLookFacing
VEHICLE_SEAT_FLAG_CAN_CONTROL = 0x00000800, // Lua_UnitInVehicleControlSeat
VEHICLE_SEAT_FLAG_CAN_ATTACK = 0x00004000, // Can attack, cast spells and use items from vehicle?
VEHICLE_SEAT_FLAG_USABLE = 0x02000000, // Lua_CanExitVehicle
@@ -61,9 +61,13 @@ enum VehicleSeatFlags
enum VehicleSeatFlagsB
{
VEHICLE_SEAT_FLAG_B_NONE = 0x00000000,
VEHICLE_SEAT_FLAG_B_USABLE_FORCED = 0x00000002,
VEHICLE_SEAT_FLAG_B_USABLE_FORCED = 0x00000002,
VEHICLE_SEAT_FLAG_B_TARGETS_IN_RAIDUI = 0x00000008, // Lua_UnitTargetsVehicleInRaidUI
VEHICLE_SEAT_FLAG_B_EJECTABLE = 0x00000020, // ejectable
VEHICLE_SEAT_FLAG_B_USABLE_FORCED_2 = 0x00000040,
VEHICLE_SEAT_FLAG_B_USABLE_FORCED_3 = 0x00000100,
VEHICLE_SEAT_FLAG_B_CANSWITCH = 0x04000000, // can switch seats
VEHICLE_SEAT_FLAG_B_VEHICLE_PLAYERFRAME_UI = 0x80000000, // Lua_UnitHasVehiclePlayerFrameUI - actually checked for flagsb &~ 0x80000000
};
enum VehicleSpells
@@ -119,7 +123,9 @@ class Vehicle
bool HasEmptySeat(int8 seatId) const;
Unit *GetPassenger(int8 seatId) const;
int8 GetNextEmptySeat(int8 seatId, bool next, bool byAura = false) const;
bool AddPassenger(Unit *passenger, int8 seatId = -1, bool byAura = false);
void EjectPassenger(Unit* passenger, Unit* controller);
void RemovePassenger(Unit *passenger);
void RelocatePassengers(float x, float y, float z, float ang);
void RemoveAllPassengers();