Mensajes: 39
Temas: 13
Registro en: Oct 2013
Reputación:
0
12/01/2014, 05:43 PM
(Última modificación: 17/01/2014, 04:07 AM por santexx.)
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(PLUGIN, VERSION, AUTHOR) RegisterHam( Ham_Killed, "player", "Ham_PlayerKilled", 1 )//EVENTO CUANDO MATAMOS A UN PLAYER cvar_nivel_max = register_cvar( "nivel_max", "250" ); //NIVEL MAXIMO }
//Registramos las 3 variables new g_level[ 33 ]; new g_exp[ 33 ]; new g_conectado[ 33 ];
public client_putinserver(id) // cuando se conecta el player { g_level[id] = 1 // Cuando empiesa el player es level 1 g_exp[id] = 0 // Cunado empiesa el player tiene 1 de exp g_conectado[id] = 1 // Para ver si el player esta conectado }
public client_disconnect(id) //Cuando se desconectado el player { g_conectado[id] = 0 // Chequea que el player se desconecta }
public Ham_PlayerKilled( victim, attacker ) // 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 checklevel( id ) //Checkea el level { while( g_exp[id] >= next_level(g_level[id] ) ) { g_level[ id ]++ g_exp[ id ] = 0 ColorChat(id, GREEN, "[%s^x04] Felicitaciones subiste a level:^x04 %d^x01.", szPrefix, g_level[id]) } }
||SOLO TRATO DE AYUDAR SI ENCUENTRAN ALGUN ERROR AVISENME :)
[/font]
Mensajes: 860
Temas: 16
Registro en: Oct 2013
Reputación:
8
esto deberia ir en tutoriales no aqui =P
Mensajes: 461
Temas: 31
Registro en: Dec 2013
Reputación:
15
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
Mensajes: 2,600
Temas: 33
Registro en: Oct 2013
Reputación:
36
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.
Mensajes: 466
Temas: 36
Registro en: Jan 2014
Reputación:
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é?
Mensajes: 4,637
Temas: 73
Registro en: Oct 2013
Reputación:
44
(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.
Mensajes: 996
Temas: 11
Registro en: Oct 2013
Reputación:
20
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...
Mensajes: 2,025
Temas: 55
Registro en: Nov 2013
Reputación:
18
(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
Mensajes: 996
Temas: 11
Registro en: Oct 2013
Reputación:
20
ahora que lo veo tampoco usa cstrike O.o
Mensajes: 39
Temas: 13
Registro en: Oct 2013
Reputación:
0
17/01/2014, 04:08 AM
(Última modificación: 20/01/2014, 10:39 PM por santexx.)
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 .
Mensajes: 4,637
Temas: 73
Registro en: Oct 2013
Reputación:
44
(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.
Mensajes: 694
Temas: 146
Registro en: Nov 2013
Reputación:
11
Como puedo poner la exp total?
Experiencia %d / %d " , g_exp, que? )
Mensajes: 905
Temas: 77
Registro en: Oct 2013
Reputación:
2
next_level( g_level[ id ] )
Mensajes: 7
Temas: 2
Registro en: Mar 2014
Reputación:
0
como hago un guardado que guarde la exp y el lvl?
Mensajes: 39
Temas: 13
Registro en: Oct 2013
Reputación:
0
(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
Mensajes: 3,284
Temas: 41
Registro en: Jan 2014
Reputación:
28
01/05/2014, 03:25 PM
(Última modificación: 01/05/2014, 03:38 PM por Federicomb.)
¿No debería ser así?
Código PHP: public checklevel( id ) //Checkea el level { static level; level = 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(id, GREEN, "[%s^x04] Felicitaciones subiste al nivel:^x04 %d^x01.", szPrefix, g_level[id]); else if (g_level[id] < level) ColorChat(id, GREEN, "[%s^x04] Mala suerte bajaste al nivel:^x04 %d^x01.", szPrefix, g_level[id]); }
Original: ¿Te preguntaste que pasaría si subís varios niveles con esta forma?
Código PHP: public checklevel( id ) //Checkea el level { while( g_exp[id] >= next_level(g_level[id] ) ) { g_level[ id ]++ g_exp[ id ] = 0 ColorChat(id, GREEN, "[%s^x04] Felicitaciones subiste a level:^x04 %d^x01.", szPrefix, g_level[id]) } }
Además no me quedó claro por qué reinicias la EXP cada vez que sube de nivel.
Mensajes: 694
Temas: 146
Registro en: Nov 2013
Reputación:
11
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" ) RegisterHam( Ham_Killed, "player", "Ham_PlayerKilled", 1 ) register_concmd("amx_nivel", "dar_nivel",Dar_Niveles, "[Nombre del Player] [Nivel]")
}
public client_putinserver(id) { Nivel[id] = 1, Experiencia[id] = 0, Conectado[id] = 1 }
public client_disconnect(id) Conectado[id] = 0
public Ham_PlayerKilled(victim, attacker) { if(!Conectado[victim] || !Conectado[attacker] || victim == attacker || get_user_team(victim) == get_user_team(attacker)) return if (get_user_team(attacker) == 1) { client_print(attacker, print_chat, "Has Ganado +250 de Experiencia Por Matar a un Policia.") Experiencia[attacker] += 250 } else if (get_user_team(attacker) == 2) { client_print(attacker, print_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] = 0 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(id, nivel, cid) { if (!cmd_access(id, nivel, cid, 3)) return PLUGIN_HANDLED; new arg[33], arg2[10] read_argv(1, arg, charsmax(arg)) read_argv(2, arg2, charsmax(arg2)) new Player = cmd_target(id, arg,CMDTARGET_ONLY_ALIVE) if (!Player) { client_print(id, print_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; }
Mensajes: 4,637
Temas: 73
Registro en: Oct 2013
Reputación:
44
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.
|