nickdodd25

Fixed Minigame Dont Get Wet

Jun 30th, 2013
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 13.57 KB | None | 0 0
  1. /*                                           ________________________________
  2.                       __,__                 (                               )
  3.              .--.  .-"     "-.  .--.        ( Monky fix, good now, happy be!)
  4.             / .. \/  .-. .-.  \/ .. \       (       Keep the credits!       )
  5.            | |  '|  /   Y   \  |'  | |    / (                               )
  6.            | \   \  \ 0 | 0 /  /   / |   /   ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
  7.             \ '- ,\.-"`` ``"-./, -' /   /
  8.              `'-' /_   ^ ^   _\ '-'`   /
  9.              .--'|  \._ _ _./  |'--.
  10.            /`    \   \.-.  /   /    `\
  11.           /       '._/  |-' _.'       \
  12.          /          ;  /--~'   |       \
  13.         /        .'\|.-\--.     \       \
  14.        /   .'-. /.-.;\  |\|'~'-.|\       \
  15.        \       `-./`|_\_/ `     `\'.      \
  16.         '.      ;     ___)        '.`;    /
  17.           '-.,_ ;     ___)          \/   /
  18.            \   ``'------'\       \   `  /
  19.             '.    \       '.      |   ;/_
  20.           ___>     '.       \_ _ _/   ,  '--.
  21.         .'   '.   .-~~~~~-. /     |--'`~~-.  \
  22.        // / .---'/  .-~~-._/ / / /---..__.'  /
  23.       ((_(_/    /  /      (_(_(_(---.__    .'
  24.                 | |     _              `~~`
  25.                 | |     \'.
  26.                  \ '....' |
  27.                   '.,___.'
  28.  
  29.         #Name: [FilterScript]Don't Get Wet
  30.         #Author: iMonk3y
  31.         #Release Date: 31/01/2011
  32.         #Credits:
  33.             ¤ zcmd             - Zeex      (http://forum.sa-mp.com/showthread.php?t=91354)
  34.             ¤ foreach       - Y_Less    (http://forum.sa-mp.com/showthread.php?t=92679)
  35. */
  36.  
  37. #define FILTERSCRIPT
  38.  
  39. #include <a_samp>
  40. #include <zcmd>
  41. #include <foreach>
  42.  
  43. #define isodd(%1) \
  44.     ((%1) & 0x01)
  45.  
  46. #define iseven(%1) \
  47.     (!isodd((%1)))
  48.  
  49. #define ALL_PLAYERS     200     //Define number of players on your server
  50. #define MAX_SLOTS       54      //Don't change this
  51.  
  52. #define PRIZE_MONEY     10000
  53.  
  54. #define LIME        0x88AA62FF
  55. #define WHITE       0xFFFFFFAA
  56. #define RULE        0xFBDF89AA
  57. #define ORANGE      0xDB881AAA
  58.  
  59. #define COL_LIME    \
  60.     "{88AA62}"
  61. #define COL_WHITE   \
  62.     "{FFFFFF}"
  63. #define COL_RULE    \
  64.     "{FBDF89}"
  65. #define COL_ORANGE  \
  66.     "{DB881A}"
  67.  
  68. forward SpeedUp( object, Float:x, Float:y, Float:z);
  69. forward RespawnPlayer( player );
  70. forward MinigameWinner( player );
  71. forward MinigameCountdown( );
  72. forward MinigameUpdate( );
  73. forward EndMinigame( );
  74.  
  75. new bool:Minigamer_[ALL_PLAYERS char];
  76. new bool:VIEW_FROM_ABOVE;
  77. new inProgress, uTimer;
  78. new Objects_[2][MAX_SLOTS];
  79. new pWeaponData[ALL_PLAYERS][13];
  80. new pSavedAmmo[ALL_PLAYERS][13];
  81. new Float:pCoords[ALL_PLAYERS][3];
  82. new pInterior[ALL_PLAYERS];
  83.  
  84. new Iterator:_Minigamer<MAX_SLOTS>;
  85. new Iterator:_Objects<MAX_SLOTS>;
  86.  
  87. new pReadyText[4][64] =
  88. {
  89.     "~n~ ~n~ ~n~ ~y~stand by...",
  90.     "~n~ ~n~ ~n~ ~y~get Ready!",
  91.     "~n~ ~n~ ~n~ ~y~are you ready?",
  92.     "~n~ ~n~ ~n~ ~y~ready to get wet?"
  93. };
  94.  
  95. new pFellOffText[5][28] =
  96. {
  97.     "~n~ ~r~hosed",
  98.     "~n~ ~r~all wet",
  99.     "~n~ ~r~no swimming",
  100.     "~n~ ~r~you're drowning!",
  101.     "~n~ ~r~water... baaad!"
  102. };
  103.  
  104. new Float:gCoords[MAX_SLOTS][3] = {
  105.    
  106.     { -5309.198120,-199.052383,22.593704 },
  107.     { -5309.198120,-195.786071,22.593704 },
  108.     { -5309.198120,-192.510620,22.593704 },
  109.     { -5309.198120,-189.250564,22.593704 },
  110.     { -5309.198120,-185.987960,22.593704 },
  111.     { -5309.198120,-182.727081,22.593704 },
  112.     { -5309.198120,-179.463394,22.593704 },
  113.     { -5309.198120,-176.205261,22.593704 },
  114.     { -5304.841796,-176.205261,22.593704 },
  115.     { -5304.841796,-179.468795,22.593704 },
  116.     { -5304.841796,-182.737884,22.593704 },
  117.     { -5304.841796,-185.989654,22.593704 },
  118.     { -5304.841796,-189.259185,22.593704 },
  119.     { -5304.841796,-192.518615,22.593704 },
  120.     { -5304.841796,-195.785491,22.593704 },
  121.     { -5304.841796,-199.054733,22.593704 },
  122.     { -5300.489990,-199.054733,22.593704 },
  123.     { -5300.489990,-195.782165,22.593704 },
  124.     { -5300.489990,-192.531250,22.593704 },
  125.     { -5300.489990,-189.274765,22.593704 },
  126.     { -5300.489990,-186.003005,22.593704 },
  127.     { -5300.489990,-182.735229,22.593704 },
  128.     { -5300.489990,-179.471069,22.593704 },
  129.     { -5300.489990,-176.208007,22.593704 },
  130.     { -5296.138061,-176.208007,22.593704 },
  131.     { -5296.138061,-179.479248,22.593704 },
  132.     { -5296.138061,-182.744735,22.593704 },
  133.     { -5296.138061,-186.002944,22.593704 },
  134.     { -5296.138061,-189.274505,22.593704 },
  135.     { -5296.138061,-192.533691,22.593704 },
  136.     { -5296.138061,-195.788970,22.593704 },
  137.     { -5296.138061,-199.048782,22.593704 },
  138.     { -5291.776000,-199.050140,22.593704 },
  139.     { -5291.776000,-195.790634,22.593704 },
  140.     { -5291.776000,-192.542922,22.593704 },
  141.     { -5291.776000,-189.277542,22.593704 },
  142.     { -5291.776000,-186.013275,22.593704 },
  143.     { -5291.776000,-182.742355,22.593704 },
  144.     { -5291.776000,-179.475021,22.593704 },
  145.     { -5291.776000,-176.215805,22.593704 },
  146.     { -5287.432250,-176.215805,22.593704 },
  147.     { -5287.432250,-179.485168,22.593704 },
  148.     { -5287.432250,-182.739608,22.593704 },
  149.     { -5287.432250,-186.016723,22.593704 },
  150.     { -5287.432250,-189.277816,22.593704 },
  151.     { -5287.432250,-192.539001,22.593704 },
  152.     { -5287.432250,-195.796325,22.593704 },
  153.     { -5287.432250,-199.053771,22.593704 },
  154.     { -5287.431274,-202.320648,22.593704 },
  155.     { -5291.781616,-202.320648,22.593704 },
  156.     { -5296.136718,-202.320648,22.593704 },
  157.     { -5300.493652,-202.320648,22.593704 },
  158.     { -5304.848876,-202.320648,22.593704 },
  159.     { -5309.201660,-202.320648,22.593704 }
  160. };
  161.  
  162. public OnFilterScriptInit( )
  163. {
  164.     return 1;
  165. }
  166.  
  167. public OnFilterScriptExit( )
  168. {
  169.     if( inProgress > 0 ) EndMinigame( );
  170.     return 1;
  171. }
  172.  
  173. public OnPlayerDisconnect( playerid, reason )
  174. {
  175.     new str[128];
  176.     if( Minigamer_{ playerid } == true )
  177.     {
  178.         if( inProgress > 1 )
  179.         {
  180.             format( str, sizeof( str ), "* %s "COL_RULE"has dropped out of "COL_ORANGE"Don't Get Wet"COL_RULE" minigame, "COL_LIME"rank %d", PlayerName( playerid ), Iter_Count(_Minigamer) );
  181.             SendClientMessageToAll( LIME, str );
  182.             Iter_Remove(_Minigamer, playerid );
  183.             Minigamer_{ playerid } = false;
  184.             if( Iter_Count(_Minigamer) < 2 )
  185.             {
  186.                 foreach(_Minigamer, i ) MinigameWinner( i );
  187.             }
  188.         }
  189.         else
  190.         {
  191.             Iter_Remove(_Minigamer, playerid );
  192.             Minigamer_{ playerid } = false;
  193.         }
  194.     }
  195.     return 1;
  196. }
  197.  
  198. public OnPlayerDeath( playerid, killerid, reason )
  199. {
  200.     new str[128];
  201.     if( Minigamer_{ playerid } == true )
  202.     {
  203.         if( inProgress > 1 )
  204.         {
  205.             format( str, sizeof( str ), "* %s "COL_RULE"has dropped out of "COL_ORANGE"Don't Get Wet"COL_RULE" minigame, "COL_LIME"rank %d", PlayerName( playerid ), Iter_Count(_Minigamer) );
  206.             SendClientMessageToAll( LIME, str );
  207.             Iter_Remove(_Minigamer, playerid );
  208.             Minigamer_{ playerid } = false;
  209.             if( Iter_Count(_Minigamer) < 2 )
  210.             {
  211.                 foreach(_Minigamer, i ) MinigameWinner( i );
  212.             }
  213.         }
  214.         else
  215.         {
  216.             SendClientMessage( playerid, LIME, "Your sign up for "COL_ORANGE"Don't Get Wet"COL_LIME" minigame has been cancelled." );
  217.             Iter_Remove(_Minigamer, playerid );
  218.             Minigamer_{ playerid } = false;
  219.         }
  220.     }
  221.     return 1;
  222. }
  223.  
  224. CMD:getwet( playerid, params[] )
  225. {
  226.     if( GetPlayerState( playerid ) == PLAYER_STATE_WASTED )
  227.         return SendClientMessage( playerid, LIME, "Command is temporary disabled because you're wasted." );
  228.     else if( Minigamer_{ playerid } != false )
  229.         return SendClientMessage( playerid, LIME, "You have already signed up for "COL_ORANGE"Don't Get Wet"COL_LIME" minigame." );
  230.     else if( inProgress > 1 )
  231.         return SendClientMessage( playerid, ORANGE, "Don't Get Wet "COL_LIME"minigame is currently in progress, please wait." );
  232.     else if( Iter_Count(_Minigamer) > MAX_SLOTS-1 )
  233.         return SendClientMessage( playerid, ORANGE,"Don't Get Wet "COL_LIME"minigame is already full. Please wait untill it ends." );
  234.     if( inProgress < 1 )
  235.     {
  236.         if( strcmp( params, "1", true ) == 0 )
  237.         VIEW_FROM_ABOVE = true;
  238.         else if( strcmp( params, "2", true ) == 0 )
  239.         VIEW_FROM_ABOVE = false;
  240.         else return SendClientMessage( playerid, WHITE, "Use: /getwet [1 or 2]" );
  241.  
  242.         new str[128];
  243.         Minigamer_{ playerid } = true;
  244.         Iter_Add(_Minigamer, playerid );
  245.         format( str, sizeof( str ), "Don't Get Wet v.%i.0 "COL_RULE"minigame will start in 20 seconds. Type "COL_ORANGE"/getwet "COL_RULE"to join!", strval(params) );
  246.         SendClientMessageToAll( ORANGE, str );
  247.         SetTimer( "MinigameCountdown", 20000, 0 );
  248.         for( new i; i < MAX_SLOTS; i++ )
  249.         {
  250.             //The object (window) is only visible from one side
  251.             Objects_[0][i] = CreateObject( 1649, gCoords[i][0], gCoords[i][1], gCoords[i][2], -90.000000, 0.000000, 0.000000, 150.0 );
  252.             if(!VIEW_FROM_ABOVE) //In case /getwet 2, we need to multiply number of objects and turn them around so players would be able to see them from below
  253.             Objects_[1][i] = CreateObject( 1649, gCoords[i][0], gCoords[i][1], gCoords[i][2], -270.000000, 0.000000, 0.000000, 150.0 );
  254.             Iter_Add(_Objects, i );
  255.         }
  256.         inProgress = 1;
  257.     }
  258.     else
  259.     {
  260.         Minigamer_{ playerid } = true;
  261.         Iter_Add(_Minigamer, playerid );
  262.         SendClientMessage( playerid, RULE,"You have signed up for "COL_ORANGE"Don't Get Wet "COL_RULE"minigame." );
  263.     }
  264.     return 1;
  265. }
  266.  
  267. public MinigameCountdown( )
  268. {
  269.     if( Iter_Count(_Minigamer) < 2 ) //End minigame if there aren't enough sign ups
  270.     {
  271.         SendClientMessageToAll( LIME,"There wasn't enough players to start "COL_ORANGE"Don't Get Wet"COL_LIME" minigame." );
  272.         foreach(_Minigamer, i) Minigamer_{ i } = false;
  273.         return EndMinigame( );
  274.     }
  275.     if( inProgress != 2 )
  276.     {
  277.         new spot;
  278.         foreach(_Minigamer, i )
  279.         {
  280.             GetPlayerPos( i, pCoords[i][0], pCoords[i][1], pCoords[i][2]);
  281.             pInterior[i] = GetPlayerInterior( i );
  282.             for( new a; a < 13; a++ )
  283.             {
  284.                 GetPlayerWeaponData( i, a, pWeaponData[i][a], pSavedAmmo[i][a] );
  285.             }
  286.             ResetPlayerWeapons( i );
  287.             SetPlayerInterior( i, 0 );
  288.             spot = Iter_Random(_Objects);
  289.             GameTextForPlayer( i, pReadyText[ random( sizeof( pReadyText ) ) ], 2050, 3 );
  290.             Iter_Remove(_Objects, spot );
  291.             SetPlayerCameraPos( i, -5298.4814,-218.4391,42.1386);
  292.             SetPlayerCameraLookAt( i, -5298.1616,-189.6903,23.6564);
  293.             TogglePlayerControllable( i, false );
  294.             SetPlayerPos( i, gCoords[spot][0], gCoords[spot][1], gCoords[spot][2] +0.5 );
  295.         }
  296.         Iter_Clear(_Objects);
  297.         for( new i; i < MAX_SLOTS; i++ ) Iter_Add(_Objects, i );
  298.         SetTimer( "MinigameCountdown", 2000, 0 );
  299.         inProgress = 2;
  300.     }
  301.     else
  302.     {
  303.         foreach(_Minigamer, i )
  304.         {
  305.             if(!VIEW_FROM_ABOVE)
  306.             SetCameraBehindPlayer( i );
  307.             PlayerPlaySound( i, 1057, 0.0, 0.0, 0.0 );
  308.             TogglePlayerControllable( i, true );
  309.         }
  310.         uTimer = SetTimer( "MinigameUpdate", 2500, 1 );
  311.     }
  312.     return 1;
  313. }
  314.  
  315. public MinigameUpdate( )
  316. {
  317.     if( Iter_Count(_Minigamer) < 1 ) return EndMinigame( );
  318.    
  319.     new str[128], Float:playerx, Float:playery, Float:playerz[ALL_PLAYERS];
  320.     foreach(_Minigamer, i )
  321.     {
  322.         GetPlayerPos( i, playerx, playery, playerz[i] );
  323.         if( playerz[i] < 2.0 ) //Checks if player is in the water
  324.         {
  325.             format( str, sizeof( str ), "* %s "COL_RULE"has dropped out of "COL_ORANGE"Don't Get Wet"COL_RULE" minigame, "COL_LIME"rank %d", PlayerName( i ), Iter_Count(_Minigamer) );
  326.             SendClientMessageToAll( LIME, str );
  327.             GameTextForPlayer( i, pFellOffText[ random( sizeof( pFellOffText ) ) ], 2500, 3 );
  328.             Iter_Remove(_Minigamer, i );
  329.             Minigamer_{ i } = false;
  330.             RespawnPlayer( i );
  331.         }
  332.     }
  333.     if( Iter_Count(_Minigamer) < 2 )
  334.     {
  335.         foreach(_Minigamer, i ) MinigameWinner( i );
  336.     }
  337.     new objectid, Float:ObjectX, Float:ObjectY, Float:ObjectZ;
  338.  
  339.     if(!VIEW_FROM_ABOVE)
  340.     {
  341.         foreach(_Objects, i )
  342.         {
  343.             if( isodd( random( 10 ) ) )
  344.             {
  345.                 GetObjectPos( Objects_[0][i], ObjectX, ObjectY, ObjectZ );
  346.                 MoveObject( Objects_[0][i], ObjectX, ObjectY, ObjectZ -1.5, 0.2 );
  347.                 MoveObject( Objects_[1][i], ObjectX, ObjectY, ObjectZ -1.5, 0.2 );
  348.             }
  349.             else
  350.             {
  351.                 GetObjectPos( Objects_[0][i], ObjectX, ObjectY, ObjectZ );
  352.                 MoveObject( Objects_[0][i], ObjectX, ObjectY, ObjectZ +1.5, 0.2 );
  353.                 MoveObject( Objects_[1][i], ObjectX, ObjectY, ObjectZ +1.5, 0.2 );
  354.             }
  355.         }
  356.     }
  357.  
  358.     objectid = Iter_Random(_Objects);
  359.     GetObjectPos( Objects_[0][objectid], ObjectX, ObjectY, ObjectZ );
  360.     SetTimerEx("SpeedUp", 500, 0, "ifff", objectid, ObjectX, ObjectY, ObjectZ);
  361.     MoveObject( Objects_[0][objectid], ObjectX, ObjectY, ObjectZ -5, 1 );
  362.     if(!VIEW_FROM_ABOVE)
  363.     MoveObject( Objects_[1][objectid], ObjectX, ObjectY, ObjectZ -5, 1 );
  364.     Iter_Remove(_Objects, objectid );
  365.     return 1;
  366. }
  367.  
  368. public SpeedUp( object, Float:x, Float:y, Float:z )
  369. {
  370.     MoveObject( Objects_[0][object], x, y, z -150, 20 );
  371.     if(!VIEW_FROM_ABOVE)
  372.     MoveObject( Objects_[1][object], x, y, z -150, 20 );
  373.     foreach(_Minigamer, i ) PlayerPlaySound( i, 1039, 0.0, 0.0, 0.0 );
  374. }
  375.  
  376. public EndMinigame( )
  377. {
  378.     for( new i; i < MAX_SLOTS; i++ )
  379.     {
  380.         DestroyObject( Objects_[0][i] );
  381.         if(!VIEW_FROM_ABOVE)
  382.         DestroyObject( Objects_[1][i] );
  383.     }
  384.     inProgress = 0;
  385.     Iter_Clear(_Objects);
  386.     Iter_Clear(_Minigamer);
  387.     KillTimer( uTimer );
  388.     return 1;
  389. }
  390.  
  391. public MinigameWinner( player )
  392. {
  393.     new str[128];
  394.     format( str, sizeof( str ), "* %s "COL_RULE"has won "COL_ORANGE"Don't Get Wet "COL_RULE"minigame!", PlayerName( player ) );
  395.     SendClientMessageToAll( LIME, str );
  396.     GivePlayerMoney( player, PRIZE_MONEY );
  397.     Minigamer_{ player } = false;
  398.     Iter_Remove(_Minigamer, player );
  399.     SetTimerEx( "RespawnPlayer", 1400, 0, "i", player );
  400.     SetTimer( "EndMinigame", 1700, 0);
  401. }
  402.  
  403. public RespawnPlayer ( player )
  404. {
  405.     for( new i = 12; i > -1; i-- )
  406.     {
  407.         GivePlayerWeapon( player, pWeaponData[player][i], pSavedAmmo[player][i] );
  408.     }
  409.     SetPlayerPos( player, pCoords[player][0], pCoords[player][1], pCoords[player][2] );
  410.     SetPlayerInterior( player, pInterior[player] );
  411.     SetCameraBehindPlayer( player );
  412. }
  413.  
  414. stock PlayerName( playerid )
  415. {
  416.     new Name[MAX_PLAYER_NAME];
  417.     GetPlayerName( playerid, Name, sizeof( Name ) );
  418.     return Name;
  419. }
Advertisement
Add Comment
Please, Sign In to add comment