Jump to content

Is this script laggy?


Prokofy Neva
 Share

You are about to reply to a thread that has been inactive for 2963 days.

Please take a moment to consider if this thread is worth bumping.

Recommended Posts

integer glow = TRUE;
integer bounce = FALSE; 
integer interpColor = TRUE;
integer interpSize = TRUE;     
integer wind = FALSE;
integer followSource = FALSE;
integer followVel = FALSE;

// Choose a pattern from the following:
// PSYS_SRC_PATTERN_EXPLODE
// PSYS_SRC_PATTERN_DROP
// PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY
// PSYS_SRC_PATTERN_ANGLE_CONE
// PSYS_SRC_PATTERN_ANGLE
integer pattern = PSYS_SRC_PATTERN_ANGLE_CONE;

key target =        ""; 

float age =         4;
float minSpeed =    0;
float maxSpeed =    0;
string texture =    ""; 
float startAlpha =  1; 
float endAlpha =    1;
vector startColor = <1,1,1>;
vector endColor =   <1,1,1>;
vector startSize =  <.1,.1,.02>;
vector endSize =    <.1,.1,.6>;
vector push =       <0,0,0>;


float rate =        .01;      
float radius =      .2;       
integer count =     50;   
float outerAngle =  0;  
float innerAngle =  PI;   
vector omega =      <5,5,5>;

integer flags;

updateParticles()
{
    if (target == "owner")  target = llGetOwner();
    if (target == "self")   target = llGetKey();
    if (glow)               flags = flags | PSYS_PART_EMISSIVE_MASK;
    if (bounce)             flags = flags | PSYS_PART_BOUNCE_MASK;
    if (interpColor)        flags = flags | PSYS_PART_INTERP_COLOR_MASK;
    if (interpSize)         flags = flags | PSYS_PART_INTERP_SCALE_MASK;
    if (wind)               flags = flags | PSYS_PART_WIND_MASK;
    if (followSource)       flags = flags | PSYS_PART_FOLLOW_SRC_MASK;
    if (followVel)          flags = flags | PSYS_PART_FOLLOW_VELOCITY_MASK;
    if (target != "")       flags = flags | PSYS_PART_TARGET_POS_MASK;
   
    llParticleSystem([  PSYS_PART_MAX_AGE,          age,
                        PSYS_PART_FLAGS,            flags,
                        PSYS_PART_START_COLOR,      startColor,
                        PSYS_PART_END_COLOR,        endColor,
                        PSYS_PART_START_SCALE,      startSize,
                        PSYS_PART_END_SCALE,        endSize, 
                        PSYS_SRC_PATTERN,           pattern,
                        PSYS_SRC_BURST_RATE,        rate,
                        PSYS_SRC_ACCEL,             push,
                        PSYS_SRC_BURST_PART_COUNT,  count,
                        PSYS_SRC_BURST_RADIUS,      radius,
                        PSYS_SRC_BURST_SPEED_MIN,   minSpeed,
                        PSYS_SRC_BURST_SPEED_MAX,   maxSpeed,
                        PSYS_SRC_TARGET_KEY,        target,
                        PSYS_SRC_INNERANGLE,        innerAngle, 
                        PSYS_SRC_OUTERANGLE,        outerAngle,
                        PSYS_SRC_OMEGA,             omega,
                        PSYS_SRC_TEXTURE,           texture,
                        PSYS_PART_START_ALPHA,      startAlpha,
                        PSYS_PART_END_ALPHA,        endAlpha
                            ]);
}

integer gIsOnline = FALSE;
integer gLandOwner = FALSE;
key gKey = NULL_KEY;
string gName = "";
float UPDATE_INTERVAL = 5.0; 

updateStatus(string s){
    key k = llGetLandOwnerAt(llGetPos());
    if(s=="1"){
        gIsOnline = TRUE;
    }else{
        gIsOnline = FALSE;
    }
}

key getWhom(){
    if(gKey == NULL_KEY){
        if(gLandOwner){
            return llGetLandOwnerAt(llGetPos());
        }else{
            return llGetOwner();
        }
    }else{
        return gKey;
    }
}

doUpdate(){
    llRequestAgentData(getWhom(),DATA_ONLINE);
}

updateName(){
    llRequestAgentData(getWhom(),DATA_NAME);
}

enable(){
    updateName();
    doUpdate();
    llSetTimerEvent(1);
    llWhisper(0,"Online status display enabled.");
    
}
disable(){
    llSetTimerEvent(0);
    llSetText("Display Disabled",<1,1,1>,1);
    llSetColor(<0,0,1>,ALL_SIDES);
    startColor = <0,0,1>;
    endColor = <0,0,1>;
    updateParticles();
    llWhisper(0,"Online status display disabled.");
}

default
{
    state_entry()
    {
        llListen(0, "", llGetOwner(), "");
        enable();
        llWhisper(0,"Type /ol help for a list of commands");
    }
    on_rez(integer n){
        llResetScript();
    }
    dataserver(key req, string data){
        if(data == "1" || data == "0"){
            updateStatus(data);
        }else{
            gName = data;
            llSetText("Getting online status for " + gName,<1,1,1>,1);
            //llSetColor(<0,0,1>,ALL_SIDES);
            startColor = <0,0,1>;
            endColor = <0,0,1>;
            //updateParticles();
            llSetTimerEvent(UPDATE_INTERVAL);
        }
    }
    timer(){
        doUpdate();
        if(gIsOnline){
            llSetText(gName + " is Online \n \n \n \n \n \n \n \n \n \n \n \n \n",<0,1,0>,1);
            //llSetColor(<0,1,0>,ALL_SIDES);
            startColor = <0,1,0>;
            endColor = <0,1,0>;
            //updateParticles();
        }else{
            llSetText(gName + " is Offline",<1,0,0>,1);
            //llSetColor(<1,0,0>,ALL_SIDES);
            startColor = <1,0,0>;
            endColor = <1,0,0>;
            //updateParticles();
        }
    }
    listen(integer number, string name, key id, string msg){
        if (llGetSubString(msg, 0,0) != "/"){
            return;
        }
        list argv = llParseString2List(msg, [" "], []);
        integer argc = llGetListLength(argv);
        string cmd = llToLower(llList2String(argv, 0));
        if(cmd == "/ol"){
            string arg =  llToLower(llList2String(argv, 1));
            if(arg=="on"){
                enable();
            }else if(arg=="off"){
                disable();
            }else if(arg=="land"){
                gLandOwner = TRUE;
                gKey = NULL_KEY;
                updateName();
            }else if(arg=="key"){
                gKey = llList2Key(argv,2);
                updateName();
            }else if(arg=="me"){
                gLandOwner = FALSE;
                gKey = NULL_KEY;
                updateName();
            }else if(arg=="help"){
                llWhisper(0,"/ol on - activate online status display");
                llWhisper(0,"/ol off - disable online status display");
                llWhisper(0,"/ol land - display online status for owner of this land");
                llWhisper(0,"/ol me - display your online status");
            }
        }
    }
    
}

This is an online status indicator made in 2005 by Kex Godel. I know that scripts that listen for avatars and make a call for them periodically or whatever can be very laggy but I know that there are ways scripters can reduce this, I'm just not sure if that was done here. It's a very long and busy script for what it does.

If it is laggy, are there any less laggy ones out there?

Link to comment
Share on other sites

There's nothing particularly laggy about it -- not that scripts ever lag anything except themselves or other scripts -- but I might suggest increasing the timer interval

float UPDATE_INTERVAL = 5.0; 

from 5 seconds to something significantly larger (like maybe a minute or two).  I can't see any really good reason why anyone needs to display online status with a 5 second precision.

Link to comment
Share on other sites


Prokofy Neva wrote:

float age =         4;     // Specifies the lifetime of each particle emitted, in seconds. float rate =        .01;   // Specifies the time interval, in seconds, between "bursts" of particles being emitted.      integer count =     50;    // Specifies the number of particles emitted in each "burst".

 

The script isn't laggy really. Particles though yeah, that's pretty bad if you uncomment them. Should you do that then reduce the 50 to 5 or even 2. Also increase the 0.01 to hmm 0.1 You dont need 100 bursts a second, 10 bursts a second of 2 particles should be more than fine.

 

As the script is written then: 100 times a second 50 particles are emitted that will last 4 seconds each. 20,000 particles.

 

General question, why does nobody ever count particles? They do affect people with slower computers, and if you are maxing out the little buggers like those numbers are then there is a delay before and new ones get drawn. 

A certain well respected builder's laggy mesh and particle waterfalls come to mind as an example.

Link to comment
Share on other sites

In addition to Rolig's suggestion about using a longer timer, I'd suggest listening on a channel other that 0.

Otherwise, every time the owner says something in chat on that region, the simulator has to decide if the object is in range to hear it, and then, if the object can hear you, the script has to decide whether it needs to do anything about the message.

So if I were re-writing the script, I'd change the first line in state_entry to llListen(5,"",llGetOwner(),"") or something simillar.

Link to comment
Share on other sites

You are about to reply to a thread that has been inactive for 2963 days.

Please take a moment to consider if this thread is worth bumping.

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
 Share

×
×
  • Create New...