Добавлен
Есть задача - при касте "перевоплощения" давать юниту абилку на время перевоплощения, и когда оно закончится, забирать её назад.
function Trig_castadd_Conditions takes nothing returns boolean
    if GetAbilityName(GetSpellAbilityId()) == "Перевоплощение Нах" then
        return true
    endif
    return false
endfunction

function tt2 takes timer t, unit u returns nothing
    //takes timer t, unit u равно или не равно 
    //local timer t = CreateTimer()
    //local unit u
    call DestroyTimer(t)
    call UnitRemoveAbility(u, 'A000')
    set u = null
endfunction

function Trig_castadd_Actions takes nothing returns nothing
    local timer t = CreateTimer()
    local unit u = GetTriggerUnit()
    call UnitAddAbility(u,'A000')
    call TimerStart(t , 60 , false , function tt2(t,u))
    set u = null
endfunction

//===========================================================================
function InitTrig_castadd takes nothing returns nothing
    set gg_trg_castadd = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_castadd, EVENT_PLAYER_UNIT_SPELL_FINISH )
    call TriggerAddCondition( gg_trg_castadd, Condition( function Trig_castadd_Conditions ) )
    call TriggerAddAction( gg_trg_castadd, function Trig_castadd_Actions )
endfunction
Компилятор ругается на эту строку:
    call TimerStart(t , 60 , false , function tt2(t,u))
	//Строка 50: Отсутствует символ '//
Использую шарпкрафт, ибо ни одна из версий JPNG не хочет работать
Итак - вопрос
Как переносить данные с триггера на триггер, не используя глобалки.
Насколько я понял, код,
call TimerStart(udg_t , 60 , false , function tt2(udg_t,u))
использованный через глобалку, забивает её на 60 секунд.
т.е при её изменении, действия уже не будет (Поправьте меня)
Как синхронизировать глобальные таймеры (по массиву) в пределах двух-пяти функций, используя локальный i для переноса хендла? (От чего брать хендл в текущей ситуации)

Функции, исполняемые при тиках таймеров не должны принимать параметров. Для передачи данных нужно пользоватся хеш-таблицами.
`
ОЖИДАНИЕ РЕКЛАМЫ...
23
Похожие вопросы:

ответ
Действие "Pan camera as necessary (Timed)" использует функцию SmartCameraPanBJ, в которой близарды допустили ошибку вызывающую десинхронизацию.
Используй "Pan camera (Timed)".
ответ
Главный кошмар тут, конечно - 14 групп. Пришлось так делать, т. к. принципиально не хочу применять глобалки, а локалки, похоже, после дестройгруп заново не юзабельны.
Это вроде должно быть легко поправить, вместо
call DestroyGroup (firewayunits1)
везде ставь
call GroupClear(firewayunits1)
и в самом конце уже, где идет обнуление переменных, там оставляешь DestroyGroup.
И с чего такая нелюбовь к глобалкам? Хештаблица используется, а это ж тоже глобалка, причем даже не просто глобалка, а супер-глобалка. У меня с ней постоянно головная боль была, из-за возникающих после интенсивной работы странных глюков...
ответ
получение текущего приказа не требует от тебя нихера, тебе нужно, чтобы там не было "useitem", и всё
ответ
Steal nerves, Я сделал с детектором бафа обычного лечение, здоровье восстанавливаю триггерно, забил на ауру.
ответ
Steal nerves:
нет, достаточно одной глобалки bj_lastCreatedTextTag на все. И тогда не нужна никакая локалка. Так использую во многих системах, и работает. Глобалка bj_lastCreatedTextTag является темповой - ну то есть временной ссылкой, чтобы что-то там сделать дальше: цвета прозрачность настроить, время жизни и так далее.
Раньше давно-давно тоже думал, что нужно прям везде и на всё локалки ставить для мультиплеера. А как оказалось нет. Работает и глобалка. Дело в том, что у тебя задержек никаких нет, то и локалки не нужны. Потому что делаешь лишние операции - объявить - обнулить. Ну и во-вторых, у текстагов можно задавать время жизни, сами удаляться.

17
Непонятая мной штуковина:
function tt takes timer t, unit u returns nothing
Запрашивает таймер и юнита.
call TimerStart(t,60,false,function tt(t,GetTriggerUnit())
Мы их ей даём при старте.
Будет ли первая функция будет автоматом создавать локалки, в виде таймера t, юнита u и брать значения с её вызова?
call TimerStart(t,60,false, function tt(t,GetTriggerUnit())
т.е. синхронизировать таймер с вызова и свой только что созданный (или не созданный) таймер?
21
Функции, исполняемые при тиках таймеров не должны принимать параметров. Для передачи данных нужно пользоватся хеш-таблицами.
Принятый ответ
32
Чето какой то дурной код, перевоплащение кастуется и туда и обратно и ловится событием юнит кастует абилку, так же еще нужно добавить событие что юнит сдох (морф прикрывается при смерти без каста).
Чтобы оставить комментарий, пожалуйста, войдите на сайт.