aboutsummaryrefslogtreecommitdiff
path: root/src/game/Creature.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/Creature.cpp')
-rw-r--r--src/game/Creature.cpp26
1 files changed, 20 insertions, 6 deletions
diff --git a/src/game/Creature.cpp b/src/game/Creature.cpp
index 33d1fd2ea02..91eb04b07f5 100644
--- a/src/game/Creature.cpp
+++ b/src/game/Creature.cpp
@@ -1543,6 +1543,19 @@ bool Creature::IsWithinSightDist(Unit const* u) const
return IsWithinDistInMap(u, sWorld.getConfig(CONFIG_SIGHT_MONSTER));
}
+bool Creature::canStartAttack(Unit const* who) const
+{
+ if(!who->isInAccessiblePlaceFor(this)
+ || !canFly() && GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE
+ || !IsWithinDistInMap(who, GetAttackDistance(who)))
+ return false;
+
+ if(!canAttack(who))
+ return false;
+
+ return IsWithinLOSInMap(who);
+}
+
float Creature::GetAttackDistance(Unit const* pl) const
{
float aggroRate = sWorld.getRate(RATE_CREATURE_AGGRO);
@@ -1824,12 +1837,12 @@ void Creature::DoFleeToGetAssistance(float radius) // Optional parameter
Unit* Creature::SelectNearestTarget(float dist) const
{
- /*CellPair p(Trinity::ComputeCellPair(GetPositionX(), GetPositionY()));
+ CellPair p(Trinity::ComputeCellPair(GetPositionX(), GetPositionY()));
Cell cell(p);
cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
- Unit *target;
+ Unit *target = NULL;
{
Trinity::NearestHostileUnitInAttackDistanceCheck u_check(this, dist);
@@ -1839,10 +1852,11 @@ Unit* Creature::SelectNearestTarget(float dist) const
TypeContainerVisitor<Trinity::UnitLastSearcher<Trinity::NearestHostileUnitInAttackDistanceCheck>, GridTypeMapContainer > grid_unit_searcher(searcher);
CellLock<GridReadGuard> cell_lock(cell, p);
- cell_lock->Visit(cell_lock, world_unit_searcher, GetMap());
- cell_lock->Visit(cell_lock, grid_unit_searcher, GetMap());
- }*/
- return NULL;
+ cell_lock->Visit(cell_lock, world_unit_searcher, *GetMap());
+ cell_lock->Visit(cell_lock, grid_unit_searcher, *GetMap());
+ }
+
+ return target;
}
void Creature::CallAssistence()