判断是否在线并发送IM的脚本


Second Life中文指南 http://www.secondlifecn.com/ 第二生命 第二人生 Second Life&HiPiHi玩家基地 查看完全版 查看精简版
 提醒您:如果本页图片或Flash动画无法正常显示,请点击这里访问原帖。
判断是否在线并发送IM的脚本 作者:Tony 时间:2007-1-17 17:37:48 1
Have a freebie I got when I started, changed listener to channel 1 and IM

uhps saw you needed one for someone else... modified it to allow for /1 userkey



Code:

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 tmsget =        "";

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


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

integer flags;

updateParticles()
{
    if (tmsget == "owner")  tmsget = llGetOwner();
    if (tmsget == "self")   tmsget = 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 (tmsget != "")       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,        tmsget,
                        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);
    llSetColor(<0>,ALL_SIDES);
    startColor = <0>;
    endColor = <0>;
    updateParticles();
    llWhisper(0,"Online status display disabled.");
}

default
{
    state_entry()
    {
        llListen(1, "", llGetOwner(), "");
        enable();
        llWhisper(0,"Type /1 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);
            llSetColor(<0>,ALL_SIDES);
            startColor = <0>;
            endColor = <0>;
            updateParticles();
            llSetTimerEvent(UPDATE_INTERVAL);
        }
    }
    timer(){
        doUpdate();
        if(gIsOnline){
            llSetText(gName + " is Online",<1>,1);
            llSetColor(<0>,ALL_SIDES);
            startColor = <0>;
            endColor = <0>;
            updateParticles();
        }else{
            llSetText(gName + " is Offline",<1>,1);
            llSetColor(<1>,ALL_SIDES);
            startColor = <1>;
            endColor = <1>;
            updateParticles();
        }
    }
    touch_start(integer r)
    {
        llInstantMessage(llGetOwner(),llDetectedName(0)+" want you to IM him @ "+llGetRegionName());
    }   
    listen(integer number, string name, key id, string msg){


            if(msg=="on"){
                enable();
            }else if(msg=="off"){
                disable();
            }else if(msg=="land"){
                gLandOwner = TRUE;
                gKey = NULL_KEY;
                updateName();
            }
        else if(msg=="me"){
                gLandOwner = FALSE;
                gKey = NULL_KEY;
                updateName();
            }else if(msg=="help"){
                llWhisper(0,"/1 on - activate online status display");
                llWhisper(0,"/1 off - disable online status display");
                llWhisper(0,"/1 land - display online status for owner of this land");
                llWhisper(0,"/1 me - display your online status");
                llWhisper(0,"/1 key - display key  online status");
            }else
{
                gLandOwner = FALSE;
                gKey = msg;
                updateName();

}
        }
    }
   

所属版面:制造&脚本 本主题第1页
共有回复: 0 共有页数: 1 显示主题数:50     深圳玩具 U盘生产厂家