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

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

Ответ
 
Daemonik

offline
Опыт: 5,084
Активность:
Не работает триггер
Код:
function Trig_Reinstal_Conditions takes nothing returns boolean
    return IsUnitType(GetDyingUnit() , UNIT_TYPE_HERO)
endfunction

function Timer1 takes nothing returns nothing
    call ReviveHero(udg_u11 , GetRectCenterX(gg_rct________________020) , GetRectCenterY(gg_rct________________020) , false)
    if ( GetLocalPlayer() == Player(0) ) then
        call PanCameraToTimed(GetRectCenterX(gg_rct________________020) , GetRectCenterY(gg_rct________________020) , 0.00)
    endif
    call DestroyTimerDialog(d)
    call DestroyTimer(t)
endfunction

function Trig_Reinstal_Actions takes nothing returns nothing
    call DisplayTextToPlayer(Player(0) , 0 , 0 , "Твой герой был повержен в бою. Ты потерял немного золота, до появления героя 25 секунд.")
    call SetPlayerState(Player(0) , PLAYER_STATE_RESOURCE_GOLD , ( GetPlayerState(Player(0) , PLAYER_STATE_RESOURCE_GOLD) - 200 ))
    if ( GetLocalPlayer() == Player(0) ) then
        call TimerDialogDisplay(d , true)
    endif
    call TimerDialogSetTitle(d , "Время до возрождения")
    call TimerStart(t , 25.00 , false , function Timer1)
    call SetUnitPosition(udg_u12 , GetUnitX(udg_u11), GetUnitY(udg_u11))
endfunction

//===========================================================================
function InitTrig_Reinstal takes nothing returns nothing
    set gg_trg_Renistal = CreateTrigger()
    call TriggerRegisterPlayerUnitEvent(gg_trg_Renistal , Player(0) , EVENT_PLAYER_UNIT_DEATH , null)
    call TriggerAddCondition(gg_trg_Renistal , Condition(function Trig_Reinstal_Conditions))
    call TriggerAddAction(gg_trg_Renistal , function Trig_Reinstal_Actions)
endfunction


Герой умирает и даже текст не появляется(

Отредактировано Daemonik, 22.07.2009 в 20:05.
Старый 22.07.2009, 19:59
J
expert
offline
Опыт: 48,447
Активность:
замени эту фигню TRIGSTR_735 на что-нибудь нормальное...
ты уверен что герой принадлежит второму игроку?
Старый 22.07.2009, 20:01
Daemonik

offline
Опыт: 5,084
Активность:
Я просто первый триггер взял. Их 8 и они все одинаковые.
Старый 22.07.2009, 20:04
J
expert
offline
Опыт: 48,447
Активность:
что за переменные d и t? это локалки? где они объявляются?
Старый 22.07.2009, 20:12
Daemonik

offline
Опыт: 5,084
Активность:
Это глобалки. Объявляются в нестандартном коде.
Код:
globals 
    timer t = CreateTimer()
    timerdialog d = CreateTimerDialog(t)
endglobals
Старый 22.07.2009, 20:21
DKbru

offline
Опыт: 1,407
Активность:
продебаг весь код триггера в поиске не объявленных или некорректно объявленных переменных. Ещё я не уверен, но по-моему, в custom code не стоит объявлять глобалки, если они не в библиотеке.
Старый 22.07.2009, 21:05
Daemonik

offline
Опыт: 5,084
Активность:
  1. Проблема не в том что не запускается таймер, этот триггер не выдает даже текст => триггер попросту не работает.
  2. Насколько я знаю JPNG позволяет вносить глобалки в любой части кода.
Старый 22.07.2009, 21:24
Lawliet

offline
Опыт: 6,322
Активность:
TriggerRegisterPlayerUnitEvent(gg_trg_Renistal , Player(0) , EVENT_PLAYER_UNIT_DEATH , null)
вот это замени на аналог с BJ и все будет работать.
Lawliet добавил:
сталкивался с такой же проблемой, почему так я понятия не имею.
Старый 23.07.2009, 00:31
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
мб изза этого -
Цитата:
Player(0)
это будет работать только для красного игрока (1)
Старый 23.07.2009, 16:43
Daemonik

offline
Опыт: 5,084
Активность:
У меня 8 таких для всех игроков
Старый 23.07.2009, 16:49
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Возможно воскрешается не тот юнит. В SetUnitPosition указывается u12, а в воскрешении u11.
Hellfim добавил:
И где кстати объявляются/присваиваются эти глобалки?
Старый 23.07.2009, 19:47
Daemonik

offline
Опыт: 5,084
Активность:
При выборе героя. Герою присваивается переменная udg_u11, юниту-рюкзаку присваивается переменная udg_u12.
Воскрешается тот юнит. SetUnitPosition, для того что бы юнит-рюкзак не летел через всю карту за героем.
Старый 24.07.2009, 10:02
FREEZE_ball
Cataclysm => жара
offline
Опыт: 15,247
Активность:
Daemonik, такие функции просвечиваются функцией BJDebugMsg. После каждой строчки добавь эту функцию, а в параметрах ставь цифры по порядку: 1, 2, 3, 4... При запуске этого триггера смотри, какие цифры появляются, а на какой это действие обрывается. Этот метод позволяет устранить множество ошибок в коде.
Старый 24.07.2009, 10:08
Daemonik

offline
Опыт: 5,084
Активность:
Код:
call DisplayTextToPlayer(Player(0) , 0 , 0 , "Твой герой был повержен в бою. Ты потерял немного золота, до появления героя 25 секунд.")

Триггер обрывается уже здесь. Я думаю вывод сообщения игроку сойдет за BJDebugMsg
Старый 24.07.2009, 10:22
Elf_Stratigo

offline
Опыт: 4,699
Активность:
попробуй
if GetLocalPlayer()==Player(0) then
call DisplayTextToPlayer(GetLocalPlayer() , 0 , 0 , "Твой герой был повержен в бою. Ты потерял немного золота, до появления героя 25 секунд.")
endif
Старый 24.07.2009, 12:03
Daemonik

offline
Опыт: 5,084
Активность:
Код:
if GetLocalPlayer()==Player(0) then
call DisplayTextToPlayer(GetLocalPlayer() , 0 , 0 , "Твой герой был повержен в бою. Ты потерял немного золота, до появления героя 25 секунд.")
endif

и
Код:
call DisplayTextToPlayer(Player(0) , 0 , 0 , "Твой герой был повержен в бою. Ты потерял немного золота, до появления героя 25 секунд.")

Одно и то же, только в первом случае добавлен ненужный if.
Я в принципе сделал, но теперь герой воскрешается один раз
Код:
function Trig_Repic_HERO_1_Conditions takes nothing returns boolean
    return IsUnitType(GetDyingUnit() , UNIT_TYPE_HERO)
endfunction

function Timer_1 takes nothing returns nothing
    call ReviveHero(udg_u11 , GetRectCenterX(gg_rct________________072) , GetRectCenterY(gg_rct________________072) , false)
    if ( GetLocalPlayer() == Player(0) ) then
        call PanCameraToTimed(GetRectCenterX(gg_rct________________072) , GetRectCenterY(gg_rct________________072) , 0.00)
    endif
    call EnableTrigger(gg_trg_Repick_Town)
    if (GetLocalPlayer() == Player(0)) then
        call TimerDialogDisplay(td, false)
    endif
    call DestroyTimer(tt)
endfunction

function Trig_Repic_HERO_1_Actions takes nothing returns nothing
    call DisplayTextToPlayer(Player(0) , 0 , 0 , "Твой герой был повержен в бою. Ты потерял немного золота, до появления героя 25 секунд.")
    call SetPlayerState(Player(0) , PLAYER_STATE_RESOURCE_GOLD , ( GetPlayerState(Player(0) , PLAYER_STATE_RESOURCE_GOLD) - 200 ))
    if ( GetLocalPlayer() == Player(0) ) then
        call TimerDialogDisplay(td , true)
    endif
    call TimerDialogSetTitle(td , "Время до возрождения")
    call TimerStart(tt , 25.00 , false , function Timer_1)
    call SetUnitPosition(udg_u12 , GetUnitX(udg_u11), GetUnitY(udg_u11))
    call DisableTrigger(gg_trg_Repick_Town)
endfunction

//===========================================================================
function InitTrig_Repic_HERO_1 takes nothing returns nothing
    set gg_trg_Repic_HERO_1 = CreateTrigger()
    call TriggerRegisterPlayerUnitEvent(gg_trg_Repic_HERO_1 , Player(0) , EVENT_PLAYER_UNIT_DEATH , null)
    call TriggerAddCondition(gg_trg_Repic_HERO_1 , Condition(function Trig_Repic_HERO_1_Conditions))
    call TriggerAddAction(gg_trg_Repic_HERO_1 , function Trig_Repic_HERO_1_Actions)
endfunction

Правда это немного другой триггер.
Старый 24.07.2009, 12:21
Lawliet

offline
Опыт: 6,322
Активность:
попробуй сделать как я сказал.
Старый 24.07.2009, 12:27
Daemonik

offline
Опыт: 5,084
Активность:
Триггер работает, но герой воскрешается один раз. Если бы проблема в событии была, он бы вообще не воскрес.
Старый 24.07.2009, 12:28
Ranger21
I love beatiul days XD
offline
Опыт: 13,274
Активность:
call DestroyTimer(tt)
call TimerStart(tt , 25.00 , false , function Timer_1)
У тебя это глобальный таймер и ты его потом удаляешь? естественно тогда не будет потом он запускаться...
Надо делать массив таймеров для всех игроков. А для индекса массива использовать цифру игрока
Старый 24.07.2009, 12:30
Daemonik

offline
Опыт: 5,084
Активность:
Ок. Попробую. Тему пока не закрывайте.
Старый 24.07.2009, 12:32
Ответ

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

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

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

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



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