Hola buenas tengo un problema tengo un sistema de niveles por exp con guardado sistema sqlite me anda todo bien guarda a la perfeccion
pero tengo un problema con el hud
parto del nivel 1 y 0 de exp ya gano 4 de exp por que eso da al matar luego pruebo para ver si guarda y me sale todo al revez la verdad nose que sea pero solo cuando pongo la exp que falta les dejo foto
IMAGEN 1
GANO 4 de exp
IMAGEN 2
Hago retry y se ve asi el hud
pero tengo un problema con el hud
parto del nivel 1 y 0 de exp ya gano 4 de exp por que eso da al matar luego pruebo para ver si guarda y me sale todo al revez la verdad nose que sea pero solo cuando pongo la exp que falta les dejo foto
IMAGEN 1
GANO 4 de exp
IMAGEN 2
Hago retry y se ve asi el hud
Código PHP:
#include <amxmodx>
#include <sqlx>
#include <hamsandwich>
#include <fun>
//#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_estado;
new g_id[ 33 ];
new g_usuario[ 33 ][ 34 ];
new g_password[ 33 ][ 34 ];
new g_playername[ 33 ][ 33 ];
new g_level[33], g_exp[33]
#define LevelNext(%1) (%1 * 30)
#define NivelMaximo 30
#define TAG "[ZP]"
enum
{
REGISTRAR_CUENTA,
LOGUEAR_CUENTA,
CARGAR_DATOS,
GUARDAR_DATOS
};
public client_putinserver(id)
{
set_task(1.0, "ShowHud", id, _, _, "b")
}
public plugin_init()
{
register_plugin("Sistema de cuentas MySQL/SQLite", "1.1.2", "r0ma")
RegisterHam(Ham_Killed, "player", "ham_PlayerKilled", 1)
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("say /god", "cmd_god")
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 & (1<<id) || 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 & (1<<id) ) 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 & (1<<id) )
{
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" );
menu_additem( menu, "Ingresar" );
menu_setprop( menu, MPROP_EXIT, MEXIT_NEVER );
menu_display( id, menu );
return PLUGIN_HANDLED;
}
public login_menu( id, menu, item )
{
switch( item )
{
case 0: client_cmd( id, "messagemode CREAR_USUARIO" );
case 1: client_cmd( id, "messagemode LOGUEAR_USUARIO" );
}
return PLUGIN_HANDLED;
}
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 ] );
client_cmd( id, "messagemode CREAR_PASSWORD" );
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_CUENTA;
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 ] );
client_cmd( id, "messagemode LOGUEAR_PASSWORD" );
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_CUENTA;
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', Nivel='%d' WHERE id='%d'", szTable, g_exp[id], g_level[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_CUENTA:
{
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, tu ID ES : %d.", szPrefix, g_id[id]);
new szQuery[ 128 ], iData[ 2 ];
iData[ 0 ] = id;
iData[ 1 ] = CARGAR_DATOS;
formatex( szQuery, charsmax( szQuery ), "SELECT id Experiencia, Nivel FROM %s WHERE Usuario=^"%s^"", szTable, g_usuario[ id ] );
SQL_ThreadQuery( g_hTuple, "DataHandler", szQuery, iData, 2 );
}
}
case LOGUEAR_CUENTA:
{
if( SQL_NumResults( Query ) )
{
g_id[ id ] = SQL_ReadResult( Query, 0 );
SQL_ReadResult( Query, 3, g_playername[ id ], charsmax( g_playername[ ] ) );
// Cargamos datos
g_level[id] = SQL_ReadResult(Query, 4)
g_exp[id] = SQL_ReadResult(Query, 5);
func_login_success( id );
}
else
{
client_print( id, print_chat, "%s Usuario o Contraseñ 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 );
// Ponemos la exp en 0 para el nuevo usuario.
g_exp[id] = 0;
g_level[id] = 1;
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 )
{
engclient_cmd( id, "jointeam", "5" );
engclient_cmd( id, "joinclass", "5" );
g_estado |= (1<<id);
set_user_info( id, "name", g_playername[ id ] );
}
public event_round_start( )
{
for( new i = 1; i <= g_maxplayers; i++ )
{
if( g_estado & (1<<i) && is_user_connected( i ) )
guardar_datos( i );
}
}
public client_infochanged( id )
{
if( ~g_estado & (1<<id) ) 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_disconnect( id ) {
if( g_estado & (1<<id) )
{
guardar_datos( id );
g_estado &= ~(1<<id);
}
g_usuario[ id ][ 0 ] = '^0';
g_password[ id ][ 0 ] = '^0';
}
#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 );
}
public ham_PlayerKilled(victim, attacker, shouldgib)
{
if(!is_user_connected(victim) || !is_user_connected(attacker) || get_user_team(victim) == get_user_team(attacker))
{
return HAM_IGNORED;
}
if(g_level[attacker] == NivelMaximo)
{
client_print(attacker, print_chat, "%s No has ganado exp, por estar en tu nivel maximo.", TAG)
return HAM_IGNORED
}
g_exp[attacker] += 4
checkLevel(attacker)
return HAM_IGNORED
}
public checkLevel(id)
{
new iUploaded = false
while(g_exp[id] >= LevelNext(g_level[id]) && g_level[id] < NivelMaximo) // nivel y que el nivel sea menor al nivel máximo, así podrá subir de nivel la persona.
{
++g_level[id]
iUploaded = true;
}
if(iUploaded)
{
client_print(id, print_chat, "%s Felicidades subiste al nivel: %d.", TAG, g_level[id])
iUploaded = false
}
}
public cmd_god(id)
{
if(is_user_alive(id))
{
set_user_godmode(id, 1)
}
}
public ShowHud(id)
{
if(is_user_alive(id))
{
set_hudmessage(0, 255, 255, 0.0, 0.27, 0, 6.0, 12.0)
show_hudmessage(id, "Nivel: %d^nExperiencia : %d/%d", g_level[id], g_exp[id], LevelNext(g_level[id]))
}
}