Hello There, Guest! Login or Register


Don't Get Wet
#1
Don't Get Wet (Minigame)

How win looking :o

We defo need a minigame like this!

EDIT:

Script for future reference:

Code:
/*                                           ___________________________________
                      __,__                 (                    )
             .--.  .-"     "-.  .--.        (   Monky fix, good now, happy be!    )
            / .. \/  .-. .-.  \/ .. \       (         Keep the credits!     )
           | |  '|  /   Y   \  |'  | |    / (                      )
           | \   \  \ 0 | 0 /  /   / |   /   ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
            \ '- ,\.-"`` ``"-./, -' /   /
             `'-' /_   ^ ^   _\ '-'`   /
             .--'|  \._ _ _./  |'--.
           /`    \   \.-.  /   /    `\
          /       '._/  |-' _.'       \
         /          ;  /--~'   |       \
        /        .'\|.-\--.     \       \
       /   .'-. /.-.;\  |\|'~'-.|\       \
       \       `-./`|_\_/ `     `\'.      \
        '.      ;     ___)        '.`;    /
          '-.,_ ;     ___)          \/   /
           \   ``'------'\       \   `  /
            '.    \       '.      |   ;/_
          ___>     '.       \_ _ _/   ,  '--.
        .'   '.   .-~~~~~-. /     |--'`~~-.  \
       // / .---'/  .-~~-._/ / / /---..__.'  /
      ((_(_/    /  /      (_(_(_(---.__    .'
                | |     _              `~~`
                | |     \'.
                 \ '....' |
                  '.,___.'

        #Name: [FilterScript]Don't Get Wet
        #Author: iMonk3y
        #Release Date: 31/01/2011
        #Credits:
            ¤ zcmd             - Zeex      (http://forum.sa-mp.com/showthread.php?t=91354)
            ¤ foreach       - Y_Less    (http://forum.sa-mp.com/showthread.php?t=92679)
*/

#define FILTERSCRIPT

#include <a_samp>
#include <zcmd>
#include <foreach>

#define isodd(%1) \
    ((%1) & 0x01)

#define iseven(%1) \
    (!isodd((%1)))

#define ALL_PLAYERS     200     //Define number of players on your server
#define MAX_SLOTS         54      //Don't change this

#define PRIZE_MONEY     10000

#define LIME         0x88AA62FF
#define WHITE         0xFFFFFFAA
#define RULE         0xFBDF89AA
#define ORANGE         0xDB881AAA

#define COL_LIME    \
    "{88AA62}"
#define COL_WHITE     \
    "{FFFFFF}"
#define COL_RULE       \
    "{FBDF89}"
#define COL_ORANGE    \
    "{DB881A}"

forward SpeedUp( object, Float:x, Float:y, Float:z );
forward RespawnPlayer( player );
forward MinigameWinner( player );
forward MinigameCountdown( );
forward MinigameUpdate( );
forward EndMinigame( );

new bool:Minigamer_[ALL_PLAYERS char];
new bool:VIEW_FROM_ABOVE;
new inProgress, uTimer;
new Objects_[2][MAX_SLOTS];
new pWeaponData[ALL_PLAYERS][13];
new pSavedAmmo[ALL_PLAYERS][13];
new Float:pCoords[ALL_PLAYERS][3];
new pInterior[ALL_PLAYERS];

new Iterator:_Minigamer    <MAX_SLOTS>;
new Iterator:_Objects    <MAX_SLOTS>;

new pReadyText[4][64] =
{
    "~n~ ~n~ ~n~ ~y~stand by...",
    "~n~ ~n~ ~n~ ~y~get ready!",
    "~n~ ~n~ ~n~ ~y~are you ready?",
    "~n~ ~n~ ~n~ ~y~ready to get wet?"
};

new pFellOffText[5][28] =
{
    "~n~ ~r~hosed",
    "~n~ ~r~all wet",
    "~n~ ~r~no swimming",
    "~n~ ~r~you're drowning!",
    "~n~ ~r~water... baaad!"
};

new Float:gCoords[MAX_SLOTS][7] = {
    
    { -5309.198120,-199.052383,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5309.198120,-195.786071,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5309.198120,-192.510620,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5309.198120,-189.250564,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5309.198120,-185.987960,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5309.198120,-182.727081,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5309.198120,-179.463394,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5309.198120,-176.205261,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5304.841796,-176.205261,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5304.841796,-179.468795,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5304.841796,-182.737884,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5304.841796,-185.989654,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5304.841796,-189.259185,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5304.841796,-192.518615,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5304.841796,-195.785491,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5304.841796,-199.054733,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5300.489990,-199.054733,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5300.489990,-195.782165,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5300.489990,-192.531250,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5300.489990,-189.274765,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5300.489990,-186.003005,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5300.489990,-182.735229,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5300.489990,-179.471069,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5300.489990,-176.208007,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5296.138061,-176.208007,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5296.138061,-179.479248,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5296.138061,-182.744735,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5296.138061,-186.002944,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5296.138061,-189.274505,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5296.138061,-192.533691,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5296.138061,-195.788970,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5296.138061,-199.048782,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5291.776000,-199.050140,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5291.776000,-195.790634,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5291.776000,-192.542922,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5291.776000,-189.277542,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5291.776000,-186.013275,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5291.776000,-182.742355,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5291.776000,-179.475021,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5291.776000,-176.215805,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5287.432250,-176.215805,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5287.432250,-179.485168,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5287.432250,-182.739608,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5287.432250,-186.016723,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5287.432250,-189.277816,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5287.432250,-192.539001,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5287.432250,-195.796325,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5287.432250,-199.053771,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5287.431274,-202.320648,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5291.781616,-202.320648,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5296.136718,-202.320648,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5300.493652,-202.320648,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5304.848876,-202.320648,22.593704,-90.000000,0.000000,0.000000,150.0 },
    { -5309.201660,-202.320648,22.593704,-90.000000,0.000000,0.000000,150.0 }
};

public OnFilterScriptInit( )
{
    return 1;
}

public OnFilterScriptExit( )
{
    if( inProgress > 0 ) EndMinigame( );
    return 1;
}

public OnPlayerDisconnect( playerid, reason )
{
    new str[128];
    if( Minigamer_{ playerid } == true )
    {
        if( inProgress > 1 )
        {
               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 ) );
            SendClientMessageToAll( LIME, str );
            Iter_Remove(_Minigamer, playerid );
            Minigamer_{ playerid } = false;
            if( Iter_Count(_Minigamer ) < 2 )
            {
                foreach(_Minigamer, i ) MinigameWinner( i );
            }
        }
        else
        {
            Iter_Remove(_Minigamer, playerid );
            Minigamer_{ playerid } = false;
        }
    }
    return 1;
}

public OnPlayerDeath( playerid, killerid, reason )
{
    new str[128];
    if( Minigamer_{ playerid } == true )
    {
        if( inProgress > 1 )
        {
               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 ) );
            SendClientMessageToAll( LIME, str );
            Iter_Remove(_Minigamer, playerid );
            Minigamer_{ playerid } = false;
            if( Iter_Count(_Minigamer ) < 2 )
            {
                foreach(_Minigamer, i ) MinigameWinner( i );
            }
        }
        else
        {
            SendClientMessage( playerid, LIME, "Your sign up for "COL_ORANGE"Don't Get Wet"COL_LIME" minigame has been cancelled." );
            Iter_Remove(_Minigamer, playerid );
            Minigamer_{ playerid } = false;
        }
    }
    return 1;
}

CMD:getwet( playerid, params[] )
{
    if( GetPlayerState( playerid ) == PLAYER_STATE_WASTED )
        return SendClientMessage( playerid, LIME, "Command is temporary disabled because you're wasted." );
    else if( Minigamer_{ playerid } != false )
        return SendClientMessage( playerid, LIME, "You have already signed up for "COL_ORANGE"Don't Get Wet"COL_LIME" minigame." );
    else if( inProgress > 1 )
        return SendClientMessage( playerid, ORANGE, "Don't Get Wet "COL_LIME"minigame is currently in progress, please wait." );
    else if( Iter_Count(_Minigamer ) > MAX_SLOTS )
        return SendClientMessage( playerid, ORANGE,"Don't Get Wet "COL_LIME"minigame is already full. Please wait untill it ends." );
    if( inProgress < 1 )
    {
        if( strcmp( params, "1", true ) == 0 )
        VIEW_FROM_ABOVE = true;
        else if( strcmp( params, "2", true ) == 0 )
        VIEW_FROM_ABOVE = false;
        else return SendClientMessage( playerid, WHITE, "Use: /getwet [1 or 2]" );

        new str[128];
        Minigamer_{ playerid } = true;
        Iter_Add(_Minigamer, playerid );
        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 ) );
        SendClientMessageToAll( ORANGE, str );
        SetTimer( "MinigameCountdown", 20000, 0 );
        for( new i; i < MAX_SLOTS; i++ )
        {
            //The object (window) is only visible from one side
            Objects_[0][i] = CreateObject( 1649, gCoords[i][0], gCoords[i][1], gCoords[i][2], gCoords[i][3], gCoords[i][4], gCoords[i][5], gCoords[i][6] );
            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
            Objects_[1][i] = CreateObject( 1649, gCoords[i][0], gCoords[i][1], gCoords[i][2], gCoords[i][3] -180.0, gCoords[i][4], gCoords[i][5], gCoords[i][6] );
            Iter_Add(_Objects, i );
        }
        inProgress = 1;
    }
    else
    {
        Minigamer_{ playerid } = true;
        Iter_Add(_Minigamer, playerid );
        SendClientMessage( playerid, RULE,"You have signed up for "COL_ORANGE"Don't Get Wet "COL_RULE"minigame." );
    }
    return 1;
}

public MinigameCountdown( )
{
    if( Iter_Count(_Minigamer ) < 2 ) //End minigame if there aren't enough sign ups
    {
        SendClientMessageToAll( LIME,"There wasn't enough players to start "COL_ORANGE"Don't Get Wet"COL_LIME" minigame." );
        foreach(_Minigamer, i) Minigamer_{ i } = false;
        return EndMinigame( );
    }
    if( inProgress != 2 )
    {
        new spot;
        foreach(_Minigamer, i )
        {
             GetPlayerPos( i, pCoords[i][0], pCoords[i][1], pCoords[i][2]);
             pInterior[i] = GetPlayerInterior( i );
             for( new a; a < 13; a++ )
            {
                  GetPlayerWeaponData( i, a, pWeaponData[i][a], pSavedAmmo[i][a] );
              }
            ResetPlayerWeapons( i );
            SetPlayerInterior( i, 0 );
            spot = Iter_Random(_Objects );
             GameTextForPlayer( i, pReadyText[ random( sizeof( pReadyText ) ) ], 2050, 3 );
             Iter_Remove(_Objects, spot );
             SetPlayerCameraPos( i, -5298.4814,-218.4391,42.1386);
             SetPlayerCameraLookAt( i, -5298.1616,-189.6903,23.6564);
             TogglePlayerControllable( i, false );
            SetPlayerPos( i, gCoords[spot][0], gCoords[spot][1], gCoords[spot][2] +0.5 );
        }
        Iter_Clear(_Objects);
        for( new i; i < MAX_SLOTS; i++ ) Iter_Add(_Objects, i );
        SetTimer( "MinigameCountdown", 2000, 0 );
        inProgress = 2;
    }
    else
    {
        foreach(_Minigamer, i )
        {
            if(!VIEW_FROM_ABOVE)
            SetCameraBehindPlayer( i );
            PlayerPlaySound( i, 1057, 0.0, 0.0, 0.0 );
            TogglePlayerControllable( i, true );
        }
        uTimer = SetTimer( "MinigameUpdate", 2500, 1 );
    }
    return 1;
}

public MinigameUpdate( )
{
    if( Iter_Count(_Minigamer ) < 1 ) return EndMinigame( );
    
    new str[128], Float:playerx, Float:playery, Float:playerz[ALL_PLAYERS];
    foreach(_Minigamer, i )
    {
        GetPlayerPos( i, playerx, playery, playerz[i] );
        if( playerz[i] < 2.0 ) //Checks if player is in the water
        {
            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 ) );
            SendClientMessageToAll( LIME, str );
            GameTextForPlayer( i, pFellOffText[ random( sizeof( pFellOffText ) ) ], 2500, 3 );
            Iter_Remove(_Minigamer, i );
            Minigamer_{ i } = false;
            RespawnPlayer( i );
        }
    }
    if( Iter_Count(_Minigamer ) < 2 )
    {
        foreach(_Minigamer, i ) MinigameWinner( i );
    }
    new objectid, Float:ObjectX, Float:ObjectY, Float:ObjectZ;

    if(!VIEW_FROM_ABOVE)
    {
         foreach(_Objects, i )
        {
            if( isodd( random( 10 ) ) )
            {
                 GetObjectPos( Objects_[0][i], ObjectX, ObjectY, ObjectZ );
                MoveObject( Objects_[0][i], ObjectX, ObjectY, ObjectZ -1.5, 0.2 );
                   MoveObject( Objects_[1][i], ObjectX, ObjectY, ObjectZ -1.5, 0.2 );
            }
            else
            {
                GetObjectPos( Objects_[0][i], ObjectX, ObjectY, ObjectZ );
                MoveObject( Objects_[0][i], ObjectX, ObjectY, ObjectZ +1.5, 0.2 );
                MoveObject( Objects_[1][i], ObjectX, ObjectY, ObjectZ +1.5, 0.2 );
            }
        }
    }

    objectid = Iter_Random(_Objects );
    GetObjectPos( Objects_[0][objectid], ObjectX, ObjectY, ObjectZ );
    SetTimerEx("SpeedUp", 500, 0, "ifff", objectid, ObjectX, ObjectY, ObjectZ);
    MoveObject( Objects_[0][objectid], ObjectX, ObjectY, ObjectZ -5, 1 );
    if(!VIEW_FROM_ABOVE)
    MoveObject( Objects_[1][objectid], ObjectX, ObjectY, ObjectZ -5, 1 );
    Iter_Remove(_Objects, objectid );
    return 1;
}

public SpeedUp( object, Float:x, Float:y, Float:z )
{
    MoveObject( Objects_[0][object], x, y, z -150, 20 );
    if(!VIEW_FROM_ABOVE)
    MoveObject( Objects_[1][object], x, y, z -150, 20 );
    foreach(_Minigamer, i ) PlayerPlaySound( i, 1039, 0.0, 0.0, 0.0 );
}

public EndMinigame( )
{
    for( new i; i < MAX_SLOTS; i++ )
    {
        DestroyObject( Objects_[0][i] );
        if(!VIEW_FROM_ABOVE)
        DestroyObject( Objects_[1][i] );
    }
    inProgress = 0;
    Iter_Clear(_Objects );
    Iter_Clear(_Minigamer );
    KillTimer( uTimer );
    return 1;
}

public MinigameWinner( player )
{
    new str[128];
    format( str, sizeof( str ), "* %s "COL_RULE"has won "COL_ORANGE"Don't Get Wet "COL_RULE"minigame!", PlayerName( player ) );
    SendClientMessageToAll( LIME, str );
    GivePlayerMoney( player, PRIZE_MONEY );
    Minigamer_{ player } = false;
    Iter_Remove(_Minigamer, player );
    SetTimerEx( "RespawnPlayer", 1400, 0, "i", player );
    SetTimer( "EndMinigame", 1700, 0);
}

public RespawnPlayer ( player )
{
    for( new i = 12; i > -1; i-- )
    {
        GivePlayerWeapon( player, pWeaponData[player][i], pSavedAmmo[player][i] );
    }
    SetPlayerPos( player, pCoords[player][0], pCoords[player][1], pCoords[player][2] );
       SetPlayerInterior( player, pInterior[player] );
       SetCameraBehindPlayer( player );
}

stock PlayerName( playerid )
{
    new Name[MAX_PLAYER_NAME];
    GetPlayerName( playerid, Name, sizeof( Name ) );
    return Name;
}
Reply


Messages In This Thread
Don't Get Wet - by Jay - 02-02-2011, 11:18 PM
Re: Don't get Wet - by ZheMafo - 02-02-2011, 11:24 PM
Re: Don't get Wet - by Pedro - 02-02-2011, 11:45 PM
Re: Don't get Wet - by Unbreak - 02-02-2011, 11:50 PM
Re: Don't get Wet - by Jay - 02-02-2011, 11:59 PM
Re: Don't Get Wet - by Jay - 02-03-2011, 12:02 AM
Re: Don't Get Wet - by Pedro - 02-03-2011, 12:02 AM
Re: Don't Get Wet - by xBlueXFoxx - 02-03-2011, 03:20 AM
Re: Don't Get Wet - by Tpimp - 02-03-2011, 03:50 AM
Re: Don't Get Wet - by Matthias - 02-03-2011, 07:12 AM
Re: Don't Get Wet - by Jay - 02-03-2011, 07:42 PM
Re: Don't Get Wet - by Kase - 02-03-2011, 07:47 PM
Re: Don't Get Wet - by Hitman - 02-03-2011, 07:51 PM
Re: Don't Get Wet - by ScarTissue[NL] - 02-03-2011, 11:53 PM
Re: Don't Get Wet - by xBlueXFoxx - 02-04-2011, 01:31 AM
Re: Don't Get Wet - by Lithirm - 02-04-2011, 12:46 PM
Re: Don't Get Wet - by ScarTissue[NL] - 02-04-2011, 03:35 PM
Re: Don't Get Wet - by MacSto - 02-04-2011, 09:55 PM
Re: Don't Get Wet - by Blackbean - 02-04-2011, 09:57 PM
Re: Don't Get Wet - by LasTRace - 02-05-2011, 06:19 PM