Jump to content

Buscar en la comunidad

Mostrando resultados para las etiquetas 'guardado'.

  • Buscar por etiquetas

    Escribe las etiquetas separadas por comas.
  • Buscar por autor

Tipo de contenido


Foros

  • ZONA MAPPING GOLDsrc [HALF LIFE/COUNTER-STRIKE 1.6]
    • Guias y Tutoriales
    • Mapas
    • Utilidades y Descargas
  • ZONA MAPPING Source 2 [COUNTER-STRIKE 2]
    • Guias y tutoriales COUNTER STRIKE 2
    • Utilidades CS2
    • Mapas
  • Counter Strike
    • Guias y Tutoriales
    • Descargas
    • Amx - Scripter
    • Entrevistas
    • Dudas y Problemas
    • Mdl - Modeler
    • Noticias
    • Moviemaking
    • Stream Broadcast
    • Demos
    • Videos
    • sXe-Injected
  • Sección zonas
    • ZONA GAMERS
    • ZONA BAR CLUB
    • ZONA TECNOLOGIA
    • ZONA PAPELERA
    • ZONA DISEÑO GRAFICO
  • ZONA RECURSOS [HALF LIFE/COUNTER-STRIKE 1.6/CSGO]
  • ZONA GENERAL
    • Bienvenidas y Despedidas
    • Reglas del Foro
  • 1er Grupo Topics de 1er Grupo
  • Anti-ZM Topics de Anti-ZM
  • Todos con PCClone! Topics de Todos con PCClone!
  • Yo tambien quiero que baneen a Java/Hardcook (? Topics de Yo tambien quiero que baneen a Java/Hardcook (?
  • Avril Lavigne ♥ Topics de Avril Lavigne ♥
  • Hayley Williams ♥ Topics de Hayley Williams ♥
  • Peace and Love♥ Topics de Peace and Love♥
  • Amigos de santi Topics de Amigos de santi

Categorías

  • Programas mapper
  • Recursos (.wad, Fgd's, .wav)
  • Programas

Categorías

  • Motor GOLDsrc (CS 1.6-HL)
    • ARTÍCULOS, INFORMACIÓN Y CONSEJOS
    • CONFIGURACIONES Y USO DE PROGRAMAS EXTERNOS
    • CREACIONES BÁSICAS
    • CREACIONES AVANZADAS
    • ENTIDADES
    • HERRAMIENTAS, TEXTURAS, MODELS Y SPRITES
    • ILUMINACIÓN Y SONIDO
    • SOLUCIONES
    • TIPO DE MAPA ¿CÓMO CREAR UN MAPA...?
  • Motor Source 2 (CS2)
    • ARTÍCULOS, INFORMACIÓN Y CONSEJOS
    • CONFIGURACIONES Y USO DE PROGRAMAS EXTERNOS
    • CREACIONES BÁSICAS
    • CREACIONES AVANZADAS
    • ENTIDADES
    • HERRAMIENTAS, TEXTURAS, MODELS Y SPRITES
    • ILUMINACIÓN Y SONIDO
    • SOLUCIONES
    • TIPO DE MAPA ¿CÓMO CREAR UN MAPA...?

Encontrar resultados en...

Encontrar resultados que contengan...


Fecha creación

  • Inicio

    Fin


Última actualización

  • Inicio

    Fin


Filtrar por número de...

Ingreso

  • Inicio

    Fin


Grupo


Discord


Skype


Steam ID


Youtube


Instagram


FaceBook


Github


Sitio web


Steam ID MZ (no usar)


País


Intereses


Mapa de gamebanana

 
O  

Encontrado 2 resultados

  1. 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.
  2. Aprendizaje necesario: Básico sobre algunas Funciones. Aprendizaje extra: Aprenderse el Include del FVault que está posteado en este Post. Bueno, no hay nada mas que decir, esta todo explicado en el Codigo. Sin ZombiePlague #include < amxmodx > #include < fakemeta > #include < fvault > #include < cstrike > // Creamos variables globales new SZ_Password[ 192 ] new SZ_Password_T[ 33 ][ 192 ] new Registrado[ 33 ] new BadPassword[ 33 ] new const Vault[] = "_Datos" // Nombre del Archivo donde se guardaran los Datos. public plugin_init( ) { register_plugin( "Tutorial", "1.0", "Kiske" ) register_forward( FM_ClientUserInfoChanged, "FWClientUserInfoChanged" ) // Si no me equivoco esta forward se llama cuando el usuario cambia algo de su setinfo. register_clcmd( "say /registrarse", "CMDRegistrarse" ) register_clcmd( "IntroducirContrasenia", "CMDIntroducirContrasenia" ) } public client_disconnect( Index ) Save( Index ) // Esta función ponganla en todos los lugares donde quieren que se guarden sus cosas. public client_putinserver( Index ) { Registrado[ Index ] = 0 BadPassword[ Index ] = 0 Load( Index ) } public CMDRegistrarse( Index ) { if( Registrado[ Index ] || BadPassword[ Index ] ) return PLUGIN_HANDLED; client_cmd( Index, "messagemode IntroducirContrasenia" ) return PLUGIN_CONTINUE; } public CMDIntroducirContrasenia( Index ) { read_args( SZ_Password, 191 ) // Ponemos en la Variable SZ_Password lo que escribió como Contraseña remove_quotes( SZ_Password ) // Analiza lo que escribimos trim( SZ_Password ) // Esta opción es para remover los ESPACIOS ( si es que puso ) al principio y al final de lo que escribió if( equal( SZ_Password, "" ) || contain( SZ_Password, " ") != -1) // En la primer parte, verificamos si lo que ingresó contiene algo......y en la segunda parte verificamos si lo que ingresó tiene espacios, si coincide alguna de las dos cosas, no se lo aceptamos. return PLUGIN_HANDLED; else // Si se llama esta parte, quiere decir que lo que ingresó contiene algo y no tiene espacios. { client_cmd( Index, "setinfo _pass ^"%s^"", SZ_Password ) // Creamos una Setinfo al jugador con el prefijo _pass y la contraseña que ingresó. Ustedes si quieren cambienle el prefijo. Registrado[ Index ] = 1 // Guardamos el Nombre, ls Password y el Dinero actual static SZ_Name[ 32 ], SZ_Data[ 512 ] get_user_name( Index, SZ_Name, 31 ) // Si quieren agregar mas Datos solo vayan aumentando el Parametro y las Variables. formatex( SZ_Data, charsmax( SZ_Data ), "%s %d", SZ_Password, cs_get_user_money( Index ) ) // Esta función del FVault sirve para setear datos ( Recomiendo: Que lean el Include del FVault que está posteado al final de este Post ) fvault_set_data( Vault, SZ_Name, SZ_Data ) // Fixeamos un Error ya que si es la Primera vez que se registra, cuando llame al Save no aparecerá ninguna Password, esto lo Fixea. SZ_Password_T[ Index ] = SZ_Password return PLUGIN_HANDLED; } return PLUGIN_CONTINUE; } public Save( Index ) { if( !Registrado[ Index ] || BadPassword[ Index ] ) // Si NO esta registrado, o si tiene la Contraseña Incorrecta, no le guardamos nada. return PLUGIN_HANDLED; // Voy a dar un Ejemplo en el caso de que quieran guardar Dinero o lo que sea. static SZ_Data[ 512 ], SZ_Name[ 32 ] formatex( SZ_Data, charsmax( SZ_Data ), "%s %d", SZ_Password_T[ Index ], cs_get_user_money( Index ) ) get_user_name( Index, SZ_Name, 31 ) fvault_set_data( Vault, SZ_Name, SZ_Data ) return PLUGIN_CONTINUE; } public Load( Index ) { static SZ_Data[ 512 ], SZ_Name[ 32 ], SETINFO_Password[ 191 ], VAULT_Password[ 191 ], Dinero[ 11 ] get_user_name( Index, SZ_Name, 31 ) get_user_info( Index, "_pass", SETINFO_Password, 190 ) // Seteamos en SETINFO_Password lo que tiene como Setinfo con el prefijo _pass if( !fvault_get_data( Vault, SZ_Name, SZ_Data, charsmax( SZ_Data ) ) ) // Detectamos si NO existe su Nombre y Data en el Vault. En ese caso, les dejo a su Creatividad para que piensen. return 0; Registrado[ Index ] = 1 // El Nombre y la Password JAMÁS la cargen. // Voy a dar un Ejemplo en el caso de que quieran cargar Dinero o lo que sea. parse( SZ_Data, VAULT_Password, 190, Dinero, 10 ) // La función PARSE, separa los Datos 1 por 1. Si guardamos la Password primero, y el Dinero despues, entonces este Parse está bien, obviamente tiene que seguir el Orden en el que se guardó. if( equal( SETINFO_Password, VAULT_Password ) ) // Si la Contraseña del Jugador coincide con la Registrada de su Nick, cargamos sus Datos. { // Fixeamos un Error para que no reemplaze la Password Registrada por alguna que puede llegar a cambiar el adentro del Server. SZ_Password_T[ Index ] = SETINFO_Password // Cargamos el Dinero. ( Numero ) cs_set_user_money( Index, str_to_num( Dinero ) ) // Si cargan una Variable es así: // Money = str_to_num( Dinero ) // Y si cargan una Native como en el caso de cs_set_user_money, bueno ya esta puesto arriba. // Ejemplo de: Cargar un Float // Variable_De_Float[ Index ] = str_to_float( Float ) return 2; } else // Si la Contraseña del Jugador NO coincide con la Registrada de su Nick, podemos Kickearlo, mandarlo a Spect, un menú, les dejo su creatividad... { BadPassword[ Index ] = 1 //.... } return 1; } 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 ) // Si tampoco me confundo, esto obtiene el valor "name" de su setinfo. if( equal( NickName, NickOld ) ) return FMRES_IGNORED; engfunc( EngFunc_SetClientKeyValue, Index, Buffer, "name", NickOld ) // Le volvemos a poner el nick viejo para que no se lo pueda cambiar. client_cmd( Index, "name ^"%s^"; setinfo name ^"%s^"", NickOld, NickOld ) return FMRES_SUPERCEDE; } Datos Extras: Una vez que te Registraste, no te podes volver a Registrar CON el mismo NICK. Si tenes la Password incorrecta, les dejo a su creatividad lo que quieran hacer, ahi ya dice donde es que le da la Password incorrecta, obviamente no te podes volver a Registrar. Cuando se te guardan los Datos por primera vez es algo asi: "Giulix" "cachoenlacolina 800" Cuando me desconecte, que se guardan los Datos, se me guardaron así: "Giulix" "cachoenlacolina 4600", obviamente porque gane Dinero. Testee todos los Bugs posibles, y 0 errores. Con ZombiePlague y con Menú de Registro y Logeo #include < fvault > // Creamos variables globales new SZ_Password[ 33 ][ 192 ] new SZ_Password_T[ 33 ][ 192 ] new Registrado[ 33 ] new BadPassword[ 33 ] new const Vault[] = "_Datos" // Nombre del Archivo donde se guardaran los Datos. public plugin_init( ) { register_clcmd( "say /registrarse", "CMDRegistrarse" ) register_clcmd( "IntroducirContrasenia", "CMDIntroducirContrasenia" ) } public client_disconnect( Index ) Save( Index ) // Esta función ponganla en todos los lugares donde quieren que se guarden sus cosas. public client_putinserver( Index ) { Registrado[ Index ] = 0 BadPassword[ Index ] = 0 set_task( 0.1, "clcmd_changeteam", Index ) // Les va a aparecer el Menú igual por más que tengan MOTD y esas mierdas. // Esta función ponganla abajo del reset_vars y abajo del statssave. Load( Index ) } // ATENCIÓN ACA !!: // En la Función que se llama: clcmd_changeteam(id) van a reemplazar todo lo que tengan por esto, a continuacion les explico: public clcmd_changeteam( Index ) { static Team; Team = get_user_team( Index ) if( ( Team == 0 || Team == 3 ) && !BadPassword[ Index ] && Registrado[ Index ] ) // Si esta en el Team UNNASIGNED o SPECTATOR, si tiene bien la Password y si está Registrado... return PLUGIN_CONTINUE; // ... le muestra el Menú de Teams. else if( !Registrado[ Index ] || BadPassword[ Index ] ) // Si no está Registrado o tiene mal la Password, le mostramos el Menú de Registro y Login. { static Menu, SZ_Items[ 32 ] Menu = menu_create( "\yTitulo", "MenuBadPassword" ) formatex( SZ_Items, 31, "%s", !Registrado[ Index ] ? "Registrar nueva Cuenta" : "Ingresar Contraseña" ) menu_additem( Menu, SZ_Items, "1" ) //* Si no está Registrado la Opción esta será: "Registrar nueva Cuenta", de lo contrario será: "Ingresar Contraseña". menu_setprop( Menu, MPROP_EXITNAME, "Salir" ) menu_display( Index, Menu, 0 ) return PLUGIN_HANDLED; } else show_menu_game( Index ) // Si le cambiaron el nombre a esta función, también deben cambiarselo acá. return PLUGIN_HANDLED; } public CMDRegistrarse( Index ) { if( Registrado[ Index ] || BadPassword[ Index ] ) return PLUGIN_HANDLED; client_cmd( Index, "messagemode IntroducirContrasenia" ) return PLUGIN_CONTINUE; } public CMDIntroducirContrasenia( Index ) { read_args( SZ_Password[ Index ], charsmax( SZ_Password[ ] ) ) // Ponemos en la Variable SZ_Password lo que escribió como Contraseña remove_quotes( SZ_Password[ Index ] ) // Analiza lo que escribimos trim( SZ_Password[ Index ] ) // Esta opción es para remover los ESPACIOS ( si es que puso ) al principio y al final de lo que escribió if( equal( SZ_Password[ Index ], "" ) || contain( SZ_Password[ Index ], " ") != -1) // En la primer parte, verificamos si lo que ingresó contiene algo......y en la segunda parte verificamos si lo que ingresó tiene espacios, si coincide alguna de las dos cosas, no se lo aceptamos. return PLUGIN_HANDLED; else if( BadPassword[ Index ] ) // Si se llama esta parte, quiere decir que lo que ingresó contiene algo y no tiene espacios, pero también quiere decir que está Introduciendo la Contraseña para Logearse. { static SZ_Data[ 512 ], SZ_Name[ 32 ], VAULT_Password[ 191 ] get_user_name( Index, SZ_Name, 31 ) if( !fvault_get_data( Vault, SZ_Name, SZ_Data, charsmax( SZ_Data ) ) ) return 0; parse( SZ_Data, VAULT_Password, 190 ) if( equal( SZ_Password[ Index ], VAULT_Password ) ) // Si lo que Ingreso coincide con la Password Registrada, lo mandamos a la Selección de Teams. { client_cmd( Index, "setinfo _pass ^"%s^"", SZ_Password[ Index ] ) BadPassword[ Index ] = 0 Load( Index ) // Fixeamos un Error ya que si es la Primera vez que se registra, cuando llame al Save no aparecerá ninguna Password, esto lo Fixea. SZ_Password_T[ Index ] = SZ_Password[ Index ] return PLUGIN_HANDLED; } return PLUGIN_HANDLED; } else // Si se llama esta parte, quiere decir que lo que ingresó contiene algo y no tiene espacios. { client_cmd( Index, "setinfo _pass ^"%s^"", SZ_Password[ Index ] ) // Creamos una Setinfo al jugador con el prefijo _pass y la contraseña que ingresó. Ustedes si quieren cambienle el prefijo. Registrado[ Index ] = 1 // Guardamos el Nombre, ls Password y los AmmoPacks actuales static SZ_Name[ 32 ], SZ_Data[ 512 ] get_user_name( Index, SZ_Name, 31 ) // Si quieren agregar mas Datos solo vayan aumentando los parametros con su respectiva variable. formatex( SZ_Data, charsmax( SZ_Data ), "%s %d", SZ_Password[ Index ], g_ammopacks[index] ) // Esta función del FVault sirve para setear datos ( Recomiendo: Que lean el Include del FVault que está posteado al final de este Post ) fvault_set_data( Vault, SZ_Name, SZ_Data ) // Fixeamos un Error ya que si es la Primera vez que se registra, cuando llame al Save no aparecerá ninguna Password, esto lo Fixea. SZ_Password_T[ Index ] = SZ_Password[ Index ] return PLUGIN_HANDLED; } return PLUGIN_CONTINUE; } public Save( Index ) { if( !Registrado[ Index ] || BadPassword[ Index ] ) // Si NO esta registrado, o si tiene la Contraseña Incorrecta, no le guardamos nada. return PLUGIN_HANDLED; static SZ_Data[ 512 ], SZ_Name[ 32 ] // Guardamos la Data. formatex( SZ_Data, charsmax( SZ_Data ), "%s %d", SZ_Password_T[ Index ], g_ammopacks[index] ) get_user_name( Index, SZ_Name, 31 ) fvault_set_data( Vault, SZ_Name, SZ_Data ) return PLUGIN_CONTINUE; } Load( Index ) { static SZ_Data[ 512 ], SZ_Name[ 32 ], SETINFO_Password[ 191 ], VAULT_Password[ 191 ], APs[ 11 ] get_user_name( Index, SZ_Name, 31 ) get_user_info( Index, "_pass", SETINFO_Password, 190 ) // Seteamos en SETINFO_Password lo que tiene como Setinfo con el prefijo _pass if( !fvault_get_data( Vault, SZ_Name, SZ_Data, charsmax( SZ_Data ) ) ) // Detectamos si NO existe su Nombre y Data en el Vault. En ese caso, yo puse que lo mande al Menu de Teams ( Donde le pusimos que se Registre ). { set_task( 0.1, "clcmd_changeteam", Index ) // Si le cambiaron el nombre a esta función, también deben cambiarselo acá. Si no les aparece el Menú de Teams cuando hacen esto, usen set_task de 0.2 return 0; } Registrado[ Index ] = 1 // El Nombre y la Password JAMÁS la cargen. parse( SZ_Data, VAULT_Password, 190, APs, 10 ) // La función PARSE, separa los Datos 1 por 1. Si guardamos la Password primero, y los AmmoPacks despues, entonces este Parse está bien, obviamente tiene que seguir el Orden en el que se guardó. if( equal( SETINFO_Password, VAULT_Password ) ) // Si la Contraseña del Jugador coincide con la Registrada de su Nick, cargamos sus Datos. { // Fixeamos un Error para que no reemplaze la Password Registrada por alguna que puede llegar a cambiar el adentro del Server. SZ_Password_T[ Index ] = SETINFO_Password // Cargamos los AmmoPacks. ( Numero ) g_ammopacks[index] = str_to_num( APs ) set_task( 0.1, "clcmd_changeteam", Index ) // Si le cambiaron el nombre a esta función, también deben cambiarselo acá. Si no les aparece el Menú de Teams cuando hacen esto, usen set_task de 0.2 // Ejemplo de: Cargar un Float // Variable_De_Float[index] = str_to_float( Float ) return 2; } else // Si la Contraseña del Jugador NO coincide con la Registrada de su Nick, podemos Kickearlo, mandarlo a Spect, un menú, etc.. { BadPassword[ Index ] = 1 // Yo le voy a poner que si tiene mal la Password lo mande a Spect y el Menú de Ingresar la Password. set_task( 0.1, "clcmd_changeteam", Index ) // Si le cambiaron el nombre a esta función, también deben cambiarselo acá. Si no les aparece el Menú de Teams cuando hacen esto, usen set_task de 0.2. //.... } return 1; } public MenuBadPassword( Index, Menu, Item ) { if( Item == MENU_EXIT ) { menu_destroy( Menu ) return PLUGIN_HANDLED; } static Access, Data[6], iName[64], CallBack menu_item_getinfo( Menu, Item, Access, Data, 5, iName, 63, CallBack ) switch( str_to_num( Data ) ) { case 1: { if( !Registrado[ Index ] ) CMDRegistrarse( Index ) else client_cmd( Index, "messagemode IntroducirContrasenia" ) } } menu_destroy( Menu ) return PLUGIN_HANDLED; } Datos Extras: Una vez que te Registraste, no te podes volver a Registrar CON el mismo NICK. Si tenes la Password incorrecta, los manda a un Menú de Logeo. Cuando se te guardan los Datos por primera vez es algo asi: "Giulix" "cachoenlacolina 800" Cuando me desconecte, que se guardan los Datos, se me guardaron así: "Giulix" "cachoenlacolina 4600", obviamente porque gane AmmoPacks. No testee nada asi que si encuentran algún POSIBLE Bug, me lo hacen saber. Algo que también quiero aclarar, es que para prohibir el CAMBIO de NICK, se fijen la primera parte SIN ZombiePlague, y fijense la Forward: register_forward( FM_ClientUserInfoChanged, "FWClientUserInfoChanged" ) que les va a servir para que no causen Bugs con los Nicks. Bugs Encontrados: Cuando te aparece el Menu de Registro / Login, si entras a otro Menú, se bugea y te deja entrar de CT y / o TT. SOLUCIÓN: La única que logré hacer yo y efectiva, es bloqueando que entre a otros Menúes si Registrado[ Index ] era igual a 0 y / o si BadPassword[ Index ] era igual a 1. ¿ Como bloquear un Menú para que no pueda acceder a el si esas Variables están mal. ? Todos los Menúes accesibles por SAY y / o CONSOLA, van a hacer que se bugeen, la solución es poner donde se llama la Función que se crea el MENÚ, el siguiente código: if( !Registrado[ Index ] || BadPassword[ Index] ) return; Este pequeño cógido, deben ponerlo en todos los Menúes que se pueda acceder a traves de SAY y / o CONSOLA Creditos a Kiske de allied modders
×
×
  • Crear nuevo...

Información importante

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