Создание сложных квестов и диалогов для S.T.A.L.K.E.R.
Новые файлы:
[29.06.2013] S.T.A.L.K.E.R: Тени Чернобыля.... (0)
[29.06.2013] Mafia Russian Cars (2013/Rus) (0)
[27.06.2013] S.T.A.L.K.E.R.: Oblivion Lost ... (0)
[27.06.2013] S.T.A.L.K.E.R.: Oblivion Lost ... (0)
[26.06.2013] Chernobyl 3: Underground (Rus/... (0)
[26.11.2012] S.T.A.L.K.E.R.: Зона поражения... (0)
[25.11.2012] S.T.A.L.K.E.R.: Тени Чернобыля... (0)
[21.08.2011] UGM История Угрюмого (584)
[21.08.2011] LTL 2.0 mod (982)
Новые статьи:
[01.07.2016] Блогун (111)
[11.06.2016] Что такое лифт подвески и кузо... (156)
[05.10.2015] Ремонт и заправка автокондицио... (331)
[14.02.2015] ОС Android 4.4.2 на ПК (551)
[15.01.2015] Популярная библиотека химическ... (301)
[15.01.2015] Viking Botovod Pro 3.5.9 (383)
[15.01.2015] Снимаем триальную защиту с про... (476)
[21.11.2014] Portable SolSuite Solitaire (325)
[20.07.2014] Offline Explorer Enterprise Po... (510)
Форма входа:
[ Вход ] [ Регистрация ]
Главная Файлы Форум Статьи Инфо Галерея

Меню
Категории
Мини чат
Опрос
Статистика
Портал истинного сталкера

Главная » Статьи » Модостроение
[ Добавить материал ]
[ ] 16.02.2009, 14:56
Автор:
Эдуард Клишин

Начнем, пожалуй, с написания разветвленных диалогов. Запустите «Блокнот» и подгрузите в него файл character_desc_escape.xml, который проживает в директории gamedata\config\gameplay\ установленной игры (прим. — все архивы «Сталкера» должны быть «распечатаны»). Данный документ, по сути, содержит множество ссылок на определенные ветви диалогов, т.е. фактически служит лишь для объявления или инициализации разговорных блоков, но не более того. Давайте вживим в тело данного файла ссылку на новый диалог с торговцем — Сидоровичем (впрочем, никто не мешает вам создать новых персонажей, например канонического Ктулху, и закрепить за ними определенные диалоги). Для этого выполните следующие действия. Отыщите строку <actor_dialog>escape_trader_done_blockpost_box</actor_dialog> (прим. — меню поиска в «Блокноте» активируется при помощи горячих клавиш Ctrl + F, если кто не знает)
и сразу же после нее (с новой строки) поместите следующую конструкцию:
<actor_dialog>escape_trader_igromania</actor_dialog>
Где escape_trader_igromania — название будущего диалога.
Инициализация произведена. Двигаемся дальше — приступаем к внедрению кода диалога в файл dialogs_escape.xml из каталога gamedata\config\gameplay\ игры, в котором прописаны практически все игровые тексты в общем виде. Итак. Откройте «Блокнотом» файл dialogs_escape.xml и добавьте в конец документа — перед ключевым словом </game_dialogs> следующий блок:
<dialog id=«escape_trader_igromania»>
<precondition>escape_dialog.trader_alredy_give_job</precondition>
<has_info>tutorial_end</has_info>
<phrase_list>
<phrase id=«0»>
<text>escape_trader_ igromania0 </text>
<next>1</next>
</phrase>
<phrase id=«1»>
<text>escape_ trader_ igromania1 </text>
<next>2</next>
</phrase>
<phrase id=«2»>
<text>escape_ trader_ igromania2</text>
<next>3</next>
</phrase>
<phrase id=«3»>
<text>escape_ trader_ igromania3 </text>
</phrase>
</phrase_list>
</dialog>
Давайте рассмотрим структуру данного диалога. В первой строке блока указывается название диалога, соответствующее определенной записи в файле character_desc_escape.xml. В нашем случае — это escape_trader_igromania. Последующие две строки отвечают за так называемое предварительное условие (precondition) и специальную информационную справку. Тег <phrase_list> открывает огромный список фраз диалога, а </phrase_list>, соответственно, его замыкает. Между ними, как мы уже сказали, размещаются различные реплики в общем виде. Каждая новая запись состоит из трех ключевых строк, содержащих так называемые теги phrase id, text и next. В первой из них указывается специальный идентификационный номер, указывающий на номер реплики. Нумерация начинается с нуля. Т.е., скажем, для первой записи значение параметра phrase id = «0», для второй — «1» и так далее. Во второй строке между тегами <text> и </text> содержится ключевое слово или «ключворд», которое представляет собой название строки — сам же текст вбивается в документ gamedata\config\text\rus\stable_dialogs_escape.xml.
Ну и, наконец, между тегами <next> и </next> помещается номер следующего узла или реплики. Таким образом, зная структуру диалогов, вы можете конструировать блоки, состоящие из 10, 100, 1000 записей. Лимит не установлен. <hr>

Полдела сделано. Осталось лишь насадить на сформированный каркас полноценные текстовые реплики NPC — не ключевые слова, не ссылки, а саму «начинку» в духе: «Эээй, Меченый...! Водки, водки давай... И побыстрее там, сколько уже можно ждать». Первым делом откройте «Блокнотом» файл stable_dialogs_escape.xml из директории gamedata\config\text\rus\ с установленной игрой и внедрите в конец документа перед тегом </string_table> следующую конструкцию:
<string id=«escape_ trader_ igromania_0»>
<text>Слушай, Сидорович, есть у тебя какая-нибудь интересная работенка для меня? Что-нибудь экзотическое. Понимаешь, о чем я? Надоели убийства, надоели ограбления... Скукотища...</text>
</string>
<string id=«escape_trader_ igromania_1 «>
<text> Ну, Меченый, повеселил ты меня. Давно я такого бреда не слышал. Ну, иди, иди и найди снежного человека, поговори с Ктулху...</text>
</string>
<string id=«escape_trader_ igromania_2»>
<text>Ктулху, говоришь?! А может быть, он есть, на самом деле есть. Ты об этом не думал. Сейчас пойду его поищу, ведь должен же он существовать: в зоне про него тоже немало слышал!</text>
</string>
<string id=«escape_trader_ igromania_3»>
<text>Ну, иди, иди, только вот будь добр — прихвати для меня по пути несколько дельных вещиц — что найдешь: консервы, части местных животин, ценные артефакты. В долгу не останусь. </text>
</string>
Нетрудно заметить, что данный блок почти полностью копирует ранее написанный нами диалог в общем виде, с той лишь разницей, что между тегами <text> и </text> заключены уже не краткие названия строк на английском, а полноценные текстовые реплики на родном русском языке.

Квестострой

Диалог написан, а следовательно — первый этап работы по созданию новой миссии выполнен. Движемся дальше и приступаем к написанию самого задания. Вновь откройте текстовым редактором XML-документ dialogs_escape.xml из каталога gamedata\config\gameplay\ с установленной игрой. Отыщите свой диалог (прим. — если вы действовали согласно нашей инструкции, то проживать он должен в конце документа). И после строки <text>escape_ trader_ igromania2</text> поместите следующий код:
<give_info>igromania_quest</give_info>
Данная команда приведет к старту квеста с незатейливым названием igromania_quest после появления на экране третьей записи диалога (прим. — помните, что отсчет-то ведется с нуля, а не с 1?). Итак, что же мы имеем на данный момент? Диалог есть, ссылка на квест есть, самого квеста... нету. Надо срочно эту проблему решить. Что ж, приступим. Подгрузите в «Блокнот» файл tasks_escape.xml из каталога gamedata\config\gameplay\ со «Сталкером» и вставьте в самое начало документа следующую конструкцию:
<game_task id=«igromania_quest»>
<title>Типично русский квест </title>
<objective>
<text>Поговорить с Ктулху </text>
<icon>ui_iconsTotal_storyline_eliminate_gunslinger </icon>
<infoportion_complete> igromania_quest_done</infoportion_complete> </objective>
<objective>
<text>Раздобыть ценные артефакты и просто полезные в хозяйстве вещицы</text>
<map_location_type hint=«esc_fox»>green_location</map_location_type>
<object_story_id> Escape_Tutorial_Artefact </object_story_id>
<infoportion_complete>igromania_quest_done </infoportion_complete>
</objective>
<objective>
<text>Встретиться со снежным человеком =)</text>
<map_location_type hint=«escape_trader»>blue_location</map_location_type>
<object_story_id> Escape_stalker_from_raid</object_story_id>
<infoportion_complete> igromania_quest_done</infoportion_complete>
</objective>
</game_task>

Так, давайте посмотрим, что здесь к чему. Параметр, точнее говоря, тег с ключевым словом game_task id отвечает за идентификационный номер (правда, текстовый, а не цифровой) или название миссии. Между тегами <title> </title> проживает заголовок задания на русском, в нашем случае — Типично русский квест. Далее в пределах от элемента <text> до </text> содержится краткий текст квеста на чистейшем русском языке. Между тегами <icon> и </icon> задается определенный тип маркера или иконки, который будет отображаться на карте местности, в нашем примере — ui_iconsTotal_storyline_eliminate_gunslinger. В теле тега <infoportion_complete> проживает ссылка на определенную запись в файле gamedata\config\gameplay\info_l01escape.xml с текстом условия. Тег типа <map_location_type hint> включает в себя информацию о графической подсказке на радаре, а <object_story_id> — о квестовом объекте. Вот, в принципе, и все. Что? Зачем мы вживили в тело миссии несколько <objective>-блоков? Все просто. Три части задания, три независимых группы — Поговорить с Ктулху, сгонять за артефактами и встретиться со снежным человеком.
С созданием квестовой основы покончено. Следующий шаг — обозначение целей и прописывание экранных подсказок. Передохнули, сил набрались? Тогда снова в бой! В очередной раз вооружитесь «Блокнотом». Откройте файл info_l01escape.xml из папки gamedata\config\gameplay\ со S.T.A.L.K.E.R., отыщите в нем тег <game_information_portions> и после него поместите следующую незатейливую конструкцию:
<info_portion id=«igromania_quest_done»></info_portion>
<info_portion id=«ktulxu_start_igro «>
<task>igromania_quest </task>
</info_portion>
<info_portion id=«no_ktulxu_no»></info_portion>
Если внимательно приглядеться, то несложно обнаружить, что в теле каждого тега типа info_portion id прописывается определенное условие, название которого было ранее задано в файле tasks_escape.xml. Между тегами <task> и </task> указывается название квеста, для которого обозначаются условия, в нашем случае — igromania_quest. Так, с прописыванием условий разобрались.
Что у нас там дальше по плану? Точно — экранные подсказки. Дабы организовать вывод текстовых подсказок, отображающихся на экране во время выполнения квеста, проделайте следующие действия.
Откройте файл string_table_tasks_escape.xml из директории gamedata\config\text\rus\ с игрой и скопируйте в начало или конец файла следующий текстовый блок:

