NAZWA: Tworzenie zadania na zabójstwo NPC [SoC]
TWÓRCA: LaRento
WYMAGANE NASTĘPUJĄCE PLIKI:
Spoiler
- character_desc_escape.xml
- npc_profile.xml
- all.spawn
- tasks_escape.xml
- game_story_ids.ltx
- dialogs_escape.xml
- stable_dialogs_escape.xml
- info_l01escape.xml
- stable_bio_name.xml
1. TWORZENIE POSTACI:
Spoiler
Korzystając z przykładu, postanowiono stworzyć postać, którą musimy zabić na lokacji Kordon. Otwieramy plik character_desc_escape.xml z folderu config/gameplay.
Tworzymy tam naszą sekcję postaci, pisząc to:
<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>
Chyba wszystko jest tutaj jasne.
Poza tym po wierszu <actor_dialog>tm_wolf_reward</actor_dialog> w sekcji profilu Wilka poniżej wpisz <actor_dialog>esc_kill_danila_dialog</actor_dialog>. W ten sposób dodaliśmy dialog Wilkowi, po którym zostanie wydane zadanie.
Otwieramy npc_profile.xml z tego samego folderu i piszemy na końcu:
<character id="esc_danila">
<class>esc_danila</class> ; nazwa profilu
<specific_character>esc_danila</specific_character> ;nazwa profilu
</character>
2. SPAWNUJEMY POSTAĆ NA LOKACJI:
Spoiler
Rozpakuj all.spawn z folderu spawns. Pobieramy ACDC dla Shadow of Chernobyl, wrzucamy pliki, które pobraliśmy do folderu spawns. Dekompilujemy all.spawn. Po tym będzie wiele plików. W naszym przypadku otwieramy plik alife_l01_escape.ltx i wklejamy następujące elementy:
[20000] ; unikalny numer sekcji
; cse_abstract properties
section_name = stalker
name = esc_danila ; nazwa naszej postaci
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 ; profil naszej postaci, stworzonej w 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} ; warunek spawnu NPC. Powinien zostać wydany ten infoportion.
[logic]
active = walker
on_death = death ; pozwala na instalację schematu ustawienia śmierci NPC.
[death]
on_info = %+esc_danila_dead% ; wskazuje infoportion, który zostanie wydany po śmierci NPC i zakończy zadanie.
[walker]
path_walk = esc_danila_walk ; nazwa punktu ścieżki naszej postaci
path_look = esc_danila_look ; nazwa punktu , gdzie nasza postać będzie patrzeć
END
story_id = 20000 ; story id, przyda sie dla zadania
; 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 ; koordynaty, obowiązkowo pisać je tutaj
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
Pozostaje przypisać ścieżkę do naszej postaci. Damy mu jeden punkt, aby nie odszedł daleko i abyśmy nie szukał go po lokacji. Aby to zrobić, otwieramy plik way_l01_escape.ltx w tym samym folderze.
Piszemy tam na końcu:
[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
Gotowe, tylko pamiętaj o skompilowaniu nowego all.spawn. Teraz nasza postać stanie w samochodzie, w którym leżał ranny Tolik.
3. TWORZYMY SAMO ZADANIE:
Spoiler
Otwieramy plik task_escape.xml z config/gameplay i dodajemy naszą sekcję zadania:
<game_task id="esc_kill_danila_quest"> ; ID-nazwa zadania
<title>Zabić stalkera</title>
<objective>
<text>Zabić stalkera</text>
<icon>ui_iconsTotal_esc_dinamit_to_volk</icon>
<infoportion_complete>esc_danila_dead</infoportion_complete> ; wskazujemy infoportion, przy którym zadanie jest zaliczane jako wykonane.
</objective>
<objective>
<text>Zabić Daniłę</text>
<map_location_type hint="esc_danila">blue_location</map_location_type> ; nazwa znacznika naszego NPC na mapie
<object_story_id>esc_danila</object_story_id> ; znacznik naszego NPC na mapie
<infoportion_complete>esc_danila_dead</infoportion_complete> ; wskazujemy infoportion, przy którym zadanie jest zaliczane jako wykonane.
</objective>
</game_task>
4. TWORZENIE DIALOGU:
Spoiler
Tworzymy dialog z Wilkiem, po którym zostanie wydane zadanie. Otwieramy dialogs_escape.xml z tego samego folderu i piszemy poniżej:
<dialog id="esc_kill_danila_dialog"> ; ID-nazwa dialogu
<dont_has_info>esc_kill_danila_quest_started</dont_has_info> ; wskazujemy infoportion, przy którego wydaniu dialog więcej się nie pojawi.
<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> ; wydanie infoportion, zawierającego zadanie; również gra rolę, aby dialog więcej się nie powtórzył.
</phrase>
</phrase_list>
</dialog>
5. REJESTRACJA TEKSTU DIALOGU:
Spoiler
Otwieramy plik stable_dialogs_escape.xml i piszemy:
<string id="esc_danila_dialog_1">
<text>Jest dodatkowa praca?</text>
</string>
<string id="esc_danila_dialog_2">
<text>Tak, pojawił się zdrajca, nazywa się Daniła. Zabij go, miejsce pobytu prześlę.</text>
</string>
<string id="esc_danila_dialog_3">
<text>Dobrze.</text>
</string>
Gotowe, teraz dialog jest zakończony.
6. TWORZYMY INFOPORTION:
Spoiler
Otwieramy plik info_l01_escape.xml w tym samym folderze i dodajemy następujące elementy:
<info_portion id="esc_kill_danila_quest_started"> ; infoportion, odpowiadający za wydanie zadania.
<task>esc_kill_danila_quest</task> ; wskazujemy ID-nazwę zadania.
</info_portion>
<info_portion id="esc_danila_dead"></info_portion> ; infoportion o śmierci naszego NPC.
<info_portion id="esc_kill_danila_quest_complete"></info_portion> ; infoportion o wykonaniu zadania.
7. TWORZYMY ZNACZEK NASZEGO NPC NA MAPIE:
Spoiler
Otwieramy plik stable_bio_name.xml z folderu config/text/rus i piszemy tam na końcu:
<string id="esc_danila">
<text>Daniła</text>
</string>
Utwórzmy Game Story ID. W tym celu otwieramy plik game_story_ids.ltx z folderu config i piszemy na końcu:
20000 = "esc_danila"
Idziemy więc do Wilka, rozmawiamy, dostajemy zadanie, zabijamy postać i git.
ŹRÓDŁO:
https://ap-pro.ru/forums/topic/1034-soc-sozdanie-kvesta-na-ubiystvo-npc/
