Форум портала о WarCraft Форум портала о WarCraft
порно чат

Вернуться   Форум портала о WarCraft > Вселенная WarCraft > World Editor > Статьи
Регистрация Справка Пользователи Календарь Поиск Сообщения за день Все разделы прочитаны

Закрытая тема
 
Опции темы Опции просмотра
Старый 14.02.2010, 23:27   #1
VAV
Pandora Directive
 
Аватар для VAV
 
Регистрация: 04.09.2002
Адрес: Area 404
Сообщений: 3,611
VAV как роза среди колючек VAV как роза среди колючек VAV как роза среди колючек
Отправить сообщение для VAV с помощью ICQ
По умолчанию Основы JASS.

Основы JASS.



В этой статье я расскажу о языке JASS (или скрипте) в Warcraft'e 3. Для прочтения статьи необходимо знать хотя бы основы программирования на любом языке (понятие 'переменная' пояснять не буду! ). Также необходимое знание триггеров в Варкрафте.


Что такое JASS?

JASS - это специально разработанный Blizzard язык для Варкрафта. Программа на JASS есть в каждой карте Варкрафта, функции AI также написаны на этом языке. Скрипт (понятие для War3) - любая программа, написанная на языке JASS. Главный скрипт запускается сразу после выбора карты в игре или открытии ее в редакторе. За то время пока карта "грузится" W3 или WE читают и выполняют скрипт - создают юнитов / погодные эффекты на карте, ассоциируют звуки, устанавливают музыку. Когда этот процесс заканчивается, редактор / игра начинают выполнять часть скрипта, связанную с самим игровым процессом.
Почему я говорю - часть скрипта, а не триггеры? Дело в том, что триггер - все - лишь переменная в памяти определенного типа, с которой связаны одна или несколько функций. Обычно, когда говорят слово "скрипт", имеют в виду не главный скрипт карты, а какую-то конкретную функцию или их набор. В этом плане такое определение аналогично понятию "текстовый триггер", который представляет из себя несколько функций, выполняющих конкретную задачу.
Скрипт недоступен для редактирования из WorldEdit - редактор позволяет только косвенно вносить изменения, например, при создании триггеров, переменных или юнитов. Единственный способ вручную редактировать скрипт - распаковать карту при помощи WinMPQ и отредактировать. Единственная возможность в редакторе - перевод триггера в Custom Text из меню Edit. В этом случае можно редактировать только функции одного триггера.

Итак, зачем вообще это все нужно? Если можно обойтись редактированием карты стандартными средствами? В этом случае вы получите стандартные возможности, не более того. Используя JASS, можно просто реализовать идеи, которые в редакторе принципиально недоступны. Даже если можно придумать замену, используя редактор триггеров, реализация получается очень сложной. Зная JASS, можно часть триггеров сделать обычными, а некоторые - текстовыми. Так очень многие и делают. Полностью редактировать скрипт имеет смысл только при глубоком знании JASS и только после того, как карта полностью отредактирована. WorldEdit (далее WE), скорее всего, не откроет карту с отредактированным вручную скриптом. Далее будут приведены и рассмотрены примеры - что можно достаточно просто сделать на JASS. Попробуйте сделать такое на обычных триггерах - даже если это возможно, то реализовать будет очень и очень сложно.

Главный скрипт хранится в пользовательской карте в виде отдельного файла с именем MapName.j, где MapName - имя карты. Для тех, кто не знает - w3m - это MPQ архив и состоит он из нескольких запакованных файлов. В качестве дополнения к скрипту идет отдельный файл, который помогает World Editor'у раскладывать скрипт на триггеры для редактирования в окне Trigger Editor. Если файл поврежден или его нет в архиве MPQ, редактор не дает открыть карту. На этом основаны многие защиты карт от постороннего вмешательства. Хе-хе, однако для пользователя, знающего скрипт, изучение файла *.J может дать очень очень много полезной информации Кроме того, в главном MPQ архиве игры хранятся библиотеки JASS и алгоритмы AI. Их можно посмотреть, распаковав архив WinMPQ. Функции из этих библиотек используются во всех картах.

Сейчас я опишу структуру j - файла любой карты (в библиотеках другая структура):

// ----------------------- Начало файла ---------------------------------

// Определения типов - рассматривать не буду, это не нужно
// т.к. используется только в библиотеках.

globals
// Здесь находятся определения всех глобальных переменных,
// т.е. переменных, видных из любой функции в скрипте.
endglobals

// Здесь находятся определения всех функций, кроме main()
// и config()

function main takes nothing returns nothing
// Функция, инициализирующая все остальные (кроме config())
endfunction

function config takes nothing returns nothing
// Функция, устанавливающая описание карты, заставку и
// другую информацию, которая видна до запуска карты.
endfunction

// ------------------------ Конец файла ---------------------------------

А теперь немного пояснений. Возьмите любую карту в редактое, зайдите в меню - File - Export script и сохраните скрипт в файл с расширением *.j. Это и будет тот самый файл - он послужит хорошим наглядным примером к этой статье. Обратно засунуть его без редактора MPQ будет невозможно. По первое время это не понадобится. В этом примере приведены самые важные функции, без остальных можно теоретически обойтись , но это только теоретически. Перечислю все по - порядку:

1. globals / endglobals - между этими ключевыми словами находятся определения всех глобальных переменных в игре. В дальнейшем они будут доступны откуда угодно. Только не думайте, что здесь находятся переменные, которые определяет пользователь в редакторе переменных! Да, они тут есть, но составляют далеко не большую часть. Здесь находятся определения всех юнитов, регионов, звуков. Да, это все - игровые переменные и их возможно в дальнейшем менять. Эта возможность очень ограничена у пользователей обычного редактора! Если вы создали скрипт при помощи редактора (как бывает в 99.999% случаев), то в этом разделе переменные будут инициализироваться, т.е. будут определятся их имена, тип и резервирование минимального количества памяти для данного типа. Установление их начальных значений будет производится позже.
Программе без разницы, как будут называться переменные (конечно, они должны состоять только из разрешенных символов), но принята определенная классификация по названиям (редактор WE - World Editor сам классифицирует переменные) - так легче по названию понять, что из себя переменная представляет. Существуют два класса:
1). Global Generated - Сгенерированная глобальная переменная. Название такой переменной начинается с gg_, например, gg_trg_MyTrig. Обычно эти переменные создаются редактором и к ним относятся:
a) Юниты - gg_unit_
b) Регионы - gg_rect_
c) Звуки - gg_snd_
d) Триггеры - gg_trig_
Пример: gg_trig_MyTrig _ по названию ясно, что это триггер.
2). User-Defined Global - Глобальная переменная, созданная пользователем (те переменные, что создаются в редакторе переменных). Эти переменные начинаются с udg_ независимо от типа (Пример: udg_MyVar). Т.е. переменная, созданная вами в редакторе и названная MyVar, во всех скриптах / текстовых триггерах будет называться не MyVar, а udg_MyVar!!! Крайне желательно придерживаться такой классификации (да и поначалу по-другому не выйдет, так как редактировать сам файл скрипта вручную следует только в необходимых случаях, в основном можно обойтись использованием текстовых триггеров). Подробнее о переменных, их типах, создании и присвоении я расскажу далее.

2. Определения функций - здесь находятся все прочие функции - пользовательские, созданные редактором - этот раздел обычно самый большой (если триггеров на карте много)
Про функции тоже расскажу в следующей статье.

3. Функция main() - ничего не берет, ничего не возвращает (а зачем ей это, если она самая главная? ) - эта функция служит для инициализации всех остальных и запускается в двух случаях - когда пользователь запускает карту из игры или открывает ее в редакторе.

4. Функция config() - судя по названию понятно, что она делает. Предназначена для установления на карте описания, автора, групп игроков и т.д. - то есть всей информации, которая используется до запуска карты.

Автор: Cacodemon
© WC3.RU, 2002-2010 гг
Нашли ошибки и недоработки в статье? Сообщите нам в раздел Поддержки! С уважением, WC3.RU
__________________
Смотри подругому !
VAV вне форума  
Старый 14.02.2010, 23:33   #2
VAV
Pandora Directive
 
Аватар для VAV
 
Регистрация: 04.09.2002
Адрес: Area 404
Сообщений: 3,611
VAV как роза среди колючек VAV как роза среди колючек VAV как роза среди колючек
Отправить сообщение для VAV с помощью ICQ
По умолчанию Ответ: Основы JASS.

Другие статьи:

Основы JASS.
JASS - Общие понятия.
Синтаксис JASS.
JASS - Библиотечные функции. Часть 1.
JASS - Библиотечные функции. Часть 2.
JASS - Операторы.
JASS - Выражения
vJASS - Комментарии.
JASS - Функции
JASS - Типы
JASS - Заключение.
Faq по созданию рельефа.
Зачем так много триггеров?
Немного об оптимизации кода.
Текстовые триггеры
Создаем простейшие карты (карты для melee)
Событие с переменным периодом.
Познаем триггеры (Triggers)
Познаем регионы (locations)
Познаем переменные...
Отлавливаем двойной клик мышью.
Массивы и циклы в обычных и текстовых триггерах
Локальные переменные в Custom Text
Камеры, спецэффекты, карта, цвета, кэш...
Добавление своих функций в триггеры
Добавление своих моделей и др. в карту
Делаем очень большую карту...
Делаем огнемет.
Улучшенная версия огнемета...
Глюки worldeditor'a
Random с задаваемой вероятностью - аура.
__________________
Смотри подругому !

Последний раз редактировалось VAV, 12.08.2010 в 14:30.
VAV вне форума  
Закрытая тема


Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +4, время: 14:23.

Design Developed by CompleteGFX
vBulletin® Version 3.6.7.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot