Combat/Threat rewrite - prep & refactor

Port From (https://github.com/TrinityCore/TrinityCore/commit/8be23fcbbdf26e8169defd761e61765f301bebe0)
This commit is contained in:
hondacrx
2020-08-22 11:58:19 -04:00
parent 67bacbb731
commit 193ad3a48d
42 changed files with 533 additions and 421 deletions
+8 -21
View File
@@ -475,7 +475,7 @@ namespace Game.Entities
}
// periodic check to see if the creature has passed an evade boundary
if (IsAIEnabled && !IsInEvadeMode() && IsInCombat())
if (IsAIEnabled && !IsInEvadeMode() && IsEngaged())
{
if (diff >= m_boundaryCheckTime)
{
@@ -487,7 +487,7 @@ namespace Game.Entities
}
// if periodic combat pulse is enabled and we are both in combat and in a dungeon, do this now
if (m_combatPulseDelay > 0 && IsInCombat() && GetMap().IsDungeon())
if (m_combatPulseDelay > 0 && IsEngaged() && GetMap().IsDungeon())
{
if (diff > m_combatPulseTime)
m_combatPulseTime = 0;
@@ -503,12 +503,7 @@ namespace Game.Entities
continue;
if (player.IsAlive() && IsHostileTo(player))
{
if (CanHaveThreatList())
AddThreat(player, 0.0f);
SetInCombatWith(player);
player.SetInCombatWith(this);
}
EngageWithTarget(player);
}
m_combatPulseTime = m_combatPulseDelay * Time.InMilliseconds;
}
@@ -1484,7 +1479,7 @@ namespace Game.Entities
if (!_IsTargetAcceptable(who))
return false;
if (who.IsInCombat() && IsWithinDist(who, SharedConst.AttackDistance))
if (who.IsEngaged() && IsWithinDist(who, SharedConst.AttackDistance))
{
Unit victim = who.GetAttackerForHelper();
if (victim != null)
@@ -2022,7 +2017,7 @@ namespace Game.Entities
return false;
// skip fighting creature
if (IsInCombat())
if (IsEngaged())
return false;
// only free creature
@@ -2067,7 +2062,7 @@ namespace Game.Entities
Unit targetVictim = target.GetAttackerForHelper();
// if I'm already fighting target, or I'm hostile towards the target, the target is acceptable
if (IsInCombatWith(target) || IsHostileTo(target))
if (IsEngagedBy(target) || IsHostileTo(target))
return true;
// if the target's victim is friendly, and the target is neutral, the target is acceptable
@@ -2256,7 +2251,6 @@ namespace Game.Entities
}
var PlList = map.GetPlayers();
if (PlList.Empty())
return;
@@ -2266,12 +2260,7 @@ namespace Game.Entities
continue;
if (player.IsAlive())
{
SetInCombatWith(player);
player.SetInCombatWith(this);
AddThreat(player, 0.0f);
}
EngageWithTarget(player);
}
}
@@ -3270,9 +3259,7 @@ namespace Game.Entities
if (assistant != null && assistant.CanAssistTo(m_owner, victim))
{
assistant.SetNoCallAssistance(true);
assistant.CombatStart(victim);
if (assistant.IsAIEnabled)
assistant.GetAI().AttackStart(victim);
assistant.EngageWithTarget(victim);
}
}
}
@@ -170,7 +170,7 @@ namespace Game.Entities
member.SetFormation(null);
}
public void MemberAttackStart(Creature member, Unit target)
public void MemberEngagingTarget(Creature member, Unit target)
{
GroupAIFlags groupAI = (GroupAIFlags)FormationMgr.CreatureGroupMap[member.GetSpawnId()].groupAI;
if (groupAI == 0)
@@ -186,9 +186,6 @@ namespace Game.Entities
foreach (var pair in m_members)
{
if (m_leader) // avoid crash if leader was killed and reset.
Log.outDebug(LogFilter.Unit, "GROUP ATTACK: group instance id {0} calls member instid {1}", m_leader.GetInstanceId(), member.GetInstanceId());
Creature other = pair.Key;
// Skip self
@@ -198,11 +195,8 @@ namespace Game.Entities
if (!other.IsAlive())
continue;
if (other.GetVictim())
continue;
if (((other != m_leader && groupAI.HasAnyFlag(GroupAIFlags.MembersAssistLeader)) || (other == m_leader && groupAI.HasAnyFlag(GroupAIFlags.LeaderAssistsMember))) && other.IsValidAttackTarget(target))
other.GetAI().AttackStart(target);
other.EngageWithTarget(target);
}
}