| 判断是否在线并发送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();
} } }
|
|
|
|
|
|