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 nuevo...

Información importante

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