Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Skript stoppt bei Neustart und Daten weg
#1
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.


PHP-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");
        }
    }
} 

[Bild: cc4c0c7c48e3324d3e989df89aca13f7.jpg]
Error Bild
Ein Metaversum sind viele kleine Räume, die nahtlos aneinander passen,
sowie direkt sichtbar und begehbar sind, als wäre es aus einem Guss.



Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Auto Plant Skript Manfred Aabye 15 2.341 28.07.2026, 23:07
Letzter Beitrag: Ezry Aldrin
  skript für opensim gesucht hajo drechsler 3 1.631 18.12.2025, 15:47
Letzter Beitrag: hajo drechsler
  ATM Money Skript LSL Manfred Aabye 0 2.241 03.11.2024, 14:29
Letzter Beitrag: Manfred Aabye
  Secure Skript Manfred Aabye 6 6.883 26.04.2022, 18:51
Letzter Beitrag: Manfred Aabye
  YEngine Skript Restart Manfred Aabye 6 6.215 15.03.2022, 12:43
Letzter Beitrag: Manfred Aabye

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste