30

» WarCraft 3 / Использования юнита как снаряд

А что насчёт хранения всех снарядов в группе и выбора уже из неё только тех, которые в нужной области?
Уже несколько человек несколько раз предлагали. Автор хочет использовать GroupEnumUnitsInRange() для пика юнитов по удалённости от точки.
30

» WarCraft 3 / Использования юнита как снаряд

как это ТРИ ?
  • Перебор группы снарядов и снятие Aloc
  • Пик снарядов в области и совершение над ними действий
  • Перебор группы снарядов и выдача Aloc
вместо
  • Перебор группы снарядов, сравнение расстояния и совершение действия прям в этом переборе.
30

» WarCraft 3 / Использования юнита как снаряд

Extremator, вместо одного перебора группы и сравнения расстояния, вы предлагаете три. Экономично)
30

» Love2D / Lua за 15 минут

prog, это же уровень памяти, а написано так, что можно подумать
s = 'one'
s = 'two'
print(s) --> one
30

» Love2D / Lua за 15 минут

Кто хочет конкретики, пусть читает документацию.
Тогда получается, что статьи не нужны)

Я кстати не понял вот этого
s = 'walternate'  --строки неизменны (нельзя переназначать) как в Рython'e
Хотя код ниже прекрасно исполняется
s = 'one'
s = function()
	return 'work'
end
print(s()) --> work
30

» Love2D / Lua за 15 минут

-- Следующее выражение подобно конструкции a?b:c в C/js:
С тернарным оператором в луа проблема

И не сказано про замыкания и области видимости.
30

» WarCraft 3 / Официально стал доступен PTR 1.31

чтобы установить уровень способности 5, нужно писать число 4
Ну дык в этом и заключается zero indexed.
30

» WarCraft 3 / Официально стал доступен PTR 1.31

Может они заодно и сами эти нативки починят
Именно эта нативка работала, а вот SetUnit*Field досихпор не работают, но зато zero indexed))
30

» WarCraft 3 / Использования юнита как снаряд

у эффектов есть недостаток в отсутствии интерполяции для них
Как ни пытался разглядеть, так и не увидел разницы. Зато эффект можно вращать в трёх направлениях и для движка он легче.
30

» WarCraft 3 / Официально стал доступен PTR 1.31

А были нативки которы не начинали с нуля?
BlzGetUnitDiceNumber(whichUnit, weaponIndex) например.
30

» WarCraft 3 / Способности и алгоритмы на заказ

8gabriel8, там тоже через скрытый предмет реализовано. Я такой подход в этом заклинании использовал.
30

» WarCraft 3 / Использования юнита как снаряд

ну снарядов могут быть множество
Мы тут недавно плодили по 700+ снарядов без проседания fps.
а jass мне сложно дается
Так переходите на lua. На гуи вы больше утечек наплодите.
30

» WarCraft 3 / Использования юнита как снаряд

antonpoganui, что вы так к отряду по области привязались, сравнить расстояние религия не позволяет?
function DistanceBetweenWidgets takes widget widgetA, widget widgetB returns real
    local real dx = GetWidgetX(widgetB) - GetWidgetX(widgetA)
    local real dy = GetWidgetY(widgetB) - GetWidgetY(widgetA)
    return SquareRoot(dx * dx + dy * dy)
endfunction
30

» WarCraft 3 / Использования юнита как снаряд

юнит не должен иметь хп бар + некликабельный вообще и выбирался в отряд по области
Самый надёжный способ - москиты, но по области они не выбираются.
antonpoganui:
но мне кажется это сильно напрягает процессор
Чтоб не напрягался процессор, используйте оптимизации. Иного выбора нет.
8gabriel8:
Ещё можешь выбирать без области, а просто всех юнитов игрока такого-то типа, так выбираются Москиты.
call GroupEnumUnitsOfPlayer(g,GetTriggerPlayer(),f1) //ловит всех-всех юнитов игрока на карте. Москитов ловит нормально.
30

» WarCraft 3 / Использования юнита как снаряд

Принятый ответ
//call GroupEnumUnitsInRange(g, x, y, 400., f) //ловит всех юнитов, находящихся в радиусе от точке, но москитов не ловит
//call GroupEnumUnitsInRangeCounted(g, x, y, 400., f, 4) //аналогична GroupEnumUnitsInRange, но берет определенное кол-во юнитов. Москитов не ловит
//call GroupEnumUnitsInRangeOfLoc(g, loc,400., f) //аналогична GroupEnumUnitsInRange. Москитов не ловит.
//call GroupEnumUnitsInRangeOfLocCounted(g, loc,400., f, 4) //аналогична GroupEnumUnitsInRangeCounted. Москитов не ловит.
//call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea ,f1) //ловит всех юнитов в области. Москитов не ловит.
//call GroupEnumUnitsInRectCounted(g,bj_mapInitialPlayableArea ,f1, 4) //ловит определенное кол-во юнитов в области. Москитов не ловит. 
//call GroupEnumUnitsSelected(g,GetTriggerPlayer(),f) //ловит юнитов. выделенным игроком. Москитов. очевидно. не ловит.
call GroupEnumUnitsOfPlayer(g,GetTriggerPlayer(),f1) //ловит всех-всех юнитов игрока на карте. Москитов ловит нормально.
//call GroupEnumUnitsOfType(g,"Peasant", f) //ловит всех-всех юнитов с этим именем. Нужно писать английский аналог название (например работник = Peasant). Ловит москитов.
//call GroupEnumUnitsOfTypeCounted(g,"Peasant", f, 4) //ловит опреденное кол-во юнитов группу. Ловит Москитов.
Если вам нужно столкновение снарядов, то можете посмотреть в этом заклинании.
стоит стена (стена может двигаться, она может быть любого типа, она тоже москит) в нее ударяется снаряд
Добавляете стену в группу и при переборе сверяете расстояние.
30

» WarCraft 3 / Как переходить на lua?

Если с анонимной функцией непонятно, можно переписать так
А чем do ... end не устраивает?
do
    math = {}
    math.pi = 3.14 --паблик
    local secretvar = 42 --приват

    function math.abs(a)
        if a >= 0 then
            return a
        else
            return -a
        end
    end
end
30

» WarCraft 3 / Юнит цель применяемой способности

Принятый ответ
Komkozavr, русские триггеры несут зло
В вашем случае искомое здесь
Загруженные файлы