можно ли по событию получает урон определить источник урона?

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

Загруженные файлы
0
19
7 лет назад
0
Похожие вопросы:

ответ
идея неплохая, если не считать, что заклинание будет диспеллить эффект похожего заклинания.
Например если юнит в стане от молота бурь, то молот бурь-даммикаст снимет бафф с него. С кислотной бомбой и т.п. однозначно диспеллит, насчёт молота - скорее всего.
Нет, станы перебивают тока сильный, слабого. Ну или есть большое отличие в уровнях. Аксид бомбы будут перебивать если урон выше, а так просто продливать бафф, чертики тоже самое.
Кстати да, забыл написать, длительность 0.01, бафф сразу же после проверки удаляем.
Если вы юзайте аксид бомбу для нанесения урона, придется наносит урон триггерно.
Кстати, большинство скиллов вроде аксид бомбы или чертика работают так.
Сначала 0.00 ед. урона, после бафф, после урон указанный в поле способности.
Но молот бурь работает иначе, сначала урон указанный в поле способности, после 0.00 ед. урона и бафф стана.
ответ
Объясню, почему я удалил код: после проведённого за кодом времени, я понял, что сильно погорячился, задав такой глупый вопрос. Стоило отдохнуть, проветрить голову, и решение нашлось. Тем, кто столкнулся с хоть самую малость, но похожей проблемой, дам совет: всегда проверяйте соответствия заклинаний, написанных в коде jass (CTRL + D, если кто не знает, как узнать id заклинания) и ,конечно, сам синтаксис. Также посоветую не утраивать "свалку" в коде, как это сделал я. В общем, если кому интересно, как я решил проблему, пишите - расскажу или даже помогу если у вас она схожая.(Всё дело во внимательности)...
Сброшу код триггера таким, каким я его хотел видеть изначально:
function MU_Check_lvl_four takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A011', udg_Akame_Killer) == 4 ) ) then
        return false
    endif
    return true
endfunction

function MU_Check_lvl_three takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A011', udg_Akame_Killer) == 3 ) ) then
        return false
    endif
    return true
endfunction

function MU_Check_lvl_two takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A011', udg_Akame_Killer) == 2 ) ) then
        return false
    endif
    return true
endfunction

function MU_Check_lvl_one takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A011', udg_Akame_Killer) == 1 ) ) then
        return false
    endif
    return true
endfunction

function MU_Second_Conditions takes nothing returns boolean
    if ( not ( UnitHasBuffBJ(GetEventDamageSource(), 'B008') == true ) ) then
        return false
    endif
    if ( not ( GetEventDamageSource() == udg_Akame_Killer ) ) then
        return false
    endif
    return true
endfunction

function MU_Start_Conditions takes nothing returns boolean
    if ( not ( UnitHasBuffBJ(GetAttacker(), 'B008') == true ) ) then
        return false
    endif
    if ( not ( GetAttacker() == udg_Akame_Killer ) ) then
        return false
    endif
    return true
endfunction

function Trig_MU_Conditions takes nothing returns boolean
    if ( not MU_Start_Conditions() ) then
        return false
    endif
    return true
endfunction

function MU_Venum_Check takes nothing returns boolean
    if ( not ( udg_MU_Venum_counter == 2 ) ) then
        return false
    endif
    return true
endfunction

function MU_del takes nothing returns nothing 
    if ( MU_Check_lvl_one() ) then
        call SetPlayerAbilityAvailableBJ( true, 'A00X', GetOwningPlayer(GetEventDamageSource()) )
        call UnitRemoveAbilityBJ( 'A00X', GetEventDamageSource() )
    else
        if ( MU_Check_lvl_two() ) then
            call SetPlayerAbilityAvailableBJ( true, 'A00U', GetOwningPlayer(GetEventDamageSource()) )
            call UnitRemoveAbilityBJ( 'A00U', GetEventDamageSource() )
        else
            if ( MU_Check_lvl_three() ) then
                call SetPlayerAbilityAvailableBJ( true, 'A00Y', GetOwningPlayer(GetEventDamageSource()) )
                call UnitRemoveAbilityBJ( 'A00Y', GetEventDamageSource() )
            else
                if ( MU_Check_lvl_four() ) then
                    call SetPlayerAbilityAvailableBJ( true, 'A013', GetOwningPlayer(GetEventDamageSource()) )
                    call UnitRemoveAbilityBJ( 'A013', GetEventDamageSource() )
                else
                    call DoNothing(  )
                endif
            endif
        endif
    endif
endfunction


function Trig_MU_Actions takes nothing returns nothing
    call DestroyTrigger(udg_MU_trig)
    set udg_MU_Venum_counter = GetRandomInt(1, 5)
    set udg_MU_TG = GetAttackedUnitBJ()
    if ( MU_Venum_Check() ) then
        if ( MU_Check_lvl_one() ) then
        call UnitAddAbilityBJ( 'A00X', udg_Akame_Killer )
        call SetPlayerAbilityAvailableBJ( false, 'A00X', GetOwningPlayer(udg_Akame_Killer) )
    else
        if ( MU_Check_lvl_two() ) then
            call UnitAddAbilityBJ( 'A00U', udg_Akame_Killer )
            call SetPlayerAbilityAvailableBJ( false, 'A00U', GetOwningPlayer(udg_Akame_Killer) )
        else
            if ( MU_Check_lvl_three() ) then
                call UnitAddAbilityBJ( 'A00Y', udg_Akame_Killer )
                call SetPlayerAbilityAvailableBJ( false, 'A00Y', GetOwningPlayer(udg_Akame_Killer) )
            else
                if ( MU_Check_lvl_four() ) then
                    call UnitAddAbilityBJ( 'A013', udg_Akame_Killer )
                    call SetPlayerAbilityAvailableBJ( false, 'A013', GetOwningPlayer(udg_Akame_Killer) )
                else
                    call DoNothing(  )
                endif
            endif
        endif
    endif
    set udg_MU_trig = CreateTrigger()
    call TriggerRegisterUnitEvent( udg_MU_trig, udg_MU_TG, EVENT_UNIT_DAMAGED )
    call TriggerAddCondition( udg_MU_trig, Condition( function MU_Second_Conditions ) )
    call TriggerAddAction( udg_MU_trig, function MU_del )
    else
        call DoNothing(  )
    endif
endfunction

//===========================================================================
function InitTrig_MU takes nothing returns nothing
    set gg_trg_MU = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_MU, EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerAddCondition( gg_trg_MU, Condition( function Trig_MU_Conditions ) )
    call TriggerAddAction( gg_trg_MU, function Trig_MU_Actions )
endfunction
Суть триггера:
Имеется способность с четырьмя уровнями. На каждом уровне урон способности разный, а шанс срабатывания всегда 25%. При атаке герой, имеющий такую способность имеет шанс (25%) на отравление противника.
Переменная udg_Akame_killer равносильна GetEventDamageSource()
P.S. Возможно кому-то даже пригодится этот код... Сделан полнейшим неумехой в плане jass, так что не судите строго!
ответ
Буран (цель область), Огненный дождь (цель область), Гроза (цель область) - примеры способностей с целью областью.
Веерный бросок (не требует цели ), Жар преисподней (не требует цели, переключатель), Стальной вихрь ( не требует цели, блокирует способности заклинателя ), - способности не требующие указания цели.
ответ
Скилл заводного гоблина - взорвать, там настраивается урон, аое, и его можно кастануть и он сам активируется при смерти владельца.
ответ
Таймер на юнита + группа, как только таймер юнита ударившего истек удаляем из группы.

2
22
7 лет назад
2
Дружище, ты издеваешься?
0
16
7 лет назад
0
Proshel_Doty:
Дружище, ты издеваешься?
я уже разобрался как отлавливать значение через гуи, осталось лишь научиться определять источник
p.s. не надо стыдится задавать вопросы, чтобы почерпнуть знания
4
26
7 лет назад
4
TeX13:
Proshel_Doty:
Дружище, ты издеваешься?
я уже разобрался как отлавливать значение через гуи, осталось лишь научиться определять источник
p.s. не надо стыдится задавать вопросы, чтобы почерпнуть знания
не надо стыдиться лазать по редактору и нажимать разные кнопочки что бы узнать что можно сделать а что нет.
0
22
7 лет назад
0
Ржунемагу)))0
Первый раз такое вижу тут
TeX13:
p.s. не надо стыдится задавать вопросы, чтобы почерпнуть знания
Аааа, вот в чём дело. Кайф создавать 100500 вопросов по одной только функции -_-
Hate:
не надо стыдиться лазать по редактору и нажимать разные кнопочки что бы узнать что можно сделать а что нет.
Прям здоровый плюсан
2
21
7 лет назад
2
Загруженные файлы
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.