TrinityCore
Loading...
Searching...
No Matches
Transport Class Reference

#include <Transport.h>

Public Types

typedef std::set< WorldObject * > PassengerSet
 

Public Member Functions

 ~Transport ()
 
bool Create (ObjectGuid::LowType guidlow, uint32 entry, float x, float y, float z, float ang)
 
void CleanupsBeforeDelete (bool finalCleanup=true) override
 
void Update (uint32 diff) override
 
void BuildUpdate (UpdateDataMapType &data_map) override
 
void AddPassenger (WorldObject *passenger) override
 
TransportRemovePassenger (WorldObject *passenger) override
 
PassengerSet const & GetPassengers () const
 
CreatureCreateNPCPassenger (ObjectGuid::LowType guid, CreatureData const *data)
 
GameObjectCreateGOPassenger (ObjectGuid::LowType guid, GameObjectData const *data)
 
TempSummonSummonPassenger (uint32 entry, Position const &pos, TempSummonType summonType, SummonPropertiesEntry const *properties=nullptr, Milliseconds duration=0ms, Unit *summoner=nullptr, uint32 spellId=0, uint32 vehId=0)
 Temporarily summons a creature as passenger on this transport.
 
ObjectGuid GetTransportGUID () const override
 
float GetTransportOrientation () const override
 
void CalculatePassengerPosition (float &x, float &y, float &z, float *o=nullptr) const override
 This method transforms supplied transport offsets into global coordinates.
 
void CalculatePassengerOffset (float &x, float &y, float &z, float *o=nullptr) const override
 This method transforms supplied global coordinates into local offsets.
 
int32 GetMapIdForSpawning () const override
 
uint32 GetTransportPeriod () const
 
void SetPeriod (uint32 period)
 
uint32 GetTimer () const
 
void UpdatePosition (float x, float y, float z, float o)
 
void LoadStaticPassengers ()
 Needed when transport moves from inactive to active grid.
 
void UnloadStaticPassengers ()
 Needed when transport enters inactive grid.
 
void EnableMovement (bool enabled)
 
void SetDelayedAddModelToMap ()
 
std::string GetDebugInfo () const override
 
uint32 GetExpectedMapId () const
 Returns id of the map that transport is expected to be on, according to current path progress.
 
- Public Member Functions inherited from GameObject
 GameObject ()
 
 ~GameObject ()
 
void BuildValuesUpdateForPlayerWithMask (UpdateData *data, UF::ObjectData::Mask const &requestedObjectMask, UF::GameObjectData::Mask const &requestedGameObjectMask, Player const *target) const
 
void AddToWorld () override
 
void RemoveFromWorld () override
 
void CleanupsBeforeDelete (bool finalCleanup=true) override
 
void Update (uint32 p_time) override
 
GameObjectTemplate const * GetGOInfo () const
 
GameObjectTemplateAddon const * GetTemplateAddon () const
 
GameObjectOverride const * GetGameObjectOverride () const
 
GameObjectData const * GetGameObjectData () const
 
GameObjectValue const * GetGOValue () const
 
bool IsTransport () const
 
bool IsDynTransport () const
 
bool IsDestructibleBuilding () const
 
ObjectGuid::LowType GetSpawnId () const
 
void SetLocalRotationAngles (float z_rot, float y_rot, float x_rot)
 
void SetLocalRotation (float qx, float qy, float qz, float qw)
 
void SetParentRotation (QuaternionData const &rotation)
 
QuaternionData const & GetLocalRotation () const
 
int64 GetPackedLocalRotation () const
 
QuaternionData GetWorldRotation () const
 
std::string GetNameForLocaleIdx (LocaleConstant locale) const override
 
void SaveToDB ()
 
void SaveToDB (uint32 mapid, std::vector< Difficulty > const &spawnDifficulties)
 
bool LoadFromDB (ObjectGuid::LowType spawnId, Map *map, bool addToMap, bool=true)
 
void SetOwnerGUID (ObjectGuid owner)
 
ObjectGuid GetOwnerGUID () const override
 
void SetSpellId (uint32 id)
 
uint32 GetSpellId () const
 
time_t GetRespawnTime () const
 
time_t GetRespawnTimeEx () const
 
void SetRespawnTime (int32 respawn)
 
void Respawn ()
 
bool isSpawned () const
 
bool isSpawnedByDefault () const
 
void SetSpawnedByDefault (bool b)
 
uint32 GetRespawnDelay () const
 
void Refresh ()
 
void DespawnOrUnsummon (Milliseconds delay=0ms, Seconds forceRespawnTime=0s)
 
void DespawnForPlayer (Player *seer, Seconds respawnTime)
 
void Delete ()
 
void SendGameObjectDespawn ()
 
LootGetFishLoot (Player *lootOwner)
 
LootGetFishLootJunk (Player *lootOwner)
 
bool HasFlag (GameObjectFlags flags) const
 
void SetFlag (GameObjectFlags flags)
 
void RemoveFlag (GameObjectFlags flags)
 
void ReplaceAllFlags (GameObjectFlags flags)
 
void SetLevel (uint32 level)
 
GameobjectTypes GetGoType () const
 
void SetGoType (GameobjectTypes type)
 
GOState GetGoState () const
 
void SetGoState (GOState state)
 
GOState GetGoStateFor (ObjectGuid const &viewer) const
 
void SetGoStateFor (GOState state, Player const *viewer)
 
uint32 GetGoArtKit () const
 
void SetGoArtKit (uint32 artkit)
 
uint8 GetGoAnimProgress () const
 
void SetGoAnimProgress (uint8 animprogress)
 
std::vector< uint32 > const * GetPauseTimes () const
 
void SetPathProgressForClient (float progress)
 
void EnableCollision (bool enable)
 
void Use (Unit *user)
 
LootState getLootState () const
 
void SetLootState (LootState s, Unit *unit=nullptr)
 
uint16 GetLootMode () const
 
bool HasLootMode (uint16 lootMode) const
 
void SetLootMode (uint16 lootMode)
 
void AddLootMode (uint16 lootMode)
 
void RemoveLootMode (uint16 lootMode)
 
void ResetLootMode ()
 
void ClearLoot ()
 
bool IsFullyLooted () const
 
void OnLootRelease (Player *looter)
 
void AddToSkillupList (ObjectGuid const &PlayerGuidLow)
 
bool IsInSkillupList (ObjectGuid const &playerGuid) const
 
void ClearSkillupList ()
 
void AddUniqueUse (Player *player)
 
void AddUse ()
 
uint32 GetUseCount () const
 
uint32 GetUniqueUseCount () const
 
void SaveRespawnTime (uint32 forceDelay=0)
 
GuidUnorderedSet const & GetTapList () const
 
void SetTapList (GuidUnorderedSet tapList)
 
bool IsLootAllowedFor (Player const *player) const
 
bool HasLootRecipient () const
 
LootGetLootForPlayer (Player const *) const override
 
GameObjectGetLinkedTrap ()
 
void SetLinkedTrap (GameObject *linkedTrap)
 
bool hasQuest (uint32 quest_id) const override
 
bool hasInvolvedQuest (uint32 quest_id) const override
 
bool ActivateToQuest (Player const *target) const
 
void UseDoorOrButton (uint32 time_to_restore=0, bool alternative=false, Unit *user=nullptr)
 
void ResetDoorOrButton ()
 
void ActivateObject (GameObjectActions action, int32 param, WorldObject *spellCaster=nullptr, uint32 spellId=0, int32 effectIndex=-1)
 
void TriggeringLinkedGameObject (uint32 trapEntry, Unit *target)
 
bool IsNeverVisibleFor (WorldObject const *seer, bool allowServersideObjects=false) const override
 
bool IsAlwaysVisibleFor (WorldObject const *seer) const override
 
bool IsInvisibleDueToDespawn (WorldObject const *seer) const override
 
uint8 GetLevelForTarget (WorldObject const *target) const override
 
GameObjectLookupFishingHoleAround (float range)
 
void SendCustomAnim (uint32 anim)
 
bool IsInRange (float x, float y, float z, float radius) const
 
void ModifyHealth (int32 change, WorldObject *attackerOrHealer=nullptr, uint32 spellId=0)
 
void SetDestructibleState (GameObjectDestructibleState state, WorldObject *attackerOrHealer=nullptr, bool setHealth=false)
 
GameObjectDestructibleState GetDestructibleState () const
 
void SetRespawnCompatibilityMode (bool mode=true)
 
bool GetRespawnCompatibilityMode ()
 
std::string const & GetAIName () const
 
uint32 GetScriptId () const
 
GameObjectAIAI () const
 
bool HasStringId (std::string_view id) const
 
void SetScriptStringId (std::string id)
 
std::array< std::string_view, 3 > const & GetStringIds () const
 
void SetDisplayId (uint32 displayid)
 
uint32 GetDisplayId () const
 
uint8 GetNameSetId () const
 
uint32 GetFaction () const override
 
void SetFaction (uint32 faction) override
 
void GetRespawnPosition (float &x, float &y, float &z, float *ori=nullptr) const
 
TransportBaseToTransportBase ()
 
TransportBase const * ToTransportBase () const
 
TransportToTransport ()
 
Transport const * ToTransport () const
 
float GetStationaryX () const override
 
float GetStationaryY () const override
 
float GetStationaryZ () const override
 
float GetStationaryO () const override
 
Position const & GetStationaryPosition () const
 
void RelocateStationaryPosition (float x, float y, float z, float o)
 
void AfterRelocation ()
 
float GetInteractionDistance () const
 
void UpdateModelPosition ()
 
bool IsAtInteractDistance (Position const &pos, float radius) const
 
bool IsAtInteractDistance (Player const *player, SpellInfo const *spell=nullptr) const
 
bool IsWithinDistInMap (Player const *player) const
 
SpellInfo const * GetSpellForLock (Player const *player) const
 
uint16 GetAIAnimKitId () const override
 
void SetAnimKitId (uint16 animKitId, bool oneshot)
 
uint32 GetWorldEffectID () const
 
void SetWorldEffectID (uint32 worldEffectID)
 
void SetSpellVisualId (int32 spellVisualId, ObjectGuid activatorGuid=ObjectGuid::Empty)
 
void AssaultCapturePoint (Player *player)
 
void UpdateCapturePoint ()
 
bool CanInteractWithCapturePoint (Player const *target) const
 
FlagState GetFlagState () const
 
ObjectGuid const & GetFlagCarrierGUID () const
 
time_t GetFlagTakenFromBaseTime () const
 
bool MeetsInteractCondition (Player const *user) const
 
void AIM_Destroy ()
 
bool AIM_Initialize ()
 
std::string GetDebugInfo () const override
 
void UpdateDynamicFlagsForNearbyPlayers ()
 
void HandleCustomTypeCommand (GameObjectTypeBase::CustomCommand const &command) const
 
bool IsWithinDistInMap (WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
 
- Public Member Functions inherited from WorldObject
virtual ~WorldObject ()
 
virtual void Update (uint32 diff)
 
void AddToWorld () override
 
void RemoveFromWorld () override
 
void GetNearPoint2D (WorldObject const *searcher, float &x, float &y, float distance, float absAngle) const
 
void GetNearPoint (WorldObject const *searcher, float &x, float &y, float &z, float distance2d, float absAngle) const
 
void GetClosePoint (float &x, float &y, float &z, float size, float distance2d=0, float relAngle=0) const
 
void MovePosition (Position &pos, float dist, float angle)
 
Position GetNearPosition (float dist, float angle)
 
void MovePositionToFirstCollision (Position &pos, float dist, float angle)
 
Position GetFirstCollisionPosition (float dist, float angle)
 
Position GetRandomNearPosition (float radius)
 
void GetContactPoint (WorldObject const *obj, float &x, float &y, float &z, float distance2d=CONTACT_DISTANCE) const
 
virtual float GetCombatReach () const
 
void UpdateGroundPositionZ (float x, float y, float &z) const
 
void UpdateAllowedPositionZ (float x, float y, float &z, float *groundZ=nullptr) const
 
void GetRandomPoint (Position const &srcPos, float distance, float &rand_x, float &rand_y, float &rand_z) const
 
Position GetRandomPoint (Position const &srcPos, float distance) const
 
uint32 GetInstanceId () const
 
PhaseShiftGetPhaseShift ()
 
PhaseShift const & GetPhaseShift () const
 
PhaseShiftGetSuppressedPhaseShift ()
 
PhaseShift const & GetSuppressedPhaseShift () const
 
bool InSamePhase (PhaseShift const &phaseShift) const
 
bool InSamePhase (WorldObject const *obj) const
 
int32 GetDBPhase () const
 
void SetDBPhase (int32 p)
 
uint32 GetZoneId () const
 
uint32 GetAreaId () const
 
void GetZoneAndAreaId (uint32 &zoneid, uint32 &areaid) const
 
bool IsInWorldPvpZone () const
 
bool IsOutdoors () const
 
ZLiquidStatus GetLiquidStatus () const
 
InstanceScriptGetInstanceScript () const
 
std::string const & GetName () const
 
void SetName (std::string newname)
 
std::string GetNameForLocaleIdx (LocaleConstant) const override
 
float GetDistance (WorldObject const *obj) const
 
float GetDistance (Position const &pos) const
 
float GetDistance (float x, float y, float z) const
 
float GetDistance2d (WorldObject const *obj) const
 
float GetDistance2d (float x, float y) const
 
float GetDistanceZ (WorldObject const *obj) const
 
bool IsSelfOrInSameMap (WorldObject const *obj) const
 
bool IsInMap (WorldObject const *obj) const
 
bool IsWithinDist3d (float x, float y, float z, float dist) const
 
bool IsWithinDist3d (Position const *pos, float dist) const
 
bool IsWithinDist2d (float x, float y, float dist) const
 
bool IsWithinDist2d (Position const *pos, float dist) const
 
bool IsWithinDist (WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
 
bool IsWithinDistInMap (WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
 
bool IsWithinLOS (float x, float y, float z, LineOfSightChecks checks=LINEOFSIGHT_ALL_CHECKS, VMAP::ModelIgnoreFlags ignoreFlags=VMAP::ModelIgnoreFlags::Nothing) const
 
bool IsWithinLOSInMap (WorldObject const *obj, LineOfSightChecks checks=LINEOFSIGHT_ALL_CHECKS, VMAP::ModelIgnoreFlags ignoreFlags=VMAP::ModelIgnoreFlags::Nothing) const
 
Position GetHitSpherePointFor (Position const &dest) const
 
void GetHitSpherePointFor (Position const &dest, float &x, float &y, float &z) const
 
bool GetDistanceOrder (WorldObject const *obj1, WorldObject const *obj2, bool is3D=true) const
 
bool IsInRange (WorldObject const *obj, float minRange, float maxRange, bool is3D=true) const
 
bool IsInRange2d (float x, float y, float minRange, float maxRange) const
 
bool IsInRange3d (float x, float y, float z, float minRange, float maxRange) const
 
bool isInFront (WorldObject const *target, float arc=float(M_PI)) const
 
bool isInBack (WorldObject const *target, float arc=float(M_PI)) const
 
bool IsInBetween (Position const &pos1, Position const &pos2, float size=0) const
 
bool IsInBetween (WorldObject const *obj1, WorldObject const *obj2, float size=0) const
 
virtual void CleanupsBeforeDelete (bool finalCleanup=true)
 
virtual void SendMessageToSet (WorldPacket const *data, bool self) const
 
virtual void SendMessageToSetInRange (WorldPacket const *data, float dist, bool self) const
 
virtual void SendMessageToSet (WorldPacket const *data, Player const *skipped_rcvr) const
 
void SendCombatLogMessage (WorldPackets::CombatLog::CombatLogServerPacket *combatLog) const
 
virtual uint8 GetLevelForTarget (WorldObject const *) const
 
void PlayDistanceSound (uint32 soundId, Player *target=nullptr)
 
void PlayDirectSound (uint32 soundId, Player *target=nullptr, uint32 broadcastTextId=0)
 
void PlayDirectMusic (uint32 musicId, Player *target=nullptr)
 
void PlayObjectSound (int32 soundKitId, ObjectGuid targetObject, Player *target=nullptr, int32 broadcastTextId=0)
 
void AddObjectToRemoveList ()
 
float GetGridActivationRange () const
 
float GetVisibilityRange () const
 
float GetSightRange (WorldObject const *target=nullptr) const
 
bool CanSeeOrDetect (WorldObject const *obj, bool implicitDetect=false, bool distanceCheck=false, bool checkAlert=false) const
 
virtual void SetMap (Map *map)
 
virtual void ResetMap ()
 
MapGetMap () const
 
MapFindMap () const
 
void SetZoneScript ()
 
ZoneScriptFindZoneScript () const
 
ZoneScriptGetZoneScript () const
 
ScenarioGetScenario () const
 
TempSummonSummonCreature (uint32 entry, Position const &pos, TempSummonType despawnType=TEMPSUMMON_MANUAL_DESPAWN, Milliseconds despawnTime=0s, uint32 vehId=0, uint32 spellId=0, ObjectGuid privateObjectOwner=ObjectGuid::Empty)
 
TempSummonSummonCreature (uint32 entry, float x, float y, float z, float o=0, TempSummonType despawnType=TEMPSUMMON_MANUAL_DESPAWN, Milliseconds despawnTime=0s, ObjectGuid privateObjectOwner=ObjectGuid::Empty)
 
TempSummonSummonPersonalClone (Position const &pos, TempSummonType despawnType=TEMPSUMMON_MANUAL_DESPAWN, Milliseconds despawnTime=0s, uint32 vehId=0, uint32 spellId=0, Player *privateObjectOwner=nullptr)
 
GameObjectSummonGameObject (uint32 entry, Position const &pos, QuaternionData const &rot, Seconds respawnTime, GOSummonType summonType=GO_SUMMON_TIMED_OR_CORPSE_DESPAWN)
 
GameObjectSummonGameObject (uint32 entry, float x, float y, float z, float ang, QuaternionData const &rot, Seconds respawnTime, GOSummonType summonType=GO_SUMMON_TIMED_OR_CORPSE_DESPAWN)
 
CreatureSummonTrigger (float x, float y, float z, float ang, Milliseconds despawnTime, CreatureAI *(*GetAI)(Creature *)=nullptr)
 
void SummonCreatureGroup (uint8 group, std::list< TempSummon * > *list=nullptr)
 
CreatureFindNearestCreature (uint32 entry, float range, bool alive=true) const
 
CreatureFindNearestCreatureWithOptions (float range, FindCreatureOptions const &options) const
 
GameObjectFindNearestGameObject (uint32 entry, float range, bool spawnedOnly=true) const
 
GameObjectFindNearestGameObjectWithOptions (float range, FindGameObjectOptions const &options) const
 
GameObjectFindNearestUnspawnedGameObject (uint32 entry, float range) const
 
GameObjectFindNearestGameObjectOfType (GameobjectTypes type, float range) const
 
PlayerSelectNearestPlayer (float distance) const
 
virtual ObjectGuid GetOwnerGUID () const =0
 
virtual ObjectGuid GetCharmerOrOwnerGUID () const
 
ObjectGuid GetCharmerOrOwnerOrOwnGUID () const
 
UnitGetOwner () const
 
UnitGetCharmerOrOwner () const
 
UnitGetCharmerOrOwnerOrSelf () const
 
PlayerGetCharmerOrOwnerPlayerOrPlayerItself () const
 
PlayerGetAffectingPlayer () const
 
PlayerGetSpellModOwner () const
 
int32 CalculateSpellDamage (Unit const *target, SpellEffectInfo const &spellEffectInfo, int32 const *basePoints=nullptr, float *variance=nullptr, uint32 castItemId=0, int32 itemLevel=-1) const
 
float GetSpellMaxRangeForTarget (Unit const *target, SpellInfo const *spellInfo) const
 
float GetSpellMinRangeForTarget (Unit const *target, SpellInfo const *spellInfo) const
 
double ApplyEffectModifiers (SpellInfo const *spellInfo, uint8 effIndex, double value) const
 
int32 CalcSpellDuration (SpellInfo const *spellInfo, std::vector< SpellPowerCost > const *powerCosts) const
 
int32 ModSpellDuration (SpellInfo const *spellInfo, WorldObject const *target, int32 duration, bool positive, uint32 effectMask) const
 
void ModSpellCastTime (SpellInfo const *spellInfo, int32 &castTime, Spell *spell=nullptr) const
 
void ModSpellDurationTime (SpellInfo const *spellInfo, int32 &durationTime, Spell *spell=nullptr) const
 
virtual float MeleeSpellMissChance (Unit const *victim, WeaponAttackType attType, SpellInfo const *spellInfo) const
 
virtual SpellMissInfo MeleeSpellHitResult (Unit *victim, SpellInfo const *spellInfo) const
 
SpellMissInfo MagicSpellHitResult (Unit *victim, SpellInfo const *spellInfo) const
 
SpellMissInfo SpellHitResult (Unit *victim, SpellInfo const *spellInfo, bool canReflect=false) const
 
void SendSpellMiss (Unit *target, uint32 spellID, SpellMissInfo missInfo)
 
virtual uint32 GetFaction () const =0
 
virtual void SetFaction (uint32)
 
FactionTemplateEntry const * GetFactionTemplateEntry () const
 
ReputationRank GetReactionTo (WorldObject const *target) const
 
bool IsHostileTo (WorldObject const *target) const
 
bool IsHostileToPlayers () const
 
bool IsFriendlyTo (WorldObject const *target) const
 
bool IsNeutralToAll () const
 
SpellCastResult CastSpell (CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
 
void SendPlayOrphanSpellVisual (ObjectGuid const &target, uint32 spellVisualId, float travelSpeed, bool speedAsTime=false, bool withSourceOrientation=false)
 
void SendPlayOrphanSpellVisual (Position const &targetLocation, uint32 spellVisualId, float travelSpeed, bool speedAsTime=false, bool withSourceOrientation=false)
 
void SendCancelOrphanSpellVisual (uint32 id)
 
bool IsValidAttackTarget (WorldObject const *target, SpellInfo const *bySpell=nullptr) const
 
bool IsValidAssistTarget (WorldObject const *target, SpellInfo const *bySpell=nullptr) const
 
UnitGetMagicHitRedirectTarget (Unit *victim, SpellInfo const *spellInfo)
 
virtual uint32 GetCastSpellXSpellVisualId (SpellInfo const *spellInfo) const
 
template<typename Container >
void GetGameObjectListWithEntryInGrid (Container &gameObjectContainer, uint32 entry, float maxSearchRange=250.0f) const
 
template<typename Container >
void GetGameObjectListWithOptionsInGrid (Container &gameObjectContainer, float maxSearchRange, FindGameObjectOptions const &options) const
 
template<typename Container >
void GetCreatureListWithEntryInGrid (Container &creatureContainer, uint32 entry, float maxSearchRange=250.0f) const
 
template<typename Container >
void GetCreatureListWithOptionsInGrid (Container &creatureContainer, float maxSearchRange, FindCreatureOptions const &options) const
 
template<typename Container >
void GetPlayerListInGrid (Container &playerContainer, float maxSearchRange, bool alive=true) const
 
void DestroyForNearbyPlayers ()
 
virtual void UpdateObjectVisibility (bool forced=true)
 
virtual void UpdateObjectVisibilityOnCreate ()
 
virtual void UpdateObjectVisibilityOnDestroy ()
 
void UpdatePositionData ()
 
void BuildUpdate (UpdateDataMapType &) override
 
bool AddToObjectUpdate () override
 
void RemoveFromObjectUpdate () override
 
void AddToNotify (uint16 f)
 
bool isNeedNotify (uint16 f) const
 
uint16 GetNotifyFlags () const
 
void ResetAllNotifies ()
 
bool isActiveObject () const
 
void setActive (bool isActiveObject)
 
bool IsFarVisible () const
 
void SetFarVisible (bool on)
 
bool IsVisibilityOverridden () const
 
void SetVisibilityDistanceOverride (VisibilityDistanceType type)
 
void SetWorldObject (bool apply)
 
bool IsPermanentWorldObject () const
 
bool IsWorldObject () const
 
TransportBaseGetTransport () const
 
float GetTransOffsetX () const
 
float GetTransOffsetY () const
 
float GetTransOffsetZ () const
 
float GetTransOffsetO () const
 
Position const & GetTransOffset () const
 
uint32 GetTransTime () const
 
int8 GetTransSeat () const
 
virtual ObjectGuid GetTransGUID () const
 
void SetTransport (TransportBase *t)
 
virtual float GetStationaryX () const
 
virtual float GetStationaryY () const
 
virtual float GetStationaryZ () const
 
virtual float GetStationaryO () const
 
float GetFloorZ () const
 
virtual float GetCollisionHeight () const
 
float GetMapWaterOrGroundLevel (float x, float y, float z, float *ground=nullptr) const
 
float GetMapHeight (float x, float y, float z, bool vmap=true, float distanceToSearch=50.0f) const
 
std::string GetDebugInfo () const override
 
virtual uint16 GetAIAnimKitId () const
 
virtual uint16 GetMovementAnimKitId () const
 
virtual uint16 GetMeleeAnimKitId () const
 
bool IsPrivateObject () const
 
ObjectGuid GetPrivateObjectOwner () const
 
void SetPrivateObjectOwner (ObjectGuid const &owner)
 
bool CheckPrivateObjectOwnerVisibility (WorldObject const *seer) const
 
SmoothPhasingGetOrCreateSmoothPhasing ()
 
SmoothPhasingGetSmoothPhasing ()
 
SmoothPhasing const * GetSmoothPhasing () const
 
- Public Member Functions inherited from Object
virtual ~Object ()
 
bool IsInWorld () const
 
virtual void AddToWorld ()
 
virtual void RemoveFromWorld ()
 
ObjectGuid const & GetGUID () const
 
uint32 GetEntry () const
 
void SetEntry (uint32 entry)
 
float GetObjectScale () const
 
virtual void SetObjectScale (float scale)
 
uint32 GetDynamicFlags () const
 
bool HasDynamicFlag (uint32 flag) const
 
void SetDynamicFlag (uint32 flag)
 
void RemoveDynamicFlag (uint32 flag)
 
void ReplaceAllDynamicFlags (uint32 flag)
 
TypeID GetTypeId () const
 
bool isType (uint16 mask) const
 
virtual void BuildCreateUpdateBlockForPlayer (UpdateData *data, Player *target) const
 
void SendUpdateToPlayer (Player *player)
 
void BuildValuesUpdateBlockForPlayer (UpdateData *data, Player const *target) const
 
void BuildValuesUpdateBlockForPlayerWithFlag (UpdateData *data, UF::UpdateFieldFlag flags, Player const *target) const
 
void BuildDestroyUpdateBlock (UpdateData *data) const
 
void BuildOutOfRangeUpdateBlock (UpdateData *data) const
 
ByteBufferPrepareValuesUpdateBuffer (UpdateData *data) const
 
virtual void DestroyForPlayer (Player *target) const
 
void SendOutOfRangeForPlayer (Player *target) const
 
virtual void ClearUpdateMask (bool remove)
 
virtual std::string GetNameForLocaleIdx (LocaleConstant locale) const =0
 
virtual bool hasQuest (uint32) const
 
virtual bool hasInvolvedQuest (uint32) const
 
void SetIsNewObject (bool enable)
 
bool IsDestroyedObject () const
 
void SetDestroyedObject (bool destroyed)
 
virtual void BuildUpdate (UpdateDataMapType &)
 
void BuildFieldsUpdate (Player *, UpdateDataMapType &) const
 
bool IsPlayer () const
 
PlayerToPlayer ()
 
Player const * ToPlayer () const
 
bool IsCreature () const
 
CreatureToCreature ()
 
Creature const * ToCreature () const
 
bool IsUnit () const
 
UnitToUnit ()
 
Unit const * ToUnit () const
 
bool IsGameObject () const
 
GameObjectToGameObject ()
 
GameObject const * ToGameObject () const
 
bool IsCorpse () const
 
CorpseToCorpse ()
 
Corpse const * ToCorpse () const
 
bool IsDynObject () const
 
DynamicObjectToDynObject ()
 
DynamicObject const * ToDynObject () const
 
bool IsAreaTrigger () const
 
AreaTriggerToAreaTrigger ()
 
AreaTrigger const * ToAreaTrigger () const
 
bool IsSceneObject () const
 
SceneObjectToSceneObject ()
 
SceneObject const * ToSceneObject () const
 
bool IsConversation () const
 
ConversationToConversation ()
 
Conversation const * ToConversation () const
 
template<typename T >
void ForceUpdateFieldChange (UF::UpdateFieldSetter< T > const &)
 
virtual std::string GetDebugInfo () const
 
virtual LootGetLootForPlayer (Player const *player) const
 
virtual void BuildValuesUpdateWithFlag (ByteBuffer *data, UF::UpdateFieldFlag flags, Player const *target) const
 
- Public Member Functions inherited from WorldLocation
 WorldLocation (uint32 mapId=MAPID_INVALID, float x=0.f, float y=0.f, float z=0.f, float o=0.f)
 
 WorldLocation (uint32 mapId, Position const &position)
 
void WorldRelocate (WorldLocation const &loc)
 
void WorldRelocate (WorldLocation const *loc)
 
void WorldRelocate (uint32 mapId, Position const &pos)
 
void WorldRelocate (uint32 mapId=MAPID_INVALID, float x=0.f, float y=0.f, float z=0.f, float o=0.f)
 
WorldLocation GetWorldLocation () const
 
uint32 GetMapId () const
 
std::string GetDebugInfo () const
 
- Public Member Functions inherited from Position
 Position (float x=0, float y=0, float z=0, float o=0)
 
bool operator== (Position const &a) const
 
void Relocate (float x, float y)
 
void Relocate (float x, float y, float z)
 
void Relocate (float x, float y, float z, float o)
 
void Relocate (Position const &pos)
 
void Relocate (Position const *pos)
 
void RelocateOffset (Position const &offset)
 
void SetOrientation (float orientation)
 
float GetPositionX () const
 
float GetPositionY () const
 
float GetPositionZ () const
 
float GetOrientation () const
 
void GetPosition (float &x, float &y) const
 
void GetPosition (float &x, float &y, float &z) const
 
void GetPosition (float &x, float &y, float &z, float &o) const
 
Position GetPosition () const
 
Streamer< XY > PositionXYStream ()
 
ConstStreamer< XY > PositionXYStream () const
 
Streamer< XYZ > PositionXYZStream ()
 
ConstStreamer< XYZ > PositionXYZStream () const
 
Streamer< XYZO > PositionXYZOStream ()
 
ConstStreamer< XYZO > PositionXYZOStream () const
 
Streamer< PackedXYZ > PositionPackedXYZStream ()
 
ConstStreamer< PackedXYZ > PositionPackedXYZStream () const
 
bool IsPositionValid () const
 
float GetExactDist2dSq (const float x, const float y) const
 
float GetExactDist2dSq (Position const &pos) const
 
float GetExactDist2dSq (Position const *pos) const
 
float GetExactDist2d (const float x, const float y) const
 
float GetExactDist2d (Position const &pos) const
 
float GetExactDist2d (Position const *pos) const
 
float GetExactDistSq (float x, float y, float z) const
 
float GetExactDistSq (Position const &pos) const
 
float GetExactDistSq (Position const *pos) const
 
float GetExactDist (float x, float y, float z) const
 
float GetExactDist (Position const &pos) const
 
float GetExactDist (Position const *pos) const
 
void GetPositionOffsetTo (Position const &endPos, Position &retOffset) const
 
Position GetPositionWithOffset (Position const &offset) const
 
float GetAbsoluteAngle (float x, float y) const
 
float GetAbsoluteAngle (Position const &pos) const
 
float GetAbsoluteAngle (Position const *pos) const
 
float ToAbsoluteAngle (float relAngle) const
 
float ToRelativeAngle (float absAngle) const
 
float GetRelativeAngle (float x, float y) const
 
float GetRelativeAngle (Position const &pos) const
 
float GetRelativeAngle (Position const *pos) const
 
bool IsInDist2d (float x, float y, float dist) const
 
bool IsInDist2d (Position const *pos, float dist) const
 
bool IsInDist (float x, float y, float z, float dist) const
 
bool IsInDist (Position const &pos, float dist) const
 
bool IsInDist (Position const *pos, float dist) const
 
bool IsWithinBox (Position const &center, float xradius, float yradius, float zradius) const
 
bool IsWithinDoubleVerticalCylinder (Position const *center, float radius, float height) const
 
bool HasInArc (float arcangle, Position const *pos, float border=2.0f) const
 
bool HasInLine (Position const *pos, float objSize, float width) const
 
std::string ToString () const
 
- Public Member Functions inherited from GridObject< GameObject >
virtual ~GridObject ()
 
bool IsInGrid () const
 
void AddToGrid (GridRefManager< GameObject > &m)
 
void RemoveFromGrid ()
 
- Public Member Functions inherited from TransportBase
virtual ObjectGuid GetTransportGUID () const =0
 
virtual void CalculatePassengerPosition (float &x, float &y, float &z, float *o=nullptr) const =0
 This method transforms supplied transport offsets into global coordinates.
 
virtual void CalculatePassengerOffset (float &x, float &y, float &z, float *o=nullptr) const =0
 This method transforms supplied global coordinates into local offsets.
 
virtual float GetTransportOrientation () const =0
 
virtual void AddPassenger (WorldObject *passenger)=0
 
virtual TransportBaseRemovePassenger (WorldObject *passenger)=0
 
void UpdatePassengerPosition (Map *map, WorldObject *passenger, float x, float y, float z, float o, bool setHomePosition)
 
virtual int32 GetMapIdForSpawning () const =0
 

Private Member Functions

 Transport ()
 
bool TeleportTransport (uint32 oldMapId, uint32 newMapId, float x, float y, float z, float o)
 
void TeleportPassengersAndHideTransport (uint32 newMapid, float x, float y, float z, float o)
 
void UpdatePassengerPositions (PassengerSet const &passengers)
 

Private Attributes

TransportTemplate const * _transportInfo
 
TransportMovementState _movementState
 
std::unique_ptr< boost::dynamic_bitset< uint8 > > _eventsToTrigger
 
size_t _currentPathLeg
 
Optional< uint32_requestStopTimestamp
 
uint32 _pathProgress
 
TimeTracker _positionChangeTimer
 
PassengerSet _passengers
 
PassengerSet _staticPassengers
 
bool _delayedAddModel
 

Friends

TransportTransportMgr::CreateTransport (uint32, Map *, ObjectGuid::LowType, uint8, uint32, uint32)
 

Additional Inherited Members

- Static Public Member Functions inherited from GameObject
static GameObjectCreateGameObject (uint32 entry, Map *map, Position const &pos, QuaternionData const &rotation, uint32 animProgress, GOState goState, uint32 artKit=0)
 
static GameObjectCreateGameObjectFromDB (ObjectGuid::LowType spawnId, Map *map, bool addToMap=true)
 
static bool DeleteFromDB (ObjectGuid::LowType spawnId)
 
static void SetGoArtKit (uint32 artkit, GameObject *go, ObjectGuid::LowType lowguid=UI64LIT(0))
 
- Static Public Member Functions inherited from WorldObject
static bool InSamePhase (WorldObject const *a, WorldObject const *b)
 
static ReputationRank GetFactionReactionTo (FactionTemplateEntry const *factionTemplateEntry, WorldObject const *target)
 
- Static Public Member Functions inherited from Object
static ObjectGuid GetGUID (Object const *o)
 
static PlayerToPlayer (Object *o)
 
static Player const * ToPlayer (Object const *o)
 
static CreatureToCreature (Object *o)
 
static Creature const * ToCreature (Object const *o)
 
static UnitToUnit (Object *o)
 
static Unit const * ToUnit (Object const *o)
 
static GameObjectToGameObject (Object *o)
 
static GameObject const * ToGameObject (Object const *o)
 
static CorpseToCorpse (Object *o)
 
static Corpse const * ToCorpse (Object const *o)
 
static DynamicObjectToDynObject (Object *o)
 
static DynamicObject const * ToDynObject (Object const *o)
 
static AreaTriggerToAreaTrigger (Object *o)
 
static AreaTrigger const * ToAreaTrigger (Object const *o)
 
static SceneObjectToSceneObject (Object *o)
 
static SceneObject const * ToSceneObject (Object const *o)
 
static ConversationToConversation (Object *o)
 
static Conversation const * ToConversation (Object const *o)
 
- Static Public Member Functions inherited from Position
static float NormalizeOrientation (float o)
 
- Static Public Member Functions inherited from TransportBase
static void CalculatePassengerPosition (float &x, float &y, float &z, float *o, float transX, float transY, float transZ, float transO)
 
static void CalculatePassengerOffset (float &x, float &y, float &z, float *o, float transX, float transY, float transZ, float transO)
 
- Public Attributes inherited from GameObject
std::unique_ptr< Lootm_loot
 
std::unordered_map< ObjectGuid, std::unique_ptr< Loot > > m_personalLoot
 
GameObjectModelm_model
 
UF::UpdateField< UF::GameObjectData, 0, TYPEID_GAMEOBJECTm_gameObjectData
 
- Public Attributes inherited from WorldObject
FlaggedValuesArray32< int32, uint32, StealthType, TOTAL_STEALTH_TYPESm_stealth
 
FlaggedValuesArray32< int32, uint32, StealthType, TOTAL_STEALTH_TYPESm_stealthDetect
 
FlaggedValuesArray32< int32, uint64, InvisibilityType, TOTAL_INVISIBILITY_TYPESm_invisibility
 
FlaggedValuesArray32< int32, uint64, InvisibilityType, TOTAL_INVISIBILITY_TYPESm_invisibilityDetect
 
FlaggedValuesArray32< int32, uint32, ServerSideVisibilityType, TOTAL_SERVERSIDE_VISIBILITY_TYPESm_serverSideVisibility
 
FlaggedValuesArray32< int32, uint32, ServerSideVisibilityType, TOTAL_SERVERSIDE_VISIBILITY_TYPESm_serverSideVisibilityDetect
 
uint32 LastUsedScriptID
 
MovementInfo m_movementInfo
 
EventProcessor m_Events
 
- Public Attributes inherited from Object
UF::UpdateFieldHolder m_values
 
UF::UpdateField< UF::ObjectData, 0, TYPEID_OBJECTm_objectData
 
- Public Attributes inherited from WorldLocation
uint32 m_mapId
 
- Public Attributes inherited from Position
float m_positionX
 
float m_positionY
 
float m_positionZ
 
- Protected Types inherited from GameObject
typedef std::map< uint32, ObjectGuidChairSlotAndUser
 
- Protected Member Functions inherited from GameObject
void BuildValuesCreate (ByteBuffer *data, Player const *target) const override
 
void BuildValuesUpdate (ByteBuffer *data, Player const *target) const override
 
void ClearUpdateMask (bool remove) override
 
void CreateModel ()
 
void UpdateModel ()
 
- Protected Member Functions inherited from WorldObject
 WorldObject (bool isWorldObject)
 
virtual void ProcessPositionDataChanged (PositionFullTerrainStatus const &data)
 
void SetLocationMapId (uint32 _mapId)
 
void SetLocationInstanceId (uint32 _instanceId)
 
virtual bool CanNeverSee (WorldObject const *obj) const
 
virtual bool CanAlwaysSee (WorldObject const *) const
 
virtual bool IsNeverVisibleFor (WorldObject const *seer, bool allowServersideObjects=false) const
 
virtual bool IsAlwaysVisibleFor (WorldObject const *seer) const
 
virtual bool IsInvisibleDueToDespawn (WorldObject const *seer) const
 
virtual bool IsAlwaysDetectableFor (WorldObject const *seer) const
 
- Protected Member Functions inherited from Object
 Object ()
 
void _Create (ObjectGuid const &guid)
 
template<typename T >
void SetUpdateFieldValue (UF::UpdateFieldSetter< T > setter, typename UF::UpdateFieldSetter< T >::value_type value)
 
template<typename T >
void SetUpdateFieldFlagValue (UF::UpdateFieldSetter< T > setter, typename UF::UpdateFieldSetter< T >::value_type flag)
 
template<typename T >
void RemoveUpdateFieldFlagValue (UF::UpdateFieldSetter< T > setter, typename UF::UpdateFieldSetter< T >::value_type flag)
 
template<typename T >
UF::DynamicUpdateFieldSetter< T >::insert_result AddDynamicUpdateFieldValue (UF::DynamicUpdateFieldSetter< T > setter)
 
template<typename T >
UF::DynamicUpdateFieldSetter< T >::insert_result InsertDynamicUpdateFieldValue (UF::DynamicUpdateFieldSetter< T > setter, uint32 index)
 
template<typename T >
void RemoveDynamicUpdateFieldValue (UF::DynamicUpdateFieldSetter< T > setter, uint32 index)
 
template<typename T >
void ClearDynamicUpdateFieldValues (UF::DynamicUpdateFieldSetter< T > setter)
 
template<typename T >
void RemoveOptionalUpdateFieldValue (UF::OptionalUpdateFieldSetter< T > setter)
 
template<typename T >
void SetUpdateFieldStatValue (UF::UpdateFieldSetter< T > setter, typename UF::UpdateFieldSetter< T >::value_type value)
 
template<typename T >
void ApplyModUpdateFieldValue (UF::UpdateFieldSetter< T > setter, typename UF::UpdateFieldSetter< T >::value_type mod, bool apply)
 
template<typename T >
void ApplyPercentModUpdateFieldValue (UF::UpdateFieldSetter< T > setter, float percent, bool apply)
 
template<typename Action >
void DoWithSuppressingObjectUpdates (Action &&action)
 
void BuildMovementUpdate (ByteBuffer *data, CreateObjectBits flags, Player *target) const
 
virtual UF::UpdateFieldFlag GetUpdateFieldFlagsFor (Player const *target) const
 
virtual void BuildValuesCreate (ByteBuffer *data, Player const *target) const =0
 
virtual void BuildValuesUpdate (ByteBuffer *data, Player const *target) const =0
 
virtual bool AddToObjectUpdate ()=0
 
virtual void RemoveFromObjectUpdate ()=0
 
void AddToObjectUpdateIfNeeded ()
 
- Protected Member Functions inherited from MapObject
 MapObject ()
 
- Protected Member Functions inherited from TransportBase
 TransportBase ()
 
virtual ~TransportBase ()
 
- Protected Attributes inherited from GameObject
uint32 m_spellId
 
time_t m_respawnTime
 
uint32 m_respawnDelayTime
 
uint32 m_despawnDelay
 
Seconds m_despawnRespawnTime
 
LootState m_lootState
 
ObjectGuid m_lootStateUnitGUID
 
bool m_spawnedByDefault
 
time_t m_restockTime
 
time_t m_cooldownTime
 
GOState m_prevGoState
 
GuidSet m_SkillupList
 
ObjectGuid m_ritualOwnerGUID
 
GuidSet m_unique_users
 
uint32 m_usetimes
 
ChairSlotAndUser ChairListSlots
 
ObjectGuid::LowType m_spawnId
 For new or temporary gameobjects is 0 for saved it is lowguid.
 
GameObjectTemplate const * m_goInfo
 
GameObjectTemplateAddon const * m_goTemplateAddon
 
GameObjectData const * m_goData
 
std::unique_ptr< GameObjectTypeBasem_goTypeImpl
 
GameObjectValue m_goValue
 
std::array< std::string_view, 3 > m_stringIds
 
Optional< std::string > m_scriptStringId
 
int64 m_packedRotation
 
QuaternionData m_localRotation
 
Position m_stationaryPosition
 
GuidUnorderedSet m_tapList
 
uint16 m_LootMode
 
ObjectGuid m_linkedTrap
 
- Protected Attributes inherited from WorldObject
std::string m_name
 
bool m_isActive
 
bool m_isFarVisible
 
Optional< float > m_visibilityDistanceOverride
 
bool const m_isWorldObject
 
ZoneScriptm_zoneScript
 
TransportBasem_transport
 
uint32 m_zoneId
 
uint32 m_areaId
 
float m_staticFloorZ
 
bool m_outdoors
 
ZLiquidStatus m_liquidStatus
 
- Protected Attributes inherited from Object
uint16 m_objectType
 
TypeID m_objectTypeId
 
CreateObjectBits m_updateFlag
 
bool m_objectUpdated
 

Detailed Description

Definition at line 29 of file Transport.h.

Member Typedef Documentation

◆ PassengerSet

Definition at line 35 of file Transport.h.

Constructor & Destructor Documentation

◆ Transport()

Transport::Transport ( )
private

Definition at line 88 of file Transport.cpp.

88 : GameObject(),
89 _transportInfo(nullptr), _movementState(TransportMovementState::Moving), _eventsToTrigger(std::make_unique<boost::dynamic_bitset<uint8>>()),
91{
95}
CreateObjectBits m_updateFlag
Definition: Object.h:389
TransportMovementState _movementState
Definition: Transport.h:116
uint32 _pathProgress
Definition: Transport.h:120
bool _delayedAddModel
Definition: Transport.h:126
size_t _currentPathLeg
Definition: Transport.h:118
TransportTemplate const * _transportInfo
Definition: Transport.h:115
std::unique_ptr< boost::dynamic_bitset< uint8 > > _eventsToTrigger
Definition: Transport.h:117
bool Rotation
Definition: Object.h:92
bool Stationary
Definition: Object.h:87
bool ServerTime
Definition: Object.h:89

◆ ~Transport()

Transport::~Transport ( )

Definition at line 97 of file Transport.cpp.

98{
99 ASSERT(_passengers.empty());
101}
#define ASSERT
Definition: Errors.h:68
void UnloadStaticPassengers()
Needed when transport enters inactive grid.
Definition: Transport.cpp:583
PassengerSet _passengers
Definition: Transport.h:123
+ Here is the call graph for this function:

Member Function Documentation

◆ AddPassenger()

void Transport::AddPassenger ( WorldObject passenger)
overridevirtual

Implements TransportBase.

Definition at line 283 of file Transport.cpp.

284{
285 if (!IsInWorld())
286 return;
287
288 if (_passengers.insert(passenger).second)
289 {
290 passenger->SetTransport(this);
291 passenger->m_movementInfo.transport.guid = GetGUID();
292 TC_LOG_DEBUG("entities.transport", "Object {} boarded transport {}.", passenger->GetName(), GetName());
293
294 if (Player* plr = passenger->ToPlayer())
295 sScriptMgr->OnAddPassenger(this, plr);
296 }
297}
#define TC_LOG_DEBUG(filterType__,...)
Definition: Log.h:156
#define sScriptMgr
Definition: ScriptMgr.h:1418
ObjectGuid const & GetGUID() const
Definition: Object.h:159
bool IsInWorld() const
Definition: Object.h:153
static Player * ToPlayer(Object *o)
Definition: Object.h:200
std::string const & GetName() const
Definition: Object.h:535
MovementInfo m_movementInfo
Definition: Object.h:739
void SetTransport(TransportBase *t)
Definition: Object.h:737
struct MovementInfo::TransportInfo transport
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ BuildUpdate()

void Transport::BuildUpdate ( UpdateDataMapType data_map)
overridevirtual

Reimplemented from WorldObject.

Definition at line 716 of file Transport.cpp.

717{
718 Map::PlayerList const& players = GetMap()->GetPlayers();
719 if (players.isEmpty())
720 return;
721
722 for (MapReference const& playerReference : players)
723 if (playerReference.GetSource()->InSamePhase(this))
724 BuildFieldsUpdate(playerReference.GetSource(), data_map);
725
726 ClearUpdateMask(true);
727}
void ClearUpdateMask(bool remove) override
bool isEmpty() const
Definition: LinkedList.h:110
PlayerList const & GetPlayers() const
Definition: Map.h:344
void BuildFieldsUpdate(Player *, UpdateDataMapType &) const
Definition: Object.cpp:794
Map * GetMap() const
Definition: Object.h:603
+ Here is the call graph for this function:

◆ CalculatePassengerOffset()

void Transport::CalculatePassengerOffset ( float &  x,
float &  y,
float &  z,
float *  o = nullptr 
) const
inlineoverridevirtual

This method transforms supplied global coordinates into local offsets.

Implements TransportBase.

Definition at line 82 of file Transport.h.

83 {
85 }
virtual void CalculatePassengerOffset(float &x, float &y, float &z, float *o=nullptr) const =0
This method transforms supplied global coordinates into local offsets.
float GetTransportOrientation() const override
Definition: Transport.h:73
float GetPositionZ() const
Definition: Position.h:78
float GetPositionX() const
Definition: Position.h:76
float GetPositionY() const
Definition: Position.h:77
+ Here is the call graph for this function:

◆ CalculatePassengerPosition()

void Transport::CalculatePassengerPosition ( float &  x,
float &  y,
float &  z,
float *  o = nullptr 
) const
inlineoverridevirtual

This method transforms supplied transport offsets into global coordinates.

Implements TransportBase.

Definition at line 76 of file Transport.h.

77 {
79 }
virtual void CalculatePassengerPosition(float &x, float &y, float &z, float *o=nullptr) const =0
This method transforms supplied transport offsets into global coordinates.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ CleanupsBeforeDelete()

void Transport::CleanupsBeforeDelete ( bool  finalCleanup = true)
overridevirtual

Reimplemented from GameObject.

Definition at line 167 of file Transport.cpp.

168{
170 while (!_passengers.empty())
171 {
172 WorldObject* obj = *_passengers.begin();
173 RemovePassenger(obj);
174 }
175
177}
void CleanupsBeforeDelete(bool finalCleanup=true) override
Definition: GameObject.cpp:635
Transport * RemovePassenger(WorldObject *passenger) override
Definition: Transport.cpp:299
+ Here is the call graph for this function:

◆ Create()

bool Transport::Create ( ObjectGuid::LowType  guidlow,
uint32  entry,
float  x,
float  y,
float  z,
float  ang 
)

Definition at line 103 of file Transport.cpp.

104{
105 Relocate(x, y, z, ang);
106
107 if (!IsPositionValid())
108 {
109 TC_LOG_ERROR("entities.transport", "Transport (GUID: {}) not created. Suggested coordinates isn't valid (X: {} Y: {})",
110 guidlow, x, y);
111 return false;
112 }
113
114 Object::_Create(ObjectGuid::Create<HighGuid::Transport>(guidlow));
115
116 GameObjectTemplate const* goinfo = sObjectMgr->GetGameObjectTemplate(entry);
117 if (!goinfo)
118 {
119 TC_LOG_ERROR("sql.sql", "Transport not created: entry in `gameobject_template` not found, entry: {}", entry);
120 return false;
121 }
122
123 m_goInfo = goinfo;
124 m_goTemplateAddon = sObjectMgr->GetGameObjectTemplateAddon(entry);
125
126 TransportTemplate const* tInfo = sTransportMgr->GetTransportTemplate(entry);
127 if (!tInfo)
128 {
129 TC_LOG_ERROR("sql.sql", "Transport {} (name: {}) will not be created, missing `transport_template` entry.", entry, goinfo->name);
130 return false;
131 }
132
133 _transportInfo = tInfo;
134 _eventsToTrigger->resize(tInfo->Events.size(), true);
135
136 if (GameObjectOverride const* goOverride = GetGameObjectOverride())
137 {
138 SetFaction(goOverride->Faction);
139 ReplaceAllFlags(GameObjectFlags(goOverride->Flags));
140 }
141
142 _pathProgress = !goinfo->moTransport.allowstopping ? getMSTime() /*might be called before world update loop begins, don't use GameTime*/ % tInfo->TotalPathTime : 0;
144 SetObjectScale(goinfo->size);
145 SetPeriod(tInfo->TotalPathTime);
146 SetEntry(goinfo->entry);
147 SetDisplayId(goinfo->displayId);
152 SetName(goinfo->name);
153 SetLocalRotation(0.0f, 0.0f, 0.0f, 1.0f);
155
156 size_t legIndex;
157 if (Optional<Position> position = _transportInfo->ComputePosition(_pathProgress, nullptr, &legIndex))
158 {
159 Relocate(position->GetPositionX(), position->GetPositionY(), position->GetPositionZ(), position->GetOrientation());
160 _currentPathLeg = legIndex;
161 }
162
163 CreateModel();
164 return true;
165}
#define sDB2Manager
Definition: DB2Stores.h:522
#define TC_LOG_ERROR(filterType__,...)
Definition: Log.h:165
#define sObjectMgr
Definition: ObjectMgr.h:1952
std::optional< T > Optional
Optional helper class to wrap optional values within.
Definition: Optional.h:25
@ GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT
GameObjectFlags
@ GO_STATE_READY
@ GO_STATE_ACTIVE
uint32 getMSTime()
Definition: Timer.h:33
#define sTransportMgr
Definition: TransportMgr.h:183
void SetGoState(GOState state)
void CreateModel()
void ReplaceAllFlags(GameObjectFlags flags)
Definition: GameObject.h:257
void SetGoAnimProgress(uint8 animprogress)
Definition: GameObject.h:269
void SetGoType(GameobjectTypes type)
Definition: GameObject.h:261
void SetLocalRotation(float qx, float qy, float qz, float qw)
GameObjectTemplateAddon const * m_goTemplateAddon
Definition: GameObject.h:456
UF::UpdateField< UF::GameObjectData, 0, TYPEID_GAMEOBJECT > m_gameObjectData
Definition: GameObject.h:427
void SetPathProgressForClient(float progress)
void SetDisplayId(uint32 displayid)
GameObjectTemplate const * m_goInfo
Definition: GameObject.h:455
GameObjectOverride const * GetGameObjectOverride() const
void SetParentRotation(QuaternionData const &rotation)
void SetFaction(uint32 faction) override
Definition: GameObject.h:370
void SetUpdateFieldValue(UF::UpdateFieldSetter< T > setter, typename UF::UpdateFieldSetter< T >::value_type value)
Definition: Object.h:272
UF::UpdateFieldHolder m_values
Definition: Object.h:253
void _Create(ObjectGuid const &guid)
Definition: Object.cpp:101
void SetEntry(uint32 entry)
Definition: Object.h:161
virtual void SetObjectScale(float scale)
Definition: Object.h:164
void SetPeriod(uint32 period)
Definition: Transport.h:90
MutableFieldReference< T, false > ModifyValue(UpdateField< T, BlockBit, Bit >(Derived::*field))
Definition: UpdateField.h:673
void SetName(std::string newname)
Definition: Object.h:536
struct GameObjectTemplate::@210::@227 moTransport
bool IsPositionValid() const
Definition: Position.cpp:42
void Relocate(float x, float y)
Definition: Position.h:63
Optional< Position > ComputePosition(uint32 time, TransportMovementState *moveState, size_t *legIndex) const
std::vector< TransportPathEvent > Events
Definition: TransportMgr.h:97
UpdateField< uint32, 0, 7 > SpawnTrackingStateAnimID
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ CreateGOPassenger()

GameObject * Transport::CreateGOPassenger ( ObjectGuid::LowType  guid,
GameObjectData const *  data 
)

Definition at line 366 of file Transport.cpp.

367{
368 Map* map = GetMap();
369 if (map->GetGORespawnTime(guid))
370 return nullptr;
371
372 GameObject* go = GameObject::CreateGameObjectFromDB(guid, map, false);
373 if (!go)
374 return nullptr;
375
376 ASSERT(data);
377
378 float x, y, z, o;
379 data->spawnPoint.GetPosition(x, y, z, o);
380
381 go->SetTransport(this);
383 go->m_movementInfo.transport.pos.Relocate(x, y, z, o);
385 CalculatePassengerPosition(x, y, z, &o);
386 go->Relocate(x, y, z, o);
387 go->RelocateStationaryPosition(x, y, z, o);
388
389 if (!go->IsPositionValid())
390 {
391 TC_LOG_ERROR("entities.transport", "Passenger {} not created. Suggested coordinates aren't valid (X: {} Y: {})", go->GetGUID().ToString(), go->GetPositionX(), go->GetPositionY());
392 delete go;
393 return nullptr;
394 }
395
396 PhasingHandler::InitDbPhaseShift(go->GetPhaseShift(), data->phaseUseFlags, data->phaseId, data->phaseGroup);
397 PhasingHandler::InitDbVisibleMapId(go->GetPhaseShift(), data->terrainSwapMap);
398
399 if (!map->AddToMap(go))
400 {
401 delete go;
402 return nullptr;
403 }
404
405 _staticPassengers.insert(go);
406 return go;
407}
static GameObject * CreateGameObjectFromDB(ObjectGuid::LowType spawnId, Map *map, bool addToMap=true)
Definition: GameObject.cpp:961
void RelocateStationaryPosition(float x, float y, float z, float o)
Definition: GameObject.h:386
Definition: Map.h:187
bool AddToMap(T *)
Definition: Map.cpp:534
time_t GetGORespawnTime(ObjectGuid::LowType spawnId) const
Definition: Map.h:463
std::string ToString() const
Definition: ObjectGuid.cpp:554
static ObjectGuid GetGUID(Object const *o)
Definition: Object.h:158
static void InitDbVisibleMapId(PhaseShift &phaseShift, int32 visibleMapId)
static void InitDbPhaseShift(PhaseShift &phaseShift, uint8 phaseUseFlags, uint16 phaseId, uint32 phaseGroupId)
PassengerSet _staticPassengers
Definition: Transport.h:124
void CalculatePassengerPosition(float &x, float &y, float &z, float *o=nullptr) const override
This method transforms supplied transport offsets into global coordinates.
Definition: Transport.h:76
PhaseShift & GetPhaseShift()
Definition: Object.h:504
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ CreateNPCPassenger()

Creature * Transport::CreateNPCPassenger ( ObjectGuid::LowType  guid,
CreatureData const *  data 
)

@HACK - transport models are not added to map's dynamic LoS calculations because the current GameObjectModel cannot be moved without recreating

Definition at line 317 of file Transport.cpp.

318{
319 Map* map = GetMap();
320 if (map->GetCreatureRespawnTime(guid))
321 return nullptr;
322
323 Creature* creature = Creature::CreateCreatureFromDB(guid, map, false, true);
324 if (!creature)
325 return nullptr;
326
327 ASSERT(data);
328
329 float x, y, z, o;
330 data->spawnPoint.GetPosition(x, y, z, o);
331
332 creature->SetTransport(this);
333 creature->m_movementInfo.transport.guid = GetGUID();
334 creature->m_movementInfo.transport.pos.Relocate(x, y, z, o);
335 creature->m_movementInfo.transport.seat = -1;
336 CalculatePassengerPosition(x, y, z, &o);
337 creature->Relocate(x, y, z, o);
338 creature->SetHomePosition(creature->GetPositionX(), creature->GetPositionY(), creature->GetPositionZ(), creature->GetOrientation());
340
344
345 if (!creature->IsPositionValid())
346 {
347 TC_LOG_ERROR("entities.transport", "Passenger {} not created. Suggested coordinates aren't valid (X: {} Y: {})", creature->GetGUID().ToString(), creature->GetPositionX(), creature->GetPositionY());
348 delete creature;
349 return nullptr;
350 }
351
352 PhasingHandler::InitDbPhaseShift(creature->GetPhaseShift(), data->phaseUseFlags, data->phaseId, data->phaseGroup);
353 PhasingHandler::InitDbVisibleMapId(creature->GetPhaseShift(), data->terrainSwapMap);
354
355 if (!map->AddToMap(creature))
356 {
357 delete creature;
358 return nullptr;
359 }
360
361 _staticPassengers.insert(creature);
362 sScriptMgr->OnAddCreaturePassenger(this, creature);
363 return creature;
364}
@ UNIT_STATE_IGNORE_PATHFINDING
Definition: Unit.h:280
void SetHomePosition(float x, float y, float z, float o)
Definition: Creature.h:330
static Creature * CreateCreatureFromDB(ObjectGuid::LowType spawnId, Map *map, bool addToMap=true, bool allowDuplicate=false)
Definition: Creature.cpp:1178
void SetTransportHomePosition(float x, float y, float z, float o)
Definition: Creature.h:335
time_t GetCreatureRespawnTime(ObjectGuid::LowType spawnId) const
Definition: Map.h:462
void AddUnitState(uint32 f)
Definition: Unit.h:851
float GetOrientation() const
Definition: Position.h:79
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ EnableMovement()

void Transport::EnableMovement ( bool  enabled)

Definition at line 592 of file Transport.cpp.

593{
594 if (!GetGOInfo()->moTransport.allowstopping)
595 return;
596
597 if (!enabled)
598 {
600 }
601 else
602 {
603 _requestStopTimestamp.reset();
606 }
607}
@ GO_DYNFLAG_LO_STOPPED
GameObjectTemplate const * GetGOInfo() const
Definition: GameObject.h:184
void RemoveDynamicFlag(uint32 flag)
Definition: Object.h:169
uint32 GetTransportPeriod() const
Definition: Transport.h:89
Optional< uint32 > _requestStopTimestamp
Definition: Transport.h:119
uint32 GetNextPauseWaypointTimestamp(uint32 time) const
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ GetDebugInfo()

std::string Transport::GetDebugInfo ( ) const
overridevirtual

Reimplemented from GameObject.

Definition at line 729 of file Transport.cpp.

730{
731 std::stringstream sstr;
732 sstr << GameObject::GetDebugInfo();
733 return sstr.str();
734}
std::string GetDebugInfo() const override
+ Here is the call graph for this function:

◆ GetExpectedMapId()

uint32 Transport::GetExpectedMapId ( ) const

Returns id of the map that transport is expected to be on, according to current path progress.

Definition at line 736 of file Transport.cpp.

737{
739}
std::vector< TransportPathLeg > PathLegs
Definition: TransportMgr.h:96
+ Here is the caller graph for this function:

◆ GetMapIdForSpawning()

int32 Transport::GetMapIdForSpawning ( ) const
overridevirtual

Implements TransportBase.

Definition at line 529 of file Transport.cpp.

530{
532}
+ Here is the call graph for this function:

◆ GetPassengers()

PassengerSet const & Transport::GetPassengers ( ) const
inline

Definition at line 48 of file Transport.h.

48{ return _passengers; }

◆ GetTimer()

uint32 Transport::GetTimer ( ) const
inline

Definition at line 91 of file Transport.h.

91{ return _pathProgress; }

◆ GetTransportGUID()

ObjectGuid Transport::GetTransportGUID ( ) const
inlineoverridevirtual

Implements TransportBase.

Definition at line 71 of file Transport.h.

71{ return GetGUID(); }
+ Here is the call graph for this function:

◆ GetTransportOrientation()

float Transport::GetTransportOrientation ( ) const
inlineoverridevirtual

Implements TransportBase.

Definition at line 73 of file Transport.h.

73{ return GetOrientation(); }
+ Here is the call graph for this function:

◆ GetTransportPeriod()

uint32 Transport::GetTransportPeriod ( ) const
inline

Definition at line 89 of file Transport.h.

89{ return m_gameObjectData->Level; }
+ Here is the caller graph for this function:

◆ LoadStaticPassengers()

void Transport::LoadStaticPassengers ( )

Needed when transport moves from inactive to active grid.

Definition at line 562 of file Transport.cpp.

563{
564 if (uint32 mapId = GetGOInfo()->moTransport.SpawnMap)
565 {
566 CellObjectGuidsMap const& cells = sObjectMgr->GetMapObjectGuids(mapId, GetMap()->GetDifficultyID());
567 CellGuidSet::const_iterator guidEnd;
568 for (CellObjectGuidsMap::const_iterator cellItr = cells.begin(); cellItr != cells.end(); ++cellItr)
569 {
570 // Creatures on transport
571 guidEnd = cellItr->second.creatures.end();
572 for (CellGuidSet::const_iterator guidItr = cellItr->second.creatures.begin(); guidItr != guidEnd; ++guidItr)
573 CreateNPCPassenger(*guidItr, sObjectMgr->GetCreatureData(*guidItr));
574
575 // GameObjects on transport
576 guidEnd = cellItr->second.gameobjects.end();
577 for (CellGuidSet::const_iterator guidItr = cellItr->second.gameobjects.begin(); guidItr != guidEnd; ++guidItr)
578 CreateGOPassenger(*guidItr, sObjectMgr->GetGameObjectData(*guidItr));
579 }
580 }
581}
uint32_t uint32
Definition: Define.h:143
std::unordered_map< uint32, CellObjectGuids > CellObjectGuidsMap
Definition: ObjectMgr.h:485
Creature * CreateNPCPassenger(ObjectGuid::LowType guid, CreatureData const *data)
Definition: Transport.cpp:317
GameObject * CreateGOPassenger(ObjectGuid::LowType guid, GameObjectData const *data)
Definition: Transport.cpp:366
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ RemovePassenger()

Transport * Transport::RemovePassenger ( WorldObject passenger)
overridevirtual

Implements TransportBase.

Definition at line 299 of file Transport.cpp.

300{
301 if (_passengers.erase(passenger) || _staticPassengers.erase(passenger)) // static passenger can remove itself in case of grid unload
302 {
303 passenger->SetTransport(nullptr);
304 passenger->m_movementInfo.transport.Reset();
305 TC_LOG_DEBUG("entities.transport", "Object {} removed from transport {}.", passenger->GetName(), GetName());
306
307 if (Player* plr = passenger->ToPlayer())
308 {
309 sScriptMgr->OnRemovePassenger(this, plr);
310 plr->SetFallInformation(0, plr->GetPositionZ());
311 }
312 }
313
314 return this;
315}
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ SetDelayedAddModelToMap()

void Transport::SetDelayedAddModelToMap ( )
inline

Definition at line 103 of file Transport.h.

103{ _delayedAddModel = true; }

◆ SetPeriod()

void Transport::SetPeriod ( uint32  period)
inline

Definition at line 90 of file Transport.h.

90{ SetLevel(period); }
void SetLevel(uint32 level)
Definition: GameObject.h:259
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ SummonPassenger()

bool Transport::SummonPassenger ( uint32  entry,
Position const &  pos,
TempSummonType  summonType,
SummonPropertiesEntry const *  properties = nullptr,
Milliseconds  duration = 0ms,
Unit summoner = nullptr,
uint32  spellId = 0,
uint32  vehId = 0 
)

Temporarily summons a creature as passenger on this transport.

Parameters
entryId of the creature from creature_template table
posInitial position of the creature (transport offsets)
summonType
properties
durationDetermines how long the creauture will exist in world depending on @summonType (in milliseconds)
summonerSummoner of the creature (for AI purposes)
spellId
vehIdIf set, this value overrides vehicle id from creature_template that the creature will use
Returns
Summoned creature.

@HACK - transport models are not added to map's dynamic LoS calculations because the current GameObjectModel cannot be moved without recreating

Definition at line 409 of file Transport.cpp.

410{
411 Map* map = FindMap();
412 if (!map)
413 return nullptr;
414
416 if (properties)
417 {
418 switch (properties->Control)
419 {
421 mask = UNIT_MASK_GUARDIAN;
422 break;
424 mask = UNIT_MASK_PUPPET;
425 break;
427 mask = UNIT_MASK_MINION;
428 break;
432 {
433 switch (SummonTitle(properties->Title))
434 {
435 case SummonTitle::Minion:
436 case SummonTitle::Guardian:
437 case SummonTitle::Runeblade:
438 mask = UNIT_MASK_GUARDIAN;
439 break;
440 case SummonTitle::Totem:
441 case SummonTitle::Lightwell:
442 mask = UNIT_MASK_TOTEM;
443 break;
444 case SummonTitle::Vehicle:
445 case SummonTitle::Mount:
446 mask = UNIT_MASK_SUMMON;
447 break;
448 case SummonTitle::Companion:
449 mask = UNIT_MASK_MINION;
450 break;
451 default:
452 if (properties->GetFlags().HasFlag(SummonPropertiesFlags::JoinSummonerSpawnGroup)) // Mirror Image, Summon Gargoyle
453 mask = UNIT_MASK_GUARDIAN;
454 break;
455 }
456 break;
457 }
458 default:
459 return nullptr;
460 }
461 }
462
463 TempSummon* summon = nullptr;
464 switch (mask)
465 {
466 case UNIT_MASK_SUMMON:
467 summon = new TempSummon(properties, summoner, false);
468 break;
470 summon = new Guardian(properties, summoner, false);
471 break;
472 case UNIT_MASK_PUPPET:
473 summon = new Puppet(properties, summoner);
474 break;
475 case UNIT_MASK_TOTEM:
476 summon = new Totem(properties, summoner);
477 break;
478 case UNIT_MASK_MINION:
479 summon = new Minion(properties, summoner, false);
480 break;
481 }
482
483 float x, y, z, o;
484 pos.GetPosition(x, y, z, o);
485 CalculatePassengerPosition(x, y, z, &o);
486
487 if (!summon->Create(map->GenerateLowGuid<HighGuid::Creature>(), map, entry, { x, y, z, o }, nullptr, vehId))
488 {
489 delete summon;
490 return nullptr;
491 }
492
493 WorldObject* phaseShiftOwner = this;
494 if (summoner && !(properties && properties->GetFlags().HasFlag(SummonPropertiesFlags::IgnoreSummonerPhase)))
495 phaseShiftOwner = summoner;
496
497 if (phaseShiftOwner)
498 PhasingHandler::InheritPhaseShift(summon, phaseShiftOwner);
499
500 summon->SetCreatedBySpell(spellId);
501
502 summon->SetTransport(this);
505 summon->Relocate(x, y, z, o);
506 summon->SetHomePosition(x, y, z, o);
507 summon->SetTransportHomePosition(pos);
508
512
513 summon->InitStats(summoner, duration);
514
515 if (!map->AddToMap<Creature>(summon))
516 {
517 delete summon;
518 return nullptr;
519 }
520
521 _staticPassengers.insert(summon);
522
523 summon->InitSummon(summoner);
524 summon->SetTempSummonType(summonType);
525
526 return summon;
527}
SummonTitle
@ SUMMON_CATEGORY_PET
@ SUMMON_CATEGORY_VEHICLE
@ SUMMON_CATEGORY_ALLY
@ SUMMON_CATEGORY_PUPPET
@ SUMMON_CATEGORY_WILD
@ SUMMON_CATEGORY_UNK
@ UNIT_MASK_PUPPET
Definition: Unit.h:353
@ UNIT_MASK_TOTEM
Definition: Unit.h:350
@ UNIT_MASK_SUMMON
Definition: Unit.h:347
@ UNIT_MASK_GUARDIAN
Definition: Unit.h:349
@ UNIT_MASK_MINION
Definition: Unit.h:348
bool Create(ObjectGuid::LowType guidlow, Map *map, uint32 entry, Position const &pos, CreatureData const *data, uint32 vehId, bool dynamic=false)
Definition: Creature.cpp:1056
ObjectGuid::LowType GenerateLowGuid()
Definition: Map.h:496
static void InheritPhaseShift(WorldObject *target, WorldObject const *source)
virtual void InitStats(WorldObject *summoner, Milliseconds duration)
void SetTempSummonType(TempSummonType type)
virtual void InitSummon(WorldObject *summoner)
Definition: Totem.h:31
void SetCreatedBySpell(int32 spellId)
Definition: Unit.h:967
Map * FindMap() const
Definition: Object.h:604
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ TeleportPassengersAndHideTransport()

void Transport::TeleportPassengersAndHideTransport ( uint32  newMapid,
float  x,
float  y,
float  z,
float  o 
)
private

Definition at line 643 of file Transport.cpp.

644{
645 if (newMapid == GetMapId())
646 {
647 AddToWorld();
648
649 for (MapReference const& ref : GetMap()->GetPlayers())
650 {
651 if (ref.GetSource()->GetTransport() != this && ref.GetSource()->InSamePhase(this))
652 {
653 UpdateData data(GetMap()->GetId());
654 BuildCreateUpdateBlockForPlayer(&data, ref.GetSource());
655 ref.GetSource()->m_visibleTransports.insert(GetGUID());
656 WorldPacket packet;
657 data.BuildPacket(&packet);
658 ref.GetSource()->SendDirectMessage(&packet);
659 }
660 }
661 }
662 else
663 {
664 UpdateData data(GetMap()->GetId());
666
667 WorldPacket packet;
668 data.BuildPacket(&packet);
669 for (MapReference const& ref : GetMap()->GetPlayers())
670 {
671 if (ref.GetSource()->GetTransport() != this && ref.GetSource()->m_visibleTransports.count(GetGUID()))
672 {
673 ref.GetSource()->SendDirectMessage(&packet);
674 ref.GetSource()->m_visibleTransports.erase(GetGUID());
675 }
676 }
677
679 }
680
681 PassengerSet passengersToTeleport = _passengers;
682 for (WorldObject* obj : passengersToTeleport)
683 {
684 float destX, destY, destZ, destO;
685 obj->m_movementInfo.transport.pos.GetPosition(destX, destY, destZ, destO);
686 TransportBase::CalculatePassengerPosition(destX, destY, destZ, &destO, x, y, z, o);
687
688 switch (obj->GetTypeId())
689 {
690 case TYPEID_PLAYER:
691 if (!obj->ToPlayer()->TeleportTo(newMapid, destX, destY, destZ, destO, TELE_TO_NOT_LEAVE_TRANSPORT))
692 RemovePassenger(obj);
693 break;
696 obj->AddObjectToRemoveList();
697 break;
698 default:
699 RemovePassenger(obj);
700 break;
701 }
702 }
703}
@ TYPEID_AREATRIGGER
Definition: ObjectGuid.h:46
@ TYPEID_DYNAMICOBJECT
Definition: ObjectGuid.h:44
@ TYPEID_PLAYER
Definition: ObjectGuid.h:41
@ TELE_TO_NOT_LEAVE_TRANSPORT
Definition: Player.h:798
void RemoveFromWorld() override
Definition: GameObject.cpp:688
void AddToWorld() override
Definition: GameObject.cpp:661
virtual void BuildCreateUpdateBlockForPlayer(UpdateData *data, Player *target) const
Definition: Object.cpp:130
void BuildOutOfRangeUpdateBlock(UpdateData *data) const
Definition: Object.cpp:213
std::set< WorldObject * > PassengerSet
Definition: Transport.h:35
uint32 GetMapId() const
Definition: Position.h:185
TC_GAME_API uint32 GetId(std::string_view username)
TC_GAME_API HashMapHolder< Player >::MapType const & GetPlayers()
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ TeleportTransport()

bool Transport::TeleportTransport ( uint32  oldMapId,
uint32  newMapId,
float  x,
float  y,
float  z,
float  o 
)
private

Definition at line 609 of file Transport.cpp.

610{
611 if (oldMapId != newMapId)
612 {
614 TeleportPassengersAndHideTransport(newMapId, x, y, z, o);
615 return true;
616 }
617 else
618 {
619 UpdatePosition(x, y, z, o);
620
621 // Teleport players, they need to know it
622 for (PassengerSet::iterator itr = _passengers.begin(); itr != _passengers.end(); ++itr)
623 {
624 if ((*itr)->GetTypeId() == TYPEID_PLAYER)
625 {
626 // will be relocated in UpdatePosition of the vehicle
627 if (Unit* veh = (*itr)->ToUnit()->GetVehicleBase())
628 if (veh->GetTransport() == this)
629 continue;
630
631 float destX, destY, destZ, destO;
632 (*itr)->m_movementInfo.transport.pos.GetPosition(destX, destY, destZ, destO);
633 TransportBase::CalculatePassengerPosition(destX, destY, destZ, &destO, x, y, z, o);
634
635 (*itr)->ToUnit()->NearTeleportTo(destX, destY, destZ, destO);
636 }
637 }
638
639 return false;
640 }
641}
static Unit * ToUnit(Object *o)
Definition: Object.h:212
void UpdatePosition(float x, float y, float z, float o)
Definition: Transport.cpp:534
void TeleportPassengersAndHideTransport(uint32 newMapid, float x, float y, float z, float o)
Definition: Transport.cpp:643
Definition: Unit.h:747
Unit * GetVehicleBase() const
Definition: Unit.cpp:11537
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ UnloadStaticPassengers()

void Transport::UnloadStaticPassengers ( )

Needed when transport enters inactive grid.

Definition at line 583 of file Transport.cpp.

584{
585 while (!_staticPassengers.empty())
586 {
587 WorldObject* obj = *_staticPassengers.begin();
588 obj->AddObjectToRemoveList(); // also removes from _staticPassengers
589 }
590}
void AddObjectToRemoveList()
Definition: Object.cpp:1811
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ Update()

void Transport::Update ( uint32  diff)
overridevirtual

Reimplemented from GameObject.

Definition at line 179 of file Transport.cpp.

180{
181 constexpr Milliseconds positionUpdateDelay = 200ms;
182
183 if (AI())
184 AI()->UpdateAI(diff);
185 else if (!AIM_Initialize())
186 TC_LOG_ERROR("entities.transport", "Could not initialize GameObjectAI for Transport");
187
188 sScriptMgr->OnTransportUpdate(this, diff);
189
191
193 if (!GetGOInfo()->moTransport.allowstopping)
196 _pathProgress += diff;
197 else
199
200 if (_pathProgress / GetTransportPeriod() != cycleId)
201 {
202 // reset cycle
203 _eventsToTrigger->set();
204 }
205
207
209
210 size_t eventToTriggerIndex = _eventsToTrigger->find_first();
211 if (eventToTriggerIndex != boost::dynamic_bitset<uint8>::npos)
212 {
213 while (eventToTriggerIndex < _transportInfo->Events.size() && _transportInfo->Events[eventToTriggerIndex].Timestamp < timer)
214 {
215 if (TransportPathLeg const* leg = _transportInfo->GetLegForTime(_transportInfo->Events[eventToTriggerIndex].Timestamp))
216 if (leg->MapId == GetMapId())
217 GameEvents::Trigger(_transportInfo->Events[eventToTriggerIndex].EventId, this, this);
218
219 _eventsToTrigger->set(eventToTriggerIndex, false);
220 ++eventToTriggerIndex;
221 }
222 }
223
224 TransportMovementState moveState;
225 size_t legIndex;
226 if (Optional<Position> newPosition = _transportInfo->ComputePosition(timer, &moveState, &legIndex))
227 {
228 bool justStopped = _movementState == TransportMovementState::Moving && moveState != TransportMovementState::Moving;
229 _movementState = moveState;
230
231 if (justStopped)
232 {
234 {
237 }
238 }
239
240 if (legIndex != _currentPathLeg)
241 {
243 _currentPathLeg = legIndex;
244 TeleportTransport(oldMapId, _transportInfo->PathLegs[legIndex].MapId, newPosition->GetPositionX(), newPosition->GetPositionY(), newPosition->GetPositionZ(), newPosition->GetOrientation());
245 return;
246 }
247
248 // set position
250 {
251 _positionChangeTimer.Reset(positionUpdateDelay);
252 if (_movementState == TransportMovementState::Moving || justStopped)
253 UpdatePosition(newPosition->GetPositionX(), newPosition->GetPositionY(), newPosition->GetPositionZ(), newPosition->GetOrientation());
254 else
255 {
256 /* There are four possible scenarios that trigger loading/unloading passengers:
257 1. transport moves from inactive to active grid
258 2. the grid that transport is currently in becomes active
259 3. transport moves from active to inactive grid
260 4. the grid that transport is currently in unloads
261 */
262 bool gridActive = GetMap()->IsGridLoaded(GetPositionX(), GetPositionY());
263
264 if (_staticPassengers.empty() && gridActive) // 2.
266 else if (!_staticPassengers.empty() && !gridActive)
267 // 4. - if transports stopped on grid edge, some passengers can remain in active grids
268 // unload all static passengers otherwise passengers won't load correctly when the grid that transport is currently in becomes active
270 }
271 }
272 }
273
274 // Add model to map after we are fully done with moving maps
276 {
277 _delayedAddModel = false;
278 if (m_model)
280 }
281}
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Definition: Duration.h:29
TransportMovementState
Definition: TransportMgr.h:44
virtual void UpdateAI(uint32)
Definition: GameObjectAI.h:59
GOState GetGoState() const
Definition: GameObject.h:262
GameObjectAI * AI() const
Definition: GameObject.h:359
bool AIM_Initialize()
Definition: GameObject.cpp:617
GameObjectModel * m_model
Definition: GameObject.h:372
void InsertGameObjectModel(GameObjectModel const &model)
Definition: Map.h:440
bool IsGridLoaded(uint32 gridId) const
Definition: Map.h:237
void SetDynamicFlag(uint32 flag)
Definition: Object.h:168
void LoadStaticPassengers()
Needed when transport moves from inactive to active grid.
Definition: Transport.cpp:562
bool TeleportTransport(uint32 oldMapId, uint32 newMapId, float x, float y, float z, float o)
Definition: Transport.cpp:609
TimeTracker _positionChangeTimer
Definition: Transport.h:121
uint32 GetExpectedMapId() const
Returns id of the map that transport is expected to be on, according to current path progress.
Definition: Transport.cpp:736
TC_GAME_API void Trigger(uint32 gameEventId, WorldObject *source, WorldObject *target)
uint32 GetGameTimeMS()
Definition: GameTime.cpp:44
void Update(int32 diff)
Definition: Timer.h:121
bool Passed() const
Definition: Timer.h:131
void Reset(int32 expiry)
Definition: Timer.h:136
TransportPathLeg const * GetLegForTime(uint32 time) const
+ Here is the call graph for this function:

◆ UpdatePassengerPositions()

void Transport::UpdatePassengerPositions ( PassengerSet const &  passengers)
private

Definition at line 705 of file Transport.cpp.

706{
707 for (WorldObject* passenger : passengers)
708 {
709 float x, y, z, o;
710 passenger->m_movementInfo.transport.pos.GetPosition(x, y, z, o);
711 CalculatePassengerPosition(x, y, z, &o);
712 UpdatePassengerPosition(GetMap(), passenger, x, y, z, o, true);
713 }
714}
void UpdatePassengerPosition(Map *map, WorldObject *passenger, float x, float y, float z, float o, bool setHomePosition)
Definition: Transport.cpp:39
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ UpdatePosition()

void Transport::UpdatePosition ( float  x,
float  y,
float  z,
float  o 
)

Definition at line 534 of file Transport.cpp.

535{
536 sScriptMgr->OnRelocate(this, GetMapId(), x, y, z);
537
538 bool newActive = GetMap()->IsGridLoaded(x, y);
539 Cell oldCell(GetPositionX(), GetPositionY());
540
541 Relocate(x, y, z, o);
544
546
547 /* There are four possible scenarios that trigger loading/unloading passengers:
548 1. transport moves from inactive to active grid
549 2. the grid that transport is currently in becomes active
550 3. transport moves from active to inactive grid
551 4. the grid that transport is currently in unloads
552 */
553 if (_staticPassengers.empty() && newActive) // 1.
555 else if (!_staticPassengers.empty() && !newActive && oldCell.DiffGrid(Cell(GetPositionX(), GetPositionY()))) // 3.
557 else
559 // 4. is handed by grid unload
560}
Position m_stationaryPosition
Definition: GameObject.h:465
void UpdateModelPosition()
void UpdatePassengerPositions(PassengerSet const &passengers)
Definition: Transport.cpp:705
Definition: Cell.h:47
void SetOrientation(float orientation)
Definition: Position.h:71
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Friends And Related Function Documentation

◆ TransportMgr::CreateTransport

Member Data Documentation

◆ _currentPathLeg

size_t Transport::_currentPathLeg
private

Definition at line 118 of file Transport.h.

◆ _delayedAddModel

bool Transport::_delayedAddModel
private

Definition at line 126 of file Transport.h.

◆ _eventsToTrigger

std::unique_ptr<boost::dynamic_bitset<uint8> > Transport::_eventsToTrigger
private

Definition at line 117 of file Transport.h.

◆ _movementState

TransportMovementState Transport::_movementState
private

Definition at line 116 of file Transport.h.

◆ _passengers

PassengerSet Transport::_passengers
private

Definition at line 123 of file Transport.h.

◆ _pathProgress

uint32 Transport::_pathProgress
private

Definition at line 120 of file Transport.h.

◆ _positionChangeTimer

TimeTracker Transport::_positionChangeTimer
private

Definition at line 121 of file Transport.h.

◆ _requestStopTimestamp

Optional<uint32> Transport::_requestStopTimestamp
private

Definition at line 119 of file Transport.h.

◆ _staticPassengers

PassengerSet Transport::_staticPassengers
private

Definition at line 124 of file Transport.h.

◆ _transportInfo

TransportTemplate const* Transport::_transportInfo
private

Definition at line 115 of file Transport.h.


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