trurl3 Posted December 26, 2010 Report Share Posted December 26, 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. Link to comment Share on other sites More sharing options...
Guest Posted February 20, 2016 Report Share Posted February 20, 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 Link to comment Share on other sites More sharing options...
Ranger801 Posted February 20, 2016 Report Share Posted February 20, 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> Link to comment Share on other sites More sharing options...
Gatzek Posted February 20, 2016 Report Share Posted February 20, 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. Link to comment Share on other sites More sharing options...
Recommended Posts