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

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

Ответ
 
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт: 6,885
Активность:
Триггер вырубается
Столкнулся тут с одной проблемой...Есть некий триггер <Trigger>.Почти при инициализации карты(через несколько триггеров после нее), происходит запуск этого триггера через
Код:
call TriggerExecute(gg_trg_Trigger)

Потом, через некоторое время(при определенном событии), срабатывает новый триггер, запускающий сначала разные функции(это не относится к делу), а потом и этот триггер <Trigger> заного...но проблема в том, что этот <Trigger> выполняется не полностью, а только первые несколько действий, а после них он просто прекращает свое выполнение(return'ов нет). Когда <Trigger> срабатывает первый раз, все действия выполняются, а когда 2-й - выключается! Пробовал запускать его и обычным способом:
Код:
call TriggerExecute(gg_trg_Trigger)

И напрямую через функцию:
Код:
call Trig_Trigger_Actions()

Все одно и тоже! Выключается и все! в чем дело?
Старый 14.08.2007, 18:16
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
Мб дело в самом триггере. Этот <Trigger> фстудию.
Старый 14.08.2007, 18:50
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт: 6,885
Активность:
Этот триггер большой...но если так...то вот он!
» Trigger
Код:
function Trig_StartGame_Conditions takes nothing returns boolean
    return IsTriggerEnabled(GetTriggeringTrigger()) == true
endfunction
//===========================================================================
function StartGame_CameraSetup takes nothing returns nothing
    call CameraSetupApplyForPlayer( true, gg_cam_Strart, GetEnumPlayer(), 0 )
endfunction
//===========================================================================
function StartGame_CameraFix takes nothing returns nothing
    call SetCameraOrientControllerForPlayerBJ( GetEnumPlayer(), gg_unit_hars_0058, 0, 0 )
endfunction
//===========================================================================
function Trig_StartGame_Actions takes nothing returns nothing
    local integer p1 = P1Status(true)
    local integer p2 = P2Status(true)
    local integer p3 = P3Status(true)
    local integer p4 = P4Status(true)
    local integer p5 = P5Status(true)
    local integer p6 = P6Status(true)
    local integer p7 = P7Status(true)
    local integer p8 = P8Status(true)
    local real g
    local location p
    local unit u
    call DisplayTextToForce( GetPlayersAll(), "111" )
//===========================================================================
    call DisableTrigger(GetTriggeringTrigger())
//===========================================================================
    call CinematicFadeBJ( bj_CINEFADETYPE_FADEOUTIN, 2.00, "ReplaceableTextures\\CameraMasks\\White_mask.blp", 0, 0, 0, 0 )
//===========================================================================
    call TriggerSleepAction( 1.00 )
//===========================================================================
    call ClearTextMessagesBJ(GetPlayersAll())
    call CinematicModeBJ(false, GetPlayersAll())
    call DisplayTextToForce( GetPlayersAll(), "222" )
//===========================================================================
    set udg_Multiboard = CreateMultiboardBJ(2, CountPlayersInForceBJ(udg_The_Players) + 1, "TRIGSTR_1378")
//===========================================================================
    call MultiboardSetItemValueBJ( udg_Multiboard, 1, 1, "|cffFFD700 Óðîâåíü|r" )
    call MultiboardSetItemStyleBJ( udg_Multiboard, 1, 1, true, true )
    call MultiboardSetItemWidthBJ( udg_Multiboard, 1, 1, 10.00 )
    call MultiboardSetItemIconBJ( udg_Multiboard, 1, 1, "ReplaceableTextures\\CommandButtons\\BTNScatterRockets.blp" )
//===========================================================================
    call Multiboard(p1, p2, p3, p4, p5, p6, p7, p8)
//===========================================================================
    call ForForce(GetPlayersAll(), function StartGame_CameraSetup)
    call ForForce(GetPlayersAll(), function StartGame_CameraFix)
//===========================================================================
    call TriggerExecute(gg_trg_CreateDialog)
//===========================================================================
    loop
        exitwhen (udg_GameType != 0)
        call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 0.25))
    endloop
//===========================================================================
    call TriggerSleepAction( 4.00 )
