Если вы хотели бы использовать в своей карте нестандартное, оригинальное заклинание или наработку, но у вас не хватает знаний для реализации, то эта тема специально для вас. В данной теме вы можете, в определённом правилами формате, оставить заявку на создание необходимого вам заклинания или системы.
Если вы считаете, что у вас есть возможность выполнить какую-либо из имеющихся заявок, то вы можете оставить сообщение в определённом правилами формате, в котором указать какую из заявок собираетесь исполнить.

Правила темы

  • Запрещается дублирование заявок.
  • Любая заявка, написанная непонятным языком (обилие орфографических ошибок, орфоарт, отсутствие знаков препинания, использование рядов восклицательных и вопросительных знаков) будет удалена.
  • Обсуждение технических нюансов исполнения спелла или багов просьба вести через систему личных сообщений.
  • Для составления заявок используйте формы.
Заявки, не удовлетворяющие правилам, будут удалены !

Как составить заявку

Необходимо, используя форму составить сообщение в данной теме, где указать:
  • Желаемое название заказа
  • Желаемый метод исполнения (GUI/Jass/cJass/vJass)
  • Требуется ли возможность использовать спелл несколькими юнитами одновременно (MUI)
  • Цель применения способности
  • Количество уровней
  • Описание (Смысловое, а не художественное)
  • Технические характеристики (кол-во маны, параметры урона, перезарядки, время действия и т.п.) для каждого из уровней
Форма для составления заявки
# Заказ
**Название:** Название способности (или системы)
**Метод:** GUI/Jass/cJass/vJass/lua/angelscript
**MUI:** Обязательно/Не обязательно
**Цели:** Другой юнит / Сам юнит / Точка/ Область/Нет цели/Прочее (указать что именно)
**Количество уровней:** Целое число
**Описание:** Ваше описание. Можно слить со следующим.
**Технические характеристики:** Ваше описание. Можно слить с предыдущим.

Как принимать заказ

Необходимо, используя форму составить сообщение в данной теме, где указать:
  • Никнейм заказчика
  • Название выбранного вами заказа
  • Примерные сроки исполнения (конечно, их соблюдение не критично, но желательно)
Форма для принятия заявки
# Заказ принят
**Заказчик:** Никнейм заказчика
**Заказ:** Название способности/алгоритма
((центр
**Спелл будет завершен к [дата в формате дд.мм.гггг. без скобок]**
))
[ дата принятия заявки в формате дд.мм.гггг / дата, к которой спелл предположительно будет готов в формате дд.мм.гггг ]

Как сообщить о не/выполнении заказа

Необходимо, используя форму составить сообщение в данной теме, где указать:
  • Никнейм заказчика
  • Название выбранного вами заказа
  • Выполнен ли заказ
  • В случае, если заказ невыполним/не выполнен полностью, рекомендуется описать, что именно вам удалось/не удалось сделать.

  • Предоставить карту
Форма для не/выполненного заказа
Заклинание готово! [Если заказ выполнен успешно] / Не удалось выполнить заклинание [Если по каким-либо причинам вы не способны его выполнить] (1 из 2)
=
Заказчик: Никнейм заказчика
Заказ: Название способности
Выполнено: Да/Нет
-
[Сюда добавить инструкцию по импорту, или описать что у вас не/получилось, если не удалось выполнить заказ]
За качественно выполненный заказ вы получите дополнительно 200 единиц опыта.

Дополнительно: как приобрести спелл, не прибегая к этой теме

0. Пройдитесь по базе способностей xgm.guru/p/wc3/tag/ability или алгоритмов xgm.guru/p/wc3/tag/algorithm
A. Для начала загляните в Архив готовых спеллов. Возможно, спелл, аналогичный вашему, уже был сделан.
B. Проверьте, нет-ли нужного спелла в Библиотеке заклинаний. Проверенные спелл-мейкеры изготавливали заклинания специально для общественного использования.
C. Поищите общедоступные для открытия карты - там тоже бывают полезные вещи.
D. Если ничего не помогает, пройдитесь поиском по Академии - вероятно, что такие спеллы уже пытались делать и спрашивали как.
E. Если поиски не помогли, попробуй сделать его сам:
  • Осваиваем триггеры в Базе статей, F.A.Q., если не имеем понятия о них.
  • Существуют специальные статьи по созданию спеллов и баффов: 1, 2, 3, 4, 5
  • Поскольку ваши спеллы будут неоптимизированы, и более того, с кучей утечек - настоятельно рекомендуется читать статьи\темы про JASS. Тяжело читать? Легко делать!
  • Если ну никак не выходит сделать то что требуется, заходим в Академию и используем ее по основному назначению - задаем вопросы.

Разумные поиски и тщательное изучение помогут вам добиться результата.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Этот комментарий удален
16

Заказ

Название: Escape Leap
Метод: См.комментарий
MUI: Да
Цель: сам юнит
Количество уровней: См.комментарий
Описание: www.hiveworkshop.com/threads/escape-leap-v0-02.225863
Большая просьба изменить спелл: в нынешнем виде он не учитывает проходимость (например, лес, граница карты или возвышенность), из-за чего юнит вполне может застрять или потеряться. Препятствия должны корректно ограничивать точку приземления юнита.
Ответы (4)
28
Галендор Крэйл, так юнит должен приземляться сразу в ближайшую проходимую точку или телепортироваться в неё после приземления? В чём проблема взять за основу спелл* на основе вардов*, чтобы запрещать игроку каст спелла в непроходимую точку?
16
rsfghd, заклинание не даёт выбрать точку приземления (впрочем, это не проблема - если ты играл в ВоВ за охотника, то знаешь способность Отрыв). При применении юнит отпрыгивает назад на определённую дистанцию. В текущем исполнении если позади него лес, он может приземлиться среди деревьев. Если возвышенность - оказаться на ней или перелететь через неё. И т.д.
Должно быть так: если на пути прыжка находится непроходимый участок, прыжок заканчивается у его границы (перед лесом, на берегу реки, у границы карты).
28
Галендор Крэйл, и всё же ты не дал мне толкового ответа на мой вопрос, видимо сам особо спеллмейкерством не занимаешься, рассказываю возможные варианты прекращения прыжка:
  1. резкое установление 0 полета и остановление движения при столкновении с препятствием
  2. отлавливать точку приземления перед кастом, спавнить там предмет для обнаружения ближайшей проходимой точки, перенаправлять точку приземления в позицию предмета
  3. циклом пройти расстояние от точки каста до точки падения для обнаружения непроходимой местности, при наличии препятствия - переустановить точку падения
  4. перестать двигаться при наличии препятствия до полного приземления
  5. и так далее))
28
Галендор Крэйл, а, оно вообще гуишное и немного говённое, не учитывается высота ландшафта, из-за чего герой будет как треморный дергаться на кривом ланде во время полёта
28
Выполнение заказа

Заклинание готово!

Заказчик: Галендор Крэйл
Способность: Escape Leap
Выполнено: Да

в конце полёта просто заспавнил итем, переустановил точку, удалил итем и телепортировал туда кастера, импорт такой же как и в оригинале
Загруженные файлы
Ответы (6)
16
rsfghd, большое спасибо!
Ты прав, я в спеллмейкинге разбираюсь на примитивно-базовом уровне (если - то), поэтому мог не донести мысль корректно.
Проверил способность, она всё так же не считает лес препятствием, из-за чего юнит может приземлиться среди деревьев и не выбраться оттуда. Можно ли сделать так, чтобы на деревья была такая же "реакция", как и на водоёмы?
28
Галендор Крэйл, странно, я всегда думал что предмет не может заспавниться в декоре, проверю
28
Галендор Крэйл, я проверил, с деревьями такая же реакция как и с водоёмами, телепорт в ближайшую проходимую точку, спасибо за дезинфу и моё потраченное время
16
rsfghd, я не претендую на абсолютную истину, но... как тогда объяснить это? Для протокола: я просто заспавнил деревья на карте.
28
Галендор Крэйл, это говорит о твоей криворукости. Я же ясно сказал - телепорт в ближайшую проходимую точку. Открой вкладку обзора и поставь галочку на видимость проходимых путей: земля. И ты увидишь, что между твоими деревьями присутствуют пространства, которых в моём случае не было. Если ты и на воде сделаешь проходимую маленькую точку - будь уверен, он там окажется таким же образом
16
rsfghd, ах, вот оно что! Да, ты прав, всё так. Спасибо, тогда вопросов нет.
1
Заказ на работу
Можно ведь заказать сразу 3 скилла на героя (Лича)?
1.
Название: Цепной Мороз
Метод: GUI/Jass
MUI: Обязательно
Цель: Другой юнит
Количество уровней: 3
Описание: Создаёт ледяной шар, который отскакивает от противников до 10 раз, замедляя их и нанося им урон, увеличивающийся с каждым отскоком. (если у героя имеется определённый предмет (Скипетр Аганима), то количество отскоков не ограничено). Да, это ульт из доты.
Характеристики: 1 уровень: урон - 250 ед., увеличение урона - 15 ед., радиус отскока - 600, требует маны - 180 ед., перезарядка - 100 сек. 2 уровень: урон - 400 ед., увеличение урона - 20 ед., радиус отскока - 600, требует маны - 300 ед., перезарядка - 80 сек. 3 уровень: урон - 550 ед., увеличение урона - 25 ед., радиус отскока - 600, требует маны - 420 ед., перезарядка - 60 сек. Длительность замедления как у ледяной звезды на 1, 2, 3 уровнях.
Искал готовые наработки, но там дамми юнит (ледяной шар, модель атаки ледяного змея) летит к месту, где был вражеский юнит на момент применения заклинания (враг отошёл, и шар взорвался на большом расстоянии от него, но продолжил скакать как ни в чём ни бывало), не было увеличения урона с отскоком, ну и был только 1 уровень, из-за чего в редакторе объектов не мог менять урон в зависимости от уровня, ибо это всё на триггерах.
2.
Название: Ледяной Щит
Метод: GUI/Jass
MUI: Обязательно
Цель: Другой юнит, сам юнит, здания
Количество уровней: 4
Описание: Накладывает на цель щит, который уменьшает урон от атак по ней. Пока щит действует, он раз в 1 сек наносит урон вражеским юнитам вокруг и замедляет их. (модель щита такая же, как у ледяной брони) (по возможности, сделать эффекты волн от щита, просто чтобы визуально было видно область, в которой враги замедляются и получают урон).
Характеристики: 1 уровень: уменьшение урона - 30%, урон - 18 ед., длительность - 5 сек. 2 уровень: уменьшение урона - 40%, урон - 32 ед., длительность - 6 сек. 3 уровень: уменьшение урона - 50%, урон - 46 ед., длительность - 7 сек. 4 уровень: уменьшение урона - 60%, урон - 60 ед., длительность - 8 сек. Длительность замедления везде 0,5 сек. Везде требует 100 ед. маны, дальность применения как у ледяной брони, радиус области замедления и урона - 600.
3.
Название: Зловещий Взор
Метод: GUI/Jass
MUI: Обязательно
Цель: область
Количество уровней: 1, способность не относится к герою (ну как у юнитов обычных)
Описание: оглушает вражеское существо и крадёт ману и здоровье в процентном соотношении 10% в секунду. Длительность - 3 сек. Перезарядка - 24 сек.
Ответы (2)
28
ALEX 101 НЕ, если никто не преуспеет, то сделаю на следующих выходных, может раньше, хз
28
Выполнение заказа

Заклинание готово!

Заказчик: ALEX 101 НЕ
Способность: Цепной Мороз
Выполнено: Да (GUI)

инструкция по импорту
удалить из папки Initialization триггер отделённый комментарием (он нужен для показа урона) и скопировать папку в свою карту
половина настроек в гуи, другая половина в редакторе объектов, я думаю ты разберёшься, добавишь нужное кол-во уровней замедления для даммикаста и для основной абилки, ману, кд иконки, описание и так далее устанавливай сам
в триггере Untitled Trigger 001 есть булекспр, где ты должен указать кого отлавливать в качестве следующей цели для нанесения урона, на данный момент там условие что юнит жив, что враг и что не равен предыдущей цели, там же можешь настроить радиус соприкосновения с целью, если тебе не нужны дополнительные эффекты, можешь удалить переменные Dummy1 и Dummy2, а вместе с ними все функции, где они были использованы (они станут красными после удаления), будет вылетать только один даммик
если нужна дополнительная помощь по импорту - спрашивай
Загруженные файлы
Ответы (2)
1
rsfghd, работа супер, но у меня возник вопрос по поводу того, как сделать у способности 3 уровня с изменением урона, ведь в триггере урон постоянно 250 и добавочный урон 15 (всегда 1 уровня). А всё остальное получается, манакост, кд, иконки, разобрался, где кол-во отскоков. А возможно ли сделать так, что если у юнита в предметах к примеру Сфера Льда, то отскоков бесконечное кол-во при любом уровне способности?
28
ALEX 101 НЕ, чел.. там в гуи настройки урона. Добавь ветку если тогда иначе, если уровень абилки у кастера 1, то выставить урон 250, если второй уровень, то 999 и так далее
28
Выполнение заказа

Заклинание готово!

Заказчик: ALEX 101 НЕ
Способность: Ледяной щит
Выполнено: Да

инструкция по импорту
скопировать папку Initialization в свою карту
в триггере Melee Initialization подобрать равкоды в коде под редактор объектов, там же находится и радиус выбора юнитов для урона и урон по ним, отмечено комментариями
в триггере NegateDamage подобрать равкоды под редактор объектов

если нужна дополнительная помощь по импорту - пиши
так же советую сделать прелоад эффектов

а, сор, в триггере NegateDamage 35 строка
call NegateDamage( GetTriggerUnit( ), GetEventDamage( ) * ( 0.80 - 0.10 * GetUnitAbilityLevel( GetTriggerUnit( ), 'A002' ) ) )
формула блокирования урона, т.е. 0.80 - 0.10 * лвл (30% первый лвл, 40% второй и т.д.)
Загруженные файлы
Ответы (4)
38
rsfghd, а можно писать это в ответах на комментарий? Тогда список не будет так захламлен и можно будет сразу видеть заказы.
Возможно, в будущем у заказов с ответами-выполнениями будем делать какую-то особую пометку
28
ScorpioT1000, ниможна
замечание от tysch_tysch: 3.1 Обсуждение действий модераторов (ОДМ) по предотвращению нарушений правил.
28
ScorpioT1000, и вообще где мои +200 опыта за выполнение заказов лебовски
15
Заказ на работу
Всем привет! Нужно заклинание, по своей сути ничего сверхестественного, однако моих знаний не хватает, чтобы учесть все моменты и реализовать это не криво.
Заказ
Название: Яростный рывок
Метод: Jass
MUI: Не нужно
Цель: Другой юнит / Точка
Количество уровней: 3
Описание: Герой прыгает в толпу врагов(Прыгает как прыгуны в длину, а не в высоту, то есть прыжок высокий не нужен, а лишь слегка над землей, потому что герой очень массивный - вождь минотавров). Враги, оказавшиеся на пути, получают 175/275/375 единиц урона и расталкиваются в стороны, от вектора прыжка. Те враги, которые стояли напротив вектора, отталкиваются назад. При этом, если за врагами стоят их союзники и враги налетают на них, то соответственно отталкивают так же и союзников.
По возможности, сделать так, чтобы враги, отлетевшие в декорацию или стену, получили 50/70/100 единиц урона.
Технические характеристики: Тут нужно учитывать преграды, чтобы герой не перепрыгнул через декорации или стены и чтобы враги отлетели так же до стен/декораций, но не сквозь них.
Ответы (5)
28
Meddin, если никто не преуспеет, то сделаю на выходных, может раньше
28
Выполнение заказа
Meddin, всё что нужно изменить при импорте в коде помечено комментариями, достаточно скопировать папку Initialization и вставить в свою карту
если что-то не понятно или нужно переделать - пиши
код
function GetDirection takes real alpha, real gamma returns integer
    if ( alpha < bj_PI and not( gamma > alpha and gamma < alpha + bj_PI ) ) or ( alpha > bj_PI and gamma > alpha - bj_PI and gamma < alpha ) then
        return 2
    else
        return 1
    endif
endfunction

function ParabolaZ2 takes real y0, real y1, real h, real d, real x returns real
    return ( 2.00 * ( y0 + y1 - 2.00 * h ) * ( x / d - 1.00 ) + ( y1 - y0 ) ) * ( x / d ) + y0
endfunction

function GetLocZ takes real x, real y returns real
    call MoveLocation( udg_LFZ, x, y )
    return GetLocationZ( udg_LFZ )
endfunction

function IsUnitDead takes unit u returns boolean
    return IsUnitType( u, UNIT_TYPE_DEAD ) or GetUnitTypeId( u ) == 0
endfunction

function MoveCollision takes nothing returns nothing
    local timer t = GetExpiredTimer( )
    local timer t1
    local integer i = GetHandleId( t )
    local integer i1
    local unit target = LoadUnitHandle( udg_H, i, 0 )
    local unit caster = LoadUnitHandle( udg_H, i, 1 )
    local unit u
    local real a = LoadReal( udg_H, i, 2 )
    local real d = LoadReal( udg_H, i, 3 )
    local real s = LoadReal( udg_H, i, 5 )
    local real x
    local real y
    local real x1
    local real y1
    local group g = LoadGroupHandle( udg_H, i, 6 )
    local group g1
    local player p = GetOwningPlayer( caster )
    
    if s > d then
        set s = d
    endif
    
    set d = d - s
    
    set x = GetUnitX( target ) + s * Cos( a )
    set y = GetUnitY( target ) + s * Sin( a )
    
    call SetItemPosition( udg_TempItem, x, y )
    call SetItemVisible( udg_TempItem, false )
    
    set x1 = GetItemX( udg_TempItem )
    set y1 = GetItemY( udg_TempItem )
    
    if ( x + 1.00 < x1 or x - 1.00 > x1 ) or ( y + 1.00 < y1 or y - 1.00 > y1 ) then
        set x = x - s * Cos( a )
        set y = y - s * Sin( a )
        set d = 0.00
        
        call UnitDamageTarget( caster, target, 25.00, false, false, null, null, null )
        call DestroyEffect( AddSpecialEffectTarget( "Abilities\\Weapons\\AncientProtectorMissile\\AncientProtectorMissile.mdl", target, "chest" ) )
    endif
    
    call SetUnitX( target, x )
    call SetUnitY( target, y )
    
    call GroupEnumUnitsInRange( udg_TempGroup, x, y, 416.00, null )
    
    loop
        set u = FirstOfGroup( udg_TempGroup )
        exitwhen u == null
        call GroupRemoveUnit( udg_TempGroup, u )
        
        if not IsUnitDead( u ) and IsUnitEnemy( u, p ) and not IsUnitInGroup( u, g ) and IsUnitInRange( u, target, 16.00 ) then
            call GroupAddUnit( g, u )
            
            set t1 = CreateTimer( )
            set i1 = GetHandleId( t1 )
            set x1 = GetUnitX( u )
            set y1 = GetUnitY( u )
            
            call SaveUnitHandle( udg_H, i1, 0, u )
            call SaveUnitHandle( udg_H, i1, 1, caster )
            
            call SaveReal( udg_H, i1, 2, Atan2( y1 - y, x1 - x ) )
            call SaveReal( udg_H, i1, 3, LoadReal( udg_H, i, 4 ) * 0.50 )
            call SaveReal( udg_H, i1, 4, LoadReal( udg_H, i, 4 ) * 0.50 )
            call SaveReal( udg_H, i1, 5, LoadReal( udg_H, i, 5 ) * 0.50 )
            
            set g1 = CreateGroup( )
            set bj_groupAddGroupDest = g1
            call ForGroup( g, function GroupAddGroupEnum )
            
            call SaveGroupHandle( udg_H, i1, 6, g1 )
            
            call TimerStart( t1, 0.01, true, function MoveCollision )
            
            set g1 = null
            set t1 = null
        endif
    endloop
    
    if d <= 0.00 then
        call DestroyGroup( g )
        
        call PauseTimer( t )
        call DestroyTimer( t )
        call FlushChildHashtable( udg_H, i )
    else
        call SaveReal( udg_H, i, 3, d )
    endif
    
    set t = null
    set g = null
    set target = null
    set caster = null
endfunction

function Move takes nothing returns nothing
    local timer t = GetExpiredTimer( )
    local timer t1
    local integer i = GetHandleId( t )
    local integer i1
    local unit caster = LoadUnitHandle( udg_H, i, 0 )
    local unit u
    local real a = LoadReal( udg_H, i, 1 )
    local real d = LoadReal( udg_H, i, 2 )
    local real s = LoadReal( udg_H, i, 4 )
    local real x
    local real y
    local real x1
    local real y1
    local player p = GetOwningPlayer( caster )
    local group g = LoadGroupHandle( udg_H, i, 8 )
    local group g1
    
    if s > d then
        set s = d
    endif
    
    set d = d - s
    
    set x = GetUnitX( caster ) + s * Cos( a )
    set y = GetUnitY( caster ) + s * Sin( a )
    
    call SetItemPosition( udg_TempItem, x, y )
    call SetItemVisible( udg_TempItem, false )
    
    set x1 = GetItemX( udg_TempItem )
    set y1 = GetItemY( udg_TempItem )
    
    // check pathing
    if ( x + 1.00 < x1 or x - 1.00 > x1 ) or ( y + 1.00 < y1 or y - 1.00 > y1 ) then
        set x = x - s * Cos( a )
        set y = y - s * Sin( a )
    endif
    
    call SetUnitX( caster, x )
    call SetUnitY( caster, y )
    call SetUnitFlyHeight( caster, ParabolaZ2( LoadReal( udg_H, i, 6 ), LoadReal( udg_H, i, 5 ), LoadReal( udg_H, i, 7 ), LoadReal( udg_H, i, 3 ), d ) - GetLocZ( x, y ), 0.00 )
    
    call GroupEnumUnitsInRange( udg_TempGroup, x, y, 464.00, null ) // radius with collision ( caster + target max collisions (200.00 + 200.00) )
    
    loop
        set u = FirstOfGroup( udg_TempGroup )
        exitwhen u == null
        call GroupRemoveUnit( udg_TempGroup, u )
        
        if not IsUnitDead( u ) and IsUnitEnemy( u, p ) and not IsUnitInGroup( u, g ) and IsUnitInRange( u, caster, 64.00 ) then // 64.00 - radius with unit collision
            call GroupAddUnit( g, u )
            
            call UnitDamageTarget( caster, u, LoadReal( udg_H, i, 9 ), false, false, null, null, null ) // damage
            call DestroyEffect( AddSpecialEffectTarget( "Abilities\\Weapons\\AncientProtectorMissile\\AncientProtectorMissile.mdl", u, "chest" ) )
            
            set t1 = CreateTimer( )
            set i1 = GetHandleId( t1 )
            set x1 = GetUnitX( u )
            set y1 = GetUnitY( u )
            
            call SaveUnitHandle( udg_H, i1, 0, u )
            call SaveUnitHandle( udg_H, i1, 1, caster )
            
            if GetDirection( a, Atan2( y1 - y, x1 - x ) ) == 1 then // left or right move
                call SaveReal( udg_H, i1, 2, a + bj_PI * 0.50 )
            else
                call SaveReal( udg_H, i1, 2, a - bj_PI * 0.50 )
            endif
            
            call SaveReal( udg_H, i1, 3, 416.00 ) // distance for discarding
            call SaveReal( udg_H, i1, 4, 416.00 )
            call SaveReal( udg_H, i1, 5, 7.00 ) // speed of discarding
            call SaveReal( udg_H, i1, 7, LoadReal( udg_H, i, 10 ) ) // wall damage
            
            // save group of all units thats already got damage from spell
            set g1 = CreateGroup( )
            set bj_groupAddGroupDest = g1
            call ForGroup( g, function GroupAddGroupEnum )
            
            call SaveGroupHandle( udg_H, i1, 6, g1 )
            
            call TimerStart( t1, 0.01, true, function MoveCollision )
            
            set g1 = null
            set t1 = null
        endif
    endloop
    
    if d <= 0.00 then
        call PauseUnit( caster, false )
        call DestroyEffect( AddSpecialEffect( "Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl", x + 64.00 * Cos( a ), y + 64.00 * Sin( a ) ) )
        
        call DestroyGroup( g )
        
        call PauseTimer( t )
        call DestroyTimer( t )
        call FlushChildHashtable( udg_H, i )
    else
        call SaveReal( udg_H, i, 2, d )
    endif
    
    set t = null
    set g = null
    set caster = null
endfunction

function SetAnim takes nothing returns nothing
    local timer t = GetExpiredTimer( )
    local unit caster = LoadUnitHandle( udg_H, GetHandleId( t ), 0 )
    
    call PauseUnit( caster, true )
    call SetUnitAnimation( caster, "attack slam" )
    call QueueUnitAnimation( caster, "stand" )
    
    call TimerStart( t, 0.01, true, function Move )
    
    set t = null
    set caster = null
endfunction

function Trig_Spell_Actions takes nothing returns nothing
    local timer t = CreateTimer( )
    local integer i = GetHandleId( t )
    local integer lvl
    local unit caster = GetTriggerUnit( )
    local real x = GetUnitX( caster )
    local real y = GetUnitY( caster )
    local real x1 = GetSpellTargetX( )
    local real y1 = GetSpellTargetY( )
    local real d
    
    if UnitAddAbility( caster, 'Arav' ) then
        call UnitRemoveAbility( caster, 'Arav' )
    endif
    
    call SaveReal( udg_H, i, 5, GetLocZ( x, y ) ) // start height
    call SaveReal( udg_H, i, 6, GetLocZ( x1, y1 ) ) // end height
    
    set x = x1 - x
    set y = y1 - y
    set d = SquareRoot( x * x + y * y )
    
    call SaveUnitHandle( udg_H, i, 0, caster )
    call SaveReal( udg_H, i, 1, Atan2( y, x ) ) // angle
    call SaveReal( udg_H, i, 2, d ) // distance
    call SaveReal( udg_H, i, 3, d ) // distance max
    call SaveReal( udg_H, i, 4, d * 0.018 ) // speed
    call SaveReal( udg_H, i, 7, 75.00 + ( 750.00 - d ) * 0.15 ) // parabola height
    call SaveGroupHandle( udg_H, i, 8, CreateGroup( ) )
    
    set lvl = GetUnitAbilityLevel( caster, GetSpellAbilityId( ) )
    if lvl == 1 then // ability level
        call SaveReal( udg_H, i, 9, 175.00 ) // start damage
        call SaveReal( udg_H, i, 10, 50.00 ) // wall damage
    elseif lvl == 2 then
        call SaveReal( udg_H, i, 9, 275.00 )
        call SaveReal( udg_H, i, 10, 70.00 )
    else
        call SaveReal( udg_H, i, 9, 375.00 )
        call SaveReal( udg_H, i, 10, 100.00 )
    endif
    
    call TimerStart( t, 0.00, false, function SetAnim )
    
    set t = null
    set caster = null
endfunction

//===========================================================================
function Trig_Spell_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A000'
endfunction

function InitTrig_Spell takes nothing returns nothing
    set gg_trg_Spell = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Spell, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Spell, Condition( function Trig_Spell_Conditions ) )
    call TriggerAddAction( gg_trg_Spell, function Trig_Spell_Actions )
endfunction

Загруженные файлы
28
Meddin, сор что долго, у меня проблемы со светом и жизнью в целом, лучше бы сдох
15
rsfghd, прими мою благодарность! Как раз на выходных займусь переносом, если что отпишусь.
14
сор что долго, у меня проблемы со светом и жизнью в целом, лучше бы сдох
Мне очень жаль это слышать. Желаю, чтобы у тебя всё наладилось. Простите за оффтоп.
PS способность шикарная
38
Последние новости!
Ресурс переименован в "Способности и алгоритмы на заказ"
Заказывайте заклинания, алгоритмы и целые наработки. В дальнейшем мы планируем развивать систему поощрения за исполнение заказов!
4
Заказ на работу

Заказ.

Название пока нет.
Метод гуй.
Цели сам юнит.
Кол-во уровней 3.
Описание когда герой наносит крит урон герой получает хил (паладина на 100 хп) и + 10 к урону на 5 сек. и антимаг щит (банши) на 5 сек, а на врага накладывается дебаф в виде -3 брони на 5 сек. С каждым уровнем только будет увеличиваться шанс крита на 10-15-20%.
Этот комментарий удален
7
Заказ на работу
Всем привет! Помогите сделать простой disarm через склад.
я устал пытаться (
# Заказ
Название: дизарм
Метод: GUI/Jass
MUI: Обязательно!
Цели: Другой юнит (враг)
Количество уровней: 3
Описание: Геройская способность. Накидывается на вражеского воина/героя (кроме техники). Запрещает ему атаковать на время.
Технические характеристики: Желательно реализовать наипростейшим образом, через склад. (не использвать проклятие, горелку и другие заклинания которые блочат атаку). Ур1 - 6 сек дизарма. Ур2 - 8 сек. Ур3 - 10 сек дизарма.
покажите мне идиоту как это сделать пожалуйстаааааааа...
Ответы (4)
28
Выполнение заказа
mistwood, Вот простой пример
Загруженные файлы
7
Roy Mustang, бро, какая версия варика?
карту не открывает(((
у меня старичок 1.26 на нем клепаю и играем с работягами
28
Выполнение заказа
mistwood, два варианта. Первый заблокирован ибо работает криво - не учитывает существующий дебафф. Т.е. если ты не можешь наложить дебафф на юнита, у которого уже есть этот дебафф - то всё оке, если же ты хочешь обновление продолжительности дебаффа повторным кастом - следует юзать второй вариант, отделённый комментарием. Там всё на гуи, так что разберёшься
Загруженные файлы
7
rsfghd, Спасибо большое, сейчас потестчу! Дай бог тебе здоровья крепкого!
1
Всем ку! Помогите сделать этот триггер на GUI
# Заказ
Название: Угол поворота Юнитов
Метод: GUI
Описание: Каждые 0.03 или 0.01 сек Коричневые юниты повернутся к противоположной угол поворота Самого героя от синего точки, тоесть если герой повернется спиной к синему точку то другие юниты тоже должны повернуться спином к синему точку. Заранее Спасибо !!!
Загруженные файлы
Ответы (5)
28
Выполнение заказа

Заклинание готово!

Заказчик: Panda_95
Заказ: Угол поворота Юнитов
Выполнено: Да
Карта: xgm.guru/files/100/123666/comments/541795/facing.w3x

Загруженные файлы
1
rsfghd, Можно кое что ещё заодно попросить пж, а как переместить
их так чтобы расятояние между юнитом и точки были равны растоянием между героя и точки (угол поворота при этом не меняется)
28
Panda_95, переменными нужно пользоваться чтобы утечек было, но я не буду расписывать как юзать кастомскрипты и прочее:
  1. укажи переменной типа real расстояние между героем и точкой
  2. выбери всех юнитов, которым хочешь задать расстояние
  3. 2.1. переместить выбранного юнита в точку с полярным смещением
  4. 2.2. первый аргумент - центральная точка, второй аргумент - расстояние (пункт 1), третий аргумент - угол, на который переместить (укажи просто угол между выбранным юнитом и точкой)
если не понятно, то позже сделаю пример, может сегодня, может завтра, может через 20 лет
1
rsfghd,
у вас есть дискорд? или прочее мессенджеры? мой дс: .Panda_95
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.