[Статья] Как делать МУИ спеллы. - Wc3-Maps Форум













[ Главная · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Strateg, Melissa  
[Статья] Как делать МУИ спеллы.
-
влад10011Дата: Пятница, 04-01-2013, 12:15:53 | Сообщение # 1

загрузка наград ...
Группа: V.I.P.
Сообщений: 1265
Репутация: 1039
Статус: Не на сайте
ТЕОРИЯ

[скрины добавлю, когда я смогу перебороть лень и наконец, таки включить редактор, который уже несколько месяцев пылиться]
[поскольку скринов нет, разделять циклы и выборы юнитов я буду блоками begin и end(начало и конец) ]
[комментарии я буду пихать в блоки "[ ]" ]
---------------------------------------------------------------------------------------------------------------------
Чтобы начать....

1)Чтобы статья была более понятна, установите русификатор триггеров, его я прикрепил к статье. (кидаем в UI)
2)Прочитать что такое массив переменных в википедии
----------------------------------------------------------------------------------------------------------------------
Если вы программист, то вам вопросег:

Зачем вам эта статья? chan
----------------------------------------------------------------------------------------------------------------------
Для начала объясню как это всё происходит:

Вы ни разу не задумывались как можно перебрать все элементы любой переменной массива?
К примеру у вас есть 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

Это уже похоже на настоящий МУИ спелл.
Сейчас я вынужден удалиться, через определённое время продолжу....

Look at my horse!
Прикрепления: TriggerStrings.zip (46.2 Kb)
 
-
BARSIKДата: Пятница, 04-01-2013, 12:19:52 | Сообщение # 2
Темный рыцарь

загрузка наград ...
Группа: V.I.P.
Сообщений: 1399
Репутация: 326
Статус: Не на сайте
Молодец. Ты ведь мне обещал. Я помню.
Статью еще надо допиливать...
 
-
mpSheogorathДата: Пятница, 28-03-2014, 12:52:17 | Сообщение # 3
Упорт

загрузка наград ...
Группа: Избранные
Сообщений: 614
Репутация: 766
Статус: Не на сайте
Нормально но jazz для меня тяжелый ...
эээ пес, чо нада
 
-
ImbaДата: Пятница, 28-03-2014, 14:35:41 | Сообщение # 4
КотЭ

загрузка наград ...
Группа: V.I.P.
Сообщений: 1395
Репутация: 1289
Статус: Не на сайте
это GUI...
и да правильнее говорить Jass

 
  • Страница 1 из 1
  • 1
Поиск:
Рейтинг@Mail.ru
Яндекс.Метрика

Copyright © 2010-2017
Вакансии :: Контакты
Мобильная версия сайта
chat