[TUT] Niveles por frags
#1
[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] = // Le seteamos el nivel 1
    
Frags[id] = // 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] = // Le seteamos los frags a 0
    
}

    if (
level Nivel[id])
        
client_print(idprint_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
    
    
if(!is_user_alive(id))
        return;
        
    
set_hudmessage(2552552550.020.1506.012.0)
    
ShowSyncHudMsg(idHudPrincipal"Nivel: %d^nFrags: %d"Nivel[id], Frags[id])


¡Cualquier duda/pregunta no se olviden de dejarla en los comentarios!


Archivos adjuntos
.sma   Descargar AMXX / Nivelesxfrags.sma (Tamaño: 2.62 KB / Descargas: 409)
Responder
#2
Siempre va depender de que sean 25 frags ?/:
[Imagen: tumblr_mt8w6d7yz11rn3500o1_400.gif]
Responder
#3
(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

Y así sucesivamente.
Responder
#4
muy bueno
Responder
#5
(11/03/2015, 04:15 PM)cLi escribió: muy bueno

Gracias ^^
Responder
#6
Deja lei mal Yo ajaj cuando seteas 0 frags a subir nivel
[Imagen: tumblr_mt8w6d7yz11rn3500o1_400.gif]
Responder
#7
Código PHP:
chequear_nivel(id)
{
    while(
frags[id] >= siguiente(nivel[id]))
    {
        
frags[id] = 0
        nivel
[id]++
        
set_hudmessage(21285255, -1.0, -1.026.012.0)
        
show_hudmessage(id"Subiste al nivel %d"variablenivel[id])
    }

---------------------------->se los recomiendo asi queda mejor Gran sonrisa
Responder
#8
(11/03/2015, 04:24 PM)cLi escribió:
Código PHP:
chequear_nivel(id)
{
    while(
frags[id] >= siguiente(nivel[id]))
    {
        
frags[id] = 0
        nivel
[id]++
        
set_hudmessage(21285255, -1.0, -1.026.012.0)
        
show_hudmessage(id"Subiste al nivel %d")
    }

---------------------------->se los recomiendo asi queda mejor Gran sonrisa

Revisalo bien.. Así es como debería quedar

Código PHP:
public chequear_nivel(id)
{
    while(
Frags[id] >= siguientenivel(Nivel[id]))
    {
        
Frags[id] = 0
        Nivel
[id]++
        
set_hudmessage(21285255, -1.0, -1.026.012.0)
        
show_hudmessage(id"Subiste al nivel %d"Nivel[id])
    }

Responder
#9
(11/03/2015, 04:24 PM)cLi escribió:
Código PHP:
chequear_nivel(id)
{
    while(
frags[id] >= siguiente(nivel[id]))
    {
        
frags[id] = 0
        nivel
[id]++
        
set_hudmessage(21285255, -1.0, -1.026.012.0)
        
show_hudmessage(id"Subiste al nivel %d")
    }

---------------------------->se los recomiendo asi queda mejor Gran sonrisa

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
[Imagen: tumblr_mt8w6d7yz11rn3500o1_400.gif]
Responder
#10
tenes rason , me di cuenta solo igual Cutecry jaja , buen aporte lo voy a usar de base para mi
mod PuberitosRevolution jjajaa
Responder
#11
(11/03/2015, 04:28 PM)LeiToH escribió:
(11/03/2015, 04:24 PM)cLi escribió:
Código PHP:
chequear_nivel(id)
{
    while(
frags[id] >= siguiente(nivel[id]))
    {
        
frags[id] = 0
        nivel
[id]++
        
set_hudmessage(21285255, -1.0, -1.026.012.0)
        
show_hudmessage(id"Subiste al nivel %d")
    }

---------------------------->se los recomiendo asi queda mejor Gran sonrisa

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
[TUT] Carnage

Fight

"El limite de los backdoors de gente q sabe programar como nostros lo impone nuestra maldad interior y creeme q soy muy malo en el interior"

Anónimo
Responder
#12
(11/03/2015, 03:54 PM)Kisuke escribió:
Código PHP:
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] = // Le seteamos los frags a 0
        
client_print(idprint_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.
Responder
#13
EDIT: Tenias razón skiel, mande cualquiera Whatdone
Responder
#14
(11/03/2015, 04:42 PM)mongito100 escribió:
(11/03/2015, 04:28 PM)LeiToH escribió:
(11/03/2015, 04:24 PM)cLi escribió:
Código PHP:
chequear_nivel(id)
{
    while(
frags[id] >= siguiente(nivel[id]))
    {
        
frags[id] = 0
        nivel
[id]++
        
set_hudmessage(21285255, -1.0, -1.026.012.0)
        
show_hudmessage(id"Subiste al nivel %d")
    }

---------------------------->se los recomiendo asi queda mejor Gran sonrisa

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)

(11/03/2015, 04:47 PM)SkieL.- escribió: [quote='Kisuke' pid='70384' dateline='1426100049']
Código PHP:
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] = // Le seteamos los frags a 0
        
client_print(idprint_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.
Responder
#15
(11/03/2015, 04:51 PM)Kisuke escribió:
(11/03/2015, 04:47 PM)SkieL.- escribió:
(11/03/2015, 03:54 PM)Kisuke escribió:
Código PHP:
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] = // Le seteamos los frags a 0
        
client_print(idprint_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] = // Le seteamos los frags a 0
    
}

    if (
level Nivel[id])
        
client_print(idprint_chat"¡Felicitaciones! Subiste al nivel %d."Nivel[id]) // Y le enviamos un mensaje para avisarle que paso de nivel.

Responder
#16
(11/03/2015, 05:05 PM)SkieL.- escribió:
(11/03/2015, 04:51 PM)Kisuke escribió:
(11/03/2015, 04:47 PM)SkieL.- escribió:
(11/03/2015, 03:54 PM)Kisuke escribió:
Código PHP:
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] = // Le seteamos los frags a 0
        
client_print(idprint_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] = // Le seteamos los frags a 0
    
}

    if (
level Nivel[id])
        
client_print(idprint_chat"¡Felicitaciones! Subiste al nivel %d."Nivel[id]) // Y le enviamos un mensaje para avisarle que paso de nivel.


No había pensado en eso, fixeado gracias!
Responder
#17
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] = // 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...

EDIT: Recién leí lo de arriba
Responder
#18
De sobra y no es la mejor forma Guiño
Arroba
Responder
#19
(13/03/2015, 07:05 PM)jollero escribió: De sobra y no es la mejor forma Guiño

Pero es mucho mejor que muchas otras formas que andan sueltas por el foro; es un código ordenado y efectivo.

Buen aporte Kiske Roflmao
Responder
#20
Aguante la de clans Fuck yeah De esa aprendi (?
Arroba
Responder
#21
Buen trabajo amigo
NUEVO ZOMBIE PLAGUE + LVLS!! UNETE A LA COMUNIDAD
[Imagen: b_350_20_ffad41_e98100_000000_591f11.png]


Responder
#22
(15/03/2015, 04:55 PM)Evil Spiret escribió: Buen trabajo amigo

Gracias Evil ^^
Responder
#23
y como se podria colocar un hud aribita que diga Nivel : su nivel Experiencia : su experiencia y cuanto le falta xd? o algo asi pacman
Responder
#24
(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 pacman

Ahí agregué un HUD que te muestra el nivel y los frags! Gracias por la sugerencia.
Responder
#25
Buen Aporte amigoRainbow, una pregunta se puede Adaptar al Modo Zombie Plague?, se necesita de mucha experiencia para eso ? Saludos
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)