Грамотное создание и управление системой заданий (с проверками):
Предисловие: Прежде всего, хочу сказать о том, откуда брался материал. В этом мне помогла карта Blizzard-ов. Официальная кампания Орды из Regin of Chaos. Самая первая миссия. Я ее выложу как пример. Если внимательно посмотреть в систему триггеров других официальных карт кампании warcraftа, то там вы увидите ровно тоже самое, что я сейчас вам предложу. Поэтому и посему, приятного чтения! Разберемся с переменными: Давайте решим, какие, и для чего, нам нужны переменные. Поскольку, задания – это своего рода проверка выполнения событий, то и переменные должны быть как-то связаны с событиями, а следовательно логического типа (true/false). Давайте создадим несколько переменных:
Code
QuestCreated (лог.) – переменная, которая будет отвечать за создание квеста.
NewQuest (лог.) – переменная типа "квест". Это ваш какой-то квест.
GameOver (лог.) – переменная, которая будет отвечать за конец игры.
1. Вот, с переменными мы справились, теперь приступим к подготовке самой системы. Начнем с первой ступени: создадим триггер, который будет проверять наличие квеста: если нет, то создавать его. И после этого помещать созданный квест в переменную - NewQuest: Триггер QuestCreate:
Code
События:
Условия:
--- QuestCreated равно Нет
Действия:
--- Set QuestCreated = Да
--- Задание - Create a Основное, не получено quest titled ... ()
--- Set NewQuest = (Last created quest)
--- Задание - Create a quest requirement for (Last created quest) with description...
2. А теперь создадим триггер отвечающий, за открытие квеста. В нем будут происходить следующие действия: запускать предыдущий триггер, проверяя все условия, помечать наш квест NewQuest как полученное задание, а так же выводить на дисплей информацию о том, что задание получено. Это делается следующими тремя строками:
Триггер Quest Discover:
Code
События:
Условия:
Действия: --- Триггер - Run QuestCreate <gen> (checking conditions) --- Задание - Mark NewQuest as Получено --- Задание - Display to (All players) the Задание получено message: ЗАДАНИЕ ПОЛУЧЕНО: ...
3. Создаем последний триггер, отвечающий за успешное завершение квеста. Здесь все построено на подобии предыдущего триггера. Запускается первый триггер, проверяющий наличие задания. После этого помечается, как выполненный, и отображается для всех игроков, что задание выполнено.
Quest Complete:
Code
События:
Условия:
Действия: --- Триггер - Run QuestCreate <gen> (checking conditions) --- Задание - Mark [ NewQuest ] as Выполненно --- Задание - Display to (All Players) the Задание выполненно message: ЗАДАНИЕ ВЫПОЛНЕННО: ...
4. Ну вот. Основные триггеры для работы с квестами мы получили. В принципе, это не самая сложная система. Видали, как говориться, и посложней. Теперь давайте разберемся с добавлением. А именно: предположим, что в нашей RPG, на карте есть герой, который не должен погибнуть! Что мы должны сделать, чтобы задать это условие в коде. Первое, решим, что будет, если герой все-таки погиб: тогда у нас запустится триггер, который проверит состояние героя на гибель, проверит переменную, отвечающую за конец игры (значение которой должно быть к тому моменту сравнительно с «нет»), и завершит игру с надписью: «Вы проиграли!». Вот, с общим понятием разобрались. Что же нужно сделать? Создадим первый триггер, который отображает на экран игроку сообщение, гласящее проигрыш.
MissionFailed
Code
События:
Условия:
Действия: --- Задание - Display to (All Players) the ЗАДАНИЕ ПРОВАЛЕНО: ... message: Задание провалено
5. Ну вот, а теперь начнем работу с триггером, проверяющим состояние героя.
DefeatHero
Code
События: --- Боевая единица - A unit owned by Игрок 1 (красный) умирает
Условия: --- (Dying unit) равно Hero --- GameOver равно Нет
Действия: --- Триггер - Turn off (This trigger) --- Set GameOver = Да --- Триггер - Run MissionFailed <gen> (cheking conditions) --- Wait 2.00 seconds --- Игра - Defeat Игрок 1 (красный) with the message: Вы проиграли
6. (эпилог)
А теперь скажу парочку слов об использовании. Дело в том, что эта система хорошо себя показывает в больших картах, где много заданий. Так как когда вы начинаете работать, вы можете инициализировать несколько квестов сразу в одной папке, а после чего постепенно разбрасывать их выполнения/проигрыши по другим триггерам, отвечающим за какие-то определенные события в игре. Эта система работает и в обычных – небольших картах, типа RPG, где мало заданий. Ну, вообще, я думаю это все, что я хотел рассказать.