From f0794d75850a0c43938a9cddf2c42e0aab08d4ff Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 27 Oct 2013 11:15:56 +0100 Subject: Core/Transports: Correct path generation for a few transports --- src/server/game/Entities/Creature/Creature.h | 3 --- src/server/game/Entities/Transport/Transport.cpp | 31 ++++++++++++++++-------- 2 files changed, 21 insertions(+), 13 deletions(-) (limited to 'src/server/game/Entities') diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 4f43305c54f..5b1cb99d93d 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -667,9 +667,6 @@ class Creature : public Unit, public GridObject, public MapObject float m_SightDistance, m_CombatDistance; - void SetGUIDTransport(uint32 guid) { guid_transport=guid; } - uint32 GetGUIDTransport() { return guid_transport; } - void FarTeleportTo(Map* map, float X, float Y, float Z, float O); bool m_isTempWorldObject; //true when possessed diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index 30b7b61f574..ea8aae2af8c 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -40,6 +40,7 @@ Transport::Transport() : GameObject(), Transport::~Transport() { + ASSERT(_passengers.empty()); UnloadStaticPassengers(); } @@ -192,20 +193,23 @@ void Transport::Update(uint32 diff) void Transport::AddPassenger(WorldObject* passenger) { if (_passengers.insert(passenger).second) + { TC_LOG_DEBUG(LOG_FILTER_TRANSPORTS, "Object %s boarded transport %s.", passenger->GetName().c_str(), GetName().c_str()); - if (Player* plr = passenger->ToPlayer()) - sScriptMgr->OnAddPassenger(this, plr); + if (Player* plr = passenger->ToPlayer()) + sScriptMgr->OnAddPassenger(this, plr); + } } void Transport::RemovePassenger(WorldObject* passenger) { if (_passengers.erase(passenger) || _staticPassengers.erase(passenger)) // static passenger can remove itself in case of grid unload + { TC_LOG_DEBUG(LOG_FILTER_TRANSPORTS, "Object %s removed from transport %s.", passenger->GetName().c_str(), GetName().c_str()); - - if (Player* plr = passenger->ToPlayer()) - sScriptMgr->OnRemovePassenger(this, plr); + if (Player* plr = passenger->ToPlayer()) + sScriptMgr->OnRemovePassenger(this, plr); + } } Creature* Transport::CreateNPCPassenger(uint32 guid, CreatureData const* data) @@ -240,9 +244,13 @@ Creature* Transport::CreateNPCPassenger(uint32 guid, CreatureData const* data) return NULL; } - map->AddToMap(creature); - _staticPassengers.insert(creature); + if (!map->AddToMap(creature)) + { + delete creature; + return NULL; + } + _staticPassengers.insert(creature); sScriptMgr->OnAddCreaturePassenger(this, creature); return creature; } @@ -276,10 +284,13 @@ GameObject* Transport::CreateGOPassenger(uint32 guid, GameObjectData const* data return NULL; } - map->AddToMap(go); - _staticPassengers.insert(go); + if (!map->AddToMap(go)) + { + delete go; + return NULL; + } - //sScriptMgr->OnAddCreaturePassenger(this, go); + _staticPassengers.insert(go); return go; } -- cgit v1.2.3