Benutzer-Werkzeuge

Webseiten-Werkzeuge


Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu der Vergleichsansicht

Nächste Überarbeitung
Vorherige Überarbeitung
quickstart:skripte:haendlerdialog [2015/08/18 22:15]
127.0.0.1 Externe Bearbeitung
quickstart:skripte:haendlerdialog [2017/01/09 16:55] (aktuell)
milky-way Titel hinzugefügt
Zeile 1: Zeile 1:
 +====== Händlerdialog ======
 +
 In diesem Tutorial möchte ich euch das Scripten eines Händlerdialoges beibringen. In diesem Tutorial möchte ich euch das Scripten eines Händlerdialoges beibringen.
 Man sollte schon die Kenntnisse über das Erstellen von normalen Dialogen haben, denn ansonsten hat dieses Tutorial keinen Sinn, da man herzlich wenig versteht und ich nicht noch einmal auf alle Einzelheiten eingehen möchte ;) Man sollte schon die Kenntnisse über das Erstellen von normalen Dialogen haben, denn ansonsten hat dieses Tutorial keinen Sinn, da man herzlich wenig versteht und ich nicht noch einmal auf alle Einzelheiten eingehen möchte ;)
  
-==  Ein Händlerdialog entsteht ==+=====  Ein Händlerdialog entsteht ​=====
  
 Ich werde erst einmal das gesamte Script posten und es danach erklären. Ich werde erst einmal das gesamte Script posten und es danach erklären.
  
 +<code C>
 instance DIA_Gothicfreak_Trade (C_INFO) instance DIA_Gothicfreak_Trade (C_INFO)
 { {
Zeile 32: Zeile 34:
  };  };
 }; };
 +</​code>​
  
- +----
-----------------------------------------------------------------+
  
 Wir fangen damit an, womit wir bei normalen Dialogen auch anfangen: Wir fangen damit an, womit wir bei normalen Dialogen auch anfangen:
  
 +<code C>
 instance DIA_Gothicfreak_Trade (C_INFO) instance DIA_Gothicfreak_Trade (C_INFO)
 { {
Zeile 48: Zeile 51:
  description = "Zeig mir deine Ware";  description = "Zeig mir deine Ware";
 }; };
 +</​code>​
  
 Eigentlich ein gewohnter Anblick, nur das "trade = TRUE;" ist neu. Dies ist bei einem Händlerdialog sehr wichtig, da er sonst nicht funktioniert. Wir dürfen dies also nicht vergessen! "​permanent = TRUE;" sollte eigentlich immer da stehen, außer man will, dass man nur ein einziges Mal mit dem NPC handeln kann. Eigentlich ein gewohnter Anblick, nur das "trade = TRUE;" ist neu. Dies ist bei einem Händlerdialog sehr wichtig, da er sonst nicht funktioniert. Wir dürfen dies also nicht vergessen! "​permanent = TRUE;" sollte eigentlich immer da stehen, außer man will, dass man nur ein einziges Mal mit dem NPC handeln kann.
  
 +<code C>
 func int DIA_Gothicfreak_Trade_Condition () func int DIA_Gothicfreak_Trade_Condition ()
 {  {
Zeile 59: Zeile 64:
  B_GiveTradeInv (self);  B_GiveTradeInv (self);
  AI_Output (other, self, "​DIA_Gothicfreak_Trade_15_00"​);​ //Zeig mir deine Ware.  AI_Output (other, self, "​DIA_Gothicfreak_Trade_15_00"​);​ //Zeig mir deine Ware.
 +</​code>​
 Auch hier sollte nichts neu sein, außer dem "​B_GiveTradeInv (self); Auch hier sollte nichts neu sein, außer dem "​B_GiveTradeInv (self);
 Dies darf bei einem Händlerdialog nicht vergessen werden! Dies darf bei einem Händlerdialog nicht vergessen werden!
Zeile 66: Zeile 71:
 Eigentlich könnte ich den Dialog hier schon mit einem "​};"​ beenden, doch ich möchte noch, dass ein zusätzlicher Dialog erscheint, wenn man ein Paladin oder ein Feuermagier ist. Eigentlich könnte ich den Dialog hier schon mit einem "​};"​ beenden, doch ich möchte noch, dass ein zusätzlicher Dialog erscheint, wenn man ein Paladin oder ein Feuermagier ist.
 Wir schreiben also noch dazu: Wir schreiben also noch dazu:
 +<code C>
  if (hero.guild == GIL_PAL)  if (hero.guild == GIL_PAL)
  || (hero.guild == GIL_KDF)  || (hero.guild == GIL_KDF)
Zeile 73: Zeile 78:
  };  };
 }; };
 +</​code>​
  
 +----
  
----------------------------------------------------------------- +=====  Das Inventar des Händlers ​=====
- +
- +
-==  Das Inventar des Händlers ==+
  
 Ich werde das Inventar so scripten, dass der Händler in jedem Dialog neue Items dazubekommt. Zuerst poste ich wieder das gesamte Skript: Ich werde das Inventar so scripten, dass der Händler in jedem Dialog neue Items dazubekommt. Zuerst poste ich wieder das gesamte Skript:
  
 +<code C>
 var int Gothicfreak_ItemsGiven_Chapter_1;​ var int Gothicfreak_ItemsGiven_Chapter_1;​
 var int Gothicfreak_ItemsGiven_Chapter_2;​ var int Gothicfreak_ItemsGiven_Chapter_2;​
Zeile 158: Zeile 163:
  };  };
 }; };
 +</​code>​
  
- +----
----------------------------------------------------------------- +
  
 Die "var int"​-Variablen stehen dafür, dass die jeweiligen Kapitelspeziefischen Items bereits verteilt wurden(bei TRUE) oder nicht verteilt wurden (bei FALSE). Die "var int"​-Variablen stehen dafür, dass die jeweiligen Kapitelspeziefischen Items bereits verteilt wurden(bei TRUE) oder nicht verteilt wurden (bei FALSE).
  
 +<code C>
 var int Gothicfreak_ItemsGiven_Chapter_1;​ var int Gothicfreak_ItemsGiven_Chapter_1;​
 var int Gothicfreak_ItemsGiven_Chapter_2;​ var int Gothicfreak_ItemsGiven_Chapter_2;​
Zeile 199: Zeile 204:
  if ((Kapitel >= 1)  if ((Kapitel >= 1)
  && (Gothicfreak_ItemsGiven_Chapter_1 == FALSE))  && (Gothicfreak_ItemsGiven_Chapter_1 == FALSE))
 +</​code>​
 Die "​if"​-Funktion sollte bekannt sein. In diesem Falle ist ihre Bedeutung: "Wenn der Held im 1. Kapitel ist" und "dem NPC Gothicfreak noch keine Items gegeben wurden",​ dann spawnen im Händler-NPC Gothicfreak die folgenden Items. (Diese kann man natürlich variieren!) Die "​if"​-Funktion sollte bekannt sein. In diesem Falle ist ihre Bedeutung: "Wenn der Held im 1. Kapitel ist" und "dem NPC Gothicfreak noch keine Items gegeben wurden",​ dann spawnen im Händler-NPC Gothicfreak die folgenden Items. (Diese kann man natürlich variieren!)
 +<code C>
  CreateInvItems (slf, ItMi_Gold, 100);   CreateInvItems (slf, ItMi_Gold, 100); 
   
Zeile 219: Zeile 224:
  Gothicfreak_ItemsGiven_Chapter_1 = TRUE;  Gothicfreak_ItemsGiven_Chapter_1 = TRUE;
 }; };
 +</​code>​
  
-"CreateInvItems" ​bedeutet, dass der NPC diese Gegenstände im Inventar erschafft, also praktisch "​herstellt"​ und so im Inventar hat. In unserem Falle hat er unter anderem 100 Gold, 1 Kurzschwert,​ 1 normales Schwert usw. Wie gesagt, kann man dies - je nach beliebem - verändern oder gar weglassen. +''​CreateInvItems'' ​bedeutet, dass der NPC diese Gegenstände im Inventar erschafft, also praktisch "​herstellt"​ und so im Inventar hat. In unserem Falle hat er unter anderem 100 Gold, 1 Kurzschwert,​ 1 normales Schwert usw. Wie gesagt, kann man dies - je nach beliebem - verändern oder gar weglassen. 
-Vielleicht ist euch das "Gothicfreak_ItemsGiven_Chapter_1 = TRUE;" ​am Ende aufgefallen,​ denn am Anfang stand da doch "FALSE;". Dies sollte man nicht vergessen, da sonst möglicherweise das Skript nicht funktioniert,​ denn schließlich ist es doch wahr, dass unser "​Gothicfreak"​ Items in sein Inventar bekommen hat ;)+Vielleicht ist euch das ''​Gothicfreak_ItemsGiven_Chapter_1 = TRUE;'' ​am Ende aufgefallen,​ denn am Anfang stand da doch ''​FALSE;''​. Dies sollte man nicht vergessen, da sonst möglicherweise das Skript nicht funktioniert,​ denn schließlich ist es doch wahr, dass unser "​Gothicfreak"​ Items in sein Inventar bekommen hat ;)
  
 Würde man diese Variable nicht auf True setzen, nachdem er die Items erschaffen hat, so würden die gleichen Items immer wieder erschaffen werden sobald der Held den Handelsinventar von Gothicfreak öffnet Würde man diese Variable nicht auf True setzen, nachdem er die Items erschaffen hat, so würden die gleichen Items immer wieder erschaffen werden sobald der Held den Handelsinventar von Gothicfreak öffnet
