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

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

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

JASS - Общие понятия.




Глобальные определения

Мы определяем программу на JASS или скрипт как несколько *.ai или *.j файлов, которые образуют либо рабочие триггеры карты, либо AI скрипт.
Скрипт карты отвечает за инициализацию функций обратного вызова или, так называемых триггеров, которые срабатывают при определенном событии в игре. Вдобавок, скрипт, как правило, еще и инициализирует карту, создавая переменные начальных юнитов и устанавливая исходные параметры карты. Файлы, которые образуют скрипт карты это - common.j, Blizzard.j и war3map.j (загружаются в этом порядке).
Прим. переводчика: на английском "функция обратного вызова" переводится как Callback. А определение такой функции, есть функция, которая вызывает другие функции. Однако с некоторыми оговорками... Впрочем, это не имеет значения.
AI скрипт отвечает за постоянное "исполнение" построения зданий, заказ юнитов и атак для одного компьютерного игрока на карте. Файлы, которые составляют AI скрипт это - common.j, common.ai, и созданный пользователем AI скрипт (то есть, human.ai, elf.ai, и т.д.).

common.j, Blizzard.j и common.ai находятся в директории Scripts/ в главном MPQ, но они могут быть "подменены", если их положить в *.w3x. Фунции и переменные, которые находятся в этих файлах, мы определяем библиотечными, так как они загружаются во всех картах и AI скриптах. Читайте раздел Библиотечные функции для подробностей.

war3map.j находится в каждом *.w3x файле. Он автоматически генерируется редактором каждый раз, когда вы сохраняете карту (таким образом, если вы отредактируете файл напрямую, то он будет перезаписан). Тем не менее, вы можете редактировать его части прямо в редакторе, используя кнопку "Custom Text".
Прим. переводчика: именно то, что написано в скобках, дает много возможностей относительно того, как защитить карту. Но и это еще не все! Когда редактор сохраняет MPQ архив карты, то он его создает заного, и при этом сохраняет только те файлы, которые прописаны в listfile!

В добавление к этому, процитируем Брет Вуда (прим. переводчика: на самом деле я не знаю, кто это, но, если не изменяет память, это один из программистов Blizzard, который занимался именно редактором): "В редакторе триггеров [TFT], если вы выберете корневую директорию в древовидной схеме слева, вы можете написать свои скрипты в основном окне справа. Этот код будет включен в скрипт карты прямо перед всеми остальными триггерами. Это хорошее место для того, чтобы разместить там разные функции, которые затем можно будет использовать в разных триггерах. Теоретически, вы можете весь скрипт карты сюда написать (имеются в виду сами триггеры), и совсем не делать 'обычных триггеров' (хотя вам и прийдется использовать хотя бы один, чтобы вызвать ваш код)".

Учтите что переменные, которые вы создаете в редакторе переменных являются глобальными переменными. Тем не менее, когда редактор начнет генерировать код, он перенесет все названия переменных, прибавляя префикс udg_ и заменяя пробелы на нижнее подчеркивание _. Например, если вы создадите переменную, названную my unit group в редакторе переменных, то в скрипте она будет udg_my_unit_group.

В JASS скрипте есть несколько глобальных определений. Эти определения есть:
Описание (в смысле, объявления / создания) типов
Глобальные переменные
"Родные" (библиотечные) функции
Функции, создаваемые пользователем

В любом скрипте, все типы и глобальные переменные должны быть объявлены до всех пользовательских объявлений функций. В любом случае, вы не можете вызывать что-либо, что только будет объявлено (т.е., вы должны сначало создать тип, а только потом его "развлетвлять"; вы должны сначало определить глобальную переменную, а только потом использовать её в выражениях; вы должны сначало объявить функцию, а только потом вы её сможете вызывать, за исключением случая когда функция вызывает себя саму). Каждое объявление идет с новой строки (некоторые забирают по несколько строк).


Определение типов

JASS позволяет создавать новые типы следующим образом, где new_type это новый тип, а parent_type это уже объявленный тип, и новый тип будет являться его "подтипом". Читайте раздел Типы для подробностей.
code:
type new_type extends parent_type

В любом файле, типы должны быть определены до объявления функций.


Глобальные переменные

Есть два "вида" переменных в JASS: глобальные и те, что доступны только одной функции. К глобальным переменным можно обращаться в любой функции. Второй "вид" это функции, определенные в ней самой (проще говоря - локальные), и её параметры. Глобальные переменные определяются следующим образом:
code:
globals
type name = expression
type name = expression
type name = expression
...
endglobals

Все объявления переменных пишутся в разделе globals и каждый на новой строке. type это, как можно догадаться, - тип переменной. Это может быть либо простым типом, либо массивом типа, которые объявляются следующим образом: type array name. Читайте раздел Типы для подробностей. name это имя переменной, expression это изначальное значение, которое, кстати, не обязательно ставить. Читайте Выражения для подробностей.

Переменная не-массив может быть определена как константа, если перед объявлением написать constant. Это значит, что не возможно дать переменной другое значение, кроме изначального (т.е., в объявление обязательно надо писать изначальное значение, и нельзя использовать set с этой переменной).

Например, вот переменная (типа integer) которая инициализируется со значением 10:
code:
integer numberOfStuff = 10

А вот константа, значение которой множитель двух переменных:
code:
constant integer howManyUnits = numberOfGrunts * numberOfAttacks

Не иницилизированная строка:
code:
string someMessage

Массив юнитов. Массивы не могут быть иницилизированы.
code:
unit array listOfUnits

В любом файле, "блок" globals должен быть объявлен до всех функций, и может быть только один такой блок.


Native функции

Это те функции, которые встроены в движок Warcraft III. Они образуют интерфейс, который игра дает JASS кодерам. Вы, скорее всего, не будете создавать такие функции, за тем исключением, что вы имеете доступа к исходникам Warcraft III, но, скорее всего, вы будете их вызывать. Их примеры (вызова) есть в common.j, common.ai и Blizzard.j. Вот пример:
code:
native func_name takes param_list returns return_type

Где func_name это название функции, param_list - упорядоченный, разделенный запятыми список аргументов, которые должны быть переданны функции при вызове, а return_type - тип данных, которые вернет функция, их может и вовсе не быть. Если вместо param_list написать nothing, то это будет значить что функция без параметров; если вместо return_type написать nothing, то это будет значить что функция без параматров, а следовательно и не может быть использована в выражении.

Например, Native функция, которая берет строку и юнита, а возвращает ничего:
code:
native MakeUnitTalk takes string whatToSay,
unit targetUnit returns nothing

Native функции могут быть объявлены как константные. Читайте раздел фуркции для подробностей.


Пользовательские функции

Функция, созданная пользователем, похожа на native функцию, но у неё есть "тело" (body) в котором её описание (т.е., что она делает). Объявляется следующим образом:
code:
function func_name takes param_list returns return_type
variable_declaration
variable_declaration
...
statement
statement
statement
...
endfunction

"Тело" функции состоит из объявлений локальных переменных после которых идут выражения и т.д. (оба могут отсуствовать). Читайте раздел Функции для подробностей.

Функции также могут быть константными (ставится префикс constant).

Автор: Raz
© WC3.RU, 2002-2010 гг
Нашли ошибки и недоработки в статье? Сообщите нам в раздел Поддержки! С уважением, WC3.RU
__________________
Смотри подругому !
VAV вне форума  
Старый 15.02.2010, 00:09   #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:31.
VAV вне форума  
Закрытая тема


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

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

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


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

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