Как сделать триггерные способности в warcraft 3

Обновлено: 07.07.2024

Скажи пожалуйста как сделать способность применяемой автоматически на героя. Она направленная, а я хочу чтобы при нажатии на скил он автоматически применялся на героя, уже целый день копаюсь не могу разобраться.

харвестер

QuakeAlex

В итоге спустя 1-2 часа я создал заклинание которое даже не работает так как я задумал,действует как обычный огненный столб.

Дмитрий Крыжановский

А настройку создание своих юнитов и стройка зданий, тоже через тригеры?
Это мне нужно для создание своей рассы.

Слава Клиймашенко

А как добавить или поменять выбраному войну или герою способности другова война

Shell

Братиш, ты топ конечно, но ты несёшь такую фигню, это всё можно сделать намного легче, даже без перемен!

Rik Line

Вопрос. Понимаю, что уже не актуально, но всё-таки. Я сделал выбор героя через таверну. Тоесть герой, которого пикнул Игрок 1 (красный) является переменной "pickhero 0". Но нельзя выбрать эту переменную как боевую единицу в функции "Специфическое событие отряда". Ответьте кто-нибудь, пж.

Hacker Pro

Кто нибудь знает как сделать юнита или здание неуязвимое?!

Что делать если у юнитов (абсолютно любого в любой карте) пропала строчка с выбором способностей?

Абылай Утепбергенов

а вот например,как сделать так,чтобы мой триггерный скилл был у 1 героя в кампании. тоесть этот скилл был в кампании навсегда.я например создал навык,и теперь как его по всей кампании сделать так,чтобы он работал

Хасаги Уегедонович

а как убить дамни юнита?

Shadow Dancer

Хуёво объяснил. Дизлайк

Krovior

а как делать направленные способности? я пытаюсь сделать способность из Пронзающей смерти, что бы дамми кастовали скил в определенное место, по направлению, все получилось нормально, но в какую бы сторону я не делал, шипи в 4 ряда всегда стреляют в конкретную сторону, а именно на лево, я подумал что это из-за "Стандартной ориентации зданий" изменил параметр на "целевая точка изданного приказа" и в общем никакого эффекта, помогите пжалста

Никита Михальченко

Окончательно запутался на моменте, где ты рассказывал про функции для skill 1. До сих пор не могу найти ни одного внятного видеоурока по триггерным заклинаниям.

Петровская Анастасия

Все супер все понравилось,только обьсняй по обширнее,а то я половины не понял пришло самому дальше подумывать,и я не понял как героюттеперь эту способность добавить если она для воинов теперь?

Доброго времени суток! Люди добрые, меня зовут Даня и мне очень-очень сильно нужна помощь того кто разбирается в триггерах в World Editor. Я только начал работать с триггерами но столкнулся с рядом проблем и я не справлюсь без опытного мапера.

