• Bitte schaltet eure Ad Blocker aus. SLinfo kann nur betrieben werden, wenn es durch Werbung Einnahmen erzielt. Vielen Dank!!
  • Wir freuen uns, wenn du dich in unserem Forum anmeldest. Bitte beachte, dass die Freigabe per Hand durchgeführt wird (Schutz vor Spammer). Damit kann die Freigabe bis zu 24 Stunden dauern.
  • Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und die Zugriffe auf unsere Website zu analysieren. Sie geben Einwilligung zu unseren Cookies, wenn Sie unsere Webseite weiterhin nutzen.

Skript stoppt bei Neustart und Daten weg

manni Aabye

Nutzer
Skript stoppt bei Neustart und Daten weg
Hier ist ein selbsterklärendes Skript,
welches euch zeigt, wie man seine Werte
aus einem Skript in eine Notecard speichert
und diese beim Neustart wieder einlädt.



Code:
/*
**Funktionen des Skripts:**

1. **Automatischer Start bei Regionsneustart**: Das Skript wird automatisch neu gestartet und lädt die gespeicherten Werte.

2. **Notecard-Operationen**:
   - `readNotecard()`: Liest alle Werte aus der Notecard
   - `writeNotecard()`: Schreibt alle Werte in die Notecard
   - `createDefaultNotecard()`: Erstellt eine Notecard mit Standardwerten

3. **Chat-Kommandos**:
- /12345 show - Zeige aktuelle Werte
- /12345 set VarWert1 NeuerWert - Setze einen Wert
- /12345 save - Speichere Werte manuell
- /12345 load - Lade Werte neu
- /12345 reset - Setze alle Werte zurück
- /12345 test - Simuliere Regionsneustart
- /12345 verify - Prüfe Notecard-Existenz
- /12345 delete - Lösche die Notecard

4. **Automatisches Speichern**: Bei jeder Änderung werden die Werte automatisch gespeichert.

**Verwendung:**
1. Das Skript in ein Objekt legen
2. Das Objekt rezzen
3. Mit den Chat-Kommandos Werte setzen und verwalten
 
Die Daten werden in der Notecard "DatenNotecard" im Format `Variablenname=Wert` gespeichert.
*/

// Konfiguration
string NOTECARD_NAME = "DatenNotecard";
integer SCRIPT_HANDLE = 12345; // Eindeutige ID für diesen Script

// Variablen
string VarWert1;
string VarWert2;
string VarWert3;
string VarWert4;
string VarWert5;

integer writingNotecard = FALSE; // Flag um Endlosschleifen zu vermeiden

// Prüft ob Notecard existiert
integer notecardExists() {
    integer i;
    for (i = 0; i < llGetInventoryNumber(INVENTORY_ALL); i++) {
        if (llGetInventoryName(INVENTORY_ALL, i) == NOTECARD_NAME) {
            return TRUE;
        }
    }
    return FALSE;
}

// Löscht die Notecard falls sie existiert
deleteNotecard() {
    if (notecardExists()) {
        llRemoveInventory(NOTECARD_NAME);
        llSleep(1.0); // Kurz warten bis das Löschen abgeschlossen ist
    }
}

