Raised This Month: $ Target: $400
 0% 

[SQL] Duda


  
 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
lRodri.
Member
Join Date: Apr 2012
Location: Argentina
Old 08-14-2013 , 18:53   Re: [SQL] Duda
#10

Code completo:

PHP Code:
#include < amxmodx >
#include < sqlx >
#include < hamsandwich >
#include < cstrike >

#define PLUGIN "Sistema de cuentas MySQL/SQLite"
#define VERSION "1.0.8"
#define AUTHOR "Neeeeeeeeeel.- & r0ma"

/* 

Changelog:

    1.0.0: 
        -Posteo del plugin.
        
    1.0.1: 
        -Opitmizacion en el chequeo de una celda de un array.
        
    1.0.2: 
        -Proteccion SQL Injection.
        
    1.0.3:
        -SQL_PrepareQuery --> SQL_ThreadQuery.
        -Optimizacion de tabla MYSQL/SQLITE.
        -Fix en la conexión SQLite.
        
    1.0.4:
        -Proteccion: No se permiten ingresar caracteres especiales.
        -Optimización: Se borraron los condicionales de chequeo de " " y TABLE.
          
    1.0.5
        -Bugfix: Con SQL_ThreadQuery no se usa SQL_Connect
    
    1.0.6
        -Varios fixes de errores generales.
        
    1.0.7
        -Revisado & fixeado por r0ma
        
    1.0.8
        -Fix bug que entran al juego sin loguearse arreglado
        
    1.0.9
        -Fix bug: Ham_Spawn deberia estar en post
        -Fix de variable no definida
        -Update ZP version
    
    
    Creditos:
        shinoda
        Kiske
        Javivi
        ILUSION
        fearAR
        rak
        r0ma
*/

// #define MYSQL
// sacarle las // a la linea de arriba para activar MySQL

// si quieren que el registro sea mas seguro descomenten esta linea para encriptar las contraseñas
// #define SECURITY

#if defined MYSQL

// modificar estos datos acorde a los suyos si quieren usar mysql
#define MYSQL_HOST "127.0.0.1"
#define MYSQL_USER "root"
#define MYSQL_PASS "root"
#define MYSQL_DATEBASE "cuentas"

#else

#define SQLITE_DATEBASE "cuentas"

#endif

#define TABLE "cuentas"

// comentar esta linea para desactivar la proteccion de caracteres especiales
//#define CHARACTERS_PROTECTION

#define    TAG    "[Cuentas]"
new Handle:g_hTuple;
new 
g_maxplayers;
new 
g_usuario33 ][ 33 ];
new 
g_password33 ][ 35 ];
new 
g_estado33 ];
new 
g_playername33 ][ 33 ];
new 
g_id33 ];
new 
g_experiencia33 ];

enum
{
    
OFFLINE 0,
    
REGISTRAR_USUARIO,
    
REGISTRAR_PASSWORD,
    
LOGUEAR_USUARIO,
    
LOGUEAR_PASSWORD,
    
CARGAR_DATOS,
    
GUARDAR_DATOS,
    
LOGUEADO
};

// esto es del team join de exolent
stock const FIRST_JOIN_MSG[ ] = "#Team_Select";
stock const FIRST_JOIN_MSG_SPEC[ ] = "#Team_Select_Spect";
stock const INGAME_JOIN_MSG[ ] = "#IG_Team_Select";
stock const INGAME_JOIN_MSG_SPEC[ ] = "#IG_Team_Select_Spect";
const 
iMaxLen sizeofINGAME_JOIN_MSG_SPEC );
stock const VGUI_JOIN_TEAM_NUM 2;

/* consulta MYSQL:
CREATE TABLE cuentas 
(
    id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    Usuario varchar(32) NOT NULL UNIQUE KEY, 
    Password varchar(35) NOT NULL, 
    Pj varchar(32) NOT NULL UNIQUE KEY,
    Experiencia int(10) NOT NULL DEFAULT '0'
)
*/

/* consulta SQLite:
CREATE TABLE "cuentas" 
(
    "id" INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL, 
    "Usuario" VARCHAR NOT NULL  UNIQUE, 
    "Password" VARCHAR NOT NULL, 
    "Pj" VARCHAR NOT NULL  UNIQUE,
    "Experiencia" INTEGER DEFAULT 0
)
*/


