hola,este es mi primer tutorial y lo hare sobre Temp Entity.
¿ Que Es Temp Entity ?
R: Los temp entity, se usan para poder crear efectos, ya sea el "aura",fuego, hielo,entre otras que hay en zombie plague.
¿ Para que se puede usar Temp Entity ?
R: como dije anteriormente,sirve para crear efectos,ya sea una explosion, color de las balas, aura del survivor o nemesis, etc.
Temp Entity, en gran variedad de plugin se usa.
EJEMPLO :
Mi Katana = particulas que se unen.
granadas [ZP] efecto de fuego,el color azul que rodea al zombie CONGELADO, o el sector que ilumina al granada de luz.
Boomer = su bomito, o la explosion cuando muere
Gauss = efecto de particulas de sangre al matar al zombie, laser que sale de la gauss,etc
Tau Cannon = particulas que se estrellan con la pared,laser que sale del Tau Cannon, etc
-------------------------------------------------------------------------
-------------------------------------------------------------------------
-------------------------------------------------------------------------
¿ Como puedo aprender a usar estos Efectos?
R: esto no es facil, pero tampoco dificil,empesemos :
veremos algo muy importante,los origin.
los origins son para saber,en que parte se hara el efecto,ejemplo :
PHP Code:
new nuevo_origin[3] // creamos el nuevo origin
get_user_origin(id, nuevo_origin, 4) // aca lo definimos,es decir //donde ira,en este caso,ya que es "4" se hara al frente del player, y NO en //el player
el "4" y "3" vendria siendo al frente del player,osea, a una distancia lejana.
el "2" y "1" se haria EN EL PLAYER que esta ejecutando el plugin, (esto tambien depende en que evento se haga,por que si se hace en un evento de TAKEDAMAGE, el efecto se haria en el que recive el daño,depende como lo configuren ustedes,pero si lo hacemos cuando compra el plugin,el efecto se hara en el player.
EL "
[3]" significa cuantos origin se usaran.esto lo entenderan mas adelante.
aqui les dejo un link de lo explicado anteriormente :
http://www.amxmodx.org/funcwiki.php?...igin&go=search
aqui les dejo el ejemplo :
PHP Code:
new nuevo_origin[3] // creamos el nuevo origin
get_user_origin(id, nuevo_origin, 4) // aca lo definimos.
// aca el efecto ya que es "4",o si es 3 se hara frente al player
-------------------------------------------------------------------------
new nuevo_origin[3] // creamos el nuevo origin
get_user_origin(id, nuevo_origin, 1) // aca lo definimos.
// aca es 1,entonces el efecto se hara EN EL PLAYER.
tambien,donde explicare mas adelante, el nuevo_origin se usa al comienzo de mensage.vean mas adelante.
bueno,ahora pasemos a los efectos, todos los efectos llevan antepuesto
"TE_" y que es TE_? TempEntity_ . abreviado.bueno
vamos a include, y abrir message_const.inc. hay apareceran efectos como :
PHP Code:
#define TE_EXPLOSION 3
// write_byte(TE_EXPLOSION)
// write_coord(position.x)
// write_coord(position.y)
// write_coord(position.z)
// write_short(sprite index)
// write_byte(10)
// write_byte(10)
// write_byte(20)
obiamente, al "TE_EXPLOSION" se le sacan todos los // y el define, y los nombres que aparecen,se cambian por numeros (adentro del parentisis dice que indica)
editando el TE_EXPLOSION visto antes, algo asi quedaria,
pero con esto no basta en para hacer el efecto,
PHP Code:
write_byte(TE_EXPLOSION)
write_coord(nuevo_origin[0]) // acuerdense de los origin definidos antes
write_coord(nuevo_origin[1]) // acuerdense de los origin definidos antes
write_coord(nuevo_origin[2]) // acuerdense de los origin definidos antes
write_short(sprite index)
write_byte(90)
write_byte(60)
write_byte(10)
ahora tendremos que EMPEZAR y TERMINAR el mensage. ( a estos efectos se les llama "mensages". para empesar y terminar el mensaje,se hara esto :
PHP Code:
message_begin(MSG_BROADCAST, SVC_TEMPENTITY) // empezar
message_end() // terminar
quedaria ==>
PHP Code:
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_EXPLOSION)
write_coord(nuevo_origin[0]) // acuerdense de los origin definidos antes
write_coord(nuevo_origin[1]) // acuerdense de los origin definidos antes
write_coord(nuevo_origin[2]) // acuerdense de los origin definidos antes
write_short(sprite index)
write_byte(90)
write_byte(60)
write_byte(10)
message_end()
bueno,explicando lo anterior,para empezar el mensage,se usa message_begin. y para terminarlo message_end.
donde dice nuevo_origin[0],[1] o [2], se definia el nuevo origin en un grupo de 3,osea
PHP Code:
new nuevo_origin[3] // el grupo de 3.
get_user_origin(id, nuevo_origin, 4) // definiendo el origen
message_begin(MSG_BROADCAST, SVC_TEMPENTITY, nuevo_origin) //empieza
write_byte(TE_EXPLOSION) // el TE_
write_coord(nuevo_origin[0]) // aca se pone el nuevo_origin,como 1 parte
write_coord(nuevo_origin[1]) // aca se pone el nuevo_origin,como 2 parte
write_coord(nuevo_origin[2]) // aca se pone el nuevo_origin,como 3 parte
write_short(sprite index) //spite
write_byte(90) // propiedad,podria ser velocidad,angulo,duracion,color,etc
write_byte(60) // propiedad,podria ser velocidad,angulo,duracion,color,etc
write_byte(10) // propiedad,podria ser velocidad,angulo,duracion,color,etc
message_end() // Termina.
al comienzo del mensaje, le agrege despues de SVC_TEMPENTITY, nuevo_origin) que tambien se define el origin hay. bueno, el codigo de denante estaria el origin,que seria donde se ORIGINA el efecto,y el efecto.
recuerden,hay distintos tipos de TE_
ejemplo :
TE_LANGERFUEL // nubes que se dispersan en el cielo
TE_EXPLOSION // explosion que se origina.
TE_IMPLOSION // particulas que se reunen un un punto
TE_SPRITETRAIL // distintos "circulos" que se dispersan por alrededor.
entre muchos otros,cada uno tiene sus propiedades ( ya sea velocidad,tamaño,colores,etc),con sus respectivos efectos.
RECUERDEN DE VER MESSAGE_CONST.INC. hay estan todos los efectos.
Ahora veremos,como enlazar un evento con un efecto.
osea,a lo que me refiero,como poder hacer que en el evento TAKEDAMAGE. se haga un efecto.
primero tenemos el codigo de damage
PHP Code:
public plugin_init()
{
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
}
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_bits)
{
if(!is_user_connected(attacker) || !is_user_connected(victim) || zp_get_user_nemesis(victim) || attacker == victim || !attacker)
return HAM_IGNORED
if (g_variable[attacker] == CSW_ELARMA)
{
static Float:originF[3]
pev(victim, pev_origin, originF)
// aca el code del damage,etc.
efectos(originF)
}
}
Explicando lo anterior, donde dice g_variable sera la variable,de nuestra arma,o personaje, donde dice CSW_ELARMA,sera el csw_ donde se pone por ejemplo CSW_AWP, CSW_DEAGLE,etc. Siempre,si queremos llamar al public de un efecto,se coloca :
PHP Code:
static Float:originF[3]
pev(victim, pev_origin, originF)
efectos(originF)
Acuerdense que el originF puede ser por cualquier otro nombre,pero en el efectos(originF) se define mas abajo el origin.
Si queremos que el efecto se haga al matar a alguien,ponemos :
PHP Code:
if (g_variable[attacker] == CSW_ELARMA)
{
static Float:originF[3]
pev(victim, pev_origin, originF)
// aca el code del damage,etc.
efectos(originF)
}
Le ponemos el g_variable como atacante,entonces,al matar a algun enemigo,el efecto se hara en el player,osea el que mato si queremos que el efecto se haga en el enemigo,ponemos el g_variable como victima,osea :
PHP Code:
if (g_variable[victim] == CSW_ELARMA)
{
static Float:originF[3]
pev(victim, pev_origin, originF)
efectos_muerte(originF)
}
Entonces hay estaria como atakante y como victima.
Ahora para hacer el efecto(originF) lo hacemos asi :
PHP Code:
dead_efect(const Float:originF[3])
{
new nuevo_origin[3] // creando el nuevo origin
get_user_origin(id, nuevo_origin, 4) // puede ser 1,2,3,4.
//aca el codigo de efecto,yo hare el anterior,te_explosion
message_begin(MSG_BROADCAST, SVC_TEMPENTITY, nuevo_origin)
write_byte(TE_EXPLOSION) // TE_ Temp Entity
write_coord(nuevo_origin[0]) //el origin
write_coord(nuevo_origin[1]) //el origin
write_coord(nuevo_origin[2]) //el origin
write_short(sprite) //sprite index
write_byte(60) // no me acuerdo, message_const.inc
write_byte(20) // no me acuerdo, message_const.inc
write_byte(20) // no me acuerdo, message_const.inc
message_end() // Terminando el mensage,osea efecto
}
Y listo,el efecto se hara,simple,pero hay que saber usarlos.
Tambien podemos hacer los efectos en otros eventos,ya sea :
Ham_TakeDamage
Ham_Weapon_PrimaryAttack
Etc.
Ahora veremos como puede cambiar un efecto al cambiar de sprite.
Por ejemplo,en el TE_EXPLOSION. Si yo pongo un sprite de fuego,ejemplo :
fire.spr ( en la carpeta sprites)
se hara FUEGO en el lugar,o player,pero si pongo un sprite como
exoplode1.spr ( carpeta sprites)
se hara una explosion,si pongo un sprite de rayo como :
zbeam1 (carpeta sprites)
se hara un rayo ( como mi SLG)
y asi, dependiendo del sprite.para poder usar el sprite hacemos lo siguiente :
PHP Code:
new sprite_nuevo // la variable del sprite
plugin_precache()
{
sprite_nuevo = precache_model("sprites/explode1.spr")
}
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_bits)
{
if(!is_user_connected(attacker) || !is_user_connected(victim) || zp_get_user_nemesis(victim) || attacker == victim || !attacker) // los IF
return HAM_IGNORED
if (g_variable[attacker] == CSW_ARMA)
{
static Float nuevo_origin [3] // el float
pev(victim, pev_origin, nuevo_origin) // aca definimos el origin
// code de damage
dead_efect(nuevo_origin) // el efecto.
}
}
dead_efect(const Float:nuevo_origin[3])
{
new nuevo_origin[3] // creando el nuevo origin
get_user_origin(id, nuevo_origin, 4) // puede ser 1,2,3,4.
//aca el codigo de efecto,yo hare el anterior,te_explosion
message_begin(MSG_BROADCAST, SVC_TEMPENTITY, nuevo_origin)
write_byte(TE_EXPLOSION) // TE_ Temp Entity
write_coord(nuevo_origin[0]) //el origin
write_coord(nuevo_origin[1]) //el origin
write_coord(nuevo_origin[2]) //el origin
write_short(sprite_nuevo) //sprite index aca seria la explosion
write_byte(60) // no me acuerdo, message_const.inc
write_byte(20) // no me acuerdo, message_const.inc
write_byte(20) // no me acuerdo, message_const.inc
message_end() // Terminando el mensage,osea efecto
}
Y listo,hay estaria el efecto.recuerden que deben ser creativos para juntar efectos y sprites. Este metodo uso yo para crear los efectos.
Ahora para reforzar veamos otro evento que se pueden hacer efectos.
Veamos el evento :
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_deagle", "fw_primer_atake", 1)
El weapon_ puede ser por cualquier,yo puse deagle,puede ser awp,scout,etc.
Ahora veamos esto :
PHP Code:
Public plugin_init()
{
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_deagle", "fw_primer_atake", 1)
}
// Ya registramos el evento,ahora el public :
public fw_primer_atake(atack)
{
static id
id = get_pdata_cbase(atack) //ejemplo
if(is_user_connected(id) && g_variable[id]) // la variable del arma o personaje
{
new origin_nuevo[3]
get_user_origin(id, origin_nuevo, 3)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY, origin_nuevo)
write_byte(TE_EXPLOSION)
write_coord(origin_nuevo [0])
write_coord(origin_nuevo [1])
write_coord(origin_nuevo [2])
write_short(sprite index)
write_byte(90)
write_byte(60)
write_byte(30)
message_end()
}
}
En este evento, indica donde IMPACTA la bala, entonces,aquí le agregamos un efecto,fijense en :
get_user_origin(id, origin_nuevo, 3)
el 3 y 4, vendria siendo que el efecto se hace en donde impacta la bala,ya que asi es el evento,pero si lo cambiamos por :
get_user_origin(id, origin_nuevo, 1)
1 o 2,el efecto aun que impacte la bala,se hara en el player.
Bueno,aquí termina mi tuto.adios
CREDITOS = Mister.Death,ya que el me enseño a crear efectos y usar Temp Entity.
PD : EN ESTE MOMENTO SIGUO EDITANDO EL TUTORIAL.
__________________