ТЕОРИЯ
[скрины добавлю, когда я смогу перебороть лень и наконец, таки включить редактор, который уже несколько месяцев пылиться]
[поскольку скринов нет, разделять циклы и выборы юнитов я буду блоками begin и end(начало и конец) ]
[комментарии я буду пихать в блоки "[ ]" ]
---------------------------------------------------------------------------------------------------------------------
Чтобы начать....
1)Чтобы статья была более понятна, установите русификатор триггеров, его я прикрепил к статье. (кидаем в UI)
2)Прочитать что такое массив переменных в википедии
----------------------------------------------------------------------------------------------------------------------
Если вы программист, то вам вопросег:
Зачем вам эта статья?
----------------------------------------------------------------------------------------------------------------------
Для начала объясню как это всё происходит:
Вы ни разу не задумывались как можно перебрать все элементы любой переменной массива?
К примеру у вас есть 1 переменная-массив типа юнит с именем Unit и 1 переменная типа целочисленная Count
Пример работы с этими переменными:
В переменную Unit, мы будем записывать к примеру всех юнитов которые кастанули спелл(каждого в свою ячейку массива)
Переменная Count будет считать количество наших юнитов, которые кастанули спелл
[пока нету скринов триггера, буду писать так =_= ]
Код
Установить переменную Count=0[где-нибудь при инициализации]
Событие: Юнит применяет способность
Условия ---------------------------
Действия:
Установить переменную Count=Count+1 [увеличиваем счётчик наших юнитов на 1]
Установить переменную Unit[индекс Count]="применяющий юнит"
[Что мы сейчас сделали? Мы занесли юнитов, которые кастанули спелл, в нашу, так сказать "базу данных" и дали каждому юниту его номер]
[Сейчас нам нужно к примеру убить всех, кто в нашей "базе данных" разом, через 30 сек]
Ждать 30 сек
сделать цикл для переменной A от 1 до Count [пробегаемся по КАЖДОЙ ячейке в массиве Unit]
begin
Убить Unit[индекс А]
end
установить переменную Count=0 [не даём цифре Count бесконечно увеличиваться, тк массиву есть предел, и это 8191 ячейки]
То что получилось в итоге, так сказать и есть "МУИ"
-------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------
Понятие "структура" и работа с таймерами
Структура- это несколько массивов, у которых одинаковый номер ячейки.(сказал так, что любой должен понять, вроде....)
Например:
Структура юнита состоит из: Урон, защита, скорость, видимость и тд. тоесть, есть массивы: для Урона, защиты, скорости, видимости и тд.
Иначе к примеру:
Код
Damag[X]=123
Def[X]=5
Speed[X]=2
Scope[X}=500
И тд
Где X это уникальный номер юнита- его хендел(подробнее о хендле- юзайте гугл)
Тоесть массивы прикреплённые к структуре- это его свойства.
Давайте разберём прошлый пример, но в зависимости от типа юнита, ему будет предначертана либо убийство, либо взрыв.
Для этого создадим ещё одно "свойство", и это будет переменная массив типа логическая- Bool, которая определяет его смерть.
Пусть значение "да" будет взрывом юнита, а "нет" будет простой смертью.
Код
Установить переменную Count=0[где-нибудь при инициализации]
Событие: Юнит применяет способность
Условия ---------------------------
Действия:
Установить переменную Count=Count+1 [увеличиваем счётчик наших юнитов на 1]
Если Тип Применяющего Юнита==Крестьянин тогда:
begin
Установить переменную Bool[Индекс Count]=ДА [если он крестьянин- взорвать]
Иначе:
Установить переменную Bool[Индекс Count]=НЕТ [иначе просто- убить]
end
Установить переменную Unit[индекс Count]="применяющий юнит"
Ждать 30 сек
сделать цикл для переменной A от 1 до Count [пробегаемся по КАЖДОЙ ячейке в массиве Unit]
begin
Если Bool[Индекс A]==ДА тогда:
begin
Взорвать Unit[Индекс А]
Иначе:
Убить Unit[Индекс А]
end
end
установить переменную Count=0 [не даём цифре Count бесконечно увеличиваться, тк массиву есть предел, и это 8191 ячейки]
Таким образом можно устанавливать свои "свойства" к спеллам.
А вот теперь, к примеру нам нужно чтобы каждый юнит умирал через определённое время, при этом не путая их свойства ну и их самих.
Делаем следующее:
Создаём новую переменную массив типа реальная- Real
1ый триггер:
Код
Установить переменную Count=0[где-нибудь при инициализации]
Событие: Юнит применяет способность
Условия ---------------------------
Действия:
Установить переменную Count=Count+1 [увеличиваем счётчик наших юнитов на 1]
Если Тип Применяющего Юнита==Крестьянин тогда:
begin
Установить переменную Bool[Индекс Count]=ДА [если он крестьянин- взорвать]
Иначе:
Установить переменную Bool[Индекс Count]=НЕТ [иначе просто- убить]
end
Установить переменную Real[Индекс Count]=0.00
Установить переменную Unit[индекс Count]="применяющий юнит"
Если Count==1 Тогда
begin
Запустить триггер 2
end
2ой триггер[выключенный]
Код
Событие: каждые 1 сек делать действия
Условие: --------
Действия:
сделать цикл для переменной А от 1 до Count [перебираем все структуры]
begin
Если Real[Индекс А]<=30 тогда: [30 это через какое время спелл закончит своё действие для определённой структуры)
begin
Установить переменную Real[Индекс А]=Real[Индекс А]+1.00 [время тикает]
Иначе:
Если Bool[Индекс A]==ДА тогда:
begin
Взорвать Unit[Индекс А]
Иначе:
Убить Unit[Индекс А]
end
Если Индекс А не равно Count тогда: [перезаписываем переменные]
begin
Установить переменную Real[Индекс А]=Real[Индекс Count]
Установить переменную Unit[Индекс А]=Unit[Индекс Count]
Установить переменную Bool[Индекс А]=Bool[Индекс Count]
end
Установить переменную Count=Count-1 [уменьшаем счётчик на 1]
end
Если Count==0 тогда:
begin
Выключить этот триггер
end
end
Это уже похоже на настоящий МУИ спелл.
Сейчас я вынужден удалиться, через определённое время продолжу....