Benutzer-Werkzeuge

Webseiten-Werkzeuge


Variablen

Variablen ermöglichen es euch Werte zu speichern und erst durch Variablen erhaltet ihr die Möglichkeiten dynamische Szenarios zu erstellen und zu prüfen. Dieses Kapitel versucht die Möglichkeiten von Variablen ein wenig zu erklären.

Was sind Variablen überhaupt?

Sie können in IF-Abfragen benutzt werden, und zwar vor allem da, wo das Arbeiten mit „normalen“ Abfragen (HasItems, KnowsInfo, etc.) zu kompliziert ist oder schlichtweg nicht möglich ist.

Stellt euch Variablen als eine Art Zwischenspeicher vor, in denen Zahlen oder Daten gespeichert werden können.

Wie erstellt man Variablen?

Man schreibt zuerst in den Script Story_Globals.d (Scripts → Content → Story):

var int NpcGetAngry;

womit sie praktisch schon erstellt wurde. Der Variablenname kann alles sein, zum Beispiel NpcGetAngry, ICHLIEBEMEINENSCHATZ oder auch Gothicmoddingrulezzzzzzz, das liegt ganz allein beim Scripter selbst, da sie im eigentlichen Spiel nicht angezeigt werden.
Empfohlen sind aber solche Namen, die auch zur jeweiligen Verwendung passen, wie z.B. das Erste Beispiel.

Verwendung von Variablen

Nun hat man eine Variable, schön und gut, nutzt einem so aber trotzdem nichts. Verwendet werden die nämlich in einem beliebigen Dialog, und zwar in der FUNC VOID:

FUNC VOID Dr_Test_110_Bloedmann
{
	AI_Output(other,self,"Dr_Test_110_Bloedmann_01_00"); //Hey, du bist ein Blödmann!
	AI_Output(self,other,"Dr_Test_110_Bloedmann_01_01"); //Achja? Böser Junge!
	// Jetzt der wichtige Teil, die Variable wird auf TRUE gesetzt!
	NpcGetAngry = TRUE;
};

Nun hat man die Variable auf TRUE gesetzt. Man kann das zum Beispiel so verwenden, dass der NPC nur Informationen gibt, wenn diese Variable nicht auf TRUE steht, zum Beispiel so:

FUNC VOID Dr_Test_110_Infos
{
	AI_Output(other,self,"Dr_Test_110_Infos_01_00"); //Krieg ich die ultrahochgeheimen Informationen über die Sprengstofffleischwanze?
	if (NpcGetAngry == TRUE) //Hier wird abgefragt, ob die Variable auf TRUE steht. 
	{
		AI_Output(self,other,"Dr_Test_110_Infos_01_01"); //Nein, du hast mich Blödmann genannt! (wein)
	}
	else //Wenn die obere Bedingung nicht erfüllt ist, also die Variable auf 0 steht (Also wenn man den armen Dr. Test nicht beleidigt hat) kommen die folgenden Funktionen. Sollte man aber wissen.
	{
		AI_Output(self,other,"Dr_Test_110_Infos_01_02"); //Ja, die sind in dem Buch da vorne auf dem Tisch!
	};
};

Das war ein einfaches Beispiel zu den Variablen. Wer diese inhaltliche Idee in seiner Mod verwenden will, soll sich keinen Zwang antun. So toll ist sie nicht ;)

Möglichkeiten mit Variablen

In Variablen lassen sich eine ganze Menge Sachen anstellen.
Neben dem Beispiel hier kann man auch erwirken, dass ein Dialog erst am nächsten Tag erscheint oder dass ein Dialog verschwindet, wenn ein bestimmter anderer aktiviert wurde, und und und…
Kurz, es gibt eine ganze Vielzahl von Möglichkeiten, die ich hier nicht alle aufzählen kann. Hier habe ich aber eine kleine Liste zusammengestellt für alle Neulinge. Die Liste wird mit der zeit etwas länger.

Ein Beispiel, wenn ein Dialog erst am nächstem Tag erscheinen soll:

VAR int NextDay; //Variable wird erstellt!
 
