XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
Как выйти из цикла? (если выполнено действие)
Знаю, создавал похожую тему, но тут смысл другой:
есть код
Код:
loop 
    set i = i+1
        if i == udg_cn then
            call DoNothing()
        else
            set udg_cn = i+1
            тут мы должны закончить цикл
        endif
    endloop

Какое действие закончит цикл? Если exitwen, то какое условие выхода?

Отредактировано Vampirrr, 25.02.2009 в 04:15.
Старый 25.02.2009, 01:17
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Vampirrr, ну очевидно что true =)

Hellfim добавил:
Т.е. exitwhen true
Старый 25.02.2009, 01:19
ScorpioT1000
Работаем
offline
Опыт: отключен
exitwhen true можно вроде поместить в любое место цикла
кстати код лололо
Код:
loop 
    set i = i+1
    exitwhen i == udg_cn
    set udg_cn = i+1
endloop
Старый 25.02.2009, 01:20
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
ScorpioT1000, если уж пошло на оптимизацию кода, то вот =)
Код:
loop 
    exitwhen i == udg_cn
    set udg_cn=udg_cn+1
endloop
Старый 25.02.2009, 01:27
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
ScorpioT1000, Hellfim, код вообще бред..может вы подкините идею, как сделать такую проверку: Юнит использует абилку, ему присваивается значение, и что-то делается. Потом, когда этот же юнит использует эту же абилку, мы проверяем, если его номер уже существует, то ничего не делаем, а в противном случае добавляем ему номер (номер предыдущего юнита, использовавшего абилку)+1
Старый 25.02.2009, 01:28
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Vampirrr
Код:
globals
    unit array lolozavr
endglobals

//...
local integer i=0
local unit u=GetTriggerUnit()
loop
    exitwhen i>8191//на самом деле можно поставить значение поменьше, на тысячу допустим, я просто не знаю сколько у тебя юнитов максимум
    if u==lolozavr[i] then
        //Что-то делается
        exitwhen true
    endif
    set i=i+1
endloop
//...
Старый 25.02.2009, 01:33
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
Hellfim, спс, но не пахает) что-то я делаю не так..
Старый 25.02.2009, 02:13
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Мда... Конечно не пашет... Из-за своей криворукости не добавил целочисленную переменную counter и действия после цикла
set lolozavr[counter]=u
set counter=counter+1
Старый 25.02.2009, 02:25
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
elseif решает:
Код:
loop
    set i = i+1
        if udg_lol[udg_cn] == u then
            call DoNothing()
        elseif udg_lol[udg_cn] != u then
            set udg_cn = udg_cn+1
            set udg_lol[udg_cn] = GetSpellAbilityUnit()
            set udg_facing = GetUnitFacing(udg_lol[udg_cn])
            set x = GetUnitX(udg_lol[udg_cn])
            set y = GetUnitY(udg_lol[udg_cn])
            call DoIt(x, y)
            exitwhen true
        endif
    exitwhen i == 500
    endloop

но подумав хорошенько, я понял что лучше все сделать по другому)) тему можно закрыть, Скорпио и Хеллфиму огромное спасибо)

Отредактировано Vampirrr, 25.02.2009 в 04:52.
Старый 25.02.2009, 04:18
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

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

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



Часовой пояс GMT +3, время: 16:10.