Jump to content
  • ¡Hola, Invitado! Únete a nuestra comunidad y construyamos juntos algo increíble.

    ¡Bienvenido a nuestra comunidad! Al unirte, formarás parte de una comunidad apasionada por MAPPING. Para participar activamente, simplemente haz clic en el botón ‘Conectarse’ o ‘Registrarse’. Una vez registrado, podrás publicar mensajes, compartir tus experiencias y explorar los diversos foros disponibles. ¡Esperamos verte pronto y compartir momentos increíbles juntos!

[TUT] Niveles por macro

Valorar este tema


Publicaciones recomendadas

Publicado

Nombre: Niveles por macro

Author: Metrikcz

Imágenes: No hay...

Fuente: [TUT] Niveles por macro

 

Resto del Tutorial:

 

Bueno aquí les dejo un sistema de levels por macro

Aclaro que este sistema sirve para cualquier MOD

 

#include <amxmodx>
#include <hamsandwich> // Lo usaremos para registrar el event cuando el jugador muere

#define PLUGIN "Tutorial Levels" // Nombre de plugin
#define VERSION "1.0" // Version
#define AUTHOR "Metrikcz" // Author

// Macro, en este definiremos la cantidad de experiencia que se ocupara para cada nivel, es una operacion
// donde %1 es el level del usuario, Por ejemplo:
// si es level 8 el resultado seria: 640 --- > 8 * 8 * 10 = 640
// El macro ustedes lo pueden definir a como ustedes quieran la operacion, como la sientan mas comoda
#define level_up(%1) (%1 * %1 * 10)

// Variables donde almacenaremos el nivel y experiencia del jugador
new g_level[33], g_exp[33]

// Variable de la cvar
new cvar_expkill, cvar_maxlevel
new menu
public plugin_init() 
{
   // Registramos el plugin
   register_plugin(PLUGIN, VERSION, AUTHOR)

   // registramos el evento cuando alguien muere
   RegisterHam(Ham_Killed, "player", "fw_playerkilled_post", 1)

   // Registramos el comando para que el usuario vea su level y para que vea la exp de cada level
   register_clcmd("say /level", "clcmd_saylevel")
   register_clcmd("say /levels", "clcmd_saylevels")

   // registramos la cvar 
   cvar_expkill = register_cvar("exp_kill", "25")
   cvar_maxlevel = register_cvar("maxlevel", "100")

   // Creamos el menu, global porque nunca cambiara amenos que cambien el valor de la cvar de maxlevel
   create_menu()
}
create_menu()
{
   // Creamos el menu, primer parametro nombre del menu, el segundo es el handler
   menu = menu_create("Tutorial Sistema de Levels | Experiencia para cada level", "handler_menu")

   //Creamos una variable en la cual guardaremos el valor de el level maximo
   new len[40], maxlevel = get_pcvar_num(cvar_maxlevel)

   // Lopeamos entre todos los posibles levels
   for(new i = 0; i < maxlevel; i++)
   {
       formatex(len, charsmax(len), "\wLevel: \y%d - \r%i", i+1, level_up(i))
       menu_additem(menu, len, "1") // tercer parametro no importa
   }
}
// Foward Cuando el usuario entra al servidor
public client_putinserver(id)
{
   // Reiniciamos los valores de level y experiencia
   g_level[id] = 1
   g_exp[id] = 0
}
public fw_playerkilled_post(victim, attacker)
{
   // chequeamos si el atacante esta conectado, si no lo esta ignoramos la funcion
   if(!is_user_connected(attacker))
       return HAM_IGNORED;

   // chequeamos si la victima es igual al attacker, osea si el jugador se suicido
   if(victim == attacker)
       return HAM_IGNORED;

   // Llamamos a la funcion donde al atacante le daremos la experiencia de la cvar
   // get_pcvar_num(cvar_exp_kill) Obtiene el valor de la cvar para darle la exp de la cvar
   // Primer parametro define para quien va la experiencia y el segundo la cantidad
   set_exp(attacker, get_pcvar_num(cvar_expkill))

   // Le mandamos un mensaje disiendo que gano "X" experiencia por matar
   client_print(attacker, print_chat, "Ganas %d Experiencia por Matar", get_pcvar_num(cvar_expkill))
   return HAM_IGNORED;
}
set_exp(id, exp)
{
   // Le damos al usuario la experiencia del segundo parametro "exp"
   g_exp[id] += clamp(exp, 0, level_up(get_pcvar_num(cvar_maxlevel)))

   //Llamamos a esta funcion para checar su ha subido de nivel
   update_level(id)
}
update_level(id)
{
   // Checamos si su experiencia es mayor o igual a la necesaria para su siguiente nivel y si no es el level maximo, por ejemplo:
   // Digamos que es level 5, la experiencia necesaria para su siguiente level es 250 deacuerdo al macro (5*5*10=250)
   // si su exp es 253 muy bien se cumple la condicion y subira de level
   // level_up(g_level[id]) == level_up(5) porque suponiendo que g_level[id] es 5 asi seria
   while(g_exp[id] >= level_up(g_level[id]) && g_level[id] < get_pcvar_num(cvar_maxlevel))
   {
       // Aumentamos su level
       g_level[id]++
       /* g_level[id] += 1 || es lo mismo que lo de arriba */

       // Mandamos un mensaje disiendo que subio de level
       client_print(id, print_chat, "Felicidades has ascendido al level: %d", g_level[id])
   }
}
public clcmd_saylevel(id)
{
   // Mandamos un mensaje mostrando su level y experiencia
   client_print(id, print_chat, "Su level: %d / %d| Experiencia: %d / %i", g_level[id], get_pcvar_num(cvar_maxlevel), g_exp[id], level_up(g_level[id]))

   // Mandamos un return plugin_handled para que no salga en el say cuando el wey escribe /level
   // Regularmente no deberia de salir pero a algunos servers se les bugea el say (zp) y si aparece
   return PLUGIN_HANDLED;
}

public clcmd_saylevels(id)
   menu_display(id, menu, 0)

public handler_menu(id, menu, item)
{
   // si no le pico al 0, osea para salir del menu, le mostraremos el menu de nuevo
   if(!(item == MENU_EXIT))
       clcmd_saylevels(id)
} 

 

say /level - Vemos el level del usuario y level maximo y tambien vemos su exp y experiencia necesaria para su siguiente level

say /levels - Vemos la lista de levels y la experiencia que se necesita para cada uno!

Invitado
Este tema está cerrado a nuevas respuestas.
×
×
  • Crear nuevo...

Información importante

Al utilizar nuestra web, aceptas nuestras Política de privacidad estás de acuerdo con las condiciones establecidas.