INSTANCE DIA_TestPc_Test (C_Info)
{
	npc         = TestPc;
	nr          = 0;
	condition   = DIA_TestPc_Test_condition;
	information = DIA_TestPc_Test_info;
	permanent   = FALSE;
	important   = FALSE;
	description = "Hallo!";
};
FUNC int DIA_TestPc_Test_condition ()
{
	RETURN TRUE;
};
FUNC void DIA_TestPc_Test_info ()
{
	AI_Output(other, self, "DIA_TestPc_Test_hero_0"); //Hallo!
	AI_Output(self, other, "DIA_TestPc_Test_npc_1"); //Tut mir leid! Ich will nicht mit dir reden. hab zu große Kopfschmerzen!
	AI_Output(self, other, "DIA_TestPc_Test2_npc_3"); //Komm morgen wieder!
	NextDay = Wld_GetDay(); //Hiermit wird in der Variable der Tag X gespeichert. Bsp: Man befindet sich im 3. Tag. So wird in der Variable die Zahl 3 gespeichert.
};
 
INSTANCE DIA_TestPc_Test2 (C_Info)
{
	npc         = TestPc;
	nr          = 0;
	condition   = DIA_TestPc_Test2_condition;
	information = DIA_TestPc_Test2_info;
	permanent   = FALSE;
	important   = FALSE;
	description = "Immer noch Kopfschmerzen?";
};
FUNC int DIA_TestPc_Test2_condition ()
{
	if (Npc_KnowsInfo(other,DIA_TestPc_Test))//Hiermit wird abgefragt, ob man den Dialog schon kennt!
	{
		return TRUE;
	};
};
FUNC void DIA_TestPc_Test2_info ()
{
	AI_Output(other, self, "DIA_TestPc_Test2_hero_5"); //Immer noch Kopfschmerzen?
	if (NextDay == Wld_GetDay())//Falls die Variable gleich der Tag X ist, an dem man mit dem TestPC sprechen wollte, wird da hier ausgeführt.  
	{
		AI_Output(self, other, "DIA_TestPc_Test2_npc_6"); //Ja! Du kannst ein anderes Mal mit mir reden!
	}
	else //Falls dies nicht zutrifft, wird dies ausgeführt! Das ist dann logischerweise ein anderer Tag statt Tag X!
	{
		AI_Output(self, other, "DIA_TestPc_Test2_npc_8"); //Nein! Die Kopfschmerzen haben aufgehört!
	};
};

Konstanten

Neben Variablen existieren auch noch Konstanten, die mit dem Schlüsselwort const eingeleitet werden:

const int KonstantenTest = 5;

Somit legt man eine Integer (int)-Konstante an, die den Wert 5 bekommt. Konstanten kann man im Nachhinein nicht mehr verändern, was auch ihr Sinn ist und ihren Namen erklärt. Deshalb MUSS man Konstanten auch IMMER sofort bei der Deklarierung ein Wert zugewiesen werden, sonst meckert der Parser.

Immer, wenn man möchte, dass ein Wert nicht verändert werden soll, sollte man Konstanten verwenden. So verhindert man später Bugs in der Mod, denn ein Fehler, den der Parser meldet, ist immer besser, als ein Fehler im Spiel selbst, den vielleicht sogar noch die Tester übersehen. Und das ich dann bestimmt nicht allzu schön.

Konstanten eignen sich immer dann, wenn ihr feste Zahlenwerte an mehreren Stellen abfragen müsst. Möchtet ihr zum Beispiel einen Auftrag erstellen, bei dem ein NPC den Spieler auffordert von einem anderen einen Geldbetrag einzusammeln? Dann ist es sinnvoll, diesen Betrag in einer Konstante festzuhalten, damit, falls ihr den mal ändern wollt, ihr diesen nur an einer Stelle ändern müsst und keine Folgefehler entstehen können, weil ihr eine von mehreren Stellen vergessen habt.


Falls noch weitere Fragen auftauchen, schaut einfach mal im Editing-Forum vorbei!

quickstart/skripte/variablen.txt · Zuletzt geändert: 2016/02/07 19:00 von milgo