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 (
0llGetInventoryNumber(INVENTORY_ALL); i++) {
        if (
llGetInventoryName(INVENTORY_ALLi) == 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 0linesi++) {
        
string line osGetNotecardLine(NOTECARD_NAMEi);
        if (
llGetSubString(line00) != "#" && line != "") { // Ignoriere Kommentarzeilen
            
list parts llParseString2List(line, ["="], []);
            if (
llGetListLength(parts) == 2) {
                
string varName llStringTrim(llList2String(parts0), STRING_TRIM);
                
string varValue llStringTrim(llList2String(parts1), 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_NAMEnotecardContent);
    
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 varNamestring 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 channelstring namekey idstring message) {
        if (
channel != SCRIPT_HANDLE) return;
        
        list 
args llParseString2List(message, [" "], []);
        
string command llList2String(args0);
        
        if (
command == "show") {
            
displayValues();
        }
        else if (
command == "set") {
            if (
llGetListLength(args) >= 3) {
                
string varName llList2String(args1);
                
string value llDumpList2String(llList2List(args2, -1), " ");
                
setValue(varNamevalue);
            } 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.



[-] The following 3 users say Thank You to Manfred Aabye for this post:
  • Anachron, Bogus Curry, Mareta Dagostino
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  ATM Money Skript LSL Manfred Aabye 0 1.192 03.11.2024, 14:29
Letzter Beitrag: Manfred Aabye
  Secure Skript Manfred Aabye 6 4.851 26.04.2022, 18:51
Letzter Beitrag: Manfred Aabye
  YEngine Skript Restart Manfred Aabye 6 4.397 15.03.2022, 12:43
Letzter Beitrag: Manfred Aabye

Gehe zu:


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