Пользователей: 0
Гостей: 338
Всего: 338

» Подробно
» Сегодня


Привет, Гость!

Ник


Пароль


Запомнить?




» Добавить в избранное

» Сделать стартовой

Главная
Форум
Обзор игры
Мир Зоны
Файлы
Галерея
Разное






Форумы > S.T.A.L.K.E.R. Тень Чернобыля > Модификации > Квестостроение.

Страница 1 из 212 »
Быстрый переход:


 

Автор Сообщение
KeLeVR@
[1] Banned
Онлайн статус=0  Профиль    




Посты: 662
Откуда: МоскVА
Занятие: Выживать
Возраст: 32

02-02-2008 02:23 GMT3 часа #494521   Split
Многоуважаемые Модостроители и те кто увлекается модмэйкерством, скажи можноли в игру Модом добавить новые квесты? я просто ничего подобного делать не умею и хочу узнать у знающих людей. И если можно, то почему бы не заняться написанием сценариев квестов!?


Web Strikеr
[20] Сталкер
Онлайн статус=0  Профиль    



Я всё вижу...

Посты: 3925
Откуда: Балхаш сити
Занятие: Боевая тактика, Биатлон, Велоспорт
Возраст: 32

05-01-2010
02-02-2008 04:22 GMT3 часа #494557   Split
Ну для рывка давайте обсудим пару статей из журнала Игромания.


Создание типовых квестов

Автор:
Эдуард Клишин


На PDA Меченого поступило очередное задание — найти и уничтожить в глухой чащобе волка-отшельника. Темный-темный лес. Звенящая тишина. Отсутствие видимых признаков жизни. Внезапно Меченый видит на опушке домик, заходит внутрь и встречается с хозяином, который рассказывает главному герою обо всех ужасах, творящихся в здешних местах.

Нет, это не сюжет продолжения «Сталкера», а всего лишь одна дополнительная миссия, разработанная в нашей игрострой-лаборатории. В прошлых статьях по модифицированию «Сталкера» мы изучили интерфейс редактора карт из официального SDK, а также научились конструировать несложные уровни для игры на основе стандартных объектов и новых сцен, изготовленных в 3DS Max. Сегодня мы двинемся дальше — осветим тему написания несложных типовых квестов для игры.

Быстрый старт
Поскольку официальный редактор не позволяет править уровни одиночной игры, а как следствие — редактировать файлы скриптов, путей следования NPC и другие ресурсы, мы будем писать квесты в... обычном «Блокноте». У данного подхода есть всего лишь один минус, который отпугивает большинство модмейкеров, — отсутствие удобной оболочки, редактора для просмотра содержимого файлов просто нет. Зато плюсов куда больше: возможность правки любых параметров, открытые для редактирования исходные коды и многое другое. Игра стоит свеч.

С чего же начать? Первым делом попрактикуемся в создании несложных типовых заданий типа «убить сталкера», «уничтожить лагерь», «найди ценный артефакт».

Запустите «Блокнот» и подгрузите в него файл task_manager.ltx из директории gamedata\config\misc с распакованной игрой (если у вас есть лишь недавно установленная версия «Сталкера», разархивируйте базы данных игры при помощи утилиты S.T.A.L.K.E.R. Data Unpacker).

Файл содержит информацию о простейших игровых заданиях. Структура его следующая. В первой части файла — от оператора
Код:
[list]
до кейворда sar_monolith — объявляются специальные метки, ответственные за подключение новых квестов к игре. Пример одной из таких конструкций — буквосочетание tm_kill_stalker_5, это название типовой миссии. Во второй части файла — после ключевого слова sar_monolith — размещаются тексты заданий: цели, задачи, ссылки на диалоги. Разберем структуру одного из квестов, начинающегося со специальной метки [tm_kill_stalker_3] (обратите внимание, что при объявлении задания в первой части файла квадратные скобки ставить не нужно):
Цитата
[tm_kill_stalker_3]
type = kill_stalker
community = actor
text = tm_kill_stalker_3_text
description = tm_kill_stalker_3_descr
parent = trader
target = sim_stalker_novice
;reward_money = 1000
reward_reputation = -5
reward_rank = 2
reward_item = af_blood
time = 86400
prior = 2

Рассмотрим основные параметры. Самый первый — type — отвечает за тип задания, в данном случае — уничтожить сталкера (kill_stalker). В игре предусмотрено несколько видов стандартных заданий: уничтожение/защита лагеря (параметр eliminate_lager/defend_lager), убийство сталкера (kill_stalker), поиск артефакта/конечности монстра/предмета (artifact/monster_part/find_item).

Поскольку специальных редакторов и утилит для изменения «Сталкера» нет, приходится править скрипты в «Блокноте», а игровые тексты — в табличном редакторе Excel. Не очень удобно, но альтернативы просто нет.

Параметр community определяет группировку, к которой принадлежит главный герой. По умолчанию во всех миссиях в качестве значения данной характеристики используется ключевое слово actor (персонаж).
text — название записи в файле stable_task_manager.xml, содержащей текст задания. Текст отображается в диалогах.
description — запись в файле stable_task_manager.xml. Здесь собран текст миссии, выводимый на PDA Меченого.
Следующая настройка — атрибут parent — определяет имя заказчика, в данном случае trader (торговец Сидорович).
target — цель миссии, в текущем квесте — убийство одного из сталкеров — novice (sim_stalker_novice).
reward_money — награда, которую получит игрок после выполнения задания.
reward_reputation — число очков репутации, добавляемое игроку после прохождения квеста. Вы можете понизить Меченому репутацию за выполнение задания, выставив в качестве значения атрибута любое целое отрицательное число.
reward_rank — количество ранговых очков за выполнение миссии.
reward_item — бонусные предметы, вручаемые главному герою, за прохождение квеста.
time — время (в секундах), в течение которого игрок должен пройти миссию.
prior — приоритет данного задания перед остальными. Цифра 1 ставится в том случае, если задание крайне важно, и далее по нисходящей.

Самое время попрактиковаться и модифицировать какой-нибудь оригинальный игровой квест. Отыщите строку [tm_kill_stalker_5] (для вызова меню поиска в «Блокноте» воспользуйтесь комбинацией горячих клавиш Ctrl+F) и модифицируйте параметры данной миссии. Например, вы можете просто повысить/понизить сложность игры, увеличив или уменьшив время, отведенное игроку на выполнение задания (параметр time), снять значок блокировки строки (символ ;), reward_money (денежное вознаграждение) или, скажем, придать параметру reward_reputation значение ноль, чтобы Меченый не терял репутацию в Зоне.

Текстовый беспредел
С правкой исходного кода миссии мы разобрались. Движемся дальше и приступаем к модификации игровых текстов. Загляните в каталог gamedata\config\text\rus установленной игры, отыщите в директории файл stable_task_manager.xml и откройте его при помощи табличного редактора Microsoft Excel.

После запуска программы вы увидите, что вся информация из XML-файла будет распределена по двум столбцам — A и B, которым соответствуют названия id (идентификационный номер) и text (текст). Если спускаться плавно вниз по столбцу id, то нетрудно установить так называемую закономерность. Строки 3, 6, 9 и далее в арифметической прогрессии содержат заголовок типовой миссии. Строки 4, 7, 10, 13, 16 с окончанием _descr — краткое описание (цель задания), выводимое на PDA главного героя. Ну а строки 5, 8, 11, 14 и далее, заканчивающаяся на _text, содержат текст, отображаемый во время диалога с персонажем, у которого вы получили задание.

Таким образом, для изменения текстов того или иного одноуровневого задания, прописанного в файле task_manager.ltx, вам нужно проделать следующие нехитрые манипуляции. Первым делом скопируйте в «Блокнот» название определенной миссии из task_manager.ltx (без квадратных скобок), ее описание для вывода на PDA (параметр description) и текст диалога (text). Затем поочередно отыщите выписанные ключевые слова в XML-файле stable_task_manager.xml и модифицируйте текст каждой из записей. Закончив правку задания, сохраните все изменения и протестируйте квест в игре.

Тонкости квестостроения
Чтобы оставить свой собственный авторский след в файле task_manager.ltx, да и вообще в любом конфигурационном файле «Сталкера», нужно всего-то лишь поставить в нужном месте (после кода или с новой строки) символ точки с запятой и после него вживить комментарий, например: tm_eliminate_camp_4 ; игроманский комментарий, не удалять.
Далеко не все квесты, написанные разработчиками, вошли в оригинальную игру. Что, никогда о таком не слышали? Тогда имейте в виду, что, например, в файле task_manager.ltx содержится ряд закомментированных, но вполне рабочих заданий, цель которых сводится к убийству сталкеров и поиску полезных вещиц. После тщательного прочесывания документа на наличие такого рода заданий мы обнаружили следующие заблокированные квесты:
Цитата
;--[barmen_eliminate_camp_3]
;--[barmen_find_item_1]
;--[barmen_find_item_2]
;--[barmen_find_item_3]

Для преобразования геймплея S.T.A.L.K.E.R. достаточно поправить всего лишь несколько параметров каждой типовой миссии в файле task_manager.ltx. Как вариант, вы можете значительно сократить время, отведенное на выполнение каждого квеста, занизить очки репутации за прохождение той или иной миссии, но в то же время в несколько раз увеличить число бонусов и денежных средств.


Квестострой
Теперь, когда вы изучили основы редактирования однотипных игровых заданий, можно попробовать силы в написании своего собственного квеста — создать необходимые записи в менеджере заданий (файл task_manager.ltx), а также снабдить квест текстовыми описаниями.

Запустите «Блокнот» и подгрузите в него файл task_manager.ltx из директории gamedata\config\misc. Отыщите ключевое слово sar_monolith и после него с новой строки добавьте следующую конструкцию:
Цитата
; Ваш авторский комментарий
[mission_name]
Здесь [mission_name] — произвольное наименование квеста, например, tm_kill_stalker_7.

Для изменения игрового баланса нужно отредактировать коды типовых заданий.

Далее скопируйте какое-нибудь типовое задание, например, [tm_kill_stalker_2] в буфер обмена и поместите дубликат в самый конец документа. Измените название клонированной миссии, заключенное в квадратные скобки, на название квеста, объявленного вами в списке заданий. Модифицируйте параметры оригинальной миссии, при необходимости добавьте в код миссии дополнительные команды. Самое главное — не забудьте поправить значения параметров text и description, которые соответствуют названиям текстовых записей в файлах gamedata\config\gameplay\storyline_info_taskmanager.xml и gamedata\config\text\rus\stable_task_manager.xml. Затем откройте «Блокнотом» XML-файл storyline_info_taskmanager.xml из каталога gamedata\config\gameplay с игрой и добавьте в конец файла следующий блок:
Цитата
<article id="[descr]" name="kill_stalker" article_type="task">
<text>[descr] </text>
</article>

В данном фрагменте кода [descr] — значение параметра description в теле миссии, (в нашем случае — tm_kill_stalker_7_descr).

Осталось внести изменения в файл stable_task_manager.xml, содержащий тексты заданий на русском языке. Перейдите в каталог gamedata\config\text\rus и при помощи любого табличного редактора — скажем, Excel — откройте файл stable_task_manager.xml. Передвиньте ползунок в правой части программы в нижнюю часть документа. В ячейке на пересечении 391 строки и первого столбца введите ключевое слово, соответствующее названию вашего квеста в файле task_manager.ltx. После этого в поле напротив (ячейка B-391) напечатайте название будущего задания.

В поле A-392 (A — название столбца, 392 — порядковый номер строки) вбейте название, прописанное в качестве параметра description вашей миссии, а в области B-392 — текст сообщения, который будет подан на PDA главного героя. В ячейке A-393 пропишите значение характеристики text вашей миссии и в поле напротив наберите текст задания для отображения во время беседы между Меченым и работодателем. Сохраните изменения и закройте табличный редактор.

* * *
Мы изучили азы создания несложных квестов для S.T.A.L.K.E.R. и попутно разобрали структуру скриптовых файлов. Если тема создания новых миссий для «Сталкера» вам интересна, обязательно загляните в раздел «Игрострой» на нашем DVD. Там вас поджидает подробное руководство по разработке сложных миссий и написанию нелинейных диалогов для S.T.A.L.K.E.R.. Заранее предупреждаем — материал рассчитан на модмейкеров со стажем.


Создание сложных квестов и диалогов для S.T.A.L.K.E.R.

Автор:
Эдуард Клишин


В статье «S.T.A.L.K.E.R. — создание типовых квестов», которая притаилась на страницах «Мастерской» нынешнего выпуска журнала, мы поговорили о разработке несложных, точнее говоря, простейших типовых заданий для игры.
Ну а раз основы изучены, фундамент заложен, можно и нужно двигаться дальше и приступать к освоению неизведанного. Что мы, собственно, сегодня и сделаем. Итак, в настоящей статье речь пойдет о сборке сложных нелинейных квестов для игры и написании многоступенчатых диалогов. Готовы? Защитный костюм и противогаз на месте? Тогда вперед — осваивать бескрайние «модные» просторы...

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

Краткий брифинг проведен. Время действовать. Начнем, пожалуй, с написания разветвленных диалогов. Запустите «Блокнот» и подгрузите в него файл character_desc_escape.xml, который проживает в директории gamedata\\config\\gameplay\\ установленной игры (прим. — все архивы «Сталкера» должны быть «распечатаны»). Данный документ, по сути, содержит множество ссылок на определенные ветви диалогов, т.е. фактически служит лишь для объявления или инициализации разговорных блоков, но не более того. Давайте вживим в тело данного файла ссылку на новый диалог с торговцем — Сидоровичем (впрочем, никто не мешает вам создать новых персонажей, например канонического Ктулху, и закрепить за ними определенные диалоги). Для этого выполните следующие действия. Отыщите строку \escape_trader_done_blockpost_box\ (прим. — меню поиска в «Блокноте» активируется при помощи горячих клавиш Ctrl + F, если кто не знает)
и сразу же после нее (с новой строки) поместите следующую конструкцию:
\escape_trader_igromania\
Где escape_trader_igromania — название будущего диалога.
Инициализация произведена. Двигаемся дальше — приступаем к внедрению кода диалога в файл dialogs_escape.xml из каталога gamedata\\config\\gameplay\\ игры, в котором прописаны практически все игровые тексты в общем виде. Итак. Откройте «Блокнотом» файл dialogs_escape.xml и добавьте в конец документа — перед ключевым словом \ следующий блок:
Цитата
\
\escape_dialog.trader_alredy_give_job\
\tutorial_end\
\
\
\escape_trader_ igromania0 \
\1\
\
\
\escape_ trader_ igromania1 \
\2\
\
\
\escape_ trader_ igromania2\
\3\
\
\
\escape_ trader_ igromania3 \
\
\
\

Давайте рассмотрим структуру данного диалога. В первой строке блока указывается название диалога, соответствующее определенной записи в файле character_desc_escape.xml. В нашем случае — это escape_trader_igromania. Последующие две строки отвечают за так называемое предварительное условие (precondition) и специальную информационную справку. Тег \ открывает огромный список фраз диалога, а \, соответственно, его замыкает. Между ними, как мы уже сказали, размещаются различные реплики в общем виде. Каждая новая запись состоит из трех ключевых строк, содержащих так называемые теги phrase id, text и next. В первой из них указывается специальный идентификационный номер, указывающий на номер реплики. Нумерация начинается с нуля. Т.е., скажем, для первой записи значение параметра phrase id = «0», для второй — «1» и так далее. Во второй строке между тегами \ и \ содержится ключевое слово или «ключворд», которое представляет собой название строки — сам же текст вбивается в документ gamedata\\config\\text\\rus\\stable_dialogs_escape.xml.
Ну и, наконец, между тегами \ и \ помещается номер следующего узла или реплики. Таким образом, зная структуру диалогов, вы можете конструировать блоки, состоящие из 10, 100, 1000 записей. Лимит не установлен.
Файлы диалогов игры можно редактировать и при помощи Microsoft Excel — по сути-то, мы имеем дело с банальными XML-документами. Правда, в таком случае могут возникнуть серьезные трудности при переводе \«электронной книги\» в XML-формат \«Сталкера\».

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

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

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


Так, давайте посмотрим, что здесь к чему. Параметр, точнее говоря, тег с ключевым словом game_task id отвечает за идентификационный номер (правда, текстовый, а не цифровой) или название миссии. Между тегами \ \ проживает заголовок задания на русском, в нашем случае — Типично русский квест. Далее в пределах от элемента \ до \ содержится краткий текст квеста на чистейшем русском языке. Между тегами \ и \ задается определенный тип маркера или иконки, который будет отображаться на карте местности, в нашем примере — ui_iconsTotal_storyline_eliminate_gunslinger. В теле тега \ проживает ссылка на определенную запись в файле gamedata\\config\\gameplay\\info_l01escape.xml с текстом условия. Тег типа \ включает в себя информацию о графической подсказке на радаре, а \ — о квестовом объекте. Вот, в принципе, и все. Что? Зачем мы вживили в тело миссии несколько \-блоков? Все просто. Три части задания, три независимых группы — Поговорить с Ктулху, сгонять за артефактами и встретиться со снежным человеком.
С созданием квестовой основы покончено. Следующий шаг — обозначение целей и прописывание экранных подсказок. Передохнули, сил набрались? Тогда снова в бой! В очередной раз вооружитесь «Блокнотом». Откройте файл info_l01escape.xml из папки gamedata\\config\\gameplay\\ со S.T.A.L.K.E.R., отыщите в нем тег \ и после него поместите следующую незатейливую конструкцию:
Цитата
\\
\
\igromania_quest \
\
\\

Если внимательно приглядеться, то несложно обнаружить, что в теле каждого тега типа info_portion id прописывается определенное условие, название которого было ранее задано в файле tasks_escape.xml. Между тегами \ и \ указывается название квеста, для которого обозначаются условия, в нашем случае — igromania_quest. Так, с прописыванием условий разобрались.
Что у нас там дальше по плану? Точно — экранные подсказки. Дабы организовать вывод текстовых подсказок, отображающихся на экране во время выполнения квеста, проделайте следующие действия.
Откройте файл string_table_tasks_escape.xml из директории gamedata\\config\\text\\rus\\ с игрой и скопируйте в начало или конец файла следующий текстовый блок:
Цитата
\
\Поговори с Ктулху\
\
\
\Найди полезные предметы и артефакты \
\
\
\Встреться со снежным человеком \
\

Приведенная выше структура состоит из трех блоков, каждый из которых, в свою очередь, содержит ровно по три строки. В первой строке, которая начинается с «кейворда» string_id, указывается определенное идентификационное имя строки на английском (без пробелов), во второй — между тегами \ и \ — начинка, текст подсказки, ну и, наконец, в третьей — тег \, который закрывает блок подсказки.
Диалог написан, квест сконструирован, условия прописаны, подсказки обозначены. Казалось бы, самое время — протестировать свежеиспеченную миссию в игре. Но не тут-то было. Мы же с вами не реализовали саму возможность выполнить квест, т.е. фактически не прописали стартер задания в тело диалога. Давайте вернемся к правке диалога и устраним данное недоразумение. Итак. Во-первых, сделайте диалог нелинейным. Для этого первым делом создайте как можно большее число реплик, а затем прикрутите к нужным блокам несколько команд для перехода к новым записям, например:
Цитата
\
\escape_trader_igromania_12\
\2\
\4\
\6\
\8\

Из этого примера отчетливо видно, что игрок может сам сделать выбор — к какому звену диалога перейти: 2,4, 6 или 8. При написании новых диалогов для Сталкера старайтесь предоставить игроку как можно большую свободу выбора, скажем, подписаться на выполнение задания, отвергнуть предложение и все в таком духе.

После этого встройте в тело конечных «разговорных» блоков ссылки для активации нужных игровых скриптов, скажем:
Цитата
\
\escape_igromania_17\
\ igromania_quest_done \
\ artifacts_and_obj \
\give_gold \
\23\
\

Последние штрихи. Осталось лишь написать скрипты, ответственные за «выписку гонорара» игроку, а также передачу ценного предмета определенному 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, вторая — за изымание ценных артефактов и вещиц у Меченого.
Ура — квест готов! Отправляемся на поиски канонического Ктулху, снежного человека и полезных в хозяйстве вещиц...

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


Зона поражения 3 (20ХХ)


работа-дом-Работа дом... Дурдом...
userbar
vold
[1] Странник
Онлайн статус=0  Профиль    




Посты: 157
Откуда: Москва
Занятие:
Возраст:

02-02-2008 06:15 GMT3 часа #494575   Split
KeLeVR@
ждем новых квестов


"Родина моя, ты сошла с ума"
Arhet
[3] Новобранец
Онлайн статус=0  Профиль    




Посты: 1047
Откуда: Москва
Занятие: Дизайн
Возраст: 36

01-10-2007
02-02-2008 12:14 GMT3 часа #494615   Split
Ацтой, аффтар рассмотрел только однотипные самые примитивненькие квесты, плюс натырил сведений из моей статьи.

Сообщение было успешно отредактировано Arhet (02-02-2008 12:14 GMT3 часа, назад)

SRP Mod 0.2.2 - скачать
KeLeVR@
[1] Banned
Онлайн статус=0  Профиль    




Посты: 662
Откуда: МоскVА
Занятие: Выживать
Возраст: 32

02-02-2008 15:21 GMT3 часа #494716   Split
Arhet А ты знаеш как делать не примитивные? тогда может поможеш? Поскольку я в Кодах и програмировании ни шарю, то могу писать только сценарии к квестам...да и не только я, а все желающие могут писать свои сценарии.


-=G.S.T.=-
[7] Выживший
Онлайн статус=0  Профиль    




Посты: 1081
Откуда: [United Kingdom of Great Britan] -=London=- Language -=English=-
Занятие: Дайте подумать. Эээ....мм...хз..
Возраст: 39

26-04-2008
02-02-2008 15:21 GMT3 часа #494717   Split
Много трёпа ненужного. Писать руководство, так по делу. Статью писать надо пошагово и не использовать малознакомые термены. Что б любой новичок мог спокойно пошагово добавить квест, а затем его изменить. И не однотипный, а сложный. Предлогаю автору темы этим и заняться. Сначало попробывать добавить , а потом отписаться об успехах и написать как он делал, на понятном всем языке. Привёдённая статья не очень. На мод Wiki лучше.


KeLeVR@
[1] Banned
Онлайн статус=0  Профиль    




Посты: 662
Откуда: МоскVА
Занятие: Выживать
Возраст: 32

02-02-2008 15:25 GMT3 часа #494719   Split
Frontiersmen Спасибо за выложеную статью

добавлено спустя 2 минут

G.S.T. Автор статьи не шарит в этом!) по этому и проситпомощи...

Сообщение было успешно отредактировано KeLeVR@ (02-02-2008 15:25 GMT3 часа, назад)

-=G.S.T.=-
[7] Выживший
Онлайн статус=0  Профиль    




Посты: 1081
Откуда: [United Kingdom of Great Britan] -=London=- Language -=English=-
Занятие: Дайте подумать. Эээ....мм...хз..
Возраст: 39

26-04-2008
02-02-2008 17:50 GMT3 часа #494748   Split
KeLeVR@ Вот с sdk.stalker-game.com/ru Создание квестов.
Создание квестов и диалогов
Создание базового диалога

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

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

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

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

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

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

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

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

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

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

2. <dialog id = «»> закрывающий - </dialog>

3. <phrase_list> - </phrase_list>

4. <phrase id = «»> - </phrase>

5. <text> </text>

6. <next> </next>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<info_portion id = “”> </info_portion>

<task > </task>

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

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

<info_portion id = “new_task_started”>

<task>new_task</task>

</info_portion>

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

<info_portion id = “player_talked_with_wolf”>

</info_portion>

<info_portion id = “player_complete_new_task”>

</info_portion>
Создание нового квеста

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

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

Для примера исследуем уже существующий квест:
<game_task id="esc_help_wounded_from_raid" prio="485">
<title>esc_help_wounded_from_raid</title>
<objective>
<text>esc_help_wounded_from_raid_0</text>
<icon>ui_iconsTotal_esc_help_wounded_from_raid</icon>
<function_complete>escape_tasks.task_fox_complete</function_complete>
<infoportion_set_complete>garbage_meetstalker_start</infoportion_set_complete>
<article>esc_fox_help</article>
</objective>
<objective>
<text>esc_help_wounded_from_raid_1</text>
<map_location_type hint="esc_fox">green_location</map_location_type>
<object_story_id>Escape_stalker_from_raid</object_story_id>
<infoportion_complete>escape_fox_heal</infoportion_complete>
<infoportion_fail>esc_dogs_return</infoportion_fail>
</objective>
<objective>
<text>esc_help_wounded_from_raid_2</text>
<map_location_type hint="esc_fox">green_location</map_location_type>
<object_story_id>Escape_stalker_from_raid</object_story_id>
<infoportion_complete>escape_stalker_done</infoportion_complete>
</objective>
</game_task>

По кусочкам:

<game_task id="esc_help_wounded_from_raid" prio="485"> </game_task>

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

<title>esc_help_wounded_from_raid</title>

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

<function_complete>escape_tasks.task_fox_complete</function_complete>

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

<infoportion_complete>escape_fox_heal</infoportion_complete>

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

<infoportion_fail>esc_dogs_return</infoportion_fail>

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

<map_location_type hint="esc_fox">green_location</map_location_type>

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

<object_story_id>Escape_stalker_from_raid</object_story_id>

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

<infoportion_set_complete>garbage_meetstalker_start</infoportion_set_complete>

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

<text>esc_help_wounded_from_raid_0</text>

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

Создадим задание, которое потребуется нам для диалога:
<game_task id=”new_task”>
<title>Поговорить с Волком</title>
<objective>
<text>Вернуться к Сидорычу</text>
<map_location_type hint="escape_trader">blue_location</map_location_type>
<object_story_id>Escape_Trader</object_story_id>
<infoportion_complete>player_complete_new_task</ infoportion_complete>
</objective>
<objective>
<text>Поговорить с Волком</text>
<map_location_type hint="volk">green_location</map_location_type>
<object_story_id>Escape_novice_lager_volk</object_story_id>
<infoportion_complete>player_talked_with_wolf</ infoportion_complete>
</objective>
<objective>
<text>Вернуться к Сидорычу</text>
<map_location_type hint="escape_trader">blue_location</map_location_type>
<object_story_id>Escape_Trader</object_story_id>
<infoportion_complete>player_complete_new_task</ infoportion_complete>
</objective>
</game_task>

Теперь создадим скелеты диалогов для нашего квеста. Потребуется три: один для Волка и два для Сидорыча.
<dialog id = “volk_new_quest”>
<has_info> new_task_started </has_info>
<dont_has_info> player_talked_with_wolf</dont_has_info>
<dont_has_info> player_complete_new_task </dont_has_info>
<phrase_list>
<phrase id = “0”>
<text>esc_volk_new_quest_0</text>
<next>1</next>
</phrase>
<phrase id = “1”>
<text>esc_volk_new_quest_1</text>
<give_info>player_talked_with_wolf</give_info>
<next>2</next>
</phrase>
<phrase id = “2”>
<text>esc_volk_new_quest_2</text>
<action>dialogs.break_dialog</action>
</phrase>

</prhase_list>
</dialog>

<dialog id = “esc_trader_new_quest”>
<dont_has_info> player_complete_new_task </dont_has_info>
<dont_has_info> player_talked_with_wolf</dont_has_info>
<phrase_list>
<phrase id = “0”>
<text>esc_trader_new_quest _0</text>
<next>1</next>
</phrase>
<phrase id = “1”>
<text>esc_trader_new_quest _1</text>
<give_info>new_task_started </give_info>
<next>2</next>
</phrase>
<phrase id = “2”>
<text>esc_trader_new_quest _2</text>
<action>dialogs.break_dialog</action>
</phrase>

</prhase_list>
</dialog>

<dialog id = “esc_trader_new_quest_complete”>
<dont_has_info> player_complete_new_task </dont_has_info>
<phrase_list>
<phrase id = “0”>
<text> esc_trader_new_quest_complete _0</text>
<next>1</next>
</phrase>
<phrase id = “1”>
<text> esc_trader_new_quest_complete _1</text>
<give_info>player_complete_new_task </give_info>
<next>2</next>
</phrase>
<phrase id = “2”>
<text> esc_trader_new_quest_complete _2</text>
<action>dialogs.break_dialog</action>
</phrase>
</prhase_list>
</dialog>

Все «скелеты» добавляем в файл dialogs_escape.xml. Между <game_dialogs> и <dialog id=...>!

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

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

Ищем там NPC с id = “escape_trader” и добавляем два новых <actor_dialog></actor_dialog>:
<actor_dialog>esc_trader_new_quest_complete </actor_dialog>
<actor_dialog>esc_trader_new_quest </actor_dialog>

Там же ищем NPC с id = “esc_wolf” и добавляем один актор_диалог:
<actor_dialog> volk_new_quest </actor_dialog>

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

Осталось только добавить текст трех диалогов, чтобы наш квест стал полноценным. Открываем файл stable_dialogs_escape.xml и добавляем в него новый текст в таком виде:
<string id=" esc_trader_new_quest_complete_0 ">
<text>Все, я выполнил поручение Влока!</text>
</string>
<string id=" esc_trader_new_quest_complete_1 ">
<text>Молодец, Меченый. На тебя можно положиться.</text>
</string>
<string id=" esc_trader_new_quest_complete_2 ">
<text>Рад был помочь, Сидорыч.</text>
</string>
<string id=" esc_trader_new_quest _0 ">
<text> Здравствуй, Сидорыч! Есть работенка?</text>
</string>
<string id=" esc_trader_new_quest _1 ">
<text> О, неужели заглянул к нам на огонек, Меченый? Ладно… ближе к телу… эээ, к делу. У меня к тебе следующая
просьба: сбегай к Волку, у него что-то намечалось.</text>
</string>
<string id=" esc_trader_new_quest _2">
<text> Без проблем! Уже бегу.</text>
</string>
<string id="esc_volk_new_quest_0">
<text>Здорово, Волк. Меня тут Сидорыч послал, говорит у тебя работа есть.</text>
</string>
<string id="esc_volk_new_quest_1">
<text>Привет, Меченый. Верь ты ему больше, этому старому маразматику! Все спокойно сейчас. Так что иди к нему и
скажи, что все хорошо.</text>
</string>
<string id="esc_volk_new_quest_2">
<text>Все, ухожу.</text>
</string>

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

Статья создана: Fr3nzy

Вот ещё одна
Создание квестов (базовый уровень)


Вступление

Перед изучением этого урока советую освоить находящийся несколько выше урок "Создание диалогов".

Небольшие правила, следуя которым, можно сберечь себе много нервов:

- всегда сохраняйте резервные копии модифицируемых файлов - старайтесь почаще тестировать внесенные изменения - так проще понять, в чем вы ошиблись (если активно работать пару часов без остановки, не разу не протетировав внесенные изменения, то потом будет очень сложно понять - почему же, черт возьми, игра вылетает при попытке поговорить с Сидоровичем?) - перед началом работы создайте новую папку gamedata, а свои моды спрячьте подальше: работать с "чистой" версией игры не в пример удобнее и проще; особенно противопоказан Repair Mod, который с новыми диалогами часто конфликтует. О том, как создать диалоги и квесты, исключающие возможность конфликта с другими подобными модами, см. часть 4.
Создание базового диалога

Начнем создание квеста с написания небольшого линейного диалога.

Открываем файл gamedata\config\gameplay\character_desc_escape.xml и проводим такие манипуляции:

- находим строку "<actor_dialog>escape_trader_done_blockpost_box</actor_dialog>" - добавляем после нее новую - "<actor_dialog>escape_trader_oops</actor_dialog>" - сохраняем изменения

Мы добавили к Диалогу с Сидоровичем новую ветку, вернее, только ссылку на неё. Сама внутренняя структура ветки хранится в файле gamedata\config\gameplay\dialogs_escape.xml, который мы открываем и производим:

- находим в любом месте файла промежуток между </dialog> и <dialog id="..."> - засовываем туда такую конструкцию:
<dialog id="escape_trader_oops">
<precondition>escape_dialog.trader_alredy_give_job</precondition>
<has_info>tutorial_end</has_info>
<phrase_list>
<phrase id="0">
<text>escape_trader_oops_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>escape_trader_oops_1</text>
<next>2</next>
</phrase>
<phrase id="2">
<text>escape_trader_oops_2</text>
<next>1</next>
</phrase>
<phrase id="3">
<text>escape_trader_oops_3</text>
</phrase>
</phrase_list>
</dialog>

- сохраняем изменения

Теперь у нас прописана структура новой ветки диалога. Осталось сделать еще одну вещь - прописать строки, которые будут отображаться вместо "escape_trader_oops_...".

Для этого откроем файл gamedata\config\text\rus\stable_dialogs_escape.xml и сделаем следующее:

- находим любой удобный промежуток между </string> и <string id="..."> - прописываем туда следующие строки:
<string id="escape_trader_oops_0">
<text>Сидрыч, давай поговорим о... водке.</text>
</string>
<string id="escape_trader_oops_1">
<text> водке? Да какая водка? Нет её у меня, кончилась. Вроде у Волка на чердаке была, что-то он
однажды об этом упоминал... Принеси, а?</text>

</string>
<string id="escape_trader_oops_2">
<text>Да сбегаю я сейчас, сбегаю... алкоголик, блин.</text>
</string>
<string id="escape_trader_oops_3">
<text>Беги, беги... сил уж нет ждать.</text>
</string>

- сохраняем изменения

Всё. Диалог готов. Можно грузить игру и смотреть, работает ли новая ветка. А теперь будем прикреплять к этому безобразию квест ""Принеси водки Сидоровичу".


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

Активацию квеста в диалог прикрепить достаточно просто. Проводим с файлом gamedata\config\gameplay\ dialogs_escape.xml следующие манипуляции:

- добавляем содержимое фразы <phrase id="2"> следующим:

<phrase id="2">
<text>escape_trader_oops_2</text>
<give_info>kvest_vodka_started</give_info>
<next>3</next>
</phrase>

- сохраняем изменения

Теперь после фразы Меченого "Да сбегаю я сейчас, сбегаю..." Сидорович таки всучивает нам квест "Принеси водку". Но не спешите тестировать изменения. Мы добавили в диалог упоминание о квесте, хотя он еще не создан.

Исправим это недоразумение. Откройте файл gamedata\config\gameplay\tasks_escape.xml и в начале файла создайте такую конструкцию:
<game_task id="esc_test_vodka_task">
<title>Принести водки</title> <!-- заголовок квеста -->
<objective>
<text>Принести водки Сидоровичу</text>
<icon>ui_iconsTotal_find_item</icon>
<infoportion_complete>test_quest_vodka_otdana</infoportion_complete> </objective>
<objective>
<text>Вернуться с водкой обратно</text>
<map_location_type hint="esc_dinamit_to_volk">green_location</map_location_type>
<object_story_id>Escape_novice_lager_volk</object_story_id>
<infoportion_complete>test_quest_vodka_otdana</infoportion_complete>
</objective>
<objective>
<text>Найти водку на чердаке</text>
<map_location_type hint="escape_trader">blue_location</map_location_type>
<object_story_id>Escape_Trader</object_story_id>
<infoportion_complete>test_quest_vodka_otdana</infoportion_complete>
</objective>
</game_task>

Мы прописали данные о квесте: название, иконку, строки заданий, расположение маркеров и т.д.

К этому файлу мы еще вернемся, т.к. в этом варианте многое проставлялось не иначе как от балды. Я еще подумаю, как заставить задание "Вернуться с водкой обратно" появиться в PDA, а то оно что-то не желает явить себя народу... впрочем, ладно, главное, что все работает и не вылетает. А исправление столь мелких багов - дело десятое. Продолжим.

Откроем файл gamedata\config\gameplay\info_l01escape.xml и зарегистрируем до того отсутствовавшие в игре типы условий (они нам еще пригодятся для завершения работы над квестом):

- после строки <game_information_portions> прописываем:
<info_portion id="test_quest_vodka_otdana"></info_portion>

<info_portion id="kvest_vodka_started">
<task>esc_test_vodka_task</task>
</info_portion>

<info_portion id="otkazalsya_prinesty_vodku"></info_portion>

С прописыванием условий - всё.

Теперь займемся одной небольшой, но нужной вещью - прописыванием экранных подсказок, которые высвечиваются при получении/выполнении этапа/завершении задания.

Для этого откроем файл gamedata\config\text\rus\string_table_tasks_escape.xml и пропишем там:
<string id="esc_test_prinesti_vodku">
<text>Принести бутылку водки</text>
</string>
<string id="esc_test_prinesti_vodku_1">
<text>Найти водку на чердаке у Волка</text>
</string>
<string id="esc_test_prinesti_vodku_2">
<text>Принести водку Сидоровичу</text>
</string>

Теперь можно тестировать, что получилось. Сверяем результаты:

- по окончанию разговора про водку у вас появляется новое задание - в задании маркером отмечен Волк (ближайший к чердаку маркер, потому и отмечен) - при получении задания на экране высвечивается уведомление

Можно приступать к третьей стадии. Что мы забыли? Правильно - возможность выполнить квест.


Реализация возможности выполнить квест

На самом деле - все просто. Все условия и т.д. уже нами созданы, осталось только применить их в диалоге. Давайте несколько изменим его структуру, сделаем его ветвистым и функциональным:

0. Сидрыч, давай поговорим о... водке. ( переход к 1)

1. О водке? Да какая водка? Нет её у меня, кончилась. Вроде у Волка на чердаке была, что-то он однажды об этом упоминал... Принеси, а? ( выбор - переход к 2, 4, 5; изначально доступен только 2 вариант )

2. Да сбегаю я сейчас, сбегаю... алкоголик, блин. ( получение квеста, переход к 3, после этого перестает быть доступен )

3. Беги, беги... сил уж нет ждать. ( конец, переход к списку веток Сидоровича )

4. Вот она, твоя бутылка водки. Ну, вернее, не твоя, а Волка... ( появляется только при наличии водки в инвентаре, при выборе водка передается Сидоровичу, квест выполняется, идет переход к 7 )

5. Извини, Сидрыч, я пока еще не раздобыл, терпи... ( появляется только если взять квест, переход к 6 )

6. А ну марш отсюда! Без бутылки пришел... ууу, вражина... ( переход к 8 )

7. Теперь моя будет, Меченый! Ты так Волку и передай. Спасибо, выручил... держи награду. ( выдача награды, переход к 8 )

8. Ну тебя в пень... ( конец, переход к списку веток Сидоровича )

А вот так это будет выглядеть в файле gamedata\config\gameplay\dialogs_escape.xml:
<dialog id="escape_trader_oops">
<precondition>escape_dialog.trader_alredy_give_job</precondition>
<has_info>tutorial_end</has_info>
<phrase_list>
<phrase id="0">
<text>escape_trader_oops_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>escape_trader_oops_1</text>
<next>2</next>
<next>4</next>
<next>5</next>
</phrase>
<phrase id="2">
<dont_has_info>kvest_vodka_started</dont_has_info>
<text>escape_trader_oops_2</text>
<give_info>kvest_vodka_started</give_info>
<next>3</next>
</phrase>
<phrase id="3">
<text>escape_trader_oops_3</text>
<action>dialogs.break_dialog</action>
</phrase>
<phrase id="4">
<text>escape_trader_oops_4</text>
<precondition>escape_dialog.have_a_vodka</precondition>
<action>escape_dialog.otday_vodku</action>
<next>7</next>
</phrase>
<phrase id="5">
<has_info>kvest_vodka_started</has_info>
<text>escape_trader_oops_5</text>
<next>6</next>
</phrase>
<phrase id="6">
<text>escape_trader_oops_6</text>
<next>8</next>
</phrase>
<phrase id="7">
<text>escape_trader_oops_7</text>
<give_info>test_quest_vodka_otdana</give_info>
<action>escape_dialog.transfer_deneg</action>
<next>8</next>
</phrase>
<phrase id="8">
<text>escape_trader_oops_8</text>
</phrase>
</phrase_list>
</dialog>

Теперь добавим в игру скрипты "передача денег" и "передача водки". Откройте файл gamedata\scripts\escape_dialog.script и перед разделителем "Trader" добавьте туда следующие строки:
function transfer_deneg(first_speaker, second_speaker)
dialogs.relocate_money(second_speaker, 4000, "in")
end

function otday_vodku (npc, actor)
dialogs.relocate_item_section(npc, "vodka", "out")
end

function have_a_vodka (stalker, player)
return stalker:object ("vodka") ~= nil
end

Готово. Запускайте игру и любуйтесь.

Для тех, кто еще с нами - сейчас мы модифицируем квест так, чтобы исключить конфликты с другими подобными модами.


Реализация совместимости

Из-за чего наш мод не может работать вместе с аналогичными ему модами? Да потому, что файлы dialogs_escape.xml и некоторые другие у них пересекаются. Поэтому выделим их отдельно от основных диалогов:

Вместо dialogs_escape.xml мы будем испольховать новый - dialogs_new.xml Вместо stable_dialogs_escape.xml мы будем использовать файл stable_dialogs_new.xml (важно! не знаю почему, но он должен лежать в text\..., а не в text\rus\...)

Соответственно, весь реализованный нами новый контент перекидываем в пустые файлы (соблюдая форматирование), подчистив за собой на старом месте.

Единственное, что останется сделать после установки того же Repair Mod'а - заново добавить ветку диалога Сидоровичу в файле character_desc_escape.xml. Остальное в новом варианте нашего мода переписывать не придется - для диалогов отведено три файла.

Остальные файлы относятся уже к квестовой части и ни с чем пересекаться не могут - где вы видели другие моды с новыми квестами? Я - нет.

Откройте файл gamedata\config\localization.ltx и зарегистрируйте там stable_dialogs_escape.ltx. Потом откройте файл gamedata\config\system.ltx и в разделе "Dialogs" в конце строки (после dialogs_aes) пропишите dialogs_new (без ".ltx"!).

Все. Теперь ваши диалоги будут подгружаться из сторонних файлов.



Отдельное спасибо:

XiaNi - за страшный и непричесанный, но работающий пример квеста, на основе которого я и освоил принципы квестостроения =)

Keha – за урок по созданию новых диалогов
Дополнения

1. Если изменить шапку нашего диалога в файле dialogs_escape.xml со старого варианта на такой, то ветка исчезнет после выполнения задания:
<dialog id="escape_trader_oops">
<precondition>escape_dialog.trader_alredy_give_job</precondition>
<has_info>tutorial_end</has_info>
<dont_has_info>test_quest_vodka_otdana</dont_has_info>
<phrase_list>

...

Не тестировал. Дело за вами =)

Фух, вроде всё... Всем спасибо, занавес =)
Авторы

Статья создана: BAC9-FLCL

Сообщение было успешно отредактировано G.S.T. (02-02-2008 17:50 GMT3 часа, назад)

Arhet
[3] Новобранец
Онлайн статус=0  Профиль    




Посты: 1047
Откуда: Москва
Занятие: Дизайн
Возраст: 36

01-10-2007
02-02-2008 16:16 GMT3 часа #494772   Split
KeLeVR@ Знаю. Но чтобы все так разложить и подробно объяснить, надо кучу статей написать, на что у меня нет пока времени =(

Ждите.

В основном квесты в моде SRP Mod 0.3 связаны с логикой.

Кому надо, пример БТР, курсирующий по координатам и атакующий ГГ:

Код:
[logic]
active = ph_car1

[ph_car1]
path_walk = dar_btr
on_actor_dist_le_nvis = 15| ph_car2

[ph_car2]
path_walk = dar_btr
target          = actor
track_target    = true


SRP Mod 0.2.2 - скачать
Радон
[1] Странник
Онлайн статус=0  Профиль    




Посты: 317
Откуда: Darkscape
Занятие: химия, криминальные истории, оружие, хентай
Возраст:

05-02-2008 17:12 GMT3 часа #497373   Split
Интересно было бы придумать квест Максу из Свободы на наградной Форт Кузнецова.


Мы, дети серых кварталов, за чью жизнь и гроша н дадут,
Не страшимся мучительной смерти, если смерть настигает в бою!

И если есть порох - дай огня. Вот так.


Свобода и Братва
KeLeVR@
[1] Banned
Онлайн статус=0  Профиль    




Посты: 662
Откуда: МоскVА
Занятие: Выживать
Возраст: 32

05-02-2008 17:57 GMT3 часа #497459   Split
Arhet скажи, а можно модом расчлененку ввести?


weron_team
[1] Странник
Онлайн статус=0  Профиль    




Посты: 1352
Откуда: МО Лыткарин
Занятие:
Возраст: 34

11-03-2008
05-02-2008 18:55 GMT3 часа #497535   Split
KeLeVR@
Скажу я, хоть я и не Arhet
Очень врядли. Конечно кустраным можно, но будет просто идиоткси смотреться((


Arhet
[3] Новобранец
Онлайн статус=0  Профиль    




Посты: 1047
Откуда: Москва
Занятие: Дизайн
Возраст: 36

01-10-2007
06-02-2008 01:42 GMT3 часа #498149   Split
KeLeVR@ если мне не изменяет память, оторванные ноги (ogf-модели) в игре есть. Головы тоже. xStream сумеет, я - нет.)


SRP Mod 0.2.2 - скачать
KeLeVR@
[1] Banned
Онлайн статус=0  Профиль    




Посты: 662
Откуда: МоскVА
Занятие: Выживать
Возраст: 32

06-02-2008 01:59 GMT3 часа #498163   Split
Arhet он модмейкер? ясно.. спасибо. Надо будет к нему обратиться


Crocks
[1] Странник
Онлайн статус=0  Профиль    




Посты: 85
Откуда: Кропоткин
Занятие: учусь модмейкерству, чтобы затем, донести до людей
Возраст: 32

21-07-2008
05-04-2008 17:36 GMT3 часа #562691   Split
-=G.S.T.=-
gamedata\config\gameplay\dialogs_escape.xml:
<dialog id="escape_trader_oops">
<precondition>escape_dialog.trader_alredy_give_job</precondition>
<has_info>tutorial_end</has_info>
<phrase_list>
<phrase id="0">
<text>escape_trader_oops_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>escape_trader_oops_1</text>
<next>2</next>
<next>4</next>
<next>5</next>
</phrase>
<phrase id="2">
<dont_has_info>kvest_vodka_started</dont_has_info>
<text>escape_trader_oops_2</text>
<give_info>kvest_vodka_started</give_info>
<next>3</next>
</phrase>
<phrase id="3">
<text>escape_trader_oops_3</text>
<action>dialogs.break_dialog</action>
</phrase>
<phrase id="4">
<text>escape_trader_oops_4</text>
<precondition>escape_dialog.have_a_vodka</precondition>
<action>escape_dialog.otday_vodku</action>
<next>7</next>
</phrase>
<phrase id="5">
<has_info>kvest_vodka_started</has_info>
<text>escape_trader_oops_5</text>
<next>6</next>
</phrase>
<phrase id="6">
<text>escape_trader_oops_6</text>
<next>8</next>
</phrase>
<phrase id="7">
<text>escape_trader_oops_7</text>
<give_info>test_quest_vodka_otdana</give_info>
<action>escape_dialog.transfer_deneg</action><next>8</next>
</phrase>
<phrase id="8">
<text>escape_trader_oops_8</text>
</phrase>
</phrase_list>
</dialog>

хоть убей, не пойму откуда ты это взял, неужели есть изначально? (я не нашёл)


Кто в логике шарит, пишите в асю или ПМ - нужна помощь.
Всем, кому интересно - журнал.
Arhet
[3] Новобранец
Онлайн статус=0  Профиль    




Посты: 1047
Откуда: Москва
Занятие: Дизайн
Возраст: 36

01-10-2007
05-04-2008 17:45 GMT3 часа #562698   Split
Это великий васькин код.


SRP Mod 0.2.2 - скачать
Crocks
[1] Странник
Онлайн статус=0  Профиль    




Посты: 85
Откуда: Кропоткин
Занятие: учусь модмейкерству, чтобы затем, донести до людей
Возраст: 32

21-07-2008
06-04-2008 15:20 GMT3 часа #563491   Split
Arhet ты писал, что в логике шариш. Можно будет к тебе в будущем обратиться, если что-то будет неясно?


Кто в логике шарит, пишите в асю или ПМ - нужна помощь.
Всем, кому интересно - журнал.
Crocks
[1] Странник
Онлайн статус=0  Профиль    




Посты: 85
Откуда: Кропоткин
Занятие: учусь модмейкерству, чтобы затем, донести до людей
Возраст: 32

21-07-2008
08-04-2008 22:37 GMT3 часа #565658   Split
Люди, особенно те из вас, кто умеет делать квесты (не типовые,однотипные ещё их зовут), подскажите, как сделать в квесте на убийство монстров, чтобы при их убийстве или при диалоге с работодателем после их убийства, выдавался инфопоршн на его выполнение. У меня есть догадка, что нужна скриптовая функция, которая будет проверять во время диалога, убиты ли монстры. Но как её выполнить? Плиз, ваши советы и догадки по функции и по осуществлении квеста в целом.


Кто в логике шарит, пишите в асю или ПМ - нужна помощь.
Всем, кому интересно - журнал.
Teor
[1] Странник
Онлайн статус=0  Профиль    




Посты: 159
Откуда: Чернигов
Занятие: Мир, государство и общество
Возраст: 32

09-04-2008 23:57 GMT3 часа #566656   Split
Я тут пробывал в amk 1.4 квест от Сахарова на пружину добавить, но при попытке загрузке
FATAL ERROR

[error]Expression : start_node && path
[error]Function : CXml::NavigateToNode
[error]File : E:\stalker\patch_1_0004\xrXMLParser\xrXMLParser.cpp
[error]Line : 97
[error]Description : NavigateToNode failed in XML file
[error]Arguments : gameplay\game_tasks.xml


stack trace
Че это такое и как это исправить? Может знает кто?


На столе лежит дискета
У нее испорчен boot.
Через дырочку в конверте
Ее вирусы грызут.
Crocks
[1] Странник
Онлайн статус=0  Профиль    




Посты: 85
Откуда: Кропоткин
Занятие: учусь модмейкерству, чтобы затем, донести до людей
Возраст: 32

21-07-2008
11-04-2008 22:02 GMT3 часа #568060   Split
Где-то напортачил. Проверь тело квеста, если не получится, выложи тело сюда. Может найдём вместе, но врятли.


Кто в логике шарит, пишите в асю или ПМ - нужна помощь.
Всем, кому интересно - журнал.
-=G.S.T.=-
[7] Выживший
Онлайн статус=0  Профиль    




Посты: 1081
Откуда: [United Kingdom of Great Britan] -=London=- Language -=English=-
Занятие: Дайте подумать. Эээ....мм...хз..
Возраст: 39

26-04-2008
11-04-2008 22:34 GMT3 часа #568096   Split
Teor Смотри лог. [error]Arguments : gameplay\game_tasks.xml Ищи в папке gameplay где напортачил.


Teor
[1] Странник
Онлайн статус=0  Профиль    




Посты: 159
Откуда: Чернигов
Занятие: Мир, государство и общество
Возраст: 32

12-04-2008 01:50 GMT3 часа #568286   Split
В том та и фишка, что с етим файлом я ниче не делал. Когда выдало ошибку, то всунул туда, что думал нужным и тоже самое
Вообщем я про квестостроение больше ниче и нечитал, кроме вышеприведенных статей. Если я сделал елементарную ошибку, то прошу не смеятся

character_desc_yantar

<actor_dialog>yantar_general_big</actor_dialog> (такое вставил, куда нужно)

dialogs_yantar
<dialog id="yantar_general_big">
<precondition>dialogs_yantar.trader_alredy_give_job</precondition>
<phrase_list>
<phrase id="0">
<text>yantar_general_big_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>yantar_general_big_1</text>
<next>2</next>
</phrase>
<phrase id="2">
<dont_has_info>kvest_af_dummy_spring_started</dont_has_info>
<text>yantar_general_big_2</text>
<give_info>kvest_af_dummy_spring_started</give_info>
<action>dialogs.break_dialog</action>
</phrase>
<phrase id="3">
<text>yantar_general_big_3</text>
<precondition>dialogs_yantar.have_a_af_dummy_spring</precondition>
<action>dialogs_yantar.otday_af_dummy_spring</action>
<next>6</next>
</phrase>
<phrase id="4">
<has_info>kvest_af_dummy_spring_started</has_info>
<text>yantar_general_big_4</text>
<next>5</next>
</phrase>
<phrase id="5">
<text>yantar_general_big_5</text>
<next>7</next>
</phrase>
<phrase id="6">
<text>yantar_general_big_6</text>
<give_info>test_quest_af_dummy_spring_otdana</give_info>
<action>dialogs_yantar.transfer_deneg</action>
<next>7</next>
</phrase>
<phrase id="7">
<text>yantar_general_big_7</text>
</phrase>
</phrase_list>
</dialog


tasks_yantar

<game_task id="esc_test_af_dummy_spring_task">
<title>Принести пружину</title>
<objective>
<text>Принести пружину Сахарову</text>
<icon>ui_iconsTotal_find_item</icon>
<infoportion_complete>test_quest_af_dummy_spring_otdana</infoportion_complete>
</objective>
<objective>
<text>Вернуться с пружиной обратно</text>
<infoportion_complete>test_quest_af_dummy_spring_otdana</infoportion_complete>
</objective>
</game_task>


З далогом вроде все правильно, так что выкладывать диалог не буду

dialogs_yantar.script


function transfer_deneg(first_speaker, second_speaker)
dialogs.relocate_money(second_speaker, 35000, "in")
end

function otday_af_dummy_spring (npc, actor)
dialogs.relocate_item_section(npc, "af_dummy_spring", "out")
end

function have_a_af_dummy_spring (stalker, player)
return stalker:object ("af_dummy_spring") ~= nil
end


misc/string_table_tasks_escape

<string id="esc_test_prinesti_af_dummy_spring">
<text>Найти пружину</text>
</string>
<string id="esc_test_prinesti_af_dummy_spring_1">
<text>Принести пружину Сахарову</text>
</string>


info_l08yantar

<?xml version='1.0' encoding="windows-1251"?>

<game_information_portions>


<info_portion id="kvest_af_dummy_spring_started">
<task>esc_test_af_dummy_spring_task</task>
</info_portion>

<info_portion id="test_quest_af_dummy_spring_otdana"></info_portion>


</game_information_portions>



Ну вроде это весь квест, а где ошибка незнаю


На столе лежит дискета
У нее испорчен boot.
Через дырочку в конверте
Ее вирусы грызут.
Crocks
[1] Странник
Онлайн статус=0  Профиль    




Посты: 85
Откуда: Кропоткин
Занятие: учусь модмейкерству, чтобы затем, донести до людей
Возраст: 32

21-07-2008
12-04-2008 12:30 GMT3 часа #568471   Split
Цитата
<precondition>dialogs_yantar.trader_alredy_give_job</precondition>

Это не совсем та ошибка, но такой функции в этом файле нет. (сейчас смотрел)

добавлено спустя 1 минуту

Или ты добавил?

Сообщение было успешно отредактировано Crocks (12-04-2008 12:30 GMT3 часа, назад)

Кто в логике шарит, пишите в асю или ПМ - нужна помощь.
Всем, кому интересно - журнал.
Teor
[1] Странник
Онлайн статус=0  Профиль    




Посты: 159
Откуда: Чернигов
Занятие: Мир, государство и общество
Возраст: 32

12-04-2008 16:17 GMT3 часа #568658   Split
Ну я выложил все что в скрипт добавил. А больше я туда ниче не пихал.


На столе лежит дискета
У нее испорчен boot.
Через дырочку в конверте
Ее вирусы грызут.
Teor
[1] Странник
Онлайн статус=0  Профиль    




Посты: 159
Откуда: Чернигов
Занятие: Мир, государство и общество
Возраст: 32

17-04-2008 21:57 GMT3 часа #572985   Split
Я вот еще заметил, что если начать навую игру, то выкида нет. Это типо выходит, что после каждого квеста надо новую игру начинать?


На столе лежит дискета
У нее испорчен boot.
Через дырочку в конверте
Ее вирусы грызут.
weron_team
[1] Странник
Онлайн статус=0  Профиль    




Посты: 1352
Откуда: МО Лыткарин
Занятие:
Возраст: 34

11-03-2008
17-04-2008 22:07 GMT3 часа #572991   Split
Да ты крут))

Клнешно


_strelok_
[1] Странник
Онлайн статус=0  Профиль    




Посты: 427
Откуда: Kazan
Занятие: Нет
Возраст: 30

16-05-2008
19-04-2008 13:56 GMT3 часа #574170   Split
Arhet я пробовал сделать новую группировку и квесты на них как на твоей статье было указыно, но при включение игра вылетает. Может я квесты для них не правильно сделал?

добавлено спустя 45 секунд

Вроде эти квесты у долга все пошли!

Сообщение было успешно отредактировано _strelok_ (19-04-2008 13:56 GMT3 часа, назад)

Я живу ради жизни, я умираю ради новой жизни.
BerSerK™
[3] Новобранец
Онлайн статус=0  Профиль    




Посты: 843
Откуда: Fecity
Занятие: Рок - музыка, качалка
Возраст: 31

21-07-2008
26-06-2008 03:18 GMT3 часа #621731   Split
Вопрос такой: пишу квест, всё работает, инфопоршны и подсказки выдаются, НО...
При попытке открыть в ПДА вкладку "Задачи" происходит вылет с чистым логом. Кто в курсе, с чем это может быть связано???


Загляни в журнал и будет тебе счастье!!!
Terra Incognita M.O.D.(T.I.M.O.D.)
dans
[1] Странник
Онлайн статус=0  Профиль    




Посты: 71
Откуда:
Занятие:
Возраст:

26-06-2008 16:04 GMT3 часа #622050   Split
BerSerK™

возможно в taske забыл добавить такие строчки

<icon height="50" width="50" x="100" y="50">ui\ui_icons_task</icon>

<icon>ui_iconsTotal_artefact</icon> или похожую исходя из твоего задания(здесь иконка артефакта)


здесь я подробно расписывал как создавать не однотипные квесты может надо кому
Создание квеста


BerSerK™
[3] Новобранец
Онлайн статус=0  Профиль    




Посты: 843
Откуда: Fecity
Занятие: Рок - музыка, качалка
Возраст: 31

21-07-2008
28-06-2008 13:13 GMT3 часа #624097   Split
dans , ты прав, такого я в таске не писал. Сейчас попробую изменить. И ещё, не можешь подсказать - ещё пара минусов - при получении квеста у Сидора мне выдаётся подсказка типо "Сходить к Волку". А после того, как я поговорю с Волком - нет. Просто кончается диалог, а там - иди куда хочется. И ещё - в квесте Волк даёт мне что-нибудь, и после этого я иду к Сидору. Скриптовая функция пашет, выдача, к примеру, ствола, происходит, но никакой инфы наподобие "получен предмет..." не появляется. Не знаешь, как всё это сделать? Я в квестах покопался(стандартных), но ничего похожего не нашёл.


Загляни в журнал и будет тебе счастье!!!
Terra Incognita M.O.D.(T.I.M.O.D.)


Форумы > S.T.A.L.K.E.R. Тень Чернобыля > Модификации > Квестостроение.

Страница 1 из 212 »





???????@Mail.ru Rambler's Top100
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для
просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.

Использование материалов сайта возможно с разрешения администрации. Все права защищены. © 2004–2024 «Stalker-Portal.ru»