16.11.2025, 13:43
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.
![[Bild: cc4c0c7c48e3324d3e989df89aca13f7.jpg]](https://i.pinimg.com/1200x/cc/4c/0c/cc4c0c7c48e3324d3e989df89aca13f7.jpg)
Error Bild
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]](https://i.pinimg.com/1200x/cc/4c/0c/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.
sowie direkt sichtbar und begehbar sind, als wäre es aus einem Guss.


![[-]](https://www.gridtalk.de/images/collapse.png)