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

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

Ответ
 
ZregerZ
Мы - лёд!
offline
Опыт: 7,029
Активность:
Не работает код
» код
Код:
function Trig_Move_Func003001 takes nothing returns boolean
    return ( GetTimeOfDay() >= 10.00 )
endfunction

function Trig_Move_Func003002 takes nothing returns boolean
    return ( GetTimeOfDay() <= 18.00 and udg_Colichestvo >= udg_i )
endfunction

function Trig_Move_Conditions takes nothing returns boolean
    if ( not GetBooleanAnd( Trig_Move_Func003001(), Trig_Move_Func003002() ) ) then
        return false
    endif
    return true
endfunction

function Trig_Move_Actions takes nothing returns nothing
    local location P
    local integer I
    local unit F
    local unit array M
    local unit array CH
    local boolean ch
    set F = LoadUnitHandleBJ(udg_i, 0, udg_Hesh)
    set ch = false
    set P = GetUnitLoc(F)
    set I = 0
    loop
        exitwhen I > 10
        if ( not ( LoadUnitHandleBJ(udg_i, I, udg_Hesh) != null ) ) then
            if ( not ( GetUnitTypeId(LoadUnitHandleBJ(udg_i, I, udg_Hesh)) == 'n000' ) ) then
                set M[I] = LoadUnitHandleBJ(udg_i, I, udg_Hesh)
            else
                set CH[I] = LoadUnitHandleBJ(udg_i, I, udg_Hesh)
                set ch = true
            endif
        else
        endif
        set udg_I = ( udg_I + 1 )
    endloop
    set udg_i = ( udg_i + 1 )
    if ( ch == true  ) then
        call IssuePointOrderLoc( F, "move", GetRectCenter(gg_rct_shkola) )
        call IssuePointOrderLoc( M[0], "move", GetRectCenter(gg_rct_shkola) )
        call IssuePointOrderLoc( M[1], "move", GetRectCenter(gg_rct_shkola) )
        call IssuePointOrderLoc( M[3], "move", GetRectCenter(gg_rct_shkola) )
        call IssuePointOrderLoc( M[1], "move", GetRectCenter(gg_rct_shkola) )
        call IssuePointOrderLoc( M[4], "move", GetRectCenter(gg_rct_shkola) )
        call IssuePointOrderLoc( CH[0], "move", GetRectCenter(gg_rct_shkola) )
        call IssuePointOrderLoc( CH[1], "move", GetRectCenter(gg_rct_shkola) )
        call IssuePointOrderLoc( CH[2], "move", GetRectCenter(gg_rct_shkola) )
        call IssuePointOrderLoc( CH[3], "move", GetRectCenter(gg_rct_shkola) )
        call IssuePointOrderLoc( CH[4], "move", GetRectCenter(gg_rct_shkola) )
        loop
            exitwhen ( CH[0] == null or RectContainsUnit(gg_rct_shkola, CH[0]) == true )
            call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
        endloop
        loop
            exitwhen ( CH[1] == null or RectContainsUnit(gg_rct_shkola, CH[1]) == true )
            call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
        endloop
        loop
            exitwhen ( CH[2] == null or RectContainsUnit(gg_rct_shkola, CH[2]) == true )
            call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
        endloop
        loop
            exitwhen ( CH[3] == null or RectContainsUnit(gg_rct_shkola, CH[3]) == true )
            call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
        endloop
        loop
            exitwhen ( CH[4] == null or RectContainsUnit(gg_rct_shkola, CH[4]) == true )
            call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
        endloop
    else
    endif
    call IssuePointOrderLoc( F, "move", GetRandomLocInRect(gg_rct_Zavod) )
    call IssuePointOrderLoc( M[0], "move", GetRandomLocInRect(gg_rct_Zavod) )
    call IssuePointOrderLoc( M[1], "move", GetRandomLocInRect(gg_rct_Zavod) )
    call IssuePointOrderLoc( M[2], "move", GetRandomLocInRect(gg_rct_Zavod) )
    call IssuePointOrderLoc( M[3], "move", GetRandomLocInRect(gg_rct_Zavod) )
    call IssuePointOrderLoc( M[4], "move", GetRandomLocInRect(gg_rct_Zavod) )
    loop
        exitwhen ( GetTimeOfDay() >= 17.00 )
        call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
    endloop
    if ( ch == true ) then
        call IssuePointOrderLoc( F, "move", GetRectCenter(gg_rct_shkola) )
        call IssuePointOrderLoc( M[0], "move", GetRectCenter(gg_rct_shkola) )
        call IssuePointOrderLoc( M[1], "move", GetRectCenter(gg_rct_shkola) )
        call IssuePointOrderLoc( M[3], "move", GetRectCenter(gg_rct_shkola) )
        call IssuePointOrderLoc( M[4], "move", GetRectCenter(gg_rct_shkola) )
        loop
            exitwhen ( RectContainsUnit(gg_rct_shkola, F) == true or F == null )
            call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
        endloop
        loop
            exitwhen ( RectContainsUnit(gg_rct_shkola, M[1]) == true or M[1] == null )
            call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
        endloop
        loop
            exitwhen ( RectContainsUnit(gg_rct_shkola, M[2]) == true or M[2] == null )
            call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
        endloop
        loop
            exitwhen ( RectContainsUnit(gg_rct_shkola, M[3]) == true or M[3] == null )
            call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
        endloop
        loop
            exitwhen ( RectContainsUnit(gg_rct_shkola, M[4]) == true or M[4] == null )
            call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
        endloop
        loop
            exitwhen ( RectContainsUnit(gg_rct_shkola, M[5]) == true or M[5] == null )
            call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
        endloop
        call IssuePointOrderLoc( CH[0], "move", GetRectCenter(gg_rct_shkola) )
        call IssuePointOrderLoc( CH[1], "move", GetRectCenter(gg_rct_shkola) )
        call IssuePointOrderLoc( CH[2], "move", GetRectCenter(gg_rct_shkola) )
        call IssuePointOrderLoc( CH[3], "move", GetRectCenter(gg_rct_shkola) )
        call IssuePointOrderLoc( CH[4], "move", GetRectCenter(gg_rct_shkola) )
    else
    endif
    call IssuePointOrderLoc( F, "move", P )
    call IssuePointOrderLoc( M[0], "move", P )
    call IssuePointOrderLoc( M[1], "move", P )
    call IssuePointOrderLoc( M[2], "move", P )
    call IssuePointOrderLoc( M[3], "move", P )
    call IssuePointOrderLoc( M[4], "move", P )
    call RemoveLocation (P)
endfunction

//===========================================================================
function InitTrig_Move takes nothing returns nothing
    set gg_trg_Move = CreateTrigger(  )
    call TriggerRegisterTimerEventPeriodic( gg_trg_Move, 5.00 )
    call TriggerAddCondition( gg_trg_Move, Condition( function Trig_Move_Conditions) )
    call TriggerAddAction( gg_trg_Move, function Trig_Move_Actions )
endfunction

Не работает, сколько не изменял(
Прикрепленные файлы
Тип файла: w3x Шар.w3x (287.5 Кбайт, 9 просмотров )

Отредактировано ZregerZ, 07.10.2009 в 15:14.
Старый 06.10.2009, 13:56
Daemonik

offline
Опыт: 5,084
Активность:
Во-первых, куча BJ и прочих отходов жизнедеятельности, типа локейшнов.
Во-вторых, в коде трудно разобраться. Ты хоть скажи что он делает. Вижу что двигает юнита, а поточнее.
[+] замечание от Hellfim: 1.1 (ненормативная лексика)

Отредактировано Hellfim, 06.10.2009 в 21:28.
Старый 06.10.2009, 17:15
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
Наверное, стоит дополнить правила, чтобы в темах такого типа обязательно писали, что код должен делать =)
Старый 06.10.2009, 18:14
ZregerZ
Мы - лёд!
offline
Опыт: 7,029
Активность:
Загружаются юниты F и M \ CH (М и СН зависит от типа юнита) сохраняется точка Р, дальше идёт проверка и если есть хоть 1 юнит типа СН (с помощью логической ch) то: идут они все в зону gg_rct_shkola и идёт ожидание пока все юниты СН[0-5] не в этом регионе. юниты F и M[0-5] идут в зону gg_rct_Zavod. В 17:00 они двигаются обратно с тем же алгоритмом (проверка если сh да, то F M[0-5] идут в gg_rct_shkola и все F M[0-5] CH[0-5] идут в точку Р
Старый 06.10.2009, 20:36
Daemonik

offline
Опыт: 5,084
Активность:
» Код.
function Trig_Move_Func003001 takes nothing returns boolean
    return ( GetTimeOfDay() >= 10.00 )
endfunction

function Trig_Move_Func003002 takes nothing returns boolean
    return ( GetTimeOfDay() <= 18.00 and udg_Colichestvo <= udg_i )
endfunction

function Trig_Move_Conditions takes nothing returns boolean
    return  ( GetTimeOfDay() >= 10.00 ) and ((GetTimeOfDay() <= 18.00) and (udg_Colichestvo <= udg_i ))
endfunction

function Trig_Move_Actions takes nothing returns nothing
    local unit F = LoadUnitHandle(udg_Hesh, udg_i, 0)
    local real xP = GetUnitX(LoadUnitHandle(udg_Hesh, udg_i, 0))
    local real yP = GetUnitY(LoadUnitHandle(udg_Hesh, udg_i, 0))
    local integer I = 0
    local unit array M
    local unit array CH
    local boolean ch = false
    loop
        exitwhen I > 10 
        if  LoadUnitHandleBJ(udg_i, I, udg_Hesh) == null  then
            if  GetUnitTypeId(LoadUnitHandleBJ(udg_i, I, udg_Hesh)) != 'n000' then
                set M[I] = LoadUnitHandleBJ(udg_i, I, udg_Hesh) // проверь массив
            else
                set CH[I] = LoadUnitHandleBJ(udg_i, I, udg_Hesh) // аналогично
                set ch = true
            endif
        endif
        // set udg_I = ( udg_I + 1 ) // а теперь посмотри на свое условие выхода
        // наверно должно быть так 
        set I = I + 1
    endloop
    set udg_i = ( udg_i + 1 )
    if ( ch == true  ) then
        call IssuePointOrder( F, "move", GetRectCenterX(gg_rct_shkola), GetRectCenterY(gg_rct_shkola))
        call IssuePointOrder( M[0], "move", GetRectCenterX(gg_rct_shkola), GetRectCenterY(gg_rct_shkola) )
        call IssuePointOrder( M[1], "move", GetRectCenterX(gg_rct_shkola), GetRectCenterY(gg_rct_shkola) )
        call IssuePointOrder( M[3], "move", GetRectCenterX(gg_rct_shkola), GetRectCenterY(gg_rct_shkola) )
        call IssuePointOrder( M[1], "move", GetRectCenterX(gg_rct_shkola), GetRectCenterY(gg_rct_shkola) )
        call IssuePointOrder( M[4], "move", GetRectCenterX(gg_rct_shkola), GetRectCenterY(gg_rct_shkola) )
        call IssuePointOrder( CH[0], "move", GetRectCenterX(gg_rct_shkola), GetRectCenterY(gg_rct_shkola) )
        call IssuePointOrder( CH[1], "move", GetRectCenterX(gg_rct_shkola), GetRectCenterY(gg_rct_shkola) )
        call IssuePointOrder( CH[2], "move", GetRectCenterX(gg_rct_shkola), GetRectCenterY(gg_rct_shkola) )
        call IssuePointOrder( CH[3], "move", GetRectCenterX(gg_rct_shkola), GetRectCenterY(gg_rct_shkola))
        call IssuePointOrder( CH[4], "move", GetRectCenterX(gg_rct_shkola), GetRectCenterY(gg_rct_shkola) )
        // вот тут о-о-о-очень странные лупы, и мне лень убирать все BJ =)
        loop
            exitwhen ( CH[0] == null) or (RectContainsUnit(gg_rct_shkola, CH[0]))
            call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
        endloop
        loop
            exitwhen ( CH[1] == null) or (RectContainsUnit(gg_rct_shkola, CH[1]))
            call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
        endloop
        loop
            exitwhen ( CH[2] == null) or (RectContainsUnit(gg_rct_shkola, CH[2]))
            call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
        endloop
        loop
            exitwhen ( CH[3] == null) or (RectContainsUnit(gg_rct_shkola, CH[3]))
            call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
        endloop
        loop
            exitwhen ( CH[4] == null) or (RectContainsUnit(gg_rct_shkola, CH[4]))
            call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
        endloop
    else
    endif
    call IssuePointOrder( F, "move", GetRandomReal(GetRectMinX(gg_rct_Zavod), GetRectMaxX(gg_rct_Zavod)), GetRandomReal(GetRectMinY(gg_rct_Zavod), GetRectMaxY(gg_rct_Zavod)))
    call IssuePointOrder( M[0], "move", GetRandomReal(GetRectMinX(gg_rct_Zavod), GetRectMaxX(gg_rct_Zavod)), GetRandomReal(GetRectMinY(gg_rct_Zavod), GetRectMaxY(gg_rct_Zavod)) )
    call IssuePointOrder( M[1], "move", GetRandomReal(GetRectMinX(gg_rct_Zavod), GetRectMaxX(gg_rct_Zavod)), GetRandomReal(GetRectMinY(gg_rct_Zavod), GetRectMaxY(gg_rct_Zavod)))
    call IssuePointOrder( M[2], "move", GetRandomReal(GetRectMinX(gg_rct_Zavod), GetRectMaxX(gg_rct_Zavod)), GetRandomReal(GetRectMinY(gg_rct_Zavod), GetRectMaxY(gg_rct_Zavod)))
    call IssuePointOrder( M[3], "move", GetRandomReal(GetRectMinX(gg_rct_Zavod), GetRectMaxX(gg_rct_Zavod)), GetRandomReal(GetRectMinY(gg_rct_Zavod), GetRectMaxY(gg_rct_Zavod)))
    call IssuePointOrder( M[4], "move", GetRandomReal(GetRectMinX(gg_rct_Zavod), GetRectMaxX(gg_rct_Zavod)), GetRandomReal(GetRectMinY(gg_rct_Zavod), GetRectMaxY(gg_rct_Zavod)))
    loop
        exitwhen ( GetTimeOfDay() >= 17.00 )
        call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
    endloop
    if ( ch == true ) then
        call IssuePointOrder( F, "move", GetRectCenterX(gg_rct_shkola),  GetRectCenterY(gg_rct_shkola))
        call IssuePointOrder( M[0], "move", GetRectCenterX(gg_rct_shkola),  GetRectCenterY(gg_rct_shkola) )
        call IssuePointOrder( M[1], "move", GetRectCenterX(gg_rct_shkola),  GetRectCenterY(gg_rct_shkola) )
        call IssuePointOrder( M[3], "move", GetRectCenterX(gg_rct_shkola),  GetRectCenterY(gg_rct_shkola) )
        call IssuePointOrder( M[4], "move", GetRectCenterX(gg_rct_shkola),  GetRectCenterY(gg_rct_shkola) )
        // тут честно говоря тоже лень
        loop
            exitwhen ( RectContainsUnit(gg_rct_shkola, F) == true or F == null )
            call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
        endloop
        loop
            exitwhen ( RectContainsUnit(gg_rct_shkola, M[1]) == true or M[1] == null )
            call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
        endloop
        loop
            exitwhen ( RectContainsUnit(gg_rct_shkola, M[2]) == true or M[2] == null )
            call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
        endloop
        loop
            exitwhen ( RectContainsUnit(gg_rct_shkola, M[3]) == true or M[3] == null )
            call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
        endloop
        loop
            exitwhen ( RectContainsUnit(gg_rct_shkola, M[4]) == true or M[4] == null )
            call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
        endloop
        loop
            exitwhen ( RectContainsUnit(gg_rct_shkola, M[5]) == true or M[5] == null )
            call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1))
        endloop
        call IssuePointOrder( CH[0], "move", GetRectCenterX(gg_rct_shkola), GetRectCentery(gg_rct_shkola) )
        call IssuePointOrder( CH[1], "move", GetRectCenterX(gg_rct_shkola), GetRectCentery(gg_rct_shkola) )
        call IssuePointOrder( CH[2], "move", GetRectCenterX(gg_rct_shkola), GetRectCentery(gg_rct_shkola) )
        call IssuePointOrder( CH[3], "move", GetRectCenterX(gg_rct_shkola), GetRectCentery(gg_rct_shkola) )
        call IssuePointOrder( CH[4], "move", GetRectCenterX(gg_rct_shkola), GetRectCentery(gg_rct_shkola) )
    else
    endif
    call IssuePointOrder( F, "move", xP, yP )
    call IssuePointOrder( M[0], "move", xP, yP )
    call IssuePointOrder( M[1], "move", xP, yP )
    call IssuePointOrder( M[2], "move", xP, yP )
    call IssuePointOrder( M[3], "move", xP, yP )
    call IssuePointOrderoc( M[4], "move", xP, yP )
endfunction
//===========================================================================
function InitTrig_Move takes nothing returns nothing
    set gg_trg_Move = CreateTrigger(  )
    call TriggerRegisterTimerEventPeriodic( gg_trg_Move, 5.00 )
    call TriggerAddCondition( gg_trg_Move, Condition( function Trig_Move_Conditions) )
    call TriggerAddAction( gg_trg_Move, function Trig_Move_Actions )
endfunction
Скорее всего проблема была в первом лупе.
Старый 06.10.2009, 21:04
ZregerZ
Мы - лёд!
offline
Опыт: 7,029
Активность:
А вот не... не идут

Отредактировано ZregerZ, 06.10.2009 в 21:33.
Старый 06.10.2009, 21:15
Daemonik

offline
Опыт: 5,084
Активность:
Ну за тотальную работоспособность не отвечаю, исправил явные (для меня) ошибки.
PS проверь еще то, что я указал в комментах
Старый 06.10.2009, 23:35
ZregerZ
Мы - лёд!
offline
Опыт: 7,029
Активность:
Добавил карту, уже мозги плавятся)
Старый 07.10.2009, 15:15
Ответ

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

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

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

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



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