Benutzer-Werkzeuge

Webseiten-Werkzeuge


Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
quickstart:skripte:logs [2026/03/26 23:59]
nemora Formatierung
quickstart:skripte:logs [2026/07/02 09:15] (aktuell)
216.73.216.55 alte Version wiederhergestellt (2015/08/18 20:15)
Zeile 1: Zeile 1:
-====== Tagebucheinträge ======+==  Tagebucheinträge ==
  
 Eine Quest besteht aus vielen Teilen. Aus Dialogen, Erfahrungsvergabe usw., aber ohne die Tagebucheinträge gibt es eigentlich gar keine Quests. Darum habe ich dieses Tutorial geschrieben. Eine Quest besteht aus vielen Teilen. Aus Dialogen, Erfahrungsvergabe usw., aber ohne die Tagebucheinträge gibt es eigentlich gar keine Quests. Darum habe ich dieses Tutorial geschrieben.
Zeile 5: Zeile 5:
 Die Tagebucheinträge bestehen eigentlich aus zwei Teilen. Einmal setzt man den Status des Auftrags (Aktuell, Erfüllt...) und einmal schreibt man die Tagebucheinträge dazu. Die Tagebucheinträge bestehen eigentlich aus zwei Teilen. Einmal setzt man den Status des Auftrags (Aktuell, Erfüllt...) und einmal schreibt man die Tagebucheinträge dazu.
  
-===== Vorarbeiten =====+==  Vorarbeiten ==
  
 Bevor wir mit den Tagebucheinträgen wirklich beginnen können, müssen wir ein bisschen Vorarbeit leisten. Dazu gehört natürlich, die ganzen Dialoge schon zu schreiben. Dazu müssen einige (konstante) Variablen definiert werden. Bevor wir mit den Tagebucheinträgen wirklich beginnen können, müssen wir ein bisschen Vorarbeit leisten. Dazu gehört natürlich, die ganzen Dialoge schon zu schreiben. Dazu müssen einige (konstante) Variablen definiert werden.
  
-Am besten macht ihr dazu zwei ganz neue Skripts. Das erste Skript heißt LOG_Constants_TESTNAME.d und das zweite ''B_CloseTopics_TESTNAME.d''. Beide Skripts solltet ihr in ''[Gothic II-Verzeichnis]\_work\Data\Scripts\Content\Story\Log_Entries'' speichern. TESTNAME könnt ihr durch euren Namen ersetzen, dort schreibt ihr dann im Laufe eurer Skripter-Karriere alle Tagebuchvariablen rein.+Am besten macht ihr dazu zwei ganz neue Skripts. Das erste Skript heißt LOG_Constants_TESTNAME.d und das zweite B_CloseTopics_TESTNAME.d. Beide Skripts solltet ihr in [Gothic II-Verzeichnis]\\_work\\Data\\Scripts\\Content\\Story\\Log_Entries speichern. TESTNAME könnt ihr durch euren Namen ersetzen, dort schreibt ihr dann im Laufe eurer Skripter-Karriere alle Tagebuchvariablen rein.
  
-Zuerst machen wir die ''LOG_Constants_TESTNAME.d'':+Zuerst machen wir die LOG_Constants_TESTNAME.d: 
 + 
 +-------
  
-<code C> 
 // *************************** // ***************************
 // LOG_Constants für Missionen // LOG_Constants für Missionen
Zeile 22: Zeile 23:
 const string TOPIC_TESTTAGEBUCHNAME = "AUFTRAGSNAME"; const string TOPIC_TESTTAGEBUCHNAME = "AUFTRAGSNAME";
 var int MIS_TESTTAGEBUCHNAME; var int MIS_TESTTAGEBUCHNAME;
-</code>+
  
 ------- -------
  
-<code C> 
 const string TOPIC_TESTTAGEBUCHNAME = "AUFTRAGSNAME"; const string TOPIC_TESTTAGEBUCHNAME = "AUFTRAGSNAME";
-</code> 
  
-Das ''const string'' muss dorthin, die Gründe zu erklären wäre erstmal zu schwer... ''TOPIC_TESTTAGEBUCHNAME'' ist der interne Name, der nur im Inneren von Gothic existiert. Er könnte also auch ''TOPIC_BLOEDER_AUFTRAG'' heißen und es wäre sogut wie egal (aber ihr solltet natürlich Namen verwenden, die ihr im Code erkennt und die für euch eine sinnvolle Bedeutung haben!). Nur das ''TOPIC_'' muss so bleiben und es dürfen auf keinen Fall Leerzeichen auftauchen!+Das "const stringmuss dorthin, die Gründe zu erklären wäre erstmal zu schwer... TOPIC_TESTTAGEBUCHNAME ist der interne Name, der nur im Inneren von Gothic existiert. Er könnte also auch TOPIC_BLOEDER_AUFTRAG heißen und es wäre sogut wie egal. Nur das TOPIC_ muss so bleiben und es dürfen auf keinen Fall Leerzeichen auftauchen!
  
 Das was in den Anführungszeichen steht, ist dafür umso interessanter. Das ist nämlich der Name, der nachher im Tagebuch erscheint - diesen kann der Spieler also sehen und sollte darum ein aussagekräftiger Questname sein. Das was in den Anführungszeichen steht, ist dafür umso interessanter. Das ist nämlich der Name, der nachher im Tagebuch erscheint - diesen kann der Spieler also sehen und sollte darum ein aussagekräftiger Questname sein.
Zeile 36: Zeile 35:
 ------- -------
  
-<code C> 
 var int MIS_TESTTAGEBUCHNAME; var int MIS_TESTTAGEBUCHNAME;
-</code> 
  
-Das ''var int'' ist prinzipiell wie das const string - es zeigt, dass das folgende der Name für eine Variable ist. Allerdings handelt es sich hier nicht um einen kostanten, nicht-änderbaren Text (''const string'') sondern um eine variable, änderbare Zahl (''var int''TESTTAGEBUCHNAME ist der Name für die Variable und dieser Name ist intern (siehe TOPIC_TESTTAGEBUCHNAME). Diese Variable muss änderbar sein, weil sich der Status einer Mission ändern kann (von "nicht angenommen" bis "erledigt").+Das var int ist prinzipiell wie das const string - es zeigt, dass das folgende der Name für eine Variable ist. TESTTAGEBUCHNAME ist der Name für die Variable und dieser Name ist intern (siehe TOPIC_TESTTAGEBUCHNAME).
  
 ------- -------
Zeile 51: Zeile 48:
 Nun schauen wir uns mal die B_CloseTopics_TESTNAME.d an: Nun schauen wir uns mal die B_CloseTopics_TESTNAME.d an:
  
-<code C>+------- 
 // *************************************************** // ***************************************************
 //  B_CloseTopics_TESTNAME () (verschiebt Topics in den zugehörigen Log-Ordner bei FAILED oder SUCCESS) //  B_CloseTopics_TESTNAME () (verschiebt Topics in den zugehörigen Log-Ordner bei FAILED oder SUCCESS)
Zeile 60: Zeile 58:
  B_CloseTopic (TOPIC_TESTTAGEBUCHNAME,MIS_TESTTAGEBUCHNAME,0,6);  B_CloseTopic (TOPIC_TESTTAGEBUCHNAME,MIS_TESTTAGEBUCHNAME,0,6);
 }; };
-</code> 
  
 ------- -------
  
-<code C> 
 func void B_CloseTopics_TESTNAME () func void B_CloseTopics_TESTNAME ()
-</code> 
  
-Das ''func void'' und das ''()'' kennt ihr ja nun schon zur Genüge und ihr könnt euch auch sicher denken, dass das ''B_CloseTopics_TESTNAME'' der Name der Funktion ist. Der sollte übrigens mit dem Skriptnamen übereinstimmen und darf nur einmal in allen Gothic-Skripten vorhanden sein. Ihr könnt TESTNAMEN darum durch euren Namen ersetzen und dieses Skript für all eure Tagebucheinträge nutzen.+Das func void und das () kennt ihr ja nun schon zur Genüge und ihr könnt euch auch sicher denken, dass das B_CloseTopics_TESTNAME der Name der Funktion ist. Der sollte übrigens mit dem Skriptnamen übereinstimmen und darf nur einmal in allen Gothic-Skripten vorhanden sein. Ihr könnt TESTNAMEN darum durch euren Namen ersetzen und dieses Skript für all eure Tagebucheinträge nutzen.
  
 ------- -------
  
-<code C> 
 B_CloseTopic (TOPIC_TESTTAGEBUCHNAME,MIS_TESTTAGEBUCHNAME,0,6); B_CloseTopic (TOPIC_TESTTAGEBUCHNAME,MIS_TESTTAGEBUCHNAME,0,6);
-</code> 
  
