Bueno, yo aquí les voy a explicar como hacer un efecto al ser transformado en zombie 4.3
con un model.
Utilizado en la versión: 4.3
PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <xs>
new g_efecto_index[33], g_tuvo_efecto[33] // creamos las varibles para llamar el evento y terminarlo
new const efecto_spr[] = "sprites/infeccion_efecto.spr" // creamos una constante para el sprite.
new cvar_escala, cvar_tiempospr, cvar_nivelefecto // creamos tres cvars
// cvar_scale: Para cambiar la escala o nivel del efecto
// cvar_showtime: El tiempo en mostrar en efecto
// cvar_lightlevel: el nivel de luz del efecto.
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
// Llamo a la forward de la libreria Ham Sandwich: Ham_Spawn
// estamos registrando la entidad llamada al player
RegisterHam(Ham_Spawn, "player", "fw_spawn_post", 1)
register_forward(FM_AddToFullPack, "fw_WhatTheFuck_Post", 1) // Registramos la forward del evento
// Cvars
cvar_escala = register_cvar("zp_in-ef_scale", "0.035") // registramos la cvar
cvar_tiempospr = register_cvar("zp_in-ef_showtime", "2.0") // registramos la cvar
cvar_nivelefecto = register_cvar("zp_in-ef_lightlevel", "100.0") // registramos la cvar
}
public plugin_precache()
{
precache_model(efecto_spr) // Precacheamos
}
PHP Code:
// Creamos el public "Ham_Spawn"
public fw_spawn_post(id)
{
if(g_tuvo_efecto[id]) // termina el efecto despues de la infeccion
remover_efecto(id) // remueve el efecto.
}
public zp_user_infected_post(id, attacker)
{
if(is_user_alive(attacker)) // chekeamos al jugador conectado
{
show_effect(id) // muestra el efecto
}
}
PHP Code:
// Creamos el public de la entidad que mostrará el efecto.
public show_effect(id)
{
g_efecto_index[id] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "env_sprite")) // la llamamos
if (!pev_valid(g_efecto_index[id]))
return // hacemos return
g_tuvo_efecto[id] = 1
set_pev(g_efecto_index[id], pev_solid, SOLID_NOT) //
set_pev(g_efecto_index[id], pev_movetype, MOVETYPE_NONE) // creamos el movimiento del evento
engfunc(EngFunc_SetModel, g_efecto_index[id], efecto_spr)
set_pev(g_efecto_index[id], pev_rendermode, kRenderTransAlpha)
set_pev(g_efecto_index[id], pev_renderamt, 0.0)
set_pev(g_efecto_index[id], pev_owner, id)
set_pev(g_efecto_index[id], pev_scale, get_pcvar_float(cvar_escala)) // setea la escala
set_pev(g_efecto_index[id], pev_light_level, get_pcvar_float(cvar_nivelefecto)) // setea el nivel de efecto
set_task(get_pcvar_float(cvar_tiempospr), "remover_efecto", g_efecto_index[id]) // task para remover el efecto en "x" tiempo.
}
PHP Code:
// creamos public del evento
public fw_WhatTheFuck_Post(es, e, ent, host, host_flags, player, p_set)
{
if(!(0 < host < 33))
return FMRES_IGNORED
if(ent != g_efecto_index[host] || !pev_valid(ent))
return FMRES_IGNORED
if(pev(ent, pev_owner) != host)
return FMRES_IGNORED
if(!is_user_alive(host))
return FMRES_IGNORED
static Float:origin[3], Float:forvec[3], Float:voffsets[3], Float:Angles[3]
pev(host, pev_origin, origin)
pev(host, pev_view_ofs, voffsets)
pev(host, pev_angles, Angles)
xs_vec_add(origin, voffsets, origin)
// Vector hacia adelante en la dirección de la victima
velocity_by_aim(host, 10, forvec)
// Setea el sprite en el origin
xs_vec_add(origin, forvec, origin)
engfunc(EngFunc_SetOrigin, ent, origin)
set_es(es, ES_Origin, origin)
set_es(es, ES_Angles, Angles)
// Hace visible el sprite
set_es(es, ES_RenderMode, kRenderTransAdd)
set_es(es, ES_RenderAmt, 200)
return FMRES_HANDLED
}
PHP Code:
// esta remueve la entidad del efecto despues de la infeccion
public remover_efecto(ent)
{
g_tuvo_efecto[pev(ent, pev_owner)] = 0
if(pev_valid(ent))
engfunc(EngFunc_RemoveEntity, ent) // remueve la entidad.
}
espero que les haya gustado...
se pueden comentar sugerencias constructivas. !
pd: falta explicar un poco pero ahora añado más explicación...
[IMG]http://img560.**************/img560/9900/infeccionefecto.png[/IMG]
Allí varios efectos... !
Creditos a : Dias
[IMG]http://img839.**************/img839/1879/dmcdanteprofile.png[/IMG]