Если использовать способность, к примеру 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( ) радиус чуть больше нужного нам.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
19
6 лет назад
0
Похожие вопросы:

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

0
32
6 лет назад
0
как я заметил GroupEnumUnitsInRangeOfLoc работает также как и GroupEnumUnitsInRect, то есть в квадратном регионе а не в радиусе, на картинке судя по тому как удалились юниты, именно так и произошло.
0
32
6 лет назад
0
Bergi_Bear, потому что поиск у старнартых абилок идет от центра модели до края, консулся круга выбора - все ты попался, триггерные же дейстивия - groupEnumUnitsInRange считают что обьект попался, если его центр пересек окруджность выбора, это давно известно на той же доте, там триггерный радиус выше рошного на 32 (макс. физ размер юнита).
0
19
6 лет назад
0
quq_CCCP, объясни по-селянскому, как это поправить?
Bergi_Bear, Выбор все же идёт по окружности:
Загруженные файлы
1
16
6 лет назад
1
брать больше на сколько-то единиц, в зависимости от того, кто самый жирный в твоей выборке
например, у меня здания 144 коллижн имеют, поэтому если я хочу их учесть, добавляю 150 к аое. если только по юнитам, то 25 обычно добавляем, шире нет.
собираю и каждому проверяю IsUnitInRangeXY(u,x,y) < RealAoe
1
21
6 лет назад
1
Это из-за физического размера выбираемых воинов.
Если хотите сделать способность, которая будет работать также, как и стандартные, то при выборе воинов в качестве радиуса указываете нужный радиус + максимально возможный физический размер воинов на карте.
// 	Если перебор воинов идёт через цикл:
	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( ) радиус чуть больше нужного нам.
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.