Добавлен , опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
Zinc
Тип:
Способность
Версия Warcraft:
1.26+

Сон AOE

MUI: да
Импорт: иконка
Утечки: нет
Даммики: 1 (Нейтрально пассивный)
Требования: JNGP

Видео

Установка

  • импортировать SpellSleepAOE.zn
  • скопировать юнита dumy dummy
  • скопировать способности: SUsl Сон (герой), CUsl Сон (дамми)
`
ОЖИДАНИЕ РЕКЛАМЫ...
2
28
5 лет назад
2
Для определения того, жив ли юнит, лучше использовать UnitAlive или GetWidgetLife.
7
23
5 лет назад
7
не актуально создавать массив когда вызываете getRange
1
28
5 лет назад
Отредактирован PT153
1
pro100master:
не актуально создавать массив когда вызываете getRange
Поддерживаю, бредово, либо сделать через вычисления (100 + level * 100), либо через инициализацию библиотеки.

Ещё стоит добавить, что лучше не использовать строчные приказы.

С Zink не так сильно знаком, но на JASS я бы написал так.
Вариант из ресурса
            while(true){
                u = FirstOfGroup(g);
                if (u == null) { break; }
                DummyCastBuff(GetTriggerUnit(), u);
                GroupRemoveUnit(g, u);
            }
Мой вариант
            loop
                set u = FirstOfGroup(g);
                exitwhen u == null
                call GroupRemoveUnit(g, u)
                call DummyCastBuff(GetTriggerUnit(), u)
            endloop
Потому что мне кажется, что while(true) превращается в exitwhen (not true), но это не точно.
2
29
5 лет назад
2
Для определения того, жив ли юнит, лучше использовать UnitAlive или GetWidgetLife.
Я как-то привык по старинке. Можно вынести функцию isUnitAlive вверх и позволить людям выбирать реализацию.
не актуально создавать массив когда вызываете getRange
С удовольствием написал бы
constant integer Range[] = [100, 200, 300];
но увы, пускать новичков ниже блока onInit не сильно хочется.
PT153:
С Zink не так сильно знаком, но на JASS я бы написал так.
Не так уж страшно он компилится
            loop
                set u=FirstOfGroup(g)
                if (u==null)then
                    exitwhen true
                endif
                call SpellSleepAOE___DummyCastBuff(GetTriggerUnit(),u)
                call GroupRemoveUnit(g,u)
            endloop
А в идеале хотелось бы написать
while(u = FirstOfGroup(g) != null){
	DummyCastBuff(GetTriggerUnit(), u);
	GroupRemoveUnit(g, u);
}
0
28
5 лет назад
0
С удовольствием написал бы
Я думаю, что реализация с вычислением лучше всего. А так, этот массив можно сделать глобальным, а нужные значения записывать в инициализаторе библиотеки.
Не так уж страшно он компилится
Хорошо.
Я как-то привык по старинке. Можно вынести функцию isUnitAlive вверх и позволить людям выбирать реализацию.
UnitAlive нужно сначала определить, ибо она есть в common.ai. Потому способ с GetWidgetLife лучше в данной ситуации: не нужно что-то определять и работает быстрее GetUnitState.
И приказ лучше написать численный, а не строчный, но это уже мелочи.
0
29
1 год назад
0
Вышла новая версия!
  • Переписан код
  • Добавлен гитхаб
  • Добавлена иконка
  • Добавлена проверка коллизии
Чтобы оставить комментарий, пожалуйста, войдите на сайт.