Пробую работать с хэш таблицей и таймерами запустить его получается а вот отключить нет.
function Timer_On takes nothing returns nothing


    local timer t = GetExpiredTimer()
    local unit u = LoadUnitHandle(Hash, GetHandleId(t), 0)
    call FlushChildHashtable(Hash, GetHandleId(t))
    call PauseTimer(t)
    call DestroyTimer(t)
    set t = null
    set u = null
call DisplayTextToForce( GetPlayersAll(), "Off" )


endfunction
function Timer_Off takes nothing returns nothing

local timer t = CreateTimer()
    local unit u = GetTriggerUnit()
    call SaveUnitHandle(Hash, GetHandleId(t), 0, u)
    call TimerStart (t, 0.20, false, function Trig_Shoot_Actions)
    set t = null
    set u = null
call DisplayTextToForce( GetPlayersAll(), "On" )

endfunction





function Trig_Shoot_Conditions takes nothing returns boolean
 return BlzGetTriggerPlayerMouseButton() == MOUSE_BUTTON_TYPE_RIGHT
endfunction




//===========================================================================
function InitTrig_Shoot takes nothing returns nothing
    local trigger On = CreateTrigger()
    local trigger Off = CreateTrigger()
    call TriggerRegisterPlayerMouseEventBJ( On, Player(0), bj_MOUSEEVENTTYPE_UP )
    call TriggerAddCondition( On, Condition( function Trig_Shoot_Conditions ) )
    call TriggerAddAction( On, function Timer_On )
    call TriggerRegisterPlayerMouseEventBJ( Off, Player(0), bj_MOUSEEVENTTYPE_DOWN )
    call TriggerAddCondition( Off, Condition( function Trig_Shoot_Conditions ) )
    call TriggerAddAction( Off, function Timer_Off )
    set On = null
    set Off = null
endfunction

Принятый ответ

а чё его отключать, он как бы один раз сработает у тебя
но вообще: GetExpiredTimer надо ловить в функции, которая в TimerStart прописана

но триггер каламбур полный
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
27
4 месяца назад
Отредактирован MpW
0
Ты зпускаешь не существующую функцию Trig_Shoot_Actions. Как препроцессор этот код пропустил?

Тут у вас с примером не указана эта функц. Нпверн ты хотел Timer_On указать

Еще по поводу ивента мыши и GetTriggerUnit() , ивент мыши по идее не даст GetTriggerUnit()
0
8
4 месяца назад
0
МрачныйВорон, вот с тестом
function Timer_Test takes nothing returns nothing
call DisplayTextToForce( GetPlayersAll(), "Ok))" )
endfunction


function Timer_On takes nothing returns nothing


    local timer t = GetExpiredTimer()
    local unit u = LoadUnitHandle(Hash, GetHandleId(t), 0)
    call FlushChildHashtable(Hash, GetHandleId(t))
    call PauseTimer(t)
    call DestroyTimer(t)
   
    set t = null
    set u = null
call DisplayTextToForce( GetPlayersAll(), "Off" )


endfunction
function Timer_Off takes nothing returns nothing

local timer t = CreateTimer()
    local unit u = GetTriggerUnit()
    call SaveUnitHandle(Hash, GetHandleId(t), 0, u)
    call TimerStart (t, 0.20, true, function Timer_Test)
    set t = null
    set u = null
call DisplayTextToForce( GetPlayersAll(), "On" )

endfunction





function Trig_Shoot_Conditions takes nothing returns boolean
 return BlzGetTriggerPlayerMouseButton() == MOUSE_BUTTON_TYPE_RIGHT
endfunction




//===========================================================================
function InitTrig_Shoot takes nothing returns nothing
    local trigger On = CreateTrigger()
    local trigger Off = CreateTrigger()
    call TriggerRegisterPlayerMouseEventBJ( On, Player(0), bj_MOUSEEVENTTYPE_UP )
    call TriggerAddCondition( On, Condition( function Trig_Shoot_Conditions ) )
    call TriggerAddAction( On, function Timer_On )
    call TriggerRegisterPlayerMouseEventBJ( Off, Player(0), bj_MOUSEEVENTTYPE_DOWN )
    call TriggerAddCondition( Off, Condition( function Trig_Shoot_Conditions ) )
    call TriggerAddAction( Off, function Timer_Off )
    set On = null
    set Off = null
endfunction
endlibrary
1
27
4 месяца назад
1
Еще по поводу ивента мыши и GetTriggerUnit() , ивент мыши по идее не даст GetTriggerUnit()
В рефорлже при ивенте движения мыши EVENT_PLAYER_MOUSE_MOVE можно получить юнита, на которого навели мышью с помощью нативки BlzGetMouseFocusUnit()
0
8
4 месяца назад
0
Мне нужно выключить таймер который я запустил , толком не могу найти инфу получилось только вот эта дичь.
1
13
4 месяца назад
1
В рефорлже при ивенте движения мыши EVENT_PLAYER_MOUSE_MOVE можно получить юнита, на которого навели мышью с помощью нативки BlzGetMouseFocusUnit()
Сегодня я узнал нечто очень полезное, спасибо!
0
27
4 месяца назад
Отредактирован MpW
0
Cancel, BlzGetMouseFocusUnit() можно и без ивента получить, так тоже работает. Я таким образом чекал ежесекудно таймером выделен ли мой герой. Это к примеру, мне не требовалось создавать триггер с ивентом
jasonrus96, да ты не верно используешь функции
Замени строчку
call TimerStart (t, 0.20, true, function Timer_TimeTest)
на
call TimerStart (t, 0.20, true, function Timer_On) 
Еще вопрос зачем ты таймер делаешь периодичным, а не одноразовым?
Еще мне не понятна эта строчка, ты вызываешь Timer_On, но ты видел содержание функции?
    call TriggerAddAction( On, function Timer_On )
Там таймер GetExpiredTimer() ты можешь и не получить, ибо запускается не через таймер, а через действие триггера. а следовательно, ты не сможешь загрузить.

В триггере при клике на правуб кнопку мыши (пкм), ты в действии, в чсстности в функции Timer_Off
local unit u = GetTriggerUnit()
Откуда здесь GetTriggerUnit(), ты этого юнита можешь не получить. Надо либо в глобалку или ещк. Я не знаю какую ты задачу решаешь, но если ты проверяешь клик пкм по цели, то BlzGetMouseFocusUnit() сойдет за проверку. Иначе, ты можешь там своего выделенного героя в глобалку запихать, типа кастер итд
0
22
4 месяца назад
0
а чё его отключать, он как бы один раз сработает у тебя
но вообще: GetExpiredTimer надо ловить в функции, которая в TimerStart прописана

но триггер каламбур полный
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.