15/04/2014, 12:32 AM
(Última modificación: 15/04/2014, 11:30 PM por alangomez2.)
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
luego abajo de los includes.
Nos vamos a donde precacheamos los modelos.
y agregamos
por si no saven es en
ya tengamos eso listo y precacheado nos dirigimos a
Registramos esto
luego nos vamos a
luego abajo de la ultima bomba que tengamos registrada, que por default si no has agregado ninguna granada deve de ser esta
agregamos abajo entonces
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
buscas esta linea
y remplazas todo ese "IF" por este
terminado eso nos dirigimos a
debajo de
colocamos la nuestra
y esto lo ponen al final del zp
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
y en cualquien parte agregamos
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 al tuto le falto cerrar una "}" "LLAVE"
TENEMOS:
y tiene que ser
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
yo hice este cambio aki porq al tirar la granada rebotaba mas de una vez y salian mas de 1 forze. entonces ponemos
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.
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
y eliminar esto
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
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.
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_PrecacheModel, model_grenade) // precacheamos el model "v_".
engfunc(EngFunc_PrecacheModel, model) // precacheamos el model de la burbuja.
engfunc(EngFunc_PrecacheModel, w_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(entity, pev_owner)] && g_bubble_bomb[pev(entity, pev_owner)]) // aca determinamos que la bomba es solo para humanos.
{
fm_set_rendering(entity, kRenderFxGlowShell, 255, 255, 255, kRenderNormal, 16) // aca determinamos el color de glow de la granada.
message_begin(MSG_BROADCAST, SVC_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(entity, pev_flTimeStepSound, NADE_TYPE_CAMPO) // tipo de bomba ( NADE_TYPE_CAMPO )
entity_set_model(entity, w_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] = 0 // green: verde
rgb[2] = 0 // blue: azul
}
case 2: // green
{
rgb[0] = 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] = 0 // blue: azul
}
case 3: // blue
{
rgb[0] = 0 // red: rojo
rgb[1] = 0 // 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(1, 3))
{
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] = 0 // green: verde
rgb[2] = 0 // blue: azul
}
case 2: // green
{
rgb[0] = 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] = 0 // blue: azul
}
case 3: // blue
{
rgb[0] = 0 // red: rojo
rgb[1] = 0 // 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(entity, kRenderFxGlowShell, rgb[0], rgb[1], rgb[2], kRenderNormal, 16);
// And a colored trail / le damos un trail
message_begin(MSG_BROADCAST, SVC_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(entity, PEV_NADE_TYPE, NADE_TYPE_FLARE) // tipo de granada ( flare bomb )
// Set flare color on the thrown grenade entity
set_pev(entity, PEV_FLARE_COLOR, rgb) // 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(id, pev_origin, originF) // ...
// Create Blast
create_blast4(originF) // entidad de los anillos de explocion
new attacker // variable attacker ( ataque )
attacker = pev(id, pev_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 Float: Origin[3] // origen
entity_get_vector(id, EV_VEC_origin, Origin)
entity_set_string(iEntity, EV_SZ_classname, entclas) // llamamos ala clase de entidad
entity_set_vector(iEntity,EV_VEC_origin, Origin) // no se que es
entity_set_model(iEntity,model) // modelo dela burbuja
entity_set_int(iEntity, EV_INT_solid, SOLID_TRIGGER) // no se que es
entity_set_size(iEntity, Float: {-110.0, -110.0, -110.0}, Float: {110.0, 110.0, 110.0}) // size de la entidad ( campo ) osea el tamaño
entity_set_int(iEntity, EV_INT_renderfx, kRenderFxGlowShell) // le damos el glow
entity_set_int(iEntity, EV_INT_rendermode, kRenderTransAlpha) // hacemos que sea transparente
entity_set_float(iEntity, EV_FL_renderamt, 50.0) // le damos la intensidad
// Colored Aura / aura cuando explota la granada
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_DLIGHT) // aura
engfunc(EngFunc_WriteCoord, originF[0]) // x position
engfunc(EngFunc_WriteCoord, originF[1]) // y position
engfunc(EngFunc_WriteCoord, originF[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 i; i < 3; i++) // nose que es
vColor[i] = random_float(0.0, 255.0) // color r, g, b
entity_set_vector(iEntity, EV_VEC_rendercolor, vColor) // el glow de la burbuja
}
#endif
#if defined ONE_COLOR
entity_set_vector(iEntity, EV_VEC_rendercolor, colour_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_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_BEAMCYLINDER) // TE id
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]) // z
engfunc(EngFunc_WriteCoord, originF[0]) // x axis
engfunc(EngFunc_WriteCoord, originF[1]) // y axis
engfunc(EngFunc_WriteCoord, originF[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_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_BEAMCYLINDER) // TE id
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]) // z
engfunc(EngFunc_WriteCoord, originF[0]) // x axis
engfunc(EngFunc_WriteCoord, originF[1]) // y axis
engfunc(EngFunc_WriteCoord, originF[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_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_BEAMCYLINDER) // TE id
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]) // z
engfunc(EngFunc_WriteCoord, originF[0]) // x axis
engfunc(EngFunc_WriteCoord, originF[1]) // y axis
engfunc(EngFunc_WriteCoord, originF[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(touched, toucher) // 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(touched, pev_origin, pos_ptr) // nose que es
pev(toucher, pev_origin, pos_ptd) // nose que es
for(new i = 0; i < 3; i++)
{
pos_ptd[i] -= pos_ptr[i] // nose que es
pos_ptd[i] *= push_power // poder cuando lo tocamos y nos rechaza
}
set_pev(toucher, pev_velocity, pos_ptd) // velocidad del rechazo
set_pev(toucher, pev_impulse, pos_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(id, pev_viewmodel2, model_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))
TENEMOS:
Código PHP:
// Set flare color on the thrown grenade entity
set_pev(entity, PEV_FLARE_COLOR, rgb) // 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(entity, PEV_FLARE_COLOR, rgb) // 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(id, pev_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.
Tenes una pentium 4.. ami no me engañas