#include < amxmodx >
#include < cstrike >
#include < fun >
#include < hamsandwich >
#include < nvault >
#include < colorchat >
#pragma semicolon 1
#define PLUGIN "Magic Word"
#define VERSION "1.0"
#define MagicWordTask 112233
#define MagicWordSecondTask 332211
#define CharsMax(%1) sizeof %1 - 1
#define MAX_LINES 512
#define MAX_LEN 256
#define ONE_DAY_IN_SECONDS 86400
new const g_szSmallLetters[ ] =
{
'a','b','c','d',
'e','f','g','h',
'i','j','k','l',
'm','n','o','p',
'q','r','s','t',
'u','v','w','x',
'y','z'
};
new const g_szLargeLetters[ ] =
{
'A','B','C','D',
'E','F','G','H',
'I','J','K','L',
'M','N','O','P',
'Q','R','S','T',
'U','V','W','X',
'Y','Z'
};
new const g_szNumbers[ ] =
{
'0','1',
'2','3',
'4','5',
'6','7',
'8','9'
};
*/
new gCvarMagicWordIterval;
new gCvarMagicWordAnswerTime;
new gCvarMagicWordMinMoney;
new gCvarMagicWordMaxMoney;
new g_iAnswerTime = 0;
new g_szMagicWord[ 32 ];
new iVault;
new g_iCvarPruneDays;
new g_iCvarEntry;
new g_szName[ 33 ][ 32 ];
new g_iUserLifes[ 33 ];
new bool:g_bPlayersCanAnswer = false;
new SyncHudMessage;
public plugin_init( )
{
register_plugin( PLUGIN, VERSION, "Askhanar" );
gCvarMagicWordIterval = register_cvar( "fmu_mw_interval", "180" );
gCvarMagicWordAnswerTime = register_cvar( "fmu_mw_answertime", "15" );
gCvarMagicWordMinMoney = register_cvar( "fmu_mw_minmoney", "8000" );
gCvarMagicWordMaxMoney = register_cvar( "fmu_mw_maxmoney", "16000" );
register_clcmd( "amx_magicword", "ClCmdMagicWord" );
register_clcmd( "say /respawn", "ClCmdSayRespawn" );
register_clcmd( "say /vieti", "ClCmdSayVieti" );
register_clcmd( "say", "CheckForMagicWord" );
register_clcmd( "say_team", "CheckForMagicWord" );
SyncHudMessage = CreateHudSyncObj( );
set_task( 15.0, "ChooseRandomWord", MagicWordTask );
iVault = nvault_open( "Lifes" );
if( iVault == INVALID_HANDLE )
{
set_fail_state( "nValut returned invalid handle!" );
}
}
public _cts_get_user_lifes( iPlugin, iParams )
{
return g_iUserLifes[ get_param( 1 ) ];
}
public _cts_set_user_lifes( iPlugin, iParams )
{
new id = get_param( 1 );
g_iUserLifes[ id ] = max( 0, get_param( 2 ) );
SaveLifes( id );
return g_iUserLifes[ id ];
}
public client_authorized( id )
{
if( is_user_bot( id ) )
return 0;
get_user_name( id, g_szName[ id ], sizeof ( g_szName[] ) -1 );
LoadLifes( id );
return 0;
}
public client_disconnect( id )
{
if( is_user_bot( id ) )
return 0;
SaveLifes( id );
return 0;
}
public ClCmdSayRespawn( id )
{
if( g_iUserLifes[ id ] <= 0 )
{
ColorChat( id, RED, "^x04[ Fast Event ]^x01 Imi pare rau dar nu ai vieti!" );
return PLUGIN_CONTINUE;
}
else if( is_user_alive( id ) )
{
ColorChat( id, RED, "^x04[ Fast Event ]^x01 Imi pare rau dar nu poti primi respawn cand esti in viata!" );
return PLUGIN_CONTINUE;
}
g_iUserLifes[ id ] -= 1;
ExecuteHamB( Ham_CS_RoundRespawn, id );
ColorChat( id, RED, "^x04[ Fast Event ]^x01 Ai primit respawn!" );
return PLUGIN_CONTINUE;
}
public ClCmdSayVieti( id )
{
ColorChat( id, RED, "^x04[ Fast Event ]^x01 Ai^x03 %i^x01 vieti!", g_iUserLifes[ id ] );
return PLUGIN_CONTINUE;
}
public ClCmdMagicWord( id )
{
if( !UserHasAcces( id ) )
{
client_cmd( id, "echo Nu ai acces la aceasta comanda !" );
return PLUGIN_HANDLED;
}
read_argv( 1, g_szMagicWord, 14 );
if( equal( g_szMagicWord, "" ) )
{
remove_task( MagicWordTask );
remove_task( MagicWordSecondTask );
g_bPlayersCanAnswer = false;
ChooseRandomWord( );
}
else
{
remove_task( MagicWordTask );
remove_task( MagicWordSecondTask );
g_bPlayersCanAnswer = false;
DisplayMagicWord( );
}
return 1;
}
public CheckForMagicWord( id )
{
static szSaid[ 192 ];
read_args( szSaid, sizeof ( szSaid ) -1 );
remove_quotes( szSaid );
if( equali( szSaid, "" ) || !g_bPlayersCanAnswer )
return PLUGIN_CONTINUE;
if( equal( szSaid, g_szMagicWord ) )
{
g_bPlayersCanAnswer = false;
client_cmd( 0, "spk woop" );
GiveUserPrize( id );
}
return PLUGIN_CONTINUE;
}
public ChooseRandomWord( )
{
if( !get_playersnum( ) )
{
set_task( float( get_pcvar_num( gCvarMagicWordIterval ) ), "ChooseRandomWord", MagicWordTask );
return;
}
new iLen = random_num( 10, 15 );
formatex( g_szMagicWord, sizeof ( g_szMagicWord ) -1, "" );
for( new i = 0; i < iLen; i++ )
g_szMagicWord[ i ] = GetRandomCharacter( );
StartMagicWord( );
client_cmd( 0, "spk doop" );
set_task( float( get_pcvar_num( gCvarMagicWordIterval ) ), "ChooseRandomWord", MagicWordTask );
}
public DisplayMagicWord( )
{
if( !get_playersnum( ) )
{
set_task( float( get_pcvar_num( gCvarMagicWordIterval ) ), "ChooseRandomWord", MagicWordTask );
return;
}
StartMagicWord( );
client_cmd( 0, "spk doop" );
set_task( float( get_pcvar_num( gCvarMagicWordIterval ) ), "ChooseRandomWord", MagicWordTask );
}
GetRandomCharacter( )
{
new Float:fRandom = random_float( 1.0, 100.0 );
if( fRandom <= 45.0 )
{
return g_szSmallLetters[ random( sizeof ( g_szSmallLetters ) ) ];
}
else if( fRandom > 45.0 && fRandom <= 70.0 )
{
return g_szLargeLetters[ random( sizeof ( g_szLargeLetters ) ) ];
}
else if( fRandom > 70.0 )
{
return g_szNumbers[ random( sizeof ( g_szNumbers ) ) ];
}
return EOS;
}
public StartMagicWord( )
{
g_bPlayersCanAnswer = true;
g_iAnswerTime = get_pcvar_num( gCvarMagicWordAnswerTime );
CountAnswerTime( );
}
public CountAnswerTime( )
{
if( g_bPlayersCanAnswer )
{
if( g_iAnswerTime <= 0 )
{
g_bPlayersCanAnswer = false;
ColorChat( 0, RED, "^x04[ Fast Event ]^x01 Nu a scris nimeni | %s | ca sa castige o viata", g_szMagicWord );
return PLUGIN_HANDLED;
}
set_hudmessage( 0, 255, 255, 0.01, 0.20, 0, 0.0, 1.0, 0.0, 0.1, 2 );
ShowSyncHudMsg( 0, SyncHudMessage, "Castiga un premiu primul care scrie -| %s |-^n %i secund%s ramas%s !!",
g_szMagicWord, g_iAnswerTime, g_iAnswerTime == 1 ? "a" : "e", g_iAnswerTime == 1 ? "a" : "e" );
g_iAnswerTime--;
set_task( 1.0, "CountAnswerTime", MagicWordSecondTask );
}
return PLUGIN_CONTINUE;
}
public GiveUserPrize( id )
{
new szName[ 32 ];
get_user_name( id, szName, sizeof ( szName ) -1 );
new iRandomChance = random_num( 1, 100 );
if( iRandomChance <= 50 )
{
new iMin = get_pcvar_num( gCvarMagicWordMinMoney );
new iMax = get_pcvar_num( gCvarMagicWordMaxMoney );
new iRandom = random_num( iMin, iMax );
g_iUserLifes[ id ] += 1;
ColorChat( 0, RED, "^x04[ Fast Event ]^x03 %s^x01 a scris primul^x03 %s^x01 si a primit^x03 o viata ^x01 !", szName, g_szMagicWord );
}
formatex( g_szMagicWord, sizeof ( g_szMagicWord ) -1, "" );
return 0;
}
stock bool:UserHasAcces( id )
{
if( get_user_flags( id ) & ADMIN_RCON )
return true;
return false;
}
public LoadLifes( id )
{
static szData[ 256 ], iTimestamp;
if( nvault_lookup( iVault, g_szName[ id ], szData, sizeof ( szData ) -1, iTimestamp ) )
{
static szLifes[ 15 ];
parse( szData, szLifes, sizeof ( szLifes ) -1 );
g_iUserLifes[ id ] = str_to_num( szLifes );
return;
}
else
{
g_iUserLifes[ id ] = get_pcvar_num( g_iCvarEntry );
}
}
public SaveLifes( id )
{
static szData[ 256 ];
formatex( szData, sizeof ( szData ) -1, "%i", g_iUserLifes[ id ] );
nvault_set( iVault, g_szName[ id ], szData );
}
public plugin_end( )
{
new iDays = get_pcvar_num( g_iCvarPruneDays );
if( iDays > 0 )
{
nvault_prune( iVault, 0, get_systime( ) - ( iDays * ONE_DAY_IN_SECONDS ) );
}
nvault_close( iVault );
}