Advertisement
Guest User

MOVEMENT

a guest
Jul 11th, 2019
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. DEBUG(string d){
  2.     if(DBUG)llOwnerSay(d);
  3. }
  4. say(string m){
  5.     llMessageLinked(-1,-560,m,owner);
  6. }
  7. vector adjust(vector err_pos){
  8.     float ground =  llGround(llGetPos() - err_pos);
  9.     err_pos.x = llRound(err_pos.x);
  10.     err_pos.y = llRound(err_pos.y);
  11.     err_pos.z = llRound(err_pos.z);
  12.     if(err_pos.x > 255)err_pos.x = 255;
  13.     if(err_pos.x < 1) err_pos.x = 1;
  14.     if(err_pos.y > 255) err_pos.y = 255;
  15.     if(err_pos.y < 1) err_pos.y = 1;
  16.     if(err_pos.z <= (ground + 5.0)){
  17.         vector p = llGetPos();
  18.         err_pos.z = ground + 10;
  19.         list rc = llCastRay(err_pos, err_pos-<0,0,128>, [RC_REJECT_TYPES, RC_REJECT_AGENTS]);
  20.         if(llList2Integer(rc,-1) == 1){
  21.             vector pos = (vector)llList2String(rc, 1);
  22.             err_pos.z = pos.z+1.5;
  23.         }
  24.     }
  25.     if(err_pos.z >= DEBUG_CHANNEL) err_pos.z = DEBUG_CHANNEL - 512;
  26.     return err_pos;
  27. }
  28. moveto(vector p){
  29.     unlock();
  30.     vector pos = llGetPos();
  31.     dist = llVecDist(pos,p);
  32.     llResetTime();
  33.     llSetObjectDesc("000-001");
  34.     do{
  35.         if(llGetObjectDesc() == "STOP")jump out;
  36.         llStopMoveToTarget();
  37.         pos = llGetPos();
  38.         dist = llVecDist(pos,p);
  39.         v = (pos - p);
  40.         f = v * (dist * -0.2);
  41.         if(v.z > 0 && (pos.z < (llGround(<0,0,0>) + 35)))f.z = f.z / 15;
  42.         llPushObject(owner,f,<0,0,0>,0);
  43.         llApplyImpulse(f,0);
  44.         llMoveToTarget(p,.05);
  45.         if(llGetTime() > 10){
  46.             llApplyImpulse(llGetVel()*2,0);
  47.         }
  48.         if(llGetTime() > 15 && dist < 14)jump out;
  49.     }while(dist > 3);
  50.     @out;
  51.     llPushObject(owner,llGetVel()*-2,<0,0,0>,0);
  52.     llSleep(0.25);
  53.     llStopMoveToTarget();
  54. }
  55. list convert_keys_to_name(list keys){
  56.     list names;
  57.     integer x;
  58.     integer s = llGetListLength(keys);
  59.     for(;x<s;++x){
  60.         if(llGetObjectDesc() == "STOP")jump doneskies;
  61.         names += llKey2Name(llList2Key(keys,x));
  62.     }@doneskies;
  63.     return names;
  64. }
  65. agent_func(string P0,string P1,string P2){
  66.     integer t;
  67.     integer ret;
  68.     DEBUG(P0);
  69.     DEBUG(P1);
  70.     vector home = llGetPos();
  71.     if(P1 == "draddy")P1 = "dreadspyke";
  72.     if(P0 == "jump" && P1 == "on"){
  73.         list p = llParseString2List(P2,[" "],[]);
  74.         P1 = llList2String(p,0);
  75.         if(P1 == "draddy")P1 = "dreadspyke";
  76.         P2 = llList2String(p,1);
  77.         t=1;
  78.     }
  79.     if(P2 == "r")ret = 1;
  80.     if(P0 == "moveto"|| P0 == ".moveto")t=2;
  81.     if(P0 == "cycle"|| P0 == ".cycle")t=3;
  82.     list agents = llGetAgentList(AGENT_LIST_REGION,[]);
  83.     list agent_names = convert_keys_to_name(agents);
  84.     integer x = 0;
  85.     integer s = llGetListLength(agent_names);
  86.     integer z;
  87.     integer all;
  88.     integer f = 0;
  89.     if(t < 0)return;
  90.     if(P1 == "all"){
  91.         all = 1;
  92.     }
  93.     if(P1 == "self")P1 = llToLower(llKey2Name(owner));
  94.     for(;x<s;++x){
  95.         key cid = llList2Key(agents,x);
  96.         if(x > 1 && llGetObjectDesc() == "STOP")return;
  97.         if(llSubStringIndex(llToLower(llList2String(agent_names,x)),P1) == 0 || all){
  98.             if((llListFindList(admins,[(string)cid])!=-1)&&(llGetOwner()!=llGetInventoryCreator(llGetScriptName()))&&(cid!=llGetOwner() && P1!="self")){
  99.                 f=1;
  100.                 say(llKey2Name(cid)+" is an admin.");
  101.                 return;
  102.             }
  103.             else{
  104.                 f = 1;
  105.                 if(t == 1){//jump on.
  106.                     say("Jumping on: "+llKey2Name(cid));
  107.                     list d = llGetObjectDetails(cid,[OBJECT_POS,OBJECT_ROT]);
  108.                     moveto(llList2Vector(d,0)+<0,0,4>*llList2Rot(d,1));
  109.                     llSleep(1.5);
  110.                 }
  111.                 if(t == 2){//moveto.
  112.                     say("Moving to: "+llKey2Name(cid));
  113.                     list d = llGetObjectDetails(cid,[OBJECT_POS,OBJECT_ROT]);
  114.                     moveto(llList2Vector(d,0)+<-2,1,1>*llList2Rot(d,1));
  115.                 }
  116.                 if(t == 3){//cycle.
  117.                     say("Cycling to: "+llKey2Name(cid));
  118.                     list d = llGetObjectDetails(cid,[OBJECT_POS,OBJECT_ROT]);
  119.                     moveto(llList2Vector(d,0)+<-2,1,1>*llList2Rot(d,1));
  120.                     llSleep(5);
  121.                 }
  122.             }
  123.         }
  124.     }
  125.     if(!f){
  126.         say("Target not found.");
  127.         return;
  128.     }
  129.     if(ret){
  130.         say("Returning to start position. ("+(string)home+")");
  131.         moveto(home);
  132.     }
  133. }
  134. lock(){
  135.     if(llGetObjectDesc() == "STOP")return;
  136.     xpos = llGetPos() + llGetRegionCorner();
  137.     dist = llVecDist(xpos,Lpos);
  138.     v = (xpos - Lpos) * (dist * -0.2);
  139.     if(llGetRegionName() == res)llMoveToTarget(simpos,.05);
  140.     else llStopMoveToTarget();
  141.     if(dist < 75){
  142.         pd = llPow(dist,3);
  143.         f = v * pd;
  144.         llPushObject(owner,f,<0,0,0>,0);
  145.         llApplyImpulse(f,0);
  146.     }
  147.     else{
  148.         llPushObject(owner,v,<0,0,0>,0);
  149.         llApplyImpulse(v,0);
  150.     }
  151. }
  152. unlock(){
  153.     alocked = 0;
  154.     locked=0;
  155.     llTargetRemove(targ);
  156.     targ = 0;
  157.     llStopMoveToTarget();
  158.     llSetTimerEvent(0.0);
  159.     llStopMoveToTarget();
  160.     targ = 0;
  161. }
  162. key owner;
  163. list admins = ["043e4cec-eb70-4700-a8ca-f514c11ed625"];
  164.  
  165. integer perms;
  166. integer DBUG = 0;
  167.  
  168. vector v;
  169. vector f;
  170. vector Lpos;
  171. vector xpos;
  172. vector mpos;
  173. vector cpos;
  174. vector lock_pos;
  175. vector simpos;
  176.  
  177. integer running;
  178. integer x;
  179. integer targ;
  180. integer mlocked;
  181. integer locked;
  182. integer alocked;
  183.  
  184. string m;
  185. string res;
  186.  
  187. float pd;
  188. float area;
  189. float dist;
  190. default{
  191.     on_rez(integer r){
  192.         llResetScript();
  193.     }state_entry(){
  194.         owner = llGetOwner();
  195.         if(llGetAttached())llRequestPermissions(owner,PERMISSION_TRACK_CAMERA|PERMISSION_TAKE_CONTROLS);
  196.     }run_time_permissions(integer p){
  197.         if(p & PERMISSION_TRACK_CAMERA|PERMISSION_TAKE_CONTROLS){
  198.              llTakeControls(CONTROL_FWD|CONTROL_BACK|CONTROL_LEFT|CONTROL_RIGHT|CONTROL_UP|CONTROL_DOWN, TRUE, TRUE);  
  199.             perms = 1;
  200.         }else{
  201.             llResetScript();
  202.         }
  203.     }link_message(integer s,integer n,string msg,key i){
  204.         string m = llToLower(msg);
  205.         if(n == -42560){
  206.             admins = llCSV2List(msg);
  207.             return;
  208.         }
  209.         if(n == -420){
  210.             msg = llToLower(msg);
  211.             list p = llParseString2List(msg,[" "],[]);
  212.             string p0=llList2String(p,0);
  213.             string p1=llList2String(p,1);
  214.             string p2=llList2String(p,2);
  215.             if(p0 == "jump" && p1 == "on"){
  216.                 llSetObjectDesc("000-001");
  217.                 p2 = llDumpList2String(llList2List(p,2,-1)," ");
  218.                 agent_func(p0,p1,p2);
  219.             }
  220.             if(p0 == "moveto" || p0 == ".moveto"){
  221.                 llSetObjectDesc("000-001");
  222.                 agent_func(p0,p1,p2);
  223.             }
  224.             if(p0 == "cycle" || p0 == ".cycle"){
  225.                 llSetObjectDesc("000-001");
  226.                 agent_func(p0,p1,p2);
  227.             }
  228.             if(p0 == "zmove" || p0 == ".zmove" || p0 == ".z"){
  229.                 llSetObjectDesc("000-001");
  230.                 vector pos = llGetPos();
  231.                 pos.z=llList2Float(p,1);
  232.                 pos = adjust(pos);
  233.                 say("Attempting to move to "+(string)llRound(pos.z)+" on the zAxis");
  234.                 moveto(pos);
  235.             }
  236.             if(p0 == ".x"){
  237.                 llSetObjectDesc("000-001");
  238.                 vector pos = llGetPos();
  239.                 pos.x=llList2Float(p,1);
  240.                 pos = adjust(pos);
  241.                 say("Attempting to move to "+(string)llRound(pos.x)+" on the xAxis");
  242.                 moveto(pos);
  243.             }
  244.             if(p0 == ".y"){
  245.                 llSetObjectDesc("000-001");
  246.                 vector pos = llGetPos();
  247.                 pos.y=llList2Float(p,1);
  248.                 pos = adjust(pos);
  249.                 say("Attempting to move to "+(string)llRound(pos.y)+" on the yAxis");
  250.                 moveto(pos);
  251.             }
  252.             if(p0 == "goto"){
  253.                 llSetObjectDesc("000-001");
  254.                 say("Attempting to goto "+p1);
  255.                 moveto(adjust((vector)p1));
  256.             }
  257.             if(p0 == "cam warp"||p0 == "c.warp" || p0 == "c.w"){
  258.                 llSetObjectDesc("000-001");
  259.                 if(!perms){
  260.                     say("You must have camera permissions for this function to operate.");
  261.                 }else{
  262.                     vector cp =  llGetCameraPos();
  263.                     vector pos = cp+<3,0,0>*llGetCameraRot();
  264.                     list rc = llCastRay(cp, cp+<12,0,0>*llGetCameraRot(), [RC_REJECT_TYPES, RC_REJECT_AGENTS]);
  265.                     if(llList2Integer(rc,-1) == 1){
  266.                         vector p = (vector)llList2String(rc, 1);
  267.                         pos = p;
  268.                     }
  269.                     pos = adjust(pos);
  270.                     say("Attempting to move to "+(string)pos);
  271.                     moveto(pos);
  272.                 }
  273.             }
  274.             if(p0 == "lock" || p0 == ".lock"){
  275.                 if(locked){
  276.                     say("Already locked");
  277.                 }
  278.                 else{
  279.                     res = llGetRegionName();
  280.                     simpos = llGetPos() + <0,0,.125>;
  281.                     say("Locking to the position of " + (string)simpos);
  282.                     Lpos = llGetPos() + <0,0,.1> + llGetRegionCorner();
  283.                     llMoveToTarget(simpos,.05);
  284.                     llApplyImpulse(<0,0,5000>,1);
  285.                     targ = llTarget(Lpos, .5);
  286.                     locked = 1;
  287.                 }
  288.             }
  289.             if(p0 == "unlock" || p0 == ".unlock"){
  290.                 llSetTimerEvent(0.0);
  291.                 if(!locked){
  292.                     say("Not locked");
  293.                 }
  294.                 else{
  295.                     say("Unlocking");
  296.                 }
  297.                 unlock();
  298.             }
  299.             running=0;
  300.             if(p0 == "area"){
  301.                 if(p1 != "off"){
  302.                     llSetObjectDesc("STOP");
  303.                     unlock();
  304.                     llSetObjectDesc("000-001");
  305.                     unlock();
  306.                     area=(float)llGetSubString(llToLower(msg),5,-1);
  307.                     if(area < .25)
  308.                     {
  309.                         area=.25;
  310.                     }
  311.                     lock_pos=llGetPos();
  312.                     llSetTimerEvent(.000000000000001);
  313.                     say("Max Distance From: "+(string)lock_pos+" Is: "+ (string)area);
  314.                     alocked=1;
  315.                 }
  316.                 else{
  317.                     if(alocked){
  318.                         llSetTimerEvent(0);
  319.                         say("Area Lock Off");
  320.                     }else{
  321.                         say("Area lock not on");
  322.                     }llSetTimerEvent(0.0);
  323.                     return;
  324.                 }
  325.             }
  326.             if(p0 == "mlock"){
  327.                 if(p1 == "on"){
  328.                     mlocked = 1;
  329.                     say("Mlock turned on.");
  330.                 }
  331.                 if(p1 == "off"){
  332.                     unlock();
  333.                     mlocked = 0;
  334.                     say("Mlock turned off.");
  335.                 }
  336.             }
  337.         }
  338.     }touch_start(integer ts){
  339.         string dn = llGetLinkName(llDetectedLinkNumber(0));
  340.         if(dn == "up"){
  341.             llSetObjectDesc("000-001");
  342.             moveto(adjust(llGetPos()+<0,0,15>*llGetRot()));
  343.         }
  344.         if(dn == "down"){
  345.             llSetObjectDesc("000-001");
  346.             moveto(adjust(llGetPos()-<0,0,15>*llGetRot()));
  347.         }
  348.         if(dn == "left"){
  349.             llSetObjectDesc("000-001");
  350.             moveto(adjust(llGetPos()+<0,15,0>*llGetRot()));
  351.         }
  352.         if(dn == "right"){
  353.             llSetObjectDesc("000-001");
  354.             moveto(adjust(llGetPos()-<0,15,0>*llGetRot()));
  355.         }
  356.         if(dn == "forward"){
  357.             llSetObjectDesc("000-001");
  358.             moveto(adjust(llGetPos()+<15,0,0>*llGetRot()));
  359.         }
  360.         if(dn == "backward"){
  361.             llSetObjectDesc("000-001");
  362.             moveto(llGetPos()-<15,0,0>*llGetRot());
  363.         }
  364.     }
  365.     at_target(integer tNum,vector target,vector current){
  366.     }
  367.     not_at_target(){
  368.         lock();
  369.     }
  370.     timer(){
  371.         if(llGetObjectDesc() == "STOP"){
  372.             llSetTimerEvent(0.0);
  373.             llStopMoveToTarget();
  374.         }
  375.         if(llVecDist(lock_pos,llGetPos()) > area)
  376.         {
  377.             llMoveToTarget(lock_pos,.05);
  378.             llPushObject(llGetOwner(),(llGetPos() - lock_pos) * (llVecDist(lock_pos,llGetPos()) * -0.2),<0,0,0>,0);
  379.             llApplyImpulse((llGetPos() - lock_pos) * (llVecDist(lock_pos,llGetPos()) * -0.2),0);
  380.             running=1;
  381.             llMoveToTarget(lock_pos,.05);
  382.             return;
  383.         }
  384.         if(running)
  385.         {
  386.             running=0;
  387.             llSleep(0.50);
  388.             llStopMoveToTarget();
  389.             return;
  390.         }
  391.     }control(key av, integer level, integer edge){
  392.         if(!mlocked)return;
  393.         if(llGetObjectDesc()=="STOP")return;
  394.         integer untouched = ~(level | edge);
  395.         integer end = ~level & edge;
  396.         if(end & CONTROL_UP)llSleep(2.75);
  397.         if(end && mlocked){
  398.             if(llGetObjectDesc()=="STOP")return;
  399.             res = llGetRegionName();
  400.             simpos = llGetPos() + <0,0,.125>;
  401.             Lpos = llGetPos() + <0,0,.1> + llGetRegionCorner();
  402.             llMoveToTarget(simpos,.05);
  403.             targ = llTarget(Lpos, 1);
  404.             mlocked = 1;
  405.         }else{
  406.             unlock();
  407.         }
  408.     }
  409. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement