Вот код, в котором потерялся юнит (Не убирается, дебаг не возвращает ID)
    private function AnimationTimerFollowup takes timerData data returns nothing
        
        call RemoveUnit(data.u)
        call CreateItem('MI00', GetLocationX(data.l), GetLocationY(data.l))    
        set data.u = null
        set data.l = null
        call data.destroy()
    endfunction
До вызова такие объявления:
        local unit u = GetTriggerUnit()
        local player p = GetOwningPlayer(u)
        local location l = GetUnitLoc(u)
        local timer t = NewTimer()
        local timerData animData = timerData.create()
        
        set animData.u = u
        set animData.l = l
И сам вызов функции:
            call SetUnitAnimationReverseFollowed(u, 3, 1, 1, true, FollowUpFunc.AnimationTimerFollowup, animData)
Функция вызывается нормально, так как айтем создается правильно, юнита не трогал между локалками и вызовом. В упор не вижу в чем проблема.
Заранее спасибо.

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

зачем внешние очишаеш структуру?
Порой это нужно.

Замени GetTriggerUnit() на GetSpellAbilityUnit().
ApaxHoqpuJL:
call SetUnitAnimationReverseFollowed(u, 3, 1, 1, true, FollowUpFunc.AnimationTimerFollowup, animData)
А это что такое? Что за FollowUpFunc.AnimationTimerFollowup?
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
1
28
5 лет назад
1
зачем внешние очишаеш структуру?
Порой это нужно.

Замени GetTriggerUnit() на GetSpellAbilityUnit().
ApaxHoqpuJL:
call SetUnitAnimationReverseFollowed(u, 3, 1, 1, true, FollowUpFunc.AnimationTimerFollowup, animData)
А это что такое? Что за FollowUpFunc.AnimationTimerFollowup?
Принятый ответ
0
23
5 лет назад
0
PT153, но сути
method onDestroy takes noting returns nothing
if this.u != null then
	set this.u = null
endif
if this.l != null then
	set this.l = null
endif
endmethod
data.destroy() и все чтобы не хранили его ссылку на юнитов =) а если необходимо внешне то удаляем внешнее =)
0
32
5 лет назад
0
pro100master,destroy просто позволяет в эти ячейки записывать снова, но в глобалках так и висят значения.
Кстати юнитов с ходу удалять ненужно, просто убивайте, возможны баги, лучше чтобы движок сам утилизировал юнита, ремув это крайние меры для визуальных даммиков и тому подобное, которое никакими абилки не взаимодействует с остальными.
0
23
5 лет назад
0
quq_CCCP, хендлы останет если на него сылает даже удаленый юнит как бы! А когда почишаеш то хендл уменшает даже если мусор удалил юнитов! Или я ошибься =) Суть ответ выше уже написали заменить триггер на каст юнит
2
3
5 лет назад
Отредактирован ApaxHoqpuJL
2
PT153, FollowUpFunc это интерфейс в той либе. Помогает данные в функцию запихивать после таймера. AnimationTimerFollowup это функция, которая в скопе.
quq_CCCP Юнита здесь было предпочтительнее ремувнуть, чтобы death анимация не играла и эффект взрыва не появлялся.
Замена GetTriggerUnit на GetSpellAbilityUnit помогла, запомню на будущее. Спасибо всем.
0
32
5 лет назад
0
ApaxHoqpuJL, если дамик плюнет ядом в героя а даммика удалить, убийца будет неизвестен, суицид... Возможны и другие чудеса, о которых писал лич в своем блоге. Я сталкивался что у меня ломались стандартные абилки на ровном месте...
0
3
5 лет назад
0
quq_CCCP, Тут всего лишь здание в предмет сворачивается, так что можно не париться. Но в будущем буду осторожен, спасибо.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.