Показать сообщение отдельно
Старый 13.06.2011, 14:12   #15
MaxXx2021
Ученый
 
Аватар для MaxXx2021
 
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
MaxXx2021 Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от 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?
MaxXx2021 вне форума   Ответить с цитированием