Заведомом создаю тему не в том разделе, ибо "У вас недостаточно прав для этого действия" в нужном разделе. Надеюсь админ или модер переместить в нужный раздел.
Тема для новичков
Синтаксис: ГУИ
Необходимые материалы: редактор World Editor, базовые знания по редактору WE3, базовые знания английского или умение пользоваться переводчиком (словарем), хотя бы 1 палец на одной руке, клавиатура, мышь, голова неа плечах, терпение и усидчивость.
Описание на базе WE3 Англо-русский вариант - категории в триггерах русские, текст дейсвтий - английские. Часть первая: Основные понятия и "с чем мы работаем"
Мультибоард (от англ. Multiboard - "много-доска" - таблица) - таблица используемая для отображения практически любых данных во время игры на картах WarCraft III.
Строка - значения в мультибоарде в пределах высоты 1 значения в таблице по горизонтали.
Столбец - значения в мультибоарде в пределах ширины 1 значения в таблице по вертикали.
Ячейка - место пересечения конкретной строки и конкретного столбца, включающее одно значение в таблице.
В редакторе WarCraft III для создания мультибоарда используется общая категория действий "Меню паузы" (в других версиях может отличатся). Выбрав соответсвующую категорию и нажав на строку можно увидеть весь список действий.
http://pikucha.ru/i48Sc
Часть 2. Оипсание основных действий или "да что, черт возьми, происходит!"
В этой части я дам описание всем основным действиям возможным с мультибоардами.
Итак поехали:
Create - создает таблицу с требуемым количеством колонок и строк, и указаным названием.
Destroy - уничтожает указанную таблицу
Show/hide - показывает/прячет указанную таблицу
Show/hide all Multiboards - показывает/прячет все таблицы
Minimize/maximize - сворачивает/разворачивает указаную таблицу
Clear - очищает указаную таблицу (очищает, то есть удаляет все колонки и строки)
Change Title - изменяет название указаной таблицы на "название"
Change Title Color - изменяет цвет названия указанной таблицы на параметры (Красный канал, Зеленый канал, Синий канал) с прозрачность %
Change Number of Rows - изменяет количество строк в указанной таблице на "количество строк"
Change Number of Columns - изменяет количество колонок в указанной таблице на "количество колонок"
Set Item Display Style - изменяет в указаной таблице параметры отображения в указанной колонке и указанной строке текста[вкл/выкл] и иконок[вкл/выкл]. (если указать для колонок значение 0, то ббудет действовать на все колонки, если указать для строк 0 то будет действовать для всех строк)
Set Item Text - изменяет текст в указаной таблице указанной колонке и указаной строке на "текст" (если в строке или в колонке указать 0, то будет действовать для всех строк/колонок)
Set Item Color - в указаной таблице , указаной колонке и строке изменяет цвет на (Красный канал, Зеленый канал, Синий канал) с прозрачность % (указания нуля в колонке или строке переносит дейсвтие на всю колонку/строку)
Set Item Width - изменяет размер в указаной таблице у указной колонки, строки на указаный % от ширины экрана
Set Item Icon - изменяет в указаной таблице в указаной колонке, строке иконку на "указаную"
Что ж, действия все и пояснения по ним, надеюсь, достаточно подробные. Кроме того к таблицам применимы переменные типа "меню паузы", а так же любые другие, которые содержат иконки, которые можно перевести в текстовый формат (интеджер, риал, и др.). Вот теперь, зная все действия можно приступать к созданию мультибоарда.
Часть 3. Создаем мультибоард по типу "Таблица рекордов".
Больше всего данная часть нужна для описания механизма создания, и для того, что бы можно было с чем то сравнить, возможно, кому то более знакомым,чем мультибоард.
И так с чего начать:
Шаг 1: Для начала нужно создать таблицу, содержащую имена игроков, значения их убийств (пусть это будут именно убийства, так проще), ну и в принципе все.
Тут возникает первая проблема: сколько создавать колонок и строк?
Колонок в принципе понятно: имя да убийства - значит 2. А строк?
Здесь есть два варианта реализации: во многих случаях, что бы не мучаться с пересчетом всех активных плееров создают просто таблицу для всех плееров, а на месте не играющих заполняют её прочерками (или нулями, на свой вкус).
Я рассмотрю случай с пересчетом игроков:
И так у нас есть карта, в ней играю максимум 8 игроков, при запуске хост поставил 1 компьютера и к нему зашло еще 2 игрока: всего 4. При этом заняли они места не подряд (то есть, красный, синий, сине-зеленый, фиолетовый), а раскидались по цветам "случайным" порядком.
Для начала нам потребуется переменная целочисленная в которую мы сосчитаем количество игроко, пусть это будет "NumbersOfPlayer"
Создаем триггер с событием :
Time Elapsed 0,01
Условий нет
Действия:
Цикл по "А" от 1 до 8
В цикле проверка на то, что бы игрок был человеком и слот игрока был занят играющим
Если условия выполнились увеличиваем значение переменной NumbersOfPlayer на 1
На нет: "...и суда нет"
http://pikucha.ru/i48Uq
Хорошо, теперь мы получили количество игроков, и смогли записать это количество в переменную. Теперь мы знаем, что количество строк в таблице будет = NumbersOfPlayer (или можно его увеличить еще на 1, и сделать вверху таблицы строку, с надписями "Имя игрока" и "количество убийств")
Теперь можно смело создавать таблицу:
Событие: прошло 0.02 секунды
Действие: Создаем таблицу с 2 колонками и NumbersOfPlayer строками.
http://pikucha.ru/i48UH
Осталось вписать в таблицу имена игроков и начать заполнять колонку с "убийствами". Но как же теперь это сделать? У нас в таблице всего 3 строки, а игрок под номером 8 никак не хочет лезть в тиблцу на строку соответствующую индексу игрока. Да и как же мы будем заполнять колонку убийств?..
Столкнувшись с подобной проблемой, многие наччинающие МэпМэйкеры просто переходят к первому варианту создания таблицы, и заполняют пустые ячейки прочерками. Далее я раскажу вам один из вариантом обойти эту проблему и писать кому нужно, что нужно.
Итак приступим: для того, что бы запомнить какой игрок в какой строке оказался в таблице достаточно создать переменную-массив типа целочисленная на 8 ячеек. В массив, как можно было уже догадаться, будем записывать номера строк, в которой записан конкретный игрок. Скажем пусть наши игроки оказались на цветах Красный(1), Фиолетовый (4) и Розовый(8), компа сразу не учитываем и отбрасываем.
Самый простой вариант заполнить массив "Номеров ячеек" при пересчете игроков.
http://pikucha.ru/i48Vi
Итак, теперь для каждого игрока мы точно знаем его место в таблице и ни за что не перепутаем его
Теперь записываем данные в таблицу:
http://pikucha.ru/i48Vp
Наверное не очень хорошо смотрится вся эта конструкция с точки зрения оптимизации (да, по правде говоря я и сам не так делаю) но это нужно, для того, что бы объяснить порядок действий при создании и записи данных в мультибоард.
Итак: мы имеем таблицу, в верху в ней написано "Количество убийств" в ней записаны имена игроков, и в ней (в нашем примере) 3 строки. Она корявая: все колонки одинакового размера, имена игроков не влазят: да и в колонке с килами, вряд ли влезет что то болше 1 цифры.
Избавляемся от этой проблемы:
для этого добавлем действия, для изменения размеров ячейки:
http://pikucha.ru/i48VE
Вот теперь красиво: даже самый длинный ник войдет
Решаем следующую задачу: нужно записывать значения килов для каждого игрока. В этой статье я предлагаю использовать еще один массив (вообще очень люблю массивы ), в который мы будем писать наши килы. Итак массив на 8 ячеек, опять таки целочисленный, назовем его Kills.
Далее создадим триггер, в котором будем отслеживать убийства и сразу же записывать их в таблицу:
С. Юнит умирает
Д. Set Kills[(Player number of (Owner of (Killing unit)))] = (Kills[(Player number of (Owner of (Killing unit)))] + 1)
Меню паузы - Set the text for (Last created multiboard) item in column 2, row PlayerMBNumber[(Player number of (Owner of (Killing unit)))] to (String(Kills[(Player number of (Owner of (Killing unit)))]))
http://pikucha.ru/i48W7
Ну вот в общем то и все Таблица создана, значения будут заполнятся каждый раз когда кто нибудь из игроков кого нибудь убьет
Хм, но у нас еще иконки какие то висят... Пусть в первой колонке будут иконки героя, а во второй колонке их не будет: очень просто доаполняем триггер создания 1 действием:
Меню паузы - Set the display style for (Last created multiboard) item in column 2, row 0 to Показать text and Спрятать icons
Для записи иконок героев нужно будет создать еще один триггер, который будет отслеживать первое вхождение героя в игру, а затем переписывать значение его иконки в таблице действием:
Меню паузы - Set the icon for (Last created multiboard) item in column 1, row "Строка игрока, который получил героя" to "Иконка героя, которого выбрал игрок"
С этим, надеюсь, читатель справится теперь сам
Это все, что я хотел сказать по мультибоардам, надеюсь новичку мэпмейкеру она окажется в жилу
Хороших мультибоардов и известности вашим проектам
Добавлено (07-02-2011, 22:05)
---------------------------------------------
я бы с картинками все вставил да только "Найдены запрещенные BB коды" ...