22/04/2018, 03:37 PM
hola que tal necesito que porfavor me pudieran ayudar a agregarle a este sistema de cuenta que no se pudieran cambiar el nick los jugadores eso nomas gracias de antemano
PD: ya que a veces se bugea
Código PHP:
#include <amxmodx>
#include <sqlx>
#include <hamsandwich>
#include <amxmisc>
#define PLUGIN "Sistema de cuentas"
#define VERSION "1.0"
#define AUTHOR "r0ma"
//#define MYSQL
#if defined MYSQL
#define MYSQL_HOST "131.221.32.191"
#define MYSQL_USER "dreamsg1_zkg-hl"
#define MYSQL_PASS "N;$FNqhDCHEi"
#define MYSQL_DATEBASE "N;$FNqhDCHEi"
#else
#define SQLITE_DATEBASE "cuentas"
#endif
new const szTable[ ] = "cuentas"
new Handle:g_hTuple;
new g_maxplayers;
new g_estado;
new g_id[ 33 ];
new g_password[ 33 ][ 34 ];
new g_playername[ 33 ][ 33 ];
new Estado[33]
#define level_up(%1) (%1 * %1 * 10)
new g_level[33]
new g_exp[33]
new g_rangos[33]
enum _:Info_Rangos
{
RangosName[33],
RangosNivel
}
new const Rangos[][Info_Rangos] =
{
{ "Silver I", 1 },
{ "Silver II", 2 },
{ "Silver III", 4 },
{ "Silver IV", 6 },
{ "Silver Elite", 8 },
{ "Silver Elite Master", 10 },
{ "Gold Nova I", 12 },
{ "Gold Nova II", 14 },
{ "Gold Nova III", 16 },
{ "Gold Nova Master", 18 },
{ "Master Guardian I", 20 },
{ "Master Guardian II", 22 },
{ "Master Guardian Elite", 24 },
{ "Distinguished Master Guardian", 26 },
{ "Legendary Eagle", 28 },
{ "Legendary Eagle Master", 30 },
{ "Supreme Master First Class", 32 },
{ "The Global Elite", 37 }
}
enum
{
REGISTRAR_CUENTA,
LOGUEAR_CUENTA,
CARGAR_DATOS,
GUARDAR_DATOS,
ChequearC
};
enum _:DataID
{
DESCONECTADO = 0,
REGISTRADO
}
enum _:DATOS
{
Tipo[20]
}
new const ESTADOS[DataID][DATOS] =
{
{ "No Registrado" },
{ "Registrado" }
}
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("CREAR_PASSWORD", "reg_password");
register_clcmd("LOGUEAR_PASSWORD", "log_password");
register_clcmd("chooseteam", "clcmd_changeteam");
register_clcmd("jointeam", "clcmd_changeteam");
register_message(get_user_msgid("ShowMenu"), "message_ShowMenu");
register_message(get_user_msgid("VGUIMenu"), "message_VGUIMenu");
RegisterHam(Ham_Killed, "player", "fw_playerkilled_post");
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;
ChequearCuenta( 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 ) {
ChequearCuenta( id );
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
public clcmd_changeteam( id ) {
if( ~g_estado & (1<<id) ) {
ChequearCuenta( id );
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
public show_login_menu_registrado( id )
{
new len[999], menu
formatex(len, charsmax(len), "\wBienvenido, Usuario \y%s \r[Escondidas Mod] ^n\wTu Estas: \y%s , \wTu ID es \r#%d", g_playername[id],ESTADOS[Estado[id]][Tipo],g_id[id])
menu = menu_create(len, "login_menu_registrado")
formatex(len, charsmax(len), "\wIngresar Al Servidor^n")
menu_additem(menu, len, "1")
menu_setprop( menu, MPROP_EXIT, MEXIT_NEVER );
menu_display( id, menu );
return PLUGIN_HANDLED;
}
public login_menu_registrado( id, menu, item ) {
switch( item ) {
case 0: client_cmd( id, "messagemode LOGUEAR_PASSWORD" );
}
return PLUGIN_HANDLED;
}
public show_login_menu_nuevo( id ) {
new len[999], menu
formatex(len, charsmax(len), "\wBienvenido de vuelta, Usuario \y%s \r[Escondidas Mod] ^n\wTu Estas: \y%s", g_playername[id],ESTADOS[Estado[id]][Tipo])
menu = menu_create(len, "login_menu_nuevo")
formatex(len, charsmax(len), "\wRegistrarse^n")
menu_additem(menu, len, "1")
menu_setprop( menu, MPROP_EXIT, MEXIT_NEVER );
menu_display( id, menu );
return PLUGIN_HANDLED;
}
public login_menu_nuevo( id, menu, item ) {
switch( item ) {
case 0: 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 ] );
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 (Pj, Password) VALUES (^"%s^", ^"%s^")", szTable, g_playername[ id ], g_password[ 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 ] );
new szQuery[ 128 ], iData[ 2 ];
iData[ 0 ] = id;
iData[ 1 ] = LOGUEAR_CUENTA;
get_user_name( id, g_playername[ id ], charsmax( g_playername[ ] ) );
formatex( szQuery, charsmax( szQuery ), "SELECT * FROM %s WHERE Pj=^"%s^" AND Password=^"%s^"", szTable, g_playername[ 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 Exp='%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 ChequearCuenta(id){
new Query[400],Data[2]
Data[0] = id;Data[1] = ChequearC
formatex(Query,charsmax(Query),"SELECT Pj FROM %s WHERE Pj = ^"%s^"",szTable,g_playername[id])
SQL_ThreadQuery(g_hTuple,"DataHandler",Query,Data,2)
return PLUGIN_HANDLED
}
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, "Pj" ) != -1 )
client_print( id, print_chat, "[Sistema de Cuentas] El usuario ya existe." );
else if( containi( error, "Pj" ) != -1 )
client_print( id, print_chat, "[Sistema de Cuentas] El nombre de personaje esta en uso." );
else
client_print( id, print_chat, "[Sistema de Cuentas] Error al crear la cuenta. Intente nuevamente." );
client_cmd( id, "spk buttons/button10.wav" );
ChequearCuenta( id );
}
else {
client_print( id, print_chat, "[Sistema de Cuentas] Tu cuenta ha sido creada correctamente." );
new szQuery[ 128 ], iData[ 2 ];
iData[ 0 ] = id;
iData[ 1 ] = CARGAR_DATOS;
formatex( szQuery, charsmax( szQuery ), "SELECT id FROM %s WHERE Pj=^"%s^"", szTable, g_playername[ id ] );
SQL_ThreadQuery( g_hTuple, "DataHandler", szQuery, iData, 2 );
Estado[id] = REGISTRADO
}
}
case LOGUEAR_CUENTA: {
if( SQL_NumResults( Query ) ) {
g_id[ id ] = SQL_ReadResult( Query, 0 );
SQL_ReadResult( Query, 2, g_playername[ id ], charsmax( g_playername[ ] ) );
// Cargamos datos
g_exp[ id ] = SQL_ReadResult(Query, 3)
g_level[id] = SQL_ReadResult(Query, 4)
func_login_success( id );
}
else {
client_print( id, print_chat, "[Sistema de Cuentas] Contraseñ incorrecta." );
client_cmd( id, "spk buttons/button10.wav" );
ChequearCuenta( 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, "[Sistema de Cuentas] Error al cargar los datos, intente nuevamente." );
ChequearCuenta( id );
}
}
case GUARDAR_DATOS: {
if( failstate < TQUERY_SUCCESS )
console_print( id, "[Sistema de Cuentas] Error en el guardado de datos." );
else
console_print( id, "[Sistema de Cuentas] Datos guardados." );
}
case ChequearC:
{
if(SQL_NumResults(Query))
{
Estado[id] = REGISTRADO
show_login_menu_registrado(id)
}
else
{
Estado[id] = DESCONECTADO
show_login_menu_nuevo(id)
}
}
}
}
public client_putinserver(id)
{
get_user_name(id,g_playername[id],charsmax(g_playername[]))
static QueryX[128], DataX[2]
DataX[0] = id
DataX[1] = ChequearC
set_task(2.0,"hud",id,_,_,"b")
formatex(QueryX, charsmax(QueryX), "SELECT id FROM %s WHERE Pj = ^"%s^"",szTable, g_playername[id])
SQL_ThreadQuery(g_hTuple, "DataHandler", QueryX, DataX, 2)
}
public func_login_success( id ) {
engclient_cmd( id, "jointeam", "5" );
engclient_cmd( id, "joinclass", "5" );
g_estado |= (1<<id);
Estado[id] = REGISTRADO
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[ 32 ];
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_playername[ 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 hud(id)
{
if(is_user_alive(id))
{
set_hudmessage(0, 255, 0, 0.93, 0.0, 0, 6.0, 12.0)
show_hudmessage(id, "Nivel : %d^nRango : %s^nExperiencia : %d", g_level[id], Rangos[g_rangos[id]][RangosName], g_exp[id])
}
}
public fw_playerkilled_post(victim, attacker)
{
if(!is_user_connected(attacker)) return HAM_IGNORED;
if(victim == attacker) return HAM_IGNORED;
g_exp[attacker] += 10
ChatColor(attacker, "!g[AMX]!y has ganado 10 de exp por matar.")
level(attacker)
return HAM_IGNORED;
}
public level(id)
{
while(g_exp[id] >= level_up(g_level[id]) && g_level[id] < 100)
{
g_level[id]++
ChatColor(id, "!g[AMX] !ySubiste al nivel %d", g_level[id])
rangos(id)
}
}
public rangos(id)
{
if (g_level[id] >= Rangos[g_rangos[id] + 1][RangosNivel] && g_rangos[id] < 9)
{
g_rangos[id]++
ChatColor(id, "!g[AMX] !ySubiste al rango !g%s", Rangos[g_rangos[id]][RangosName])
}
}
stock ChatColor(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)
replace_all(msg, 190, "!g", "^4") // Green Color
replace_all(msg, 190, "!y", "^1") // Default Color
replace_all(msg, 190, "!team", "^3") // Team Color
replace_all(msg, 190, "!team2", "^0") // Team2 Color
if (id) players[0] = id; else get_players(players, count, "ch")
{
for (new i = 0; i < count; i++)
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}
PD: ya que a veces se bugea