Пытался сделать АОЕ Увечье, ничего не получилось. Пока отложил это дело на потом.
Скажите, как сделать Волну силы, который замедляет задетых на определенное время?

Lesnoi troll, у даммика скорее всего нет модельки, так? Дай ему модель, и ты сам увидишь где он появится.
Да, можно ссылаться на позиции таким образом, мы их называем полярками (от Polar что-то там). Там есть функция которая принимает точку отсчёта, дистанцию, и угол направления (вектор), а возвращает - точку смещённую от указанной позиции.
Атакованный юнит? В событии каста абилки? Нет, там такого быть не может. Смотри какое у тебя слбытие, и какие юниты могут быть в нём задействованы.
При касте - кастер и цель, при атаке - атакуемый и атакующий, и т
П.
Lesnoi troll, только сейчас глянул скрин твой (не заметил).
Событие поменяй на приводит способность в действие.
Таргет будет цель применяемой способности, но т.к. у тебя скорее всего кривой руссификатор, то скорее всего у тебя там просто пустое место между строчек... Сразу около юнит-цель приказа.
`
ОЖИДАНИЕ РЕКЛАМЫ...
33
Волну силы тоже придётся делать кастомную, и в кастомной волне накладывать АОЕ увечье
А вообще нужно настроить дамми, чтобы через 1 кастовать тоже увечье на всех, если всё плохо и не работает, можно временно попробовать создавать отдельного дамми для каждой цели
Ещё дамми от лица нейтрально враждебного может баговаться
32
Lesnoi troll, ваши попытки в студию.
Насчет как сделать, ну я бы сделал примерно так:
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
Примечания:
  • даммик должен иметь обзор над его целью обязательно, как это вы сделайте другое дело, создавая его за владцельца цели или выдавая shared vision неважно.
  • если важно только замедление, лучше использовать AEpa - отравленные стрелы, дебаффы на их основе могут складываться.
  • если волну можно применить в юнита, важно сделать проверку в коде на то какой тип цели использван - юнит или точка, чтобы брать от них координаты.
33
Lesnoi troll, ну скрины гуи триггеров в студию тогда, посмотрим что там не получается (правда я в гуи не разбираюсь, но есть кто разбирается)
32
Lesnoi troll, ну а гуи такие спеллы делать нутроно и неудобно, да что тут разбиратся то?
26
Lesnoi troll, массовое увечье можно накладывать за счёт левого юнита (dummy), который будет в нужный момент создаваться (или вызываться) и использовать нужную абилку на конкретные цели (подходящих юнитов). Пример в прикрепе... что-то из того что там есть, разбирайся
На счёт волны - либо делать полностью кастомную волну (опять же - всё вручную), либо старый популярный (хз почему) вариант с дамми-кастом волны и детектом урона от лица этого даммика. Примеры разного рода волн/снарядов в прикрепе...
Загруженные файлы
7
Lesnoi troll:
Дамми не спаунится, что бы я ни делал
Повторюсь, нужны триггеры, карта или скрины. Причин очень много, будем тратить кучу времени, чтобы угадать каждую или дадите возможность сразу понять в чем может быть проблема?
Если нужно могу поскидывать свои примеры в виде скриншотов, я тот самый кодер заклинаний на GUI (да я знаю, что я дурачок, который не ищет легких путей, не надо меня проклинать кодеры плз) )
7
Mate, Я не прошу вас сделать все за меня, я просто спрашиваю то, что сам не понимаю. Указываю "Создать 1 (Москиты) для владельца юнита (ShockCaster) в (Целевая точка изданного приказа) с поворотом на Стандартная ориентация зданий градусов. Москит не спаунится, не знаю почему. Я скопировал этот триггер, и выглядит это вот так "Боевая единица - Создать 1 Москиты для (Владелец юнита ShockCaster) РІ (Целевая точка изданного приказа) СЃ поворотом РЅР° Стандартная ориентация зданий градусов"
26
Если юнит не создаётся, то вероятно всего игрок владелецьне указан. Это может означать что в переменную юнита ShockCaster ничего не записано (либо данные невозможно получить, такое бывает когда юнит удаляется).
Возможно юнит создаётся, но не в том месте, это тоже следует проверить. Тогда его координаты будут равны 0;0 , а это обычно центр карты.
7
Extremator, Как указать координаты? И можно ли сделать так чтоб москит спаунился на растояний например 700 от кастующего и был направлен на сторону кастера? Решил сделать другую волну силы, который сначала проходит до определенного растояния, и вернется в место, откуда кастовался
ShockTarget указал (Атакованный юнит). Может здесь я ошибся
Загруженные файлы
26
Lesnoi troll, у даммика скорее всего нет модельки, так? Дай ему модель, и ты сам увидишь где он появится.
Да, можно ссылаться на позиции таким образом, мы их называем полярками (от Polar что-то там). Там есть функция которая принимает точку отсчёта, дистанцию, и угол направления (вектор), а возвращает - точку смещённую от указанной позиции.
Атакованный юнит? В событии каста абилки? Нет, там такого быть не может. Смотри какое у тебя слбытие, и какие юниты могут быть в нём задействованы.
При касте - кастер и цель, при атаке - атакуемый и атакующий, и т
П.
Lesnoi troll, только сейчас глянул скрин твой (не заметил).
Событие поменяй на приводит способность в действие.
Таргет будет цель применяемой способности, но т.к. у тебя скорее всего кривой руссификатор, то скорее всего у тебя там просто пустое место между строчек... Сразу около юнит-цель приказа.
Принятый ответ
7
Extremator, С перва моделька была, а потом убрал. В обеих случаях не работало. Но я занялся кое что другим, и там вроде у меня получается, так что, надеюсь разберусь.
У меня русификатор стоит, и он какой то голимый. Некоторые строчки не отображаются.
26
Lesnoi troll, да они все, которые вышли в народ, голимые были.
Я хотел сделать для себя, хороший, чёткий, но... руки не дошли, да и толку мне от него уже давным никакого.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.