„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. 🙂
Zuletzt war ich bei llClientView hängen geblieben als es um die LinkedPrims ging, und hier war genau die richtige Stelle um mich nach vorne zu graben. Anlass dafür, von der Entwicklung unter Linux auf Vista mit Visual cSharp umzusteigen war mal wieder ein Irrtum, ich suchte nämlich ein Modul und fand es nicht – dabei war es lediglich eine Liste. Man verliert halt doch recht schnell den Überblick bei einer vierstelligen Menge von Dateien in einem Projekt.
Zunächst galt es die Datenbanken von MySQL wieder auf SQLite umzustellen, denn für die dotnet-Umgebungen gibt es kostenlose und flotte Versionen für SQLite und beim Testen und Entwickeln versucht man sich wirklich Probleme vom Hals zu schaffen die nicht unbedingt sein müssen – und dazu gehört es definitiv sich auch noch mit der Anbindung von MySQL rumzuschlagen. Wir sind eh lokal, wir dürfen eh alles, wozu also ein ausgefeiltes Nutzerkonzept mit Grants und Logins, life ja – aber in dem Fall nicht.
Die „Solution“ OpenSim umfasst etwa 100 Projekte – interessanterweise werden es weniger mit steigender Version (die 0.7.0.2er hat nur noch gut 90), offensichtlich versuchen die Kollegen das Ding einzudampfen – hat da jemand die Übersicht verloren? 😉 Ein Scherz natürlich, wen’s betrifft.
Recht schnell fand ich dann auch meinen Irrtum heraus: Das Modul das ich gesucht hatte ist eine Liste – und sie heißt „childrenprims“ – ein sprechender Name. Und nun soll für all die Children und den einen root (oder Father oder Mother) das ausgeführt werden, was bisher nicht klappte: Verknüpfen, also Linken. Hierzu wird die Liste an einen Handler übergeben namens LinkObjects der in OpenSim.Region.Framework liegt. Das eigentliche Modul in dem die Source für LinkObjects liegt, heißt in Scenes „Scene.Inventory.cs“ und ist sogar recht übersichtlich und es gefunden zu haben freute mich. Eifrig die Traces eingebaut fürs Melden auf der Konsole um festzustellen was da wo nicht geht. Und dann war ich baff vor Staunen, da stand bei einer Prüfung:
[code lang=“c“]
if (Permissions.CanLinkObject(client.AgentId, root.ParentGroup.RootPart.UUID))
return;
[/code]
Das ist recht verständlich: Wenn die Rechte nicht stimmen zum Linken soll die Routine sich schlicht zurückmelden…. Moment: Wenn die Rechte NICHT stimmen, aber DAS steht nicht da, was fehlt ist die Negierung der Bedingung, das kann’s doch nicht gewesen sein dachte ich sofort. Also flugs geändert:
[code lang=“c“]
if (!Permissions.CanLinkObject(client.AgentId, root.ParentGroup.RootPart.UUID))
return;
[/code]
Übersetzt, gestartet und lokal getestet: Unglaublich, das war’s. Wie Roland so schön geschrieben hat: „Houston, wir haben einen Link“. Der Unterschied von der 0.6.9er und der 0.7er in diesem Fall besteht aus einem einzigen Ausrufezeichen (neben einigen Traces wie ich später sah). So einfach kann es sein Fehler zu beseitigen wenn man sich die Mühe gibt sich reinzuhängen. Ein guter Tagesabschluss!
Und ich gebe ehrlich zu, bei einer solchen Lapalie hab ich mir nicht die Mühe gemacht das Projekt auf den Server zu portieren: Sim gestoppt, Source editiert, mit nant übersetzt, Sim wieder gestartet und life getestet: Heureka, wir haben nicht nur, sondern jetzt können wir auch: Verbinden.
Und danke M$ muss ich wenn ich ehrlich bin zugeben: Ihr seid gar nicht mehr die Bösen, die Rolle hat mittlerweile jemand anderer 😉 Solution war die Lösung.
Und ich will nicht wissen, wie viele versucht haben, diese Version zu benutzen und sie aufgrund dieses Fehlers wieder verworfen haben. Egal, auf unseren Sims funktioniert jetzt das Verlinken und ich habe es schon mehr oder weniger eifrig genutzt heute. Irgendwann fiel mir sogar ein, dass ja meine Berghütte auch noch völlig unverknüpft da rumsteht; habe das dann mal schnell nachgeholt und eine Kopie ins Inventar gepackt 😉