Вопрос 1. Как с помощью триггеров сделать анимацию снаряда? Например: я хочу сделать триггерную способность. Я создал нестандартную способность использовав "Пламя обречения" (эффекты способности остались те же), способность наносит урон противнику но я создал триггер который исцеляет меня ровно столько же сколько противник получает урон с таким же интервалом (каждую секунду противник получает по 100 ед. урона в течении 3 сек., и триггер восстанавливает каждую секунду по 100 ед. здоровья в течении 3 сек), получился самодельный эффект активного вампиризма, но мне нужно сделать так, чтобы каждую секунду в течении 3 сек. от из моего героя выходил снаряд "Лик смерти" который полетит к противнику. Сложно объяснить :(, в общем как сделать так чтобы анимация снаряда "Лик смерти" вылетал из моего героя к герою противника? Как я понимаю лик смерти должен быть дамми юнитом?

Вопрос 2. Как с помощью триггера изменить файл модели? Я хочу создать триггерную способность по этому механизму: Иллидан начиная применять способность "Огненное дыхание (пивовар)", меняет свой облик на Иллидан-демон (метаморфоза). А после применения способности "Огненное дыхание", Иллидан возвращается в первый облик.

Вопрос 3. Как сделать способность типа рывка но наводящуюся на цель? Герой использует "рывок" на противника, против оглушается и герой совершает рывок к противнику.

Вопрос 4. Объясните мне, пожалуйста, как заставить юнита совершить действие с помощью триггера? Например: Заставить героя применить способность; Заставить героя идти в указанную область; Заставить героя атаковать выбранного юнита; (Можно ли отменить эти действия созданные триггером?)

Вопрос 5. Как сделать массовую способность "Гнев Деревьев" которая работает по области и вообще, как сделать способности наводящиеся на цель на способность которая работает по области сохраняя свои эффекты. Я хотел понять как сделать так чтобы наводя способность-пустышку на область, на всех противников в области применялась способность "Гнев Деревьев"? Способность должна работать как 1-ая способность Меппоря из Доты. Пробовал создать способность-пустышку огненный столб, но не получалось с помощью триггеров сделать так чтобы на всех применялся "Гнев Деревьев"

Вопрос 6. Как с помощью триггеров открыть поле видимости врага? (Герой применяет способность на противника, мой герой видит где находится мой противник где-бы он ни был) Способность должна работать как "Трэк" (ульта) Баунти Хантера из Доты. Пробовал применить способность "Сторожевая сова" (у охотниц) эффект длился вечно, а мне нужна временная видимость.

Вопрос 7 Мой самый главный вопрос! Как с помощью триггеров увеличивать или уменьшать силу атаки/ броню/ скорость атаки/ противника? Я пробовал так: с помощью триггера добавлял способность "Доспехи веры" и сразу же скрывал иконку этой способности триггером "Заблокировать", но как в это же время уменьшить броню противника?

Вопрос 8 Как с помощью триггера сделать так чтобы героя нельзя было выбрать? Триггер должен работать как ульта Морлока из Доты? Нужно сделать так чтобы героя нельзя было кликнуть.

Вопрос 9 Как с помощью триггера сделать так, чтобы герой применяя способность перемещался очень быстро меняя свой файл и его в это же время нельзя было выбрать? Эта способность должна работать как Ульта Шторм Спирита из Доты, но при этом не расходовать ману и не наносить урон. Я уточню: Герой применяет способность в указанное место, герой становится неуязвимым, героя нельзя выбрать (кликнуть), герой меняет файл модели, герой перемещается в указанную область со скоростью 350?

Вопрос 10 Как триггерно наносить урон по области при этом не нанося урон себе и союзникам? Эта способность должна работать как 1-ая способность Омника из Доты. Герой применяет способность на указанного юнита, после применения способности, все противники в радиусе 300 от указанной цели получают урон. Прошу помочь.

Arkenun

1. есть куча способов, например, создать юнит(модель у юнита эффект лик смерти), в отделбном триггере который потом включишь двигать каждую 1 сек этот юнит в нужную точку, или взять способность волна силы и поменять там эффект на лик смерти(крч очень много способов читай статьи на xgm)
2. к сожалению никак, только стандартными скилами варкрафта (хотя есть способ скрыть юнита и двигать в его позицию постоянно юнита с нужной моделькой, но это не очень)
3. смотри наработки
4. все есть в действиях
5. хз)
6. прикрепи к противнику юнита дамми который будет палить область для героя
7. попробуй добавлять предметы
8. добавь юниту способность москиты, но, игрок не сможет управлять этим юнитом тоже
9. меняя свой файл? все предыдущие пункты в помощь
10. выбрать всех юнитов в области, условие выбранный юнит враг герою, приказать герою атаковать выбранный юнит
Крч совет, смотри наработки скилов и изменяй там действия, события, условия и т.д., желательно для аниме карт, главное чтобы были на русском, все поймешь со временем отвечаю.

lotus101

2 - тут нужно создать двух иллиданов с нужными моделями и по триггеру их переключать (замена юнита если я не ошибаюсь).Для этого нужно синхронизировать все статы через переменные (хп\мана\скиллы).Ну или можно без переменных,не помню уже.

КОМЕНТАРІ • 61

Окончательно запутался на моменте, где ты рассказывал про функции для skill 1. До сих пор не могу найти ни одного внятного видеоурока по триггерным заклинаниям.

