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