Tworzenie kwestu [Mod Wiki]

Artykuł “Tworzenie Kwesta” z Mod Wiki

Link do artykułu Quest creation

Zawartość

A: Nowy kwest z nowymi dialogami

1.1 Podstawy tworzenia dialogu

1.2 Tworzenie Info_portion

1.3 Tworzenie nowego kwesta

B: Nowy kwest z istniejącymi dialogami

2.1 Opcjonalny Kwest

2.2 Przykład

A: Nowy kwest z nowymi dialogami

Podstawy tworzenia dialogu

Stwórzmy więc dialog w którym otrzymamy nowy kwest. Uczestniczą: Sidorowicz (S) i Naznaczony (N)

N: Hej Sidorovicz. Masz dla mnie robotę?

S: Oh, czyżby to był Naznaczony? Dobra, w porządku. Mam dla ciebie nastepujące zadanie: pogadaj z Wilkiem, ma coś dla ciebie.

N: Nie ma sprawy! Już ruszam.

Powiedzmy, że to będą frazy do podstawowego dialogu. A teraz potrzebujemy nadać im właściwy format tak, aby gra “zrozumiała” je.

Tworzenie “szkieletu” dialogu.

Żeby dodać nasz dialog, musimy otworzyć plik gamedata\config\gameplay\dialogs_escape.xml do edycji.

Dla tych, którzy znają język XML, struktura tego pliku będzie znajoma na pierwszy rzut oka, ale my wytłumaczymy kilka szczegółów.

Aby dodać dialog do gry, potrzebne są nam tak zwane “tagi”. Prezentujemy tu kilka tagów:

  1. i zamykający

  2. i zamykający

To by było w zasadzie dość, żeby stworzyć dialog. Jednakże dialog bazujący na tych tagach nie może posłużyć do stworzenia nowego kwesta. Żeby utworzyć kwest z dialogami potrzebujemy odpowiednich tagów, ale o tym później.

Tu jest znaczenie każdego z tagów:

  1. Określa zawartość pliku (w tym przypadku mówi że plik zawiera dialogi);

  2. Tworzy nowy dialog z id = “”. Identyfikator dialogu znajduje się pomiędzy znakami cudzysłowu. Identyfikator dialogu określony jest w pliku character_description_***.xml ;

  3. Ten tag mówi parserowi XML gry, że będą następować frazy dialogu. Innymi słowy, frazy dialogu są umieszczane pomiędzy i ;

  4. Ten tag kreuje frazę z id = “”. Identyfikator frazy znajduje się pomiędzy znakami cudzysłowu (UWAGA: w tym przypadku identyfikator musi być liczbą);

  5. Te dwa tagi zawierają text odpowiadający frazie (na przykład: esc_trader_talk_info_123). Sam tekst jest pobierany z plików stable_dialogs_*****.xml które zawierają wszystkie frazy jako tekst. Opowiem o tym nieco później;

  6. Ten tag zawiera odniesienie (jako liczba) do następnej frazy (lub fraz).

Teraz przejdźmy do tagów które pozwalają nam dodać nieco akcji do dialogów.

. Przedstawia warunek, który jeśli jest spełniony (zwrócone “true”), powoduje, że fraza lub dialog staje się dostępna dla postaci.

. Ten tag umożliwia wykonanie pewnych akcji podczas dialogu (na przykład, wymianę obiektów pomiędzy postaciami… lub nawet coś bardziej skomplikowanego). Wewnątrz tego tagu jest podane odniesienie do jakiejś funkcji (na przykład, dialogs.actor_set_dolg robi gracza członkiem Powinności).

. Daje graczowi tak zwane info_portions. Info_portions mogą być także przekazane przez , ale to będzie wymagało specjalnej funkcji. Info_portiion to podstawa kwestu. Info_poritions są definiowane w plikach info****.xml. Info_poritions mogą zaczynać kwesty lub je kończyć. A także, info_portions umożliwiają śledzenie akcji gracza żeby to, na przykład, wyświetlić odpowiednie dialogi. oraz są preconditions (warunkami wstępnymi) dla bieżącej frazy/dialogu. Pierwszy tag sprawdza posiadanie konkretnego info_portion przez gracza, drugi — brak.

Teraz możemy stworzyć dialog, w którym otrzymamy kwest. Jednakże, nie możemy stworzyć żadnych info_portions do aktywowania kwesta.

Tworzenie Info_portion

Teraz potwieramy plik gamedata\config\gameplay\ info_l01escape.xml. Cóż my tu widzimy? Racja, więcej XML. W tym przypadku interesują nas tylko dwa tagi:

[/php]

[php]

Ten pierwszy deklaruje samo info_portion. Ten drugi deklaruje zadanie (identyfikator zadania znajduje się w tagu ).

Na przykład, stwórzmy trzy info_portions, których będziemy potrzebowali do kwesta:

new_task  
  
  
  
  
  
  
[/php]

Pierwsze info_portion nazwane new_task_started aktywizuje kwest nazwany new_task.



Tworzenie nowego kwesta



Same kwesty są zawarte w plikach tasks_*****.xml



Otwórzmy plik gamedata\config\gameplay\tasks_escape.xml. Stary dobry XML.



Na przykład, przeanalizujmy następujący kwest:



[php]  
esc_help_wounded_from_raid  
  
esc_help_wounded_from_raid_0  
ui_iconsTotal_esc_help_wounded_from_raid  
escape_tasks.task_fox_complete  
garbage_meetstalker_start  


esc_fox_help

  
  
  
esc_help_wounded_from_raid_1  
green_location  
Escape_stalker_from_raid  
escape_fox_heal  
esc_dogs_return  
  
  
esc_help_wounded_from_raid_2  
green_location  
Escape_stalker_from_raid  
escape_stalker_done

Krok po kroku:

[/php]

Definiuje nazwę kwesta. Nazwa może być tekstem lub linkiem. W tym przypadku jest to link do tekstu w pliku string_Table_tasks_escape.xml .



[php]escape_tasks.task_fox_complete

Wywołuje funkcję nazwaną task_fox_complete z pliku escape_tasks.script. Wykonanie tej funkcji stworzy info_porition która zakończy bieżące zadanie, o ile wszystkie warunki funkcji zostaną spełnione.

escape_fox_heal[/php]

Jesli gracz otrzyma to info_portion, oznacza to, że bieżące zadanie zostało zakończone.



[php]esc_dogs_return

Jeśli gracz otrzyma to info_portion, oznacza to, że bieżące zadanie nie powiodło się.

green_location[/php]

Tworzy znacznik na mapie, z przypisaną poradą esc_fox i typem green_location.



[php]Escape_stalker_from_raid

Wskazuje na sid w pliku gamedata\config\game_story_ids.ltx

garbage_meetstalker_start[/php]

Automatycznie ustawia bieżące podzadanie na "Zakończone" jeśli gracz ma właściwe info_portion. //!!!!!! Nie jestem pewien — nigdy tego nie uzywałem.



[php]esc_help_wounded_from_raid_0

Zawiera opis podzadania. Może zawierać tekst lub odwołanie do tekstu.

Stwórzmy teraz kwest do naszego dialogu:

Porozmawiaj z Wilkiem  
  
Idź do Sidorowicza  
blue_location  
Escape_Trader  
player_complete_new_task infoportion_complete>  
  
  
Porozmawiaj z Wilkiem  
ui_iconsTotal_find_item  
green_location  
Escape_novice_lager_volk  
player_talked_with_wolf infoportion_complete>  
  
  
Idź doi Sidorowicza  
blue_location  
Escape_Trader  
player_complete_new_task infoportion_complete>  
  
[/php]

Tu musisz użyć odwołania do ikony z pliku ui_iconstotal, bo inaczej kiedy spróbujesz zajrzeć do "Zadań" w swoim PDA gra wypadnie. Tylko dla przykładu, użyłem ikony szukania przedmiotu.



Teraz, stworzymy szkielet dialogu naszego kwesta. Będziemy potrzebować trzech: jednego dla Wilka i dwóch dla Sidorowicza.



[php]  
new_task_started  
player_talked_with_wolf  
 player_complete_new_task   
  
  
esc_volk_new_quest_0  
1  
  
  
esc_volk_new_quest_1  
player_talked_with_wolf  
2  
  
  
esc_volk_new_quest_2  
dialogs.break_dialog  
  
  
  
  
  
  
player_complete_new_task  
player_talked_with_wolf  
  
  
esc_trader_new_quest_0  
1  
  
  
esc_trader_new_quest_1  
new_task_started  
2  
  
  
esc_trader_new_quest_2  
dialogs.break_dialog  
  
  
  
  
  
  
player_complete_new_task  
  
  
esc_trader_new_quest_complete_0  
1  
  
  
esc_trader_new_quest_complete_1  
player_complete_new_task  
2  
  
  
esc_trader_new_quest_complete_2  
dialogs.break_dialog

Cały ten “szkielet” powinien byc dodany do pliku dialogs_escape.xml pomiedzy i !

Bardzo dokładnie pilnuj właściwej kolejności tagów i DOKŁADNOŚCI identyfikatorów — w pliku z twoim dialogiem, jak również w innych plikach gdzie używasz tagów i swoich własnych identyfikatorów (na przykład, identyfikatory w pliku dialogów muszą być takie same jak w pliku z tekstami). W innym przypadku, wszystko co osiągniesz, to seria wypadów z dziwnymi logami. Sam miałem problem kiedy próbowałem aktywizować kwest z tego artykułu.

Uwaga: popatrz na istniejące dialogi stworzone przez wydawców. To może ci ułatwić życie.

Teraz, idź do pliku character_desc_escape.xml

Znajdź tam NPC z id = “escape_trader” i dodaj dwa nowe :

esc_trader_new_quest_complete   
esc_trader_new_quest [/php]

Teraz, znajdź NPC z id = "esc_wolf" i dodaj jeden actor_dialog:



[php] volk_new_quest

Uwaga: to dialog który może być aktywizowany przez samego gracza na życzenie. Dialog jest aktywizowany kiedy określone warunki są spełnione, i normalnie jest niedostępny.

Teraz potrzebujemy już tylko dodać teksty trzech dialogów aby skompletować nasz kwest. Otwórz plik stable_dialogs_escape.xml i dodaj tam następujący nowy tekst:

Wypełniłem zadanie Wilka!  
  
  
Dobra robota, Naznaczony. Można na tobie polegać.  
  
  
Cała przyjemność po mojej stronie, Sidorowicz.  
  
  
Hey Sidorowicz. Masz dla mnie jakąś robotę?  
  
  
Oh, czyżby to był Naznaczony? Dobra, w porządku. Mam dla ciebie nastepujące zadanie: pogadaj z Wilkiem, ma coś dla ciebie.  
  
  
Nie ma sprawy! Już ruszam.  
  
  
Yo, Wilk. Sidorowicz wysłał mnie do ciebie, mówi, że masz cos dla mnie.  
  
  
Cześć, Naznaczony. Ciągle słuchasz tego starego wieprza? Wszystko w porządku. Idź i powiedz mu to.  
  
  
Dobra, idę.  
[/php]

Zakończyłeś tworzenie kwesta!



B: New quest with existing dialogs



Opcjonalny Kwest



Ta część tutoriala wyjaśni jak stworzyć opcjonalny kwest w rodzaju "Znajdź artefakt". Z jednej strony, używając tego sposobu, będziesz edytować tylko pliki, z drugiej strony nie będziesz mógł użyć własnych dialogów. Plik który będziemy musieli edytować, to task_manager.ltx w config\misc dir. Po otworzeniu, znajdujemy sekcję nazwaną [list], to jest lista dostępnych zadań. Jest tam wiele sekcji, każda z nich opisuje zadanie. N.p.



[php][b][tm_find_artefact_2][/b]  

type              = artefact  

community         = actor  

text              = tm_find_artefact_2_text  

description       = tm_find_artefact_2_descr  

parent            = trader  

target            = af_cristall_flower  

reward_money      = 3000  

reward_reputation = +20  

reward_rank       = 3  

reward_item       = vodka  

time              = 86400  

prior             = 2

Jak widzisz jest tu kilka edytowalnych pól, są to:

  1. type mówi o typie kwestu, jest 6 typów kwestów:

  2. eliminate_lager - musisz zabić grupę stalkerów\potworów

  3. defend_lager - musisz obronić miejsce

  4. kill_stalker - musisz zabić stalkera

  5. find_item - musisz znaleźć przedmiot, broń lub kombinezon

  6. find_artefact - musisz znaleźć artefakt

  7. monster_part - musisz znaleźć część potwora

  8. parent to jest npc który daje ci zadanie, tylko ci stalkerzy mogą dać ci zadanie:

  9. trader = Sidorowicz

  10. barman = Barman

  11. ecolog = Sacharow

  12. dolg = Woronin

  13. freedom = Łukasz

  14. wolf = Wilk

  15. shustriy = Żwawy, więzień z fabryki

  16. drunk_dolg = Brome, pijany powinnościowiec w barze

  17. hunter = Myśliwy, który stracił bm16 na Rostoku

  18. zastava_commander = Sierżant Kitsenko

10.petrenko = Petrenko

12.lisiy = Łysy

13.mercenary = Kabel

  1. text to jest nazwa kwestu którą widzisz, jest to string_id w stable_task_manager.xml w katalogu text

  2. description to jest opis kwestu, jak pole “text”

  3. community to jest pole społeczności, ale nie jest używane, więc możesz zostawić je jak jest,

community = actor
  1. prior to jest priorytet, najpierw dostaniesz zadanie z niższym numerem prior, można je ominąć.

  2. target to jest cel, który musimy zabić/znaleźć. To może być :

  3. część obiektu, jak “af_drops” lub “wpn_vintorez”

target = outfit_specnaz_m1
  1. id konkretnej postaci ( znajdziesz je w character_desc_[level_name].xml ), jak “sim_stalker_master_chuchelo”
target = sim_stalker_master_chuchelo
  1. smart_terrain znajdziesz je w all.spawn, więc powinieneś przeczytać artykuł Edycja all.spawn)
target = ros_smart_monster5
  1. reward_item to jest twoja nagroda w wyposażeniu, musisz wpisać tu część obiektu, np.
reward_item = ammo_5.56x45_ap, ammo_5.56x45_ap, ammo_5.56x45_ap, ammo_m209, ammo_m209
  1. reward_money to twoja nagroda w pieniądzach, np.
reward_money = 3500

10.reward_rank podnosi rangę Naznaczonego, np.

reward_rank = 5

11.reward_reputation podnosi reputację Naznaczonego, np.

reward_reputation = +25

nie zapomnij dodać “+”

12.reward_relation to poprawia relacje Naznaczonego z frakcjami: Wolnośc i Powinność

reward_relation = freedom, +150, dolg, -150

Jak widać, najpierw musimy podać frakcję, przecinek i pozytywną lub negatywną liczbę.

13.time mówi jak wiele dni mamy na wykonanie zadania, np.

time = 86400

gdzie 86400 to jeden dzień, ponieważ czas podaje się w sekundach, więc 1 * 24 * 60 * 60 = 86400

14.condlist zadanie będzie wydane, jeśli masz ( lub nie masz) to infoportion, np.

condlist = {+esc_darklab_documents_read}

Czy zdobyłeś dokumenty z laboratorium x18 ?

15.init_condition mówi o warunkach, które muszą byc spełnione, jesli chcesz zakończyc zadanie

init_condition= {=actor_on_level(l01_Escape) +agroprom_military_case_have}

W tym przypadku, musisz mieć infoportion “agroprom_military_case_have” i musisz pozostawać na Kordonie.

Uwaga!. W tym pliku są kwesty zależne od scenariusza ale lepiej ich nie edytować.

Przykład

To jest nasz nowo skompilowany kwest: w task_manager.txt

[trader_find_item_2]  

type              = find_item  

condlist          = {+esc_serious_talk}  

community         = actor  

text              = my_quest_name  

description       = my_quest_descr  

parent            = trader  

target            = wpn_fn2000  

reward_item       = af_dummy_glassbeads  

reward_money      = 10000  

reward_reputation = +25  

reward_rank       = 5  

time              = 86400[/php]

Nie zapomnij dodać nazwy kwestu [trader_find_item_2] w sekcji [list]



W config\gameplay\storyline_info_taskmanger.xml musisz dodać :



[php]

my_quest_string_id

Nastepnie w stable_task_manager.xml in config\text\twój język

Znajdź fn2000 dla Sidorowicza  
  
  
Sidorowicz chce nowy fn2000  
  
  
Naznaczony, przynieś mi fn2000 a ja dam ci kupę pieniędzy....  
[/php]

W ten sposób zakończyłeś tworzenie kwesta!

Już nieaktualne wszystko działa jak należy !
Pozdrowienia