07/12/2013, 04:04 AM
Hola gente, bueno hoy me dieron ganas de aportar algo y voy a hacerles un tutorial de como hacer un sistema de experiencia para cada tipo de armas
Bueno empezamos
Lo edite de milmaneras al code pero se vee horrible la parte del TakeDamage asi que les dejo el sma adjunto asi lo ven mejor
Con esto pueden crear facilmente un menu o agregar al hud el precentaje de xp de cada arma...
Todo en bandeja no se los voy a dar xD, demasiado les explique
Acepto criticas siempre y cuando sean constructivas!
Saludos...!
Bueno empezamos
Código PHP:
// Creamos una variable con multidimencional (5 celdas)
// En esta variable guardaremos el nivel de cada tipo de arma, en este caso son 5 tipos de armas
new g_levelexp[33][5]
// Ahora creamos la variable de experiencia tambien con 5 dimenciones, ya que son 5 tipos de armas
// En este caso la variable la hago flotante para que pueda ir sumando en decimales y poder mostrar un porcentaje
// Cada uno la modifica asu gusto
new Float: g_exp[33][5]
// Pasamos a las constantes
// Creamos una constante para definir el nombre de cada tipo de armamento
new const g_expname[][] = {
"Pistolas",
"Gruesos calibres",
"Semi-automaticas",
"Rifles de asalto",
"Rifles de presicion"
}
// Bien, ahora nos dirigimos al la funcion de cuando recibimos o hacemos daño, al forward TakeDamage
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
static gWeapId // Creamos un static para guardar que tipo de arma que lleve el jugador
if (is_user_connected(attacker)) // Si el usuario esta conectado
gWeapId = get_user_weapon(attacker) // A la variable gWeapIid le asignamos una funcion que detecta que tipo de arma esta usando el jugador
// Nos dirigimos al while que condiciona la ganancia de ammopacks con respecto al daño acumulado y agregamos lo siguiente...
// Reward ammo packs for every [ammo damage] dealt
while (g_damagedealt[attacker] > (get_pcvar_num(cvar_ammodamage)))
{
g_ammopacks[attacker]+= get_pcvar_num(cvar_ammoreward)
g_damagedealt[attacker] -= get_pcvar_num(cvar_ammodamage)
switch (gWeapId) // Hacemos un switch para ver que arma esta usando y que exp sumarle
{
// En el caso de que este usando alguna de las pistolas...
case CSW_GLOCK18,CSW_P228,CSW_FIVESEVEN,CSW_USP,CSW_DEAGLE,CSW_ELITE: g_exp[attacker][0] += 0.01 // Le sumamos 0.01 de experiencia
// En el caso de que este usando alguna de las armas de grueso calibre.
case CSW_XM1014,CSW_M3,CSW_M249: g_exp[attacker][1] += 0.01 // Le sumamos 0.01 de experiencia
// En el caso de que este usando alguna de las armas semiautomaticas...
case CSW_TMP,CSW_MAC10,CSW_UMP45,CSW_MP5NAVY,CSW_FAMAS,CSW_GALIL,CSW_AUG,CSW_P90: g_exp[attacker][2] += 0.01 // Le sumamos 0.01 de experiencia
// En el caso de que este usando alguna de los rifles de asalto...
case CSW_SG552,CSW_AK47,CSW_M4A1: g_exp[attacker][3] += 0.01 // Le sumamos 0.01 de experiencia
// En el caso de que este usando alguna de los rifles de precision
case CSW_AWP,CSW_SCOUT,CSW_SG550,CSW_G3SG1: g_exp[attacker][4] += 0.01 // Le sumamos 0.01 de experiencia
}
check_exp(attacker) // Checkeamos la exp del atacante aver si es apto para subir de lvl del arma correspondiente
}
}
check_exp(id) // Creamos la funcion para incrementar el nivel del arma
{
for (new i = 0; i < sizeof g_expname; i++) // Hacemos un loop para saber que tipo de exp gano el atacante, el limite del loop sera la cantidad de los nombres de los tipos de armas
{
if(g_levelexp[id][i] >= 10) return; // Aca ponemos un limite para que si es el nivel es mayor o igual a 10 en el tipo de arma que gana la exp
while (g_exp[id][i] >= 100.00) // Hacemos un while para que mientras la exp del tipo de arma sea mayor o igual a 100.00 o sea lleguemos a un 100%
{
g_levelexp[id][i]++ // Incrementamos el nivel del respectivo tipo de arma
zp_colored_print(id, "^x04[ZP]^x01 Has incrementado tu habilidad con ^x04%s^x01 al Nivel ^x04%d^x01", g_expname[i], g_levelexp[id][i]) // Mandamos un print para avisar a q nivel subio y q tipo de arma subio
g_exp[id][i] = 0.00 // Reseteamos la exp q llego a 100% a 0.00 %
}
break; // Cerramos el loop
}
}
// Vamos a la funcion reset_vars
// Reset Player Vars
reset_vars(id, resetall, resetpj)
{
if (resetall) // Adentro de esta funcion se resetean algunas variables al conectarse el jugador al sv
{
for (new i = 0; i < sizeof g_expname; i++) // Hacemos un loop con todas las exp y niveles de las armas
g_levelexp[id][i] = g_exp[id][i] = 0 // reiniciamos todo a 0
}
}
Lo edite de milmaneras al code pero se vee horrible la parte del TakeDamage asi que les dejo el sma adjunto asi lo ven mejor
Con esto pueden crear facilmente un menu o agregar al hud el precentaje de xp de cada arma...
Todo en bandeja no se los voy a dar xD, demasiado les explique
Acepto criticas siempre y cuando sean constructivas!
Saludos...!