Добавлен , опубликован
Существует специальная тема Способности и алгоритмы на заказ, где любой желающий может помочь с вашими фантазиями и где я тоже иногда зависаю. Кроме того, есть платные заказы, например, можете обратиться к Hate - Заклинания на заказ для Warcraft 3 (Платные) или поискать ещё темы на сайте
Я хочу развивать своё резюме, поэтому можете оставлять заявки и там, и тут. Имейте ввиду, заказы я выполняю бесплатно, на чистом энтузиазме, трачу на это своё свободное время, поскольку воспринимаю это как хобби, всё выполняю при возможности и желании
раскрыть
Я не буду вливаться в ваши проекты и не принимаю деньги, для этого есть платные темы. Авторство или упоминания меня в карте делать не нужно, ибо я буду менять ник. Если появится желание отблагодарить - лайка достаточно
Могу сделать анонимно заклинание, для этого можно обратиться ко мне в личку, но меня расстроит невозможность поделиться им, если оно интересное
Отдаю приоритет именно способностям, алгоритмы/системы, вроде 3д камеры/физики, меня особо не интересуют, да и не всё умею, и не за все заказы возьмусь, не стоит ожидать от меня движущихся птиц и чайники на молниях, матрицу не изучал и с математикой не дру
Работаю на 1.26, могу воспользоваться UjAPI, при создании спелла для рефа
Для меня предпочтительнее пользоваться вджассом, но могу сделать заклинание на чистом джассе и даже гуи, однако имейте ввиду, гуи может многократно усложнить работу, ибо на нём может не хватать функционала для создания вашего спелла. Есть вариант скрестить джасс с гуи, пользуясь TriggerEvaluate

Форма составления заявки

При создании заявки не забудьте указать тип комментария Заказ на работу
# Заказ
**Название:** Название способности (опционально, если заказ один)
**Метод:** GUI/Jass/cJass/vJass/Zinc
**Версия Warcraft III:** Версия варкрафта для этого заказа
**Техническое описание:** Распишите механику способности в деталях
Заявки оставлять в комментариях под этим ресурсом
раскрыть
Название - можно любое указать, вплоть до символа, это поможет в навигации по мере сдачи работ. Не нужно указывать, если в заказе только одна способность, работа сдаётся в ответах под заказом
Метод - выберите для себя комфортный метод, на котором будет выполнена способность. При методе кодом, я укажу комментариями где нужно будет что-то отредактировать. Комфортные для меня методы в порядке убывания: vJass > Jass > cJass > Zinc > GUI
Версия Warcraft III - на определённых версиях не доступен мемхак и сджасс. Чтобы взять ориентир на рефорджед, могу воспользоваться UjAPI. Это необходимо для специфических заказов, к примеру, повышение бонусной силы атаки, где на старых версиях требуется мемхак/южапи/костыли/база данных, а на более новых для этого присутствуют нативки
Техническое описание - укажите что должна делать ваша способность, например:
1 уровень: выпускается волна в точку каста
2 уровень: 2 волны в точку каста с разницей в 20 градусов по бокам
3 уровень: 5 волн, одна посередине и по 2 по бокам с разницей в 10 градусов
Каждая волна движется со скоростью 2000 и дальностью 1000. Радиус поражения 200 и с каждым уровнем увеличивается на 50 вместе с размером волны. Я хочу наносить урон юнитам самостоятельно, на гуи, с помощью TriggerEvaluate, мне нужны будут переменные применяющего юнита и уровень его способности на момент каста абилки, оставь пример нанесения урона с использованием этих переменных
Красивое форматирование приветствуется

Примеры работ

Всё у меня в ресурсах: xgm.guru/u/rsfghd
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Этот комментарий удален
15
Заказ на работу
Название: Понижение защиты
Метод: Jass
Версия Warcraft III: 1.26
Техническое описание: При атаке у атакованного юнита отнимается защита в зависимости от уровня атакера, например если атакер 10 уровня, то с каждой атаки минусуется по 1 единице защиты за стак, если 20 уровень, то минусуется 2 единицы за стак и так до 100 уровня.
Максимум стаков - 7, когда достигает максимального стака, накидывается сайленс на 2 секунды, и через 5 секунд защита добавляется обратно.
Ответы (10)
28
Выполнение заказа

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

Понижение защиты

инструкция по импорту
скопировать папку Initialization и вставить в свою карту, перекопировать редактор объектов и вставить в свою карту, в триггере Melee Initialization настроить бд в соответствии с редактором объектов
в триггере EventDamage на 81 строке указать даммика, что будет кастовать таргетный сайленс
на 70 строке можно изменить время спадения дебаффа на броню
на 61 строке можешь настроить формулу уменьшения брони
на 54 строке аура торнадо для отображения дебаффа на юните + статус бар (на 24-25 то же самое)
советую сделать прелоад ауры, чтобы при первом получении не происходил пролаг

Код

EventDamage
function SetBonusArmorNegative takes unit u, integer value returns nothing
    local integer i = udg_BDMax
    
    loop
        exitwhen i <= 0
        
        if udg_BDValue[i] <= value then
            call UnitAddAbility( u, udg_BDAbil[i] )
        
            set value = value - udg_BDValue[i]
        else
            call UnitRemoveAbility( u, udg_BDAbil[i] )
        endif
        
        set i = i - 1
    endloop
endfunction

function RemoveDebuff takes nothing returns nothing
    local timer t = GetExpiredTimer( )
    local integer i = GetHandleId( t )
    local unit u = LoadUnitHandle( udg_H, i, 0 )
    
    call UnitRemoveAbility( u, 'A009' )
    call UnitRemoveAbility( u, 'B000' )
    call SetBonusArmorNegative( u, 0 )
        
    call RemoveSavedInteger( udg_H, GetHandleId( u ), 0 )
    
    call FlushChildHashtable( udg_H, i )
    call DestroyTimer( t )
    
    set u = null
    set t = null
endfunction

function Trig_EventDamage_Actions takes nothing returns nothing
    local unit damaged
    local timer t
    local integer i
    local integer stack
    
    if GetUnitAbilityLevel( GetTriggerUnit( ), 'Bspo' ) > 0 then
        set damaged = GetTriggerUnit( )
        call UnitRemoveAbility( damaged, 'Bspo' )
        
        set t = LoadTimerHandle( udg_H, GetHandleId( damaged ), 0 )
        
        if t == null then
            set t = CreateTimer( )
            
            call SaveTimerHandle( udg_H, GetHandleId( damaged ), 0, t )
            call UnitAddAbility( damaged, 'A009' )
            call SaveUnitHandle( udg_H, GetHandleId( t ), 0, damaged )
        endif
        
        set i = GetHandleId( t )
        set stack = LoadInteger( udg_H, i, 1 ) + 1
        
        call SetUnitAbilityLevel( damaged, 'A009', stack )
        call SetBonusArmorNegative( damaged, IMaxBJ( 1, R2I( GetHeroLevel( GetEventDamageSource( ) ) * 0.10 ) ) * stack )
        
        if stack < udg_BDMax then
            call SaveInteger( udg_H, i, 1, stack )
        else
            call IssueTargetOrder( udg_TempUnit, "soulburn", damaged )
        endif
        
        call TimerStart( t, 5.00, false, function RemoveDebuff )
        
        set t = null
        set damaged = null
    endif
endfunction

//===========================================================================
function InitTrig_EventDamage takes nothing returns nothing
    set gg_trg_EventDamage = CreateTrigger(  )
    call TriggerAddAction( gg_trg_EventDamage, function Trig_EventDamage_Actions )
    set udg_TempUnit = CreateUnit( Player( PLAYER_NEUTRAL_PASSIVE ), 'u000', 0.00, 0.00, 0.00 )
endfunction
28
LastUchiha, если ты захочешь отнимать больше защиты или добавить больше стаков, что превысит 123 единицы (1+2+4+8+16+32+64), то добавь просто новые значения в бд (х2 предыдущего числа, т.е. 128/256/512/1024...), и не забудь указать новое количество индексов для BDMax
28
LastUchiha, стаки на 63 строке триггера EventDamage, но я пихнул туда udg_BDMax, поскольку подходило под тз, лучше просто указать макс кол-во стаков
28
LastUchiha, ахахаха, блин, извиняюсь, перед сном делал спелл, вытащи из лупа в первом триггере всё, кроме добавления события, поставь чуть ниже/выше пика юнитов, а то там хэштаблица создаётся на каждого выбранного юнита
15
rsfghd, если продолжать бить юнита когда у него максимальный дебафф, то начнутся лаги, а именно фпс будет всё ниже и ниже садится.
28
Вышла новая версия! Прокрутить к ресурсу
LastUchiha, я сначала подумал, что может в цикле накосячил из-за недосыпа, но нет, это сайленс прикалывается. Когда обнулял значения сайленса, поставил периодичность урона на 0.00, в итоге, оно, похоже, каждые 0.00 секунд дамажило с 0 урона, вызывая триггер получения урона, решилось просто - выставил периодичность урона на 99999999999999, ну и приколы..

вот обновлённая карта с исправлением предыдущего косяка
15
rsfghd, защита возобновляться должна просто через 5 секунд, а тут если юнит за эти 5 секунд был атакован, то нужно опять ждать 5 секунд и так по кругу.
28
LastUchiha, напиши просто, что через 5 секунд после получения последнего стака - все стаки должны сброситься, так будет понятнее, перенеси строку call TimerStart( t, 5.00, false, function RemoveDebuff ) рядом к строке call SaveInteger( udg_H, i, 1, stack )
должно выйти так
        if stack < udg_BDMax then
            call SaveInteger( udg_H, i, 1, stack )
        	call TimerStart( t, 5.00, false, function RemoveDebuff )
        else
            call IssueTargetOrder( udg_TempUnit, "soulburn", damaged )
        endif
время таймера будет обновляться каждый раз, когда юнит получает автоатаку, за исключением наличия последнего стака
15

Заказ

Название: Божественная призма
Метод: Jass
Версия Warcraft III: 1.26а
Техническое описание: Если цель – противник, он получает 400 ед. урона от светлой магии и отражает энергию, которая восполняет 300 ед. здоровья 5 вашим союзникам в радиусе 30 м.
Если цель – союзник, он восстанавливает 600 ед. здоровья и отражает энергию, которая наносит 190 ед. урона от светлой магии 5 противникам в радиусе 30 м.
Ответы (6)
28
Desgul, светлая магия и отражение энергии это снаряд, молния или мгновенное?
28
Выполнение заказа

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

Божественная призма

инструкция по импорту
скопировать папку Initialization и вставить в свою карту
скопировать даммика и абилку из ро и вставить в свою карту
в триггере Spell:
153 строка - указать равкод абилки
30-32 строки - указать скорость полёта снаряда
60 строка - количество целей для урона/хила после основной
54 строка - хил основной цели
57 строка - урон основной цели
62 строка - радиус с максимальной коллизией у юнита (+200)
71 строка - радиус
103 строка - хил второстепенных целей
105 строка - урон второстепенных целей
заменить 'u000' в коде на своего даммика

Код

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

function Move takes nothing returns nothing
    local timer t = GetExpiredTimer( )
    local integer i = GetHandleId( t )
    local integer k
    local player p
    local unit caster
    local unit target = LoadUnitHandle( udg_H, i, 1 )
    local unit dummy = LoadUnitHandle( udg_H, i, 2 )
    local unit u
    local real x = GetUnitX( dummy )
    local real y = GetUnitY( dummy )
    local real z = LoadReal( udg_H, i, 3 )
    local real x1 = GetUnitX( target )
    local real y1 = GetUnitY( target )
    local real z1 = GetLocZ( x1, y1 ) + GetUnitFlyHeight( target ) + 50.00
    local real ax = x1 - x
    local real ay = y1 - y
    local real az = z1 - z
    local real d = RMaxBJ( 1.00, SquareRoot( ax * ax + ay * ay + az * az ) )
    
    set ax = ax / d
    set ay = ay / d
    set az = az / d
    
    set x = x + 20.00 * ax
    set y = y + 20.00 * ay
    set z = z + 20.00 * az
    
    call SetUnitX( dummy, x )
    call SetUnitY( dummy, y )
    call SetUnitFlyHeight( dummy, z - GetLocZ( x, y ), 0.00 )
    
    if IsUnitInRange( dummy, target, 0.00 ) and SquareRoot( ( z1 - z ) * ( z1 - z ) ) <= 100.00 then
        call SetUnitAnimation( dummy, "death" )
        call UnitApplyTimedLife( dummy, 'BTLF', 2.00 )
        
        set caster = LoadUnitHandle( udg_H, i, 0 )
        set p = GetOwningPlayer( caster )
        
        set k = LoadInteger( udg_H, i, 4 )
        
        call PauseTimer( t )
        call FlushChildHashtable( udg_H, GetHandleId( t ) )
        call DestroyTimer( t )
        
        if k == 1 then
            if IsUnitAlly( target, p ) then
                if not IsUnitType( target, UNIT_TYPE_DEAD ) then
                    call SetWidgetLife( target, GetWidgetLife( target ) + 600.00 )
                endif
            else
                call UnitDamageTarget( caster, target, 400.00, false, false, null, null, null )
            endif
            
            set k = 5
            
            call GroupEnumUnitsInRange( udg_TempGroup, x, y, 700.00, null )
            
            call GroupRemoveUnit( udg_TempGroup, target )
            
            loop
                set u = FirstOfGroup( udg_TempGroup )
                exitwhen u == null
                call GroupRemoveUnit( udg_TempGroup, u )
                
                if IsUnitInRangeXY( u, x, y, 500.00 ) then
                    if not IsUnitType( u, UNIT_TYPE_DEAD ) then
                        if ( IsUnitAlly( target, p ) and not IsUnitAlly( u, p ) ) or ( IsUnitAlly( u, p ) and not IsUnitAlly( target, p ) ) then
                            set t = CreateTimer( )
                            set i = GetHandleId( t )
                            
                            set bj_lastCreatedUnit = CreateUnit( GetOwningPlayer( caster ), 'u000', x, y, Atan2( GetUnitY( u ) - y, GetUnitX( u ) - x ) * bj_RADTODEG )
                            call UnitAddAbility( bj_lastCreatedUnit, 'Arav' )
                            call SetUnitX( bj_lastCreatedUnit, x )
                            call SetUnitY( bj_lastCreatedUnit, y )
                            call SetUnitFlyHeight( bj_lastCreatedUnit, z - GetLocZ( x, y ), 0.00 )
                            call SetUnitAnimation( bj_lastCreatedUnit, "birth" )
                            call QueueUnitAnimation( bj_lastCreatedUnit, "stand" )
                            
                            call SaveUnitHandle( udg_H, i, 0, caster )
                            call SaveUnitHandle( udg_H, i, 1, u )
                            call SaveUnitHandle( udg_H, i, 2, bj_lastCreatedUnit )
                            call SaveReal( udg_H, i, 3, z )
                            call SaveInteger( udg_H, i, 4, 0 )
                            call TimerStart( t, 0.01, true, function Move )
                            
                            set i = i - 1
                            
                            if i <= 0 then
                                call GroupClear( udg_TempGroup )
                            endif
                        endif
                    endif
                endif
            endloop
        else
            if IsUnitAlly( target, GetOwningPlayer( caster ) ) then
                call SetWidgetLife( target, GetWidgetLife( target ) + 300.00 )
            else
                call UnitDamageTarget( caster, target, 190.00, false, false, null, null, null )
            endif
        endif
        
        set caster = null
    else
        call SaveReal( udg_H, i, 3, z )
    endif
    
    set t = null
    set dummy = null
    set target = null
endfunction

function Trig_Spell_Actions takes nothing returns nothing
    local timer t = CreateTimer( )
    local integer i = GetHandleId( t )
    local unit caster = GetTriggerUnit( )
    local unit target = GetSpellTargetUnit( )
    local real x = GetUnitX( caster )
    local real y = GetUnitY( caster )
    local real z = GetUnitFlyHeight( caster ) + 50.00
    
    set bj_lastCreatedUnit = CreateUnit( GetOwningPlayer( caster ), 'u000', x, y, Atan2( GetUnitY( target ) - y, GetUnitX( target ) - x ) * bj_RADTODEG )
    call UnitAddAbility( bj_lastCreatedUnit, 'Arav' )
    call SetUnitX( bj_lastCreatedUnit, x )
    call SetUnitY( bj_lastCreatedUnit, y )
    call SetUnitFlyHeight( bj_lastCreatedUnit, z, 0.00 )
    call SetUnitAnimation( bj_lastCreatedUnit, "birth" )
    call QueueUnitAnimation( bj_lastCreatedUnit, "stand" )
    
    set z = z + GetLocZ( x, y )
    
    call SaveUnitHandle( udg_H, i, 0, caster )
    call SaveUnitHandle( udg_H, i, 1, target )
    call SaveUnitHandle( udg_H, i, 2, bj_lastCreatedUnit )
    call SaveReal( udg_H, i, 3, z )
    call SaveInteger( udg_H, i, 4, 1 )
    call TimerStart( t, 0.01, true, function Move )
    
    set t = null
    set caster = null
    set target = 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
Загруженные файлы
30

Заказ

Метод: UjAPI
Версия Warcraft III: Версия варкрафта для этого заказа
Техническое описание: Две способности в синергии

Водный элементаль

Почти обычный призыв элементаля, но...
Если призвать элементаля на воде, то он получит 10% за уровень способности здоровья и урона.
Если призвать элементаля с целью в другого водного элементаля, то цель взорвётся нанеся всем вокруг урон в размере 10% за уровень способности от оставшегося хп. Призванный элементаль получит добавку к урону в размере 10% за уровень способности.

Цепная молния

Её нельзя напрямую кастануть в водного элементаля. Но если при прыжке в радиусе доступности будет водный элементаль, то она перепрыгнет на него, вылечит ему столько хп сколько должна была нанести урона и раздвоившись продолжит прыгать. Одна и та же цепная молния не может два раза попасть в одного и того же водяного элементаля.
Ответы (1)
28
nazarpunk, проверка на наличие воды в точке на южапи некорректно работает, поэтому заказ выполнять не буду
1

Заказ

Метод: JASS/vJASS
Версия Warcraft III: Любая версия
Техническое описание:
Загруженные файлы
Ответы (3)
28
Gosick3000, АХАХАХАХ, рад видеть любителя работ blink'a, всегда мечтал научиться делать такие же спеллы, и даже попробовал что-то придумать: xgm.guru/p/wc3/UjAPI-Bahisa-Spellpack-qQU
Следующим спеллпаком хотел лучницу сделать, но нет идей для оригинальной ульты и одного обычного скилла. Мб возьму опалесценцию из отчаяния
Без должных моделек с анимациями и эффектами будет убого выглядеть. В следующий раз лучше предоставлять материалы для работы, чтобы мог более корректно выполнить тз
Попробую на стандарте что-то придумать с этим
1
rsfghd,
У меня есть модели пыли, но, к сожалению, другие модели я предоставить не могу.
Загруженные файлы
28
Выполнение заказа

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

Подобрать эффекты, модельки, немного подогнать под это дело код и в принципе будет сносно. Но у блинка так-то сделана иначе сама система кастов, типа нет таргетных абилок (ими нужно попадать) и в зависимости от того есть ли в радиусе поражения юнит, какая разница высот, какая дистанция между ними - происходят соответствующие действия, вроде прыжка/телепорта вверх, сокращение дистанции телепортами и т.д. и т.п.
инструкция по импорту
убрать триггер Untitled Trigger 001 и скопировать папку Initialization в свою карту
в триггере Spell на 232 строке указать равкод абилки
на 177 строке указать урон от первого удара
на 87 строке урон от второго удара
на 65 урон от серии ударов
на 142 урон при окончании серии ударов
всё остальное требует минимальных знаний джасса

Код

AllGlobals
library AllGlobalsLib
globals
    constant hashtable H = InitHashtable( )
endglobals

struct vector
    real x
    real y
    real z
    
    method length takes nothing returns real
        return SquareRoot( x * x + y * y + z * z )
    endmethod
    
    method normalize takes nothing returns nothing
        local real l = length( )
        
        if l == 0.00 then
            set l = 1.00
        endif
        
        set x = x / l
        set y = y / l
        set z = z / l
    endmethod
    
    static method create takes real x, real y, real z returns thistype
        local thistype this = thistype.allocate( )
        
        set this.x = x
        set this.y = y
        set this.z = z
        
        return this
    endmethod
endstruct

function ParabolaZ takes real h, real d, real x returns real
    return (4 * h / d) * (d - x) * (x / d)
endfunction

private function AlphaTeleportPeriodic takes nothing returns nothing
    local timer t = GetExpiredTimer( )
    local integer i = GetHandleId( t )
    local real r = LoadReal( H, i, 1 ) + 0.01
    local real k = LoadReal( H, i, 2 )
    
    call SetUnitVertexColor( LoadUnitHandle( H, i, 0 ), 255, 255, 255, R2I( 255.00 - ParabolaZ( 255.00, k, r ) ) )
    
    if r >= k then
        call PauseTimer( t )
        call DestroyTimer( t )
        call FlushChildHashtable( H, i )
    else
        call SaveReal( H, i, 1, r )
    endif
    
    set t = null
endfunction

function AlphaTeleport takes unit u, real time returns nothing
    local timer t = CreateTimer( )
    local integer i = GetHandleId( t )
    
    call SaveUnitHandle( H, i, 0, u )
    call SaveReal( H, i, 1, 0.00 )
    call SaveReal( H, i, 2, time )
    call TimerStart( t, 0.01, true, function AlphaTeleportPeriodic )
    
    set t = null
endfunction

private function Falling takes nothing returns nothing
    local timer t = GetExpiredTimer( )
    local integer i = GetHandleId( t )
    local unit u = LoadUnitHandle( H, i, 0 )
    local real s = LoadReal( H, i, 1 ) - 0.25
    local real f = GetUnitFlyHeight( u ) + s
    
    call SetUnitFlyHeight( u, f, 0.00 )
    
    if f <= 0.00 then
        call PauseTimer( t )
        call FlushChildHashtable( H, i )
        call DestroyTimer( t )
        
        call RemoveSavedHandle( H, GetHandleId( u ), UnitFallingKey )
    else
        call SaveReal( H, i, 1, s )
    endif
    
    set t = null
    set u = null
endfunction

function UnitStartFalling takes unit u, real speed returns nothing
    local timer t = LoadTimerHandle( H, GetHandleId( u ), UnitFallingKey )
    
    if t == null then
        set t = CreateTimer( )
        
        call SaveTimerHandle( H, GetHandleId( u ), UnitFallingKey, t )
        call SaveUnitHandle( H, GetHandleId( t ), 0, u )
        
        call TimerStart( t, 0.01, true, function Falling )
    endif
    
    call SaveReal( H, GetHandleId( t ), 1, speed )
    
    set t = null
endfunction
endlibrary

//===========================================================================
//function InitTrig_AllGlobals takes nothing returns nothing
    //set gg_trg_AllGlobals = CreateTrigger(  )
//endfunction

Spell
library SpellLib
globals
    constant key UnitFallingKey
endglobals

private struct SpellS
    timer t
    unit caster
    unit target
    real time
    real speed
    integer action
    boolean localPlayer
    vector v
endstruct

private function Move takes nothing returns nothing
    local SpellS A = LoadInteger( H, GetHandleId( GetExpiredTimer( ) ), 0 )
    local real x
    local real y
    
    if A.action < 4 then
        set x = GetUnitX( A.target ) + A.speed * A.v.x
        set y = GetUnitY( A.target ) + A.speed * A.v.y
    
        call SetUnitX( A.target, x )
        call SetUnitY( A.target, y )
        
        set A.time = A.time - 0.01
    else
        set x = GetUnitX( A.caster ) - A.speed * A.v.x
        set y = GetUnitY( A.caster ) - A.speed * A.v.y
    
        call SetUnitX( A.caster, x )
        call SetUnitY( A.caster, y )
    endif
    
    if A.localPlayer then
        call SetCameraField( CAMERA_FIELD_ZOFFSET, GetUnitFlyHeight( A.caster ), 0.25 )
    endif
    
    if A.action == 0 then
        if A.time <= 0.10 then
            call SetUnitFlyHeight( A.caster, GetUnitFlyHeight( A.caster ) + 60.00, 0.00 )
        endif
    elseif A.action == 1 or A.action == 2 then
        if A.action == 2 then
            if A.time == 0.20 then
                call SetUnitTimeScale( A.caster, 2.00 )
                call SetUnitAnimation( A.caster, "attack slam" )
                call QueueUnitAnimation( A.caster, "stand" )
            elseif A.time == 0.10 then
                call SetUnitTimeScale( A.caster, 1.00 )
            endif
        endif
        
        if A.time == 0.10 then
            call AlphaTeleport( A.caster, 0.20 )
        endif
    elseif A.action == 3 then
        call SetUnitFlyHeight( A.target, GetUnitFlyHeight( A.target ) - 0.25, 0.00 )
        call SetUnitFlyHeight( A.caster, GetUnitFlyHeight( A.target ) + 50.00, 0.00 )
        call UnitStartFalling( A.target, 0.00 )
        
        call UnitDamageTarget( A.caster, A.target, 1.00, false, false, null, null, null )
        
        if GetRandomInt( 0, 1 ) == 0 then
            call DestroyEffect( AddSpecialEffectTarget( "Abilities\\Weapons\\VengeanceMissile\\VengeanceMissile.mdl", A.target, "overhead" ) )
        else
            call DestroyEffect( AddSpecialEffectTarget( "Abilities\\Weapons\\VengeanceMissile\\VengeanceMissile.mdl", A.caster, "weapon" ) )
        endif
    endif
    
    if A.time <= 0.00 or ( A.action == 4 and GetUnitFlyHeight( A.caster ) <= 0.11 ) then
        if A.action == 0 then
            call SetUnitTimeScale( A.caster, 2.00 )
            
            call SetUnitAnimationByIndex( A.caster, 5 )
            call QueueUnitAnimation( A.caster, "stand" )
            
            set A.time = 0.25
            set A.action = 1
        elseif A.action == 1 then
            set A.action = 2
            set A.speed = 12.00
            
            call UnitDamageTarget( A.caster, A.target, 50.00, false, false, null, null, null )
            
            call DestroyEffect( AddSpecialEffectTarget( "Abilities\\Weapons\\PhoenixMissile\\Phoenix_Missile.mdl", A.target, "chest" ) )
            
            set bj_lastCreatedUnit = CreateUnit( GetOwningPlayer( A.caster ), 'u000', GetUnitX( A.caster ), GetUnitY( A.caster ), GetUnitFacing( A.caster ) )
            call UnitAddAbility( bj_lastCreatedUnit, 'Arav' )
            call SetUnitX( bj_lastCreatedUnit, GetUnitX( A.caster ) )
            call SetUnitY( bj_lastCreatedUnit, GetUnitY( A.caster ) )
            call SetUnitFlyHeight( bj_lastCreatedUnit, GetUnitFlyHeight( A.caster ), 0.00 )
            call UnitApplyTimedLife( bj_lastCreatedUnit, 'BTLF', 2.00 )
            
            call SetUnitX( A.caster, x - 128.00 * A.v.x )
            call SetUnitY( A.caster, y - 128.00 * A.v.y )
            call SetUnitFlyHeight( A.caster, GetUnitFlyHeight( A.target ), 0.00 )
            
            set bj_lastCreatedUnit = CreateUnit( GetOwningPlayer( A.caster ), 'u000', GetUnitX( A.caster ), GetUnitY( A.caster ), GetUnitFacing( A.caster ) )
            call UnitAddAbility( bj_lastCreatedUnit, 'Arav' )
            call SetUnitX( bj_lastCreatedUnit, GetUnitX( A.caster ) )
            call SetUnitY( bj_lastCreatedUnit, GetUnitY( A.caster ) )
            call SetUnitFlyHeight( bj_lastCreatedUnit, GetUnitFlyHeight( A.caster ), 0.00 )
            call UnitApplyTimedLife( bj_lastCreatedUnit, 'BTLF', 2.00 )
            
            call UnitStartFalling( A.caster, 0.00 )
            set A.time = 0.30
        elseif A.action == 2 then
            set bj_lastCreatedUnit = CreateUnit( GetOwningPlayer( A.caster ), 'u000', GetUnitX( A.caster ), GetUnitY( A.caster ), GetUnitFacing( A.caster ) )
            call UnitAddAbility( bj_lastCreatedUnit, 'Arav' )
            call SetUnitX( bj_lastCreatedUnit, GetUnitX( A.caster ) )
            call SetUnitY( bj_lastCreatedUnit, GetUnitY( A.caster ) )
            call SetUnitFlyHeight( bj_lastCreatedUnit, GetUnitFlyHeight( A.caster ), 0.00 )
            call UnitApplyTimedLife( bj_lastCreatedUnit, 'BTLF', 2.00 )
            
            call SetUnitX( A.caster, x - 96.00 * A.v.x )
            call SetUnitY( A.caster, y - 96.00 * A.v.y )
            call SetUnitFlyHeight( A.caster, GetUnitFlyHeight( A.target ), 0.00 )
            
            set bj_lastCreatedUnit = CreateUnit( GetOwningPlayer( A.caster ), 'u000', GetUnitX( A.caster ), GetUnitY( A.caster ), GetUnitFacing( A.caster ) )
            call UnitAddAbility( bj_lastCreatedUnit, 'Arav' )
            call SetUnitX( bj_lastCreatedUnit, GetUnitX( A.caster ) )
            call SetUnitY( bj_lastCreatedUnit, GetUnitY( A.caster ) )
            call SetUnitFlyHeight( bj_lastCreatedUnit, GetUnitFlyHeight( A.caster ), 0.00 )
            call UnitApplyTimedLife( bj_lastCreatedUnit, 'BTLF', 2.00 )
            
            set A.speed = 0.00
            
            call UnitStartFalling( A.caster, 0.00 )
            call UnitStartFalling( A.target, 0.00 )
            
            set A.time = 0.50
            set A.action = 3
        elseif A.action == 3 then
            set A.action = 4
            set A.time = 0.01
            set A.speed = 2.50
            
            call UnitDamageTarget( A.caster, A.target, 10.00, false, false, null, null, null )
            
            call DestroyEffect( AddSpecialEffectTarget( "Abilities\\Weapons\\PhoenixMissile\\Phoenix_Missile.mdl", A.target, "overhead" ) )
            
            call UnitStartFalling( A.caster, 10.00 )
            call UnitStartFalling( A.target, -20.00 )
        elseif A.action == 4 then
            call PauseTimer( A.t )
            call FlushChildHashtable( H, GetHandleId( A.t ) )
            call DestroyTimer( A.t )
            
            call PauseUnit( A.caster, false )
            call PauseUnit( A.target, false )
            
            set A.t = null
            set A.caster = null
            set A.target = null
            call A.v.destroy( )
            call A.destroy( )
        endif
    endif
endfunction

private function Slam takes nothing returns nothing
    local SpellS A = LoadInteger( H, GetHandleId( GetExpiredTimer( ) ), 0 )
    local real x = GetUnitX( A.target )
    local real y = GetUnitY( A.target )
    
    if UnitAddAbility( A.target, 'Arav' ) then
        call UnitRemoveAbility( A.target, 'Arav' )
    endif
    
    if UnitAddAbility( A.caster, 'Arav' ) then
        call UnitRemoveAbility( A.caster, 'Arav' )
    endif
    
    call UnitDamageTarget( A.caster, A.target, 40.00, false, false, null, null, null )
    
    call DestroyEffect( AddSpecialEffect( "Abilities\\Spells\\Other\\Volcano\\VolcanoDeath.mdl", GetUnitX( A.caster ), GetUnitY( A.caster ) ) )
    
    set bj_lastCreatedUnit = CreateUnit( GetOwningPlayer( A.caster ), 'u001', x, y, GetUnitFacing( A.caster ) )
    call UnitAddAbility( bj_lastCreatedUnit, 'Arav' )
    call SetUnitX( bj_lastCreatedUnit, x )
    call SetUnitY( bj_lastCreatedUnit, y )
    call SetUnitFlyHeight( bj_lastCreatedUnit, GetUnitFlyHeight( A.caster ), 0.00 )
    call UnitApplyTimedLife( bj_lastCreatedUnit, 'BTLF', 2.00 )
    call SetUnitTimeScale( bj_lastCreatedUnit, 1.50 )
    
    call UnitStartFalling( A.target, 17.50 )
    
    call SetUnitTimeScale( A.caster, 1.00 )
    call SetUnitAnimation( A.caster, "attack slam" )
    call QueueUnitAnimation( A.caster, "stand" )
    
    set A.action = 0
    set A.speed = 3.00
    set A.time = 0.30
    
    call TimerStart( A.t, 0.01, true, function Move )
endfunction

private function SetAnim takes nothing returns nothing
    local SpellS A = LoadInteger( H, GetHandleId( GetExpiredTimer( ) ), 0 )
    
    call PauseUnit( A.caster, true )
    call SetUnitTimeScale( A.caster, 2.00 )
    call SetUnitAnimation( A.caster, "spell slam" )
    call QueueUnitAnimation( A.caster, "stand" )
    
    call TimerStart( A.t, 0.30, false, function Slam )
endfunction

private function Spell_Actions takes nothing returns nothing
    local SpellS A = SpellS.create( )
    
    set A.t = CreateTimer( )
    set A.caster = GetTriggerUnit( )
    set A.target = GetSpellTargetUnit( )
    set A.v = vector.create( GetUnitX( A.target ) - GetUnitX( A.caster ), GetUnitY( A.target ) - GetUnitY( A.caster ), 0.00 )
    call A.v.normalize( )
    
    set A.localPlayer = GetLocalPlayer( ) == GetOwningPlayer( A.caster )
    
    call PauseUnit( A.target, true )
    
    call SaveInteger( H, GetHandleId( A.t ), 0, A )
    call TimerStart( A.t, 0.00, false, function SetAnim )
endfunction

//===========================================================================
private function 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 Spell_Conditions ) )
    call TriggerAddAction( gg_trg_Spell, function Spell_Actions )
endfunction
endlibrary

Загруженные файлы
15

Заказ

Название: Ярость Синдрагосы
Метод: Jass
Версия Warcraft III: 1.26a
Техническое описание: как на видео только что бы начинала лететь за спиной катера
Призывает Синдрагосу, которая дышит холодом на противников перед вами на расстоянии до 40 м, нанося 400 урона и (снижая скорость передвижения на 50%) на 10 сек.
Загруженные файлы
Ответы (2)
28
Выполнение заказа

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

Ярость Синдрагосы

инструкция по импорту
скопировать папку Initialization и вставить в свою карту
перекопировать редактор объектов и вставить в свою карту
в триггере Spell на строках:
272 - указать равкод даммика который кастует замедление
261 - указать абилку призыва дракона
235-236 - смещение проявления дракона за спину кастера
238 - равкод дракона
244 - стартовая высота дракона (400)
245 - высота дракона во время полёта (300 - какую высоту установить, 100 - с какой скоростью установить эту высоту, т.е. с учётом стартовой высоты, дракон достигнет этой высоты за одну секунду)
246 - раскрас дракона (последний аргумент должен быть на 0)
251 - максимальное расстояние всего полёта с учётом проявления и исчезновения
140 - скорость полёта дракона
154 - при какой оставшейся дистанции начать выпускать ледяные волны
156 - индекс анимки полёта дракона
160 - при какой оставшейся дистанции начать исчезновение дракона
161 - формула исчезновения дракона ( 255.00 / ( указать параметр на 160 строке / speed ) )
162 - раскрас дракона, последний параметр не нужно трогать
164 - формула взлёта дракона ( скорость взлёта * ( 1.00 - d / указать параметр на 160 строке ) )
167 - другой индекс анимки полёта дракона (взмах крыльями)
170 - указать параметр на 160 строке + параметр на 173 строке
173 - периодичность спавна ледяных волн в зависимости от пройденной дистанции (т.е. каждые 35 единиц)
177-178 - смещение начала волны поближе к морде дракона
180 - равкод ледяной волны
186 - стартовая высота волны (на 75 единиц ниже высоты дракона)
192 - указать параметр на 170 строке
204 - дистанция до которой дракон должен проявиться
205 - формула проявления дракона ( 255.00 / ( ( максимальная дистанция - параметр на 204 строке ) / speed ) )
206 - то же самое, что и 162
32-33 - скорость полёта волны
37 - скорость полёта волны по Z
43 - радиус урона (300 + макс коллизия)
53 - радиус урона
57 - приказ замедления
58 - урон
64-110 - визуальные кPаКаЗяБрЫ

Код

Spell
function GetCorX takes real x returns real
if x > udg_MapRectXY[0] then
return udg_MapRectXY[0]
elseif x < udg_MapRectXY[1] then
return udg_MapRectXY[1]
endif

return x
endfunction
function GetCorY takes real y returns real
if y > udg_MapRectXY[2] then
return udg_MapRectXY[2]
elseif y < udg_MapRectXY[3] then
return udg_MapRectXY[3]
endif

return y
endfunction
function MoveEffect takes nothing returns nothing
local timer t = GetExpiredTimer( )
local integer i = GetHandleId( t )
local unit u
local unit caster
local unit dummy = LoadUnitHandle( udg_H, i, 0 )
local real x = GetUnitX( dummy )
local real y = GetUnitY( dummy )
local real a = GetUnitFacing( dummy ) * bj_DEGTORAD
local group g

set x = GetCorX( x + 10.00 * Cos( a ) )
set y = GetCorY( y + 10.00 * Sin( a ) )

call SetUnitX( dummy, x )
call SetUnitY( dummy, y )
call SetUnitFlyHeight( dummy, GetUnitFlyHeight( dummy ) - 5.00, 0.00 )

if GetUnitFlyHeight( dummy ) <= 0.11 then
call SetUnitAnimation( dummy, "death" )
call UnitApplyTimedLife( dummy, 'BTLF', 1.00 )

call GroupEnumUnitsInRange( udg_TempGroup, x, y, 500.00, null )
set caster = LoadUnitHandle( udg_H, i, 1 )
set g = LoadGroupHandle( udg_H, i, 2 )
set bj_groupEnumOwningPlayer = GetOwningPlayer( caster )

loop
set u = FirstOfGroup( udg_TempGroup )
exitwhen u == null
call GroupRemoveUnit( udg_TempGroup, u )

if IsUnitInRangeXY( u, x, y, 300.00 ) then
if not IsUnitInGroup( u, g ) then
if IsUnitEnemy( u, bj_groupEnumOwningPlayer ) and not IsUnitType( u, UNIT_TYPE_DEAD ) then
call GroupAddUnit( g, u )
call IssueTargetOrder( udg_TempUnit, "frostnova", u )
call UnitDamageTarget( caster, u, 100.00, false, false, null, null, null )
endif
endif
endif
endloop

set dummy = CreateUnit( Player( PLAYER_NEUTRAL_PASSIVE ), 'u003', x, y, GetRandomReal( 0.00, 360.00 ) )
call SetUnitAnimation( dummy, "death" )
call UnitApplyTimedLife( dummy, 'BTLF', 2.00 )
call UnitAddAbility( dummy, 'Arav' )
call SetUnitX( dummy, x + GetRandomReal( -200.00, 200.00 ) )
call SetUnitY( dummy, y + GetRandomReal( -200.00, 200.00 ) )
call SetUnitFlyHeight( dummy, GetRandomReal( 32.00, 150.00 ), 0.00 )

set dummy = CreateUnit( Player( PLAYER_NEUTRAL_PASSIVE ), 'u004', x, y, GetRandomReal( 0.00, 360.00 ) )
call SetUnitAnimation( dummy, "death" )
call UnitApplyTimedLife( dummy, 'BTLF', 2.00 )
call UnitAddAbility( dummy, 'Arav' )
call SetUnitX( dummy, x + GetRandomReal( -200.00, 200.00 ) )
call SetUnitY( dummy, y + GetRandomReal( -200.00, 200.00 ) )
call SetUnitFlyHeight( dummy, GetRandomReal( 32.00, 150.00 ), 0.00 )

set dummy = CreateUnit( Player( PLAYER_NEUTRAL_PASSIVE ), 'u005', x, y, GetRandomReal( 0.00, 360.00 ) )
call SetUnitAnimation( dummy, "death" )
call UnitApplyTimedLife( dummy, 'BTLF', 2.00 )
call UnitAddAbility( dummy, 'Arav' )
call SetUnitX( dummy, x + GetRandomReal( -200.00, 200.00 ) )
call SetUnitY( dummy, y + GetRandomReal( -200.00, 200.00 ) )
call SetUnitFlyHeight( dummy, GetRandomReal( 32.00, 150.00 ), 0.00 )

set dummy = CreateUnit( Player( PLAYER_NEUTRAL_PASSIVE ), 'u006', x, y, GetRandomReal( 0.00, 360.00 ) )
call SetUnitAnimation( dummy, "death" )
call UnitApplyTimedLife( dummy, 'BTLF', 2.00 )
call UnitAddAbility( dummy, 'Arav' )
call SetUnitX( dummy, x + GetRandomReal( -200.00, 200.00 ) )
call SetUnitY( dummy, y + GetRandomReal( -200.00, 200.00 ) )
call SetUnitFlyHeight( dummy, GetRandomReal( 32.00, 150.00 ), 0.00 )

set dummy = CreateUnit( Player( PLAYER_NEUTRAL_PASSIVE ), 'u007', x, y, GetRandomReal( 0.00, 360.00 ) )
call SetUnitAnimation( dummy, "death" )
call UnitApplyTimedLife( dummy, 'BTLF', 2.00 )
call UnitAddAbility( dummy, 'Arav' )
call SetUnitX( dummy, x + GetRandomReal( -200.00, 200.00 ) )
call SetUnitY( dummy, y + GetRandomReal( -200.00, 200.00 ) )
call SetUnitFlyHeight( dummy, GetRandomReal( 32.00, 150.00 ), 0.00 )

set dummy = CreateUnit( Player( PLAYER_NEUTRAL_PASSIVE ), 'u008', x, y, GetRandomReal( 0.00, 360.00 ) )
call SetUnitAnimation( dummy, "death" )
call UnitApplyTimedLife( dummy, 'BTLF', 2.00 )
call UnitAddAbility( dummy, 'Arav' )
call SetUnitX( dummy, x + GetRandomReal( -200.00, 200.00 ) )
call SetUnitY( dummy, y + GetRandomReal( -200.00, 200.00 ) )
call SetUnitFlyHeight( dummy, GetRandomReal( 32.00, 150.00 ), 0.00 )

if LoadInteger( udg_H, i, 3 ) == 1 then
call DestroyGroup( g )
endif

call PauseTimer( t )
call FlushChildHashtable( udg_H, i )
call DestroyTimer( t )

set g = null
set caster = null
endif

set t = null
set dummy = null
endfunction
function Move takes nothing returns nothing
local timer t = GetExpiredTimer( )
local timer n
local integer i = GetHandleId( t )
local integer j
local unit caster = LoadUnitHandle( udg_H, i, 0 )
local unit dummy = LoadUnitHandle( udg_H, i, 1 )
local real x = GetUnitX( dummy )
local real y = GetUnitY( dummy )
local real a = GetUnitFacing( dummy ) * bj_DEGTORAD
local real d = LoadReal( udg_H, i, 3 )
local real r
local real speed = 5.00

if speed > d then
set speed = d
endif

set x = GetCorX( x + speed * Cos( a ) )
set y = GetCorY( y + speed * Sin( a ) )

call SetUnitX( dummy, x )
call SetUnitY( dummy, y )

set d = d - speed

if d <= 2300 then
if LoadInteger( udg_H, i, 4 ) == 0 then
call SetUnitAnimationByIndex( dummy, 4 )
call SaveInteger( udg_H, i, 4, 1 )
endif

if d <= 400.00 then
set r = LoadReal( udg_H, i, 5 ) - 255.00 / ( 400.00 / speed )
call SetUnitVertexColor( dummy, 175, 175, 175, R2I( r ) )
call SaveReal( udg_H, i, 5, r )
call SetUnitFlyHeight( dummy, GetUnitFlyHeight( dummy ) + 5.00 * ( 1.00 - d / 400.00 ), 0.00 )

if LoadInteger( udg_H, i, 4 ) == 1 then
call SetUnitAnimationByIndex( dummy, 3 )
call SaveInteger( udg_H, i, 4, 2 )
endif
elseif d > 435.00 then
set r = LoadReal( udg_H, i, 6 ) + speed

if r >= 35.00 then
set r = 0.00
set n = CreateTimer( )
set j = GetHandleId( n )
set x = GetCorX( x + 275.00 * Cos( a ) )
set y = GetCorY( y + 275.00 * Sin( a ) )

set bj_lastCreatedUnit = CreateUnit( GetOwningPlayer( caster ), 'u002', x, y, a * bj_RADTODEG )
call SetUnitAnimation( bj_lastCreatedUnit, "birth" )
call QueueUnitAnimation( bj_lastCreatedUnit, "stand" )
call UnitAddAbility( bj_lastCreatedUnit, 'Arav' )
call SetUnitX( bj_lastCreatedUnit, x )
call SetUnitY( bj_lastCreatedUnit, y )
call SetUnitFlyHeight( bj_lastCreatedUnit, GetUnitFlyHeight( dummy ) - 75.00, 0.00 )

call SaveUnitHandle( udg_H, j, 0, bj_lastCreatedUnit )
call SaveUnitHandle( udg_H, j, 1, caster )
call SaveGroupHandle( udg_H, j, 2, LoadGroupHandle( udg_H, i, 2 ) )

if d - speed <= 435.00 then
call SaveInteger( udg_H, j, 3, 1 )
endif

call TimerStart( n, 0.01, true, function MoveEffect )
set n = null
endif

call SaveReal( udg_H, i, 6, r )
endif
endif

if d > 2000.00 then
set r = LoadReal( udg_H, i, 5 ) + 255.00 / ( ( 2500.00 - 2000.00 ) / speed )
call SetUnitVertexColor( dummy, 175, 175, 175, R2I( r ) )
call SaveReal( udg_H, i, 5, r )
endif

if d <= 0.00 then
call PauseTimer( t )
call FlushChildHashtable( udg_H, i )
call DestroyTimer( t )

call SetUnitVertexColor( dummy, 0, 0, 0, 0 )
call KillUnit( dummy )
else
call SaveReal( udg_H, i, 3, d )
endif

set t = null
set dummy = null
set caster = null
endfunction
function Trig_Spell_Actions takes nothing returns nothing
local timer t = CreateTimer( )
local integer i = GetHandleId( t )
local unit caster = GetTriggerUnit( )
local real x = GetUnitX( caster )
local real y = GetUnitY( caster )
local real a = Atan2( GetSpellTargetY( ) - y, GetSpellTargetX( ) - x )

set x = GetCorX( x - 800.00 * Cos( a ) )
set y = GetCorY( y - 800.00 * Sin( a ) )

set bj_lastCreatedUnit = CreateUnit( GetOwningPlayer( caster ), 'u001', x, y, a * bj_RADTODEG )
call SetUnitAnimation( bj_lastCreatedUnit, "birth" )
call QueueUnitAnimation( bj_lastCreatedUnit, "stand" )
call UnitAddAbility( bj_lastCreatedUnit, 'Arav' )
call SetUnitX( bj_lastCreatedUnit, x )
call SetUnitY( bj_lastCreatedUnit, y )
call SetUnitFlyHeight( bj_lastCreatedUnit, 400.00, 0.00 )
call SetUnitFlyHeight( bj_lastCreatedUnit, 300.00, 100.00 )
call SetUnitVertexColor( bj_lastCreatedUnit, 175, 175, 175, 0 )

call SaveUnitHandle( udg_H, i, 0, caster )
call SaveUnitHandle( udg_H, i, 1, bj_lastCreatedUnit )
call SaveGroupHandle( udg_H, i, 2, CreateGroup( ) )
call SaveReal( udg_H, i, 3, 2500.00 )

call TimerStart( t, 0.01, true, function Move )

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
local rect r = GetWorldBounds( )

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 )

set udg_TempUnit = CreateUnit( Player( PLAYER_NEUTRAL_PASSIVE ), 'u009', 0.00, 0.00, 0.00 )

set udg_MapRectXY[0] = GetRectMaxX( r )
set udg_MapRectXY[1] = GetRectMinX( r )
set udg_MapRectXY[2] = GetRectMaxY( r )
set udg_MapRectXY[3] = GetRectMinY( r )

call RemoveRect( r )

set r = null
endfunction
""
Загруженные файлы
28
Desgul, бле, код в кавычки забыл обернуть и отредактировать уже нельзя, офигенно 👍
4
Заказ на работу
ДЫМОВАЯ ГРАНАТА
Герой бросает дымовую гранату, которая взрывается в указанной точке и окутывает область дымом на несколько сек (размер области и время действия зависит от лвл способности)!
В выбранной области у всех врагов: понижается броня, они получают % шанс на промах от каждой атаки, а также они не могут кастовать способности (безмолвие) всё это пока они стоят в этой области дыма!
А все союзники и юниты игрока в этой области получают: + к броне, а сам герой, который скастовал, получает невидимость стоя в это облаке (при атаке невидимость не спадает, или спадает, но на 1 сек)
P.S. Желательно что бы на рефоржете работало тоже, для всех версий
Загруженные файлы
3
Название: Несгибаемая ярость (F)
Метод: Jass
Версия Warcraft III: Главное что бы на рефе работала :)
Описание: Пассивно повышает силу героя на 3/6/9/12 ед. Каждая обычная атака героя восстанавливает ему 2/3/4/5 ед. маны за удар.
Когда здоровье героя падает до нуля, он не умирает а получает полную невосприимчивость к любому виду урона в течении следующих 3 сек., и получает бонусный вампиризм в размере 25%/50%/75%/100% от нанесенного урона (как от атак так и от способностей героя).
Перезарядка способности: 65/55/45/35 сек.
  1. Важно! что бы работала с сделанным спеллом "Молот Древних" (Rolling Slam). Что бы во время анимации атак он тоже становился невосприимчивым у урону а не погибал.
  2. Когда навык находиться на перезарядке после возможной смерти, бонус к силе не сбивается и атаки все так же накапливают ману за удары.
Название: Угрожающий клич (D)
"Не героическая способность" Будет с самого начала уже у варвара.
Метод: Jass
Версия Warcraft III: Главное что бы на рефе работала :)
Описание: Герой издает боевой крик (волна от героя во все стороны) радиусом 1000 АоЕ, который вгоняет противников с 1 по 24 уровень в состояние "Страха", от чего они теряют возможность атаковать, замедляются в скорости передвижения на 25% и бегут прочь в течении 6 сек.
Перезарядка: 50 сек.
"Зов битвы" Предмет усиления способности:
Снижает перезарядку способности "Угрожающий клич" до 35 сек. и когда герой использует её, он повышает свою силу на 5 ед. + 1 ед. за каждый уровень персонажа на 6 сек. Противники погибшие под действием эффекта способности взрываются, нанося по 25 ед. + 300% от силы магического урона всем врагам в радиусе 250 АоЕ.
4
Видимо это тема всё уже... А может и нет.
Но всё же: Спелл. Нужно что бы при атаке с 20% шанс герой (дальнего боя) выпускал 10 ракет (каждая из которых наносит 50 ед урона). Туда, куда он атакует (ну или приблизительно). И чтобы ракеты задевали все цели, на которые они попадут, кроме воздушных (т.е. если по пути стоит юнит и одна из ракет его заденет не долетев до точки, то взорвётся и нанесёт ему урон).
И что бы можно было настраивать, то 10 ракет вылетает, то 1 и тд.
Этот комментарий удален
15
Заказ на работу
Название: Chidori Eiso
Метод: Jass
Версия Warcraft III: 1.26
Техническое описание: При применении способности появляется лазер, если сталкивается с целью - останавливается, если цель покинула область соприкосновения так сказать - продолжает лететь, пока длина лазера на достигнет 1000. Длительность 4 секунды, полную длину должен набирать за 0.5 секунды, т.е. остальные 3.5 сек просто на месте висит, никуда не летит, дамажит если кто-то его касается, урон и прочая инфа - без разницы, всё равно потом менять.
Должен быть сделан не через эффект молнии, а через даммиков, тут кнш проблемка, нету даммика с анимкой расстяжение, по этому прикреплю обычный лазер.
Загруженные файлы
Ответы (7)
12
LastUchiha, автор больше не выполняет заказы, он ничего никому в последнее время не отвечает. Так что с лазером тебе придётся в другое место идти)
28
FIRERANGER, лол, у меня уведомления не приходили либо затерялись в куче остальных, ну и что грешить, я в лоле зависал с новым компом. Заскучал за этой игрой. Завтра начну потихоньку выполнять заказы
28
LastUchiha, список создавать и по индексу проводить манипуляции. Сегодня, возможно, уже доделаю
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.