Skip to content

Instantly share code, notes, and snippets.

@earlwlkr
Created September 4, 2014 07:23
Show Gist options
  • Save earlwlkr/3285b3bea6c21fce306f to your computer and use it in GitHub Desktop.
Save earlwlkr/3285b3bea6c21fce306f to your computer and use it in GitHub Desktop.
#include <physics>
#define SPEED 5.0
#define MAX_SOCCER_PLAYERS 5
enum E_SOCCER
{
bool:E_STARTED,
Timer: E_TIMER_LOOP,
E_TEAM[ 2 ],
E_TEAM1_SCORE,
E_TEAM2_SCORE,
E_VIEWERS,
E_SOCCER_LAST,
E_BALL = INVALID_OBJECT_ID
}
new g_soccer_data[ E_SOCCER ];
new
Iterator: iter_soccerTeams[ 2 ]<MAX_SOCCER_PLAYERS>;
new
Iterator: iter_soccerViewers<MAX_PLAYERS>;
new
Text3D: soccer_label[ MAX_PLAYERS ];
CMD:thoatdabanh( playerid, params[] )
{
if (Iter_Contains(iter_soccerTeams[ 0 ], playerid))
{
for ( new k = 0; k != 3; k++ ) TextDrawHideForPlayer( playerid, Soccer_SB[ k ] );
SetPlayerWeapons(playerid);
SetPlayerPos( playerid, 2686.91, -1689.73, 9.44 );
Iter_Remove(iter_soccerTeams[ 0 ], playerid);
Delete3DTextLabel( soccer_label[ playerid ] );
}
else if (Iter_Contains(iter_soccerTeams[ 1 ], playerid))
{
for ( new k = 0; k != 3; k++ ) TextDrawHideForPlayer( playerid, Soccer_SB[ k ] );
SetPlayerWeapons(playerid);
SetPlayerPos( playerid, 2686.91, -1689.73, 9.44 );
Iter_Remove(iter_soccerTeams[ 1 ], playerid);
Delete3DTextLabel( soccer_label[ playerid ] );
}
else if (Iter_Contains(iter_soccerViewers, playerid))
{
for ( new k = 0; k != 3; k++ ) TextDrawHideForPlayer( playerid, Soccer_SB[ k ] );
SetPlayerWeapons(playerid);
SetPlayerPos( playerid, 2686.91, -1689.73, 9.44 );
Iter_Remove(iter_soccerViewers, playerid);
}
SetPlayerSkin( playerid, PlayerInfo[ playerid ][ pModel ] );
for ( new k = 0; k != 7; k++ )
TextDrawHideForPlayer( playerid, Soccer_TD[ k ] );
return 1;
}
CMD:batdau(playerid, params[])
{
if ( PlayerInfo[ playerid ][ pAdmin ] < 1337 ) return 1;
ballInit();
g_soccer_data[ E_TIMER_LOOP ] = repeat soccerTimer();
g_soccer_data[ E_STARTED ] = true;
SendClientMessageToAll( X11_LIGHT_BLUE_1, ""COL_WHEAT"** BONG DA **{FFFF00} Mot tran bong da da duoc bat dau, hay den san van dong de xem." );
return 1;
}
CMD:endmatch(playerid, params[])
{
if ( PlayerInfo[ playerid ][ pAdmin ] < 1337 ) return 1;
endMatch();
return 1;
}
public PHY_OnObjectUpdate( objectid )
{
if ( g_soccer_data[ E_STARTED ] )
{
foreach (new i: Player)
{
if ( Iter_Contains(iter_soccerTeams[ 0 ], i) || Iter_Contains(iter_soccerTeams[ 1 ], i) )
{
new
Float: fPos[3];
GetObjectPos( g_soccer_data[ E_BALL ], fPos[ 0 ], fPos[ 1 ], fPos[ 2 ] );
if ( IsPlayerInRangeOfPoint( i, 1.4, fPos[ 0 ], fPos[ 1 ], fPos[ 2 ] ) )
{
new
Float: fAngle;
GetPlayerFacingAngle( i, fAngle );
PHY_SetObjectVelocity( g_soccer_data[ E_BALL ], 5.0 * floatsin( -fAngle, degrees ), 5.0 * floatcos( -fAngle, degrees ) );
PHY_RollObject( g_soccer_data[ E_BALL ] );
g_soccer_data[ E_SOCCER_LAST ] = i;
}
}
}
}
return 1;
}
timer soccerTimer[ 900 ]()
{
if ( IsObjectInRectangle( g_soccer_data[ E_BALL ], 1519.29, -2023.00, 1524.98, -2010.07 ) ) //goal for team 2
{
g_soccer_data[ E_TEAM1_SCORE ] ++;
new
string[ 8 ];
format( string, sizeof( string ), "%d", g_soccer_data[ E_TEAM1_SCORE ] );
TextDrawSetString( Soccer_TD[ 5 ], string );
ShowSoccerMainTD();
format( string, sizeof( string ), "%d - %d", g_soccer_data[ E_TEAM1_SCORE ], g_soccer_data[ E_TEAM2_SCORE ] );
TextDrawSetString( Soccer_SB[ 2 ], string );
defer HideSoccerMainTD();
ballInit();
}
else if ( IsObjectInRectangle( g_soccer_data[ E_BALL ], 1629.95, -2023.36, 1635.34, -2010.36 ) ) //goal 1
{
g_soccer_data[ E_TEAM2_SCORE ] ++;
new
string[ 8 ];
format( string, sizeof( string ), "%d", g_soccer_data[ E_TEAM2_SCORE ] );
TextDrawSetString( Soccer_TD[ 6 ], string );
ShowSoccerMainTD();
format( string, sizeof( string ), "%d - %d", g_soccer_data[ E_TEAM1_SCORE ], g_soccer_data[ E_TEAM2_SCORE ] );
TextDrawSetString( Soccer_SB[ 2 ], string );
defer HideSoccerMainTD();
ballInit();
}
}
stock ShowSoccerMainTD()
{
new string[ 20 + MAX_PLAYER_NAME ];
format( string, sizeof( string ), "Nguoi ghi ban: "COL_YELLOW"%s.", GetName( g_soccer_data[ E_SOCCER_LAST ] ) );
foreach (new i: iter_soccerTeams[ 0 ])
{
SendClientMessage( i, X11_LIGHT_SKY_BLUE, string );
GameTextForPlayer( i, "] ~b~G~y~O~r~A~g~L! ]", 5000, 3 );
for ( new k = 0; k != 7; k++ )
TextDrawShowForPlayer( i, Soccer_TD[ k ] );
}
foreach (new i: iter_soccerTeams[ 1 ])
{
SendClientMessage( i, X11_LIGHT_SKY_BLUE, string );
GameTextForPlayer( i, "] ~b~G~y~O~r~A~g~L! ]", 5000, 3 );
for ( new k = 0; k != 7; k++ )
TextDrawShowForPlayer( i, Soccer_TD[ k ] );
}
foreach (new i: iter_soccerViewers)
{
SendClientMessage( i, X11_LIGHT_SKY_BLUE, string );
GameTextForPlayer( i, "] ~b~G~y~O~r~A~g~L! ]", 5000, 3 );
for ( new k = 0; k != 7; k++ )
TextDrawShowForPlayer( i, Soccer_TD[ k ] );
}
}
timer HideSoccerMainTD[ 5000 ]()
{
foreach (new i: iter_soccerTeams[ 0 ])
for ( new k = 0; k != 7; k++ )
TextDrawHideForPlayer( i, Soccer_TD[ k ] );
foreach (new i: iter_soccerTeams[ 1 ])
for ( new k = 0; k != 7; k++ )
TextDrawHideForPlayer( i, Soccer_TD[ k ] );
foreach (new i: iter_soccerViewers)
for ( new k = 0; k != 7; k++ )
TextDrawHideForPlayer( i, Soccer_TD[ k ] );
}
function bool:IsObjectInRectangle( objectid, Float: minX, Float: minY, Float: maxX, Float: maxY )
{
new
Float: fPos[ 3 ];
GetObjectPos( objectid, fPos[ 0 ], fPos[ 1 ], fPos[ 2 ] );
return ( ( minX < fPos[ 0 ] < maxX ) && ( minY < fPos[ 1 ] < maxY ) );
}
function ballInit()
{
if ( g_soccer_data[ E_BALL ] != INVALID_OBJECT_ID )
{
PHY_DeleteObject( g_soccer_data[ E_BALL ] );
DestroyObject( g_soccer_data[ E_BALL ] );
}
g_soccer_data[ E_BALL ] = CreateObject( 2114, 1574.72, -2017.18, 736.76, 0, 0, 0 );
PHY_InitObject( g_soccer_data[ E_BALL ], 2114 );
PHY_SetObjectFriction( g_soccer_data[ E_BALL ], 0.5 );
PHY_SetObjectGravity( g_soccer_data[ E_BALL ], 4.1 );
PHY_SetObjectZBound( g_soccer_data[ E_BALL ], _, _, 0.3);
return 1;
}
timer endSoccerMatchTimer[ 60000 * 10 ]()
{
if ( g_soccer_data[ E_STARTED ] ) endMatch();
}
stock endMatch()
{
foreach (new i: iter_soccerTeams[ 0 ])
{
for ( new k = 0; k != 3; k++ ) TextDrawHideForPlayer( i, Soccer_SB[ k ] );
SetPlayerWeapons(i);
SetPlayerPos( i, 2686.91, -1689.73, 9.44 );
Iter_Remove(iter_soccerTeams[ 0 ], i);
Delete3DTextLabel( soccer_label[ i ] );
SetPlayerSkin( i, PlayerInfo[ i ][ pModel ] );
}
foreach (new i: iter_soccerTeams[ 1 ])
{
for ( new k = 0; k != 3; k++ ) TextDrawHideForPlayer( i, Soccer_SB[ k ] );
SetPlayerWeapons(i);
SetPlayerPos( i, 2686.91, -1689.73, 9.44 );
Iter_Remove(iter_soccerTeams[ 1 ], i);
Delete3DTextLabel( soccer_label[ i ] );
SetPlayerSkin( i, PlayerInfo[ i ][ pModel ] );
}
foreach (new i: iter_soccerViewers)
{
for ( new k = 0; k != 3; k++ ) TextDrawHideForPlayer( i, Soccer_SB[ k ] );
SetPlayerWeapons(i);
SetPlayerPos( i, 2686.91, -1689.73, 9.44 );
Iter_Remove(iter_soccerViewers, i);
SetPlayerSkin( i, PlayerInfo[ i ][ pModel ] );
}
g_soccer_data[ E_TEAM1_SCORE ] = 0;
g_soccer_data[ E_TEAM2_SCORE ] = 0;
stop g_soccer_data[ E_TIMER_LOOP ];
TextDrawSetString( Soccer_TD[ 5 ], "0" );
TextDrawSetString( Soccer_TD[ 6 ], "0" );
TextDrawSetString( Soccer_SB[ 2 ], "0 - 0" );
PHY_DeleteObject( g_soccer_data[ E_BALL ] );
DestroyObject( g_soccer_data[ E_BALL ] );
g_soccer_data[ E_STARTED ] = false;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment