diff options
author | Treeston <treeston.mmoc@gmail.com> | 2018-01-06 01:40:31 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-05-16 21:56:05 +0200 |
commit | dce39aedc242ecb6e4b1b8dbf8510389dbeecfd2 (patch) | |
tree | 3c8ae5127e5bdf430d6960ed1ad1f15a58f08033 /src/server | |
parent | 2a7bb9b4044bbd9f841c5e87a8a910fe4205d4d4 (diff) |
Core/Combat: Some more sanity check asserts to try and track down #21187.
Also, some anti-annoyance treatment for dot tele.
(cherry picked from commit fdacf127395965b426185f05a7b1351138775e89)
Diffstat (limited to 'src/server')
-rw-r--r-- | src/server/game/Combat/CombatManager.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Combat/CombatManager.h | 1 | ||||
-rw-r--r-- | src/server/game/Combat/ThreatManager.cpp | 7 | ||||
-rw-r--r-- | src/server/game/Combat/ThreatManager.h | 1 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 1 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_tele.cpp | 3 |
6 files changed, 16 insertions, 3 deletions
diff --git a/src/server/game/Combat/CombatManager.cpp b/src/server/game/Combat/CombatManager.cpp index 3e3dde0c184..f2186d7fa8a 100644 --- a/src/server/game/Combat/CombatManager.cpp +++ b/src/server/game/Combat/CombatManager.cpp @@ -125,6 +125,12 @@ void PvPCombatReference::SuppressFor(Unit* who) who->GetAI()->JustExitedCombat(); } +CombatManager::~CombatManager() +{ + ASSERT(_pveRefs.empty(), "CombatManager::~CombatManager - %s: we still have %zu PvE combat references, one of them is with %s", _owner->GetGUID().ToString().c_str(), _pveRefs.size(), _pveRefs.begin()->first.ToString().c_str()); + ASSERT(_pvpRefs.empty(), "CombatManager::~CombatManager - %s: we still have %zu PvP combat references, one of them is with %s", _owner->GetGUID().ToString().c_str(), _pvpRefs.size(), _pvpRefs.begin()->first.ToString().c_str()); +} + void CombatManager::Update(uint32 tdiff) { auto it = _pvpRefs.begin(), end = _pvpRefs.end(); diff --git a/src/server/game/Combat/CombatManager.h b/src/server/game/Combat/CombatManager.h index 2b8e95ad220..85cb3b5e7f8 100644 --- a/src/server/game/Combat/CombatManager.h +++ b/src/server/game/Combat/CombatManager.h @@ -100,6 +100,7 @@ class TC_GAME_API CombatManager static bool CanBeginCombat(Unit const* a, Unit const* b); CombatManager(Unit* owner) : _owner(owner) { } + ~CombatManager(); void Update(uint32 tdiff); // called from Unit::Update Unit* GetOwner() const { return _owner; } diff --git a/src/server/game/Combat/ThreatManager.cpp b/src/server/game/Combat/ThreatManager.cpp index 643020d0c56..2592843a3b4 100644 --- a/src/server/game/Combat/ThreatManager.cpp +++ b/src/server/game/Combat/ThreatManager.cpp @@ -159,6 +159,13 @@ ThreatManager::ThreatManager(Unit* owner) : _owner(owner), _ownerCanHaveThreatLi _singleSchoolModifiers[i] = 1.0f; } +ThreatManager::~ThreatManager() +{ + ASSERT(_myThreatListEntries.empty(), "ThreatManager::~ThreatManager - %s: we still have %zu things threatening us, one of them is %s.", _owner->GetGUID().ToString().c_str(), _myThreatListEntries.size(), _myThreatListEntries.begin()->first.ToString().c_str()); + ASSERT(_sortedThreatList.empty(), "ThreatManager::~ThreatManager - %s: we still have %zu things threatening us, one of them is %s.", _owner->GetGUID().ToString().c_str(), _sortedThreatList.size(), (*_sortedThreatList.begin())->GetVictim()->GetGUID().ToString().c_str()); + ASSERT(_threatenedByMe.empty(), "ThreatManager::~ThreatManager - %s: we are still threatening %zu things, one of them is %s.", _owner->GetGUID().ToString().c_str(), _threatenedByMe.size(), _threatenedByMe.begin()->first.ToString().c_str()); +} + void ThreatManager::Initialize() { _ownerCanHaveThreatList = ThreatManager::CanHaveThreatList(_owner); diff --git a/src/server/game/Combat/ThreatManager.h b/src/server/game/Combat/ThreatManager.h index 486db4d7e13..17256403941 100644 --- a/src/server/game/Combat/ThreatManager.h +++ b/src/server/game/Combat/ThreatManager.h @@ -89,6 +89,7 @@ class TC_GAME_API ThreatManager static bool CanHaveThreatList(Unit const* who); ThreatManager(Unit* owner); + ~ThreatManager(); // called from ::Create methods just after construction (once all fields on owner have been populated) // should not be called from anywhere else void Initialize(); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index ba8ce866e7f..95d007aa834 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -9968,7 +9968,6 @@ void Unit::CleanupBeforeRemoveFromMap(bool finalCleanup) m_Events.KillAllEvents(false); // non-delatable (currently cast spells) will not deleted now but it will deleted at call in Map::RemoveAllObjectsInRemoveList CombatStop(); - GetThreatManager().ClearAllThreat(); } void Unit::CleanupsBeforeDelete(bool finalCleanup) diff --git a/src/server/scripts/Commands/cs_tele.cpp b/src/server/scripts/Commands/cs_tele.cpp index 41fcd95647b..93b55b5d1ef 100644 --- a/src/server/scripts/Commands/cs_tele.cpp +++ b/src/server/scripts/Commands/cs_tele.cpp @@ -307,7 +307,6 @@ public: // id, or string, or [name] Shift-click form |color|Htele:id|h[name]|h|r GameTele const* tele = handler->extractGameTeleFromLink((char*)args); - if (!tele) { handler->SendSysMessage(LANG_COMMAND_TELE_NOTFOUND); @@ -315,7 +314,7 @@ public: return false; } - if (me->IsInCombat()) + if (me->IsInCombat() && !handler->GetSession()->HasPermission(rbac::RBAC_PERM_COMMAND_TELE_NAME)) { handler->SendSysMessage(LANG_YOU_IN_COMBAT); handler->SetSentErrorMessage(true); |