trurl3 Opublikowano 26 Grudnia 2010 Zgłoś Udostępnij Opublikowano 26 Grudnia 2010 Artykuł "Dialogi" z Mod Wiki Link do artykułu Dialogs Zawartość: 1. Wprowadzenie do Dialogów 2. Statyczne czy Dynamiczne - które zastosować 3. Dialogi Statyczne 4. Dialogi Dynamiczne 5. Preconditions (Warunki wstępne) 6. Który dialog*.xml zastosować 7. Teksty 8. Jak przypisać dialog do postaci 1. Wprowadzenie do Dialogów Po pierwsze, są dwie metody tworzenia dialogów. Jak zostało to z grubsza opisane w artykule Quest_creation, istnieją 'statyczne' drzewka dialogowe, umożliwiające zdefiniowanie stosunkowo prostych konwersacji. Dodatkowo można tworzyć dialogi 'dynamiczne' lub kontrolowane skryptowo. 2. Statyczne czy Dynamiczne - które zastosować Dla większości dialogów, metoda statyczna będzie prostsza i wystarczająco wydajna. Definiuje się wstępnie zaplanowane drzewko konwersacji, które można rozgałęziać albo przy użyciu wyborów, albo warunków wstępnych 'preconditions'. Dialogi dynamiczne, do określenia jak ma się rozwijać konwersacja, zamiast wstępnie zaplanowanego drzewka konwersacji używają skryptów. W standardowej grze prawie każdy stalker posiada opcje 'cool info' (luźne informacje), która bardziej lub mniej losowo daje odpowiedzi na pytania, czy postać wie coś ciekawego. Ta opcja wykorzystuje 'dynamiczne' dialogi ze skryptem 'losowo' decydującym, którą odpowiedź da stalker. 3. Dialogi Statyczne Prosty dialog statyczny może wyglądać następująco. 1 - Hej, facet, co jest grane? 2 - Nic szczególnego, a jak u ciebie? 11 - Nieźle, dziękuję. 111- Miło słyszeć, tak trzymaj. lub 12 - Bywało lepiej. 121- No cóż, jutro też jest dzień, miejmy nadzieję na lepsze. or 13 - Człowieku, jestem na dnie. 131- Kiepsko, kolego. Przykro to słyszeć. Jest to prosta konwersacja z jedna linią otwierającą, jedną odpowiedzią, i trzema odgałęzieniami dla trzech odpowiedzi. Możemy pozwolić użytkownikowi wybrać jedną z trzech gałęzi, lub ograniczyć dostępność niektórych przez preconditions. Aby zdefiniować ten dialog jako statyczny, powinniśmy stworzyć strukturę dialogu xml, i wstawić ją do jednego z plików dialog*.xml w katalogu config\gameplay. our_casual_dialog_01our_casual_dialog_1111213our_casual_dialog_11111our_casual_dialog_12121our_casual_dialog_13131our_casual_dialog_111our_casual_dialog_121our_casual_dialog_131 4. Dialogi Dynamiczne Przy dialogach Dynamicznych nie definiuje się całego drzewka, ale definiuje się skrypt inicjalizacyjny, który będzie w stanie określić, jaka frazę należy podać. dialog_manager.init_intro_dialog [/php] 5. Preconditions (Warunki wstępne) Zarówno dialogi Dynamiczne jak i Statyczne umożliwiają użycie tagu . Preconditions (warunki wstępne) są to funkcje skryptowe które muszą zwrócić wartość 'true' aby dialog był możliwy. Wiele funkcji precondition jest definiowanych w pliku dialog_manager.script. Jest ważne aby zdać sobie sprawę, że jakikolwiek błąd w dialog_manager.script nie pozwoli na prawidłowe przypisanie dialog_manager global i spowoduje natychmiastowy wypad gry z komunikatem: [error]Arguments : LUA error: e:\games\stalker\gamedata\scripts\_g.script:1255: attempt to index global 'dialog_manager' (a nil value) Preconditions sa wywoływane z pięcioma parametrami - oryginalny (pierwszy) mówca (the original speaker), inny (drugi) mówca (the other speaker), oraz P1,P2,i P3 (których do tej pory nie widziałem w zastosowaniu, i naprawdę nie mam pojęcia jaka mają funkcję) Proste precondition może wyglądać tak: [php] function precondition_is_stalker(speaker1,speaker2,P1,P2,P3) if IsStalker(speaker2) then return true end return false end jest wiele wstępnie zdefiniowanych preconditions, takich jak function has_2000_money(first_speaker, second_speaker) return first_speaker:money() >= 2000 end [/php] 6. Który dialog*.xml zastosować Zauważyliście pewnie, że jest kilka plików dialog*.xml w katalogu config/gameplay. Jeden z nich to standardowo nazwany dialog.xml, a pozostałe mają w swoich nazwach strefy Zony (Np. dialog_escape.xml) Biorąc z grubsza, każda strefa wykorzystuje dialog.xml oraz specyficzny dla strefy xml... więc jeśli wasz nowy dialog będzie się rozgrywać tylko w jednej strtefie, dodajcie go do pliku specyficznego dla strefy (aby obniżyć zużycie zasobów), ale jeśli będzie używany w wielu (wszystkich) strefach, trzeba go dodać do dialog.xml. 7. Teksty We wszystkich dialogach stosuje się identyfikatory, a nie aktualny tekst który ma się ukazać. Jest to zrobione w celu umożliwienia wielu wersji językowych gry. Musicie dodać wejście do odpowiedniego pliku(ów) stable_dialog*.xml dla używanego przez was języka. 8. Jak przypisać dialog do postaci Dialogi są przypisywane do postaci poprzez tagi lub w definicji postaci. To określa kto jest mówcą1 (speaker1) a kto jest mówcą 2 (speaker2). Tagi mówią że npc rozpoczyna konwersację i jest mówcą1 (speaker1). Jeśli wasz dialog jest stworzony dla konkretnej poostaci, po prostu dodajecie go do definicji tej postaci. Jeśli wasz dialog ma być dostępny dla wszystkich postaci, możecie dodać go do character_dialogs.xml, i wtedy będzie widoczny dla wszystkich postaci Z WYJĄTKIEM postaci specjalnych (o ile preconditions nie wprowadzają dalszych ograniczeń). Tak więc, jeśli chcemy aby nasz statyczny dialog pokazywał się dla wszystkich losowych postaci, musimy dodać [php]our_casual_conversation do character_dialogs.xml. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 20 Lutego 2016 Zgłoś Udostępnij Opublikowano 20 Lutego 2016 Wywala mi coś takiego FATAL ERROR [error]Expression : start_node && path [error]Function : CXml::NavigateToNode [error]File : E:\stalker\sources\trunk\xrXMLParser\xrXMLParser.cpp [error]Line : 97 [error]Description : NavigateToNode failed in XML file [error]Arguments : gameplay\dialogs_escape.xml stack trace: To jest mój plik dialogs_escape.xml https://megawrzuta.pl/download/8434c0e47ef8fd7e5fc890bec3eceb5e.html Wstawiaj błędy w "code" <>. cichy Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ranger801 Opublikowano 20 Lutego 2016 Zgłoś Udostępnij Opublikowano 20 Lutego 2016 Numeracja jest zwalona, dialogi nie zaczynają się od 1 tylko od 0, w ten sposób: <dialog id="Rozmowa_z_Michalem"> <phrase_list> <phrase id="0"> <text>Rozmowa_z_Michalem_1</text> <next>1</next> </phrase> <phrase id="1"> <text>Rozmowa_z_Michalem_2</text> <next>2</next> </phrase> <phrase id="2"> <text>Rozmowa_z_Michalem_3</text> <next>3</next> </phrase> <phrase id="3"> <text>Rozmowa_z_Michalem_4</text> <next>4</next> </phrase> <phrase id="4"> <text>Rozmowa_z_Michalem_5</text> <action>dialogs.break_dialog</action> </phrase> </phrase_list> </dialog> Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gatzek Opublikowano 20 Lutego 2016 Zgłoś Udostępnij Opublikowano 20 Lutego 2016 @Kacper777777 jeśli chcesz poznać tajniki tworzenia dialogów to zajrzyj tu: http://www.amk-team.ru/forum/topic/7450-spravochnik-po-funktciiam-i-klassam/page-4#entry466322 Znajmośc języka rosyjskiego będzie potrzebna. Większość doskonałych tutoriali jest właśnie w tym języku. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi