aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/include/sc_creature.cpp6
-rw-r--r--src/bindings/scripts/scripts/creature/mob_generic_creature.cpp12
-rw-r--r--src/bindings/scripts/scripts/guard/guard_ai.cpp4
-rw-r--r--src/bindings/scripts/scripts/npc/npc_escortAI.cpp2
-rw-r--r--src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_murmur.cpp2
-rw-r--r--src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp2
-rw-r--r--src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp2
-rw-r--r--src/bindings/scripts/scripts/zone/gruuls_lair/boss_gruul.cpp2
-rw-r--r--src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/boss_omor_the_unscarred.cpp2
-rw-r--r--src/bindings/scripts/scripts/zone/karazhan/boss_prince_malchezaar.cpp2
-rw-r--r--src/bindings/scripts/scripts/zone/molten_core/boss_ragnaros.cpp2
-rw-r--r--src/bindings/scripts/scripts/zone/naxxramas/boss_sapphiron.cpp2
-rw-r--r--src/bindings/scripts/scripts/zone/sunwell_plateau/boss_eredar_twins.cpp4
-rw-r--r--src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_alar.cpp2
-rw-r--r--src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_cthun.cpp4
-rw-r--r--src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_skeram.cpp2
-rw-r--r--src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_twinemperors.cpp57
-rw-r--r--src/bindings/scripts/scripts/zone/zulaman/boss_zuljin.cpp8
-rw-r--r--src/bindings/scripts/scripts/zone/zulgurub/boss_mandokir.cpp4
-rw-r--r--src/bindings/scripts/scripts/zone/zulgurub/boss_thekal.cpp4
-rw-r--r--src/bindings/scripts/scripts/zone/zulgurub/boss_venoxis.cpp2
-rw-r--r--src/game/AggressorAI.cpp2
-rw-r--r--src/game/GuardAI.cpp2
-rw-r--r--src/game/Object.h4
-rw-r--r--src/game/PetAI.cpp6
-rw-r--r--src/game/Player.cpp6
-rw-r--r--src/game/PossessedAI.cpp2
-rw-r--r--src/game/ReactorAI.cpp2
-rw-r--r--src/game/Spell.cpp35
-rw-r--r--src/game/TargetedMovementGenerator.cpp4
-rw-r--r--src/game/ThreatManager.cpp2
-rw-r--r--src/game/Unit.cpp23
-rw-r--r--src/game/Unit.h8
-rw-r--r--src/game/World.cpp6
34 files changed, 92 insertions, 137 deletions
diff --git a/src/bindings/scripts/include/sc_creature.cpp b/src/bindings/scripts/include/sc_creature.cpp
index 6061c15ec1b..a3c185391cc 100644
--- a/src/bindings/scripts/include/sc_creature.cpp
+++ b/src/bindings/scripts/include/sc_creature.cpp
@@ -130,7 +130,7 @@ void ScriptedAI::UpdateAI(const uint32 diff)
if (m_creature->isAttackReady() )
{
//If we are within range melee the target
- if (m_creature->IsWithinCombatDist(m_creature->getVictim(), ATTACK_DISTANCE))
+ if (m_creature->IsWithinMeleeRange(m_creature->getVictim()))
{
m_creature->AttackerStateUpdate(m_creature->getVictim());
m_creature->resetAttackTimer();
@@ -193,7 +193,7 @@ void ScriptedAI::DoMeleeAttackIfReady()
if (m_creature->isAttackReady() && !m_creature->hasUnitState(UNIT_STAT_CASTING))
{
//If we are within range melee the target
- if (m_creature->IsWithinCombatDist(m_creature->getVictim(), ATTACK_DISTANCE))
+ if (m_creature->IsWithinMeleeRange(m_creature->getVictim()))
{
m_creature->AttackerStateUpdate(m_creature->getVictim());
m_creature->resetAttackTimer();
@@ -202,7 +202,7 @@ void ScriptedAI::DoMeleeAttackIfReady()
if (m_creature->haveOffhandWeapon() && m_creature->isAttackReady(OFF_ATTACK) && !m_creature->hasUnitState(UNIT_STAT_CASTING))
{
//If we are within range melee the target
- if (m_creature->IsWithinCombatDist(m_creature->getVictim(), ATTACK_DISTANCE))
+ if (m_creature->IsWithinMeleeRange(m_creature->getVictim()))
{
m_creature->AttackerStateUpdate(m_creature->getVictim(), OFF_ATTACK);
m_creature->resetAttackTimer(OFF_ATTACK);
diff --git a/src/bindings/scripts/scripts/creature/mob_generic_creature.cpp b/src/bindings/scripts/scripts/creature/mob_generic_creature.cpp
index 02e34a8fa1e..1110038f315 100644
--- a/src/bindings/scripts/scripts/creature/mob_generic_creature.cpp
+++ b/src/bindings/scripts/scripts/creature/mob_generic_creature.cpp
@@ -42,10 +42,10 @@ struct TRINITY_DLL_DECL generic_creatureAI : public ScriptedAI
void Aggro(Unit *who)
{
- if (!m_creature->IsWithinCombatDist(who, ATTACK_DISTANCE))
- {
- IsSelfRooted = true;
- }
+ if (!m_creature->IsWithinMeleeRange(who))
+ {
+ IsSelfRooted = true;
+ }
}
void UpdateAI(const uint32 diff)
@@ -81,7 +81,7 @@ struct TRINITY_DLL_DECL generic_creatureAI : public ScriptedAI
return;
//If we are within range melee the target
- if( m_creature->IsWithinCombatDist(m_creature->getVictim(), ATTACK_DISTANCE))
+ if( m_creature->IsWithinMeleeRange(m_creature->getVictim()))
{
//Make sure our attack is ready and we arn't currently casting
if( m_creature->isAttackReady() && !m_creature->IsNonMeleeSpellCasted(false))
@@ -126,7 +126,7 @@ struct TRINITY_DLL_DECL generic_creatureAI : public ScriptedAI
//No healing spell available, See if we can cast a ranged spell (Range must be greater than ATTACK_DISTANCE)
if (info) Healing = true;
- else info = SelectSpell(m_creature->getVictim(), -1, -1, SELECT_TARGET_ANY_ENEMY, 0, 0, ATTACK_DISTANCE, 0, SELECT_EFFECT_DONTCARE);
+ else info = SelectSpell(m_creature->getVictim(), -1, -1, SELECT_TARGET_ANY_ENEMY, 0, 0, NOMINAL_MELEE_RANGE, 0, SELECT_EFFECT_DONTCARE);
//Found a spell, check if we arn't on cooldown
if (info && !GlobalCooldown)
diff --git a/src/bindings/scripts/scripts/guard/guard_ai.cpp b/src/bindings/scripts/scripts/guard/guard_ai.cpp
index cc7aa1a40cf..d1aa58847f7 100644
--- a/src/bindings/scripts/scripts/guard/guard_ai.cpp
+++ b/src/bindings/scripts/scripts/guard/guard_ai.cpp
@@ -86,7 +86,7 @@ void guardAI::UpdateAI(const uint32 diff)
if( m_creature->isAttackReady() && !m_creature->IsNonMeleeSpellCasted(false))
{
//If we are within range melee the target
- if( m_creature->IsWithinCombatDist(m_creature->getVictim(), ATTACK_DISTANCE))
+ if( m_creature->IsWithinMeleeRange(m_creature->getVictim()))
{
bool Healing = false;
SpellEntry const *info = NULL;
@@ -128,7 +128,7 @@ void guardAI::UpdateAI(const uint32 diff)
//No healing spell available, See if we can cast a ranged spell (Range must be greater than ATTACK_DISTANCE)
if (info) Healing = true;
- else info = SelectSpell(m_creature->getVictim(), -1, -1, SELECT_TARGET_ANY_ENEMY, 0, 0, ATTACK_DISTANCE, 0, SELECT_EFFECT_DONTCARE);
+ else info = SelectSpell(m_creature->getVictim(), -1, -1, SELECT_TARGET_ANY_ENEMY, 0, 0, NOMINAL_MELEE_RANGE, 0, SELECT_EFFECT_DONTCARE);
//Found a spell, check if we arn't on cooldown
if (info && !GlobalCooldown)
diff --git a/src/bindings/scripts/scripts/npc/npc_escortAI.cpp b/src/bindings/scripts/scripts/npc/npc_escortAI.cpp
index a616fa809c7..4c34c45370f 100644
--- a/src/bindings/scripts/scripts/npc/npc_escortAI.cpp
+++ b/src/bindings/scripts/scripts/npc/npc_escortAI.cpp
@@ -203,7 +203,7 @@ void npc_escortAI::UpdateAI(const uint32 diff)
if( m_creature->isAlive() && m_creature->SelectHostilTarget() && m_creature->getVictim())
{
//If we are within range melee the target
- if( m_creature->IsWithinCombatDist(m_creature->getVictim(), ATTACK_DISTANCE))
+ if( m_creature->IsWithinMeleeRange(m_creature->getVictim()))
{
if( m_creature->isAttackReady() )
{
diff --git a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_murmur.cpp b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_murmur.cpp
index a5c387dc317..1d257cc186d 100644
--- a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_murmur.cpp
+++ b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_murmur.cpp
@@ -100,7 +100,7 @@ struct TRINITY_DLL_DECL boss_murmurAI : public Scripted_NoMovementAI
//Resonance_Timer
if (Resonance_Timer < diff)
{
- if (!m_creature->IsWithinCombatDist(m_creature->getVictim(), ATTACK_DISTANCE))
+ if (!m_creature->IsWithinMeleeRange(m_creature->getVictim()))
DoCast(m_creature->getVictim(), SPELL_RESONANCE);
Resonance_Timer = 5000;
}else Resonance_Timer -= diff;
diff --git a/src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp b/src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp
index dbce8089dd7..272bd0bd2b0 100644
--- a/src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp
+++ b/src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp
@@ -1741,7 +1741,7 @@ struct TRINITY_DLL_DECL mob_parasitic_shadowfiendAI : public ScriptedAI
void DoMeleeAttackIfReady()
{
- if( m_creature->isAttackReady() && m_creature->IsWithinCombatDist(m_creature->getVictim(), ATTACK_DISTANCE))
+ if( m_creature->isAttackReady() && m_creature->IsWithinMeleeRange(m_creature->getVictim()))
{
if(!m_creature->getVictim()->HasAura(SPELL_PARASITIC_SHADOWFIEND, 0) && !m_creature->getVictim()->HasAura(SPELL_PARASITIC_SHADOWFIEND2, 0))
{
diff --git a/src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp b/src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp
index 640977d0eb9..f0ac118f66d 100644
--- a/src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp
+++ b/src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp
@@ -129,7 +129,7 @@ struct TRINITY_DLL_DECL boss_supremusAI : public ScriptedAI
for (i = m_threatlist.begin(); i!= m_threatlist.end();++i)
{
Unit* pUnit = Unit::GetUnit((*m_creature), (*i)->getUnitGuid());
- if(pUnit && m_creature->IsWithinCombatDist(pUnit, ATTACK_DISTANCE))
+ if(pUnit && m_creature->IsWithinMeleeRange(pUnit))
{
if(pUnit->GetHealth() > health)
{
diff --git a/src/bindings/scripts/scripts/zone/gruuls_lair/boss_gruul.cpp b/src/bindings/scripts/scripts/zone/gruuls_lair/boss_gruul.cpp
index 1616d75e376..8205ad42261 100644
--- a/src/bindings/scripts/scripts/zone/gruuls_lair/boss_gruul.cpp
+++ b/src/bindings/scripts/scripts/zone/gruuls_lair/boss_gruul.cpp
@@ -243,7 +243,7 @@ struct TRINITY_DLL_DECL boss_gruulAI : public ScriptedAI
Unit* target = NULL;
target = SelectUnit(SELECT_TARGET_TOPAGGRO,1);
- if (target && m_creature->IsWithinCombatDist(m_creature->getVictim(), ATTACK_DISTANCE))
+ if (target && m_creature->IsWithinMeleeRange(m_creature->getVictim()))
DoCast(target,SPELL_HURTFUL_STRIKE);
else
DoCast(m_creature->getVictim(),SPELL_HURTFUL_STRIKE);
diff --git a/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/boss_omor_the_unscarred.cpp b/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/boss_omor_the_unscarred.cpp
index 1d8b1ec2c22..5d235b13d59 100644
--- a/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/boss_omor_the_unscarred.cpp
+++ b/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/boss_omor_the_unscarred.cpp
@@ -146,7 +146,7 @@ struct TRINITY_DLL_DECL boss_omor_the_unscarredAI : public Scripted_NoMovementAI
else if (OrbitalStrike_Timer < diff)
{
Unit* temp = NULL;
- if (m_creature->IsWithinDistInMap(m_creature->getVictim(), ATTACK_DISTANCE))
+ if (m_creature->IsWithinMeleeRange(m_creature->getVictim()))
temp = m_creature->getVictim();
else temp = SelectUnit(SELECT_TARGET_RANDOM,0);
diff --git a/src/bindings/scripts/scripts/zone/karazhan/boss_prince_malchezaar.cpp b/src/bindings/scripts/scripts/zone/karazhan/boss_prince_malchezaar.cpp
index 6d4e75afdb9..1b9ccd570d8 100644
--- a/src/bindings/scripts/scripts/zone/karazhan/boss_prince_malchezaar.cpp
+++ b/src/bindings/scripts/scripts/zone/karazhan/boss_prince_malchezaar.cpp
@@ -612,7 +612,7 @@ struct TRINITY_DLL_DECL boss_malchezaarAI : public ScriptedAI
void DoMeleeAttacksIfReady()
{
- if( m_creature->IsWithinCombatDist(m_creature->getVictim(), ATTACK_DISTANCE) && !m_creature->IsNonMeleeSpellCasted(false))
+ if( m_creature->IsWithinMeleeRange(m_creature->getVictim()) && !m_creature->IsNonMeleeSpellCasted(false))
{
//Check for base attack
if( m_creature->isAttackReady() && m_creature->getVictim() )
diff --git a/src/bindings/scripts/scripts/zone/molten_core/boss_ragnaros.cpp b/src/bindings/scripts/scripts/zone/molten_core/boss_ragnaros.cpp
index d357d9580e9..38149e336c3 100644
--- a/src/bindings/scripts/scripts/zone/molten_core/boss_ragnaros.cpp
+++ b/src/bindings/scripts/scripts/zone/molten_core/boss_ragnaros.cpp
@@ -274,7 +274,7 @@ struct TRINITY_DLL_DECL boss_ragnarosAI : public Scripted_NoMovementAI
}else Submerge_Timer -= diff;
//If we are within range melee the target
- if( m_creature->IsWithinCombatDist(m_creature->getVictim(), ATTACK_DISTANCE))
+ if( m_creature->IsWithinMeleeRange(m_creature->getVictim()))
{
//Make sure our attack is ready and we arn't currently casting
if( m_creature->isAttackReady() && !m_creature->IsNonMeleeSpellCasted(false))
diff --git a/src/bindings/scripts/scripts/zone/naxxramas/boss_sapphiron.cpp b/src/bindings/scripts/scripts/zone/naxxramas/boss_sapphiron.cpp
index 75a2f20db14..b4d7c5e6105 100644
--- a/src/bindings/scripts/scripts/zone/naxxramas/boss_sapphiron.cpp
+++ b/src/bindings/scripts/scripts/zone/naxxramas/boss_sapphiron.cpp
@@ -171,7 +171,7 @@ struct TRINITY_DLL_DECL boss_sapphironAI : public ScriptedAI
}else Beserk_Timer -= diff;
}
- if( phase!=2 && m_creature->getVictim() && m_creature->IsWithinCombatDist(m_creature->getVictim(), ATTACK_DISTANCE))
+ if( phase!=2 && m_creature->getVictim() && m_creature->IsWithinMeleeRange(m_creature->getVictim()))
{
if( m_creature->isAttackReady() )
{
diff --git a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_eredar_twins.cpp b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_eredar_twins.cpp
index 9df47ed30e7..875da760ca1 100644
--- a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_eredar_twins.cpp
+++ b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_eredar_twins.cpp
@@ -326,7 +326,7 @@ struct TRINITY_DLL_DECL boss_sacrolashAI : public ScriptedAI
if( m_creature->isAttackReady() && !m_creature->IsNonMeleeSpellCasted(false))
{
//If we are within range melee the target
- if( m_creature->IsWithinCombatDist(m_creature->getVictim(), ATTACK_DISTANCE))
+ if( m_creature->IsWithinMeleeRange(m_creature->getVictim()))
{
HandleTouchedSpells(m_creature->getVictim(), SPELL_DARK_TOUCHED);
m_creature->AttackerStateUpdate(m_creature->getVictim());
@@ -736,7 +736,7 @@ struct TRINITY_DLL_DECL mob_shadow_imageAI : public ScriptedAI
if(!m_creature->IsNonMeleeSpellCasted(false))
{
//If we are within range melee the target
- if( m_creature->IsWithinCombatDist(m_creature->getVictim(), ATTACK_DISTANCE))
+ if( m_creature->IsWithinMeleeRange(m_creature->getVictim()))
{
DoCast(m_creature->getVictim(),SPELL_DARK_STRIKE);
}
diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_alar.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_alar.cpp
index 138d3d19f99..7192bd947fe 100644
--- a/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_alar.cpp
+++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_alar.cpp
@@ -397,7 +397,7 @@ struct TRINITY_DLL_DECL boss_alarAI : public ScriptedAI
{
if(m_creature->isAttackReady() && !m_creature->IsNonMeleeSpellCasted(false))
{
- if(m_creature->IsWithinCombatDist(m_creature->getVictim(), ATTACK_DISTANCE))
+ if(m_creature->IsWithinMeleeRange(m_creature->getVictim()))
{
m_creature->AttackerStateUpdate(m_creature->getVictim());
m_creature->resetAttackTimer();
diff --git a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_cthun.cpp b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_cthun.cpp
index d1dfbf8d79e..c1124116401 100644
--- a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_cthun.cpp
+++ b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_cthun.cpp
@@ -1036,7 +1036,7 @@ struct TRINITY_DLL_DECL claw_tentacleAI : public Scripted_NoMovementAI
return;
//EvadeTimer
- if (m_creature->GetDistance(m_creature->getVictim()) > ATTACK_DISTANCE)
+ if (!m_creature->IsWithinMeleeRange(m_creature->getVictim()))
if (EvadeTimer < diff)
{
Unit* p = Unit::GetUnit(*m_creature, Portal);
@@ -1133,7 +1133,7 @@ struct TRINITY_DLL_DECL giant_claw_tentacleAI : public Scripted_NoMovementAI
return;
//EvadeTimer
- if (m_creature->GetDistance(m_creature->getVictim()) > ATTACK_DISTANCE)
+ if (!m_creature->IsWithinMeleeRange(m_creature->getVictim()))
if (EvadeTimer < diff)
{
Unit* p = Unit::GetUnit(*m_creature, Portal);
diff --git a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_skeram.cpp b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_skeram.cpp
index 9194354ddc0..69af7e1db80 100644
--- a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_skeram.cpp
+++ b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_skeram.cpp
@@ -148,7 +148,7 @@ struct TRINITY_DLL_DECL boss_skeramAI : public ScriptedAI
}else ArcaneExplosion_Timer -= diff;
//If we are within range melee the target
- if( m_creature->IsWithinCombatDist(m_creature->getVictim(), ATTACK_DISTANCE))
+ if( m_creature->IsWithinMeleeRange(m_creature->getVictim()))
{
//Make sure our attack is ready and we arn't currently casting
if( m_creature->isAttackReady() && !m_creature->IsNonMeleeSpellCasted(false))
diff --git a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_twinemperors.cpp b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_twinemperors.cpp
index b9b37991629..3a336bfa781 100644
--- a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_twinemperors.cpp
+++ b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_twinemperors.cpp
@@ -206,55 +206,6 @@ struct TRINITY_DLL_DECL boss_twinemperorsAI : public ScriptedAI
} else Heal_Timer -= diff;
}
- Unit *GetAnyoneCloseEnough(float dist, bool totallyRandom)
- {
- int cnt = 0;
- std::list<HostilReference*>::iterator i;
- std::list<HostilReference*> candidates;
-
- for (i = m_creature->getThreatManager().getThreatList().begin();i != m_creature->getThreatManager().getThreatList().end(); ++i)
- {
- Unit* pUnit = Unit::GetUnit((*m_creature), (*i)->getUnitGuid());
- if (m_creature->IsWithinDistInMap(pUnit, dist))
- {
- if (!totallyRandom)
- return pUnit;
- candidates.push_back((*i));
- cnt ++;
- }
- }
- if (!cnt)
- return NULL;
- for (int randomi = rand() % cnt; randomi > 0; randomi --)
- candidates.pop_front();
-
- i = candidates.begin();
- Unit *ret = Unit::GetUnit((*m_creature), (*i)->getUnitGuid());
- candidates.clear();
- return ret;
- }
-
- Unit *PickNearestPlayer()
- {
- Unit *nearp = NULL;
- float neardist = 0.0f;
- std::list<HostilReference*>::iterator i;
- for (i = m_creature->getThreatManager().getThreatList().begin();i != m_creature->getThreatManager().getThreatList().end(); ++i)
- {
- Unit* pUnit = NULL;
- pUnit = Unit::GetUnit((*m_creature), (*i)->getUnitGuid());
- if (!pUnit)
- continue;
- float pudist = pUnit->GetDistance((const Creature *)m_creature);
- if (!nearp || (neardist > pudist))
- {
- nearp = pUnit;
- neardist = pudist;
- }
- }
- return nearp;
- }
-
void TeleportToMyBrother()
{
if (!pInstance)
@@ -313,7 +264,7 @@ struct TRINITY_DLL_DECL boss_twinemperorsAI : public ScriptedAI
{
AfterTeleport = false;
m_creature->clearUnitState(UNIT_STAT_STUNNED);
- Unit *nearu = PickNearestPlayer();
+ Unit *nearu = m_creature->SelectNearestTarget(100);
//DoYell(nearu->GetName(), LANG_UNIVERSAL, 0);
AttackStart(nearu);
m_creature->getThreatManager().addThreat(nearu, 10000);
@@ -520,7 +471,7 @@ struct TRINITY_DLL_DECL boss_veknilashAI : public boss_twinemperorsAI
if (UpperCut_Timer < diff)
{
- Unit* randomMelee = GetAnyoneCloseEnough(ATTACK_DISTANCE, true);
+ Unit* randomMelee = SelectUnit(SELECT_TARGET_RANDOM, 0, NOMINAL_MELEE_RANGE, true);
if (randomMelee)
DoCast(randomMelee,SPELL_UPPERCUT);
UpperCut_Timer = 15000+rand()%15000;
@@ -616,7 +567,7 @@ struct TRINITY_DLL_DECL boss_veklorAI : public boss_twinemperorsAI
if (Blizzard_Timer < diff)
{
Unit* target = NULL;
- target = GetAnyoneCloseEnough(45, true);
+ target = SelectUnit(SELECT_TARGET_RANDOM, 0, 45, true);
if (target)
DoCast(target,SPELL_BLIZZARD);
Blizzard_Timer = 15000+rand()%15000;
@@ -625,7 +576,7 @@ struct TRINITY_DLL_DECL boss_veklorAI : public boss_twinemperorsAI
if (ArcaneBurst_Timer < diff)
{
Unit *mvic;
- if ((mvic=GetAnyoneCloseEnough(ATTACK_DISTANCE, false))!=NULL)
+ if ((mvic=SelectUnit(SELECT_TARGET_NEAREST, 0, NOMINAL_MELEE_RANGE, true))!=NULL)
{
DoCast(mvic,SPELL_ARCANEBURST);
ArcaneBurst_Timer = 5000;
diff --git a/src/bindings/scripts/scripts/zone/zulaman/boss_zuljin.cpp b/src/bindings/scripts/scripts/zone/zulaman/boss_zuljin.cpp
index 2fa0b83432a..2313af09831 100644
--- a/src/bindings/scripts/scripts/zone/zulaman/boss_zuljin.cpp
+++ b/src/bindings/scripts/scripts/zone/zulaman/boss_zuljin.cpp
@@ -268,7 +268,7 @@ struct TRINITY_DLL_DECL boss_zuljinAI : public ScriptedAI
{
if( !m_creature->IsNonMeleeSpellCasted(false))
{
- if(m_creature->isAttackReady() && m_creature->IsWithinCombatDist(m_creature->getVictim(), ATTACK_DISTANCE))
+ if(m_creature->isAttackReady() && m_creature->IsWithinMeleeRange(m_creature->getVictim()))
{
if(Phase == 1 && !Overpower_Timer)
{
@@ -474,7 +474,7 @@ struct TRINITY_DLL_DECL boss_zuljinAI : public ScriptedAI
if(target)
{
AttackStart(target);
- if(m_creature->IsWithinDistInMap(target, ATTACK_DISTANCE))
+ if(m_creature->IsWithinMeleeRange(target))
{
m_creature->CastSpell(target, SPELL_CLAW_RAGE_DAMAGE, true);
Claw_Counter++;
@@ -517,7 +517,7 @@ struct TRINITY_DLL_DECL boss_zuljinAI : public ScriptedAI
}
if(target)
{
- if(m_creature->IsWithinDistInMap(target, ATTACK_DISTANCE))
+ if(m_creature->IsWithinMeleeRange(target))
{
m_creature->CastSpell(target, SPELL_LYNX_RUSH_DAMAGE, true);
Claw_Counter++;
@@ -613,7 +613,7 @@ struct TRINITY_DLL_DECL feather_vortexAI : public ScriptedAI
void UpdateAI(const uint32 diff)
{
//if the vortex reach the target, it change his target to another player
- if( m_creature->IsWithinCombatDist(m_creature->getVictim(), ATTACK_DISTANCE))
+ if( m_creature->IsWithinMeleeRange(m_creature->getVictim()))
AttackStart(SelectUnit(SELECT_TARGET_RANDOM, 0));
}
};
diff --git a/src/bindings/scripts/scripts/zone/zulgurub/boss_mandokir.cpp b/src/bindings/scripts/scripts/zone/zulgurub/boss_mandokir.cpp
index a70f39e2210..8a9f7320764 100644
--- a/src/bindings/scripts/scripts/zone/zulgurub/boss_mandokir.cpp
+++ b/src/bindings/scripts/scripts/zone/zulgurub/boss_mandokir.cpp
@@ -134,7 +134,7 @@ struct TRINITY_DLL_DECL boss_mandokirAI : public ScriptedAI
targetZ != pUnit->GetPositionZ() ||
pUnit->isInCombat()))
{
- if(m_creature->IsWithinDistInMap(pUnit, ATTACK_DISTANCE))
+ if(m_creature->IsWithinMeleeRange(pUnit))
{
DoCast(pUnit,24316);
}
@@ -200,7 +200,7 @@ struct TRINITY_DLL_DECL boss_mandokirAI : public ScriptedAI
for(; i != m_creature->getThreatManager().getThreatList().end(); ++i)
{
Unit* pUnit = Unit::GetUnit(*m_creature, (*i)->getUnitGuid());
- if(pUnit && m_creature->IsWithinDistInMap(pUnit, ATTACK_DISTANCE))
+ if(pUnit && m_creature->IsWithinMeleeRange(pUnit))
TargetInRange++;
}
diff --git a/src/bindings/scripts/scripts/zone/zulgurub/boss_thekal.cpp b/src/bindings/scripts/scripts/zone/zulgurub/boss_thekal.cpp
index 0eebbc1dda6..47f9588485d 100644
--- a/src/bindings/scripts/scripts/zone/zulgurub/boss_thekal.cpp
+++ b/src/bindings/scripts/scripts/zone/zulgurub/boss_thekal.cpp
@@ -311,11 +311,11 @@ struct TRINITY_DLL_DECL mob_zealot_lorkhanAI : public ScriptedAI
switch(rand()%2)
{
case 0:
- if(m_creature->IsWithinDistInMap(pThekal, ATTACK_DISTANCE))
+ if(m_creature->IsWithinMeleeRange(pThekal))
DoCast(pThekal, SPELL_GREATERHEAL);
break;
case 1:
- if(m_creature->IsWithinDistInMap(pZath, ATTACK_DISTANCE))
+ if(m_creature->IsWithinMeleeRange(pZath))
DoCast(pZath, SPELL_GREATERHEAL);
break;
}
diff --git a/src/bindings/scripts/scripts/zone/zulgurub/boss_venoxis.cpp b/src/bindings/scripts/scripts/zone/zulgurub/boss_venoxis.cpp
index 3d8657d1b67..177d270a6ab 100644
--- a/src/bindings/scripts/scripts/zone/zulgurub/boss_venoxis.cpp
+++ b/src/bindings/scripts/scripts/zone/zulgurub/boss_venoxis.cpp
@@ -116,7 +116,7 @@ struct TRINITY_DLL_DECL boss_venoxisAI : public ScriptedAI
{
target = SelectUnit(SELECT_TARGET_TOPAGGRO,i);
if(target)
- if(m_creature->IsWithinDistInMap(target, ATTACK_DISTANCE))
+ if(m_creature->IsWithinMeleeRange(target))
TargetInRange++;
}
diff --git a/src/game/AggressorAI.cpp b/src/game/AggressorAI.cpp
index 27c1ad6ee6c..3fd0f63d194 100644
--- a/src/game/AggressorAI.cpp
+++ b/src/game/AggressorAI.cpp
@@ -126,7 +126,7 @@ AggressorAI::UpdateAI(const uint32 /*diff*/)
if( i_creature.isAttackReady() )
{
- if( i_creature.IsWithinCombatDist(i_creature.getVictim(), ATTACK_DISTANCE))
+ if( i_creature.IsWithinMeleeRange(i_creature.getVictim()))
{
i_creature.AttackerStateUpdate(i_creature.getVictim());
i_creature.resetAttackTimer();
diff --git a/src/game/GuardAI.cpp b/src/game/GuardAI.cpp
index 8c029a5531e..806b4a1a112 100644
--- a/src/game/GuardAI.cpp
+++ b/src/game/GuardAI.cpp
@@ -117,7 +117,7 @@ void GuardAI::UpdateAI(const uint32 /*diff*/)
if( i_creature.isAttackReady() )
{
- if( i_creature.IsWithinCombatDist(i_creature.getVictim(), ATTACK_DISTANCE))
+ if( i_creature.IsWithinMeleeRange(i_creature.getVictim()))
{
i_creature.AttackerStateUpdate(i_creature.getVictim());
i_creature.resetAttackTimer();
diff --git a/src/game/Object.h b/src/game/Object.h
index b5546c04caa..731e788783f 100644
--- a/src/game/Object.h
+++ b/src/game/Object.h
@@ -39,7 +39,9 @@
#define DEFAULT_WORLD_OBJECT_SIZE 0.388999998569489f // player size, also currently used (correctly?) for any non Unit world objects
#define DEFAULT_COMBAT_REACH 1.5f
-#define ATTACK_DISTANCE (5.0f - DEFAULT_COMBAT_REACH * 2) // melee range: center to center for players
+#define MIN_MELEE_REACH 2.0f
+#define NOMINAL_MELEE_RANGE 5.0f
+#define MELEE_RANGE (NOMINAL_MELEE_RANGE - MIN_MELEE_REACH * 2) //center to center for players
enum TypeMask
{
diff --git a/src/game/PetAI.cpp b/src/game/PetAI.cpp
index 449d8b9924a..6a87d52cfca 100644
--- a/src/game/PetAI.cpp
+++ b/src/game/PetAI.cpp
@@ -156,7 +156,7 @@ void PetAI::UpdateAI(const uint32 diff)
_stopAttack();
return;
}
- else if( i_pet.IsStopped() || i_pet.IsWithinDistInMap(i_pet.getVictim(), ATTACK_DISTANCE))
+ else if( i_pet.IsStopped() || i_pet.IsWithinMeleeRange(i_pet.getVictim()))
{
// required to be stopped cases
if ( i_pet.IsStopped() && i_pet.IsNonMeleeSpellCasted(false) )
@@ -167,7 +167,7 @@ void PetAI::UpdateAI(const uint32 diff)
return;
}
// not required to be stopped case
- else if( i_pet.isAttackReady() && i_pet.IsWithinCombatDist(i_pet.getVictim(), ATTACK_DISTANCE) )
+ else if( i_pet.isAttackReady() && i_pet.IsWithinMeleeRange(i_pet.getVictim()) )
{
i_pet.AttackerStateUpdate(i_pet.getVictim());
@@ -341,6 +341,6 @@ void PetAI::AttackedBy(Unit *attacker)
{
//when attacked, fight back in case 1)no victim already AND 2)not set to passive AND 3)not set to stay, unless can it can reach attacker with melee attack anyway
if(!i_pet.getVictim() && i_pet.GetCharmInfo() && !i_pet.GetCharmInfo()->HasReactState(REACT_PASSIVE) &&
- (!i_pet.GetCharmInfo()->HasCommandState(COMMAND_STAY) || i_pet.canReachWithAttack(attacker)))
+ (!i_pet.GetCharmInfo()->HasCommandState(COMMAND_STAY) || i_pet.IsWithinMeleeRange(attacker)))
AttackStart(attacker);
}
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index d16dac54f54..05204fe9c78 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -1106,11 +1106,9 @@ void Player::Update( uint32 p_time )
// default combat reach 10
// TODO add weapon,skill check
- float pldistance = ATTACK_DISTANCE;
-
if (isAttackReady(BASE_ATTACK))
{
- if(!IsWithinCombatDist(pVictim, pldistance))
+ if(!IsWithinMeleeRange(pVictim))
{
setAttackTimer(BASE_ATTACK,100);
if(m_swingErrorMsg != 1) // send single time (client auto repeat)
@@ -1147,7 +1145,7 @@ void Player::Update( uint32 p_time )
if ( haveOffhandWeapon() && isAttackReady(OFF_ATTACK))
{
- if(!IsWithinCombatDist(pVictim, pldistance))
+ if(!IsWithinMeleeRange(pVictim))
{
setAttackTimer(OFF_ATTACK,100);
}
diff --git a/src/game/PossessedAI.cpp b/src/game/PossessedAI.cpp
index 17dd28f0b0f..4292a2bd22b 100644
--- a/src/game/PossessedAI.cpp
+++ b/src/game/PossessedAI.cpp
@@ -95,7 +95,7 @@ void PossessedAI::UpdateAI(const uint32 diff)
_stopAttack(); // i_victimGuid == 0 && i_pet.getVictim() == NULL now
return;
}
- else if(i_pet.IsWithinCombatDist(i_pet.getVictim(), ATTACK_DISTANCE) && i_pet.isAttackReady() && !i_pet.GetCharmer()->HasAuraType(SPELL_AURA_MOD_PACIFY))
+ else if(i_pet.IsWithinMeleeRange(i_pet.getVictim()) && i_pet.isAttackReady() && !i_pet.GetCharmer()->HasAuraType(SPELL_AURA_MOD_PACIFY))
{
i_pet.AttackerStateUpdate(i_pet.getVictim());
diff --git a/src/game/ReactorAI.cpp b/src/game/ReactorAI.cpp
index 9d596751075..dd796b74f38 100644
--- a/src/game/ReactorAI.cpp
+++ b/src/game/ReactorAI.cpp
@@ -76,7 +76,7 @@ ReactorAI::UpdateAI(const uint32 /*time_diff*/)
if( i_creature.isAttackReady() )
{
- if( i_creature.IsWithinCombatDist(i_creature.getVictim(), ATTACK_DISTANCE))
+ if( i_creature.IsWithinMeleeRange(i_creature.getVictim()))
{
i_creature.AttackerStateUpdate(i_creature.getVictim());
i_creature.resetAttackTimer();
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
index 56247e1bcbe..307c7770cae 100644
--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ -4682,23 +4682,9 @@ uint8 Spell::CheckRange(bool strict)
range_mod = 6.25;*/
SpellRangeEntry const* srange = sSpellRangeStore.LookupEntry(m_spellInfo->rangeIndex);
- float max_range, min_range;
- float range_type = GetSpellRangeType(srange);
- if(range_type == SPELL_RANGE_DEFAULT)
- {
- max_range = GetSpellMaxRange(srange);// + range_mod;
- min_range = GetSpellMinRange(srange);
- }
- else if(range_type == SPELL_RANGE_MELEE)
- {
- max_range = ATTACK_DISTANCE;
- min_range = GetSpellMinRange(srange);
- }
- else
- {
- max_range = GetSpellMaxRange(srange);// + range_mod;
- min_range = ATTACK_DISTANCE;
- }
+ float max_range = GetSpellMaxRange(srange); // + range_mod;
+ float min_range = GetSpellMinRange(srange);
+ uint32 range_type = GetSpellRangeType(srange);
if(Player* modOwner = m_caster->GetSpellModOwner())
modOwner->ApplySpellMod(m_spellInfo->Id, SPELLMOD_RANGE, max_range, this);
@@ -4707,11 +4693,20 @@ uint8 Spell::CheckRange(bool strict)
if(target && target != m_caster)
{
- // distance from target center in checks
- if(!m_caster->IsWithinCombatDist(target, max_range))
+ if(range_type == SPELL_RANGE_MELEE)
+ {
+ if(!m_caster->IsWithinMeleeRange(target))
+ return SPELL_FAILED_OUT_OF_RANGE;
+ }
+ else if(!m_caster->IsWithinCombatRange(target, max_range))
return SPELL_FAILED_OUT_OF_RANGE; //0x5A;
- if(min_range && m_caster->IsWithinCombatDist(target, min_range)) // skip this check if min_range = 0
+ if(range_type == SPELL_RANGE_RANGED)
+ {
+ if(m_caster->IsWithinMeleeRange(target))
+ return SPELL_FAILED_TOO_CLOSE;
+ }
+ else if(min_range && m_caster->IsWithinCombatRange(target, min_range)) // skip this check if min_range = 0
return SPELL_FAILED_TOO_CLOSE;
if( m_caster->GetTypeId() == TYPEID_PLAYER &&
diff --git a/src/game/TargetedMovementGenerator.cpp b/src/game/TargetedMovementGenerator.cpp
index bd0e7e378fd..9793a81cf14 100644
--- a/src/game/TargetedMovementGenerator.cpp
+++ b/src/game/TargetedMovementGenerator.cpp
@@ -60,7 +60,7 @@ TargetedMovementGenerator<T>::_setTargetLocation(T &owner)
if(!i_offset)
{
// to nearest random contact position
- i_target->GetRandomContactPoint( &owner, x, y, z, 0.5f, ATTACK_DISTANCE - 0.5f );
+ i_target->GetRandomContactPoint( &owner, x, y, z, 0, MELEE_RANGE - 0.5f );
}
else
{
@@ -185,7 +185,7 @@ TargetedMovementGenerator<T>::Update(T &owner, const uint32 & time_diff)
owner.SetInFront(i_target.getTarget());
owner.StopMoving();
- if(owner.IsWithinCombatDist(i_target.getTarget(), ATTACK_DISTANCE) && !owner.hasUnitState(UNIT_STAT_FOLLOW))
+ if(owner.IsWithinMeleeRange(i_target.getTarget()) && !owner.hasUnitState(UNIT_STAT_FOLLOW))
owner.Attack(i_target.getTarget(),true);
}
}
diff --git a/src/game/ThreatManager.cpp b/src/game/ThreatManager.cpp
index 94f12f5394a..44bf18d2462 100644
--- a/src/game/ThreatManager.cpp
+++ b/src/game/ThreatManager.cpp
@@ -302,7 +302,7 @@ HostilReference* ThreatContainer::selectNextVictim(Creature* pAttacker, HostilRe
}
if( currentRef->getThreat() > 1.3f * pCurrentVictim->getThreat() ||
- currentRef->getThreat() > 1.1f * pCurrentVictim->getThreat() && pAttacker->IsWithinDistInMap(target, ATTACK_DISTANCE) )
+ currentRef->getThreat() > 1.1f * pCurrentVictim->getThreat() && pAttacker->IsWithinMeleeRange(target) )
{ //implement 110% threat rule for targets in melee range
found = true; //and 130% rule for targets in ranged distances
break; //for selecting alive targets
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
index 2f0e5a1fe43..aa1fb0a5a5d 100644
--- a/src/game/Unit.cpp
+++ b/src/game/Unit.cpp
@@ -420,13 +420,22 @@ void Unit::resetAttackTimer(WeaponAttackType type)
m_attackTimer[type] = uint32(GetAttackTime(type) * m_modAttackSpeedPct[type]);
}
-bool Unit::canReachWithAttack(Unit *pVictim) const
+bool Unit::IsWithinCombatRange(Unit *obj, float dist2compare) const
{
- assert(pVictim);
- return IsWithinDistInMap(pVictim, GetCombatReach());
+ if (!obj || !IsInMap(obj)) return false;
+
+ float dx = GetPositionX() - obj->GetPositionX();
+ float dy = GetPositionY() - obj->GetPositionY();
+ float dz = GetPositionZ() - obj->GetPositionZ();
+ float distsq = dx*dx + dy*dy + dz*dz;
+
+ float sizefactor = GetCombatReach() + obj->GetCombatReach();
+ float maxdist = dist2compare + sizefactor;
+
+ return distsq < maxdist * maxdist;
}
-bool Unit::IsWithinCombatDist(Unit *obj, float dist2compare) const
+bool Unit::IsWithinMeleeRange(Unit *obj) const
{
if (!obj || !IsInMap(obj)) return false;
@@ -434,9 +443,9 @@ bool Unit::IsWithinCombatDist(Unit *obj, float dist2compare) const
float dy = GetPositionY() - obj->GetPositionY();
float dz = GetPositionZ() - obj->GetPositionZ();
float distsq = dx*dx + dy*dy + dz*dz;
- //not sure here, or combatreach + combatreach?
- float sizefactor = GetCombatReach() + obj->GetCombatReach();
- float maxdist = dist2compare + sizefactor;
+
+ float sizefactor = GetMeleeReach() + obj->GetMeleeReach();
+ float maxdist = MELEE_RANGE + sizefactor;
return distsq < maxdist * maxdist;
}
diff --git a/src/game/Unit.h b/src/game/Unit.h
index 24722645eaf..7f93ede83b4 100644
--- a/src/game/Unit.h
+++ b/src/game/Unit.h
@@ -771,10 +771,10 @@ class TRINITY_DLL_SPEC Unit : public WorldObject
bool haveOffhandWeapon() const;
bool CanDualWield() const { return m_canDualWield; }
void SetCanDualWield(bool value) { m_canDualWield = value; }
- bool canReachWithAttack(Unit *pVictim) const;
float GetCombatReach() const { return m_floatValues[UNIT_FIELD_COMBATREACH]; }
- bool IsWithinCombatDist(Unit *obj, float dist2compare) const;
- bool IsWithinMeleeRange(Unit *obj) const { return IsWithinCombatDist(obj, ATTACK_DISTANCE); }
+ float GetMeleeReach() const { float reach = m_floatValues[UNIT_FIELD_COMBATREACH]; return reach > MIN_MELEE_REACH ? reach : MIN_MELEE_REACH; }
+ bool IsWithinCombatRange(Unit *obj, float dist2compare) const;
+ bool IsWithinMeleeRange(Unit *obj) const;
void GetRandomContactPoint( const Unit* target, float &x, float &y, float &z, float distance2dMin, float distance2dMax ) const;
uint32 m_extraAttacks;
bool m_canDualWield;
@@ -810,7 +810,7 @@ class TRINITY_DLL_SPEC Unit : public WorldObject
Unit* getVictim() const { return m_attacking; }
void CombatStop(bool cast = false);
void CombatStopWithPets(bool cast = false);
- Unit* SelectNearbyTarget(float dist = ATTACK_DISTANCE) const;
+ Unit* SelectNearbyTarget(float dist = NOMINAL_MELEE_RANGE) const;
void addUnitState(uint32 f) { m_state |= f; }
bool hasUnitState(const uint32 f) const { return (m_state & f); }
diff --git a/src/game/World.cpp b/src/game/World.cpp
index a7cff4cb686..4cde9683cc3 100644
--- a/src/game/World.cpp
+++ b/src/game/World.cpp
@@ -477,11 +477,11 @@ void World::LoadConfigSettings(bool reload)
sLog.outError("TargetPosRecalculateRange (%f) must be >= %f. Using %f instead.",rate_values[RATE_TARGET_POS_RECALCULATION_RANGE],CONTACT_DISTANCE,CONTACT_DISTANCE);
rate_values[RATE_TARGET_POS_RECALCULATION_RANGE] = CONTACT_DISTANCE;
}
- else if(rate_values[RATE_TARGET_POS_RECALCULATION_RANGE] > ATTACK_DISTANCE)
+ else if(rate_values[RATE_TARGET_POS_RECALCULATION_RANGE] > NOMINAL_MELEE_RANGE)
{
sLog.outError("TargetPosRecalculateRange (%f) must be <= %f. Using %f instead.",
- rate_values[RATE_TARGET_POS_RECALCULATION_RANGE],ATTACK_DISTANCE,ATTACK_DISTANCE);
- rate_values[RATE_TARGET_POS_RECALCULATION_RANGE] = ATTACK_DISTANCE;
+ rate_values[RATE_TARGET_POS_RECALCULATION_RANGE],NOMINAL_MELEE_RANGE,NOMINAL_MELEE_RANGE);
+ rate_values[RATE_TARGET_POS_RECALCULATION_RANGE] = NOMINAL_MELEE_RANGE;
}
rate_values[RATE_DURABILITY_LOSS_DAMAGE] = sConfig.GetFloatDefault("DurabilityLossChance.Damage",0.5f);