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

resize script

So mal die Möglichkeit des Löschens eingebaut. Für verantwortungsbewuste User mit copy teilen....

Einmal das root script:

Code:
key owner;                      // var that names the owner
string dialog_message;          // the text showed in the dialog
list buttons = ["Inc 1%", "Inc 5%", "Inc 10%", "Dec 1%", "Dec 5%", "Dec 10%", "reset", "close", "delete"];     // the buttons
integer channel;                // the channel for comunication with the dialog
integer num = 1111;             // this number makes sure, that only this script resizes the children
vector size;                    // vars for primsize
vector org_size;
float scale;
string inventory;
integer lhandle;
init()                          // initialization
{
    channel = ((integer)llFrand(2147483640) * -1) - 1;            // a random channel generation. this is needed if more objects using this script 
    dialog_message = "Click the Buttons to increase or decrease the Size of the Prim and its Linkset by 1, 5 or 10%. Click reset to revert to original size and close to leave the menu.";      // dialog text
    integer i;
    inventory = llGetInventoryName(INVENTORY_LANDMARK, 0);
    size = llGetScale();
    org_size = llGetScale();
    llSetScale(size);     // get original sizes
    scale = 1;
    llMessageLinked(LINK_SET, 1111, (string)scale, NULL_KEY);
}
reset()
{
    llSetScale(org_size);     // reset original size
    scale = 1;
    llMessageLinked(LINK_SET, 1111, (string)scale, NULL_KEY);
    llDialog(owner, dialog_message, buttons, channel);
}    
bigger()                        // make bigger
{
    size = llGetScale();        // get size
    size = size * scale;          // add ten percent
    llSetScale(size);        // resize
    llMessageLinked(LINK_SET, 1111, (string)scale, NULL_KEY);
    llDialog(owner, dialog_message, buttons, channel);
    llSetTimerEvent(30);
}
smaller()                       // make smaller
{
    size = llGetScale();        // get size
    size = size * scale;          // take 10% from that
    llSetScale(size);    // resize
    llMessageLinked(LINK_SET, 1111, (string)scale, NULL_KEY);
    llDialog(owner, dialog_message, buttons, channel);
    llSetTimerEvent(30);
}
menudone()
{
    llListenRemove(lhandle);
    llSetTimerEvent(0);
}
default
{
    state_entry()
    {
        init();
    }
 
    changed(integer change)
    {
        if (change & CHANGED_OWNER)
            init();
    }
    touch_start(integer total_number)
    {
        // owner = llDetectedKey(0);        // make everyone use the script
        lhandle = llListen(channel, "", NULL_KEY, "");
        llSetTimerEvent(30);
        owner = llGetOwner();               // only owner can use it
        if (llDetectedKey(0) == owner)
            llDialog(owner, dialog_message, buttons, channel);
        else
            llGiveInventory(llDetectedKey(0), inventory);
    }
 
    listen(integer channel, string name, key id, string message)
    {
        if (llListFindList(buttons, [message]) != -1)  // make sure we listen only to us
        {
            // llSay(0, name + " picked the option '" + message + "'."); // write order to chat
            if (message == "reset")
                reset();
            else if (message == "Inc 1%")
            {
                scale = 1.01;
                bigger();
            }
            else if (message == "Inc 5%")
            {
                scale = 1.05;
                bigger();
            }
            else if (message == "Inc 10%")
            {
                scale = 1.1;
                bigger();
            }
            else if (message == "Dec 1%")
            {
                scale = 0.99;
                smaller();
            }
            else if (message == "Dec 5%")
            {
                scale = 0.95;
                smaller();
            }
            else if (message == "Dec 10%")
            {
                scale = 0.9;
                smaller();
            }
            else if (message == "close") {
                menudone();
            }else if (message == "delete"){
                llMessageLinked(LINK_SET, 0, message, NULL_KEY);
                //braucht man eigentlich auch nicht mehr:
                llRemoveInventory(llGetScriptName());
            }
        }
    }
 
    timer()
    {
        menudone();
    }
 
}

und das script für die Kinderprims :)

Code:
vector org_size;
vector org_pos;
default 
{
    state_entry() 
    {
        org_size = llGetScale();
        org_pos = llGetLocalPos();    
    }
 
    link_message(integer sender_num, integer num, string str, key id) 
    {
        float scale; // size factor
        list    primparams;
        if(num==1111){
            scale = (float)str;
             if (scale == 1)
             {
                primparams = [];
                primparams += [PRIM_SIZE, org_size];
                if (llGetLinkNumber() > 1) 
                { // only move if we're not the root object
                    primparams += [PRIM_POSITION, org_pos]; // reposition
                }
             }
             else 
             {
                primparams = [];
                primparams += [PRIM_SIZE, llGetScale() * scale]; // resize
                if (llGetLinkNumber() > 1) 
                { // only move if we're not the root object
                    primparams += [PRIM_POSITION, llGetLocalPos() * scale]; // reposition
                }
             }
             llSetPrimitiveParams(primparams);
        }
        if(str=="delete"){
            llRemoveInventory(llGetScriptName());   
        }
 
    }
}

und schon sind der AO und das Misty tool wieder die größten Lagschleudern :p
 
Angeblich gibt es bei Skripten eine versteckte Lagquelle, die bei Skripten in Attachments den TP verhindert. Und zwar dauert es einen Mono-Skript zu laden länger als einen normalen Skript. Bei vielen Skripten die in Mono kompilliert wurden hat die Sim daher ein Problem den Avatar zu laden mit seinen Attachments und TP bricht ab. oder lagt es beim Überschreiten der Simgrenzen. Ich habe leider nicht das Info zur hand die das belegt aber die Ansicht hält sich fest, also kleinere Skripte wie diese sollten in normal kompilliert werden und nicht in Mono.

Ok, weitere Anmerkung, von Daniel entdeckt: die Variable num ist initialisiert aber nicht verwendet. Habe nun korrigiert. der root.lsl Skript:
Code:
key owner;                      // var that names the owner
string dialog_message;          // the text showed in the dialog
list buttons = ["Inc 1%", "Inc 5%", "Inc 10%", "Dec 1%", "Dec 5%", "Dec 10%", "reset", "close", "delete"];     // the buttons
integer channel;                // the channel for comunication with the dialog
integer num = 1111;             // this number makes sure, that only this script resizes the children
vector size;                    // vars for primsize
vector org_size;
float scale;
string inventory;
integer lhandle;
init()                          // initialization
{
    channel = ((integer)llFrand(2147483640) * -1) - 1;            // a random channel generation. this is needed if more objects using this script
    dialog_message = "Click the Buttons to increase or decrease the Size of the Prim and its Linkset by 1, 5 or 10%. Click reset to revert to original size and close to leave the menu.";      // dialog text
    integer i;
    inventory = llGetInventoryName(INVENTORY_LANDMARK, 0);
    size = llGetScale();
    org_size = llGetScale();
    llSetScale(size);     // get original sizes
    scale = 1;
    llMessageLinked(LINK_SET, num, (string)scale, NULL_KEY);
}
reset()
{
    llSetScale(org_size);     // reset original size
    scale = 1;
    llMessageLinked(LINK_SET, num, (string)scale, NULL_KEY);
    llDialog(owner, dialog_message, buttons, channel);
}
bigger()                        // make bigger
{
    size = llGetScale();        // get size
    size = size * scale;          // add ten percent
    llSetScale(size);        // resize
    llMessageLinked(LINK_SET, num, (string)scale, NULL_KEY);
    llDialog(owner, dialog_message, buttons, channel);
    llSetTimerEvent(30);
}
smaller()                       // make smaller
{
    size = llGetScale();        // get size
    size = size * scale;          // take 10% from that
    llSetScale(size);    // resize
    llMessageLinked(LINK_SET, num, (string)scale, NULL_KEY);
    llDialog(owner, dialog_message, buttons, channel);
    llSetTimerEvent(30);
}
menudone()
{
    llListenRemove(lhandle);
    llSetTimerEvent(0);
}
default
{
    state_entry()
    {
        init();
    }

    changed(integer change)
    {
        if (change & CHANGED_OWNER)
            init();
    }
    touch_start(integer total_number)
    {
        // owner = llDetectedKey(0);        // make everyone use the script
        lhandle = llListen(channel, "", NULL_KEY, "");
        llSetTimerEvent(30);
        owner = llGetOwner();               // only owner can use it
        if (llDetectedKey(0) == owner)
            llDialog(owner, dialog_message, buttons, channel);
        else
            llGiveInventory(llDetectedKey(0), inventory);
    }

    listen(integer channel, string name, key id, string message)
    {
        if (llListFindList(buttons, [message]) != -1)  // make sure we listen only to us
        {
            // llSay(0, name + " picked the option '" + message + "'."); // write order to chat
            if (message == "reset")
                reset();
            else if (message == "Inc 1%")
            {
                scale = 1.01;
                bigger();
            }
            else if (message == "Inc 5%")
            {
                scale = 1.05;
                bigger();
            }
            else if (message == "Inc 10%")
            {
                scale = 1.1;
                bigger();
            }
            else if (message == "Dec 1%")
            {
                scale = 0.99;
                smaller();
            }
            else if (message == "Dec 5%")
            {
                scale = 0.95;
                smaller();
            }
            else if (message == "Dec 10%")
            {
                scale = 0.9;
                smaller();
            }
            else if (message == "close") {
                menudone();
            }else if (message == "delete"){
                    llMessageLinked(LINK_SET, 0, message, NULL_KEY);
                //braucht man eigentlich auch nicht mehr:
                llRemoveInventory(llGetScriptName());
            }
        }
    }

    timer()
    {
        menudone();
    }

}
LG
 
Kann das bitte jemand austesten, ich meine die erhöhte Verzögerung beim Rezzen der Objekte mit Mono-Skripten? Ich habe nämlich das Issue bei Jira gefunden die weit zurück liegt und anscheinend bestätigt ist. Und auch eine Tricklösung bestätigt, nämlich dass ein nicht-laufender Mono-Skript auf der Sim diese Verzögerung aufhebt.

[#SVC-2746] Mono Beta: Rezzing/derezzing causes much lag - Second Life Issues

Das Rezzen passiert nämlich auch beim Teleport und obwohl das ganze ist am Thema hier vorbei, evtl hilft das auch der Threaderstellerin.
 
Habs mal getestet. Also 7 scripte auf mono: ziemlich regelmäßiges piek von 1-2 ms scriptzeit beim anlegen. Die selben auf sls: beim ersten Test kein Piek nun aber das Selbe.
Nun könnte man sagen: also ist bei beiden das Selbe oder der Test ist fürn Popo ;)

aber ich habs versucht.
 
Danke Dir Gina. mag sein dass die das schon beseitigt haben aber der 'Gerücht' hällt sich hartnackig fest. Habe sogar welche attachments, die ihre Creatoren extra eine Version höher upgedatet haben um Skripte von mono auf LSL zu rekompillieren.
 

Users who are viewing this thread

Zurück
Oben Unten