Помогите создать движение волны, она только появляется с зади и там же исчезает. А, я пытаюсь сделать, что бы она посунулась в перед на 2к

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

quq_CCCP:
Как сделать - очень просто, это классический спел по типу волна, представляет из себя векторное движение дамми юнита с помощью таймера, примеры есть в статьях и наработках. Вычисляешь угол между применившим заклинание и точкой применения заклинния, если в качестве цели указан юнит, то угол ищем между применившим и целью, создаем даммика и с помощью таймера в 0.03125 (32 раза в сек более чем достаточно) двигаем дамми юнита в ранее найденном нами направлении, по истечению определенного кол-ва тиков таймера, ну 32х30 это примерно 0.9 секунды и 960 ед расстояния (если двигать цель по 30 ед. за каждый тик), ну так же если нужно наносить урон врагам, для этого используются две группы и фильтр.
Пример кода
function Group_Frost_Wave_Actions takes nothing returns nothing
    local DamageData dd = bj_forLoopAIndexEnd
    local unit Enemy = GetEnumUnit( )

    call GroupAddUnit( dd.grp, Enemy )
    
    set bj_lastCreatedUnit = CreateUnit( Player( PLAYER_NEUTRAL_PASSIVE ), 'hatk', GetUnitX( Enemy ), GetUnitY( Enemy ), GetUnitFacing( Enemy ) )
    call SetUnitPathing( bj_lastCreatedUnit, false )
    call UnitApplyTimedLife( bj_lastCreatedUnit, 'BTLF', 0.50 )
    call UnitAddAbility( bj_lastCreatedUnit, 'A06Z' )
    call SetUnitAbilityLevel( bj_lastCreatedUnit, 'A06Z', dd.id )
    call SetUnitX( bj_lastCreatedUnit, GetUnitX( Enemy ) )
    call SetUnitY( bj_lastCreatedUnit, GetUnitY( Enemy ) )
    
    if IssueTargetOrderById( bj_lastCreatedUnit, 852243, Enemy ) then
        call UnitDamageTarget( dd.attacker, Enemy, dd.dmg, false, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_COLD, WEAPON_TYPE_WHOKNOWS )
        call DestroyEffect( AddSpecialEffectTarget( "Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl", Enemy, "origin" ) )
    endif
   
    set bj_lastCreatedUnit = null
    
    set Enemy = null
endfunction

function Timer_Frost_Wave_Expires takes nothing returns nothing
    local timer t = GetExpiredTimer( )
    local DamageData dd = GetDataBX( t )
    
    set dd.time = dd.time + 1
    
    if dd.time > 25 then //25 * 32 = 800
    
        call DestroyEffect( dd.fx )
        call KillUnit( dd.attacked )
        
        call GroupClear( dd.grp )
        call ReleaseGroup( dd.grp )
        
        call PauseTimer( t )
        call RemoveDataBX( t )
        call DestroyTimer( t )
        call dd.clear( )
        call dd.destroy( )
    else
    
        set dd.rx = dd.rx + 32.00 * Cos( dd.hp )
        set dd.ry = dd.ry + 32.00 * Sin( dd.hp )

        call SetUnitX( dd.attacked, CheckX( dd.rx ) )
        call SetUnitY( dd.attacked, CheckY( dd.ry ) )
    
        call GroupClear( gg_grp_TempGroup )
    
        set bj_groupEnumOwningPlayer = dd.pl
        set bj_forLoopAIndexEnd = dd
        set bj_lastReplacedUnit = dd.attacker
    
        call GroupEnumUnitsInRange( gg_grp_TempGroup, dd.rx, dd.ry, 128.00 + 4.00 * dd.time, OnlyWavedEnemy )
        call ForGroup( gg_grp_TempGroup, function Group_Frost_Wave_Actions )
    
        set bj_lastReplacedUnit = null
    endif

    set t = null
endfunction

//===========================================================================
function startTrig_Frost_Wave takes nothing returns nothing
    local timer t = CreateTimer( )
    local DamageData dd = DamageData.create( )
    
    set dd.attacker = GetSpellAbilityUnit( )
    set dd.id = GetUnitAbilityLevel( dd.attacker, 'A060' )
    set dd.dmg = dd.id * 125.00
    set dd.pl = GetOwningPlayer( dd.attacker )
    set dd.hp =  Atan2( GetSpellTargetY( ) - GetUnitY( dd.attacker ), GetSpellTargetX( ) - GetUnitX( dd.attacker ) )
    set dd.rx = GetUnitX( dd.attacker ) + 32.00 * Cos( dd.hp )
    set dd.ry = GetUnitY( dd.attacker ) + 32.00 * Sin( dd.hp )
    set dd.attacked = CreateUnit( dd.pl, 'hdum', dd.rx, dd.ry, bj_RADTODEG * dd.hp )
    set dd.fx = AddSpecialEffectTarget( "Abilities\\Spells\\Other\\WindWave\\PrismaticWave.mdx", dd.attacked, "origin" )
    set dd.grp = NewGroup( )
    set dd.time = 0

    call SetDataBX( t, dd )
    
    call SetUnitFlyHeight( dd.attacked, 0.00, 0.00 )
    call SetUnitScale( dd.attacked, 1.25, 1.25, 1.25 )
   
    call TimerStart( t, 0.03125, true, function Timer_Frost_Wave_Expires )
    
    set t = null
endfunction
Вот так выглядит аналог того что на твоих картинках в коде, кода минимум, да и ничего заумного нет.
Готово, помогли. Твой код тоже гляну)
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
4
19
5 лет назад
4
Похожие вопросы:

ответ
Kinade, изучай на здоровье
ответ
Во-первых, что есть "локальный таймер" ? Это таймер записанный в локальную переменную?
Во-вторых, зачем тебе точка, если ты используешь XY ? Работай с ними
В-третьих, да. Использование в течении всей игры одной заранее созданной точки вызывает меньше нагрузки чем постоянно создание и удаление новых (кто-то там доказывал на примере и цифрами что от ремувнутых точке всё равно остаётся шлак в памяти...)
ответ
Вместо функции SetUnitPosition используй SetUnitX, SetUnitY.
call SetUnitX(GetEnumUnit(), x)
call SetUnitY(GetEnumUnit(), y)
ответ
Всё, понял как сделать
ответ
Думаю, что автор имел ввиду снаряд, который летит не по прямой к цели, а по зигзагу.
Вот так

0
28
5 лет назад
0
Спел такой же, как и волна силы?
0
6
5 лет назад
0
PT153:
Спел такой же, как и волна силы?
Вот, с зади волна, она должна пройти вперед на дистанцию например 2к. Нужна хэш таблица и таймер
Загруженные файлы
0
18
5 лет назад
0
Создай даммика за спиной и пусть он пускает волну
0
6
5 лет назад
0
UrsaBoss:
Создай даммика за спиной и пусть он пускает волну
Я не знаю, как это сделать.
2
18
5 лет назад
2
Создаешь юнита, убираешь ему атаку, даешь способность москиты, ставишь хп на 3 и регенерацию -1, далее ставишь ему ману 9999 и изначальную ману 9999
Даешь ему нужную способность волны
А в триггере просто создаешь его за спиной и даешь приказ применить волну в нужную точку
И ещё юниту убираешь модель, там можно просто написать в пути к моделе .mdl
Тоже самое с тенями, там всё на 0
2
28
5 лет назад
2
Даешь ему нужную способность волны
Он это не может, потому что карта, скорее всего, ломанная.
0
6
5 лет назад
0
UrsaBoss:
Создаешь юнита, убираешь ему атаку, даешь способность москиты, ставишь хп на 3 и регенерацию -1, далее ставишь ему ману 9999 и изначальную ману 9999
Даешь ему нужную способность волны
А в триггере просто создаешь его за спиной и даешь приказ применить волну в нужную точку
И ещё юниту убираешь модель, там можно просто написать в пути к моделе .mdl
Тоже самое с тенями, там всё на 0
Я сюда как раз пришел за помощью, в написании волны) Моя волна с места не здвинулась
PT153:
Даешь ему нужную способность волны
Он это не может, потому что карта, скорее всего, ломанная.
Я в черновике то создаю что угодно.
0
32
5 лет назад
0
Parom_Harona, Покажите ваш код, а мы поможем
0
6
5 лет назад
0
Bergi_Bear:
Parom_Harona, Покажите ваш код, а мы поможем
Я боюсь, вы запутаетесь A01X
Там гуи конвертнутый в jass. Сюда надо таймер и хэш таблицу. Я просто полный нуб.
Загруженные файлы
0
32
5 лет назад
0
Parom_Harona, я тут попытался, скажите вы владете самой картой как ломанной и только J файл или имеете доступ к Гуи у этой функции? Я не хочу особо код анализировать, как бы хочу, но не могу потому что в чужом разобраться крайне сложно, потому что спустя время и в своём уже ничего не понимаешь, но судя по ЭТОМУ коду, там ничего не двигается, а лишь создаётся юнит-эффект со сдвигом, относительно какой -то точки
set udg_Point[4924]=PolarProjectionBJ(udg_Point[4923],(200.00*I2R(GetForLoopIndexA())),(GetUnitFacing(udg_Caster[4920])-90.00))
но эта точка всегда будет на -90 градусов относительно взгляда героя (хотя вы говорите что сзади)
====================
call CreateNUnitsAtLoc(1,'h0ID',GetOwningPlayer(udg_Caster[4920]),udg_Point[4924],udg_Angle[4920])
а этот юнит создаётся в лупе, и там вроде как нет задержки и следовательно мы получим вереницу эффектов мгновенно верно?
0
6
5 лет назад
0
Bergi_Bear:
Parom_Harona, я тут попытался, скажите вы владете самой картой как ломанной и только J файл или имеете доступ к Гуи у этой функции? Я не хочу особо код анализировать, как бы хочу, но не могу потому что в чужом разобраться крайне сложно, потому что спустя время и в своём уже ничего не понимаешь, но судя по ЭТОМУ коду, там ничего не двигается, а лишь создаётся юнит-эффект со сдвигом, относительно какой -то точки
set udg_Point[4924]=PolarProjectionBJ(udg_Point[4923],(200.00*I2R(GetForLoopIndexA())),(GetUnitFacing(udg_Caster[4920])-90.00))
но эта точка всегда будет на -90 градусов относительно взгляда героя (хотя вы говорите что сзади)
====================
call CreateNUnitsAtLoc(1,'h0ID',GetOwningPlayer(udg_Caster[4920]),udg_Point[4924],udg_Angle[4920])
а этот юнит создаётся в лупе, и там вроде как нет задержки и следовательно мы получим вереницу эффектов мгновенно верно?
h0ID' Этот юнит и есть волна. Я вырезал код, но там слишком огромный триггер был и я не стал все функции копировать. Скилл действует мгновенно.
2
28
5 лет назад
2
карту со своими попытками в студию
а вообще на такие вопросы один ответ:
0
6
5 лет назад
Отредактирован Parom_Harona
0
nvc123:
карту со своими попытками в студию
а вообще на такие вопросы один ответ:
Код карты лежит как бы выше это и есть карта. Вечно закрываешь вопросы никогда не помогая. Тебе нравится давать бессмысленные советы? В заказы меня еще отправь где их никто не исполняет. Новичек никогда по гайду с 0 на jasse не напишет нормальный скилл без кучи циклов.
2
5
5 лет назад
2
nvc123, А ему бесполезно указывать, что RTFM решает большую часть вопросов. Он предпочитает задавать вопросы, на которые чуть ли не прямым текстом в статьях ответы есть.
0
6
5 лет назад
0
Wadimiru:
nvc123, А ему бесполезно указывать, что RTFM решает большую часть вопросов. Он предпочитает задавать вопросы, на которые чуть ли не прямым текстом в статьях ответы есть.
Давай покажи мне прямой ответ 250 рублей сразу скину. Покажи , где в статье есть прямой ответ
0
26
5 лет назад
0
Parom_Harona:
Wadimiru:
nvc123, А ему бесполезно указывать, что RTFM решает большую часть вопросов. Он предпочитает задавать вопросы, на которые чуть ли не прямым текстом в статьях ответы есть.
Давай покажи мне прямой ответ 250 рублей сразу скину. Покажи , где в статье есть прямой ответ
статьи учат мыслить, и расширяют твою область знаний
если заказы не исполняют в обычном ресурсе, есть всегда мой xgm.guru/p/blog-hatsumehate/218684
5
28
5 лет назад
5
если заказы не исполняют в обычном ресурсе, есть всегда мой xgm.guru/p/blog-hatsumehate/218684
Тут дело в том, что он не может адекватно объяснить, что ему нужно.
0
6
5 лет назад
Отредактирован Raised
0
PT153:
если заказы не исполняют в обычном ресурсе, есть всегда мой xgm.guru/p/blog-hatsumehate/218684
Тут дело в том, что он не может адекватно объяснить, что ему нужно.
Волну из песка 5 раз повторяю)))
На 1 скрина она с здани и не двигается, а мне надо что бы она вперед двинулась
Hate:
Parom_Harona:
Wadimiru:
nvc123, А ему бесполезно указывать, что RTFM решает большую часть вопросов. Он предпочитает задавать вопросы, на которые чуть ли не прямым текстом в статьях ответы есть.
Давай покажи мне прямой ответ 250 рублей сразу скину. Покажи , где в статье есть прямой ответ
статьи учат мыслить, и расширяют твою область знаний
если заказы не исполняют в обычном ресурсе, есть всегда мой xgm.guru/p/blog-hatsumehate/218684
Где же ты раньше был скилов на 5к заказывали. Искали кодеров везде, никто не откликнулся, кроме одного и тот неважно сделал
Загруженные файлы
2 пункта от Raised: 1.1 (ненормативная лексика)
0
21
5 лет назад
0
Тебе нужно передвигать невыделяемого юнита (на старых патчах) или спецэффект (на новых патчах) с моделью волны много раз в секунду в нужном тебе направлении и на нужное тебе расстояние/интервал.
Подсказки можно найти в статьях: раз, два. Ну и учитывая суть вопроса:
Помогите создать движение волны...
Хотелось бы видеть твои попытки решить эту задачу. Непонятно чему собственно помогать.
0
6
5 лет назад
0
Raised: j файлик скинул, где гуи триггер , волна с зади появляется и не идет вперед.
Тебе нужно передвигать невыделяемого юнита (на старых патчах) или спецэффект (на новых патчах) с моделью волны много раз в секунду в нужном тебе направлении и на нужное тебе расстояние/интервал.
Подсказки можно найти в статьях: раз, два. Ну и учитывая суть вопроса:
Помогите создать движение волны...
Хотелось бы видеть твои попытки решить эту задачу. Непонятно чему собственно помогать.
4
21
5 лет назад
Отредактирован Raised
4
j файлик скинул, где гуи триггер
Никто не будет разбирать то во что спарсился твой твой GUI-триггер (потому что в таком виде (j файлик) во-первых код трудно читаем, во-вторых придется вспоминать как эти нативки выглядят в GUI). Куда проще было бы помочь если бы ты либо изначально писал на Jass, либо скинул карту с GUI-триггерами.
Пока это выглядит как троллинг какой-то.
2
32
5 лет назад
2
Как сделать - очень просто, это классический спел по типу волна, представляет из себя векторное движение дамми юнита с помощью таймера, примеры есть в статьях и наработках. Вычисляешь угол между применившим заклинание и точкой применения заклинния, если в качестве цели указан юнит, то угол ищем между применившим и целью, создаем даммика и с помощью таймера в 0.03125 (32 раза в сек более чем достаточно) двигаем дамми юнита в ранее найденном нами направлении, по истечению определенного кол-ва тиков таймера, ну 32х30 это примерно 0.9 секунды и 960 ед расстояния (если двигать цель по 30 ед. за каждый тик), ну так же если нужно наносить урон врагам, для этого используются две группы и фильтр.
Пример кода
function Group_Frost_Wave_Actions takes nothing returns nothing
    local DamageData dd = bj_forLoopAIndexEnd
    local unit Enemy = GetEnumUnit( )

    call GroupAddUnit( dd.grp, Enemy )
    
    set bj_lastCreatedUnit = CreateUnit( Player( PLAYER_NEUTRAL_PASSIVE ), 'hatk', GetUnitX( Enemy ), GetUnitY( Enemy ), GetUnitFacing( Enemy ) )
    call SetUnitPathing( bj_lastCreatedUnit, false )
    call UnitApplyTimedLife( bj_lastCreatedUnit, 'BTLF', 0.50 )
    call UnitAddAbility( bj_lastCreatedUnit, 'A06Z' )
    call SetUnitAbilityLevel( bj_lastCreatedUnit, 'A06Z', dd.id )
    call SetUnitX( bj_lastCreatedUnit, GetUnitX( Enemy ) )
    call SetUnitY( bj_lastCreatedUnit, GetUnitY( Enemy ) )
    
    if IssueTargetOrderById( bj_lastCreatedUnit, 852243, Enemy ) then
        call UnitDamageTarget( dd.attacker, Enemy, dd.dmg, false, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_COLD, WEAPON_TYPE_WHOKNOWS )
        call DestroyEffect( AddSpecialEffectTarget( "Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl", Enemy, "origin" ) )
    endif
   
    set bj_lastCreatedUnit = null
    
    set Enemy = null
endfunction

function Timer_Frost_Wave_Expires takes nothing returns nothing
    local timer t = GetExpiredTimer( )
    local DamageData dd = GetDataBX( t )
    
    set dd.time = dd.time + 1
    
    if dd.time > 25 then //25 * 32 = 800
    
        call DestroyEffect( dd.fx )
        call KillUnit( dd.attacked )
        
        call GroupClear( dd.grp )
        call ReleaseGroup( dd.grp )
        
        call PauseTimer( t )
        call RemoveDataBX( t )
        call DestroyTimer( t )
        call dd.clear( )
        call dd.destroy( )
    else
    
        set dd.rx = dd.rx + 32.00 * Cos( dd.hp )
        set dd.ry = dd.ry + 32.00 * Sin( dd.hp )

        call SetUnitX( dd.attacked, CheckX( dd.rx ) )
        call SetUnitY( dd.attacked, CheckY( dd.ry ) )
    
        call GroupClear( gg_grp_TempGroup )
    
        set bj_groupEnumOwningPlayer = dd.pl
        set bj_forLoopAIndexEnd = dd
        set bj_lastReplacedUnit = dd.attacker
    
        call GroupEnumUnitsInRange( gg_grp_TempGroup, dd.rx, dd.ry, 128.00 + 4.00 * dd.time, OnlyWavedEnemy )
        call ForGroup( gg_grp_TempGroup, function Group_Frost_Wave_Actions )
    
        set bj_lastReplacedUnit = null
    endif

    set t = null
endfunction

//===========================================================================
function startTrig_Frost_Wave takes nothing returns nothing
    local timer t = CreateTimer( )
    local DamageData dd = DamageData.create( )
    
    set dd.attacker = GetSpellAbilityUnit( )
    set dd.id = GetUnitAbilityLevel( dd.attacker, 'A060' )
    set dd.dmg = dd.id * 125.00
    set dd.pl = GetOwningPlayer( dd.attacker )
    set dd.hp =  Atan2( GetSpellTargetY( ) - GetUnitY( dd.attacker ), GetSpellTargetX( ) - GetUnitX( dd.attacker ) )
    set dd.rx = GetUnitX( dd.attacker ) + 32.00 * Cos( dd.hp )
    set dd.ry = GetUnitY( dd.attacker ) + 32.00 * Sin( dd.hp )
    set dd.attacked = CreateUnit( dd.pl, 'hdum', dd.rx, dd.ry, bj_RADTODEG * dd.hp )
    set dd.fx = AddSpecialEffectTarget( "Abilities\\Spells\\Other\\WindWave\\PrismaticWave.mdx", dd.attacked, "origin" )
    set dd.grp = NewGroup( )
    set dd.time = 0

    call SetDataBX( t, dd )
    
    call SetUnitFlyHeight( dd.attacked, 0.00, 0.00 )
    call SetUnitScale( dd.attacked, 1.25, 1.25, 1.25 )
   
    call TimerStart( t, 0.03125, true, function Timer_Frost_Wave_Expires )
    
    set t = null
endfunction
Вот так выглядит аналог того что на твоих картинках в коде, кода минимум, да и ничего заумного нет.
0
6
5 лет назад
0
quq_CCCP:
Как сделать - очень просто, это классический спел по типу волна, представляет из себя векторное движение дамми юнита с помощью таймера, примеры есть в статьях и наработках. Вычисляешь угол между применившим заклинание и точкой применения заклинния, если в качестве цели указан юнит, то угол ищем между применившим и целью, создаем даммика и с помощью таймера в 0.03125 (32 раза в сек более чем достаточно) двигаем дамми юнита в ранее найденном нами направлении, по истечению определенного кол-ва тиков таймера, ну 32х30 это примерно 0.9 секунды и 960 ед расстояния (если двигать цель по 30 ед. за каждый тик), ну так же если нужно наносить урон врагам, для этого используются две группы и фильтр.
Пример кода
function Group_Frost_Wave_Actions takes nothing returns nothing
    local DamageData dd = bj_forLoopAIndexEnd
    local unit Enemy = GetEnumUnit( )

    call GroupAddUnit( dd.grp, Enemy )
    
    set bj_lastCreatedUnit = CreateUnit( Player( PLAYER_NEUTRAL_PASSIVE ), 'hatk', GetUnitX( Enemy ), GetUnitY( Enemy ), GetUnitFacing( Enemy ) )
    call SetUnitPathing( bj_lastCreatedUnit, false )
    call UnitApplyTimedLife( bj_lastCreatedUnit, 'BTLF', 0.50 )
    call UnitAddAbility( bj_lastCreatedUnit, 'A06Z' )
    call SetUnitAbilityLevel( bj_lastCreatedUnit, 'A06Z', dd.id )
    call SetUnitX( bj_lastCreatedUnit, GetUnitX( Enemy ) )
    call SetUnitY( bj_lastCreatedUnit, GetUnitY( Enemy ) )
    
    if IssueTargetOrderById( bj_lastCreatedUnit, 852243, Enemy ) then
        call UnitDamageTarget( dd.attacker, Enemy, dd.dmg, false, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_COLD, WEAPON_TYPE_WHOKNOWS )
        call DestroyEffect( AddSpecialEffectTarget( "Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl", Enemy, "origin" ) )
    endif
   
    set bj_lastCreatedUnit = null
    
    set Enemy = null
endfunction

function Timer_Frost_Wave_Expires takes nothing returns nothing
    local timer t = GetExpiredTimer( )
    local DamageData dd = GetDataBX( t )
    
    set dd.time = dd.time + 1
    
    if dd.time > 25 then //25 * 32 = 800
    
        call DestroyEffect( dd.fx )
        call KillUnit( dd.attacked )
        
        call GroupClear( dd.grp )
        call ReleaseGroup( dd.grp )
        
        call PauseTimer( t )
        call RemoveDataBX( t )
        call DestroyTimer( t )
        call dd.clear( )
        call dd.destroy( )
    else
    
        set dd.rx = dd.rx + 32.00 * Cos( dd.hp )
        set dd.ry = dd.ry + 32.00 * Sin( dd.hp )

        call SetUnitX( dd.attacked, CheckX( dd.rx ) )
        call SetUnitY( dd.attacked, CheckY( dd.ry ) )
    
        call GroupClear( gg_grp_TempGroup )
    
        set bj_groupEnumOwningPlayer = dd.pl
        set bj_forLoopAIndexEnd = dd
        set bj_lastReplacedUnit = dd.attacker
    
        call GroupEnumUnitsInRange( gg_grp_TempGroup, dd.rx, dd.ry, 128.00 + 4.00 * dd.time, OnlyWavedEnemy )
        call ForGroup( gg_grp_TempGroup, function Group_Frost_Wave_Actions )
    
        set bj_lastReplacedUnit = null
    endif

    set t = null
endfunction

//===========================================================================
function startTrig_Frost_Wave takes nothing returns nothing
    local timer t = CreateTimer( )
    local DamageData dd = DamageData.create( )
    
    set dd.attacker = GetSpellAbilityUnit( )
    set dd.id = GetUnitAbilityLevel( dd.attacker, 'A060' )
    set dd.dmg = dd.id * 125.00
    set dd.pl = GetOwningPlayer( dd.attacker )
    set dd.hp =  Atan2( GetSpellTargetY( ) - GetUnitY( dd.attacker ), GetSpellTargetX( ) - GetUnitX( dd.attacker ) )
    set dd.rx = GetUnitX( dd.attacker ) + 32.00 * Cos( dd.hp )
    set dd.ry = GetUnitY( dd.attacker ) + 32.00 * Sin( dd.hp )
    set dd.attacked = CreateUnit( dd.pl, 'hdum', dd.rx, dd.ry, bj_RADTODEG * dd.hp )
    set dd.fx = AddSpecialEffectTarget( "Abilities\\Spells\\Other\\WindWave\\PrismaticWave.mdx", dd.attacked, "origin" )
    set dd.grp = NewGroup( )
    set dd.time = 0

    call SetDataBX( t, dd )
    
    call SetUnitFlyHeight( dd.attacked, 0.00, 0.00 )
    call SetUnitScale( dd.attacked, 1.25, 1.25, 1.25 )
   
    call TimerStart( t, 0.03125, true, function Timer_Frost_Wave_Expires )
    
    set t = null
endfunction
Вот так выглядит аналог того что на твоих картинках в коде, кода минимум, да и ничего заумного нет.
Готово, помогли. Твой код тоже гляну)
Загруженные файлы
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.