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

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

Закрытая тема
 
Daemonik

offline
Опыт: 5,084
Активность:
Проблема с таймером.
Код:
globals 
    timerdialog d
endglobals

function Trig_Renistal_Conditions takes nothing returns boolean
    return IsUnitType(GetDyingUnit(), UNIT_TYPE_HERO) 
endfunction

function t1 takes nothing returns nothing
    if (GetLocalPlayer() == Player(0)) then
        call TimerDialogDisplay(d, true)
    endif
    call ReviveHeroLoc( GetDyingUnit(), Location(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
endfunction

function Trig_Renistal_Actions takes nothing returns nothing
    local timer t =CreateTimer() 
    call DisplayTextToPlayer( Player(0), 0, 0, "TRIGSTR_4540" )
    call SetPlayerState( Player(0), PLAYER_STATE_RESOURCE_GOLD, (GetPlayerState(Player(0), PLAYER_STATE_RESOURCE_GOLD) - 200) )
    set d = CreateTimerDialog(t)
    call TimerStart(t, 25.00, false, function t1)
    call DestroyTimerDialog(d)
    call DestroyTimer(t)
    set t = null
    set d = null
endfunction

//===========================================================================
function InitTrig_Renistal takes nothing returns nothing
    local trigger t = CreateTrigger()
    call TriggerRegisterPlayerUnitEvent( t, Player(0), EVENT_PLAYER_UNIT_DEATH, null )
    call TriggerAddCondition( t, Condition( function Trig_Renistal_Conditions ) )
    call TriggerAddAction( t, function Trig_Renistal_Actions )
    set t = null
endfunction

Герой умирает и возрождается через 25 сек.
При этом должен отобразиться таймер.
У меня:
Герой умирает и тут же воскрешается((
Старый 11.07.2009, 18:34
SRes
1110101000
offline
Опыт: 9,997
Активность:
Daemonik, Зачем ты удаляешь таймер, который только создал ? Попробуй не удалять его. А только после выполнения.
Старый 11.07.2009, 18:37
Daemonik

offline
Опыт: 5,084
Активность:
Ок попробую
Код:
globals 
    timerdialog d
    timer ti
endglobals

function Trig_Renistal_Conditions takes nothing returns boolean
    return IsUnitType(GetDyingUnit(), UNIT_TYPE_HERO) 
endfunction

function t1 takes nothing returns nothing
    if (GetLocalPlayer() == Player(0)) then
        call TimerDialogDisplay(d, true)
    endif
    call ReviveHeroLoc( GetDyingUnit(), Location(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(ti)    
endfunction

function Trig_Renistal_Actions takes nothing returns nothing
    call DisplayTextToPlayer( Player(0), 0, 0, "TRIGSTR_4540" )
    call SetPlayerState( Player(0), PLAYER_STATE_RESOURCE_GOLD, (GetPlayerState(Player(0), PLAYER_STATE_RESOURCE_GOLD) - 200) )
    set d = CreateTimerDialog(ti)
    call TimerStart(ti, 25.00, false, function t1)
endfunction

вот так?
Старый 11.07.2009, 18:59
MF
Что-то вокруг не так
offline
Опыт: 26,594
Активность:
Код:
function t1 takes nothing returns nothing
    if (GetLocalPlayer() == Player(0)) then
        call TimerDialogDisplay(d, true)
    endif
    call ReviveHeroLoc( GetDyingUnit(), Location(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(GetExpiredTimer())
    set d = null
endfunction

function Trig_Renistal_Actions takes nothing returns nothing
    local timer t =CreateTimer() 
    call DisplayTextToPlayer( Player(0), 0, 0, "TRIGSTR_4540" )
    call SetPlayerState( Player(0), PLAYER_STATE_RESOURCE_GOLD, (GetPlayerState(Player(0), PLAYER_STATE_RESOURCE_GOLD) - 200) )
    call TimerStart(t, 25.00, false, function t1)
    set d = CreateTimerDialog(t)
    set t = null
endfunction


По идее нужно вот так.
Старый 11.07.2009, 19:05
Daemonik

offline
Опыт: 5,084
Активность:
Не работает((
Ни диалога нет, ни герой не воскрешается(
Код сейчас вот такой
Код:
globals 
    timerdialog d
endglobals

function Trig_a_Conditions takes nothing returns boolean
    return IsUnitType(GetDyingUnit(), UNIT_TYPE_HERO) 
endfunction

function t1 takes nothing returns nothing
    if (GetLocalPlayer() == Player(0)) then
        call TimerDialogDisplay(d, true)
    endif
    call ReviveHeroLoc( GetDyingUnit(), Location(GetRectCenterX(gg_rct________________000), GetRectCenterY(gg_rct________________000)), false )
    if (GetLocalPlayer() == Player(0)) then
        call PanCameraToTimed( GetRectCenterX(gg_rct________________000), GetRectCenterY(gg_rct________________000), 0.00 )
    endif
    call DestroyTimerDialog(d)
    call DestroyTimer(GetExpiredTimer())
    set d = null
endfunction

function Trig_a_Actions takes nothing returns nothing
    local timer t = CreateTimer() 
    call TimerStart(t, 25.00, false, function t1)
    set d = CreateTimerDialog(t)
    set t = null
endfunction

//===========================================================================
function InitTrig_a takes nothing returns nothing
    local trigger t = CreateTrigger()
    call TriggerRegisterPlayerUnitEvent( t, Player(0), EVENT_PLAYER_UNIT_DEATH, null )
    call TriggerAddCondition( t, Condition( function Trig_a_Conditions ) )
    call TriggerAddAction( t, function Trig_a_Actions )
    set t = null
endfunction

Как я понял ошибка кроется в старте таймера. Когда вставлял в функцию f1 Debug, он не работал.

Отредактировано Daemonik, 11.07.2009 в 23:43.
Старый 11.07.2009, 23:14
agentex

offline
Опыт: 34,834
Активность:
попробуй создавать диалог до старта таймера..

agentex добавил:
еще вот это допиши после создания диалога:
TimerDialogDisplayForPlayerBJ(true, d, Player(0))
Старый 12.07.2009, 00:03
Daemonik

offline
Опыт: 5,084
Активность:
Отображение диалога есть
Код:
if (GetLocalPlayer() == Player(0)) then
        call TimerDialogDisplay(d, true)
    endif


Daemonik добавил:
Цитата:
попробуй создавать диалог до старта таймера..

Сделал, диалог выводится, по истечению времени камера направляется к месту ресуректа, но героя нет(
Сейчас пробую вместо GetDyingUnit() воспользоваться глобалкой, в которой у меня находится герой.
Старый 13.07.2009, 10:57
agentex

offline
Опыт: 34,834
Активность:
Цитата:
Отображение диалога есть

нет, нету
Код:
function Trig_a_Actions takes nothing returns nothing
    local timer t = CreateTimer() 
    call TimerStart(t, 25.00, false, function t1)
    set d = CreateTimerDialog(t)
    set t = null
endfunction

где?

я не очень понимаю зачем ты показываешь диалог после истечения таймера.. бред какойто
Цитата:
Сделал, диалог выводится, по истечению времени камера направляется к месту ресуректа, но героя нет(
Сейчас пробую вместо GetDyingUnit() воспользоваться глобалкой, в которой у меня находится герой.

лол, конечно нет, так как дайинг юнит возвращает не ноль только если был использован в экшене на событие EVENT_PLAYER_UNIT_DEATH
юзай глобалки
Старый 13.07.2009, 11:12
Daemonik

offline
Опыт: 5,084
Активность:
Все работает))
Спасибо)
Старый 13.07.2009, 11:18
Закрытая тема

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

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

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

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



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