Raised This Month: $51 Target: $400
 12% 

[Guia]Menu de Armas Con Niveles (BlackFur)


  
 
 
Thread Tools Display Modes
Author Message
BlackFur
BANNED
Join Date: Apr 2012
Location: RCL
Old 12-08-2012 , 09:42   [Guia]Menu de Armas Con Niveles (BlackFur)
#1

PHP Code:
/*

    Menu De Armas Por BlackFur
    Requerimientos : Sistema de Nivel Basico

*/

/* Primero Paso
Descripcion : Creamos el enum para darle una etiqueta a la const menu_death ,
y unas defines para luego usarlas.
"default" significa que no tendra ningun modelo en especial el cual no sera precacheado luego.

*/
#define TAG "^x04[ZP]^x01"
#define UDEAD "Solo cuando estes vivo"
#define is_human(%1) (!g_zombie[%1] && !g_survivor[%1] && !g_sniper[%1])

enum _:menu_dm
{
    
item_name_v2[90] , // nombre de la arma (menu)
    
item_id // id = CSW_
    
item_csname[90] , // nombre (cs) weapon_
    
red // color rojo del efecto
    
green // color verde del ""
    
blue // "" azul del ""
    
Float:item_damage // Damage
    
item_level // Level
    
item_modelo[90] , // Modelo v_
    
item_modelo_2[90// Modelo p_
}

new const 
menu_death[][menu_dm] =
{
    { 
"MAC 10" CSW_MAC10 "weapon_mac10" 0  1.0 ,  "default" "default"} , 
    { 
"Sniper Awp AE2" CSW_AWP "weapon_awp" 255 255 8.0 "models/zp/v_awp_sniper.mdl" "models/zp/p_awp_sniper.mdl" }
}

/* Segundos Paso

Descripcion : Creacion de algunas variables.
1.- usada para el menu
2.- usada para guardar la seleccion automatica y el arma anterior
3.- similar a la segunda pero esta puede ser usada para dar x arma a un survivor o algo , asi
no se cambia la seleccion anterior.

*/
new menu_armas
new g_save_weapons[33][2]
new 
g_arma_prim[33]

new 
Trie:g_tClaseSprite
new g_trace

/* Tercer Paso 
Descripcion : Precacheamos los modelos que usaremos y un efecto aportado por DJHD.
Aqui el equal es usado para saber si el modelo es default y asi no precachearlo , razon de
esto ya que el cs tiene un limite de precache con esto se ahorra.
*/

public plugin_precache()
{
    for(new 
sizeof menu_death i++)
    {
        if(!(
equal(menu_death[i][item_modelo] , "default")))
            
precache_model(menu_death[i][item_modelo])
            
        if(!(
equal(menu_death[i][item_modelo_2] , "default")))
            
precache_model(menu_death[i][item_modelo_2])
    }
    
    
g_tClaseSprite TrieCreate()
    
RegisterHam(Ham_TraceAttack"worldspawn""TraceAttack"1)
    
TrieSetCell(g_tClaseSprite"worldspawn"1)
    
RegisterHam(Ham_TraceAttack"player""TraceAttack"1)
    
TrieSetCell(g_tClaseSprite"player"1)
    
register_forward(FM_Spawn"Spawn"1)
    
g_trace engfunc(EngFunc_PrecacheModel"sprites/laserbeam.spr")
}

/* Creamos el Menu
Descripcion: tenia 3 opciones para las pistolas secundarias , pero lo saque ya que no se los dejare
todo en bandeja.
*/

public show_menu_selec(id)
{
    new 
menu_selec_arm menu_create("\y[\rS\y]eleccion de Armas" "handler_selec_arm")
    
    
menu_additem(menu_selec_arm "\yEscoger Primarias" "1")
    
    if(
g_save_weapons[id][0])
        
menu_additem(menu_selec_arm "\yRecordar Armas\r [Activado]" "2")
    else
        
menu_additem(menu_selec_arm "\yRecordar Armas\r [Desactivado]" "2")

    
menu_setprop(menu_selec_arm MPROP_EXITNAME,"\ySalir")
    
menu_display(idmenu_selec_arm 0)
    
    return 
PLUGIN_HANDLED
}

public 
handler_selec_arm(id menu_selec_arm item)
{
    if(
item == MENU_EXIT || !is_user_alive(id))
        return 
PLUGIN_HANDLED
    
    
if(!is_human(id))
    {
        
zp_colored_print(id "%s Solo Para^x04 Humanos." TAG)
        return 
PLUGIN_HANDLED
    
}
        
    switch(
item)
    {
        case 
:
        {
            if(
g_canbuy[id])
                
show_menu_armas(id+TASK_SPAWN 0)
            else
                
zp_colored_print(id "%s Ya Has Comprado Tus Armas^x04 Primarias." TAG)
        }
        
        case 
:
        {
            if(
g_save_weapons[id][0])
                
g_save_weapons[id][0] = false
            
else    
                
g_save_weapons[id][0] = true
            
            g_save_weapons
[id][1] = -
            
/* -1 es para que no de ninguna arma */
            
            
show_menu_selec(id)
            
zp_colored_print(id "%s Has^x04 %s^x01 Tu^x04 AutoSeleccion." TAG ,g_save_weapons[id][0] ? "Activado" "Desactivado")
        }
        
        
    }
    return 
PLUGIN_HANDLED
}

public 
show_menu_armas(taskid page)
{    
    new 
id ID_SPAWN
    
    
new len[999] , temp[22]
    
    if(
can_buy(id)) // es para chequear algunas condiciones
        
return PLUGIN_HANDLED
    
    menu_armas 
menu_create("\y[\rA\y]rmas Primarias" "handler_primarias")
    
    if(
g_save_weapons[id][0]) // Si Tiene Su Auto-Seleccion
    
{
        if(
g_save_weapons[id][1] != -1// No es igual a -1 por lo de arriba
        
{
            
handler_primarias(id menu_armas g_save_weapons[id][1])
            return 
PLUGIN_HANDLED
            
            
/*
            
            Llamamos directo al handler y returneamos.
            
            */
        
}
    }
    
    for(new 
sizeof menu_death i++)
    {
        if(
g_level[id] >= menu_death[i][item_level])
            
formatex(len charsmax(len) , "\y%s \r[Disponible]" menu_death[i][item_name_v2])
        else
            
formatex(len charsmax(len) , "\d%s \r[Nivel Requerido : %d]" menu_death[i][item_name_v2] , menu_death[i][item_level])

        
num_to_str(i,temp2)
        
menu_additem(menu_armas len temp)
    }
    
    
menu_setprop(menu_armas MPROP_BACKNAME,"\yAtras")
    
menu_setprop(menu_armas MPROP_NEXTNAME,"\ySiguiente")
    
menu_setprop(menu_armas MPROP_EXITNAME,"\ySalir")
    
menu_display(idmenu_armas page)
    
    return 
PLUGIN_HANDLED
}

public 
handler_primarias(id menu_armas item)
{
    if(
item == MENU_EXIT || !is_user_alive(id))
    {
        
menu_destroy(menu_armas)
        return 
PLUGIN_HANDLED
    
}
    
    if(
can_buy(id))
        return 
PLUGIN_HANDLED
        
    
new page armas_2 // Obtenemos la pagina del menu para luego abrir hay mismo
    
player_menu_info(id menu_armas armas_2 page)
    
    if(
g_level[id] >= menu_death[item][item_level]) // Nivel Mayor al Requerido
    
{
        
g_arma_prim[id] = item // guardamos el item en esta variable
        
g_save_weapons[id][1] = item // guardamos el item en este variable
        
drop_weapons(id 1// le botamos su arma primaria
        
fm_give_item(id menu_death[item][item_csname]) // le damos el item
        
ExecuteHamB(Ham_GiveAmmoidMAXBPAMMO[menu_death[item][item_id]], AMMOTYPE[menu_death[item][item_id]], MAXBPAMMO[menu_death[item][item_id]])
        
g_canbuy[id] = false // para que no pueda volver a abrir el menu
    
}
    else
    {
        
zp_colored_print(id "%s Necesitas Ser Nivel %d Para Comprar Esta Arma." TAG menu_death[item][item_level])
        
show_menu_armas(id+TASK_SPAWN page// Aqui le abrimos el menu de nuevo pero con la pagina que estaba viendo
    
}
    return 
PLUGIN_HANDLED
}

can_buy(id)
{
    if(!
is_user_alive(id))
    {
        
zp_colored_print(id "%s %s." TAG UDEAD)
        return 
PLUGIN_HANDLED
    
}
    
    if(!
is_human(id))
    {
        
zp_colored_print(id "%s Solo Para^x04 Humanos." TAG)
        return 
PLUGIN_HANDLED
    
}
    
    if(!
g_canbuy[id])
    {
        
zp_colored_print(id "%s Ya Has Comprado Tu Arma^x04 Primarias." TAG)
        return 
PLUGIN_HANDLED
    
}
    return 
PLUGIN_CONTINUE
}

/* Cuarto Paso

Descripcion: Setear Damage , Modelos y Efectos

La parte de los efectos no la podre explicar ya que no fue hecha por mi

*/

/* Buscan replace_weapon_models(id, weaponid)
y abajo del switch ponen lo siguiente */

if(weaponid == menu_death[g_arma_prim[id]][item_id]) // si la arma que tiene == a la del menu que el habia obtenido
{
    if(!
equal(menu_death[g_arma_prim[id]][item_modelo] , "default"))// Si no es default le damos el modelo 
        
set_pev(id pev_viewmodel2 menu_death[g_arma_prim[id]][item_modelo])
        
    if(!
equal(menu_death[g_arma_prim[id]][item_modelo_2] , "default"))
        
set_pev(id pev_weaponmodel2 menu_death[g_arma_prim[id]][item_modelo_2])// Si no es default le damos el modelo
}

/* Ahora buscan 
// Attacker is human...
if (!g_zombie[attacker])
*/
if(g_currentweapon[attacker] == menu_death[g_arma_prim[attacker]][item_id]) // Arma que tiene == a la arma que obtuvo del menu
    
SetHamParamFloat(damage *= menu_death[g_arma_prim[attacker]][item_damage]) // le damos el damage de dicha arma
    
/* Al final del plugin */

public Spawn(iEnt)
{
    static 
szClassName[32]
    
pev(iEntpev_classnameszClassNamecharsmax(szClassName))
         
    if(
pev_valid(iEnt))
    {
        if(!
TrieKeyExists(g_tClaseSpriteszClassName))
        {
            
RegisterHam(Ham_TraceAttackszClassName"TraceAttack"1)
            
TrieSetCell(g_tClaseSpriteszClassName1)
        }
    }
}

public 
plugin_end()
{
    
TrieDestroy(g_tClaseSprite)
}
    
public 
TraceAttack(victimattackerFloat:damageFloat:direction[3], iTrdamage_type)
{
    if (!
is_user_alive(attacker) && !is_user_connected(attacker))
        return 
HAM_IGNORED
    
    
if(get_user_weapon(attacker) == CSW_KNIFE)
        return 
HAM_IGNORED
    
    
new Float:vecEndPos[3]
    
get_tr2(iTrTR_vecEndPosvecEndPos)
    
    new 
origin[3]
    
get_user_origin(attacker origin)
    new 
weapon get_user_weapon(attacker)
    
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYvecEndPos0)
    
write_byte(TE_BEAMENTPOINT)
    
write_short(attacker 0x1000)
    
engfunc(EngFunc_WriteCoordvecEndPos[0])
    
engfunc(EngFunc_WriteCoordvecEndPos[1])
    
engfunc(EngFunc_WriteCoordvecEndPos[2])
    
write_short(g_trace)
    
write_byte (1)            
    
write_byte (10)                
    
write_byte (1)
    
write_byte (10)     
    
write_byte(0)
    if(
weapon == menu_death[g_arma_prim[attacker]][item_id])
    {
        
write_byte(menu_death[g_arma_prim[attacker]][red])
        
write_byte(menu_death[g_arma_prim[attacker]][green])
        
write_byte(menu_death[g_arma_prim[attacker]][blue])
    }
    else
    {
        
write_byte(0)
        
write_byte(0)
        
write_byte(0)
    }
    
write_byte(random_num(150 200))
    
write_byte(0)
    
message_end()
        
    
engfunc(EngFunc_MessageBeginMSG_PASSVC_TEMPENTITYvecEndPos 0)
    
write_byte(TE_DLIGHT// TE id
    
engfunc(EngFunc_WriteCoordvecEndPos[0])
    
engfunc(EngFunc_WriteCoordvecEndPos[1])
    
engfunc(EngFunc_WriteCoordvecEndPos[2])
    
write_byte(5)
    if(
weapon == menu_death[g_arma_prim[attacker]][item_id])
    {
        
write_byte(menu_death[g_arma_prim[attacker]][red])
        
write_byte(menu_death[g_arma_prim[attacker]][green])
        
write_byte(menu_death[g_arma_prim[attacker]][blue])
    }
    else
    {
        
write_byte(0)
        
write_byte(0)
        
write_byte(0)
    }
    
write_byte(10)
    
write_byte(10)
    
message_end()
    return 
HAM_IGNORED
}

/* En reset_vars(id , all)*/

if (resetall)
{
    
// Code 
    // Code 
    // Code 
    
g_save_weapons[id][0] = 0
    g_save_weapons
[id][1] = -1
    g_arma_prim
[id] = 0

Como Puedo Agregar Una Arma?

Haciendo lo Siguiente :

PHP Code:
new const menu_death[][menu_dm] =
{
    { 
"MAC 10" CSW_MAC10 "weapon_mac10" 0  1.0 ,  "default" "default"} , 
    { 
"Sniper Awp AE2" CSW_AWP "weapon_awp" 255 255 8.0 "models/zp/v_awp_sniper.mdl" "models/zp/p_awp_sniper.mdl" }

Lo Editan y Agregan Algo Ejemplo Esto
PHP Code:
new const menu_death[][menu_dm] =
{
    { 
"MAC 10" CSW_MAC10 "weapon_mac10" 0  1.0 ,  "default" "default"} , 
    { 
"Sniper Awp AE2" CSW_AWP "weapon_awp" 255 255 8.0 "models/zp/v_awp_sniper.mdl" "models/zp/p_awp_sniper.mdl" } ,
    { 
"AK GOLD" CSW_AK47 "weapon_ak47" 255 255 3.0 3"models/zp/v_akgold.mdl" "models/zp/p_akgold.mdl" }

Con esto ahora tenemos una Golden Ak , Nivel Pedido 3 , Efecto : Amarillo ( 255 255 0 )

Como le puedo dar una arma a un survivor o sniper?

Para hacer esto hacen lo siguiente:
Vamos a :

PHP Code:
// Give survivor his own weapon 
y Escriben :

PHP Code:
g_arma_prim[id] = // Antes de fm_give_item 
En este caso 2 es la golden AK ( empieza de 0 == MAC10 en este caso)
y cambian la cvar segun la arma que le van a dar en este caso ak47

PHP Code:
cvar_survweapon register_cvar("zp_surv_weapon""weapon_m249"
->

PHP Code:
cvar_survweapon register_cvar("zp_surv_weapon""weapon_ak47"
Como puedo abrir el menu ?

PHP Code:
/* Solo queda mostrar el menu para eso se van a Show custom buy menu
y remplazan por esto */

if (get_pcvar_num(cvar_buycustom))
    
set_task(0.2"show_menu_armas"id+TASK_SPAWN)

/* Ahora Mostrar El Menu Cuando uno aprete M1
para eso se van a public menu_game(id, key) y remplazan el case 0 por esto */

case 0:
{
    if(
is_human(id)) 
        
show_menu_selec(id)


Last edited by BlackFur; 12-11-2012 at 19:58.
BlackFur is offline
AdNPrO
Senior Member
Join Date: Feb 2012
Location: Santiago, Chile
Old 12-08-2012 , 10:18   Re: [Guia]Menu de Armas
#2

WOW! Me re sirvió Gracias BlackFur
AdNPrO is offline
Send a message via MSN to AdNPrO
rak
Veteran Member
Join Date: Oct 2011
Location: banned country
Old 12-08-2012 , 10:22   Re: [Guia]Menu de Armas
#3

si lo hiciste vos.. por que no lo explicas?; si no me equivoco.. ya esta el forward FM_Spawn que se usa en el zp; para que lo agregas otra vez?
__________________

www.amxmodx-es.com

Steam: Luchokoldo
rak is offline
Send a message via MSN to rak Send a message via Skype™ to rak
BlackFur
BANNED
Join Date: Apr 2012
Location: RCL
Old 12-08-2012 , 10:25   Re: [Guia]Menu de Armas
#4

Lo del efecto dije que yo no lo hice asi que por eso no podria explicarlo .

PD : me van a despedir si sigo aqui XD
BlackFur is offline
rak
Veteran Member
Join Date: Oct 2011
Location: banned country
Old 12-08-2012 , 10:30   Re: [Guia]Menu de Armas
#5

pero lo demas?...
__________________

www.amxmodx-es.com

Steam: Luchokoldo
rak is offline
Send a message via MSN to rak Send a message via Skype™ to rak
AdNPrO
Senior Member
Join Date: Feb 2012
Location: Santiago, Chile
Old 12-08-2012 , 10:35   Re: [Guia]Menu de Armas
#6

PHP Code:
public show_menu_selec(id

    new 
menu_selec_arm menu_create("\y[\rS\y]eleccion de Armas" "handler_selec_arm"
    
    
menu_additem(menu_selec_arm "\yEscoger Primarias" "1"
    
    if(
g_save_weapons[id][0]) 
        
menu_additem(menu_selec_arm "\yRecordar Armas\r [Activado]" "2"
    else 
        
menu_additem(menu_selec_arm "\yRecordar Armas\r [Desactivado]" "2"
    
    
menu_setprop(menu_selec_arm MPROP_EXITNAME,"\ySalir"
    
menu_display(idmenu_selec_arm 0
    
    return 
PLUGIN_HANDLED 


public 
handler_selec_arm(id menu_selec_arm item

    if(
item == MENU_EXIT || !is_user_alive(id)) 
        return 
PLUGIN_HANDLED 
    
    
if(!is_human(id)) 
    { 
        
zp_colored_print(id "%s Solo Para^x04 Humanos." TAG
        return 
PLUGIN_HANDLED 
    

    
    switch(
item
    { 
        case 

        { 
            if(
g_canbuy[id]) 
                
show_menu_armas(id+TASK_SPAWN 0
            else 
                
zp_colored_print(id "%s Ya Has Comprado Tus Armas^x04 Primarias." TAG
        } 
        
        case 

        { 
            if(
g_save_weapons[id][0]) 
                
g_save_weapons[id][0] = false 
            
else     
                
g_save_weapons[id][0] = true 
            
            g_save_weapons
[id][1] = -1  
            
/* -1 es para que no de ninguna arma */ 
            
            
show_menu_selec(id
            
zp_colored_print(id "%s Has^x04 %s^x01 Tu^x04 AutoSeleccion." TAG ,g_save_weapons[id][0] ? "Activado" "Desactivado"
        } 
        
        
    } 
    return 
PLUGIN_HANDLED 



PHP Code:
public show_menu_selec(id

    new 
menu_selec_arm menu_create("\y[\rS\y]eleccion de Armas" "handler_selec_arm"
    
    
menu_additem(menu_selec_arm "\yEscoger Primarias" "1"
    
    if(
g_save_weapons[id][0]) 
        
menu_additem(menu_selec_arm "\yRecordar Armas\r [Activado]" "2"
    else 
        
menu_additem(menu_selec_arm "\yRecordar Armas\r [Desactivado]" "2"
    
    
menu_setprop(menu_selec_arm MPROP_EXITNAME,"\ySalir"
    
menu_display(idmenu_selec_arm 0
    
    return 
PLUGIN_HANDLED 


public 
handler_selec_arm(id menu_selec_arm item

    if(
item == MENU_EXIT || !is_user_alive(id)) 
        return 
PLUGIN_HANDLED 
    
    
if(!is_human(id)) 
    { 
        
zp_colored_print(id "%s Solo Para^x04 Humanos." TAG
        return 
PLUGIN_HANDLED 
    

    
    switch(
item
    { 
        case 

        { 
            if(
g_canbuy[id]) 
                
show_menu_armas(id+TASK_SPAWN 0
            else 
                
zp_colored_print(id "%s Ya Has Comprado Tus Armas^x04 Primarias." TAG
        } 
        
        case 

        { 
            if(
g_save_weapons[id][0]) 
                
g_save_weapons[id][0] = false 
            
else     
                
g_save_weapons[id][0] = true 
            
            g_save_weapons
[id][1] = -1  
            
/* -1 es para que no de ninguna arma */ 
            
            
show_menu_selec(id
            
zp_colored_print(id "%s Has^x04 %s^x01 Tu^x04 AutoSeleccion." TAG ,g_save_weapons[id][0] ? "Activado" "Desactivado"
        } 
        
        
    } 
    return 
PLUGIN_HANDLED 

Cambiales los cases.
AdNPrO is offline
Send a message via MSN to AdNPrO
BlackFur
BANNED
Join Date: Apr 2012
Location: RCL
Old 12-08-2012 , 11:28   Re: [Guia]Menu de Armas
#7

Tan bien los cases... pruebalo como tu lo hiciste y si te funciona deja tu comentario si no borralo.

PD : no comentes solo borra.

Last edited by BlackFur; 12-08-2012 at 11:31.
BlackFur is offline
gladius
Veteran Member
Join Date: Jul 2008
Location: Santiago, Chile
Old 12-08-2012 , 13:39   Re: [Guia]Menu de Armas
#8

Quote:
Originally Posted by rak View Post
si lo hiciste vos.. por que no lo explicas?; si no me equivoco.. ya esta el forward FM_Spawn que se usa en el zp; para que lo agregas otra vez?
Si es externo al plugin de Zombie Plague está bien que lo use.
__________________
Proyects
Kreedz Chile Mod [100%] (Fixing some details).

gladius is offline
Send a message via MSN to gladius Send a message via Skype™ to gladius
DJHD!
Veteran Member
Join Date: Dec 2009
Location: Santiago, Chile
Old 12-08-2012 , 14:49   Re: [Guia]Menu de Armas
#9

BlackFur ql yo lo iba a publicar pero mejorado...
__________________
Quote:
Originally Posted by XINLEI View Post
Porque rocccos trata de ser el metalicross que nunca va a poder ser.
DJHD! is offline
Send a message via MSN to DJHD!
BlackFur
BANNED
Join Date: Apr 2012
Location: RCL
Old 12-08-2012 , 17:25   Re: [Guia]Menu de Armas
#10

Quote:
Originally Posted by rak View Post
pero lo demas?...
Todo el code es hecho por mi , menos lo del efecto , dime que cosas quiere que explique
BlackFur is offline
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 10:58.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode