• Bitte schaltet eure Ad Blocker aus. SLinfo kann nur betrieben werden, wenn es durch Werbung Einnahmen erzielt. Vielen Dank!!
  • 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.
  • Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und die Zugriffe auf unsere Website zu analysieren. Sie geben Einwilligung zu unseren Cookies, wenn Sie unsere Webseite weiterhin nutzen.

Auto Attach temp

Jojo1905 Guardian

Aktiver Nutzer
Huhu hab mal ne frage zu dem Script aus der Wiki

ich möchte das etwas angelegt wird aus dem inhalt eines Objektes sobald ich mich hinsetze
und abgelegt wird sobald ich aufstehe, ist das damit möglich? Wenn ja wie?

Jojo
 
Das geht nur mit RLV und Relay das auf Automatisch steht aber nicht anlegen sondern an die Position wo es sein soll hinrezzen geht.
Habe mich mal auf einen Schaukelstuhl gesetzt und war dann mit einer Decke Zugedeckt - war gemütlich.
 
]also gehts nur über nen giver und nen Auto Attach?

sollte eigentlich nicht:
Code:
default
{
    touch_start(integer num_touches)
    {
        llRequestPermissions( llDetectedKey(0), PERMISSION_ATTACH );
    }
 
    run_time_permissions( integer vBitPermissions )
    {
        if( vBitPermissions & PERMISSION_ATTACH )
        {
            llAttachToAvatarTemp( ATTACH_LHAND );
        }
        else
        {
            llOwnerSay( "Permission to attach denied" );
        }
    }
 
    on_rez(integer rez)
    {
        if(!llGetAttached())
        { //reset the script if it's not attached.
            llResetScript();
        }
    }
}
 
Zuletzt bearbeitet:
Das geht schon mit llAtatchToAvatarTemp, wenn das Objekt rezzen darf. Das funktioniert dann im Grunde genau wie mit llAttachToAvatar bisher auch schon.

Mit einem changed-Event kannst du über CHANGED_LINK herausbekommen, ob sich wer auf den Schaukelstuhl o.Ä. setzt. Dann muss der ein Objekt rezzen, das sich über llAttachToAvatarTemp an den Ava hängt.

Steht der Avatar wieder auf, dann kann man das ebenfalls über changed/CHANGED_LINK im Schaukelstuhl bemerken, der Stuhl sendet eine Nachricht an das Attachment, das sich über llDetachFromAvatar selbst ablegt.

Früher hatte man dann das Teil im Inventory liegen, mit dem neuen llAttachToAvatarTemp taucht das gar nicht mehr im Inventory auf, so dass man nichts aufräumen muss.
 
nee brauch bei dem Temp nicht da es nicht in deinen Besitz übergeht, d.h. auch nicht in deinem Inventar auftaucht

also wenn ich sitze wird es schonmal gerezzt aber noch nicht attacht, das is immer noch auf klick, kann ich das so machen das es dann automatisch die frage der permissions abfragt ohne klick, also nurnoch bestätigen muss?
und wie verschwindet das wieder wenn ich aufstehe? *grummel

jojo
 
Zuletzt bearbeitet:
Das Problem ist, dass du wissen musst, wen du fragen musst. Beim touch-Event ist das einfach, das geht da per llDetectedKey(0), was aber im z.B. im on_rez Event nicht funktioniert.
Den Ava Key heraus bekommen geht aber über den Stuhl, da muss man mit llSitTarget die Sitzposition des Avatars festlegen (sonst funktioniert das Erkennen nicht) und kann dann per llAvatarOnsitTarget den Key des Avatars herausfinden. Leider kann man Keys nicht zu integer umwandeln weil die Zahl zu groß wäre, also kann man den Key beim Rezzen nicht mitgeben als Parameter.

Allerdings kann das gerezzte Objekt direkt beim Rezzen über den on_rez Event ein "ping" an den Stuhl senden, welcher somit merkt, dass ein Objekt bereit ist und dann mit einem "pong, hier ist der Key" antwortet. Und wenn das gerezzte Objekt dann das "pong" vom Stuhl hört und den Key hat, dann kann es sich direkt die Permissions holen von dem, der im Stuhl sitzt.

Beim Aufstehen kann da der Stuhl ja bemerken, dass sich die Links geändert haben und hier muss einfach eine Nachricht an das getragene Objekt gesendet werden wie "Avatar ist aufgestanden - bitte detach dich". Und wenn das Objekt, dass hört, dann wird ein llDetachFromAvatar ausführt.

So ungefähr funktionieren z.B. HUDs bisher, wenn die sich attachen sollen.
 
da das Sit Script leider no Mod ist hab ich nen kleines zusatz Script:

Code:
string inventory;
string object;

default
{
    link_message(integer sender, integer num, string msg, key id)
   {
        if(num==90060)
       {
        object=llGetInventoryName(INVENTORY_OBJECT,0); 
        llRezObject(object, llGetPos() + <0.0, 0.0, 0.2>, ZERO_VECTOR, <1.0, 0.0, 0.0, 1.0>, 0);
        }
        else if(num==90065)
       {
        llInstantMessage(id,"Goodbye!");
        }
    }
}

die 90060 ist beim hinsetzen und die 90065 beim aufstehen, nu muss ich nurnoch hinbekommen das das Attachte Dingen darauf hört.....
else if(num==90065) ......

die frage meinerseits ist auch das dingen verschwinden zu lassen wenn man aufsteht, ob es nu attacht ist oder nur gerezzt
also wird immer komplizierter das ganze *Haare rauf* :confused:

jojo
 
Zuletzt bearbeitet:
ach ja, das Script in dem Attachten teil sieht so aus:

Code:
default
{
    touch_start(integer num_touches)
    {
        llRequestPermissions( llDetectedKey(0), PERMISSION_ATTACH );
    }
 
    run_time_permissions( integer vBitPermissions )
    {
        if( vBitPermissions & PERMISSION_ATTACH )
        {
            llAttachToAvatarTemp( ATTACH_RHAND );
        }
        else
        {
            llOwnerSay( "Permission to attach denied" );
        }
    }
 
    on_rez(integer rez)
    {
        if(!llGetAttached())
        { //reset the script if it's not attached.
            llResetScript();
        }
    }

}
 
also nochmal, das dingen ist nicht einfach und Dae hat wegen zeitmangel aufgegeben *fg Zeitmangel is gut
nein sie hat mir schon super geholfen, aber irgenswie klappt es immer noch nicht,
wenn dannja, dann auch nicht ava1 ja, der 2. wieder nicht, neu rezzen lappt einmal....

HELP!

Jojo
 
Zeitmangel ist gut, ich musste OFF.
Jedenfalls haben wir einiges herum probiert, was vom Logischen Standpunkt auch funktionieren sollte.
Mich wundert nur das es halt nur beim owner funktioniert.
Allerdings wuerde mich nicht wundern, das der llDetachFromAvatar in einem AttachTemp Objet nicht bei Fremden funktioniert, wenn Linden Lab genau da einen Riegel vor geschoben hat, eben damit man fremden nicht per Script die Attachments ausziehen kann.

Weiterhin bin ich auf ein anderes Problem gestossen.
Jedesmal wenn Jojo mir das Object schickte, konnte ich es zwar rezzen und per touch attachen, jedoch konnte ich niemals auch nur ein Object taken oder ins Inventar kopieren, sobald sich ein Script mit dieser Funktion darin befindet.
Somit blieb mir nichts anderes uebrig, als jedes mal das Script im Inventar zu schreiben und Jojo zu schicken.

LG
Dae
 
Allerdings wuerde mich nicht wundern, das der llDetachFromAvatar in einem AttachTemp Objet nicht bei Fremden funktioniert, wenn Linden Lab genau da einen Riegel vor geschoben hat, eben damit man fremden nicht per Script die Attachments ausziehen kann.

