Core/Threat: Prevent bosses (and other stuff using DoZoneInCombat) from switching off of the person pulling if they are pulled without generating threat.

(cherry picked from commit b5b7ce44cfeb98bf47eb6c9e0c926994ad53ede8)
This commit is contained in:
treeston
2016-04-08 20:38:22 +02:00
committed by Shauren
parent 8046d5a94f
commit 4726116dbc
3 changed files with 8 additions and 2 deletions
+3
View File
@@ -134,7 +134,10 @@ void CreatureAI::MoveInLineOfSight(Unit* who)
return;
if (me->HasReactState(REACT_AGGRESSIVE) && me->CanStartAttack(who, false))
{
me->AddThreat(who, 0.0f); // ensure our initial target is the first thing added to threat list so we don't randomly switch off if DoZoneInCombat is called during the EnterCombat hook
AttackStart(who);
}
//else if (who->GetVictim() && me->IsFriendlyTo(who)
// && me->IsWithinDistInMap(who, sWorld->getIntConfig(CONFIG_CREATURE_FAMILY_ASSISTANCE_RADIUS))
// && me->CanStartAttack(who->GetVictim(), true)) /// @todo if we use true, it will not attack it when it arrives
+4 -1
View File
@@ -336,7 +336,7 @@ HostileReference* ThreatContainer::selectNextVictim(Creature* attacker, HostileR
{
// current victim is a second choice target, so don't compare threat with it below
if (currentRef == currentVictim)
currentVictim = NULL;
currentVictim = nullptr;
++iter;
continue;
}
@@ -438,12 +438,15 @@ void ThreatManager::_addThreat(Unit* victim, float threat)
if (!ref) // there was no ref => create a new one
{
bool isFirst = iThreatContainer.empty();
// threat has to be 0 here
HostileReference* hostileRef = new HostileReference(victim, this, 0);
iThreatContainer.addReference(hostileRef);
hostileRef->addThreat(threat); // now we add the real threat
if (victim->GetTypeId() == TYPEID_PLAYER && victim->ToPlayer()->IsGameMaster())
hostileRef->setOnlineOfflineState(false); // GM is always offline
else if (isFirst)
setCurrentVictim(hostileRef);
}
}
+1 -1
View File
@@ -169,7 +169,7 @@ class TC_GAME_API ThreatContainer
HostileReference* getMostHated() const
{
return iThreatList.empty() ? NULL : iThreatList.front();
return iThreatList.empty() ? nullptr : iThreatList.front();
}
HostileReference* getReferenceByTarget(Unit* victim) const;