Как то много кода для такой примитивной абилки...
Пример кода:
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
endfunctionfunction 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
Вот примерчик как надо делать такие спеллы, 1 структура на все спеллы и общий "движок" всех волн, клонов которых с одним кодом можно наделать 100500, на все абилки у меня 1 триггер.
это пока не мой уровень, код сложен для меня, да и вникать в чужой код пока не по мне, почти все пишут всё с маленькими и одной буквой или с двумя а я все прописываю с большими и полностью по этому понять чужой код для пока дело не из простых
Если не получается, кидай сюда модель попробую пересадить анимку от панды, в принципе я её проверял, юнит вращался. Так же я проверял заднее сальто троля на любого юнита, анимация пересаживается успешно
раскрыть
классно чувак, можно сделать спелл типа сальто назад при касте герой делает сальто и перемещается на короткое расстояние))
Если не получается, кидай сюда модель попробую пересадить анимку от панды, в принципе я её проверял, юнит вращался. Так же я проверял заднее сальто троля на любого юнита, анимация пересаживается успешно
Модель будет сделать проще, так же можно попробовать пересадить анимацию ретерой, если лень заморачиваться. Так же возможен мемхак, точно можно вращать модель, а в последнем вроде и юнита, но я это не проверял, так что на этом мои полномочия всё
так пусть сделает модельку и через триггер делает с ним все что захочет
а блин, сори я думал кружок по оси, ну я не видел такого никогда может быть через мемхак получится а если есть моделько то на изи без мемхака можно сделать пример земляной панда из доты или в редакторе есть модель панды который кувыркается вот
закажи модель или сделай сам если можешь это лучше чем мемхак(как по мне)
помоему создаешь дамми юнита через polar offset на дистанции скажем 400 по углу 0 потом заносим в переменную точку созданного юнита и через него перемещаем героя вокруг юнита через 5 мин скину тест карту если успею
Гуванч, да, впринципе ты вполне можешь обойтись и таким способом реализации, если тебя удовлетворит некая возможная неточность в итоговых подсчётах... и если это реализуется для одного скилла (или для скиллов одного героя). А в идеале надо разделить и детектить тип наносимого уронса, и тогда всё это можно перенести на простое событие получения урона и ряд фильтров.
какая неточность?
насчет "Получает урон" это ахинея мне не позубам пока что можно канеш через boolean сделать когда юнит кастует скилл поставить true после урона поставить false и если юнит отменит каст то опять же false если юнит получил приказ stop тоесть отставить после каста и тут же false и таким способом я долго ходил
Имя: Опыт боя
Метод исполнения: GUI/JASS
MUI: Да
Цель: нет
Уровни: 5
Описание: получивший эту способность героя получает доп. Силу атака в размере 10/15/20/25/30% от своих характеристик
На мемхаке могу сделать
спасибо канеш но я против мемхака абсолютно лучше без него
Размер карты: 468х468
Тип ланда: темная цитадель
Местность: Ад
Вид: локации(для каждой локации свой уровень)
Карта в жанре рпг в аду тематика демоны, ангелы, души нужны интересные локации можно с моделями которые есть в едиторе с перва игрок проходит через пустоши запелненные тварями и монтсрами потом через тюрьму тварей а потом через тюрьму демонов а дальше душ, потом сам ад с 7 локациями которые связаны между собой
Имя: Опыт боя
Метод исполнения: GUI/JASS
MUI: Да
Цель: нет
Уровни: 5
Описание: получивший эту способность героя получает доп. Силу атака в размере 10/15/20/25/30% от своих характеристик
Lua? Хмм, а версии выше 1.26 люди играют? Помоему все зависли в этой версии да и луа капец сложноват я с этим джассом не могу разобратся так что не стоит лезть туда куда не сможешь
» WarCraft 3 / Полёт клинка
» WarCraft 3 / Полёт клинка
вот что он пытается сделать
» WarCraft 3 / Волна силы не пашет vJass
» WarCraft 3 / Стальной вихрь (whirlwind) и Заводной зверь
» WarCraft 3 / Стальной вихрь (whirlwind) и Заводной зверь
» WarCraft 3 / Вращение юнита
Ред. Гуванч
» WarCraft 3 / Нужна модель? - Вам сюда!
» WarCraft 3 / Вращение юнита
» WarCraft 3 / Волна силы не пашет vJass
» WarCraft 3 / Вращение юнита
» WarCraft 3 / Как включить портрет у alternate?
» WarCraft 3 / Вращение юнита
» WarCraft 3 / Вращение юнита
» WarCraft 3 / Нарезалка LoadingScreen'а (теперь с интерфейсом!)
» WarCraft 3 / Вращение юнита
» WarCraft 3 / Вращение юнита
» WarCraft 3 / Вращение юнита
» WarCraft 3 / Не работает модель? - Вам сюда!
вот у этой модели есть анимация бега
» WarCraft 3 / Магический лайфстил
насчет "Получает урон" это ахинея мне не позубам пока что можно канеш через boolean сделать когда юнит кастует скилл поставить true после урона поставить false и если юнит отменит каст то опять же false если юнит получил приказ stop тоесть отставить после каста и тут же false и таким способом я долго ходил
» WarCraft 3 / Способности и алгоритмы на заказ
» Блог им. rsfghd / Спеллпак Повелителя Грома
» WarCraft 3 / Заказы на ландшафт
Тип ланда: темная цитадель
Местность: Ад
Вид: локации(для каждой локации свой уровень)
» WarCraft 3 / Способности и алгоритмы на заказ
Метод исполнения: GUI/JASS
MUI: Да
Цель: нет
Уровни: 5
Описание: получивший эту способность героя получает доп. Силу атака в размере 10/15/20/25/30% от своих характеристик
» Мой путь редактора / Аниме карта 1.1
» WarCraft 3 / Структуры в джассе: смещение без очистки и вытекающие проблемы.