Dialogi 11343 7

O temacie

Autor

Zaczęty 20.01.2008 roku

Wyświetleń 11343

Odpowiedzi 7

Kazzmir
  • Gość

Kazzmir
Gość

Dialogi
2008-01-20, 21:54(Ostatnia zmiana: 2009-07-06, 14:42)
Cytat: dekster17 link=topic=101.msg73250#msg73250 date=Nov 4 2007, 19:43\'
To nie będzie tutek jak napisać od podstaw dialog, ale raczej wyjaśnienie, ale można go używać jako tutka jak zrobić dialog.

Będę wyjaśniał wszystko na podstawie dialogu kolesia o imieniu Gorr. Niektóre wypowiedzi mogą być dość dziwne, ale to tylko przykład.

Cały dialog wygląda tak:

// ************************************************************
// EXIT
// ************************************************************

INSTANCE DIA_GORR_EXIT(C_INFO)
{
npc = Kdf_9002_Gorr;
nr = 999;
condition = DIA_GORR_EXIT_Condition;
information = DIA_GORR_EXIT_Info;
permanent = 1;
description = DIALOG_ENDE;
};  

FUNC INT DIA_GORR_EXIT_Condition()
{
return 1;
};

FUNC VOID DIA_GORR_EXIT_Info()
{
AI_StopProcessInfos (self);
};

// ************************************************************
// Hallo
// ************************************************************

INSTANCE DIA_GORR_Hello (C_INFO)
{
npc = Kdf_9002_Gorr;
nr = 1;
condition = DIA_GORR_Hello_Condition;
information = DIA_GORR_Hello_Info;
permanent = 0;
description = "Witaj. Kim jesteś?";
};  

FUNC INT DIA_GORR_Hello_Condition()
{
return 1;
};

FUNC VOID DIA_GORR_Hello_Info()
{
AI_Output (other, self,"DIA_GORR_Hello_15_00"); //Witaj. Kim jesteś?
AI_Output (self, other,"DIA_GORR_Hello_13_01"); //Mam na imię Gorr. Jestem strażnikiem tego obozu.
AI_Output (other, self,"DIA_GORR_Hello_15_02"); //A cóż to za obóz?
AI_Output (self, other,"DIA_GORR_Hello_13_03"); //To obóz Magów Czarnego Ognia.
};

// ************************************************************
// What
// ************************************************************

INSTANCE DIA_GORR_What (C_INFO)
{
npc = Kdf_9002_Gorr;
nr = 2;
condition = DIA_GORR_What_Condition;
information = DIA_GORR_What_Info;
permanent = 1;
description = "Mogę wejść do obozu?";
};  

FUNC INT DIA_GORR_What_Condition()
{
if (Npc_KnowsInfo (hero,DIA_GORR_Hello))
{
return 1;
};
};

FUNC VOID DIA_GORR_What_Info()
{
AI_Output (other, self,"DIA_GORR_What_15_00"); //Mogę wejść do obozu?
AI_Output (self, other,"DIA_GORR_What_13_01"); //Oczywiście.
};

// ************************************************************
// PERM
// ************************************************************

INSTANCE DIA_GORR_PERM (C_INFO)
{
npc = Kdf_9002_Gorr;
nr = 3;
condition = DIA_GORR_PERM_Condition;
information = DIA_GORR_PERM_Info;
permanent = 0;
description = "Jak się tutaj znaleźliście?";
};  

FUNC INT DIA_GORR_PERM_Condition()
{
if (Npc_KnowsInfo (hero,DIA_GORR_Hello))
{
return 1;
};
};

FUNC VOID DIA_GORR_PERM_Info()
{
AI_Output (other, self,"DIA_GORR_PERM_15_00"); //Jak się tutaj znaleźliście?
AI_Output (self, other,"DIA_GORR_PERM_13_01"); //Zostaliśmy niesłusznie oskarżeni o zdradę ojczyzny. Oskarżono nas o współpracę z Beliarem.
AI_Output (self, other,"DIA_GORR_PERM_13_02"); //Kiedyś byliśmy potężnymi Magami Ognia i wierzyliśmy w Innosa. Teraz jednak na prawdę sprzymierzyliśmy się z Beliarem.
AI_Output (self, other,"DIA_GORR_PERM_13_03"); //Posiadamy moc ognia, ale również moc ciemności. Beliar pomoże się nam zemścić!
};

Teraz wyjaśnienia:

// ************************************************************
// EXIT
// ************************************************************

Jest to tytuł wypowiedzi (chyba) (nie ten, co jest pokazany w wyborze opcji dialogowych podczas rozmowy).

INSTANCE DIA_GORR_EXIT(C_INFO)
To jest instancja (ang. instance) tej opcji dialogowej. Każde instance powinno nazywać się DIA_nazwa NPC_o czym jest dialog (np. EXIT).

npc = Kdf_9002_Gorr;
Zamiast Kdf_9002_Gorr należy wpisać instancja Twojego NPC’a (znak ; musi zostać!)

nr = 999;
Numer opcji dialogowej (każda opcja musi mieć inny numer).

condition = DIA_GORR_EXIT_Condition;
Powinno być InstancjaOpcji_Condition.

information = DIA_GORR_EXIT_Info;
Powinno być tak: InstancjaOpcji_Info.

permanent = 1;
To określa, czy po porozmawianiu o tym można jeszcze raz o tym porozmawiać. Jeżeli jest ustawione na 1, to będzie można o tym gadać do woli, ale jeżeli będzie wpisane 0, to będzie można tylko raz o tym porozmawiać.

description = DIALOG_ENDE;
Opis opcji. To, co tu wpiszesz będzie się pokazywało przy wyborze opcji dialogowych (wyjątkiem jest KONIEC, który zależy od wersji językowej).

FUNC INT DIA_GORR_EXIT_Condition()
{
return 1;
};

Tutaj można określić czy po wybraniu tej opcji dialogowej wraca się do wyboru, czy kończy rozmowę lub co jest wymagane, aby o tym porozmawiać, itp.

FUNC VOID DIA_GORR_EXIT_Info()
{
AI_StopProcessInfos (self);
};

Tutaj można określić, co ma się dziać po wybraniu tej opcji dialogowej.

To by było tyle opcji dialogowej KONIEC. Przejdźmy teraz do opcji, która wywołuje rozmowę.

// ************************************************************
// Hallo
// ************************************************************

Nazwa dialogu.

INSTANCE DIA_GORR_Hello (C_INFO)
Instancja dialogu.

{
npc = Kdf_9002_Gorr;
nr = 1;
condition = DIA_GORR_Hello_Condition;
information = DIA_GORR_Hello_Info;
permanent = 0;
description = "Witaj. Kim jesteś?";
};
                   

Tutaj nie będę wszystkiego od początku tłumaczył. Powiem tylko, że w description należy wpisać to, co ma się pojawić w tym dolnym okienku, gdzie się wybiera opcje dialogowe.

FUNC VOID DIA_GORR_Hello_Info()
{
AI_Output (other, self,"DIA_GORR_Hello_15_00"); //Witaj. Kim jesteś?
AI_Output (self, other,"DIA_GORR_Hello_13_01"); //Mam na imię Gorr. Jestem strażnikiem tego obozu.
AI_Output (other, self,"DIA_GORR_Hello_15_02"); //A cóż to za obóz?
AI_Output (self, other,"DIA_GORR_Hello_13_03"); //To obóz Magów Czarnego Ognia.
};

To jest to, co oni będą mówić. To, co ktoś ma mówić należy wpisać po //. Każda wypowiedź musi się zaczynać AI_Output (other, self,"DIA_GORR_Hello_15_00");. „Other, self,” oznacza, że mówi to bohater, a „self, other,” oznacza, że mówi to NPC. „DIA_GORR_Hello” – tutaj wpisujesz instancję opcji dialogowej. „_15” – jeżeli mówi bohater gry, to wpisz „_15”, ale jeżeli mówi NPC, to wpisz „_13”. „_00”, „_01”, „_02”, „_03” – to jest kolejność wypowiedzi. Najlepiej wpisywać 00, 01, 02, 03 itp.

Sorki za wszelkie błędy, ale to mój pierwszy tutek. Wszelkie pytania do mnie kierować na PW. Nie ma tu szczegółowych wyjaśnień, ale może niedługo będą. Szczerze mówiąc, to nie ma tu sporo rzeczy...

[size=20]NIE zabraniam kopiowania całości, lub części tutoriala.[/size]

PS: Dla ludzi, którzy mają problemy z pisaniem dialogów od podstaw polecam kopiować dialogi od innych NPC’ów, a następnie przerabiać je.
 

Kazzmir
  • Gość

Kazzmir
Gość

Dialogi
#1 2008-01-20, 22:16(Ostatnia zmiana: 2009-07-06, 15:46)
Cytat: Zysk link=topic=101.msg361#msg361 date=Jul 31 2006, 17:11\'
Zapoznaj się najpierw z opisem skryptów.
Dialogi znajdują się w katalogu content\story\missions. Pliki z dialogami (oddzielny dla każdego NPC#msgote author=Zysk link=topic=101.msg361#msg361 date=Jul 31 2006, 17:11\']Zapoznaj się najpierw z opisem skryptów.
Dialogi znajdują się w katalogu content\story\missions. Pliki z dialogami (oddzielny dla każdego NPCa nazywa się zwykle DIA_kod_postaci_imię.d
Najpierw należy stworzyć element dialogu:
Gothic Script
instance ?(C_info)
{
  npc=?;
  nr=?;//Opcjonalnie
  condition=?;
  information=?;
  important=?;
  permanent=?;
  description="?"//Opcjonalnie
}
W pierwszej linii wpisujemy kod dialogu (zazwyczaj jego nazwę rozpoczyna się kodem postaci).
npc to rozmówca, a nr to numer na liście dialogów.
condition to nazwa funkcji wykonywanej, aby sprawdzić, czy na dany temat można porozmawiać (zazwyczaj nazywa się ją kod_dialogu_cond). Funkcja ta zwraca int - 1 gdy da się porozmawiać, 0 gdy się nie da. Funkcja nie powinna posiadać parametrów.
information to nazwa funkcji wykonywanej podczas wykonania dialogu (nazywana kod_dialogu_info). Funkcja ta nic nie zwraca, ani nie posiada parametrów.
! Pamiętaj aby nie wpisywać tutaj nawiasów wywołania funkcji !
important ustawiamy na 1, gdy postać sama nam o tym powie, inaczej 0
permanent ustawiamy na 1, gdy na dany temat da się rozmawiać więcej niż raz, inaczej 0.
description to opcja na liście tematów (nie trzeba ustawiać gdy important=1).
 

Aidan

Aidan

Użytkownicy
posty50
Propsy1
ProfesjaSkrypter
  • Użytkownicy
jesli stworze zadanie to co zrobic zeby dawalo ono expa?
 

Arkadiusz1998

Arkadiusz1998

Labirynt
posty73
Propsy1
ProfesjaNierób
  • Labirynt
jesli stworze zadanie to co zrobic zeby dawalo ono expa?

Żeby dawało expa pod jakąś opcją dialogową dopisz:
  B_GivePlayerXP (iloscexpa);
 

Vamper

Vamper

Użytkownicy
posty48
Propsy2
Profesjabrak
  • Użytkownicy

Vamper

Dialogi
#4 2017-07-26, 12:29(Ostatnia zmiana: 2017-07-26, 12:34)
Jaką funkcję ustawić aby po zakończeniu dialogu postać z którą rozmawialiśmy umiera?
Bo jak wstawiam B_KillNpc (self); nie ważne w jakiej kolejności to postać umiera podczas dialogu a nie po jego zakończeniu.
 

Cesarz

Cesarz

Użytkownicy
posty185
Propsy41
ProfesjaScenarzysta
  • Użytkownicy
Wydaje mi się, że najlepiej w takiej sytuacji stworzyć kolejny dialog z tą komendą, który będzie się aktywował zaraz po automatycznym zakończeniu poprzedniego.
 

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1733
Propsy467
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Są dwie opcje:

1. Ustawiasz tick tock/framefunctions, który po małym opóźnieniu po dialogu zabije npc.
2. Dodajesz do rutyny (tego npca) warunek, że jeśli dialog jest skończony (zmienna) i npc się zgadza, zabija go.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Siemekk

Siemekk

Złote Wrota
Szlachcic
posty1755
Propsy564
ProfesjaSkrypter
  • Złote Wrota
  • Szlachcic
3. Użyjesz AI_functions z LeGo
 
Nie mam nic przeciwko jeśli poprosisz o pomoc...
Tylko jak już prosisz to nie proś o podstawy lub Ikarusa & LeGo gdy nie znasz nawet podstaw.
Moje skrypty:
Dwa ostrza


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