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

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

Закрытая тема
 
Gres
Кораэлестраз
offline
Опыт: 18,575
Активность:
Зацикливается триггер!
Хотел сделать так чтобы юнит всегда бегал за Целью...
1)отлавливаю ордеры
2)выключаю тригг(чтобы мой триггерный приказ не сработал)
3)паузю юнита
4)в паузе отдаю приказ
5)убираю паузу...
6)Вкл. триггер
Но триггер зацикливается!
приказ Smart начинает так часто отдаваться юниту что тот просто стоит на месте! =(

Что делать?
» Код

Код:
function Trig_UnitOrderStop_Conditions takes nothing returns boolean
    if ( ( GetOrderedUnit() == udg_Unit )and( ( GetIssuedOrderId() == OrderId("holdposition") ) or ( GetIssuedOrderId() == OrderId("attack") ) or ( GetIssuedOrderId() == OrderId("stop") ) or ( GetIssuedOrderId() == OrderId("smart") ) or ( GetIssuedOrderId() == OrderId("patrol") ) or ( GetIssuedOrderId() == OrderId("move") )  or ( GetIssuedOrderId() == OrderId("attackonce") ) ) ) then
        return true
    endif
    return false
endfunction

function Trig_UnitOrderStop_Actions takes nothing returns nothing
    set udg_i = ( udg_i + 1 )  \\Это для проверки...
    call DisplayTextToForce( GetPlayersAll(), I2S(udg_i) )\\Это для проверки...
    call DisableTrigger( gg_trg_UnitOrderStop )
    call PauseUnit(udg_Unit, true)
    call IssueTargetOrder( udg_Unit, "smart", udg_TargetUnit )
    call PauseUnit(udg_Unit, false)
    call EnableTrigger( gg_trg_UnitOrderStop )
endfunction

function InitTrig_UnitOrderStop takes nothing returns nothing
    set gg_trg_UnitOrderStop = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_UnitOrderStop, EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_UnitOrderStop, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_UnitOrderStop, EVENT_PLAYER_UNIT_ISSUED_ORDER )
    call TriggerAddCondition( gg_trg_UnitOrderStop, Condition( function Trig_UnitOrderStop_Conditions ) )
    call TriggerAddAction( gg_trg_UnitOrderStop, function Trig_UnitOrderStop_Actions )
endfunction


Отредактировано Gres, 24.04.2009 в 17:06.
Старый 24.04.2009, 16:34
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
когда ты включаешь триггер, приказ отдается после, наверно-таки есть задержка
Старый 24.04.2009, 16:56
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Ну думаю как-то так.
» code

Код:
globals
    integer Checker=0
endglobals

function Trig_UnitOrderStop_Actions takes nothing returns nothing
    if Checker==0 then
        set Checker=1
        call IssueTargetOrder( udg_Unit, "smart", udg_TargetUnit )
    endif
endfunction

function InitTrig_UnitOrderStop takes nothing returns nothing
    set gg_trg_UnitOrderStop = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_UnitOrderStop, EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_UnitOrderStop, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_UnitOrderStop, EVENT_PLAYER_UNIT_ISSUED_ORDER )
    call TriggerAddAction( gg_trg_UnitOrderStop, function Trig_UnitOrderStop_Actions )
endfunction

Старый 24.04.2009, 19:42
Gres
Кораэлестраз
offline
Опыт: 18,575
Активность:
Hellfim нифига не понял... =)
Старый 24.04.2009, 20:42
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
gres, добавь вместо твоего способа отдачи приказа IssueImmediateOrder, ну или immediate с таргетом, если не поможет-поставь слипэкшн небольшой перед запуском трига
Старый 24.04.2009, 21:20
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Gres, да, действительно, если после endif добавить
Код:
set Checker=0

то будет работать =)
Старый 24.04.2009, 21:23
ScorpioT1000
Работаем
online
Опыт: отключен
не после endif а в конце ифа, иначе при каждом будет сбиваться
Старый 24.04.2009, 22:25
Gres
Кораэлестраз
offline
Опыт: 18,575
Активность:
Hellfim, Sc... всмысле вы предлагаете проверку на текущее выполнение триггера сделать? 0о
я делал почти тоже самое тока с Boolean типом! нифига не вышло! =(
Старый 25.04.2009, 19:38
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
Задержку емае надо
Старый 25.04.2009, 20:15
Gres
Кораэлестраз
offline
Опыт: 18,575
Активность:
Цитата:
Сообщение от Артте
Задержку емае надо

Блин! да задержка не рулит! Я с таким же успехом мок бы и просто ордер отдовоть! =)
Старый 25.04.2009, 21:25
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
ты думаешь задержка в 0,1 тебя сильно расстроит?
Старый 25.04.2009, 22:13
Gres
Кораэлестраз
offline
Опыт: 18,575
Активность:
Цитата:
Сообщение от Артте
ты думаешь задержка в 0,1 тебя сильно расстроит?

да честно говоря я еще до создания темы прбовал с задержкой... начинал с 0.05 сек и закончил 1 сек! Тупо триггер перестает работать... тоесть юнитом можно спок управлять... =(
Старый 26.04.2009, 18:36
ScorpioT1000
Работаем
online
Опыт: отключен
вобще он бул дб

Sc добавил:
Код:
globals
    boolean OrderEnable=true
endglobals

function Trig_UnitOrderStop_Actions takes nothing returns nothing
    set OrderEnable=false
    call IssueTargetOrder( udg_Unit, "smart", udg_TargetUnit )
    
    //..actions..
    
    set OrderEnable=true
endfunction

function Trig_UnitOrderStop_Conditions takes nothing returns boolean
    return OrderEnable
endfunction

function InitTrig_UnitOrderStop takes nothing returns nothing
    set gg_trg_UnitOrderStop = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_UnitOrderStop, EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_UnitOrderStop, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_UnitOrderStop, EVENT_PLAYER_UNIT_ISSUED_ORDER )
    call TriggerAddCondition( gg_trg_UnitOrderStop, Condition(function  Trig_UnitOrderStop_Conditions))
    call TriggerAddAction( gg_trg_UnitOrderStop, function Trig_UnitOrderStop_Actions )
endfunction
Старый 26.04.2009, 22:53
Gres
Кораэлестраз
offline
Опыт: 18,575
Активность:
Вах! Спасибо большое! Все работает!

Я то делал проверку ужо в действиях... мож поэтому и не работало... А может просто руки кривые... =)

Gres добавил:
И еще вопросик на эту тему...
Какой ордер на приказ "Юнит начинает применять способность"???
Мне просто надо чтобы если юнит Начал колдовать чтоб ему довалос 0.25 сек на каст и потом опять же приказ двигаться за целью...

Gres добавил:
И еще! Вот есть событие Юнит теряет предмет... А ордера то на него нету да? Ну то что я например юниту приказал выбрасить предмет!
Старый 27.04.2009, 13:20
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
И еще! Вот есть событие Юнит теряет предмет... А ордера то на него нету да? Ну то что я например юниту приказал выбрасить предмет!
нету
Старый 27.04.2009, 13:38
Закрытая тема

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

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

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

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



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