-Das sieht vielleicht kompliziert aus - aber das ist es (mal wieder) kaum. Ein gutes Auge hat bemerkt, dass ''TOPIC_TESTTAGEBUCHNAME'' und ''MIS_TESTTAGEBUCHNAME'' bereits in der ''LOG_Constants_TESTNAME.d'' vorkam - und es müssen auch genau die gleichen Namen sein. B_CloseTopic ist nachher der Befehl, um den Auftrag zu beenden - ansonsten wäre der Auftrag immer bei den aktuellen Tagebucheinträgen...+Das sieht vielleicht kompliziert aus - aber das ist es (mal wieder) kaum. Ein gutes Auge hat bemerkt, dass TOPIC_TESTTAGEBUCHNAME und MIS_TESTTAGEBUCHNAME bereits in der LOG_Constants_TESTNAME.d vorkam - und es müssen auch genau die gleichen Namen sein. B_CloseTopic ist nachher der Befehl, um den Auftrag zu beenden - ansonsten wäre der Auftrag immer bei den aktuellen Tagebucheinträgen...
  
-Nun bleibt nur noch zu erklären, was du 0 und die 6 am Ende sollen. Wer Gothic schon öfter gespielt hat, weiß, dass Gothic 6 Kapitel hat. Also ist die zweite Zahl ist das Kapitel, wo man den Auftrag spätestens beendet haben muss. Die erste Zahl sollte immer 0 sein, denn wenn man die Funktion B_CloseTopic aufruft und dort eine 1 stehtwird die Quest automatisch auf LOG_Success (Quest erfülltgesetzt. Auch wenn man die Funktion bei einer ganz anderen Quest aufruft.+Nun bleibt nur noch zu erklären, was du 0 und die 6 am Ende sollen. Wer Gothic schon öfter gespielt hat, weiß, dass Gothic 6 Kapitel hat. Also ist die erste Zahl das Kapitel, in dem man den Auftrag anfangen kann und die zweite Zahl ist das Kapitel, wo man den Auftrag spätestens beendet haben muss. Würde dort also ,4,3); stehen, könnte man den Auftrag nie korrekt erfüllen, weil man ihn erst im vierten Kapitel anfangen könnte, der Auftrag allerdings schon im dritten Kapitel beendet sein müsste.
  
 ------- -------
Zeile 84: Zeile 77:
 Das war an sich schon vorerst das ganze Skript, nachher kommen natürlich mehr Quests zusammen. Das war an sich schon vorerst das ganze Skript, nachher kommen natürlich mehr Quests zusammen.
  
-===== Tagebucheinträge in den Dialogen =====+==  Tagebucheinträge in den Dialogen ==
  
 Jetzt haben wir schon die ganze Vorarbeit geleistet und müssen diese nur noch in unseren Dialogen einbauen. Dazu nutzen wir mal einen Beispieldialog: Jetzt haben wir schon die ganze Vorarbeit geleistet und müssen diese nur noch in unseren Dialogen einbauen. Dazu nutzen wir mal einen Beispieldialog:
Zeile 90: Zeile 83:
 ------- -------
  
-<code C> 
 instance PAL_555_Reiner_Testdialog01 (C_INFO) instance PAL_555_Reiner_Testdialog01 (C_INFO)
 { {
Zeile 147: Zeile 139:
  B_CheckLog();  B_CheckLog();
 }; };
-</code> 
  
 ------- -------
Zeile 155: Zeile 146:
 ------- -------
  
-<code C> 
   Log_CreateTopic (TOPIC_TESTTAGEBUCHNAME, LOG_MISSION);   Log_CreateTopic (TOPIC_TESTTAGEBUCHNAME, LOG_MISSION);
   Log_SetTopicStatus(TOPIC_TESTTAGEBUCHNAME, LOG_RUNNING);   Log_SetTopicStatus(TOPIC_TESTTAGEBUCHNAME, LOG_RUNNING);
   B_LogEntry (TOPIC_TESTTAGEBUCHNAME,"Ich habe einen Auftrag bekommen...");   B_LogEntry (TOPIC_TESTTAGEBUCHNAME,"Ich habe einen Auftrag bekommen...");
-</code> 
  
 Das sieht sehr kompliziert aus - aber ihr wisst schon... Das sieht sehr kompliziert aus - aber ihr wisst schon...
Zeile 165: Zeile 154:
 Die ersten zwei Befehle sind eigentlich recht simpel und dort müsst ihr nur TESTTAGEBUCHNAME durch euren internen Tagebuchnamen ersetzen. Diese drei Befehle sagen Gothic, dass dieser Auftrag nun aktuell ist und gelöst werden kann. Die ersten zwei Befehle sind eigentlich recht simpel und dort müsst ihr nur TESTTAGEBUCHNAME durch euren internen Tagebuchnamen ersetzen. Diese drei Befehle sagen Gothic, dass dieser Auftrag nun aktuell ist und gelöst werden kann.
  
