Холод 86 Опубликовано 18 июля, 2020 (изменено) Тема для отдельных уроков по квестостроению. Не флудить и пользоваться спойлерами. Все вопросы в личные сообщения автору урока Изменено 18 июля, 2020 пользователем Холод 2 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Hardtmuth 5 531 Опубликовано 18 июля, 2020 Холод уберите, пожалуйста, красный тег. Как оформить тему Правила форума Вопросы по сайту Личное пространство на Trello Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Холод 86 Опубликовано 18 июля, 2020 (изменено) 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 Автор: Аристократ Спойлер И так, ребят.Всем привет ещё раз Сегодня я постараюсь рассказать вам,как создать квест на тематику войны группировок.Я буду делать квест на своей локе,но думаю вам будет понятно как это сделать на своей.Предположим у нас родилась идея:"Опа!Я придумал,хочу сделать квест,чтобы ключевой непись попросил меня уничтожить бандосов,но ведь ГГ не рембо и ему нужна помощь,но как это сделать!?" Объясняю. И так..Снимем координаты с локи на которой нам нужно заспавнить отряд который хотим уничтожить и который будет нам помогать.Для снятия координат есть более совершенная программа от Stalker56 Снимайте координаты спейса и смарта для сталкеров поближе к лагерю,чтобы они дошли до врага пока ты бежишь Качаем тут: 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> * Теперь самое противное 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 * Вот и всё.Запускаем игру и пробуем... Надеюсь мой урок вам поможет Изменено 18 июля, 2020 пользователем Холод Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты