Подскажите алгоритм пожалуйта, как выбрать юнита в группе. у этого юнита должно быть меньше всего хп в численном значении.
я могу пикнуть случайного юнита и потом сравнивать его хп с хп других юнитов записывая это дело в переменную, но может есть способ лучше? гуи

нужна переменная типа real и при переборе сравниваешь здоровье юнита
set Real = 0
Если:
Здоровье (выбранный юнит) больше Real
То:
Установить Real = Здоровье (выбранный юнит)
Иначе:
(Пусто)
и все это внутри перебора юнитов
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
23
Похожие вопросы:

ответ
Изначально было как обычно, через множество групп с нужной выборкой и их очистку. Но было падение фпса, спустя определенное время игры. С помощью счетчика хендлов выяснили что "Pick every unit in" вызывает утечки. Был предложен такой вот метод выбора всех юнитов через локалку и с помощью ifthenelse отсеивать нужных. В принципе помогло с фпсом. Он стабильный. Но вот видимо все эти переборы вызывают микрофризы.
А утечки точно из-за самого выбора? Насколько знаю, нативные функции утечек не вызывают, а BJ реализация ForGroup вроде без утечек...
Мб дело в обработке группы было?
И на счёт групп - пробовали выделить заранее штук сто-двести глобальных групп и использовать по необходимости? Без создания новых.
Кстати, GetUnitsInRangeOfLocMatching() вроде вызывает утечку. Это получение группы юнитов, находящихся внутри окружности с радиусом и подходящих по условию. Утечка в том, что возвращается локальная переменная. Лечится как раз использованием глобальной переменной. (Глобальной переменной присваивается значение локальной, локальная обнуляется, глобальная возвращается)
Venommm:
Если такой способ действительно эффективней, можно пожалуйста самый элементарный пример, хотябы в виде скрина.
Вам ну гуи, да? По моему, на гуи так не получится. Насколько помню, GroupEnumUnitsInRange() и ForGroup() нет в действиях, а аналоги утечны. Но я могу и ошибаться, сужу по коду в Blizzard.j, а не по тестам.

20
bUnit01 = FirstOfGroup(gr);
ForGroup(gr, function() {
	bUnit = GetEnumUnit();
	if (GetUnitLifePercent(bUnit01) < GetUnitLifePercent(bUnit)) {
		bUnit01 = bUnit;
	}
}); 
target = bUnit01;
На гуи логика такая же, по-другому никак.
14
нужна переменная типа real и при переборе сравниваешь здоровье юнита
set Real = 0
Если:
Здоровье (выбранный юнит) больше Real
То:
Установить Real = Здоровье (выбранный юнит)
Иначе:
(Пусто)
и все это внутри перебора юнитов
Загруженные файлы
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.