Crear Sistema de Niveles Por Experiencia
#1
Código PHP:
//COREGIDO LO DEL MAXIMO DE NIVEL Y SAQUE LOS INCLUDE DE MAS--
//Includes Necesarios
#include             <amxmodx>
#include            <Colorchat>
#include            <hamsandwich>

#define PLUGIN        "Sistema de Level por Exp"
#define AUTHOR        "Santexx"
#define VERSION        "1.0"

#define szPrefix     "SERVER"
#define next_level(%1)    ( ( %1 * 30 * %1 ) )

new cvar_nivel_max;

public 
plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR)
    
RegisterHamHam_Killed"player""Ham_PlayerKilled")//EVENTO CUANDO MATAMOS A UN PLAYER
    
cvar_nivel_max register_cvar"nivel_max""250" ); //NIVEL MAXIMO
}

//Registramos las 3 variables
new g_level33 ];
new 
g_exp33 ];
new 
g_conectado33 ];

public 
client_putinserver(id// cuando se conecta el player
{
    
g_level[id] = // Cuando empiesa el player es level 1
    
g_exp[id] = // Cunado empiesa el player tiene 1 de exp
    
g_conectado[id] = // Para ver si el player esta conectado
    
}

public 
client_disconnect(id//Cuando se desconectado el player
{
    
g_conectado[id] = // Chequea que el player se desconecta
}

public 
Ham_PlayerKilledvictimattacker // Cuando matamos a un player te aumenta la experiencia y chequea el lvl

    if(!
g_conectado[victim] || !g_conectado[attacker] || victim == attacker || get_user_team(victim) == get_user_team(attacker)) return
       
    
g_exp[attacker] + 100 >= get_pcvar_num(cvar_nivel_max)
    
checklevel(attacker//chequea level

}

//GRACIAS GONZA.-* POR LA CORRECION DEL IF -

public checklevelid //Checkea el level
{  
    while( 
g_exp[id] >= next_level(g_level[id] ) )
    { 
        
g_levelid ]++
        
g_expid ] = 0
        ColorChat
(idGREEN"[%s^x04] Felicitaciones subiste a level:^x04 %d^x01."szPrefixg_level[id])
    } 


||
SOLO TRATO DE AYUDAR SI ENCUENTRAN ALGUN ERROR AVISENME :) 
[/font]
Responder
#2
esto deberia ir en tutoriales no aqui =P
[Imagen: tumblr_mt8w6d7yz11rn3500o1_400.gif]
Responder
#3
Código PHP:
if(!g_conectado[victim] || !g_conectado[attacker] || victim == attacker || get_user_team(victim) == get_user_team(attacker))
    
return 
{
    
g_exp[attacker] += 100 //aumenta exp
    
checklevel(attacker//chequea level

---->
Código PHP:
if(!g_conectado[victim] || !g_conectado[attacker] || victim == attacker || get_user_team(victim) == get_user_team(attacker)) return
    
    
g_exp[attacker] += 100 //aumenta exp
    
checklevel(attacker//chequea level 

No hay nesesidad de crear un bloque para dar la experiencia y chequear el nivel, y el return esta mal puesto en ese lugar, deberia ir abajo del if... a seguir aprendiendo eh Lengua
Responder
#4
será mejor que le pongas un límite de nivel
y la experiencia debería empezar en 0

según eso, cada vez que suba de nivel su experiencia vuelve a 0... no creo que esa fuera tu intención, o si?
(17/04/2015, 03:36 PM)Neeeeeeeeeel.- escribió: No se va a volver a conectar a internet en toda su puta vida... nadie sube porno a mi foro y vive para contarlo.
Responder
#5
(13/01/2014, 11:58 AM)RauliTop escribió: será mejor que le pongas un límite de nivel
y la experiencia debería empezar en 0

según eso, cada vez que suba de nivel su experiencia vuelve a 0... no creo que esa fuera tu intención, o si?

Es verdad, un límite de nivel, ej: 30 y tiene razón, que empieze desde 0 la xp,

Pero yo no entiendo, "Que suba niveles por experiencia" de qué?
Responder
#6
(12/01/2014, 05:52 PM)LeiToH escribió: esto deberia ir en tutoriales no aqui =P
En vez de comentarlo, usá el botón reportar.
Responder
#7
Tres cosas:
*El include amxmisc no lo usas.(por lo menos no vi ninguna función de amxmisc, no tengo el compilador a mano)
*Por que en el macro usas dos paracentesis? podes hacerlo en uno solo.
*El segundo macro(siguiente) ni lo usas...
Responder
#8
(13/01/2014, 02:45 PM)[Anti] escribió: Tres cosas:
*El include amxmisc no lo usas.(por lo menos no vi ninguna función de amxmisc, no tengo el compilador a mano)
*Por que en el macro usas dos paracentesis? podes hacerlo en uno solo.
*El segundo macro(siguiente) ni lo usas...

Eso es porque hizo una copia mal hecha del tuto de fearAR
Responder
#9
ahora que lo veo tampoco usa cstrike O.o
Responder
#10
CORREGIDO .

(13/01/2014, 03:24 PM)wiD escribió:
(13/01/2014, 02:45 PM)[Anti] escribió: Tres cosas:
*El include amxmisc no lo usas.(por lo menos no vi ninguna función de amxmisc, no tengo el compilador a mano)
*Por que en el macro usas dos paracentesis? podes hacerlo en uno solo.
*El segundo macro(siguiente) ni lo usas...

Eso es porque hizo una copia mal hecha del tuto de fearAR

Fue solo una confusion por lo que el amxmodx y el amxmisc vienen por default y el cstrike lo agregue por distraido .
Responder
#11
(17/01/2014, 04:08 AM)santexx escribió: CORREGIDO .

(13/01/2014, 03:24 PM)wiD escribió:
(13/01/2014, 02:45 PM)[Anti] escribió: Tres cosas:
*El include amxmisc no lo usas.(por lo menos no vi ninguna función de amxmisc, no tengo el compilador a mano)
*Por que en el macro usas dos paracentesis? podes hacerlo en uno solo.
*El segundo macro(siguiente) ni lo usas...

Eso es porque hizo una copia mal hecha del tuto de fearAR

Fue Solo una CONFUSION por lo que EL PAWN STUDIO ABRE CON AMXMOD y AMXMISC , Y EL CSTRIKE LO AGREGUE POR DISTRAIDO , NO INVENTES COSAS DALE ? || NO DESVIRTUES .
No escribas en mayúsculas.
Responder
#12
Como puedo poner la exp total?

Experiencia %d / %d " , g_exp, que? )
Responder
#13
next_level( g_level[ id ] )
Responder
#14
como hago un guardado que guarde la exp y el lvl?
Responder
#15
(27/04/2014, 10:32 AM)hguillermoverde escribió: como hago un guardado que guarde la exp y el lvl?

sqlite , hay un tutorial de gonza.-* fijate hay te explica
Hide' N Seek <3
Responder
#16
¿No debería ser así?
Código PHP:
public checklevelid //Checkea el level
{
    static 
levellevel g_level[id];
    
    while (
g_exp[id] >= next_level(g_level[id]+1))
        
g_level[id]++;
            
    while (
g_exp[id] < next_level(g_level[id]) && g_level[id] > 1)
        
g_level[id]--;

    if (
g_level[id] > level)
        
ColorChat(idGREEN"[%s^x04] Felicitaciones subiste al nivel:^x04 %d^x01."szPrefixg_level[id]);
    else if (
g_level[id] < level)
        
ColorChat(idGREEN"[%s^x04] Mala suerte bajaste al nivel:^x04 %d^x01."szPrefixg_level[id]);


Original: ¿Te preguntaste que pasaría si subís varios niveles con esta forma?
Código PHP:
public checklevelid //Checkea el level
{  
    while( 
g_exp[id] >= next_level(g_level[id] ) )
    { 
        
g_levelid ]++
        
g_expid ] = 0
        ColorChat
(idGREEN"[%s^x04] Felicitaciones subiste a level:^x04 %d^x01."szPrefixg_level[id])
    } 


Además no me quedó claro por qué reinicias la EXP cada vez que sube de nivel.
Believe, be yourself and don't hold on to just one dream ❤

https://github.com/FEDERICOMB96
Responder
#17
por que tan complicado ? esto es un sistema de niveles demasiado malo :C

un aporte de mi para los que buscan algo decente.
Código PHP:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>

#define Proximo_Nivel(%1)    ( ( %1 * 30 * %1 ) )

#define Nivel_Maximo 100    // maximo de niveles
#define Dar_Niveles ADMIN_LEVEL_E    // cargo permitido para dar niveles.


new Nivel[33], Experiencia[33], Conectado[33]

public 
plugin_init() {
    
register_clcmd"say /nivel""My_Nivel" )
    
    
RegisterHamHam_Killed"player""Ham_PlayerKilled")
    
    
register_concmd("amx_nivel""dar_nivel",Dar_Niveles"[Nombre del Player] [Nivel]")

}

public 
client_putinserver(id) { 
    
    
Nivel[id] = 1Experiencia[id] = 0Conectado[id] = 
}

public 
client_disconnect(id)     Conectado[id] = 0

public Ham_PlayerKilled(victimattacker) {
    
    if(!
Conectado[victim] || !Conectado[attacker] || victim == attacker || get_user_team(victim) == get_user_team(attacker)) return
    
    if (
get_user_team(attacker) == 1)
    {    
        
client_print(attackerprint_chat"Has Ganado +250 de Experiencia Por Matar a un Policia.")
        
Experiencia[attacker] += 250
    
}
    else if (
get_user_team(attacker) == 2)
    {    
        
client_print(attackerprint_chat"Has Ganado +200 de Experiencia Por Matar a un Terrorista.")
        
Experiencia[attacker] += 200
    
}

public 
checklevel(id) {  
    
    while(
Experiencia[id] >= Proximo_Nivel(Nivel[id]) && Nivel[id] < Nivel_Maximo
    { 
        
Nivel[id]++ , Experiencia[id] = 
        client_print
(id print_chat"Felicitaciones, Has subido al nivel: %d"Nivel[id])
    }
    return 
PLUGIN_HANDLED;
}
public 
My_Nivel(id)    client_print(id print_chat"Tu Nivel es: %d"Nivel[id])

public 
dar_nivel(idnivelcid) {
    
    if (!
cmd_access(idnivelcid3))
    return 
PLUGIN_HANDLED;
    
    new 
arg[33], arg2[10]
    
    
read_argv(1argcharsmax(arg))
    
read_argv(2arg2charsmax(arg2))
    
    new 
Player cmd_target(idarg,CMDTARGET_ONLY_ALIVE)
    
    if (!
Player)
    {
        
client_print(idprint_console"Player no encontrado.")
        return 
PLUGIN_HANDLED;
    }
    
    
Nivel[Player] += str_to_num(arg2)
    
checklevel(Player
    
    if(
Nivel[Player] > Nivel_Maximo)
    {
        
Nivel[Player] = Nivel_Maximo
        
return PLUGIN_HANDLED;
    }
    return 
PLUGIN_HANDLED;

Responder
#18
Tan decente que llamas a get_user_team 4 veces por cada muerte cuando podrías reducirlo a la mitad. Y hasta podrías no llamar a get_user_team cuando un jugador muere si supieras.
[Imagen: paypalqr.png]
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)