Frage: UUIDs aller Objekte bekommen?

Kxirya Weytana
Kxirya Weytana
 Member in Create & Objects
Hiho,

Gibt es eine adäquate Möglichkeit, PER SCRIPT (!) an die UUIDs aller auf einer Region aufgestellten Objekte zu kommen?
Es reicht, die UUIDs aller Rootprims zu bekommen.
Grundsätzlich würden mir schon die UUIDs aller Objekte mit bestimmten Namen ausreichen. Ich möchte nur möglichst lagfrei arbeiten und auf Listener, Scanner, etc. verzichten.

Ich versuche gerade etwas zum Thema Kampf- und Sammelsystem auszuklügeln und dafür wäre das sehr hilfreich.

Danke im Voraus,

Kxìrya te Weytana Nllteya'ite 

Comments

  • Data Rossini
    Data Rossini
     Member
    Hallo Kxira,
    vielleicht helfen Dir die oar-Dateien weiter. Nach dem man eine Sicherung macht. In der Datei, sind ziemlich am Anfang die Objekte der betreffenden Sim aufgeführt (Objektnamens, Position, UUID).

    LG
  • Kxirya Weytana
    Kxirya Weytana
     Member
    Ich denke nicht wirklich, denn ich möchte das ja In-World per Script abfragen.
    Ich habe z.B. Objekte, die "Feuerholz" heißen, welche man sammeln kann. Genau deren UUIDs mööchte ich gerne simweit einsammeln. Per Scanner geht es nicht, da es 1) mehr als 16 Objekte sind und 2) Sind die über mehr als 96m verteilt.
  • Mareta Dagostino
    Mareta Dagostino
     Member edited May 7
    Hallo Kxira,

    wenn es um spezielle Objekte geht, könnten die ein Script bekommen, das mit llGetPos( ) die eigene Position bestimmt und z.B. bei Positionsänderung oder zyklisch alle 5 Min. an eine Zentrale meldet. Wenn es besonders lag-arm sein soll, ist die Zentrale vielleicht ein Programm außerhalb von OpenSim (llHTTPRequest), was auch die sonstige Logik des Kampfsystems enthalten könnte.

    Liebe Grüße, Mareta

    Thanked by: Pius Noel
  • clemens_crispien
    clemens_crispien
     Member
    Sowas habe ich vor einigen Wochen mal angefangen zu bauen. Es sind Lootboxen bzw. Spawnpoints (Bitte nicht vom Namen abschrecken lassen) die verschiedene Objekte spawnen können. Alle X Minuten (Ich glaube es sind im Moment alle 15 Minuten) prüft der Spawnpoint (was an sich nur ein Phantom Objekt ist) ob sie noch bestückt ist, wenn nicht wird ein neues Objekt gespawn. Alle Objekte die gespawnt werden sollen, müssen im Spawpoint Inventar vorliegen. Eventuell geht das auch anders. Endweder gibt man dem Objekt ein bestimmtest Objekt als default Wert oder man lässt den Zufall entscheiden was es wird.

    Klickt ein Avatar auf das Loot (im meinem Fall ist es noch ein Platzhalter, eine Milchpackung) wird in einer Datenbank ein Eintrag für den Nutzer angelegt und gespeichert, dass der Avatar der momentane Bestizter dieses Objektes ist und es verschwindet von dem Spawnpoint. Ich wollte das Inventar als HUD realisieren, daher wandert das Loot nach dem Klick nicht in das OS Inventar des Avatares. Wobei das nur eine kleine Anpassung im Script wäre.

    Es ist noch ziemlich am Anfang, funktioniert soweit aber. Ich kann so in einem Webinterface die Spawnpoints pro Region aufrufen wo ich auf einer Karte die Positionen der Spawnpoints sehe und ihren momentanen Status (leer oder besetzt). Dazu kann ich mir das Inventar aller Nutzer anschauen, die aktuell ein Objekt im Inventar haben.

    Das ganze läuft sein ca. 2 Monaten auf meiner Metro Region. >> Opensimulator_Earth << Stabil, keine Probleme. Du kannst dir das ja gerne mal anschauen vielleicht geht das in die Richtung wie du es brauchst. Werde das die Tage mal weiterentwickeln. Wollte es eh frei stellen am Ende, bzw. eine .oar Datei machen in der man es als fertige Version dann hat und daran rumspielen kann. So kann man es immer wieder zurücksetzten wenn man etwas kaputt macht. <span>:smile:</span>  Ich habe versucht das PHP sehr einfach zu halten, damit es leichter verständlich ist. Bei den OpenSim Scripten bin ich mir noch nicht sicher. Scripte hier noch nicht so lange um zu beurteilen ob das so gut ist. <span>:smile:</span>

    Ich kann dir gerne mal die Links zur Webansicht geben, müsste da aber nochmal aufräumen bevor ich sie hier Poste, daher erstmal als IM. Vieleicht kann man sich ja gegenseitig austauschen was in so ein System hinein gehören sollte oder vieleicht hast du ja einen viel besseren Ansatz für ein Sammelsystem.

    LG Clemens

    Thanked by: Pius Noel
  • Kxirya Weytana
    Kxirya Weytana
     Member
    Huiii! DAS klingt interessant.
    Du kannst mir die Links gerne mal schicken.

    Bei meinem Sammalsystem geht es darum, dass ich z.B. Feuerholz (Beeren, Früchte, etc.) auf der SIM verteile. Das sind eben entsprechende Prims, die die Spieler anklicken (= sammeln) können und die dann für einen bestimmten Zeitraum von der Region verschwinden (llSetAlpha) und inaktiv werden.
    Trägt der Spieler einen Korb, wird das Sammelgut in diesen eingeladen und kann an einer (oder mehreren) Sammelstellen abgeladen werden.
    Außerdem ist es schon möglich, z.B. von Sammelstelle A 5 Teile wegzunehmen (in den Korb), diese zu Sammelstelle B zu tragen und dort abzuladen (also umzuladen).

    Das System an sich funktioniert prima, verursacht KEINE Lags, hat dafür aber eine kleine Schwachstelle:
    Alle Objekte kommunizieren per "OsMessageObject", bzw. "osMessageAttachments", um unnötige Listener zu vermeinden.

    Und genau dort liegt die Schwierigkeit:
    Lade ich z.B. eine OAR hoch, ändern sich alle UUIDs.
    Dadurch können die Scripte nicht mehr miteinander kommunizieren.
    Da beim SIM Start nicht alle Scripte grundsätzlich in der selben Reihenfolge gestartet werden, kann ich auch nicht einen Listener aufbauen, dem alle involvierten Objekte dann (im change => REGION_RESTART Event) per "llRegionSay" ihre UUID mitteilen, denn ich weiß ja nicht, ob der Listener VOR dem Absenden der Meldungen bereits aktiv ist.

    Daher war meine Idee, dass ich EIN Script baue, das alle Objekte der Region auf bestimmte Namen (z.B. FEUERHOLZ, etc.) prüft und bei Übereinstimmungen die UUIDs dieser Prims speichert. So wären jegliche Scanner (die zudem eh nur max. 96m Reichweite haben), Listener, etc. überflüssig, was sich positiv auf  die Performance auswirkt.

    Das selbe Problem habe ich bei einer anderen Sache, die ich am letzten WE realisiert habe, bekommen.
    Ich habe ein System programmiert, bei dem die Spieler Bildschirme (Terminals) haben, in denen sie persönliche Nachrichten und sogar Bilder ablegen und diese später wieder abrufen können. Diese Nachrichten/Bilder werden in einem zentralen "Server-Prim" gespeichert und stehen somit dann allen angeschlossenen Monitoren sofort zur Verfügung.

    So lange die Region läuft, klappt das prima, ändert sich aber EINE UUID,  kann es sein, dass ich alle betroffenen Scripte ändern und ihnen die geänderte(n) UUID(s) mitteilen muss.
    Bei 60k Prims auf der Region KANN so etwas mühselig UND auch fehlerhaft werden, da man ja nicht immer die Standorte aller Objekte im Kopf haben kann.

    Na vielleicht kommt ja mal ein OS Befehl wie etwa "osGetObjectList" oder so etwas, denn machbar wäre das ja - theoretisch.

    Kxìrya te Wetana Nllteya'ite
Sign In or Register to comment.

Welcome

It looks like you're new here. If you want to get involved, click one of these buttons!

Discussions

© Copyright 2017 - Metropolis Metaversum
All times are GMT