Jump to content
  • ¡Hola, Invitado! Únete a nuestra comunidad y construyamos juntos algo increíble.

    ¡Bienvenido a nuestra comunidad! Al unirte, formarás parte de una comunidad apasionada por MAPPING. Para participar activamente, simplemente haz clic en el botón ‘Conectarse’ o ‘Registrarse’. Una vez registrado, podrás publicar mensajes, compartir tus experiencias y explorar los diversos foros disponibles. ¡Esperamos verte pronto y compartir momentos increíbles juntos!

[PLUGIN] Registro + Guardado en sqlx by ;SoNNy

Valorar este tema


Publicaciones recomendadas

Publicado (editado)

Bueno capas que alguno lo anda buscando , esto te guarda los AMMOPACKS del ZP ,pero no con nVault ni nada de eso con algo mas complejo como MySQL

 

Primero lo que necesitan es tener una DB ( database ) donde se van a guardar los datos , cuenta , pw , aps

CREATE TABLE `account` (
 `nick` varchar(32) default NULL,
 `password` varchar(18) NOT NULL default '',
 PRIMARY KEY  (`nick`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

 

y luego hacen la conexion en el SMA osea en el plugin poniendo los datos y la db donde se encuentra la tabla account y listo

Es recomendable usar el server MYSQL en la misma PC que tienen el server asi la conexion funciona 127.0.0.1 o localhost .

 

SMA con el TUT.

 

#include 
#include 
#include 
#include 
#include 

#define PLUGIN "Creacion cuenta + pw"
#define VERSION "0.1"
#define AUTHOR ";SoNNy"

#define AUTO_TEAM_JOIN_DELAY 0.1
#define is_valid_player(%1) (1 <= %1 <= 32)

//#define DisabledChoiseMenu // Sacarle los "//" para desavilitar el uso de la M ocea choseteam.

new bool:Connected[33]
new cvar_password_prefijo
/*================================================================================
               [MySQLx Vars, other]
=================================================================================*/
new Handle:g_hTuple;
new NickSQL[33]
new passwordSQl[33]
new mysqlx_host, mysqlx_user, mysqlx_db, mysqlx_pass;

/*================================================================================
               [iniciacion Plugin]
=================================================================================*/
public plugin_init() 
{
   register_plugin(PLUGIN, VERSION, AUTHOR)

   // Comandos en say
   register_clcmd("ingresar_password", "login")
   register_clcmd("_password", "crear_cuenta")
   register_message(get_user_msgid("ShowMenu"), "message_show_menu")
   
   #if defined DisabledChoiseMenu
   register_concmd("chooseteam", "cmdtopin")  
   #endif
   
   // PCVARS
   cvar_password_prefijo = register_cvar("account_password_prefijo", "_zw")

   // Event
   register_forward( FM_ClientUserInfoChanged, "FWClientUserInfoChanged" )
   register_event("TeamInfo", "HookJoinTeam", "a", "2!UNASSIGNED")
   
   /*=================================================================================*/
   // SQLx cvars
   mysqlx_host = register_cvar ("reg_host", "localhost"); 
   mysqlx_user = register_cvar ("reg_user", "usuario"); 
   mysqlx_pass = register_cvar ("reg_pass", "pass"); 
   mysqlx_db   = register_cvar ("reg_dbname", "Base de datos"); 
   /*=================================================================================*/
   MySQLx_Init()
}
/*=================================================================================*/
#if defined DisabledChoiseMenu
public cmdtopin () return PLUGIN_HANDLED  
#endif
/*=================================================================================*/
public client_putinserver(id)
{
   LoadCuenta(id);
   Connected[id] = true
}
/*=================================================================================*/
public client_disconnect(id)
{
   Connected[id] = false
}
/*=================================================================================*/
public FWClientUserInfoChanged( Index, Buffer )
{
   if( !is_user_connected( Index ) )
       return FMRES_IGNORED;
   
   static NickName[32], NickOld[32]; get_user_name( Index, NickOld, 31 )
   engfunc( EngFunc_InfoKeyValue, Buffer, "name", NickName, 31 ) 
   
   if( equal( NickName, NickOld ) )
       return FMRES_IGNORED;
   
   engfunc( EngFunc_SetClientKeyValue, Index, Buffer, "name", NickOld )
   
   client_cmd( Index, "name ^"%s^"; setinfo name ^"%s^"", NickOld, NickOld )
   
   return FMRES_SUPERCEDE;
}  
/*================================================================================
               [MENU Join]
=================================================================================*/
public HookJoinTeam() 
{ 
   static id; id = read_data(1)
   
   switch(CheckCuentaMenu(id))
   {
       case 0..3:
       {
           if(Connected[id])
           {
               new Menu = menu_create("\yMenu de Login/Registro", "showMenuLoginReg") 
               menu_additem(Menu, "\wLogin"            , "1", 0) 
               menu_additem(Menu, "\wRegistrar Cuenta"    , "2", 0) 
                
               menu_setprop(Menu,MPROP_EXITNAME,"Salir") 
               menu_setprop(Menu, MPROP_EXIT, MEXIT_ALL) 
                
               menu_display(id, Menu, 0) 
               Connected[id] = true
           }
       }

   }
   return PLUGIN_HANDLED 
} 
/*=================================================================================*/
public showMenuLoginReg(id, Menu, item) 
{ 
   if (item == MENU_EXIT) 
   { 
       menu_destroy(Menu) 
       return PLUGIN_HANDLED 
   } 
    
   new iData[6]; 
   new iAccess; 
   new iCallback; 
   new iName[64]; 
   menu_item_getinfo(Menu, item, iAccess, iData, 5, iName, 63, iCallback) 
     
   switch (str_to_num(iData)) 
   { 
       case 1: 
       { 
           client_cmd(id, "messagemode ingresar_password");
           Connected[id] = false
       } 
       case 2: 
       { 
           client_cmd(id, "messagemode _password");
           Connected[id] = false
       } 
   } 
    
   return PLUGIN_HANDLED 
} 

/*================================================================================
               [Func Login y Create Cuenta]
=================================================================================*/
public crear_cuenta(id)
{
   

   if(NickSQL[id])
   {
       client_print(id, print_chat, "La cuenta Ya Existe... Por Favor Inserte el password de su cuenta")
       client_cmd(id, "messagemode ingresar_password");
   }
   else
   {
       new say[300]
       // Obtenemos en un string lo que escribio como password
       read_args(say, charsmax(say))
       // Lo preparamos para analizar
       remove_quotes(say), trim(say)
       // Si solamente apreto enter lo omitiremos
       if(equal(say, ""))
       return PLUGIN_HANDLED
       // Verificamos que la password solo contenga una palabra
       if(contain(say, " ") != -1)
       {
       client_print(id, print_chat, "La contrasenia debe ser 1 (una) palabra")
       return PLUGIN_HANDLED
       }
       
       copy(passwordSQl[id], charsmax(passwordSQl), say)
       
       new prefijo[8]
       // Guardamos el nick en la variable 'name'
       get_user_name(id, NickSQL[id], charsmax(NickSQL))
       SaveCuenta(id);
       
       get_pcvar_string(cvar_password_prefijo, prefijo, charsmax(prefijo))
       client_cmd(id, "setinfo %s %s", prefijo, passwordSQl[id])
       client_cmd(id, "writecfg config")
       client_print(id, print_chat, "Has sido registrado!. Nick: %s - Password: %s", NickSQL[id], passwordSQl[id])
       engclient_cmd(id, "joinclass", "5");
       Connected[id] = false
       
   }    
   
   return PLUGIN_CONTINUE
}
/*=================================================================================*/
public login(id)
{
   new say[300]

   read_args(say, charsmax(say))
   remove_quotes(say), trim(say)

   if(equal(say, ""))
   return PLUGIN_HANDLED

   if(contain(say, " ") != -1)
   {
   client_print(id, print_chat, "La contrasenia debe ser 1 (una) palabra")
   return PLUGIN_HANDLED
   }
   
   new password[32]
   copy(password, charsmax(password), say)
   
   new name[32], prefijo[8]
   get_user_name(id, name, charsmax(name))
   
   if(!NickSQL[id])
   {    
       // Al no existir, cancelamos
       client_print(id, print_chat, "Debes Registrarte!... Ingresa una Contraseña para registrar nueva cuenta.");
       client_cmd(id, "messagemode _password");
       Connected[id] = true;
       return PLUGIN_HANDLED
   }
    
   get_pcvar_string(cvar_password_prefijo, prefijo, charsmax(prefijo))
   
   if(equali(passwordSQl[id], password)) 
   { 
       client_print(id, print_chat, "* [ZP] Contraseña Aceptada") 
       client_print(id, print_center, "Login Exitoso!")
       client_cmd(id, "setinfo ^"%s^" ^"%s^"",prefijo,password)
       client_cmd(id, "writecfg config")
       engclient_cmd(id, "joinclass", "5"); 
       Connected[id] = false;
   } 
   else 
   { 
       client_cmd(id, "messagemode ingresar_password");
       ChatColor(id, "!g[ZP]!y Debe Ingresar su Contraseña para Acceder a su cuenta!") 
       HookJoinTeam();
       Connected[id] = true;
   } 
   
   return PLUGIN_HANDLED
}
/*=================================================================================*/
CheckCuentaMenu(id)
{
   new password[32]
   
   get_datos(id, password)
   
   if(!NickSQL[id])
   {    
       // Al no existir, cancelamos
       return 0
   }
   if(equali(passwordSQl[id], password)) 
   { 
       engclient_cmd(id, "joinclass", "5"); 
       Connected[id] = false;
   } 
   else 
   { 
       Connected[id] = true;
       return 2
   } 

   return PLUGIN_HANDLED
}
/*=================================================================================*/
get_datos(id,password[32])
{
   new prefijo[8]
   get_pcvar_string(cvar_password_prefijo, prefijo, charsmax(prefijo))
   get_user_info(id, prefijo, password, charsmax(password))
}
/*================================================================================
               [Auto Join]
=================================================================================*/
public message_show_menu(msgid, dest, id) 
{

   static team_select[] = "#Team_Select"
   static menu_text_code[sizeof team_select]
   get_msg_arg_string(4, menu_text_code, sizeof menu_text_code - 1)
   if (!equal(menu_text_code, team_select))
       return PLUGIN_CONTINUE

   set_force_team_join_task(id, msgid)

   return PLUGIN_HANDLED
}
/*=================================================================================*/
set_force_team_join_task(id, menu_msgid)
{
   static param_menu_msgid[2]
   param_menu_msgid[0] = menu_msgid
   set_task(AUTO_TEAM_JOIN_DELAY, "task_force_team_join", id, param_menu_msgid, sizeof param_menu_msgid)
}
/*=================================================================================*/
public task_force_team_join(menu_msgid[], id) 
{
   if (get_user_team(id))
       return

   force_team_join(id)
}


/*================================================================================
               [MySQLx]
=================================================================================*/
public MySQLx_Init()
{
   new szHost[64], szUser[32], szPass[32], szDB[128];
   
   get_pcvar_string( mysqlx_host, szHost, charsmax( szHost ) );
   get_pcvar_string( mysqlx_user, szUser, charsmax( szUser ) );
   get_pcvar_string( mysqlx_pass, szPass, charsmax( szPass ) );
   get_pcvar_string( mysqlx_db, szDB, charsmax( szDB ) );
   
   g_hTuple = SQL_MakeDbTuple( szHost, szUser, szPass, szDB );
   
}
/*=================================================================================*/
SaveCuenta(id)
{ 
   static szQuery[ 128 ]; 
   formatex( szQuery, 127, "REPLACE INTO `account` (`nick`, `password`) VALUES ('%s', '%s');", NickSQL[id] , passwordSQl[id] );
   SQL_ThreadQuery( g_hTuple, "QuerySetData", szQuery);
}
/*=================================================================================*/

LoadCuenta(id)
{
   static szQuery[ 128 ], iData[ 1 ];
   new zwname[33]
   get_user_name(id,zwname,charsmax(zwname))
   
   formatex( szQuery, 127, "SELECT `nick`, `password` FROM `account` WHERE ( `nick` = '%s' );", zwname );  

   iData[ 0 ] = id;
   SQL_ThreadQuery( g_hTuple, "QuerySelectData", szQuery, iData, 1 );
}
/*=================================================================================*/

public QuerySelectData( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime ) 
{ 
   if( iFailState == TQUERY_CONNECT_FAILED 
   || iFailState == TQUERY_QUERY_FAILED ) 
   { 
       log_amx( "%s", szError );
       
       return;
   } 
   else 
   { 
       new id = iData[ 0 ];
       
       new ColPass = SQL_FieldNameToNum(hQuery, "password") 
       new ColName = SQL_FieldNameToNum(hQuery, "nick")
       
       while (SQL_MoreResults(hQuery)) 
       {
           SQL_ReadResult(hQuery, ColName, NickSQL[id], charsmax(NickSQL))
           SQL_ReadResult(hQuery, ColPass, passwordSQl[id], charsmax(passwordSQl))
           SQL_NextRow(hQuery)
       }
   } 
}
/*=================================================================================*/
public QuerySetData( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime ) 
{ 
   if( iFailState == TQUERY_CONNECT_FAILED 
   || iFailState == TQUERY_QUERY_FAILED ) 
   { 
       log_amx( "%s", szError ); 
       
       return;
   } 
} 
/*================================================================================
               [stocks]
=================================================================================*/
stock force_team_join(id) 
{
   static jointeam[] = "jointeam"
   engclient_cmd(id, jointeam, "5")
   return
}
/*=================================================================================*/
stock check_user_name(id, const name[32] = "")
{
   new plrname[32]
  
   if(equal(name, ""))
   {
       get_user_name(id, plrname, 31)
   }
   else
   {
       plrname = name
   }
   //load_cuentas(id)
}
/*=================================================================================*/
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();
        }
        }
    
   }
}
/*===========================

 

Despues , los datos a modificar USTEDES , con los datos de su DB es

 

/*=================================================================================*/ 
   // SQLx cvars 
   mysqlx_host = register_cvar ("reg_host", "localhost");  
   mysqlx_user = register_cvar ("reg_user", "usuario");  
   mysqlx_pass = register_cvar ("reg_pass", "pass");  
   mysqlx_db   = register_cvar ("reg_dbname", "Base de datos");  
   /*=================================================================================*/  

 

       mysqlx_host = register_cvar ("reg_host", "localhost");  // host de nuestra DB
   mysqlx_user = register_cvar ("reg_user", "usuario");  // User/Usuario de Nuestra DB
   mysqlx_pass = register_cvar ("reg_pass", "pass");  // Contraseña o Pw de Nuestra B
   mysqlx_db   = register_cvar ("reg_dbname", "Base de datos"); // Y por ultimo nombre de nuestra DB  

 

Creditos

;SoNNy o p4rp4d30

Por favor no modifiquen esto

#define AUTHOR ";SoNNy"

ya que lo hiso el a este TUT/Plugin

 

Chau y Suerte :B.

Editado por get frag
Me dijieron que cambie el prefix xd :B
Publicado
mm me parece que esto no es un tutorial... podrias borrarle ese prefix y ponerle Plugin..

 

exactamente no es un tutorial es un plugin / code dejado , un tutorial uno explica como hacerlo todo que significa todo , pero igual gracias por compartirlo y lo mas importante

POR PONER LOS CREDITOS

  • 2 semanas después...
Publicado
eeee, tengo Una Pregunta "boluda" bueno, la DB "database" en donde la pongo?, creo un plugin aparte que se llame DataBase y hago una conexion con el zombieplague40.sma? o la DataBase La Hago en cualquier parte del zombieplague40.sma? espero me respondan :sonrisa::sonrisa:
Publicado

Tienes que montar un servidor mysql, con panel phpmyadmin si es que no sabes usar el shell de mysql.

 

Podes usar appserv o xampp.. por ejemplo.

 

Saludos.

Ex Administrador General de Mapping Zone.

Publicado
Muy bueno tu aporte' date=' mas aya que los creditos son de otros... gracias por compartirlo.[/b']

 

Opino igual, flor de thread, y el plugin tremendo.

M9Jap.jpg

img4408.png

Cuento lo que ocurre, y hago vivir sensaciones. Parto de sentimientos con ellos creo emociones, motivo por el que formo part de vuestros corazones (8).

 

F<3

Crear una cuenta o conéctate para comentar

Tienes que ser miembro para dejar un comentario

Crear una cuenta

Regístrese para obtener una cuenta nueva en nuestra comunidad. ¡Es fácil!

Registrar una nueva cuenta

Conectar

¿Ya tienes una cuenta? Conéctate aquí.

Conectar ahora
×
×
  • Crear nuevo...

Información importante

Al utilizar nuestra web, aceptas nuestras Política de privacidad estás de acuerdo con las condiciones establecidas.