Raised This Month: $32 Target: $400
 8% 

Sistema de cuentas MYSQL/SQLITE con/sin encriptación


  
 
 
Thread Tools Display Modes
lucas_7_94
Leche Loco
Join Date: Mar 2009
Location: Argentina
Old 06-12-2012 , 07:58   Re: Sistema de cuentas MYSQL/SQLITE con/sin encriptación
#81

falta una coma en el cmd de rak.
__________________
ATWWMH - MiniDuels
Madness is like gravity, just need a little push.
lucas_7_94 is offline
Send a message via Skype™ to lucas_7_94
rak
Veteran Member
Join Date: Oct 2011
Location: banned country
Old 06-12-2012 , 08:01   Re: Sistema de cuentas MYSQL/SQLITE con/sin encriptación
#82

Quote:
Originally Posted by lucas_7_94 View Post
falta una coma en el cmd de rak.
fix(?

edit:

para que quede claro

PHP Code:
get_user_infoid"name"szNewnamecharsmaxszNewname ) ); // nick que quiere ponerse
    
get_user_nameidszNewname2charsmaxszNewname2 ) );// nick que tiene 
no tiene sentido alguno que le cambies el valor a g_playername[ id ] dado que ahi guardaste el nick que esta en el sql

sin contar que tu plugin no compila :B
__________________

www.amxmodx-es.com

Steam: Luchokoldo

Last edited by rak; 06-12-2012 at 12:04.
rak is offline
Send a message via MSN to rak Send a message via Skype™ to rak
Neeeeeeeeeel.-
Some Guy Yellin'
Join Date: Jul 2010
Location: Argentina
Old 06-12-2012 , 21:20   Re: Sistema de cuentas MYSQL/SQLITE con/sin encriptación
#83

Ahí compila.
__________________

Last edited by Neeeeeeeeeel.-; 06-12-2012 at 21:20.
Neeeeeeeeeel.- is offline
Send a message via Skype™ to Neeeeeeeeeel.-
Bk3Zell
Junior Member
Join Date: Jul 2012
Old 08-25-2012 , 19:16   Re: Sistema de cuentas MYSQL/SQLITE con/sin encriptación
#84

Saludos, espero que te encuentres bien.
Estoy probando tu sistema de Registro y me va bien, se registra y todo.
pero tengo varios problemitas.
1-si dejo activado el: #define CHARACTERS_PROTECTION NO me deja registrarme ya que dice que introduje caracteres invalidos, sale: solo letras y numeros. aun cuando introduje puras letras.

2-Para probar el guardado y cargado de datos, decididi agregarle algo simple: Ammopacks. el detalle es que no los carga, ni los guarda. aun estando en la DB, borre la tabla aver si almenos intentaba buscarla y si, no deja loguear porque no esta la tabla, la creo y loguea normal la cosa es que no carga ni guarda los datos del: g_ammopacks. aqui como lo modifique: me guie x el de los comentarios anteriores...

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

#define PLUGIN "Sistema de cuentas MySQL/SQLite"
#define VERSION "1.0.6"
#define AUTHOR "Neeeeeeeeeel.-"

#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 "xxx"
#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

new Handle:g_hTuple;
new 
pcvar_saveround;
new 
g_maxplayers;
new 
Usuario33 ][ 33 ];
new 
Password33 ][ 35 ];
new 
g_status33 ];
new 
g_playername33 ][ 33 ];
new 
g_id33 ];
new 
g_experiencia33 ];
new 
g_ammopacks33 ];

enum
{
    
OFFLINE,
    
LOG_USER,
    
LOG_PASSWORD,
    
REG_USER,
    
REG_PASSWORD,
    
CARGAR_DATOS,
    
GUARDAR_DATOS,
    
LOGGED
}

// 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" );
    
    
// Esta cvar activada hace que se guarden los datos cada vez que comienza una ronda
    
pcvar_saveround register_cvar"guardar_por_rondas""1" );
    
    
g_maxplayers get_maxplayers( );
    
    
MySQLx_Init( );
    
    
register_clcmd"test""test" );
}

public 
testid )
{
    
g_experienciaid ]++;
    
guardar_datosid );
}

public 
message_VGUIMenuiMsgidiDestid )
{
    if( 
get_msg_arg_int) != VGUI_JOIN_TEAM_NUM
        return 
PLUGIN_CONTINUE;
    
    if( 
is_user_connectedid ) && g_statusid ] == OFFLINE )
    {
        
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_statusid ] == OFFLINE )
        {
            
show_login_menuid );
            return 
PLUGIN_HANDLED;
        }
    }
    
    return 
PLUGIN_HANDLED;
}

public 
clcmd_changeteamid )
{
    if( 
g_statusid ] <= REG_PASSWORD )
    {
        
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_displayidmenu);
}

public 
login_menuidmenuitem)
{
    new 
iData]; 
    new 
iAccess
    new 
iCallback
    new 
iName64 ]; 
    
menu_item_getinfomenuitemiAccessiData5iName63iCallback ) ;
    
    switch( 
str_to_numiData ) ) 
    {
        case 
1client_cmdid"messagemode CREAR_USUARIO" );
        case 
2client_cmdid"messagemode LOGUEAR_USUARIO" );
    }
}

public 
reg_usuarioid )
{
    new 
user33 ];
    
read_argsusercharsmaxuser ) );
    
remove_quotesuser );
    
trimuser );

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

public 
reg_passwordid )
{
    new 
pass33 ];
    
read_argspasscharsmaxpass ) );
    
remove_quotespass );
    
trimpass );
    
    
#if defined CHARACTERS_PROTECTION
    
if( contain_special_charactersidpass"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
    
    
new szQuery128 ], iData];
    
iData] = id;
    
g_statusid ] = REG_PASSWORD;
    
    
#if defined SECURITY
    
new szBuffer34 ];
    
md5passszBuffer );
    
formatexszQuerycharsmaxszQuery ), "INSERT INTO %s ( Usuario, Password, Pj ) VALUES ( ^"%s^", ^"%s^", ^"%s^" )"TABLEUsuarioid ], szBufferg_playernameid ] );
    
#else
    
formatexszQuerycharsmaxszQuery ), "INSERT INTO %s ( Usuario, Password, Pj ) VALUES ( ^"%s^", ^"%s^", ^"%s^" )"TABLEUsuarioid ], passg_playernameid ] );
    
#endif
    
    
SQL_ThreadQueryg_hTuple"DataHandler"szQueryiData);
    return 
PLUGIN_HANDLED;
}

public 
log_usuarioid )
{
    new 
user33 ];
    
read_argsusercharsmaxuser ) );
    
remove_quotesuser );
    
trimuser );
    
    
#if defined CHARACTERS_PROTECTION
    
set_hudmessage255000.120.2406.08.0 )
    
show_hudmessageid"Solo se pueden usar nombres con numeros y letras" )
    
    if( 
contain_special_charactersiduser"el usuario" ) )
    {
        
client_cmdid"spk buttons/button10.wav" );
        
show_login_menuid );
        
        return 
PLUGIN_HANDLED;
    }
    
#endif
    
    
copyUsuarioid ], charsmaxUsuario[ ] ), user );
    
    new 
szQuery64 ], iData];
    
iData] = id;
    
g_statusid ] = LOG_USER;
    
    
formatexszQuerycharsmaxszQuery ), "SELECT * FROM %s WHERE Usuario=^"%s^""TABLEuser );
    
    
SQL_ThreadQueryg_hTuple"DataHandler"szQueryiData);
    return 
PLUGIN_HANDLED;
}

public 
log_passwordid )
{
    new 
pass33 ];
    
read_argspasscharsmaxpass ) );
    
remove_quotespass );
    
trimpass );
    
    
#if defined CHARACTERS_PROTECTION
    
if( contain_special_charactersidpass"la password" ) )
    {
        
client_cmdid"spk buttons/button10.wav" );
        
show_login_menuid );
        
        return 
PLUGIN_HANDLED;
    }
    
#endif
    
    
copyPasswordid ], charsmaxPassword[ ] ), pass );
    
    new 
szQuery64 ], iData];
    
iData] = id;
    
g_statusid ] = LOG_PASSWORD;
    
    
formatexszQuerycharsmaxszQuery ), "SELECT * FROM %s WHERE Usuario=^"%s^""TABLEUsuarioid ] );
    
    
SQL_ThreadQueryg_hTuple"DataHandler"szQueryiData);
    return 
PLUGIN_HANDLED;
}

public 
guardar_datosid )
{
    
g_statusid ] = GUARDAR_DATOS;
    new 
szQuery128 ], iData];
    
iData] = id;
    
formatexszQuerycharsmaxszQuery ), "UPDATE %s SET Experiencia='%d', APs='%d' WHERE id='%d'"TABLEg_experienciaid ], g_ammopacks[id], g_idid ] );
    
SQL_ThreadQueryg_hTuple"DataHandler"szQueryiData);
}

public 
cargar_datosid )
{
    
g_statusid ] = CARGAR_DATOS;
    new 
szQuery128 ], iData];
    
iData] = id;
    
formatexszQuerycharsmaxszQuery ), "SELECT Experiencia, APs FROM %s WHERE id='%d'"TABLEg_idid ] );
    
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( 
g_statusid ] )
    {
        case 
REG_USER:
        {
            if( !
SQL_NumResultsQuery ) )
                
client_cmdid"messagemode CREAR_PASSWORD" );
            else
            {
                
client_printidprint_chat"[Cuentas] El usuario ya existe." );
                
client_cmdid"spk buttons/button10.wav" );
                
show_login_menuid );
            }
        }
        
        case 
REG_PASSWORD:
        {
            if( 
failstate TQUERY_SUCCESS )
            {
                if( 
strfinderror"Duplicate" ) != -)
                {
                    if( 
strfinderror"Usuario" ) != -)
                        
client_printidprint_chat"[Cuentas] El usuario ya existe." );

                    else if( 
strfinderror"Pj" ) != -)
                        
client_printidprint_chat"[Cuentas] El nombre de personaje esta en uso." );
                }
                else
                    
client_printidprint_chat"[Cuentas] Error al crear la cuenta. Intente nuevamente." );
                
                
client_cmdid"spk buttons/button10.wav" );
                
show_login_menuid );
            }
            
            else
            {
                
client_printidprint_chat"[Cuentas] Tu cuenta ha sido creada correctamente." );
                
func_login_successid );
            }
            
        }
        
        case 
LOG_USER:
        {
            if( 
SQL_NumResultsQuery ) )
                
client_cmdid"messagemode LOGUEAR_PASSWORD" );
            
            else
            {
                
client_printidprint_chat"[Cuentas] El usuario no existe." );
                
client_cmdid"spk buttons/button10.wav" );
                
show_login_menuid );
            }
        }
        
        case 
LOG_PASSWORD:
        {
            if( 
SQL_NumResultsQuery ) )
            {
                new 
szPass33 ];
                
SQL_ReadResultQuery2szPasscharsmaxszPass ) );
                
                
#if defined SECURITY
                
new szBuffer34 ];
                
md5szPassszBuffer );
                if( 
equalszBufferszPass ) )
                
#else
                
if( equalPasswordid ], szPass ) )
                
#endif
                
{
                    
SQL_ReadResultQuery3g_playernameid ], charsmaxg_playername[ ] ) );
                    
g_idid ] = SQL_ReadResultQuery);
                    
                    
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 ) )
            {
                
// Cargamos los datos de al columna 'Experiencia' en la variable global g_experiencia
                
g_experienciaid ] = SQL_ReadResultQuery);
                
g_ammopacksid ] = SQL_ReadResultQuery);
                
func_login_successid );
            }
            
            else
            {
                
client_printidprint_chat"[Cuentas] Error al cargar los datos, intente nuevamente." );
                
g_statusid ] = OFFLINE;
                
show_login_menuid );
            }
        }
        
        case 
GUARDAR_DATOS:
        {
            if( 
failstate TQUERY_SUCCESS )
                
console_printid"[Cuentas] Error en el guardado de datos." );
            
            else
                
console_printid"[Cuentas] Datos guardados." );
            
            
g_statusid ] = LOGGED;
        }
    }
    
    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.)
    
new msg_block;
    
msg_block get_msg_blockid );
    
set_msg_blockidBLOCK_SET );
    
engclient_cmdid"jointeam""5" );
    
engclient_cmdid"joinclass""5" );
    
set_msg_blockidmsg_block );
    
    
g_statusid ] = LOGGED;
    
    
client_cmdid"name ^"%s^""g_playernameid ] );
}

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

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

public 
client_infochangedid )
{
    if( !
is_user_connectedid ) ) 
        return 
PLUGIN_HANDLED;
    
    
get_user_nameidg_playernameid ], charsmaxg_playername[ ] ) );
    
    
// esto es para que no se pueda cambiar el nombre
    
new szNewname33 ], szNewname233 ];
    
get_user_infoid"name"szNewnamecharsmaxszNewname ) );
    
get_user_nameidszNewname2charsmaxszNewname2 ) );
    
    if( ( !
equalg_playernameid ], szNewnameid ] ) || !equal(g_playernameid ], szNewname2id ])) && g_statusid ] == LOGGED)
    {
        
set_user_infoid"name"g_playernameid ] );
        
client_cmdid"name ^"%s^""g_playernameid ] );
        return 
PLUGIN_HANDLED;
    }
    
    return 
PLUGIN_HANDLED;
}

public 
client_putinserverid )
{
    
g_statusid ] = OFFLINE;
    
show_login_menuid );
}

public 
client_disconnectid )
    
guardar_datosid );

#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." );
        
// si no conecta pausea el plugin
        
return pause"a" );
    }
    
    return 
PLUGIN_CONTINUE;
}
#else

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

    if ( !
equaliget_type"sqlite" ) )
    {
        
log_to_file"SQLITE_ERROR.txt""Error de conexion" );
        
// si no conecta pausea el plugin
        
return pause"a" );
    }
    
    
g_hTuple SQL_MakeDbTuple""""""SQLITE_DATEBASE );
    
    return 
PLUGIN_CONTINUE;
}
#endif

public plugin_end( )
    
SQL_FreeHandleg_hTuple );
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang11274\\ f0\\ fs16 \n\\ par }
*/ 
Gracias y que tengas un buen dia.
Bk3Zell is offline
r0ma
Senior Member
Join Date: Apr 2012
Location: Great Tomb of Nazarick
Old 08-26-2012 , 12:03   Re: Sistema de cuentas MYSQL/SQLITE con/sin encriptación
#85

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

__________________
Discord:FluffyDeveloper#4753
Github: https://github.com/francoromaniello
AMX-ES: https://amxmodx-es.com/r0ma'
r0ma is offline
Send a message via MSN to r0ma
fearAR
Veteran Member
Join Date: Oct 2010
Old 08-26-2012 , 13:02   Re: Sistema de cuentas MYSQL/SQLITE con/sin encriptación
#86

Quote:
Originally Posted by r0ma View Post
PHP Code:
stock contain_special_charactersid, const str[ ], const type[ ] )
{
    static 
successiLen;
    
    
success 0
    iLen 
strlenstr );
    
    for(new 
0iLeni++ )
    {
        if( !
isalphastr] ) && !isdigitstr] ) )
        {
            
client_printidprint_chat"[Cuentas] Caracter especial invalido en %s: ^"%c^""typestr] );
            
console_printid"[Cuentas] Caracter especial invalido en %s: ^"%c^""typestr] );
            
            
success 1;
        }
    }
    
    if( 
success )
        return 
1;
    else
        return 
0;
    
    return -
1;

Esta mal tenes codigo muerto en ese ejemplo, así seria en todo caso:

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

__________________
~~~~ NPC AI ~~~~

[ Pathfinding - OK ]
[ Citizen AI - OK ]
[ Handle Weapons - --- ]
fearAR is offline
Send a message via MSN to fearAR
Bk3Zell
Junior Member
Join Date: Jul 2012
Old 08-26-2012 , 14:46   Re: Sistema de cuentas MYSQL/SQLITE con/sin encriptación
#87

Gracias: r0ma,fearAR.
Pude solucionar el problema de los caracteres.
ahora me falta el de guardado y cargado de Ammopacks
aun no logro que guarde y cargue los Ammopacks...

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

#define PLUGIN "Sistema de cuentas MySQL/SQLite"
#define VERSION "1.0.6"
#define AUTHOR "Neeeeeeeeeel.-"

#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 "xxx"
#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

new Handle:g_hTuple;
new 
pcvar_saveround;
new 
g_maxplayers;
new 
Usuario33 ][ 33 ];
new 
Password33 ][ 35 ];
new 
g_status33 ];
new 
g_playername33 ][ 33 ];
new 
g_id33 ];
new 
g_experiencia33 ];
new 
g_ammopacks33 ];

enum
{
    
OFFLINE,
    
LOG_USER,
    
LOG_PASSWORD,
    
REG_USER,
    
REG_PASSWORD,
    
CARGAR_DATOS,
    
GUARDAR_DATOS,
    
LOGGED
}

