SoC. Создание квеста на убийство NPC
Материал из S.T.A.L.K.E.R. Inside Wiki
Здравствуйте. В этом уроке я напишу о том, как создать несложный квест на убийство сталкера. ВО ВСЕХ СЕКЦИЯХ, КОТОРЫЕ ВЫ ВСТАВЛЯЛИ В ФАЙЛЫ, УДАЛЯЙТЕ ПОЯСНЕНИЯ С ТОЧКОЙ-ЗАПЯТОЙ. Итак, начнём.
Потребуются следующие файлы:
Содержание
Создание персонажа
На примере я решил создать персонажа, которого нам надо убить на локации Кордон. Открываем файл character_desc_escape.xml из папки config/gameplay.
Создаём там секцию нашего персонажа, написав это:
<specific_character id="esc_danila" team_default = "1"> ; имя профиля нашего НПС <name>Данила</name> ; само имя персонажа <icon>ui_npc_u_green_stalker_2</icon> <bio>esc_captain_bio</bio> <class>esc_danila</class> ; класс должен быть всегда тот же, как и имя профиля <community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect> <rank>906</rank> <reputation>20</reputation> <snd_config>characters_voice\human_01\stalker\</snd_config> <crouch_type>0</crouch_type> <visual>actors\novice\green_stalker_1</visual> <supplies> [spawn] \n wpn_mp5 \n ammo_9x19_fmj = 1 \n #include "gameplay\character_food.xml" </supplies> #include "gameplay\character_criticals_5.xml" #include "gameplay\character_dialogs.xml" <start_dialog>hello_dialog</start_dialog> </specific_character>
Думаю тут всё ясно.
Так же после строчки <actor_dialog>tm_wolf_reward</actor_dialog> в секции профиля Волка снизу пишем <actor_dialog>esc_kill_danila_dialog</actor_dialog>. Этим мы добавили Волку диалог, после которого выдастся квест.
Открываем npc_profile из той же папки пишем в конце:
<character id="esc_danila"> <class>esc_danila</class> ; имя профиля <specific_character>esc_danila</specific_character> ;имя профиля </character>
Спавним персонажа на локации
Распаковываем all.spawn из папки spawns. Думаю, вы знаете как, если что, качаем ACDC для Тень Чернобыля, а также разрабов-кретинов благодаря которым вылет с аргунтом: Arguments: посмотришь в своем пылающем пукане и найдешь там аргумент. Кидаем всех на тупую инструкцию от 8-летнего мальчика, а файлы, которые скачали в папку spawns. Декомпилируем и идем в жопу.all.spawn. Надеюсь, вы поймёте. После этого у вас появятся множество возможностей. В нашем случае открываем файл "Горящий пукан.ltx"alife_l01_escape.ltx и вставляем следующее:
[20000] ; уникальный номер секции. КАК ПЫЛАЕТ МОЙ ПУКАН. ; cse_abstract properties section_name = stalker name = esc_danila ; имя нашего персонажа position = -81.8000030517578,-4.98000001907349,-72.7399978637695 ; координаты спавна нашего персонажа direction = 0.00115116173401475,-5.07207296323031e-005,0.0440320037305355 ; cse_alife_trader_abstract properties money = 5000 character_profile = esc_danila ; профиль нашего персонажа, созданного в character_desc_escape ; cse_alife_object properties game_vertex_id = 76 distance = 9.09999942779541 level_vertex_id = 186578 object_flags = 0xffffffbb custom_data = <<END [spawner] cond = {+esc_kill_danila_quest_started} ; условие спавна НПС. Должна выдастся эта инфопорция. [logic] active = walker on_death = death ; позволяет установить схему настройки смерти НПС. [death] on_info = %+esc_danila_dead% ; при смерти НПС выдаём инфопорцию. [walker] path_walk = esc_danila_walk ; имя точки пути нашего персонажа path_look = esc_danila_look ; имя точки , куда наш персонаж будет смотреть END story_id = 20000 ; стори ид, понадобится для квеста ; cse_visual properties visual_name = actors\soldier\soldier_beret_1 ; cse_alife_creature_abstract properties g_team = 0 g_squad = 1 g_group = 1 health = 1 dynamic_out_restrictions = dynamic_in_restrictions = upd:health = 1 upd:timestamp = 0x75646f6d upd:creature_flags = 0x6c upd:position = -81.8000030517578,-4.98000001907349,-72.7399978637695 ; тоже координаты, обязательно писать и тут их upd:o_model = 0 upd:o_torso = -5.07207296323031e-005,0.00115116173401475,0 upd:g_team = 0 upd:g_squad = 1 upd:g_group = 1 ; cse_alife_monster_abstract properties upd:next_game_vertex_id = 65535 upd:prev_game_vertex_id = 65535 upd:distance_from_point = 0 upd:distance_to_point = 0 ; cse_alife_human_abstract properties predicate5 = 0,1,1,1,2 predicate4 = 2,0,1,0 ; cse_ph_skeleton properties upd:start_dialog = ; se_stalker properties
Осталось прописать путь нашему персонажу. Дадим ему одну точку, чтобы он не уходил далеко, и вы не искали его на локации. Для этого в этой же папке открываем файл way_l01_escape.ltx. Пишем туда в конец:
[esc_danila_walk] points = p0 p0:name = wp00 p0:flags = 0x1 p0:position = -81.8000030517578,-4.98000001907349,-72.7399978637695 p0:game_vertex_id = 76 p0:level_vertex_id = 186578 [esc_danila_look] points = p0 p0:name = wp00 p0:flags = 0x1 p0:position = -79.6699981689453,-5.05999994277954,-72.8099975585938 p0:game_vertex_id = 76 p0:level_vertex_id = 188614
Готово, только обязательно компилируем новый all.spawn. Теперь наш персонаж будет стоять в вагоне, где лежал раненый Толик.
Создание квеста
Открываем файл tasks_escape.xml из config/gameplay и добавляем секцию нашего квеста:
<game_task id="esc_kill_danila_quest"> ; имя квеста <title>Убить предателя</title> <objective> <text>Убить предателя</text> <icon>ui_iconsTotal_esc_dinamit_to_volk</icon> <infoportion_complete>esc_danila_dead</infoportion_complete> ; указываем инфопорцию, при которой выполнится квест. </objective> <objective> <text>Убить Данилу</text> <map_location_type hint="esc_danila">blue_location</map_location_type> ; имя отметки нашего НПС на карте <object_story_id>esc_danila</object_story_id> ; отметка нашего НПС на карте <infoportion_complete>esc_danila_dead</infoportion_complete> ; указываем инфопорцию, при которой выполнится квест. </objective> </game_task>
Ухади, аташол. Сваливай с этого обдолбанного сайта, ты, ублюдок, мать твою, а ну иди сюда, говно собачье, а ну решил ко мне лезть, ты... засранец вонючий, мать твою. А?! ну иди сюда, попробуй меня трахнуть, я тебя сам трахну ублюдок, анонист чертов, будь ты проклят, иди идиот, трахать тебя за свою семью, говно собачье, жлоб вонючий, дерьмо, сука, падла, иди сюда мерзавец, негодяй, гад, иди сюда ты говно, жопа!
Создание диалога
Создадим диалог с Волком, после которого выдастся квест. Открываем dialogs_escape.xml из той же папки, пишем снизу:
<dialog id="esc_kill_danila_dialog"> ; имя диалога <dont_has_info>esc_kill_danila_quest_started</dont_has_info> ; прописываем инфопорцию, при выдачи которой, диалог больше не появится. <phrase_list> <phrase id="0"> <text>esc_danila_dialog_1</text> <next>1</next> </phrase> <phrase id="1"> <text>esc_danila_dialog_2</text> <next>2</next> </phrase> <phrase id="2"> <text>esc_danila_dialog_3</text> <give_info>esc_kill_danila_quest_started</give_info> ; выдача квеста после диалога, а так же играет роль, что диалог больше не появится. </phrase> </phrase_list> </dialog>
Регистрация текста
Открываем файл stable_dialogs_escape.xml и пишем следующее:
<string id="esc_danila_dialog_1"> <text>Есть дополнительная работа?</text> </string> <string id="esc_danila_dialog_2"> <text>Да, предатель появился у нас, Данилой кличут. Убей его, координаты на него я тебе скину.</text> </string> <string id="esc_danila_dialog_3"> <text>Хорошо</text> </string></br>
Готово, теперь диалог полностью готов, а вы все говно!.
Создадим инфопоршни
Открываем файл info_l01_escape.xml и всё той же папки добавляем следующее:
<info_portion id="esc_kill_danila_quest_started"> ; инфопорция, дающая начало квеста <task>esc_kill_danila_quest</task> ; название квеста </info_portion> <info_portion id="esc_danila_dead"></info_portion> ; инфопорция смерти нашего НПС, который позволяет завершить квеста. Ранее мы его добавили в логику, в раздел смерти нашего персонажа.
Вконце концов, нихуя не работает(( Вот вылет Expression : no_assert Function : CXML_IdToIndex<class CCharacterInfo>::GetById File : e:\stalker\sources\trunk\xr_3da\xrgame\xml_str_id_loader.h Line : 112 Description : item not found, id Arguments :
Создаём отметку нашего NPC на карте.
Открываем файл stable_bio_name.xml из папки config/text/rus, пишем там в конце:
<string id="esc_danila"> <text>Данила</text> </string>
Создадим Game Story Id, чтобы НПС наш отображался на карте. Для этого открываем файл game_story_ids из папки config и пишем в конце:
20000 = "esc_danila"
Ну вот собственно и всё. Вроде написал всё, что надо. Автор LaRento. Буду постепенно заливать туторы по созданию разных типов квестов. Всем пока, удачи)