Hola soy novato en taringa viene con la intencion de eseñarles a los que son nuevos en temas de plugin y pawn del amx studio . Hoy les enseñare a crear sistema de niveles para su zp .
Bueno comenzemos .
Se van a // Player vars
Debajo de new g_survivor[33] // is surivor Agregan :
Bien ahora vamos a poner el sonido cuando pasa de nivel y cuando baja de nivel nos vamos a :
new const sound_win_zombies[][] = { "zombie_plague/zombiewin.wav" } debajo agregamos :
Bien ahora hay que precacharlo nos vamos a :
// Custom sounds y debajo agregamos :
Bien ahora vamos a setear los niveles y los niveles maximos nos vamos a :
// Player Vars al final antes de llegar a //Game vars y ahi agregamos :
Bien ahora vamos a restringir las armas por niveles nos vamos a :
public show_menu_buy1(taskid) y lo cambiamos por esto:
Ahora vamos a crear la const para los niveles de las armas .
nos vamos a // Buy Menu: Primary and Secondary Weapons y debajo agregamos :
Ahora lo que hicimos antes fue hacer que se vea en el menu de las armas que level pide , ahora lo vamos a bloquear si no tiene el nivel suficiente no la podra comprar entonces nos vamos a public menu_buy1(id, key) y lo cambiamos por esto :
Bueno ahora vamos a setear que cuando el player entre al server sea level 1 como hacemos nos vamos a // Reset Player Vars y nos vamos a la parte de if (resetall) ahi agregamos :
Ahora vamos a crear el famoso hud que nos indica los niveles que tenemos nos vamos a // Show your health , tambien si usan versiones anteriores van a // Show health y debajo buscamos esto:
if (g_showstats[id]) y lo cambiamos por este :
Bien ahora esta 100% funcional los niveles lo que vamos a hacer es crear un print que informe cuando subimos y pasamos de nivel , nos vamos al final del plugin incluso debajo de la } y agregamos :
Bueno ya esta funcional copilen , pegen el amxx en plugin , creen una partida en el cs y disfruten leveleando a lo loco , un salu2 y nos vemos en la prox guia de los sistemas de reset , menus , submenus y guardado nvault , fvault .
Bueno comenzemos .
Se van a // Player vars
Debajo de new g_survivor[33] // is surivor Agregan :
g_level[33] // la variable de los niveles
Bien ahora vamos a poner el sonido cuando pasa de nivel y cuando baja de nivel nos vamos a :
new const sound_win_zombies[][] = { "zombie_plague/zombiewin.wav" } debajo agregamos :
new const sound_level_up[][] = { "zombie_plague/za_levelup.wav" }
new const sound_level_down[][] = { "zombie_plague/za_leveldown.wav" }
Bien ahora hay que precacharlo nos vamos a :
// Custom sounds y debajo agregamos :
for (i = 0; i < sizeof sound_level_up; i++)
engfunc(EngFunc_PrecacheSound, sound_level_up[i])
for (i = 0; i < sizeof sound_level_down; i++)
engfunc(EngFunc_PrecacheSound, sound_level_down[i])
for (i = 0; i < sizeof sound_win_zombies; i++)
Bien ahora vamos a setear los niveles y los niveles maximos nos vamos a :
// Player Vars al final antes de llegar a //Game vars y ahi agregamos :
#define MAX_LVL 6 // si agregan mas nivels cambien ese 6 por la cantidad de niveles que pusieron
new const iLevels[MAX_LVL] = { 0, 1, 50, 100, 150, 200 } // ahi agregamos 6 niveles si quieren mas sigan poniendo , y la cantidad de ammo packs que quieren para el proximo nivel
Bien ahora vamos a restringir las armas por niveles nos vamos a :
public show_menu_buy1(taskid) y lo cambiamos por esto:
// Buy Menu 1
public show_menu_buy1(taskid)
{
// Get player id
static id
(taskid > g_maxplayers) ? (id = ID_SPAWN) : (id = taskid);
// Zombies, survivors or wesker get no guns
if (g_zombie[id] || g_survivor[id] || g_wesker[id] || !is_user_alive(id))
return;
// Bots pick their weapons randomly
if (is_user_bot(id))
{
buy_primary_weapon(id, random_num(0, sizeof g_primary_items - 1))
menu_buy2(id, random_num(0, sizeof g_secondary_items - 1))
return;
}
static menu[999], len, weap
len = 0
// Title
len += formatex(menu[len], sizeof menu - 1 - len, "^nyCategoria %s - Arma Primaria r[%d-%d]^n^n", g_categoryb[id] ? "B" : "A", WPN_STARTID+1, min(WPN_STARTID+7, WPN_MAXIDS))
// 1-7. Weapon List
for (weap = WPN_STARTID; weap < min(WPN_STARTID+7, WPN_MAXIDS); weap++)
if (g_level[id],g_resets[id] >= g_primary_level[weap],resetsprimary[weap])
len += formatex(menu[len], sizeof menu - 1 - len, "r%d.w %s [yMin Nivelw%d]^n", weap-WPN_STARTID+1, WEAPONNAMES[get_weaponid(g_primary_items[weap])], g_primary_level[weap])
else
len += formatex(menu[len], sizeof menu - 1 - len, "r%d.d %s [rMin Nivelw%dd]^n", weap-WPN_STARTID+1, WEAPONNAMES[get_weaponid(g_primary_items[weap])], g_primary_level[weap])
// 8. Back 9. Next - 0. Exit
len += formatex(menu[len], sizeof menu - 1 - len, "^nr8.y Anterior^nr9.y Siguiente^n^nr0.y Salir")
show_menu(id, KEYSMENU, menu, -1, "Buy Menu 1")
}
Ahora vamos a crear la const para los niveles de las armas .
nos vamos a // Buy Menu: Primary and Secondary Weapons y debajo agregamos :
new const g_primary_level[] = {0, 1,2, 3, 4, 5, 6, 6, 6, 6, 6, 1, 2, 1, 3, 5,4, 6 } // 18 armas = 18 levels para las armas del 1al 6 si agregaron mas level cambien los 6 por otros niveles ejemplo 50 , 75 etc.
Ahora lo que hicimos antes fue hacer que se vea en el menu de las armas que level pide , ahora lo vamos a bloquear si no tiene el nivel suficiente no la podra comprar entonces nos vamos a public menu_buy1(id, key) y lo cambiamos por esto :
// Buy Menu 1
public menu_buy1(id, key)
{
// Zombies, survivors or weskers get no guns
if (g_zombie[id] || g_survivor[id] || g_wesker[id] || !is_user_alive(id))
return PLUGIN_HANDLED;
// Special keys / weapon list exceeded
if (key >= MENU_KEY_BACK || WPN_SELECTION >= WPN_MAXIDS)
{
switch (key)
{
case MENU_KEY_BACK: // back
{
if (WPN_STARTID-7 >= 0) WPN_STARTID -= 7
}
case MENU_KEY_NEXT: // next
{
if (WPN_STARTID+7 < WPN_MAXIDS) WPN_STARTID += 7
}
case MENU_KEY_EXIT: // exit
{
return PLUGIN_HANDLED;
}
}
// Show buy menu again
show_menu_buy1(id)
return PLUGIN_HANDLED;
}
if(g_level[id] < g_primary_level[WPN_SELECTION])
{
show_menu_buy1(id)
client_print(id, print_center, "No Tenes Nivel Suficiente Para usar esta Arma (Nivel Requerido %d)", g_primary_level[WPN_SELECTION])
zp_colored_print(id, "^x04[Se]^x01 No Tenes Nivel Suficiente Para usar esta Arma ^x03(Nivel Requerido %d)", g_primary_level[WPN_SELECTION])
return PLUGIN_HANDLED;
}
// Buy primary weapon
buy_primary_weapon(id, WPN_SELECTION)
// Show pistols menu
show_menu_buy2(id)
return PLUGIN_HANDLED;
}
Bueno ahora vamos a setear que cuando el player entre al server sea level 1 como hacemos nos vamos a // Reset Player Vars y nos vamos a la parte de if (resetall) ahi agregamos :
g_level[id] = 1
Ahora vamos a crear el famoso hud que nos indica los niveles que tenemos nos vamos a // Show your health , tambien si usan versiones anteriores van a // Show health y debajo buscamos esto:
if (g_showstats[id]) y lo cambiamos por este :
if (g_showstats[id])
{
set_hudmessage(212, 255, 255, 0.1, 0.1, 0, 6.0, 9.9999)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync2, "Clase: %s^nNivel: %d^nAmmoPacks: %d^nVitalidad: %d", class, g_level[id,g_ammopacks[id], pev(id, pev_health))
}
else if (!g_showstats[id]) return;
}
}
Bien ahora esta 100% funcional los niveles lo que vamos a hacer es crear un print que informe cuando subimos y pasamos de nivel , nos vamos al final del plugin incluso debajo de la } y agregamos :
// Actualizar nivel y rango
public update_level(taskid)
{
static id
id = ID_UPDATE;
// Subir nivel
if (g_level[id] < 255)
{
while (g_ammopacks[id] >= iLevels[g_level[id] + 1])
{
g_level[id]++
zp_colored_print(id, "^x04[ZE]^x01 Felicidades! Has ascendido a nivel: ^x04%d^x01", g_level[id])
OnePlaySound(id, sound_level_up[random_num(0, sizeof sound_level_up -1)])
}
}
// Decrecer nivel
if (g_level[id] > 1)
{
while (g_ammopacks[id] < iLevels[g_level[id]])
{
g_level[id]--
zp_colored_print(id, "^x04[ZE]^x01 Mala suerte! Has descendido a nivel: ^x04%d^x01", g_level[id])
OnePlaySound(id, sound_level_down[random_num(0, sizeof sound_level_down -1)])
}
}
Bueno ya esta funcional copilen , pegen el amxx en plugin , creen una partida en el cs y disfruten leveleando a lo loco , un salu2 y nos vemos en la prox guia de los sistemas de reset , menus , submenus y guardado nvault , fvault .