ph_core plugin bugeaado
#1
hola este es el modo 

https://amxmodx-es.com/showthread.php?tid=13917

el problema es que no deja entrar a nadie y no se puede cambiar de objetos quie puede ayudar a solucionarlo ? 
Código PHP:
#include <amxmodx>
#include <engine>
#include <hamsandwich>
#include <fakemeta>
#include <mysqlt>
#include <prophunt>

/* =====================================================================
 *                 [ Global stuff ]
 * ===================================================================== */

#define SetPlayerBit(%1,%2) ( %1 |= ( 1 << ( %2 & 31 ) ) )
#define ClearPlayerBit(%1,%2) ( %1 &= ~( 1 << ( %2 & 31 ) ) )
#define GetPlayerBit(%1,%2) ( %1 & ( 1 << ( %2 & 31 ) ) )

#define isDigit(%0) ( 48 <= %0 <= 57 )
#define isLetter(%0) ( 65 <= %0 <= 90 || 97 <= %0 <= 122 )

#define IsPlayerValid(%0) ( 1 <= %0 <= 32 )
#define IsUserPlaying(%0) ( g_ePlayerAccount[ %0 ][ Account_Status ] == Status_Playing )

#define GetNeededExp(%0) floatround( floatpower( ( %0 * 6.0 ), 3.0 ) )
#define GetHiderExp ( ( floatround( get_gametime( ) - g_flLastStart ) / HIDER_EXPDIV ) * g_iMultiplier )
#define GetHunterExp ( ( floatround( ( g_flLastStart + g_flTimer ) - get_gametime( ) ) / HUNTER_EXPDIV ) * g_iMultiplier )

#define ShouldLevelUp(%0) ( g_ePlayerStats[ %0 ][ Player_Exp ] >= GetNeededExp( g_ePlayerStats[ %0 ][ Player_Level ] + 1 ) )
#define ShouldRankUp(%0) ( g_ePlayerStats[ %0 ][ Player_Level ] >= g_eRanks[ g_ePlayerStats[ %0 ][ Player_Rank ] + 1 ][ Rank_Level ] )

const m_iVGUI 510;

const 
CODE_CHARS 8;
const 
MIN_CHARS 4;
const 
HIDER_EXPDIV 4;
const 
HUNTER_EXPDIV 7;

enum _:Query_Type
{
    
Query_Autologin,
    
Query_Create_User,
    
Query_Load_User,
    
Query_Create_Stats,
    
Query_Load_Stats,
    
Query_Save,
    
Query_Top,
    
Query_Names,
    
Query_Rank,
    
Query_Players
}

enum _:Player_Stats
{
    
Player_Exp,
    
Player_Rank,
    
Player_Level,
    
Player_Frags,
    
Player_Points,
    
Player_Hunter,
    
Player_Hider,
    
Player_Played
}

enum _:Account_Data
{
    
Account_Userid,
    
Account_Status,
    
Account_Ip32 ],
    
Account_Name32 ],
    
Account_Password32 ],
    
Account_CodeCODE_CHARS ]
}

enum _:Hud_Color
{
    
HC_Red,
    
HC_Green,
    
HC_Yellow
}

enum _:Rank_Data
{
    
Rank_Name16 ],
    
Rank_Level
}

new const 
g_eRanks[ ][ Rank_Data ] =
{
    { 
"Nuevo"},
    { 
"Aprendiz"},
    { 
"Conocido"},
    { 
"Miembro"16 },
    { 
"Avanzado"23 },
    { 
"Astuto"36 },
    { 
"Habil"48 },
    { 
"Vicio"66 },
    { 
"Experto"78 },
    { 
"Pro"110 },
    { 
"Maestro"154 },
    { 
"Inmortal"198 },
    { 
"Developer"300 }
};

new const 
g_szMultiplierNames[ ][ ] =
{
    
"cero",
    
"normal",
    
"duplicada"
};

new const 
g_szTeamnames[ ][ ] =
{
    
"Sin equipo",
    
"Hiders",
    
"Hunters",
    
"Espectadores"
};

new const 
g_szCache_Name[ ] = "name";
new const 
g_iHudSoundsHud_Color] = { 103};

new const 
g_iHudColorsHud_Color ][ ] =
{
    { 
2550},
    { 
0255},
    { 
255255}
};

new const 
g_szLevelUpSound[ ]     = "ph/level.wav";

new 
g_iAlive,
    
g_iSyncObj,
    
g_iShowMenu,
    
g_iVGUIMenu,
    
g_iConnected,
    
g_iLoginMenu,
    
g_iMultiplier,
    
g_iMaxPlayers,
    
g_iTotalPlayers,
    
Float:g_flTimer,
    
Handle:g_hSQLHost,
    
Float:g_flLastStart,
    
g_szMotdInfo1400 ],
    
g_eTop10 ][ Player_Stats ],
    
g_ePlayerStats33 ][ Player_Stats ],
    
g_ePlayerAccount33 ][ Account_Data ];

/* =====================================================================
 *                 [ Plugin events ]
 * ===================================================================== */

public plugin_precache( )
{
    
// Resource precaching
    
precache_soundg_szLevelUpSound );
}

public 
plugin_natives( )
{
    
// Native registering
    
register_native"ph_add_xp""_ph_add_xp" );
    
register_native"ph_get_level""_ph_get_level" );
    
register_native"ph_show_top""_ph_show_top" );
    
