trurl3 Posted December 26, 2010 Report Share Posted December 26, 2010 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_raidesc_help_wounded_from_raid_0ui_iconsTotal_esc_help_wounded_from_raidescape_tasks.task_fox_completegarbage_meetstalker_startesc_fox_helpesc_help_wounded_from_raid_1green_locationEscape_stalker_from_raidescape_fox_healesc_dogs_returnesc_help_wounded_from_raid_2green_locationEscape_stalker_from_raidescape_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 WilkiemIdź do Sidorowiczablue_locationEscape_Traderplayer_complete_new_task infoportion_complete>Porozmawiaj z Wilkiemui_iconsTotal_find_itemgreen_locationEscape_novice_lager_volkplayer_talked_with_wolf infoportion_complete>Idź doi Sidorowiczablue_locationEscape_Traderplayer_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_startedplayer_talked_with_wolf player_complete_new_task esc_volk_new_quest_01esc_volk_new_quest_1player_talked_with_wolf2esc_volk_new_quest_2dialogs.break_dialogplayer_complete_new_taskplayer_talked_with_wolfesc_trader_new_quest_01esc_trader_new_quest_1new_task_started2esc_trader_new_quest_2dialogs.break_dialogplayer_complete_new_taskesc_trader_new_quest_complete_01esc_trader_new_quest_complete_1player_complete_new_task2esc_trader_new_quest_complete_2dialogs.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 SidorowiczaSidorowicz chce nowy fn2000Naznaczony, 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 More sharing options...
Trucker64 Posted October 1, 2012 Report Share Posted October 1, 2012 (edited) Już nieaktualne wszystko działa jak należy ! Pozdrowienia Edited October 4, 2012 by Trucker64 Link to comment Share on other sites More sharing options...
Recommended Posts