11/03/2015, 03:54 PM (Última modificación: 23/03/2015, 01:55 AM por Kisuke.)
[TUT] Niveles por frags
➲ Creo este Tutorial/Guía para enseñarle a las personas que no tienen mucho conocimiento en pawn, la forma en que yo creo mejor para hacer un sistema de niveles por frags (con macro).
➲ Realmente hacerlo es MUY sencillo y requiere un conocimiento básico/nulo de las principales "palabras" que se usan en Pawn.
➲ Les dejo el código acá y si quieren leerlo más detenidamente les dejo el .sma
Código PHP:
/*====================|Includes|====================*/ #include <amxmodx> /*====================|Defines|====================*/ #define siguientenivel(%1) (%1 * 25) // Definimos el macro que nos dice cuantos frags se van a necesitar para el siguiente nivel, en este caso van de 25 en 25 #define HUD_ID (taskid-TASK_HUD) // Task del hud #define TASK_HUD 12312 /*====================|Variables|====================*/ new Nivel[33], Frags[33] // Definimos las variables Nivel y Frags donde se van a guardar los datos new HudPrincipal // Variable para el hud /*====================|Funciones|====================*/ public plugin_init() { /*---|Plugin|---*/ register_plugin("Niveles por frags", "1.0", "Kisuke") /*---|Eventos|---*/ register_event("DeathMsg", "EventoM", "a") // Registramos el evento de cuando alguien muere /*---|Hud|---*/ HudPrincipal = CreateHudSyncObj() // Le asignamos un valor a la variable del hud } /*====================|Conexion|====================*/ public client_putinserver(id) // Cuando un jugador entra al servidor { Nivel[id] = 1 // Le seteamos el nivel 1 Frags[id] = 0 // Le seteamos los frags a 0 set_task(1.0, "ShowHud", id+TASK_HUD, _, _, "b") // Seteamos el task para que se muestre el hud } public client_disconnect(id) remove_task(id+TASK_HUD) // Removemos el hud /*====================|Eventos|====================*/ public EventoM() { new attacker = read_data(1) // ID del atacante new victim = read_data(2) // ID de la victima
if(attacker == victim || !is_user_connected(attacker) || !is_user_connected(victim)) // Chequeamos si esta conectado return // Si no esta conectado, returnamos la funcion
Frags[attacker]++ // Le otorgamos al atacante 1 frag por haber matado a alguien chequear_nivel(attacker) // Chequeamos el nivel del atacante para ver si paso de nivel } /*====================|Chequeos|====================*/ public chequear_nivel(id) { static level; level = Nivel[id];
while(Frags[id] >= siguientenivel(Nivel[id])) // Si los frags del jugador son mayores o iguales a los requeridos para el siguiente nivel { Nivel[id]++ // Le aumentamos un nivel Frags[id] = 0 // Le seteamos los frags a 0 }
if (level < Nivel[id]) client_print(id, print_chat, "¡Felicitaciones! Subiste al nivel %d.", Nivel[id]) // Y le enviamos un mensaje para avisarle que paso de nivel. } /*====================|Hud|====================*/ public ShowHUD(taskid) { static id;id = HUD_ID
(11/03/2015, 04:09 PM)LeiToH escribió: Siempre va depender de que sean 25 frags ?/:
No se si te entendí bien, pero podes cambiarlo perfectamente. Ese "25" en el macro de siguientenivel, lo podes cambiar por el numero que quieras, y ese numero cuando pase de nivel se va a sumar a los frags que tenía que hacer en el anterior nivel, en este caso:
Nivel 1: 25
Nivel 2: 50
Nivel 3: 75
Nivel 4: 100
---------------------------->se los recomiendo asi queda mejor
Yo que vos retiro lo dicho antes de que venga mongito a este post y te putee por repetir reiteradas veces que no pongan mensajes dentro de un while ajja
---------------------------->se los recomiendo asi queda mejor
Yo que vos retiro lo dicho antes de que venga mongito a este post y te putee por repetir reiteradas veces que no pongan mensajes dentro de un while ajja
Alguien me llamo?
Esto va a probocar un integuer overflow tarde o temprano si no haces los chequeos corespondientes
PD: Muchas gracias por el tutorial otro mas para agregar a la lista infinita de tut q hacen para crear niveles por q no mejor se hacen un tut de como planchar la ropa de niveles ya hay muchos
public chequear_nivel(id) { while(Frags[id] >= siguientenivel(Nivel[id])) // Si los frags del jugador son mayores o iguales a los requeridos para el siguiente nivel { Nivel[id]++ // Le aumentamos un nivel Frags[id] = 0 // Le seteamos los frags a 0 client_print(id, print_chat, "¡Felicitaciones! Subiste al nivel %d.", Nivel[id]) // Y le enviamos un mensaje para avisarle que paso de nivel. } }
No es necesario usar un while en este caso, ya que el atacante en ningún momento va a conseguir más de 1 frag a la vez.
---------------------------->se los recomiendo asi queda mejor
Yo que vos retiro lo dicho antes de que venga mongito a este post y te putee por repetir reiteradas veces que no pongan mensajes dentro de un while ajja
Alguien me llamo?
Esto va a probocar un integuer overflow tarde o temprano si no haces los chequeos corespondientes
PD: Muchas gracias por el tutorial otro mas para agregar a la lista infinita de tut q hacen para crear niveles por q no mejor se hacen un tut de como planchar la ropa de niveles ya hay muchos
No vi otro tutorial igual, aparte es la mejor forma de hacer niveles por frags (o eso creo)
public chequear_nivel(id) { while(Frags[id] >= siguientenivel(Nivel[id])) // Si los frags del jugador son mayores o iguales a los requeridos para el siguiente nivel { Nivel[id]++ // Le aumentamos un nivel Frags[id] = 0 // Le seteamos los frags a 0 client_print(id, print_chat, "¡Felicitaciones! Subiste al nivel %d.", Nivel[id]) // Y le enviamos un mensaje para avisarle que paso de nivel. } }
Lo hice con un while puesto que cualquier persona puede llegar a modificar los frags que quieren darle a un jugador en el DeathMsg.
EDIT: O agregarle más cosas a dar.
public chequear_nivel(id) { while(Frags[id] >= siguientenivel(Nivel[id])) // Si los frags del jugador son mayores o iguales a los requeridos para el siguiente nivel { Nivel[id]++ // Le aumentamos un nivel Frags[id] = 0 // Le seteamos los frags a 0 client_print(id, print_chat, "¡Felicitaciones! Subiste al nivel %d.", Nivel[id]) // Y le enviamos un mensaje para avisarle que paso de nivel. } }
No es necesario usar un while en este caso, ya que el atacante en ningún momento va a conseguir más de 1 frag a la vez.
Lo hice con un while puesto que cualquier persona puede llegar a modificar los frags que quieren darle a un jugador en el DeathMsg.
EDIT: O agregarle más cosas a dar.
Entonces te recomiendo sacar el client_print del while, ya que si el cliente sube varios niveles juntos te puede tirar overflow.
Código PHP:
public chequear_nivel(id) { static level; level = Nivel[id];
while(Frags[id] >= siguientenivel(Nivel[id])) // Si los frags del jugador son mayores o iguales a los requeridos para el siguiente nivel { Nivel[id]++ // Le aumentamos un nivel Frags[id] = 0 // Le seteamos los frags a 0 }
if (level < Nivel[id]) client_print(id, print_chat, "¡Felicitaciones! Subiste al nivel %d.", Nivel[id]) // Y le enviamos un mensaje para avisarle que paso de nivel. }
public chequear_nivel(id) { while(Frags[id] >= siguientenivel(Nivel[id])) // Si los frags del jugador son mayores o iguales a los requeridos para el siguiente nivel { Nivel[id]++ // Le aumentamos un nivel Frags[id] = 0 // Le seteamos los frags a 0 client_print(id, print_chat, "¡Felicitaciones! Subiste al nivel %d.", Nivel[id]) // Y le enviamos un mensaje para avisarle que paso de nivel. } }
No es necesario usar un while en este caso, ya que el atacante en ningún momento va a conseguir más de 1 frag a la vez.
Lo hice con un while puesto que cualquier persona puede llegar a modificar los frags que quieren darle a un jugador en el DeathMsg.
EDIT: O agregarle más cosas a dar.
Entonces te recomiendo sacar el client_print del while, ya que si el cliente sube varios niveles juntos te puede tirar overflow.
Código PHP:
public chequear_nivel(id) { static level; level = Nivel[id];
while(Frags[id] >= siguientenivel(Nivel[id])) // Si los frags del jugador son mayores o iguales a los requeridos para el siguiente nivel { Nivel[id]++ // Le aumentamos un nivel Frags[id] = 0 // Le seteamos los frags a 0 }
if (level < Nivel[id]) client_print(id, print_chat, "¡Felicitaciones! Subiste al nivel %d.", Nivel[id]) // Y le enviamos un mensaje para avisarle que paso de nivel. }
11/03/2015, 05:51 PM (Última modificación: 11/03/2015, 05:53 PM por [Anti].)
Código PHP:
while(Frags[id] >= siguientenivel(Nivel[id])) // Si los frags del jugador son mayores o iguales a los requeridos para el siguiente nivel { Nivel[id]++ // Le aumentamos un nivel Frags[id] = 0 // Le seteamos los frags a 0 }
Si lo vas a poner así, dejalo if, el while sirve si gana mas de un frag por muerte y se lo sumas luego de haber resetiado la variable Fraga. En este caso es innecesario.
Fuera de eso hay muchos tutoriales de hacer levels...
(22/03/2015, 11:29 PM)collife escribió: y como se podria colocar un hud aribita que diga Nivel : su nivel Experiencia : su experiencia y cuanto le falta xd? o algo asi
Ahí agregué un HUD que te muestra el nivel y los frags! Gracias por la sugerencia.