OSSL/de

From OpenSimulator

(Difference between revisions)
Jump to: navigation, search
(Drohe mir nicht)
 
(One intermediate revision by one user not shown)
Line 1: Line 1:
 
__NOTOC__
 
__NOTOC__
{{Quicklinks}}
+
{{Quicklinks|OSSL}}
 
<br />
 
<br />
  
Dies ist derzeit in einem der Blog-Beiträge von justincc [http://justincc.wordpress.com/2008/10/24/opensim-scripting-languages-lsl-and-ossl] geschrieben. Einige dieser Informationen sollten hierher übertragen werden.
+
== Einführung in die OpenSimulator-Skriptsprache (OSSL) ==
Lesen Sie, was [[OSSL Implementiert|implementiert]] ist.
+
  
'''Im Folgenden handelt es sich um den fraglichen Blog-Beitrag von JustinCC. Datierung vom 24. Oktober 2008.'''
+
Die OpenSimulator-Skriptsprache (OSSL) erweitert die Linden Scripting Language (LSL) um zusätzliche Funktionen, die speziell für die OpenSimulator-Plattform entwickelt wurden.  
'''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 ==
+
Diese Erweiterungen beginnen mit dem Präfix „os“ und bieten zusätzliche Möglichkeiten, die in LSL nicht verfügbar sind, wie z.B. das Teleportieren von Agenten oder das Anzeigen dynamischer Texturen.
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.
+
== Implementierung einer OSSL-Funktion ==
  
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.
+
Um eine neue OSSL-Funktion hinzuzufügen, sind folgende Schritte notwendig:
  
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.
+
=== 1. Implementierung der Funktion ===
 +
Erstellen Sie eine neue Methode in der Datei `OSSL_Api.cs` im Verzeichnis `OpenSim.Region.ScriptEngine.Shared.Api`. Die Methode sollte die gewünschte Funktionalität enthalten, z.B.:
  
== OpenSimulator-Skriptsprache (OSSL) ==
+
csharp
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:
+
<source lang="csharp">
 
+
[[osTeleportAgent|osTeleportAgent()]] ermöglicht es Ihnen, einen Agenten an eine andere Position und Region zu teleportieren.
+
 
+
[[osSetDynamicTextureURL|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|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:
+
<source lang="lsl">
+
 
public string osMyFunction()
 
public string osMyFunction()
 
{
 
{
    // Wir werden das im nächsten Abschnitt besprechen
 
 
     CheckThreatLevel(ThreatLevel.None, "osMyFunction");
 
     CheckThreatLevel(ThreatLevel.None, "osMyFunction");
 +
    m_host.AddScriptLPS(1);
 +
    return "Hallo Welt!";
 +
}
 +
</source>
  
// Lassen Sie die Statistiken wissen, dass eine Skriptzeile ausgeführt wurde
+
=== 2. Schnittstelle erweitern ===
m_host.AddScriptLPS(1);
+
Fügen Sie die Methodensignatur der Schnittstelle `IOOSL_Api` im Verzeichnis `OpenSim.Region.ScriptEngine.Shared` hinzu:
  
return "Hallo Welt!";
+
csharp
 
+
<source lang="csharp">
}
+
string osMyFunction();
 
</source>
 
</source>
  
Die Methodensignatur für diese Implementierung muss dem Interface IOOSL_Api in OpenSim.Region.ScriptEngine.Shared (Api/Interface-Verzeichnis) hinzugefügt werden:
+
=== 3. Funktion zur Basis-Klasse hinzufügen ===
 +
In der Datei `OSSL_Stub.cs` im Verzeichnis `OpenSim.Region.ScriptEngine.Shared.Api.Runtime` fügen Sie die Methode hinzu, um die Funktion über das Interface aufzurufen:
  
    string osMyFunction();
+
csharp
 
+
<source lang="csharp">
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.
+
<source lang="lsl">
+
 
public string osMyFunction()
 
public string osMyFunction()
 
{
 
{
Line 55: Line 45:
 
</source>
 
</source>
  
Dann ist es eine Frage der Neukompilierung von OpenSimulator und des Neustarts des Region-Servers. Bevor Sie neu starten, stellen Sie sicher, dass
+
=== 4. OpenSimulator neu kompilieren ===
 +
Kompilieren Sie OpenSimulator neu und starten Sie den Region-Server.
  
'''AllowOSFunctions = true'''
+
=== 5. OSSL-Funktionen aktivieren ===
 +
Stellen Sie sicher, dass in Ihrer `OpenSim.ini` die Einstellung `AllowOSFunctions = true` aktiviert ist, damit die os-Funktionen ausgeführt werden.
  
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).
+
== Verwendung der neuen OSSL-Funktion ==
  
Nachdem Sie OpenSim neu gestartet haben, können Sie osMyFunction() in einem Inworld-Skript aufrufen.
+
Nach dem Neustart des Servers können Sie die neue Funktion in einem Skript verwenden:
 +
 
 +
lsl
 
<source lang="lsl">
 
<source lang="lsl">
 
default
 
default
Line 72: Line 66:
 
</source>
 
</source>
  
In Zukunft hoffe ich, dass es möglich sein wird, neue Funktionen über Plugins hinzuzufügen, anstatt die Datei OSSL_Api.cs zu ändern.
+
== Sicherheitsstufen (Threat Level) ==
 
+
== 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.
+
Jede OSSL-Funktion wird einer Bedrohungsstufe zugewiesen, die bestimmt, wie sicher ihre Ausführung ist.  
  
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.
+
Diese Stufen reichen von `None` (keine Bedrohung) bis `High` (hohe Bedrohung).  
  
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.
+
Der Regionsadministrator kann die Bedrohungsstufen in der `OpenSim.ini` anpassen und einzelne Funktionen aktivieren oder deaktivieren.
  
 
== Beiträge willkommen ==
 
== Beiträge willkommen ==

Latest revision as of 23:51, 30 August 2024


[edit] Einführung in die OpenSimulator-Skriptsprache (OSSL)

Die OpenSimulator-Skriptsprache (OSSL) erweitert die Linden Scripting Language (LSL) um zusätzliche Funktionen, die speziell für die OpenSimulator-Plattform entwickelt wurden.

Diese Erweiterungen beginnen mit dem Präfix „os“ und bieten zusätzliche Möglichkeiten, die in LSL nicht verfügbar sind, wie z.B. das Teleportieren von Agenten oder das Anzeigen dynamischer Texturen.

[edit] Implementierung einer OSSL-Funktion

Um eine neue OSSL-Funktion hinzuzufügen, sind folgende Schritte notwendig:

[edit] 1. Implementierung der Funktion

Erstellen Sie eine neue Methode in der Datei `OSSL_Api.cs` im Verzeichnis `OpenSim.Region.ScriptEngine.Shared.Api`. Die Methode sollte die gewünschte Funktionalität enthalten, z.B.:

csharp

public string osMyFunction()
{
    CheckThreatLevel(ThreatLevel.None, "osMyFunction");
    m_host.AddScriptLPS(1);
    return "Hallo Welt!";
}

[edit] 2. Schnittstelle erweitern

Fügen Sie die Methodensignatur der Schnittstelle `IOOSL_Api` im Verzeichnis `OpenSim.Region.ScriptEngine.Shared` hinzu:

csharp

string osMyFunction();

[edit] 3. Funktion zur Basis-Klasse hinzufügen

In der Datei `OSSL_Stub.cs` im Verzeichnis `OpenSim.Region.ScriptEngine.Shared.Api.Runtime` fügen Sie die Methode hinzu, um die Funktion über das Interface aufzurufen:

csharp

public string osMyFunction()
{
    return m_OSSL_Functions.osMyFunction();
}

[edit] 4. OpenSimulator neu kompilieren

Kompilieren Sie OpenSimulator neu und starten Sie den Region-Server.

[edit] 5. OSSL-Funktionen aktivieren

Stellen Sie sicher, dass in Ihrer `OpenSim.ini` die Einstellung `AllowOSFunctions = true` aktiviert ist, damit die os-Funktionen ausgeführt werden.

[edit] Verwendung der neuen OSSL-Funktion

Nach dem Neustart des Servers können Sie die neue Funktion in einem Skript verwenden:

lsl

default
{
    state_entry()
    {
        llSay(0, osMyFunction());
    }
}

[edit] Sicherheitsstufen (Threat Level)

Jede OSSL-Funktion wird einer Bedrohungsstufe zugewiesen, die bestimmt, wie sicher ihre Ausführung ist.

Diese Stufen reichen von `None` (keine Bedrohung) bis `High` (hohe Bedrohung).

Der Regionsadministrator kann die Bedrohungsstufen in der `OpenSim.ini` anpassen und einzelne Funktionen aktivieren oder deaktivieren.

[edit] 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 :-)

Personal tools
General
About This Wiki