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

Правила темы

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

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

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

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

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

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

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

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

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

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

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Этот комментарий удален
4
27
3 года назад
Отредактирован rsfghd
4

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

Заказчик: Стас Орлов
Способность: 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


вот со счётчиком, но уже с вджассом, то бишь в обычном редакторе не откроешь
если и есть утечки, то это вообще незначительно
Загруженные файлы
0
12
3 года назад
0
rsfghd, спасибо, потесчу)
4
27
3 года назад
Отредактирован rsfghd
4

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

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

Спелл не муи, то бишь юзать может только один юнит, выбираются юниты рандомно, варом для поимки в сеть (если требуется - переделаю под самых ближних к точке), кол-во юнитов для поимки выставляется переменной TempInteger, ты найдёшь её в триггере каста, всё остальное в принципе в ро настраивается
Если нужно было прям кастомную поимку лассо вара сделать, то только на в/джассе
Импортнуть думаю не составит труда, но на всякий случай.. Копируешь папку с триггерами и закидываешь в свою карту, абилки настраиваешь у себя в ро и выставляешь по триггерам где они требуются, абилки и москитов перекопируешь тупо, триггер отделённый комментарием тебе не нужен, удалишь
Загруженные файлы
1
27
3 года назад
1
Roy Mustang, вджасс всё ещё в силе?
2
28
3 года назад
Отредактирован Roy Mustang
2
rsfghd
Да
1
1
3 года назад
1
Делаете-ли заклинания на обычном редакторе карт Warcraft 3?
1
27
3 года назад
1
KarlikKukold, да мог и на хгм канале спросить, не создавая новый акк)
3
17
3 года назад
3
rsfghd, огромное спасибо, я бы наставил кучу плюсов, будь это возможным)
0
1
3 года назад
Отредактирован KarlikKukold
0
Название: Пироапокалипсис
Метод: Не разбираюсь, ибо пользуюсь классическим редактором карт Warcraft 3. Желательно через редактор.
MUI: нет
Цель: Нет
Количество уровней: 1
Описание: При касте заклинания ''Огненного столба'' производится еще несколько огненных столбов возле него.
4
27
3 года назад
Отредактирован rsfghd
4

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

Заказчик: KarlikKukold
Способность: Пироапокалипсис
Выполнено: Да

Копируешь абилки, москитов и папку с триггерами в свою карту, отделённый комментарием триггер удаляешь, кол-во столбов настраивается в триггере каста, в цикле, их рандомное появление выбираешь на своё усмотрение, я сделал 4 доп столба на +90 градусов каждый
Загруженные файлы
3
1
3 года назад
Отредактирован KarlikKukold
3
rsfghd,спасибо большое!
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.