Advertisement
Guest User

Manual Transmission System

a guest
Apr 7th, 2017
1,493
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 10.88 KB | None | 0 0
  1. /*MANUAL TRANSMISSION CAR SYSTEM
  2. [2] - CLUTCH
  3. [Y] - INCREASE GEAR
  4. [N] - DECREASE GEAR
  5. [R] [N] [1] [2] [3] [4] [5] - GEARS AVAILABLE
  6.  
  7. HOW TO USE:
  8. 1: TYPE /MANUAL TO ENTER MANUAL MODE
  9. 2: UPON ENTERING A CAR, YOU SHOULD BE ON NEUTRAL MODE.
  10. 3: HOLD ONTO 2 + TAP Y TO GO INTO FIRST GEAR.
  11. 4: HOLD ONTO 2 + W AND THE CAR WILL START MOVING.
  12. 5: AFTER A SECOND, RELEASE 2 AND CONTINUE TO USE W.
  13. 6: TO INCREASE GEAR, RELEASE W, HOLD ONTO 2 + TAP Y THEN RELEASE 2.
  14. 7: TO DECREASE GEAR, RELEASE W, HOLD ONTO 2 + TAP N THEN RELEASE 2.
  15.  
  16. MECHANICS:
  17. 1: IF YOU ACCELERATE IN NEUTRAL, CAR WILL STALL. (this wouldn't really happen, but it's just a way to prevent movment of the car)
  18. 2: IF YOU DO NOT HOLD CLUTCH WHILST UNDER 3MPH, CAR WILL STALL.
  19. 3: IF YOU ACCELERATE IN A GEAR WHICH IS TOO HIGH, CAR WILL STALL.
  20. 4: USING THE CLUTCH AND ACCELERATOR AT THE SAME TIME WILL DECREASE THE CAR'S HEALTH. (except when you are initally moving away in first gear)
  21. 5: IF YOU DON'T CHANGE GEARS WHEN NECESSARY, CAR HEALTH WILL DECREASE.
  22. 6: STALLING DECREASES THE CAR'S HEALTH.
  23.  
  24. KNOWN BUGS:
  25. 1: Holding onto the clutch + accelerator whilst falling in mid-air within a vehicle will reduce the speed in which you fall. Although, the vehicle will lose significant health.
  26.  
  27. Created by LEOTorres (Tester101)*/
  28.  
  29. #include <a_samp>
  30.  
  31. #define HOLDING(%0) \
  32.     ((newkeys & (%0)) == (%0))
  33.    
  34. #define ACC KEY_SPRINT
  35. #define REV KEY_JUMP
  36.  
  37. //↓↓ FOLLOWING VALUES CAN BE ADJUSTED TO CHANGE THE SYSTEM TO YOUR SUITING ↓↓//
  38. #define CLUTCH KEY_LOOK_BEHIND
  39. #define GUP KEY_YES
  40. #define GDOWN KEY_NO
  41.  
  42. #define GEAR_1_MAX_SPEED 20
  43. #define GEAR_2_MAX_SPEED 50
  44. #define GEAR_2_MIN_SPEED 10
  45. #define GEAR_3_MAX_SPEED 80
  46. #define GEAR_3_MIN_SPEED 30
  47. #define GEAR_4_MAX_SPEED 120
  48. #define GEAR_4_MIN_SPEED 50
  49. #define GEAR_5_MIN_SPEED 70
  50.  
  51. #define HEAVY_SPEED_REDUCTION 1.5
  52. #define LIGHT_SPEED_REDUCTION 1.1
  53. #define STALL_PUNISHMENT 10
  54. #define GEAR_PUNISHMENT 1
  55. //^^ FOLLOWING VALUES CAN BE ADJUSTED TO CHANGE THE SYSTEM TO YOUR SUITING ^^//
  56.  
  57. new gear[MAX_PLAYERS];
  58. new clutch[MAX_PLAYERS];
  59. new acc[MAX_PLAYERS];
  60. new rev[MAX_PLAYERS];
  61. new stallstate[MAX_PLAYERS];
  62. new transmission[MAX_PLAYERS];
  63. new Text:geartext[MAX_PLAYERS];
  64.  
  65. forward GetVehicleSpeed(vehicleid);
  66. forward EnableEngine(playerid);
  67. forward StallEngine(playerid);
  68. forward ReduceSpeed (playerid, status);
  69. forward OnPlayerSpeeding(playerid);
  70.  
  71. public OnFilterScriptInit()
  72. {
  73.     print("\n--------------------------------------");
  74.     print(" Manual Transmission - LEOTorres (Tester101)");
  75.     print("--------------------------------------\n");
  76.    
  77.     for (new x = 0; x < MAX_PLAYERS; x++)
  78.     {
  79.         geartext[x] = TextDrawCreate(500.0, 100.0, "");
  80.         TextDrawColor(geartext[x], 0x0000BBAA);
  81.         TextDrawFont(geartext[x], 3);
  82.         TextDrawSetShadow(geartext[x], 0);
  83.     }
  84.     return 1;
  85. }
  86.  
  87. public OnFilterScriptExit()
  88. {
  89.     for (new x = 0; x < MAX_PLAYERS; x++)
  90.     {
  91.         TextDrawDestroy (geartext[x]);
  92.     }
  93.     return 1;
  94. }
  95.  
  96. public GetVehicleSpeed(vehicleid) //credits to whoever made this.
  97. {
  98.     new Float:V[3];
  99.     GetVehicleVelocity(vehicleid, V[0], V[1], V[2]);
  100.     return floatround(floatsqroot(V[0] * V[0] + V[1] * V[1] + V[2] * V[2]) * 180.00);
  101. }
  102.  
  103. public EnableEngine (playerid)
  104. {
  105.     new vehicleid = GetPlayerVehicleID(playerid);
  106.     new engine, lights, alarm, doors, bonnet, boot, objective;
  107.     GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  108.    
  109.     if (engine == 0)
  110.     {
  111.         SetVehicleParamsEx(vehicleid, 1, lights, alarm, doors, bonnet, boot, objective);
  112.         stallstate[playerid] = 0;
  113.     }
  114. }
  115.  
  116. public StallEngine (playerid)
  117. {
  118.     if (stallstate[playerid] == 0)
  119.     {
  120.         stallstate[playerid] = 1;
  121.         new vehicleid = GetPlayerVehicleID(playerid);
  122.         new engine, lights, alarm, doors, bonnet, boot, objective;
  123.         new Float:health;
  124.         GetVehicleHealth (vehicleid, health);
  125.         GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  126.         SetVehicleParamsEx(vehicleid, 0, lights, alarm, doors, bonnet, boot, objective);
  127.         if (gear[playerid] != 0)
  128.         {
  129.             SetVehicleHealth (vehicleid, health - STALL_PUNISHMENT);
  130.         }
  131.     }
  132. }
  133.  
  134. public ReduceSpeed (playerid, status)
  135. {
  136.     new vehicleid = GetPlayerVehicleID(playerid);
  137.     new Float:Velocity[3];
  138.     new Float:health;
  139.     GetVehicleHealth (vehicleid, health);
  140.     GetVehicleVelocity(vehicleid, Velocity[0], Velocity[1], Velocity[2]);
  141.  
  142.     if (status == 0)
  143.     {
  144.         SetVehicleHealth(vehicleid, health - GEAR_PUNISHMENT);
  145.         SetVehicleVelocity(GetPlayerVehicleID(playerid), Velocity[0] / LIGHT_SPEED_REDUCTION, Velocity[1] / LIGHT_SPEED_REDUCTION, Velocity[2] / LIGHT_SPEED_REDUCTION);
  146.     }
  147.    
  148.     if (status == 1)
  149.     {
  150.         SetVehicleHealth(vehicleid, health - GEAR_PUNISHMENT);
  151.         SetVehicleVelocity(GetPlayerVehicleID(playerid), Velocity[0] / HEAVY_SPEED_REDUCTION, Velocity[1] / HEAVY_SPEED_REDUCTION, Velocity[2] / HEAVY_SPEED_REDUCTION);
  152.     }
  153.    
  154.     if (status == 2)
  155.     {
  156.         SetVehicleVelocity(GetPlayerVehicleID(playerid), Velocity[0] / HEAVY_SPEED_REDUCTION, Velocity[1] / HEAVY_SPEED_REDUCTION, Velocity[2] / HEAVY_SPEED_REDUCTION);
  157.     }
  158. }
  159.  
  160. public OnPlayerDisconnect(playerid)
  161. {
  162.     gear[playerid] = 0;
  163.     clutch[playerid] = 0;
  164.     acc[playerid] = 0;
  165.     rev[playerid] = 0;
  166.     stallstate[playerid] = 0;
  167.     transmission[playerid] = 0;
  168.    
  169.     return 1;
  170. }
  171.  
  172. public OnPlayerStateChange(playerid, newstate, oldstate)
  173. {
  174.     if (transmission[playerid] == 0)    {   return 1;   }
  175.     if(oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER)
  176.     {
  177.         TextDrawShowForPlayer(playerid, geartext[playerid]);
  178.         gear[playerid] = 0;
  179.         EnableEngine (playerid);
  180.         stallstate[playerid] = 0;
  181.     }
  182.     return 1;
  183. }
  184.  
  185. public OnPlayerExitVehicle(playerid, vehicleid)
  186. {
  187.     TextDrawHideForPlayer(playerid, geartext[playerid]);
  188.     stallstate[playerid] = 0;
  189.     return 1;
  190. }
  191.  
  192. public OnPlayerKeyStateChange (playerid, newkeys, oldkeys)
  193. {
  194.     if (newkeys & ACC && gear[playerid] == 0 || clutch[playerid] == 1 && acc[playerid] == 1)    {   EnableEngine (playerid);    }
  195.     if (transmission[playerid] == 0)    {   return 1;   }
  196.     if (HOLDING(ACC))   {   acc[playerid] = 1;  }
  197.     else    {   acc[playerid] = 0;  }
  198.     if (HOLDING(REV))   {   rev[playerid] = 1;  }
  199.     else    {   rev[playerid] = 0;  }
  200.     if (HOLDING(CLUTCH))    {   clutch[playerid] = 1;   }
  201.     else    {   clutch[playerid] = 0;   }
  202.     if (HOLDING( CLUTCH | GUP ) && gear[playerid] < 5)  {   gear[playerid]++;   }
  203.     if (HOLDING( CLUTCH | GDOWN ) && gear[playerid] > -1)   {   gear[playerid]--;   }
  204.     return 1;
  205. }
  206.  
  207. public OnPlayerCommandText(playerid, cmdtext[])
  208. {
  209.     if(!strcmp(cmdtext, "/auto", true))
  210.     {
  211.         if (transmission[playerid] == 0)
  212.         {
  213.             SendClientMessage(playerid, 0x00FF00FF, "SERVER: Use /manual to change to manual transmission.");
  214.             return 1;
  215.         }
  216.         transmission[playerid] = 0;
  217.         SendClientMessage(playerid, 0x00FF00FF, "SERVER: Transmission: Automatic");
  218.         TextDrawHideForPlayer(playerid, geartext[playerid]);
  219.         return 1;
  220.     }
  221.  
  222.     if(!strcmp(cmdtext, "/manual", true))
  223.     {
  224.         if (transmission[playerid] == 1)
  225.         {
  226.             SendClientMessage(playerid, 0x00FF00FF, "SERVER: Use /auto to change to automatic transmission.");
  227.             return 1;
  228.         }
  229.         transmission[playerid] = 0;
  230.         SendClientMessage(playerid, 0x00FF00FF, "SERVER: Transmission: Manual");
  231.         SendClientMessage(playerid, 0x00FF00FF, "SERVER: CONTROLS -  [2] CLUTCH || [Y] UP GEAR || [N] DOWN GEAR");
  232.         transmission[playerid] = 1;
  233.         return 1;
  234.     }
  235.    
  236.     return 0;
  237. }
  238.  
  239. public OnPlayerUpdate (playerid)
  240. {
  241.     if (transmission[playerid] == 0)    {   return 1;   }
  242.     if (IsPlayerInAnyVehicle(playerid) == 0)    {   return 1;   }
  243.     new vehicleid = GetPlayerVehicleID(playerid);
  244.     new model = GetVehicleModel(vehicleid);
  245.     TextDrawSetString(geartext[playerid], "");
  246.     TextDrawShowForPlayer(playerid, geartext[playerid]);
  247.     if (model == 417 || model == 425 || model == 447 || model == 460 || model == 469 || model == 476 || model == 487 || model == 488 || model == 460 || model == 497 || model == 511 || model == 512 || model == 513 || model == 519 || model == 520 || model == 548 || model == 553 || model == 563 || model == 577 || model == 592 || model == 593)   {   return 1;   }
  248.    
  249.     //HANDLES THE TEXTDRAW//
  250.     new gearstring[256];
  251.     format (gearstring, sizeof (gearstring), "", gear[playerid]);
  252.     if (gear[playerid] == 0)    {   format (gearstring, sizeof (gearstring), "~r~R ~g~N ~r~1 2 3 4 5");     }
  253.     if (gear[playerid] == -1)   {   format (gearstring, sizeof (gearstring), "~g~R ~r~N 1 2 3 4 5");        }
  254.     if (gear[playerid] == 1)    {   format (gearstring, sizeof (gearstring), "~r~R N ~g~1 ~r~2 3 4 5");     }
  255.     if (gear[playerid] == 2)    {   format (gearstring, sizeof (gearstring), "~r~R N 1 ~g~2 ~r~3 4 5");     }
  256.     if (gear[playerid] == 3)    {   format (gearstring, sizeof (gearstring), "~r~R N 1 2 ~g~3~r~ 4 5");     }
  257.     if (gear[playerid] == 4)    {   format (gearstring, sizeof (gearstring), "~r~R N 1 2 3 ~g~4~r~ 5");     }
  258.     if (gear[playerid] == 5)    {   format (gearstring, sizeof (gearstring), "~r~R N 1 2 3 4 ~g~5");        }
  259.     TextDrawSetString(geartext[playerid], gearstring);
  260.     TextDrawShowForPlayer(playerid, geartext[playerid]);
  261.    
  262.     //HANDLES VEHICLE MECHANICS//
  263.    
  264.     new speed = GetVehicleSpeed(vehicleid);
  265.    
  266.     if (gear[playerid] > 0)
  267.     {
  268.         if (speed < 3)
  269.         {
  270.             if (clutch[playerid] == 0)
  271.             {
  272.                 StallEngine(playerid);
  273.             }
  274.         }
  275.  
  276.         else
  277.         {
  278.             if (acc[playerid] == 1 && clutch[playerid] == 1)
  279.             {
  280.                 ReduceSpeed (playerid, 0);
  281.             }
  282.         }
  283.  
  284.         if (speed > 0 && speed < 10)
  285.         {
  286.             if (rev[playerid] == 1)
  287.             {
  288.                 StallEngine(playerid);
  289.             }
  290.         }
  291.     }
  292.  
  293.     if (gear[playerid] > 1 && (speed < 10))
  294.     {
  295.         if (clutch[playerid] == 1)
  296.         {
  297.             ReduceSpeed (playerid, 2);
  298.         }
  299.  
  300.         else
  301.         {
  302.             StallEngine(playerid);
  303.         }
  304.     }
  305.  
  306.     switch (gear[playerid])
  307.     {
  308.         case -1:
  309.         {
  310.             if (acc[playerid] == 1)
  311.             {
  312.                 StallEngine(playerid);
  313.             }
  314.         }
  315.        
  316.         case 0:
  317.         {
  318.             if ((speed > 0) && acc[playerid] == 1 || rev[playerid] == 1)
  319.             {      
  320.                 StallEngine(playerid);     
  321.             }
  322.            
  323.             return 1;
  324.         }
  325.        
  326.         case 1:
  327.         {
  328.             if (speed > GEAR_1_MAX_SPEED)
  329.             {  
  330.                 ReduceSpeed (playerid, 1);
  331.             }
  332.         }
  333.        
  334.         case 2:
  335.         {
  336.             if (speed > GEAR_2_MAX_SPEED)
  337.             {
  338.                 ReduceSpeed (playerid, 0);
  339.             }
  340.            
  341.             if (clutch[playerid] == 1 || acc[playerid] == 0)
  342.             {
  343.                 return 1;
  344.             }
  345.            
  346.             if (speed < GEAR_2_MIN_SPEED)
  347.             {
  348.                 StallEngine(playerid);
  349.             }
  350.         }
  351.        
  352.         case 3:
  353.         {
  354.             if (speed > GEAR_3_MAX_SPEED)
  355.             {
  356.                 ReduceSpeed (playerid, 0);
  357.             }
  358.            
  359.             if (clutch[playerid] == 1 || acc[playerid] == 0)
  360.             {
  361.                 return 1;
  362.             }
  363.            
  364.             if (speed < GEAR_3_MIN_SPEED)
  365.             {
  366.                 StallEngine(playerid);
  367.             }
  368.         }
  369.        
  370.         case 4:
  371.         {
  372.             if (speed > GEAR_4_MAX_SPEED)
  373.             {
  374.                 ReduceSpeed (playerid, 0);
  375.             }
  376.            
  377.             if (clutch[playerid] == 1 || acc[playerid] == 0)
  378.             {
  379.                 return 1;
  380.             }
  381.            
  382.             if (speed < GEAR_4_MIN_SPEED)
  383.             {
  384.                 StallEngine(playerid);
  385.             }
  386.         }
  387.        
  388.         case 5:
  389.         {
  390.             if (clutch[playerid] == 1 || acc[playerid] == 0)
  391.             {
  392.                 return 1;
  393.             }
  394.            
  395.             if (speed < GEAR_5_MIN_SPEED)
  396.             {
  397.                 StallEngine(playerid);
  398.             }
  399.         }
  400.     }
  401.     return 1;
  402. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement