Lektion 6
In der letzten Lektion habe ich euch die "if()"-Verzweigung erklärt. In dieser Lektion werden wir wieder auf unsere Begrüßung aus Lektion 4 eingehen.
SetLocal Funktionen void SetLocalFloat(); void SetLocalInt(); void SetLocalLocation(); void SetLocalObject(); void SetLocalString();
Wir hatten bisher das Problem, dass die Variablen nur für den Lauf unseres Scriptes gültig waren. Damit ist es uns natürlich nicht möglich etwas für spätere Aktionen zu speichern. Dafür möchte ich euch nun fünf Funktionen vorstellen.
Diese Funktionen speichern einen Wert sozusagen direkt auf einem Objekt. Ihr könnt euch das so vorstellen, dass euer Behältnis der Kreatur auf den Rücken geschnallt wird, so dass sie es nicht mehr ablegen kann. Nur ihr habt die volle Kontrolle darüber, was mit dem Behältnis und seinem Inhalt passiert.
Parameter object oOwner = GetFirstPC(); string sVarName = "fTestFloat"; float fValue = 0.8534f; SetLocalFloat(oOwner, sVarName, fValue);
Ihr müsst den SetLocal...()-Funktionen drei Parameter übergeben. Hier ein Beispiel für einen Gleitkomma (float) Wert. Wir weisen einfach dem ersten "Gast" unserer Welt das float-Behältnis "fTestFloat" mit dem Inhalt 0.8534 zu.
Die drei Parameter sind also immer:
1. Ein Objekt, nämlich den Besitzer der Variable.
2. Ein String, nämlich der Name der Variable.
3. Der Wert der Variable in Form des passenden Datentypes.
GetLocal Funktionen float GetLocalFloat(); int GetLocalInt(); location GetLocalLocation(); object GetLocalObject(); string GetLocalString();
Um eine so zugewiesene Variable wieder auslesen zu können, braucht ihr diese Funktionen. Der jeweilige Rückgabewert entspricht dem Namen der Funktion.
Diese Funktionen benötigen nur zwei Parameter, nämlich das Objekt, also den Besitzer, und den Namen der gewünschten Variable als String. Sie leifert euch dann den entsprechenden Wert in seinem jeweiligen Datentyp zurück.
DeleteLocal void DeleteLocalFloat(); void DeleteLocalInt(); void DeleteLocalLocation(); void DeleteLocalObject(); void DeleteLocalString();
Falls ihr eine solche Variable mal nicht mehr benötigt, könnt ihr sie mit Hilfe dieser Funktionen wieder entfernen.
Auch diese Funktionen benötigen nur zwei Parameter, den Besitzer als Objekt und den Namen der gewünschten Variable in Form eines Strings.
Wie gesagt, werde ich nun das Beispiel aus Lektion Vier optimieren. Wir werden mit Hilfe der uns nun bekannten Funktionen dafür sorgen, dass unsere "Gäste" nur noch einmal begrüßt werden.
void main() { int nUser = GetUserDefinedEventNumber(); if (nUser == 1002) { object oCreature = GetLastPerceived(); if (!GetLocalInt(oCreature, "iGreeting")) { if ((TRUE == GetLastPerceptionSeen()) && (GetIsPC(oCreature))) { ActionDoCommand(SetFacingPoint(GetPosition(oCreature))); ActionPlayAnimation(ANIMATION_FIREFORGET_GREETING); SpeakString("Seid willkommen, Fremder."); SetLocalInt(oCreature, "iGreeting", 1); } } } return; }
Wie ihr seht, prüfe ich direkt, ob die Funktion "GetLocalInt(oCreature, "iGreeting")" einen negativen Wert liefert. Wenn ja, mache ich die gleichen Aktionen wie vorher auch, setze aber zusätzlich den zuvor abgefragten Wert "iGreeting" durch den Funktionsaufruf "SetLocalInt(oCreature, "iGreeting", 1);" auf 1. Dadurch wird bei einem neuen Durchlauf des Scriptes bei der erneuten Überprüfung der Variable "iGreeting" kein negativer Wert zurückgeliefert und somit nicht erneut gegrüßt.
Soviel zu dieser Lektion. Weiter geht es mit Lektion 7.