Столкнулся с такой проблемой. При прокрутке цикла более 2 тысяч оборотов цикл перестаёт работать и остальной код файла jass не выполняется. Как быть в такой ситуации когда требуется сделать 16 тысяч оборотов в цикле через переменную?
function Test takes nothing returns nothing
    local integer i
    call DisplayTextToForce( GetPlayersAll(), "1!" )
    set i = 0
    loop
        exitwhen i > ( ( 128 * 128 ) - 1 )
        set i = i + 1
    endloop
    call DisplayTextToForce( GetPlayersAll(), "2!" )
endfunction

//===========================================================================
function InitTrig_____________________________________001_____________________u takes nothing returns nothing
    local trigger trg
    set trg = CreateTrigger(  )
    call TriggerRegisterTimerEventSingle( trg, 1.00 )
    call TriggerAddAction( trg, function Test )
endfunction
И 2 рой вариант проекта, тоже самое но без арифметических действий в условии цикла. Триггер 2 работает, триггер 3 нет(не полностью завершается код триггера).
function Test2 takes nothing returns nothing
    local integer i
    call DisplayTextToForce( GetPlayersAll(), "Test2!" )
    call DisplayTextToForce( GetPlayersAll(), "1!" )
    set i = 0
    loop
        exitwhen i > 16383
        set i = i + 1
    endloop
    call DisplayTextToForce( GetPlayersAll(), "2!" )
endfunction

function Test3 takes nothing returns nothing
    local integer i
    local integer n
    call DisplayTextToForce( GetPlayersAll(), "Test3!" )
    call DisplayTextToForce( GetPlayersAll(), "1!" )
    set i = 0
    set n = 0
    loop
        exitwhen i > 16383
        set n = n + 1
        set i = i + 1
    endloop
    call DisplayTextToForce( GetPlayersAll(), "2!" )
endfunction

//===========================================================================
function InitTrig_____________________________________001______________________2 takes nothing returns nothing
    local trigger trg2
    local trigger trg3
    set trg2 = CreateTrigger(  )
    call TriggerRegisterTimerEventSingle( trg2, 1.00 )
    call TriggerAddAction( trg2, function Test2 )

    set trg3 = CreateTrigger(  )
    call TriggerRegisterTimerEventSingle( trg3, 1.00 )
    call TriggerAddAction( trg3, function Test3 )
endfunction

Не хватает производительности в Warcraft'e?

Принятый ответ

Лимит операций примерно 4 к. А у тебя тут поболее 16к.
Обойти лимит операций можно только разнеся действия в разные потоки. К примеру для через таймер.
1
32
8 лет назад
1
Лимит операций примерно 4 к. А у тебя тут поболее 16к.
Обойти лимит операций можно только разнеся действия в разные потоки. К примеру для через таймер.
Принятый ответ
1
28
8 лет назад
1
ещё можно использовать вейт для того чтобы обнулить счётчик операций
то есть примерно каждые 2000 операций юзай TriggerSleepAction(0.01)
а вообще у нас на сайте есть статьи
Чтобы оставить комментарий, пожалуйста, войдите на сайт.