Inhaltsverzeichnis

Abfragen und Operatoren

Abfragen

If-Abfragen sind essenzieller Bestandteil aller Dialoge und Scripts. Hier wird am Beispiel eines Dialoges erklärt, wie man sie einsetzt.


Abfragen geschehen in der Regel in der Condition eines Dialoges, also in der dazugehörigen FUNC INT. Wenn dies TRUE zurückgibt, dann erscheint der Dialog erst dem Spieler zum Auswählen.

FUNC INT DIA_Dr_Test_110_Bloedmann_condition
{
    IF (Npc_KnowsInfo(other,DIA_Dr_Test_110_Hello)
    {
    return TRUE;
    };
};

IF (Npc_KnowsInfo(self,DIA_Dr_Test_110_Hello) 

Das ist der Kopf der Abfrage. IF ist das Schlüsselwort, dann kommt das, was abgefragt werden soll in Klammern. In diesem Fall Npc_KnowsInfo. So wird abgefragt, ob ein bestimmter Dialog schon geführt wurde, und das muss nicht unbedingt beim selben NPC sein. Nach Npc_KnowsInfo kommt dann eine weitere Klammer mit other und dann die Instanz des Dialoges, von dem man will, dass er schon geführt wurde, um diesen hier „freizuschalten“.


    {
    return TRUE;
    };

Hier wird man erkennen, dass das return TRUE; einfach nur in die Klammern der Abfrage gesetzt wurde (was zwingend nötig ist). Die gesamte Funktion liest sich dann praktisch so:

„Wenn der Held den Dialog DIA_Dr_Test_110_Hello schon einmal geführt hat, wird TRUE zurückgegeben.“


Damit sind die Möglichkeiten natürlich lange nicht ausgeschöpft. mehrere Abfragen kann man mit && (und) oder || (oder) verknüpfen, je nach dem, wie mans braucht.

So könnte das zum Beispiel aussehen:

{
    IF (Npc_KnowsInfo(other,DIA_Dr_Test_110_Hello) 
    && (Npc_HasItems(other,ItMi_Gold) >= 5)
    || (Npc_HasItems(other,ItMi_InnosStatue) >= 1)
    {
        return TRUE;
    };

Hier würde sich das so lesen:

„Wenn der Held den Dialog DIA_Dr_Test_110_Hello schon einmal geführt hat UND mindestens 5 Gold hat ODER mindestens eine Innos-Statue, wird TRUE zurückgegeben.“


Dem geneigtem Leser wird noch etwas aufgefallen sein:
„Die Syntax bei Npc_HasItems ist ja ganz anders!“
Stimmt, es ist ja auch eine andere externe Funktion, die andere Sachen verlangt.
Für geübte Laien hier mal die Profi-Variante der Erklärung:

func int Npc_HasItems(var c_npc n0, var int iteminstance)

var c_npc n0 bedeutet einfach nur, dass man da other (für den Helden) oder self (für den NPC) einsetzen muss (obwohl letzteres nicht unbedingt häufig verwendet wird).
var int iteminstance bedeutet, dass die Iteminstanz, die der Held haben soll, dort angegeben werden muss.

Joar, das war EIN Teil… Doch was bedeutet zum Beispiel >= 1?


Operatoren

In Daedalus gelten die selben Operatoren wie in C++:

== Gleich
!= ungleich
>= größer oder gleich
>  größer
<= kleiner oder gleich
<  kleiner

Einiges davon ist sicher schon vom Mathematikunterricht bekannt.

Zu beachten ist jedoch, dass für die Gleichheit ZWEI Gleichheitszeichen verwendet werden müssen (==). Ein einzelnes Gleichheitszeichen verwendet man bei Variablen- oder Konstantenzuweisungen.

Diese Operatoren werden zum Beispiel bei eben diesen HasItems-Abfragen verwendet, um die Anzahl der Items anzugeben, die ein Held haben muss.


So wird das ganze doch schon klarer, oder?

Solche Abfragen können auch problemlos in der FUNC VOID eines Dialoges verwendet werden. So kann man erwirken, dass zum Beispiel eine bestimmte Dialogzeile erst ausgegeben wird, wenn etwas Bestimmtes passiert ist.

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

Viel Spaß noch!
The nameless Hero