Advertisement
Guest User

FS:AirStrike

a guest
Aug 25th, 2012
855
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 3.63 KB | None | 0 0
  1. /* FS AirStrike made by Marricio */
  2.  
  3. #include a_samp
  4. #include zcmd
  5.  
  6. #define STRIKE_TIMER    120 // time to wait to request another air strike, must be higher than 30
  7.                             // to work correctly
  8.  
  9. forward StrikeTimeTimer( playerid );
  10. forward SecondStrike( Float:x, Float:y, Float:z );
  11.  
  12. new RequestingStrike[MAX_PLAYERS];
  13. new StrikeObject[MAX_PLAYERS];
  14. new StrikeTime[MAX_PLAYERS];
  15. new fs_timer[MAX_PLAYERS];
  16.  
  17. public OnPlayerConnect( playerid )
  18. {
  19.     /* Reset variable values */
  20.     StrikeObject[playerid] = -1;
  21.     StrikeTime[playerid] = -1;
  22. }
  23.  
  24. public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
  25. {
  26.     if( RequestingStrike[playerid] == 1 )
  27.     {
  28.         SendClientMessage( playerid, -1, "You've succesfully requested an airstrike." );
  29.         if( IsValidObject( StrikeObject[playerid] ) )
  30.             DestroyObject( StrikeObject[playerid] );
  31.            
  32.         StrikeObject[playerid] = CreateObject( 3786, fX, fY, fZ+300, 0, 270, 0, 0 );
  33.         MoveObject( StrikeObject[playerid],  fX, fY, fZ, 70 );
  34.         RequestingStrike[playerid] = 0;
  35.     }
  36.     return 1;
  37. }
  38.  
  39. public OnObjectMoved( objectid )
  40. {
  41.     new object = -1;
  42.     for( new i = 0; i != MAX_PLAYERS; i++ )
  43.     {
  44.         if( objectid == StrikeObject[i] )
  45.         {
  46.             object = objectid;
  47.         }
  48.     }
  49.    
  50.     if( object != -1 )
  51.     {
  52.         new Float:objectPos[3];
  53.         GetObjectPos( object, objectPos[0], objectPos[1], objectPos[2] );
  54.         for( new created = 0; created < 11 ; created += 1 )
  55.         {
  56.             new Float:explosionPos[2];
  57.             explosionPos[0] = objectPos[0]+random( 30 )-random( 6 );
  58.             explosionPos[1] = objectPos[1]+random( 30 )-random( 6 );
  59.             CreateExplosion( explosionPos[0], explosionPos[1], objectPos[2], 0, 50.0 );
  60.         }
  61.         SetTimerEx( "SecondStrike", 1000, false, "fff", objectPos[0], objectPos[1], objectPos[2] );
  62.         DestroyObject( object );
  63.     }
  64. }
  65.  
  66. public SecondStrike( Float:x, Float:y, Float:z )
  67. {
  68.     for( new created = 0; created < 11 ; created += 1 )
  69.     {
  70.         new Float:explosionPos[2];
  71.         explosionPos[0] = x+random( 30 )-random( 6 );
  72.         explosionPos[1] = y+random( 30 )-random( 6 );
  73.         CreateExplosion( explosionPos[0], explosionPos[1], z, 0, 50.0 );
  74.     }
  75.     return 1;
  76. }
  77.  
  78. public StrikeTimeTimer( playerid )
  79. {
  80.     if( StrikeTime[playerid] != 0 && StrikeTime[playerid] != -1)
  81.     {
  82.         StrikeTime[playerid] --;
  83.     }
  84.    
  85.     if( StrikeTime[playerid] == 0 )
  86.     {
  87.         StrikeTime[playerid] = -1;
  88.         SendClientMessage( playerid, -1, "You can request another airstrike now." );
  89.         KillTimer( fs_timer[playerid] );
  90.         return 1;
  91.     }
  92.  
  93.     if( StrikeTime[playerid] == STRIKE_TIMER-30 && RequestingStrike[playerid] == 1 )
  94.     {
  95.         SendClientMessage( playerid, -1, "30 seconds has passed, the airstrike call has finished." );
  96.         RequestingStrike[playerid] = 0;
  97.         StrikeTime[playerid] = 0;
  98.         KillTimer( fs_timer[playerid] );
  99.     }
  100.    
  101.     return 1;
  102. }
  103.        
  104. CMD:as( playerid, params[] )
  105.     return cmd_airstrike( playerid, params );
  106.  
  107. CMD:airstrike( playerid, params[] )
  108. {
  109.     new szString[128];
  110.     if( RequestingStrike[playerid] != 0 )
  111.         return SendClientMessage( playerid, -1, "You're already requesting an airstrike." );
  112.        
  113.     if( StrikeTime[playerid] != 0 && StrikeTime[playerid] != -1  )
  114.     {
  115.         format( szString, 128, "You must wait %d seconds to request another airstrike.", StrikeTime[playerid] );
  116.         SendClientMessage( playerid, -1, szString );
  117.         return 1;
  118.     }
  119.    
  120.     StrikeTime[playerid] = STRIKE_TIMER;
  121.     RequestingStrike[playerid] = 1;
  122.  
  123.     SendClientMessage( playerid, -1, "You have 30 seconds to mark the location you want to airstrike in your map." );
  124.     fs_timer[playerid] = SetTimerEx( "StrikeTimeTimer", 1*1000/*1 second*/, true, "i", playerid );
  125.     return 1;
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement