09/10/2013, 01:36 AM (Última modificación: 15/05/2014, 08:40 PM por r0ma'.)
Bueno no hay mucho que decir es un simple sistema de cuentas.
Necesitan activar el MODULO MySQL o SQLITE
Código:
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
1.1.0
-Fix bug: Se bugean los menu despues de loguear.
-Fix bug: La parte de md5 estaba mal echa.
-Removido el Spawn ya no sirve.
-Fix errores
1.1.1
-Removido contain_special_characters ( ahora encripta el user y la pw )
-Modificaciones, fix
1.1.2
-Removido el hook de "menuselect"
-Ahora usa menos querys
-Modificada la variable "g_estado"
Creditos:
shinoda
Kiske
Javivi
ILUSION
fearAR
rak
Neeeeeeeeeel.-
meTaLiCroSS escribió: Pero sin picarse po, todavía te molesta que te haya mandado a la mierda porque querias plugins de mi server? Mírate, seguí programando weas mulas después de años, tení que ser harto penca para esta wea, das pura pena Corazón
(22/01/2021, 02:55 PM)Skylar escribió: dios como me enferma que digas plugins cuando hablas de un solo plugin pendejo re pelotudo
una cosa, con el nuevo AMXModX también tarda el ThreadQuery o se arregló??
nunca lo probé, si alguien puede decirme
(17/04/2015, 03:36 PM)Neeeeeeeeeel.- escribió: No se va a volver a conectar a internet en toda su puta vida... nadie sube porno a mi foro y vive para contarlo.
(09/10/2013, 06:21 AM)RauliTop escribió: una cosa, con el nuevo AMXModX también tarda el ThreadQuery o se arregló??
nunca lo probé, si alguien puede decirme
ThreadQuery es para usar cuando tenes una DB externa para evitar que se freeze el server
ya lo sé.
lo que estoy diciendo es si sigue tardando bastante entre consulta y consulta o si ya arreglaron eso.
(17/04/2015, 03:36 PM)Neeeeeeeeeel.- escribió: No se va a volver a conectar a internet en toda su puta vida... nadie sube porno a mi foro y vive para contarlo.
(09/10/2013, 06:21 AM)RauliTop escribió: una cosa, con el nuevo AMXModX también tarda el ThreadQuery o se arregló??
nunca lo probé, si alguien puede decirme
ThreadQuery es para usar cuando tenes una DB externa para evitar que se freeze el server
ya lo sé.
lo que estoy diciendo es si sigue tardando bastante entre consulta y consulta o si ya arreglaron eso.
No se traba, esa es la idea. "Thread", en español "hilo", es un subproceso... cuando vos por ejemplo hacés un loop infinito en el CS se freezea el server porque ese loop lo ejecuta el mismo proceso que corre las funciones del juego. Si vos ese loop lo ejecutaras desde un thread (subproceso) el juego no se vería afectado, claro que el AMXX no tiene soporte para threads, pero desde c++ el ThreadingQuery crea un subproceso para generar la consulta y luego envía la respuesta al handler... entonces no hay forma de que se cuelgue el juego.
Buenas, perdón por el otro post. Sinceramente había pensado postearlo acá primero.
Utilizo este sistema de cuentas, por sqlite. Lo que yo quiero hacer es poder crear varias tablas para poder guardar y cargar mas datos. Creo que mi problema esta en el case CARGAR_DATOS, lo demás (supongo) que lo puedo hacer.
Les agradecería si al menos me dicen los pasos para poder realizar esto, ya que no me gusta que me den el code hecho y veo que a muchos también no les gusta dar todo en mano.
Espero que se haya entendido, gracias.
Aclaro por las dudas. No tengo nada hecho con respecto a lo que pido, porque antes que confundirme quise sacarme la duda de como hacerlo.
Mi idea es guardar los datos de las cuentas en la primera tabla(nombre, pj, password, etc), y en las demás guardar valores como los niveles o cosas así(todos esos datos son del mismo player).
(16/10/2013, 09:36 PM)zErk escribió: Emm, supongo que no mas de 5.
Mi idea es guardar los datos de las cuentas en la primera tabla(nombre, pj, password, etc), y en las demás guardar valores como los niveles o cosas así(todos esos datos son del mismo player).
En ese caso deberías usar solo 2 tablas.
Una para usuario y password y otra para todos los datos de los jugadores.
En este sistema que solo admite un personaje por cuenta, realmente es al pedo tener dos tablas.
Ahora si vos querés agregarle soporte para mas de un personaje, ahí puede ser mejor tener 2 tablas.
La primera sería algo así:
cuentas:
* id: int auto_increment
* usuario: str
* password: str
* personajes: str
La segunda tabla debería ser:
personajes:
* id: int auto_increment
* nombre: str
* nivel: int
* [...]
Ahora, en la columna personajes de la tabla cuentas lo que tenés que hacer es un string que tenga los id de los personajes separados por espacios
Ejemplo: "4 5 6 7 1"
Entonces, cuando se loguea separás cada id y lo metés todo en un array, luego un loop y con el id que te da el loop hacés la consulta a cada personaje para obtener el nombre y mostrarlo en un menú. De esa forma podés crear un sistema con infinita cantidad de personajes por cuenta.
public reg_usuario( id ) { read_args( g_usuario[ id ], charsmax( g_usuario[ ] ) ); remove_quotes( g_usuario[ id ] ); trim( g_usuario[ id ] );
md5( g_usuario[ id ], g_usuario[ id ] );
new szQuery[ 128 ], iData[ 2 ];
iData[ 0 ] = id; iData[ 1 ] = REGISTRAR_USUARIO;
formatex( szQuery, charsmax( szQuery ), "SELECT * FROM %s WHERE Usuario=^"%s^"", szTables[ TABLA_CUENTAS ], g_usuario[ id ] ); SQL_ThreadQuery( g_hTuple, "DataHandler", szQuery, iData, 2 );
return PLUGIN_HANDLED; }
public reg_password( id ) { read_args( g_password[ id ], charsmax( g_password[ ] ) ); remove_quotes( g_password[ id ] ); trim( g_password[ id ] ); md5( g_password[ id ], g_password[ id ] );
new szQuery[ 256 ], iData[ 2 ];
iData[ 0 ] = id; iData[ 1 ] = REGISTRAR_PASSWORD;
get_user_name( id, g_playername[ id ], charsmax( g_playername[ ] ) );
#if defined MYSQL formatex( szQuery, charsmax( szQuery ), "INSERT INTO %s (Usuario, Password, Pj) VALUES (^"%s^", ^"%s^", ^"%s^"); INSERT INTO %s ( id ) VALUES ( LAST_INSERT_ID( ) )", szTables[ TABLA_CUENTAS ], g_usuario[ id ], g_password[ id ], g_playername[ id ], szTables[ TABLA_DATOS ] ); #else formatex( szQuery, charsmax( szQuery ), "INSERT INTO %s (Usuario, Password, Pj) VALUES (^"%s^", ^"%s^", ^"%s^"); INSERT INTO %s ( id ) VALUES ( last_insert_rowid( ) )", szTables[ TABLA_CUENTAS ], g_usuario[ id ], g_password[ id ], g_playername[ id ], szTables[ TABLA_DATOS ] ); #endif SQL_ThreadQuery(g_hTuple, "DataHandler", szQuery, iData, 2);
return PLUGIN_HANDLED; }
public log_usuario( id ) { read_args( g_usuario[ id ], charsmax( g_usuario[ ] ) ); remove_quotes( g_usuario[ id ] ); trim( g_usuario[ id ] ); md5( g_usuario[ id ], g_usuario[ id ] );
new szQuery[ 128 ], iData[ 2 ];
iData[ 0 ] = id; iData[ 1 ] = LOGUEAR_USUARIO;
formatex( szQuery, charsmax( szQuery ), "SELECT * FROM %s WHERE Usuario=^"%s^"", szTables[ TABLA_CUENTAS ], g_usuario[ id ] ); SQL_ThreadQuery( g_hTuple, "DataHandler", szQuery, iData, 2 );
return PLUGIN_HANDLED; }
public log_password( id ) { read_args( g_password[ id ], charsmax( g_password[ ] ) ); remove_quotes( g_password[ id ] ); trim( g_password[ id ] ); md5( g_password[ id ], g_password[ id ] );
new szQuery[ 128 ], iData[ 2 ];
iData[ 0 ] = id; iData[ 1 ] = LOGUEAR_PASSWORD;
formatex( szQuery, charsmax( szQuery ), "SELECT * FROM %s WHERE Usuario=^"%s^" AND Password=^"%s^"", szTables[ TABLA_CUENTAS ], g_usuario[ id ], g_password[ id ] ); SQL_ThreadQuery( g_hTuple, "DataHandler", szQuery, iData, 2 );
return PLUGIN_HANDLED; }
public cargar_datos( id ) { new szQuery[ 256 ], iData[ 2 ];
iData[ 0 ] = id; iData[ 1 ] = CARGAR_DATOS;
formatex( szQuery, charsmax( szQuery ), "SELECT %s.id, %s.Pj, %s.Experiencia FROM %s LEFT JOIN %s ON %s.id = %s.id WHERE %s.Usuario = ^"%s^"", szTables[ TABLA_CUENTAS ], szTables[ TABLA_CUENTAS ], szTables[ TABLA_DATOS ], szTables[ TABLA_CUENTAS ], szTables[ TABLA_DATOS ], szTables[ TABLA_CUENTAS ], szTables[ TABLA_DATOS ], szTables[ TABLA_CUENTAS ], g_usuario[ id ] );
/* Query: SELECT * FROM cuentas.id, cuentas.PJ, datos.Experiencia FROM cuentas LEFT JOIN datos ON cuentas.id = datos.id WHERE cuentas.Usuario = "user" */ }
public guardar_datos( id ) { new szQuery[ 128 ], iData[ 2 ]; iData[ 0 ] = id; iData[ 1 ] = GUARDAR_DATOS;
formatex( szQuery, charsmax( szQuery ), "UPDATE %s SET Experiencia='%d' WHERE id='%d'", szTables[ TABLA_DATOS ], g_experiencia[ id ], g_id[ id ] ); SQL_ThreadQuery( g_hTuple, "DataHandler", szQuery, iData, 2 ); }
public DataHandler( failstate, Handle:Query, error[ ], error2, data[ ], datasize, Float:time ) { static id; id = data[ 0 ];
if( !is_user_connected( id ) ) return;
switch( failstate ) { case TQUERY_CONNECT_FAILED: { log_to_file( "SQL_LOG_TQ.txt", "Error en la conexion al MySQL [%i]: %s", error2, error ); return; } case TQUERY_QUERY_FAILED: log_to_file( "SQL_LOG_TQ.txt", "Error en la consulta al MySQL [%i]: %s", error2, error ); }
set_user_info( id, "name", g_playername[ id ] ); }
public event_round_start( ) { for( new i = 1; i <= g_maxplayers; i++ ) { if( g_estado[ i ] == LOGUEADO && is_user_connected( i ) ) guardar_datos( i ); } }
public client_infochanged( id ) { if( g_estado[ id ] == OFFLINE ) return PLUGIN_CONTINUE;
meTaLiCroSS escribió: Pero sin picarse po, todavía te molesta que te haya mandado a la mierda porque querias plugins de mi server? Mírate, seguí programando weas mulas después de años, tení que ser harto penca para esta wea, das pura pena Corazón
(22/01/2021, 02:55 PM)Skylar escribió: dios como me enferma que digas plugins cuando hablas de un solo plugin pendejo re pelotudo
Con respecto a las tablas, me confundí y no entendí lo de %s.id y todo eso. Sería mucho pedirte al menos un dato de la tabla 'cuentas' para orientarme un poquito? Porque intente crear la tabla como lo indica la consulta entre /* - */ y no podía entrar.
meTaLiCroSS escribió: Pero sin picarse po, todavía te molesta que te haya mandado a la mierda porque querias plugins de mi server? Mírate, seguí programando weas mulas después de años, tení que ser harto penca para esta wea, das pura pena Corazón
(22/01/2021, 02:55 PM)Skylar escribió: dios como me enferma que digas plugins cuando hablas de un solo plugin pendejo re pelotudo
Al registrarme, lo hace perfectamente(se guardan los datos en 'cuentas')pero no me manda a ningun team, sino que manda el print:
[Cuentas] Error al crear la cuenta. Intente nuevamente
Seguido de eso, intento logear y lo hace perfectamente(aclaro por si alguien después llega a usar el code que hasta un poquito mas arriba).
Hay cosas que no se realmente que hacen, como por ejemplo 'LAST_INSERT_ID'. No me guarda la exp de la tabla 'datos', y en el log dice esto:
Error en la consulta al MySQL [1]: no such function: LAST_INSERT_ID
Saludos.
PD: Como aclare mas arriba, es lo ultimo que pregunto. Si se puede aclarar el problema, mejor. De lo contrario no hay problema, intento solucionarlo yo(aunque ya lo intente y no pude).
meTaLiCroSS escribió: Pero sin picarse po, todavía te molesta que te haya mandado a la mierda porque querias plugins de mi server? Mírate, seguí programando weas mulas después de años, tení que ser harto penca para esta wea, das pura pena Corazón
(22/01/2021, 02:55 PM)Skylar escribió: dios como me enferma que digas plugins cuando hablas de un solo plugin pendejo re pelotudo
he tenido un problema a ver si me podeis ayudar, he creado un user sin problema, todo correcto pero al cambiar de equipo con el consiguiente kill el servidor me a cambiado de nombre a "0" y ahora cada vez q uso esa cuenta y me logueo me cambia el nick a "0", es la primera cuenta que he creado he vuelto a crear mas y he echo lo mismo y no pasa, la verdad es que es curioso.
Bueno he borrado la bd la he vuelto a crear con el primer personaje creado he vuelto a hacer lo mismo y ahora es mas curioso todavia al salir y al volver y loguearme me pone otra vez el "0" xD
Por cierto como prodria hacer para que en la bd la columna usuario se viera con el nombre de registro no con un numero?
meTaLiCroSS escribió: Pero sin picarse po, todavía te molesta que te haya mandado a la mierda porque querias plugins de mi server? Mírate, seguí programando weas mulas después de años, tení que ser harto penca para esta wea, das pura pena Corazón
(22/01/2021, 02:55 PM)Skylar escribió: dios como me enferma que digas plugins cuando hablas de un solo plugin pendejo re pelotudo
no les asigna un numero, todos los valores de la bd los guarda como numeros, la id es un cero usuario un 7 y el password otro cero. en otra cuenta la id tb es cero asi como el usuario en cambio el password es 149, no se es raro la bd tube que crearla con sus respectivas columnas igual es que hice algo mal pero en el log que crea el plugin no aparece nada extraño.[/php]