Core/Transports: Fixed crashes when instance with transports unloads

Closes #11056
This commit is contained in:
Shauren
2013-10-18 21:17:58 +02:00
parent e21eef5c4a
commit 5259539a5f
4 changed files with 25 additions and 2 deletions

View File

@@ -58,8 +58,17 @@ BattlegroundIC::BattlegroundIC()
BattlegroundIC::~BattlegroundIC()
{
delete gunshipHorde;
delete gunshipAlliance;
if (gunshipHorde)
{
gunshipHorde->RemoveFromWorld();
delete gunshipHorde;
}
if (gunshipAlliance)
{
gunshipAlliance->RemoveFromWorld();
delete gunshipAlliance;
}
}
void BattlegroundIC::HandlePlayerResurrect(Player* player)

View File

@@ -39,6 +39,7 @@ Transport::Transport() : GameObject(),
Transport::~Transport()
{
UnloadStaticPassengers();
}
bool Transport::Create(uint32 guidlow, uint32 entry, uint32 mapid, float x, float y, float z, float ang, uint32 animprogress)

View File

@@ -67,6 +67,8 @@ class Transport : public GameObject, public TransportBase
void EnableMovement(bool enabled);
TransportTemplate const* GetTransportTemplate() const { return _transportInfo; }
private:
void MoveToNextWaypoint();
float CalculateSegmentPos(float perc);

View File

@@ -63,6 +63,17 @@ Map::~Map()
obj->ResetMap();
}
for (TransportsContainer::iterator itr = _transports.begin(); itr != _transports.end(); ++itr)
{
Transport* transport = *itr;
// Destroy local transports
if (transport->GetTransportTemplate()->inInstance)
{
transport->RemoveFromWorld();
delete transport;
}
}
if (!m_scriptSchedule.empty())
sScriptMgr->DecreaseScheduledScriptCount(m_scriptSchedule.size());