Sistema de logros v2.0 + guardado nfvault
#1
Hola gente de alliedmodders estuve mucho tiempo off por temas de laburo y otras cosas... ahora que me consegui la contraseña del wifi del vecino estare mas activo para ayudarlos en lo que mas pueda.

-Esta vez vengo a aportarles un sistema de logros con 11 logros diferentes que incluye un guardado nfvault por nick/nombre, les deje un par de cosillas explicadas en el codigo si se me paso algo solo diganmelo si no funciona algo tambien diganmelo si detectan algun bug lo mismo y si quieren aportar alguna optimizacion mucho mejor aun para entragar un codigo mas optimo aclaro de una vez que no esta muy optimizado ya que optimizar no es lo mio.

Código PHP:
/************************************************************************************************************************************\
*    antes que nada decirles que esto lo hice pensando en la gente mas nueva que no sabe mucho y quiere tener algunos logros para *
*    mejorar la experiencia de juego... se que no esta optimizado para nada puesto que no conosco bien las tecnicas para una buena*
*    optimizacion, estoy abierto a criticas constructivas sobre cualquier fix a algun bug que yo no alla encontrado o alguna opti_*
*    zación ya que el checkeo de los logros no me gusto para nada como lo hise.                             *
*                                                                                         *
*    bueno... que es esto?                                                             *
*                                                                     *
*    - es un sistema con 11 logros los cuales se especifican en el enum LOGRO_TIPO que ademas contiene un sistema de guardado     *
*      nfvault en el cual los logros se guardan por nombre y se muestran en un motd escribiendo el el say: /logros.               *
*                                                                         *
*    cualquier optimizacion para mejorar el aporte sera muy bien recibida.                                                        *
*                                                                             *
*    disfrutenlo y mas adelante tratare de optimizarlo y agregarle mas logros...                                                  *
*                                                                     *
*    SALUDOS!                                                               *
\************************************************************************************************************************************/
/************************************************************************************************************************************\                                                                         *
*    Changelog:                                                                 *
*          -v1.0: Plugin creado. 10 logros.                                             *
*          -v1.1: Agregado logro por si completa todos los logros | enumeradores para contadores y logros.             *                                 *
*          -v1.2: Agregado sistema de guardado nfvault.                                         *
*          -v1.3: Fix con error en el DeathMsg (estaban mal puesto los contadores en su respectivo checkeo).             *
*          -v1.4: Cambio de menu additem por menu motd... se ve mas atractivo d:                             *
*          -v1.5: Agregada 4 forwards de fakemeta por si se cae el server de 4 formas distintas se guarden los datos. (borrado)         *
*          -v1.6: Pequeños fix's y limpieza de brazaletes que estaban demas.                             *
*          -v1.7: Corregido un error en la data del guardado.                                         *
*          -v1.8: Cambiado Playerkilled por Deathmsg.                                         *
*          -v1.9: Cambiado Client_prethink (engine) por FM_PlayerPrethink (fakemeta) y asi usar un include menos.         *
*          -v2.0: agregado hud sincronizado para evitar que desaparescan huds o no aparesca el mensaje del logro que gano.    *
*             posteo del plugin.                                                     *
\************************************************************************************************************************************/

//includes
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#include <cstrike>
#include <nfvault>

// definimos plugin, version blablabla...
#define PLUGIN "Logros"
#define VERSION "2.0"
#define AUTHOR "3MCy Daimon't~>"

// definimos un par de cosillas mas que nada por comodidad
#define TRUE 1
#define FALSE 0
#define CHECK g_conectado[id] || !is_user_bot(id) || !is_user_hltv(id)
#define LOGROS_MAXIMOS 11

// Enumeradores para saber que logros son y el contador de cada logro
enum LOGRO_TIPO // en este enum asignamos una etiqueta para cada logro y asi hacerlo mas legible
    
LOGRO_KILL_CT 0// mata 200 policias
    
LOGRO_KILL_TT// mata 200 terroristas
    
LOGRO_KILL_CT_RONDA// mata 5 policia en 1 ronda
    
LOGRO_KILL_TT_RONDA// mata 5 terroristas en 1 ronda
    
LOGRO_REVENTADOS// mata 250 ct o tt con escopeta
    
LOGRO_CANGURO// saltar 500 veces
    
LOGRO_AMO_EL_SCROLL//agacharse 500 veces
    
LOGRO_ACUCHILLADO// matar 150 jugadores con cuchillo
    
LOGRO_FRANCOTIRADOR// matar 100 jugadores de headshot
    
LOGRO_QUE_BUEN_SV// Conectarse 25 veces
    
LOGRO_CAZADOR // completa todos los logros
}

enum LOGRO_CONTADOR // en este enum asignamos una etiqueta para cada variable y asi hacer mas legible el codigo.
    
MUERTE_CT 0,
    
MUERTE_TT,
    
MUERTE_RONDA_CT,
    
MUERTE_RONDA_TT,
    
MUERTE_M3,
    
SALTOS,
    
SALTOS_ON,
    
DUCKS,
    
ACUCHILLADOS,
    
HEADSHOTS,
    
CONECCIONES,
    
LOGROS_GANADOS
}
/*-------------*/

// Variables
new Logros[33][LOGRO_TIPO], contador[33][LOGRO_CONTADOR];
new 
g_team_ct[33], g_conectado[33], g_playername[33][32];
new 
g_maxplayers,  g_roundg_msgsync;
new 
logro_completado[] = "logro_ganado.wav" // pueden poner el que quieran va en la carpeta sound

//guardado
new VaultLogros[128], szLogros[180], szKey[30]

public 
plugin_init() { // inicia el plugin
    
register_plugin(PLUGINVERSIONAUTHOR// registramos plugin, version blablabla
    
    
register_clcmd("say /logros""motd_logros"// registramos el comando para mostrarle el motd con los logros disponibles
    
    
register_event("DeathMsg",     "event_deathmsg""a"/* registramos el evento DeathMsg para sumar lo de los logros que lo 
    requieran*/
    
register_event("HLTV",         "ev_roundstart""a""1=0""2=0"/* registramos el evento cuando comiensa la ronda para
    guardar los logros cuando comiensa la misma*/
    
    
RegisterHam(Ham_Spawn,         "player",     "Ham_PlayerSpawn"1/* registramos el Ham_Spawn (cuando respawnea el player)
    para setear algunas condiciones y setear el team en una variable */
    
register_forward(FM_PlayerPreThink,     "PlayerPreThink"/* registramos la forward prethink para setear y checkear los saltos
    y los ducks*/
    
    
g_maxplayers get_maxplayers() // definimos la cantidad maxima de players en una variable
    
g_msgsync CreateHudSyncObj()  /* creamos un hud sincronizado para que no desaparescan los otros o simplemente no aparescan
    los mensajes de aviso de que gano logros */
    
    
nfv_file("Logros"VaultLogroscharsmax(VaultLogros)) // creamos el archivo en la carpeta data/nfvault con el nombre Logros 
}

public 
plugin_precache() { engfunc(EngFunc_PrecacheSoundlogro_completado); } // precacheamos un sonidito para cuando gane un logro

public client_putinserver(id) {// el cliente entro en el server
    
g_conectado[id] = TRUE// seteamos la variable en 1 osea en verdadero 
    
g_round TRUE // checkeamos la variable round en 1 para checkear los logros de matar en 1 ronda
    
get_user_nameidg_playernameid ], charsmaxg_playername[ ] ) ); /* definimos el nombre del jugador en la variable 
    g_playername*/
    
Cargar(id// cargamos datos
}

public 
client_disconnect(id) { // el cliente se desconecto
    
g_conectado[id] = FALSE // seteamos la variable en falso ya que se desconectó
    
g_round FALSE // seteamos la variable round en falso ya que se desconectó no puede hacer logros
    
    /*checkeamos si no cumplio el logro seteamos los contadores de los logros matar x en x ronda en 0*/
    
if(Logros[id][LOGRO_KILL_TT_RONDA] != TRUE) { contador[id][MUERTE_RONDA_CT] = FALSE; } 
    if(
Logros[id][LOGRO_KILL_CT_RONDA] != TRUE) { contador[id][MUERTE_RONDA_TT] = FALSE; }
    
    if(
CHECK) { Guardar(id); } // checkeamos lo del define y guardamos
}

public 
ev_roundstart() { // cuando la ronda inicia
    
for(new id 1id <= g_maxplayersid++) // un loop para obtener todos los players
        
if(CHECK) { Guardar(id); } // checkeamos lo del define y guardamos
}


public 
motd_logros(id) { // esto no hace falta explicarlo ya que es un motd donde se muestran los logros, lo requerido y la cantidad
    
new tempstring[100], motd[1024];

    
format(motd,1024,"<html><body bgcolor=^"#000000^"><font size=^"2^" face=^"verdana^" color=^"#5CACEE^"><strong><b>Archivos del Jugador: %s</strong></b><br><br>", g_playername[id])
    
    
format(tempstring100"[Cazador de Logros - %d de %d Logros completados]<br><br>",contador[id][LOGROS_GANADOS], LOGROS_MAXIMOS-1
    
add(motd,1024,tempstring);
    
/*-----------------------------------------------------------------------------------------------------------------*/
    
if (Logros[id][LOGRO_KILL_TT] == TRUE)
        
format(tempstring,100,"Agente especial         - 200/200 [COMPLETADO]<br>")
    else
        
format(tempstring,100,"Agente especial        - |Matar 200 terroristas| - %d/200<br>"contador[id][MUERTE_TT])
    
add(motd,1024,tempstring);
    
/*-----------------------------------------------------------------------------------------------------------------*/
    
if (Logros[id][LOGRO_KILL_CT] == TRUE)
        
format(tempstring,100,"Come plomo, policia...    - 200/200 [COMPLETADO]<br>")
    else
        
format(tempstring,100,"Come plomo, policia...    - |Matar 200 policias| - %d/200<br>"contador[id][MUERTE_CT])
    
add(motd,1024,tempstring);
    
/*-----------------------------------------------------------------------------------------------------------------*/
    
if (Logros[id][LOGRO_KILL_TT_RONDA] == TRUE)
        
format(tempstring,100,"Me gusta mi trabajo    - 5/5 [COMPLETADO]<br>")
    else
        
format(tempstring,100,"Me gusta mi trabajo    - |Matar 5 terroristas en 1 ronda| - %d/5<br>"contador[id][MUERTE_RONDA_TT])
    
add(motd,1024,tempstring);
    
/*-----------------------------------------------------------------------------------------------------------------*/
    
if (Logros[id][LOGRO_KILL_CT_RONDA] == TRUE)
        
format(tempstring,100,"Ha este paso... EL MUNDO SERA NUESTRO    - 5/5 [COMPLETADO]<br>")
    else
        
format(tempstring,100,"Ha este paso... EL MUNDO SERA NUESTRO    - |Matar 5 policias en 1 ronda| - %d/5<br>"contador[id][MUERTE_RONDA_CT])
    
add(motd,1024,tempstring);
    
/*------------------------------------------------------------------------------------------------------------------*/
    
if (Logros[id][LOGRO_REVENTADOS] == TRUE)
        
format(tempstring,100,"Reventados se ven mejor        - 250/250 [COMPLETADO]<br>")
    else
        
format(tempstring,100,"Reventados se ven mejor        - |Matar 250 ct o tt con escopeta| - %d/250<br>"contador[id][MUERTE_M3])
    
add(motd,1024,tempstring);
    
/*------------------------------------------------------------------------------------------------------------------*/
    
if (Logros[id][LOGRO_CANGURO] == TRUE)
        
format(tempstring,100,"Los canguros me aman         - 500/500 [COMPLETADO]<br>")
    else
        
format(tempstring,100,"Los canguros me aman         - |Saltar 500 veces| - %d/500<br>"contador[id][SALTOS])
    
add(motd,1024,tempstring);
    
/*-------------------------------------------------------------------------------------------------------------------*/
    
if (Logros[id][LOGRO_AMO_EL_SCROLL] == TRUE)
        
format(tempstring,100,"Amo el scroll        - 500/500 [COMPLETADO]<br>")
    else
        
format(tempstring,100,"Amo el scroll        - |Agacharse 500 veces| - %d/500<br>"contador[id][DUCKS])
    
add(motd,1024,tempstring);
    
/*-------------------------------------------------------------------------------------------------------------------*/
    
if (Logros[id][LOGRO_ACUCHILLADO] == TRUE)
        
format(tempstring,100,"Cuchillito afilado :D    - 200/200 [COMPLETADO]<br>")
    else
        
format(tempstring,100,"Cuchillito afilado :D    - |Mata 200 jugadores con cuchillo| - %d/200<br>"contador[id][ACUCHILLADOS])
    
add(motd,1024,tempstring);
        
/*-------------------------------------------------------------------------------------------------------------------*/
    
if (Logros[id][LOGRO_FRANCOTIRADOR] == TRUE)
        
format(tempstring,100,"Soy un francotirador!    - 100/100 [COMPLETADO]<br>")
    else
        
format(tempstring,100,"Soy un francotirador!     - |mata 100 ct o tt de headshot| - %d/25<br>"contador[id][HEADSHOTS])
    
add(motd,1024,tempstring);
    
/*-------------------------------------------------------------------------------------------------------------------*/
    
if (Logros[id][LOGRO_QUE_BUEN_SV] == TRUE)
        
format(tempstring,100,"Que buen mod!        - 25/25 [COMPLETADO]<br>")
    else
        
format(tempstring,100,"Que buen mod!     - |?????????| - %d/25<br>"contador[id][CONECCIONES])
    
add(motd,1024,tempstring);
    
/*-------------------------------------------------------------------------------------------------------------------*/
    
    /* se preguntaran por que el logro "Que buen mod!" aparece con ??????? es para que los users no se dediquen a salir y entrar
    del server con el fin de terminar este logro rapidamente*/
    
    
add(motd,1024,"</font></body></html>")
    
    
show_motd(id,motd,"Progreso logros");
    
}

public 
event_deathmsg() { // evento cuando muere la persona
    
static idid read_data(1// definimos id como read_data(1) osea atacante
    
static victimvictim read_data(2// definimos victim como read_data(2) osea victima
    
static headshotheadshot read_data(3// definimos headshot como read_data(3) osea si fue muerte por headshot
    
static arma[24]; get_killer_weapon(idpev(victimpev_dmg_inflictor), arma23/* con el stock get_killer_weapon
    obtenemos en la variable arma la arma con la cual mató*/
    
    
if(!is_user_connected(id) || victim == id// si no esta conectado o si la vitima es igual a id
    
return HAM_IGNORED// retorna sin ocurrir nada

    /*se checkean las condiciones correspondientes y se checkea si cumplio el logro*/
    
if(headshot) { contador[id][HEADSHOTS]++, chequear_logros(id9); } // logro francotirador
    
    
if(g_team_ct[id]) { contador[id][MUERTE_TT]++, chequear_logros(id1); } // logro super agente 
    
else { contador[id][MUERTE_CT]++, chequear_logros(id2); } // logro come plomo... policia
    
    
if(equalarma"m3" )) { contador[id][MUERTE_M3]++, chequear_logros(id5); } // logro reventados
    
    
if(equalarma"knife" )) { contador[id][ACUCHILLADOS]++, chequear_logros(id8); } // logro acuchillados
    
    
if(g_team_ct[id] && g_round == TRUE) { contador[id][MUERTE_RONDA_TT]++, chequear_logros(id3); } // logro agente especial
    
else { contador[id][MUERTE_RONDA_CT]++, chequear_logros(id4); } // logro ha este paso... EL MUNDO SERA NUESTRO
    
    
if(CHECK) { Guardar(id); } // checkeamos lo del define y guardamos
     
    
return PLUGIN_HANDLED// retornamos sin ocurrir nada
}

public 
Ham_PlayerSpawn(id) { // cuando el jugador respawnea
    
if(is_user_alive(id)) { // si esta vivo el jugador
        /*checkeamos si no cumplio el logro seteamos los contadores de los logros matar x en x ronda(s) en 0*/ 
        
if(Logros[id][LOGRO_KILL_TT_RONDA] != TRUE) { contador[id][MUERTE_RONDA_CT] = FALSE; }
        if(
Logros[id][LOGRO_KILL_CT_RONDA] != TRUE) { contador[id][MUERTE_RONDA_TT] = FALSE; }
        
        
g_round TRUE // seteamos la variable round en verdadero para checkear los logros de matar x en x ronda(s)
        
g_team_ct[id] = (cs_get_user_team(id) == CS_TEAM_CT TRUE FALSE/* obtenemos en la variable g_team_ct si es 
        policia si no lo es osea !g_team_ct es terrorista*/
        
        // print que te avisa que tiene sistema de logros y como abrir el menu :D
        
client_print(idprint_chat"este server corre con: sistema de logros v2.0 (escribe /logros para el menu)")
    }
}

public 
PlayerPreThink(id) {// evento de efectos en el player
    
if(!is_user_alive(id)) return; // si no esta vivo retorna
        
    
if((pev(idpev_button) & IN_DUCK) && !(pev(idpev_oldbuttons) & IN_DUCK)) {// si el boton presionado es el de duck (ctrl)
        
contador[id][DUCKS]++; // logro amo del scroll
        
chequear_logros(id7// checkeamos logro correspondiente
    
}
    
    if(
pev(idpev_flags) & FL_ONGROUND// deverdad no lo entiendo ya que no es codigo mio pero si es necesario
    
contador[id][SALTOS_ON] = true;
    else 
contador[id][SALTOS_ON] = false;

    if((
pev(idpev_button) & IN_JUMP) && !(pev(idpev_oldbuttons) & IN_JUMP) && contador[id][SALTOS_ON]) {// si el boton presionado es el de salto (espacio)
        
contador[id][SALTOS]++; // logro canguro
        
contador[id][SALTOS_ON] = false;
        
chequear_logros(id6// checkeamos logro correspondiente
    
}
}

public 
chequear_logros(idsulogro) { /* public para checkear logros este es el que no me gusto para nada si alguien sabe optimizarlo
si puede digalo para un aporte mas optimo ( soy nulo optimizando :c ) */
    
new rgblogroganado FALSE /* variables r, g, b para setear numeros a los colores de los mensages yo los puse random ustede
    ponganle el que quieran y variable logroganado para sabes si gano el logro y asi setearle unas condiciones y repetirlas tanto*/
    
random_num(1255//se seteara un color rojo al azar entre 1 y 255
    
random_num(1255//se seteara un color verde al azar entre 1 y 255
    
random_num(1255// se seteara un color azul al azar entre 1 y 255
    
switch(sulogro) {
        case 
1: {// esto lo explicare 1 ves ya que para todas las opciones es lo mismo :c
            
if (contador[id][MUERTE_TT] == 200) {// si el valor de el contador es igual a la cantidad requerida
                
switch (Logros[id][LOGRO_KILL_TT]) {/* hacemos un switch del logro ( no se si sera necesario pero 
                funciona corriganme si no es necesario*/
                    
case FALSE: {// opcion false osea 0      
                        
Logros[id][LOGRO_KILL_TT] = TRUE// seteamos el logro en true osea 1 ya que lo ganó
                        
logroganado TRUE /* seteamos la variable logroganado en verdadero para setear 
                        algunas condiciones*/ 
                        
set_hudmessage(rgb, -1.00.3023.04.00.020.022)  //seteamos la posicion del hud
                        
ShowSyncHudMsg(idg_msgsync"Logro completado: Agente especial!"); /* mostramos el
                        mensaje que gano el logro correspondiente
                        
                        y lamentablemente como soy imbecil y no se optimizar es asi con todos los cases :c*/
                    
}
                }          
            }
        }
        case 
2: {
            if (
contador[id][MUERTE_CT] == 200) {
                switch (
Logros[id][LOGRO_KILL_CT]) {
                    case 
FALSE: {
                        
Logros[id][LOGRO_KILL_CT] = TRUE;
                        
logroganado TRUE
                        set_hudmessage
(rgb, -1.00.3023.04.00.020.022)
                        
ShowSyncHudMsg(idg_msgsync"Logro completado: Come plomo, policia...!");
                    }
                }          
            }
        }
        case 
3: {
            if (
contador[id][MUERTE_RONDA_TT] == 5) {
                switch (
Logros[id][LOGRO_KILL_TT_RONDA]) {
                    case 
FALSE: {
                        
Logros[id][LOGRO_KILL_TT_RONDA] = TRUE;
                        
logroganado TRUE
                        set_hudmessage
(rgb, -1.00.3023.04.00.020.022)
                        
ShowSyncHudMsg(idg_msgsync"Logro completado: Me gusta mi trabajo");
                    }
                }          
            }
        }
        case 
4: {
            if (
contador[id][MUERTE_RONDA_CT] == 5) {
                switch (
Logros[id][LOGRO_KILL_CT_RONDA]) {
                    case 
FALSE: {
                        
Logros[id][LOGRO_KILL_CT_RONDA] = TRUE;
                        
logroganado TRUE
                        set_hudmessage
(rgb, -1.00.3023.04.00.020.022)
                        
ShowSyncHudMsg(idg_msgsync"Logro completado: Ha este paso... EL MUNDO SERA NUESTRO!");
                    }
                }          
            }
        }
        case 
5: {
            if (
contador[id][MUERTE_M3] == 250) {
                switch (
Logros[id][LOGRO_REVENTADOS]) {
                    case 
FALSE: {
                        
Logros[id][LOGRO_REVENTADOS] = TRUE;
                        
logroganado TRUE
                        set_hudmessage
(rgb, -1.00.3023.04.00.020.022)
                        
ShowSyncHudMsg(idg_msgsync"Logro completado: Reventados se ven mejor!");
                    }
                }          
            }
        }
        case 
6: {
            if (
contador[id][SALTOS] == 500) {
                switch (
Logros[id][LOGRO_CANGURO]) {
                    case 
FALSE: {
                        
Logros[id][LOGRO_CANGURO] = TRUE;
                        
logroganado TRUE
                        set_hudmessage
(rgb, -1.00.3023.04.00.020.022)
                        
ShowSyncHudMsg(idg_msgsync"Logro completado: Los canguros me aman!");
                    }
                }          
            }
        }
        case 
7: {
            if (
contador[id][DUCKS] == 500) {
                switch (
Logros[id][LOGRO_AMO_EL_SCROLL]) {
                    case 
FALSE: {
                        
Logros[id][LOGRO_AMO_EL_SCROLL] = TRUE;
                        
logroganado TRUE
                        set_hudmessage
(rgb, -1.00.3023.04.00.020.022)
                        
ShowSyncHudMsg(idg_msgsync"Logro completado: Amo del scroll!");
                    }
                }          
            }
        }
        case 
8: {
            if (
contador[id][ACUCHILLADOS] == 150) {
                switch (
Logros[id][LOGRO_ACUCHILLADO]) {
                    case 
FALSE: {
                        
Logros[id][LOGRO_ACUCHILLADO] = TRUE;
                        
logroganado TRUE
                        set_hudmessage
(rgb, -1.00.3023.04.00.020.022)
                        
ShowSyncHudMsg(idg_msgsync"Logro completado: Cuchillito afilado :D!");
                    }
                }          
            }
        }
        case 
9: {
            if (
contador[id][HEADSHOTS] == 100) {
                switch (
Logros[id][LOGRO_FRANCOTIRADOR]) {
                    case 
FALSE: {
                        
Logros[id][LOGRO_FRANCOTIRADOR] = TRUE;
                        
logroganado TRUE
                        set_hudmessage
(rgb, -1.00.3023.04.00.020.022)
                        
ShowSyncHudMsg(idg_msgsync"Logro completado: Soy un francotirador!");
                    }
                }          
            }
        }
        case 
10: {
            if (
contador[id][CONECCIONES] == 25) {
                switch (
Logros[id][LOGRO_QUE_BUEN_SV]) {
                    case 
FALSE: {
                        
Logros[id][LOGRO_QUE_BUEN_SV] = TRUE;
                        
logroganado TRUE
                        set_hudmessage
(rgb, -1.00.3023.04.00.020.022)
                        
ShowSyncHudMsg(idg_msgsync"Logro completado: Que buen server!^nConcreta 25 conecciones ");
                    }
                }          
            }
        }
        case 
11: {
            if (
contador[id][LOGROS_GANADOS] == LOGROS_MAXIMOS-1) {
                switch (
Logros[id][LOGRO_QUE_BUEN_SV]) {
                    case 
FALSE: {
                        
Logros[id][LOGRO_QUE_BUEN_SV] = TRUE;
                        
logroganado TRUE
                        set_hudmessage
(rgb, -1.00.3023.04.00.020.022)
                        
ShowSyncHudMsg(idg_msgsync"Logro completado: Cazador de logros!^ndesbloquea todos los logros!");
                    }
                }          
            }
        }
    }
    if(
logroganado) { // si la variable es verdadera osea si gano el logro (si quieren dar alguna ganancia coloquenla aquí)
        
client_cmd(id"spk %s"logro_completado); // mandamos un sonidito
        
contador[id][LOGROS_GANADOS]++, chequear_logros(id11// agregamos el logro ganado y lo checkeamos
        
if(CHECK) { Guardar(id); } // checkeamos lo del define y guardamos
        
        
logroganado FALSE // seteamos la variable en falso ya que ya se le setearon las condiciones mencionadas al logro ganado
    
}
}

Guardar(id) { // funcion para guardar los datos de los usuarios
    
formatex(szKeycharsmax(szKey), "data_logros"// Le damos formato a szKey con el nombre "data_logros" para luego usarlo
    /* Lo mismo aquí pero con szData pero con la diferencia que aquí le seteamos el valor actual de cada variable.*/
    
formatex(szLogroscharsmax(szLogros), "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d"contador[id][MUERTE_CT], contador[id][MUERTE_TT], contador[id][MUERTE_RONDA_CT],
    
contador[id][MUERTE_RONDA_TT], contador[id][MUERTE_M3], contador[id][SALTOS], contador[id][DUCKS], contador[id][ACUCHILLADOS], contador[id][HEADSHOTS], contador[id][CONECCIONES], contador[id][LOGROS_GANADOS],
    
Logros[id][LOGRO_KILL_CT], Logros[id][LOGRO_KILL_TT], Logros[id][LOGRO_KILL_CT_RONDA], Logros[id][LOGRO_KILL_TT_RONDA], Logros[id][LOGRO_REVENTADOS],
    
Logros[id][LOGRO_CANGURO], Logros[id][LOGRO_AMO_EL_SCROLL], Logros[id][LOGRO_ACUCHILLADO], Logros[id][LOGRO_FRANCOTIRADOR], Logros[id][LOGRO_QUE_BUEN_SV], Logros[id][LOGRO_CAZADOR])
    
    
nfv_set_data(VaultLogrosszKeyg_playername[id], szLogros// Seteamos la key, nombre del usuario y la data
}

Cargar(id) { // funcion para cargar los datos de los usuarios
    
new g_load_c1[25], g_load_c2[25], g_load_c3[25], g_load_c4[25], g_load_c5[25], g_load_c6[25], g_load_c7[25], g_load_c8[25],
    
g_load_c9[25], g_load_c10[25], g_load_c11[25], g_load_l1[25], g_load_l2[25], g_load_l3[25], g_load_l4[25], g_load_l5[25], g_load_l6[25],
    
g_load_l7[25], g_load_l8[25], g_load_l9[25], g_load_l10[25], g_load_l11[25];
    
formatex(szKeycharsmax(szKey), "data_logros"// le damos un formato a szKey con el nombre data_logros para usarlo mas abajo
    
    
if(!nfv_get_data(VaultLogrosszKeyg_playername[id], szLogrossizeof(szLogros) - 1)) return; /* si no existe la data
    y la key o si no puede obtenerlos retorna*/
   
    /* separamos los datos correspondientes y los guardamos cada cual con su variable */
    
parse(szLogrosg_load_c1charsmax(g_load_c1), g_load_c2charsmax(g_load_c2), g_load_c3charsmax(g_load_c3),
    
g_load_c4charsmax(g_load_c4), g_load_c5charsmax(g_load_c5), g_load_c6charsmax(g_load_c6), g_load_c7charsmax(g_load_c7),
    
g_load_c8charsmax(g_load_c8), g_load_c9charsmax(g_load_c9), g_load_c10charsmax(g_load_c10), g_load_c11charsmax(g_load_c11), g_load_l1charsmax(g_load_l1),
    
g_load_l2charsmax(g_load_l2), g_load_l3charsmax(g_load_l3), g_load_l4charsmax(g_load_l4), g_load_l5charsmax(g_load_l5),
    
g_load_l6charsmax(g_load_l6), g_load_l7charsmax(g_load_l7), g_load_l8charsmax(g_load_l8), g_load_l9charsmax(g_load_l9), 
    
g_load_l10charsmax(g_load_l10), g_load_l11charsmax(g_load_l11))
   
    
/* pasamos de string a numero dandole los datos del data */
    
contador[id][MUERTE_CT] = str_to_num(g_load_c1)
    
contador[id][MUERTE_TT] = str_to_num(g_load_c2)
    
contador[id][MUERTE_RONDA_CT] = str_to_num(g_load_c3)
    
contador[id][MUERTE_RONDA_TT] = str_to_num(g_load_c4)
    
contador[id][MUERTE_M3] = str_to_num(g_load_c5)
    
contador[id][SALTOS] = str_to_num(g_load_c6)
    
contador[id][DUCKS] = str_to_num(g_load_c7)
    
contador[id][ACUCHILLADOS] = str_to_num(g_load_c8)
    
contador[id][HEADSHOTS] = str_to_num(g_load_c9)
    
contador[id][CONECCIONES] = str_to_num(g_load_c10)
    
contador[id][LOGROS_GANADOS] = str_to_num(g_load_c11)
    
    
Logros[id][LOGRO_KILL_CT] = str_to_num(g_load_l1)
    
Logros[id][LOGRO_KILL_TT] = str_to_num(g_load_l2)
    
Logros[id][LOGRO_KILL_CT_RONDA] = str_to_num(g_load_l3)
    
Logros[id][LOGRO_KILL_TT_RONDA] = str_to_num(g_load_l4)
    
Logros[id][LOGRO_REVENTADOS] = str_to_num(g_load_l5)
    
Logros[id][LOGRO_CANGURO] = str_to_num(g_load_l6)
    
Logros[id][LOGRO_AMO_EL_SCROLL] = str_to_num(g_load_l7)
    
Logros[id][LOGRO_ACUCHILLADO] = str_to_num(g_load_l8)
    
Logros[id][LOGRO_FRANCOTIRADOR] = str_to_num(g_load_l9)
    
Logros[id][LOGRO_QUE_BUEN_SV] = str_to_num(g_load_l10)
    
Logros[id][LOGRO_CAZADOR] = str_to_num(g_load_l11)
    
    
contador[id][CONECCIONES]++ // agregamos una coneccion
    
chequear_logros(id10// checkeamos el logro para saver si cumplio con las conecciones correspondientes


stock get_killer_weapon(killerinflictorretVar[], retLen) { // este stock no es mio pero sirve para obtener el arma con la que mató 
    
static killer_weapon_name[32]; killer_weapon_name "world"
    if (
pev_valid(killer) && (pev(killerpev_flags) & FL_CLIENT)) {
        if (
pev_valid(inflictor)) {
            if (
inflictor == killer) {
                new 
weapon get_user_weapon(killer);
                
get_weaponname(weaponkiller_weapon_name31);
            }
            else 
pev(inflictorpev_classnamekiller_weapon_name31);
        }
    }
    else {
        if (
pev_valid(killer)) pev(inflictorpev_classnamekiller_weapon_name31);
        else if (
killer == FALSEkiller_weapon_name "worldspawn";
    }
    if (
equal(killer_weapon_name"weapon_"7))
    
format(killer_weapon_name31"%s"killer_weapon_name[7]);
    else if (
equal(killer_weapon_name"monster_"8))
    
format(killer_weapon_name31"%s"killer_weapon_name[8]);
    else if (
equal(killer_weapon_name"func_"5))
    
format(killer_weapon_name31"%s"killer_weapon_name[5]);
    
formatex(retVarretLen"%s"killer_weapon_name);
}

/* Bueno creo que no me falto explicar nada si me equivoque en algo diganmelo para no generar confusiones y repito lo hise para los 
que no saben mucho o son muy nuevos ya que vi que se estaba pidiendo arto SALUDOS!!!*/ 

tambien les adjunto un sonidito para cuando gane un logro. ustedes pueden poner otro si lo desean


.rar   sonidito.rar (Tamaño: 44.52 KB / Descargas: 258)
Responder


Mensajes en este tema
Sistema de logros v2.0 + guardado nfvault - por 3mcy daimon't - 06/03/2014, 06:23 PM

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)