Horizon Official Technical Documentation
GridMonsterAIActiveSearchTarget Struct Reference

#include <GridNotifiers.hpp>

Public Member Functions

 GridMonsterAIActiveSearchTarget (const std::shared_ptr< Horizon::Zone::Units::Monster > &monster)
 
template<class T >
void search (GridRefManager< T > &m)
 
void Visit (GridRefManager< unit_ns(Player)> &m)
 
void Visit (GridRefManager< unit_ns(Elemental)> &m)
 
void Visit (GridRefManager< unit_ns(Homunculus)> &m)
 
void Visit (GridRefManager< unit_ns(Mercenary)> &m)
 
template<class NOT_INTERESTED >
void Visit (GridRefManager< NOT_INTERESTED > &)
 
template<>
void Visit (GridRefManager< NPC > &m)
 
template<>
void Visit (GridRefManager< Pet > &m)
 
template<>
void Visit (GridRefManager< Monster > &m)
 
template<>
void Visit (GridRefManager< Skill > &m)
 
template<>
void Visit (GridRefManager< Item > &m)
 

Public Attributes

std::weak_ptr< Horizon::Zone::Units::Monster_monster
 

Constructor & Destructor Documentation

◆ GridMonsterAIActiveSearchTarget()

GridMonsterAIActiveSearchTarget::GridMonsterAIActiveSearchTarget ( const std::shared_ptr< Horizon::Zone::Units::Monster > &  monster)
inlineexplicit
166 : _monster(monster)
167 { }
std::weak_ptr< Horizon::Zone::Units::Monster > _monster
Definition: GridNotifiers.hpp:163

Member Function Documentation

◆ search()

template<class T >
void GridMonsterAIActiveSearchTarget::search ( GridRefManager< T > &  m)
317{
318 if (_monster.expired())
319 return;
320
321 using namespace Horizon::Zone;
322 for (typename GridRefManager<T>::iterator iter = m.begin(); iter != typename GridRefManager<T>::iterator(nullptr); ++iter) {
323 if (iter->source() == nullptr)
324 continue;
325
326 std::shared_ptr<Unit> e = iter->source()->shared_from_this();
327 std::shared_ptr<Monster> m = _monster.lock();
328
329 if (m == nullptr || e == nullptr)
330 continue;
331
332 if (m->monster_config()->mode & MONSTER_MODE_MASK_TARGETWEAK && e->status()->base_level()->get_base() >= m->monster_config()->level - 5)
333 return;
334
335#ifdef ACTIVE_PATH_SEARCH
336 // On official servers, monsters will only seek targets that are closer to walk to than their
337 // search range. The search range is affected depending on if the monster is walking or not.
338 // On some maps there can be a quite long path for just walking two cells in a direction and
339 // the client does not support displaying walk paths that are longer than 14 cells, so this
340 // option reduces position lag in such situation. But doing a complex search for every possible
341 // target, might be CPU intensive.
342 // Disable this to make monsters not do any path search when looking for a target (old behavior).
343 AStar::CoordinateList wp = m->map()->get_pathfinder().findPath(m->map_coords(), e->map_coords());
344
345 if (wp.size() == 0)
346 continue; // no walk path available.
347
348 //Standing monsters use view range, walking monsters use chase range
349 if ((m->is_walking() == false && wp.size() > m->monster_config()->view_range)
350 || (m->is_walking() == true && wp.size() > m->monster_config()->chase_range))
351 continue;
352#endif
353 m->set_target(e);
354
355 break;
356 }
357}
@ MONSTER_MODE_MASK_TARGETWEAK
Definition: MonsterDefinitions.hpp:105
Forward declaration of GridRefManager, the class that manages GridReference.
Definition: GridRefManager.hpp:41
iterator begin()
Definition: GridRefManager.hpp:54
std::vector< MapCoords > CoordinateList
We use a vector because the AStar algorithm is only searching on small datasets. Other data structure...
Definition: AStar.hpp:77
Definition: NPCDefinitions.hpp:54

References _monster, GridRefManager< OBJECT >::begin(), and MONSTER_MODE_MASK_TARGETWEAK.

+ Here is the call graph for this function:

◆ Visit() [1/10]

template<>
void GridMonsterAIActiveSearchTarget::Visit ( GridRefManager< Item > &  m)

◆ Visit() [2/10]

template<>
void GridMonsterAIActiveSearchTarget::Visit ( GridRefManager< Monster > &  m)

◆ Visit() [3/10]

template<class NOT_INTERESTED >
void GridMonsterAIActiveSearchTarget::Visit ( GridRefManager< NOT_INTERESTED > &  )
inline
178{ }

◆ Visit() [4/10]

template<>
void GridMonsterAIActiveSearchTarget::Visit ( GridRefManager< NPC > &  m)

◆ Visit() [5/10]

template<>
void GridMonsterAIActiveSearchTarget::Visit ( GridRefManager< Pet > &  m)

◆ Visit() [6/10]

template<>
void GridMonsterAIActiveSearchTarget::Visit ( GridRefManager< Skill > &  m)

◆ Visit() [7/10]

void GridMonsterAIActiveSearchTarget::Visit ( GridRefManager< unit_ns(Elemental)> &  m)

◆ Visit() [8/10]

void GridMonsterAIActiveSearchTarget::Visit ( GridRefManager< unit_ns(Homunculus)> &  m)

◆ Visit() [9/10]

void GridMonsterAIActiveSearchTarget::Visit ( GridRefManager< unit_ns(Mercenary)> &  m)

◆ Visit() [10/10]

void GridMonsterAIActiveSearchTarget::Visit ( GridRefManager< unit_ns(Player)> &  m)

Member Data Documentation

◆ _monster

std::weak_ptr<Horizon::Zone::Units::Monster> GridMonsterAIActiveSearchTarget::_monster

Referenced by search().


The documentation for this struct was generated from the following files: