• 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.

Locale OpenSim gecrasht. Wie kann man das verhindern?

Jenna Felton

Superstar
Guten Morgen :)

Die Frage ist vermuttlich mehr als nur frage zum Scripting, daher hier. Ich habe gerade meine OpenSim geschlossen (opensim-0.8.0.2.) Und zwar habe ich einen Skript ausgeführt, in dem ich diese Funktion hatte, die definitiv zum Ausführen kam:

Code:
string key2name(key agent) {
    string name = llGetDisplayName(agent);
    string user = llGetUsername(agent);

    llOwnerSay("key2name("+key2name(agent)+": name = '"+name+"', user = '"+user+"'");
    
    if (name == "") {
        name = llKey2Name(agent);
        if (name == "") name = "("+user+")";
    }
    else {
        name = name+"("+user+")";
    }

    return name;
}

Irgendwie hat die Funktion mir den Namen falsch angegeben und ich wollte wissen warum. Habe die also debuggen wollen und gar nicht bemerkt, dass ich hier eine Rekursion provoziert habe, d.h. die Funktion ruft sich selbst erneut auf und weil ich es übersehen habe, terminiert auch nicht.

Ich nehme an, dass genau deshalb ich die Meldung bekommen habe "Open Sim antwortet nicht" und kurz darauf wurde der Simulator geschlossen. Bei rekursiven Aufruffen wird der Stack solange mit den Aufrufparameter und anderen Sachen belegt, bis der Skriptspeicher voll ist. Zumindest in SL würde mir der Skript in dem Fall crashen. Hier hat sich aber der Simulator geschlossen.

Meine frage wäre, kann ich irgendwo einstellen, dass auch in OS der Skript beendet wird und nicht der Simulator? Ich hoffe ja es geht irgendwie, sonst könnte man sehr einfach Sims crashen.

LG und Danke,
Jenna
 
Zuletzt bearbeitet:
Öhm... Mal zum was Script; das folgende tut genau das selbe, denn "name" ist ja eh leer, wenn llGetDisplayName(agent) nichts liefert:

Code:
string key2name(key agent) {
    return llGetDisplayName(agent)+"("+llGetUsername(agent)+")";
}
 
Danke für Eure Antworten :)

Ich wollte eine Funktion machen, die entweder den traditionällen Namen angibt "Jenna Felton" oder den Displayname mit dem Benutzernamen "Jenna Princess Felton (jenna.Felton)" gekennzeichnet, oder den reinen Benutzernamen, falls LN und DN ausfallen, "(jenna.felton)". Dabei wollte ich die fehlerhaft nicht gelieferte Namen abfangen. llGetDisplayName sollte im Normalfall entweder den DN angeben, falls gesetzt oder das Ergebnis von llKey2Name, aber es kann schon vorkommen, dass dabei nichts ermittelt wird. Wobei sehe ich gerade, da könnte auch noch "???" kommen;

Either of "???" or "" is returned if the region is unable to return display names.

Soweit ich ich der Database lese, ist llGetUserName und llGetDisplayName noch gar nicht im OS implementiert.

Stimmt, da steht es kein Yes bei beiden. Auch den Displaynamen setzen kann ich in OS nicht. Witzigerweise liefert llGetUserName() das richtige Ergebnis, "elrona.manager" in meinem Fall (bin da noch auf der Testsim mit dem einzigen Avatar der Estate Manager ist.) und llGetDisplayName den Legacy Namen "Elrona Manager".

Der Skript soll aber auch in SL funktionieren. Und ich muss die Funktion etwas redesignen, wegen der Fragezeichen und veränderten Anforderung.
 

Users who are viewing this thread

Zurück
Oben Unten