Сповіщення
Очистити все

SoC. Створення квесту на вбивство NPC


Ранг:
Майстер
Роль:
Гість
Записи:
752
Приєднався:
2 роки тому
 

Вітаю. У цьому уроці я напишу, як створити нескладний квест на вбивство сталкера. У ВСІХ СЕКЦІЯХ, ЯКІ ВИ ВСТАВЛЯЛИ У ФАЙЛИ, ВИДАЛЯЙТЕ ПОЯСНЕННЯ З ТОЧКОЮ-КОМою. Тож почнемо.

Потрібні такі файли:

  • 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 ; 
    ім'я нашого персонажа _ _ _ _ _ _ координати спавна нашого персонажа direction = 0.00115116173401475 , -5 .  
     
     
    ; 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_dan умова спавна НПС. Має видатися ця інфопорція.  
     
     
    
    
    
      
     
    [ 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 , -795839 ; теж координати , обов'язково писати і тут їх upd 
    : o_model = 0 
    upd 
    : o_torso = -5.07207296323031e -005 
    _ _ _ _ 
    _ _ _ _        
     
    ; 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.73999786 vertex_id 
    =
    186578_ _   
     
    [ esc_danila_look ]
     points = p0 p0 
    : name = wp00 
    p0: flags = 0x1 
    p0 : position = -79.6699981689453 , -5.059999994277954 , -72.809997550 ex_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 _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 . Поступово заливатиму тутори зі створення різних типів квестів. Всім поки що, удачі)


   
Цитата