vector opos; vector kpos; vector toward; vector midpoint; list olist; float dist; float vdiff; float sdist; float radius; getpositions() { olist = llGetObjectDetails(llGetOwner(),[OBJECT_POS]); opos = llList2Vector(olist,0); olist = llGetObjectDetails("a7aff894-4e13-48a3-a53b-b68beb0f420d",[OBJECT_POS]); kpos = llList2Vector(olist,0); vector spos = llGetPos(); toward = llVecNorm( - ); dist = llVecDist(,); vdiff = kpos.z-opos.z; sdist = llVecDist(,); midpoint = opos + (toward*(dist/2)); radius = dist/2; } default { state_entry() { getpositions(); float angle = 0.8*DEG_TO_RAD; float anglerate = 0.8*DEG_TO_RAD; vector curpos = ; llMoveToTarget(midpoint+curpos,0.1); while(1) { getpositions(); curpos = <(llSin(angle)*radius),(llCos(angle)*radius),0>; llMoveToTarget(midpoint+curpos+<0,0,(1-(sdist/dist))*vdiff>,0.1); angle += anglerate; if(angle >= 2*PI) angle = 0; } } }