aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2018-08-27 19:08:17 +0200
committerTreeston <treeston.mmoc@gmail.com>2018-08-27 19:08:17 +0200
commit5cea572a9ad524c6f28ff8519bee61d1ff4357d0 (patch)
tree205f2d2e7ffef3b151f2befc6e29c56035839d8f /src/server/game/Entities
parentce06767ef50e4eca7b9ff834a873f99e6ad381d5 (diff)
Core/Threat: Threat system adjustments:
* Online states are now re-evaluated before victim update instead of continuously. Closes #22226. Tagging #21501. * Victim update now happens every 1s as opposed to every server tick unless current target goes away. * Suppressed threat is no longer re-established until the victim gains additional threat (by hitting the target, for instance). * Assistance threat is now split between non-controlled units threatened by target, as opposed to all units threatened by target.
Diffstat (limited to 'src/server/game/Entities')
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp5
-rw-r--r--src/server/game/Entities/Player/Player.cpp3
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp22
-rw-r--r--src/server/game/Entities/Unit/Unit.h1
4 files changed, 5 insertions, 26 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 3a0ad84b232..32430e22962 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -622,7 +622,7 @@ bool Creature::UpdateEntry(uint32 entry, CreatureData const* data /*= nullptr*/,
LoadCreaturesAddon();
LoadTemplateImmunities();
- GetThreatManager().UpdateOnlineStates(true, true);
+ GetThreatManager().EvaluateSuppressed();
return true;
}
@@ -752,7 +752,6 @@ void Creature::Update(uint32 diff)
if (diff >= m_boundaryCheckTime)
{
AI()->CheckInRoom();
- GetThreatManager().UpdateOnlineStates(false, true);
m_boundaryCheckTime = 2500;
} else
m_boundaryCheckTime -= diff;
@@ -1099,7 +1098,7 @@ Unit* Creature::SelectVictim()
Unit* target = nullptr;
if (CanHaveThreatList())
- target = GetThreatManager().SelectVictim();
+ target = GetThreatManager().GetCurrentVictim();
else if (!HasReactState(REACT_PASSIVE))
{
// We're a player pet, probably
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 381e0c29618..a1edeac82bb 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -2409,10 +2409,7 @@ void Player::SetGameMaster(bool on)
RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_ALLOW_CHEAT_SPELLS);
if (Pet* pet = GetPet())
- {
pet->SetFaction(GetFaction());
- pet->GetThreatManager().UpdateOnlineStates();
- }
// restore FFA PvP Server state
if (sWorld->IsFFAPvPRealm())
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 215c658808b..dad8003c27b 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -8185,16 +8185,11 @@ void Unit::SetImmuneToAll(bool apply, bool keepCombat)
{
SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
ValidateAttackersAndOwnTarget();
- if (keepCombat)
- m_threatManager.UpdateOnlineStates(true, true);
- else
+ if (!keepCombat)
m_combatManager.EndAllCombat();
}
else
- {
RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
- m_threatManager.UpdateOnlineStates(true, true);
- }
}
void Unit::SetImmuneToPC(bool apply, bool keepCombat)
@@ -8203,9 +8198,7 @@ void Unit::SetImmuneToPC(bool apply, bool keepCombat)
{
SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
ValidateAttackersAndOwnTarget();
- if (keepCombat)
- m_threatManager.UpdateOnlineStates(true, true);
- else
+ if (!keepCombat)
{
std::list<CombatReference*> toEnd;
for (auto const& pair : m_combatManager.GetPvECombatRefs())
@@ -8219,10 +8212,7 @@ void Unit::SetImmuneToPC(bool apply, bool keepCombat)
}
}
else
- {
RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
- m_threatManager.UpdateOnlineStates(true, true);
- }
}
void Unit::SetImmuneToNPC(bool apply, bool keepCombat)
@@ -8231,9 +8221,7 @@ void Unit::SetImmuneToNPC(bool apply, bool keepCombat)
{
SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC);
ValidateAttackersAndOwnTarget();
- if (keepCombat)
- m_threatManager.UpdateOnlineStates(true, true);
- else
+ if (!keepCombat)
{
std::list<CombatReference*> toEnd;
for (auto const& pair : m_combatManager.GetPvECombatRefs())
@@ -8247,10 +8235,7 @@ void Unit::SetImmuneToNPC(bool apply, bool keepCombat)
}
}
else
- {
RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC);
- m_threatManager.UpdateOnlineStates(true, true);
- }
}
bool Unit::IsThreatened() const
@@ -11970,7 +11955,6 @@ void Unit::UpdateObjectVisibility(bool forced)
AddToNotify(NOTIFY_VISIBILITY_CHANGED);
else
{
- m_threatManager.UpdateOnlineStates(true, true);
WorldObject::UpdateObjectVisibility(true);
// call MoveInLineOfSight for nearby creatures
Trinity::AIRelocationNotifier notifier(*this);
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 069e881f24a..fd8482d95a2 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1053,7 +1053,6 @@ class TC_GAME_API Unit : public WorldObject
ThreatManager const& GetThreatManager() const { return m_threatManager; }
void SendClearTarget();
- void SendThreatListUpdate() { m_threatManager.SendThreatListToClients(); }
bool HasAuraTypeWithFamilyFlags(AuraType auraType, uint32 familyName, uint32 familyFlags) const;
bool virtual HasSpell(uint32 /*spellID*/) const { return false; }