SoC. Создание квеста на убийство NPC — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

SoC. Создание квеста на убийство NPC — различия между версиями

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск
(Создание квеста)
(Регистрация текста)
Строка 195: Строка 195:
  
  
Готово, теперь диалог полностью готов.  
+
Готово, теперь диалог полностью готов, а вы все говно!.
  
 
== Создадим инфопоршни ==
 
== Создадим инфопоршни ==

Версия 11:15, 31 декабря 2015

Здравствуйте. В этом уроке я напишу о том, как создать несложный квест на убийство сталкера. ВО ВСЕХ СЕКЦИЯХ, КОТОРЫЕ ВЫ ВСТАВЛЯЛИ В ФАЙЛЫ, УДАЛЯЙТЕ ПОЯСНЕНИЯ С ТОЧКОЙ-ЗАПЯТОЙ. Итак, начнём.

Потребуются следующие файлы:

  • character_desc_escape.xml
  • npc_profile.xml
  • all.spawn
  • tasks_escape.xml
  • game_story_ids.ltx
  • dialogs_escape.xml
  • info_l01escape.xml
  • stable_bio_name.xml
  • stable_dialogs_escape.xml


    Создание персонажа


    На примере я решил создать персонажа, которого нам надо убить на локации Кордон. Открываем файл 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. Буду постепенно заливать туторы по созданию разных типов квестов. Всем пока, удачи)
  • Другие места
    LANGUAGE