Skocz do zawartości

Dialogi [Mod Wiki]


Rekomendowane odpowiedzi

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_0
1


our_casual_dialog_1
11
12
13


our_casual_dialog_11
111


our_casual_dialog_12
121


our_casual_dialog_13
131


our_casual_dialog_111


our_casual_dialog_121


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

  • Dodatnia 1
Odnośnik do komentarza
Udostępnij na innych stronach

  • 5 lat później...

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

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

  • Wojownik zmienił(a) tytuł na Dialogi [Mod Wiki]
  • Meta odpiął/ęła ten temat
  • Meta zablokował(a) ten temat
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Korzystając z tej strony, zgadzasz się na nasze Warunki użytkowania.