В этой статье я расскажу как пользоватся циклами в jass.
Делается это очень просто:
Создаем переменную типа целочисленное
Далее создаем сам цикл.
Code
loop
exitwhen i>10
//Действия
set i=i+1
endloop
Цикл повторится 10-ть раз.
Совсем не трудно!
Далее расмотрим if/then/else в jass
Начинается как вы поняли так
Code
if ..... then // Если что-то тогда
//Действие
else // Инчаче
//Действие
endif // Конец
Пример:
Code
local integer i=GetRandomInt(0,10)
if i==7 then
call DisplayTimedTextToForce(GetPlayerAll(),10,"7")
endif
Создает переменную I с рандомным значением от 0-10 и если число = 7,то всем игрокам об этом сообщается.
Пример из одной из моих способностей.
Code
local unit f=GetTriggerUnit()
local integer i=0
local real fas=GetUnitFacing(f)
local unit array da
local integer di=0
local real x = GetSpellTargetX()
local real y = GetSpellTargetY()
local unit d=CreateUnit(GetOwningPlayer(f),'o004',x,y,GetUnitFacing(f))
local integer in=GetHeroInt(f,true)/2
local real x1 = GetWidgetX(d) + (400+in) * Cos(fas * .017)
local real y1 = GetWidgetY(d) + (400+in) * Sin(fas * .017)
local real x2 = GetWidgetX(d) + 220. * Cos(fas * .017)
local real y2 = GetWidgetY(d) + 220. * Sin(fas * .017)
local destructable array des
local integer dei=0
//
loop
exitwhen i>10*GetUnitAbilityLevel(f,'A00B')+(3*GetUnitAbilityLevel(f,'A00D'))
set da[di]=CreateUnit(GetOwningPlayer(f),udg_type[GetRandomInt(4,6)],x1,y1,0)
call UnitApplyTimedLife(da[di],'BTLF',2*GetUnitAbilityLevel(f,'A00B')+2)
call SetUnitAbilityLevel(da[di],'A00A',GetUnitAbilityLevel(f,'A00B'))
set des[dei]=CreateDestructable('YTpc',x1,y1,fas,1,1)
set dei=dei+1
set di=di+1
set i=i+1
set fas=fas-20
set x1 = GetWidgetX(d) + (400+in) * Cos(fas * .017)
set y1 = GetWidgetY(d) + (400+in) * Sin(fas * .017)
call TriggerSleepAction(0.01)
endloop
//
loop
exitwhen i==0
call IssuePointOrder(da[di],"shockwave",x2,y2)
set di=di-1
set i=i-1
set fas=fas+20
set x2 = GetWidgetX(d) + 220. * Cos(fas * .017)
set y2 = GetWidgetY(d) + 220. * Sin(fas * .017)
endloop
//
set dei=0
call TriggerSleepAction(0.8)
//
loop
exitwhen i>10*GetUnitAbilityLevel(f,'A00B')+(3*GetUnitAbilityLevel(f,'A00D'))
call RemoveDestructable(des[dei])
set des[dei]=null
set dei=dei+1
set da[di]=null
set di=di+1
set i=i+1
endloop
//
set f=null