Jump to content

Mod Wiki - Tworzenie kwestu


trurl3
 Share

Recommended Posts

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

3.

4.

5.

6.

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:

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

2. defend_lager - musisz obronić miejsce

3. kill_stalker - musisz zabić stalkera

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

5. find_artefact - musisz znaleźć artefakt

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

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

1. trader = Sidorowicz

2. barman = Barman

3. ecolog = Sacharow

4. dolg = Woronin

5. freedom = Łukasz

6. wolf = Wilk

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

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

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

9. zastava_commander = Sierżant Kitsenko

10.petrenko = Petrenko

12.lisiy = Łysy

13.mercenary = Kabel

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

4. description to jest opis kwestu, jak pole "text"

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

community = actor

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

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

1. część obiektu, jak "af_drops" lub "wpn_vintorez"

target = outfit_specnaz_m1

2. id konkretnej postaci ( znajdziesz je w character_desc_[level_name].xml ), jak "sim_stalker_master_chuchelo"

target = sim_stalker_master_chuchelo

3. smart_terrain znajdziesz je w all.spawn, więc powinieneś przeczytać artykuł Edycja all.spawn)

target = ros_smart_monster5

8. 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

9. 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!

Link to comment
Share on other sites

  • 1 year later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.

Comunity