// Notecard Lesen
readNotecard() {
    if (!notecardExists()) {
        llOwnerSay("Notecard '" + NOTECARD_NAME + "' nicht gefunden. Erstelle neue...");
        createDefaultNotecard();
        return;
    }
    
    integer lines = osGetNumberOfNotecardLines(NOTECARD_NAME);
    if (lines <= 0) {
        llOwnerSay("Notecard ist leer oder konnte nicht gelesen werden.");
        return;
    }
    
    // Werte zurücksetzen vor dem Laden
    VarWert1 = "";
    VarWert2 = "";
    VarWert3 = "";
    VarWert4 = "";
    VarWert5 = "";
    
    integer loadedValues = 0;
    for (integer i = 0; i < lines; i++) {
        string line = osGetNotecardLine(NOTECARD_NAME, i);
        if (llGetSubString(line, 0, 0) != "#" && line != "") { // Ignoriere Kommentarzeilen
            list parts = llParseString2List(line, ["="], []);
            if (llGetListLength(parts) == 2) {
                string varName = llStringTrim(llList2String(parts, 0), STRING_TRIM);
                string varValue = llStringTrim(llList2String(parts, 1), STRING_TRIM);
                
                if (varName == "VarWert1") {
                    VarWert1 = varValue;
                    loadedValues++;
                }
                else if (varName == "VarWert2") {
                    VarWert2 = varValue;
                    loadedValues++;
                }
                else if (varName == "VarWert3") {
                    VarWert3 = varValue;
                    loadedValues++;
                }
                else if (varName == "VarWert4") {
                    VarWert4 = varValue;
                    loadedValues++;
                }
                else if (varName == "VarWert5") {
                    VarWert5 = varValue;
                    loadedValues++;
                }
            }
        }
    }
    
    llOwnerSay("Notecard erfolgreich gelesen! " + (string)loadedValues + " Werte geladen.");
    displayValues();
}

// Notecard Schreiben
writeNotecard() {
    writingNotecard = TRUE; // Flag setzen um Endlosschleife zu vermeiden
    
    string notecardContent = "# Automatisch generierte Notecard\n";
    notecardContent += "# Wird bei Regionsneustart automatisch geladen\n\n";
    
    notecardContent += "VarWert1=" + VarWert1 + "\n";
    notecardContent += "VarWert2=" + VarWert2 + "\n";
    notecardContent += "VarWert3=" + VarWert3 + "\n";
    notecardContent += "VarWert4=" + VarWert4 + "\n";
    notecardContent += "VarWert5=" + VarWert5 + "\n";
    
    // Alte Notecard löschen falls sie existiert
    deleteNotecard();
    
    // Kurz warten bevor neue Notecard erstellt wird
    llSleep(0.5);
    
    // Neue Notecard erstellen
    osMakeNotecard(NOTECARD_NAME, notecardContent);
    llOwnerSay("Notecard geschrieben!");
    
    // Kurz warten und Flag zurücksetzen
    llSleep(1.0);
    writingNotecard = FALSE;
}

// Standard-Notecard erstellen
createDefaultNotecard() {
    VarWert1 = "Standardwert1";
    VarWert2 = "Standardwert2";
    VarWert3 = "Standardwert3";
    VarWert4 = "Standardwert4";
    VarWert5 = "Standardwert5";
    
    writeNotecard();
}

// Werte anzeigen
displayValues() {
    llOwnerSay("Aktuelle Werte:");
    llOwnerSay("VarWert1: " + VarWert1);
    llOwnerSay("VarWert2: " + VarWert2);
    llOwnerSay("VarWert3: " + VarWert3);
    llOwnerSay("VarWert4: " + VarWert4);
    llOwnerSay("VarWert5: " + VarWert5);
}

// Werte setzen
setValue(string varName, string value) {
    if (varName == "VarWert1") VarWert1 = value;
    else if (varName == "VarWert2") VarWert2 = value;
    else if (varName == "VarWert3") VarWert3 = value;
    else if (varName == "VarWert4") VarWert4 = value;
    else if (varName == "VarWert5") VarWert5 = value;
    else {
        llOwnerSay("Unbekannte Variable: " + varName);
        return;
    }
    
    llOwnerSay(varName + " auf '" + value + "' gesetzt");
    writeNotecard(); // Automatisch speichern bei Änderung
}

// Regionsneustart simulieren (für Testzwecke)
testRegionRestart() {
    llOwnerSay("=== Simuliere Regionsneustart ===");
    llSleep(2.0);
    readNotecard();
}

default {
    state_entry() {
        llOwnerSay("Script gestartet - Lade Daten von Notecard...");
        
        // Warte kurz bis alles geladen ist
        llSleep(2.0);
        readNotecard();
        
        // Listen auf Chat-Kommandos
        llListen(SCRIPT_HANDLE, "", llGetOwner(), "");
        llOwnerSay("Verfügbare Kommandos:");
        llOwnerSay("/" + (string)SCRIPT_HANDLE + " show - Zeige aktuelle Werte");
        llOwnerSay("/" + (string)SCRIPT_HANDLE + " set VarWert1 NeuerWert - Setze einen Wert");
        llOwnerSay("/" + (string)SCRIPT_HANDLE + " save - Speichere Werte manuell");
        llOwnerSay("/" + (string)SCRIPT_HANDLE + " load - Lade Werte neu");
        llOwnerSay("/" + (string)SCRIPT_HANDLE + " reset - Setze alle Werte zurück");
        llOwnerSay("/" + (string)SCRIPT_HANDLE + " test - Simuliere Regionsneustart");
        llOwnerSay("/" + (string)SCRIPT_HANDLE + " verify - Prüfe Notecard-Existenz");
        llOwnerSay("/" + (string)SCRIPT_HANDLE + " delete - Lösche die Notecard");
    }
    
    on_rez(integer start_param) {
        llResetScript();
    }
    
    changed(integer change) {
        if (change & CHANGED_REGION_START) {
            llOwnerSay("Region neu gestartet - Lade Daten...");
            llSleep(5.0); // Warte bis die Region vollständig geladen ist
            readNotecard();
        }
        if (change & CHANGED_INVENTORY) {
            // Ignoriere CHANGED_INVENTORY wenn wir selbst die Notecard schreiben
            if (!writingNotecard) {
                llSleep(2.0); // Warte bis die Notecard geladen ist
                llOwnerSay("Inventory geändert - Lade Notecard neu...");
                readNotecard();
            }
        }
    }
    
    listen(integer channel, string name, key id, string message) {
        if (channel != SCRIPT_HANDLE) return;
        
        list args = llParseString2List(message, [" "], []);
        string command = llList2String(args, 0);
        
        if (command == "show") {
            displayValues();
        }
        else if (command == "set") {
            if (llGetListLength(args) >= 3) {
                string varName = llList2String(args, 1);
                string value = llDumpList2String(llList2List(args, 2, -1), " ");
                setValue(varName, value);
            } else {
                llOwnerSay("Syntax: set VarName Wert");
            }
        }
        else if (command == "save") {
            writeNotecard();
        }
        else if (command == "load") {
            readNotecard();
        }
        else if (command == "reset") {
            llOwnerSay("Setze alle Werte zurück...");
            createDefaultNotecard();
        }
        else if (command == "test") {
            testRegionRestart();
        }
        else if (command == "verify") {
            if (notecardExists()) {
                llOwnerSay("Notecard '" + NOTECARD_NAME + "' existiert.");
                integer lines = osGetNumberOfNotecardLines(NOTECARD_NAME);
                llOwnerSay("Notecard hat " + (string)lines + " Zeilen.");
            } else {
                llOwnerSay("Notecard '" + NOTECARD_NAME + "' existiert NICHT.");
            }
        }
        else if (command == "delete") {
            if (notecardExists()) {
                deleteNotecard();
                llOwnerSay("Notecard '" + NOTECARD_NAME + "' gelöscht.");
            } else {
                llOwnerSay("Notecard '" + NOTECARD_NAME + "' existiert nicht.");
            }
        }
        else {
            llOwnerSay("Unbekanntes Kommando: " + command);
            llOwnerSay("Verfügbare Kommandos: show, set, save, load, reset, test, verify, delete");
        }
    }
}


cc4c0c7c48e3324d3e989df89aca13f7.jpg

Error Bild
 

Users who are viewing this thread

Zurück
Oben Unten