BANNED
|
10-25-2009
, 23:09
[ES][ZP][AYUDA] AmmoPacks Banco
|
#1
|
Hola necesito ayuda con lo siguiente:
Primero:
Que se en ves de experiensia como señala el code pase a ser por Niveles o ammo packs ( prefiero que sea guardado por ammo packs ).
Segundo:
Que aquel usuario ingresado al server aparezca el registrador ( osea enves de tener que poner /registrar, salte solo apenas entras al servidor )
Code:
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)) }
Pido que sea por ammo packs mas que todo, ya que cuando uno ingresa al servidor y reconoce sus ammos asume al nivel correspondiente por aquellos ammo packs.
¡Espero que me ayuden y agradezco la atencion!.
|
|