Всем доброго времени суток! Не нашел подобного вопроса, поэтому спрошу, не могу понять концепцию работы со способностями с ядом. Я задумал заклинание, при использовании которого герой поджигает свой меч и наносит огненный урон врагам. При этом враги должны гореть в течение некоторого времени после атаки героя. Я пробовал яд дриады и яд от предмета Клинок убийцы, переделанные под горение. Когда герой кастует способность-пустышку, даю ему способность на основе яда, но при атаке на цель не вешается яд. Если дать герою предмет с ядом, то все будет работать, если просто дать саму способность - нет. Подскажите пожалуйста, в чем дело?

ладно, ты наверное не разобрался либо занят, в общем я решил сделать пример
вот основной код
globals
    constant hashtable H = InitHashtable( )
    constant group TempGroup = CreateGroup( )
endglobals

function addEff takes nothing returns nothing
    local timer t = GetExpiredTimer( )
    local unit u  = LoadUnitHandle( H, GetHandleId( t ), 0 )
    local EffectS A = LoadInteger( H, GetHandleId( u ), EffectStructKey )
    
    set A.eff  = AddSpecialEffectTarget( "Abilities\\Weapons\\FarseerMissile\\FarseerMissile.mdl", u, "weapon" )
    set A.eff2 = AddSpecialEffectTarget( "Abilities\\Weapons\\ZigguratMissile\\ZigguratMissile.mdl", u, "weapon" )
    
    call FlushChildHashtable( H, GetHandleId( t ) )
    call DestroyTimer( t )
    
    set t = null
    set u = null
endfunction

function poisonDamage takes nothing returns nothing
    local timer t = GetExpiredTimer( )
    local integer i = GetHandleId( t )
    local unit attacker = LoadUnitHandle( H, i, 0 )
    local unit damaged  = LoadUnitHandle( H, i, 1 )
    local real r = LoadReal( H, i, 3 ) - 1.00
    
    call UnitDamageTarget( attacker, damaged, 20.00, false, false, null, null, null )
    
    if r <= 0.00 or not UnitAlive( damaged ) then
        call RemoveSavedHandle( H, GetHandleId( attacker ), GetHandleId( damaged ) )
        call DestroyEffect( LoadEffectHandle( H, i, 2 ) )
        call DestroyTimer( t )
        call FlushChildHashtable( H, i )
    else
        call SaveReal( H, i, 3, r )
    endif
    
    set t = null
    set attacker = null
    set damaged  = null
endfunction

function FlamingAttacks_Actions takes nothing returns nothing
    local unit attacker = GetEventDamageSource( )
    local unit damaged  = GetTriggerUnit( )
    local real damage   = GetEventDamage( )
    local unit u
    local timer t
    local EffectS A
    
    if GetUnitAbilityLevel( damaged, 'Bssd' ) > 0 then
        call UnitRemoveAbility( damaged, 'Bssd' )
        
        // потужні удари
        if GetUnitAbilityLevel( attacker, 'A002' ) > 0 then
            call GroupEnumUnitsInRange( TempGroup, GetUnitX( damaged ), GetUnitY( damaged ), 300.00, null )
            
            loop
                set u = FirstOfGroup( TempGroup )
                exitwhen u == null
                call GroupRemoveUnit( TempGroup, u )
                
                if IsUnitEnemy( u, GetOwningPlayer( attacker ) ) and UnitAlive( u ) then
                    call UnitDamageTarget( attacker, u, damage, false, false, null, null, null )
                endif
            endloop
            
            set t = CreateTimer( )
            
            set A = LoadInteger( H, GetHandleId( attacker ), EffectStructKey )
    
            call DestroyEffect( A.eff )
            call DestroyEffect( A.eff2 )
            call DestroyEffect( AddSpecialEffect( "Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl", GetUnitX( damaged ), GetUnitY( damaged ) ) )
            call SaveUnitHandle( H, GetHandleId( t ), 0, attacker )
            call TimerStart( t, 1.00, false, function addEff )
            
            set t = null
        elseif GetUnitAbilityLevel( attacker, 'A003' ) > 0 then
            // вогняна атака
            call GroupEnumUnitsInRange( TempGroup, GetUnitX( damaged ), GetUnitY( damaged ), 150.00, null )
            
            loop
                set u = FirstOfGroup( TempGroup )
                exitwhen u == null
                call GroupRemoveUnit( TempGroup, u )
                
                if u != damaged and IsUnitEnemy( u, GetOwningPlayer( attacker ) ) and UnitAlive( u ) then
                    call UnitDamageTarget( attacker, u, damage / 2.00, false, false, null, null, null )
                endif
            endloop
            
            set t = LoadTimerHandle( H, GetHandleId( attacker ), GetHandleId( damaged ) )
            
            if t == null then
                set t = CreateTimer( )
                
                call SaveTimerHandle( H, GetHandleId( attacker ), GetHandleId( damaged ), t )
                
                call SaveUnitHandle( H, GetHandleId( t ), 0, attacker )
                call SaveUnitHandle( H, GetHandleId( t ), 1, damaged )
                call SaveEffectHandle( H, GetHandleId( t ), 2, AddSpecialEffectTarget( "Abilities\\Spells\\Other\\BreathOfFire\\BreathOfFireDamage.mdl", damaged, "origin" ) )
                
                call TimerStart( t, 1.00, true, function poisonDamage )
            endif
            
            call SaveReal( H, GetHandleId( t ), 3, 5.00 )
            call DestroyEffect( AddSpecialEffectTarget( "Abilities\\Spells\\Items\\AIfb\\AIfbSpecialArt.mdl", damaged, "chest" ) )
            call DestroyEffect( AddSpecialEffectTarget( "Abilities\\Weapons\\RedDragonBreath\\RedDragonMissile.mdl", damaged, "chest" ) )
            
            set t = null
        endif
    endif
    
    set damaged  = null
    set attacker = null
endfunction

//===========================================================================
//function InitTrig_FlamingAttacks takes nothing returns nothing
    //set gg_trg_FlamingAttacks = CreateTrigger(  )
//endfunction
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
23
Похожие вопросы:

ответ
Если по игроку то массив переменных по игроку, если прям каждого конкретного героя каждого игрока - то через custom value или прочий регистратор юнитов.
Чета типа так, для ознакомления с CV
ответ
Параметры стака ядов с одним и тем же баффом, это нужно чтобы складывались замедлени и\или урон от разных юнитов, или бафф тупо обновлялся.
С одним из параметров яды с разными баффами скатаются независимо, каждый вешает свой бафф. (годная основа для замедляющих способностей)
А игра вылетает из за зацикливания, темболее бафф при удалении и появлении наносит 0.00 ед урона, это так для справки.
ответ
Гуванч, ну как бы написано одно, а по факту другое
ответ
Никакие, делать лишь кастом.

28
бред если честно, отобрази проблему на отдельной карте, максимум ты настройки кривые выставил либо юзаешь яд с каким-то орбом или что-то в этом духе
15
rsfghd, вот. Там несколько сложнее, чем описано, но не думаю, что это влияет. Способность яда я специально откатил до дефолтных значений, полагая, что испортил все переделыванием под горение, но нет. Оно не работало изначально.
Загруженные файлы
28
Meddin, всё у тебя работает, как я и сказал, орб не даёт наложить эффект яда, просто сделай либо триггерный яд, либо триггерный орб, второе предпочтительнее ибо с помощью яда можно отлавливать урон с руки
15
rsfghd, имеешь в виду как то отлавливать юнита, которого бьет герой и на него триггерно вешать яд по таймеру? Попробую поразбираться, как можно определить юнита, по которому наносит удары герой...
28
Meddin, регистрируешь событие получения урона на каждого юнита:
смотришь есть ли у атакованного дебафф яда, если есть - снимаешь его и делаешь триггерные операции (доп. урон, свой собственный яд и так далее, всё что связанно в автоатакой)
саму абилку яда выдать всем юнитам, чья атака должна отлавливаться
28
Meddin, если не сделаешь, то позже скину пример триггерного яда
15
rsfghd, благодарю, завтра вечером посижу поразбираюсь, возможно даже пригодится для моей задумки, за реализацию которой я пока боюсь браться, сделать виды стихийных атак и соответственно дамажить кого надо, потому как я переделал способность благословение элуны и у меня маги могут атаковать юнитов с иммунитетом к магии, но при этом наносят 0 урона(всегда бесило, что в варкрафте они просто запретили атаковать и все, в реальной жизни же никто не мешает нам в танк с пистолета стрелять или швыряться горохом в стену, даже не смотря на то, что смысла в этом 0).
28
Meddin, кстати, ты наверное не интересовался моими ресурсами, но я уже делал огненное оружие с поджиганием в спеллпаке привратника ада
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.