implements boxing system by damen
This commit is contained in:
parent
57ddd90d14
commit
5f296276a7
@ -1,40 +1,34 @@
|
|||||||
/*
|
/*
|
||||||
* Irresistible Gaming (c) 2018
|
* Irresistible Gaming (c) 2018
|
||||||
* Developed by Damen, Lorenc Pekaj
|
* Developed by Damen, Lorenc
|
||||||
* Module: boxing.inc
|
* Module: Boxing
|
||||||
* Purpose: in-game boxing implementation
|
* Purpose: Boxing for Visage
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* ** Includes ** */
|
||||||
|
#include < YSI\y_hooks >
|
||||||
|
|
||||||
|
/* ** Definitions ** */
|
||||||
|
#define IsPlayerBoxing(%0) (g_boxingPlayerData[ %0 ] [ E_FIGHTING ])
|
||||||
|
#define SendBoxing(%0,%1) (SendClientMessageFormatted( %0, -1, "{B74AFF}[BOXING] {FFFFFF}" # %1))
|
||||||
|
#define SendBoxingGlobal(%0) (SendClientMessageFormatted( INVALID_PLAYER_ID, -1, "{B74AFF}[BOXING] {FFFFFF}" # %0))
|
||||||
|
#define IsPlayerNearBoxingArena(%0) (GetPlayerDistanceFromPoint( %0, 2654.885986, 1613.157958, 1506.269042 ) < 25.0)
|
||||||
|
|
||||||
/* ** Variables ** */
|
/* ** Variables ** */
|
||||||
|
|
||||||
/* INCLUDES */
|
|
||||||
#include <a_mysql>
|
|
||||||
#include <a_samp>
|
|
||||||
#include <foreach>
|
|
||||||
#include <sscanf2>
|
|
||||||
#include <streamer>
|
|
||||||
#include <zcmd>
|
|
||||||
|
|
||||||
/* DIALOG DEFINITIONS */
|
|
||||||
#define DIALOG_BOXING_SETTINGS 9435
|
|
||||||
#define DIALOG_BOXING_ROUNDS 9436
|
|
||||||
#define DIALOG_BOXING_BET_AMOUNT 9437
|
|
||||||
|
|
||||||
/* ENUMS */
|
|
||||||
enum E_BOXER_DATA {
|
enum E_BOXER_DATA {
|
||||||
E_WINS,
|
bool: E_FIGHTING,
|
||||||
E_LOSSES,
|
|
||||||
E_TOTAL_FIGHTS,
|
|
||||||
bool:E_FIGHTING,
|
|
||||||
E_OPPONENT,
|
E_OPPONENT,
|
||||||
bool:E_INVITED,
|
bool: E_INVITED,
|
||||||
E_INVITE_TIMER,
|
E_INVITE_TIMESTAMP,
|
||||||
E_ROUNDS_SET,
|
E_ROUNDS_SET,
|
||||||
E_BET_AMOUNT_SET,
|
E_BET_AMOUNT_SET,
|
||||||
bool:E_IS_HOST,
|
bool: E_IS_HOST,
|
||||||
E_SCORE,
|
E_SCORE,
|
||||||
Float:E_PRIOR_HEALTH,
|
Float: E_PRIOR_HEALTH,
|
||||||
Float:E_PRIOR_ARMOUR
|
Float: E_PRIOR_ARMOUR,
|
||||||
|
E_PRIOR_WEP[ 12 ],
|
||||||
|
E_PRIOR_WEP_AMMO[ 12 ],
|
||||||
|
E_PRIOR_SKIN
|
||||||
};
|
};
|
||||||
|
|
||||||
enum E_ARENA_DATA {
|
enum E_ARENA_DATA {
|
||||||
@ -45,38 +39,39 @@ enum E_ARENA_DATA {
|
|||||||
E_BET
|
E_BET
|
||||||
};
|
};
|
||||||
|
|
||||||
new g_boxingMatchData[ MAX_PLAYERS ][ E_BOXER_DATA ];
|
new g_boxingPlayerData [ MAX_PLAYERS ] [ E_BOXER_DATA ];
|
||||||
new g_boxingArenaData[ E_ARENA_DATA ];
|
new g_boxingArenaData [ E_ARENA_DATA ];
|
||||||
new g_boxingArenaObjects[ 9 ];
|
new Text3D: arenaLabel = Text3D: INVALID_3DTEXT_ID;
|
||||||
|
|
||||||
public OnPlayerConnect( playerid ) {
|
/* ** Hooks ** */
|
||||||
g_boxingMatchData[ playerid ][ E_FIGHTING ] = false;
|
hook OnGameModeInit( ) {
|
||||||
g_boxingMatchData[ playerid ][ E_OPPONENT ] = -1;
|
print( "-> Boxing System - By: Damen" );
|
||||||
g_boxingMatchData[ playerid ][ E_INVITED ] = false;
|
arenaLabel = CreateDynamic3DTextLabel( "Boxing Arena\n{FFFFFF}/boxing fight", COLOR_GREY, 2655.3022, 1613.6146, 1507.0977, 15.0 );
|
||||||
g_boxingMatchData[ playerid ][ E_ROUNDS_SET ] = 1;
|
return 1;
|
||||||
g_boxingMatchData[ playerid ][ E_BET_AMOUNT_SET ] = 0;
|
|
||||||
g_boxingMatchData[ playerid ][ E_IS_HOST ] = false;
|
|
||||||
g_boxingMatchData[ playerid ][ E_SCORE ] = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public OnPlayerDisconnect( playerid, reason ) {
|
hook OnPlayerConnect( playerid ) {
|
||||||
g_boxingMatchData[ playerid ][ E_WINS ] = 0;
|
g_boxingPlayerData[ playerid ] [ E_FIGHTING ] = false;
|
||||||
g_boxingMatchData[ playerid ][ E_LOSSES ] = 0;
|
g_boxingPlayerData[ playerid ] [ E_OPPONENT ] = -1;
|
||||||
g_boxingMatchData[ playerid ][ E_TOTAL_FIGHTS ] = 0;
|
g_boxingPlayerData[ playerid ] [ E_INVITED ] = false;
|
||||||
g_boxingMatchData[ playerid ][ E_FIGHTING ] = false;
|
g_boxingPlayerData[ playerid ] [ E_ROUNDS_SET ] = 1;
|
||||||
g_boxingMatchData[ playerid ][ E_OPPONENT ] = -1;
|
g_boxingPlayerData[ playerid ] [ E_BET_AMOUNT_SET ] = 0;
|
||||||
g_boxingMatchData[ playerid ][ E_INVITED ] = false;
|
g_boxingPlayerData[ playerid ] [ E_IS_HOST ] = false;
|
||||||
g_boxingMatchData[ playerid ][ E_INVITE_TIMER ] = 0;
|
g_boxingPlayerData[ playerid ] [ E_SCORE ] = 0;
|
||||||
g_boxingMatchData[ playerid ][ E_ROUNDS_SET ] = 1;
|
return 1;
|
||||||
g_boxingMatchData[ playerid ][ E_BET_AMOUNT_SET ] = 0;
|
|
||||||
g_boxingMatchData[ playerid ][ E_IS_HOST ] = false;
|
|
||||||
g_boxingMatchData[ playerid ][ E_SCORE ] = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* BOXING COMMANDS */
|
hook OnPlayerDisconnect( playerid, reason ) {
|
||||||
|
if ( g_boxingPlayerData[ playerid ] [ E_FIGHTING ] ) {
|
||||||
|
boxing_ForfeitMatch( playerid, g_boxingPlayerData[ playerid ] [ E_OPPONENT ] );
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ** Commands ** */
|
||||||
CMD:boxing( playerid, params[ ] ) {
|
CMD:boxing( playerid, params[ ] ) {
|
||||||
|
|
||||||
if ( !IsPlayerNearArena( playerid ) )
|
if ( !IsPlayerNearBoxingArena( playerid ) )
|
||||||
return SendError( playerid, "You must be within 25 meters of the arena to use this command." );
|
return SendError( playerid, "You must be within 25 meters of the arena to use this command." );
|
||||||
|
|
||||||
if ( g_boxingArenaData[ E_OCCUPIED ] == true )
|
if ( g_boxingArenaData[ E_OCCUPIED ] == true )
|
||||||
@ -84,372 +79,286 @@ CMD:boxing( playerid, params[ ] ) {
|
|||||||
|
|
||||||
if ( !strcmp( params, "fight", true, 5 ) ) {
|
if ( !strcmp( params, "fight", true, 5 ) ) {
|
||||||
|
|
||||||
new targetID;
|
new targetID, betAmount, rounds;
|
||||||
|
|
||||||
if ( g_boxingMatchData[ playerid ][ E_FIGHTING ] == true )
|
if ( g_boxingPlayerData[ playerid ] [ E_FIGHTING ] == true )
|
||||||
return SendError( playerid, "You are currently fighting an opponent. Please finish your fight." );
|
return SendError( playerid, "You are currently fighting an opponent. Please finish your fight." );
|
||||||
|
|
||||||
if ( sscanf( params[ 6 ], "u", targetID ) )
|
if ( sscanf( params[ 6 ], "uD(0)D(3)", targetID, betAmount, rounds ) )
|
||||||
return SendUsage( playerid, "/boxing fight [OPPONENT ID]" );
|
return SendUsage( playerid, "/boxing fight [PLAYER_ID] [BET_AMOUNT (0)] [ROUNDS (3)]" );
|
||||||
|
|
||||||
if ( !IsPlayerConnected( targetID ) )
|
if ( ! IsPlayerConnected( targetID ) )
|
||||||
return SendError( playerid, "Player is not connected." );
|
return SendError( playerid, "Player is not connected." );
|
||||||
|
|
||||||
if ( targetID == playerid )
|
if ( targetID == playerid )
|
||||||
return SendError( playerid, "You cannot invite yourself to a boxing match." );
|
return SendError( playerid, "You cannot invite yourself to a boxing match." );
|
||||||
|
|
||||||
if ( !IsPlayerNearArena( targetID ) )
|
if ( !IsPlayerNearBoxingArena( targetID ) )
|
||||||
return SendError( playerid, "The player you have invited to a boxing match is not near the boxing arena." );
|
return SendError( playerid, "The player you have invited to a boxing match is not near the boxing arena." );
|
||||||
|
|
||||||
if ( g_boxingMatchData[ targetID ][ E_INVITED ] == true )
|
if ( GetPlayerCash( targetID ) < betAmount )
|
||||||
|
return SendError( playerid, "The player you invited does not have enough money to wager that amount." );
|
||||||
|
|
||||||
|
if ( ! ( 0 <= betAmount <= 10000000 ) )
|
||||||
|
return SendError( playerid, "Please specify an amount between $0 and $10,000,000." );
|
||||||
|
|
||||||
|
if ( rounds < 1 || rounds == 2 || rounds == 4 || rounds > 5 )
|
||||||
|
return SendError( playerid, "Please choose between 1, 3, or 5 rounds." );
|
||||||
|
|
||||||
|
if ( g_boxingPlayerData[ targetID ] [ E_INVITED ] == true )
|
||||||
return SendError( playerid, "That player has already been invited to a fight." );
|
return SendError( playerid, "That player has already been invited to a fight." );
|
||||||
|
|
||||||
if ( g_boxingMatchData[ targetID ][ E_FIGHTING ] == true )
|
if ( g_boxingPlayerData[ targetID ] [ E_FIGHTING ] == true )
|
||||||
return SendError( playerid, "That player is currently fighting another opponent. Please wait until after their match to reinvite them." );
|
return SendError( playerid, "That player is currently fighting another opponent. Please wait until after their match to reinvite them." );
|
||||||
|
|
||||||
if ( g_boxingMatchData[ playerid ][ E_INVITED ] == true ) {
|
if ( g_boxingPlayerData[ playerid ] [ E_INVITED ] == true ) {
|
||||||
|
SendBoxing( playerid, "You have cancelled your invite to %s.", ReturnPlayerName( g_boxingPlayerData[ playerid ] [ E_OPPONENT ] ) );
|
||||||
format( szNormalString, sizeof( szNormalString ), "You have cancelled your invite to %s.", ReturnPlayerName( g_boxingMatchData[ playerid ][ E_OPPONENT ] ) );
|
SendBoxing( g_boxingPlayerData[ playerid ] [ E_OPPONENT ], "%s has cancelled the match invite.", ReturnPlayerName( playerid ) );
|
||||||
SendBoxing( playerid, szNormalString );
|
ResetBoxingPlayerVariables( playerid, g_boxingPlayerData[ playerid ] [ E_OPPONENT ] );
|
||||||
|
|
||||||
format( szNormalString, sizeof( szNormalString ), "%s has cancelled the match invite.", ReturnPlayerName( playerid ) );
|
|
||||||
SendBoxing( g_boxingMatchData[ playerid ][ E_OPPONENT ], szNormalString );
|
|
||||||
|
|
||||||
ResetBoxingPlayerVariables( playerid, g_boxingMatchData[ playerid ][ E_OPPONENT ] );
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
g_boxingMatchData[ playerid ][ E_INVITED ] = true;
|
g_boxingPlayerData[ playerid ] [ E_INVITED ] = true;
|
||||||
g_boxingMatchData[ playerid ][ E_OPPONENT ] = targetID;
|
g_boxingPlayerData[ playerid ] [ E_OPPONENT ] = targetID;
|
||||||
g_boxingMatchData[ playerid ][ E_IS_HOST ] = true;
|
g_boxingPlayerData[ playerid ] [ E_IS_HOST ] = true;
|
||||||
|
g_boxingPlayerData[ playerid ] [ E_ROUNDS_SET ] = rounds;
|
||||||
|
g_boxingPlayerData[ playerid ] [ E_BET_AMOUNT_SET ] = betAmount;
|
||||||
|
g_boxingPlayerData[ targetID ] [ E_INVITED ] = true;
|
||||||
|
g_boxingPlayerData[ targetID ] [ E_OPPONENT ] = playerid;
|
||||||
|
g_boxingPlayerData[ targetID ] [ E_INVITE_TIMESTAMP ] = GetServerTime( ) + 30000;
|
||||||
|
|
||||||
g_boxingMatchData[ targetID ][ E_INVITED ] = true;
|
if ( g_boxingPlayerData[ playerid ] [ E_BET_AMOUNT_SET ] == 0 ) {
|
||||||
g_boxingMatchData[ targetID ][ E_OPPONENT ] = playerid;
|
|
||||||
|
|
||||||
KillTimer( g_boxingMatchData[ playerid ][ E_INVITE_TIMER ] );
|
SendBoxing( playerid, "You have invited %s to a boxing match with no wager through %i round(s).", ReturnPlayerName( targetID ), g_boxingPlayerData[ playerid ] [ E_ROUNDS_SET ] );
|
||||||
g_boxingMatchData[ playerid ][ E_INVITE_TIMER ] = SetTimerEx( "KillInviteTimer", 30000, false, "d", playerid );
|
|
||||||
|
|
||||||
if ( g_boxingMatchData[ playerid ][ E_BET_AMOUNT_SET ] == 0 ) {
|
|
||||||
|
|
||||||
format( szNormalString, sizeof( szNormalString ), "You have invited %s to a boxing match with no wager through %i round(s).", ReturnPlayerName( targetID ), g_boxingMatchData[ playerid ][ E_ROUNDS_SET ] );
|
|
||||||
SendBoxing( playerid, szNormalString );
|
|
||||||
SendBoxing( playerid, "To cancel your invite, use /boxing [CANCEL]." );
|
SendBoxing( playerid, "To cancel your invite, use /boxing [CANCEL]." );
|
||||||
|
|
||||||
format( szNormalString, sizeof( szNormalString ), "%s has invited you to a boxing match with no wager through %i round(s).", ReturnPlayerName( playerid ), g_boxingMatchData[ playerid ][ E_ROUNDS_SET ] );
|
SendBoxing( targetID, "%s has invited you to a boxing match with no wager through %i round(s).", ReturnPlayerName( playerid ), g_boxingPlayerData[ playerid ] [ E_ROUNDS_SET ] );
|
||||||
SendBoxing( targetID, szNormalString );
|
|
||||||
SendBoxing( targetID, "To accept or decline the invite, use /boxing [ACCEPT/DECLINE]." );
|
SendBoxing( targetID, "To accept or decline the invite, use /boxing [ACCEPT/DECLINE]." );
|
||||||
|
|
||||||
return true;
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
format( szNormalString, sizeof( szNormalString ), "You have invited %s to a boxing match with $%i wager through %i round(s).", ReturnPlayerName( targetID ), g_boxingMatchData[ playerid ][ E_BET_AMOUNT_SET ], g_boxingMatchData[ playerid ][ E_ROUNDS_SET ] );
|
SendBoxing( playerid, "You have invited %s to a boxing match with a %s wager through %i round(s).", ReturnPlayerName( targetID ), number_format( g_boxingPlayerData[ playerid ] [ E_BET_AMOUNT_SET ] ), g_boxingPlayerData[ playerid ] [ E_ROUNDS_SET ] );
|
||||||
SendBoxing( playerid, szNormalString );
|
|
||||||
SendBoxing( playerid, "To cancel your invite, use /boxing [CANCEL]." );
|
SendBoxing( playerid, "To cancel your invite, use /boxing [CANCEL]." );
|
||||||
|
|
||||||
format( szNormalString, sizeof( szNormalString ), "%s has invited you to a boxing match with a $%i wager through %i round(s).", ReturnPlayerName( playerid ), g_boxingMatchData[ playerid ][ E_BET_AMOUNT_SET ], g_boxingMatchData[ playerid ][ E_ROUNDS_SET ] );
|
SendBoxing( targetID, "%s has invited you to a boxing match with a %s wager through %i round(s).", ReturnPlayerName( playerid ), number_format( g_boxingPlayerData[ playerid ] [ E_BET_AMOUNT_SET ] ), g_boxingPlayerData[ playerid ] [ E_ROUNDS_SET ] );
|
||||||
SendBoxing( targetID, szNormalString );
|
|
||||||
SendBoxing( targetID, "To accept or decline the invite, use /boxing [ACCEPT/DECLINE]." );
|
SendBoxing( targetID, "To accept or decline the invite, use /boxing [ACCEPT/DECLINE]." );
|
||||||
|
|
||||||
return true;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
return 1;
|
||||||
|
|
||||||
} else if ( !strcmp( params, "cancel", true, 6 ) ) {
|
} else if ( !strcmp( params, "cancel", true, 6 ) ) {
|
||||||
|
|
||||||
new opponent = g_boxingMatchData[ playerid ][ E_OPPONENT ];
|
new opponent = g_boxingPlayerData[ playerid ] [ E_OPPONENT ];
|
||||||
|
|
||||||
if ( g_boxingMatchData[ playerid ][ E_FIGHTING ] == true )
|
if ( g_boxingPlayerData[ playerid ] [ E_FIGHTING ] == true )
|
||||||
return SendError( playerid, "You're currently in a boxing match. Use /boxing [FORFEIT] if you would like to forfeit the match." );
|
return SendError( playerid, "You're currently in a boxing match. Use /boxing [FORFEIT] if you would like to forfeit the match." );
|
||||||
|
|
||||||
if ( g_boxingMatchData[ playerid ][ E_IS_HOST ] == false )
|
if ( g_boxingPlayerData[ playerid ] [ E_IS_HOST ] == false )
|
||||||
return SendError( playerid, "You have no boxing match invites to cancel." );
|
return SendError( playerid, "You have no boxing match invites to cancel." );
|
||||||
|
|
||||||
KillTimer( g_boxingMatchData[ playerid ][ E_INVITE_TIMER ] );
|
SendBoxing( opponent, "%s has cancelled the boxing match invitation.", ReturnPlayerName( playerid ) );
|
||||||
|
SendBoxing( playerid, "You have cancelled the boxing match invitation sent to %s.", ReturnPlayerName( opponent ) );
|
||||||
format( szNormalString, sizeof( szNormalString ), "%s has cancelled the boxing match invitation.", ReturnPlayerName( playerid ) );
|
|
||||||
SendBoxing( opponent, szNormalString );
|
|
||||||
|
|
||||||
format( szNormalString, sizeof( szNormalString ), "You have cancelled the boxing match invitation sent to %s.", ReturnPlayerName( opponent ) );
|
|
||||||
SendBoxing( playerid, szNormalString );
|
|
||||||
|
|
||||||
ResetBoxingPlayerVariables( playerid, opponent );
|
ResetBoxingPlayerVariables( playerid, opponent );
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
} else if ( !strcmp( params, "accept", true, 6 ) ) {
|
} else if ( !strcmp( params, "accept", true, 6 ) ) {
|
||||||
|
|
||||||
new opponent = g_boxingMatchData[ playerid ][ E_OPPONENT ];
|
new opponent = g_boxingPlayerData[ playerid ] [ E_OPPONENT ];
|
||||||
|
|
||||||
if ( g_boxingMatchData[ playerid ][ E_INVITED ] == false )
|
if ( GetServerTime( ) > g_boxingPlayerData[ playerid ] [ E_INVITE_TIMESTAMP ] && g_boxingPlayerData[ playerid ] [ E_INVITED ] ) {
|
||||||
|
SendServerMessage( opponent, "%s has attempted to accept your boxing invite after it has expired.", ReturnPlayerName( playerid ) );
|
||||||
|
ResetBoxingPlayerVariables( playerid, opponent );
|
||||||
|
return SendError( playerid, "This invitation has expired." );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( g_boxingPlayerData[ playerid ] [ E_INVITED ] == false )
|
||||||
return SendError( playerid, "You do not have any boxing match invitations to accept." );
|
return SendError( playerid, "You do not have any boxing match invitations to accept." );
|
||||||
|
|
||||||
if ( opponent == -1 )
|
if ( opponent == -1 )
|
||||||
return SendError( playerid, "Your opponent is no longer available to fight." );
|
return SendError( playerid, "Your opponent is no longer available to fight." );
|
||||||
|
|
||||||
KillTimer( g_boxingMatchData[ opponent ][ E_INVITE_TIMER ] );
|
if ( !IsPlayerNearBoxingArena( opponent ) ) {
|
||||||
|
|
||||||
if ( !IsPlayerNearArena( opponent ) ) {
|
|
||||||
|
|
||||||
format( szNormalString, sizeof( szNormalString ), "%s is no longer near the arena. Your invitation has been cancelled.", ReturnPlayerName( opponent ) );
|
|
||||||
SendError( playerid, szNormalString );
|
|
||||||
|
|
||||||
format( szNormalString, sizeof( szNormalString ), "%s has attempted to accept your invite while you were not near the arena.", ReturnPlayerName( playerid ) );
|
|
||||||
SendBoxing( opponent, szNormalString );
|
|
||||||
|
|
||||||
|
SendError( playerid, "%s is no longer near the arena. Your invitation has been cancelled.", ReturnPlayerName( opponent ) );
|
||||||
|
SendBoxing( opponent, "%s has attempted to accept your invite while you were not near the arena.", ReturnPlayerName( playerid ) );
|
||||||
return ResetBoxingPlayerVariables( playerid, opponent );
|
return ResetBoxingPlayerVariables( playerid, opponent );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( GetPlayerMoney( playerid ) < g_boxingMatchData[ opponent ][ E_BET_AMOUNT_SET ] ) {
|
if ( GetPlayerCash( playerid ) < g_boxingPlayerData[ opponent ] [ E_BET_AMOUNT_SET ] ) {
|
||||||
|
|
||||||
SendError( playerid, "You do not have enough money to participate in the match with the bet amount set." );
|
SendError( playerid, "You do not have enough money to participate in the match with the bet amount set." );
|
||||||
|
SendError( opponent, "%s does not have enough money to participate in the match with the bet amount set.", ReturnPlayerName( playerid ) );
|
||||||
format( szNormalString, sizeof( szNormalString ), "%s does not have enough money to participate in the match with the bet amount set.", ReturnPlayerName( playerid ) );
|
|
||||||
SendError( opponent, szNormalString );
|
|
||||||
|
|
||||||
return ResetBoxingPlayerVariables( playerid, opponent );
|
return ResetBoxingPlayerVariables( playerid, opponent );
|
||||||
|
|
||||||
} else if ( GetPlayerMoney( opponent ) < g_boxingMatchData[ opponent ][ E_BET_AMOUNT_SET ] ) {
|
} else if ( GetPlayerCash( opponent ) < g_boxingPlayerData[ opponent ] [ E_BET_AMOUNT_SET ] ) {
|
||||||
|
|
||||||
SendError( opponent, "You do not have enough money to participate in the match with the bet amount set." );
|
SendError( opponent, "You do not have enough money to participate in the match with the bet amount set." );
|
||||||
|
SendError( playerid, "%s does not have enough money to participate in the match with the bet amount set.", ReturnPlayerName( opponent ) );
|
||||||
format( szNormalString, sizeof( szNormalString ), "%s does not have enough money to participate in the match with the bet amount set.", ReturnPlayerName( opponent ) );
|
|
||||||
SendError( playerid, szNormalString );
|
|
||||||
|
|
||||||
return ResetBoxingPlayerVariables( playerid, opponent );
|
return ResetBoxingPlayerVariables( playerid, opponent );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
g_boxingMatchData[ playerid ][ E_FIGHTING ] = true;
|
g_boxingPlayerData[ playerid ] [ E_FIGHTING ] = true;
|
||||||
g_boxingMatchData[ playerid ][ E_INVITED ] = false;
|
g_boxingPlayerData[ playerid ] [ E_INVITED ] = false;
|
||||||
|
|
||||||
g_boxingMatchData[ opponent ][ E_FIGHTING ] = true;
|
g_boxingPlayerData[ opponent ] [ E_FIGHTING ] = true;
|
||||||
g_boxingMatchData[ opponent ][ E_INVITED ] = false;
|
g_boxingPlayerData[ opponent ] [ E_INVITED ] = false;
|
||||||
g_boxingMatchData[ opponent ][ E_IS_HOST ] = true;
|
g_boxingPlayerData[ opponent ] [ E_IS_HOST ] = true;
|
||||||
|
|
||||||
return StartMatch( playerid, opponent );
|
return StartMatch( playerid, opponent );
|
||||||
|
|
||||||
} else if ( !strcmp( params, "decline", true, 7 ) ) {
|
} else if ( !strcmp( params, "decline", true, 7 ) ) {
|
||||||
|
|
||||||
new opponent = g_boxingMatchData[ playerid ][ E_OPPONENT ];
|
new opponent = g_boxingPlayerData[ playerid ] [ E_OPPONENT ];
|
||||||
|
|
||||||
if ( g_boxingMatchData[ playerid ][ E_INVITED ] == false )
|
if ( g_boxingPlayerData[ playerid ] [ E_INVITED ] == false )
|
||||||
return SendError( playerid, "You do not have any boxing match invitations to decline." );
|
return SendError( playerid, "You do not have any boxing match invitations to decline." );
|
||||||
|
|
||||||
if ( g_boxingMatchData[ playerid ][ E_OPPONENT ] == -1 )
|
if ( g_boxingPlayerData[ playerid ] [ E_OPPONENT ] == -1 )
|
||||||
return SendError( playerid, "Your opponent is no longer available to fight." );
|
return SendError( playerid, "Your opponent is no longer available to fight." );
|
||||||
|
|
||||||
KillTimer( g_boxingMatchData[ playerid ][ E_INVITE_TIMER ] );
|
SendBoxing( opponent, "%s has declined your invitation.", ReturnPlayerName( playerid ) );
|
||||||
|
|
||||||
format( szNormalString, sizeof( szNormalString ), "%s has declined your invitation.", ReturnPlayerName( playerid ) );
|
SendBoxing( playerid, "You have declined %s's invitation.", ReturnPlayerName( opponent ) );
|
||||||
SendBoxing( opponent, szNormalString );
|
|
||||||
|
|
||||||
format( szNormalString, sizeof( szNormalString ), "You have declined %s's invitation.", ReturnPlayerName( opponent ) );
|
|
||||||
SendBoxing( playerid, szNormalString );
|
|
||||||
|
|
||||||
return ResetBoxingPlayerVariables( playerid, opponent );
|
return ResetBoxingPlayerVariables( playerid, opponent );
|
||||||
|
|
||||||
} else if ( !strcmp( params, "forfeit", true, 7 ) ) {
|
} else if ( !strcmp( params, "forfeit", true, 7 ) ) {
|
||||||
|
|
||||||
new opponent = g_boxingMatchData[ playerid ][ E_OPPONENT ];
|
new opponent = g_boxingPlayerData[ playerid ] [ E_OPPONENT ];
|
||||||
|
|
||||||
if ( g_boxingMatchData[ playerid ][ E_FIGHTING ] == false )
|
if ( g_boxingPlayerData[ playerid ] [ E_FIGHTING ] == false )
|
||||||
return SendError( playerid, "You're not fighting anyone." );
|
return SendError( playerid, "You're not fighting anyone." );
|
||||||
|
|
||||||
return ForfeitMatch( playerid, opponent );
|
return boxing_ForfeitMatch( playerid, opponent );
|
||||||
|
|
||||||
} else if ( !strcmp( params, "config", true, 8 ) ) {
|
|
||||||
|
|
||||||
if ( g_boxingMatchData[ playerid ][ E_FIGHTING ] == true )
|
|
||||||
return SendError( playerid, "You cannot edit the match's settings while in a match." );
|
|
||||||
|
|
||||||
if ( g_boxingMatchData[ playerid ][ E_INVITED ] == true )
|
|
||||||
return SendError( playerid, "You cannot edit the match's settings with a pending invite." );
|
|
||||||
|
|
||||||
return ShowBoxingDialog( playerid );
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
return SendUsage( playerid, "/boxing [FIGHT/CANCEL/ACCEPT/DECLINE/FORFEIT]" );
|
||||||
return SendUsage( playerid, "/boxing [FIGHT/CANCEL/ACCEPT/DECLINE/FORFEIT/CONFIG]" );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
stock ResetBoxingPlayerVariables( playerid, targetID ) {
|
|
||||||
|
|
||||||
g_boxingMatchData[ playerid ][ E_INVITED ] = false;
|
|
||||||
g_boxingMatchData[ playerid ][ E_OPPONENT ] = -1;
|
|
||||||
g_boxingMatchData[ playerid ][ E_IS_HOST ] = false;
|
|
||||||
g_boxingMatchData[ playerid ][ E_FIGHTING ] = false;
|
|
||||||
g_boxingMatchData[ playerid ][ E_SCORE ] = 0;
|
|
||||||
TogglePlayerControllable( playerid, 1 );
|
|
||||||
|
|
||||||
g_boxingMatchData[ targetID ][ E_INVITED ] = false;
|
|
||||||
g_boxingMatchData[ targetID ][ E_OPPONENT ] = -1;
|
|
||||||
g_boxingMatchData[ targetID ][ E_IS_HOST ] = false;
|
|
||||||
g_boxingMatchData[ targetID ][ E_FIGHTING ] = false;
|
|
||||||
g_boxingMatchData[ targetID ][ E_SCORE ] = 0;
|
|
||||||
TogglePlayerControllable( targetID, 1 );
|
|
||||||
return true;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
stock ResetBoxingArenaVariables() {
|
|
||||||
|
|
||||||
g_boxingArenaData[ E_OCCUPIED ] = false;
|
|
||||||
g_boxingArenaData[ E_CURRENT_ROUNDS ] = 0;
|
|
||||||
g_boxingArenaData[ E_ROUNDS ] = 0;
|
|
||||||
g_boxingArenaData[ E_BET ] = 0;
|
|
||||||
return true;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
function KillInviteTimer( playerid ) {
|
|
||||||
|
|
||||||
new opponent = g_boxingMatchData[ playerid ][ E_OPPONENT ];
|
|
||||||
|
|
||||||
ResetBoxingPlayerVariables( playerid, opponent );
|
|
||||||
|
|
||||||
format( szNormalString, sizeof( szNormalString ), "The boxing match invite sent by %s has expired.", ReturnPlayerName( playerid ) );
|
|
||||||
SendBoxing( opponent, szNormalString );
|
|
||||||
|
|
||||||
format( szNormalString, sizeof( szNormalString ), "The boxing match invite you sent to %s has expired.", ReturnPlayerName( opponent ) );
|
|
||||||
SendBoxing( playerid, szNormalString );
|
|
||||||
|
|
||||||
return true;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ** Functions ** */
|
/* ** Functions ** */
|
||||||
function StartMatch( playerid, targetID ) {
|
stock StartMatch( playerid, targetID ) {
|
||||||
|
|
||||||
if ( g_boxingMatchData[ playerid ][ E_FIGHTING ] == true && g_boxingMatchData[ playerid ][ E_FIGHTING ] ) {
|
if ( g_boxingPlayerData[ playerid ] [ E_FIGHTING ] == true && g_boxingPlayerData[ playerid ] [ E_FIGHTING ] ) {
|
||||||
|
|
||||||
new Float:health_P, Float:armour_P, Float:health_T, Float:armour_T;
|
new Float:health_P, Float:armour_P, Float:health_T, Float:armour_T;
|
||||||
|
|
||||||
GetPlayerHealth( playerid, health_P );
|
GetPlayerHealth( playerid, health_P );
|
||||||
g_boxingMatchData[ playerid ][ E_PRIOR_HEALTH ] = health_P;
|
|
||||||
|
|
||||||
GetPlayerArmour( playerid, armour_P );
|
GetPlayerArmour( playerid, armour_P );
|
||||||
g_boxingMatchData[ playerid ][ E_PRIOR_ARMOUR ] = armour_P;
|
g_boxingPlayerData[ playerid ] [ E_PRIOR_HEALTH ] = health_P;
|
||||||
|
g_boxingPlayerData[ playerid ] [ E_PRIOR_ARMOUR ] = armour_P;
|
||||||
|
g_boxingPlayerData[ playerid ] [ E_PRIOR_SKIN ] = GetPlayerSkin( playerid );
|
||||||
|
SetPlayerSkin( playerid, 81 );
|
||||||
|
|
||||||
GetPlayerHealth( targetID, health_T );
|
GetPlayerHealth( targetID, health_T );
|
||||||
g_boxingMatchData[ targetID ][ E_PRIOR_HEALTH ] = health_T;
|
|
||||||
|
|
||||||
GetPlayerArmour( targetID, armour_T );
|
GetPlayerArmour( targetID, armour_T );
|
||||||
g_boxingMatchData[ targetID ][ E_PRIOR_ARMOUR ] = armour_T;
|
g_boxingPlayerData[ targetID ] [ E_PRIOR_HEALTH ] = health_T;
|
||||||
|
g_boxingPlayerData[ targetID ] [ E_PRIOR_ARMOUR ] = armour_T;
|
||||||
|
g_boxingPlayerData[ targetID ] [ E_PRIOR_SKIN ] = GetPlayerSkin( targetID );
|
||||||
|
SetPlayerSkin( targetID, 80 );
|
||||||
|
|
||||||
g_boxingArenaData[ E_ROUNDS ] = g_boxingMatchData[ targetID ][ E_ROUNDS_SET ];
|
// save weapons
|
||||||
g_boxingArenaData[ E_BET ] = g_boxingMatchData[ targetID ][ E_BET_AMOUNT_SET ];
|
for( new iSlot = 0; iSlot != 12; iSlot++ ) {
|
||||||
|
GetPlayerWeaponData( playerid, iSlot, g_boxingPlayerData[ playerid ] [ E_PRIOR_WEP ] [ iSlot ], g_boxingPlayerData[ playerid ] [ E_PRIOR_WEP_AMMO ] [ iSlot ] );
|
||||||
|
GetPlayerWeaponData( targetID, iSlot, g_boxingPlayerData[ targetID ] [ E_PRIOR_WEP ] [ iSlot ], g_boxingPlayerData[ targetID ] [ E_PRIOR_WEP_AMMO ] [ iSlot ] );
|
||||||
|
}
|
||||||
|
|
||||||
|
g_boxingArenaData[ E_ROUNDS ] = g_boxingPlayerData[ targetID ] [ E_ROUNDS_SET ];
|
||||||
|
g_boxingArenaData[ E_BET ] = g_boxingPlayerData[ targetID ] [ E_BET_AMOUNT_SET ];
|
||||||
|
|
||||||
|
if ( g_boxingArenaData[ E_BET ] > 0 ) {
|
||||||
|
GivePlayerCash( playerid, -g_boxingArenaData[ E_BET ] );
|
||||||
|
GivePlayerCash( targetID, -g_boxingArenaData[ E_BET ] );
|
||||||
|
}
|
||||||
|
|
||||||
SetBoxingPlayerConfig( playerid, targetID );
|
SetBoxingPlayerConfig( playerid, targetID );
|
||||||
|
|
||||||
KillTimer( g_boxingArenaData[ E_CD_TIMER ] );
|
KillTimer( g_boxingArenaData[ E_CD_TIMER ] );
|
||||||
g_boxingArenaData[ E_CD_TIMER ] = SetTimerEx( "boxingCountDown", 960, false, "d", 8 );
|
g_boxingArenaData[ E_CD_TIMER ] = SetTimerEx( "boxingCountDown", 960, false, "d", 5 );
|
||||||
|
|
||||||
format( szNormalString, sizeof( szNormalString ), "You are fighting %s through the best of %i round(s). Good luck!", ReturnPlayerName( targetID ), g_boxingArenaData[ E_ROUNDS ] );
|
SendBoxing( playerid, "You are fighting %s through the best of %i round(s). Good luck!", ReturnPlayerName( targetID ), g_boxingArenaData[ E_ROUNDS ] );
|
||||||
SendBoxing( playerid, szNormalString );
|
SendBoxing( targetID, "You are fighting %s through the best of %i round(s). Good luck!", ReturnPlayerName( playerid ), g_boxingArenaData[ E_ROUNDS ] );
|
||||||
|
|
||||||
format( szNormalString, sizeof( szNormalString ), "You are fighting %s through the best of %i round(s). Good luck!", ReturnPlayerName( playerid ), g_boxingArenaData[ E_ROUNDS ] );
|
|
||||||
SendBoxing( targetID, szNormalString );
|
|
||||||
|
|
||||||
|
UpdateArenaScoreLabel( playerid, targetID );
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
return SendError( playerid, "I'm sorry. Something has gone terribly wrong with starting the match. Please try again." );
|
return SendError( playerid, "I'm sorry. Something has gone terribly wrong with starting the match. Please try again." );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function NextRound( playerid, targetID ) {
|
stock NextRound( playerid, targetID )
|
||||||
|
{
|
||||||
|
UpdateArenaScoreLabel( playerid, targetID );
|
||||||
SetBoxingPlayerConfig( playerid, targetID );
|
SetBoxingPlayerConfig( playerid, targetID );
|
||||||
|
|
||||||
KillTimer( g_boxingArenaData[ E_CD_TIMER ] );
|
KillTimer( g_boxingArenaData[ E_CD_TIMER ] );
|
||||||
g_boxingArenaData[ E_CD_TIMER ] = SetTimerEx( "boxingCountDown", 960, false, "d", 8 );
|
g_boxingArenaData[ E_CD_TIMER ] = SetTimerEx( "boxingCountDown", 960, false, "d", 5 );
|
||||||
return true;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
function EndMatch( playerid, targetID ) {
|
stock EndMatch( playerid, targetID ) {
|
||||||
|
|
||||||
if ( g_boxingArenaData[ E_BET ] == 0 ) {
|
new winnerid = g_boxingPlayerData[ targetID ] [ E_SCORE ] > g_boxingPlayerData[ playerid ] [ E_SCORE ] ? targetID : playerid;
|
||||||
|
new loserid = winnerid == playerid ? targetID : playerid;
|
||||||
format( szNormalString, sizeof( szNormalString ), "%s has won a boxing match against %s with a final score of: [ %s: %i - %s: %i ]", ReturnPlayerName( targetID ), ReturnPlayerName( playerid ), ReturnPlayerName( playerid ), g_boxingMatchData[ playerid ][ E_SCORE ], ReturnPlayerName( targetID ), g_boxingMatchData[ targetID ][ E_SCORE ] );
|
|
||||||
|
|
||||||
} else if ( g_boxingArenaData[ E_BET ] > 0 ) {
|
|
||||||
|
|
||||||
if ( g_boxingMatchData[ playerid ][ E_SCORE ] > g_boxingMatchData[ targetID ][ E_SCORE ] ) {
|
|
||||||
|
|
||||||
GivePlayerMoney( playerid, g_boxingArenaData[ E_BET ] );
|
|
||||||
GivePlayerMoney( targetID, -g_boxingArenaData[ E_BET ] );
|
|
||||||
|
|
||||||
} else if ( g_boxingMatchData[ targetID ][ E_SCORE ] > g_boxingMatchData[ playerid ][ E_SCORE ] ) {
|
|
||||||
|
|
||||||
GivePlayerMoney( targetID, g_boxingArenaData[ E_BET ] );
|
|
||||||
GivePlayerMoney( playerid, -g_boxingArenaData[ E_BET ] );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
format( szNormalString, sizeof( szNormalString ), "%s has won a boxing match against %s for $%i with a final score of: [ %s: %i - %s: %i ]", ReturnPlayerName( targetID ), ReturnPlayerName( playerid ), g_boxingArenaData[ E_BET ], ReturnPlayerName( playerid ), g_boxingMatchData[ playerid ][ E_SCORE ], ReturnPlayerName( targetID ), g_boxingMatchData[ targetID ][ E_SCORE ] );
|
|
||||||
|
|
||||||
|
if ( g_boxingArenaData[ E_BET ] <= 0 ) {
|
||||||
|
SendBoxingGlobal( "%s has won a boxing match against %s with a final score of %i!", ReturnPlayerName( winnerid ), ReturnPlayerName( loserid ), g_boxingPlayerData[ winnerid ] [ E_SCORE ] );
|
||||||
|
} else {
|
||||||
|
new winning_prize = floatround( float( g_boxingArenaData[ E_BET ] ) * 1.8 ); // We take 10% of the total pot
|
||||||
|
GivePlayerCash( winnerid, winning_prize );
|
||||||
|
SendBoxingGlobal( "%s has won a boxing match against %s for %s with a final score of %i!", ReturnPlayerName( winnerid ), ReturnPlayerName( loserid ), number_format( g_boxingArenaData[ E_BET ] ), g_boxingPlayerData[ winnerid ] [ E_SCORE ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
SetPlayerHealth( playerid, g_boxingMatchData[ playerid ][ E_PRIOR_HEALTH ] );
|
boxing_RestorePlayer( playerid );
|
||||||
SetPlayerArmour( playerid, g_boxingMatchData[ playerid ][ E_PRIOR_ARMOUR ] );
|
boxing_RestorePlayer( targetID );
|
||||||
|
|
||||||
SetPlayerHealth( targetID, g_boxingMatchData[ targetID ][ E_PRIOR_HEALTH ] );
|
SetPlayerPos( playerid, 2658.3181, 1607.2100, 1507.1793 );
|
||||||
SetPlayerArmour( targetID, g_boxingMatchData[ targetID ][ E_PRIOR_ARMOUR ] );
|
SetPlayerPos( targetID, 2652.0947, 1607.2100, 1507.1793 );
|
||||||
|
|
||||||
SetPlayerPos( playerid, 113.0, -110.0, 2 );
|
ResetBoxingArenaVariables();
|
||||||
SetPlayerPos( targetID, 113.0, -104.0, 2 );
|
ResetBoxingPlayerVariables( playerid, targetID );
|
||||||
|
UpdateDynamic3DTextLabelText( arenaLabel, COLOR_GREY, "Boxing Arena\n"COL_WHITE"/boxing fight" );
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
SendBoxingGlobal( szNormalString );
|
stock boxing_RestorePlayer( playerid )
|
||||||
|
{
|
||||||
|
SetPlayerHealth( playerid, g_boxingPlayerData[ playerid ] [ E_PRIOR_HEALTH ] );
|
||||||
|
SetPlayerArmour( playerid, g_boxingPlayerData[ playerid ] [ E_PRIOR_ARMOUR ] );
|
||||||
|
SetPlayerSkin( playerid, g_boxingPlayerData[ playerid ] [ E_PRIOR_SKIN ] );
|
||||||
|
ResetPlayerWeapons( playerid );
|
||||||
|
|
||||||
|
for ( new iSlot = 0; iSlot != 12; iSlot++ ) {
|
||||||
|
GivePlayerWeapon( playerid, g_boxingPlayerData[ playerid ] [ E_PRIOR_WEP ] [ iSlot ], g_boxingPlayerData[ playerid ] [ E_PRIOR_WEP_AMMO ] [ iSlot ] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stock boxing_ForfeitMatch( playerid, targetID ) {
|
||||||
|
if ( g_boxingArenaData[ E_BET ] == 0 ) {
|
||||||
|
SendBoxingGlobal( "%s has won a boxing match by forfeit against %s.", ReturnPlayerName( targetID ), ReturnPlayerName( playerid ) );
|
||||||
|
} else if ( g_boxingArenaData[ E_BET ] > 0 ) {
|
||||||
|
GivePlayerCash( targetID, g_boxingArenaData[ E_BET ] );
|
||||||
|
SendBoxingGlobal( "%s has won a boxing match by forfeit against %s for %s.", ReturnPlayerName( targetID ), ReturnPlayerName( playerid ), number_format( g_boxingArenaData[ E_BET ] ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
boxing_RestorePlayer( playerid );
|
||||||
|
SetPlayerPos( playerid, 2658.3181, 1607.2100, 1507.1793 );
|
||||||
|
|
||||||
|
if ( 0 <= targetID < MAX_PLAYERS ) {
|
||||||
|
SetPlayerPos( targetID, 2652.0947, 1607.2100, 1507.1793 );
|
||||||
|
boxing_RestorePlayer( targetID );
|
||||||
|
}
|
||||||
|
|
||||||
ResetBoxingArenaVariables();
|
ResetBoxingArenaVariables();
|
||||||
ResetBoxingPlayerVariables( playerid, targetID );
|
ResetBoxingPlayerVariables( playerid, targetID );
|
||||||
|
|
||||||
return true;
|
UpdateDynamic3DTextLabelText( arenaLabel, COLOR_GREY, "Boxing Arena\n"COL_WHITE"/boxing fight" );
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
function ForfeitMatch( playerid, targetID ) {
|
stock SetBoxingPlayerConfig( playerid, targetID ) {
|
||||||
|
|
||||||
if ( g_boxingArenaData[ E_BET ] == 0 ) {
|
SetPlayerPos( playerid, 2657.4133, 1615.7841, 1507.0977 );
|
||||||
|
SetPlayerPos( targetID, 2653.1357, 1611.4575, 1507.0977 );
|
||||||
format( szNormalString, sizeof( szNormalString ), "%s has won a boxing match by forfeit against %s.", ReturnPlayerName( targetID ), ReturnPlayerName( playerid ) );
|
|
||||||
|
|
||||||
} else if ( g_boxingArenaData[ E_BET ] > 0 ) {
|
|
||||||
|
|
||||||
GivePlayerMoney( targetID, g_boxingArenaData[ E_BET ] );
|
|
||||||
|
|
||||||
format( szNormalString, sizeof( szNormalString ), "%s has won a boxing match by forfeit against %s for $%i.", ReturnPlayerName( targetID ), ReturnPlayerName( playerid ), g_boxingArenaData[ E_BET ] );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
SetPlayerHealth( playerid, g_boxingMatchData[ playerid ][ E_PRIOR_HEALTH ] );
|
|
||||||
SetPlayerArmour( playerid, g_boxingMatchData[ playerid ][ E_PRIOR_ARMOUR ] );
|
|
||||||
|
|
||||||
SetPlayerHealth( targetID, g_boxingMatchData[ targetID ][ E_PRIOR_HEALTH ] );
|
|
||||||
SetPlayerArmour( targetID, g_boxingMatchData[ targetID ][ E_PRIOR_ARMOUR ] );
|
|
||||||
|
|
||||||
SetPlayerPos( playerid, 113.0, -110.0, 2 );
|
|
||||||
SetPlayerPos( targetID, 113.0, -104.0, 2 );
|
|
||||||
|
|
||||||
SendBoxingGlobal( szNormalString );
|
|
||||||
|
|
||||||
ResetBoxingArenaVariables();
|
|
||||||
ResetBoxingPlayerVariables( playerid, targetID );
|
|
||||||
|
|
||||||
return true;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
function SetBoxingPlayerConfig( playerid, targetID ) {
|
|
||||||
|
|
||||||
SetPlayerPos( playerid, 2238.29, 1679.2426, 1009.188 );
|
|
||||||
SetPlayerPos( targetID, 2234.3279, 1675.3125, 1009.188 );
|
|
||||||
|
|
||||||
SetPlayerFacingAngle( playerid, 136 );
|
SetPlayerFacingAngle( playerid, 136 );
|
||||||
SetPlayerFacingAngle( targetID, 315 );
|
SetPlayerFacingAngle( targetID, 315 );
|
||||||
@ -468,7 +377,6 @@ function SetBoxingPlayerConfig( playerid, targetID ) {
|
|||||||
|
|
||||||
TogglePlayerControllable( playerid, 0 );
|
TogglePlayerControllable( playerid, 0 );
|
||||||
TogglePlayerControllable( targetID, 0 );
|
TogglePlayerControllable( targetID, 0 );
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -476,209 +384,97 @@ function SetBoxingPlayerConfig( playerid, targetID ) {
|
|||||||
function boxingCountDown( time ) {
|
function boxingCountDown( time ) {
|
||||||
|
|
||||||
if ( !time ) {
|
if ( !time ) {
|
||||||
|
foreach( new playerid : Player ) {
|
||||||
foreach( Player, playerid ) {
|
if ( g_boxingPlayerData[ playerid ] [ E_FIGHTING ] == true ) {
|
||||||
|
|
||||||
if ( g_boxingMatchData[ playerid ][ E_FIGHTING ] == true ) {
|
|
||||||
|
|
||||||
format( szNormalString, sizeof( szNormalString ), "~r~FIGHT!", time );
|
format( szNormalString, sizeof( szNormalString ), "~r~FIGHT!", time );
|
||||||
GameTextForPlayer( playerid, szNormalString, 2000, 3 );
|
GameTextForPlayer( playerid, szNormalString, 2000, 3 );
|
||||||
PlayerPlaySound( playerid, 1057, 0.0, 0.0, 0.0 );
|
PlayerPlaySound( playerid, 1057, 0.0, 0.0, 0.0 );
|
||||||
|
|
||||||
TogglePlayerControllable( playerid, 1 );
|
TogglePlayerControllable( playerid, 1 );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
g_boxingArenaData[ E_CD_TIMER ] = -1;
|
||||||
g_boxingArenaData[ E_CD_TIMER ] = 0xFFFF;
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
foreach( new playerid : Player ) {
|
||||||
foreach( Player, playerid ) {
|
if ( g_boxingPlayerData[ playerid ] [E_FIGHTING ] == true ) {
|
||||||
|
|
||||||
if ( g_boxingMatchData[ playerid ][E_FIGHTING ] == true ) {
|
|
||||||
|
|
||||||
format( szNormalString, sizeof( szNormalString ), "~y~%d", time );
|
format( szNormalString, sizeof( szNormalString ), "~y~%d", time );
|
||||||
GameTextForPlayer( playerid, szNormalString, 2000, 3 );
|
GameTextForPlayer( playerid, szNormalString, 2000, 3 );
|
||||||
PlayerPlaySound( playerid, 1056, 0.0, 0.0, 0.0 );
|
PlayerPlaySound( playerid, 1056, 0.0, 0.0, 0.0 );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
g_boxingArenaData[ E_CD_TIMER ] = SetTimerEx( "boxingCountDown", 960, false, "d", time - 1 );
|
g_boxingArenaData[ E_CD_TIMER ] = SetTimerEx( "boxingCountDown", 960, false, "d", time - 1 );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
stock UpdateArenaScoreLabel( playerid, opponent ) {
|
||||||
|
format( szNormalString, sizeof( szNormalString ), "%s [ %i ] - [ %i ] %s", ReturnPlayerName( playerid ), g_boxingPlayerData[ playerid ] [ E_SCORE ], g_boxingPlayerData[ opponent ] [ E_SCORE ], ReturnPlayerName( opponent ) );
|
||||||
|
return UpdateDynamic3DTextLabelText( arenaLabel, COLOR_GOLD, szNormalString );
|
||||||
|
}
|
||||||
|
|
||||||
|
stock ResetBoxingPlayerVariables( playerid, targetID ) {
|
||||||
|
|
||||||
|
g_boxingPlayerData[ playerid ] [ E_INVITED ] = false;
|
||||||
|
g_boxingPlayerData[ playerid ] [ E_OPPONENT ] = -1;
|
||||||
|
g_boxingPlayerData[ playerid ] [ E_IS_HOST ] = false;
|
||||||
|
g_boxingPlayerData[ playerid ] [ E_FIGHTING ] = false;
|
||||||
|
g_boxingPlayerData[ playerid ] [ E_SCORE ] = 0;
|
||||||
|
TogglePlayerControllable( playerid, 1 );
|
||||||
|
|
||||||
|
if ( 0 <= targetID < MAX_PLAYERS )
|
||||||
|
{
|
||||||
|
g_boxingPlayerData[ targetID ] [ E_INVITED ] = false;
|
||||||
|
g_boxingPlayerData[ targetID ] [ E_OPPONENT ] = -1;
|
||||||
|
g_boxingPlayerData[ targetID ] [ E_IS_HOST ] = false;
|
||||||
|
g_boxingPlayerData[ targetID ] [ E_FIGHTING ] = false;
|
||||||
|
g_boxingPlayerData[ targetID ] [ E_SCORE ] = 0;
|
||||||
|
TogglePlayerControllable( targetID, 1 );
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
stock ResetBoxingArenaVariables() {
|
||||||
|
g_boxingArenaData[ E_OCCUPIED ] = false;
|
||||||
|
g_boxingArenaData[ E_CURRENT_ROUNDS ] = 0;
|
||||||
|
g_boxingArenaData[ E_ROUNDS ] = 0;
|
||||||
|
g_boxingArenaData[ E_BET ] = 0;
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ONPLAYER GIVE/TAKE DAMAGE HANDLING */
|
/* Hooks */
|
||||||
|
#if defined AC_INCLUDED
|
||||||
hook OnPlayerTakeDamage( playerid, issuerid, Float:amount, weaponid, bodypart ) {
|
hook OnPlayerDamagePlayer( playerid, damagedid, Float: amount, weaponid, bodypart )
|
||||||
|
#else
|
||||||
if ( g_boxingMatchData[ playerid ][ E_FIGHTING ] == true ) {
|
hook OnPlayerGiveDamage( playerid, damagedid, Float: amount, weaponid, bodypart )
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
if ( g_boxingPlayerData[ damagedid ] [ E_FIGHTING ] == true ) {
|
||||||
|
|
||||||
new Float:currentArmour;
|
new Float:currentArmour;
|
||||||
|
|
||||||
GetPlayerArmour( playerid, currentArmour );
|
GetPlayerArmour( damagedid, currentArmour );
|
||||||
|
|
||||||
if ( currentArmour <= 5.0 ) {
|
if ( currentArmour <= 0.0 ) {
|
||||||
|
|
||||||
new opponent = g_boxingMatchData[ playerid ][ E_OPPONENT ];
|
new opponent = g_boxingPlayerData[ damagedid ] [ E_OPPONENT ];
|
||||||
|
|
||||||
g_boxingMatchData[ opponent ][ E_SCORE ] ++;
|
g_boxingPlayerData[ opponent ] [ E_SCORE ] ++;
|
||||||
g_boxingArenaData[ E_CURRENT_ROUNDS ] ++;
|
g_boxingArenaData[ E_CURRENT_ROUNDS ] ++;
|
||||||
|
|
||||||
if ( g_boxingArenaData[ E_CURRENT_ROUNDS ] == g_boxingArenaData[ E_ROUNDS ] ) {
|
if ( g_boxingArenaData[ E_CURRENT_ROUNDS ] == g_boxingArenaData[ E_ROUNDS ] ) {
|
||||||
|
return EndMatch( damagedid, opponent );
|
||||||
return EndMatch( playerid, opponent );
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SendBoxing( playerid, "You have lost the round. Let the next round begin." );
|
SendBoxing( damagedid, "You have lost the round. Let the next round begin." );
|
||||||
SendBoxing( opponent, "You have won the round. Let the next round begin." );
|
SendBoxing( opponent, "You have won the round. Let the next round begin." );
|
||||||
|
|
||||||
new bestOfMSG[ 50 ];
|
SendBoxing( damagedid, "Best of %i - [ %s: %i ] - [ %s: %i ]", g_boxingArenaData[ E_ROUNDS ], ReturnPlayerName( damagedid ), g_boxingPlayerData[ damagedid ] [ E_SCORE ], ReturnPlayerName( opponent ), g_boxingPlayerData[ opponent ] [ E_SCORE ] );
|
||||||
|
SendBoxing( opponent, "Best of %i - [ %s: %i ] - [ %s: %i ]", g_boxingArenaData[ E_ROUNDS ], ReturnPlayerName( damagedid ), g_boxingPlayerData[ damagedid ] [ E_SCORE ], ReturnPlayerName( opponent ), g_boxingPlayerData[ opponent ] [ E_SCORE ] );
|
||||||
format( bestOfMSG, sizeof( bestOfMSG ), "Best of %i - [ %s: %i ] - [ %s: %i ]", g_boxingArenaData[ E_ROUNDS ], ReturnPlayerName( playerid ), g_boxingMatchData[ playerid ][ E_SCORE ], ReturnPlayerName( opponent ), g_boxingMatchData[ opponent ][ E_SCORE ] );
|
|
||||||
|
|
||||||
SendBoxing( playerid, bestOfMSG );
|
|
||||||
SendBoxing( opponent, bestOfMSG );
|
|
||||||
|
|
||||||
return NextRound( playerid, opponent );
|
|
||||||
|
|
||||||
|
NextRound( damagedid, opponent );
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
return Y_HOOKS_CONTINUE_RETURN_1;
|
||||||
return true;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* DIALOG RELATED */
|
|
||||||
|
|
||||||
function ShowBoxingDialog( playerid ) {
|
|
||||||
format( szNormalString, sizeof( szNormalString ), "Rounds\t{EBE971}%i\nBet Amount\t{96F073}%i", g_boxingMatchData[ playerid ][ E_ROUNDS_SET ], g_boxingMatchData[ playerid ][ E_BET_AMOUNT_SET ] );
|
|
||||||
return ShowPlayerDialog( playerid, DIALOG_BOXING_SETTINGS, DIALOG_STYLE_TABLIST, "Boxing - Match Configuration", szNormalString, "Select", "Close" );
|
|
||||||
}
|
|
||||||
|
|
||||||
public OnDialogResponse( playerid, dialogid, response, listitem, inputtext[] ) {
|
|
||||||
|
|
||||||
switch ( dialogid ) {
|
|
||||||
|
|
||||||
case DIALOG_BOXING_SETTINGS: {
|
|
||||||
|
|
||||||
if ( response ) {
|
|
||||||
|
|
||||||
switch ( listitem ) {
|
|
||||||
// rounds
|
|
||||||
case 0: return ShowPlayerDialog( playerid, DIALOG_BOXING_ROUNDS, DIALOG_STYLE_LIST, "Boxing - Rounds", "One Round\nThree Rounds\nFive Rounds", "Set", "Cancel" );
|
|
||||||
|
|
||||||
// wager
|
|
||||||
case 1: return ShowPlayerDialog( playerid, DIALOG_BOXING_BET_AMOUNT, DIALOG_STYLE_INPUT, "Boxing - Bet Amount", "How much would you like to wager?", "Set", "Cancel" );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
case DIALOG_BOXING_ROUNDS: {
|
|
||||||
|
|
||||||
if ( response ) {
|
|
||||||
|
|
||||||
switch ( listitem ) {
|
|
||||||
|
|
||||||
case 0: { // 1 ROUND
|
|
||||||
g_boxingMatchData[ playerid ][ E_ROUNDS_SET ] = 1;
|
|
||||||
return ShowBoxingDialog( playerid );
|
|
||||||
}
|
|
||||||
|
|
||||||
case 1: { // 3 ROUNDS
|
|
||||||
g_boxingMatchData[ playerid ][ E_ROUNDS_SET ] = 3;
|
|
||||||
return ShowBoxingDialog( playerid );
|
|
||||||
}
|
|
||||||
|
|
||||||
case 2: { // 5 ROUNDS
|
|
||||||
g_boxingMatchData[ playerid ][ E_ROUNDS_SET ] = 5;
|
|
||||||
return ShowBoxingDialog( playerid );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
case DIALOG_BOXING_BET_AMOUNT: {
|
|
||||||
|
|
||||||
if ( response ) {
|
|
||||||
|
|
||||||
if ( sscanf( inputtext, "i" ) ) {
|
|
||||||
ShowPlayerDialog( playerid, DIALOG_BOXING_BET_AMOUNT, DIALOG_STYLE_INPUT, "Boxing - Bet Amount", "How much would you like to wager?", "Set", "Cancel" );
|
|
||||||
return SendError( playerid, "You must choose an amount greater than $0." );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( GetPlayerMoney( playerid ) < strval( inputtext ) ) {
|
|
||||||
ShowPlayerDialog( playerid, DIALOG_BOXING_BET_AMOUNT, DIALOG_STYLE_INPUT, "Boxing - Bet Amount", "How much would you like to wager?", "Set", "Cancel" );
|
|
||||||
return SendError( playerid, "You do not have that amount of money to bet." );
|
|
||||||
}
|
|
||||||
|
|
||||||
g_boxingMatchData[ playerid ][ E_BET_AMOUNT_SET ] = strval( inputtext );
|
|
||||||
return ShowBoxingDialog( playerid );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ARENA CREATION */
|
|
||||||
|
|
||||||
stock IsPlayerNearArena( playerid ) {
|
|
||||||
new
|
|
||||||
Float: point = GetPlayerDistanceFromPoint( playerid, 2235.866699, 1676.826293, 1008.359375 );
|
|
||||||
|
|
||||||
return point < 25.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
stock CreateBoxingArena() {
|
|
||||||
|
|
||||||
g_boxingArenaObjects[ 0 ] = CreateDynamicObject( 14781, 2235.866699, 1676.826293, 1008.359375, 0.000000, 0.000000, 0.000000, -1, -1, -1, 300.0 );
|
|
||||||
g_boxingArenaObjects[ 1 ] = CreateDynamicObject( 18766, 2236.955078, 1680.546997, 1010.541503, 0.000000, 90.000000, 0.000000, -1, -1, -1, 300.0 );
|
|
||||||
g_boxingArenaObjects[ 2 ] = CreateDynamicObject( 18766, 2235.683837, 1680.546997, 1010.541503, 0.000000, 90.000000, 0.000000, -1, -1, -1, 300.0 );
|
|
||||||
g_boxingArenaObjects[ 3 ] = CreateDynamicObject( 18766, 2235.683837, 1674.000610, 1010.541503, 0.000000, 90.000000, 0.000000, -1, -1, -1, 300.0 );
|
|
||||||
g_boxingArenaObjects[ 4 ] = CreateDynamicObject( 18766, 2236.955078, 1674.000610, 1010.541503, 0.000000, 90.000000, 0.000000, -1, -1, -1, 300.0 );
|
|
||||||
g_boxingArenaObjects[ 5 ] = CreateDynamicObject( 18766, 2239.607666, 1676.002563, 1010.541503, 0.000000, 90.000000, 90.000000, -1, -1, -1, 300.0 );
|
|
||||||
g_boxingArenaObjects[ 6 ] = CreateDynamicObject( 18766, 2239.607666, 1678.545043, 1010.541503, 0.000000, 90.000000, 90.000000, -1, -1, -1, 300.0 );
|
|
||||||
g_boxingArenaObjects[ 7 ] = CreateDynamicObject( 18766, 2233.031250, 1678.545043, 1010.541503, 0.000000, 90.000000, 90.000000, -1, -1, -1, 300.0 );
|
|
||||||
g_boxingArenaObjects[ 8 ] = CreateDynamicObject( 18766, 2233.031250, 1676.003417, 1010.541503, 0.000000, 90.000000, 90.000000, -1, -1, -1, 300.0 );
|
|
||||||
|
|
||||||
for ( new i = 0; i <= 10; i++ ) {
|
|
||||||
SetObjectInvisible( g_boxingArenaObjects[ i ] );
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
stock DestroyBoxingArena() {
|
|
||||||
|
|
||||||
for ( new i = 0; i < 10; i++ ) {
|
|
||||||
DestroyDynamicObject( g_boxingArenaObjects[ i ] );
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* MESSAGE FUNCTIONS */
|
|
||||||
stock SendBoxingGlobal( string[] ) {
|
|
||||||
|
|
||||||
format( szNormalString, sizeof( szNormalString ), "{B74AFF}[BOXING] {FFFFFF}%s", string );
|
|
||||||
return SendClientMessageToAll( -1, szNormalString );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
stock SendBoxing( playerid, string[] ) {
|
|
||||||
format( szNormalString, sizeof( szNormalString ), "{B74AFF}[BOXING] {FFFFFF}%s", string );
|
|
||||||
return SendClientMessage( playerid, -1, szNormalString );
|
|
||||||
}
|
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
#include < irresistible\features\visage\fireworks >
|
#include < irresistible\features\visage\fireworks >
|
||||||
#include < irresistible\features\visage\casino >
|
#include < irresistible\features\visage\casino >
|
||||||
#include < irresistible\features\visage\apartments >
|
#include < irresistible\features\visage\apartments >
|
||||||
// #include < irresistible\features\visage\boxing >
|
#include < irresistible\features\visage\boxing >
|
||||||
|
|
||||||
// static cnr features
|
// static cnr features
|
||||||
#include < irresistible\cnr\static\actors >
|
#include < irresistible\cnr\static\actors >
|
||||||
|
Loading…
Reference in New Issue
Block a user