Переменные - Wc3-Maps Форум













[ Главная · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: Strateg, Melissa 
Wc3-Maps Форум » Раздел для картостроителей » GUI / Jass » Переменные
Переменные
-
AlisherДата: Четверг, 12-07-2012, 01:39:47 | Сообщение # 1
Раб

загрузка наград ...
Группа: Пользователи
Сообщений: 18
Репутация: 240
Статус: Не на сайте
Теория

Сперва я вообще не знал, что в редакторе триггеров есть какие-то переменные. Когда узнал, подумал: "Втф, зачем они нужны?". Но однажды стало понятно, что без них даже несколько квестов в своей карте не сделать! Давайте разберёмся, что же это такое.

Представим ситуацию. Мы делаем крутую карту вида RPG, и хотим намутить что-то типа MMORPG, вроде LA2 или RF Online, где игроку нужно убивать 100500 мобов для прокачки. Но мы, как истинные знатоки MMORPG, знаем, что унылое убивание огромного количества мобов подряд довольно скучно, поэтому решаем схитрить, и выделить игроку 10 квестов, в каждом из которых надо убить по 100 юнитов разных видов. Например, 1 квест на 10 гноллов, 1 квест на 10 огров и так далее. Мы их создаём, радуемся. После этого мы делаем триггер на выполнение квеста. Допустим, мы его сделали (забавно, что без знания переменных сделать условие выполнения такого квеста в общем-то нельзя, но мы утрируем). И вот мы выбираем действие выполнения квеста: "Засчитать (КВЕСТ) как выполненный". Тыкаем на КВЕСТ и что выбираем? Последний созданный квест. Хмм. Что-то не так! У нас есть 10 квестов, допустим, 10-м мы создали квест "Убить гноллов", но выполнили мы квест с ограми. Если мы выберем "Засчитать (ПОСЛЕДНИЙ СОЗДАННЫЙ КВЕСТ) как выполненный", мы сделам выполненным совсем не квест с ограми, а с гноллами! Вот тут-то и находится применение переменным.

Переменная, в отличие от стандартных предложений по выбору вроде "последний созданный квест", меняется ТОЛЬКО ТОГДА, когда вы САМИ сказали сделать это. Делается это с помощью действия "Set Variable". Но для начала переменную надо создать. В редакторе триггеров на панели кнопок находим жёлтый "икс", или же просто жмём на клавиатуре Ctrl+B (Ctrl+И). Появляется окошко с переменными, где пока пусто. Жмём зеленый "икс" с плюсиком "Новая переменная" (справа от неё кнопки редактирования и удаление переменных). Появляется еще одно окошко, где мы можем выбрать название и тип переменной. Галку с массивом и "Нач. знач." пока не трогаем. В случае квеста нам понадобятся типы "Задание" и "Условие задания". Мы знаем, что когда мы создаём квест, одним действием мы пишем его заголовок и описание, а другим конкретные задания вида "Убить 10 огров". Так вот, первое действие - это "задание", а второе - "условие задания". Название вы придумываете сами, только делайте их такими, чтобы можно было понять, что это такое. Например "Quest10Ogres" и "Quest10OgresR" ("Квест10огров" и "Квест10огровУ"). Вы сделали переменные, теперь их надо "привязать" к нужному квесту с помощью действия "Set Variable". Выбираем его, в Variable выбираем вашу переменную, в Value указываем, что будет являться вашей переменной. Ваши действия ранее выглядели так:

Создаём квест
Создаём условие квеста

Теперь же они должны выглядеть так:

Создаём квест
Set Quest10Ogres = (Последний созданный квест)
Создаём условие квеста
Set Quest10OgresR = (Последнее созданное условие квеста)

Теперь, когда наш игрок убьёт 10 огров, мы делаем действия "Отметить (Quest10Ogres) выполненным", "Отметить "Quest10OgresR" выполненным". И тогда окажется выполненным именно квест с ограми, а не с гноллами или еще кем-то.

Это не вся польза от переменных. Особняком от других типов переменных стоит тип "Целочисленная", она же 'Integer'. В ней хранятся целые числа. По самому слову "переменная" можно понять, что её можно менять. И это очень полезно, когда вам надо выполнить какое-либо действие определённое количество раз. Например, каждую минуту вывести текст "Привет всем!", но сделать это не более пяти раз. Мы создаём переменную типа "Целочисленная", называем её, допустим i, после чего делаем триггер:

Событие:
Каждые 60 секунд
Условие:
Integer Comparison -> i меньше 5
Действие:
Set i = i + 1
*Примечение к действию выше. Изначально наша переменная i равна 0. С помощью выше написанного действия мы при каждом запуске триггера прибавляем к i единицу. При этом триггер срабатывает ТОЛЬКО тогда, когда i МЕНЬШЕ пяти (благодаря нашему условию). Таким образом, триггер сработает ровно 5 раз. Теперь о том, как прибавить к i единицу. Для этого, тыкнув в 'Value', мы выбираем функцию 'Arithmetic', и видим 'Value + 1'. Тыкаем теперь уже это 'Value', где выбираем нашу переменную i.
Написать текст: "Привет всем!"

Всё довольно просто. Переменные дают нам много больший простор для действий, чем если бы мы их не знали. Например, приходилось бы давать игроку 2-й квест только по выполнению 1-го, чтобы не ломать "Последний созданный триггер", теперь же мы можем, благодаря переменным, давать игроку сразу хоть десяток заданий.

Практика

Два простых задания.

1. Сделать, чтобы в рамках одного триггера через 3 секунды после запуска карты в центре карты в распоряжение красного игрока вызывалось сначала 5 пехотинцев, затем 1 стрелок, а после этого 10 рыцарей (именно в таком порядке, промежуток между вызовами 1 секунда). Затем, через 10 секунд после вызова рыцарей установите размер стрелка на 200% (именно одного стрелка и никого другого).
2. На карте есть штук 20 гноллов одного типа, а также просто всяких монстров. Красному игроку можете дать сколько угодно армии. Сделать так, чтобы каждый раз (НО НЕ БОЛЕЕ ДЕСЯТИ РАЗ) при убийстве ИМЕННО гнолла ИМЕННО красным игроком всем игрокам на секунду отображалось какое-нибудь любое сообщение, пусть это будет "123", например.

Баллы - 0
 
-
AncientPenguinДата: Четверг, 12-07-2012, 07:24:05 | Сообщение # 2

загрузка наград ...
Группа: Избранные
Сообщений: 449
Репутация: 526
Статус: Не на сайте
Quote (Alisher)
Сделать, чтобы в рамках одного триггера через 3 секунды после запуска карты в центре карты в распоряжение красного игрока вызывалось сначала 5 пехотинцев, затем 1 стрелок, а после этого 10 рыцарей (именно в таком порядке, промежуток между вызовами 1 секунда). Затем, через 10 секунд после вызова рыцарей установите размер стрелка на 200% (именно одного стрелка и никого другого).


Это можно и без переменных.
 
-
влад10011Дата: Вторник, 24-07-2012, 22:26:11 | Сообщение # 3

загрузка наград ...
Группа: V.I.P.
Сообщений: 1265
Репутация: 1039
Статус: Не на сайте
я же написал статью о переменных зачем ещё???
Look at my horse!
 
-
AlisherДата: Понедельник, 30-07-2012, 09:02:03 | Сообщение # 4
Раб

загрузка наград ...
Группа: Пользователи
Сообщений: 18
Репутация: 240
Статус: Не на сайте
[quote=влад10011]я же написал статью о переменных[/quote]
Нуиче?

Баллы - 0
 
-
Sorinboss2Дата: Пятница, 21-09-2012, 14:50:17 | Сообщение # 5
Гражданин

загрузка наград ...
Группа: Избранные
Сообщений: 43
Репутация: 159
Статус: Не на сайте
Перемены очень важны при создание спелла, иногда и ролика.
 
-
SemenТалайДата: Пятница, 21-09-2012, 15:09:55 | Сообщение # 6
I.R.L.

загрузка наград ...
Группа: Заблокирован
Сообщений: 1954
Репутация: 916
Статус: Не на сайте
Sorinboss2, это уж точно.
Спасибо вам за все, ребята. Мне пора идти в свой путь. Желаю вам всем всего хорошего :)
 
-
PONTALДата: Вторник, 11-12-2012, 12:58:43 | Сообщение # 7
Ополченец

загрузка наград ...
Группа: Проверенные
Сообщений: 52
Репутация: 11
Статус: Не на сайте
Народ кто может с хэшом почомоь?С кжшом разобрался а от с хэшом полный мрак
 
Wc3-Maps Форум » Раздел для картостроителей » GUI / Jass » Переменные
Страница 1 из 11
Поиск:
Рейтинг@Mail.ru
Яндекс.Метрика

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