Artykuł “Dialogi” z Mod Wiki
Zawartość:
-
Wprowadzenie do Dialogów
-
Statyczne czy Dynamiczne - które zastosować
-
Dialogi Statyczne
-
Dialogi Dynamiczne
-
Preconditions (Warunki wstępne)
-
Który dialog*.xml zastosować
-
Teksty
-
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.