public plugin_init( ) 
{
    
register_pluginPLUGINVERSIONAUTHOR );

    
register_clcmd"CREAR_USUARIO""reg_usuario" );
    
register_clcmd"CREAR_PASSWORD""reg_password" );
    
register_clcmd"LOGUEAR_USUARIO""log_usuario" );
    
register_clcmd"LOGUEAR_PASSWORD""log_password" );
    
    
register_clcmd"chooseteam""clcmd_changeteam" );
    
register_clcmd"jointeam""clcmd_changeteam" );
    
    
register_messageget_user_msgid"ShowMenu" ), "message_ShowMenu" );
    
register_messageget_user_msgid"VGUIMenu" ), "message_VGUIMenu" );
    
    
register_event"HLTV""event_round_start""a""1=0""2=0" );
    
    
RegisterHamHam_Spawn"player""fw_PlayerSpawn"true );
    
    
g_maxplayers get_maxplayers( );
    
    
MySQLx_Init( );
}

public 
fw_PlayerSpawnid )
{
    if( 
is_user_aliveid ) && g_estadoid ] != LOGUEADO )
        
set_task2.0"go_login"id );
}

public 
go_loginid )
{
    
user_silentkillid );
    
cs_set_user_teamidCS_TEAM_SPECTATOR );
    
show_login_menuid );
}

public 
message_VGUIMenuiMsgidiDestid )
{
    if( 
get_msg_arg_int) != VGUI_JOIN_TEAM_NUM 
        return 
PLUGIN_CONTINUE;
    
    if( 
is_user_connectedid ) && g_estadoid ] != LOGUEADO )
    {
        
show_login_menuid );
        return 
PLUGIN_HANDLED;
    }
    
    return 
PLUGIN_HANDLED;
}

public 
message_ShowMenuiMsgidiDestid )
{
    static 
sMenuCodeiMaxLen ];
    
get_msg_arg_string4sMenuCodesizeofsMenuCode ) - )
    
    if( 
equalsMenuCodeFIRST_JOIN_MSG ) || equalsMenuCodeFIRST_JOIN_MSG_SPEC ) || 
    
equalsMenuCodeINGAME_JOIN_MSG ) || equalsMenuCodeINGAME_JOIN_MSG_SPEC ) )
    {
        if( 
is_user_connectedid )  && g_estadoid ] != LOGUEADO )
        {
            
show_login_menuid );
            return 
PLUGIN_HANDLED;
        }
    }
    
    return 
PLUGIN_HANDLED;
}

public 
clcmd_changeteamid )
{
    if( 
g_estadoid ] != LOGUEADO )
    {
        
show_login_menuid );
        return 
PLUGIN_HANDLED;
    }
    
    return 
PLUGIN_HANDLED;
}

public 
show_login_menuid )
{
    new 
menu menu_create"Menu de cuentas""login_menu" );
    
    
menu_additemmenu"Crear cuenta""1" );
    
menu_additemmenu"Ingresar""2" );
    
    
menu_setpropmenuMPROP_EXITMEXIT_NEVER );
    
menu_displayidmenu );
}

public 
login_menuidmenuitem )
    
client_cmdid"messagemode %s"item "LOGUEAR_USUARIO" "CREAR_USUARIO" );

public 
reg_usuarioid )
{
    
read_argsg_usuarioid ], charsmaxg_usuario[ ] ) );
    
remove_quotesg_usuarioid ] );
    
trimg_usuarioid ] );

    
#if defined CHARACTERS_PROTECTION
    
set_hudmessage255000.120.2406.012.0 );
    
show_hudmessageid"Solo se pueden usar nombres con numeros y letras" );
    
    if( 
contain_special_charactersidg_usuarioid ], "el usuario" ) )
    {
        
client_cmdid"spk buttons/button10.wav" );
        
show_login_menuid );
        
        return 
PLUGIN_HANDLED;
    }
    
#endif
    
    
static szQuery64 ], iData];
    
iData] = id;
    
iData] = REGISTRAR_USUARIO;
    
    
formatexszQuerycharsmaxszQuery ), "SELECT * FROM %s WHERE Usuario=^"%s^""TABLEg_usuarioid ] );
    
    
SQL_ThreadQueryg_hTuple"DataHandler"szQueryiData);
    
    return 
PLUGIN_HANDLED;
}

public 
reg_passwordid )
{
    
read_argsg_passwordid ], charsmaxg_password[ ] ) );
    
remove_quotesg_passwordid ] );
    
trimg_passwordid ] );
    
    
#if defined CHARACTERS_PROTECTION
    
if( contain_special_charactersidg_passwordid ], "la password" ) )
    {
        
client_cmdid"spk buttons/button10.wav" );
        
show_login_menuid );
        
        return 
PLUGIN_HANDLED;
    }
    
    else if( 
contain_special_charactersidg_playernameid ], "el nombre" ) )
    {
        
client_cmdid"spk buttons/button10.wav" );
        
show_login_menuid );
        
        return 
PLUGIN_HANDLED;
    }
    
#endif
    
    
static szQuery128 ], iData];
    
iData] = id;
    
iData] = REGISTRAR_PASSWORD;
    
    
#if defined SECURITY
    
static szBuffer34 ];
    
md5g_passwordid ], szBuffer );
    
formatexszQuerycharsmaxszQuery ), "INSERT INTO %s (Usuario, Password, Pj) VALUES (^"%s^", ^"%s^", ^"%s^")"TABLEg_usuarioid ], szBufferg_playernameid ] );
    
#else
    
formatexszQuerycharsmaxszQuery ), "INSERT INTO %s (Usuario, Password, Pj) VALUES (^"%s^", ^"%s^", ^"%s^")"TABLEg_usuarioid ], g_passwordid ], g_playernameid ] );
    
#endif
    
    
SQL_ThreadQuery(g_hTuple"DataHandler"szQueryiData2);
    return 
PLUGIN_HANDLED;
}

public 
log_usuarioid )
{
    
read_argsg_usuarioid ], charsmaxg_usuario[ ] ) );
    
remove_quotesg_usuarioid ] );
    
trimg_usuarioid ] );
    
    
#if defined CHARACTERS_PROTECTION
    
set_hudmessage255000.120.2406.08.0 );
    
show_hudmessageid"Solo se pueden usar nombres con numeros y letras" );
    
    if(
contain_special_charactersidg_usuarioid ], "el usuario" ) )
    {
        
client_cmdid"spk buttons/button10.wav" );
        
show_login_menuid );
        
        return 
PLUGIN_HANDLED;
    }
    
#endif

    
static szQuery64 ], iData];
    
iData] = id;
    
iData] = LOGUEAR_USUARIO;
    
    
formatexszQuerycharsmaxszQuery ), "SELECT * FROM %s WHERE Usuario=^"%s^""TABLEg_usuarioid ] );
    
    
SQL_ThreadQueryg_hTuple"DataHandler"szQueryiData);
    return 
PLUGIN_HANDLED;
}

public 
log_passwordid )
{
    
read_argsg_passwordid ], charsmaxg_password[ ] ) );
    
remove_quotesg_passwordid ] );
    
trimg_passwordid ] );
    
    
#if defined CHARACTERS_PROTECTION
    
if( contain_special_charactersidg_passwordid ], "la password" ) )
    {
        
client_cmdid"spk buttons/button10.wav" );
        
show_login_menuid );
        
        return 
PLUGIN_HANDLED;
    }
    
#endif
    
    
static szQuery64 ], iData];
    
iData] = id;
    
iData] = LOGUEAR_PASSWORD;
    
    
formatexszQuerycharsmaxszQuery ), "SELECT * FROM %s WHERE Usuario=^"%s^""TABLEg_usuarioid ] );
    
    
SQL_ThreadQueryg_hTuple"DataHandler"szQueryiData);
    return 
PLUGIN_HANDLED;
}

public 
guardar_datosid )
{
    if( 
g_estadoid ] != LOGUEADO )
        return;
    
    static 
szQuery128 ], iData];
    
iData] = id;
    
iData] = GUARDAR_DATOS;
    
    
formatexszQuerycharsmaxszQuery ), "UPDATE %s SET Experiencia='%d' WHERE id='%d'"TABLEg_experienciaid ], g_idid ] );
    
SQL_ThreadQueryg_hTuple"DataHandler"szQueryiData);
}

public 
cargar_datosid )
{
    static 
szQuery128 ], iData];
    
iData] = id;
    
iData] = CARGAR_DATOS;
    
    
formatexszQuerycharsmaxszQuery ), "SELECT id, Experiencia FROM %s WHERE Usuario=^"%s^""TABLEg_usuarioid ] );
    
SQL_ThreadQueryg_hTuple"DataHandler"szQueryiData);
}


// Javivi code:D
public DataHandlerfailstateHandle:Queryerror[ ], error2data[ ], datasizeFloat:time )
{
    static 
id;
    
id data];
    
    if( !
is_user_connectedid ) )
        return 
PLUGIN_HANDLED

    
switch( failstate )
    {
        case 
TQUERY_CONNECT_FAILED:
        {
            
log_to_file"SQL_LOG_TQ.txt""Error en la conexion al MySQL [%i]: %s"error2error );
            return 
PLUGIN_CONTINUE;
        }
        case 
TQUERY_QUERY_FAILED:
            
log_to_file"SQL_LOG_TQ.txt""Error en la consulta al MySQL [%i]: %s"error2error );
    }
    
    switch( 
data] )
    {
        case 
REGISTRAR_USUARIO:
        {
            if( !
SQL_NumResultsQuery ) )
                
client_cmdid"messagemode CREAR_PASSWORD" );
            else
            {
                
client_printidprint_chat"%s El usuario ya existe."TAG );
                
client_cmdid"spk buttons/button10.wav" );
                
show_login_menuid );
            }
        }
        
        case 
REGISTRAR_PASSWORD:
        {
            if( 
failstate TQUERY_SUCCESS )
            {
                if( 
strfinderror"Duplicate" ) != -)
                {
                    if( 
strfinderror"Usuario" ) != -)
                        
client_printidprint_chat"%s El usuario ya existe."TAG );

                    else if( 
strfinderror"Pj" ) != -)
                        
client_printidprint_chat"%s El nombre de personaje esta en uso."TAG );
                }
                else
                    
client_printidprint_chat"%s Error al crear la cuenta. Intente nuevamente."TAG );
                
                
client_cmdid"spk buttons/button10.wav" );
                
show_login_menuid );
            }
            
            else
            {
                
client_printidprint_chat"%s Tu cuenta ha sido creada correctamente."TAG );
                
cargar_datosid );
            }
            
        }
        
        case 
LOGUEAR_USUARIO:
        {
            if( 
SQL_NumResultsQuery ) )
                
client_cmdid"messagemode LOGUEAR_PASSWORD" );
            
            else
            {
                
client_printidprint_chat"%s El usuario no existe."TAG );
                
client_cmdid"spk buttons/button10.wav" );
                
show_login_menuid );
            }
        }
        
        case 
LOGUEAR_PASSWORD:
        {
            if( 
SQL_NumResultsQuery ) )
            {
                static 
szPass33 ];
                
SQL_ReadResultQuery2szPasscharsmaxszPass ) );
                
                
#if defined SECURITY
                
static szBuffer34 ];
                
md5szPassszBuffer );
                if( 
equalszBufferszPass ) )
                
#else
                
if( equalg_passwordid ], szPass ) )
                
#endif
                
{
                    
SQL_ReadResultQuery3g_playernameid ], charsmaxg_playername[ ] ) );                    
                    
cargar_datosid );
                }
                
                else
                {
                    
client_printidprint_chat"[Cuenta] Contrasenia incorrecta." );
                    
client_cmdid"spk buttons/button10.wav" );
                    
show_login_menuid );
                }
            }
        }
        
        
// Ejemplo de como cargar y guardar datos.
        
case CARGAR_DATOS:
        {
            if( 
SQL_NumResultsQuery ) )
            {
                
g_idid ] = SQL_ReadResultQuery);
                
                
// Cargamos los datos de al columna 'Experiencia' en la variable global g_experiencia
                
g_experienciaid ] = SQL_ReadResultQuery);
                
func_login_successid );
            }
            
            else
            {
                
client_printidprint_chat"%s Error al cargar los datos, intente nuevamente."TAG );
                
g_estado[id] = OFFLINE;
                
show_login_menuid );
            }
        }
        
        case 
GUARDAR_DATOS:
        {
            if( 
failstate TQUERY_SUCCESS )
                
console_printid"%s Error en el guardado de datos."TAG );
            
            else
                
console_printid"%s Datos guardados."TAG );
        }
    }
    
    return 
PLUGIN_CONTINUE;
}

public 
func_login_successid )
{
    
// esto lo manda a un team random (con 1 a TT, con 2 a CT y creo que con 6 a SPEC.)
    
static msg_block;
    
msg_block get_msg_blockid );
    
set_msg_blockidBLOCK_SET );
    
engclient_cmdid"jointeam""5" );
    
engclient_cmdid"joinclass""5" );
    
set_msg_blockidmsg_block );
    
    
g_estado[id] = LOGUEADO;
    
    
client_cmdid"name ^"%s^""g_playernameid ] );
}

stock contain_special_charactersid, const str[ ], const type[ ] )
{
    static 
iLen;
    
    
iLen strlenstr )
    
    for( new 
0iLeni++ )
    {
        if( !
isalphastr] ) && !isdigitstr] ) )
        {
            
client_printidprint_chat"%s Caracter especial invalido en %s: ^"%c^""TAGtypestr] );
            
console_printid"%s Caracter especial invalido en %s: ^"%c^""TAGtypestr] );
            
            return 
1;
        }
    }
    
    return 
0;
}    

public 
event_round_start()
{
    for(new 
1<= g_maxplayersi++)
    {
        if(
is_user_connected(i))
            
guardar_datos(i)
    }
}        

public 
client_infochangedid )
{
    if( !
is_user_connectedid ) ) 
        return 
PLUGIN_HANDLED;
    
    static 
szNewname33 ], szNewname233 ];
    
get_user_infoid"name"szNewnamecharsmaxszNewname ) );
    
get_user_nameidszNewname2charsmax(szNewname2 ) );
    
    if( ( !
equalg_playernameid ], szNewnameid ] ) || 
    !
equalg_playernameid ], szNewname2id ] ) )  && g_estadoid ] == LOGUEADO)
    {
        
set_user_infoid"name"g_playernameid ] );
        
client_cmdid"name ^"%s^""g_playernameid ] );
        return 
PLUGIN_HANDLED;
    }
    
    return 
PLUGIN_CONTINUE;
}

public 
client_putinserverid )
{
    
g_estadoid ] = OFFLINE;
    
    
get_user_nameidg_playernameid ], charsmaxg_playername[ ] ) );
    
show_login_menuid );
}

public 
client_disconnect(id)
    
guardar_datos(id)

#if defined MYSQL
public MySQLx_Init( )
{
    
g_hTuple SQL_MakeDbTupleMYSQL_HOSTMYSQL_USERMYSQL_PASSMYSQL_DATEBASE );
    
    if( !
g_hTuple 
    {
        
log_to_file"SQL_ERROR.txt""No se pudo conectar con la base de datos." );
        return 
pause"a" );
    }
    
    return 
PLUGIN_CONTINUE;
}
#else

// Gracias ILUSION por fixear la conexión
public MySQLx_Init( )
{
    new 
get_type12 ];
    
    
SQL_SetAffinity"sqlite" );
    
    
SQL_GetAffinityget_typesizeof get_type );

    if( !
equaliget_type"sqlite" ) )
    {
        
log_to_file"SQLITE_ERROR.txt""Error de conexion" );
        return 
pause"a" );
    }
    
    
g_hTuple SQL_MakeDbTuple""""""SQLITE_DATEBASE );
    
    return 
PLUGIN_CONTINUE
}
#endif

public plugin_end( )
    
SQL_FreeHandleg_hTuple ); 
Parte de cargar:

PHP Code:
public cargar_datosid )
{
    static 
szQuery128 ], iData];
    
iData] = id;
    
iData] = CARGAR_DATOS;
    
    
formatexszQuerycharsmaxszQuery ), "SELECT id, Experiencia FROM %s WHERE Usuario=^"%s^""TABLEg_usuarioid ] );
    
SQL_ThreadQueryg_hTuple"DataHandler"szQueryiData);

Es que cuando comente no me apareció la explicación de matians. Buenisima la explicación, la entendi bastante bien
lRodri. is offline
Send a message via MSN to lRodri.
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 06:41.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode