[RE][TUT]Campo de Fuerza(bubble)
#1
Hola, bueno vengo a ponerles el TUT de Fail de alliedmodders. y a corregirle unos errores que se notan a plena vista. a peticion del usuario "EvilSpiret"

Ok les dejo el tut de Fail de la forze.

https://forums.alliedmods.net/showthread.php?t=126352

igual se los pongo aki y les explico los que le voy a explicar..

Nos vamos a nuestro sma del zombie plague.

y agregamos los includes
Código PHP:
#include <engine>
#include <fun> 

luego abajo de los includes.

Código PHP:
#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. 

Nos vamos a donde precacheamos los modelos.

y agregamos

Código PHP:
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_". 

por si no saven es en
Código PHP:
public plugin_precache 

ya tengamos eso listo y precacheado nos dirigimos a
Código PHP:
public plugin_init() 

Registramos esto

Código PHP:
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 nos vamos a
Código PHP:
// pev_ field used to store custom nade types and their values 

luego abajo de la ultima bomba que tengamos registrada, que por default si no has agregado ninguna granada deve de ser esta

Código PHP:
const NADE_TYPE_FLARE 4444 

agregamos abajo entonces

Código PHP:
const NADE_TYPE_CAMPO 5555 

RECORDATORIO: si tenes otra granada agregada recuerda que deven ir en orden los numeros. si la ultima que tenes es 6666. la otra deve de ser 7777, y haci sucesivamente.

---------------------------------------------------------------------------------------------------

como ya tengamos eso listo nos dirigimos a

Código PHP:
public fw_SetModel(entity, const model[]) 

buscas esta linea
Código PHP:
else if (equal(model[7], "w_sm"4) && get_pcvar_num(cvar_flaregrenades)) 

y remplazas todo ese "IF" por este

Código PHP:
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
        
}
    } 

terminado eso nos dirigimos a
Código PHP:
public fw_ThinkGrenade(entity

debajo de
Código PHP:
case NADE_TYPE_FROST// Frost Grenade / tipo de granada frost ( hielo )
    
{
        
frost_explode(entity// entidad dela frost ( hielo )
    


colocamos la nuestra
Código PHP:
case NADE_TYPE_CAMPO// Bubble Grenade / tipo de bomba bubble ( campo )
    
{
        
bubble_explode(entity// llamamos a la entidad del campo
    


y esto lo ponen al final del zp

Código PHP:
// 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...



AHORA AQUI PASO A PONER LO QUE VOY A CAMBIAR Y CORREGIR UNOS DETALLES Y EXPLICAR ALGUNAS COSAS

PRIMERO: al tutorial le falto agregar la cvar que empuja a los zombies de el campo de fuerza..

para eso nos vamos ah

Código PHP:
// CVAR pointers 

y en cualquien parte agregamos

Código PHP:
cvar_bubblepush

OJO: si la van a poner recuerden ponerle la "," "COMA" al final si no la ponen de ultima, si la ponen de ultima bueno entonces ya no le pongan la coma.

SEGUNDO: en la parte de
Código PHP:
else if (equal(model[7], "w_sm"4) && get_pcvar_num(cvar_flaregrenades)) 
al tuto le falto cerrar una "}" "LLAVE"

TENEMOS:

Código PHP:
// Set flare color on the thrown grenade entity
            
set_pev(entityPEV_FLARE_COLORrgb// Establecer color bengala en la entidad granada lanzada
        
}
    } 

y tiene que ser
Código PHP:
// Set flare color on the thrown grenade entity
            
set_pev(entityPEV_FLARE_COLORrgb// Establecer color bengala en la entidad granada lanzada
        
}
    }  


OJO: Esto que puse solo es la ultima linea de ese if. obviamente no lo van a poner solo es, solo es referencial para que sepan que hay va la otra llave!

TERCERO: en la parte de
Código PHP:
case NADE_TYPE_CAMPO// Bubble Grenade / tipo de bomba bubble ( campo )
    
{
        
bubble_explode(entity// llamamos a la entidad del campo
    


yo hice este cambio aki porq al tirar la granada rebotaba mas de una vez y salian mas de 1 forze. entonces ponemos

Código PHP:
case NADE_TYPE_CAMPO// Bubble Grenade / tipo de bomba bubble ( campo )
    
{
        
bubble_explode(entity// llamamos a la entidad del campo
        
return HAM_SUPERCEDE;
    } 

ACLARACIONES.

PRIMERO:

Para cambiar la fuerza con la que la FORZE, BURBUJA, CAMPO como le quieran llamar rechaza a los zombies. tienen que buscar esta linea.

Código PHP:
cvar_bubblepush register_cvar("zp_bubble_push""100.0"

cambian el 100.0 por el numero que se le valla a asignar, no recomentaria menos de "1".

SEGUNDO: Para que la granada funcione tienen que tener activada la bomba de luz. yo tenia el problema que tenia todo bien. pero como tenia la granada de luz desactivada no me servia.

TERCERO: Si quieren tener mas de 1 burbuja en sus manos y que sirvan las 2 como burbujas como deveria ser tienen que ir ah

Código PHP:
g_bubble_bomb[attacker] = false 

y eliminar esto

Código PHP:
new attacker // variable attacker ( ataque )
    
attacker pev(idpev_owner)
    
    
g_bubble_bomb[attacker] = false // variable de la bomba, seteamos en falso 

lo que hace eso es que cada vez que el "ATACANTE" usa la burbuja se setea a ella misma en falso. por lo tanto si nos queda otra granada ya no serviria como burbuja porque al usar la otra nos pondria la restante en falso.

si quieres cambiar el tiempo de duracion de la granada dirigete a

Código PHP:
set_task(60.0"DeleteEntity"iEntity

y cambia el "60.0" por el tiempo que tu quieres que dure la granada.


ACALARACION


NO ME PREGUNTEN COMO LA PONEN EN EXTRA ITEMS PORQUE NO SE COMO HACERLO. RECIEN INTENTE HACERLO Y ME TIRO UN ERROR 050: INVALID RANGE. QUE NO SE QUE ES.

Espero les sirva. si tienen alguna duda en cuando a algo solo haganlo saver. si se me paso algo por alto porfavor comunicarse conmigo.

Adios. Nothingdohere
Tenes una pentium 4.. ami no me engañas
Responder


Mensajes en este tema
[RE][TUT]Campo de Fuerza(bubble) - por alangomez2 - 15/04/2014, 12:32 AM
RE: [RE][TUT]Campo de Fuerza(bubble) - por Nike - 15/04/2014, 09:44 AM
RE: [RE][TUT]Campo de Fuerza(bubble) - por kirito - 15/04/2014, 11:00 AM
RE: [RE][TUT]Campo de Fuerza(bubble) - por RauliTop - 15/04/2014, 04:33 PM
RE: [RE][TUT]Campo de Fuerza(bubble) - por roccoxx - 15/04/2014, 08:01 PM
RE: [RE][TUT]Campo de Fuerza(bubble) - por Lito - 24/04/2014, 07:39 PM
RE: [RE][TUT]Campo de Fuerza(bubble) - por Kane - 24/04/2014, 11:56 PM
RE: [RE][TUT]Campo de Fuerza(bubble) - por Lito - 25/04/2014, 08:08 AM
RE: [RE][TUT]Campo de Fuerza(bubble) - por Store.gh - 09/09/2014, 10:22 AM
RE: [RE][TUT]Campo de Fuerza(bubble) - por ZetGamer - 10/09/2014, 12:29 AM
RE: [RE][TUT]Campo de Fuerza(bubble) - por Store.gh - 10/09/2014, 10:26 AM

Salto de foro:


Usuarios navegando en este tema: 2 invitado(s)