Core/Creatures: Allow flagging creatures to not clear their tap list when evading

Port From (https://github.com/TrinityCore/TrinityCore/commit/6e309ed17ff448b971f206c7ea7174c736230299)
This commit is contained in:
hondacrx
2023-03-23 07:04:20 -04:00
parent bd437fc87a
commit 5d0d9822e8
5 changed files with 21 additions and 3 deletions
+4 -1
View File
@@ -294,7 +294,10 @@ namespace Game.AI
// sometimes bosses stuck in combat? // sometimes bosses stuck in combat?
me.CombatStop(true); me.CombatStop(true);
me.SetTappedBy(null);
if (!me.IsTapListNotClearedOnEvade())
me.SetTappedBy(null);
me.ResetPlayerDamageReq(); me.ResetPlayerDamageReq();
me.SetLastDamagedTime(0); me.SetLastDamagedTime(0);
me.SetCannotReachTarget(false); me.SetCannotReachTarget(false);
+4 -1
View File
@@ -197,7 +197,10 @@ namespace Game.AI
if (reset) if (reset)
{ {
who.LoadCreaturesAddon(); who.LoadCreaturesAddon();
who.SetTappedBy(null);
if (!me.IsTapListNotClearedOnEvade())
who.SetTappedBy(null);
who.ResetPlayerDamageReq(); who.ResetPlayerDamageReq();
who.SetLastDamagedTime(0); who.SetLastDamagedTime(0);
who.SetCannotReachTarget(false); who.SetCannotReachTarget(false);
@@ -121,7 +121,9 @@ namespace Game.AI
{ {
me.RemoveAllAuras(); me.RemoveAllAuras();
me.CombatStop(true); me.CombatStop(true);
me.SetTappedBy(null);
if (!me.IsTapListNotClearedOnEvade())
me.SetTappedBy(null);
EngagementOver(); EngagementOver();
@@ -87,6 +87,7 @@ namespace Game.Entities
internal Dictionary<ObjectGuid, Loot> m_personalLoot = new(); internal Dictionary<ObjectGuid, Loot> m_personalLoot = new();
public Loot _loot; public Loot _loot;
HashSet<ObjectGuid> m_tapList = new(); HashSet<ObjectGuid> m_tapList = new();
bool m_dontClearTapListOnEvade;
} }
public enum ObjectCellMoveState public enum ObjectCellMoveState
@@ -1205,6 +1205,15 @@ namespace Game.Entities
{ {
_lootId = lootId; _lootId = lootId;
} }
public void SetDontClearTapListOnEvade(bool dontClear)
{
// only temporary summons are allowed to not clear their tap list
if (m_spawnId == 0)
m_dontClearTapListOnEvade = dontClear;
}
public bool IsTapListNotClearedOnEvade() { return m_dontClearTapListOnEvade; }
public void SetTappedBy(Unit unit, bool withGroup = true) public void SetTappedBy(Unit unit, bool withGroup = true)
{ {