Способность то у меня получилось сделать (наверняка кто-то скажет, что там дофига утечек xd), но если поставить перезарядку на ноль и кидать этот "бумеранг", то следующий полетит, а предыдущий останется на одном месте..
Знаю, что эту проблему можно решить с помощью джасса, но я вообще не шарю в нём.. Читал статьи, читал.. А вот как сделать, чтобы бумеранги нормально летали так и не понял)
Думаю, что нужно локализировать применяющего юнита и сам бумеранг, но как с ними взаимодействовать в других триггерах я без понятия
(Если будет ответ, то пожалуйста, объясните - что, как, зачем и почему)
(Да-да, я зачем-то конвертировал триггеры в текст.. Думал, что мне так легче разобраться будет... Какой же я идиот)

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
28
8gabriel8, в смысле отскакивает?)
Просто наносит урон вокруг себя при движении
Автоатака сделана через РО (снаряд (рикошет)), я не столь крутой jass'ep, чтобы делать рикошеты с автоатаки)
PT153, помог, спасибо)
Теперь я знаю, что мне нужна хеш таблица, загадка скилла решена, ура)))
Уот_)
С этими скринами яснее.
Кстати, set l = null, или call removelocation(l)?
Загруженные файлы
28
Кстати, set l = null, или call removelocation(l)?
Сначала call RemoveLocation(l), потом первое.
30
Вот тут у героя есть способность бумеранг, реализовано не самым лучшим способом, но без утечек и MUI.
Загруженные файлы
28
Clamp, фаталку кидает, низя запустить
PT153, учту)
Прочитал статью Hashtable - работаем с хеш-таблицей, повторил..
Что неправильного в этом коде?
function SpellDamageCond takes nothing returns boolean
    
    local unit pr = LoadUnitHandle(udg_hash,h,3)
    return ( IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(pr)) == true )
    set pr = null
    
endfunction


function SpellDamage1 takes nothing returns nothing

    local unit p = LoadUnitHandle(udg_hash,h,2)
    call ForGroupBJ( GetUnitsInRangeOfLocMatching(100.00, GetUnitLoc(p), Condition(function SpellDamageCond)), function SpellDamage )
    set p = null
    
endfunction


function SpellDamage takes nothing returns nothing

    local timer t = GetExpiredTimer()
    local integer h = GetHandleId(t)
    local location l = LoadLocationHandle(udg_hash,h,1)
    local unit p = LoadUnitHandle(udg_hash,h,2)
    local unit pr = LoadUnitHandle(udg_hash,h,3)
    local integer counter = LoadInteger(udg_hash,h,4)
    
        if counter>0 then

    call UnitDamageTarget( pr, GetEnumUnit(), ( 0.10 + ( I2R(GetHeroStatBJ(bj_HEROSTAT_AGI, pr, true)) * 0.05 ) ), ATTACK_TYPE_MELEE, DAMAGE_TYPE_NORMAL )
    call SaveInteger(udg_hash,h,4,counter-1)
    
        else 
        
    call DestroyTimer(t)
    call FlushChildHashtable(udg_hash,h)
    
        endif
    
    set p = null
    set pr = null
    set t = null
    call RemoveLocation(l)
    set l = null
    
endfunction


function spellAct takes nothing returns nothing
    local unit p
    local unit pr = GetSpellAbilityUnit()
    local location l
    local timer t = CreateTimer()
    local integer h = GetHandleId(t)
    
    call CreateNUnitsAtLocFacingLocBJ( 1, 'u000', GetOwningPlayer(pr), GetUnitLoc(pr), GetSpellTargetLoc() )
    
    set p = GetLastCreatedUnit()
    set l = PolarProjectionBJ(GetUnitLoc(p), 8.00, GetUnitFacing(p))
    
    call SaveLocationHandle(udg_hash,h,1,l)
    call SaveUnitHandle(udg_hash,h,2,p)
    call SaveUnitHandle(udg_hash,h,3,pr)
    call SaveInteger(udg_hash,h,4,100)
    
    call TimerStart(t,0.04,true,function SpellDamage1)
    
    set p = null
    set pr = null
    set t = null
    call RemoveLocation(l)
    set l = null

endfunction

function spellCond takes nothing returns boolean
    return GetSpellAbilityId() == 'A001'
endfunction

//===========================================================================
function InitTrig_spell takes nothing returns nothing
    set gg_trg_spell = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ( gg_trg_spell, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_spell, Condition( function spellCond ) )
    call TriggerAddAction( gg_trg_spell, function spellAct )
    
    set udg_hash = InitHashtable()
endfunction
28
Clamp, я им и открыл карту
А, получилось, вот только никакого бумеранга там нет)
28
Что неправильного в этом коде?
Это уже новый вопрос)
set udg_hash = InitHashtable()
Я бы вынес в более очевидное место, где происходит инициализация.
Использую нативки. CreateNUnitsAtLocFacingLocBJ плохая функция для создания одного юнита, да ещё и утечна.
И не используй локации.
28
PT153, пока я не умею двигать юнита по точкам, буду использовать локации)_
Кинул, как ты и сказал, создание хеш-таблицы в инициализацию.. По итогу всё равно выкидывает в главное меню игры
Лол, выкидывает чисто из-за создания хеш-таблицы, и что делать теперь?)
28
По итогу всё равно выкидывает в главное меню игры
Проблема не в ней, это точно.
rsfghd:
что делать теперь?)
Кинуть карту, или хотя бы скрипт. Файл - Экспортировать скрипт.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.