@Michelle
Das wäre natürlich die optimale Lösung !
Aber so weit reicht mein Ehrgeiz heute nicht mehr. - Werde auch zu alt für den Sche..
Von der knapp bemessenen Freizeit mal ganz abgesehen müssten die Devs es dann auch übernehmen, sonst wäre es ziemlich sinnlos.
Hier kommt jedenfalls mein Gebastel.
Da ich kein Windows habe, kann ich mich nur auf Linux beziehen. Aber bei Windows sollte es recht ähnlich sein – hoffe ich mal ….
Zunächst braucht man die Quellen von:
http://opensimulator.org/wiki/Main_Page
Die Installation und das Compilieren ist hier beschrieben....
http://opensimulator.org/wiki/Build_Instructions
...und wo und wie man eigene Funktionen einbaut, hier:
http://opensimulator.org/wiki/OSSL
Analog zu dieser Beschreibung muss
in die Datei:
/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
dann..
...in die Datei:
/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
und letztlich..
...in die Datei:
/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
Das ganze ist keine Rundum-Sorglos-Eierlegende Wollmilchsau, sondern eher eine Basis für eigene Experimente.
Geschrieben und gelesen wird nur in einem vorgegebenen Verzeichnis. In diesem Fall /tmpMessage ,was man sich unter /bin anlegen muss. - Man kann aber natürlich auch ein beliebiges anderes Laufwerk/Verzeichnis eintragen. Als Dateinamen werden die Kanalnummern verwendet, die ich in den Funktionen auf 0- 10 begrenzt habe. Die muss man sich ggf. so hoch setzen wie man sie braucht.
Es funktioniert Regionsübergreifend, Gridweit, kann also auch zur Kommunikation zwischen einzelnen Regionen genutzt werden. Wenn es jemand auf Regionsweite beschränkt benötigt, muss noch die UUID der Region mit zum Dateinamen genommen werden. (Falls das jemand so braucht, fummel ich es gerne rein). Und als Sicherheit habe ich (erstmal) die Paranoia Stufe gewählt.
Hier kommt dann noch ein Scriptchen zum testen:
Das packt man sich in ein Objekt. Wenn man einen Satz chattet, kann man ihn mit einem Texteditor in der Datei /bin/tmpMessage/0 lesen. Wenn man einen Satz als Dateiname 1 im gleichen Verzeichnis speichert, wird dieser Inworld vom Objekt verkündet. - Ich denke einfacher geht’s nimmer...
Ein Problem, was auftauchte, wenn man eine Datei liest, die noch nicht existiert, läuft das Script auf einen Fehler. Kann man natürlich in der C# Funktion abfangen, aber wenn sie einmal angelegt ist, ist das Überprüfen überflüssig und Ressourcen verschwendend. Ich lege daher im Script erst mal und einmalig die Dateien mit Leerstring an. Danach können diese Zeilen gelöscht werden
Das wäre natürlich die optimale Lösung !

Aber so weit reicht mein Ehrgeiz heute nicht mehr. - Werde auch zu alt für den Sche..

Von der knapp bemessenen Freizeit mal ganz abgesehen müssten die Devs es dann auch übernehmen, sonst wäre es ziemlich sinnlos.
Hier kommt jedenfalls mein Gebastel.

Da ich kein Windows habe, kann ich mich nur auf Linux beziehen. Aber bei Windows sollte es recht ähnlich sein – hoffe ich mal ….

Zunächst braucht man die Quellen von:
http://opensimulator.org/wiki/Main_Page
Die Installation und das Compilieren ist hier beschrieben....
http://opensimulator.org/wiki/Build_Instructions
...und wo und wie man eigene Funktionen einbaut, hier:
http://opensimulator.org/wiki/OSSL
Analog zu dieser Beschreibung muss
Code:
string osMessageRead (int kanal);
int osMessageWrite (int kanal,string message);
/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
dann..
Code:
public string osMessageRead(int kanal)
{
return m_OSSL_Functions.osMessageRead(kanal);
}
public int osMessageWrite(int kanal,string message)
{
return m_OSSL_Functions.osMessageWrite(kanal,message);
}
/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
und letztlich..
Code:
public string osMessageRead (int kanal)
{
CheckThreatLevel(ThreatLevel.VeryHigh, "osMessageRead");
m_host.AddScriptLPS(1);
string verzeichnis ="./tmpMessage/"; // /bin/tmpMessage
int maxmessage = 10; // Maximale Datei-/Kanalnummer
if (kanal < 0 || kanal > maxmessage)
{
return "";
}
string theXFiles =verzeichnis+kanal.ToString();
StreamReader file = File.OpenText(theXFiles);
string s = file.ReadToEnd();
file.Close();
StreamWriter writer = new StreamWriter(theXFiles);
writer.Write("");
writer.Close();
return s;
}
public int osMessageWrite (int kanal,string message)
{
CheckThreatLevel(ThreatLevel.VeryHigh, "osMessageWrite");
m_host.AddScriptLPS(1);
string verzeichnis ="./tmpMessage/"; // /bin/tmpMessage
int maxmessage = 10; // Maximale Datei-/Kanalnummer
if (kanal < 0 || kanal > maxmessage)
{
return -1;
}
string theXFiles =verzeichnis+kanal.ToString();
StreamWriter writer = new StreamWriter(theXFiles);
writer.Write(message);
writer.Close();
return 0;
}
/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
Das ganze ist keine Rundum-Sorglos-Eierlegende Wollmilchsau, sondern eher eine Basis für eigene Experimente.
Geschrieben und gelesen wird nur in einem vorgegebenen Verzeichnis. In diesem Fall /tmpMessage ,was man sich unter /bin anlegen muss. - Man kann aber natürlich auch ein beliebiges anderes Laufwerk/Verzeichnis eintragen. Als Dateinamen werden die Kanalnummern verwendet, die ich in den Funktionen auf 0- 10 begrenzt habe. Die muss man sich ggf. so hoch setzen wie man sie braucht.
Es funktioniert Regionsübergreifend, Gridweit, kann also auch zur Kommunikation zwischen einzelnen Regionen genutzt werden. Wenn es jemand auf Regionsweite beschränkt benötigt, muss noch die UUID der Region mit zum Dateinamen genommen werden. (Falls das jemand so braucht, fummel ich es gerne rein). Und als Sicherheit habe ich (erstmal) die Paranoia Stufe gewählt.

Hier kommt dann noch ein Scriptchen zum testen:
Code:
default
{
state_entry()
{
//***************************************************************
// Nur einmalig, damit die Dateien zum Auslesen vorhanden sind
integer a;
for(;a < 11; ++a) osMessageWrite(a,"");
//***************************************************************
llListen (0,"",NULL_KEY,"");
llSetTimerEvent(0.5);
}
listen(integer channel, string name, key id, string message)
{
osMessageWrite(0,message);
}
timer()
{
string message = osMessageRead(1);
if (message != "")
{
llSay(0, message);
}
}
}
Das packt man sich in ein Objekt. Wenn man einen Satz chattet, kann man ihn mit einem Texteditor in der Datei /bin/tmpMessage/0 lesen. Wenn man einen Satz als Dateiname 1 im gleichen Verzeichnis speichert, wird dieser Inworld vom Objekt verkündet. - Ich denke einfacher geht’s nimmer...

Ein Problem, was auftauchte, wenn man eine Datei liest, die noch nicht existiert, läuft das Script auf einen Fehler. Kann man natürlich in der C# Funktion abfangen, aber wenn sie einmal angelegt ist, ist das Überprüfen überflüssig und Ressourcen verschwendend. Ich lege daher im Script erst mal und einmalig die Dateien mit Leerstring an. Danach können diese Zeilen gelöscht werden
Degolburg:
24h online und ca. 10 % fertig
Taxi: 85.214.150.139:9000:Degolburg
24h online und ca. 10 % fertig
Taxi: 85.214.150.139:9000:Degolburg