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

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

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

Перейти к: навигация, поиск
(Регистрация текста)
(Регистрация текста)
 
(не показаны 10 промежуточные версии 3 участников)
Строка 52: Строка 52:
  
 
== Спавним персонажа на локации ==
 
== Спавним персонажа на локации ==
<br><br>Распаковываем <b>all.spawn</b> из папки <i>spawns</i>. Думаю, вы знаете как, если что, качаем ACDC для Тень Чернобыля, а также разрабов-кретинов благодаря которым вылет с аргунтом: Arguments: посмотришь в своем пылающем пукане и найдешь там аргумент. Кидаем всех на тупую инструкцию от 8-летнего мальчика, а  файлы, которые скачали в папку <i>spawns</i>. Декомпилируем и идем в жопу.<b>all.spawn</b>. Надеюсь, вы поймёте. После этого у вас появятся множество возможностей. В нашем случае открываем файл "Горящий пукан.ltx"<b>alife_l01_escape.ltx</b> и вставляем следующее:
+
<br><br>Распаковываем <b>all.spawn</b> из папки <i>spawns</i>. Думаю, вы знаете как, если что, качаем ACDC для Тень Чернобыля. Кидаем файлы, которые скачали в папку <i>spawns</i>. Декомпилируем <b>all.spawn</b>. Надеюсь, вы поймёте. После этого у вас появятся множество файлов. В нашем случае открываем файл <b>alife_l01_escape.ltx</b> и вставляем следующее:
<br><ini>[20000] ; уникальный номер секции. КАК ПЫЛАЕТ МОЙ ПУКАН.
+
<br><ini>[20000] ; уникальный номер секции.
 
; cse_abstract properties
 
; cse_abstract properties
 
section_name = stalker
 
section_name = stalker
Строка 157: Строка 157:
 
         </objective>
 
         </objective>
 
         </game_task></xml>
 
         </game_task></xml>
 
Ухади, аташол. Сваливай с этого обдолбанного сайта, ты, ублюдок, мать твою, а ну иди сюда, говно собачье, а ну решил ко мне лезть, ты... засранец вонючий, мать твою. А?! ну иди сюда, попробуй меня трахнуть, я тебя сам трахну ублюдок, анонист чертов, будь ты проклят, иди идиот, трахать тебя за свою семью, говно собачье, жлоб вонючий, дерьмо, сука, падла, иди сюда мерзавец, негодяй, гад, иди сюда ты говно, жопа!
 
  
 
== Создание диалога ==
 
== Создание диалога ==
Строка 194: Строка 192:
 
</string></br></xml>
 
</string></br></xml>
  
 +
Затем необходимо прописать этот диалог Волку.
 +
Открываем <b>character_desc_escape.xml</b>, находим там профиль Волка, <b>esc_wolf</b> и вставляем диалог, например сюда:
 +
<br><xml><start_dialog>escape_lager_volk_talk</start_dialog>
 +
<start_dialog>dm_hello_dialog</start_dialog>
 +
<actor_dialog>esc_kill_danila_dialog</actor_dialog> <!--диалог на убийство Данилы--->
 +
<actor_dialog>dm_cool_info_dialog</actor_dialog>
 +
<actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog>
 +
<actor_dialog>tm_wolf_dialog</actor_dialog>
 +
<actor_dialog>tm_wolf_reward</actor_dialog></br></xml>
  
Готово, теперь диалог полностью готов, а вы все говно!.
+
Готово, теперь диалог полностью готов. Квест станет доступным после разговора Волка по рации с Петрухой.
  
 
== Создадим инфопоршни ==
 
== Создадим инфопоршни ==
<br>Открываем файл <b>info_l01_escape.xml</b> и всё той же папки добавляем следующее:
+
<br>Открываем файл <b>info_l01_escape.xml</b> из всё той же папки добавляем следующее:
 
<br><xml> <info_portion id="esc_kill_danila_quest_started"> ; инфопорция, дающая начало квеста
 
<br><xml> <info_portion id="esc_kill_danila_quest_started"> ; инфопорция, дающая начало квеста
 
             <task>esc_kill_danila_quest</task> ; название квеста
 
             <task>esc_kill_danila_quest</task> ; название квеста
 
         </info_portion>
 
         </info_portion>
 
  <info_portion id="esc_danila_dead"></info_portion> ; инфопорция смерти нашего НПС, который позволяет завершить квеста. Ранее мы его добавили в логику, в раздел смерти нашего персонажа.</xml>
 
  <info_portion id="esc_danila_dead"></info_portion> ; инфопорция смерти нашего НПС, который позволяет завершить квеста. Ранее мы его добавили в логику, в раздел смерти нашего персонажа.</xml>
 
Вконце концов, нихуя не работает((
 
Вот вылет
 
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 на карте.  ==
 
== Создаём отметку нашего NPC на карте.  ==

Текущая версия на 13:52, 15 июля 2016

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

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

  • 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 для Тень Чернобыля. Кидаем файлы, которые скачали в папку spawns. Декомпилируем all.spawn. Надеюсь, вы поймёте. После этого у вас появятся множество файлов. В нашем случае открываем файл 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>

    Затем необходимо прописать этот диалог Волку. Открываем character_desc_escape.xml, находим там профиль Волка, esc_wolf и вставляем диалог, например сюда:


    <start_dialog>escape_lager_volk_talk</start_dialog>
    <start_dialog>dm_hello_dialog</start_dialog>
    <actor_dialog>esc_kill_danila_dialog</actor_dialog> <!--диалог на убийство Данилы--->
    <actor_dialog>dm_cool_info_dialog</actor_dialog>
    <actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog>
    <actor_dialog>tm_wolf_dialog</actor_dialog>
    <actor_dialog>tm_wolf_reward</actor_dialog></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> ; инфопорция смерти нашего НПС, который позволяет завершить квеста. Ранее мы его добавили в логику, в раздел смерти нашего персонажа.

    Создаём отметку нашего 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