Dialogi, prosty quest 2347 2

O temacie

Autor Zkirtaem

Zaczęty 25.01.2010 roku

Wyświetleń 2347

Odpowiedzi 2

Zkirtaem

Zkirtaem

Moderator
Mięso
posty2175
Propsy1681
ProfesjaGracz
  • Moderator
  • Mięso

Zkirtaem
Moderator

Dialogi, prosty quest
2010-01-25, 02:55(Ostatnia zmiana: 2010-03-12, 17:43)
Kolejny tutek o stalku. Tym razem dialogi.

Pliki, których będziemy używać:


Cytuj
\config\gameplay\character_desc_escape.xml
\config\gameplay\dialogs_escape.xml
\config\gameplay\info_l01escape.xml

Mówiąc szczerze, miałem duże wątpliwości, czy pisanie tego tutka ma jakikolwiek sens, gdyż to jest po prostu nieopisywalnie proste. No, ale dobra, zaczynamy. Będziemy pisali dialog dla Sidorowicza - bo on zaraz po starcie jest najbliżej, najłatwiej testować.


Otwieramy character_desc_escape.xml. W zasadzie te okna z notatnikiem nie będzie sensu zamykać, w obu ciągle będzie się coś zmieniać. Ten escape_trader, którego widzimy od początku skryptu, to właśnie sidorowicz. Widzimy tu dużo wersów typu <actor_dialog>(pierdoły)</actor_dialog>. Tu jest zapisane, które dialogi wyświetlają się u danego NPCa. Dodajmy linię:
Cytuj
<actor_dialog>escape_trader_losowo</actor_dialog>
Ja dodałem ją gdzieś w środku tych actor_dialog, ale myślę, że można to dodać gdziekolwiek, a i tak zadziała. Dobra, teraz otwieramy plik dialogs_escape.xml. Zaraz po
Cytuj
<?xml version="1.0" encoding="windows-1251" ?>
<game_dialogs>
Wstawiamy:
Cytuj
<dialog id="escape_trader_losowo" priority="90">
        <phrase_list>

                <phrase id="0">
                    <text>Witaj LOSOWE.</text>
                    <next>1</next>
                    <next>2</next>
            <next>3</next>
                </phrase>
                <phrase id="1">
                    <text>Siema.</text>
                </phrase>
                <phrase id="2">
                    <text>Cześć.</text>
                </phrase>
                <phrase id="3">
                    <text>Witam.</text>
                </phrase>
        </phrase_list>
    </dialog>

Teraz opis, co do czego.

dialog id - "Nazwa" dialogu, której używamy do wstawienia go w plik character_desc_escape.xml;
priority - Priorytet. Tutaj oznacza pozycję na liście w wyborze dialogu. Wybieramy dużą liczbę, jak to przykładowe 90, bo wybranie innej może nam zepsuć dialog, "zasłaniając" jakąś inną kwestię o tym samym priorytecie;
phrase_id - ID frazy. Dzięki temu, że takie coś istnieje, możemy pisać jeden dialog na kilka sposobów;
text - Logiczne;
next - Jaka fraza jest następna. Wpisując to w odpowiedni sposób, uzyskamy inne wyniki, ale o tym dalej.


Włączamy grę. Powinno - dzięki temu, że kilka "next" było w jednej frazie - wyświetlać nam losowo odpowiedzi 1,2, lub 3, poklikajcie kilka razy, a zauważycie. Uwaga - najpierw trzeba wziąć od Sidorowicza misję, dopiero potem dialogi są możliwe do wybrania.


No, to dalej. Losowo już było, teraz będzie dialog, w którym osoby wypowiadają się więcej, niż jeden raz.

Cytuj
<dialog id="escape_trader_konkretnie" priority="91">
        <phrase_list>

                <phrase id="0">
                    <text>Witaj KONKRETNE.</text>
                    <next>1</next>
                </phrase>
                <phrase id="1">
                    <text>Siema.</text>
                    <next>2</next>
                </phrase>
                <phrase id="2">
                    <text>Cześć.</text>
            <next>3</next>
                </phrase>
                <phrase id="3">
                    <text>Witam.</text>
                </phrase>
        </phrase_list>
    </dialog>

Co się zmieniło? Przestawiłem NEXT tak, aby każdy był odnośnikiem do następnej frazy. Dzięki temu dialog działa tak, że na początku Sidorowicz mówi Siema, potem bohater Cześć, potem sidorowicz znowu, ale tym razem Witam. Oczywiście zmieniłem również priorytet, żeby dwa dialogi się nie gryzły, i zmieniłem ID - jeśli chcecie zobaczyć to w grze, musicie dopisać do character_desc_escape.xml:
Cytuj
<actor_dialog>escape_trader_konkretnie</actor_dialog>



Łatwe, proste, zrozumiałe. Dobra, następny przykład:

Cytuj
<dialog id="escape_trader_wyborem" priority="92">
        <phrase_list>
                <phrase id="0">
                    <text>Witaj Z WYBOREM.</text>
                    <next>1</next>
                </phrase>
                <phrase id="1">
                    <text>Siema.</text>
                    <next>2</next>
            <next>3</next>
                </phrase>
                <phrase id="2">
                    <text>Cześć.</text>
                </phrase>
                <phrase id="3">
                    <text>Witam.</text>
                </phrase>
        </phrase_list>
    </dialog>

Tutaj mamy dwa NEXT w frazie dalszej, niż 0 - więc będę miał wybór pomiędzy odpowiedzią 2 albo 3. Jak zwykle zmiana ID - dokleić do character_desc_escape nową linijkę! - i zmiana priorytetu.


Parę ciekawostek:

Informacje. Stalker ma całkiem ciekawie rozwiązane sprawdzanie, czy gracz dowiedział się o danej rzeczy, czy nie. Robią za to chyba tylko te trzy rzeczy:

<has_info>           - sprawdza, czy gracz posiada daną informację;
<dont_has_info>   - sprawdza, czy gracz jeszcze nie posiada informacji;
<give_info>          - dodaje informację dla gracza.

Takie informacje dodajemy przez "info_portion id" w pliku info_l01escape.xml. Jak? Przykładowo, mam informację "wiedzapowszechna. Więc dodaję gdzieś pomiędzy innymi podobnymi liniami:
Cytuj
<info_portion id="wiedzapowszechna"></info_portion>
I gotowe! Można już tego używać w swoich dialogach. Dla przykładu:

W info_l01escape.xml dodajemy pod
Cytuj
<info_portion id="tutorial_alarm_played"></info_portion>
swoją linijkę - na przykład
Cytuj
<info_portion id="wiedzapowszechna"></info_portion>
Teraz w dialogu KONKRETNIE, na samym początku frazy pierwszej, doklejamy <give_info>. Powinno wyjść to tak:
Cytuj
<dialog id="escape_trader_konkretnie" priority="91">
        <phrase_list>

                <phrase id="0">
                    <text>Witaj KONKRETNE.</text>
                    <next>1</next>
                </phrase>
                <phrase id="1">
   <give_info>wiedzapowszechna</give_info>
                    <text>Siema.</text>
                    <next>2</next>
                </phrase>
                <phrase id="2">
                    <text>Cześć.</text>
            <next>3</next>
                </phrase>
                <phrase id="3">
                    <text>Witam.</text>
                </phrase>
        </phrase_list>
    </dialog>
Teraz w dialogu LOSOWE doklejamy przed <phrase_list> swoje <has_info> - powinno wyjść:
Cytuj
<dialog id="escape_trader_losowo" priority="90">
        <has_info>wiedzapowszechna</has_info>
        <phrase_list>

                <phrase id="0">
                    <text>Witaj LOSOWE.</text>
                    <next>1</next>
                    <next>2</next>
            <next>3</next>
                </phrase>
                <phrase id="1">
                    <text>Siema.</text>
                </phrase>
                <phrase id="2">
                    <text>Cześć.</text>
                </phrase>
                <phrase id="3">
                    <text>Witam.</text>
                </phrase>
        </phrase_list>
    </dialog>
I gotowe! Po rozmowie KONKRETNIE pojawi się opcja dialogowa LOSOWE.



Dalsza ciekawostka - jak dodać nóż i broń graczowi.
Cytuj
<action>escape_dialog.give_weapon_to_actor</action>
                <action>escape_dialog.give_knife_to_actor</action>
To chyba nie wymaga opisu? Wklejamy w któryś z testowych dialogów i sprawdzamy efekt.
A może jednak wymaga. Znalazłem w Internecie, co można wsadzić w te <action>:
Cytuj
http://fr.pastebin.ca/445944
Jest to plik scripts/escape_dialog.script. Opiszę tutaj, jak go edytować:

Przykładowo, mamy funkcję Trader. Po jej END, dopisujemy:
Cytuj
function measkrypt(first_speaker, second_speaker)
    dialogs.relocate_item_section(first_speaker, "medkit", "in")
    dialogs.relocate_item_section(first_speaker, "bandage", "in")  
end

W gruncie rzeczy nie rozumiem, co znacza first_speaker, ale dobra.
medkit, bandage - to itemy. Można tam wsadzić sobie rakietnicę, granatnik, czy pistolecik z poprzedniego tutka.
function measkrypt - to nazwa skryptu. Nazwałem go tak, Wy nazywajcie go jak chcecie.
"in" - to stwierdza, że item jest dla nas, a nie od nas. Przeciwieństwo to oczywiście OUT.

Teraz w swoim dialogs_escape, przykładowo w frazie 0 dialogu losowe, po TEXT dodajemy:
Cytuj
<action>escape_dialog.measkrypt</action>
escape_dialog jest konieczne, żeby pokazać, który to plik. measkrypt to nazwa naszego skryptu. Sprawdzamy w grze i cieszymy się :D  

Co jeszcze można tam dopisać, oprócz dialogs.relocate_item_section? Ano, kasę. Piszemy to tak:

Cytuj
dialogs.relocate_money(npc, 500, "in")
Bądź out, żeby zapłacić - jak kto woli.


SCREENY:

http://i47.tinypic.com/2ilfnms.jpg
http://i47.tinypic.com/2zecjl1.jpg
http://i50.tinypic.com/r9jtpx.jpg

PS: Z tego, co tu jest, da się już zrobić prosty quest, w którym idziesz od dawcy questa, wyciągasz informację od innego npca, mówisz ją dawcy i otrzymujesz nagrodę. Zrobiłem sobie taki, ale nie chce mi się go rozpisywać. Tu jest za to mój gamedata, gdzie wszystko ładnie widać:

http://www.speedyshare.com/files/20549988/gamedata.rar
Lub:
http://hotfile.com/dl/25710284/011aba5/gamedata.rar.html



Aha, w kwestii tej gry nie mam nic przeciwko zapychaniu mi PW pytaniami, o ile umiem, postaram się odpowiedzieć :D
 

metek58

metek58

Bractwo Spolszczenia
posty14
Propsy13
ProfesjaTłumacz
  • Bractwo Spolszczenia

metek58
Bractwo Spolszczenia

Dialogi, prosty quest
#1 2016-02-06, 06:46(Ostatnia zmiana: 2016-02-06, 10:08)
Gra Stalker SoC. Mam problem z gameplay, bo tekst dialogu jest dość długi i nie mieści się w oknie dialogowym. Próba zastosowania \n nie przyniosła skutku (dla sprawdzenia, wrzuciłem plik rus - tekst też nie mieścił się na ekranie). Druga sprawa, przetłumaczony ruski tekst na pl jest dłuższy niż tekst rus i powoduje wylot. Gdy go okroiłem, nie było wylotu, ale dalej wychodzi za okno dialogowe, choć wstawiłem \n w celu zawinięcia tekstu. Taki sposób w plikach text/pol działa bez problemu. Czy w plikach gameplay są inne zasady? Proszę o pomoc.

Post połączony: 2016-02-06, 10:06
Chcę dodać, że na ustawieniu ekranu 1028x768 (na innej rozdzielczości nie mieści się tekst, bo nie zawija go) tekst ładnie zawija się i mieści się w oknie dialogowym. Jednak tekst polski jako dłuższy (z racji tłumaczenia) od ruskiego, powoduje wylot, po skróceniu do ilości liter jak w rus, nie ma wylotu. Jak to jest zrobione, że ilość liter w tekście ma wpływ na wylot?
 

metek58

metek58

Bractwo Spolszczenia
posty14
Propsy13
ProfesjaTłumacz
  • Bractwo Spolszczenia
Już nieaktualne, znalazło się rozwiązanie tego problemu.
 


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry