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

Правила темы

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

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

Необходимо, используя форму составить сообщение в данной теме, где указать:
  • Желаемое название заказа
  • Желаемый метод исполнения (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. Тяжело читать? Легко делать!
  • Если ну никак не выходит сделать то что требуется, заходим в Академию и используем ее по основному назначению - задаем вопросы.

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Этот комментарий удален
12
Название : Laughing Skull
Метод : Jass
MUI : Да
Цель : Боевая единица
Количество уровней : 3
Дальность применения : 900
Описание :
Выпускает череп, который отскакивает по 4-6 целям и оглушает их на 2 секунды (1 секунда на героя)
Поиск цели для отскока - 900
7

Заказ

Название: Призрачная стена
Метод: GUI/Jass (желательно без утечек)
MUI: Обязательно (будут юзать разные игроки, возможно одновременно)
Версия игры 1.26
Цель: Область (в указанной области, либо просто перед героем на расстоянии 250)
Количество уровней: 1
Описание: Герой ставит в указанной области стенку из эффекта. Все проходящие через стену наземные вражеские юниты, каждый раз как проходят через нее получают по 150ед. урона.
Технические характеристики: Перезарядка 120сек. Длина стены например 750-1000ед. Ширина 100ед. (длина ширина это область получаемого урона). Тоесть прошел через область, получил урон, прошел еще раз, получил снова. Модель для стены приложу снизу, желательно использовать ее, но не обязательно. Хотелось бы чтоб небыло утечек в способности.
P.S. Если кто играл в доту, знает похожую способность у героя DARKSEER. Там он ставит стену перед собой, И все кто проходят получают илюзию своего героя. Мне нужен только урон.
Загруженные файлы
17

Заказ

Название: Магические сети
Метод: GUI
MUI: Не обязательно
Цель: Другой юнит, враг
Количество уровней: 3
Описание: Герой призывает магические сети которые обездвиживают врагов и иссушают их нанося 15/20/25/сек. в течении 15/20/25 сек.
(Если проще, то обычное огненное лассо ястреба, но чтобы работало на 4-5 юнитов, вместо 1 юнита)
28

Заказ 1

Название: Cyclop Slam
Метод: GUI/Jass
MUI: Да
Цель: Нет
Количество уровней: 1
Описание: Циклоп совершает быстрый прыжок на месте (1.5 секунд по времени) (становясь неуязвимым на время прыжка) , при приземлении герой наносит всем врагам вокруг себя урон и отталкивает всех врагов на 300-600 дистанции при этом замедляя цели на 30% после отталкивания.
Если метод на Jass , хотелось бы возможность настроить переменные на GUI при нужном мне действии , в карте есть некоторые юниты на которых не должна работать данная способность

Заказ 2

Название: Cyclop Grab and Throw
Метод: GUI/Jass
MUI: Да
Цель: Нет
Количество уровней: 1
Описание: Циклоп хватает цель и бросает в случайную точку вокруг себя (от 600 до 1200 дальности) нанося цели урон при столкновении в размере 80% от текущего здоровья и замедляет на 25%. (Если перед целью есть клиф нужно его ударить об клиф и замедлить на 50% при ударе)
Если метод на Jass , хотелось бы возможность настроить переменные на GUI при нужном мне действии , в карте есть некоторые юниты на которых не должна работать данная способность

Заказ 3

Название: Cyclop Roar
Метод: GUI/Jass
MUI: Да
Цель: Нет
Количество уровней: 1
Описание: Циклоп заставляет случайные N целей вокруг себя бежать в страхе в течении N секунд (игрок не может контролить своего героя во время страха)
Если метод на Jass , хотелось бы возможность настроить переменные на GUI при нужном мне действии , в карте есть некоторые юниты на которых не должна работать данная способность
28

Заказ принят

Заказчик: Стас Орлов
Способность: Laughing Skull
Спелл будет завершен к: без понятия, мб сегодня
28

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

Заказчик: Стас Орлов
Способность: Laughing Skull
Выполнено: Да

Инструкция по импорту
Скопировать триггер Spell в свою карту, иметь инициализированную хэш-таблицу в редакторе переменных под названием H, если уже есть переменная с таким названием - то делай хэш-таблицу с другим названием, благодаря редактору джнгп ты можешь автозаменой пройтись по коду и заменить udg_H на udg_названиеПеременной, либо скопировать код в какой-нибудь текстовик и там заменить, закинув после обратно в редактор
Желательно чтобы ты запрелоадил юнитов и скиллы, первый каст подлагивает на 0.01 сек на моём древнем компе. Так же я не проверял наличие утечек
Настройки все в коде, делал исключительно на джассе, юзал некоторые вариковские переменные, так что имей ввиду, спелл муи
Если что-то не так или работает не так, как ты хотел - пиши
Сам спелл хотелось бы на вджассе конечно сделать
Ах да, тип урона и атаки там статичны и настраиваются непосредственно в нанесении урона, но раз уж ты попросил искл. на джассе это сделать, то я думаю ты шаришь за него и сможешь настроить как надо
код
function DestroyEffectEx takes nothing returns nothing
    local timer t = GetExpiredTimer( )
    call DestroyEffect( LoadEffectHandle( udg_H, GetHandleId( t ), 0 ) )
    call FlushChildHashtable( udg_H, GetHandleId( t ) )
    call DestroyTimer( t )
    set t = null
endfunction

function rCond takes nothing returns boolean
    local unit u = GetFilterUnit( )
    
    if IsUnitEnemy( u, bj_groupEnumOwningPlayer ) and not IsUnitType( u, UNIT_TYPE_DEAD ) and u != bj_lastReplacedUnit then
        set bj_groupRandomConsidered = bj_groupRandomConsidered + 1
        if GetRandomInt( 1, bj_groupRandomConsidered ) == 1 then
            set bj_groupRandomCurrentPick = u
        endif
    endif
    
    set u = null
    return false
endfunction

function rMove takes nothing returns nothing
    local timer t
    local integer i   = GetHandleId( GetExpiredTimer( ) )
    local unit caster
    local unit dummy  = LoadUnitHandle( udg_H, i, 1 )
    local unit target = LoadUnitHandle( udg_H, i, 2 )
    local real x  = GetUnitX( dummy )
    local real y  = GetUnitY( dummy )
    local real x1 = GetUnitX( target )
    local real y1 = GetUnitY( target )
    local real a  = Atan2( y1 - y, x1 - x )
    local real s  = LoadReal( udg_H, i, 7 )
    local real sc
    local real fly
    local real d
    local boolean b
    local boolean b1 = false
    local integer c
    local group g
    local boolexpr bb
    
    set d = SquareRoot( ( x - x1 ) * ( x - x1 ) + ( y - y1 ) * ( y - y1 ) )
    
    set x = x + s * Cos( a )
    set y = y + s * Sin( a )
    
    if SquareRoot( ( x - x1 ) * ( x - x1 ) + ( y - y1 ) * ( y - y1 ) ) > d then
        set b1 = true
        set x = x1
        set y = y1
    endif
    
    call SetUnitX( dummy, x )
    call SetUnitY( dummy, y )
    call SetUnitFacing( dummy, a * bj_RADTODEG )
    
    if b1 or SquareRoot( ( x - x1 ) * ( x - x1 ) + ( y - y1 ) * ( y - y1 ) ) <= LoadReal( udg_H, i, 8 ) or GetUnitTypeId( target ) == 0 then
        set c = LoadInteger( udg_H, i, 9 )
        set b = false
        set caster = LoadUnitHandle( udg_H, i, 0 )
        set bj_groupEnumOwningPlayer  = GetOwningPlayer( caster )
        
        if GetUnitTypeId( target ) != 0 then
            set bj_lastCreatedUnit = CreateUnit( bj_groupEnumOwningPlayer, LoadInteger( udg_H, i, 11 ), x, y, a * bj_RADTODEG )
            call UnitAddAbility( bj_lastCreatedUnit, LoadInteger( udg_H, i, 12 ) )
            call IssueTargetOrder( bj_lastCreatedUnit, "thunderbolt", target )
            call UnitApplyTimedLife( bj_lastCreatedUnit, 'BTLF', 0.50 )
            
            call UnitDamageTarget( caster, target, LoadReal( udg_H, i, 3 ), false, false, null, null, null )
            
            set t = CreateTimer( )
            call SaveEffectHandle( udg_H, GetHandleId( t ), 0, AddSpecialEffectTarget( LoadStr( udg_H, i, 13 ), target, LoadStr( udg_H, i, 14 ) ) )
            call TimerStart( t, LoadReal( udg_H, i, 6 ), false, function DestroyEffectEx )
            set t = null
        endif
        
        if c <= 0 then
            set b = true
        else
            set g  = CreateGroup( )
            set bb = Condition( function rCond )
            
            set bj_groupRandomConsidered  = 0
            set bj_groupRandomCurrentPick = null
            set bj_lastReplacedUnit       = target
            
            call GroupEnumUnitsInRange( g, x, y, LoadReal( udg_H, i, 4 ), bb )
            call DestroyGroup( g )
            set g = null
            
            if bj_groupRandomCurrentPick == null then
                set b = true
            endif
        endif
        
        set fly = GetUnitFlyHeight( dummy )
        call KillUnit( dummy )
        
        if b then
            call PauseTimer( GetExpiredTimer( ) )
            call DestroyTimer( GetExpiredTimer( ) )
            call FlushChildHashtable( udg_H, i )
        else
            set dummy = CreateUnit( bj_groupEnumOwningPlayer, LoadInteger( udg_H, i, 10 ), x, y, Atan2( GetUnitY( bj_groupRandomCurrentPick ) - y, GetUnitX( bj_groupRandomCurrentPick ) - x ) * bj_RADTODEG )
            call UnitAddAbility( dummy, 'Arav' )
            call SetUnitFlyHeight( dummy, fly, 0.00 )
            set sc = LoadReal( udg_H, i, 5 )
            call SetUnitScale( dummy, sc, sc, sc )
            
            call SaveUnitHandle( udg_H, i, 1, dummy )
            call SaveUnitHandle( udg_H, i, 2, bj_groupRandomCurrentPick )
            call SaveInteger( udg_H, i, 9, c - 1 )
        endif
        
        set caster = null
    endif

    set dummy  = null
    set target = null
endfunction

function rSpell_Actions takes nothing returns nothing
    local timer t     = CreateTimer( )
    local unit caster = GetTriggerUnit( )
    local unit target = GetSpellTargetUnit( )
    local integer id  = GetHandleId( t )
    local integer lvl = GetUnitAbilityLevel( caster, GetSpellAbilityId( ) )
    local integer count
    local integer dummy
    local integer dummyId
    local integer dummySpellId
    local real distance
    local real dmg
    local real radius
    local real scale
    local real scaleff
    local real effTm
    local real speed
    local real fly
    local string eff
    local string effT
    
    set dummyId = 'u003' // равкод юнита для стана
    if     lvl == 1 then
        set distance = 50.00   // дистанция попадания
        set speed    = 5.00    // скорость
        set dmg      = 50.00   // урон
        set count    = 4       // кол-во отскоков
        set radius   = 500.00  // радиус поиска целей
        set scale    = 1.00    // размер снаряда
        set dummy    = 'u001'  // равкод снаряда
        set eff      = "Abilities\\Spells\\NightElf\\shadowstrike\\ShadowStrikeMissile.mdl" // эффект при попадании снаряда
        set effT     = "chest" // точка крепления эффекта при попадании
        set effTm    = 0.00    // время удаления эффекта
        set fly      = 50.00   // высота снаряда
        set dummySpellId = 'A001' // равкод абилки для стана
    elseif lvl == 2 then
        set distance = 60.00
        set speed    = 6.00
        set dmg      = 75.00
        set count    = 5
        set radius   = 700.00
        set scale    = 1.50
        set dummy    = 'u002'
        set eff      = "Abilities\\Weapons\\SkeletalMageMissile\\SkeletalMageMissile.mdl"
        set effT     = "chest"
        set effTm    = 0.00
        set fly      = 60.00
        set dummySpellId = 'A002'
    else
        set distance = 50.00
        set speed    = 7.00
        set dmg      = 100.00
        set count    = 6
        set radius   = 900.00
        set scale    = 1.75
        set dummy    = 'u000'
        set eff      = "Abilities\\Spells\\Undead\\DeathCoil\\DeathCoilSpecialArt.mdl"
        set effT     = "origin"
        set effTm    = 0.00
        set fly      = 40.00
        set dummySpellId = 'A003'
    endif
    
    set bj_lastCreatedUnit = CreateUnit( GetOwningPlayer( caster ), dummy, GetUnitX( caster), GetUnitY( caster ), Atan2( GetUnitY( target ) - GetUnitY( caster ), GetUnitX( target ) - GetUnitX( caster ) ) * bj_RADTODEG )
    call SetUnitScale( bj_lastCreatedUnit, scale, scale, scale )
    call UnitAddAbility( bj_lastCreatedUnit, 'Arav' )
    call SetUnitFlyHeight( bj_lastCreatedUnit, fly, 0.00 )
    
    call SaveUnitHandle( udg_H, id, 0, caster )
    call SaveUnitHandle( udg_H, id, 1, bj_lastCreatedUnit )
    call SaveUnitHandle( udg_H, id, 2, target )
    call SaveReal( udg_H, id, 3, dmg )
    call SaveReal( udg_H, id, 4, radius )
    call SaveReal( udg_H, id, 5, scale )
    call SaveReal( udg_H, id, 6, effTm )
    call SaveReal( udg_H, id, 7, speed )
    call SaveReal( udg_H, id, 8, distance )
    call SaveInteger( udg_H, id, 9, count )
    call SaveInteger( udg_H, id, 10, dummy )
    call SaveInteger( udg_H, id, 11, dummyId )
    call SaveInteger( udg_H, id, 12, dummySpellId )
    call SaveStr( udg_H, id, 13, eff )
    call SaveStr( udg_H, id, 14, effT )
    
    call TimerStart( t, 0.01, true, function rMove )
    
    set t      = null
    set caster = null
    set target = null
endfunction

//===========================================================================
function rSpell_Conditions takes nothing returns boolean
    if GetSpellAbilityId() == 'A000' then
        call rSpell_Actions( )
    endif
    return false
endfunction

function InitTrig_Spell takes nothing returns nothing
    local integer index = 0
    set gg_trg_Spell = CreateTrigger(  )
    
    loop
        call TriggerRegisterPlayerUnitEvent( gg_trg_Spell, Player(index), EVENT_PLAYER_UNIT_SPELL_EFFECT, null )
        set index = index + 1
        exitwhen index == bj_MAX_PLAYER_SLOTS
    endloop
    
    call TriggerAddCondition( gg_trg_Spell, Condition( function rSpell_Conditions ) )
endfunction


вот со счётчиком, но уже с вджассом, то бишь в обычном редакторе не откроешь
если и есть утечки, то это вообще незначительно
Загруженные файлы
28

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

Заказчик: Komkozavr
Способность: Магические сети
Выполнено: Да

Спелл не муи, то бишь юзать может только один юнит, выбираются юниты рандомно, варом для поимки в сеть (если требуется - переделаю под самых ближних к точке), кол-во юнитов для поимки выставляется переменной TempInteger, ты найдёшь её в триггере каста, всё остальное в принципе в ро настраивается
Если нужно было прям кастомную поимку лассо вара сделать, то только на в/джассе
Импортнуть думаю не составит труда, но на всякий случай.. Копируешь папку с триггерами и закидываешь в свою карту, абилки настраиваешь у себя в ро и выставляешь по триггерам где они требуются, абилки и москитов перекопируешь тупо, триггер отделённый комментарием тебе не нужен, удалишь
Загруженные файлы
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.