Bounce спелл

Добавлен
В чем суть. Юнит бросает абилку в другого, потом выбирается рандомный юнит в пределах радиуса и, если он враг, в него летит снаряд от dummy. Эдакий bounce спелл.
Так вот, почему-то он не отскакивает. Буду очень благодарен за помощь =)
function Trig_DiskBounce_Func010002001003 takes nothing returns boolean
    return ( IsPlayerEnemy(GetOwningPlayer(GetFilterUnit()), Player(0)) == true )
endfunction

function Trig_DiskBounce_Func011Func007002001003 takes nothing returns boolean
    return ( IsPlayerEnemy(GetOwningPlayer(GetFilterUnit()), Player(0)) == true )
endfunction




function Trig_DiskBounce_Actions takes nothing returns nothing
    local unit t = GetSpellTargetUnit()
    local unit c = GetSpellAbilityUnit()
    local unit b
    local unit d
    local real m
    call TriggerSleepAction( ( DistanceBetweenPoints(GetUnitLoc(c), GetUnitLoc(t)) / 1300.00 ) )
    set m = 0.00
    set m = I2R(GetHeroStatBJ(bj_HEROSTAT_STR, c, true))
    set m = ( m * 2.75 )
    set m = ( m + ( 8.00 * I2R(GetHeroLevel(c)) ) )
    call UnitDamageTargetBJ( c, t, m, ATTACK_TYPE_MELEE, DAMAGE_TYPE_NORMAL )
    set b = GroupPickRandomUnit(GetUnitsInRangeOfLocMatching(400.00, GetUnitLoc(t), Condition(function Trig_DiskBounce_Func010002001003)))
    if ( b != t )  then
        call CreateNUnitsAtLoc( 1, 'h616', Player(PLAYER_NEUTRAL_PASSIVE), GetUnitLoc(t), bj_UNIT_FACING )
        set d = GetLastCreatedUnit()
        call UnitAddAbilityBJ( 'A63J', d )
        call IssueTargetOrderBJ( d, "thunderbolt", b )
        call TriggerSleepAction( ( DistanceBetweenPoints(GetUnitLoc(d), GetUnitLoc(b)) / 1300.00 ) )
        set t = b
        call UnitDamageTargetBJ( c, b, m, ATTACK_TYPE_MELEE, DAMAGE_TYPE_NORMAL )
        call RemoveUnit( d )
        set b = GroupPickRandomUnit(GetUnitsInRangeOfLocMatching(400.00, GetUnitLoc(t), Condition(function Trig_DiskBounce_Func011Func007002001003)))
        if ( b != t ) then
            call CreateNUnitsAtLoc( 1, 'h616', Player(PLAYER_NEUTRAL_PASSIVE), GetUnitLoc(b), bj_UNIT_FACING )
            set d = GetLastCreatedUnit()
            call UnitAddAbilityBJ( 'A63J', d )
            call IssueTargetOrderBJ( d, "thunderbolt", b )
            call TriggerSleepAction( ( DistanceBetweenPoints(GetUnitLoc(d), GetUnitLoc(b)) / 1300.00 ) )
            call UnitDamageTargetBJ( c, b, m, ATTACK_TYPE_MELEE, DAMAGE_TYPE_NORMAL )
            call RemoveUnit( d )
        endif
    endif
endfunction

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

Нашел баг сам. В допустимых целях были указаны неправильные данные. Все спасибо.
0
30
11 лет назад
0
set m = I2R(GetHeroStatBJ(bj_HEROSTAT_STR, c, true))
Ты же не так плох, я думал
0
28
11 лет назад
0
set m = I2R(GetHeroStatBJ(bj_HEROSTAT_STR, c, true))
Ты же не так плох, я думал
Clamp, а в чем собственно трабл?
0
31
11 лет назад
0
Clamp, а в чем собственно трабл?
по условию юнит b может быть равным t и тогда ничего не произойдёт...
хотя, если вокруг цели заклинания есть ещё другие враги, то стоило бы перевыбирать юнита b...
а вообще над кодом надо ещё хорошенько поработать...
  • избавится от бж-функций...
  • зачем-то ты сделал два абсолютно идентичных фильтра... хотя хватило бы и одного...
  • локалки стоило бы обнулять...
а вообще скил можно бы и проще сделать с таймером...
0
28
11 лет назад
Отредактирован Jusper
0
  • зачем-то ты сделал два абсолютно идентичных фильтра... хотя хватило бы и одного...
  • локалки стоило бы обнулять...
Я пока еще не работал над красотой. На этапе тестирования самого эффекта столкнулся с этой проблемой=)
избавится от бж-функций...
Я работаю без vJass.
по условию юнит b может быть равным t и тогда ничего не произойдёт...
хотя, если вокруг цели заклинания есть ещё другие враги, то стоило бы перевыбирать юнита b...
Не, не стоило бы. Абилка рсчитана на сюрпризы. Захотела - пошла прыгать, не захотела - не пошла =)
Критики много, а ответа на вопрос нет =)
0
1
11 лет назад
0
Мне кажется, что каждый раз за t бралась b. Попробуй дебаг мсг сделать, малоли
0
28
11 лет назад
0
Нашел баг сам. В допустимых целях были указаны неправильные данные. Все спасибо.
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.