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

[ZP] Campo de Fuerza


  
 
 
Thread Tools Display Modes
Author Message
Fail!
BANNED
Join Date: Jan 2010
Location: BFTCommunity
Old 05-08-2010 , 13:31   [ZP] Campo de Fuerza
#1

Campo de Fuerza


  • Descripcion: En este tutorial enseñare a crear una nueva clase de bomba con la entidad del campo de fuerza.
  • Code by: lucas_7_94
  • Skins / Models by: Speed! / 01101101

Bueno empecemos, antes que nada abrimos el "zombie_plague40.sma" o como lo tengan.

Luego nos dirigimos al inicio del plugin, debajo de los includes colocamos lo siguiente:

PHP Code:
#define ONE_COLOR // color de la burbuja.
#define CAMPO_TASK // task = cuanto dura el campo de fuerza y lo elimina.

//#define RANDOM_COLOR // color por default.

#if defined ONE_COLOR
new Float:colour_force_shield[3] = { 255.0 255.0 255.0 // color de la burbuja ( red, gree, blue ).
#endif

new g_bubble_bomb[33// variable del campo
new const model_grenade[] = "models/zombie_plague/v_auragren.mdl" // model "v_".
new const model[] = "models/zombie_plague/aura8.mdl" // model de la burbuja.
new const w_model[] = "models/zombie_plague/w_aura.mdl" // model "w_".
new const entclas[] = "campo_grenade_forze" // nombre de la clase de entidad. 
Luego buscamos la siguiente linea:

PHP Code:
public plugin_precache() 
Y debajo del "{" colocamos lo siguiente:

PHP Code:
    engfunc(EngFunc_PrecacheModelmodel_grenade// precacheamos el model "v_".
    
engfunc(EngFunc_PrecacheModelmodel// precacheamos el model de la burbuja.
    
engfunc(EngFunc_PrecacheModelw_model// precacheamos el model "w_". 
Una vez terminado eso vamos a:

PHP Code:
public plugin_init() 
Y colocamos lo siguiente:

PHP Code:
    register_clcmd("BUBBLEBOMB""give_item_bubble"// podemos llamar a la bomba. console_cmd(id, "BUBBLEBOMB")
    
register_event("CurWeapon""hook_curwpn""be""1=1""2!29");
    
cvar_bubblepush register_cvar("zp_bubble_push""100.0"// es la cvar, que al tocar al campo nos retira de el.
    
register_touch(entclas"player""entity_touch"// nose bien que es, por lo que entiendo llamamos a la entidad que rechaza los zm. 
Luego buscamos:

PHP Code:
// pev_ field used to store custom nade types and their values 
Y debajo de:

PHP Code:
const NADE_TYPE_FLARE 4444 // es la flare grenada, es decir su tipo 
Colocamos:

PHP Code:
const NADE_TYPE_CAMPO 5555 // es el nuevo tipo de grenade que vamos a crear, es decir el campo 
Una vez terminado eso nos dirijimos a:

PHP Code:
public fw_SetModel(entity, const model[]) // un forward, donde contiene algunas caracteristicas de las bombas 
Buscamos:

PHP Code:
else if (equal(model[7], "w_sm"4) && get_pcvar_num(cvar_flaregrenades)) // aca especifica en que granada entraran, por ejemplo: Hegren, Flash, Smokegren 
Y todo lo que tiene ese "if" lo remplazamos por este:

PHP Code:
   else if (equal(model[7], "w_sm"4) && get_pcvar_num(cvar_flaregrenades)) // aca especifica en que granada entraran, por ejemplo: Hegren, Flash, Smokegren / con una cvar de activacion o desactivacion
    
{
        if(!
g_zombie[pev(entitypev_owner)] && g_bubble_bomb[pev(entitypev_owner)]) // aca determinamos que la bomba es solo para humanos.
        
{
            
fm_set_rendering(entitykRenderFxGlowShell255255255kRenderNormal16// aca determinamos el color de glow de la granada.
            
message_begin(MSG_BROADCASTSVC_TEMPENTITY// ni idea.
            
write_byte(TE_BEAMFOLLOW// aca determinamos que es un trail la entidad
            
write_short(entity// declaramos que es una entidad
            
write_short(g_trailSpr// el sprite correspondiente al trail.
            
write_byte(10// life. ( nose que es )
            
write_byte(10// width: esto quiere decir el ancho del trail
            
write_byte(255// red: color rojo
            
write_byte(255// green: color verde
            
write_byte(255// blue: color azul
            
write_byte(500// brightness: brillo
            
message_end()
            
            
set_pev(entitypev_flTimeStepSoundNADE_TYPE_CAMPO// tipo de bomba ( NADE_TYPE_CAMPO )
            
            
entity_set_model(entityw_model// llamamos al model de la granada en el piso "w_".
        
}
        else
        {
            
// Make the flare color
            
static rgb[3]
            switch (
get_pcvar_num(cvar_flarecolor))
            {
                case 
0// white
                
{
                    
rgb[0] = 255 // red: rojo
                    
rgb[1] = 255 // green: verde
                    
rgb[2] = 255 // blue: azul
                
}
                case 
1// red
                
{
                    
rgb[0] = random_num(50,255// rer: rojo con un random_num, eso quiere decir que saldra desde el 50 al 255
                    
rgb[1] = // green: verde
                    
rgb[2] = // blue: azul
                
}
                case 
2// green
                
{
                    
rgb[0] = // red: rojo
                    
rgb[1] = random_num(50,255// green: verde con un random_num, eso quiere decir que saldra desde el 50 al 255
                    
rgb[2] = // blue: azul
                
}
                case 
3// blue
                
{
                    
rgb[0] = // red: rojo
                    
rgb[1] = // green: verde
                    
rgb[2] = random_num(50,255// blue: azul con un random_num, eso quiere decir que saldra desde el 50 al 255
                
}
                case 
4// random (all colors): quiere decir que pueden salir varios colores por que los combina
                
{
                    
rgb[0] = random_num(50,200// red: rojo con un random_num, eso quiere decir que saldra desde el 50 al 255
                    
rgb[1] = random_num(50,200// green: verde con un random_num, eso quiere decir que saldra desde el 50 al 255
                    
rgb[2] = random_num(50,200// blue: azul con un random_num, eso quiere decir que saldra desde el 50 al 255
                
}
                case 
5// random (r,g,b): al azar entre rojo, verde, azul
                
{
                    switch (
random_num(13))
                    {
                        case 
1// red
                        
{
                            
rgb[0] = random_num(50,255// red: rojo con un random_num, eso quiere decir que saldra desde el 50 al 255
                            
rgb[1] = // green: verde
                            
rgb[2] = // blue: azul
                        
}
                        case 
2// green
                        
{
                            
rgb[0] = // red: rojo
                            
rgb[1] = random_num(50,255// green: verde con un random_num, eso quiere decir que saldra desde el 50 al 255
                            
rgb[2] = // blue: azul
                        
}
                        case 
3// blue
                        
{
                            
rgb[0] = // red: rojo
                            
rgb[1] = // green: verde
                            
rgb[2] = random_num(50,255// blue: azul con un random_num, eso quiere decir que saldra desde el 50 al 255
                        
}
                    }
                }
            }
            
            
// Give it a glow / toma el glow color, si la bomba fuese de color rojo, el glow de la grana sera rojo...
            
fm_set_rendering(entitykRenderFxGlowShellrgb[0], rgb[1], rgb[2], kRenderNormal16);
            
            
// And a colored trail / le damos un trail
            
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
            
write_byte(TE_BEAMFOLLOW// entidad del trail
            
write_short(entity// decimos que es una entidad
            
write_short(g_trailSpr// sprite correspondiente al trail
            
write_byte(10// life ( nose que es )
            
write_byte(10// width: ancho del trail
            
write_byte(rgb[0]) // red: rojo -- depende de que color sea la bomba (rgb[0] = 1)
            
write_byte(rgb[1]) // green: verde -- depende de que color sea la bomba (rgb[1] = 2)
            
write_byte(rgb[2]) // blue: azul -- depende de que color sea la bomba (rgb[2] = 3)
            
write_byte(200// brightness: brillo del trail
            
message_end() // terminamos la entidad
            
            // Set grenade type on the thrown grenade entity
            
set_pev(entityPEV_NADE_TYPENADE_TYPE_FLARE// tipo de granada ( flare bomb )
            
            // Set flare color on the thrown grenade entity
            
set_pev(entityPEV_FLARE_COLORrgb// Establecer color bengala en la entidad granada lanzada
        
}
    } 
Luego nos vamos a:

PHP Code:
public fw_ThinkGrenade(entity// otro forward que nos llama a la entidad de cada tipo de granada 
Y debajo de:

PHP Code:
     case NADE_TYPE_FROST// Frost Grenade / tipo de granada frost ( hielo )
    
{
        
frost_explode(entity// entidad dela frost ( hielo )
    

Colocamos el Tipo del campo llamando la entidad:

PHP Code:
    case NADE_TYPE_CAMPO// Bubble Grenade / tipo de bomba bubble ( campo )
    
{
        
bubble_explode(entity// llamamos a la entidad del campo
    

Una vez terminado eso nos vamos al final del plugin y colocamos:

PHP Code:
// Bubble Grenade Explosion
public bubble_explode(id)
{
    
// Get origin
    
static Float:originF[3// originF para llamar la entidad de create_blast4
    
pev(idpev_originoriginF// ...
    
    // Create Blast
    
create_blast4(originF// entidad de los anillos de explocion
    
    
new attacker // variable attacker ( ataque )
    
attacker pev(idpev_owner)
    
    
g_bubble_bomb[attacker] = false // variable de la bomba, seteamos en falso
    
    
set_pcvar_num(cvar_flaregrenades,1// tomamos las cvar de la flare, para usarla como activador y desactivador de esta bomba.
    
    // Create entitity
    
new iEntity create_entity("info_target"// creamo la entidad con su determinado objetivo
    
    
if(!is_valid_ent(iEntity)) // determinamos que la entidad esta en false
        
return PLUGIN_HANDLED // tramitamos nuevamente
    
    
new FloatOrigin[3// origen
    
entity_get_vector(idEV_VEC_originOrigin)
    
    
entity_set_string(iEntityEV_SZ_classnameentclas// llamamos ala clase de entidad
    
    
entity_set_vector(iEntity,EV_VEC_originOrigin// no se que es
    
entity_set_model(iEntity,model// modelo dela burbuja
    
entity_set_int(iEntityEV_INT_solidSOLID_TRIGGER// no se que es
    
entity_set_size(iEntityFloat: {-110.0, -110.0, -110.0}, Float: {110.0110.0110.0}) // size de la entidad ( campo ) osea el tamaño
    
entity_set_int(iEntityEV_INT_renderfxkRenderFxGlowShell// le damos el glow
    
entity_set_int(iEntityEV_INT_rendermodekRenderTransAlpha// hacemos que sea transparente
    
entity_set_float(iEntityEV_FL_renderamt50.0// le damos la intensidad
    
    // Colored Aura / aura cuando explota la granada
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYoriginF0)
    
write_byte(TE_DLIGHT// aura
    
engfunc(EngFunc_WriteCoordoriginF[0]) // x position
    
engfunc(EngFunc_WriteCoordoriginF[1]) // y position
    
engfunc(EngFunc_WriteCoordoriginF[2]) // z position
    
write_byte(15// radius / radio
    
write_byte(255// red: rojo
    
write_byte(255// green: verde
    
write_byte(255// blue: azul
    
write_byte(2// life
    
write_byte(0// decay rate / desintegración de la tasa
    
message_end() // cerramos la entidad
    
    #if defined RANDOM_COLOR // color por default
    
if(is_valid_ent(iEntity)) // entidad valida
    
{
        new 
Float:vColor[3// variable vColor defaul / por defecto
        
        
for(new i3i++) // nose que es
            
vColor[i] = random_float(0.0255.0// color r, g, b
        
        
entity_set_vector(iEntityEV_VEC_rendercolorvColor// el glow de la burbuja
    
}
    
#endif

    #if defined ONE_COLOR
    
entity_set_vector(iEntityEV_VEC_rendercolorcolour_force_shield// declaramos el color cuztomizable al principio
    #endif
    
    #if defined CAMPO_TASK
    
set_task(60.0"DeleteEntity"iEntity// tiempo que demora en removerse el campo
    #endif
    
    
return PLUGIN_CONTINUE;
}

// Bubble Grenade: Yellow Blast
create_blast4(const Float:originF[3])
{
    
// Smallest ring / anillo de explcion 1
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYoriginF0)
    
write_byte(TE_BEAMCYLINDER// TE id
    
engfunc(EngFunc_WriteCoordoriginF[0]) // x
    
engfunc(EngFunc_WriteCoordoriginF[1]) // y
    
engfunc(EngFunc_WriteCoordoriginF[2]) // z
    
engfunc(EngFunc_WriteCoordoriginF[0]) // x axis
    
engfunc(EngFunc_WriteCoordoriginF[1]) // y axis
    
engfunc(EngFunc_WriteCoordoriginF[2]+385.0// z axis
    
write_short(g_exploSpr// sprite de los anillos
    
write_byte(0// startframe / fotograma inicial
    
write_byte(0// framerate / imágenes por segundo
    
write_byte(4// life
    
write_byte(60// width / ancho
    
write_byte(0// noise / ruido
    
write_byte(255// red: rojo
    
write_byte(255// green: verde
    
write_byte(255// blue: azul
    
write_byte(200// brightness / brillo
    
write_byte(0// speed / rapidez
    
message_end()
    
    
// Medium ring
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYoriginF0)
    
write_byte(TE_BEAMCYLINDER// TE id
    
engfunc(EngFunc_WriteCoordoriginF[0]) // x
    
engfunc(EngFunc_WriteCoordoriginF[1]) // y
    
engfunc(EngFunc_WriteCoordoriginF[2]) // z
    
engfunc(EngFunc_WriteCoordoriginF[0]) // x axis
    
engfunc(EngFunc_WriteCoordoriginF[1]) // y axis
    
engfunc(EngFunc_WriteCoordoriginF[2]+470.0// z axis
    
write_short(g_exploSpr// sprite
    
write_byte(0// startframe / fotograma inicial
    
write_byte(0// framerate / imágenes por segundo
    
write_byte(4// life
    
write_byte(60// width / ancho
    
write_byte(0// noise / ruido
    
write_byte(255// red: rojo
    
write_byte(255// green: verde
    
write_byte(255// blue: azul
    
write_byte(200// brightness / brillo
    
write_byte(0// speed / rapidez
    
message_end()
    
    
// Largest ring
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYoriginF0)
    
write_byte(TE_BEAMCYLINDER// TE id
    
engfunc(EngFunc_WriteCoordoriginF[0]) // x
    
engfunc(EngFunc_WriteCoordoriginF[1]) // y
    
engfunc(EngFunc_WriteCoordoriginF[2]) // z
    
engfunc(EngFunc_WriteCoordoriginF[0]) // x axis
    
engfunc(EngFunc_WriteCoordoriginF[1]) // y axis
    
engfunc(EngFunc_WriteCoordoriginF[2]+555.0// z axis
    
write_short(g_exploSpr// sprite
    
write_byte(0// startframe / fotograma inicial
    
write_byte(0// framerate / imágenes por segundo
    
write_byte(4// life
    
write_byte(60// width / ancho
    
write_byte(0// noise / ruido
    
write_byte(255// red: rojo
    
write_byte(255// green: verde
    
write_byte(255// blue: azul
    
write_byte(200// brightness / brillo
    
write_byte(0// speed / rapidez
    
message_end()
}

// Touch bomb bubble
public entity_touch(touchedtoucher// entidad cuando un zombie o nemesis la toca
{
    
    if(
g_zombie[toucher] || g_nemesis[toucher]) // los nemesis y zombies no pueden pasar
    
{
        new 
Float:pos_ptr[3], Float:pos_ptd[3], Float:push_power get_pcvar_float(cvar_bubblepush// intensidad de rechazo
        
        
pev(touchedpev_originpos_ptr// nose que es
        
pev(toucherpev_originpos_ptd// nose que es
        
        
for(new 03i++)
        {
            
pos_ptd[i] -= pos_ptr[i// nose que es
            
pos_ptd[i] *= push_power // poder cuando lo tocamos y nos rechaza
        
}
        
set_pev(toucherpev_velocitypos_ptd// velocidad del rechazo
        
set_pev(toucherpev_impulsepos_ptd// impulso del rechazo
    
}
}

// Hook bubble bomb
public hook_curwpn(id)
{
    if(!
is_user_alive(id)) // cliente muerto no recibe =D
        
return PLUGIN_CONTINUE;
    
    if(
g_bubble_bomb[id] && !g_zombie[id]) // la bomba solo la puede adquirir un humano
    
{
        new 
wID read_data(2)
        if(
wID == CSW_SMOKEGRENADE// toma el lugar de la smoke grenade
            
set_pev(idpev_viewmodel2model_grenade// modelo de la grana
    
}
    
    return 
PLUGIN_CONTINUE;
}

// Give bubble item / hacemos que nos de el campo
public give_item_bubble(id)
{
    
g_bubble_bomb[id] = true // seteamos la variable a true
    
give_item(id,"weapon_smokegrenade"// le pedimos una smoke ya que el campo la remplaza
}

// Remove Entity / removemos la entidad con el task
public DeleteEntity(entity)
{
    if(
is_valid_ent(entity )) // hacemos valida la entidad
        
remove_entity(entity// la removemos...

Les dejo los SKINS necesarios para que funque y les dejo el SMA con todo el code explicado, de ultima lo sacan de hay para no tener tanto embole...
Attached Files
File Type: zip bubble_camp.zip (558.9 KB, 1826 views)
File Type: sma Get Plugin or Get Source (explicaciones.sma - 1542 views - 17.2 KB)

Last edited by Fail!; 05-09-2010 at 19:00.
Fail! is offline
Send a message via MSN to Fail!
vazmar
Veteran Member
Join Date: Apr 2009
Old 05-08-2010 , 13:44   Re: [ES][TUT][ZP] Campo de Fuerza
#2

Seamos sinceros por favor..
Seguramente lo tomarás a mal (como siempre) , pero no lo explicas por otra cosa.. Bye
vazmar is offline
Fail!
BANNED
Join Date: Jan 2010
Location: BFTCommunity
Old 05-08-2010 , 13:48   Re: [ES][TUT][ZP] Campo de Fuerza
#3

Capas lo que vos decis es porque no se que es cada cosa...

Tenes razon, pero nisiquiera explique las que por lo menos se maestro, me duele la cabeza... toda la mañana inchando con el ZP.
Fail! is offline
Send a message via MSN to Fail!
Exc3ll@N
Veteran Member
Join Date: Oct 2009
Location: Donde me lleve el viento
Old 05-08-2010 , 14:55   Re: [ES][TUT][ZP] Campo de Fuerza
#4

Quote:
Originally Posted by vazmar View Post
Seamos sinceros por favor..
Seguramente lo tomarás a mal (como siempre) , pero no lo explicas por otra cosa.. Bye
vazmar ta bien no explico nada pero por mi Bien porque se esforso en crear un th para ayudar a Crear una bomba "Haora Muchos Van A Tener Su Propia Bomba"

Fail! POR MI BIEN LOCO
Exc3ll@N is offline
Send a message via MSN to Exc3ll@N
procces
Member
Join Date: Feb 2010
Old 05-08-2010 , 15:10   Re: [ES][TUT][ZP] Campo de Fuerza
#5

buen laburo pibe, no le hagas caso a los demas... despues cuando t deje de doler la cabeza completalo si podes xD
procces is offline
Fail!
BANNED
Join Date: Jan 2010
Location: BFTCommunity
Old 05-08-2010 , 15:19   Re: [ES][TUT][ZP] Campo de Fuerza
#6

Ahora me pongo con eso, igual no se me paso nada, por que no solte la PC un ratito, me tome un calmante pero sigo igual =)...
Fail! is offline
Send a message via MSN to Fail!
lalal
Senior Member
Join Date: Jan 2010
Location: Argentina
Old 05-08-2010 , 15:25   Re: [ES][TUT][ZP] Campo de Fuerza
#7

Muy bueno
aunque ya lo tenia:S
pero a otra gente le va a servir
lalal is offline
Send a message via MSN to lalal Send a message via Skype™ to lalal
Exc3ll@N
Veteran Member
Join Date: Oct 2009
Location: Donde me lleve el viento
Old 05-08-2010 , 15:44   Re: [ES][TUT][ZP] Campo de Fuerza
#8

Quote:
Originally Posted by lalal View Post
Muy bueno
aunque ya lo tenia:S
pero a otra gente le va a servir
claro negro nunca me dijistes como hacer y haora !!!! tengo un tut XDDD va pa vos negra XD
Exc3ll@N is offline
Send a message via MSN to Exc3ll@N
Fail!
BANNED
Join Date: Jan 2010
Location: BFTCommunity
Old 05-08-2010 , 15:54   Re: [ES][TUT][ZP] Campo de Fuerza
#9

Listo amigos explique lo que savia nada mas, hay cosas que ni la minima idea tenia...
Fail! is offline
Send a message via MSN to Fail!
Piola
Member
Join Date: Feb 2010
Old 05-08-2010 , 17:40   Re: [ES][TUT][ZP] Campo de Fuerza
#10

Quote:
Originally Posted by Fail! View Post
Listo amigos explique lo que savia nada mas, hay cosas que ni la minima idea tenia...
Si no sabes explicar todo del supuesto tutorial no lo hagas
Attached Thumbnails
Click image for larger version

Name:	copy-paste.jpg
Views:	534
Size:	51.3 KB
ID:	65368  
Piola 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 00:26.


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