13.06.2011, 14:12
|
#15
|
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
Цитата:
Сообщение от Zamir
Смотрел код тринити, там для этого использовалась сортировка всего списка игроков по их удаленности до босса, начиная с самых дальних. Потом перебором от самых дальних находился первый игрок с дистанцией меньше положеной, кол-во игроков до этого момента сохранялось в переменной. Потом через std::advance итератор рандомно ставился между началом списка и этой переменной, так получали рандомную цель в рдд. У меня почему-то так сделать не получилось, поэтому реализовал так:
Код:
//Spell Blood Nova
if (m_uiBloodNovaTimer <= uiDiff)
{
Unit* mPlayers[24]; //Сюда сохраняются найденные указатели на рдд
uint32 uiRCount = 0; //Счетчик кол-ва найденных рдд
Map* pMap = m_creature->GetMap();
Map::PlayerList const& pPlayers = pMap->GetPlayers();
if (!pPlayers.isEmpty())
{
for (Map::PlayerList::const_iterator itr = pPlayers.begin(); itr != pPlayers.end(); ++itr)
{
Unit* pTargetBN = itr->getSource();
if (pTargetBN && pTargetBN->IsInWorld())
{
if (m_creature->GetDistance(pTargetBN->GetPositionX(), pTargetBN->GetPositionY(), pTargetBN->GetPositionZ()) > m_fRangeDist)
{
uiRCount++;
mPlayers[uiRCount-1] = itr->getSource();
}
}
}
}
if (uiRCount>0)
{
DoCast(mPlayers[urand(0, uiRCount-1)], SPELL_BLOOD_NOVA);
m_uiBloodNovaTimer = 10000;
}
else
{
DoCast(m_creature->getVictim(), SPELL_BLOOD_NOVA);
m_uiBloodNovaTimer = 10000;
}
}
else
m_uiBloodNovaTimer -= uiDiff;
|
не проще в ядро в FillCustomArea?
|
|
|