aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorHristo Bogdanov <hristo+github@fenix.international>2015-01-26 19:15:06 +0000
committerNayd <dnpd.dd@gmail.com>2015-01-26 19:43:45 +0000
commit08f790d6f98c10e481825ce5c64cd81e22f0c193 (patch)
tree99dfb0648e8601469d3b65066fdfc74ce6a31985 /src/server/game/Entities
parent25d9f9e38d7663b596a6c53e4ba34e59d318ef82 (diff)
Core/Creatures: No gray aggro config
(Custom) Adds option to disable aggro from gray creatures when the players are above/below certain levels. Closes #13919 (cherry picked from commit 02e11a605640ff49aefbae299a44a1856156cec3)
Diffstat (limited to 'src/server/game/Entities')
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp20
-rw-r--r--src/server/game/Entities/Creature/Creature.h1
2 files changed, 21 insertions, 0 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index e34d570e73f..1945c0608ea 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -1433,9 +1433,29 @@ bool Creature::CanStartAttack(Unit const* who, bool force) const
if (!CanCreatureAttack(who, force))
return false;
+ // No aggro from gray creatures
+ if (CheckNoGrayAggroConfig(who->getLevelForTarget(this), getLevelForTarget(who)))
+ return false;
+
return IsWithinLOSInMap(who);
}
+
+bool Creature::CheckNoGrayAggroConfig(uint32 playerLevel, uint32 creatureLevel) const
+{
+ if (Trinity::XP::GetColorCode(playerLevel, creatureLevel) != XP_GRAY)
+ return false;
+
+ uint32 notAbove = sWorld->getIntConfig(CONFIG_NO_GRAY_AGGRO_ABOVE);
+ uint32 notBelow = sWorld->getIntConfig(CONFIG_NO_GRAY_AGGRO_BELOW);
+ if (notAbove == 0 && notBelow == 0)
+ return false;
+
+ if (playerLevel <= notBelow || (playerLevel >= notAbove && notAbove > 0))
+ return true;
+ return false;
+}
+
float Creature::GetAttackDistance(Unit const* player) const
{
float aggroRate = sWorld->getRate(RATE_CREATURE_AGGRO);
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h
index 842624e0c01..a3230dd98ba 100644
--- a/src/server/game/Entities/Creature/Creature.h
+++ b/src/server/game/Entities/Creature/Creature.h
@@ -766,6 +766,7 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject
private:
void ForcedDespawn(uint32 timeMSToDespawn = 0);
+ bool CheckNoGrayAggroConfig(uint32 playerLevel, uint32 creatureLevel) const; // No aggro from gray creatures
//WaypointMovementGenerator vars
uint32 m_waypointID;