Benutzer-Werkzeuge

Webseiten-Werkzeuge


Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu der Vergleichsansicht

Nächste Überarbeitung
Vorherige Überarbeitung
quickstart:skripte:dialog [2015/08/18 22:15]
127.0.0.1 Externe Bearbeitung
quickstart:skripte:dialog [2023/10/18 21:04] (aktuell)
77.58.56.195 Web-Archiv-Link
Zeile 1: Zeile 1:
- ​Dialoge ​= +====== Dialoge ​======
-:Sie sind das Hauptelement,​ um eure Geschichte zu erzählen. +
-:Dialoge ​zu erstellen und ins Spiel zu bringen sollte deswegen keine Probleme bereiten. +
-:Ihr wisst bereits was [[Skript:​Klassen]],​ [[Skript:​Instanzen]] und [[Skript:​Funktionen]] sind? Dann weiter!+
  
-==  Dialogoptionen == +Sie sind das Hauptelementum eure Geschichte zu erzählen. 
-:Wenn der Spieler einen NPC anspricht werden ihm einige Dialogoptionen zur Auswahl gegebenaber längst nicht alleDas merkt ihr allein schon daran, dass Aufträge mit einer bestimmten Dialogoption beendet werden, welche jedoch ​zu Beginn des Auftrags noch nicht zur Auswahl stand.+Dialoge ​zu erstellen und ins Spiel zu bringen sollte deswegen keine Probleme bereiten. 
 +Ihr wisst bereits was [[Skript:​Klassen]],​ [[Skript:​Instanzen]] und [[Skript:​Funktionen]] sind? Dann weiter!
  
-:Man kann sagen das Tun und Lassen des Spielers ist darauf ausgerichtet ​Dialogoptionen ​verfügbar zu machen. +==== Dialogoptionen ​==== 
-:Beim Anzeigen ​der Auswahlliste entscheidet die [[Engine]], welche der vielen **möglichen** ​Dialogoptionen ​in die Auswahlliste kommenSie bedient sich dazu eurer Angaben in den [[Instanz:​C_INFO|Instanzen]] von [[Klasse:​C_INFO]].+Wenn der Spieler einen NPC anspricht werden ihm einige ​Dialogoptionen ​zur Auswahl gegeben, aber längst nicht alleDas merkt ihr allein schon daran, dass Aufträge mit einer bestimmten Dialogoption beendet werden, welche jedoch zu Beginn des Auftrags noch nicht zur Auswahl stand.
  
-<​html>​ +Man kann sagen das Tun und Lassen ​des Spielers ist darauf ausgerichtet Dialogoptionen verfügbar zu machen. 
-<span style="​font-size:​ xx-small;">​Der Inhalt ​des rotumrandeten Abschnitts unterliegt ​der <a href="​http://www.piranha-bytes.com/​addon/​mod/​lizenz/"​ target="​_new">​Gothic MOD Lizenz</​a></​span>​ +Beim Anzeigen ​der Auswahlliste entscheidet die [[Engine]], welche der vielen **möglichen** Dialogoptionen in die Auswahlliste kommen. Sie bedient sich dazu eurer Angaben in den [[Instanz:C_INFO|Instanzen]] von [[Klasse:​C_INFO]].
-</​html>​+
  
-<​html>​ +==== Beispiel ==== 
-<​head>​ +<code C> 
-<​title>​Exported from Notepad++</​title>​ +///////////////////////////////////////////////////////////////////////​ 
-<style type="​text/​css">​ +// Info EXIT  
-span { +///////////////////////////////////////////////////////////////////////​ 
- font-family:​ '​Courier New';​ +instance DIA_Ignaz_EXIT ( C_INFO ) 
- font-size: 12pt; +
- color: #CCCCCC; +   ​npc         = VLK_498_Ignaz;​ 
-+   ​nr          = 999; 
-.sc0 { +   ​condition ​  = DIA_Ignaz_EXIT_Condition;​ 
-+   ​information = DIA_Ignaz_EXIT_Info;​ 
-.sc2 { +   ​permanent ​  = TRUE; 
- font-style:​ italic; +   ​description = "​ENDE";​ 
- color: #999999; +};
-+
-.sc4 { +
- color: #CC9900; +
-+
-.sc5 { +
- font-weight:​ bold; +
- color: #CC9900; +
-+
-.sc6 { +
- color: #9900CC; +
-+
-.sc8 { +
- color: #999999; +
-+
-.sc10 { +
- font-weight:​ bold; +
- color: #0099CC; +
-+
-.sc11 { +
-+
-.sc12 { +
- font-weight:​ bold; +
- color: #999999; +
-+
-.sc13 { +
- font-weight:​ bold; +
- color: #999999; +
-+
-.sc14 { +
- color: #99CC00; +
-+
-</​style>​ +
-</​head>​ +
-<​body>​ +
-<div style="​float:​ left; white-space:​ pre; line-height:​ 1; background: #333333; max-height: 400px; max-width: 800px; overflow: scroll; padding: 8px; border:​medium solid red; margin-left:​ 8px; margin-right:​ 8px; "><​span class="​sc4">​0001</​span><​span class="​sc0"> ​</​span><​span class="​sc2"​>///////////////////////////////////////////////////////////////////////​</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0002</​span><​span class="​sc0">​ </​span><​span class="​sc2">​// Info EXIT </​span><​span class="​sc0">​ +
-</span><​span class="​sc4">​0003<​/span><​span class="​sc0">​ </span><​span class="​sc2">​////////////////////////////////////////////////////////////////////​///</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0004</​span><​span class="​sc0">​ </​span><​span class="​sc5">​instance</​span><​span class="​sc0">​ </​span><​span class="​sc11">​DIA_Ignaz_EXIT</​span><​span class="​sc0">​ </​span><​span class="​sc10">​(</​span><​span class="​sc0">​ </​span><​span class="​sc6">​C_INFO</​span><​span class="​sc0">​ </​span><​span class="​sc10">​)</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0005</​span><​span class="​sc0">​ </​span><​span class="​sc12">​{</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0006</​span><​span class="​sc0"> ​   </​span><​span class="​sc11">​npc</​span><​span class="​sc0"> ​        ​</​span><​span class="​sc10">​=</​span><​span class="​sc0">​ </​span><​span class="​sc11">​VLK_498_Ignaz</​span><​span class="​sc10">​;</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0007</​span><​span class="​sc0"> ​   </​span><​span class="​sc11">​nr</​span><​span class="​sc0"> ​         </​span><​span class="​sc10">​=</​span><​span class="​sc0">​ </​span><​span class="​sc4">​999</​span><​span class="​sc10">​;</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0008</​span><​span class="​sc0"> ​   </​span><​span class="​sc11">​condition</​span><​span class="​sc0"> ​  ​</​span><​span class="​sc10">​=</​span><​span class="​sc0">​ </​span><​span class="​sc11">​DIA_Ignaz_EXIT_Condition</​span><​span class="​sc10">​;</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0009</​span><​span class="​sc0"> ​   </​span><​span class="​sc11">​information</​span><​span class="​sc0">​ </​span><​span class="​sc10">​=</​span><​span class="​sc0">​ </​span><​span class="​sc11">​DIA_Ignaz_EXIT_Info</​span><​span class="​sc10">​;</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0010</​span><​span class="​sc0"> ​   </​span><​span class="​sc11">​permanent</​span><​span class="​sc0"> ​  ​</​span><​span class="​sc10">​=</​span><​span class="​sc0">​ </​span><​span class="​sc8">​TRUE</​span><​span class="​sc10">​;</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0011</​span><​span class="​sc0"> ​   </​span><​span class="​sc11">​description</​span><​span class="​sc0">​ </​span><​span class="​sc10">​=</​span><​span class="​sc0">​ </​span><​span class="​sc14">​"​ENDE"​</​span><​span class="​sc10">​;</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0012</​span><​span class="​sc0">​ </​span><​span class="​sc13">​}</​span><​span class="​sc10">​;</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0013</​span><​span class="​sc0">​  +
-</​span><​span class="​sc4">​0014</​span><​span class="​sc0">​ </​span><​span class="​sc5">​func</​span><​span class="​sc0">​ </​span><​span class="​sc8">​int</​span><​span class="​sc0">​ </​span><​span class="​sc11">​DIA_Ignaz_EXIT_Condition</​span><​span class="​sc10">​()</​span><​span class="​sc0">​ </​span><​span class="​sc12">​{</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0015</​span><​span class="​sc0"> ​   </​span><​span class="​sc5">​return</​span><​span class="​sc0">​ </​span><​span class="​sc8">​TRUE</​span><​span class="​sc10">;</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0016</​span><​span class="​sc0">​ </​span><​span class="​sc13">​}</​span><​span class="​sc10">;</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0017</​span><​span class="​sc0">​  +
-</​span><​span class="​sc4">​0018</​span><​span class="​sc0">​ </​span><​span class="​sc5">​func</​span><​span class="​sc0">​ </​span><​span class="​sc8">​void</​span><​span class="​sc0">​ </​span><​span class="​sc11">​DIA_Ignaz_EXIT_Info</​span><​span class="​sc10">​()</​span><​span class="​sc0">​ </​span><​span class="​sc12">​{</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0019</​span><​span class="​sc0"> ​   </​span><​span class="​sc6">​AI_StopProcessInfos</​span><​span class="​sc10">​(</​span><​span class="​sc5">​self</​span><​span class="​sc10">​);</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0020</​span><​span class="​sc0">​ </​span><​span class="​sc13">​}</​span><​span class="​sc10">;</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0021</​span><​span class="​sc0">​  +
-</​span><​span class="​sc4">​0022</​span><​span class="​sc0">​ </​span><​span class="​sc2">///////////////////////////////////////////////////////////////////////</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0023</​span><​span class="​sc0">​ </​span><​span class="​sc2">//​ Info Hallo </​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0024</​span><​span class="​sc0">​ </​span><​span class="​sc2">///////////////////////////////////////////////////////////////////////</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0025</​span><​span class="​sc0">​ </​span><​span class="​sc5">​instance</​span><​span class="​sc0">​ </​span><​span class="​sc11">​DIA_Ignaz_Hallo</​span><​span class="​sc0">​ </​span><​span class="​sc10">​(</​span><​span class="​sc6">​C_INFO</​span><​span class="​sc10">​)</​span><​span class="​sc0">​ </​span><​span class="​sc12">​{</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0026</​span><​span class="​sc0"> ​   </​span><​span class="​sc11">​npc</​span><​span class="​sc0"> ​        </​span><​span class="​sc10">​=</​span><​span class="​sc0">​ </​span><​span class="​sc11">​VLK_498_Ignaz</​span><​span class="​sc10">;</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0027</​span><​span class="​sc0"> ​   </​span><​span class="​sc11">​nr</​span><​span class="​sc0"> ​         </​span><​span class="​sc10">​=</​span><​span class="​sc0">​ </​span><​span class="​sc4">​2</​span><​span class="​sc10">;</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0028</​span><​span class="​sc0"> ​   </​span><​span class="​sc11">​condition</​span><​span class="​sc0"> ​  </​span><​span class="​sc10">​=</​span><​span class="​sc0">​ </​span><​span class="​sc11">​DIA_Ignaz_Hallo_Condition</​span><​span class="​sc10">;</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0029</​span><​span class="​sc0"> ​   </​span><​span class="​sc11">​information</​span><​span class="​sc0">​ </​span><​span class="​sc10">​=</​span><​span class="​sc0">​ </​span><​span class="​sc11">​DIA_Ignaz_Hallo_Info</​span><​span class="​sc10">;</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0030</​span><​span class="​sc0"> ​   </​span><​span class="​sc11">​permanent</​span><​span class="​sc0"> ​  </​span><​span class="​sc10">​=</​span><​span class="​sc0">​ </​span><​span class="​sc8">​FALSE</​span><​span class="​sc10">;</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0031</​span><​span class="​sc0"> ​   </​span><​span class="​sc11">​important</​span><​span class="​sc0"> ​  </​span><​span class="​sc10">​=</​span><​span class="​sc0">​ </​span><​span class="​sc8">​TRUE</​span><​span class="​sc10">;</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0032</​span><​span class="​sc0">​ </​span><​span class="​sc13">​}</​span><​span class="​sc10">;</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0033</​span><​span class="​sc0">​  +
-</​span><​span class="​sc4">​0034</​span><​span class="​sc0">​ </​span><​span class="​sc5">​func</​span><​span class="​sc0">​ </​span><​span class="​sc8">​int</​span><​span class="​sc0">​ </​span><​span class="​sc11">​DIA_Ignaz_Hallo_Condition</​span><​span class="​sc10">​()</​span><​span class="​sc0">​ </​span><​span class="​sc12">​{</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0035</​span><​span class="​sc0"> ​   </​span><​span class="​sc5">​if</​span><​span class="​sc0">​ </​span><​span class="​sc6">​Npc_IsInState</​span><​span class="​sc10">​(</​span><​span class="​sc5">​self</​span><​span class="​sc10">,</​span><​span class="​sc0">​ </​span><​span class="​sc6">​ZS_Talk</​span><​span class="​sc10">​)</​span><​span class="​sc0">​ </​span><​span class="​sc12">​{</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0036</​span><​span class="​sc0"> ​       </​span><​span class="​sc5">​return</​span><​span class="​sc0">​ </​span><​span class="​sc8">​TRUE</​span><​span class="​sc10">;</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0037</​span><​span class="​sc0"> ​   </​span><​span class="​sc13">​}</​span><​span class="​sc10">;</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0038</​span><​span class="​sc0">​ </​span><​span class="​sc13">​}</​span><​span class="​sc10">;</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0039</​span><​span class="​sc0">​  +
-</​span><​span class="​sc4">​0040</​span><​span class="​sc0">​ </​span><​span class="​sc5">​func</​span><​span class="​sc0">​ </​span><​span class="​sc8">​void</​span><​span class="​sc0">​ </​span><​span class="​sc11">​DIA_Ignaz_Hallo_Info</​span><​span class="​sc10">​()</​span><​span class="​sc0">​ </​span><​span class="​sc12">​{</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0041</​span><​span class="​sc0"> ​   </​span><​span class="​sc6">​AI_Output</​span><​span class="​sc10">​(</​span><​span class="​sc5">​self</​span><​span class="​sc10">,</​span><​span class="​sc0">​ </​span><​span class="​sc5">​other</​span><​span class="​sc10">,</​span><​span class="​sc0">​ </​span><​span class="​sc14">"​DIA_Ignaz_Hallo_14_00"</​span><​span class="​sc10">​);</​span><​span class="​sc2">//​Ah - du kommst mir gerade recht. Ich suche noch einen Assistenten für ein magisches Experiment.</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0042</​span><​span class="​sc0"> ​   </​span><​span class="​sc6">​AI_Output</​span><​span class="​sc10">​(</​span><​span class="​sc5">​self</​span><​span class="​sc10">,</​span><​span class="​sc0">​ </​span><​span class="​sc5">​other</​span><​span class="​sc10">,</​span><​span class="​sc0">​ </​span><​span class="​sc14">"​DIA_Ignaz_Hallo_14_01"</​span><​span class="​sc10">​);</​span><​span class="​sc2">//​Du willst doch bestimmt der Wissenschaft einen Dienst erweisen.</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0043</​span><​span class="​sc0"> ​   </​span><​span class="​sc6">​AI_Output</​span><​span class="​sc10">​(</​span><​span class="​sc5">​other</​span><​span class="​sc10">,</​span><​span class="​sc0">​ </​span><​span class="​sc5">​self</​span><​span class="​sc10">,</​span><​span class="​sc0">​ </​span><​span class="​sc14">"​DIA_Ignaz_Hallo_15_02"</​span><​span class="​sc10">​);</​span><​span class="​sc2">//​Immer langsam. Sag mir erst mal, worum es geht.</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0044</​span><​span class="​sc0"> ​   </​span><​span class="​sc6">​AI_Output</​span><​span class="​sc10">​(</​span><​span class="​sc5">​self</​span><​span class="​sc10">,</​span><​span class="​sc0">​ </​span><​span class="​sc5">​other</​span><​span class="​sc10">,</​span><​span class="​sc0">​ </​span><​span class="​sc14">"​DIA_Ignaz_Hallo_14_03"</​span><​span class="​sc10">​);</​span><​span class="​sc2">//​Ich habe einen neuen Zauber entwickelt. Einen Zauber des Vergessens.</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0045</​span><​span class="​sc0"> ​   </​span><​span class="​sc6">​AI_Output</​span><​span class="​sc10">​(</​span><​span class="​sc5">​self</​span><​span class="​sc10">,</​span><​span class="​sc0">​ </​span><​span class="​sc5">​other</​span><​span class="​sc10">,</​span><​span class="​sc0">​ </​span><​span class="​sc14">"​DIA_Ignaz_Hallo_14_04"</​span><​span class="​sc10">​);</​span><​span class="​sc2">//​Ich konnte bereits einige praktische Anwendungen durchführen,​ aber mir fehlt die Zeit für einen abschließenden Test.</​span><​span class="​sc0">​ +
-</​span><​span class="​sc4">​0046</​span><​span class="​sc0">​ </​span><​span class="​sc13">​}</​span><​span class="​sc10">;</​span></​div></​body>​ +
-</​html>​+
  
-==  Beispiel == +func int DIA_Ignaz_EXIT_Condition() { 
-:Wie ihr nebenstehend erkennen könnt, beginnt das Einfügen einer neuen Dialogoption mit dem Aufschreiben ihrer Instanz. **DIA_Ignaz_EXIT**,​ der [[Skript:​Bezeichner]] ist im gesamten Spiel eindeutig und darf nicht ein zweites Mal vergeben werden. Mit der Instanz werden die [[Klasse:​C_INFO|Eigenschaften]] der Dialogoption festgelegt.+   return TRUE; 
 +};
  
-:Darauf folgt die [[Skript:​Funktionstypen|Bedingungsfunktion]] **DIA_Ignaz_EXIT_Condition**. Nebenan sind //die Bedingungen//​ **immer** erfüllt.+func void DIA_Ignaz_EXIT_Info() { 
 +   ​AI_StopProcessInfos(self);​ 
 +};
  
-:Zuletzt kommt noch der Dialog als [[Skript:​Funktionstypen|Callbackfunktion]] **DIA_Ignaz_EXIT_Info**+///////////////////////////////////////////////////////////////////////​ 
-:Es ist offenbardass durch Auswahl dieser Dialogoption kein Dialog gestartet wirdIm Gegenteil die Dialogoptionenauswahlliste wird durch den Befehl **AI_StopProcessInfos(self);** versteckt und der Spieler kann sich wieder frei bewegenEs handelte sich um die //ENDE// Auswahl in den Dialogoptionen von Ignaz.+// Info Hallo  
 +///////////////////////////////////////////////////////////////////////​ 
 +instance DIA_Ignaz_Hallo (C_INFO) { 
 +   ​npc ​        = VLK_498_Ignaz;​ 
 +   ​nr ​         = 2; 
 +   ​condition ​  = DIA_Ignaz_Hallo_Condition;​ 
 +   ​information = DIA_Ignaz_Hallo_Info;​ 
 +   ​permanent ​  = FALSE; 
 +   ​important ​  = TRUE; 
 +}; 
 +  
 +func int DIA_Ignaz_Hallo_Condition() { 
 +   if Npc_IsInState(self,​ ZS_Talk) { 
 +       ​return TRUE; 
 +   }; 
 +}; 
 +  
 +func void DIA_Ignaz_Hallo_Info() { 
 +   ​AI_Output(self,​ other, "​DIA_Ignaz_Hallo_14_00"​);//​Ah - du kommst mir gerade recht. Ich suche noch einen Assistenten für ein magisches Experiment
 +   AI_Output(selfother, "​DIA_Ignaz_Hallo_14_01"​);//​Du willst doch bestimmt der Wissenschaft einen Dienst erweisen. 
 +   ​AI_Output(other, ​self, "​DIA_Ignaz_Hallo_15_02"​);//Immer langsamSag mir erst mal, worum es geht. 
 +   ​AI_Output(self,​ other, "​DIA_Ignaz_Hallo_14_03"​);​//Ich habe einen neuen Zauber entwickelt. Einen Zauber des Vergessens. 
 +   ​AI_Output(self,​ other, "​DIA_Ignaz_Hallo_14_04"​);​//Ich konnte bereits einige praktische Anwendungen durchführen,​ aber mir fehlt die Zeit für einen abschließenden Test. 
 +}; 
 +</​code>​
  
-==  Detailerklärung ==+Wie ihr an dem Beispiel erkennen könnt, beginnt das Einfügen einer neuen Dialogoption mit dem Aufschreiben ihrer Instanz. ''​DIA_Ignaz_EXIT'',​ der [[Skript:​Bezeichner]] ist im gesamten Spiel eindeutig und darf nicht ein zweites Mal vergeben werden. Mit der Instanz werden die [[Klasse:​C_INFO|Eigenschaften]] der Dialogoption festgelegt.
  
-====  DIA_Ignaz_Experiment_Condition ==== +Darauf folgt die [[Skript:Funktionstypen|Bedingungsfunktion]] ''​DIA_Ignaz_EXIT_Condition''​. Nebenan sind //die Bedingungen// ​**immer** erfüllt.
-:__**func** int DIA_Ignaz_EXIT_Condition() { __ +
-::​__  ​**return** true; __ +
-:__}; __+
  
-:**DIA_Ignaz_Experiment_Condition** ist der Name für die Auflistung der Bedingungen,​ die alle wahr sein müssen, damit man den Dialog ausführen ​kann. Dieser Name muss auch oben bei __condition = //...//__ stehen. +Zuletzt kommt noch der Dialog als [[Skript:Funktionstypen|Callbackfunktion]] ''​DIA_Ignaz_EXIT_Info''​. 
-:Über das __**func** int__ und die leere Klammer dahinter macht euch mal keine Gedanken - wenn ihr später richtig programmieren wollt, werdet ihr erfahren, warum das gebraucht wird. Erstmal braucht ihr es nicht wirklich verstehen, es muss nur dort stehen. +Es ist offenbar, dass durch Auswahl dieser Dialogoption kein Dialog gestartet wird. Im Gegenteil die Dialogoptionenauswahlliste wird durch den Befehl ​**AI_StopProcessInfos(self);​** versteckt und der Spieler ​kann sich wieder frei bewegenEs handelte sich um die //ENDE// Auswahl in den Dialogoptionen von Ignaz.
-:Nun kommen die Bedingungen. Für den ENDE-Dialog gibt es aber keine Bedingungen,​ die erfüllt werden müssen. Also schreibt man ein einfaches __**return** true; __ hin, welches direkt sagt, dass alle Bedingungen wahr sind.+
  
-====  ​DIA_Ignaz_EXIT_Info ​==== +=== Detailerklärung ​===
-:__**func** void DIA_Ignaz_EXIT_Info () { __ +
-::__  AI_StopProcessInfos (**self**); __ +
-:__}; __+
  
-:Hinter das __**func** void__ kommt der Name des eigentlichen Dialogs. +==  DIA_Ignaz_EXIT_Condition == 
-:Das __AI_StopProcessInfos(**self**);__ befiehlt, dass nun der Dialog beendet wird. Dies ist also der Befehl für ein Beenden des Dialoges. Es gibt noch sehr viele andere Befehle - zum Beispiel das Ziehen einer Waffe, das Saufen von Bier etc. Das kann man alles selbst herausfinden,​ in Scripten wo ein NPC so etwas tut.+<code C> 
 +func int DIA_Ignaz_EXIT_Condition() 
 +   ​return true; 
 +};  
 +</​code>​
  
-:Hier ist der erste Dialog eigentlich schon beendet. Jeder NPC sollte einen Ende-Dialog haben oder zumindest etwas ähnlichesweil man unter Umständen sonst den Dialog ​nicht beendet ​kann und eventuell den PC neustarten ​muss.+''​DIA_Ignaz_EXIT_Condition'' ​ist der Name für die Auflistung der Bedingungendie alle wahr sein müssen, damit man den Dialog ​ausführen ​kann. Dieser Name muss auch oben bei ''​condition = //​...//''​ stehen. 
 +Über das ''​func int'' ​und die leere Klammer dahinter macht euch mal keine Gedanken - wenn ihr später richtig programmieren wollt, werdet ihr erfahren, warum das gebraucht wird. Erstmal braucht ihr es nicht wirklich verstehen, es muss nur dort stehen. 
 +Nun kommen die Bedingungen. Für den ENDE-Dialog gibt es aber keine Bedingungen,​ die erfüllt werden müssen. Also schreibt man ein einfaches ''​return true;''​ hin, welches direkt sagt, dass alle Bedingungen wahr sind.
  
-====  DIA_Ignaz_Hallo ==== +== DIA_Ignaz_EXIT_Info ​== 
-:​__**instance** DIA_Ignaz_Hallo ​(C_INFO) { __ +<code C>func void DIA_Ignaz_EXIT_Info ​() { 
-::​__ npc ​        = VLK_498_Ignaz;​ __ +   AI_StopProcessInfos (self)
-::​__ nr ​         = 2; __ +};</​code>​
-::​__ condition ​  ​= DIA_Ignaz_Hallo_Condition;​ __ +
-::​__ information = DIA_Ignaz_Hallo_Info;​ __ +
-::​__ permanent ​  = false; __ +
-::​__ important ​  = true__ +
-:__}; __+
  
-:Hier kommt noch etwas dazu. Das __important = **TRUE**__ sagt dem //NPC//, dass dieser ​Dialog ​//​wichtig// ​ist, was bedeutet, dass der //NPC// den Held von selbst anspricht, sobald dieser in den Radius ​des //NPC// gerätWenn ein Dialog //nicht wichtig// ist, also **FALSE**müsst ihr das nicht von selbst ​dazuschreibensobald __important = //...//__ nicht aufgeführt ist, wird angenommen, dass der Dialog //nicht wichtig// ist (das gilt übrigens auch für permanent = ...).+Hinter das ''​func void'' ​kommt der Name des eigentlichen Dialogs. 
 +Das ''​AI_StopProcessInfos(self);''​ befiehlt, dass nun der Dialog ​beendet wird. Dies ist also der Befehl für ein Beenden ​des DialogesEs gibt noch sehr viele andere Befehle - zum Beispiel das Ziehen einer Waffe, das Saufen ​von Bier etc. Das kann man alles selbst ​herausfindenin Scripten wo ein NPC so etwas tut.
  
-====  DIA_Ignaz_Hallo_Condition ====+Hier ist der erste Dialog eigentlich schon beendet. Jeder NPC sollte einen Ende-Dialog haben oder zumindest etwas ähnliches, weil man unter Umständen sonst den Dialog nicht beendet kann und eventuell den PC neustarten muss.
  
-:__**func** int DIA_Ignaz_Hallo_Condition () { __ +== DIA_Ignaz_Hallo == 
-::__  **if** Npc_IsInState ​(**self**, ZS_Talk) { __ +<code C> 
-:::__    **return** true__ +instance DIA_Ignaz_Hallo ​(C_INFO) { 
-::__  }__ + npc         = VLK_498_Ignaz
-:__}; __+ nr          = 2; 
 + condition ​  = DIA_Ignaz_Hallo_Condition;​ 
 + information = DIA_Ignaz_Hallo_Info;​ 
 + permanent ​  = false; 
 + important ​  = true
 +}; 
 +</​code>​
  
-:Hier ist nun die //Bedingung//, dass der //NPC// sich im //Zustand// "​Reden"​ befindetdamit dieser ​Dialog zustande kommt. +Hier kommt noch etwas dazu. Das ''​important = TRUE;''​ sagt dem //NPC//, dass dieser Dialog ​//wichtig// ist, was bedeutet, dass der //NPC// den Held von selbst ansprichtsobald ​dieser ​in den Radius ​des //NPC// gerätWenn ein Dialog //nicht wichtig// ist, also **FALSE**müsst ihr das nicht von selbst dazuschreibensobald ''​important = //...//'' ​nicht aufgeführt istwird angenommen, dass der Dialog //nicht wichtig// ist (das gilt übrigens auch für permanent = ...).
-:Das (self) wird immer aus der Sicht des NPC betrachtet. +
-:Der NPC ist nicht im Zustand "​Reden"​wenn der Spieler den NPC nicht angesprochen hat. Sobald man also nachher den NPC ansprichtwird er den eigentlichen Dialog ausführenweil dann alle Bedingungen wahr sind. +
-:Weil es im Forum nun zu oft zu Verwechslungen kam: Diese Condition sorgt nicht dafürdass der NPC einen direkt anspricht! Wenn ihr möchtet, dass ihr angesprochen werdet, sobald ihr in der Nähe seid, schreibt einfach nur __**return** true;__ in die Funktion!+
  
-====  ​DIA_Ignaz_Hallo_Info ==== +== DIA_Ignaz_Hallo_Condition ​==
-:__**func** void DIA_Ignaz_Hallo_Info () { __ +
-::__  AI_Output(**self**,​ **other**, "​DIA_Ignaz_Hallo_14_00"​);////​Ah - du kommst mir gerade recht. Ich suche noch einen Assistenten für ein magisches Experiment.//​ __ +
-::__  AI_Output(**self**,​ **other**, "​DIA_Ignaz_Hallo_14_01"​);////​Du willst doch bestimmt der Wissenschaft einen Dienst erweisen.// __ +
-::__  AI_Output(**other**,​ **self**, "​DIA_Ignaz_Hallo_15_02"​);////​Immer langsam. Sag mir erst mal, worum es geht.// __ +
-::__  AI_Output(**self**,​ **other**, "​DIA_Ignaz_Hallo_14_03"​);////​Ich habe einen neuen Zauber entwickelt. Einen Zauber des Vergessens.//​ __ +
-::__  AI_Output(**self**,​ **other**, "​DIA_Ignaz_Hallo_14_04"​);////​Ich konnte bereits einige praktische Anwendungen durchführen,​ aber mir fehlt die Zeit für einen abschließenden Test.// __ +
-:__}; __+
  
-:Sieht das kompliziert aus? Ja. Aber mit ein wenig Nachdenken und Verstehen kommt man schnell hinter dieses System. +<code C> 
-:[[Funktion:​AI_Output|AI_Output]] ist die wohl am häufigsten verwendete Funktion. Sie lässt den NPC oder den Held etwas sagen. Und auch hier wird wieder alles aus der Sicht des NPC betrachtet. +func int DIA_Ignaz_Hallo_Condition () { 
-:​__AI_Output(**self**, **other**, //​...//​) ​__ bedeutet also, dass **self**, //der NPC// etwas zu **other**, //der Held// sagt. Umgekehrt sagt also der //Held// etwas zu dem //NPC//, hier also zu Ignaz.+  if Npc_IsInState (self, ZS_Talk) { 
 +    return true; 
 +  }; 
 +}; 
 +</​code>​ 
 + 
 +Hier ist nun die //​Bedingung//,​ dass der //NPC// sich im //Zustand// "​Reden"​ befindet, damit dieser Dialog zustande kommt. 
 +Das (self) wird immer aus der Sicht des NPC betrachtet. 
 +Der NPC ist nicht im Zustand "​Reden",​ wenn der Spieler den NPC nicht angesprochen hat. Sobald man also nachher den NPC anspricht, wird er den eigentlichen Dialog ausführen, weil dann alle Bedingungen wahr sind. 
 +Weil es im Forum nun zu oft zu Verwechslungen kamDiese Condition sorgt nicht dafür, dass der NPC einen direkt anspricht! Wenn ihr möchtet, dass ihr angesprochen werdet, sobald ihr in der Nähe seid, schreibt einfach nur ''​return true;''​ in die Funktion! 
 + 
 +== DIA_Ignaz_Hallo_Info == 
 +<code C> 
 +func void DIA_Ignaz_Hallo_Info () { 
 +  AI_Output(self,​ other, "​DIA_Ignaz_Hallo_14_00"​);//​Ah - du kommst mir gerade recht. Ich suche noch einen Assistenten für ein magisches Experiment. 
 +  AI_Output(self,​ other, "​DIA_Ignaz_Hallo_14_01"​);//​Du willst doch bestimmt der Wissenschaft einen Dienst erweisen. 
 +  AI_Output(other,​ self, "​DIA_Ignaz_Hallo_15_02"​);//​Immer langsam. Sag mir erst mal, worum es geht.// __ 
 +  AI_Output(self,​ other, "​DIA_Ignaz_Hallo_14_03"​);//​Ich habe einen neuen Zauber entwickelt. Einen Zauber des Vergessens. 
 +  AI_Output(self,​ other, "​DIA_Ignaz_Hallo_14_04"​);//​Ich konnte bereits einige praktische Anwendungen durchführen,​ aber mir fehlt die Zeit für einen abschließenden Test. 
 +}; 
 +</​code>​ 
 + 
 +Sieht das kompliziert aus? Ja. Aber mit ein wenig Nachdenken und Verstehen kommt man schnell hinter dieses System. 
 +[[Funktion:​AI_Output|AI_Output]] ist die wohl am häufigsten verwendete Funktion. Sie lässt den NPC oder den Held etwas sagen. Und auch hier wird wieder alles aus der Sicht des NPC betrachtet. 
 +''​AI_Output(**self**, **other**, //...//)'' ​bedeutet also, dass **self**, //der NPC// etwas zu **other**, //der Held// sagt. Umgekehrt sagt also der //Held// etwas zu dem //NPC//, hier also zu Ignaz.
 :Was nun in den Anführungzeichen steht, ist im Prinzip der Name der folgenden Aussage. Er darf nur ein einziges Mal (!) in allen Scripten auftauchen. Im Prinzip kann man hier auch __"​Ignaz_ist_nicht_intelligent_26_74"​__ stehen haben. Das einzige was zwingend ist, ist eine Doppelzahl, also //14_06// oder //25_95// und so weiter. :Was nun in den Anführungzeichen steht, ist im Prinzip der Name der folgenden Aussage. Er darf nur ein einziges Mal (!) in allen Scripten auftauchen. Im Prinzip kann man hier auch __"​Ignaz_ist_nicht_intelligent_26_74"​__ stehen haben. Das einzige was zwingend ist, ist eine Doppelzahl, also //14_06// oder //25_95// und so weiter.
-:Die Piranhas haben eine gewisse Ordnung in diese Namen gebracht, sodass man alles wiederfindet und dass alles überschaubar ist. Das was hinter ​__////// ​__ steht, wird in diesem Fall in die //​Untertitel//​ geschrieben,​ die dann angezeigt werden.+:Die Piranhas haben eine gewisse Ordnung in diese Namen gebracht, sodass man alles wiederfindet und dass alles überschaubar ist. Das was hinter //%%//%%// steht, wird in diesem Fall in die //​Untertitel//​ geschrieben,​ die dann angezeigt werden.
  
-:Ihr seht, es gibt viele Befehle, 3 habt ihr bereits kennen gelernt. Stöbert in den Scripten und ihr werdet noch auf weit mehr stoßen. Und falls ihr tätsächlich komplett alles bisher gelesen und auch das meiste verstanden habt, besteht Aussicht darauf, dass euch das Scripten Spaß macht und dass ihr es zu etwas bringt.+Ihr seht, es gibt viele Befehle, 3 habt ihr bereits kennen gelernt. Stöbert in den Scripten und ihr werdet noch auf weit mehr stoßen. Und falls ihr tätsächlich komplett alles bisher gelesen und auch das meiste verstanden habt, besteht Aussicht darauf, dass euch das Scripten Spaß macht und dass ihr es zu etwas bringt.
  
-:Tja, falls du es noch nicht gemacht hast, solltest du diesen Dialog in einen Texteditor wie deinen NPC eingeben und eventuell noch auf deinen eigenen NPC umstellen.+Tja, falls du es noch nicht gemacht hast, solltest du diesen Dialog in einen Texteditor wie deinen NPC eingeben und eventuell noch auf deinen eigenen NPC umstellen.
  
-:Du weißt nicht, wo du deinen Dialog hinspeichern sollst? Das ist normalerweise in: +Du weißt nicht, wo du deinen Dialog hinspeichern sollst? Das ist normalerweise in: 
-[[Kasten G2]]+**Gothic 2:** 
 +<​code>​
 [Gothic II-Verzeichnis]\\_work\\data\\Scripts\\Content\\Story\\Dialoge [Gothic II-Verzeichnis]\\_work\\data\\Scripts\\Content\\Story\\Dialoge
-[[Kasten Ende]] +</​code>​ 
-[[Kasten G1]] +**Gothic 1:** 
 +<​code>​
 [GothicI-Verzeichnis]\\_work\\data\\Scripts\\Content\\Story\\Missions [GothicI-Verzeichnis]\\_work\\data\\Scripts\\Content\\Story\\Missions
-[[Kasten Ende]] +</code>
- +
-:Dann kannst du den Dialog genauso wie den NPC testen (du musst dann natürlich auch zum NPC hingehen, dem der Dialog gehört). +
- +
-:Eins sei noch gesagt: Wenn du keine Untertitel bei deinem Dialog siehst, ist das kein Fehler, sondern ganz normal. +
- +
-:Dann solltest du [http://​wiki.worldofgothic.de/​Diverses/​Untertitel+und+Sprachausgabe#​q1 dieses] Kapitel durchnehmen. +
- +
-:Somit ist das zweite Kapitel abgeschlossen. Bei Fragen, Anregungen, Kritik entweder PM im WoG an mich, oder per icq 309-139-139. +
-:Ich hoffe ihr seit mit dem Tutorial zurecht gekommen. +
-:Ich gebe euch noch mit auf den Weg - Fragen kostet nichts. Außer Zeit. Und die braucht ihr für erfolgreiches Modding. ​+
  
-:​Freundliche Grüße +Dann kannst du den Dialog genauso wie den NPC testen (du musst dann natürlich auch zum NPC hingehendem der Dialog gehört).
-:Talvar+
  
-:Bearbeitet von Milgo+Eins sei noch gesagtWenn du keine Untertitel bei deinem Dialog siehst, ist das kein Fehler, sondern ganz normal, die müssen leider immer seperat erstellt werden. Das kannst du in [[http://​wiki.worldofgothic.de/​Diverses/​Untertitel+und+Sprachausgabe#​q1|diesem Kapitel]] durchnehmen.
  
-:Edit von Arthonius:+Somit ist das zweite Kapitel abgeschlossen. 
 +Ich hoffe ihr seit mit dem Tutorial zurecht gekommen. 
 +Ich gebe euch noch mit auf den Weg - Fragen kostet nichts. Außer Zeit. Und die braucht ihr für erfolgreiches Modding. ​
  
-:Falls ihr es trotz der wunderbaren Beschreibung in diesem Tutorial nicht schaffen solltet, einen Dialog zu skripten, ladet euch den [http://​www.worldofgothic.de/​dl/​index.php?​go=downloads&​release_id=202 ​ Gothic Text Editor] runter. Es eignet sich hervorragend für Anfänger auf diesem Gebiet.+Falls ihr es trotz der wunderbaren Beschreibung in diesem Tutorial nicht schaffen solltet, einen Dialog zu skripten, ladet euch den [[http://​www.worldofgothic.de/​dl/​index.php?​go=downloads&​release_id=202|Gothic Text Editor]] runter. Es eignet sich hervorragend für Anfänger auf diesem Gebiet.
  
-:Außerdem empfielt sich der [http://​www.fizzban.net/​creator.html Miranda Dialog Creator], allerdings nur für Skripter, die die Materie begriffen haben. ;).+Außerdem empfielt sich der [[http://​web.archive.org/​web/​20190605220108/​http://​www.fizzban.net/​creator.html|Miranda Dialog Creator]], allerdings nur für Skripter, die die Materie begriffen haben. ;).
quickstart/skripte/dialog.1439928951.txt.gz · Zuletzt geändert: 2016/02/07 15:09 (Externe Bearbeitung)