Дилема такова. Я с помощью способности создаю деревья вокруг зоны применения способности, но мне эти деревья нужно разрушить через какое-то время. Всё бы ничего, но способность должна быть мультиприменима.

Хештаблица тебе поможет решить дилему, сдесь есть статьи как ею пользоватся.
`
ОЖИДАНИЕ РЕКЛАМЫ...
18
Хештаблица тебе поможет решить дилему, сдесь есть статьи как ею пользоватся.
Принятый ответ
26
Ты можешь записывать каждое создаваемое дерево как отдельный разрушаемый объект (в переменную), и так же записывать время его жизни (для таймера).
В момент каста просто создаёшь таким образом N деревьев и всё.
По таймеру чекаешь все деревья и их время жизни, если оно дошло до нуля - ломаешь дерево.
11
Ты можешь записывать каждое создаваемое дерево как отдельный разрушаемый объект (в переменную), и так же записывать время его жизни (для таймера).
В момент каста просто создаёшь таким образом N деревьев и всё.
По таймеру чекаешь все деревья и их время жизни, если оно дошло до нуля - ломаешь дерево.
До мультеприменимостьи твой пример развить надо, хэштаблица, наверное, верный совет. Нужно все номера созданных деревьев в хэштаблицу этого таймера запихнуть. Тогда будет как надо, и удалять те что загрузятся при окончании таймера.
26
До мультеприменимости твой пример развить надо
Нет.
То что я описал и будет мультиприменяемым (если ты правильно воспроизведёшь описанное).
1
function Delete_Destructable takes nothing returns nothing
    local timer t = GetExpiredTimer()                  //Наш таймер - истёкший
    local integer h = GetHandleId(t)                   //Узнаём id таймера
    local destructable tree  //Достаём цель из значения 2
    local integer i = 1
   
   loop
        exitwhen i > 10
        set tree = LoadDestructableHandle(hash,h,i)
        call KillDestructable(tree)
        set i = i + 1
    endloop
    call DestroyTimer(t) //Уничтожаем таймер
    //Очищаем хеш-таблицу, чтобы избежать утечек и наложений
    call FlushChildHashtable(hash,h) //Очищаем ключ по id
    
    //Не забываем устранять утечки
    set tree = null
    set t = null
endfunction
 
function Hashtable_Actions takes nothing returns nothing
    local unit Caster = GetSpellAbilityUnit()
    local destructable Tree
    local location Target = GetSpellTargetLoc()
    local timer t = CreateTimer()
    local integer h = GetHandleId(t)
    
    //Сохраняем объекты с ключом - id таймера

    //Создаём деревья 
    local integer i = 1
    loop
        exitwhen i > 10
        call CreateDestructableLoc( 'LTlt', PolarProjectionBJ(GetSpellTargetLoc(), 200.00, ( I2R(i) * 36.00 )), GetRandomDirectionDeg(), 1.00, GetRandomInt(1, 10) )
        call SaveDestructableHandle(hash,h,bj_forLoopAIndex,GetLastCreatedDestructable()) 
        call SetDestructableAnimationBJ( GetLastCreatedDestructable(), "birth" )
        call SetDestructableLife( GetLastCreatedDestructable(), I2R(GetHeroStatBJ(bj_HEROSTAT_INT, GetTriggerUnit(), true)) )
        set i = i + 1
    endloop
    
//    call TimerStart(t,10,true,function Delete_Destructable)
endfunction

function Hashtable_Cond takes nothing returns boolean
    return GetSpellAbilityId() == 'A014'
endfunction

//===========================================================================
function InitTrig_Hashtable takes nothing returns nothing
    local trigger ForestKeeperTrees = CreateTrigger()
    local integer index
    set index = 0
    loop
        call TriggerRegisterPlayerUnitEvent(ForestKeeperTrees,Player(index),EVENT_PLAYER_UNIT_SPELL_CAST,null)
        index = index + 1
        exitwhen index >= 16
    endloop
    call TriggerAddCondition( ForestKeeperTrees, Condition(function Hashtable_Cond) )
    call TriggerAddAction( ForestKeeperTrees, function Hashtable_Actions )
endfunction

Borodach, nazarpunk, Если вам не трудно, можете пожалуйста проверить код. С хэш-таблицами работаю впервые, потому не знаю в чём ошибка. Деревья через 10 сек не разрушаются.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.