# Änderung an der OpenSimulator Version Es gibt einige Optionen, die sich von der Vanilla Version unterscheiden. Die meisten Änderungen sind Erleichterungen. Es gibt aber auch einige neue Funktionen. In der Regel sollte keiner dieser Änderungen offensichtlich in den normalen Betrieb eingreifen. Da diese aber doch einige Eigenheiten haben die bekannt sein sollten, hier eine Übersicht in chronologischer Reihenfolge der Einführung. ### Version Name Die Software hat eine Extra Versionsnummer bekommen: OpenSim 0.9.2.0.**05** Yeti Dev Je höher um so aktueller. Dies hat nichts mit der Vanilla OpenSim Version zu tun. ### CachedMapImageModule - Speichert das Map Image im OpenSim Ortner in einem Unterordner um es während dem Regionstart nicht immer neu Generieren zu müssen. - Es wird erst nach einem Monat neu generiert. Dies spart einiges an Zeit und RAM während dem Startvorgang. - Es kann auch die Region Position und Region Namen auf das Bild schreiben. - Es gibt einige Einstellungen, um dies zu steuern. Diese müssen in den [Map] Bereich. - **enableDate** == true/false | Zeigt das Datum der Generierung an. - **enableName** == true/false | Zeigt den Namen der Region an. - **enablePosition** == true/false | Zeigt die Position im Grid auf dem MapImage an. - **RefreshEveryMonth** == true/false | Schaltet das Neugenerieren an/aus. - **enableHostedBy** == true/false | Zeigt einen weiteren Text an. - **HosterText** == ".." | Der Text der angezeigt werden soll. ### JPEG Converter Module - Dies erlaubt Texturen und Dynamisch generierte Texturen als Bild auf Websiten einzubinden. - Dynamisch generierte Texturen gehen nur auf der Region wo sie generiert wurden. - Es muss die Asset UUID benutzt werden. - Host und Port sind von der Region. - URL zu den Daten: http://os.inc.li:7000/jpeg/?assetID=1345d1d3-a717-4590-9010-2a2efef84379 ### Disable AfK Physic - Deaktiviert die Physic und alle Scripte auf der Region, wenn diese leer ist. - Löscht alle NPCs von der Region wenn kein echter Besucher mehr vorhanden ist. - Verhindert einen Großen CPU verbrauch von Regionen, die nicht in Benutzung sind. ```ini [Startup] RegionIdleMode = true IdleModeScripts = true IdleModePhysics = true ``` ### FullPerm - Setzt alle aufgestellten Objekte auf der Region auf FullPerm. - Beinflust **nicht** wie sich leute die Objekte nehmen können. Es muss weiterhin einzeln freigegeben werden ob sich leute die Objekte Kaufen oder Kopieren dürfen. - So ist es nicht mehr nötig sich Änderungsrechte oder ähnliches mit dem GodMode zu verschaffen. (Man hat eine Ausrede warum es fullPerm ist :D) - Objekte der Gruppe zu übertragen funktioniert so ohne Probleme. - Jeder mit entsprechenden Rechten in der Gruppe kann die Objekte bearbeiten. ### Copy Fix Aktuell gibt es einen Fehler in der OpenSim Software, dieser bewirgt dass neu erstellte Objekte, die auf "Jeder darf Kopieren" gestellt werden, nicht kopierbar sind. Dies ist übergangsweise gefixt bis OpenSim es richtig korregiert hat. ( http://opensimulator.org/mantis/view.php?id=8714 ) ## E-Mail Module Damit die LSL funktionen **llEMail** und **llGetNextEmail** funktionieren braucht es ein funktionierendes E-Mail Module + E-Mail Server. Das Module ist jetzt dabei und muss nur noch eingerichtet werden. Konfiguration in der OpenSim.ini: ```ini [Startup] emailmodule = MailKitMailModule [Mail] SMTP_SERVER_HOSTNAME = 127.0.0.1 SMTP_SERVER_PORT = 25 SMTP_SERVER_SSL = false SMTP_SERVER_TLS = false SMTP_SERVER_LOGIN = mail@mail.user SMTP_SERVER_PASSWORD = ... SMTP_SERVER_SENDER = domain.tld IMAP_SERVER_HOSTNAME = 127.0.0.1 IMAP_SERVER_PORT = 143 IMAP_SERVER_SSL = false IMAP_SERVER_TLS = false IMAP_SERVER_LOGIN = mail@mail.user IMAP_SERVER_PASSWORD = ... ``` #### Textur Fetcher Dies ist ein kleiner Helfer der es ermögliches soll texturen von anderen Bauwerken zu benutzen. Es nimmt alle Texturen von einem Linkset und fügt sie dem Inventar des Root Prims hinzu. Diese können dann entnommen werden um diese weiter zu benutzen. - Dies geschieht nicht wenn das Root Prim ein Script enthält welches mit Texturen aus dem Inventar arbeitet. - Mit der Option **TextureFetcherCheckAssets** wird geprüft, ob die Textur im Asset Server exestiert. Dies Verzögert den Regionsstart um mehrere Minuten. OpenSim.ini ```ini [Startup] TextureFetcherCheckAssets = false ``` ### Skript Funktionen #### DataValue Diese Funktionen ermöglicht es Daten dauerhaft zu speichern. - Dies funktioniert auf der ganzen Region und unabhängig von Objekt/Eigentümer/Script. - Um eine gewisse Datensicherheit zu ermöglichen ist es nur möglich Daten zu teilen oder zu schreiben, wenn die Objekte dieselbe Gruppe haben. (Wenn das Objekt eine andere Gruppe bekommt, sind die Daten nicht mehr verfügar!) - Der Datenbestand wird nicht auf den Speicherverbrauch des Skriptes aufgerechnet. - Ein Scriptreset hat keine Auswirkungen auf den Datenbestand. - Die Daten werden auf dem Datenträger gespeichert. (Ordner DataScriptValue) und können dort auch ausgelesen und verändert werden. - Mehrere Regionen können die Daten nutzen. - Der Ordner wo die Daten gespeichert werden, kann in der OpenSim.ini unter [XEngine] Verändert werden. - **DataValueStorageDirectory** = "C:/.." ```csharp string osGetDataValue(string key); //Gibt Daten aus dem Speicher aus. void osSetDataValue(string key, string value); //Fügt Daten in den Speicher ein. bool osCheckDataValue(string key); //Prüft ob für diesen Key Daten im Speicher verfügbar sind. void osDeleteDataValue(string key); //Löscht Daten aus dem Speicher. ``` Konfiguration in der OpenSim.ini: ```ini [XEngine] DataValueStorageDirectory = true EnabledDataStorageRateLimit = true EnabledDataStorageCompressing = true ``` ```csharp default { state_entry() { osSetDataValue("test", "es funktioniert"); } touch_start(integer i) { llOwnerSay(osGetDataValue("test")); } } ``` #### PathFinding Diese Funktionen ermöglichen es die kürzeste Route über Wegpunkte einer Region zu finden. Zusätzlich zu diesen Funktionen benötigt es noch ein Script das diese Wegpunkte einfügt. Diese können entweder mit **osSetPathPositionData** einzeln für jeden Punkt auf der Region eingegeben werden oder mit **osSetPathLineData** in Form von Verbindungen zwischen 2 Punkten erfolgen. PathFinding ist ein sehr aufwendiger vorgang und nimmt etwas Zeit in Anspruch. Deshalb arbeiten alle funktionen asynchron und geben die jeweiligen Resultate als link_message an das Script zurück. **osGetSearchableObjectList** ist ein Hilfsmittel um den Weg einfacher zu finden. Diese Funktion erwartet den namen eines Objektes und gibt eine Liste mit UUID zurück von allen Objekten auf der Region mit diesen Namen. ```csharp string osGeneratePathEnv(); void osSetPathPositionData(string envID, Vector position, bool isWalkable, bool isTarget, bool isStart); void osSetPathLineData(string envID, Vector startPosition, Vector ZielPosition, bool isWalkable); string osGeneratePath(string envID); list osGetSearchableObjectList(string query); ``` ``` key m_request_env = NULL_KEY; key m_request_path = NULL_KEY; default { touch_start(integer i) { m_request_env = osGeneratePathEnv(); } link_message(integer sender_num, integer num, string msg, key id) { if(m_request_env == id) { osSetPathPositionData((key)msg, llGetPos(), TRUE, FALSE, TRUE); osSetPathLineData((key)msg, llGetPos(), llGetPos() + <0, 5, 0>, TRUE); osSetPathPositionData((key)msg, llGetPos() + <0, 5, 0>, TRUE, TRUE, FALSE); m_request_path = osGeneratePath((key)msg); } if(m_request_path == id) { llOwnerSay(msg); } } } ```