-''B_LogEntry (TOPIC_TESTTAGEBUCHNAME,"Ich habe einen Auftrag bekommen...");'' ist eigentlich auch ganz einfach, hier müsst ihr wieder ''TESTTAGEBUCHNAME'' ersetzen und das, was in den Anführungszeichen steht, wird dann nachher ins Tagebuch reingeschrieben.+B_LogEntry (TOPIC_TESTTAGEBUCHNAME,"Ich habe einen Auftrag bekommen..."); ist eigentlich auch ganz einfach, hier müsst ihr wieder TESTTAGEBUCHNAME ersetzen und das, was in den Anführungszeichen steht, wird dann nachher ins Tagebuch reingeschrieben.
  
 ------- -------
  
-<code C> 
   if (Npc_KnowsInfo (hero, PAL_555_Reiner_Testdialog01))   if (Npc_KnowsInfo (hero, PAL_555_Reiner_Testdialog01))
   {   {
     return TRUE;     return TRUE;
   };   };
-</code> 
  
 Das könntet ihr schon verstehen. Der erste Dialog heißt ja PAL_555_Reiner_Testdialog01, und um den zweiten Dialog beginnen zu dürfen, muss der Held den ersten Testdialog kennen. Dann sind alle Bedingungen wahr und ihr könnt den Dialog ausführen. Es wäre ja blöd, wenn man direkt den zweiten Dialog auswählen könnte und die Mission erfüllt wäre, bevor man sie angefangen hat... Das könntet ihr schon verstehen. Der erste Dialog heißt ja PAL_555_Reiner_Testdialog01, und um den zweiten Dialog beginnen zu dürfen, muss der Held den ersten Testdialog kennen. Dann sind alle Bedingungen wahr und ihr könnt den Dialog ausführen. Es wäre ja blöd, wenn man direkt den zweiten Dialog auswählen könnte und die Mission erfüllt wäre, bevor man sie angefangen hat...
Zeile 180: Zeile 167:
 ------- -------
      
-<code C> 
   MIS_TESTTAGEBUCHNAME = LOG_SUCCESS;   MIS_TESTTAGEBUCHNAME = LOG_SUCCESS;
   Log_SetTopicStatus(TOPIC_TESTTAGEBUCHNAME, LOG_SUCCESS);   Log_SetTopicStatus(TOPIC_TESTTAGEBUCHNAME, LOG_SUCCESS);
   B_CheckLog();   B_CheckLog();
-</code> 
  
-''TESTTAGEBUCHNAME'' müsst ihr wieder ersetzen. Der Befehl ''MIS_TESTTAGEBUCHNAME = LOG_SUCCESS;'' sagt Gothic, dass der Auftrag erfüllt ist. So könnte es aber auch ''MIS_TESTTAGEBUCHNAME = LOG_FAILED;'' heißen, dann wäre der Auftrag z.B. nicht erfüllt.+TESTTAGEBUCHNAME müsst ihr wieder ersetzen. Der Befehl MIS_TESTTAGEBUCHNAME = LOG_SUCCESS; sagt Gothic, dass der Auftrag erfüllt ist. So könnte es aber auch MIS_TESTTAGEBUCHNAME = LOG_FAILED; heißen, dann wäre der Auftrag z.B. nicht erfüllt.
  
-Das gleiche gilt eigentlich auch für ''Log_SetTopicStatus(TOPIC_TESTTAGEBUCHNAME, LOG_SUCCESS);'', es könnte auch ''Log_SetTopicStatus(TOPIC_TESTTAGEBUCHNAME, LOG_FAILED);'' heißen - es sollte einfach dort stehen, das gewährleistet, dass der Auftrag wirklich erfolgreich geschaltet wird.+Das gleiche gilt eigentlich auch für Log_SetTopicStatus(TOPIC_TESTTAGEBUCHNAME, LOG_SUCCESS);, es könnte auch Log_SetTopicStatus(TOPIC_TESTTAGEBUCHNAME, LOG_FAILED); heißen - es sollte einfach dort stehen, das gewährleistet, dass der Auftrag wirklich erfolgreich geschaltet wird.
  
-''B_CheckLog();'' muss noch dahinter, damit Gothic das auch wirklich übernimmt.+B_CheckLog(); muss noch dahinter, damit Gothic das auch wirklich übernimmt.
  
  
Zeile 198: Zeile 183:
  
 In dem Sinne, an die Arbeit. ;) In dem Sinne, an die Arbeit. ;)
 +
 +Bei Kritik, Verbesserungsvorschläge usw, bitte bei [http://forum.worldofplayers.de/forum/member.php?u=7850 Milgo] anfragen.
quickstart/skripte/logs.txt · Zuletzt geändert: 2026/07/02 09:15 von 216.73.216.55