Advertisement
Guest User

Untitled

a guest
May 13th, 2012
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 14.15 KB | None | 0 0
  1. #include a_samp
  2. #include mapandreas
  3. #undef MAX_PLAYERS
  4. #define MAX_PLAYERS 100 // Serverslots beachten!
  5. #define MAX_CHOPPERS 5
  6. #define AMMO 50
  7. #define SHOOT "/fire"
  8. enum pInfo{
  9.     chopper,
  10.     bool:HasChopper,
  11.     ChopperID,
  12.     Float:SaveX,
  13.     Float:SaveY,
  14.     Float:SaveZ,
  15.     Float:SaveR
  16. };
  17. forward CreatePlayerChopper( gunnerid, npcname[  ], script[  ], pilotid );
  18. new PlayerInfo[ MAX_PLAYERS ][ pInfo ];
  19. new obj[ MAX_CHOPPERS char ] = -1;
  20. new objChopper[ MAX_OBJECTS char ] = -1;
  21. new Timer[ MAX_OBJECTS char ];
  22. new bool:Rocket[ MAX_OBJECTS ];
  23. new Text:TextDraw[ 7 char ];
  24. new ammo[ MAX_PLAYERS char ] = 0;
  25. new pName[ MAX_PLAYERS ][ MAX_PLAYER_NAME ];
  26. new pBotName[ MAX_PLAYERS ][ MAX_PLAYER_NAME ];
  27. new PlayerText:AmmoTDraw[ MAX_PLAYERS char ];
  28. #define AmmoTDraw[%0] AmmoTDraw{%0}
  29. #define objChopper[%0] objChopper{%0}
  30. #define TextDraw[%0] TextDraw{%0}
  31. #define obj[%0] obj{%0}
  32. #define Timer[%0] Timer{%0}
  33. #define ammo[%0] ammo{%0}
  34. public OnFilterScriptInit( )
  35. {
  36.     MapAndreas_Init( MAP_ANDREAS_MODE_FULL );
  37.     TextDraw[ 0 ] = TextDrawCreate( -1.000000, 2.000000, "w" );
  38.     TextDrawBackgroundColor( TextDraw[ 0 ], 255 );
  39.     TextDrawFont( TextDraw[ 0 ], 1 );
  40.     TextDrawLetterSize( TextDraw[ 0 ], 0.019998, 51.299999 );
  41.     TextDrawColor( TextDraw[ 0 ], -1 );
  42.     TextDrawSetOutline( TextDraw[ 0 ], 0 );
  43.     TextDrawSetProportional( TextDraw[ 0 ], 1 );
  44.     TextDrawSetShadow( TextDraw[ 0 ], 1 );
  45.     TextDrawUseBox( TextDraw[ 0 ], 1 );
  46.     TextDrawBoxColor( TextDraw[ 0 ], 100 );
  47.     TextDrawTextSize( TextDraw[ 0 ], 642.000000, 30.000000 );
  48.  
  49.     TextDraw[ 1 ] = TextDrawCreate( 489.000000, 6.000000, "Uplink: 29.28.54#~n~       10x60 MHZ" );
  50.     TextDrawBackgroundColor( TextDraw[ 1 ], 255 );
  51.     TextDrawFont( TextDraw[ 1 ], 1 );
  52.     TextDrawLetterSize( TextDraw[ 1 ], 0.500000, 1.000000 );
  53.     TextDrawColor( TextDraw[ 1 ], -1 );
  54.     TextDrawSetOutline( TextDraw[ 1 ], 0 );
  55.     TextDrawSetProportional( TextDraw[ 1 ], 1 );
  56.     TextDrawSetShadow( TextDraw[ 1 ], 1 );
  57.  
  58.     TextDraw[ 2 ] = TextDrawCreate( 601.000000, 25.000000, "Lazer: armed" );
  59.     TextDrawBackgroundColor( TextDraw[ 2 ], 255 );
  60.     TextDrawFont( TextDraw[ 2 ], 1 );
  61.     TextDrawLetterSize( TextDraw[ 2 ], 0.170000, 1.000000 );
  62.     TextDrawColor( TextDraw[ 2 ], -1 );
  63.     TextDrawSetOutline( TextDraw[ 2 ], 0 );
  64.     TextDrawSetProportional( TextDraw[ 2 ], 1 );
  65.     TextDrawSetShadow( TextDraw[ 2 ], 1 );
  66.  
  67.     TextDraw[ 4 ] = TextDrawCreate( 308.000000, 218.000000, "-  -" );
  68.     TextDrawBackgroundColor( TextDraw[ 4 ], 255 );
  69.     TextDrawFont( TextDraw[ 4 ], 1 );
  70.     TextDrawLetterSize( TextDraw[ 4 ], 0.500000, 1.000000 );
  71.     TextDrawColor( TextDraw[ 4 ], -1 );
  72.     TextDrawSetOutline( TextDraw[ 4 ], 0 );
  73.     TextDrawSetProportional( TextDraw[ 4 ], 1 );
  74.     TextDrawSetShadow( TextDraw[ 4 ], 1 );
  75.  
  76.     TextDraw[ 5 ] = TextDrawCreate( 321.750000, 210.000000, "!~n~~n~!" );
  77.     TextDrawBackgroundColor( TextDraw[ 5 ], 255 );
  78.     TextDrawFont( TextDraw[ 5 ], 1 );
  79.     TextDrawLetterSize( TextDraw[ 5 ], 0.180000, 1.000000 );
  80.     TextDrawColor( TextDraw[ 5 ], -1 );
  81.     TextDrawSetOutline( TextDraw[ 5 ], 0 );
  82.     TextDrawSetProportional( TextDraw[ 5 ], 1 );
  83.     TextDrawSetShadow( TextDraw[ 5 ], 1 );
  84.  
  85.     TextDraw[ 6 ] = TextDrawCreate( 222.000000, 90.000000, "CAMERA: AH64-APACHE#" );
  86.     TextDrawBackgroundColor( TextDraw[ 6 ], 255 );
  87.     TextDrawFont( TextDraw[ 6 ], 1 );
  88.     TextDrawLetterSize( TextDraw[ 6 ], 0.500000, 1.000000 );
  89.     TextDrawColor( TextDraw[ 6 ], -1 );
  90.     TextDrawSetOutline( TextDraw[ 6 ], 0 );
  91.     TextDrawSetProportional( TextDraw[ 6 ], 1 );
  92.     TextDrawSetShadow( TextDraw[ 6 ], 0 );
  93.     for( new i = 0; i < MAX_PLAYERS; i ++ )
  94.     {
  95.         if( !IsPlayerConnected( i ) ) continue;
  96.         GetPlayerName( i, pName[ i ], MAX_PLAYER_NAME );
  97.         AmmoTDraw[ i ] = CreatePlayerTextDraw( i, 514.000000, 397.000000, "!!!!!!!!!!!!!!!!!!!!~n~!!!!!!!!!!!!!!!!!!!!" );
  98.         PlayerTextDrawBackgroundColor( i, AmmoTDraw[ i ], 255 );
  99.         PlayerTextDrawFont( i, AmmoTDraw[ i ], 1 );
  100.         PlayerTextDrawLetterSize( i, AmmoTDraw[ i ], 0.500000, 1.000000 );
  101.         PlayerTextDrawColor( i, AmmoTDraw[ i ], -1 );
  102.         PlayerTextDrawSetOutline( i, AmmoTDraw[ i ], 0 );
  103.         PlayerTextDrawSetProportional( i, AmmoTDraw[ i ], 1 );
  104.         PlayerTextDrawSetShadow( i, AmmoTDraw[ i ], 1 );
  105.     }
  106. }
  107. public OnFilterScriptExit( )
  108. {
  109.     for( new i = 0 ; i < MAX_PLAYERS ; i ++ )
  110.     {
  111.         if( !IsPlayerConnected( i ) ) continue;
  112.         PlayerTextDrawDestroy( i, AmmoTDraw[ i ] );
  113.     }
  114.     TextDrawHideForAll( TextDraw[ 0 ] );
  115.     TextDrawDestroy( TextDraw[ 0 ] );
  116.     TextDrawHideForAll( TextDraw[ 1 ] );
  117.     TextDrawDestroy( TextDraw[ 1 ] );
  118.     TextDrawHideForAll( TextDraw[ 2 ] );
  119.     TextDrawDestroy( TextDraw[ 2 ] );
  120.     TextDrawHideForAll( TextDraw[ 3 ] );
  121.     TextDrawDestroy( TextDraw[ 3 ] );
  122.     TextDrawHideForAll( TextDraw[ 4 ] );
  123.     TextDrawDestroy( TextDraw[ 4 ] );
  124.     TextDrawHideForAll( TextDraw[ 5 ] );
  125.     TextDrawDestroy( TextDraw[ 5 ] );
  126.     TextDrawHideForAll( TextDraw[ 6 ] );
  127.     TextDrawDestroy( TextDraw[ 6 ] );
  128.     return 1;
  129. }
  130. public OnPlayerCommandText( playerid, cmdtext[  ] )
  131. {
  132.     if ( !strcmp( cmdtext, SHOOT ) )
  133.     {
  134.         ammo[ PlayerInfo[ playerid ][ ChopperID ] ]++;
  135.         new str[ 64 ];
  136.         format( str, sizeof str, "~b~" );
  137.         for( new i = 0 ; i < AMMO ; i++ )
  138.         {
  139.             if( i == AMMO/2 )
  140.             {
  141.                 format( str, sizeof str, ( ( ammo[ PlayerInfo[ playerid ][ ChopperID ] ] != AMMO/2 ) ? ( "%s~n~!" ) : ( "%s~n~~w~!" ) ), str );
  142.                 continue;
  143.             }
  144.             if( i == ammo[ PlayerInfo[ playerid ][ ChopperID ] ] )
  145.             {
  146.                 format( str, sizeof str, "%s~w~!", str );
  147.                 continue;
  148.             }
  149.             if( i < ammo[ PlayerInfo[ playerid ][ ChopperID ] ] )
  150.             {
  151.                 format( str, sizeof str, "%s!", str );
  152.                 continue;
  153.             }
  154.             format( str, sizeof str, "%s!", str );
  155.         }
  156.         PlayerTextDrawSetString( playerid, AmmoTDraw[ playerid ], str );
  157.         new
  158.             Float:fPX, Float:fPY, Float:fPZ,
  159.             Float:fVX, Float:fVY, Float:fVZ,
  160.             Float:object_x, Float:object_y, Float:object_z;
  161.         new
  162.             Float:fScale = 500;
  163.  
  164.         GetPlayerCameraPos( playerid, fPX, fPY, fPZ );
  165.         GetPlayerCameraFrontVector( playerid, fVX, fVY, fVZ );
  166.  
  167.         object_x = fPX + floatmul( fVX, fScale );
  168.         object_y = fPY + floatmul( fVY, fScale );
  169.         object_z = fPZ + floatmul( fVZ, fScale );
  170.         new obj1 = CreateObject( 345, fPX, fPY, fPZ, asin( fVZ ), 0.0, 360 - atan2( fVX, fVY ) );
  171.         Rocket[ obj1 ] = true;
  172.         objChopper[ obj1 ] = playerid;
  173.         MoveObject( obj1, object_x, object_y, object_z, 75.0 );
  174.         Timer[ obj1 ] = SetTimerEx( "CheckObj", 100, 1, "d", obj1 );
  175.         if( ammo[ PlayerInfo[ playerid ][ ChopperID ] ] >= AMMO )
  176.         {
  177.             OnPlayerCommandText( playerid, "/stop" );
  178.             ammo[ PlayerInfo[ playerid ][ ChopperID ] ] = 0;
  179.         }
  180.         return 1;
  181.     }
  182.     if( !strcmp( "/chopper", cmdtext, true ) )
  183.     {
  184.         new str[ 24 ];
  185.         format( str, sizeof str, "chopper%d", playerid );
  186.         CreatePlayerChopper( playerid, str, "glenpark", -1 );
  187.         return 1;
  188.     }
  189.     if( !strcmp( "/stop", cmdtext, true ) )
  190.     {
  191.         PlayerInfo[ playerid ][ HasChopper ] = false;
  192.         new ID = GetPlayerID( pBotName[ playerid ] );
  193.         if( IsPlayerNPC( ID ) )
  194.             Kick( ID );
  195.         ammo[ ID ] = 0;
  196.         PlayerInfo[ playerid ][ ChopperID ] = -1;
  197.         DestroyVehicle( PlayerInfo[ ID ][ chopper ] );
  198.         DestroyObject( obj[ ID ] );
  199.         obj[ ID ] = -1;
  200.         PlayerInfo[ ID ][ chopper ] = -1;
  201.         SetCameraBehindPlayer( playerid );
  202.         TextDrawHideForPlayer( playerid, TextDraw[ 0 ] );
  203.         TextDrawHideForPlayer( playerid, TextDraw[ 1 ] );
  204.         TextDrawHideForPlayer( playerid, TextDraw[ 2 ] );
  205.         PlayerTextDrawHide( playerid, AmmoTDraw[ playerid ] );
  206.         TextDrawHideForPlayer( playerid, TextDraw[ 4 ] );
  207.         TextDrawHideForPlayer( playerid, TextDraw[ 5 ] );
  208.         TextDrawHideForPlayer( playerid, TextDraw[ 6 ] );
  209.         return 1;
  210.     }
  211.     /*if( !strcmp( "/check", cmdtext, true ) )
  212.     {
  213.         new Float:x, Float:y, Float:z;
  214.         GetPlayerPos( GetPlayerID( "Chopper" ) , x, y, z );
  215.         SetPlayerPos( playerid, x, y, z );
  216.     }
  217.     if( !strcmp( cmdtext, "/test" ) )
  218.     {
  219.         new
  220.             Float:fVX, Float:fVY, Float:fVZ;
  221.         GetPlayerCameraFrontVector( playerid, fVX, fVY, fVZ );
  222.         new str[ 256 ];
  223.         format( str, sizeof str, "XVec: %f YVec: %f ZVec: %f", fVX, fVY, fVZ );
  224.         SendClientMessage( playerid, 0xFFFFFF, str );
  225.         return 1;
  226.     }*/
  227.     return 0;
  228. }
  229. public CreatePlayerChopper( gunnerid, npcname[  ], script[  ], pilotid )
  230. {
  231.     switch( pilotid )
  232.     {
  233.         case -1:
  234.         {
  235.             if( !IsPlayerConnected( gunnerid ) ) return 0;
  236.             ConnectNPC( npcname, script );
  237.             format( pBotName[ gunnerid ], sizeof pBotName[  ], npcname );
  238.             SendClientMessage( gunnerid, 0xFFFFFFFF, "Verbündeter Apache ist unterwegs!" );
  239.             PlayerInfo[ gunnerid ][ HasChopper ] = true;
  240.             new
  241.                 Float:x,Float:y,Float:z,Float:r;
  242.             GetPlayerPos( gunnerid, x, y, z );
  243.             PlayerInfo[ gunnerid ][ SaveX ] = x;
  244.             PlayerInfo[ gunnerid ][ SaveY ] = y;
  245.             PlayerInfo[ gunnerid ][ SaveZ ] = z;
  246.             GetPlayerFacingAngle( gunnerid, r );
  247.             PlayerInfo[ gunnerid ][ SaveR ] = r;
  248.             return 1;
  249.         }
  250.         default:
  251.         {
  252.             if( !IsPlayerConnected( pilotid ) ) return 0;
  253.             if( !IsPlayerConnected( gunnerid ) ) return 0;
  254.             PlayerInfo[ gunnerid ][ ChopperID ] = pilotid;
  255.             obj[ pilotid ] = CreateObject( 330, 0, 0, 235, 0 , 0, 0, 0.0 );
  256.             PlayerInfo[ pilotid ][ chopper ] = CreateVehicle( 425, 0, 0, 0, 0, 0, 0, -1 );
  257.             AttachObjectToVehicle( obj[ pilotid ], PlayerInfo[ pilotid ][ chopper ], 0, 4.45, -1.2, 0, 0, 0 );
  258.             PutPlayerInVehicle( pilotid, PlayerInfo[ pilotid ][ chopper ], 0 );
  259.             AttachCameraToObject( gunnerid, obj[ pilotid ] );
  260.             TextDrawShowForPlayer( gunnerid, TextDraw[ 0 ] );
  261.             TextDrawShowForPlayer( gunnerid, TextDraw[ 1 ] );
  262.             TextDrawShowForPlayer( gunnerid, TextDraw[ 2 ] );
  263.             PlayerTextDrawShow( gunnerid, AmmoTDraw[ gunnerid ] );
  264.             TextDrawShowForPlayer( gunnerid, TextDraw[ 4 ] );
  265.             TextDrawShowForPlayer( gunnerid, TextDraw[ 5 ] );
  266.             TextDrawShowForPlayer( gunnerid, TextDraw[ 6 ] );
  267.             return 1;
  268.         }
  269.     }
  270.     return 0;
  271. }
  272. public OnPlayerDisconnect( playerid )
  273. {
  274.     if( PlayerInfo[ playerid ][ HasChopper ] )
  275.     {
  276.         if( IsPlayerNPC( PlayerInfo[ playerid ][ ChopperID ] ) )
  277.             Kick( PlayerInfo[ playerid ][ ChopperID ] );
  278.     }
  279.     PlayerInfo[ playerid ][ HasChopper ] = false;
  280.     for( new i = 0 ; i < MAX_PLAYERS; i ++ )
  281.     {
  282.         if( !IsPlayerConnected ( i ) ) continue;
  283.         if( PlayerInfo[ i ][ ChopperID ] == playerid )
  284.             OnPlayerCommandText( playerid, SHOOT );
  285.     }
  286.     return 0;
  287. }
  288. public OnPlayerKeyStateChange( playerid, newkeys, oldkeys )
  289. {
  290.     if( newkeys & KEY_FIRE && PlayerInfo[ playerid ][ HasChopper ] )
  291.     {
  292.         OnPlayerCommandText( playerid, SHOOT );
  293.     }
  294.     return 0;
  295. }
  296. public OnObjectMoved( objectid )
  297. {
  298.     if( !Rocket[ objectid ] ) return 1;
  299.     KillTimer( Timer[ objectid ] );
  300.     Timer[ objectid ] = -1;
  301.     new
  302.         Float:x, Float:y, Float:z, Float:Dist;
  303.     GetObjectPos( objectid, x, y, z );
  304.     CreateExplosion( x, y, z, 0, 10.0 );
  305.     for( new i = 0; i < MAX_PLAYERS; i ++ )
  306.     {
  307.         if( !IsPlayerConnected( i ) ) continue;
  308.         Dist = GetPlayerDistanceFromPoint( i, x, y, z);
  309.         if( Dist < 10.0 )
  310.         {
  311.             new Float:HP,Float:NewHP;
  312.             GetPlayerHealth( i, HP );
  313.             NewHP = HP-150+Dist*10;
  314.             if( NewHP >= HP )
  315.             {
  316.                 TogglePlayerSpectating( i, 1 );
  317.                 TogglePlayerSpectating( i, 0 );
  318.                 CallRemoteFunction( "OnPlayerDeath", "ddd", i, objChopper[ objectid ], 51 );
  319.             }
  320.             else SetPlayerHealth( i, NewHP );
  321.         }
  322.     }
  323.     Rocket[ objectid ] = false;
  324.     DestroyObject( objectid );
  325.     return 0;
  326. }
  327. forward CheckObj( objid );
  328. public CheckObj( objid )
  329. {
  330.     if( !Rocket[ objid ] ) return 1;
  331.     new
  332.         Float:x, Float:y, Float:z, Float:Z, Float:Dist;
  333.     GetObjectPos( objid, x, y, z );
  334.     MapAndreas_FindZ_For2DCoord( x, y, Z );
  335.     if( Z > z || ( z - Z ) < 5.0 )
  336.     {
  337.         KillTimer( Timer[ objid ] );
  338.         Timer[ objid ] = -1;
  339.         CreateExplosion( x, y, z, 0, 10.0 );
  340.         for( new i = 0; i < MAX_PLAYERS; i ++ )
  341.         {
  342.             if( !IsPlayerConnected( i ) ) continue;
  343.             Dist = GetPlayerDistanceFromPoint( i, x, y, z);
  344.             if( Dist < 10.0 )
  345.             {
  346.                 new Float:HP,Float:NewHP;
  347.                 GetPlayerHealth( i, HP );
  348.                 NewHP = HP-150+Dist*10;
  349.                 if( NewHP >= HP )
  350.                 {
  351.                     TogglePlayerSpectating( i, 1 );
  352.                     TogglePlayerSpectating( i, 0 );
  353.                     CallRemoteFunction( "OnPlayerDeath", "ddd", i, objChopper[ objid ], 51 );
  354.                 }
  355.                 else SetPlayerHealth( i, NewHP );
  356.             }
  357.         }
  358.         Rocket[ objid ] = false;
  359.         DestroyObject( objid );
  360.     }
  361.     return 1;
  362. }
  363. public OnPlayerConnect( playerid )
  364. {
  365.     GetPlayerName( playerid, pName[ playerid ], MAX_PLAYER_NAME );
  366.     AmmoTDraw[ playerid ] = CreatePlayerTextDraw( playerid, 514.000000, 397.000000, "!!!!!!!!!!!!!!!!!!!!~n~!!!!!!!!!!!!!!!!!!!!" );
  367.     PlayerTextDrawBackgroundColor( playerid, AmmoTDraw[ playerid ], 255 );
  368.     PlayerTextDrawFont( playerid, AmmoTDraw[ playerid ], 1 );
  369.     PlayerTextDrawLetterSize( playerid, AmmoTDraw[ playerid ], 0.500000, 1.000000 );
  370.     PlayerTextDrawColor( playerid, AmmoTDraw[ playerid ], -1 );
  371.     PlayerTextDrawSetOutline( playerid, AmmoTDraw[ playerid ], 0 );
  372.     PlayerTextDrawSetProportional( playerid, AmmoTDraw[ playerid ], 1 );
  373.     PlayerTextDrawSetShadow( playerid, AmmoTDraw[ playerid ], 1 );
  374.     if( IsPlayerNPC( playerid ) )
  375.     {
  376.         for( new i = 0; i < MAX_PLAYERS; i ++ )
  377.         {
  378.             if( !IsPlayerConnected( i ) ) continue;
  379.             if( !strcmp( pName[ playerid ], pBotName[ i ] ) && pBotName[ i ][ 0 ] )
  380.             {
  381.                 PlayerInfo[ i ][ ChopperID ] = playerid;
  382.                 obj[ playerid ] = CreateObject( 330, 0, 0, 235, 0 , 0, 0, 0.0 );
  383.                 PlayerInfo[ playerid ][ chopper ] = CreateVehicle( 425, 0, 0, 235, 0, 0, 0, -1 );
  384.                 AttachObjectToVehicle( obj[ playerid ], PlayerInfo[ playerid ][ chopper ], 0, 4.45, -1.2, 0, 0, 0 );
  385.                 PutPlayerInVehicle( playerid, PlayerInfo[ playerid ][ chopper ], 0 );
  386.                 PutPlayerInVehicle( i, PlayerInfo[ playerid ][ chopper ], 1 );
  387.                 AttachCameraToObject( i, obj[ playerid ] );
  388.                 TextDrawShowForPlayer( i, TextDraw[ 0 ] );
  389.                 TextDrawShowForPlayer( i, TextDraw[ 1 ] );
  390.                 TextDrawShowForPlayer( i, TextDraw[ 2 ] );
  391.                 PlayerTextDrawShow( i, AmmoTDraw[ i ] );
  392.                 TextDrawShowForPlayer( i, TextDraw[ 4 ] );
  393.                 TextDrawShowForPlayer( i, TextDraw[ 5 ] );
  394.                 TextDrawShowForPlayer( i, TextDraw[ 6 ] );
  395.                 break;
  396.             }
  397.         }
  398.     }
  399.     return 0;
  400. }
  401. GetPlayerID( playername[  ] )
  402. {
  403.     for( new i = 0; i < MAX_PLAYERS; i++ )
  404.     {
  405.         if( !IsPlayerConnected( i ) ) continue;
  406.         if( !strcmp( playername, pName[ i ] ) ) return i;
  407.     }
  408.     return -1;
  409. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement