27/06/2014, 10:13 PM (Última modificación: 19/06/2016, 03:55 PM por Destro.)
Para este tutorial vamos a usar la API del Advanced Vault System Advanced Vault System
Código PHP:
#include <amxmodx> #include <adv_vault>
/* Variables que usaremos para guardar/cargar en este ejemplo -------------------------------*/ new g_ammopacks[33] new g_level[33] new g_reset[33] new g_points[33][2] // Los puntos para gastar humanos y zombies new g_kills[33][5] // Los kills acumulados ejemplo:(zombie, humano, survivor, neme, sniper, assasin) new g_habilidad[33][2][6] // [2] (humanos y zombies) [6] (las habilidades) // Supongamos que tenemos un sistema de cuentas (? new g_password[33][20] // la password de la cuenta new g_pj[33][32] // El PJ,Cuenta,Nick,Steamid,IP,HID o lo que quieras usar /*----------------------------------------------------------------------------------------------------------*/
/*Creamos algunas constantes para facilitar la lectura del codigo*/ enum { CAMPO_AMMOPACKS=0, CAMPO_LEVEL, CAMPO_RESET, CAMPO_POINTS, CAMPO_HAB_H, CAMPO_HAB_Z, CAMPO_KILLS, CAMPO_PASSWORD, MAX_FIELDS }
/*En esta variable se guardaran los identificadores de los campos*/ new g_campos[MAX_FIELDS]
/*En esta variable se guardara el identificador del vault abierto*/ /*Nota: ID = Index = Identificador*/ new g_vault
public plugin_init() { /*Abrimos el vault ------------------------*/ g_vault = adv_vault_open("datos_zp", false) /* NOTA: -Si tienen muuuchoossss datos y acceden a ellos muchas veces pongan el ultimo parametro en true mejora el rendimiento g_vault = adv_vault_open("datos_zp", true) */
/*Definimos los campos que usaremos ---------------------------------------------------------*/ /* NOTA: -Cada vez que se actualice un key los campos que no estén actualmente definidos serán removidos. -Se pueden definir mas campos para guardar sin problemas. -Se puede agrandar y achicar el tamaño de los arrays y string en cualquier momento */
/*Iniciamos el vault (Obligatorio luego de terminar de registrar los campos)*/ adv_vault_init(g_vault) }
/* Esta funcion la tienen que llamar cuando quieran guardar los datos. Ejemplo: - Cuando se desconecta - Si ustedes tienen algún sistema de cuentas lo tienen que poner al crear una cuenta. - Y en cualquier otro lugar donde quieran asegurarse que los datos se guardaron. */ funcion_guardar(id) { /*Preparamos el vault para el guardado*/ adv_vault_set_start(g_vault)
/*Configuramos los campos ---------------------------------------------------------------------------------*/ /* NOTA: Supongamos que hay tres campos guardados y solo configuramos uno,los otros dos campos quedan igual. */ adv_vault_set_field(g_vault, g_campos[CAMPO_AMMOPACKS], g_ammopacks[id]) adv_vault_set_field(g_vault, g_campos[CAMPO_LEVEL], g_level[id]) adv_vault_set_field(g_vault, g_campos[CAMPO_RESET], g_reset[id]) adv_vault_set_field(g_vault, g_campos[CAMPO_POINTS], g_points[id]) adv_vault_set_field(g_vault, g_campos[CAMPO_KILLS], g_kills[id]) adv_vault_set_field(g_vault, g_campos[CAMPO_HAB_H], g_habilidad[id][0]) adv_vault_set_field(g_vault, g_campos[CAMPO_HAB_Z], g_habilidad[id][1]) adv_vault_set_field(g_vault, g_campos[CAMPO_PASSWORD], g_password[id]) /*--------------------------------------------------------------------------------------------------------*/
/*Guardamos los campos ----------------*/ adv_vault_set_end(g_vault, 0, g_pj[id]) }
/* Esta funcion la tienen que llamar cuando quieran cargar los datos. Ejemplo: - Cuando entra al juego (client_putinserver) */ funcion_cargar(id) { /*Preparamos el vault para la obtención de los campos*/ if(!adv_vault_get_prepare(g_vault, _, g_pj[id])) { /*No hay datos*/ return }
/*Obtenemos los datos de los campos ------------------------------------------------------------*/ g_ammopacks[id] = adv_vault_get_field(g_vault, g_campos[CAMPO_AMMOPACKS]) g_level[id] = adv_vault_get_field(g_vault, g_campos[CAMPO_LEVEL]) g_reset[id] = adv_vault_get_field(g_vault, g_campos[CAMPO_RESET])
funcion_guardar(id) { /*Preparamos el vault para el guardado*/ adv_vault_set_start(g_vault)
/*Configuramos los campos ---------------------------------------------------------------------------------*/ /* NOTA: Supongamos que hay tres campos guardados y solo configuramos uno,los otros dos campos quedan igual. */ adv_vault_set_field(g_vault, g_campos[CAMPO_AMMOPACKS], g_ammopacks[id]) adv_vault_set_field(g_vault, g_campos[CAMPO_LEVEL], g_level[id]) adv_vault_set_field(g_vault, g_campos[CAMPO_RESET], g_reset[id]) /*--------------------------------------------------------------------------------------------------------*/
/*Guardamos los campos ----------------*/ adv_vault_set_end(g_vault, 0, g_pj[id]) }
funcion_cargar(id) { /*Preparamos el vault para la obtención de los campos*/ if(!adv_vault_get_prepare(g_vault, _, g_pj[id])) { /*No hay datos*/ return } g_ammopacks[id] = adv_vault_get_field(g_vault, g_campos[CAMPO_AMMOPACKS]) g_level[id] = adv_vault_get_field(g_vault, g_campos[CAMPO_LEVEL]) g_reset[id] = adv_vault_get_field(g_vault, g_campos[CAMPO_RESET]) }
y ya puse lo de guardar en client_disconnect y cargar en putinserver.
(05/07/2014, 11:55 PM)LNATIC escribió: Dejo este simple sistema de cuentas por nombre con tu API y guiándome con este tutorial
PD: Excelente aporte Destro
lo descarge lo use como plugin y luego lo adapte ami zp y no me guardo nada ni el password y en plugin si guarda -.- que pasa con mi zp es vercion 1.6.1
advance
(05/07/2014, 11:55 PM)LNATIC escribió: Dejo este simple sistema de cuentas por nombre con tu API y guiándome con este tutorial
PD: Excelente aporte Destro
lo descarge lo use como plugin y luego lo adapte ami zp y no me guardo nada ni el password y en plugin si guarda -.- que pasa con mi zp es vercion 1.6.1
advance
Seguro estas haciendo algo mal, yo lo uso en mi base de un deathrun y funciona de maravilla.
y listo fue facil espero que te sirva si tenes error decime.
Bro!! Agradesco tu tiempo en explicarme pero , el Client_putinserver no lo tengo en mi code , y tampoco el , client_disconnect, empeze con esto hace 2 dias llevo apenas y pues a aprendido solo un 10% y eso es poco pero igual te agradesco el tiempo que dedicaste en explicarme aunque no me a funcionado. xd
en consola me tira este error
L 07/16/2014 - 18:11:19: [AMXX] Module is not a valid library (file "cstrike\addons\amxmodx\modules\adv_vault_get_field_amxx.dll")
L 07/16/2014 - 18:11:19: [AMXX] Plugin "zombie_plague40.amxx" failed to load: Plugin uses an unknown function (name "adv_vault_get_field") - check your modules.in