„Solution“ nennt Microsoft bei ihren IDEs (Integrated Development Environment) – und davon gibt es schon bei den VisualStudio-Express-Varianten vier Stück (Basic, C++, C# und das andere hab ich grad vergessen) – eine Sammlung von Projekten unter einem Dach. Es gibt also, anders als bei anderen Entwicklungsumgebungen noch etwas über dem „Projekt“, und bei den OpenSim-Entwicklungen wurde das hinreichend genutzt. Das Programm eignet sich sicherlich recht gut für Teamarbeiten. Eine gute Sache, dass M$ diese Express-Version kostenlos zur Verfügung stellt für private Nutzungen, so kann man reinschnuppern und erste Gehversuche damit machen. Tja, wäre es so leicht für iPhone Apps zu entwickeln … aber das ist eine andere Geschichte. 🙂 Solution – was für ein treffender Name weiterlesen
Schlagwort: LinkedPrims
„Houston, wir haben einen linked Prim!“
Genau, das Problem ist gelöst; letztendlich lag es an einem kleinen Ausrufezeichen. Danke an Bert! „Wir sind der Meinung, das war: Spitze!“ 😀
Im Linden-Dschungel Teil 2
Immer noch geht es um die Linked Prims, aber möglicherweise fangen wir gerade erst an, wollen also nicht so lamentieren zu Beginn ;).
Um das Logging zum Einsatz zu bringen waren noch zwei Includes (using bei c#) notwendig und das Anlegen einer statischen Variable. Erstes Modul auf das ich mich stürze ist MySQLRegionData.cs in Region/Framework/Scenes. Kein Erfolg ist feststellbar dass das Loggen irgendein hilfreiches Protokoll bringt. Die else-Zweige bei der Prozedur StoreObject die beschritten werden wenn kein „persistent“ gegeben ist das zum Speichern führen soll werden entkommentiert und mit Leben gefüllt, aber nichts zu bemerken. Es kommen aber schon interessante Erkenntnisse darüber was da wann geschieht, der eine else-Zweig dient nämlich dazu im Modus „selected“ noch nicht zu speichern, klingt vernünftig. Auch Anpassungen im neuen MySQLLegacyRegionData.cs – das in der 0.6.6er noch gar nicht vorhanden war – bringen nichts.
Der nächste Bereich ist, dass ständig – und zwar im 20-Sekunden-Abstand – von diesem Modul versucht wird auf Speicherfähigkeit zu prüfen, ehrlich gesagt halte ich die Last die hier erzeugt wird für ziemlich schlecht. Man merkt das ja gar nicht da im else-Zweig keine Ausgabe erfolgt, mit den debugging-Infos kommt alle paar Sekunden – und das schon für nur 3 Prims „did not update persistance“. Der interessante Punkt ist der, dass nur gespeichert wird wenn „HasGroupChanged“ wahr ist. Ich suche eine Art „HasPositionChanged“ das aber nicht aufzutreiben ist.
In der 0.6.9er wird das in Vorgängerversionen verwendete Setzen von HasGroupChanged an etlichen Stellen auskommentiert. Da mir das verdächtig erscheint nehme ich es mal wieder rein, jedoch ohne dass dies Auswirkungen auf das Speichern von Links hätte.
Nach einigen Tests bekomme ich schließlich eine Erleuchtung: Wir suchen ja einen Trigger der ausgelöst wird noch bevor überhaupt in den Speicherbereich eingestiegen wird, denn selbst VOR dem Speichern müsste ein Wechsel vom Fokus beim Select ja schon das Erhaltenbleiben des Links signalisieren, was definitiv nicht geschieht. Bisher also die komplett falsche Baustelle – die aber einige nette Erkenntnisse gebracht hat die wir sicherlich irgendwann gebrauchen können 😉
Mit vollständig neuer Herangehensweise steige ich in den ClientStack ein, nach einiger Suche werde ich fündig: Es gibt einen LinkHandler neben etlichen anderen – nämlich für all das was im Client ausgelöst werden soll – in LLClientView.cs im Bereich Region/ClientStack/LindenUDP. Und Heureka: Dort ein Logging eingebaut bringt sofort nach dem versuchten Linken eine Protokoll-Meldung auf der Konsole: Ich habe soeben den Hebel an der richtigen Stelle angesetzt.
erste Annäherung
Nun, es gilt eine Aufgabe zu bewältigen, und diese heißt: Verlinken soll funktionieren. Wesentlich – wie immer im Bereich des (manchmal lästigen ;)) Reverse-Engineerings – ist, dass man langsam genug voranschreitet um einzelne Effekte auch klar einer bestimmten Ursache zuzuordnen.
Erste Aktion war, die mit dem Fehler behaftete Version standalone zum Laufen zu bringen. Das ist soweit geglückt, es sind einige Parameter in der OpenSim.ini und eine Standalone-Common.ini im config-include Bereich zu bestücken. Aktuelle Version an der ich bastele ist ja die 0.6.9er. Der standalone-Test ergibt – und in diesem Fall glücklicherweise – dass der Fehler auch dort auftritt. Das ist beruhigend, somit liegt es an der Grundversion und nicht an der falschen Implementierung ins Grid.
erste Annäherung weiterlesen
Basteln, basteln, basteln
Nun, es wird allmählich etwas belebt auf meinem Stück Land mit Namen ‚Vanaltens Restplace‘. Diese Parzelle erstreckt sich ja hier – anders als in unterteilten Regionen üblich – auf die gesamte Region ‚Vanalten‘. Erste Bäume hab ich heute ‚gepflanzt‘ und zwei Treppen an das Grundgerüst vom Haus angeflanscht. Ich mag diese Technik mit den cut-path-Zylindern die dann einen angenehmen Zugang ermöglichen aus jeder Richtung. Bin ja nicht so der Typ der Enge mag wie bekannt 😉
Apropos Bäume, wenn wir das Problem mit den Links in den Griff bekommen haben – das hat zunächst Priorität – dann möchte ich auch gerne die geliebten Copses wieder implementieren, so nenn ich sie immer: Es handelt sich um selbst wachsende und sich vermehrende Bäume, ein nettes Feature. Man sollte allerdings darauf achten das Ganze etwas zu begrenzen, sonst hat man schnell ein nahezu undurchdringliches Dickicht (gut, es ist alles phantom, insofern ^^). Diese sich selbst fortpflanzenden Teile sind tatsächlich nett, denn es kehrt etwas virtuelles Leben ein und die Situation die man vorfindet ist nicht immer dieselbe. Es kann sehr erstaunlich sein was es bedeutet wenn manchmal 100 unerwartete Bäume irgendwo rumstehen, ganz abgesehen davon dass man auch unter Umständen damit konfrontiert wird zumindest temporär im Wohnzimmer die Äste einer Eiche durch die Wände kommen zu sehen.
Die Geschichte mit den linked-Prims ist wirklich lästig, nun ich hab das Verzeichnis mal kopiert und eingefroren, werde übersichtliche Versionen der Config-Files erzeugen und dann in einen exakten Vergleich einsteigen um festzustellen, was da jetzt so anders ist im Vergleich zu unserer sauberen 0.6.6er (die übrigens immer noch stabil läuft, siehe hier). Im Moment müssen wir halt zur Not auf die Sandbox ausweichen, denn wie Roland mir erzählt hat klappt das Übertragen dort verlinkter Objekte zu unseren Regionen einwandfrei und der Verbund bleibt auch erhalten.