psys_prewarp() { llParticleSystem([PSYS_SRC_PATTERN,PSYS_SRC_PATTERN_EXPLODE, PSYS_PART_MAX_AGE, 1.0, PSYS_SRC_BURST_PART_COUNT, 20, PSYS_PART_FLAGS,PSYS_PART_EMISSIVE_MASK | PSYS_PART_INTERP_COLOR_MASK | PSYS_PART_INTERP_SCALE_MASK, //PSYS_PART_TARGET_POS_MASK | //PSYS_PART_FOLLOW_VELOCITY_MASK, //PSYS_PART_FOLLOW_SRC_MASK, PSYS_PART_START_ALPHA, 0.0, PSYS_PART_END_ALPHA, 1.0, PSYS_PART_START_COLOR, <1,1,1>, PSYS_PART_END_COLOR, <1,1,1>, //PSYS_SRC_TARGET_KEY, llGetKey(), PSYS_SRC_ACCEL, <0,0,0>, PSYS_PART_START_SCALE, <0.7,2.5,0.7>, PSYS_PART_END_SCALE, <.05,4.5,.05>, PSYS_SRC_BURST_SPEED_MIN, 0.0, PSYS_SRC_BURST_SPEED_MAX, 0.2, //PSYS_SRC_OMEGA, <0,0,0>, PSYS_SRC_ANGLE_BEGIN, PI/2, PSYS_SRC_ANGLE_END, PI/2, //PSYS_SRC_INNERANGLE, 0.0, //PSYS_SRC_OUTERANGLE, PI/4, PSYS_SRC_BURST_RADIUS, 1.0, PSYS_SRC_BURST_RATE, 0.1 ]); } warpPos(vector pos) { list move; integer i; for (i = 0; i < llAbs((integer)(llVecDist(llGetPos(), pos) / 10)) + 1; i++) { move = (move = []) + move + [PRIM_POSITION, pos]; } llSetPrimitiveParams(move); } cwarpPos(vector cpos) { while(llVecDist(llGetPos(),cpos) > 0.5) { warpPos(cpos); llSleep(0.3); } } partslevel(string msg) { if(plevel != msg) { llRegionSay(6070,msg); //llOwnerSay(msg); if(msg == "Level 3" || (key)msg == curlpoint || (msg == "Level 1" && (plevel == "Normal" || plevel == "Level 3"))) psys_prewarp(); else llParticleSystem([]); plevel = msg; } } list lpoints = []; list lstatii = []; list lkeys = []; list hidden = []; vector origin; vector spinit = ZERO_VECTOR; float upit = 0; float inalph = 0; float outalph = 0; float abvorign = 0; integer start; integer warpzone = 0; string plevel = "Normal"; key target = NULL_KEY; key sitter = NULL_KEY; key parent = NULL_KEY; key curlpoint = NULL_KEY; default { on_rez(integer a) { start = a; origin = llGetPos(); //llSetObjectDesc((string)a+"_"+(string)origin); //llResetScript(); lpoints = []; lkeys = []; lstatii = []; hidden = []; } state_entry() { llListen(6070,"LHg Liftpoint",NULL_KEY,""); llSitTarget(<0,0,-0.2>,ZERO_ROTATION); llSetClickAction(CLICK_ACTION_NONE); if(start <= 0) { llSetClickAction(CLICK_ACTION_SIT); target = llGetOwner(); llSetTimerEvent(0.01); } } listen(integer chan, string name, key id, string msg) { key mkey = (key)llGetSubString(msg,0,35); string mid = llGetSubString(msg,36,38); string tmsg = llGetSubString(msg,39,llStringLength(msg)-1); if(mid == "res" && id != target) { integer lindex = llListFindList(lpoints,[tmsg]); if(lindex == -1) { lpoints += [tmsg]; lkeys += [id]; if(mkey == NULL_KEY) { lstatii += [0]; if(id == parent && !warpzone && id == curlpoint && (plevel == "Normal" || plevel == "Warmup")) llDie(); } else lstatii += [1]; if(mkey != NULL_KEY && warpzone) llMessageLinked(LINK_SET,0,"New liftpoint \""+tmsg+"\" discovered. It is ready to process.",target); else if(warpzone) llMessageLinked(LINK_SET,0,"New liftpoint \""+tmsg+"\" discovered. It is currently processing.",target); } else if(llList2Integer(lstatii,lindex) != (mkey != NULL_KEY)) { llListReplaceList(lstatii,[(mkey != NULL_KEY)],lindex,lindex); if(mkey == NULL_KEY && id == parent && !warpzone && id == curlpoint && (plevel == "Normal" || plevel == "Warmup")) llDie(); if(mkey != NULL_KEY && warpzone) llMessageLinked(LINK_SET,0,"The liftpoint \""+tmsg+"\" finished its process.",target); else if(warpzone) llMessageLinked(LINK_SET,0,"The liftpoint \""+tmsg+"\" began a new process.",target); } } else if(mid == "hrs" && id != target) //For hidden lpoints { integer lindex = llListFindList(lpoints,[tmsg]); if(lindex == -1) { lpoints += [tmsg]; lkeys += [id]; hidden += [tmsg]; if(mkey == NULL_KEY) { lstatii += [0]; if(id == parent && !warpzone && id == curlpoint && (plevel == "Normal" || plevel == "Warmup")) llDie(); } else lstatii += [1]; } else if(llList2Integer(lstatii,lindex) != (mkey != NULL_KEY)) { llListReplaceList(lstatii,[(mkey != NULL_KEY)],lindex,lindex); if(mkey == NULL_KEY && id == parent && !warpzone && id == curlpoint && (plevel == "Normal" || plevel == "Warmup")) llDie(); } } else if(mid == "trg" && NULL_KEY == target && mkey == llGetKey()) { target = (key)tmsg; parent = id; curlpoint = id; llListen(0,"",target,""); llListen(7,"",target,""); llListen(9,"",target,""); llSetClickAction(CLICK_ACTION_SIT); vector size = llGetAgentSize(target); llSetLinkPrimitiveParams(LINK_THIS,[PRIM_SIZE,size+<1.2,1.2,1.2>]); llSetTimerEvent(0.01); } else if(id == target && warpzone) { integer i; integer lpnt = -1; for(i = 0; i < llGetListLength(lpoints) && lpnt == -1; i++) { list ldets = llGetObjectDetails(llList2Key(lkeys,i),[OBJECT_POS]); string ltest = llGetSubString(llToLower(llList2String(lpoints,i)),0,llStringLength(msg)-1); if(ldets == []) { llListReplaceList(lpoints,[],i,i); llListReplaceList(lkeys,[],i,i); llListReplaceList(lstatii,[],i,i); i--; } else if(llToLower(msg) == ltest) { if(llList2Integer(lstatii,i)) lpnt = i; else llMessageLinked(LINK_SET,0,"This liftpoint is presently processing.",target); } } if(lpnt > -1) { curlpoint = llList2Key(lkeys,lpnt); list ldets = llGetObjectDetails(curlpoint,[OBJECT_POS]); vector curlpos = llList2Vector(ldets,0); warpzone = 0; llMessageLinked(LINK_SET,0,"Finalizing transfer...",target); partslevel((string)curlpoint); llSleep(0.4); llSetLinkAlpha(LINK_ALL_OTHERS,0,ALL_SIDES); llSetLinkPrimitiveParams(LINK_ALL_OTHERS,[PRIM_SIZE,<.4,.4,.4>]); cwarpPos(curlpos+<0,0,abvorign>); partslevel("Level 3"); llSleep(0.4); while(outalph > 0 || inalph > 0) { if(inalph > 0) { inalph -= 0.036; llSetLinkAlpha(LINK_THIS,inalph,1); } if(outalph > 0) { outalph -= 0.042; llSetLinkAlpha(LINK_THIS,outalph,0); } spinit = <0,0,spinit.z-(PI/3)>; if(inalph > 0.6) upit -= 0.190; if(upit < 0) upit = 0; if(outalph <= 0.75 && outalph > 0.5) partslevel("Level 2"); else if(outalph <= 0.5 && outalph > 0.2) partslevel("Level 1"); else if(outalph <= 0.2) partslevel("Warmup"); llSetPrimitiveParams([PRIM_ROTATION,llEuler2Rot(spinit),PRIM_POSITION,llGetPos()-<0,0,upit>]); } partslevel("Normal"); llSetLinkAlpha(LINK_THIS,0,ALL_SIDES); llDie(); } } } timer() { vector pos; list dets = llGetObjectDetails(target,[OBJECT_POS,OBJECT_ROT]); if(target != sitter || NULL_KEY == sitter) llSetPos(llList2Vector(dets,0)); llSetRot(llList2Rot(dets,1)); pos = llGetPos(); if((llVecDist(pos,origin) > 2 || ((llGetAgentInfo(target) & AGENT_IN_AIR) && NULL_KEY != target)) && start > 0) llDie(); if((llGetAgentInfo(sitter) & AGENT_MOUSELOOK) && NULL_KEY != sitter && target == sitter && !warpzone) { llSetRot(ZERO_ROTATION); if(start <= 0) llSetPos(llGetPos()+<0,0,0.34>); else llSetPos(origin); partslevel("Level 1"); while(outalph < 1 || inalph < 1) { if(inalph < 1) { inalph += 0.036; llSetLinkAlpha(LINK_THIS,inalph,1); } if(outalph < 1) { outalph += 0.032; llSetLinkAlpha(LINK_THIS,outalph,0); } spinit = <0,0,spinit.z-(PI/3)>; if(outalph > 0.7) upit += 0.2; if(outalph >= 0.25 && outalph < 0.6) partslevel("Level 2"); else if(outalph >= 0.6 && outalph < 0.95) partslevel("Level 3"); else if(outalph >= 0.95) partslevel("Level 1"); llSetPrimitiveParams([PRIM_ROTATION,llEuler2Rot(spinit),PRIM_POSITION,llGetPos()+<0,0,upit>]); } llSleep(1); pos = llGetPos(); abvorign = llFabs(pos.z-origin.z); partslevel("Normal"); if(start > 0) cwarpPos(); llSetLinkAlpha(LINK_ALL_OTHERS,1,ALL_SIDES); llSetLinkPrimitiveParams(LINK_ALL_OTHERS,[PRIM_SIZE,<10,10,10>]); warpzone = 1; string lifts = ""; integer i; for(i = 0; i < llGetListLength(lpoints); i++) { list ldets = llGetObjectDetails(llList2Key(lkeys,i),[OBJECT_POS]); if(ldets == []) { llListReplaceList(lpoints,[],i,i); llListReplaceList(lkeys,[],i,i); llListReplaceList(lstatii,[],i,i); i--; } else { if(llListFindList(hidden,[llList2String(lpoints,i)]) == -1) { lifts += llList2String(lpoints,i); if(llList2Key(lkeys,i) == parent) lifts += "[Origin]"; if(!llList2Integer(lstatii,i)) lifts += "(Processing)"; if(i != llGetListLength(lpoints)-1) lifts += ", "; } } } llMessageLinked(LINK_SET,0,"Select: "+lifts,target); //Comment out everything from here on for final ver. /*llSleep(5); if(start > 0) partslevel((string)parent); else partslevel("Level 1"); llSleep(0.4); warpzone = 0; llSetLinkAlpha(LINK_ALL_OTHERS,0,ALL_SIDES); llSetLinkPrimitiveParams(LINK_ALL_OTHERS,[PRIM_SIZE,<.4,.4,.4>]); if(start > 0) warpPos(origin+<0,0,abvorign>); else llSleep(0.2); partslevel("Level 3"); llSleep(0.4); while(outalph > 0 || inalph > 0) { if(inalph > 0) { inalph -= 0.036; llSetLinkAlpha(LINK_THIS,inalph,1); } if(outalph > 0) { outalph -= 0.042; llSetLinkAlpha(LINK_THIS,outalph,0); } spinit = <0,0,spinit.z-(PI/3)>; if(inalph > 0.6) upit -= 0.190; if(upit < 0) upit = 0; if(outalph <= 0.75 && outalph > 0.5) partslevel("Level 2"); else if(outalph <= 0.5 && outalph > 0.2) partslevel("Level 1"); else if(outalph <= 0.2) partslevel("Warmup"); llSetPrimitiveParams([PRIM_ROTATION,llEuler2Rot(spinit),PRIM_POSITION,llGetPos()-<0,0,upit>]); } partslevel("Normal"); llSetLinkAlpha(LINK_THIS,0,ALL_SIDES); upit = 0; inalph = 0; outalph = 0; spinit = ZERO_VECTOR; llUnSit(sitter); sitter = NULL_KEY; if(start > 0) llDie(); else llSetClickAction(CLICK_ACTION_SIT);*/ //End final ver. comment-out here ^^^ } } changed(integer change) { if(change & CHANGED_LINK) { sitter = llAvatarOnSitTarget(); if(NULL_KEY != sitter && sitter == target) { llRequestPermissions(sitter,PERMISSION_TRIGGER_ANIMATION); } else if(NULL_KEY != sitter && sitter != target) llUnSit(sitter); else if(start > 0) { warpPos(origin+<0,0,5>); llSleep(0.5); llStopAnimation("VanceStandII"); partslevel("Normal"); llDie(); } else { partslevel("Normal"); llSetClickAction(CLICK_ACTION_SIT); } } } run_time_permissions(integer perm) { if(perm & PERMISSION_TRIGGER_ANIMATION) { partslevel("Warmup"); llSetClickAction(CLICK_ACTION_NONE); llMessageLinked(LINK_SET,0,"When you are ready to teleport, please enter mouselook.",sitter); list anims = llGetAnimationList(target); integer i; for(i = 0; i < llGetListLength(anims); i++) { llStopAnimation(llList2String(anims,i)); } llStartAnimation("VanceStandII"); } else { llUnSit(sitter); } } }