131 lines
5.1 KiB
Plaintext
131 lines
5.1 KiB
Plaintext
/*
|
|
* Irresistible Gaming (c) 2018
|
|
* Developed by Lorenc Pekaj
|
|
* Module: cnr\irresistibleguard.pwn
|
|
* Purpose: provides account protection in the form of email securing
|
|
*/
|
|
|
|
/* ** Includes ** */
|
|
#include < YSI\y_hooks >
|
|
|
|
/* ** Definitions ** */
|
|
#define SECURITY_MODE_MILD ( 0 )
|
|
#define SECURITY_MODE_PARANOID ( 1 )
|
|
#define SECURITY_MODE_DISABLED ( 2 )
|
|
|
|
/* ** Variables ** */
|
|
enum E_IRRESISTIBLE_GUARD
|
|
{
|
|
E_ID, E_EMAIL[ 64 ], E_MODE,
|
|
bool: E_VERIFIED, E_LAST_DISABLED
|
|
};
|
|
|
|
new
|
|
p_accountSecurityData [ MAX_PLAYERS ] [ E_IRRESISTIBLE_GUARD ]
|
|
;
|
|
|
|
/* ** Hooks ** */
|
|
hook OnPlayerDisconnect( playerid, reason )
|
|
{
|
|
p_accountSecurityData[ playerid ] [ E_VERIFIED ] = false;
|
|
p_accountSecurityData[ playerid ] [ E_ID ] = 0;
|
|
p_accountSecurityData[ playerid ] [ E_LAST_DISABLED ] = 0;
|
|
return 1;
|
|
}
|
|
|
|
hook OnDialogResponse( playerid, dialogid, response, listitem, inputtext[ ] )
|
|
{
|
|
if ( ( dialogid == DIALOG_ACC_GUARD ) && response )
|
|
{
|
|
if ( p_accountSecurityData[ playerid ] [ E_ID ] && ! p_accountSecurityData[ playerid ] [ E_VERIFIED ] && p_accountSecurityData[ playerid ] [ E_MODE ] != SECURITY_MODE_DISABLED )
|
|
return SendError( playerid, "You must be verified to use this feature." );
|
|
|
|
switch ( listitem )
|
|
{
|
|
case 0:
|
|
{
|
|
if ( p_accountSecurityData[ playerid ] [ E_ID ] )
|
|
return SendError( playerid, "Your email is already confirmed!" ), ShowPlayerAccountGuard( playerid ), 1;
|
|
|
|
format( szNormalString, sizeof( szNormalString ), "SELECT * FROM `EMAILS` WHERE `USER_ID`=%d", p_AccountID[ playerid ] );
|
|
mysql_function_query( dbHandle, szNormalString, true, "OnEmailConfirm", "d", playerid );
|
|
}
|
|
case 1: ShowPlayerDialog( playerid, DIALOG_ACC_GUARD_MODE, DIALOG_STYLE_TABLIST, "{FFFFFF}Irresistible Guard - Mode", "Mild\t"COL_GREY"Must verify IP before making transactions\nParanoid\t"COL_GREY"Must verify IP after logging in\nDisable\t"COL_GREY"No form of verification", "Select", "Back" );
|
|
case 2:
|
|
{
|
|
format( szBigString, sizeof( szBigString ), "SELECT * FROM `EMAILS` WHERE `ID`=%d", p_accountSecurityData[ playerid ] [ E_ID ] );
|
|
mysql_function_query( dbHandle, szBigString, true, "OnAccountGuardDelete", "d", playerid );
|
|
}
|
|
case 3:
|
|
{
|
|
if ( p_AddedEmail{ playerid } )
|
|
return SendError( playerid, "You already added an email to your account before." );
|
|
|
|
if ( GetPlayerScore( playerid ) < 1000 )
|
|
return SendServerMessage( playerid, "Get at least 1000 score, then use this feature." );
|
|
|
|
Beep( playerid );
|
|
p_AddedEmail{ playerid } = true;
|
|
SetPlayerVipLevel( playerid, VIP_REGULAR, .interval = 259560 ); // 3 days of vip
|
|
mysql_single_query( sprintf( "UPDATE `USERS` SET `USED_EMAIL`=1 WHERE `ID`=%d", p_AccountID[ playerid ] ) );
|
|
SendGlobalMessage( COLOR_GOLD, "[EMAIL CONFIRMED]"COL_GREY" %s(%d) has confirmed their "COL_GOLD"/email"COL_GREY" and received 3 days of V.I.P!", ReturnPlayerName( playerid ), playerid );
|
|
return 1;
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
else if ( dialogid == DIALOG_ACC_GUARD_CONFIRM )
|
|
{
|
|
if ( ! response )
|
|
{
|
|
if ( p_accountSecurityData[ playerid ] [ E_MODE ] == SECURITY_MODE_PARANOID ) {
|
|
return Kick( playerid );
|
|
}
|
|
|
|
// allow other modes
|
|
return 1;
|
|
}
|
|
|
|
static
|
|
szInput[ 10 ];
|
|
|
|
format( szInput, sizeof( szInput ), "%s", inputtext );
|
|
trimString( szInput ); // gotta take out the whitespace
|
|
|
|
if ( strlen( szInput ) != 8 )
|
|
return SendError( playerid, "The verification code must be 8 characters." ), ShowPlayerAccountVerification( playerid );
|
|
|
|
mysql_format( dbHandle, szBigString, sizeof( szBigString ), "SELECT * FROM `USER_CONFIRMED_IPS` WHERE `USER_ID`=%d AND `IP`='%e' AND `TOKEN`='%e'", p_AccountID[ playerid ], ReturnPlayerIP( playerid ), szInput );
|
|
mysql_function_query( dbHandle, szBigString, true, "OnAccountGuardVerify", "d", playerid );
|
|
return 1;
|
|
}
|
|
else if ( dialogid == DIALOG_ACC_GUARD_DEL_CANCEL )
|
|
{
|
|
if ( !response )
|
|
return ShowPlayerAccountGuard( playerid );
|
|
|
|
p_accountSecurityData[ playerid ] [ E_LAST_DISABLED ] = 0;
|
|
mysql_single_query( sprintf( "UPDATE `EMAILS` SET `LAST_CHANGED`=%d,`LAST_DISABLED`=0 WHERE `ID`=%d", g_iTime, p_accountSecurityData[ playerid ] [ E_ID ] ) );
|
|
return SendServerMessage( playerid, "You have cancelled the process to removing Irresistible Guard." );
|
|
}
|
|
else if ( dialogid == DIALOG_ACC_GUARD_MODE )
|
|
{
|
|
if ( !response )
|
|
return ShowPlayerAccountGuard( playerid );
|
|
|
|
if ( ! p_accountSecurityData[ playerid ] [ E_ID ] )
|
|
return SendError( playerid, "You need to assign an email to your account." );
|
|
|
|
p_accountSecurityData[ playerid ] [ E_MODE ] = listitem;
|
|
mysql_single_query( sprintf( "UPDATE `EMAILS` SET `MODE`=%d WHERE `ID`=%d", listitem, p_accountSecurityData[ playerid ] [ E_ID ] ) );
|
|
SendServerMessage( playerid, "Your Irresistible Guard mode is now set to "COL_GREY"%s"COL_WHITE".", SecurityModeToString( listitem ) );
|
|
return ShowPlayerAccountGuard( playerid );
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
/* ** Functions ** */
|
|
stock IsPlayerSecurityVerified( playerid ) {
|
|
return ! ( p_accountSecurityData[ playerid ] [ E_ID ] && ! p_accountSecurityData[ playerid ] [ E_VERIFIED ] && p_accountSecurityData[ playerid ] [ E_MODE ] != SECURITY_MODE_DISABLED );
|
|
}
|