<string id=«igromania_quest»>
<text>Поговори с Ктулху</text>
</string>
<string id=« igromania_quest_1 «>
<text>Найди полезные предметы и артефакты </text>
</string>
<string id=« igromania_quest_2 «>
<text>Встреться со снежным человеком </text>
</string>

Приведенная выше структура состоит из трех блоков, каждый из которых, в свою очередь, содержит ровно по три строки. В первой строке, которая начинается с «кейворда» string_id, указывается определенное идентификационное имя строки на английском (без пробелов), во второй — между тегами <text> и </text> — начинка, текст подсказки, ну и, наконец, в третьей — тег </string>, который закрывает блок подсказки.
Диалог написан, квест сконструирован, условия прописаны, подсказки обозначены. Казалось бы, самое время — протестировать свежеиспеченную миссию в игре. Но не тут-то было. Мы же с вами не реализовали саму возможность выполнить квест, т.е. фактически не прописали стартер задания в тело диалога. Давайте вернемся к правке диалога и устраним данное недоразумение. Итак. Во-первых, сделайте диалог нелинейным. Для этого первым делом создайте как можно большее число реплик, а затем прикрутите к нужным блокам несколько команд для перехода к новым записям, например:

<phrase id=«13»>
<text>escape_trader_igromania_12</text>
<next>2</next>
<next>4</next>
<next>6</next>
<next>8</next>
Из этого примера отчетливо видно, что игрок может сам сделать выбор — к какому звену диалога перейти: 2,4, 6 или 8. <hr>

После этого встройте в тело конечных «разговорных» блоков ссылки для активации нужных игровых скриптов, скажем:
<phrase id=«18»>
<text>escape_igromania_17</text>
<give_info> igromania_quest_done </give_info>
<action> artifacts_and_obj </action>
<action>give_gold </action>
<next>23</next>
</phrase>
Последние штрихи. Осталось лишь написать скрипты, ответственные за «выписку гонорара» игроку, а также передачу ценного предмета определенному NPC. Откройте файл gamedata\scripts\escape_dialog.script при помощи «Блокнота» и вживите перед ключевым словом Trader следующий функциональный блок, точнее говоря — два блока:


function give_gold(first_speaker, second_speaker)
dialogs.relocate_money(second_speaker, 84000, «in»)
end

function artifacts_and_obj (npc, actor)
dialogs.relocate_item_section (npc, «object», «out») {здесь слово object необходимо заменить названием того элемента, который игрок должен передать шефу, например, vodka или conservi.
end

Первая функция в приведенном примере отвечает за выдачу золотых игроку в сумме 84000, вторая — за изымание ценных артефактов и вещиц у Меченого. <hr>

***
Сегодня мы научились писать сложные квесты для «Сталкера» с чистого листа, а также прошли хорошую школу написания диалогов, экранных подсказок и вникли в тонкости редактирования XML-документов игры. На этом тема редактирования S.T.A.L.K.E.R. не закрыта — мы вернемся к ней в одном из ближайших номеров «Игромании». Ну а пока традиционно прощаемся с вами и желаем удачных модостроительских будней. До скорого!

Категория: Модостроение | Добавил: biohazardhome
Просмотров: 1517 | Загрузок: | Комментарии: 2 | Рейтинг: 5.0/2 |
Всего комментариев: 1
1  
А в какой файл вставлять:

<phrase id=«13»>
<text>escape_trader_igromania_12</text>
<next>2</next>
<next>4</next>
<next>6</next>
<next>8</next>
Из этого примера отчетливо видно, что игрок может сам сделать выбор — к какому звену диалога перейти: 2,4, 6 или 8. <hr>

После этого встройте в тело конечных «разговорных» блоков ссылки для активации нужных игровых скриптов, скажем:
<phrase id=«18»>
<text>escape_igromania_17</text>
<give_info> igromania_quest_done </give_info>
<action> artifacts_and_obj </action>
<action>give_gold </action>
<next>23</next>
</phrase>
faint


Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Авторское право на игру и использованные в ней материалы принадлежат GSC Game World.
Любое использование материалов сайта возможно только с разрешения его администрации
При просмотре сайта мы рекомендуем вам использовать браузер FireFox и Opera.
Наш портал полностью оптимизирован под него.
Сайт управляется системой uCoz
Powered by Biohazard © 2008 - 2009