rendered paste bodybool Unit::SortTargets()
{
if(GetTypeId() == TYPEID_PLAYER)
return false;
DEBUG_LOG("Start victim sorting ");
for(HateList::iterator iter = m_hateList.begin(); iter != m_hateList.end(); iter++)
{
if(iter->UnitGuid)
{
Unit* unit = ObjectAccessor::Instance().GetUnit(*this, iter->UnitGuid);
if(!unit || ((Creature*)this)->IsOutOfThreatArea(unit))
{
DEBUG_LOG("1");
m_offlineList.push_back(Hostil(iter->UnitGuid, iter->Threat));
m_hateList.erase(iter);
DEBUG_LOG("2");
}
}
}
DEBUG_LOG("Threat list sorting complite");
if(IsHateOfflineListEmpty()) //if HateOfflineList is empty after ThreatList filtering
return true;
for(HateOfflineList::iterator itr = m_offlineList.begin(); itr != m_offlineList.end(); itr++)
{
if(itr->UnitGuid)
{
Unit* unit = ObjectAccessor::Instance().GetUnit(*this, itr->UnitGuid);
if(unit && !((Creature*)this)->IsOutOfThreatArea(unit))
{
RestoreVictimInHateList(unit);
m_hateList.push_back(Hostil(itr->UnitGuid, itr->Threat));
m_offlineList.erase(itr);
}
}
}
DEBUG_LOG("Stop victim sorting ");
if(IsThreatListEmpty()) //if no one in ThreatList after HateOfflineList filtering
return false;
return true;
}