OSSL/de
From OpenSimulator
Dies ist derzeit in einem der Blog-Beiträge von justincc [1] geschrieben. Einige dieser Informationen sollten hierher übertragen werden. Lesen Sie, was implementiert ist.
Im Folgenden handelt es sich um den fraglichen Blog-Beitrag von JustinCC. Datierung vom 24. Oktober 2008. Hinweis: Ein neuer Mechanismus zum Hinzufügen von OSSL-Skriptfunktionen aus Regionsmodulen ohne jegliche Notwendigkeit, den OpenSimulator-Code selbst zu patchen, wird unter OSSL_Script_Library/ModInvoke beschrieben.
Einleitung
Trotz unseres langfristigen Wunsches, OpenSimulator zu einer allgemeinen virtuellen Umgebung zu machen, ist die Implementierung aller Funktionen in der Linden Scripting Language (LSL) für die Second Life-Umgebung zu einem unserer de facto Ziele geworden. Dies ist aus zwei Gründen sehr verständlich:
Es gibt einen großen Bestand an Second Life-Skripten, die bereits in LSL geschrieben wurden. Je genauer unsere Implementierung von LSL ist, desto einfacher ist es, diesen bestehenden Code wiederzuverwenden.
Die Syntax und die ll-Funktionen von LSL stellen effektiv eine Sprachspezifikation dar. Dies ermöglicht es vielen verschiedenen Open-Source-Beitragenden, auf 'Basar'-Art zu arbeiten. Viele verschiedene Personen können Patches beitragen, die ll-Funktionen stückweise implementieren, ohne ihre Bemühungen mit anderen Open-Source-Beitragenden abstimmen zu müssen.
LSL ist jedoch unvollkommen. Abgesehen von Fragen zur Inkonsistenz der Implementierungen der ll-Funktionen von Linden Lab oder den Mängeln der Sprache selbst gibt es auch viele fehlende Funktionen. Zum Beispiel kann man in LSL keinen Agenten teleportieren (stattdessen müssen verschiedene unvollkommene Workarounds verwendet werden). Ebenso wenig kann man Daten auf Notecards schreiben oder Informationen über Avatar-Gruppenrollen herausfinden.
OpenSimulator-Skriptsprache (OSSL)
Wie könnte das Problem fehlender Funktionalität angegangen werden? Wenn wir die Aussicht auf die Verwendung vollständig unterschiedlicher Sprachen mit ihren eigenen Funktionsimplementierungen (C#, Python usw.) außer Acht lassen, ist eine Möglichkeit, dies zu tun, die Erweiterung von LSL durch das Hinzufügen zusätzlicher Funktionen, die von OpenSimulator verstanden werden. Dies ist es, was die OpenSimulator-Skriptsprache (OSSL) ist. Es handelt sich effektiv um alles von LSL plus zusätzliche Funktionen, die mit einem os-Präfix beginnen. Os-Funktionen können in einem Skript genau wie ll-Funktionen verwendet werden. Beispiele für Os-Funktionen sind:
osTeleportAgent() ermöglicht es Ihnen, einen Agenten an eine andere Position und Region zu teleportieren.
osSetDynamicTextureURL() ermöglicht es Ihnen, ein externes oder dynamisch generiertes Bild in der Welt anzuzeigen (wie in diesem Inworld-Webseitenanzeigeskript oder meinem eigenen 'Graffiti-Board'-Skript, das Text auf einer einzelnen Textur in der Welt anzeigt).
osParseJSON() ermöglicht es Ihnen, JSON innerhalb eines Skripts zu analysieren. Dies ist kein so gutes Beispiel, da der Rückgabetyp HashTable es wahrscheinlich derzeit in LSL-Skripten unbrauchbar macht (das hier gezeigte Beispiel ist ein Skript in kompiliertem C#). Ich denke jedoch, dass es erweitert werden könnte, um eine Datenstruktur zurückzugeben, die in LSL verwendet werden könnte.
Wie man eine OSSL-Funktion implementiert - OSSL_Implementiert
Das Implementieren einer OSSL-Funktion ist etwas umständlich - Sie müssen an 3 Stellen Änderungen vornehmen. Zuerst machen wir die eigentliche Implementierung selbst. Genau wie es eine LSL_Api-Klasse im Paket OpenSim.Region.ScriptEngine.Shared.Api gibt, die alle LSL-Funktionen implementiert, gibt es auch eine OSSL_Api-Klasse, die OSSL-Funktionen implementiert. Um eine neue Funktion zu implementieren, würde man in OSSL_Api.cs eine Methode mit demselben Namen hinzufügen. Zum Beispiel:
public string osMyFunction() { // Wir werden das im nächsten Abschnitt besprechen CheckThreatLevel(ThreatLevel.None, "osMyFunction"); // Lassen Sie die Statistiken wissen, dass eine Skriptzeile ausgeführt wurde m_host.AddScriptLPS(1); return "Hallo Welt!"; }
Die Methodensignatur für diese Implementierung muss dem Interface IOOSL_Api in OpenSim.Region.ScriptEngine.Shared (Api/Interface-Verzeichnis) hinzugefügt werden:
string osMyFunction();
Schließlich muss eine Methode zum Aufrufen der Funktion über dieses Interface zur ScriptBaseClass (die allen LSL- und OSSL-Skripten zugrunde liegt) in der Datei OSSL_Stub.cs im Paket OpenSim.Region.ScriptEngine.Shared.Api.Runtime hinzugefügt werden.
public string osMyFunction() { return m_OSSL_Functions.osMyFunction(); }
Dann ist es eine Frage der Neukompilierung von OpenSimulator und des Neustarts des Region-Servers. Bevor Sie neu starten, stellen Sie sicher, dass
AllowOSFunctions = true
in Ihrer OpenSim.ini gesetzt ist. Wenn dies nicht gesetzt ist, wird keine os-Funktion ausgeführt, unabhängig davon, welches Bedrohungsniveau eingestellt ist (wie unten diskutiert).
Nachdem Sie OpenSim neu gestartet haben, können Sie osMyFunction() in einem Inworld-Skript aufrufen.
default { state_entry() { llSay(0, osMyFunction()); } }
In Zukunft hoffe ich, dass es möglich sein wird, neue Funktionen über Plugins hinzuzufügen, anstatt die Datei OSSL_Api.cs zu ändern.
Threat Level
Sie haben möglicherweise die Zeile bemerkt
CheckThreatLevel(ThreatLevel.None, "osMyFunction");
oben. Genau wie einige LL-Funktionen in einer virtuellen Weltumgebung gefährlich sind und eingeschränkt werden müssen (z.B. llRezObject()), können auch os-Funktionen kontrolliert werden. Daher hat jede os-Funktion ein 'Bedrohungsniveau', das vor der Ausführung überprüft wird. Die Bedrohungsniveaus reichen von Keine (überhaupt keine Bedrohung) über Moderat (beabsichtigter Missbrauch kann zu einem Ausfall führen) bis hin zu Schwerwiegend (selbst gelegentliche Nutzung kann zu Regioninstabilität und/oder Datenverlust führen). Unsere BeispielosMyFunction() ist als Keine eingestuft, weil sie einfach "Hallo Welt" zurückgibt. Etwas wie osTeleportAgent() ist derzeit als Hoch eingestuft, weil vor dem Teleportieren keine Sicherheitsüberprüfungen durchgeführt werden.
Regionsadministratoren können das Niveau der os-Funktionen ändern, die sie zulassen möchten, indem sie das Attribut OSFunctionThreatLevel in der OpenSim.ini ändern. Sie können auch einzelne os-Funktionen ein- und ausschalten.
In einem öffentlichen virtuellen Weltkontext möchten Sie möglicherweise niemals Funktionen mit hohen Bedrohungsniveaus zulassen. In einer virtuellen Welt, in der die zugelassenen Personen vertrauenswürdig sind, oder in Anwendungsvirtualumgebungen können das Zulassen solcher Funktionen jedoch viel sinnvoller sein.
Beiträge willkommen
OSSL ist keineswegs vollständig. Daher sind Patches zur Implementierung von Funktionen, die Sie in LSL haben möchten, willkommen - wir freuen uns immer, sie zu prüfen :-)