register_native"ph_show_rank""_ph_show_rank" );
    
register_native"ph_show_stats""_ph_show_stats" );
}

public 
plugin_init( )
{
    
register_plugin"[PH] Stats"VERSIONAUTHOR );
    
    
// Hook some player events
    
RegisterHamHam_Spawn"player""fw_PlayerSpawn_Post"true );
    
RegisterHamHam_Killed"player""fw_PlayerKilled_Post"true );
    
    
// Block name changing
    
register_forwardFM_ClientUserInfoChanged"fw_ClientUserInfoChanged_Pre"false );
    
    
// Block team choosing
    
register_menucmdregister_menuid"Team_Select"true ), (1<<0)|(1<<1)|(1<<4)|(1<<5), "HookTeamChoosing" );
    
    
register_clcmd"jointeam""HookTeamChoosing" );
    
register_clcmd"chooseteam""HookTeamChoosing" );
    
    
// Hook account-information input
    
register_clcmd"INGRESAR_CLAVE""CommandPassword" );
    
    
// Hook say and say_team
    
register_clcmd"say""CommandSay" );
    
register_clcmd"say_team""CommandSayTeam" );
    
    
// Default values, etc.
    
g_iLoginMenu    = -1;
    
g_iMaxPlayers    get_maxplayers( );
    
g_iSyncObj         CreateHudSyncObj( );
    
g_iShowMenu     get_user_msgid"ShowMenu" );
    
g_iVGUIMenu     get_user_msgid"VGUIMenu" );
    
    
// MySQL initiation, top10 loading, etc.
    
MySQL_Init( );
}

/* =====================================================================
 *                 [ Forwards & Events ]
 * ===================================================================== */

public ph_gamemodeiGamemode )
{
    
// Game has ended
    
if( iGamemode GS_Ended )
    {
        
// Hunters win
        
if( iGamemode GS_Hunters )
        {
            for( new 
iPlayer 1iPlayer <= g_iMaxPlayersiPlayer++ )
            {
                if( !
GetPlayerBitg_iConnectediPlayer ) || ( get_user_teamiPlayer ) != ) )
                    continue;
                
                
g_ePlayerStatsiPlayer ][ Player_Hunter ]++;
            }
        }
        
// Hiders win
        
else
        {
            for( new 
iPlayer 1iPlayer <= g_iMaxPlayersiPlayer++ )
            {
                if( !
GetPlayerBitg_iConnectediPlayer ) || ( get_user_teamiPlayer ) != ) )
                    continue;
                
                
g_ePlayerStatsiPlayer ][ Player_Hider ]++;
                
                if( 
GetPlayerBitg_iAliveiPlayer ) )
                {
                    
g_ePlayerStatsiPlayer ][ Player_Exp ] += GetHiderExp;
                    
UpdateLeveliPlayer );
                }
            }
        }
    }
    
// Game is preparing (countdown)
    
else if( iGamemode GS_Preparing )
    {
        static 
szTime16 ], szHour], iHour;
        
        
// Get timers
        
g_flLastStart get_gametime( );
        
g_flTimer get_cvar_float"mp_roundtime" ) * 60.0;
        
        
// Get time, check happyhour and notify about happyhour status
        
get_time"%H"szHourcharsmaxszHour ) );
        
get_time"%H:%M:%S"szTimecharsmaxszTime ) );
        
        
iHour str_to_numszHour );
        
        
g_iMultiplier = ( >= ( iHour ) >= ) ? 1;
        
        
client_print_color0print_team_default"^x04[PropHunt]^x01 Hora:^x04 %s^x01^x03 -^x01 Ganancia:^x04 %s^x01."szTimeg_szMultiplierNamesg_iMultiplier ] );
    }
}

public 
fw_ClientUserInfoChanged_PreiId )
{
    
// Player must be connected
    
if( GetPlayerBitg_iConnectediId ) )
    {
        static 
szName32 ]; get_user_infoiIdg_szCache_NameszNamecharsmaxszName ) );
        
        
// If player is logged and his name did change then block the event
        
if( IsUserPlayingiId ) && !equalszNameg_ePlayerAccountiId ][ Account_Name ] ) )
        {
            
client_cmdiId";name ^"%s^""g_ePlayerAccountiId ][ Account_Name ] );
            
set_user_infoiIdg_szCache_Nameg_ePlayerAccountiId ][ Account_Name ] );
            
            return 
FMRES_SUPERCEDE;
        }
    }
    
    
// Nothing happened <3
    
return FMRES_IGNORED;
}

public 
fw_PlayerKilled_PostiVictimiKilleriShouldGib )
{
    
ClearPlayerBitg_iAliveiVictim );
    
    
// Killer is valid, connected and he didn't kill himself
    
if( IsPlayerValidiKiller ) && GetPlayerBitg_iConnectediKiller ) && ( iVictim != iKiller ) )
    {
        
// Add a frag to the killer
        
g_ePlayerStatsiKiller ][ Player_Frags ]++;
        
        
// Add experience to killer and victim
        
g_ePlayerStatsiVictim ][ Player_Exp ] += GetHiderExp;
        
g_ePlayerStatsiKiller ][ Player_Exp ] += GetHunterExp;
        
        
// Update level for both players
        
UpdateLeveliKiller );
        
UpdateLeveliVictim );
    }
    
    return 
HAM_IGNORED;
}

public 
fw_PlayerSpawn_PostiId )
{
    
// Avoid bugs. Player should be alive by this moment
    
if( is_user_aliveiId ) )
        
SetPlayerBitg_iAliveiId );
    
    return 
HAM_IGNORED;
}

/* =====================================================================
 *                 [ Client-related section ]
 * ===================================================================== */

public CommandSayiId )
{
    
// Player must be logged
    
if( IsUserPlayingiId ) )
    {
        static 
iLenszTeam12 ], szBuffer192 ];
        
        
// Get say's data and lenght
        
read_argsszBuffercharsmaxszBuffer ) );
        
remove_quotesszBuffer );
        
iLen strlenszBuffer );
        
        
// Character replacement (exploit?)
        
for( new ijiLeni++ )
        {
            if( 
szBuffer] == '#' || szBuffer] == '%' )
                
j++;
            
            
szBuffer] = szBuffer]; iLen--;
        }
        
        
// String lenght is greater than 0
        
if( iLen )
        {
            
// Get sender's team
            
get_user_teamiIdszTeamcharsmaxszTeam ) );
            
            
formatszBuffercharsmaxszBuffer ), "^x01%s^x04[%s]^x03 %s^x01: %s"GetPlayerBitg_iAliveiId ) ? "" "*Muerto* ",
            
g_eRanksg_ePlayerStatsiId ][ Player_Rank ] ][ Rank_Name ], g_ePlayerAccountiId ][ Account_Name ], szBuffer );
            
            
// Loop through all players
            
for( new iPlayer 1iPlayer <= g_iMaxPlayersiPlayer++ )
            {
                
// Player must be connected and have same alive state than sender
                
if( !GetPlayerBitg_iConnectediPlayer ) || ( ( GetPlayerBitg_iAliveiId ) && !GetPlayerBitg_iAliveiPlayer ) ) || ( !GetPlayerBitg_iAliveiId ) && GetPlayerBitg_iAliveiPlayer ) ) ) )
                    continue;
                
                
// Send message
                
client_print_coloriPlayeriIdszBuffer );
            }
        }
    }
    else
        
client_print_coloriIdprint_team_default"^x04[PropHunt]^x01 No puedes hablar por chat sin ingresar al juego." );
    
    return 
PLUGIN_HANDLED_MAIN;
}

public 
CommandSayTeamiId )
{
    
// Player must be logged
    
if( IsUserPlayingiId ) )
    {
        static 
iLeniTeamszBuffer192 ];
        
        
// Get say data and its lenght
        
read_argsszBuffercharsmaxszBuffer ) );
        
remove_quotesszBuffer ); iLen strlenszBuffer );
        
        
// Character replacement (exploit?)
        
for( new ijiLeni++ )
        {
            if( 
szBuffer] == '#' || szBuffer] == '%' )
                
j++;
                
            
szBuffer] = szBuffer]; iLen--;
        }
        
        
// String lenght is greater than 0
        
if( iLen )
        {
            
// Get sender's team
            
iTeam get_user_teamiId );
            
            
formatszBuffercharsmaxszBuffer ), "^x01%s(%s)^x03 %s^x01: %s",
            
GetPlayerBitg_iAliveiId ) ? "" "*Muerto* "g_szTeamnamesiTeam ], g_ePlayerAccountiId ][ Account_Name ], szBuffer );
            
            
// Loop through all playersn
            
for( new iPlayer 1iPlayer <= g_iMaxPlayersiPlayer++ )
            {
                
// Player must be connected and have same alive state and team than sender
                
if( !GetPlayerBitg_iConnectediPlayer ) || ( ( ( GetPlayerBitg_iAliveiId ) && !GetPlayerBitg_iAliveiPlayer ) ) || ( !GetPlayerBitg_iAliveiId ) && GetPlayerBitg_iAliveiPlayer ) ) ) || ( iTeam != get_user_teamiPlayer ) ) ) )
                    continue;
                
                
// Send message
                
client_print_coloriPlayeriIdszBuffer );
            }
        }
    }
    else
        
client_print_coloriIdprint_team_default"^x04[PropHunt]^x01 No puedes hablar por chat sin ingresar al juego." );
    
    return 
PLUGIN_HANDLED_MAIN;
}

public 
CommandPasswordiId )
{
    static 
szBuffer32 ]; read_argv1szBuffercharsmaxszBuffer ) );
    
    
// Player is registered
    
if( g_ePlayerAccountiId ][ Account_Status ] == Status_Registered )
    {
        
// Password checking
        
if( equalszBufferg_ePlayerAccountiId ][ Account_Password ] ) )
        {
            
// Player logged in
            
g_ePlayerAccountiId ][ Account_Status ] = Status_Playing;
            
            
// Auto-join
            
ForceJoinTeamiId );
            
SendHudmessageiId3HC_Green"Has ingresado satisfactoriamente a tu cuenta!" );
        }
        else
        {
            
// Passwords were not equal, tell the player to re-input password
            
client_cmdiId"messagemode INGRESAR_CLAVE" );
            
SendHudmessageiId3HC_Red"La clave ingresada no era identica a la de la cuenta!" );
        }
    }
    else
    {
        
// Player is registering an account
        
if( g_ePlayerAccountiId ][ Account_Status ] == Status_Unregistered )
        {
            
// Min four chars, max twenty, only alphanumeric
            
if( <= strlenszBuffer ) <= 20 && IsAlphanumericszBuffer ) )
            {
                
// Save current password and ask for confirmation
                
copyg_ePlayerAccountiId ][ Account_Password ], charsmaxg_ePlayerAccount[ ][ Account_Password ] ), szBuffer );
                
                
// Change player's status to password confirming
                
g_ePlayerAccountiId ][ Account_Status ] = Status_Confirm;
                
                
// Tell the player to re-input password
                
client_cmdiId"messagemode INGRESAR_CLAVE" );
                
SendHudmessageiId3HC_Yellow"Le pedimos que vuelva a ingresar su clave por seguridad de errores." );
            }
            else
            {
                
// Password is not valid
                
client_cmdiId"messagemode INGRESAR_CLAVE" );
                
SendHudmessageiId3HC_Red"La clave solo puede ser alfanumerica y de al menos cuatro caracteres!" );
            }
        }
        
// Player is confirming his password
        
else if( g_ePlayerAccountiId ][ Account_Status ] == Status_Confirm )
        {
            
// Password checking
            
if( !equalszBufferg_ePlayerAccountiId ][ Account_Password ] ) )
            {
                
// Passwords were not equal, reset password and status
                
g_ePlayerAccountiId ][ Account_Password ][ ] = EOS;
                
g_ePlayerAccountiId ][ Account_Status ] = Status_Unregistered;
                
                
// Password were not equal, tell the player to re-do the process
                
client_cmdiId"messagemode INGRESAR_CLAVE" );
                
SendHudmessageiId3HC_Red"La clave ingresada no coincide con la anterior, repita el procedimiento." );
            }
            else
            {
                
GenerateCodeiId );
                
                
client_print_coloriIdprint_team_default"^x04[PropHunt]^x01 Se ha generado un codigo de recuperacion para tu cuenta." );
                
client_print_coloriIdprint_team_default"^x04[PropHunt]^x01 Codigo:^x04 %s^x01. Anotalo, no lo pierdas."g_ePlayerAccountiId ][ Account_Code ] );
                
                
ExecuteQueryiIdQuery_Create_User );
            }
        }
    }
    
    return 
PLUGIN_HANDLED;
}

public 
HookTeamChoosingiId )
{
    
// Player is logged
    
if( IsUserPlayingiId ) )
        
ph_show_mainiId );
    
// Player is not logged, is not auto-login and login-menu is a valid menu
    
else if( g_ePlayerAccountiId ][ Account_Status ] != Status_Loading && g_iLoginMenu != -)
        
ShowLoginMenuiId );
    
    return 
PLUGIN_HANDLED;
}

public 
client_putinserveriId )
{
    
SetPlayerBitg_iConnectediId );
    
    
g_ePlayerAccountiId ][ Account_Userid ] = 0;
    
g_ePlayerAccountiId ][ Account_Status ] = Status_Loading;
    
    
g_ePlayerStatsiId ][ Player_Exp ] = 0;
    
g_ePlayerStatsiId ][ Player_Level ] = 1;
    
g_ePlayerStatsiId ][ Player_Frags ] = 0;
    
g_ePlayerStatsiId ][ Player_Points ] = 0;
    
g_ePlayerStatsiId ][ Player_Hunter ] = 0;
    
g_ePlayerStatsiId ][ Player_Hider ] = 0;
    
g_ePlayerStatsiId ][ Player_Played ] = 0;
    
    
get_user_nameiIdg_ePlayerAccountiId ][ Account_Name ], charsmaxg_ePlayerAccount[ ][ Account_Name ] ) );
    
get_user_ipiIdg_ePlayerAccountiId ][ Account_Ip ], charsmaxg_ePlayerAccount[ ][ Account_Ip ] ), true );
    
    
ExecuteQueryiIdQuery_Load_User );
}

public 
client_disconnectiId )
{
    
// If player was playing then save his information
    
if( IsUserPlayingiId ) )
    {
        
g_ePlayerStatsiId ][ Player_Played ] += ( get_user_timeiId ) / 60 );
        
        
ExecuteQueryiIdQuery_Save );
    }
    
    
// Clear connected flag
    
ClearPlayerBitg_iConnectediId );
}

/* =====================================================================
 *                 [ Client menus ]
 * ===================================================================== */

public ShowLoginMenuiId )
{
    
menu_displayiIdg_iLoginMenu );
    
    return 
PLUGIN_HANDLED;
}

public 
LoginHandleriIdiMenuiItem )
{
    if( 
iItem != MENU_EXIT && g_ePlayerAccountiId ][ Account_Status ] != Status_Loading )
    {
        if( 
iItem )
        {
            
// Account is not registered?
            
if( g_ePlayerAccountiId ][ Account_Status ] != Status_Registered )
            {
                
// Show login menu and throw an error
                
ShowLoginMenuiId );
                
SendHudmessageiId3HC_Red"La cuenta a la que intentas ingresar no existe." );
            }
            else
            {
                
// Tell the player to input his password
                
client_cmdiId"messagemode INGRESAR_CLAVE" );
                
SendHudmessageiId3HC_Yellow"Ingresa tu clave para ingresar en la cuenta." );
            }
        }
        else
        {
            
// Account is registered?
            
if( g_ePlayerAccountiId ][ Account_Status ] != Status_Unregistered )
            {
                
// Show login menu and throw an error
                
ShowLoginMenuiId );
                
SendHudmessageiId3HC_Red"La cuenta que intentas crear ya se encuentra registrada." );
            }
            else
            {
                
// Reset password
                
g_ePlayerAccountiId ][ Account_Password ][ ] = EOS;
                
                
// Tell the player to input his password
                
client_cmdiId"messagemode INGRESAR_CLAVE" );
                
SendHudmessageiId3HC_Yellow"Ingresa la clave para tu nueva cuenta.^nDebe ser alfanumerica, minimo 4 y maximo 20 caracteres!" );
            }
        }
    }
    
    return 
PLUGIN_HANDLED;
}

/* =====================================================================
 *                 [ MySQL Section ]
 * ===================================================================== */

MySQL_Init( )
{
    new 
iErrnumszData128 ], szSQLData][ 32 ];
    
    
// Get SQL-config file's route
    
get_localinfo"amxx_configsdir"szDatacharsmaxszData ) );
    
addszDatacharsmaxszData ), "/mysql/prophunt.cfg" );
    
    
// If file does not exists then we cant save or load any stats, plugin is useless
    
if( !file_existsszData ) )
        
set_fail_state"[MySQL] No se ha podido encontrar el archivo de configuraciones." );
    
    new 
iFile fopenszData"rt" ), iNum;
    
    
// Loop until we reach end of file
    
while( !feofiFile ) )
    {
        
fgetsiFileszDatacharsmaxszData ) );
        
trimszData );
        
        if( 
szData] == ';' || ( strlenszData ) <= ) )
            continue;
        
        
// Store every found config
        
strtokszDataszDatacharsmaxszData ), szSQLDataiNum++ ], charsmaxszSQLData[ ] ), '='true );
    }
    
    
// Close the file
    
fcloseiFile );
    
    
// Establish connection with MySQL host
    
g_hSQLHost mysql_makehostszSQLData], szSQLData], szSQLData], szSQLData] );
    
    
// Make a permanent connection with the database
    
mysql_connectg_hSQLHostiErrnumszDatacharsmaxszData ) );
    
    if( 
iErrnum )
    {
        
log_to_file"stats.log""[MySQL] Error: %s."szData );
        
set_fail_state"Error al conectar con la base de datos." );
    }
    
    
// Load top and get player count
    
ExecuteQuery0Query_Top );
    
ExecuteQuery0Query_Players );
}

ExecuteQuery( const iId, const iQuery )
{
    static 
szQuery512 ], szData];
    
    
// Store query data ( user id and type )
    
szData] = iId;
    
szData] = iQuery;
    
    
// Messy messy messy
    
switch( iQuery )
    {
        case 
Query_Load_User:
            
formatexszQuerycharsmaxszQuery ), "SELECT * FROM ph_users WHERE user_name=^"%s^""g_ePlayerAccountiId ][ Account_Name ] );
        case 
Query_Create_User:
            
formatexszQuerycharsmaxszQuery ), "INSERT INTO ph_users ( user_name, user_password, user_code ) VALUES ( ^"%s^", ^"%s^", ^"%s^" )",
                
g_ePlayerAccountiId ][ Account_Name ],
                
g_ePlayerAccountiId ][ Account_Password ],
                
g_ePlayerAccountiId ][ Account_Code ] );
        case 
Query_Load_Stats:
            
formatexszQuerycharsmaxszQuery ), "SELECT * FROM ph_stats WHERE user_owner='%d'"g_ePlayerAccountiId ][ Account_Userid ] );
        case 
Query_Create_Stats:
            
formatexszQuerycharsmaxszQuery ), "INSERT INTO ph_stats ( user_owner ) VALUES ( '%d' )"g_ePlayerAccountiId ][ Account_Userid ] );
        case 
Query_Top:
            
formatexszQuerycharsmaxszQuery ), "SELECT * FROM ph_stats ORDER BY user_exp DESC LIMIT 10" );
        case 
Query_Rank:
            
formatexszQuerycharsmaxszQuery ), "SELECT (COUNT(*) + 1) AS pos FROM ph_stats WHERE user_exp > '%d'"g_ePlayerStatsiId ][ Player_Exp ] );
        case 
Query_Players:
            
formatexszQuerycharsmaxszQuery ), "SELECT COUNT(*) FROM ph_stats" );
        case 
Query_Save:
        {
            
formatexszQuerycharsmaxszQuery ), "UPDATE ph_stats SET user_level='%d',user_exp='%d',user_played='%d',user_frags='%d',user_points='%d',user_rank='%d',user_hunter='%d',user_hider='%d' WHERE user_owner='%d'",
                
g_ePlayerStatsiId ][ Player_Level ],
                
g_ePlayerStatsiId ][ Player_Exp ],
                
g_ePlayerStatsiId ][ Player_Played ],
                
g_ePlayerStatsiId ][ Player_Frags ],
                
g_ePlayerStatsiId ][ Player_Points ],
                
g_ePlayerStatsiId ][ Player_Rank ],
                
g_ePlayerStatsiId ][ Player_Hunter ],
                
g_ePlayerStatsiId ][ Player_Hider ],
                
g_ePlayerAccountiId ][ Account_Userid ] );
            
            
formatexszQuerystrlenszQuery ) ], charsmaxszQuery ) - strlenszQuery ), ";UPDATE ph_users SET user_ip=^"%s^" WHERE user_id='%d'",
                
g_ePlayerAccountiId ][ Account_Ip ],
                
g_ePlayerAccountiId ][ Account_Userid ] );
        }
    }
    
    
// Execute desired query
    
mysql_queryg_hSQLHost"ExecuteQueryHandler"szQueryszDatasizeofszData ) - );
}

public 
ExecuteQueryHandleriFailStateszError[ ], iErrcodeszData[ ], iDatasize )
{
    static 
iIdiTypeszBuffer32 ];
    
    
// Get stored query data
    
iId szData];
    
iType szData];
    
    
// Messy messy messy
    
if( iFailState != TQUERY_SUCCESS )
        
log_to_file"mysql.log""[MySQL] Error: %s."szError );
    else
    {
        switch( 
iType )
        {
            case 
Query_Create_User:
            {
                
g_ePlayerAccountiId ][ Account_Status ] = Status_Playing;
                
g_ePlayerAccountiId ][ Account_Userid ] = mysql_get_insert_id( );
                
                
ForceJoinTeamiId );
                
ExecuteQueryiIdQuery_Create_Stats );
                
                
SendHudmessageiId3HC_Green"Tu cuenta ha sido creada satisfactoriamente, diviertete!" );
            }
            case 
Query_Load_User:
            {
                if( 
mysql_num_results( ) > )
                {
                    
g_ePlayerAccountiId ][ Account_Userid ] = mysql_read_result);
                    
                    
mysql_read_result2g_ePlayerAccountiId ][ Account_Password ], charsmaxg_ePlayerAccount[ ][ Account_Password ] ) );
                    
mysql_read_result3g_ePlayerAccountiId ][ Account_Code ], charsmaxg_ePlayerAccount[ ][ Account_Code ] ) );
                    
mysql_read_result4szBuffercharsmaxszBuffer ) );
                    
                    if( !
CheckConnectedAccountiId ) )
                    {
                        
ExecuteQueryiIdQuery_Load_Stats );
                        
                        if( 
equalszBufferg_ePlayerAccountiId ][ Account_Ip ] ) )
                        {
                            
g_ePlayerAccountiId ][ Account_Status ] = Status_Playing;
                            
                            
ForceJoinTeamiId );
                            
SendHudmessageiId3HC_Green"Has ingresado en tu cuenta por IP, diviertete!" );
                        }
                        else
                            
g_ePlayerAccountiId ][ Account_Status ] = Status_Registered;
                    }
                    else
                        
server_cmd"kick #%d ^"La cuenta esta siendo usada^""get_user_useridiId ) );
                }
                else
                    
g_ePlayerAccountiId ][ Account_Status ] = Status_Unregistered;
            }
            case 
Query_Load_Stats:
            {
                if( 
mysql_num_results( ) != )
                {
                    
g_ePlayerStatsiId ][ Player_Exp ] = mysql_read_result);
                    
g_ePlayerStatsiId ][ Player_Rank ] = mysql_read_result);
                    
g_ePlayerStatsiId ][ Player_Level ] = mysql_read_result);
                    
g_ePlayerStatsiId ][ Player_Frags ] = mysql_read_result);
                    
g_ePlayerStatsiId ][ Player_Points ] = mysql_read_result);
                    
g_ePlayerStatsiId ][ Player_Hunter ] = mysql_read_result);
                    
g_ePlayerStatsiId ][ Player_Hider ] = mysql_read_result);
                    
g_ePlayerStatsiId ][ Player_Played ] = mysql_read_result);
                }
            }
            case 
Query_Create_Stats:
            {
                
g_iTotalPlayers++;
                
                
client_cmd0"spk buttons/bell1" );
                
client_print_color0print_team_default"^x04[PropHunt]^x01 Bienvenido^x04 %s^x01 a nuestro^x04 PropHunt^x01."g_ePlayerAccountiId ][ Account_Name ] );
            }
            case 
Query_Names:
            {
                new 
iiLen;
                
                
iLen formatexg_szMotdInfocharsmaxg_szMotdInfo ), "<html><head><style>table,td,th { border:1px solid black; border-collapse:collapse; }</style></head><body bgcolor='#ebf3f8'><table style='width:748px'>" );
                
iLen += formatexg_szMotdInfoiLen ], charsmaxg_szMotdInfo ) - iLen"<th>Nr.</th><th>Nombre</th><th>Nivel</th><th>Experiencia</th><th>Asesinatos</th><th>Tiempo jugado (m)</th>");
                
                while( 
mysql_more_results( ) )
                {
                    
mysql_read_result0szBuffercharsmaxszBuffer ) );
                    
                    
iLen += formatexg_szMotdInfoiLen ], charsmaxg_szMotdInfo ) - iLen"<tr>");
                    
iLen += formatexg_szMotdInfoiLen ], charsmaxg_szMotdInfo ) - iLen"<td>%d.</td>");
                    
iLen += formatexg_szMotdInfoiLen ], charsmaxg_szMotdInfo ) - iLen"<td>%s</td>"szBuffer );
                    
iLen += formatexg_szMotdInfoiLen ], charsmaxg_szMotdInfo ) - iLen"<td>%d</td>"g_eTop][ Player_Level ] );
                    
iLen += formatexg_szMotdInfoiLen ], charsmaxg_szMotdInfo ) - iLen"<td>%d</td>"g_eTop][ Player_Exp ] );
                    
iLen += formatexg_szMotdInfoiLen ], charsmaxg_szMotdInfo ) - iLen"<td>%d</td>"g_eTop][ Player_Frags ] );
                    
iLen += formatexg_szMotdInfoiLen ], charsmaxg_szMotdInfo ) - iLen"<td>%d</td>"g_eTop][ Player_Played ] );
                    
iLen += formatexg_szMotdInfoiLen ], charsmaxg_szMotdInfo ) - iLen"</tr>");
                    
                    
i++; mysql_next_row( );
                }
                
                
iLen += formatexg_szMotdInfoiLen ], charsmaxg_szMotdInfo ) - iLen"</table></body></html>" );
            }
            case 
Query_Top:
            {
                new 
iiLenszQuery256 ];
                
                while( 
mysql_more_results( ) )
                {
                    
g_eTop][ Player_Level ] = mysql_read_result);
                    
g_eTop][ Player_Exp ] = mysql_read_result);
                    
g_eTop][ Player_Frags ] = mysql_read_result);
                    
g_eTop][ Player_Played ] = mysql_read_result);
                    
                    
iLen += formatexszBufferiLen ], charsmaxszBuffer ) - iLen"%s%d", ( iLen ) ? "," ""mysql_read_result) );
                    
                    
i++; mysql_next_row( );
                }
                    
                
formatexszQuerycharsmaxszQuery ), "SELECT user_name FROM ph_users WHERE user_id IN (%s) ORDER BY FIELD(user_id,%s)"szBufferszBuffer );
                
                
szBuffer] = 0;
                
szBuffer] = Query_Names;
                
                
mysql_queryg_hSQLHost"ExecuteQueryHandler"szQueryszBuffersizeofszBuffer ) - );
            }
            case 
Query_Rankclient_print_coloriIdprint_team_default"^x04[PropHunt]^x01 Te encontras en el puesto^x03 %d^x01 de^x04 %d^x01 jugadores."mysql_read_result), g_iTotalPlayers );
            case 
Query_Players:
            {
                
g_iTotalPlayers mysql_read_result);
                
CreateLoginMenu( );
            }
        }
    }
}

/* =====================================================================
 *                 [ Private functions ]
 * ===================================================================== */

UpdateLevel( const iId )
{
    
// Player should level up?
    
if( ShouldLevelUpiId ) )
    {
        
// Loop until we add enough levels / ranks
        
while( ShouldLevelUpiId ) ) g_ePlayerStatsiId ][ Player_Level ]++;
        while( 
ShouldRankUpiId ) ) g_ePlayerStatsiId ][ Player_Rank ]++;
        
        
// Send IMPLOSION effect
        
static iOrigin]; get_user_originiIdiOrigin );
        
        
message_beginMSG_BROADCASTSVC_TEMPENTITY );
        
write_byteTE_IMPLOSION );
        
write_coordiOrigin] );
        
write_coordiOrigin] );
        
write_coordiOrigin] );
        
write_byte250 );
        
write_byte25 );
        
write_byte10 );
        
message_end( );
        
        
// Emit a level up sound
        
emit_soundiIdCHAN_BODYg_szLevelUpSound0.3ATTN_NORM0PITCH_NORM );
    }
}

ShowPlayerStats( const iId )
{
    static 
iLenszData1040 ];
    
    
iLen formatexszDatacharsmaxszData ), "<meta http-equiv=^"Content-Type^" content=^"text/html;charset=UTF-8^">\
    <body bgcolor=black style=line-height:1;color:white><center><font color=FFFFFF size=6 face=Tahoma><p>Estadísticas<p>" 
);
    
    
iLen += formatexszDataiLen ], charsmaxszData ) -iLen"<font color=FFFFFF size=4>Tu nivel es \
    <font color=5F04B4>%d<font color=FFFFFF> y tu rango actual es <font color=F7FE2E> %s<font color=FFFFFF><p>"
,
        
g_ePlayerStatsiId ][ Player_Level ],
        
g_eRanksg_ePlayerStatsiId ][ Player_Rank ] ][ Rank_Name ] );
    
    
iLen += formatexszDataiLen ], charsmaxszData ) -iLen"<font color=FFFFFF size=4>Contas con un total de <font color=2E9AFE> %d<font color=FFFFFF> puntos y <font color=FF00>%d\
    <font color=FFFFFF> asesinatos<p><font color=FFFFFF size=4>Ganaste <font color=FF90>%d<font color=FFFFFF> partidas como hider y<font color=FF4C4C> %d<font color=FFFFFF> como hunter<p>"
,
        
g_ePlayerStatsiId ][ Player_Points ],
        
g_ePlayerStatsiId ][ Player_Frags ],
        
g_ePlayerStatsiId ][ Player_Hider ],
        
g_ePlayerStatsiId ][ Player_Hunter ] );
    
    
iLen += formatexszDataiLen ], charsmaxszData ) -iLen"<font color=FFFFFF size=4>Tenes <font color=9F81F7>%d<font color=FFFFFF> de experiencia y te falta  <font color=82FA58> %d<font color=FFFFFF> para subir de nivel",
        
g_ePlayerStatsiId ][ Player_Exp ],
        
GetNeededExpg_ePlayerStatsiId ][ Player_Level ] + ) - g_ePlayerStatsiId ][ Player_Exp ] );
    
    
show_motdiIdszData"Estadisticas" );
}

CreateLoginMenu( )
{
    
g_iLoginMenu menu_create"\y==============================\w^n    \wSeguridad - PropHunt^n\y==============================""LoginHandler" );
    
    
menu_additemg_iLoginMenu"\yCrear \wuna nueva cuenta""1" );
    
menu_additemg_iLoginMenu"\yEntrar \wen una cuenta existente^n""2" );
    
    new 
szData64 ]; formatexszDatacharsmaxszData ), "Cuentas creadas hasta hoy: \y%d"g_iTotalPlayers );
    
    
menu_addtextg_iLoginMenuszData );
    
menu_addtextg_iLoginMenu"\wSi perdiste tu clave contacta un \yadministrador" );
    
    
// No option for cancel, player must login or register
    
menu_setpropg_iLoginMenuMPROP_EXITMEXIT_NEVER );
}

SendHudmessage( const iId, const iHoldtime, const iColor, const szMessage[ ] )
{
    
set_hudmessageg_iHudColorsiColor ][ ], g_iHudColorsiColor ][ ], g_iHudColorsiColor ][ ], 0.050.1512.0floatiHoldtime ) );
    
ShowSyncHudMsgiIdg_iSyncObjszMessage );
    
    
client_cmdiId"spk buttons/button%d"g_iHudSoundsiColor ] );
}

ForceJoinTeam( const iId )
{
    
// We will access private data so we must make sure player is connected
    
if( GetPlayerBitg_iConnectediId ) )
    {
        static 
iRestoreiRestore get_pdata_intiIdm_iVGUI );
        
        
// We avoid bugs with menus
        
if( iRestore & (1<<0) )
            
set_pdata_intiIdm_iVGUIiRestore & ~(1<<0) );
        
        
set_msg_blockg_iShowMenuBLOCK_SET );
        
set_msg_blockg_iVGUIMenuBLOCK_SET );
        
        
engclient_cmdiId"jointeam""1" );
        
engclient_cmdiId"joinclass""5" );
        
        
set_msg_blockg_iShowMenuBLOCK_NOT );
        
set_msg_blockg_iVGUIMenuBLOCK_NOT );
        
        if( 
iRestore & (1<<0) ) 
            
set_pdata_intiIdm_iVGUIiRestore ); 
        
        
// Cancel any player menu
        
menu_canceliId );
        
        
// Set his in-game name
        
client_cmdiId";name ^"%s^""g_ePlayerAccountiId ][ Account_Name ] );
        
set_user_infoiIdg_szCache_Nameg_ePlayerAccountiId ][ Account_Name ] );
    }
}

CheckConnectedAccount( const iId )
{
    
// Loop through all players until we find an equality of userids
    
for( new iPlayer 1iPlayer <= g_iMaxPlayersiPlayer++ )
    {
        if( ( 
iId != iPlayer ) && GetPlayerBitg_iConnectediPlayer ) )
        {
            if( 
g_ePlayerAccountiId ][ Account_Userid ] == g_ePlayerAccountiPlayer ][ Account_Userid ] )
                return 
true;
        }
    }
    
    
// We found nothing
    
return false;
}

GenerateCode( const iId )
{
    
// Generate a code made of letters and numbers
    
for( new iCODE_CHARSi++ )
        
g_ePlayerAccountiId ][ Account_Code ][ ] = ( random) > ) ? random_num4857 ) : random_num6590 );
}

IsAlphanumeric( const szData[ ] )
{
    new 
iLen strlenszData );
    
    
// Loop through all string's characters until we find a non-alphanumeric character
    
for( new iiLeni++ )
        if( !
isLetterszData] ) && !isDigitszData] ) )
            return 
false;
    
    return 
true;
}

/* =====================================================================
 *                 [ Natives ]
 * ===================================================================== */

public _ph_get_leveliPluginiParams )
{
    if( 
iParams != )
        return 
0;
    
    return 
g_ePlayerStatsget_param) ][ Player_Level ];
}

public 
_ph_show_statsiPluginiParams )
{
    if( 
iParams != )
        return 
0;
    
    
ShowPlayerStatsget_param) );
    
    return 
1;
}

public 
_ph_add_xpiPluginiParams )
{
    if( 
iParams != )
        return 
0;
    
    
g_ePlayerStatsget_param) ][ Player_Exp ] += get_param);
    
    return 
1;
}

public 
_ph_show_rankiPluginiParams )
{
    if( 
iParams != )
        return 
0;
    
    
ExecuteQueryget_param), Query_Rank );
    
    return 
1;
}

public 
_ph_show_topiPluginiParams )
{
    if( 
iParams != )
        return 
0;
    
    
show_motdget_param), g_szMotdInfo"Top" );
    
    return 
1;
}

/*CREATE TABLE ph_users (
    user_id INT PRIMARY KEY AUTO_INCREMENT,
    user_name VARCHAR( 32 ) UNIQUE NOT NULL default '',
    user_password VARCHAR( 32 ) NOT NULL default '',
    user_code VARCHAR( 8 ) NOT NULL default '',
    user_ip VARCHAR( 32 ) NOT NULL default '',
    user_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP );
    
    CREATE TABLE ph_stats (
    user_owner INT UNIQUE NOT NULL default 0,
    user_exp INT NOT NULL default 0,
    user_rank INT NOT NULL default 0,
    user_level INT NOT NULL default 1,
    user_frags INT NOT NULL default 0,
    user_points INT NOT NULL default 0,
    user_hunter INT NOT NULL default 0,
    user_hider INT NOT NULL default 0,
    user_played INT NOT NULL default 0 )*/ 
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)