Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
Vehicle Class Reference

#include <Vehicle.h>

Inheritance diagram for Vehicle:
Collaboration diagram for Vehicle:

Public Member Functions

bool AddPassenger (Unit *passenger, int8 seatId=-1)
 Attempts to add a passenger to the vehicle on 'seatId'.
void ApplyAllImmunities ()
 Applies specific immunities that cannot be set in DB.
uint8 GetAvailableSeatCount () const
 Gets the available seat count.
UnitGetBase () const
 May be called from scripts.
uint32 GetCreatureEntry () const
Position const & GetLastShootPos () const
SeatMap::const_iterator GetNextEmptySeat (int8 seatId, bool next) const
 Gets the next empty seat based on current seat.
UnitGetPassenger (int8 seatId) const
 Gets a passenger on specified seat.
VehicleSeatEntry const * GetSeatForPassenger (Unit const *passenger) const
 Returns information on the seat of specified passenger, represented by the format in VehicleSeat.dbc.
VehicleEntry const * GetVehicleInfo () const
bool HasEmptySeat (int8 seatId) const
 Checks if vehicle's seat specified by 'seatId' is empty.
void Install ()
 Initializes power type for vehicle. Nothing more.
void InstallAccessory (uint32 entry, int8 seatId, bool minion, TempSummonType type, uint32 summonTime)
 Installs an accessory.
void InstallAllAccessories (bool evading)
bool IsVehicleInUse () const
 Returns information whether the vehicle is currently used by any unit.
void RelocatePassengers ()
 Relocate passengers. Must be called after m_base::Relocate.
void RemoveAllPassengers ()
 Removes all current and pending passengers from the vehicle.
VehicleRemovePassenger (Unit *passenger)
 Removes the passenger from the vehicle.
void RemovePendingEventsForPassenger (Unit *passenger)
void Reset (bool evading=false)
 Reapplies immunities and reinstalls accessories. Only has effect for creatures.
void SetLastShootPos (Position const &pos)
void Uninstall ()
 Removes all passengers and sets status to STATUS_UNINSTALLING. No new passengers can be added to the vehicle after this call.

Public Attributes

SeatMap Seats
 The collection of all seats on the vehicle. Including vacant ones.

Protected Member Functions

 Vehicle (Unit *unit, VehicleEntry const *vehInfo, uint32 creatureEntry)
 ~Vehicle ()
Protected Member Functions inherited from TransportBase
 TransportBase ()
virtual ~TransportBase ()

Protected Attributes

uint32 UsableSeatNum
 Number of seats that match VehicleSeatEntry::UsableByPlayer, used for proper display flags.

Private Types

typedef std::list< VehicleJoinEvent * > PendingJoinEventContainer
enum  Status { STATUS_NONE , STATUS_INSTALLED , STATUS_UNINSTALLING }

Private Member Functions

void CalculatePassengerOffset (float &x, float &y, float &z, float *o) const
 This method transforms supplied global coordinates into local offsets.
void CalculatePassengerPosition (float &x, float &y, float &z, float *o) const
 This method transforms supplied transport offsets into global coordinates.
SeatMap::iterator GetSeatIteratorForPassenger (Unit *passenger)
 Gets seat iterator for specified passenger.
void InitMovementInfoForBase ()
 Sets correct MovementFlags2 based on VehicleFlags from DBC.
void RemovePendingEvent (VehicleJoinEvent *e)
 Removes @VehicleJoinEvent objects from pending join event store. This method only removes it after it's executed or aborted to prevent leaving pointers to deleted events.
void RemovePendingEventsForSeat (int8 seatId)
 Removes any pending events for given seatId. Executed when a @VehicleJoinEvent::Execute is called.

Private Attributes

uint32 _creatureEntry
 Can be different than the entry of _me in case of players.
Position _lastShootPos
Unit_me
 The underlying unit with the vehicle kit. Can be player or creature.
PendingJoinEventContainer _pendingJoinEvents
 Collection of delayed join events for prospective passengers.
Status _status
 Internal variable for sanity checks.
VehicleEntry const * _vehicleInfo
 DBC data for vehicle.
GuidSet vehiclePlayers

Friends

bool Unit::CreateVehicleKit (uint32 id, uint32 creatureEntry, bool)
void Unit::RemoveVehicleKit (bool)
class VehicleJoinEvent

Additional Inherited Members

Static Protected Member Functions inherited from TransportBase
static void CalculatePassengerOffset (float &x, float &y, float &z, float *o, float transX, float transY, float transZ, float transO)
static void CalculatePassengerPosition (float &x, float &y, float &z, float *o, float transX, float transY, float transZ, float transO)

Detailed Description

Definition at line 21 of file Vehicle.h.

Member Typedef Documentation

◆ PendingJoinEventContainer

Definition at line 105 of file Vehicle.h.

Member Enumeration Documentation

◆ Status

enum Vehicle::Status
private
Enumerator
STATUS_NONE 
STATUS_INSTALLED 
STATUS_UNINSTALLING 

Definition at line 67 of file Vehicle.h.

Constructor & Destructor Documentation

◆ Vehicle()

◆ ~Vehicle()

Vehicle::~Vehicle ( )
protected

@Uninstall must be called before this.

Definition at line 47 of file Vehicle.cpp.

References _status, ASSERT, Seats, and STATUS_UNINSTALLING.

Member Function Documentation

◆ AddPassenger()

bool Vehicle::AddPassenger ( Unit * unit,
int8 seatId = -1 )

Attempts to add a passenger to the vehicle on 'seatId'.

Author
Machiavelli
Date
17-2-2013
Parameters
[in,out]Theprospective passenger.
seatIdIdentifier for the seat. Value of -1 indicates the next available seat.
Returns
true if it succeeds, false if it fails.

@Prevent adding passengers when vehicle is uninstalling. (Bad script in OnUninstall/OnRemovePassenger/PassengerBoarded hook.)

Definition at line 415 of file Vehicle.cpp.

References _me, _pendingJoinEvents, _status, _vehicleInfo, EventProcessor::AddEvent(), ASSERT, EventProcessor::CalculateTime(), Unit::ExitVehicle(), GetBase(), Object::GetEntry(), Object::GetGUIDLow(), WorldObject::GetName(), ObjectAccessor::GetUnit(), Unit::m_Events, VehicleJoinEvent::Seat, Seats, SF_LOG_DEBUG, SF_LOG_ERROR, STATUS_UNINSTALLING, BasicEvent::to_Abort, TYPEID_UNIT, and VehicleJoinEvent.

Referenced by Unit::_EnterVehicle(), and LuaVehicle::AddPassenger().

◆ ApplyAllImmunities()

◆ CalculatePassengerOffset()

void Vehicle::CalculatePassengerOffset ( float & x,
float & y,
float & z,
float * o ) const
inlineprivatevirtual

This method transforms supplied global coordinates into local offsets.

Implements TransportBase.

Definition at line 86 of file Vehicle.h.

References TransportBase::CalculatePassengerOffset(), and GetBase().

◆ CalculatePassengerPosition()

void Vehicle::CalculatePassengerPosition ( float & x,
float & y,
float & z,
float * o ) const
inlineprivatevirtual

This method transforms supplied transport offsets into global coordinates.

Implements TransportBase.

Definition at line 78 of file Vehicle.h.

References TransportBase::CalculatePassengerPosition(), and GetBase().

Referenced by RelocatePassengers().

◆ GetAvailableSeatCount()

uint8 Vehicle::GetAvailableSeatCount ( ) const

Gets the available seat count.

Author
Machiavelli
Date
17-2-2013
Returns
The available seat count.

Definition at line 657 of file Vehicle.cpp.

References Seats.

Referenced by Aura::CanStackWith(), and LuaVehicle::GetAvailableSeatCount().

◆ GetBase()

◆ GetCreatureEntry()

◆ GetLastShootPos()

Position const & Vehicle::GetLastShootPos ( ) const
inline

Definition at line 54 of file Vehicle.h.

References _lastShootPos.

◆ GetNextEmptySeat()

SeatMap::const_iterator Vehicle::GetNextEmptySeat ( int8 seatId,
bool next ) const

Gets the next empty seat based on current seat.

Author
Machiavelli
Date
17-2-2013
Parameters
seatIdIdentifier for the current seat.
nexttrue if iterating forward, false means iterating backwards.
Returns
The next empty seat.

Definition at line 329 of file Vehicle.cpp.

References Seats.

◆ GetPassenger()

◆ GetSeatForPassenger()

VehicleSeatEntry const * Vehicle::GetSeatForPassenger ( Unit const * passenger) const

Returns information on the seat of specified passenger, represented by the format in VehicleSeat.dbc.

Author
Machiavelli
Date
17-2-2013
Parameters
[in,out]Thepassenger for which we check the seat info.
Returns
null if passenger not found on vehicle, else the DBC record for the seat.

Definition at line 614 of file Vehicle.cpp.

References Object::GetGUID(), and Seats.

Referenced by SpellInfo::CheckVehicle(), WorldSession::HandleChangeSeatsOnControlledVehicle(), and WorldSession::HandleEjectPassenger().

◆ GetSeatIteratorForPassenger()

SeatMap::iterator Vehicle::GetSeatIteratorForPassenger ( Unit * passenger)
private

Gets seat iterator for specified passenger.

Author
Machiavelli
Date
17-2-2013
Parameters
[in,out]passengerPassenger to look up.
Returns
The seat iterator for specified passenger if it's found on the vehicle. Otherwise Seats.end() (invalid iterator).

Definition at line 636 of file Vehicle.cpp.

References Object::GetGUID(), and Seats.

Referenced by RemovePassenger().

◆ GetVehicleInfo()

VehicleEntry const * Vehicle::GetVehicleInfo ( ) const
inline

Definition at line 39 of file Vehicle.h.

References _vehicleInfo.

Referenced by ApplyAllImmunities(), Object::BuildMovementUpdate(), and InitMovementInfoForBase().

◆ HasEmptySeat()

bool Vehicle::HasEmptySeat ( int8 seatId) const

Checks if vehicle's seat specified by 'seatId' is empty.

Author
Machiavelli
Date
17-2-2013
Parameters
seatIdIdentifier for the seat.
Returns
true if empty seat, false if not.

Definition at line 285 of file Vehicle.cpp.

References Seats.

Referenced by LuaVehicle::HasEmptySeat(), and npc_ros_dark_rider::npc_ros_dark_riderAI::Reset().

◆ InitMovementInfoForBase()

◆ Install()

void Vehicle::Install ( )

Initializes power type for vehicle. Nothing more.

Author
Machiavelli
Date
17-2-2013

Definition at line 64 of file Vehicle.cpp.

References _me, _status, _vehicleInfo, GetBase(), POWER_BLOOD, POWER_ENERGY, POWER_HEAT, POWER_OOZE, POWER_PYRITE, POWER_STEAM, POWER_WRATH, sScriptMgr, STATUS_INSTALLED, and TYPEID_UNIT.

Referenced by Creature::AddToWorld().

◆ InstallAccessory()

void Vehicle::InstallAccessory ( uint32 entry,
int8 seatId,
bool minion,
TempSummonType type,
uint32 summonTime )

Installs an accessory.

Author
Machiavelli
Date
17-2-2013
Parameters
entryThe NPC entry of accessory.
seatIdIdentifier for the seat to add the accessory to.
miniontrue if accessory considered a 'minion'. Implies that the accessory will despawn when the vehicle despawns. Essentially that it has no life without the vehicle. Their fates are bound.
typeSee enum @SummonType.
summonTimeTime after which the minion is despawned in case of a timed despawn @type specified.

@Prevent adding accessories when vehicle is uninstalling. (Bad script in OnUninstall/OnRemovePassenger/PassengerBoarded hook.)

If for some reason adding accessory to vehicle fails it will unsummon in @VehicleJoinEvent::Abort

Definition at line 374 of file Vehicle.cpp.

References _me, _status, Unit::AddUnitTypeMask(), ASSERT, GetCreatureEntry(), SF_LOG_DEBUG, SF_LOG_ERROR, STATUS_UNINSTALLING, TYPEID_UNIT, and UNIT_MASK_ACCESSORY.

Referenced by LuaVehicle::InstallAccessory(), and InstallAllAccessories().

◆ InstallAllAccessories()

void Vehicle::InstallAllAccessories ( bool evading)

Definition at line 109 of file Vehicle.cpp.

References GetBase(), InstallAccessory(), RemoveAllPassengers(), sObjectMgr, and TYPEID_PLAYER.

Referenced by Unit::Mount(), and Reset().

◆ IsVehicleInUse()

bool Vehicle::IsVehicleInUse ( ) const

Returns information whether the vehicle is currently used by any unit.

Author
Shauren
Date
26-2-2013
Returns
true if any passenger is boarded on vehicle, false otherwise.

Definition at line 567 of file Vehicle.cpp.

References Seats.

Referenced by LuaVehicle::IsVehicleInUse().

◆ RelocatePassengers()

void Vehicle::RelocatePassengers ( )

Relocate passengers. Must be called after m_base::Relocate.

Author
Machiavelli
Date
17-2-2013

Definition at line 536 of file Vehicle.cpp.

References _me, ASSERT, CalculatePassengerPosition(), GetBase(), ObjectAccessor::GetUnit(), and Seats.

Referenced by Map::CreatureRelocation(), Map::MoveAllCreaturesInMoveList(), Map::PlayerRelocation(), LuaVehicle::RelocatePassengers(), Creature::SetPosition(), Unit::UpdateHeight(), and Unit::UpdateOrientation().

◆ RemoveAllPassengers()

void Vehicle::RemoveAllPassengers ( )

Removes all current and pending passengers from the vehicle.

Author
Machiavelli
Date
17-2-2013

Setting to_Abort to true will cause @VehicleJoinEvent::Abort to be executed on next @Unit::UpdateEvents call This will properly "reset" the pending join process for the passenger.

Update vehicle pointer in every pending join event - Abort may be called after vehicle is deleted

Definition at line 241 of file Vehicle.cpp.

References _creatureEntry, _me, _pendingJoinEvents, _status, SF_LOG_DEBUG, SPELL_AURA_CONTROL_VEHICLE, STATUS_UNINSTALLING, VehicleJoinEvent::Target, BasicEvent::to_Abort, Vehicle(), and VehicleJoinEvent.

Referenced by spell_the_lich_king_eject_all_passengers::spell_the_lich_king_eject_all_passengers_SpellScript::HandleDummy(), InstallAllAccessories(), LuaVehicle::RemoveAllPassengers(), and Uninstall().

◆ RemovePassenger()

◆ RemovePendingEvent()

void Vehicle::RemovePendingEvent ( VehicleJoinEvent * e)
private

Removes @VehicleJoinEvent objects from pending join event store. This method only removes it after it's executed or aborted to prevent leaving pointers to deleted events.

Author
Shauren
Date
22-2-2013
Parameters
[in]eThe VehicleJoinEvent* to remove from pending event store.

Definition at line 681 of file Vehicle.cpp.

References _pendingJoinEvents, and VehicleJoinEvent.

◆ RemovePendingEventsForPassenger()

void Vehicle::RemovePendingEventsForPassenger ( Unit * passenger)

◆ RemovePendingEventsForSeat()

void Vehicle::RemovePendingEventsForSeat ( int8 seatId)
private

Removes any pending events for given seatId. Executed when a @VehicleJoinEvent::Execute is called.

Removes any pending events for given passenger. Executed when vehicle control aura is removed while adding passenger is in progress.

Author
Machiavelli
Date
23-2-2013
Parameters
seatIdIdentifier for the seat.
Author
Shauren
Date
13-2-2013
Parameters
passengerUnit that is supposed to enter the vehicle.

Definition at line 704 of file Vehicle.cpp.

References _pendingJoinEvents.

◆ Reset()

void Vehicle::Reset ( bool evading = false)

Reapplies immunities and reinstalls accessories. Only has effect for creatures.

Author
Machiavelli
Date
17-2-2013
Parameters
evadingtrue if called from CreatureAI::EnterEvadeMode

Definition at line 162 of file Vehicle.cpp.

References _me, ApplyAllImmunities(), GetBase(), GetCreatureEntry(), InstallAllAccessories(), SF_LOG_DEBUG, sScriptMgr, and TYPEID_UNIT.

Referenced by Creature::AIM_Initialize(), and LuaVehicle::Reset().

◆ SetLastShootPos()

void Vehicle::SetLastShootPos ( Position const & pos)
inline

Definition at line 53 of file Vehicle.h.

References _lastShootPos.

◆ Uninstall()

void Vehicle::Uninstall ( )

Removes all passengers and sets status to STATUS_UNINSTALLING. No new passengers can be added to the vehicle after this call.

Author
Machiavelli
Date
17-2-2013

@Prevent recursive uninstall call. (Bad script in OnUninstall/OnRemovePassenger/PassengerBoarded hook.)

Definition at line 133 of file Vehicle.cpp.

References _creatureEntry, _me, _status, GetBase(), RemoveAllPassengers(), SF_LOG_DEBUG, SF_LOG_ERROR, sScriptMgr, STATUS_UNINSTALLING, TYPEID_UNIT, and UNIT_MASK_MINION.

◆ Unit::CreateVehicleKit

bool Unit::CreateVehicleKit ( uint32 id,
uint32 creatureEntry,
bool  )
friend

◆ Unit::RemoveVehicleKit

void Unit::RemoveVehicleKit ( bool )
friend

◆ VehicleJoinEvent

friend class VehicleJoinEvent
friend

Definition at line 63 of file Vehicle.h.

References VehicleJoinEvent.

Referenced by AddPassenger(), RemoveAllPassengers(), RemovePendingEvent(), and VehicleJoinEvent.

Member Data Documentation

◆ _creatureEntry

uint32 Vehicle::_creatureEntry
private

Can be different than the entry of _me in case of players.

Definition at line 101 of file Vehicle.h.

Referenced by GetCreatureEntry(), RemoveAllPassengers(), Uninstall(), and Vehicle().

◆ _lastShootPos

Position Vehicle::_lastShootPos
private

Definition at line 103 of file Vehicle.h.

Referenced by GetLastShootPos(), and SetLastShootPos().

◆ _me

Unit* Vehicle::_me
private

The underlying unit with the vehicle kit. Can be player or creature.

Definition at line 97 of file Vehicle.h.

Referenced by AddPassenger(), ApplyAllImmunities(), GetBase(), InitMovementInfoForBase(), Install(), InstallAccessory(), RelocatePassengers(), RemoveAllPassengers(), RemovePassenger(), Reset(), Uninstall(), and Vehicle().

◆ _pendingJoinEvents

PendingJoinEventContainer Vehicle::_pendingJoinEvents
private

Collection of delayed join events for prospective passengers.

Definition at line 106 of file Vehicle.h.

Referenced by AddPassenger(), RemoveAllPassengers(), RemovePendingEvent(), RemovePendingEventsForPassenger(), and RemovePendingEventsForSeat().

◆ _status

Status Vehicle::_status
private

Internal variable for sanity checks.

Definition at line 102 of file Vehicle.h.

Referenced by AddPassenger(), Install(), InstallAccessory(), RemoveAllPassengers(), Uninstall(), Vehicle(), and ~Vehicle().

◆ _vehicleInfo

VehicleEntry const* Vehicle::_vehicleInfo
private

DBC data for vehicle.

Definition at line 98 of file Vehicle.h.

Referenced by AddPassenger(), GetVehicleInfo(), Install(), RemovePassenger(), and Vehicle().

◆ Seats

◆ UsableSeatNum

uint32 Vehicle::UsableSeatNum
protected

Number of seats that match VehicleSeatEntry::UsableByPlayer, used for proper display flags.

Definition at line 64 of file Vehicle.h.

Referenced by RemovePassenger(), and Vehicle().

◆ vehiclePlayers

GuidSet Vehicle::vehiclePlayers
private

Definition at line 99 of file Vehicle.h.


The documentation for this class was generated from the following files: