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

Правила темы

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

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

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

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
1
3 года назад
Отредактирован KarlikKukold
0
Название: Пироапокалипсис
Метод: Не разбираюсь, ибо пользуюсь классическим редактором карт Warcraft 3. Желательно через редактор.
MUI: нет
Цель: Нет
Количество уровней: 1
Описание: При касте заклинания ''Огненного столба'' производится еще несколько огненных столбов возле него.
4
27
3 года назад
Отредактирован rsfghd
4

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

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

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

Заказ принят

Заказчик: Roy Mustang
Способность: Cyclop Slam
Спелл будет завершен к: без понятия, мб сегодня

остальные спеллы я не в силах сделать ибо хз как запретить контроль над юнитом без мемхака или морфа, но морф не оч хорошо если юниты разные и их много, максимум это отдавать каждые 0.01 сек бежать в точку, чтобы любые другие приказы перебивались, это могу без проблем, хотя какие-то мгновенные касты, без какой-либо задержки (в основном это для даммиков) всё-равно сработают

а захват и бросок это уже надо делать ориентир на саму модель, мб крепить эффект юнита к руке циклопа, это надо маленькую бд делать
наверняка на рефе есть все нужные функции для этих спеллов и там делается одной строчкой
0
6
3 года назад
Отредактирован mistwood
0
А мой заказ случаем не знаешь как сделать?

Заказ

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

Единственное мне не особо ясен метод получения урона, я бы тупо периодично наносил находящимся в стенке, но тебе видимо нужен именно разовый, после которого можно стоять в стенке и не получать урон, пока не выйдешь из её радиуса и не зайдёшь снова

бтв стенки уже делал, разные по методу каста и нанесения урона, так что не впервой
0
6
3 года назад
0
rsfghd:
mistwood, знаю конечно, это несложно, вообще я планировал после скиллов мустанга взяться за стенку

Единственное мне не особо ясен метод получения урона, я бы тупо периодично наносил находящимся в стенке, но тебе видимо нужен именно разовый, после которого можно стоять в стенке и не получать урон, пока не выйдешь из её радиуса и не зайдёшь снова

бтв стенки уже делал, разные по методу каста и нанесения урона, так что не впервой
Можно впринципе и переодический. Мне любой пойдет вариант, не важно. Главное без утечек. Если что и сам помазгую как подправить. Я то и сам попытался делать на ГУИ, но у меня "бюджетный" вариант стенки, и лучше не говорить какой :))))
1
27
3 года назад
1
mistwood, на гуи это тоже без проблем делается, но на вджассе комфортнее
0
28
3 года назад
0
rsfghd:
Вместо захвата/броска можно просто удар что отбросит цель по тому же принципу
(На счет страха думаю можно через таймер каждые н сек)
3
13
3 года назад
3
Название: Cyclop Grab and Throw
Метод: GUI/Jass
MUI: Да
Цель: Нет
Количество уровней: 1
Описание: Циклоп хватает цель и бросает в случайную точку вокруг себя (от 600 до 1200 дальности) нанося цели урон при столкновении в размере 80% от текущего здоровья и замедляет на 25%. (Если перед целью есть клиф нужно его ударить об клиф и замедлить на 50% при ударе)
Если метод на Jass , хотелось бы возможность настроить переменные на GUI при нужном мне действии , в карте есть некоторые юниты на которых не должна работать данная способность
Настройки вверху триггера. Если понадобится ГУИ,вместо значения после присваивания дописать udg_название переменной
Загруженные файлы
4
27
3 года назад
4

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

Заказчик: Roy Mustang
Способность: Cyclop Slam
Выполнено: Да

инструкция по импорту
Копируешь папку с триггерами в свою карту, мб возможны состыковки с переменными и тебе понадобится доп. помощь по импорту, это уже в лс пиши
в SpellInit выставляешь булекспр, который послужит условием кого дамажить и отталкивать (добавлю для отталкивания отдельное условие, если необходимо)
триггер Spell это сама абилка, там в самом вверху кода есть базовые настройки (макс/мин дистанция, скорость отталкивания, периодичность таймера отталкивания, условие, сбивать ли приказы при отталкивании, условие, прекращать ли отталкивание если юнит столкнулся с ландом (если выставить false, у юнита просто будут сбиваться приказы пока не закончится "полёт", движение сквозь ланд происходить не будет) )
в триггере SpellEnd можешь юзать собственные действия при приземлении кастера, я оставил пример использования, так же тебе даётся группа пораженных юнитов, если она нужна конечно
в триггере DiscardingEnd можешь юзать собственные действия при окончании оттакливания, я добавил пример с замедлением (поленился делать ауры, но если необходимо - сделаю)
там тоже есть тот, кто откинул юнита, и сам юнит
Если у тебя есть хэш-таблица с названием H, то закомменти её в триггере Spell (3-я строка)
Если это не хэш-таблица имеет название H, то измени название хэш-таблицы через кнопку Find/Replace - Replace (Ctrl+H), в верхней строчке (Search for) пишешь H, а в нижней (Replace with) на что изменить название, должны стоять галочки Case Sensitivity, Whole worlds only, Search from caret, сам курсор (мигающая палочка) должен находится в самом вверху кода
код
library CyclopsSlam
globals
    constant hashtable H = InitHashtable( )
    private constant group TempG = CreateGroup( )
    
    private constant real MaxDistance = 600.00 // макс дистанция отбрасывания
    private constant real MinDistance = 0.00   // мин дистанция отбрасывания ( без понятия зачем, мб пригодится )
    private constant real DiscardingS = 15.00  // скорость полёта отброшенных
    private constant real TimerPeriodic = 0.01 // периодичность полёта таймера для отброшенных противников ( чем выше - тем оптимизированнее и хуже плавность )
    private constant boolean OrderPause = true // сбивать приказы при отбрасывании? true - да, false - нет
    private constant boolean DiscrPause = true // прекращать отталкивание если юнит столкнулся с ландом?
    private attacktype AttackType = null
    private damagetype DamageType = null
    private real TempX
    private real TempY
    private real TempReal
    private unit TempUnit
    private item TempItem
endglobals

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

private struct mys
    unit caster
    real damage
    real radius
    real time
    real timeM
    real height
    attacktype AttackType
    damagetype DamageType
endstruct

private struct MoveS
    unit target
    unit caster
    real speedx
    real speedy
    real distance
    real angle
endstruct

private function Discarding takes nothing returns nothing
    local MoveS A = LoadInteger( H, GetHandleId( GetExpiredTimer( ) ), 0 )
    local real x  = GetUnitX( A.target ) + DiscardingS * A.speedx
    local real y  = GetUnitY( A.target ) + DiscardingS * A.speedy
    local boolean b = false
    
    call SetItemPosition( TempItem, x, y )
    call SetItemVisible( TempItem, false )
    if SquareRoot( ( GetItemX( TempItem ) - x ) * ( GetItemX( TempItem ) - x ) + ( GetItemY( TempItem ) - y ) * ( GetItemY( TempItem ) - y ) ) <= 10 then
        call SetUnitX( A.target, x )
        call SetUnitY( A.target, y )
    elseif DiscrPause then
        set b = true
    endif
    
    if OrderPause then
        call IssueImmediateOrder( A.target, "stop" )
    endif
    
    set A.distance = A.distance - DiscardingS
    
    if A.distance <= 0.00 or GetUnitTypeId( A.target ) == 0 or b then
        call SetUnitPathing( A.target, true )
        call FlushChildHashtable( H, GetHandleId( GetExpiredTimer( ) ) )
        call PauseTimer( GetExpiredTimer( ) )
        call DestroyTimer( GetExpiredTimer( ) )
        
        set udg_TempUnit   = A.target
        set udg_LastCaster = A.caster
        call TriggerExecute( gg_trg_DiscardingEnd )
        
        set A.target = null
        set A.caster = null
        call A.destroy( )
    endif
endfunction

private function Damage takes nothing returns nothing
    local timer t = CreateTimer( )
    local MoveS A = MoveS.create( )
    local real x
    local real y
    
    set A.caster = udg_LastCaster
    set A.target = GetEnumUnit( )
    set x = GetUnitX( A.target )
    set y = GetUnitY( A.target )

    set A.speedx = x - TempX
    set A.speedy = y - TempY
    
    set A.distance = SquareRoot( A.speedx * A.speedx + A.speedy * A.speedy )
    set A.speedx = A.speedx / A.distance
    set A.speedy = A.speedy / A.distance
    
    set A.distance = SquareRoot( ( TempX - x ) * ( TempX - x ) + ( TempY - y ) * ( TempY - y ) )

    set A.distance = MaxDistance * ( 1 - ( A.distance / MaxDistance ) )
    if A.distance < MinDistance then
        set A.distance = MinDistance
    elseif A.distance > MaxDistance then
        set A.distance = MaxDistance
    endif
    
    call SetUnitPathing( A.target, false )
    call SaveInteger( H, GetHandleId( t ), 0, A )
    call TimerStart( t, TimerPeriodic, true, function Discarding )
    
    call GroupAddUnit( udg_TempGroup, A.target )
    call UnitDamageTarget( udg_LastCaster, A.target, TempReal, false, false, AttackType, DamageType, null )
    set t = null
endfunction

private function Move takes nothing returns nothing
    local mys A = LoadInteger( H, GetHandleId( GetExpiredTimer( ) ), 0 )
    
    set A.time = A.time - 0.01
    call SetUnitFlyHeight( A.caster, ParabolaZ( A.height, A.timeM, A.time ), 0.00 )
    
    if A.time <= 0. then
        call SetUnitFlyHeight( A.caster, 0.00, 0.00 )
        
        set udg_LastCaster = A.caster
        set TempReal       = A.damage
        set AttackType     = A.AttackType
        set DamageType     = A.DamageType
        set TempX          = GetUnitX( A.caster )
        set TempY          = GetUnitY( A.caster )
        call GroupEnumUnitsInRange( TempG, TempX, TempY, A.radius, udg_DamageCond )
        call ForGroup( TempG, function Damage )
        call GroupClear( TempG )
        
        call FlushChildHashtable( H, GetHandleId( GetExpiredTimer( ) ) )
        call DestroyTimer( GetExpiredTimer( ) )
        
        set A.caster = null
        call A.destroy( )
        
        call TriggerExecute( gg_trg_SpellEnd )
    endif
endfunction

function Spell_Actions takes unit caster, real damage, real time, real height, real radius, attacktype at, damagetype dt returns nothing
    local timer t = CreateTimer( )
    local mys A   = mys.create( )
    
    set A.caster = caster
    set A.damage = damage
    set A.time   = time
    set A.timeM  = time
    set A.height = height
    set A.radius = radius
    set A.AttackType = at
    set A.DamageType = dt
    
    call UnitAddAbility( A.caster, 'Arav' )
    call UnitRemoveAbility( A.caster, 'Arav' )
    call SaveInteger( H, GetHandleId( t ), 0, A )
    call TimerStart( t, 0.01, true, function Move )
    
    set t = null
endfunction

//===========================================================================
function InitTrig_Spell takes nothing returns nothing
    //set gg_trg_Spell = CreateTrigger(  )
    set TempItem = CreateItem( 'spsh', 0, 0 )
    call SetItemVisible( TempItem, false )
endfunction
endlibrary




в самом низу кода юзается предмет, для проходимости точки, с равкодом 'spsh', если в триггерах юзаешь этот предмет где-то, то лучше замени на не используемый

сорян что долго делал спелл, завал отовсюду
Загруженные файлы
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.