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); } } sensor(integer num_detected) { if(num_detected > 0) { vector back = llRot2Fwd(llDetectedRot(0)) * -1; vector up = llRot2Up(llDetectedRot(0)); float mass = llGetMass(); llMoveToTarget(llDetectedPos(0) + up*3,0.05); llSleep(0.1); llMoveToTarget(llDetectedPos(0) + 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) { if(num == 0) { llSensor("",id,AGENT,200000,7000*PI); } } }