Перейти к содержанию
Холод

Сборник уроков по квестостроению

Рекомендуемые сообщения

 

Тема для отдельных уроков по квестостроению.

Не флудить и пользоваться спойлерами. Все вопросы в личные сообщения автору урока

Изменено пользователем Холод
  • Лайк 2

spacer.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Hardtmuth готово

---

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

Платформа: SoC

Источник: предположительно Игромания

Спойлер

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

Нет, это не сюжет продолжения «Сталкера», а всего лишь одна
дополнительная миссия.
Сегодня мы двинемся дальше — осветим тему написания несложных
типовых квестов для игры.

Быстрый старт

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

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

до кейворда 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 с игрой и добавьте в конец файла
следующий блок:


[descr]

 

В данном фрагменте кода [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 вашей миссии и в поле напротив наберите текст
задания для отображения во время беседы между Меченым и
работодателем. Сохраните изменения и закройте табличный редактор.

 

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

Платформа: CS

Автор: Pihan13

Спойлер

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

Добавлено (23.05.2011, 15:16)
---------------------------------------------
Создаём в папке gamedata\scripts файл ваше_название_скрипта.script, в него пишем:

 

Quote
function ваше_название_функции()
xr_effects.give_inited_task(nil, nil, {"storyline", "name_of_your_quest", "bandit"})
end


endname_of_your_quest - будет название квеста из tm_***.ltx
bandit - группировка (при наведении на точку в ПДА (т.е. которая "Весит" на рестрикторе например.) будет высвечиваться описание квеста и какая группировка её дала.)

далее берём файл gamedata\configs\misc\tm_***.ltx от соотв. локации и пишем в начале под строчку [list_tm_***]:

 

Quote
name_of_your_quest


и далее внизу аналогично существующим:

 

Quote
[name_of_your_quest]
type = storyline
task_type = additional
prior = 10
icon = ui_mt_image_attack_tower
target_cond = true
name = youself_quest_name
text = youself_quest_text
condlist_0 = {+info_for_done} complete
target_story_ids = 724
auto_name = false
auto_faction = true


type = storyline - тип: сюжетная линия (тут можно указать "Принести предметы, уничтожить смарт" итд...)
task_type = additional - тип: дополнительный (если напишете storyline, то будет отображаться, как сюжетка )
prior = 10 - приоритет (значение того, что при появлении квеста он автоматически будет активным)
icon = ui_mt_image_attack_tower - иконка, хотя я что толкьо не писал, получается стандартная
target_cond = true
name = youself_quest_name - имя из xml-массива
text = youself_quest_text - описание
condlist_0 = {+info_for_done} complete - при получении (+) инфопрошня info_for_done считать выполненным
target_story_ids = 724 - стори ИД на которого вешается метка (может быть тайник, труп, НПС, рестриктор, неважно...)
auto_name = false
auto_faction = true

прописываем описания в файлы из gamedata\configs\text\rus
также прописываем инфопрошни в игру (у нас это info_for_done)
P.S. target_story_ids = 724 - ID Йоги, лидера бандитов

в диалоги:
<action>ваше_название_скрипта.ваше_название_функции</action> -активируем
<give_info>info_for_done</give_info> - завершение

 

Квест на тематику войны группировок

Платформа: CoP

Автор: Аристократ

Спойлер

И так, ребят.Всем привет ещё раз wink Сегодня я постараюсь рассказать вам,как создать квест на тематику войны группировок.Я буду делать квест на своей локе,но думаю вам будет понятно как это сделать на своей.Предположим у нас родилась идея:"Опа!Я придумал,хочу сделать квест,чтобы ключевой непись попросил меня уничтожить бандосов,но ведь ГГ не рембо и ему нужна помощь,но как это сделать!?"

Объясняю.

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

Снимайте координаты спейса и смарта для сталкеров поближе к лагерю,чтобы они дошли до врага пока ты бежишь smile

Качаем тут: http://rghost.ru/41890061

Отлично!Мы сняли координаты.Сначала сделаем квест

Заходим в tm_zaton и в самом низу пишем сие:

Спойлер

*

[gar_bandit_ataka_give] - имя квеста
icon = ui_inGame2_Naezd - иконка
prior = 3 - преоритет
storyline = false - если относится к сюжету то true
title = {+gar_bandit_mertv}test_prinesti_name2, test_naiti_name2 - заголовки квеста
descr = gar_bandit_descr - описание квеста
target = gar_car_smart - метка
condlist_0 = {+gar_bandit_ataka_done} complete
reward_money = 2000 - награда
*

 

Отлично, теперь создадим диалоги в файле dialogs_zaton
 

Спойлер

*

<dialog id="bandit_kill"> - имя диалога,можно любое
<dont_has_info>gar_bandit_ataka_done</dont_has_info>
<dont_has_info>gar_bandit_ataka_give</dont_has_info>
<phrase_list>
<phrase id="1">
<text>Ваш текст.</text> - текст.
<give_info>gar_bandit_ataka_give</give_info> - начало квеста
<action>dialogs_zaton.gar_bandit_start</action> вызов функции из скрипта
</phrase>
<phrase id="0">
<text>Ваш текст.</text>
<next>1</next>
</phrase>
</phrase_list>
</dialog>

<dialog id="bandit_kill_done"> -
<has_info>gar_bandit_ataka_give</has_info> - условие появления этого диалога
<dont_has_info>gar_bandit_ataka_done</dont_has_info> не выдавать сразу выполнение задания,то есть диалог не появиться пока мы не убъём враждебный отряд
<has_info>gar_bandit_mertv</has_info> - условие после которого дадут награду
<phrase_list>
<phrase id="1">
<text>Текст.</text> -
<give_info>gar_bandit_ataka_done</give_info>
</phrase>
<phrase id="0">
<text>Текст.</text>
<next>1</next>
</phrase>
</phrase_list>
</dialog>
*

 


Теперь добавим диалоги вашему неписю.Заходим в configs/gameplay/character_desc_zaton - ну или ваш файл с неписем и добавляем в диалоги такие строки:

<actor_dialog>bandit_kill</actor_dialog>
<actor_dialog>bandit_kill_done</actor_dialog>

Теперь заходим в scripts/dialogs_zaton и там после строк

function transfer_vodka_to_boroda(first_speaker, second_speaker)
dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "pda_vovik")
end

пишем сие:

function gar_bandit_start()
task_manager.get_task_manager():give_task("gar_bandit_ataka_give")
end

Теперь описание квеста на русском. Заходим сюда:

Спойлер

*

Пишем тут:<string id="test_naiti_name2">
<text>Захватить точку:Кладбище техники</text>
</string>
<string id="test_prinesti_name2">
<text>Захватить точку:получить награду у Сахатого</text>
</string>
<string id="gar_bandit_descr">
<text>Уничтожить отряд бандитов на кладбище техники.</text>
</string>
*

 

Теперь самое противное wink all.spawn. Заходим по адресу:
 

Спойлер

*

И пишем сие:

[496] - порядковый номер
; cse_abstract properties
section_name = smart_terrain
name = zat_stalker_smart - имя смарта
position = 150.106674194336,1.51264631748199,71.8450012207031 - позиция
direction = 0,0,0 -поворот не надо

; cse_alife_object properties
game_vertex_id = 3401 - гейм виртекс левела
distance = 0.699999988079071
level_vertex_id = 432867 - левел виртекс уровня
object_flags = 0xffffff3e
custom_data = <<END
[smart_terrain]
cfg = scripts\zaton\smart\zat_stalker_smart.ltx - путь к логике
END

; cse_shape properties
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 2

; cse_alife_space_restrictor properties
restrictor_type = 3

; se_smart_terrain properties

[497]
; cse_abstract properties
section_name = space_restrictor - спейс_рестриктор
name = zat_stalker_ataka
position = 99.0539093017578,3.58422040939331,51.2784233093262
direction = -0.847627937793732,0,0.530591070652008 - тут поворот желательно

; cse_alife_object properties
game_vertex_id = 3402
distance = 0
level_vertex_id = 364649
object_flags = 0xffffff3e
custom_data = <<END
[logic]
cfg = scripts\zaton\zat_stalker_ataka.ltx
END

; cse_shape properties
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 1

; cse_alife_space_restrictor properties
restrictor_type = 3

[498]
; cse_abstract properties
section_name = smart_terrain
name = zat_stalker_ataka_smart
position = 95.1288909912109,4.05840969085693,49.366340637207
direction = 0,0,0

; cse_alife_object properties
game_vertex_id = 3402
distance = 0.699999988079071
level_vertex_id = 357719
object_flags = 0xffffff3e
custom_data = <<END
[smart_terrain]
cfg = scripts\zaton\smart\zat_stalker_ataka_smart.ltx
END

; cse_shape properties
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 2

; cse_alife_space_restrictor properties
restrictor_type = 3

; se_smart_terrain properties

[499]
; cse_abstract properties
section_name = space_restrictor
name = zat_bandits
position = 150.106674194336,1.51264631748199,71.8450012207031
direction = 0,0,0

; cse_alife_object properties
game_vertex_id = 3401
distance = 0
level_vertex_id = 432867
object_flags = 0xffffff3e
custom_data = <<END
[logic]
cfg = scripts\zaton\zat_bandits.ltx
END

; cse_shape properties
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 1

; cse_alife_space_restrictor properties
restrictor_type = 3
*

Собираем спавн.Теперь логика.

Заходим в configs/scripts/zaton и создаём два файла zat_stalker_ataka.ltx и zat_bandits.ltx

В zat_stalker_ataka.ltx пишем:

Спойлер

*

[logic]
active = sr_idle

[sr_idle]

on_info = {+gar_bandit_ataka_give} sr_idle2 %=create_squad(zat_bandits_1:zat_stalker_smart)% - спавн сквада в смарте

[sr_idle2]
on_info = {+gar_bandit_ataka_done}
*

Заходим в configs/scripts/zaton/smart и создаём два файла zat_stalker_ataka_smart.ltx и zat_stalker_smart.ltx

В них ничего писать не надо.Только если делаете для смарта работы,но об этом я напишу в другом уроке.

Теперь заходим в configs/misc/squad_descr и пишем там:

Спойлер

*

[zat_bandits_1]:online_offline_group - имя сквада бандосов
faction = bandit
on_death =%+gar_bandit_mertv% - условие после которого идти за наградой
npc_random = sim_default_bandit_1, sim_default_bandit_2, sim_default_bandit_2, sim_default_bandit_3, sim_default_bandit_3, sim_default_bandit_4, sim_default_bandit_4
npc_in_squad = 5, 6 -количество НПС в скваде

[zat_stalkers_1]:online_offline_group
faction = stalker
target_smart = zat_stalker_smart - скриптовая цель.Т.е наш смарт
npc_random = sim_default_stalker_1, sim_default_stalker_1, sim_default_stalker_2, sim_default_stalker_2
npc_in_squad = 5, 6
*

Вот и всё.Запускаем игру и пробуем...

Надеюсь мой урок вам поможет smile

 

Изменено пользователем Холод

spacer.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу