Advertisement
Gamer_Z

AutoPilot dbg

Nov 18th, 2011
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 6.88 KB | None | 0 0
  1. #include <a_samp>
  2. #include <RouteConnector>
  3. ////////////////////////////////////////////////////////////////////////////////
  4. new id[MAX_PLAYERS] = {-1,...};
  5. new CurrTarget[MAX_PLAYERS] = {0,...};
  6. new Timer[MAX_PLAYERS] = {-1,...};
  7. new interval = 75;
  8. new string[128];
  9. new Float:pos[2][3];
  10. ////////////////////////////////////////////////////////////////////////////////
  11. public OnPlayerCommandText(playerid,cmdtext[])
  12. {
  13.     if(!strcmp(cmdtext,"/car",true))
  14.     {
  15.         new Float:V[4];
  16.         GetPlayerPos(playerid,V[0],V[1],V[2]);
  17.         CreateVehicle(562,V[0],V[1],V[2],0.0,-1,-1,9999999);
  18.         return 1;
  19.     }
  20.     if(!strcmp(cmdtext,"/ap",true))
  21.     {
  22.         if(id[playerid] == -1)
  23.         CalculatePath(23833,16734,playerid);
  24.         return 1;
  25.     }
  26.     if(!strcmp(cmdtext,"/debug",true))
  27.     {
  28.         if(id[playerid] == -1)
  29.         CalculatePath(23833,16734,playerid+1000);
  30.         return 1;
  31.     }
  32.     if(!strcmp(cmdtext,"/i",true))
  33.     {
  34.         interval +=25;
  35.         format(string,128,"Interval: %d",interval);
  36.         SendClientMessage(playerid,-1,string);
  37.         return 1;
  38.     }
  39.     if(!strcmp(cmdtext,"/d",true))
  40.     {
  41.         interval-=25;
  42.         format(string,128,"Interval: %d",interval);
  43.         SendClientMessage(playerid,-1,string);
  44.         return 1;
  45.     }
  46.     if(!strcmp(cmdtext,"/e",true))
  47.     {
  48.         if(Timer[playerid] != (-1))
  49.         {
  50.             KillTimer(Timer[playerid]);
  51.             Timer[playerid] = -1;
  52.             DeleteArray(id[playerid]);
  53.             id[playerid] = -1;
  54.             CurrTarget[playerid] = 0;
  55.         }
  56.         CallRemoteFunction("OnPlayerCommandText","is",playerid,"/lv");
  57.         return 1;
  58.     }
  59.     return 0;
  60. }
  61. ////////////////////////////////////////////////////////////////////////////////
  62. public GPS_WhenRouteIsCalculated(routeid,node_id_array[],amount_of_nodes,distance)
  63. {
  64.     format(string,128,"Auto Pilot has been turned on captain! Nodes: %d",amount_of_nodes);
  65.     if(routeid > 999)
  66.     {
  67.         id[routeid-1000] = StoreRouteArray(amount_of_nodes,node_id_array);
  68.         Timer[routeid-1000] = SetTimerEx("AutoPilotStep",interval,1,"i",routeid-1000);
  69.         SendClientMessage(routeid-1000,-1,string);
  70.     }
  71.     else
  72.     {
  73.         id[routeid] = StoreRouteArray(amount_of_nodes,node_id_array);
  74.         Timer[routeid] = SetTimerEx("AutoPilot",interval,1,"i",routeid);
  75.         SendClientMessage(routeid,-1,string);
  76.     }
  77.     return 1;
  78. }
  79.  
  80. public OnPlayerClosestNodeIDChange(playerid,old_NodeID,new_NodeID)
  81. {
  82. //  SetVehicleVelocity(GetPlayerVehicleID(playerid),0.0,0.0,0.0);
  83.     return 1;
  84. }
  85.  
  86. forward AutoPilotStep(playerid);
  87. public AutoPilotStep(playerid)
  88. {
  89.     if(IsPlayerInAnyVehicle(playerid))
  90.     {
  91.         new vehicleid = GetPlayerVehicleID(playerid);
  92.         SetVehicleHealth(vehicleid,1000.0);
  93.         new amount;
  94.         GetNodePos(GetRouteAtPos(id[playerid],CurrTarget[playerid]++,amount),pos[0][0],pos[0][1],pos[0][2]);
  95.         GetNodePos(GetRouteAtPos(id[playerid],(CurrTarget[playerid]+1),amount),pos[1][0],pos[1][1],pos[1][2]);
  96.         SetVehiclePos(vehicleid,pos[0][0],pos[0][1],pos[0][2]+2.0);
  97.         SetVehicleZAngle(vehicleid,atan2VehicleZ(pos[0][0],pos[0][1],pos[1][0],pos[1][1]));
  98.         if(amount <= (CurrTarget[playerid]+1))
  99.         {
  100.             KillTimer(Timer[playerid]);
  101.             Timer[playerid] = -1;
  102.             DeleteArray(id[playerid]);
  103.             id[playerid] = -1;
  104.             CurrTarget[playerid] = 0;
  105.         }
  106.     }
  107.     else
  108.     {
  109.         KillTimer(Timer[playerid]);
  110.         Timer[playerid] = -1;
  111.         DeleteArray(id[playerid]);
  112.         id[playerid] = -1;
  113.         CurrTarget[playerid] = 0;
  114.     }
  115. }
  116.  
  117. forward AutoPilot(playerid);
  118. public AutoPilot(playerid)
  119. {
  120.     if(IsPlayerInAnyVehicle(playerid))
  121.     {
  122.         new vehicleid = GetPlayerVehicleID(playerid);
  123.         SetVehicleHealth(vehicleid,1000.0);
  124.         if(CurrTarget[playerid] == 0)
  125.         {
  126.             CurrTarget[playerid]++;
  127.             GetNodePos(GetRouteAtPos(id[playerid],CurrTarget[playerid]),pos[0][0],pos[0][1],pos[0][2]);
  128.             SetVehiclePos(vehicleid,pos[0][0],pos[0][1],pos[0][2]+2.0);
  129.             //format(string,128,"NodeID: %d\tX: %.2f Y: %.2f Z: %.2f T: %d",GetRouteAtPos(id[playerid],CurrTarget[playerid]),pos[0][0],pos[0][1],pos[0][2],CurrTarget[playerid]);
  130.             //SendClientMessage(playerid,-1,string);
  131.             return 1;
  132.         }
  133.         new amount;
  134.         new nodeid = GetRouteAtPos(id[playerid],CurrTarget[playerid],amount);
  135.         if((CurrTarget[playerid]+1) >= amount)
  136.         {
  137.             KillTimer(Timer[playerid]);
  138.             Timer[playerid] = -1;
  139.             DeleteArray(id[playerid]);
  140.             id[playerid] = -1;
  141.             CurrTarget[playerid] = 0;
  142.             return 1;
  143.         }
  144.         //GetVehiclePos(vehicleid,pos[0][0],pos[0][1],pos[0][2]);
  145.         GetNodePos(nodeid,pos[1][0],pos[1][1],pos[1][2]);
  146.         //format(string,128,"NodeID: %d\tX: %.2f Y: %.2f Z: %.2f T: %d",nodeid,pos[1][0],pos[1][1],pos[1][2],CurrTarget[playerid]);
  147.         if(IsPlayerInRangeOfPoint(playerid,3.0,pos[1][0],pos[1][1],pos[1][2]))
  148.         {
  149.             CurrTarget[playerid]++;
  150.             return 1;
  151.             //format(string,128,"%s IR",string);
  152.             //GetNodePos(nodeid,pos[1][0],pos[1][1],pos[1][2]);
  153.         }
  154.         //format(string,128,"NodeID: %d\tX: %.2f Y: %.2f Z: %.2f T: %d",nodeid,pos[1][0],pos[1][1],pos[1][2],CurrTarget[playerid]);
  155.         //SendClientMessage(playerid,-1,string);
  156.         //Now lets engage the auto pilot!
  157.         PullVehicleIntoDirection(vehicleid,pos[1][0],pos[1][1],pos[1][2],0.32,playerid);
  158.     }
  159.     else
  160.     {
  161.         KillTimer(Timer[playerid]);
  162.         Timer[playerid] = -1;
  163.         DeleteArray(id[playerid]);
  164.         id[playerid] = -1;
  165.         CurrTarget[playerid] = 0;
  166.     }
  167.     return 1;
  168. }
  169. //--------------------AUTO-PILOT-CORE-FUNCTIONS-------------------------------//
  170. stock PullVehicleIntoDirection(VehicleID,Float:X,Float:Y,Float:Z,Float:Speed,playerid=0)//Or DriveVehicleToDirection.. ShootVehicletodirection.. whatever
  171. {
  172.     #pragma unused Z
  173.     new Float:StartPos[3];
  174.     new Float:u[2];
  175.     GetVehiclePos(VehicleID, StartPos[0],StartPos[1],StartPos[2]);
  176.     SetVehicleZAngle(VehicleID,atan2VehicleZ(StartPos[0],StartPos[1],X,Y));
  177.     u[0] = X-StartPos[0];//deltaX
  178.     u[1] = Y-StartPos[1];//deltaY
  179.     //if(u[0] < 0.01)u[0] = 0.1;//does not fix the problem...
  180.     u[1] = u[1]/u[0];//RC = dY/dX
  181.     if(5.0 > u[1] > -5.0)
  182.     {
  183.         GetVehicleVelocity(VehicleID,StartPos[0],StartPos[1],StartPos[2]);//fix for 'flying car'
  184.         if(u[0] < 0)
  185.         {
  186.             format(string,128,"u[0]: %.4f\tu[1]: %.4f\t ---- Y-S: %.4f",u[0],u[1],Y-StartPos[1]);
  187.             SetVehicleVelocity(VehicleID,(Speed*-1.0),((Speed*u[1])*-1.0),StartPos[2]);
  188.         }
  189.         else
  190.         {
  191.             format(string,128,"u[0]: %.4f\tu[1]: %.4f\t ++++ Y-S: %.4f",u[0],u[1],Y-StartPos[1]);
  192.             SetVehicleVelocity(VehicleID,Speed,Speed*u[1],StartPos[2]);
  193.         }
  194.     }
  195.     else
  196.     {
  197.         format(string,128,"u[0]: %.4f\tu[1]: %.4f\t RRRR Y-S: %.4f",u[0],u[1],Y-StartPos[1]);
  198.     }
  199.     SendClientMessage(playerid,-1,string);
  200.     return 1;
  201. }
  202.  
  203. forward Float:atan2VehicleZ(Float:Xb,Float:Yb,Float:Xe,Float:Ye);// Dunno how to name it...
  204. stock Float:atan2VehicleZ(Float:Xb,Float:Yb,Float:Xe,Float:Ye)
  205. {
  206.     new Float:a = floatabs(360.0 - atan2( Xe-Xb,Ye-Yb));
  207.     if(360 > a > 180)return a;
  208.     return a-360.0;
  209. }
  210. //----------------------------------------------------------------------------//
  211.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement