• 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.

Pose Script fuer Baelle und Moebel

Daemonika Nightfire

Forumsgott/göttin
huhu ihr suessen,

dachte mir mit diesem kleinen script leiste ich mal einen kleinen beitrag zur LAG reduzierung^^
denn viele benutzen immer noch ziemlich ueberladene und laggy poseballs, da kam ich mal auf die idee ein script zu schreiben das universal einsetzbar ist, mit und ohne SHOW/HIDE ohne laggy listener.

Code:
[COLOR=DarkOrange]//////////////////////////////////////////////////////////////////////////////////////////////
//                        *DS* ~ Pose Ball/Furniture Script V 1.2                           //
//                 by Daemonika Nightfire 2009-08-22 14:15:58 lsl2 script                   //
//////////////////////////////////////////////////////////////////////////////////////////////
// dieses Script ist Free und darf ausschliesslich mit vollen rechten weiter gegeben werden //
//                                                                                          //
//hiermit hast du die moeglichkeit ein posescript fuer alles zu verwenden.                  //
//du kannst es zusammen mit einer Animation in saemtliche prims deiner wahl stecken.        //
//                                                                                          //
//OK, das script sieht lang aus, das scheint aber nur so, weil saemtliche relevanten befehle//
//enthalten sind und dadurch universal einsetzbar ist.                                      //
//                                                                                          //
//im "Globalen Bereich" kannst du saemtliche individuellen einstellungen vornemen.          //
//beschreibungen stehen jeweils dahinter.                                                   //
//                                                                                          //
//im "Script Bereich" besteht die moeglichkeit das verhalten des scriptes zu beeinflussen   //
//setze einfach dazu vor dem jeweiligen befehl diese // und der befehl wird deaktiviert     //
//mit entfehrnen dieser // aktivierst du den entsprechenden befehl wieder                   //
//////////////////////////////////////////////////////////////////////////////////////////////

[/COLOR]  [COLOR=DarkOrange]//Globaler Bereich[/COLOR]
[COLOR=DarkGreen]vector[/COLOR] sit_rot = <00, 00, -90>; [COLOR=DarkOrange]// stelle hier die rotation ein (die sitzrichtung des Avatars)[/COLOR]
[COLOR=DarkGreen]vector[/COLOR] sit_pos = <0.0, 0.1, -0.23>; [COLOR=DarkOrange]// stelle hier die x,y,z koordinaten ein (die sitzposition des Avatars)[/COLOR]

[COLOR=DarkGreen]string[/COLOR] DISPLAY_TEXT = "[COLOR=DarkGreen]SIT HERE[/COLOR]"; [COLOR=DarkOrange]// hier kannst du den Hovertext aendern oder loeschen (string DISPLAY_TEXT = ""; kein text)[/COLOR]
[COLOR=DarkGreen]vector [COLOR=Black]color[/COLOR][/COLOR] = <1.0, 1.0, 1.0>; [COLOR=DarkOrange]// diese zeile ist die farbe fuer den Hovertext (<0.0, 0.0, 0.0> schwarz, <1.0, 1.0, 1.0> weiss)[/COLOR]
[COLOR=DarkGreen]float [COLOR=Black]alpha[/COLOR][/COLOR] = 1; [COLOR=DarkOrange]// hier wird die Transparents des textes eingestelle 0.0 ist unsichtbar[/COLOR]

[COLOR=DarkOrange]// diese usertex zeile wird nur benoetigt wenn du den textur change benutzt mit meiner transparenten alphatextur (SHOW/HIDE ersatz),
// dabei benoetigst du dann nur die UUID deiner textur die danach wieder angezeigt werden soll.
// die UUID bekommst du mit rechtsklick auf deiner textur in deinem Inventar (Asset-UUID kopieren) dann einfach zwischen die "" einfuegen.
string usertex = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"; // trage hier anstele der xxx.. die UUID deiner textur ein[/COLOR]

[COLOR=DarkGreen]string[/COLOR] sit = "[COLOR=DarkGreen]Pose[/COLOR]"; [COLOR=DarkOrange]// das ist die stelle bei der man im rechtsklickmenue auf SIT klickt (in diesem fall Pose)[/COLOR]
[COLOR=DarkGreen]string[/COLOR] menu = [COLOR=DarkGreen][COLOR=Black]"[/COLOR]*DS*[COLOR=Black]"[/COLOR][/COLOR];[COLOR=DarkOrange]// hier staend eigentlich im rechtsklickmenue, touch[/COLOR]

[COLOR=DarkGreen]string[/COLOR] ANIMATION;
[COLOR=DarkGreen]integer[/COLOR] is_sitting;
[COLOR=DarkGreen]integer[/COLOR] on;
[COLOR=DarkGreen]key[/COLOR] owner;
[COLOR=DarkGreen]string[/COLOR] ownername;

init()
{
    ownername = [COLOR=DarkRed]llKey2Name[/COLOR]( [COLOR=DarkRed]llGetOwner[/COLOR]());
   [COLOR=DarkRed] llOwnerSay[/COLOR] ( "[COLOR=DarkGreen]hello[/COLOR] " + ownername + " [COLOR=DarkGreen]touch for SHOW/HIDE[/COLOR]" );
}

[COLOR=DarkOrange]//Script Bereich[/COLOR]
[COLOR=Purple]default[/COLOR]
{
    [COLOR=RoyalBlue]state_entry[/COLOR]()
    {
        [COLOR=DarkRed]llPassTouches[/COLOR]([COLOR=Blue]TRUE[/COLOR]);
        owner = [COLOR=DarkRed]llGetOwner[/COLOR]();
        ANIMATION = [COLOR=DarkRed]llGetInventoryName[/COLOR]([COLOR=Blue]INVENTORY_ANIMATION[/COLOR], 0);
        is_sitting = 0;
        [COLOR=DarkRed]llSitTarget[/COLOR](sit_pos, [COLOR=DarkRed]llEuler2Rot[/COLOR](sit_rot*[COLOR=Indigo]DEG_TO_RAD[/COLOR]));
        [COLOR=DarkRed]llSetTouchText[/COLOR](menu);
        [COLOR=DarkRed]llSetSitText[/COLOR](sit);
        [COLOR=DarkRed]llSetText[/COLOR](DISPLAY_TEXT,color,alpha);
        [COLOR=DarkRed]llSetObjectDesc[/COLOR]([COLOR=DarkGreen]"*DaeSigns*"[/COLOR]);
    }
    [COLOR=RoyalBlue]on_rez[/COLOR]([COLOR=DarkGreen] integer[/COLOR] param )
    {
        init();
    }
    [COLOR=RoyalBlue]touch_start[/COLOR]([COLOR=DarkGreen]integer[/COLOR] total_number) [COLOR=DarkOrange]// dieser Bereich ist der SHOW/HIDE um klicken[/COLOR]
    {
        [COLOR=Navy]if[/COLOR]([COLOR=DarkRed]llDetectedKey[/COLOR](0)) [COLOR=DarkOrange]// entscheide hier mit setzen und entfehrnen der // ob alle oder nur der Owner die balls ausblenden koennen.[/COLOR]
      [COLOR=DarkOrange]//  if(llDetectedKey(0) == owner)[/COLOR]
        {
            [COLOR=Navy]if[/COLOR](on)
            {
                on = [COLOR=Navy]FALSE[/COLOR];
                [COLOR=DarkRed]llSetText[/COLOR](DISPLAY_TEXT,color,alpha);
                [COLOR=DarkRed]llSetAlpha[/COLOR](1.0, [COLOR=Navy]ALL_SIDES[/COLOR]); [COLOR=DarkOrange]//***SHOW ever[/COLOR]
              [COLOR=DarkOrange]//  llSetTexture("40ca82a1-c00d-39db-6c7d-ec7d48df4de3",ALL_SIDES); //***16x16px Weiss (*DS*)[/COLOR]
              [COLOR=DarkOrange]//  llSetTexture(usertex,ALL_SIDES); //your texture[/COLOR]
                [COLOR=DarkRed]llResetScript[/COLOR]();
            }
            [COLOR=Navy]else[/COLOR]
            {
                on = [COLOR=Navy]TRUE[/COLOR];
                [COLOR=DarkRed]llSetText[/COLOR]("",color,alpha);  [COLOR=DarkOrange]// clearing Hovertext[/COLOR]
                [COLOR=DarkRed]llSetAlpha[/COLOR](0.0,[COLOR=Navy] ALL_SIDES[/COLOR]); [COLOR=DarkOrange]//*HIDE for Balls[/COLOR]
              [COLOR=DarkOrange]//  llSetAlpha(1.0, ALL_SIDES);  //**SHOW for Furniture
              //  llSetTexture("7cae828c-2d5d-ec8c-b8f6-855870bb2b66",ALL_SIDES); //*16x16px Transparent (*DS*)[/COLOR]
              [COLOR=DarkOrange]//  llSetTexture("40ca82a1-c00d-39db-6c7d-ec7d48df4de3",ALL_SIDES); //**16x16px Weiss (*DS*)
              //  llSetTexture(usertex,ALL_SIDES); //your texture[/COLOR]
            }
        }
    }
    [COLOR=RoyalBlue]changed[/COLOR]([COLOR=DarkGreen]integer[/COLOR] change) [COLOR=DarkOrange]// dieser Bereich bedeutet "nicht sitzen"[/COLOR]
    {
        [COLOR=Navy]if[/COLOR](change & [COLOR=Navy]CHANGED_LINK[/COLOR])
        {
            [COLOR=DarkGreen]key[/COLOR] av = [COLOR=DarkRed]llAvatarOnSitTarget[/COLOR]();
          [COLOR=Navy]  if[/COLOR](av != [COLOR=Navy]NULL_KEY[/COLOR])
            {
               [COLOR=DarkRed] llRequestPermissions[/COLOR](av, [COLOR=Navy]PERMISSION_TRIGGER_ANIMATION[/COLOR]);
            }
            else
            {
                if(([COLOR=DarkRed]llGetPermissions[/COLOR]() & [COLOR=Navy]PERMISSION_TRIGGER_ANIMATION[/COLOR]) && is_sitting)
                {
                    is_sitting = 0;
                    [COLOR=DarkRed]llStopAnimation[/COLOR](ANIMATION);
                    [COLOR=DarkRed]llSetText[/COLOR](DISPLAY_TEXT,color,alpha);
                    [COLOR=DarkRed]llSetAlpha[/COLOR](1.0, [COLOR=Navy]ALL_SIDES[/COLOR]);  [COLOR=DarkOrange]//***SHOW ever[/COLOR]
                  [COLOR=DarkOrange]//  llSetTexture("40ca82a1-c00d-39db-6c7d-ec7d48df4de3",ALL_SIDES); //***16x16px Weiss (*DS*)
                  //  llSetTexture(usertex,ALL_SIDES); //your texture[/COLOR]
                }
            }
        }
        ANIMATION = [COLOR=DarkRed]llGetInventoryName[/COLOR]([COLOR=Navy]INVENTORY_ANIMATION[/COLOR], 0);
    }
   [COLOR=RoyalBlue] run_time_permissions[/COLOR]([COLOR=DarkGreen]integer[/COLOR] perm) [COLOR=DarkOrange]// dieser Bereich bedeutet "sitzen"[/COLOR]
    {
        [COLOR=Navy]if[/COLOR](perm & [COLOR=Navy]PERMISSION_TRIGGER_ANIMATION[/COLOR])
        {
            is_sitting = 1;
            [COLOR=DarkRed]llStopAnimation[/COLOR]([COLOR=DarkGreen]"sit_generic"[/COLOR]);
            [COLOR=DarkRed]llStopAnimation[/COLOR]([COLOR=DarkGreen]"sit"[/COLOR]);
            [COLOR=DarkRed]llStartAnimation[/COLOR](ANIMATION);
            [COLOR=DarkRed]llSetAlpha[/COLOR](0.0, [COLOR=Navy]ALL_SIDES[/COLOR]); [COLOR=DarkOrange]//*HIDE for Balls[/COLOR]
          [COLOR=DarkOrange]//  llSetAlpha(1.0, ALL_SIDES);  //**SHOW for Furniture
          //  llSetTexture("7cae828c-2d5d-ec8c-b8f6-855870bb2b66",ALL_SIDES); //*16x16px Transparent (*DS*)
          //  llSetTexture("40ca82a1-c00d-39db-6c7d-ec7d48df4de3",ALL_SIDES); //**16x16px Weiss (*DS*)
          //  llSetTexture(usertex,ALL_SIDES); //your texture[/COLOR]
            [COLOR=DarkRed]llSetText[/COLOR]("",color,alpha);  [COLOR=DarkOrange]// clearing Hovertext[/COLOR]
        }
    }
}
ich hoffe das ich darin an alles notwendige gedacht habe und wuensche allen viel freude damit
 
Hi, ich bring mal ein paar Anmerkungen zum Script.
Zunächst mal: Klasse Wahl, die "Pose Bälle" endlich ein wenig abzuösen - und dabei weniger Lag zu produzieren.

Jetzt zu den Anmerkungen:
1. "init()": Du rufst die Funktion nur einmal im on_rez auf. Damit wird der Owner (nach Transfer) aber nicht eu gesetzt. Also ist es sinnvoller, die 1 1/2 Kommandos direkt in das state_entry zu integrieren, und sowohl beim changed/CHANGED_OWNER und on_rez ein llResetScript() auszuführen.

2. ANIMATION = llGetInventoryName(INVENTORY_ANIMATION, 0);
Du rufst das bei jedem Change-Event auf, also bei jedem Setzen eine Inventory-Funktion. Nötig ists aber nur bei Inventry-Changes.

Wenn man das show/hide übriges nur auf den text beschränkt, kann man natürlich bei den meisten Anis (abhängig vom Sattelpunkt) auch ganz auf die "Bälle" verzichten (und so prims sparen)

Alles in allem sehr gut, Daemonika. Ich häng das mal mit den angesprochenen Änderungen direkt wieder an.

Code:
//////////////////////////////////////////////////////////////////////////////////////////////
//                        *DS* ~ Pose Ball/Furniture Script V 1.2                           //
//                 by Daemonika Nightfire 2009-08-22 14:15:58 lsl2 script                   //
[color=blue]//			Änderungen by Jhary Priestly 2009-08-22 21:04:00							//[/color]
//////////////////////////////////////////////////////////////////////////////////////////////
// dieses Script ist Free und darf ausschliesslich mit vollen rechten weiter gegeben werden //
//                                                                                          //
//hiermit hast du die moeglichkeit ein posescript fuer alles zu verwenden.                  //
//du kannst es zusammen mit einer Animation in saemtliche prims deiner wahl stecken.        //
//                                                                                          //
//OK, das script sieht lang aus, das scheint aber nur so, weil saemtliche relevanten befehle//
//enthalten sind und dadurch universal einsetzbar ist.                                      //
//                                                                                          //
//im "Globalen Bereich" kannst du saemtliche individuellen einstellungen vornemen.          //
//beschreibungen stehen jeweils dahinter.                                                   //
//                                                                                          //
//im "Script Bereich" besteht die moeglichkeit das verhalten des scriptes zu beeinflussen   //
//setze einfach dazu vor dem jeweiligen befehl diese // und der befehl wird deaktiviert     //
//mit entfehrnen dieser // aktivierst du den entsprechenden befehl wieder                   //
//////////////////////////////////////////////////////////////////////////////////////////////

  //Globaler Bereich
vector sit_rot = <00, 00, -90>; // stelle hier die rotation ein (die sitzrichtung des Avatars)
vector sit_pos = <0.0, 0.1, -0.23>; // stelle hier die x,y,z koordinaten ein (die sitzposition des Avatars)

string DISPLAY_TEXT = "SIT HERE"; // hier kannst du den Hovertext aendern oder loeschen (string DISPLAY_TEXT = ""; kein text)
vector color = <1.0, 1.0, 1.0>; // diese zeile ist die farbe fuer den Hovertext (<0.0, 0.0, 0.0> schwarz, <1.0, 1.0, 1.0> weiss)
float alpha = 1; // hier wird die Transparents des textes eingestelle 0.0 ist unsichtbar

// diese usertex zeile wird nur benoetigt wenn du den textur change benutzt mit meiner transparenten alphatextur (SHOW/HIDE ersatz),
// dabei benoetigst du dann nur die UUID deiner textur die danach wieder angezeigt werden soll.
// die UUID bekommst du mit rechtsklick auf deiner textur in deinem Inventar (Asset-UUID kopieren) dann einfach zwischen die "" einfuegen.
string usertex = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"; // trage hier anstele der xxx.. die UUID deiner textur ein

string sit = "Pose"; // das ist die stelle bei der man im rechtsklickmenue auf SIT klickt (in diesem fall Pose)
string menu = "*DS*";// hier staend eigentlich im rechtsklickmenue, touch

string ANIMATION;
integer is_sitting;
integer on;
key owner;

//Script Bereich
default
{
    state_entry()
    {
        llPassTouches(TRUE);
        owner = llGetOwner();
        ANIMATION = llGetInventoryName(INVENTORY_ANIMATION, 0);
        is_sitting = 0;
        llSitTarget(sit_pos, llEuler2Rot(sit_rot*DEG_TO_RAD));
        llSetTouchText(menu);
        llSetSitText(sit);
        llSetText(DISPLAY_TEXT,color,alpha);
        llSetObjectDesc("*DaeSigns*");
[color=blue]		llOwnerSay ( "hello " + llKey2Name( owner ) + " touch for SHOW/HIDE" );[/color]
    }
    touch_start(integer total_number) // dieser Bereich ist der SHOW/HIDE um klicken
    {
        if(llDetectedKey(0)) // entscheide hier mit setzen und entfehrnen der // ob alle oder nur der Owner die balls ausblenden koennen.
      //  if(llDetectedKey(0) == owner)
        {
            if(on)
            {
                on = FALSE;
                llSetText(DISPLAY_TEXT,color,alpha);
                llSetAlpha(1.0, ALL_SIDES); //***SHOW ever
              //  llSetTexture("40ca82a1-c00d-39db-6c7d-ec7d48df4de3",ALL_SIDES); //***16x16px Weiss (*DS*)
              //  llSetTexture(usertex,ALL_SIDES); //your texture
                llResetScript();
            }
            else
            {
                on = TRUE;
                llSetText("",color,alpha);  // clearing Hovertext
                llSetAlpha(0.0, ALL_SIDES); //*HIDE for Balls
              //  llSetAlpha(1.0, ALL_SIDES);  //**SHOW for Furniture
              //  llSetTexture("7cae828c-2d5d-ec8c-b8f6-855870bb2b66",ALL_SIDES); //*16x16px Transparent (*DS*)
              //  llSetTexture("40ca82a1-c00d-39db-6c7d-ec7d48df4de3",ALL_SIDES); //**16x16px Weiss (*DS*)
              //  llSetTexture(usertex,ALL_SIDES); //your texture
            }
        }
    }
    changed(integer change) // dieser Bereich bedeutet "nicht sitzen"
    {
        if(change & CHANGED_LINK)
        {
            key av = llAvatarOnSitTarget();
            if(av != NULL_KEY)
            {
                llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);
            }
            else
            {
                if((llGetPermissions() & PERMISSION_TRIGGER_ANIMATION) && is_sitting)
                {
                    is_sitting = 0;
                    llStopAnimation(ANIMATION);
                    llSetText(DISPLAY_TEXT,color,alpha);
                    llSetAlpha(1.0, ALL_SIDES);  //***SHOW ever
                  //  llSetTexture("40ca82a1-c00d-39db-6c7d-ec7d48df4de3",ALL_SIDES); //***16x16px Weiss (*DS*)
                  //  llSetTexture(usertex,ALL_SIDES); //your texture
                }
            }
        }
[color=blue] 		if (change & CHANGED_OWNER) {
			llResetScript();
		}
		if (change & (CHANGED_INVENTORY | CHANGED_ALLOWED_DROP) ) {
			ANIMATION = llGetInventoryName(INVENTORY_ANIMATION, 0);
		}[/color]

    }
    run_time_permissions(integer perm) // dieser Bereich bedeutet "sitzen"
    {
        if(perm & PERMISSION_TRIGGER_ANIMATION)
        {
            is_sitting = 1;
            llStopAnimation("sit_generic");
            llStopAnimation("sit");
            llStartAnimation(ANIMATION);
            llSetAlpha(0.0, ALL_SIDES); //*HIDE for Balls
          //  llSetAlpha(1.0, ALL_SIDES);  //**SHOW for Furniture
          //  llSetTexture("7cae828c-2d5d-ec8c-b8f6-855870bb2b66",ALL_SIDES); //*16x16px Transparent (*DS*)
          //  llSetTexture("40ca82a1-c00d-39db-6c7d-ec7d48df4de3",ALL_SIDES); //**16x16px Weiss (*DS*)
          //  llSetTexture(usertex,ALL_SIDES); //your texture
            llSetText("",color,alpha);  // clearing Hovertext
        }
    }
    on_rez( integer param )
    {
        [color=blue]llResetScript();[color]
    }
}
 
^^

@ Jhary Priestly

das der llOwnersay nicht im state entry ist war absicht,
hatte kein bock auf spam wenn jemand anderes die show/hide funktion nutzt wenn es oefentlich ist, da beim SHOW das script resettet

mit dem show/hide abschalten beim sit kann man dieses script auch fuer moebel nutzen^^
brauchst dazu ja nur beim sit das set alpha deaktivieren^^ bzw von 0.0 auf 1.0 aendern beide befehle sind ja drin

NACHTRAG:
hab mir das noch mal durch den kopf gehen lassen und kam zu dem entschluss das ein reset beim ownerchange voellig unnoetig ist, da die llOwnerSay message nur bei aktivem show/hide benoetigt wird, die eigentliche funktion des scriptes wird dadurch ja nicht beeintraechtigt.
 
Ausser natüröich, jemand will nur den Owner die Sachen zeigen/hiden lassen. Dann muss er das Script selbst einmal reseten. Sehr nützlich, ja. Bleibt natürlich die Frage, wieso Du das Script da resetest.
 
hehe, genau genommen koennte man auch an dieser stelle noch einen reset rein machen :wink:

Code:
else
            {
                if(([COLOR=DarkRed]llGetPermissions[/COLOR]() & [COLOR=Navy]PERMISSION_TRIGGER_ANIMATION[/COLOR]) && is_sitting)
                {
                    is_sitting = 0;
                    [COLOR=DarkRed]llStopAnimation[/COLOR](ANIMATION);
                    [COLOR=DarkRed]llSetText[/COLOR](DISPLAY_TEXT,color,alpha);
                    [COLOR=DarkRed]llSetAlpha[/COLOR](1.0, [COLOR=Navy]ALL_SIDES[/COLOR]);  [COLOR=DarkOrange]//***SHOW ever[/COLOR]
                  [COLOR=DarkOrange]//  llSetTexture("40ca82a1-c00d-39db-6c7d-ec7d48df4de3",ALL_SIDES); //***16x16px Weiss (*DS*)
                  //  llSetTexture(usertex,ALL_SIDES); //your texture[/COLOR]
                    [COLOR=DarkRed]llResetScript[/COLOR]();
                }
dann resettet es nach jedem aufstehen^^
 
huhu ihr suessen,

Hab mal ein kleines Update meines Posescriptes gemacht.
Damals war ich ja noch Klein und Bloed und mein erstes wurde hier damals ja gleich in der luft zerissen, von Leuten die es vermeindlich besser wussten.
Wobei ich heute mal bemerken muss...

if (change & (CHANGED_INVENTORY | CHANGED_ALLOWED_DROP) ) {
...was soll dieser Schwachsinn in einem Posescript??

Naja, schauen wir uns mal das neue an.
Ich denke einige werden feststellen das es viel kleiner ist, zudem ist es wieder fuer Baelle und Moebel.
Auch besitzt es diesmal keine manuelle SHOW/HIDE Option per touch oder chatbefehl.
"das macht heute kein mensch mehr."
Diesbezueglich habe ich die show/hide Option als Funktion eingebaut, das macht es fuer unerfahrene wesentlich leichter diese zu entfehrnden wenn sie nicht benoetigt wird (Moebel).

Weiterhin verursacht dieses script KEINEN Script Error sollte ein Avatar beim darauf sitzen Offline gehen.
Wie und warum es das nicht macht ueberlasse ich euch das heraus zu finden. :p

Diesmal wird auch die Position und Rotation des Avatars der sich darauf setzen soll, direkt im script und nicht als Variable angegeben.
dazu einfach im folgenden Befehl die Werte nach llSitTarget fuer die position und die Werte nach dem llEuler2Rot fuer die Rotation dem entsprechend anpassen. "llSitTarget(<-0.1,0.1,-0.43>,llEuler2Rot(<00,-90,-90>*DEG_TO_RAD));"

In diesem Sinne wuensche ich euch viel Spass und eine Lagfreie Region mit dem PoseScript.

Code:
[COLOR=DarkGreen]string[/COLOR] ANIMATION;
[COLOR=DarkGreen]integer[/COLOR] is_sitting;
show()
{
    [COLOR=Red]llSetText[/COLOR]("[COLOR=DarkGreen]SIT HERE[/COLOR]",<0.9,0.6,0.2>,1.0);
    [COLOR=Red]llSetAlpha[/COLOR](1.0, [COLOR=Blue]ALL_SIDES[/COLOR]);
}
hide()
{
    [COLOR=Red]llSetText[/COLOR]("",[COLOR=DarkOrchid]ZERO_VECTOR[/COLOR],0.0);
    [COLOR=Red]llSetAlpha[/COLOR](0.0, [COLOR=Blue]ALL_SIDES[/COLOR]);
}
default
{
    [COLOR=DeepSkyBlue]state_entry[/COLOR]()
    {
        show();
        is_sitting = 0;
        ANIMATION = [COLOR=Red]llGetInventoryName[/COLOR]([COLOR=Blue]INVENTORY_ANIMATION[/COLOR], 0);
        [COLOR=Red]llSitTarget[/COLOR](<-0.1,0.1,-0.43>,[COLOR=Red]llEuler2Rot[/COLOR](<00,-90,-90>*[COLOR=DarkOrchid]DEG_TO_RAD[/COLOR]));
    }
    [COLOR=DeepSkyBlue]run_time_permissions[/COLOR]([COLOR=DarkGreen]integer[/COLOR] perm)[COLOR=DarkOrange]//"sit"[/COLOR]
    {
        [COLOR=Blue]if [/COLOR](perm & [COLOR=Blue]PERMISSION_TRIGGER_ANIMATION[/COLOR])
        {
            is_sitting = 1;
            [COLOR=Red]llStopAnimation[/COLOR]("[COLOR=DarkGreen]sit_generic[/COLOR]");
            [COLOR=Red]llStopAnimation[/COLOR]("[COLOR=DarkGreen]sit[/COLOR]");
            [COLOR=Red]llStartAnimation[/COLOR](ANIMATION);
            hide();
        }
    }
    [COLOR=DeepSkyBlue]changed[/COLOR]([COLOR=DarkGreen]integer[/COLOR] ch)[COLOR=DarkOrange]//"unsit"[/COLOR]
    {
        [COLOR=Blue]if[/COLOR] (ch & [COLOR=Blue]CHANGED_OWNER [COLOR=Black]+[/COLOR] CHANGED_REGION_START[/COLOR])
        {
            [COLOR=Red]llResetScript[/COLOR]();
        }
        [COLOR=Blue]if[/COLOR] (ch & [COLOR=Blue]CHANGED_LINK[/COLOR])
        {
            [COLOR=DarkGreen]key[/COLOR] av = [COLOR=Red]llAvatarOnSitTarget[/COLOR]();
            [COLOR=Blue]if[/COLOR] ([COLOR=Red]llKey2Name[/COLOR](av) != "")
            {
                [COLOR=Red]llRequestPermissions[/COLOR](av, [COLOR=Blue]PERMISSION_TRIGGER_ANIMATION[/COLOR]);
            }
            [COLOR=Blue]else[/COLOR]
            {
                show();
                [COLOR=Blue]if[/COLOR] (([COLOR=Red]llGetPermissions[/COLOR]() & [COLOR=Blue]PERMISSION_TRIGGER_ANIMATION[/COLOR]) && is_sitting && [COLOR=Red]llKey2Name[/COLOR](av) != "")
                {
                    [COLOR=Red]llStopAnimation[/COLOR](ANIMATION);
                }
                is_sitting = 0;
            }
        }
    }
    [COLOR=DeepSkyBlue]on_rez[/COLOR]([COLOR=DarkGreen]integer[/COLOR] st)
    {
        [COLOR=Red]llResetScript[/COLOR]();
    }
}
 
Geb ich dir recht, genau genommen unterscheiden die sich alle kaum.
Meins unterscheidet sich warscheinlich nur dahingehend das es Keinen Skript ERROR ausgibt wenn ein drauf sitzender Ava crasht/weg TPt/ oder sonst was warum der Ava ploetzlich nicht mehr da ist.

Weiterhin glaube ich auch nicht das die alten scripte frueher bei einem bzw nach einem Sim neustart/crash selber einen sauberen reset durchfuehrten.

Der eigentliche Beweggrund warum ich das script in dieser Form veroeffentlicht habe ist folgender:

Viel zu viele "Scripter" muellen so ein einfaches script mit irgend welchem Schrott voll setzen die Permission auf NO MOD und machen voll den hehl draus was fuer ein tolles script sie geschrieben haben.

Nun befinden sich in solchen scripten dann meist kack Listener zum show/hide und was weiss ich nicht was noch fuer extras die evtl keiner jemals braucht.

Die Message die ich damit rueber bringen will ist, BACK TO BASIK.
Mit anderen worten, ich will auf dem Prim nur sitzen.

Sample:
1 Poseball der ohne listener schon mindestens 0.002 ms hat summiert sich auf einer sim imenz hocht.

Rechne doch mal aus Spass wieviele Posebaelle auf einer sim mit etwa 5 Parzellen existieren koennen.
Da wird dir schlecht wie leicht sich damit allein schon der LAG berechnen laesst, vor allem wenn die ganzen Baelle auch noch einen Listener besitzen.
 
Weiterhin glaube ich auch nicht das die alten scripte frueher bei einem bzw nach einem Sim neustart/crash selber einen sauberen reset durchfuehrten.
Aus meinem Script:

Code:
on_rez(integer blahblah)
    {
            llResetScript();        
    }
Wie gesagt, das Script macht exakt das, was Du forderst... und ist Jahre alt. ^^

Nicht falsch verstehen (falsch verstehen is in SL weit verbreitet) - aber all das wurde bereits vor Jahren "entdeckt" - es sind nur viel zu viel noch viel ältere Scripte in Betrieb. Und die sind das wahre Problem. Ansonsten weiß ich es absolut zu schätzen, wenn sich wer Gedanken um die Script-Problematik macht. Aber man muss dazu das Rad nicht ca. 30Mal neu erfinden.

Meins unterscheidet sich warscheinlich nur dahingehend das es Keinen Skript ERROR ausgibt wenn ein drauf sitzender Ava crasht/weg TPt/ oder sonst was warum der Ava ploetzlich nicht mehr da ist.
Tut meins auch nicht.
 
Sorry aber der on_rez event wird bei einem Sim neustart ueberhauptnicht ausgefuehrt, sondern nur beim aufstellen.

OK, das mit dem script error sieht man selber auch nicht, das faellt wirklich nur bei anderen auf wenn man zufaellich gerade in dem kleinen augenblick die cam auf besagtem Ball (ava) hat und der jenige gerade crasht, genau in dem moment wo der ava Verschwindet erscheint wirklich nur sehr kurz das error icon.
 
Sorry aber der on_rez event wird bei einem Sim neustart ueberhauptnicht ausgefuehrt, sondern nur beim aufstellen.
Hm, müsste ich nachschlagen, aber ich würde sagen, das stimmt nicht. Ich weiß es im Moment aber nicht genau.

Soweit ich im Moment weiß (ist ja spät) hat:

Code:
[COLOR=Blue]if[/COLOR] (ch & [COLOR=Blue]CHANGED_OWNER [COLOR=Black]+[/COLOR] CHANGED_REGION_START[/COLOR])
        {
            [COLOR=Red]llResetScript[/COLOR]();
        }

eine niedrigere Priorität als on_rez.

....erscheint wirklich nur sehr kurz das error icon.

Hm, habe ich nie bemerkt, will es aber auch nicht ausschließen.
 
Glaub mir, ich habs getestet.
Ich weiss gar net mehr wie oft ich fuer die ganzen Tests die Sim neu gestartet hab^^

Ist ganz leicht, lass dir bei beiden events eine Instandmessage ausgeben.
Mal sehen welche von beiden du bekommst. :wink:

Ich vermute mal das ist auch der Grund warum LL den CHANGED_REGION_START eingefuehrt hat, denn den gab es damals noch nicht soweit ich weiss.
Wenn ich richtig gesehen habe, ist der bis heute noch nicht einmal im script in der Befehlsauswahl vorhanden.
 
Ich vermute mal das ist auch der Grund warum LL den CHANGED_REGION_START eingefuehrt hat, denn den gab es damals noch nicht soweit ich weiss.
Den gibt es so lange, wie ich in SL bin. Sinn macht der eigentlich nur, wenn man GENAU diese Sache abfangen will und nichts anderes. Also für ein selektives Reagieren.

Lass uns morgen weiter diskutieren, ich muss pennen. ;)
 
Ich bestreite ja nicht das es den nicht schon lange gibt, fakt ist aber das er nicht von anfang an existiert und nie wirklich praesent war und den auch kaum jemand benutzt hat.
Wozu auch, es gibt ja nicht viele Anwendungsgebiete dafuer.

Wenn ich richtig gesehen habe, ist der bis heute noch nicht einmal im script in der Befehlsauswahl vorhanden.
koennen wa streichen, mitlerweile isser drin, sonst hatte ich den immer vermisst.

Denn ich benutz den fuer einige dinge sehr gern, besonders bei Posebaellen.
Wenn zum Beispiel ein Ava auf einerm Ball sitzt und in dem moment die Sim Neu startet, passiert gerade beim Sim neustart das selbe wie beim Ava crash.
Das script sucht wieder mal den Ava und da keiner da ist, erscheint der error.

Diesen Effekt kann man zwar nicht beobachten, aber mit dem einfachen llSetAlpha show/hide Effect faellts auf, der Ball ist nach dem Sim Neustart naemlich noch unsichtbar.
 
Beim sim neustart wird ein on_rez ausgeführt sowie ein changed

Sehe ich jedesmal an meinen Mülleimern die mir Freudestrahlend sagen "Juhu ich hab ein neues item in mir" weil ich die nur auf changed mir das sagen lasse statt zu prüfen was drinne ist und die mir beim neustart mal nett Hallo sagen das sie aufgestellt wurden. Komischerweise kommt das changed vor dem on_rez.
 
Irgendwie muss ich dir wiedersprechen, mein Test soeben sagt mir das der on_rez nicht ausgefuehrt wird bei einem Sim Neustart.
Sorry Nadinia Seid, aber ich konnts net lassen und wollte es bestaetigt wissen :)

Dazu habe ich zwei gleiche prims mit fast identischen scripten gerezzt, der einzige unterschied bestand lediglich in der reihenfolge der Events.
Bei beiden scripten wurde in beiden Events ausschliesslich die InstandMessage gesendet.
Das Ergebniss dieser beiden scripte findest du ganz unten.

Code:
key owner;
default
{
    state_entry()
    {
        owner = llGetOwner();
    }
    on_rez(integer st)
    {
        llInstantMessage(owner,"on_rez meldung PRIM B");
    }
    changed(integer ch)
    {
        if (ch & CHANGED_REGION_START)
        {
            llInstantMessage(owner,"changed meldung PRIM B");
        }
    }
}
Code:
key owner;
default
{
    state_entry()
    {
        owner = llGetOwner();
    }
    changed(integer ch)
    {
        if (ch & CHANGED_REGION_START)
        {
            llInstantMessage(owner,"changed meldung PRIM A");
        }
    }
    on_rez(integer st)
    {
        llInstantMessage(owner,"on_rez meldung PRIM A");
    }
}
Hier das Ergebniss:

[0:10] XXXXXXXXXX ist offline
[0:10] PRIM A: changed meldung PRIM A
[0:10] *DaeSigns* Info-Board v2.2 Updated: Region was down @ ( Sun Beach 92/200/22 )
[0:10] PRIM B: changed meldung PRIM B
[0:10] *DaeSigns* Info-Board v2.2 Updated: Region was down @ ( Sun Beach 121/225/23 )
[0:12] XXXXXXXXXX has entered the sim.
[0:12] XXXXXXXXXX ist online
[0:15] XXXXXXXXXX has entered the sim.
 
Jhary schrieb:
Code:
if (change & (CHANGED_INVENTORY | CHANGED_ALLOWED_DROP) ) {
...was soll dieser Schwachsinn in einem Posescript??
Dieser "Schwachsinn" verhindert, daß nach dem Wechsel der Animationen im Script das Script resettet werden muss und damit alle Events neu in Queue geschrieben werden.

Lag-Minimierung. Ich weiss, nicht in Mode, aber wenn man's sich schon auf die Fahne schreibt...
 
Was fuern Inventory soll denn ausgetauscht werden wenn man drauf sitzt und
wer ist schon so bloed und laesst sich von fremden Leuten Zeug in seinen Sessel stecken?

Halloooooooo, wir reden hier von einem popeligen Fullperm Posescript.
 
Irgendwie muss ich dir wiedersprechen, mein Test soeben sagt mir das der on_rez nicht ausgefuehrt wird bei einem Sim Neustart.
Sorry Nadinia Seid, aber ich konnts net lassen und wollte es bestaetigt wissen :)

Jetzt konnte ich es nich lassen :D Nee stimmt, hast recht. Ich Schaaf hatte vergessen das ich zu debugzwecken die meldung auch im changed hatte und mal wieder verbummelt hatte aus faulheit die debugmeldungen im script raus zu nehmen :oops:
 

Users who are viewing this thread

Zurück
Oben Unten