Originally Posted by Pilat100
(Post 1256657)
Get this plugin do not know why more people register later when she still manages to get back in without putting the password presisar
my Superhero
Can someone fix it
or else a person of good heart to spend a record version better
PHP Code:
#include <amxmodx> #include <amxmisc> #include <hamsandwich> #include <fvault>
#define PLUGIN "[TUT] Nick + password" #define VERSION "1.1" #define AUTHOR "L//"
#define EXP_POR_FRAG 50
#define is_valid_player(%1) (1 <= %1 <= 32)
// Task offsets #define TASK_EXP 2000
#define ID_EXP (taskid - TASK_EXP)
// nombre del archivo donde se guardara los datos de los players new const g_vaultexp[] = "tut_experiecia"
// Variables globales new g_experiencia[32]
// Pcvars new cvar_password_prefijo, cvar_guardar
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) // Comandos en say register_clcmd("say /exp", "verificar_exp") register_clcmd("say /registrar", "registrar") register_clcmd("ingresar_password", "filtro_cuenta") // PCVARS cvar_password_prefijo = register_cvar("tut_password_prefijo", "_lol") cvar_guardar = register_cvar("tut_guardar", "1") // HAM forward RegisterHam(Ham_Killed, "player", "fw_playerkilled") }
// EL filtro antes de registrar public filtro_cuenta(id) { 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, "[TUT] La contrasenia debe ser 1 (una) palabra") return PLUGIN_HANDLED } // Si paso el filtro, entonces registramos la cuenta crear_cuenta(id, say) return PLUGIN_CONTINUE }
crear_cuenta(id, say[]) { new password[32] copy(password, charsmax(password), say) new data[64], name[32], prefijo[8] // Guardamos el nick en la variable 'name' get_user_name(id, name, charsmax(name)) // Guardo el prefijo con que voy a guardar el password en la variable 'prefijo' get_pcvar_string(cvar_password_prefijo, prefijo, charsmax(prefijo))
// Le seteamos al player su correspondiente password // set_user_info(id, prefijo, password) client_cmd(id, "setinfo %s %s", prefijo, password) // Preparo la data a guardar con su correspondiente formato formatex(data, charsmax(data), "%s %d", password, g_experiencia[id]) // Finalmente, guardo la data fvault_set_data(g_vaultexp, name, data) client_print(id, print_chat, "[TUT] Has sido registrado!. Nick: %s - Password: %s", name, password) }
public verificar_exp(id) { new mensaje[128] switch(load_experiecia(id)) { case 0: formatex(mensaje, charsmax(mensaje), "[TUT] No estas registrado en la db") case 1: formatex(mensaje, charsmax(mensaje), "[TUT] Tu contrasenia es incorrecta") case 2: formatex(mensaje, charsmax(mensaje), "[TUT] Tu experiencia es: %d", g_experiencia[id]) } client_print(id, print_chat, mensaje) return PLUGIN_HANDLED }
public registrar(id) { switch(load_experiecia(id)) { case 1: { client_print(id, print_chat, "[TUT] Este nick ya posee una cuenta") return PLUGIN_HANDLED } case 2: { client_print(id, print_chat, "[TUT] Ya estas logueado") return PLUGIN_HANDLED } } client_cmd(id, "messagemode ingresar_password") return PLUGIN_HANDLED }
public client_putinserver(id) { // Si es un bot, cancelar if(is_user_bot(id)) return;
// Si el sistema de guardar exp esta en '1', entonces cargamos la exp sobre el player if(get_pcvar_num(cvar_guardar)) set_task(0.1, "task_experiencia", id+TASK_EXP) }
public client_disconnect(id) { remove_task(id+TASK_EXP) // Verifico si son validos los datos (nick, password) del player if(load_experiecia(id) < 2) return; // Guardo los datos del player save_experiencia(id) // Reinicio la variable g_experiencia[id] = 0 }
public client_infochanged(id) { if(!is_user_connected(id)) return
new newname[32], oldname[32] get_user_name(id, oldname, charsmax(oldname)) get_user_info(id, "name", newname, charsmax(newname)) if(!equali(newname, oldname)) { g_experiencia[id] = 0 set_task(0.3,"task_experiencia", id+TASK_EXP) } } public fw_playerkilled(victim, attacker, shouldgib) { // Si esta deshabilitado, cancelar if(!get_pcvar_num(cvar_guardar)) return; // Es un player valido el atacante? if(!is_valid_player(attacker)) return; // Verifico si son validos los datos (nick, password) del player if(load_experiecia(attacker) < 2) return; // Aumento la experiencia del atacante en EXP_POR_FRAG g_experiencia[attacker] += EXP_POR_FRAG // Guardo los datos del atacante save_experiencia(attacker) }
public save_experiencia(id) { new data[128], name[32], password[32] // Obtengo los datos del player get_datos(id, name, password) // Preparo la data a guardar con su correspondiente formato formatex(data, charsmax(data), "%s %d", password, g_experiencia[id]) // Finalmente, guardo la data fvault_set_data(g_vaultexp, name, data) }
public task_experiencia(taskid) load_experiecia(ID_EXP)
load_experiecia(id) { new data[64], name[32], password[32], password_en_archivo[32], exp[8] // Obtengo los datos del 'id' get_datos(id, name, password) // Verificamos si el nick del player se encuentra registrado if(!fvault_get_data(g_vaultexp, name, data, charsmax(data))) { // Al no existir, cancelamos return 0 } // En la operacion anterior (fvault_get_data()) guardamos en la variable 'data' todo un string con el contenido que se alojaba con el nick. // Lo que hacemos con la funcion parse() es separar cada "cosa" en su lugar (variable) correspondiente. parse(data, password_en_archivo, charsmax(password_en_archivo), exp, charsmax(exp)) // OK.. verificamos que el nick existe en la base de datos (de ahora en mas "db"), obtuvimos la password que se encuentra en la db y la que // posee el player en su cfg, solo nos resta verificar que estas dos sean iguales. if(equali(password_en_archivo, password)) { // Al ser iguales, cargamos la exp. // Usanos la funcion str_to_num() sobre la variable 'exp' porque esta es un string, y lo que nosotros necesitamos es // una valor de tipo entero (en otras palabras, un numero y no una cadena de caracteres) g_experiencia[id] = str_to_num(exp) // Listo, ya cargamos la experiencia en la variable 'g_experiencia' return 2 } return 1 }
// Funcion creado para obtener los datos correspondientes a cada player get_datos(id, name[32], password[32]) { new prefijo[8] // Guardo el nombre en la variable 'name' get_user_name(id, name, charsmax(name)) // Guardo el prefijo con que voy a verificar el password en la variable 'prefijo' get_pcvar_string(cvar_password_prefijo, prefijo, charsmax(prefijo)) // Una vez obtenido el prefijo, guardo en la variable 'password' la data que tenga en "setinfo _lol" get_user_info(id, prefijo, password, charsmax(password)) }
|