string saidname = ""; integer active = 1; integer justhit = 0; vector pos1; vector pos2; vector pos3; vector pos4; vector pos5; default { state_entry() { llListen(7,"",llGetOwner(),""); llListen(7,"",llGetKey(),""); llSetTimerEvent(0.2); } collision_start(integer num_detected) { float zsubt = 1.5; vector mypos = llGetPos(); vector detpos = llDetectedPos(0); float zdiff = mypos.z - zsubt - detpos.z; vector othervel = llDetectedVel(0); float zvel = llFabs(othervel.z); if(llDetectedOwner(num_detected - 1) != llGetOwner() && (zdiff < 0 || zvel > 5) && llDetectedVel(0) != <0,0,0> && active) { llMoveToTarget(pos5 + <0,0,0.1>,0.05); justhit = 1; llSetTimerEvent(0.5); } } listen(integer channel, string name, key id, string msg) { if(msg == "halter on") { active = 1; } if(msg == "halter off") { active = 0; } if(msg == "go solid!") { llMoveToTarget(pos5 + <0,0,6>,0.05); justhit = 1; llSetTimerEvent(0.5); } string ph = llToLower(llGetSubString(msg,0,7)); if(ph == "phantom ") { saidname = llToLower(llGetSubString(msg,8,llStringLength(msg))); llSensor("",NULL_KEY,AGENT,200000,7000*PI); } } sensor(integer num_detected) { integer checknum = 0; string checkname = llToLower(llGetSubString(llDetectedName(checknum),0,llStringLength(saidname)-1)); while(checkname != saidname && checknum < num_detected - 1) { checknum += 1; checkname = llToLower(llGetSubString(llDetectedName(checknum),0,llStringLength(saidname)-1)); } if(checkname == saidname) { vector back = llRot2Fwd(llDetectedRot(checknum)) * -1; vector up = llRot2Up(llDetectedRot(checknum)); float mass = llGetMass(); llMoveToTarget(llDetectedPos(checknum) + up*3,0.05); llSleep(0.1); llMoveToTarget(llDetectedPos(checknum) + back,0.05); llSleep(0.5); llStopMoveToTarget(); } else { llOwnerSay("Avatar not detected nearby."); } } timer() { if(!justhit) { pos5 = pos4; pos4 = pos3; pos3 = pos2; pos2 = pos1; pos1 = llGetPos(); } if(justhit) { llStopMoveToTarget(); justhit = 0; llSetTimerEvent(0.2); } } link_message(integer sender,integer num, string msg,key id) { string ph = llToLower(llGetSubString(msg,0,7)); if(ph == "phantom ") { saidname = llToLower(llGetSubString(msg,8,llStringLength(msg))); llSensor("",NULL_KEY,AGENT,200000,7000*PI); } } }