06/03/2014, 06:23 PM
(Última modificación: 11/03/2014, 03:13 PM por 3mcy daimon't.)
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.
tambien les adjunto un sonidito para cuando gane un logro. ustedes pueden poner otro si lo desean
sonidito.rar (Tamaño: 44.52 KB / Descargas: 258)
-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_round, g_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(PLUGIN, VERSION, AUTHOR) // 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", VaultLogros, charsmax(VaultLogros)) // creamos el archivo en la carpeta data/nfvault con el nombre Logros
}
public plugin_precache() { engfunc(EngFunc_PrecacheSound, logro_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_name( id, g_playername[ id ], charsmax( g_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 = 1; id <= g_maxplayers; id++) // 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(tempstring, 100, "[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 id; id = read_data(1) // definimos id como read_data(1) osea atacante
static victim; victim = read_data(2) // definimos victim como read_data(2) osea victima
static headshot; headshot = read_data(3) // definimos headshot como read_data(3) osea si fue muerte por headshot
static arma[24]; get_killer_weapon(id, pev(victim, pev_dmg_inflictor), arma, 23) /* 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(id, 9); } // logro francotirador
if(g_team_ct[id]) { contador[id][MUERTE_TT]++, chequear_logros(id, 1); } // logro super agente
else { contador[id][MUERTE_CT]++, chequear_logros(id, 2); } // logro come plomo... policia
if(equal( arma, "m3" )) { contador[id][MUERTE_M3]++, chequear_logros(id, 5); } // logro reventados
if(equal( arma, "knife" )) { contador[id][ACUCHILLADOS]++, chequear_logros(id, 8); } // logro acuchillados
if(g_team_ct[id] && g_round == TRUE) { contador[id][MUERTE_RONDA_TT]++, chequear_logros(id, 3); } // logro agente especial
else { contador[id][MUERTE_RONDA_CT]++, chequear_logros(id, 4); } // 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(id, print_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(id, pev_button) & IN_DUCK) && !(pev(id, pev_oldbuttons) & IN_DUCK)) {// si el boton presionado es el de duck (ctrl)
contador[id][DUCKS]++; // logro amo del scroll
chequear_logros(id, 7) // checkeamos logro correspondiente
}
if(pev(id, pev_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(id, pev_button) & IN_JUMP) && !(pev(id, pev_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(id, 6) // checkeamos logro correspondiente
}
}
public chequear_logros(id, sulogro) { /* 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 r, g, b, logroganado = 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*/
r = random_num(1, 255) //se seteara un color rojo al azar entre 1 y 255
g = random_num(1, 255) //se seteara un color verde al azar entre 1 y 255
b = random_num(1, 255) // 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(r, g, b, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2) //seteamos la posicion del hud
ShowSyncHudMsg(id, g_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(r, g, b, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2)
ShowSyncHudMsg(id, g_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(r, g, b, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2)
ShowSyncHudMsg(id, g_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(r, g, b, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2)
ShowSyncHudMsg(id, g_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(r, g, b, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2)
ShowSyncHudMsg(id, g_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(r, g, b, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2)
ShowSyncHudMsg(id, g_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(r, g, b, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2)
ShowSyncHudMsg(id, g_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(r, g, b, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2)
ShowSyncHudMsg(id, g_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(r, g, b, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2)
ShowSyncHudMsg(id, g_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(r, g, b, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2)
ShowSyncHudMsg(id, g_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(r, g, b, -1.0, 0.30, 2, 3.0, 4.0, 0.02, 0.02, 2)
ShowSyncHudMsg(id, g_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(id, 11) // 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(szKey, charsmax(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(szLogros, charsmax(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(VaultLogros, szKey, g_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(szKey, charsmax(szKey), "data_logros") // le damos un formato a szKey con el nombre data_logros para usarlo mas abajo
if(!nfv_get_data(VaultLogros, szKey, g_playername[id], szLogros, sizeof(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(szLogros, g_load_c1, charsmax(g_load_c1), g_load_c2, charsmax(g_load_c2), g_load_c3, charsmax(g_load_c3),
g_load_c4, charsmax(g_load_c4), g_load_c5, charsmax(g_load_c5), g_load_c6, charsmax(g_load_c6), g_load_c7, charsmax(g_load_c7),
g_load_c8, charsmax(g_load_c8), g_load_c9, charsmax(g_load_c9), g_load_c10, charsmax(g_load_c10), g_load_c11, charsmax(g_load_c11), g_load_l1, charsmax(g_load_l1),
g_load_l2, charsmax(g_load_l2), g_load_l3, charsmax(g_load_l3), g_load_l4, charsmax(g_load_l4), g_load_l5, charsmax(g_load_l5),
g_load_l6, charsmax(g_load_l6), g_load_l7, charsmax(g_load_l7), g_load_l8, charsmax(g_load_l8), g_load_l9, charsmax(g_load_l9),
g_load_l10, charsmax(g_load_l10), g_load_l11, charsmax(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(id, 10) // checkeamos el logro para saver si cumplio con las conecciones correspondientes
}
stock get_killer_weapon(killer, inflictor, retVar[], 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(killer, pev_flags) & FL_CLIENT)) {
if (pev_valid(inflictor)) {
if (inflictor == killer) {
new weapon = get_user_weapon(killer);
get_weaponname(weapon, killer_weapon_name, 31);
}
else pev(inflictor, pev_classname, killer_weapon_name, 31);
}
}
else {
if (pev_valid(killer)) pev(inflictor, pev_classname, killer_weapon_name, 31);
else if (killer == FALSE) killer_weapon_name = "worldspawn";
}
if (equal(killer_weapon_name, "weapon_", 7))
format(killer_weapon_name, 31, "%s", killer_weapon_name[7]);
else if (equal(killer_weapon_name, "monster_", 8))
format(killer_weapon_name, 31, "%s", killer_weapon_name[8]);
else if (equal(killer_weapon_name, "func_", 5))
format(killer_weapon_name, 31, "%s", killer_weapon_name[5]);
formatex(retVar, retLen, "%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
sonidito.rar (Tamaño: 44.52 KB / Descargas: 258)