Zeile 227: Zeile 233:
 Die restlichen Kapitel scriptet man genauso wie das vom ersten, nur das man eben statt einer "​1",​ für Kapitel Nr. 1, eben die jeweilige Zahl des Kapitels einträgt. Die restlichen Kapitel scriptet man genauso wie das vom ersten, nur das man eben statt einer "​1",​ für Kapitel Nr. 1, eben die jeweilige Zahl des Kapitels einträgt.
  
 +<code C>
 if ((Kapitel >= 2) if ((Kapitel >= 2)
  && (Gothicfreak_ItemsGiven_Chapter_2 == FALSE))  && (Gothicfreak_ItemsGiven_Chapter_2 == FALSE))
Zeile 237: Zeile 244:
  Gothicfreak_ItemsGiven_Chapter_2 = TRUE;  Gothicfreak_ItemsGiven_Chapter_2 = TRUE;
  };  };
 +</​code>​
  
 Nun poste ich noch das letzte Kapitel, denn alle brauche ich ja schließlich nicht. (siehe weiter oben) Nun poste ich noch das letzte Kapitel, denn alle brauche ich ja schließlich nicht. (siehe weiter oben)
  
 +<code C>
 if ((Kapitel >= 5) if ((Kapitel >= 5)
  && (Gothicfreak_ItemsGiven_Chapter_5 == FALSE))  && (Gothicfreak_ItemsGiven_Chapter_5 == FALSE))
Zeile 250: Zeile 259:
  };  };
 }; };
 +</​code>​
  
 Wichtig am Ende sind noch mal die beiden "​};"​. Eine steht für das Ende des Scriptes vom Kapitel und das andere für das Ende des gesamten Skriptest. Wichtig am Ende sind noch mal die beiden "​};"​. Eine steht für das Ende des Scriptes vom Kapitel und das andere für das Ende des gesamten Skriptest.
  
----------------------------------------------------------------- +----
  
-==  _work\\data\\Scripts\\Content\\Story\\B_GiveTradeInv ==+===== _work\data\Scripts\Content\Story\B_GiveTradeInv ​=====
  
 Damit der Händlerdialog auch im Spiel erscheint, müssen wir ihn noch in der Datei "​B_GiveTradeInv"​ eintragen, die sich im oben angegeben Pfad befindet. Damit der Händlerdialog auch im Spiel erscheint, müssen wir ihn noch in der Datei "​B_GiveTradeInv"​ eintragen, die sich im oben angegeben Pfad befindet.
Zeile 262: Zeile 271:
 Wir tragen unseren "​Gothicfreak"​ einfach mal 2 Zeilen unter Lutero ein. Dies dient vor allem der Übersicht, damit wir ihn auch später schnell wiederfinden. Wir tragen unseren "​Gothicfreak"​ einfach mal 2 Zeilen unter Lutero ein. Dies dient vor allem der Übersicht, damit wir ihn auch später schnell wiederfinden.
  
 +<code C>
 var C_NPC Trd_Gothicfreak; ​      ​Trd_Gothicfreak ​     = Hlp_GetNpc (NONE_500000_Gothicfreak);​ var C_NPC Trd_Gothicfreak; ​      ​Trd_Gothicfreak ​     = Hlp_GetNpc (NONE_500000_Gothicfreak);​
 +</​code>​
  
 Wie ihr seht, kommt hier noch einmal die Instanz (also "​NONE_500000_Gothicfreak"​) des NPC's vor. Wie ihr seht, kommt hier noch einmal die Instanz (also "​NONE_500000_Gothicfreak"​) des NPC's vor.
Zeile 269: Zeile 280:
 Dort müssen wir unseren Händler-NPC nochmal eintragen. (Wir tragen ihn einfach mal wieder unter Lutero ein) Dort müssen wir unseren Händler-NPC nochmal eintragen. (Wir tragen ihn einfach mal wieder unter Lutero ein)
  
 +<code C>
 if  Hlp_GetInstanceID (slf) == Hlp_GetInstanceID (Trd_Gothicfreak) ​      ​{B_ClearJunkTradeInv (slf); B_GiveTradeInv_Gothicfreak ​      ​(slf);​};​ if  Hlp_GetInstanceID (slf) == Hlp_GetInstanceID (Trd_Gothicfreak) ​      ​{B_ClearJunkTradeInv (slf); B_GiveTradeInv_Gothicfreak ​      ​(slf);​};​
 +</​code>​
  
 So, das war's erst einmal. Falls ihr noch Fragen habt und/oder nicht weiterkommt,​ könnt ihr mich gerne per PN anschreiben,​ oder macht einfach einen Thread im Editing-Forum. Es wird euch keiner den Kopf abreißen, wenn ihr etwas nicht wisst, denn jeder hat schließlich einmal "ganz unten" angefangen ;) So, das war's erst einmal. Falls ihr noch Fragen habt und/oder nicht weiterkommt,​ könnt ihr mich gerne per PN anschreiben,​ oder macht einfach einen Thread im Editing-Forum. Es wird euch keiner den Kopf abreißen, wenn ihr etwas nicht wisst, denn jeder hat schließlich einmal "ganz unten" angefangen ;)
quickstart/skripte/haendlerdialog.1439928952.txt.gz · Zuletzt geändert: 2016/02/07 14:32 (Externe Bearbeitung)