Среда, 27.11.2024, 20:38 Приветствую Вас Прохожий
Меню сайта

Наш опрос
Хотели бы вы вступить к нам?
Всего ответов: 15

Статистика
Рейтинг@Mail.ru Яндекс цитирования

[ Кто нас сегодня посетил ]

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: ДУХ  
Разработка индивидуального квеста
UchiHaДата: Вторник, 03.08.2010, 14:25 | Сообщение # 1
Салага
Группа: GTR-Team
Сообщений: 2
Репутация: 0
Статус: Offline
Разработка индивидуального квеста
Для разработки квеста требуется выполнить следующие пункты:
1. Вставить ссылку на свою ветку диалога в файле character_desc_....xml, содержащем параметры неписей. Но мы развим уже существующую ветку;
2. Построить структуру ветки диалога в файле dialogs_....xml;
3. Добавить инфопоршни в одном из подходящих файлов xml: первый инфопоршн будет выдавать нам квест на КПК; а второй - отчёт о его выполнении;
4. Структурировать квест в файле tasks_....xml;
5. Написать скрипт, который должен иметь необходимые для квеста функции;
6. Придумать и напечатать тексты к своей ветке диалога.

Эта статья будет интересной только для новичков!

Приступим к практике
В каждом пункте сначала освоим теорию, а затем перейдём к практике. Думаю, что этакий метод хорошо поможет закрепить новичкам знания, необходимые для модостроения.
1. Зайдём в gamedata\config\gameplay\character_desc_bar.xml и рассмотрим подтэг <specific_character id="bar_barman" no_random = "1"> тэга <xml> (в самом верху). Внизу, под закрывающей части тэга соплей (</supplies> - для тех, кто не понимает такой юмор) есть перечень <start_dialog> и <actor_dialog> - это стартеры веток диалога, структуры которых сформированы в файле dialogs_bar.xml. Но, как мы договаривались, дополним уже существующую ветку своими фразами, а дальше - квестом.

2. Идём в файл dialogs_bar.xml и правим там ветку <dialog id="bar_bar_visitors_14_start">; Эта ветка используется при разговоре с Лысым в баре.
Теперь представлю, какие фразы будут входить в диалог для нашего примера:
1. Лысый
Чего тебе?
2. Меченый
Можешь рассказать что-нибудь полезное для новичка?
Есть на примете задание? -- идём по второй ветке, которую и создадим.
Ты не представляешь где я был и что я там видел! --смотри пункт 8
3. Лысый
Есть одно лишь. Гляди!
4. Меченый
Достать кристалльную колючку.
5. Лысый
За границей зоны отчуждения анонимный учёный изучает молекулярное строение кристаллической решётки артефактов и всё остальное, что чуждо внешнему миру. Но записи о свойствах кристалльной колючки внезапно пропали и ему снова придётся провести научное исследование. Он обратился ко мне с просьбой раздобыть для него этот артефакт, но мне как-то влом идти и выполнять такое маленькое поручение.\nЕсли можешь, раздобудь этот артефакт и принеси его ко мне. (Кристалльную колючку можно найти на дикой территории у трупа Гордона в подземной стоянке). За раздобытый артефакт с меня причитаются деньги.
6. Меченый
Я пойду и добуду для тебя кристалльную колючку. --в этом случае игрок получает задание и диалог прерывается
Нет, отказываюсь. У меня есть дела по-важнее. --в этом случае появляется текст ниже
7. Лысый
Смотри, время не дремлет. Пока будешь менжоваться уже за тебя могут выполнить эту несложную работенку и получить неплохие деньги. --переход в сектор, с которого начался диалог
8. Меченый
Ох, не уж то ты его раздобыл. Учёный будет в восторге... Ну, ладно, а вот и оплата, как договаривались. --отдаем артефакт и получаем деньги.

Для формирования структуры ветки необходимо знать следующие функции, выполняемые в xml-файлах:
1.
<phrase id="числовой идентификатор"> - сектор, внутри которого забивается отдельная фраза, условия при переходе на этот сектор и действия. Каждый такой сектор должен иметь уникальный индекс - номер, по которому должны обращаться сектора извне не за пределами основания ветки. Диалог всегда начинается с сектора под индексом 0;
2. <text> - ссылка на выдаваемый на дисплей текст. По умолчанию, тексты печатаются в gamedata\config\text; В X-Ray предусмотрено 2 лица, участвующих в диалоге, поэтому сектора phrase id раздаются последовательно: первый - ГГ; второй - npc; и т. д;
3. <next> - ссылка на следующую фразу по указанному индексу. Если ссылка определена в секторе, принадлежащем неписю, то игроку предоставится ответить фразой, которая находится в секторе с соответствующим индексом;
4. <has_info> - условие, активирующее сектор с текстом, если указанный инфопоршн имеется у ГГ. В противном случае сектор будет недоступен;
5. <dont_has_info> - условие, противоположное <has_info>, активирующее сектор с текстом, если указанного инфопоршня нет у ГГ. В противном случае сектор будет недоступен;
6. <give_info> - выдача указанного инфопоршня ГГ. Инфопоршн - это информационный ключ, активизирующий тэги в xml-файлах там, где выполняется условие на наличие этого ключа; Играет большую роль в квестах;
7. <precondition> - скриптовое условие. Если функция возвращает значение true, то сектор становится доступным. Условие записывается в таком формате: <precondition>скрипт-файл без расширения.имя функции</precondition>;
8. <action> - выполнение указанной функции. Выполнение записывается в таком формате: <action>скрипт-файл без расширения.имя функции</action>;

Для начала, представьте себе родник с вытекающей рекой, которая впадает в устье и разветвляется на несколько рукавов; Аналогично устроены и ветки диалога. В нашем случае <dialog id> представили в виде родника, <phrase id> в виде реки, а <next'ы> в виде устья, где река разветвляется на несколько рукавов <phrase id>.
Нижеизложенный скрипт можно вставить где угодно, но не за пределами подтэгов <phrase_list> и </phrase_list> тэгов <dialog id="bar_bar_visitors_14_start"> и </dialog>.


Обратите внимание, что сектор с индексом 71 уже существует, поэтому в этот сектор стоит лишь дописать недостающую строку <next>712</next>. Как написано выше, диалог начинается с нуля, но в том секторе выполняются другие условия, поэтому текст перенесён в другой сектор.

3. Структура ветки для нашего квеста сформирована, теперь нужно объявить ещё несуществующий инфопоршн "bar_lisiy_find_art_start", который мы придумали в предыдущем пункте, и инфопоршн, при наличии которого задание будет считаться выполненным. Заходим в info_l07rostok.xml или другой удобный для вас файл с инфопоршнями. Как видно, инфопоршни перечисляются в тэге <game_information_portions>; Объявляются они в следующем виде: <info_portion id="строковая переменная"></info_portion>, а задания - <task>указатель задания</task> (сами задания объявляются в другом файле), которые указываются внутри инфопоршней. Вообще всю эту систему можно представить в виде матрёшек, в нашем случае тэг - матрёшка, внутри которой - другие матрёшки; Так вот, на примере, внешней матрёшкой будет инфопоршн, а внутренней - указатель на задание. Забьём свои инофопоршни в перечень уже существующих.

4. Идём в файл tasks_bar.xml и мы увидим структуру квестов; По такой же структуре нам придётся и свой квест построить. Следует отметить, что квест считается выполненным лишь тогда, когда ГГ получает инфопоршн, указанный в <infoportion_complete>указатель на инфопоршн</infoportion_complete> или в случае возвращения функцией значение true в скрипте, указанных в <function_complete>скрипт-файл.функция</function_complete>. Квест будет включать 2 задания: первое выполнится, когда игрок подберёт нужный артефакт, позже для этого мы создадим функцию, которая будет отслеживать наличие артефакта в инвентаре ГГ, только договоримся, что эту функцию мы напишем в файле agroprom_tasks.script; второе - когда артефакт будет доставлен работодателю. Ну, думаю, что с остальным вы сами разберётесь. А теперь напишем квест следующим образом:

5. Как выше написано, мы напишем функцию в gamedata\scripts\agroprom_tasks.script. Во время игры скрипт в этом файле исполняется циклически, как и в некоторых других. Реализовать выполнение одного из задуманных заданий можно с помощью условных операторов if (если) и then (то), а осматривать ГГ на наличие кристалльной колючки мы будем с помощью оператора actor:object("интересующий нас предмет"). Заходим в файл agroprom_tasks.script и добавляем свою функцию где-нибудь после строк function proceed() и local actor = db.actor, её название мы тоже определили, когда структурировали сам квест.


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

При доставке кристалльной колючки Лысому, ГГ должен получить вознаграждение. Давайте зайдём в файл bar_dialogs.script и там пропишем определённую в ветке диалога функцию bar_lisiy_find_art_reward. При вознаграждении в процессе ведения диалога ГГ с неписем, участвуют 2 лица, которые мы должны указать в аргументах данной функции, иначе вылетем нафиг из игры. Давайте присвоим по аргументу неписю и ГГ; В данном случае npc достанется аргумент first_speaker, а ГГ - second_speaker, т. к. игрок говорит вторым, его нужно писать после npc через запятую; Передачу артефакта и денег осуществим с помощью операторов dialogs.relocate_item_section(лицо, "предмет", прием/передача) и dialogs.relocate_money(лицо, число денег, прием/передача).


6. На последнем этапе мы напишем тексты к диалогу и квесту, за исключением текста "Чего тебе?", т. к. он уже существует. По умолчанию, все используемые тексты содержатся в gamedata\config\text\rus. Идём туда и открываем файл stable_dialogs_bar.xml, там содержатся все фразы в локации бара. Где-нибудь внутри <string_table> дополняем перечень своими фразами.

Для соблюдения чистоты и порядка в файлах, хотя, что уже об этом задумываться, если даже ГСЦ оставил после себя хлам в папках, что чёрт ногу сломит, напечатаем тексты к квесту в другом файле: а именно - string_table_tasks_bar.xml.



---Сообщение отредактировал UchiHa - Вторник, 03.08.2010, 16:22---
 
  • Страница 1 из 1
  • 1
Поиск:

Поиск

Календарь

Банерообмен
S.T.A.L.K.E.R, патчи, моды


World Of S.T.A.L.K.E.R.
MpNot-Standard
[Хотите чтоб ваш банер был здесь?]

Дизайнер Лукаш. Распространение дизайна без ведомства дизайнера карается законом.Хотите себе персональный дизайн обращайтесь по ICQ 582-761-восемьсот восемдесят
MEGA-Top - ТОП рейтинг лучших сайтов Топ100- Игры
Rambler's Top100