а как делать направленные способности? я пытаюсь сделать способность из Пронзающей смерти, что бы дамми кастовали скил в определенное место, по направлению, все получилось нормально, но в какую бы сторону я не делал, шипи в 4 ряда всегда стреляют в конкретную сторону, а именно на лево, я подумал что это из-за "Стандартной ориентации зданий" изменил параметр на "целевая точка изданного приказа" и в общем никакого эффекта, помогите пжалста

Было такая же проблема с тп Дамми создавались в определенную сторону Я просто поменял действие создать дамми- создать 1 dammy для игрок 1 красный позиция переключающий юнит (и тут я вместо определенных чисел поставил математика случайно число от 1 до 360 т е) смещение на случайная точка от 1до360 по отношению к случайная точка от 1до 360 градусов и юнит стал перемещатся в рандомномное места

Что делать если у юнитов (абсолютно любого в любой карте) пропала строчка с выбором способностей?

Подскажите плиз как сделать скил, чтоб дракон когда вырастал(набирал достаточно маны) мог превратиться в большого дракона!

У меня проблема. После использования способности торнадо на мини карте показаны существа (демми) Как это пофиксить?

Попробуй сделать дамми полностью пустышкой, может там найдется кнопка "показывать на миникарте"

Все супер все понравилось,только обьсняй по обширнее,а то я половины не понял пришло самому дальше подумывать,и я не понял как героюттеперь эту способность добавить если она для воинов теперь?

как ты заменил способность которую должен кастовать дамми с волны силы на торнадо?

Для тех, кто не очень понимает, что такое автокаст, я объясню: это способность, похожая на "Ледяные стрелы" у наги, где вы можете щёлкнуть правой кнопкой мыши для того, чтобы заставить способность применяться автоматически (постоянно пускать ледяные стрелы) или же щёлкнуть левой кнопкой мыши и указать цель, чтобы применить способность один раз. Эти два события немного непросто отловить. Здесь я покажу, как можно это легко сделать.

Предназначение этой статьи - научить картостроителей создавать триггерные автокаст-спеллы на JASS.

Прежде, чем изучать эту статью, рекомендуется ознакомиться с основами JASS и основами спеллмейкерства, т.к. эта статья НЕ является введением в JASS. Так что если вы не очень знакомы с JASS, прочитайте вводные статьи и вернитесь к этому материалу тогда, когда вы уже более-менее освоитесь с JASS.

Итак, всё, что вам понадобится для понимания статьи - это World Editor, базовые знания в JASS, JassCraft и система СScache, которую можно скачать у Vexorian'a. В этой статье мы создадим свою подобную систему, однако некоторые мучаться не хотят.

Даже подумав, что код может быть восстановлен, не рекомендую использовать в World Editor спеллы, базированные на коде, так как достаточно всего лишь одной маленькой ошибки, чтобы игра выдала ошибку. Согласитесь, это будет весьма неприятно для играющих.
Итак, начнём.

Создание способности.

Итак, давайте создадим триггер. Назовём его "Auto Attack". Сконвертируем его в код и удалим всё, что там будет. Должен получиться абсолютно чистый триггер. Следующим шагом нужно создать инициализацию триггера и добавить наши события.



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



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



P.S.: Условия напишите в одну строку, я перенёс часть условия на другую строку, чтобы не порвать страницу.

Итак, у нас два события, которые должны отлавливаться, поэтому нужно проверить оба. Если у нас есть событие, что боевая единица атакована, нужно также проверить, есть ли у атакующего героя нужная способность (я использовал 'A000'). Если она имеется, то возвратить true и запустить наши действия. В случае, если условия не встретились, мы проверяем, был ли эффект от той способности, которая нам нужна (нужно проверить, является ли событием применение способности, после чего elseif запустит условие, которое проверит, атакован ли юнит и нет ли у атакующего нужной способности) и убедиться в том, что применяемая способность - это та, которую мы хотим. Если условия верны, то запустятся действия триггера, если же нет, тогда возвратится false , а триггер не запустит действия.
Следующая функция - наши действия.



Здесь всё не очень уж и трудно. Нам нужен триггер действий после того, как цель была повреждена, поэтому мы создаём его, также нам нужно действие триггера, которое потом обнулим, и ещё нам понадобится боевая единица, которая была целью.
В первую очередь нужно проверить, какое это было событие. Если событием было "Применяет способность", тогда цель будет обозначаться через GetSpellTargetUnit(), если же нет, то должен быть атакованный воин, которого обозначаем через GetTriggerUnit(). Теперь, чтобы проверить, действительно ли получил воин урон, создадим новое событие с указанием на воина. Укажем действия после получения повреждения. Затем ждём.
Зачем нужно ждать? Нам нужно уничтожить триггер сразу. Почему же не сделать это сразу в этой функции? Лично я использую время ожидания 2 секунды, т.к. этого времени достаточно для получения урона, также оно очень удобно для блокировки повторного использования способности, поэтому дважды функция не запустится.
После ожидания мы удаляем triggeraction и уничтожаем триггер, не забывая обнулять локальные переменные, типы которых наследуются от handle, чтобы избежать утечек памяти.
Нам осталось написать функцию действий после получения урона от атаки.



P.S.: Условия напишите в одну строку, я перенёс часть условия на другую строку, чтобы не порвать страницу.

Итак, в первую очередь зададим локальные переменные. dam отлавливает полученные повреждения, target - это боевая единица, которая получила повреждение, а cast - это тот, кто нанёс урон. Отдельная переменная используется для создания всплывающего текста, который часто используется в способностях, подобный этой, а ещё одна переменная - это реальная, которая потом тоже будет задействована.
Так как наша цель может получить повреждения от многих других факторов, нужно сразу это исключить, проверив цель на наличие эффекта от ледяных стрел (я использовал 'B000')(подразумевается, что способность будет базирована на ледяных стрелах, я считаю их лучшим шаблоном). Эффект может быть поставлен на время не ниже 0.01 секунды, поэтому вы никогда не увидите его, а это полезно для того, что мы делаем. Также у заклинаний \ эффектов всего 1 уровень, поэтому их наличие у цели можно проверить условием, которое будет говорить, что уровень заклинания \ эффекта у цели больше нуля.
После того, как в цель попала стрела, у неё будет заклинание \ эффект, действующий 0.01 секунду, значит, можно проверить его наличие на цели. Также лучше проверить наличие способности у наносящего урон героя, так будет безопаснее. Если эти условия правдивы, то можно создавать наши эффекты.
Первым делом я всегда отключаю триггер. Это означает, что триггер больше не запустится, даже если воин получит ещё больше повреждений. Уничтожать триггер не надо, т.к. уничтожается он в другой функции.



Это используется для того, чтобы задать количество урона, который будет наноситься цели дополнительно. По моему примеру, дополнительно нанесётся 25% от нормального урона способности.
Несколько строк ниже - это всплывающий текст. Вместо использования BJ я вытащил из неё все native-функции в целях оптимизации. Конечно, не очень здесь это и важно, однако мне больше нравится делать так. Затем я приказываю атакующему повредить цель на количество здоровья, указанного в реальной, которую я назначил ранее, это дополнительное повреждение от способности.
И, наконец, уничтожим всплывающий текст и выставим его переменной значение null (обнулим её). Я обнулял и уничтожал всплывающий текст в блоке if\endif, т.к. вне этого блока нет всплывающего текста для уничтожения, я создавал этот текст внутри этого блока. Напоследок обнулим оставшиеся переменные, чтобы не провоцировать утечки.
Итак, посмотрим на наш триггер-результат.



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



Она просто берёт ваш триггер и перед его уничтожением ждёт 15 секунд. Я не вижу в ней никакого смысла, но она позволяет избежать ошибки. Может быть использована вместо сall DestroyTrigger() в функции Auto_Attack_Detect_Actions.
Вот и всё, у нас получилась автокаст-способность, которую можно использовать в вашей карте. Я надеюсь, что вы узнали что-то новое. Удачного картостроения и оригинальных карт!

Читайте также: