Варкрафт 3 функция триггера отсутствует в базе данных
Панель управления, с вынесенными на неё основными клавишами. Для работы с триггерами используются только семь кнопок: Переменные (Cntr+B), Новая категория (Cntr+G), Новый триггер (Cntr+Е), Новый комментарий к триггеру (Cntr+M), Новое событие (Cntr+E), Новое условие (Cntr+D) и Новое действие (Cntr+R). Остальные являются общими и используется во всех окнах редактора
Список триггеров. Для удобства работы с ними можно создавать различные категории, в будущем, при компиляции кода они не будут учитываться и поэтому названия могут содержать в себе кириллицу, а вот названия триггеров не могут содержать в себе кириллических букв, а также не могут повторяться, даже находясь в различных категориях.
Текстовая зона , в ней находиться описание триггера. В ней Вы можете написать основные принципы работы триггера, действия, которые он выполняет, список переменных, которые нужно создать, чтобы перенести этот триггер в другие карты. В общем любую информацию
Окно кода триггера. Пожалуй, самая важная часть редактора триггеров. В ней Вы можете редактировать и создавать код карты. Подробнее о нем узнаем в следующей главе
- События (Events)
- Условия (Condition)
- Действия (Actions)
- “Map Initialization” (Срабатывает при загрузке карты)
- “Periodic Event” (Срабатывает каждый раз, когда таймер будет равен нулю)
- “Time Elapsed” (Срабатывает один раз, когда таймер будет равен нулю)
- “Generic Unit Event” (Срабатывает при выполнении юнитом какого-либо действия)
Условия.Следующим этапом будет заполнение пункта “Условия”. Это необходимо для сужения области применения триггера.
Например, вам необходимо отследить применение какого-либо заклинания, тогда нужно создать событие ( щелкнув для этого правой кнопкой мыши и выбрав пункт “Новое событие(New Event)”) “Generic Unit Event”, выбрав там пункт “Начинает Применять Способность”. Далее нужно создать новое условие (аналогично созданию события) и выбрать там пункт “Ability Comparison”, после чего триггер примет примерно такой вид :
Действия. Это является самой главной частью любого кода. Благо действий в редакторе карт достаточно чтобы превратить Warcraft в нечто новое и (надеюсь) оригинальное. А вообще создание действий аналогично созданию событий и условий. Триггеры являются своеобразным “конструктором” в который нужно просто подставлять нужные вам условия, действия и т.д.
Каждый триггер имеет 2 состояния: включён и выключен соответственно. Чтобы выключить триггер необходимо нажать правой кнопкой мыши и выбрать пункт “Изначально включён”. Для работы с триггерами используется вкладка “Триггер” при выборе действия. Включение и выключение триггеров даёт массу особенностей. Например, если вам нужно при нахождении определённого артефакта у юнита, давать ему золото, то легче отследить нахождение у юнита этого артефакта и включить триггер, дающий золото определённому игроку. Также это можно реализовать и просто одним включенным триггером, проверяя при каждом исполнение значение переменной, означающей находится ли артефакт у юнита (Например, переменная типа “Логическая (Boolean)”) и делать тоже самое, но вместо включения триггера поставить действие, которое изменит значение переменной на противоположное
Для улучшения работы с кодом можно использовать переменные. Они значительно упрощают работу с кодом и могут помочь при оптимизации. Все переменные делятся на Локальные и Глобальные. Сначала мы остановимся на изучении Глобальных переменных, т.к. Локальные переменные редко используются триггерами, но тем не менее являются важной частью изучения. Для создания глобальных переменных необходимо нажать, находясь в редакторе триггеров, сочетание клавиш “Ctrl + B”. Переменные имеют множество типов, можно создать переменные со значением юнитов, чисел, спецэффектов и т.д. Чтобы изменить значения переменной, необходимо создать действие “Set Variable”, выбрать в настройках переменную и значение. Использование переменных может значительно улучшить быстродействие игры. Например, можно занести в переменную позицию того или иного юнита и больше не использовать функцию определения положения вообще. Также переменные можно использовать как средство обмена информации между другими триггерами проекта.
Ну а теперь мы перейдём к локальным переменным. Эти переменные создаются и используются в пределах 1 функции. Они являются “универсальным” средством создания чего-либо. Локальные переменные редко применяются в триггерах, а в Jass’е просто незаменимы. Все же средствами триггеров можно использовать и их, но это практически нигде не применяется, а используют сразу Jass. Это своеобразное использование жасса прямо в триггерах. Для этого существует действие “Custom Script” . Вообще действие “Custom Script” используется для вызова функций из особого Custom Script’а карты, написанного кстати на Jass’е и интерпритируется как обычный Jass код, чтобы отредактировать или просто посмотреть его необходимо нажать на пункте, имеющим название вашей карты в списке всех триггеров (Подробнее можно узнать о Custom Script’е при изучении самого жасса, но это не имеет никакого отношения к данному пособию).
Очень важным аспектом в изучении переменных являются массивы. Массив по сути это переменные с множеством значений. Например, чтобы записать всех юнитов на карте достаточно лишь 1 массива. Значения массивов меняются так “<Имя переменной массива>[номер элемента] = значение переменной” и считываются аналогичным способом.
Очень важным элементом в создании карт являются условия и циклы. Сначала поговорим об условиях. Чтобы объявить новое условие необходимо создать действие “If /Then/Else”. Данное действие состоит из 3 частей. Первая часть это условие, вторая часть это действие, если условие вернёт истину, то оно будет выполняться, а третья часть это действия, но только те, которые будут выполняться, если вернётся лож. Теперь попытаюсь объяснить это всё на примере:
Теперь при исполнении данного условия будет меняться значение переменной, если она была равна нулю, то станет равна единице и наоборот, если она была равна единице, то станет равна нулю.
Следующим шагом будет изучение циклов. Они также являются практически неотемлемой частью любого кода. Если в вашей карте не будут использованы условия и циклы, то скорее всего ваша карта даже не доживёт до релиза и если честно я не встречал ни одной хорошей карты, в которой бы не было циклов или условий. И так начнём. Циклы используются в картостроении для выполнения однотипных действий. Примером может служить изменение переменных массива. Циклами являются все действия начинающиеся на “For Each…”, всего их 6 и каждая имеет свой синтаксис написания. В принципе они все похожи и разбирать каждую в отдельность нет смысла, поэтому мы остановимся на самой первой “ For Each Integer A, Do Multiple Action”. Удобство работы с этой функцией заключается в том, что можно менять не весь код функции сразу, как в “ For Each Integer A, Do Action ”, а по отдельности каждую строку. Число, равное количеству раз выполнения цикла, является переменная типа “Integer (Целочисленная)”. Чтобы получить её значение необходимо использовать вместо переменной функцию “For Loop Integer A”. Для примера используем вот такой код:
Данный пример очищает переменные “Hero[1]”, “Hero[2]” , “Hero[3]”, … , “Hero[12]” от всех записанных в них значений. Также есть ещё одна интересная функция, функция “ For Each Integer Variable, Do Multiple Action”. Она нужна для замены переменной “A” на любую вашу переменную типа “Integer (Целочисленная)”. Синтаксис этой функции отличается от ранее рассмотренной и поэтому я приведу пример кода
Я думаю все нашли отличия этих функций, но если перевести эти функции в Jass, то вы не найдёте никаких отличий за исключением названий переменных. Для первого примера создается локальная переменная с названием “bj_forLoopAIndex”, а во втором примере вместо этой переменной просто используется ваша. А вообще все эти шесть функций в текстовом виде выглядят одинаково и созданы в триггерном виде лишь для упрощения работы с циклами. Глава 5. Различные секреты и примеры их исполнения
Как уже говорилось ранее, возможности триггеров практически безграничны. Большинство задач, которые казалось бы невозможны, можно с их помощью реализовать. На основе Warcrat’а были созданы множество других жанров. Начиная с гонок и заканчивая логическими играми. Некоторые секреты я и попытаюсь реализовать в этой главе.
функция триггера отсутствует в базе данных
Когда запускаю некоторые наработки или карты, то высвечиваются ошибки:
Функция триггера отсутствует в базе данных InitHastableBJ
Get Last Created Hastable BJ
SaveReal BJ
ngHash BJ
GetLastCreatedUnit
И ошибка открытия карты (карта без протекта, в обычным редакторе открывается, а в ЖНПГ не хочет)
Чего то не хватает, откуда можно взять эти функции и дописать в редактор?
Зайди в папку с Warcraft и вычисти все что находится в папке UI
________________
я думал что работа продвигается как улитка, а она оказывается совсем не продвигается.© wester
Не помогло, если ты намекал на русс триггеры, то в обычном редакторе как раз русские и грузятся, а вот ЖНГП с англ не грузит.
Зайди в папку с Warcraft и вычисти все что находится в папке UI
Ну обычно ошибки идут из за русс триггеров, но тут не помогло, удалил все из папки UI
не дало результатов.
Так тут с хештейблом всё в принципе, так что кроме того, что у тебя версия вара ниже 1.24, ничего в голову не приходит.
Вот
1.26
Может есть способ , как то добавить эти функции?
Стоп, в редакторе пишется верси 1.21b
то есть ЖНПГ 21 версии вара? Качал с xgm (отсюда) последнюю самую или его как то патчить нужно?
П.с. каким способом Жнпг привязывается к вару, я сейчас поставил 2 вар, где обычный редактор работает с картой, как привязать Жнпг к нему?
Все, решил проблему, если вдруг у кого будет, вот :
1)Скачал новый вар, туже версию что и стояла, только другую сборку с торрент сайта.
В ней обычный редактор открывал карты и в нем были функции Hastable
2)В реестре
HKEY_CURRENT_USER
Software
Blizzard Entertainment
WarCraft III
Поменял пути на место, куда я поставил новый вар (D:\Games\WarCraft III) в моем случае.
3)В папке с JNGP запустил файл we Пакетный файл MS-DOS
В итоге JNGP запускается используя другую версию варика с рабочими функциями HAstable.
Пойду посмотрю нарабокту наконец то)
Ребят, очень прошу, поделитесь вашими познаниями в редакторе триггеров.
Григорий, Мм..
Слишком много объяснять. Я могу разве что тезисно объяснить принципы триггеров:
Итак, суть триггера: на определенное СОБЫТИЕ (капсом буду определять понятия) производится отдельная реакция - ДЕЙСТВИЕ. При этом ДЕЙСТВИЕ может реагировать на СОБЫТИЕ при истинности определенных УСЛОВИЙ. Приведу элементарный бытовой пример. Скажем, реакция человека на прикосновение к горячему чайнику. Комментарии буду подставлять в квадратные скобки.
СОБЫТИЕ
- A unit(Человек)[Указываем на определенную персону] дотрагивается до Чайник [то есть происходит событие - прикосновение к чайнику]
УСЛОВИЕ
- Температура_Чайника больше 50°C [Температура_Чайника - переменная(таких бесчисленное множество: Х, Y, Z и т.д. Переменную можно назвать как угодно, и поместить в нее любое значение). Тут мы указали условие, то есть если Температура_Чайника меньше 50°C - то ДЕЙСТВИЯ, указанные внизу, работать не будут. УСЛОВИЕ каждый раз проходит проверку на истинность, когда происходит СОБЫТИЕ.]
ДЕЙСТВИЯ
- A unit(Человек) отдергивает руку [ну, тут все просто - указываем на персону и производим действие]
Именно по такому принципу работают все мыслимые системы триггеров и скриптов. Тебе остается лишь тренироваться, и дальше все поймешь сам) создавай триггеры, пробуй разные варианты(даже если на первый взгляд они кажутся нерабочими), юзай разные условия, события, действия.. Если что будет непонятно, всегда можно спросить)
Максим, блин знаю я что такое триггеры. мне интересны сами структуры триггеров для конкретных действий.
Альтернативный, а уже в действиях которые тебе даются устанавливаешь поицию содаешь юнита даешь ему время жизни отдаешь приказ(последний созданный лик смерти на выбранный) удаляешь позицию . это все запихнуть во множество действий которые ты делаешь с выбранными а ты сделал триггер на выбранных которых много приказать последнему созданному кастануть который 1 и я выше не смотрел создавал ли ты его вообщее)
Ivan, просто дамми должен кинуть скилл не на одного юнита а на всех в 300 от центра создания способности
Доброго времени суток! Люди добрые, меня зовут Даня и мне очень-очень сильно нужна помощь того кто разбирается в триггерах в World Editor. Я только начал работать с триггерами но столкнулся с рядом проблем и я не справлюсь без опытного мапера.
Вопрос 1. Как с помощью триггеров сделать анимацию снаряда? Например: я хочу сделать триггерную способность. Я создал нестандартную способность использовав "Пламя обречения" (эффекты способности остались те же), способность наносит урон противнику но я создал триггер который исцеляет меня ровно столько же сколько противник получает урон с таким же интервалом (каждую секунду противник получает по 100 ед. урона в течении 3 сек., и триггер восстанавливает каждую секунду по 100 ед. здоровья в течении 3 сек), получился самодельный эффект активного вампиризма, но мне нужно сделать так, чтобы каждую секунду в течении 3 сек. от из моего героя выходил снаряд "Лик смерти" который полетит к противнику. Сложно объяснить :(, в общем как сделать так чтобы анимация снаряда "Лик смерти" вылетал из моего героя к герою противника? Как я понимаю лик смерти должен быть дамми юнитом?
Вопрос 2. Как с помощью триггера изменить файл модели? Я хочу создать триггерную способность по этому механизму: Иллидан начиная применять способность "Огненное дыхание (пивовар)", меняет свой облик на Иллидан-демон (метаморфоза). А после применения способности "Огненное дыхание", Иллидан возвращается в первый облик.
Вопрос 3. Как сделать способность типа рывка но наводящуюся на цель? Герой использует "рывок" на противника, против оглушается и герой совершает рывок к противнику.
Вопрос 4. Объясните мне, пожалуйста, как заставить юнита совершить действие с помощью триггера? Например: Заставить героя применить способность; Заставить героя идти в указанную область; Заставить героя атаковать выбранного юнита; (Можно ли отменить эти действия созданные триггером?)
Вопрос 5. Как сделать массовую способность "Гнев Деревьев" которая работает по области и вообще, как сделать способности наводящиеся на цель на способность которая работает по области сохраняя свои эффекты. Я хотел понять как сделать так чтобы наводя способность-пустышку на область, на всех противников в области применялась способность "Гнев Деревьев"? Способность должна работать как 1-ая способность Меппоря из Доты. Пробовал создать способность-пустышку огненный столб, но не получалось с помощью триггеров сделать так чтобы на всех применялся "Гнев Деревьев"
Вопрос 6. Как с помощью триггеров открыть поле видимости врага? (Герой применяет способность на противника, мой герой видит где находится мой противник где-бы он ни был) Способность должна работать как "Трэк" (ульта) Баунти Хантера из Доты. Пробовал применить способность "Сторожевая сова" (у охотниц) эффект длился вечно, а мне нужна временная видимость.
Вопрос 7 Мой самый главный вопрос! Как с помощью триггеров увеличивать или уменьшать силу атаки/ броню/ скорость атаки/ противника? Я пробовал так: с помощью триггера добавлял способность "Доспехи веры" и сразу же скрывал иконку этой способности триггером "Заблокировать", но как в это же время уменьшить броню противника?
Вопрос 8 Как с помощью триггера сделать так чтобы героя нельзя было выбрать? Триггер должен работать как ульта Морлока из Доты? Нужно сделать так чтобы героя нельзя было кликнуть.
Вопрос 9 Как с помощью триггера сделать так, чтобы герой применяя способность перемещался очень быстро меняя свой файл и его в это же время нельзя было выбрать? Эта способность должна работать как Ульта Шторм Спирита из Доты, но при этом не расходовать ману и не наносить урон. Я уточню: Герой применяет способность в указанное место, герой становится неуязвимым, героя нельзя выбрать (кликнуть), герой меняет файл модели, герой перемещается в указанную область со скоростью 350?
Вопрос 10 Как триггерно наносить урон по области при этом не нанося урон себе и союзникам? Эта способность должна работать как 1-ая способность Омника из Доты. Герой применяет способность на указанного юнита, после применения способности, все противники в радиусе 300 от указанной цели получают урон. Прошу помочь.
Читайте также: