Доброго времени суток всем пользователям !
Столкнулся с следующей проблемой : Для меня сделал друг способность на Jass , способность работает и она даже MUI . Но если я использую её "через" предмет ( даю предмету эту способность и активирую его ) , то ничего не происходит . Пробовал даже дать способность юниту и еще использовать предмет - толку 0 .
Код на событие использования способности
function Trig_BirdMagic_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A001' 
endfunction
Как мы пришли к выводу , способность не реагирует на событие . Помогите .

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

>2015
>Таймеры с переодичностью 0.01
>Использование больше четырех функций для спелла
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
17
9 лет назад
0
Gin_-_Ichimaru, просто тебе надо отлавливать не использование способности а использование предмета
0
4
9 лет назад
Отредактирован SamuraiKing
0
Это не событие а условие. Событие в самом конце кода, и оно написано с большими буквами и подчеркнуто синим цветом. Вот событие использование предмета:
call TriggerRegisterAnyUnitEventBJ( gg_trg_Nazvanie, EVENT_PLAYER_UNIT_USE_ITEM )
Тут событие это "EVENT_PLAYER_UNIT_USE_ITEM ", можешь просто скопировать себе в триггер(только событие, остальное не нужно).
А вот событие использование способности:
call TriggerRegisterAnyUnitEventBJ( gg_trg_Nazvanie, EVENT_PLAYER_UNIT_SPELL_EFFECT)
0
20
9 лет назад
0
желательно бы весь код увидеть
0
1
9 лет назад
0
SamuraiKing:
Это не событие а условие. Событие в самом конце кода, и оно написано с большими буквами и подчеркнуто синим цветом. Вот событие использование предмета:
call TriggerRegisterAnyUnitEventBJ( gg_trg_Nazvanie, EVENT_PLAYER_UNIT_USE_ITEM )
Тут событие это "EVENT_PLAYER_UNIT_USE_ITEM ", можешь просто скопировать себе в триггер(только событие, остальное не нужно).
А вот событие использование способности:
call TriggerRegisterAnyUnitEventBJ( gg_trg_Nazvanie, EVENT_PLAYER_UNIT_SPELL_EFFECT)
Только событие менять?
Просто я вот еще такие строчки заметил ( Jass я практически не знаю )
nit c = GetSpellAbilityUnit()
unit td = GetSpellTargetUnit()
и если меня событие на итем , условие разве такое же должно быть? Я попробывал подставить то событие - не помогло .
ssbbssc:
желательно бы весь код увидеть
Вот
function Trig_BirdMagic_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A001' 
endfunction

function Trig_BirdMagic4 takes nothing returns nothing
    timer t = GetExpiredTimer()
    integer h = GetHandleId(t)
    unit c = LoadUnitHandle(hash, h, 0)
    unit td = LoadUnitHandle(hash, h, 1)
    unit d = LoadUnitHandle(hash, h, 2)
    real a = Atan2(GetUnitY(td) - GetUnitY(d), GetUnitX(td) - GetUnitX(d)) + LoadReal(hash, h, 3)
    if SR(GetUnitX(d), GetUnitY(d), GetUnitX(td), GetUnitY(td)) >= 45 then
        SetUnitX(d, GetUnitX(d) + 15 * Cos(a))
        SetUnitY(d, GetUnitY(d) + 15 * Sin(a))
        SetUnitFacing(d, bj_RADTODEG * a)
    else
        FlushChildHashtable(hash, h)
        PauseTimer(t)
        DestroyTimer(t)
        UnitApplyTimedLife(CreateUnit(GetOwningPlayer(c), 'h003', GetUnitX(td), GetUnitY(td), bj_RADTODEG * a), 'BTLF', 1)
        UnitDamageTarget(c, td, GetHeroAgi(c, true), true, false, null, null, WEAPON_TYPE_WHOKNOWS)
        RemoveUnit(d)
    endif
    t = null
    c = null
    td = null
    d = null
endfunction

function Trig_BirdMagic3 takes unit c, unit td, real a returns nothing
    timer t = CreateTimer()
    integer h = GetHandleId(t)
    SaveUnitHandle(hash, h, 2, CreateUnit(GetOwningPlayer(c), 'h002', GetUnitX(c) + 35 * Cos(a), GetUnitY(c) + 35 * Sin(a), bj_RADTODEG * a))
    SaveUnitHandle(hash, h, 0, c)
    SaveUnitHandle(hash, h, 1, td)
    SaveReal(hash, h, 3, GetRandomReal(-0.6, 0.6))
    TimerStart(t, 0.01, true, function Trig_BirdMagic4)
    t = null
    c = null
    td = null
endfunction

function Trig_BirdMagic2 takes nothing returns nothing
    timer t = GetExpiredTimer()
    integer h = GetHandleId(t)
    unit c = LoadUnitHandle(hash, h, 0)
    unit td = LoadUnitHandle(hash, h, 1)
    real r = LoadReal(hash, h, 2)
    real a = Atan2(GetUnitY(td) - GetUnitY(c), GetUnitX(td) - GetUnitX(c))
    if GetUnitCurrentOrder(c) == OrderId("flare") and GetWidgetLife(td) > 0 then
        if r >= 0.05 then
            r = 0
            SaveReal(hash, h, 2, r)
            call Trig_BirdMagic3(c, td, a)
        else
            r = r + 0.01
            SaveReal(hash, h, 2, r)
        endif
    else
        FlushChildHashtable(hash, h)
        PauseTimer(t)
        DestroyTimer(t)
    endif
    t = null
    c = null
    td = null
endfunction

function Trig_BirdMagic_Actions takes nothing returns nothing
    timer t = CreateTimer()
    integer h = GetHandleId(t)
    unit c = GetSpellAbilityUnit()
    unit td = GetSpellTargetUnit()
    SaveUnitHandle(hash, h, 0, c)
    SaveUnitHandle(hash, h, 1, td)
    SaveReal(hash, h, 2, 0)
    TimerStart(t, 0.01, true, function Trig_BirdMagic2)
    t = null
    c = null
    td = null
endfunction

//===========================================================================
function InitTrig_BirdMagic takes nothing returns nothing
    set gg_trg_BirdMagic = CreateTrigger(  )
    local integer index
    set index = 0
    loop
        call TriggerRegisterPlayerUnitEvent(gg_trg_BirdMagic, Player(index), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
        set index = index + 1
        exitwhen index == bj_MAX_PLAYER_SLOTS
    endloop
    call TriggerAddCondition( gg_trg_BirdMagic, Condition( function Trig_BirdMagic_Conditions ) )
    call TriggerAddAction( gg_trg_BirdMagic, function Trig_BirdMagic_Actions )
    set gg_trg_BirdMagic = null
endfunction
KPOKODIL:
Gin_-_Ichimaru, просто тебе надо отлавливать не использование способности а использование предмета
не помогает . либо я что то не правильно прописывал .
0
4
9 лет назад
0
unit c = GetSpellAbilityUnit()
unit td = GetSpellTargetUnit()
Да, это тоже надо изменить, а на что именно, я не уверен. Попробуй сделать так:
unit c = GetManipulatingUnit()
unit td = GetOrderTargetUnit()
unit td = GetOrderTargetUnit()
Или, если не сработает, попробуй так:
unit td = GetEventTargetUnit()
0
28
9 лет назад
0
KPOKODIL, SamuraiKing, дезинфа 100 лвла
событие на спелл работает нормально
Gin_-_Ichimaru, я прочитал лишь малую часть кода но и этого хватило чтобы понять откуда растут руки у твоего друга
советую почитать статьи и переписать этот спелл нормально
0
4
9 лет назад
Отредактирован SamuraiKing
0
nvc123:
>SamuraiKing, дезинфа 100 лвла
Изначально он не показал весь код, тем более я и сам новичок в этом деле. Откуда мне было знать, что проблема не в этом.
0
28
9 лет назад
0
SamuraiKing, просто вы так сразу посоветовали сменить событие
SamuraiKing:
и сам новичок в этом деле
ну теперь будешь знать
а вообще дезинфа больше относится к KPOKODIL,
0
1
9 лет назад
0
А нету других вариантов решения данной проблемы кроме того как сделать скилл с 0?
2
15
9 лет назад
2
>2015
>Таймеры с переодичностью 0.01
>Использование больше четырех функций для спелла
Принятый ответ
0
28
9 лет назад
Отредактирован nvc123
0
Gin_-_Ichimaru, есть
вернутся в прошлое и предотвратить написание этой версии скилла
Чтобы оставить комментарий, пожалуйста, войдите на сайт.