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