// 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'
    APs int( 20 ) NOT NULL DEFAULT '5'
);
*/

/* 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,
    "APs" INTEGER DEFAULT 5
);
*/


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" );
    
    
// Esta cvar activada hace que se guarden los datos cada vez que comienza una ronda
    
pcvar_saveround register_cvar"guardar_por_rondas""1" );
    
    
g_maxplayers get_maxplayers( );
    
    
MySQLx_Init( );
    
    
register_clcmd"test""test" );
}

public 
testid )
{
    
g_experienciaid ]++;
    
g_ammopacksid ]++;
    
guardar_datosid );
}

public 
message_VGUIMenuiMsgidiDestid )
{
    if( 
get_msg_arg_int) != VGUI_JOIN_TEAM_NUM
        return 
PLUGIN_CONTINUE;
    
    if( 
is_user_connectedid ) && g_statusid ] == OFFLINE )
    {
        
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_statusid ] == OFFLINE )
        {
            
show_login_menuid );
            return 
PLUGIN_HANDLED;
        }
    }
    
    return 
PLUGIN_HANDLED;
}

public 
clcmd_changeteamid )
{
    if( 
g_statusid ] <= REG_PASSWORD )
    {
        
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_displayidmenu);
}

public 
login_menuidmenuitem)
{
    new 
iData]; 
    new 
iAccess
    new 
iCallback
    new 
iName64 ]; 
    
menu_item_getinfomenuitemiAccessiData5iName63iCallback ) ;
    
    switch( 
str_to_numiData ) ) 
    {
        case 
1client_cmdid"messagemode CREAR_USUARIO" );
        case 
2client_cmdid"messagemode LOGUEAR_USUARIO" );
    }
}

public 
reg_usuarioid )
{
    new 
user33 ];
    
read_argsusercharsmaxuser ) );
    
remove_quotesuser );
    
trimuser );

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

public 
reg_passwordid )
{
    new 
pass33 ];
    
read_argspasscharsmaxpass ) );
    
remove_quotespass );
    
trimpass );
    
    
#if defined CHARACTERS_PROTECTION
    
if( contain_special_charactersidpass"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
    
    
new szQuery128 ], iData];
    
iData] = id;
    
g_statusid ] = REG_PASSWORD;
    
    
#if defined SECURITY
    
new szBuffer34 ];
    
md5passszBuffer );
    
formatexszQuerycharsmaxszQuery ), "INSERT INTO %s ( Usuario, Password, Pj ) VALUES ( ^"%s^", ^"%s^", ^"%s^" )"TABLEUsuarioid ], szBufferg_playernameid ] );
    
#else
    
formatexszQuerycharsmaxszQuery ), "INSERT INTO %s ( Usuario, Password, Pj ) VALUES ( ^"%s^", ^"%s^", ^"%s^" )"TABLEUsuarioid ], passg_playernameid ] );
    
#endif
    
    
SQL_ThreadQueryg_hTuple"DataHandler"szQueryiData);
    return 
PLUGIN_HANDLED;
}

public 
log_usuarioid )
{
    new 
user33 ];
    
read_argsusercharsmaxuser ) );
    
remove_quotesuser );
    
trimuser );
    
    
#if defined CHARACTERS_PROTECTION
    
set_hudmessage255000.120.2406.08.0 )
    
show_hudmessageid"Solo se pueden usar nombres con numeros y letras" )
    
    if( 
contain_special_charactersiduser"el usuario" ) )
    {
        
client_cmdid"spk buttons/button10.wav" );
        
show_login_menuid );
        
        return 
PLUGIN_HANDLED;
    }
    
#endif
    
    
copyUsuarioid ], charsmaxUsuario[ ] ), user );
    
    new 
szQuery64 ], iData];
    
iData] = id;
    
g_statusid ] = LOG_USER;
    
    
formatexszQuerycharsmaxszQuery ), "SELECT * FROM %s WHERE Usuario=^"%s^""TABLEuser );
    
    
SQL_ThreadQueryg_hTuple"DataHandler"szQueryiData);
    return 
PLUGIN_HANDLED;
}

public 
log_passwordid )
{
    new 
pass33 ];
    
read_argspasscharsmaxpass ) );
    
remove_quotespass );
    
trimpass );
    
    
#if defined CHARACTERS_PROTECTION
    
if( contain_special_charactersidpass"la password" ) )
    {
        
client_cmdid"spk buttons/button10.wav" );
        
show_login_menuid );
        
        return 
PLUGIN_HANDLED;
    }
    
#endif
    
    
copyPasswordid ], charsmaxPassword[ ] ), pass );
    
    new 
szQuery64 ], iData];
    
iData] = id;
    
g_statusid ] = LOG_PASSWORD;
    
    
formatexszQuerycharsmaxszQuery ), "SELECT * FROM %s WHERE Usuario=^"%s^""TABLEUsuarioid ] );
    
    
SQL_ThreadQueryg_hTuple"DataHandler"szQueryiData);
    return 
PLUGIN_HANDLED;
}

public 
guardar_datosid )
{
    
g_statusid ] = GUARDAR_DATOS;
    new 
szQuery128 ], iData];
    
iData] = id;
    
formatexszQuerycharsmaxszQuery ), "UPDATE %s SET Experiencia='%d', APs='%d' WHERE id='%d'"TABLEg_experienciaid ], g_ammopacks[id], g_idid ] );
    
SQL_ThreadQueryg_hTuple"DataHandler"szQueryiData);
}

public 
cargar_datosid )
{
    
g_statusid ] = CARGAR_DATOS;
    new 
szQuery128 ], iData];
    
iData] = id;
    
formatexszQuerycharsmaxszQuery ), "SELECT Experiencia, APs FROM %s WHERE id='%d'"TABLEg_idid ] );
    
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( 
g_statusid ] )
    {
        case 
REG_USER:
        {
            if( !
SQL_NumResultsQuery ) )
                
client_cmdid"messagemode CREAR_PASSWORD" );
            else
            {
                
client_printidprint_chat"[Cuentas] El usuario ya existe." );
                
client_cmdid"spk buttons/button10.wav" );
                
show_login_menuid );
            }
        }
        
        case 
REG_PASSWORD:
        {
            if( 
failstate TQUERY_SUCCESS )
            {
                if( 
strfinderror"Duplicate" ) != -)
                {
                    if( 
strfinderror"Usuario" ) != -)
                        
client_printidprint_chat"[Cuentas] El usuario ya existe." );

                    else if( 
strfinderror"Pj" ) != -)
                        
client_printidprint_chat"[Cuentas] El nombre de personaje esta en uso." );
                }
                else
                    
client_printidprint_chat"[Cuentas] Error al crear la cuenta. Intente nuevamente." );
                
                
client_cmdid"spk buttons/button10.wav" );
                
show_login_menuid );
            }
            
            else
            {
                
client_printidprint_chat"[Cuentas] Tu cuenta ha sido creada correctamente." );
                
func_login_successid );
            }
            
        }
        
        case 
LOG_USER:
        {
            if( 
SQL_NumResultsQuery ) )
                
client_cmdid"messagemode LOGUEAR_PASSWORD" );
            
            else
            {
                
client_printidprint_chat"[Cuentas] El usuario no existe." );
                
client_cmdid"spk buttons/button10.wav" );
                
show_login_menuid );
            }
        }
        
        case 
LOG_PASSWORD:
        {
            if( 
SQL_NumResultsQuery ) )
            {
                new 
szPass33 ];
                
SQL_ReadResultQuery2szPasscharsmaxszPass ) );
                
                
#if defined SECURITY
                
new szBuffer34 ];
                
md5szPassszBuffer );
                if( 
equalszBufferszPass ) )
                
#else
                
if( equalPasswordid ], szPass ) )
                
#endif
                
{
                    
SQL_ReadResultQuery3g_playernameid ], charsmaxg_playername[ ] ) );
                    
g_idid ] = SQL_ReadResultQuery);
                    
                    
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 ) )
            {
                
// Cargamos los datos de al columna 'Experiencia' en la variable global g_experiencia
                
g_experienciaid ] = SQL_ReadResultQuery);
                
g_ammopacksid ] = SQL_ReadResultQuery);
                
func_login_successid );
            }
            
            else
            {
                
client_printidprint_chat"[Cuentas] Error al cargar los datos, intente nuevamente." );
                
g_statusid ] = OFFLINE;
                
show_login_menuid );
            }
        }
        
        case 
GUARDAR_DATOS:
        {
            if( 
failstate TQUERY_SUCCESS )
                
console_printid"[Cuentas] Error en el guardado de datos." );
            
            else
                
console_printid"[Cuentas] Datos guardados." );
            
            
g_statusid ] = LOGGED;
        }
    }
    
    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.)
    
new msg_block;
    
msg_block get_msg_blockid );
    
set_msg_blockidBLOCK_SET );
    
engclient_cmdid"jointeam""5" );
    
engclient_cmdid"joinclass""5" );
    
set_msg_blockidmsg_block );
    
    
g_statusid ] = LOGGED;
    
    
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"[Cuentas] Caracter especial invalido en %s: ^"%c^""typestr] );
            
console_printid"[Cuentas] Caracter especial invalido en %s: ^"%c^""typestr] );
            
            return 
1;
        }
    }
    
    return 
0;
}

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

public 
client_infochangedid )
{
    if( !
is_user_connectedid ) ) 
        return 
PLUGIN_HANDLED;
    
    
get_user_nameidg_playernameid ], charsmaxg_playername[ ] ) );
    
    
// esto es para que no se pueda cambiar el nombre
    
new szNewname33 ], szNewname233 ];
    
get_user_infoid"name"szNewnamecharsmaxszNewname ) );
    
get_user_nameidszNewname2charsmaxszNewname2 ) );
    
    if( ( !
equalg_playernameid ], szNewnameid ] ) || !equal(g_playernameid ], szNewname2id ])) && g_statusid ] == LOGGED)
    {
        
set_user_infoid"name"g_playernameid ] );
        
client_cmdid"name ^"%s^""g_playernameid ] );
        return 
PLUGIN_HANDLED;
    }
    
    return 
PLUGIN_HANDLED;
}

public 
client_putinserverid )
{
    
g_statusid ] = OFFLINE;
    
show_login_menuid );
}

public 
client_disconnectid )
    
guardar_datosid );

#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." );
        
// si no conecta pausea el plugin
        
return pause"a" );
    }
    
    return 
PLUGIN_CONTINUE;
}
#else

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

    if ( !
equaliget_type"sqlite" ) )
    {
        
log_to_file"SQLITE_ERROR.txt""Error de conexion" );
        
// si no conecta pausea el plugin
        
return pause"a" );
    }
    
    
g_hTuple SQL_MakeDbTuple""""""SQLITE_DATEBASE );
    
    return 
PLUGIN_CONTINUE;
}
#endif

public plugin_end( )
    
SQL_FreeHandleg_hTuple );
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang11274\\ f0\\ fs16 \n\\ par }
*/ 
Agradeceria su ayuda
Gracias y
Que tengan un buen dia.
Bk3Zell is offline
her0p
Senior Member
Join Date: Nov 2011
Old 08-29-2012 , 20:47   Re: Sistema de cuentas MYSQL/SQLITE con/sin encriptación
#88

Es posible cambiar el método de registro y en vez de crear un user, que te coja por defecto el nick que estas usando para el registro?

alguien me podría decir mas o menos como hacerlo, si es mucho lio igual es mas facil que el campo user se rellene solo con el nick que llevas en ese momento.

Last edited by her0p; 08-29-2012 at 23:23.
her0p is offline
leonard19941
Veteran Member
Join Date: Jun 2011
Old 08-30-2012 , 19:32   Re: Sistema de cuentas MYSQL/SQLITE con/sin encriptación
#89

Quote:
Originally Posted by her0p View Post
Es posible cambiar el método de registro y en vez de crear un user, que te coja por defecto el nick que estas usando para el registro?

alguien me podría decir mas o menos como hacerlo, si es mucho lio igual es mas facil que el campo user se rellene solo con el nick que llevas en ese momento.
La forma que Neeel puso es mucho mejor de lo que vos decis, pero si quieres que la cuenta se cree con el nick que tiene el jugador si se puede hacer.
__________________
leonard19941 is offline
her0p
Senior Member
Join Date: Nov 2011
Old 08-30-2012 , 19:47   Re: Sistema de cuentas MYSQL/SQLITE con/sin encriptación
#90

Quote:
Originally Posted by leonard19941 View Post
La forma que Neeel puso es mucho mejor de lo que vos decis, pero si quieres que la cuenta se cree con el nick que tiene el jugador si se puede hacer.
Y podrías mas o menos orientarme?
her0p is offline
 


Thread Tools
Display Modes

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 19:23.


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