//===========================================================================
    call EnableTrigger( gg_trg_P1 )
    call EnableTrigger( gg_trg_P2 )
    call EnableTrigger( gg_trg_P3 )
    call EnableTrigger( gg_trg_P4 )
    call EnableTrigger( gg_trg_P5 )
    call EnableTrigger( gg_trg_P6 )
    call EnableTrigger( gg_trg_P7 )
    call EnableTrigger( gg_trg_P8 )
//===========================================================================
    call DisplayTimedTextToForce(GetPlayersAll(), 20.00, "TRIGSTR_1379")
//===========================================================================
    call StartTimerBJ(udg_Timer, false, 20.00)
    set udg_TimerWindow = CreateTimerDialogBJ(udg_Timer, "TRIGSTR_1380")
    call TimerDialogDisplayBJ(true, udg_TimerWindow)
//===========================================================================
    loop
        exitwhen (TimerGetRemaining(udg_Timer) < 1.00)
        call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 1.00))
    endloop
//===========================================================================
    call DestroyTimerDialogBJ(udg_TimerWindow)
//===========================================================================
    call DisableTrigger( gg_trg_P1 )
    call DisableTrigger( gg_trg_P2 )
    call DisableTrigger( gg_trg_P3 )
    call DisableTrigger( gg_trg_P4 )
    call DisableTrigger( gg_trg_P5 )
    call DisableTrigger( gg_trg_P6 )
    call DisableTrigger( gg_trg_P7 )
    call DisableTrigger( gg_trg_P8 )
//===========================================================================
    call ChangeDifficult()
//===========================================================================
    call TriggerSleepAction( 3.00 )
//===========================================================================
    call DisplayTextToForce( GetPlayersAll(), "TRIGSTR_1382" )
    call DisplayTextToForce( GetPlayersAll(), "TRIGSTR_1383" )
    call DisplayTextToForce( GetPlayersAll(), "TRIGSTR_1384" )
    call DisplayTimedTextToForce( GetPlayersAll(), 20.00, "TRIGSTR_1381" )
//===========================================================================
    call SetPlayerTechMaxAllowedSwap('R000', udg_Difficult, Player(8))
    call SetPlayerTechMaxAllowedSwap('R000', udg_Difficult, Player(9))
    call SetPlayerTechMaxAllowedSwap('R000', udg_Difficult, Player(10))
    call SetPlayerTechMaxAllowedSwap('R000', udg_Difficult, Player(11))
//===========================================================================
    set g = I2R(CountPlayersInForceBJ(udg_The_Players) * 10) + 90
//===========================================================================
    call SetPlayerHandicapBJ(Player(8), g)
    call SetPlayerHandicapBJ(Player(9), g)
    call SetPlayerHandicapBJ(Player(10), g)
    call SetPlayerHandicapBJ(Player(11), g)
//===========================================================================
    call TriggerExecute( gg_trg_Gameplay )
//===========================================================================
    call PlaySoundBJ( gg_snd_ReviveHuman )
//===========================================================================
    if p1 == 1 then
        set p = GetRectCenter(gg_rct_P1)
        set u = CreateUnitAtLoc(Player(0),'hpea',p,270.00)
        call ResetToGameCameraForPlayer( Player(0), 0 )
        call CameraSetupApplyForPlayer( true, gg_cam_P1_2, Player(0), 0.00 )
        call SelectUnitForPlayerSingle(u, Player(0) )
        call DestroyEffectBJ(AddSpecialEffectLocBJ( p, "Abilities\\Spells\\Human\\Resurrect\\ResurrectTarget.mdl" ))
        call RemoveLocation(p)
    endif
//===========================================================================
    if p2 == 1 then
        set p = GetRectCenter(gg_rct_P2)
        set u = CreateUnitAtLoc(Player(1),'hpea',p,270.00)
        call ResetToGameCameraForPlayer( Player(1), 0 )
        call CameraSetupApplyForPlayer( true, gg_cam_P1_2, Player(1), 0.00 )
        call SelectUnitForPlayerSingle(u, Player(1) )
        call DestroyEffectBJ(AddSpecialEffectLocBJ( p, "Abilities\\Spells\\Human\\Resurrect\\ResurrectTarget.mdl" ))
        call RemoveLocation(p)
        endif
//===========================================================================
    if p3 == 1 then
        set p = GetRectCenter(gg_rct_P3)
        set u = CreateUnitAtLoc(Player(2),'hpea',p,270.00)
        call ResetToGameCameraForPlayer( Player(2), 0 )
        call CameraSetupApplyForPlayer( true, gg_cam_P3_4, Player(2), 0.00 )
        call SelectUnitForPlayerSingle(u, Player(2) )
        call DestroyEffectBJ(AddSpecialEffectLocBJ( p, "Abilities\\Spells\\Human\\Resurrect\\ResurrectTarget.mdl" ))
        call RemoveLocation(p)
    endif
//===========================================================================
    if p4 == 1 then
        set p = GetRectCenter(gg_rct_P4)
        set u = CreateUnitAtLoc(Player(3),'hpea',p,270.00)
        call ResetToGameCameraForPlayer( Player(3), 0 )
        call CameraSetupApplyForPlayer( true, gg_cam_P3_4, Player(3), 0.00 )
        call SelectUnitForPlayerSingle(u, Player(3) )
        call DestroyEffectBJ(AddSpecialEffectLocBJ( p, "Abilities\\Spells\\Human\\Resurrect\\ResurrectTarget.mdl" ))
        call RemoveLocation(p)
    endif
//===========================================================================
    if p5 == 1 then
        set p = GetRectCenter(gg_rct_P5)
        set u = CreateUnitAtLoc(Player(4),'hpea',p,270.00)
        call ResetToGameCameraForPlayer( Player(4), 0 )
        call CameraSetupApplyForPlayer( true, gg_cam_P5_6, Player(4), 0.00 )
        call SelectUnitForPlayerSingle(u, Player(4) )
        call DestroyEffectBJ(AddSpecialEffectLocBJ( p, "Abilities\\Spells\\Human\\Resurrect\\ResurrectTarget.mdl" ))
        call RemoveLocation(p)
    endif
//===========================================================================
    if p6 == 1 then
        set p = GetRectCenter(gg_rct_P6)
        set u = CreateUnitAtLoc(Player(5),'hpea',p,270.00)
        call ResetToGameCameraForPlayer( Player(5), 0 )
        call CameraSetupApplyForPlayer( true, gg_cam_P5_6, Player(5), 0.00 )
        call SelectUnitForPlayerSingle(u, Player(5) )
        call DestroyEffectBJ(AddSpecialEffectLocBJ( p, "Abilities\\Spells\\Human\\Resurrect\\ResurrectTarget.mdl" ))
        call RemoveLocation(p)
    endif
//===========================================================================
    if p7 == 1 then
        set p = GetRectCenter(gg_rct_P7)
        set u = CreateUnitAtLoc(Player(6),'hpea',p,270.00)
        call ResetToGameCameraForPlayer( Player(6), 0 )
        call CameraSetupApplyForPlayer( true, gg_cam_P7_8, Player(6), 0.00 )
        call SelectUnitForPlayerSingle(u, Player(6) )
        call DestroyEffectBJ(AddSpecialEffectLocBJ( p, "Abilities\\Spells\\Human\\Resurrect\\ResurrectTarget.mdl" ))
        call RemoveLocation(p)
    endif
//===========================================================================
    if p8 == 1 then
        set p = GetRectCenter(gg_rct_P8)
        set u = CreateUnitAtLoc(Player(7),'hpea',p,270.00)
        call ResetToGameCameraForPlayer( Player(7), 0 )
        call CameraSetupApplyForPlayer( true, gg_cam_P7_8, Player(7), 0.00 )
        call SelectUnitForPlayerSingle(u, Player(7) )
        call DestroyEffectBJ(AddSpecialEffectLocBJ( p, "Abilities\\Spells\\Human\\Resurrect\\ResurrectTarget.mdl" ))
        call RemoveLocation(p)
    endif
//===========================================================================
    call EnableTrigger(gg_trg_Restart)
//===========================================================================
    set u = null
    set p = null
endfunction
//===========================================================================
function InitTrig_StartGame takes nothing returns nothing
    set gg_trg_StartGame = CreateTrigger(  )
    call TriggerAddCondition( gg_trg_StartGame, Condition( function Trig_StartGame_Conditions ) )
    call TriggerAddAction( gg_trg_StartGame, function Trig_StartGame_Actions )
endfunction

тут до-фига всяких нестандартных функций, а также включений других тригов...
Старый 14.08.2007, 19:06
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
Цитата:
Этот триггер большой

Ой, и правда большой...

Проверь, после какого действия он "вырубается". После каждого действия вставляй по очереди сообщение и будет видно.
Старый 14.08.2007, 19:15
ScorpioT1000
Работаем
offline
Опыт: отключен
Цитата:
После каждого действия

Заипешься такой дебагг.. над хотяб примерно отследить..
Старый 14.08.2007, 19:19
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт: 6,885
Активность:
Я в самом триггере уже поставил Вывод сообщения (см. Триггер)..."111" выводит, а "222" уже нет!
Старый 14.08.2007, 19:25
ScorpioT1000
Работаем
offline
Опыт: отключен
mb
Цитата:
call DisableTrigger(GetTriggeringTrigger())
хз че тама..
Старый 14.08.2007, 19:31
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
Не, проблема не может быть в этом.
Alex_Hell
Там, между твоими сообщениями ещё четыре фун-ии, постаь мессаги между ними, посмотри чё будет...
Старый 14.08.2007, 19:53
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт: 6,885
Активность:
Цитата:
Сообщение от ScorpioT1000
mb
Код:
call DisableTrigger(GetTriggeringTrigger())

хз че тама..

Это просто выключает триггер, но действия продолжаются дальше!
DFlyer, щас попробую это сделать!

Alex_Hell добавил:
А вообще, из-за чего триггер может выключаться?

Alex_Hell добавил:
В редакторе тестил, "222" тоже показывает!
Щас вот я уточнил до куда идет триггер...он обрывается перед циклом:
Код:
loop
        exitwhen (udg_GameType != 0)
        call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 0.25))
    endloop

Почему?
Старый 14.08.2007, 21:01
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
Alex_Hell
В этом коде нету изменения переменной udg_GameType. Т.е. цикл получается бесконечный. Попробуй что-н типа этого
Код:
loop
        exitwhen (udg_GameType != 0)
        call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 0.25))
        set udg_GameType = udg_GameType - 1
    endloop
Старый 14.08.2007, 23:10
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт: 6,885
Активность:
DFlyer, НЕТ! Цикл не бесконеный...он выйдет из цикла после того, как udg_GameType != 0...т.е он ждет, пока в другой функции GameType измениться, ведь это глобалка! Посмотри, перед циклом стоит:
Код:
call TriggerExecute(gg_trg_CreateDialog)

udg_GameType должен измениться там!
Ведь первый раз триггер проходит полностью...может при 2-м запуске <gg_trg_CreateDialog> уже не меняет udg_GameType...
Но все-таки стоит проверить этот триггер(gg_trg_CreateDialog)...
Старый 15.08.2007, 09:56
S

offline
Опыт: 43,833
Активность:
Не хочу мешать но насколько я знаю Execute - это запуск триггера как бы это сказать... отдельно - он функционирует отдельно, остальные отдельно.
Лучше всего сначала проинициализировать триггер в main(1,2,3,4...) aka Call *имя триггера*() а потом уже проводить с ним остальные операции =\
Старый 15.08.2007, 10:04
J
expert
offline
Опыт: 48,447
Активность:
Sasha ему и нужно чтобы он работал отдельно
Alex_Hell выложи триггер CreateDialog

Jon добавил:
Alex_Hell поставь в цыкле дебаг текст, если он постояно отображается на экране через каждые 0.25 сек, значит дело в триггере CreateDialog

Отредактировано Jon, 15.08.2007 в 10:21.
Старый 15.08.2007, 10:10
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт: 6,885
Активность:
Я все понял! Ошибка была действительно в триггере CreateDialog. При первом его запуске создавался диалог, ожидающий ответа от хоста, почле чего было:
Код:
set udg_Dialog = null

Из-за этого диалог обнулялся, а при следующем запуске трига он просто заного не создавался, т.к. не было действия
Код:
set udg_Dialog = DialogCreate()
...я заменил обнуление на
Код:
call DialogClear(udg_Dialog)

Все работает!

Всем спасибо за помощь!
Старый 15.08.2007, 13:03
Ответ

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

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

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

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



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