» Осваиваем jass | Sergey | 29200 | 18.06.05
» Раздел : WarCraft

Осваиваем jass
»    Локальные переменные
»    Условия и циклы в jass
»    Функции в jass
»    Устройство триггера в jass
»    События с малым периодом
»    Полярные координаты (ликбез)
»    Оптимизация: утечки памяти
»    Return Bug (RB)
»    Система Super Custom Value (SCV) или RB+cache
»    Послесловие
»    Приложение 1: проблемы Кеша и РБ
»    Приложение 2: JESP стандарт

\\

0. Вступление

Этот цикл статей посвящен изучению языка jass (создание текстовых триггеров, так называемых скриптов). Хотя про jass уже написано достаточное число статей, но многие картостроители все равно не желают его изучать. И я их вполне понимаю – для тех, кто не занимается программированием в тех статьях, которые имеются, разобраться довольно сложно. Не хватает некоторых базовых знаний, не понятно, с чего начинать и т.д.
Любой учитель знает, что излагать предмет надо поэтапно и в определенной последовательности. Я выбрал последовательность в том порядке, в котором сам когда-то начал осваивать язык jass. Так что триггерщики, которые до сих пор не решаются приступить к изучению jass, смогут проделать тот же путь.
Эти статьи я написал для одного своего друга триггерщика. И друг вполне оправдал мои ожидания - не прошло и месяца, как он стал jass-ером.
Для удобства, я буду обращаться в статьях к читающему – «Читатель». Надеюсь, что читатель уже неплохо овладел триггерами, знает, что такое переменные, массивы и циклы.
Содержание:
  1. Вступление
  2. Что есть jass и для чего он нужен
  3. Локальные переменные
  4. Применение локальных переменных
  5. Условия, циклы в jass
  6. Функции на jass
  7. Устройство триггера с точки зрения jass
  8. Динамическое создание триггера
  9. События с малым периодом
  10. Полярные координаты (ликбез)
  11. Оптимизация: утечки памяти
  12. RETURN BUG (RB)
  13. Тип Handle
  14. Система Super Custom Value (SCV) или RB+cache
  15. Да здравствует SCV!
  16. Послесловие
  17. Приложение 1: проблемы Кеша и РБ
  18. Приложение 2: JESP стандарт
Осваиваем JASS - исправления и дополнения - также рекомендуется для ознакомления.

1. Что есть jass и для чего он нужен

Итак, Читатель, мы приступаем к освоению jass. Прежде всего, я хочу, чтобы ты понимал, что jass не является чем-то сверхъестественным и необычным. Многое, из того, что нам предстоит изучить уже будет знакомо по триггерам. И неудивительно – ведь каждое триггерное действие имеет свой аналог на jass.
Дело в том, что blizzard создали свой миниязык программирования jass. Они хотели упростить работу по программированию сценариев и их правил. Но даже такой упрощенный язык слишком сложен для многих картостроителей. Поэтому был создан редактор Trigger editor – где вместо того, чтобы набирать команды вручную, можно создавать триггеры путем выбора команд из списка. В редакторе мы работаем с триггерами, но когда игра запускает определенный сценарий, она читает не триггеры, а КОД, который создается путем перевода всех триггеров игры на язык jass.
По сути триггеры – это надстройка для языка jass упрощающая ввод команд. Но при любом упрощении происходит потеря функциональности. Т.е. возможности программирования игры триггерами в чистом виде заметно меньше, чем при программировании при помощи jass.
Итак, jass дает картостроителю новые возможности. Но стоят ли они того, чтобы их изучать? Это уже каждый картостроитель решает для себя. Jass может помочь в следующих случаях:
  1. Упростить создание сложных триггеров и триггерных систем, которые позволят полностью или почти полностью поменять правила оригинальной игры.
  2. Создавать триггерные заклинания, у которых нет аналогов в оригинальной игре.
  3. Оптимизировать карту, сделать, чтобы сложные триггеры не тормозили игру.
  4. Вставить на карту некоторые команды на jass, которые не имеют аналогов для обычных триггеров.
  5. Создавать собственные AI, более гибкие, чем в редакторе AI.
У некоторых бытует мнение, что на jass в игре можно сделать все. Конечно же, это не так. Более того, я не рекомендую писать все триггеры сценария исключительно на jass. Для многих задач редактор триггеров подойдет лучше – ведь это действительно очень удобная штука.
» Комментарии (последние 50; показать все)

| » | 47 | 22:12 | 26.06.08 | NerZul09 [п]

Редок тут всё понятно если посидеть часик, другой а нетерпеливых не просят читать вообще.

| » | 48 | 22:52 | 12.07.08 | EmoAlex [п]

У мя ссылка на Magic Shield.w3x не идёт.. какие-то тексты показывает и не загружает.. кинеш plzz новую ссылку?
Короче, файлы с Magic Shield.w3x по paint.w3x неработают! Кто создавал их, прошу, перепишите, а то ничего непонятно без этих примеров... А статья просто высший класс! Я её за 2 дня прочитал, и фсё понял! Огромное пасибки создателям! Но карты с примерами...((

| » | 49 | 09:46 | 15.07.08 | EmoAlex [п]

Нууу! Поставте-же наконец эти примеры!! Вааще почти фсё неработает!
АААА!!!
Люди.. и ищё, скажити, ктонибудь plzz, как сделать мышь чувствительной к точке нажатия на экране (доп. инвентарь вместо 6 я хотел-бы сделать 80 слотов..)) ) Что для этого нужно? (На Jass написать ф-ции и нарисовать иконки или как??)
ДО отвтедьте -жи ме кто-нюдь!

| » | 50 | 12:51 | 18.07.08 | EmoAlex [п]

Рр..

| » | 51 | 19:15 | 22.07.08 | FzY [п]

Все сдесь примеры работают. Чего вы хотите? Скачайте себе качалку например Download Master и качайте до потери пульса.

| » | 52 | 14:40 | 05.08.08 | EmoAlex [п]

Спс)) Фсё работает))) просто до одного хорооошего момента не знал функцию декодирования в поисковой системе))

| » | 53 | 17:30 | 24.08.08 | Redok [п]

Народ я всё понимаю, но я не могу взять в толк для чего нужна функция return, кроме того как прервать функцию ? Обьясните я читал 10-20 раз, но всеравно не могу понять. ожет кто небудь может растолковать ?

| » | 54 | 13:08 | 28.08.08 | EmoAlex [п]

((( я долго писал как..(( потом сбилось((
1 час
Вообщем для возвращения какого либо параметра функции. Допустим логический тип - "Boolean" Возвращает функции "да" или "нет". Что означает возвращает (return)?! Значит устанваливает))) Вот и фсё)
Пример:
function New_Function takes nothing returns boolean
if ( not ( <условие> != true ) then
return true
endif
return false
Перевод:
функция Новая_Функция берёт ничего возвращает логический тип ("да" или "нет")
если ( не ( <какое-либо условие> не равно да (истина) то
возвратить верно (да, истина)
иначе
возвратить неверно (нет, ложь)
Для чего это? Если возвращается "да", то триггер (если это событие всего триггера) будет дейтсвовать иначе, если функция возвратила "нет", тогда не будет =)
условие вернее а не событие))
Эх.. вот так - както =)

| » | 55 | 15:23 | 02.09.08 | Redok [п]

Благодарю тебя, я более мение понял =)

| » | 56 | 18:16 | 03.09.08 | pulsar [п]

А как создать джаз-триггер в редакторе - то? Где это все пишется, в каком месте-то? Или их надо импортировать на карту???

| » | 57 | 14:59 | 19.09.08 | Mihahail [п]

Аъ мняъ прётъ, особоъ зач0тъ*
_________
*Нравится.

| » | 58 | 15:24 | 23.10.08 | Jaffa [п]

Pulsar, в джаз-триггер , переводится простой триггер. Спасибо за статью.

| » | 59 | 06:37 | 26.10.08 | EmoAlex [п]

Перевести можно используя комманду меню в самом редакторе триггеров: для этого, нажми на триггер, который нужно конвертировать (переделать) и выбери в главном меню "Правка - конвертировать в текст" Усё)

| » | 60 | 18:24 | 28.10.08 | FunkieFoO [п]

Что бы создать сборный предмет (например как в дотке брейсер там или исчо чо нить...) нуно делать это на Jass'e или мона на ГУИ, если на ГУИ то как? Сенк за аффигенную статю Афтар РЕСПЕКТ!!! )

| » | 61 | 23:50 | 31.10.08 | Illidan [п]

Начал более менее серьезно изучать, я в диком восторге, как все проще(ну, если разобраться и запомнить все...) и универсальней...
Забыл написать, что статья - просто супер. Все разжевано, каждая строка и все становится понятно... Будто под меня затачивали :)

| » | 62 | 19:04 | 09.11.08 | Bermoff [п]

Итак,приступим=))
Статья (вроде бы) очень хорошая и,надеюсь,что смогу освоить Jass,руководствуясь ей и другими статьями Sergey'a=)

| » | 63 | 01:45 | 22.11.08 | Venom11 [п]

Мда, в локальных переменных я разобрался сам и уже давно. Иногда бывает полезно открыть чужую карту и ознакомиться с триггерами. Правда процесс знакомства был очень долгим. Эх, встретил бы я эту статью пораньше!!! Jass rulezz!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

| » | 64 | 15:37 | 30.11.08 | Kos94ok [п]

Огромнейшее спасибо за статью. У меня такой странный способ конечно... Прочитал сегодня, через три дня столкнулся с этим делом в мапе, 5 минут посидел и сделал все. Хотя когда читал даже не пробовал. Да и вообще JASS удобнее GUI. Ненадо искать функции всякие и т.д. а мона просто написать строку.
P.S> Настоящий "рулеззззз" это Custom Script
P.P.S> У меня варик не знает команды DeleteTrigger O_o (call DeleteTrigger ()

| » | 65 | 12:49 | 21.12.08 | ScorpioT1000 [п]

DestroyTrigger

| » | 66 | 18:16 | 27.12.08 | beefry [п]

я нехера не понял=(((( а мне это срочно надо=*(( чё мне делать?=/

| » | 67 | 17:29 | 30.12.08 | PuTaF [п]

А вопрос не в тему почему 3 статьи нет 2 потом 4 ?

| » | 68 | 11:15 | 02.01.09 | RazArt [п]

Присоединяюсь к вопросу) [b]Sergey[/b], вы от нас что-то утаили?)

| » | 69 | 19:09 | 05.01.09 | TakasiMiramo [п]

Мозги плющит( хотя вроде более менее понятно Х) ).
Кстати нужно ещё создать "Словарь джазера"
НеЕ 0_о Sergey ты прям гонишь в конце - если вначале твоих статей я мог заменить 10% слов на более понятные, то теперь - 70% и то сам не догнал!

| » | 70 | 15:51 | 23.01.09 | IceInfernal [п]

function SetDegrees takes unit Unit, real dn returns nothing
local real d = 0
local real da = 0
set d = GetUnitFacing(Unit)
set da = ( d - dn )
call SetUnitPositionLocFacingBJ( Unit, Unit, ( d + da ) )
endfunction
В чем тут ошибка?

| » | 71 | 22:37 | 27.01.09 | Роб Рой [п]

Классная статья, тута всё толково написано... ща буду разбираться=))
кстати:
Just Another Script System (JASS)
Просто Иная Скриптовая Система (ПИСС) ЫЫ)))))

| » | 72 | 22:07 | 13.03.09 | Sleepy Soul [п]

можете выложить все названия локальных переменных

| » | 73 | 16:54 | 20.04.09 | puLser [п]

начинаю учиться

| » | 74 | 11:41 | 16.05.09 | karaliti [п]

IceInfernal
вот тут
call SetUnitPositionLocFacingBJ( Unit, Unit, ( d + da ) ) ты вместо локации задаешь юнит замени на
call SetUnitPositionLocFacingBJ( Unit, GetUnitLoc(Unit), ( d + da ) )
хотя непонимаю зачем, ведь намного проще
call SetUnitFacing( Unit, d+da)

| » | 75 | 18:03 | 23.05.09 | Valz [п]

Ваще ни фига не пойму в jass хоть убей! =(

| » | 76 | 18:06 | 05.06.09 | Razor Zecer [п]

Валз, помочь? *звук бензопилы*

| » | 77 | 15:04 | 09.07.09 | BioAleks [п]

Хорошая статья

| » | 78 | 04:58 | 14.07.09 | JamesBlack [п]

[b]ScorpioT1000[/b] ты б хоть не позорился! Какодемон - монстр еще из первого Doom'а, так что ник нормальный, а если тебе в голву лезут плохие мысли, сам виноват.

| » | 79 | 00:04 | 21.07.09 | ___ydav___ [п]

Я в jass'е был полный нууль. Но с такими статьями понемногу потихоньку начинаю разбиратца в нем. Статья супер !

| » | 80 | 14:55 | 23.07.09 | serg_09 [п]

Статья отличная, но пример в конце (AR) это ужас! О_о....

| » | 81 | 07:25 | 06.08.09 | BLooD WoLf [п]

Статья просто супер!

| » | 82 | 22:11 | 21.08.09 | PhoenixDark [п]

Статья хорошая. хотелосьбы увидеть под новые функции джаса что в паче 1.24

| » | 83 | 11:35 | 31.08.09 | Anufis [п]

читай про систему RB+SCv, и тебе не нужна будет статья под новые функции джаса что в паче 1.24

| » | 84 | 14:15 | 09.11.09 | rsemscom [п]

Respect автору:-)

| » | 85 | 15:43 | 13.11.09 | ferener [п]

мдааа...... что то до меня не доходит .
как я понял чтобы знать джасс надо знать инглиш ,и быстро печатать......

| » | 86 | 22:21 | 15.11.09 | rsemscom [п]

А по-моему всё что тут пишут - довольно ясно.....

| » | 87 | 17:47 | 29.12.09 | exploder [п]

BB RB!

| » | 88 | 13:36 | 07.01.10 | Lipokiller [п]

а утечки как исправлять..кто-нить знает??? кроме того как удалять триггер..я просто все триггреы уже удалил, и в сё равно, когда запускаю игру..идёт загрузка, то прямо в конце где-то за 1 см до окончания полоски выкидывает из варика и всё...даже ошибки нету..
пожалуйста, кто знает решение этой проблемы пишите в аську(458224108) или в скайп(lipokiller)

| » | 89 | 06:46 | 10.01.10 | Forum_Russia [п]

А как узнать название которое писать в CS, вот как ты узнал что local unit u
именно так называется (я думал копировать триггер как текст и вставить) а там каракули выдаёт.
А всё не надо =) допёрло.Просто я не догадывался какая именно надпись является именно мои триггером =)

| » | 90 | 06:42 | 14.01.10 | НЕзаяЦ [п]

все четко и понятно. бум осваивать язык и наступать на грабли Sergey'я хотя он все грабли аккуратно отодвинул и ткнул пальцем туда где они лежат =D

| » | 91 | 12:47 | 31.01.10 | Barathrum [п]

некачает , открывает пустую страницу (

| » | 92 | 16:22 | 03.02.10 | asika [п]

востановите фаил)
нашёл на другом сайте эту же статью де указана правельная ссылка на фаил) еси кому над...
_http://xgm.ru/forum/attachment.php?attachmentid=993
респект за статейку) за минут 30-60 освоил локальные переменные)

| » | 93 | 18:33 | 08.02.10 | Лелуш [п]

В ссылке по моему этот же сайт =/

| » | 94 | 17:46 | 02.03.10 | SAZONISCHE [п]

GOOD

| » | 95 | 16:38 | 16.03.10 | Nanopro [п]

Народ помогите!!!!! у мя RB неработает!!!! пишет дохера ошибок!
пишите плиз в скайп (kolan97) буду очень благодарен

| » | 96 | 20:12 | 25.08.10 | Zanozus [п]

Забудте про RB+SCV в последних патчах их убрали !!!

Всего комментариев : 96

» Добавить комментарий
» Для доступа к этой функции вы должны быть авторизованы на форуме. Заполните форму для авторизации, или зарегистрируйтесь.


Логин :    Пароль :