Hola gente de alliedmods! En este tutorial les vengo a enseñar a como crear una base de datos para el sistema de cuentas de r0ma, ya que últimamente mucha gente lo utiliza y generalmente no saben como crear la base de datos. Me surgió esta idea porque yo era uno de esos que ni idea como hacer para que se guarden los datos, pero con ayuda de mongito100 (Mi querido Moncha) hicimos nuestra primer base de datos ya hace bastantes meses.
Creditos a Anti por pasarme el programa y asi aprender lo que explicare mas adelante.
Antes de que empecemos cabe aclarar que lo que voy a explicar se hace con el Mozilla Firefox y con un programa llamado SQLite Manager
Empezando el tutorial:
DESCARGA:
1- Debemos descargar el SQLite Manager desde el mozilla en el siguiente link ( pagina ):
SQLite Manager
Si no tienen el mozilla: https://www.mozilla.org/es-ES/firefox/ne...m=referral]
2- Le dan a Agregar a Firefox
3- Se les va a descargar y les va a aparecer que si lo quieren instalar, obviamente le hacemos click a Instalar Ahora:
4- Una vez que lo instalamos les va a aparecer que se instalara después de que reinicien Firefox, y lo que hacemos es hacer click en reiniciar ahora ( con este simple paso finalizamos la Descarga ):
¿ Donde se encuentra SQLite Manager para utilizarlo ?
5- Abren el firefox , van a la opción de Herramientas y les aparecerá el icono del programa.
Antes de empezar a utilizar el programa recientemente descargado tienen que tener en su plugin ya instalado el sistema de cuentas de r0ma, con las variables que ustedes quieran guardar. Los nombres puestos en el sistema tienen que ser iguales en los que vamos a poner en la base de datos. Por ej:
6- En la base de datos vamos a tener que poner las variables tal cual la pusieron en el plugin. Imagen:
Como ven en la imagen puse los mismos nombres que puse en el plugin! Si no es así, esto no dará resultado.
Yo lo voy a hacer con las siguientes variables:
7 -Una vez hecho todo lo anterior vamos al programa y abrimos el cuentas.sq3 de r0ma.
Si no lo tienen: http://amxmodx-es.com/Thread-Sistema-de-...SQL-SQLITE]
¿Como lo abrimos?
8- Una vez que pusimos Conectar Base de Datos nos aparecerá un cuadrito para buscar los archivos que queremos seleccionar y seleccionamos en tipo: Todos los Archivos
9- Y ahora buscamos el cuentas.sq3 donde ustedes lo han descargado y lo abren.
En el lado izquierdo le dan a tables, eligen cuentas y a su derecha les aparecerá lo que tiene guardado el cuentas.sq3.
Acá viene lo lindo, ahora para agregar los Niveles, Frags y Puntos al guardado tenemos que Insertar un nombre, el tipo y el Por defecto.
Se encuentra más debajo de las columnas:
10- En Nombre: Ponemos las variables que pusimos en el plugin tal cual estaban.
En mi caso era así:
Entonces en nombre pongo: Levels
En Tipo: Va como es la variable, es decir, si la variable es Float, elegimos la opción FLOAT, si la variable es Bool iría BOOL. Pero en este caso los Niveles, Frags y Puntos son Integer entonces elijo la opción INTEGER. ( Si este paso no es entendible , envíame un Mensaje Privado )
En Por Defecto: es el valor de la variable, en mi caso va 1 así cuando el jugador entra es nivel 1. En el caso de los Frags iría 0 entonces el jugador al entrar tiene 0 Frags ( mismo es el caso de los Puntos ).
11 -Una vez completado los datos le damos a añadir columna y les aparecerá:
Está seguro de que desea realizar las siguientes operaciones:
Add Column to Table cuentas
SQL:
ALTER TABLE "main"."cuentas" ADD COLUMN "Levels" INTEGER DEFAULT 0
12- Ustedes le dan a Si y listo! Tendrán una variable ya guardada!
13- Así hacen lo mismo con las otras variables. Y ahora para guardar la base de datos vamos a Base de Datos, Actualizar. Y listo, cierran el programa.
El cuentas.sq3 deben ponerlo en la carpeta counter strike / cstrike / addons / Addons / Data / sqlite3 / ACA VA.
Si no tienen esa carpeta, la crean.
Bueno me llevo mucho tiempo hacer esto, espero que les sirva, porque lo hice paso por paso bien explicado y con imágenes.
Aca les dejo el Sistema de cuentas de r0ma adaptado con los Niveles, Frags y Puntos.
PD: Soy medio boludo para explicar, si ven algo mal explicado, acepto arreglarlo con lo que ustedes (mis señores) quieran.
Saludos!
Creditos a Anti por pasarme el programa y asi aprender lo que explicare mas adelante.
Antes de que empecemos cabe aclarar que lo que voy a explicar se hace con el Mozilla Firefox y con un programa llamado SQLite Manager
Empezando el tutorial:
DESCARGA:
1- Debemos descargar el SQLite Manager desde el mozilla en el siguiente link ( pagina ):
SQLite Manager
Si no tienen el mozilla: https://www.mozilla.org/es-ES/firefox/ne...m=referral]
2- Le dan a Agregar a Firefox
3- Se les va a descargar y les va a aparecer que si lo quieren instalar, obviamente le hacemos click a Instalar Ahora:
4- Una vez que lo instalamos les va a aparecer que se instalara después de que reinicien Firefox, y lo que hacemos es hacer click en reiniciar ahora ( con este simple paso finalizamos la Descarga ):
¿ Donde se encuentra SQLite Manager para utilizarlo ?
5- Abren el firefox , van a la opción de Herramientas y les aparecerá el icono del programa.
Antes de empezar a utilizar el programa recientemente descargado tienen que tener en su plugin ya instalado el sistema de cuentas de r0ma, con las variables que ustedes quieran guardar. Los nombres puestos en el sistema tienen que ser iguales en los que vamos a poner en la base de datos. Por ej:
Código PHP:
formatex( szQuery, charsmax( szQuery ), "SELECT id, Experiencia, Levels, Frags, Puntos FROM %s WHERE Usuario=^"%s^"", szTable, g_usuario[ id ] );
6- En la base de datos vamos a tener que poner las variables tal cual la pusieron en el plugin. Imagen:
Como ven en la imagen puse los mismos nombres que puse en el plugin! Si no es así, esto no dará resultado.
Yo lo voy a hacer con las siguientes variables:
Código PHP:
g_Levels , g_Frags, g_Puntos
7 -Una vez hecho todo lo anterior vamos al programa y abrimos el cuentas.sq3 de r0ma.
Si no lo tienen: http://amxmodx-es.com/Thread-Sistema-de-...SQL-SQLITE]
¿Como lo abrimos?
8- Una vez que pusimos Conectar Base de Datos nos aparecerá un cuadrito para buscar los archivos que queremos seleccionar y seleccionamos en tipo: Todos los Archivos
9- Y ahora buscamos el cuentas.sq3 donde ustedes lo han descargado y lo abren.
En el lado izquierdo le dan a tables, eligen cuentas y a su derecha les aparecerá lo que tiene guardado el cuentas.sq3.
Acá viene lo lindo, ahora para agregar los Niveles, Frags y Puntos al guardado tenemos que Insertar un nombre, el tipo y el Por defecto.
Se encuentra más debajo de las columnas:
10- En Nombre: Ponemos las variables que pusimos en el plugin tal cual estaban.
En mi caso era así:
Código PHP:
formatex( szQuery, charsmax( szQuery ), "SELECT id, Experiencia, Levels, Frags, Puntos FROM %s WHERE Usuario=^"%s^"", szTable, g_usuario[ id ] );
Entonces en nombre pongo: Levels
En Tipo: Va como es la variable, es decir, si la variable es Float, elegimos la opción FLOAT, si la variable es Bool iría BOOL. Pero en este caso los Niveles, Frags y Puntos son Integer entonces elijo la opción INTEGER. ( Si este paso no es entendible , envíame un Mensaje Privado )
En Por Defecto: es el valor de la variable, en mi caso va 1 así cuando el jugador entra es nivel 1. En el caso de los Frags iría 0 entonces el jugador al entrar tiene 0 Frags ( mismo es el caso de los Puntos ).
11 -Una vez completado los datos le damos a añadir columna y les aparecerá:
Está seguro de que desea realizar las siguientes operaciones:
Add Column to Table cuentas
SQL:
ALTER TABLE "main"."cuentas" ADD COLUMN "Levels" INTEGER DEFAULT 0
12- Ustedes le dan a Si y listo! Tendrán una variable ya guardada!
13- Así hacen lo mismo con las otras variables. Y ahora para guardar la base de datos vamos a Base de Datos, Actualizar. Y listo, cierran el programa.
El cuentas.sq3 deben ponerlo en la carpeta counter strike / cstrike / addons / Addons / Data / sqlite3 / ACA VA.
Si no tienen esa carpeta, la crean.
Bueno me llevo mucho tiempo hacer esto, espero que les sirva, porque lo hice paso por paso bien explicado y con imágenes.
Aca les dejo el Sistema de cuentas de r0ma adaptado con los Niveles, Frags y Puntos.
Código PHP:
#include < amxmodx >
#include < sqlx >
#define PLUGIN "Sistema de cuentas MySQL/SQLite"
#define VERSION "1.1.1"
#define AUTHOR "r0ma"
#define MYSQL
#if defined MYSQL
#define MYSQL_HOST "127.0.0.1"
#define MYSQL_USER "root"
#define MYSQL_PASS ""
#define MYSQL_DATEBASE "cuentas"
#else
#define SQLITE_DATEBASE "cuentas"
#endif
new const szTable[ ] = "cuentas";
new const szPrefix[ ] = "[Cuentas]";
new Handle:g_hTuple;
new g_maxplayers;
new g_id[ 33 ];
new g_estado[ 33 ];
new g_usuario[ 33 ][ 34 ];
new g_password[ 33 ][ 34 ];
new g_playername[ 33 ][ 33 ];
new g_experiencia[ 33 ];
enum {
OFFLINE,
LOGUEADO
};
enum
{
REGISTRAR_USUARIO,
REGISTRAR_PASSWORD,
LOGUEAR_USUARIO,
LOGUEAR_PASSWORD,
CARGAR_DATOS,
GUARDAR_DATOS
};
/* consulta MYSQL:
CREATE TABLE cuentas
(
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
Usuario varchar(34) NOT NULL UNIQUE KEY,
Password varchar(34) 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_plugin( PLUGIN, VERSION, AUTHOR );
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_clcmd( "menuselect", "menu_select" );
register_message( get_user_msgid( "ShowMenu" ), "message_ShowMenu" );
register_message( get_user_msgid( "VGUIMenu" ), "message_VGUIMenu" );
register_event( "HLTV", "event_round_start", "a", "1=0", "2=0" );
g_maxplayers = get_maxplayers( );
MySQLx_Init( );
}
public message_VGUIMenu( iMsgid, iDest, id ) {
if( g_estado[ id ] == LOGUEADO || get_msg_arg_int( 1 ) != 2 )
return PLUGIN_CONTINUE;
show_login_menu( id );
return PLUGIN_HANDLED;
}
public message_ShowMenu( iMsgid, iDest, id ) {
if( g_estado[ id ] == LOGUEADO )
return PLUGIN_CONTINUE;
static sMenuCode[ 33 ];
get_msg_arg_string( 4, sMenuCode, charsmax( sMenuCode ) );
if( containi( sMenuCode, "Team_Select" ) != -1 ) {
show_login_menu( id );
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
public clcmd_changeteam( id ) {
if( g_estado[ id ] != LOGUEADO ) {
show_login_menu( id );
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
public show_login_menu( id ) {
new menu = menu_create( "Menu de cuentas", "login_menu" );
menu_additem( menu, "Crear cuenta", "1" );
menu_additem( menu, "Ingresar", "2" );
menu_setprop( menu, MPROP_EXIT, MEXIT_NEVER );
menu_display( id, menu );
menu_destroy( menu );
}
public login_menu( id, menu, item ) {
}
public menu_select( id ) {
if( g_estado[ id ] == OFFLINE ) {
new args[ 3 ];
read_args( args, charsmax( args ) );
if( str_to_num( args ) == 1 )
client_cmd( id, "messagemode CREAR_USUARIO" );
else
client_cmd( id, "messagemode LOGUEAR_USUARIO" );
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
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^"", szTable, 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[ ] ) );
formatex( szQuery, charsmax( szQuery ), "INSERT INTO %s (Usuario, Password, Pj) VALUES (^"%s^", ^"%s^", ^"%s^")", szTable, g_usuario[ id ], g_password[ id ], g_playername[ id ] );
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^"", szTable, 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^"", szTable, g_usuario[ id ], g_password[ id ] );
SQL_ThreadQuery( g_hTuple, "DataHandler", szQuery, iData, 2 );
return PLUGIN_HANDLED;
}
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', Levels='%d', Frags='%d', Puntos='%d' WHERE id='%d'", szTable, g_experiencia[ id ], g_Levels[ id ], g_Frags[ id ], g_Puntos[ 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 );
}
switch( data[ 1 ] ) {
case REGISTRAR_USUARIO: {
if( !SQL_NumResults( Query ) )
client_cmd( id, "messagemode CREAR_PASSWORD" );
else {
client_print( id, print_chat, "%s El usuario ya existe.", szPrefix );
client_cmd( id, "spk buttons/button10.wav" );
show_login_menu( id );
}
}
case REGISTRAR_PASSWORD: {
if( failstate < TQUERY_SUCCESS ) {
if( containi( error, "Usuario" ) != -1 )
client_print( id, print_chat, "%s El usuario ya existe.", szPrefix );
else if( containi( error, "Pj" ) != -1 )
client_print( id, print_chat, "%s El nombre de personaje esta en uso.", szPrefix );
else
client_print( id, print_chat, "%s Error al crear la cuenta. Intente nuevamente.", szPrefix );
client_cmd( id, "spk buttons/button10.wav" );
show_login_menu( id );
}
else {
client_print( id, print_chat, "%s Tu cuenta ha sido creada correctamente.", szPrefix );
new szQuery[ 128 ], iData[ 2 ];
iData[ 0 ] = id;
iData[ 1 ] = CARGAR_DATOS;
formatex( szQuery, charsmax( szQuery ), "SELECT id, Experiencia, Levels, Frags, Puntos FROM %s WHERE Usuario=^"%s^"", szTable, g_usuario[ id ] );
SQL_ThreadQuery( g_hTuple, "DataHandler", szQuery, iData, 2 );
}
}
case LOGUEAR_USUARIO: {
if( SQL_NumResults( Query ) )
client_cmd( id, "messagemode LOGUEAR_PASSWORD" );
else {
client_print( id, print_chat, "%s El usuario no existe.", szPrefix );
client_cmd( id, "spk buttons/button10.wav" );
show_login_menu( id );
}
}
case LOGUEAR_PASSWORD: {
if( SQL_NumResults( Query ) ) {
g_id[ id ] = SQL_ReadResult( Query, 0 );
SQL_ReadResult( Query, 3, g_playername[ id ], charsmax( g_playername[ ] ) );
// Cargamos datos
g_experiencia[ id ] = SQL_ReadResult( Query, 4 );
g_Levels[ id ] = SQL_ReadResult( Query, 5 );
g_Frags[ id ] = SQL_ReadResult( Query, 6 );
g_Puntos[ id ] = SQL_ReadResult( Query, 7 );
func_login_success( id );
}
else {
client_print( id, print_chat, "%s Contrasenia incorrecta.", szPrefix );
client_cmd( id, "spk buttons/button10.wav" );
show_login_menu( id );
}
}
case CARGAR_DATOS: {
if( SQL_NumResults( Query ) ) {
g_id[ id ] = SQL_ReadResult( Query, 0 );
g_experiencia[ id ] = SQL_ReadResult( Query, 1 );
g_Levels[ id ] = SQL_ReadResult( Query, 2 );
g_Frags[ id ] = SQL_ReadResult( Query, 3 );
g_Puntos[ id ] = SQL_ReadResult( Query, 4 );
func_login_success( id );
}
else {
client_print( id, print_chat, "%s Error al cargar los datos, intente nuevamente.", szPrefix );
show_login_menu( id );
}
}
case GUARDAR_DATOS: {
if( failstate < TQUERY_SUCCESS )
console_print( id, "%s Error en el guardado de datos.", szPrefix );
else
console_print( id, "%s Datos guardados.", szPrefix );
}
}
}
public func_login_success( id ) {
/*new msg_block = get_msg_block( id );
set_msg_block( id, BLOCK_SET );
*/
engclient_cmd( id, "jointeam", "5" );
engclient_cmd( id, "joinclass", "5" );
//set_msg_block( id, msg_block );
g_estado[ id ] = LOGUEADO;
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;
static name[ 33 ];
get_user_info( id, "name", name, charsmax( name ) );
if( !equal( g_playername[ id ], name ) ) {
set_user_info( id, "name", g_playername[ id ] );
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
public client_putinserver( id ) {
show_login_menu( id );
}
public client_disconnect( id ) {
if( g_estado[ id ] == LOGUEADO ) {
guardar_datos( id );
g_estado[ id ] = OFFLINE;
}
}
#if defined MYSQL
public MySQLx_Init( )
{
g_hTuple = SQL_MakeDbTuple( MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_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_type[ 12 ];
SQL_SetAffinity( "sqlite" );
SQL_GetAffinity( get_type, sizeof get_type );
if( !equali( get_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_FreeHandle( g_hTuple );
PD: Soy medio boludo para explicar, si ven algo mal explicado, acepto arreglarlo con lo que ustedes (mis señores) quieran.
Saludos!
(08/10/2014, 10:50 PM)meTaLiCroSS escribió: Siento que en este foro viven en una competencia, en vez de preocuparse del contenido se preocupan de la gente, nisiquiera de eso, de sus actitudes por muy buenas o malas que sean, que clase de convivencia se puede llegar con aquello? Siempre la misma mierda en todos lados, progresen de una vez
**************************************************
Como hacer una Base de Datos para Sistema de Cuentas by r0ma