diff options
| author | Treeston <treeston.mmoc@gmail.com> | 2018-08-27 19:08:17 +0200 |
|---|---|---|
| committer | Treeston <treeston.mmoc@gmail.com> | 2018-08-27 19:08:17 +0200 |
| commit | 5cea572a9ad524c6f28ff8519bee61d1ff4357d0 (patch) | |
| tree | 205f2d2e7ffef3b151f2befc6e29c56035839d8f /src/server/game/Entities | |
| parent | ce06767ef50e4eca7b9ff834a873f99e6ad381d5 (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.cpp | 5 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 3 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 22 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 1 |
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; } |