na das wundert mich aber auch, normal ist das auto anlegen ja durch die bestätigung die man klicken muss erledigt.
aber warum das auto ablegen nicht funst wundert mich, wenn man nen relog oder TP macht ist es ja auch weg,
aus diesem grunde sollte es doch auch möglich sein das beim einfachen aufstehen auch deattacht wird...
komische Linden Welt....

Jojo
 
Mich wundert nur das es halt nur beim owner funktioniert.
Allerdings wuerde mich nicht wundern, das der llDetachFromAvatar in einem AttachTemp Objet nicht bei Fremden funktioniert, wenn Linden Lab genau da einen Riegel vor geschoben hat, eben damit man fremden nicht per Script die Attachments ausziehen kann.

Ich habe zwar die Skripte nicht geschrieben oder Eure getestet (Zeitmangel :) ) aber vor einr Weile hatte ich mit dem Tempattachen herumgespielt. Das Tempanlegen hat quasi die Besitzerübergang bewirkt. Der Skript meinte nach dem Tempattachen, das Objekt gehört dem Avatar, der es trägt. Dadurh kann man ja ein Hut vom Regal tragen, ohne dass man diesen kaufen muss. Der Träger muss der Besitzer sein des Objekts, aber nicht vollständig, weil man gerade beim Temp Attachment dieses nicht ins Inventar übergeben muss bzw. will.

Dadurch kann man auch nicht den Fremden was ausziehen, weil man das Objekt auch nicht mehr beitzt, das jemand anders tempangezogen hat. Das ist quasi verloren und auf der Vorstufe zum Tod :)

Weiterhin bin ich auf ein anderes Problem gestossen.
Jedesmal wenn Jojo mir das Object schickte, konnte ich es zwar rezzen und per touch attachen, jedoch konnte ich niemals auch nur ein Object taken oder ins Inventar kopieren, sobald sich ein Script mit dieser Funktion darin befindet.
Somit blieb mir nichts anderes uebrig, als jedes mal das Script im Inventar zu schreiben und Jojo zu schicken.

Das habe ich zwar nicht ausprobiert, aber das finde ich zimlich gut: Sonst würde man eine Weitergabe von no-temp Objekten ermöglichen, indem man sie in ein Objekt pakt und dieses temporär anziehen lässt. Oder umgekehrt, das temporäre Tragen wäre unmöglich, wenn man einen notrans Inhalt einpackt. Das könnte die Demos verhindern, wenn der Ersteler was nicht copy+trans eingepackt hat. Ok, evtl. schwaches argument, aber ich denke es ist optimal so.

Edit, ich könnte beim Zitat misverstanden haben.
 
Zuletzt bearbeitet:
Das Problem ist das hier: Talk:LlAttachToAvatarTemp - Second Life Wiki
Konkret: das Prim vergisst die Berechtigung ein wenig wegen dem Ownerwechsel, das ist eventuell ein Bug.
Also muss man die Berechtigung noch mal neu holen fürs Detachen:

Sitzprim:
Code:
integer iChannel = -13;
key kAvatar = NULL_KEY;

default
{
    state_entry()
    {
        llSitTarget(<0.0,0.0,0.1>,ZERO_ROTATION);
        llListen(iChannel,"",NULL_KEY,"");
    }

    changed(integer change)
    {
        if (change & CHANGED_LINK){
            kAvatar = llAvatarOnSitTarget();
            if (kAvatar != NULL_KEY){
                llRezObject("HUD_Dings",<1.0,1.0,1.0>,ZERO_VECTOR,ZERO_ROTATION,0);
            }
            else{
                llSay(iChannel,"pongstoodup");
            }
        }
    }

    listen(integer channel, string name, key id, string message)
    {
        if(message == "ping"){
            llSay(iChannel,"pong"+(string)kAvatar);
        }
    }

}

HUD:
Code:
integer iChannel = -13;
key kAvatar = NULL_KEY;
integer iDetach = 0;

default
{
    state_entry()
    {
        llListen(iChannel,"",NULL_KEY,"");
    }

    on_rez(integer start_param)
    {
        llSay(iChannel,"ping");
    }

    listen(integer channel, string name, key id, string message)
    {
        string scode = llGetSubString(message,0,3);
        string sload = llGetSubString(message,4,-1);
        if (scode == "pong"){
            if(sload == "stoodup"){
                iDetach = 1;//Detach triggern
                llRequestPermissions(kAvatar,PERMISSION_ATTACH);
            }
            else{
                kAvatar = (key)sload;
                llRequestPermissions(kAvatar,PERMISSION_ATTACH);
            }
        }
    }

    run_time_permissions(integer permissions)
    {
        if (permissions & PERMISSION_ATTACH){
            if (iDetach == 1){//Detach getriggert
                llDetachFromAvatar();
                llDie();
            }
            else{
                llAttachToAvatarTemp(ATTACH_HUD_CENTER_1);
            }
        }
        else{ //keine Erlaubnis bekommen: Teil aufräumen
            llDie();
        }
    }
}

Und dass man TempAttachments nicht im Inventory sieht usw., das ist wohl Absicht.
 
Zuletzt bearbeitet:
@ Shirley

Soweit waren wir auch schon mit der erneuten abfrage, es funktionierte trotzdem nicht.
Was wir aber nicht probiert haben, denn da hatte ich es so wie du mir der Globalen Variable Avatar gemacht, zur Abwechslung den llGetOwner bei der neuen Abfrage einfach erneut abfragen.

@ Jenna

Ich hatte das Problem, das ich mein eigenes Object (1x von Jojo erstellt & 1x mein eigener selbst gerezzter neuer Wuerfel), welches ich selber auf dem boden rezzte und immer noch mir gehoert, nicht mehr ins Inventar nehmen oder gar kopieren konnte, nachdem ein Script mit der llAttachToAvatarTemp Funktion drin liegt.

LG
Dae
 
@ Shirley

Soweit waren wir auch schon mit der erneuten abfrage, es funktionierte trotzdem nicht.
Was wir aber nicht probiert haben, denn da hatte ich es so wie du mir der Globalen Variable Avatar gemacht, zur Abwechslung den llGetOwner bei der neuen Abfrage einfach erneut abfragen.

Die Scripte funktionieren bei mir auch mit meinen Alts.
Setzt man sich hin, wird ein Hud gerezzt, der fragt dann nach dem Permissions und wenn er die kriegt, dann attacht er sich.
Steht man wieder auf, dann meldet das Sitzprim das an den HUD, der fragt erneut nach den Permissions - und kriegt die nun automatisch. Und somit wird das Ding automatisch Detached beim Aufstehen. Deswegen auch der Trigger iDetach beim den Permissions, um zwischen Attach und Detach zu unterscheiden.

llGetOwner() frag ich nebenbei überhaupt nicht ab.. wer wann Owner ist, das ist mir erst mal wurscht - der Avatar, der beim erstenmal gefragt wird ob er es attachen will, der wird einfach auch beim zweiten mal gefragt ob er es detachen will. Weil er zufällig auch owner ist kriegt er die Permissions automatisch - ansonsten würde er wohl einfach noch mal ein Permission-Menu bekommen...
 
(...)
Ich hatte das Problem, das ich mein eigenes Object (1x von Jojo erstellt & 1x mein eigener selbst gerezzter neuer Wuerfel), welches ich selber auf dem boden rezzte und immer noch mir gehoert, nicht mehr ins Inventar nehmen oder gar kopieren konnte, nachdem ein Script mit der llAttachToAvatarTemp Funktion drin liegt.

Dae

Das ging bei mir vorher Problemlos... Ich werd mal nach dem Server schauen sobald ich wieder eingeloggt bin, eventuell hat das was mit der Server Version zu tun.

EDIT:
Das funktioniert auf Second Life Server 12.09.07.264510 problemlos.
 
Zuletzt bearbeitet:

Users who are viewing this thread

Zurück
Oben Unten