Persistentes speichern von Daten


So wie du die Konfigurationen aus dem CustomData-Feld lesen und verarbeiten kannst, ist es auch möglich Daten wieder hinein zu schreiben, also zu speichern. Das geht mit den selben Mitteln wie das Auslesen.Beachte aber das gerade beim Multiplayer beispielsweise andere Spieler das CustomData Feld bearbeiten könnten während das Skript läuft und es so zu Unstimmigkeiten kommen kann, oder das edr Speicherzyklus des Spiels noch nicht erreicht ist, wodurch das CustomData-Feld per se noch nicht abgespeichert wurde. Also walte mit Vorsicht. Hier ist jedenfalls ein Codebeispiel wie das aussehen kann:

// Instanziiere ein Instanz der MyIni-Klasse
MyIni iniParser = new MyIni();

// Definiere ein Standardwert für _intWert
const int StandardIntWert = 5;

// Ein Integer wert
int _intWert;

// The default of _boolWert
const bool StandardBoolWert = true;

// Ein bool'scher Wert
bool _boolWert;

public void Program()
{
    // Dieses Mal MÜSSEN wir prüfen ob es Fehler in der INI gibt, falls er bereits falsche beschrieben wurde 
    MyIniParseResult result;    
    if (!iniParser.TryParse(Me.CustomData, out ergebnis)) {
        throw new Exception(ergebnis.ToString());
    }

    // Lese den Integer Wert. Falls er nicht exisitiert gib den Standard Wert zurück
    _intWert = iniParser.Get("demo", "intWert").ToInt32(StandardIntWert);

    // Dann mach das selbe für den bool'schen Wert
    _boolWert = iniParser.Get("demo", "boolWert").ToBoolean(StandardBoolWert);
}

public void Save()
{
    // Angenommen das Skript ist gelaufen und hat etwaige Änderungen vorgenommen.
    // Wir wollen die Werte nicht kontinuierlich aus der INI aktualisieren, das würde 
    // zu lange dauern veglichen mit dem direkten Benutzen der Variablen

    // Dieses Mal parsen wir die INI komplett neu, da Benutzer die Daten manuell 
    // geändert haben könnten und wir die Änderungen nicht mitbekommen würden.
    MyIniParseResult result;
    if (!iniParser.TryParse(Me.CustomData, out ergebnis)) {
        throw new Exception(ergebnis.ToString());
    }

    // Dann setzen wir den Integer Wert
    iniParser.Set("demo", "intWert", _intWert);

    // and schließlich den Bool'schen Wert.
    iniParser.Set("demo", "boolWert", _boolWert);

    // Jetzt werden wir unser Konfiguration in die das CustomData Feld schreiben.
    Me.CustomData = iniParser.ToString();
}

public void Main()
{
    // Deine Logik kommt hierhin. Benutze den iniParser nicht direkt, sondern die Variablen. Alles andere wäre zu langsam
}