diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index eff235c4e..3544fb2d1 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -452,10 +452,8 @@ Player::~Player() if (!m_isInSharedVisionOf.empty()) { - LOG_INFO("misc", "Player::~Player (A1)"); do { - LOG_INFO("misc", "Player::~Player (A2)"); Unit* u = *(m_isInSharedVisionOf.begin()); u->RemovePlayerFromVision(this); } while (!m_isInSharedVisionOf.empty()); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 86ae9e131..60b8a08e3 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -358,6 +358,17 @@ Unit::~Unit() ASSERT(!m_attacking); ASSERT(m_attackers.empty()); + // pussywizard: clear m_sharedVision along with back references + if (!m_sharedVision.empty()) + { + do + { + Player* p = *(m_sharedVision.begin()); + p->m_isInSharedVisionOf.erase(this); + m_sharedVision.remove(p); + } while (!m_sharedVision.empty()); + } + ASSERT(m_Controlled.empty()); ASSERT(m_appliedAuras.empty()); ASSERT(m_ownedAuras.empty()); @@ -10710,12 +10721,14 @@ void Unit::AddPlayerToVision(Player* player) SetWorldObject(true); } m_sharedVision.push_back(player); + player->m_isInSharedVisionOf.insert(this); } // only called in Player::SetSeer void Unit::RemovePlayerFromVision(Player* player) { m_sharedVision.remove(player); + player->m_isInSharedVisionOf.erase(this); if (m_sharedVision.empty()) { setActive(false);