Создание триггерных скилов
для тех,кто ниже среднего
Это первая статья из этой серии.Тут я расскажу как создавать не очень сложные триггерные скилы используя GuI(триггеры) и немного CS(custom script).Я не имею опыта работы с CS и Jass,но некоторые команды нам понадобятся что бы устранить утечки.Если кто-то не знает что это,попробую объяснить.Предположим вы задали команду выбрать отряд.После вы работаете с этим отрядом,а система его запоминает.Этот отряд уже вам не нужен и возможно не существует,но система помнит о том,что он был.Это лишнее действие с её стороны и мы должны приказать ей забыть этот отряд.Для этого перед тем как выбрать отряд ставим запрос: set bj_wantDestroyGroup = true.Каким то магическим образом система будет понимать когда отряд уже не нужен и забудет о нём.Утечки так же бывают с спецэффектами и точками,но об этом позже.
В этой статье мы будем делать улучшенный "Смерч".Скил,который я сделал я назвал "Вах ветерок!",это не как не влияет на его действие,но запомнится нам чтоб далее знать где мы его обозначаем.Суть скила в том,что когда враг покрутится и упадёт он нанесёт урон всем вокруг него и после сам будет ежесекундно терять скорость и промахиваться.
Итак,для начала нам нужно создать такие переменные:
- Caster_Wind тип Боевая Единица(БЕ)(далее кастер)
- Target_Wind тип БЕ(далее цель)
- Dummy_Wind тип БЕ(далее дамми и производные)
- Effect_Wind тип спецэффект(далее эффект и производные)
- Int_Speed_Wind тип целочисленная(далее число и производные)
- Speed_Wind_target тип реальная(далее реальная)
- Text_Wind тип плавающий текст(если хотите оформить по красивше)(далее текст)
Также нам нужно будет делать 2 триггера.
Первый триггер выглядит так:
Действия для плавающего текста не обязательны,просто они создадут эффект того что ваш герой произнёс это заклинание.Я думаю тут нет ни чего сложного.Просто устанавливаем переменные и запускаем основное тело скила.
Второй триггер будет сложнее и мне придётся его комментировать:
Большим он только кажется.Итак начнём с события,которое не поместилось.В этом триггере лучше поставить:
Событие - прошло 0.1 сек.
Данное событие будет 10 раз в секунду проверять опустился ли наш юнит на землю.Проверяет он это с помощью условий.Условия логического типа разрешат делать действия только в том случае,если в статусе героя пропали иконки.Это называется Specificl Buff.Проще говоря это то что устанавливается в спеле в графе "Заклинание".
Итак,как только в статусе убрались эти иконки,действие пошло.Для начала мы отключаем триггер.Звучит глупо,но это гадость перевода.Мы не выключим триггер,а отключим событие,чтоб наш триггер не повторялся.Отключив событие мы используем CS о котором я уже говорил set bj_wantDestroyGroup = true.Просто копируйте текст и вставьте его в действие "Личный код".Теперь выбираем отряд.Отряд выбирается в разделе "Отряд" первым действием.Там изначально стоит зона игровой карты,но нам нужен диапазон вокруг цели.Я поставил 300,можно выбрать любое число.Далее у вас появилась ветвь цикла.Ставим там такое действие:
Там стоит формула: Уровень скила у применившего умноженный на 60.Этот урон получат юниты.НУ и ставим урон от нашего кастера(Caster_Wind) ко всем выбранным юнитам.
конфетка
Далее создаём спецэффект в позиции цели скила.У меня на скрине перепутано.На скрине сначала установлена переменная,а потом создан эффект.На самом деле нужно сначала создать спецэффект,потом установить его как переменную.
Ещё скажу что спецэффект мы крепим не к юниту а к его позиции.Такова рода эффекты существуют 1 раз и показываются не зависимо удалены они уже или ещё нет.Переходим к самому важному. Т.к. наш упавший должен промахиваться мы создаём Дамми(подставной юнит).Наш Дамми создан на основе светлячка сделайте его характеристики такими: Убираем иконки,убираем модель(в пути к текстуре пишем слово
Установим даммика как переменную.
Теперь даём ему заранее слепленный скил на основе Проклятия.Этот скил находится в скилах воинов нежити.Там регулируем нужный шанс промаха.
Далее с помощью действий над БЕ добавляем ему этот скил.Если вам надо чтоб промахи зависели от уровня способности,то нужно действие "Set level of ability" оно в самом низу.Там с помощью арифметики и мозга создаём нужную формулу расчёта.Я всегда делаю такую: Установить лвл способности у Дамми как уровень способности у кастера.Это самый просто вариант.
Далее применяем её нацель с помощью действия над БЕ "Результат приказа при наведении на цель юнит" там выбираем наших юнитов и устанавливаем нужную команду.Вы,наверно,заметили,что я пропустил одно действие.Это действие нельзя забывать.Оно убивает нашего даммика после всех действий.Добавляем ему время истечения 1 сек.Значит с момента добавления и через секунду он умрёт,но юзнут скил успеет.И что примечательно он умрёт даже имея неуязвимость.Вообще говоря этот "таймер" это та полоска,которая появляется на призывных юнитах.
Так,медленно мы дошли до изменения скорости.Я буду делать её через триггер,а вы можете уже зная работу с Дамми сделать тоже самое что и делали с проклятием,только заменить на скил "Замедление".Этот вариант хуже только тем,что вы не сможете замедлить невосприимчивого к магии,а триггером сможете.Ну и естесно у вас не совместятся касты.А так всё будет очень медленно))
Итак,замедляем мы с помощью реальной переменной,целочисленной переменной и цикла от 1 до 10
Сначала установим в реальную нашу изначальную скорость.
Создаём цикл.Это действие называется:" Для каждого числа А делать несколько действий" там мы выбираем нужное кол-во действий(кругов).
Делаем всё что показано на скрине.Опять скажу что текст,который там есть,будет показывать скорость единицы на данный момент,он лишь для красоты.
При тесте вы можете заметить,что скорость остановится либо на 135 либо на 150.Это планка замедления.Её можно опустить до 0 в игровых константах.
На скрине не поместилось ещё одно действие - возврат скорости.Установите скорость вашей цели как реальная переменная,которую вы установили в начале.
На этом кончается 2 триггер.Теперь вы можете протестировать то,что получилось.
Ну или понять что у вас кривые руки я плохо объяснил и скачать наработку: тык!.
Для тех кто дожил до конца статьи скажу,что при падении урон получат все.Чтоб урон получали лишь враги надо сделать функцию если/то/иначе.
Code
Если выбранный юнит жив равно да
Если владелец выбранный юнит союзник владелец кастер равно нет
Если выбранный юнит не равно кастер
То...
Если владелец выбранный юнит союзник владелец кастер равно нет
Если выбранный юнит не равно кастер
То...
Вот такой незатейливой функцией мы убираем мертвых(зачем их пинать,уже поздно) и ваших союзников и конечно же вас.
И ещё одна вкусная плюшка.Если вы создавали текст,то его переменную нужно обнулить.Для этого создаём после уничтожения текста такой CS:call DestroyTextTag (udg_Text_Wind).Этот CS мы ставим после обоих созданий текстов.
Это всё.Спасибо за прочтение статьи.