1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Bitte schaltet eure Ad Blocker aus. SLinfo kann nur betrieben werden, wenn es durch Werbung Einnahmen erzielt. Vielen Dank!!
    Information ausblenden
  3. Wir freuen uns, wenn du dich in unserem Forum anmeldest. Bitte beachte, dass die Freigabe per Hand durchgeführt wird (Schutz vor Spammer). Damit kann die Freigabe bis zu 24 Stunden dauern.
    Information ausblenden

Anpassung von llPushObject auf versch. Entfernungen: Wie

Dieses Thema im Forum "Fragen zu Scripting" wurde erstellt von argus Portal, 3. Juni 2014.

  1. argus Portal

    argus Portal Freund/in des Forums

    Beiträge:
    875
    Zustimmungen:
    5
    Punkte für Erfolge:
    18
    Hallo

    Gibt es eine Formel, nach welcher ich einen Avatar entfernungsunabhängig mit immer deselben Kraft pushen kann ? Oder ist man auf Experimente angewiesen ?

    Beim aktuellen Projekt beträgt die maximale Distanz rund 80 Meter. Gibt es eine Grenze, ab der weitere Erhöhungen der Kraft nichts bringen ?

    Nur zur Info, falls Zweifel aufkommen ;-) : Ich scripte prinzipiell nichts, das zum Griefen taugt. Hier geht es um eine Art "Aufsteh-Technik" für Bänke in einer Parkanlage. Im OpenSim ist das Aufstehen manchmal leider ein Problem. Seit dem letzten Update landet der Avatar z.b. im Boden usw.; jenachdem, wo sich die Sitzgelegenheit befindet.

    Die Anlage will ich mit einem einzigen Script steuern und zudem will ich unabhängig von der Position des root-prims sein. Daher wäre eine Formel sehr nützlich.
     
  2. Dianna Loxely

    Dianna Loxely Superstar

    Beiträge:
    1.625
    Zustimmungen:
    2
    Punkte für Erfolge:
    0
    hmm keiner? umkuck
    also dann mal meine Erfahrungen und Beobachtung mit push.

    Da hätten wir zuerst das Problem, das kleine nahezu masselose Objekte (llGetMass()) sogut wie keine Energie haben, überhaupt einen Push auszuführen,
    alle anderen verlieren mit jedem Treffer Energie.
    Das zu Berechnen und schlimmer noch, angepasst Auszugleichen, übersteigt mein Verständnis von HAVOK.

    Ich behelfe mir bei meinem Schubse-Hausbewacherorb mit gigantischen 5 stelligen Impulsfaktoren auf llgetMass().
    Die sind dann einfach gross genug, um den Eindringling mal eben 20 Meter duch die Gegend zu schleudern
    oder wenn er Pech hat knallt er gegen die Wand, was bei aktivem Health (das Herz oben) ziemlich schnell sein Avatarlebenslicht ausbläst.
     
  3. argus Portal

    argus Portal Freund/in des Forums

    Beiträge:
    875
    Zustimmungen:
    5
    Punkte für Erfolge:
    18
    Das hilft hier leider nicht. Hier geht es darum, einem Avatar, der von einer Bank aufsteht, einen Push zu versetzen, so das er nicht im Boden verschwindet, oder sonstwie auf Abwege gerät. Daher muss die Kraft dosiert werden. Bei Root muss sie eben am geringsten und bei der weitentferntesten Bank am grössten sein.

    Leider finde ich bislang keine Möglichkeit, in einem Objekt festzustellen, ob, und wenn ja wie stark, es von einem anderen Script gepusht wurde. Wäre dies möglich, könnte ich die Formel sozusagen automatisch ermitteln lassen.

    Bleibt also ggf. nur das manuell durchgeführte Experiment.
     
  4. Mareta Dagostino

    Mareta Dagostino Superstar

    Beiträge:
    1.315
    Zustimmungen:
    99
    Punkte für Erfolge:
    49
    Wenn der Avatar auf der Bank sitzt, die von deinem Script kontrolliert wird, kann er beim "un-sit" an eine beliebige Position im Radius 10 m verschoben werden. Also einfach in der vom Event angetriggerten Routine erst den Avatar verschieben, und danach das Aufstehen triggern.

    EDIT: Der Avatar kann sogar gedreht oder sonstwie ausgerichtet werden, ganz ohne Push und ohne Physik.
     
    Zuletzt bearbeitet: 4. Juni 2014
  5. argus Portal

    argus Portal Freund/in des Forums

    Beiträge:
    875
    Zustimmungen:
    5
    Punkte für Erfolge:
    18
    Ich überlasse es dem User, aufzustehen. llUnsit wird also nicht aufgerufen. Klickt der sitzende User auf "Aufstehen" (Viewer-Schalter) dann findet eine unkontrollierte Bewegung des Avatars statt. Wie gesagt: Seit dem letzten Update in OpenSim funktionieren daher einige Sitzgelegenheiten nicht mehr sauber. Bei anderen lässt sich kein Unterschied feststellen. Eine Bank auf Terrain zum Beispiel macht kaum Probleme. Eine Bank auf einem Prim (Hausdach usw.) hingegen schon.

    Meine Technik (Ich fange auch Seitwärtsbewegungen ab) funktioniert tadellos. Bis eben auf das Problem bei Sitzgelegenheiten, die weiter weg sind.

    Es scheint, das es keine optimale Lösung gibt. Also bleiben wohl nur Experimente. Und notfalls muss ich die "Bank-Anlage" in mehrere Bereiche aufteilen, so das der Push-Bereich weitgehend einheitlich um Root angeordnet ist. Das wäre aber eine Notlösung.
     
  6. Dianna Loxely

    Dianna Loxely Superstar

    Beiträge:
    1.625
    Zustimmungen:
    2
    Punkte für Erfolge:
    0
    Ah ok, Aufstehn vom Sitzen also, damit kann ich schon etwas mehr anfangen.
    Menübasiertes Aufstehn mache ich auch wie Mareta beschrieb, solange der Avatar Teil des Linksets ist in eine nicht "verhakende" Position schieben und dann Unsitten.

    Aber du willst manuelles Aufstehn abfangen.
    Wir haben da zwar ein Event, was die Sache triggern kann (CHANGED_LINK) aber wir haben den Avatar nicht mehr im Linkset.

    Hier mal nur ein paar Gedanken, die noch recht unausgegoren sind:
    Beim Hinsitzen TakeControls auszuführen und damit dann irgendwas Anstellen vorm ReleaseControls?
    Oder das Sittarget für einige Sekunden entfernen?
    Oder die Bank für einen Moment physikalisch stellen?
    Oder die Boundingbox der Bank vergrössern, was den Avatar Abstossen müsste?
    Alternativ ein unsichtbares Prim "wachsen" lassen mit dem selben Effekt?
    Letzteres wäre Schubsen ganz ohne Push
     
  7. argus Portal

    argus Portal Freund/in des Forums

    Beiträge:
    875
    Zustimmungen:
    5
    Punkte für Erfolge:
    18
    Das Problem ist, das es zeitkritisch ist. Der Avatar wird vom System (also nicht von meinem Script) abgesetzt. Die UUIDs der sitzenden Avatare sind gespeichert: Steht jemand auf, lässt sich die entspr. UUID leicht ermitteln. Dem Avatar gebe ich dann den Push. Zusätzlich rezze ich einen hohlen Würfel um ihn herum um Seitwärtbewegungen abzufangen. Das ist so zeitkritisch, das ich dem gerezzten Objekt seine Ziel-Position (sofern es mehr als 10 Mether Distanz sind) nicht wie üblich über Chat hinterhersende, sondern ich packe die Koordinaten in den Integer, den man dem gerezzten Objekt mitgeben kann. Diese Berechnung ist schnell genug um den Vorgang nicht zu stören. Aber viel mehr "Aufwand" ist meiner Ansicht nach nicht möglich. Der User soll nichts von alledem mitbekommen. Er seht auf und gut ist.

    Der "Fangkäfig" landet nahezu ohne Zeitverzögerung am Ziel. Das einzige Problem ist eben die Dosierung der Pushstärke.

    Ich versuche gar nicht erst, den Fangkäfig mit einem Sensor auszustatten, um den Avatar zu ermitteln und den Push dann selbst vorzunehmen. Selbst wenn es meist kein Timingproblem gäbe, wäre es nicht verlässlich. Bei Lag würde die Methode versagen.
     
  8. Dianna Loxely

    Dianna Loxely Superstar

    Beiträge:
    1.625
    Zustimmungen:
    2
    Punkte für Erfolge:
    0
    umschliesender (unsichtbarer) Käfig ist sogar noch besser als meine Gedanken.
    Rezzen (dauert imemrhin mindestens 0.2 Sekunden und ist auch lagkritisch) - wie wäre es, stattdessen ein bereits gelinktes, aber mit minimaler Ausdehnung "geparktes Spezialprim" in Form und Lage zu bringen? Das dürfte dann wirklich im nichtmehr messbaren Millisekundenbereich liegen.

    Und anschliessend, egal ob gerezzt oder "gewachsen" das Objekt verschieben, ganz simple mit dem llSet(Region)Pos-Befehl?
    Spart dir auch die ganze Physikrechnerei und Trigonometrie mit normalisierten Richtungsvektoren und lauter solchem Gedöns, wo einem der Kopf platzt.
     
  9. argus Portal

    argus Portal Freund/in des Forums

    Beiträge:
    875
    Zustimmungen:
    5
    Punkte für Erfolge:
    18
    Prinzipiell ist ein bereits gerezztes Objekt eine gute Idee. Im konkreten Fall hilft mir das aus 2 Gründen nicht:

    1. Wie gesagt, es gibt beim Fangkäfig kein Zeitproblem. Er ist zum richtigen Zeitpunkt am Ziel.

    2. Der Grund, warum ich überhaupt so viel 1-Scriptlösungen wie möglich anstrebe ist der, das ich meine Regionen auf dem
    eigenen Rechner betreibe. Da zählt wirklich jedes einzelne Script. Eine meiner Regionen hatte meinen alten PC stark ausgelastet. Es wurde besser, als ich dann Scripte duch Lösungen wie diese hier einsparte.

    Im Objekt, das irgendwo wartet, muss ein Script laufen, das dann auch noch auf einem Kanal lauschen muss.

    Das alles ist nichts dramatisches :) Aber es ist eine techn. interessante Herausforderung.
     
    Zuletzt bearbeitet: 5. Juni 2014