Если использовать способность, к примеру thunderclap, с областью воздействия 250 AoE, а затем выбрать юнитов таким способом:
call GroupEnumUnitsInRangeOfLoc(udg_BuferGroup, udg_BuferPoint,250, null)
(BuferPoint* - точка кастующего), то области будут разные, удар грома будет воздействовать на большую область, чем в коде. Почему?
UPD:
Пример на картинке:
На картинке я вырезал триггерно область из послушников (250 AoE), и нацелил способность (250 AoE) в эту же точку, как видно, способность захватывает еще некоторых юнитов.

Это из-за физического размера выбираемых воинов.
Если хотите сделать способность, которая будет работать также, как и стандартные, то при выборе воинов в качестве радиуса указываете нужный радиус + максимально возможный физический размер воинов на карте.
// 	Если перебор воинов идёт через цикл:
	call GroupEnumUnitsInRange( group, x, y, SPELL_RADIUS + MAX_COLLIZION_SIZE, boolexpr )
	loop
//		...
		set enumUnit = FirstOfGroup( group )
//		...
		if IsUnitEnemy( enumUnit, player ) and IsUnitInRangeXY( enumUnit, x, y, SPELL_RADIUS ) then
			call DoSomething( )
		endif
//		...
	endloop
Как показано выше, с помощью функции IsUnitInRange( ) мы можем отсеять воинов, которые не попали в радиус действия способности, но были выбраны в группу из-за того, что мы указали в функции GroupEnumUnitsInRange( ) радиус чуть больше нужного нам.
`
ОЖИДАНИЕ РЕКЛАМЫ...
23
Похожие вопросы:

  1. Aoe
ответ
аура есть аура, она не будет распространится на атаку юнита, используйте орб эффект, к примеру сферу замедления чтобы юнит при атаке накладывал на врага некоторый эффект.
ВНИМАНИЕ большинство орбов не складываются, поэтому если для вас это критично то скачиваем систему отлова физ урона и делаем пассивку полностью триггерно.
ответ
Путь можно отыскать в MPQ-файлах. Например, ReplaceableTextures\Selection\SpellAreaOfEffect.blp
ответ
Сам делаю такую систему для второго этажа - делаеш тригер со своей инициализацией и потом через действие первращаеш юнита в летающего и повышаеш высоту полета. Если я говорю что-нибуть не так, то сам хотел бы посмотреть на пример других людей.
ответ
Юнитов поднимает тогда же, когда и опускает, потому что я удаляю их из DedG[3], но забываю удалить из группы снарядов, таким образом, к тем кто попал под падение, уже навечно задействован акт снарядов(опускание), пока они в DedG[3]
ответ
Ну это сплеш, на тип урона не проверял, область настраивается и кол-во урона, оно же урон по аое.
Не все, а орбы предметов, орб может включить вторую атаку героя, только если она изначально выключена и есть. По этой причине владельцы орбов порой считаются юнитами дальнего боя, что разумеется не так (вторая атака всегда атака дальнего боя у всех дефолтных героев в варкравте, особо вторую атаку никто не настраивает.)
В орбах вроде сферы огня нету ничего интересного или полезного, лучше делать руками те эффекты которые они дают.

33
как я заметил GroupEnumUnitsInRangeOfLoc работает также как и GroupEnumUnitsInRect, то есть в квадратном регионе а не в радиусе, на картинке судя по тому как удалились юниты, именно так и произошло.
32
Bergi_Bear, потому что поиск у старнартых абилок идет от центра модели до края, консулся круга выбора - все ты попался, триггерные же дейстивия - groupEnumUnitsInRange считают что обьект попался, если его центр пересек окруджность выбора, это давно известно на той же доте, там триггерный радиус выше рошного на 32 (макс. физ размер юнита).
20
quq_CCCP, объясни по-селянскому, как это поправить?
Bergi_Bear, Выбор все же идёт по окружности:
Загруженные файлы
16
брать больше на сколько-то единиц, в зависимости от того, кто самый жирный в твоей выборке
например, у меня здания 144 коллижн имеют, поэтому если я хочу их учесть, добавляю 150 к аое. если только по юнитам, то 25 обычно добавляем, шире нет.
собираю и каждому проверяю IsUnitInRangeXY(u,x,y) < RealAoe
21
Это из-за физического размера выбираемых воинов.
Если хотите сделать способность, которая будет работать также, как и стандартные, то при выборе воинов в качестве радиуса указываете нужный радиус + максимально возможный физический размер воинов на карте.
// 	Если перебор воинов идёт через цикл:
	call GroupEnumUnitsInRange( group, x, y, SPELL_RADIUS + MAX_COLLIZION_SIZE, boolexpr )
	loop
//		...
		set enumUnit = FirstOfGroup( group )
//		...
		if IsUnitEnemy( enumUnit, player ) and IsUnitInRangeXY( enumUnit, x, y, SPELL_RADIUS ) then
			call DoSomething( )
		endif
//		...
	endloop
Как показано выше, с помощью функции IsUnitInRange( ) мы можем отсеять воинов, которые не попали в радиус действия способности, но были выбраны в группу из-за того, что мы указали в функции GroupEnumUnitsInRange( ) радиус чуть больше нужного нам.
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.