aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Pet
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2017-07-01 20:18:02 +0200
committerShauren <shauren.trinity@gmail.com>2017-07-01 20:18:02 +0200
commite2a1ccd118d129b96e09ff1a15ed0adb1d4a3897 (patch)
treebbe6600c4066078bb7c64a117df457dce0d00b26 /src/server/scripts/Pet
parent5879eb2198fdb976b9fff136757bf8187adb6cf0 (diff)
[3.3.5] Combat/Threat rewrite - prep & refactor (#19966)
* Combat/Threat rewrite (PR #19930) prep work. Mostly refactors, and a compatibility layer on ThreatManager/HostileReference that allows scripts to be changed already.
Diffstat (limited to 'src/server/scripts/Pet')
-rw-r--r--src/server/scripts/Pet/pet_hunter.cpp2
-rw-r--r--src/server/scripts/Pet/pet_mage.cpp45
-rw-r--r--src/server/scripts/Pet/pet_priest.cpp2
3 files changed, 9 insertions, 40 deletions
diff --git a/src/server/scripts/Pet/pet_hunter.cpp b/src/server/scripts/Pet/pet_hunter.cpp
index b68511ea7f5..20dcf5fb5d7 100644
--- a/src/server/scripts/Pet/pet_hunter.cpp
+++ b/src/server/scripts/Pet/pet_hunter.cpp
@@ -239,7 +239,7 @@ class spell_pet_guard_dog : public SpellScriptLoader
caster->CastSpell((Unit*)nullptr, SPELL_PET_GUARD_DOG_HAPPINESS, true, nullptr, aurEff);
float addThreat = CalculatePct(ASSERT_NOTNULL(eventInfo.GetSpellInfo())->Effects[EFFECT_0].CalcValue(caster), aurEff->GetAmount());
- eventInfo.GetProcTarget()->AddThreat(caster, addThreat);
+ eventInfo.GetProcTarget()->GetThreatManager().AddThreat(caster, addThreat, GetSpellInfo(), false, true);
}
void Register() override
diff --git a/src/server/scripts/Pet/pet_mage.cpp b/src/server/scripts/Pet/pet_mage.cpp
index b782f550c3b..49c2b418258 100644
--- a/src/server/scripts/Pet/pet_mage.cpp
+++ b/src/server/scripts/Pet/pet_mage.cpp
@@ -82,21 +82,13 @@ class npc_pet_mage_mirror_image : public CreatureScript
continue;
}
// else compare best fit unit with current unit
- ThreatContainer::StorageType triggers = (*iter)->getThreatManager().getThreatList();
- for (ThreatContainer::StorageType::const_iterator trig_citr = triggers.begin(); trig_citr != triggers.end(); ++trig_citr)
+ float threat = (*iter)->GetThreatManager().GetThreat(owner);
+ // Check if best fit hostile unit hs lower threat than this current unit
+ if (highestThreat < threat)
{
- // Try to find threat referenced to owner
- if ((*trig_citr)->getTarget() == owner)
- {
- // Check if best fit hostile unit hs lower threat than this current unit
- if (highestThreat < (*trig_citr)->getThreat())
- {
- // If so, update best fit unit
- highestThreat = (*trig_citr)->getThreat();
- highestThreatUnit = (*iter);
- break;
- }
- }
+ // If so, update best fit unit
+ highestThreat = threat;
+ highestThreatUnit = (*iter);
}
// In case no unit with threat was found so far, always check for nearest unit (only for players)
if ((*iter)->GetTypeId() == TYPEID_PLAYER)
@@ -118,30 +110,7 @@ class npc_pet_mage_mirror_image : public CreatureScript
bool IsInThreatList(Unit* target)
{
Unit* owner = me->GetCharmerOrOwner();
-
- std::list<Unit*> targets;
- Trinity::AnyUnfriendlyUnitInObjectRangeCheck u_check(me, me, 30.0f);
- Trinity::UnitListSearcher<Trinity::AnyUnfriendlyUnitInObjectRangeCheck> searcher(me, targets, u_check);
- Cell::VisitAllObjects(me, searcher, 40.0f);
-
- for (std::list<Unit*>::const_iterator iter = targets.begin(); iter != targets.end(); ++iter)
- {
- if ((*iter) == target)
- {
- // Consider only units without CC
- if (!(*iter)->HasBreakableByDamageCrowdControlAura((*iter)))
- {
- ThreatContainer::StorageType triggers = (*iter)->getThreatManager().getThreatList();
- for (ThreatContainer::StorageType::const_iterator trig_citr = triggers.begin(); trig_citr != triggers.end(); ++trig_citr)
- {
- // Try to find threat referenced to owner
- if ((*trig_citr)->getTarget() == owner)
- return true;
- }
- }
- }
- }
- return false;
+ return owner && target->IsThreatenedBy(owner);
}
void InitializeAI() override
diff --git a/src/server/scripts/Pet/pet_priest.cpp b/src/server/scripts/Pet/pet_priest.cpp
index 09dc6c07439..02db0a5c1bd 100644
--- a/src/server/scripts/Pet/pet_priest.cpp
+++ b/src/server/scripts/Pet/pet_priest.cpp
@@ -49,7 +49,7 @@ class npc_pet_pri_lightwell : public CreatureScript
if (!me->IsAlive())
return;
- me->DeleteThreatList();
+ me->GetThreatManager().ClearAllThreat();
me->CombatStop(true);
me->ResetPlayerDamageReq();
}