Guest User

Untitled

a guest
May 5th, 2012
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.     Scriptinformation:
  3.  
  4.     @ Author(s):        <NicoAiko>
  5.  
  6.     @ Version:          <0.1>
  7.  
  8.     @ Type:             <Include>
  9.  
  10.     @ Language(s):      <German>
  11. */
  12.  
  13. #include <a_samp>
  14. #include <Farben>
  15.  
  16. #define function:%0(%1) \
  17.         forward %0(%1); \
  18.         public %0(%1)
  19.  
  20. #define MAX_MODELID 211
  21.  
  22. /*
  23.  
  24. native n_VehicleInit(Hoch,Runter);
  25. native n_OnVehicleSpawn(vehicleid);
  26. native n_OnPlayerStateChange(playerid,newstate,oldstate);
  27. native n_OnPlayerKeyStateChange(playerid,newkeys,oldkeys);
  28. native SetVehicleModelMaxGangSpeed(modelid,BackGang,Gang1,Gang2=-1,Gang3=-1,Gang4=-1,Gang5=-1,Gang6=-1);
  29. native GetVehicleModelMaxSpeed(vehicleid,&BackGang,&Gang1,&Gang2,&Gang3,&Gang4,&Gang5,&Gang6);
  30. native GetVehicleModelMaxGangSpeed(vehicleid);
  31. native GetVehicleATMGang(vehicleid);
  32.  
  33. */
  34.  
  35. new n_Gang[MAX_VEHICLES] = -1;
  36. new n_Max_Speed_Gang_Timer[MAX_VEHICLES];
  37. new n_Max_Gang_Speed[MAX_MODELID][7]; // [0] = Rückwärts [1] - [6] = 1 - 6
  38.  
  39. new n_GangRunterKey;
  40. new n_GangHochKey;
  41.  
  42. function:n_VehicleInit(Hoch,Runter)
  43. {
  44.     print(" - Gangschaltungs-System -\n");
  45.     print(" -    made by NicoAiko   -\n");
  46.     print(" -   (c) ~~ NicoAiko ~~  -\n");
  47.     print(" -       -  2012  -      -");
  48.     for(new i = 0; i < MAX_MODELID; i++)
  49.     {
  50.         n_Max_Gang_Speed[i][0] = 0;
  51.         n_Max_Gang_Speed[i][1] = 0;
  52.         n_Max_Gang_Speed[i][2] = 0;
  53.         n_Max_Gang_Speed[i][3] = 0;
  54.         n_Max_Gang_Speed[i][4] = 0;
  55.         n_Max_Gang_Speed[i][5] = 0;
  56.         n_Max_Gang_Speed[i][6] = 0;
  57.     }
  58.     for(new i = 0; i < MAX_VEHICLES; i++)
  59.     {
  60.         n_Gang[i] = -1;
  61.     }
  62.     n_GangHochKey = Hoch;
  63.     n_GangRunterKey = Runter;
  64.     return 1;
  65. }
  66.  
  67. function:n_OnVehicleSpawn(vehicleid)
  68. {
  69.     n_Gang[vehicleid] = -1;
  70.     return 1;
  71. }
  72.  
  73. function:n_OnPlayerStateChange(playerid,newstate,oldstate)
  74. {
  75.     new vehicleid = GetPlayerVehicleID(playerid);
  76.     if(newstate == PLAYER_STATE_DRIVER)
  77.     {
  78.         n_Max_Speed_Gang_Timer[vehicleid] = SetTimerEx("UpdateVehicleState",500,1,"i",vehicleid);
  79.     }
  80.     if(oldstate == PLAYER_STATE_DRIVER)
  81.     {
  82.         KillTimer(n_Max_Speed_Gang_Timer[vehicleid]);
  83.     }
  84.     return 1;
  85. }
  86.  
  87. function:UpdateVehicleState(vehicleid)
  88. {
  89.     new modelid = GetVehicleModel(vehicleid);
  90.     new engine,rest[6];
  91.     GetVehicleParamsEx(vehicleid,engine,rest[0],rest[1],rest[2],rest[3],rest[4],rest[5]);
  92.     if(engine && n_Gang[vehicleid] == -1)
  93.     { n_Gang[vehicleid] = 1; }
  94.     if(!engine && n_Gang[vehicleid] > -1)
  95.     { n_Gang[vehicleid] = -1; }
  96.     if(GetVehicleModelMaxGangSpeed(vehicleid))
  97.     {
  98.         if(GetVehicleATMGang(vehicleid) < 3)
  99.         {
  100.             new Float:x[2],Float:y[2];
  101.             n_GetXYFrontTheVehicle(vehicleid,x[0],y[0],10);
  102.             n_GetXYBehindTheVehicle(vehicleid,x[1],y[1],10);
  103.             SetTimerEx("BackOrFrontVehicle",500,0,"dffff",vehicleid,x[0],y[0],x[1],y[1]);
  104.         }
  105.         if(n_GetSpeed(vehicleid) >= GetVehicleModelMaxGangSpeed(vehicleid))
  106.         {
  107.             n_SetSpeed(vehicleid,GetVehicleModelMaxGangSpeed(vehicleid));
  108.         }
  109.         if(n_GetSpeed(vehicleid) < n_Max_Gang_Speed[modelid-400][GetVehicleATMGang(vehicleid)-1] && GetVehicleATMGang(vehicleid) > 1)
  110.         { SetVehicleGangDown(vehicleid); }
  111.     }
  112.     return 1;
  113. }
  114.  
  115. function:BackOrFrontVehicle(vehicleid,Float:nx0,Float:ny0,Float:nx1,Float:ny1)
  116. {
  117.     new Float:x,Float:y,Float:z;
  118.     GetVehiclePos(vehicleid,x,y,z);
  119.     if(GetVehicleDistanceFromPoint(vehicleid,nx0,ny0,z) > GetVehicleDistanceFromPoint(vehicleid,nx1,ny1,z) && n_Gang[vehicleid] > 0)
  120.     { n_Gang[vehicleid] = 0; return 1; }
  121.     else if(GetVehicleDistanceFromPoint(vehicleid,nx0,ny0,z) < GetVehicleDistanceFromPoint(vehicleid,nx1,ny1,z) && n_Gang[vehicleid] == 0)
  122.     { n_Gang[vehicleid] = 1; return 1; }
  123.     return 1;
  124. }
  125.  
  126. function:n_OnPlayerKeyStateChange(playerid,newkeys,oldkeys)
  127. {
  128.     if(newkeys & n_GangHochKey)
  129.     {
  130.         if(!IsPlayerInAnyVehicle(playerid)) return 1;
  131.         if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return 1;
  132.         new vehicleid = GetPlayerVehicleID(playerid);
  133.         if(!IsVehicleAbleToGangHoch(vehicleid)) return 1; // Fragt ab, ob das Fahrzeug in der Lage ist mit der derzeitigen Geschwindigkeit (siehe die Funktion) hochzuschalten
  134.         SetVehicleGangUp(vehicleid);
  135.         return 1;
  136.     }
  137.     if(newkeys & n_GangRunterKey)
  138.     {
  139.         if(!IsPlayerInAnyVehicle(playerid)) return 1;
  140.         if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return 1;
  141.         new vehicleid = GetPlayerVehicleID(playerid);
  142.         if(!IsVehicleAbleToGangRunter(vehicleid)) return 1;
  143.         SetVehicleGangDown(vehicleid);
  144.         return 1;
  145.     }
  146.     return 1;
  147. }
  148.  
  149. function:IsVehicleAbleToGangHoch(vehicleid)
  150. {
  151.     new modelid = GetVehicleModel(vehicleid);
  152.     new gang = GetVehicleATMGang(vehicleid);
  153.     if(gang == 6) return 0;
  154.     switch(gang)
  155.     {
  156.         case 0: return 1;
  157.         case 1..3:
  158.         {
  159.             if(n_GetSpeed(vehicleid) < (n_Max_Gang_Speed[modelid-400][gang+1]/3)*2) return 0;
  160.             else return 1;
  161.         }
  162.         case 4,5:
  163.         {
  164.             if(n_GetSpeed(vehicleid) < floatround((n_Max_Gang_Speed[modelid-400][gang+1]/5)*2.5)) return 0;
  165.             else return 1;
  166.         }
  167.         default: return 0;
  168.     }
  169.     return 1;
  170. }
  171.  
  172. function:IsVehicleAbleToGangRunter(vehicleid)
  173. {
  174.     new modelid = GetVehicleModel(vehicleid);
  175.     new gang = GetVehicleATMGang(vehicleid);
  176.     if(gang == 1) return 0;
  177.     switch(gang)
  178.     {
  179.         case 0: return 0;
  180.         case 2,3:
  181.         {
  182.             if(n_GetSpeed(vehicleid) > (n_Max_Gang_Speed[modelid-400][gang-1]/3)*2) return 1;
  183.             else return 0;
  184.         }
  185.         case 4..6:
  186.         {
  187.             if(n_GetSpeed(vehicleid) > floatround((n_Max_Gang_Speed[modelid-400][gang-1]/5)*2.5)) return 1;
  188.             else return 0;
  189.         }
  190.         default: return 0;
  191.     }
  192.     return 1;
  193. }
  194.  
  195. SetVehicleGangDown(vehicleid)
  196.     return n_Gang[vehicleid]--;
  197.    
  198. SetVehicleGangUp(vehicleid)
  199.     return n_Gang[vehicleid]++;
  200.  
  201. stock SetVehicleModelMaxGangSpeed(modelid,BackGang,Gang1,Gang2=-1,Gang3=-1,Gang4=-1,Gang5=-1,Gang6=-1) // MUST STAY stock!!
  202. {
  203.     if(modelid < 400 || modelid > 611) { printf("Fehler! Die angegebene ModelID ist unter 400 oder über 611! Angegeben: %d",modelid); return 0; }
  204.     if(Gang1 <= 10) { printf("Error! Gang 1 darf NICHT kleiner als 10 km/h sein!!!"); return 0; }
  205.     if(BackGang <= 10) { printf("Error! Rückwärtsgang darf NICHT kleiner als 10 km/h sein!!!"); return 0; }
  206.     n_Max_Gang_Speed[modelid-400][0] = BackGang;
  207.     n_Max_Gang_Speed[modelid-400][1] = Gang1;
  208.     if(Gang2 <= -1)
  209.     {
  210.         n_Max_Gang_Speed[modelid-400][2] = -1;
  211.         n_Max_Gang_Speed[modelid-400][3] = -1;
  212.         n_Max_Gang_Speed[modelid-400][4] = -1;
  213.         n_Max_Gang_Speed[modelid-400][5] = -1;
  214.         n_Max_Gang_Speed[modelid-400][6] = -1;
  215.         return 1;
  216.     }
  217.     else n_Max_Gang_Speed[modelid-400][2] = Gang2;
  218.     if(Gang3 <= -1)
  219.     {
  220.         n_Max_Gang_Speed[modelid-400][3] = -1;
  221.         n_Max_Gang_Speed[modelid-400][4] = -1;
  222.         n_Max_Gang_Speed[modelid-400][5] = -1;
  223.         n_Max_Gang_Speed[modelid-400][6] = -1;
  224.         return 1;
  225.     }
  226.     else n_Max_Gang_Speed[modelid-400][3] = Gang3;
  227.     if(Gang4 <= -1)
  228.     {
  229.         n_Max_Gang_Speed[modelid-400][4] = -1;
  230.         n_Max_Gang_Speed[modelid-400][5] = -1;
  231.         n_Max_Gang_Speed[modelid-400][6] = -1;
  232.         return 1;
  233.     }
  234.     else n_Max_Gang_Speed[modelid-400][4] = Gang4;
  235.     if(Gang5 <= -1)
  236.     {
  237.         n_Max_Gang_Speed[modelid-400][5] = -1;
  238.         n_Max_Gang_Speed[modelid-400][6] = -1;
  239.         return 1;
  240.     }
  241.     else n_Max_Gang_Speed[modelid-400][5] = Gang5;
  242.     if(Gang6 <= -1) n_Max_Gang_Speed[modelid-400][6] = -1;
  243.     else n_Max_Gang_Speed[modelid-400][6] = Gang6;
  244.     return 1;
  245. }
  246.  
  247. function:n_GetXYBehindTheVehicle(vehicleid, &Float:x, &Float:y, Float:distance)
  248. {
  249.     new Float:a;
  250.     GetVehiclePos(vehicleid,x,y,a);
  251.     GetVehicleZAngle(vehicleid,a);
  252.     x -= (distance * floatsin(-a,degrees));
  253.     y -= (distance * floatcos(-a,degrees));
  254.     return 1;
  255. }
  256.  
  257. function:n_GetXYFrontTheVehicle(vehicleid, &Float:x, &Float:y, Float:distance)
  258. {
  259.     new Float:a;
  260.     GetVehiclePos(vehicleid,x,y,a);
  261.     GetVehicleZAngle(vehicleid,a);
  262.     x += (distance * floatsin(-a,degrees));
  263.     y += (distance * floatcos(-a,degrees));
  264.     return 1;
  265. }
  266.  
  267. function:Float:GetDistanceBetweenPoints(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2) {
  268.     return floatsqroot(floatpower(x1 - x2, 2) + floatpower(y1 - y2, 2) + floatpower(z1 - z2, 2)); }
  269.  
  270. function:GetVehicleModelMaxSpeed(vehicleid,&BackGang,&Gang1,&Gang2,&Gang3,&Gang4,&Gang5,&Gang6)
  271. {
  272.     new modelid = GetVehicleModel(vehicleid);
  273.     if(n_Max_Gang_Speed[modelid-400][0] <= 0) // Rückwärtsgang (Hier fragt er ab, ob es verändert wurde)
  274.     /* Wenn die maximale Geschwindigkeit nicht verändert wurde bzw. nicht angegeben wurde, dann ist sie 0!
  275.        Hat ein Fahrzeug z.B. 4 Gänge sind 4 davon über -1! Gang 5 & 6 wären dann -1! */
  276.     {
  277.         BackGang = 0,
  278.         Gang1 = 0,
  279.         Gang2 = 0,
  280.         Gang3 = 0,
  281.         Gang4 = 0,
  282.         Gang5 = 0,
  283.         Gang6 = 0;
  284.         return 1;
  285.     }
  286.     BackGang = n_Max_Gang_Speed[modelid-400][0];
  287.     Gang1 = n_Max_Gang_Speed[modelid-400][1];
  288.     Gang2 = n_Max_Gang_Speed[modelid-400][2];
  289.     Gang3 = n_Max_Gang_Speed[modelid-400][3];
  290.     Gang4 = n_Max_Gang_Speed[modelid-400][4];
  291.     Gang5 = n_Max_Gang_Speed[modelid-400][5];
  292.     Gang6 = n_Max_Gang_Speed[modelid-400][6];
  293.     return 1;
  294. }
  295.  
  296. function:GetVehicleModelMaxGangSpeed(vehicleid)
  297. {
  298.     new n_MaxGangSpeed[7],n_ATMGang,modelid;
  299.     modelid = GetVehicleModel(vehicleid);
  300.     GetVehicleModelMaxSpeed(vehicleid,n_MaxGangSpeed[0],n_MaxGangSpeed[1],n_MaxGangSpeed[2],n_MaxGangSpeed[3],n_MaxGangSpeed[4],n_MaxGangSpeed[5],n_MaxGangSpeed[6]);
  301.     n_ATMGang = GetVehicleATMGang(vehicleid);
  302.     return n_Max_Gang_Speed[modelid-400][n_ATMGang];
  303. }
  304.  
  305. function:ResetModelMaxSpeed(modelid)
  306. {
  307.     n_Max_Gang_Speed[modelid-400][0] = -1;
  308.     n_Max_Gang_Speed[modelid-400][1] = -1;
  309.     n_Max_Gang_Speed[modelid-400][2] = -1;
  310.     n_Max_Gang_Speed[modelid-400][3] = -1;
  311.     n_Max_Gang_Speed[modelid-400][4] = -1;
  312.     n_Max_Gang_Speed[modelid-400][5] = -1;
  313.     n_Max_Gang_Speed[modelid-400][6] = -1;
  314.     return 1;
  315. }
  316.  
  317. function:GetVehicleATMGang(vehicleid)
  318. {
  319.     return n_Gang[vehicleid];
  320. }
  321.  
  322. function:n_GetSpeed(vehicleid)
  323. {
  324.     new Float:x,Float:y,Float:z;
  325.     new Float:speed;
  326.     GetVehicleVelocity(vehicleid,x,y,z);
  327.     speed = floatsqroot(x*x+y*y+z*z) * 200;
  328.     new realspeed = floatround(speed);
  329.     return realspeed;
  330. }
  331. function:n_SetSpeed(vehicleid,Float:speed)
  332. {
  333.     new Float:x[2],Float:y[2],Float:z[2],Float:angle;
  334.     GetVehicleVelocity(vehicleid,x[0],y[0],z[0]);
  335.     GetVehiclePos(vehicleid,x[1],y[1],z[1]);
  336.     GetVehicleZAngle(vehicleid,angle);
  337.     angle = 360 - angle;
  338.     x[0] = (floatsin(angle,degrees) * (speed/200) + floatcos(angle, degrees) * 0 + x[1]) - x[1];
  339.     y[0] = (floatcos(angle,degrees) * (speed/200) + floatsin(angle, degrees) * 0 + y[1]) - y[1];
  340.     SetVehicleVelocity(vehicleid,x[0],y[0],z[0]);
  341.     return 1;
  342. }
Advertisement
Add Comment
Please, Sign In to add comment