Здравствуйте. Сегодня будет вводный урок по jass. Мы узнаем некоторые основы изучаемого нами кодинга jass.
И вообще что такое Jass ?
Жасс - это событийно-ориентированный скриптовый язык программирования, созданный компанией Blizzard Entertainment. Используется в играх, таких как Warcraft и Starcraft. Язык функций, функции из common.j и blizzard.j , а точнее на нативки и бж. Все действия в нём проводятся именно в функции
какое бы не было оно должно проводится именно под блоком функции. Вот вы когда-нибудь ковенвертировали тригер в жасс, не ? Чтож давайте попробуем!
Редактор триггеров создоём триггер. Далее правка/конвентировать в текс.
Тот у кого JassCraft, да пажалуйста, File/New/Templates/New Tigger.
Мы должны увидеть это:
вариант JassCraft:
Code
function Trig_NewTrigger_Conditions takes nothing returns boolean
return
endfunction
function Trig_NewTrigger_Actions takes nothing returns nothing
endfunction
//==== Init Trigger NewTrigger ====
function InitTrig_NewTrigger takes nothing returns nothing
set gg_trg_NewTrigger = CreateTrigger()
//call TriggerRegister__(gg_trg_NewTrigger, )
call TriggerAddCondition(gg_trg_NewTrigger, Condition(function Trig_NewTrigger_Conditions))
call TriggerAddAction(gg_trg_NewTrigger, function Trig_NewTrigger_Actions)
endfunction
вариант WorldEditor:
Code
function Trig_NewTrigger_Actions takes nothing returns nothing
endfunction
//================================
function InitTrig_NewTrigger takes nothing returns nothing
set gg_trg_NewTrigger = CreateTrigger()
call TriggerAddAction(gg_trg_NewTrigger, function Trig_NewTrigger_Actions)
endfunction
И без слов понятно, что
Code
function Trig_NewTrigger_Actions takes nothing returns nothing
endfunction
Функция в которой могут присутствовать наши действия как это выгледило в триггерах под блоком "Действия". Слово "function" должно присутствовать всегда перед блоком функции, на то что дальше этого слова можете не вникать на следуйщих уроках мы подробнее разберём, что к чему и с чем едят это. "gg_trg_NewTrigger" Это название нашего триггера , а точнее "NewTrigger", у вас оно может быть другое. А вот "gg_trg_" это присутствует всегда перед названием т.к. триггер наш создан путём "Создать триггер".
Думаю, то что дальше присутствует в коде выглядит непонятно и странно. Для этого давайте изучим некоторые операторы в нашем Jass'e
Существующие блоки
Code
function //с этим мы уже познакомились
endfunction //обозначает конец блока функции
takes // аргументы запрашивающая функция
returns // тип переменой должный возвратится после обработки функцией
loop // цикл
endloop // конец блока цикла
if // если
then // конец строки если, внимание должна быть написано обязательно после вашего условия в той же строке через пробел
endif // конец блока условий
elseif // иначе с условием
else / просто иначе
type // тип переменной
extends // от чего наследуется
constant //наверное все не раз слышали об const это те переменые, которые принемают одно значение и никогда не миняются
native // нативная функция
globals // объявление глобальной переменной
endglobals //конец блока глобалок
Операторы работающие в блоке
Code
call // Вызов функции, напротив call нужно написать имя функции например Trig_NewTrigger_Actions() или DoNothing()
return // если функция возвращает параметр то это строка просто необхадима
set // присвоить значение переменной напротив данного оператора
exitwhen // строка обозначающая условия выхода из цикла
local // объявление локальной переменной, напротив тип и потом имя "local unit u = null"
not // знак отрицания юзается в условиях
and // логическая И
or // логическая ИЛИ
Значение типа "пусто" , " да ", "нет".
Code
null //пусто
true //да
false // нет
булевая необходимы для сравнения ;)
Дополнительные операторы и простейшии(основные) типы переменных
Code
nothing // ничего
array // массив пример "local unit array u"
string // строка
integer //целочисленая вроде 32 бит
real // реальное число
code // напротив функция
boolean // логическое "пусто" , " да ", "нет".
Остальные типы переменных с ними мы познакомимся позже
Code
hashtable
handle
event
player
widget
unit
destructable
item
ability
buff
force
group
trigger
triggercondition
triggeraction
t imer
location
region
rect
boolexpr
sound
conditionfunc
filterfunc
unitpool
itempool
race
alliancetype
racepreference
gamest a t e
i gamestate
fgamestate
playerstate
playerscore
playergameresult
unitstate
aidifficulty
eventid
gameevent
playerevent
playeruni tevent
unitevent
limitop
widgetevent
dialogevent
unittype
gamespeed
gamedifficulty
gametype
mapflag
mapvisibility
mapsett ing
m apdens it y
mapcontrol
playerslotstate
volumegroup
camerafield
camerasetup
playercolor
placement
startlocprio
raritycontrol
blendmode
texma pflags
effect
effecttype
weathereffect
terraindeformation
fogstate
fogmodifier
dialog
button
quest
questitem
defeatcondition
t im erdialog
leaderboard
multiboard
multiboarditem
trackable
gamecache
version
itemtype
texttag
attacktype
damagetype
weapontyp e
s ou ndtype
lightning
pathingtype
image
ubersplat
playerscore
Мы с вами видем, что операторов не так уж и мало, что и вообщем-то даёт нам наши с вами способности картостроя в вакрафте ;). А теперь снова гляним на наш триггер
Code
function Trig_NewTrigger_Actions takes nothing returns nothing
endfunction
//================================
function InitTrig_NewTrigger takes nothing returns nothing
set gg_trg_NewTrigger = CreateTrigger()
call TriggerAddAction(gg_trg_NewTrigger, function Trig_NewTrigger_Actions)
endfunction
Картина начинает раскрываться
"InitTrig_" Состоит перед названием функции иницилизации нашего с вами триггера. Согласно war3map.j-коду, компилируемому WE-средствами, он вызывает поочерёдную инициализацию триггеров карты, а функции-инициализаторы понимаются под приставкой InitTrig_Название
Code
set gg_trg_NewTrigger = CreateTrigger()
просто присваевает глобальной переменной типа trigger её создание вот и всё.
Code
call TriggerAddAction(gg_trg_NewTrigger, function Trig_NewTrigger_Actions)
Вызывает функцию добавления действия в триггер "Trig_NewTrigger_Actions".
Конец блока
Code
//================================
Вызывает недоверие , она такая противная, поэтому я её всегда срезаю. Вообщем "//" озночает коментарий после которых можно писать, что душе угодно только в одно строчку ! Например "//Ололо Масер нуб".
Ну-с думаю на этот урок достаточно.
Д/з (Домашняя работа) Конвертируйте какой-нибудь толстый триггер в jass и попытайтесь откоментировать каждое действие используя конечно же "//", чтобы было всё поэтапно, где что делается, и заключительный вывод того, что делает ваш триггера вообще. Говорю сразу, не суйте мне триггер с одним или двумя действиями как минимум 7 действий, 3 присваивания, а чтоб всё было круто то можно блок условий и цикл.
Вы наверное спросите "Зачем такое тупое д/з", хороший кодер просто должен уметь дать коментарии своим кодам/системам/нароботкам, чтобы это было ясно другим (офк если всё это выложено в народ).
На следующем уроке мы рассмотрим два вида переменных в Jass.
Можете задовать свои вопросы мне или [DUOS]y.