Главная | Регистрация | Вход Приветствую Вас Груз с грузовика смерти | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Urban_Hunter  
Создание квестов
Urban_HunterДата: Четверг, 21.08.2008, 20:53 | Сообщение # 1
Лидер ДОЛГа
Группа: Модераторы
Сообщений: 67
Репутация: 3
Статус:
Создание квестов

Создание квестов и диалогов
Создание базового диалога

Итак, приступим к созданию диалога, в котором нам будет выдаваться новый квест. Участвующие лица: Сидорович (С) и Меченый (М)

М: Здравствуй, Сидорыч! Есть работенка?

С: О, неужели заглянул к нам на огонек, Меченый? Ладно... ближе к телу... эээ, к делу. У меня к тебе следующая просьба: сбегай к Волку, у него что-то намечалось.

М: Без проблем! Уже бегу.

Будем считать, определились с фразами базового диалога. Теперь необходимо добавить его в соответствующем виде, чтобы игре он был «понятен».

Создание «скелета» диалога.

Для того, чтобы добавить наш диалог, необходимо открыть для редактирования файл gamedata\config\gameplay\dialogs_escape.xml

Для тех, кто знаком с языком XML структура данного файла будет ясна с первого взгляда. Но, поподробнее об этом.

Для того, чтобы добавить в игру диалог предусмотрены так называемые тэги. В данном случае, тэгами являются такие конструкции:

1. и закрывающий к нему -

2.

закрывающий -

3. -

4. -

5.

6.

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

Поясню, что обозначает каждый тэг в отдельности.

1. Определяет содержимое файла (в данном случае, говорит о том, что файл содержит диалоги);

2. Определяет новый диалог с id = "". Где содержимое кавычек есть идентификатор диалога. Идентификатор диалога задается в файлах типа character_description_***.xml ;

3. Этот тэг говорит XML-парсеру игры о том, что далее следуют фразы диалога. Иными словами, между и содержатся фразы диалога;

4. Этот тэг определяет фразу с id = "". Внутри кавычек содержится идентификатор фразы (ВНИМАНИЕ: идентификатором в данном случае могут быть ТОЛЬКО цифры);

5. Внутри этих двух тэгов содержится ссылка на соответствующий данной фразе текст (пример, esc_trader_talk_info_123). Сам текст берется из файлов типа stable_dialogs_*****.xml, в котором содержатся все фразы в текстовом виде. О создании текста фразы поговорим позже;

6. Внутри этого тэга содержится ссылка (в числовом формате) на следующую (или следующие) фразы.

Теперь приступим к тэгам, позволяющим производить какие-то действия во время диалога.

. Представляет собой предусловие, в случае выполнения которого (то есть предусловие вернуло ИСТИНУ) данный диалог, или фраза будут появляться в списке доступных во время игры у NPC.

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

. Позволяет выдавать игроку во время диалога так называемые info_portion'ы (кстати, инфопоршны можно выдавать так же и через , только это потребует создания специальной функции). info_portion – является основой для квестов, info_portion’ы определяются в файлах типа info****.xml. Инфопоршны могут, как начинать квест, так и заканчивать (завершать) его. Так же, с помощью инфопоршнов можно отслеживать действия игрока, для того, чтобы, например, вывести в нужное время диалог. и являются предусловиями для текущей фразы/диалога. Первый тэг проверяет наличие данного инфопоршна у игрока, второй – отсутствие.

Ну что, теперь мы можем создать диалог, в котором нам будет выдаваться квест. Но мы не создали самих info_portion'оф, которые позволяет активировать квест.
Создание info_portion'ов

Итак, открываем файл gamedata\config\gameplay\ info_l01escape.xml. Что мы там видим? Правильно, все ту же структуру XML. В данном файле нас интересуют только два тэга:

Первый объявляет сам info_portion. Второй – объявляет задание (идентификатор задания id содержится внутри тэга )

Для примера, создадим 3 info_portion, которые понадобятся нам для будущего квеста:

new_task

Это инфопоршн с именем new_task_started. Он активирует квест с именем new_task.




Создание нового квеста

Сами квесты содержаться в файлах типа tasks_*****.xml

Откроем файл gamedata\config\gameplay\tasks_escape.xml. Структура – все тот же XML.

Для примера исследуем уже существующий квест:

esc_help_wounded_from_raid

esc_help_wounded_from_raid_0
ui_iconsTotal_esc_help_wounded_from_raid
escape_tasks.task_fox_complete
garbage_meetstalker_start

esc_fox_help



esc_help_wounded_from_raid_1
green_location
Escape_stalker_from_raid
escape_fox_heal
esc_dogs_return


esc_help_wounded_from_raid_2
green_location
Escape_stalker_from_raid
escape_stalker_done

По кусочкам:

Задает имя (id) нового квеста. В данном случае, esc_help_wounded_from_raid. prio = "" задает приоритет задачи. Чем выше приоритет, тем больше вероятность того, что текущий маркер квеста будет переключен на ваше задание.
esc_help_wounded_from_raid

Задает заголовок квеста. Т. е. его название. Название можно прописать в виде текста, либо в виде ссылки. В данном случае используется ссылка на текст, который хранится в файле string_table_tasks_escape.xml.
escape_tasks.task_fox_complete

Вызывает функцию из файла escape_tasks.script под именем task_fox_complete. При выполнении данной функции дается info_portion, который завершает данную подзадачу, в случае, если все условия функции соблюдаются.
escape_fox_heal

Текущее подзадание будет завершено в случае, если игроку будет дан этот info_portion.
esc_dogs_return

Текущее подзадание будет провалено в случае, если игроку будет дан этот info_portion.
green_location

Создает указатель на карте с подсказкой esc_fox и типом green_location.
Escape_stalker_from_raid

Указывает на sid из файла gamedata\config\game_story_ids.ltx
garbage_meetstalker_start

Автоматически устанавливает данную подзадачу в положение «Выполнено», если у игрока есть данный info_portion. //!!!!!!Не уверен – не пользовался не разу.
esc_help_wounded_from_raid_0

Содержит описание подзадачи. Может содержать внутри как текст, так и ссылку на текст.

Создадим задание, которое потребуется нам для диалога:

Поговорить с Волком

Вернуться к Сидорычу
blue_location
Escape_Trader
player_complete_new_task


Поговорить с Волком
ui_iconsTotal_find_item
green_location
Escape_novice_lager_volk
player_talked_with_wolf


Вернуться к Сидорычу
blue_location
Escape_Trader
player_complete_new_task

Здесь же необходимо обязательно указать ссылку на иконку из файла ui_iconstotal, иначе при попытке заглянуть в раздел "Задания" в ПДА при взятии квеста будет происходить вылет. Для примера я проставил иконку поиска предмета.

Теперь создадим скелеты диалогов для нашего квеста. Потребуется три: один для Волка и два для Сидорыча.


new_task_started
player_talked_with_wolf
player_complete_new_task


esc_volk_new_quest_0
1


esc_volk_new_quest_1
player_talked_with_wolf
2


esc_volk_new_quest_2
dialogs.break_dialog






player_complete_new_task
player_talked_with_wolf


esc_trader_new_quest_0
1


esc_trader_new_quest_1
new_task_started
2


esc_trader_new_quest_2
dialogs.break_dialog






player_complete_new_task


esc_trader_new_quest_complete_0
1


esc_trader_new_quest_complete_1
player_complete_new_task
2


esc_trader_new_quest_complete_2
dialogs.break_dialog


Все «скелеты» добавляем в файл dialogs_escape.xml. Между и

!

Внимательно следите за правильностью написания тэгов и ОДИНАКОВЫМ написанием идентификаций - как в файле с вашим новым диалогом, так и во всех других файлах, где используются тэги или ваши идентификации(например, идентификации фраз в файле с диалогом должны быть такими же, как и идентификации этих же фраз в файле с текстом). Иначе кроме серии вылетов с не всем понятными логами вы ничего не получите. У меня самого были проблемы при попытке активировать квест, выложеный в этой статье, так что пришлось кое-что поправить - и в тэгах, и в идентификаторах.

Примечание: посмотрите на уже готовые диалоги, которые создали разработчики игры – это облегчит вам жизнь.

Теперь бежим в файл character_desc_escape.xml

Ищем там NPC с id = "escape_trader" и добавляем два новых :
esc_trader_new_quest_complete
esc_trader_new_quest

Там же ищем NPC с id = "esc_wolf" и добавляем один актор_диалог:
volk_new_quest

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

Осталось только добавить текст трех диалогов, чтобы наш квест стал полноценным. Открываем файл stable_dialogs_escape.xml и добавляем в него новый текст в таком виде:

Все, я выполнил поручение Волка!


Молодец, Меченый. На тебя можно положиться.


Рад был помочь, Сидорыч.


Здравствуй, Сидорыч! Есть работенка?


О, неужели заглянул к нам на огонек, Меченый? Ладно… ближе к телу… эээ, к делу. У меня к тебе следующая
просьба: сбегай к Волку, у него что-то намечалось.



Без проблем! Уже бегу.


Здорово, Волк. Меня тут Сидорыч послал, говорит у тебя работа есть.


Привет, Меченый. Верь ты ему больше, этому старому маразматику! Все спокойно сейчас. Так что иди к нему и
скажи, что все хорошо.



Все, ухожу.

Все! Поздравляю! Вы только что написали новый квест.


 
RezakДата: Воскресенье, 24.08.2008, 00:27 | Сообщение # 2
Новичёк
Группа: Модераторы
Сообщений: 44
Репутация: 2
Статус:
Urban_Hunter, Я не умею создовать квесты но могу дать идею!

Подходи пообщаемся!
 
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2024
Используются технологии uCoz