Advertisement
luisgustavomiki

[FS] AirBreaker Script

Jul 14th, 2011
375
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 4.51 KB | None | 0 0
  1. // Script entirely scripted and concepted by Luís Gustavo Miki (pGibson)
  2. // * Credits removing is a stupid reason to die.
  3.  
  4. #include <a_samp>
  5. #include <a_players>
  6. #include <float>
  7. #include <foreach>
  8.  
  9. #define PRESSED(%0) \
  10.     (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
  11. #define RELEASED(%0) \
  12.     (((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0)))
  13.  
  14. /* SCRIPT CONFIGURATION */
  15.  
  16. #define METERS 15.0 // How long you go each n time
  17. #define TIME 300 // ms each key update
  18.  
  19. /* END OF SCRIPT CONFIGURATION */
  20.  
  21. new Iterator:Airbreak<MAX_PLAYERS>;
  22. enum gxy_mode
  23. {
  24.     gxy_before,
  25.     gxy_behind,
  26.     gxy_right,
  27.     gxy_left
  28. }
  29.  
  30. public OnFilterScriptInit()
  31. {
  32.     print( "----------------------------------------------" );
  33.     print( "| Pawn AirBreaker Script by Luís Miki loaded! |" );
  34.     print( "----------------------------------------------" );
  35.     SetTimer( "AirBreakKeyCheck", TIME, true );
  36.     return 1;
  37. }
  38.  
  39. /* GetPVarInt( playerid, "pAb" );
  40.    GetPVarInt( playerid, "pAbTimer" ); */
  41.  
  42. stock
  43.     StartAirBreakForPlayer( playerid )
  44. {
  45.     if( !GetPVarInt( playerid, "pAb" ) )
  46.     {
  47.         Iter_Add(Airbreak, playerid);
  48.         SetPVarInt( playerid, "pAb", 1 );
  49.         //TogglePlayerControllable( playerid, 0 );
  50.         printf("| Pawn AirBreaker: Script Warning @ \"StartAirBreakForPlayer\"\n Player%d has just been set AitBreak status ON |",playerid );
  51.         return
  52.             true;
  53.     }
  54.     else
  55.     {
  56.         print( "| Pawn AirBreaker: Script Error @ \"StartAirBreakForPlayer\"\nOnce you set AirBreak status for a player on, you can't do it again\nUse \"GetAirBreakStatusForPlayer(playerid)\" |" );
  57.         return
  58.             false;
  59.     }
  60. }
  61.  
  62. stock
  63.     StopAirBreakForPlayer( playerid )
  64. {
  65.     if( GetPVarInt( playerid, "pAb" ) )
  66.     {
  67.         Iter_Remove(Airbreak, playerid);
  68.         SetPVarInt( playerid, "pAb", 0 );
  69.         //TogglePlayerControllable( playerid, 1 );
  70.         printf("| Pawn AirBreaker: Script Warning @ \"StartAirBreakForPlayer\"\n Player%d has just been set AitBreak status OFF |",playerid );
  71.         return
  72.             true;
  73.     }
  74.     else
  75.     {
  76.         print( "| Pawn AirBreaker: Script Error @ \"StartAirBreakForPlayer\"\nOnce you set AirBreak status for a player on, you can't do it again\nUse \"GetAirBreakStatusForPlayer(playerid)\" |" );
  77.         return
  78.             false;
  79.     }
  80. }
  81.  
  82. stock
  83.     GetAirBreakStatusForPlayer( playerid )
  84. {
  85.     return
  86.         GetPVarInt( playerid, "pAb" );
  87. }
  88.  
  89.  
  90. forward
  91.     AirBreakKeyCheck();
  92.  
  93.  
  94. public
  95.     AirBreakKeyCheck()
  96. {
  97.     foreach(Airbreak, playerid)
  98.     {
  99.         new ud, lr, k;
  100.         GetPlayerKeys( playerid, k, ud, lr );
  101.         ///////////////////////////////////
  102.         new Float:X, Float:Y, Float:Z;
  103.         if( ud < 0 ) // KEY_UP
  104.         {
  105.             GetPlayerPos( playerid, X, Y, Z );
  106.             GetXYFromPlayer(playerid, X, Y, METERS );
  107.             SetPlayerPos( playerid, X, Y, Z );
  108.         }
  109.         else if( ud > 0 ) // KEY_DOWN
  110.         {
  111.             GetPlayerPos( playerid, X, Y, Z );
  112.             GetXYFromPlayer(playerid, X, Y, METERS, gxy_behind );
  113.             SetPlayerPos( playerid, X, Y, Z );
  114.         }
  115.         //
  116.         if( lr > 0 ) // RIGHT
  117.         {
  118.             GetPlayerPos( playerid, X, Y, Z );
  119.             GetXYFromPlayer(playerid, X, Y, METERS, gxy_right );
  120.             SetPlayerPos( playerid, X, Y, Z );
  121.         }
  122.         else if( lr < 0 ) // LEFT
  123.         {
  124.             GetPlayerPos( playerid, X, Y, Z );
  125.             GetXYFromPlayer(playerid, X, Y, METERS, gxy_left );
  126.             SetPlayerPos( playerid, X, Y, Z );
  127.         }
  128.         /////////////
  129.         if( k & KEY_JUMP )
  130.         {
  131.             GetPlayerPos( playerid, X, Y, Z );
  132.             SetPlayerPos( playerid, X, Y, Z + METERS );
  133.         }
  134.         else if( k & KEY_CROUCH )
  135.         {
  136.             GetPlayerPos( playerid, X, Y, Z );
  137.             SetPlayerPos( playerid, X, Y, Z - METERS );
  138.         }
  139.         ////////////
  140.     }
  141. }
  142.  
  143.  
  144. stock GetXYFromPlayer(playerid, &Float:x, &Float:y, Float:distance, gxy_mode:mode = gxy_before)
  145. {
  146.     new
  147.         Float:a;
  148.     if(GetPlayerPos(playerid, x, y, a))
  149.     {
  150.         GetPlayerFacingAngle(playerid, a);
  151.         switch(mode)
  152.         {
  153.             case gxy_behind: if((a += 180) > 360) a -= 360;
  154.             case gxy_right: if((a += 90) > 360) a -= 360;
  155.             case gxy_left: if((a -= 90) < 0) a += 360;
  156.         }
  157.         x += distance * floatsin(-a, degrees);
  158.         y += distance * floatcos(-a, degrees);
  159.         return 1;
  160.     }
  161.     return 0;
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement