WarCraft 3: Практика

Всё о Multiboard'ах

Практика

Действия я подробно расписывать не буду, т.к. если вы внимательно хотя бы 2 раза прочитали “теорию” у вас не должно возникнуть с этих проблем, и вы должны постараться справиться сами, т.к. практика учит быстрее теории.
В конце статьи прикреплен файл, с уже сделанным MultiBoard’ом, о котором будет идти речь. Вы можете просмотреть его, НО!! Суть практики не в том, чтобы смотреть уже сделанную работу, а в том, чтобы самим ее сделать. Настоятельно рекомендуется сначала попробовать самим, хоть даже если это и покажется сложным.
Рассмотрим создание multiboard’a, который будет отображать, жив юнит или мертв, и если он мертв, то будет показано, через какое время он воскреситься.
Сначала попробуйте сделать MultiBoard сами, прочитав только его описание и руководствуясь этой картинкой (на ней изображено что должно получится).
если вы сможете его сделать, то читать практику необязательно, но можете скачать прикрепленный файл для сравнения.
Если не получилось - прочитайте инструкцию. Смысл инструкции в том, что она не указывает, какие действия надо ставить, а только говорит, каков эффект будет от данного действия. Вы прочитали теорию, и должны знать, какое действие поставить. Если все равно не получается - смотрите пример.

Состояние юнита

Создадим простейший MultiBoard

Инструкция

Для начала создадим карту, удалим все действия из триггера “Initialization”, и первое, что поставим - это “Wait 0.1”. После этого создаём MultiBoard c 2-я столбцами и 3-я строчками, назовем этот MultiBoardСостояние юнита”.
Далее можно пользоваться циклами, но так как предполагается, что читатель – новичок, будем делать без циклов - просто по порядку.
(Чтобы было меньше писать столбики и строчки будем обозначать так: x-y, где X- столбцы, Y – строчки.)
Далее делаем, чтобы в позициях 1-1, 1-2, 1-3, 2-1, 2-2, 2-3, скрывалась иконка, но показывался текст.
Далее:
**Действия:**
-на позицию 1-1 припишем текст “**Имя**:”
-на позицию 2-1 припишем текст “**Состояние:**”
//Мультиборд у нас будет в виде таблицы, и выше перечисленные тексты будут являться заголовками столбцов.
-на позицию 1-2 припишем текст “**Артес -**”
-на позицию 1-3 припишем текст “**Иллидан -**”
//Эти имена будут стоять в колонке "**Имя**", и они будут неизменны.
-на позицию 2-2 и 2-3 припишем текст “**Жив**”.
//Это будет стоять в колонке "**Состояние**", и они будут меняться по ходу игры.
//Следующее, что надо сделать, это оформить, определим расстояние для каждого текста:
-на позицию 1-1, 1-2, 1-3 делаем расстояние **5%**;
-на позицию 2-1, 2-2, 2-3 делаем расстояние **7%**;
//Сейчас у нас готов **MultiBoard**, но он крайне некрасив - все слова написаны белыми буквами.
//Так что следующий шаг - это !!дизайн!!:
-Цвет названия делаем красным (100%, 0%, 0%)
-Цвет текста (1-1 и 2-1) делаем синим (0%, 0%, 100%)
-Цвет текста (1-2 и 1-3) делаем зеленым (0%, 100%, 0%)
-Цвет текста (2-2 и 3-3) делаем желтым (0%, 100%, 100%)
Первый триггер у нас готов!
Далее поставим 2-х юнитов на карту рядом друг с другом (Артеса и Иллидана).
Создаем переменную-массив integer (целочисленная) OTC4ET.
Создаём следующий триггер:
**Событие** 
**Generic Unit Event**, !!Юнит умирает!!.
**В действиях**: Создаем 2 действия – **If / Then / Else, Multiple Functions**.
В первом ставим, что:
Если: **Умерший юнит = Артес**
То: 
Set OTC4ET (1) = 30
__//Далее без циклов тут не обойтись потому создаем цикл__
**For each (integer B) from 1 to 30, do (Actions)**
        **Цикл – Действия**
               __//Далее создаём в позиции 2-2 текст, используя пару функций__
               __(Делаем действие создание текста с функцией (Мертв(+((String(OTC4ET(1)))+сек.)))__
               __//Что это значит? Это означает что создастся текст “Мертв(" + "[текущее значение переменной OTC4ET(1)]" + "сек.)”__
               __//Далее, конечно же, ставим действие:__
               **Set OTC4ET (1) = OTC4ET (1) - 1**
               **Wait 1.00 game-time second**
__//На этом цикл закончился.__
(Создаем текст в позиции 2-2 “Жив”)
__//И ставим действие возрождение героя:__
**Герой – Instantly revive (Triggering unit at (Position of (Triggering unit), Показать revival graphics))**
__//Все__
//(В следующем действии (__If / Then / Else__) ставим ВСЕ ТО ЖЕ САМОЕ только заменяем в условии **Иллидана** на **Артеса**
//А во всех действиях создания текста в **MultiBoard**’е заменяем 2-2 на 2-3. И везде используем переменную не **OTC4ET(1)**, а **OTC4ETT(2)**.
Теперь запустите карту, и убейте любого юнита другим юнитом и посмотрите на Multiboardd. Всё отлично!
Надеюсь, вы поняли, как делать MultiBoard, ниже я выложил его пример.
Примечание: Действие - Wait, очень плохо работает, и если зделать через него промежуток в 30 сек, то он будет ждать не 30 сек, а совсем другое время но примерно равное 30, также лучше вместо него использовать таймер..
Также советую посмотреть эти наработки:
  1. Наработку Iron’а "Status Metr на Мультиборде"
  2. Мою наработку "Система характеристики юнита"
  3. Мою карту "Мультибордные танчики", правда чуть-чуть недоделанные.
  4. Мой "Вертикальный прогресс бар" . Он не для использования, а большей частью для примера, как создавать такие вещи... Но плохо в нём то, что расстояние между строчками не изменить.

Просмотров: 6 999

AlisherYch #1 - 5 лет назад 0
Спасибо за статью!
Но у меня возникли сложности ... Я создаю таймер или же часы в мультиборде, все отображается корректно, но не фиксируется ширина ячеек. Каждый раз когда меняются цифры меняется и ширина до минимума даже если постоянно указывать что ширина таких-то ячеек такая-то.
Как намертво зафиксировать ширину ячеек ?