PHP Code:
// Based on Flashlight v0.3 by cheap_suit ( for Biohazard Mod )
#include <amxmodx>
#include <fakemeta>
#include <zombieplague>
new gEnabled, gFlashlight[33], gLightent[33]
public plugin_init ()
{
register_plugin ( "Flashlight", "1.1", "Makzz" )
register_forward ( FM_Think, "fwd_Think" )
register_event ( "Flashlight", "ev_FlashLight", "b" )
register_event ( "ResetHUD", "ev_ResetFlashLight", "be", "1=1" )
register_event ( "DeathMsg", "ev_ResetFlashLight", "a" )
gEnabled = register_cvar ( "zp_flashlight", "1" )
}
public plugin_precache ()
precache_model ( "sprites/dot.spr" )
public client_connect ( id )
reset_user ( id )
public client_disconnect ( id )
reset_user ( id )
public reset_user ( id )
{
if ( gLightent[id] > 0 && pev_valid ( gLightent[id] ) )
engfunc ( EngFunc_RemoveEntity, gLightent[id] )
gLightent[id] = gFlashlight[id] = 0
}
public ev_ResetFlashLight ( id )
gFlashlight[id] = false
public ev_FlashLight ( id )
{
if ( zp_get_user_zombie ( id ) || !get_pcvar_num ( gEnabled ) )
return
flashlight ( id, gFlashlight[id] ? false : true )
set_pev ( id, pev_effects, pev ( id, pev_effects ) & ~EF_DIMLIGHT ) // Скрываем стандартный эффект фонарика
}
public zp_user_infected_pre ( id )
{
message_begin ( MSG_ONE, get_user_msgid ( "Flashlight" ), { 0, 0, 0 }, id )
write_byte ( 0 )
write_byte ( 100 )
message_end ()
flashlight ( id, false )
}
public fwd_Think ( ent )
{
if ( !pev_valid ( ent ) )
return FMRES_IGNORED
static classname[11]
pev ( ent, pev_classname, classname, charsmax ( classname ) )
if ( !equal ( classname, "flashlight" ) )
return FMRES_IGNORED
static id
id = pev ( ent, pev_owner )
if ( !is_user_alive ( id ) || !gFlashlight[id] )
{
reset_effects ( ent )
return FMRES_IGNORED
}
static Float:origin[3]
fm_get_aim_origin ( id, origin )
engfunc ( EngFunc_SetOrigin, ent, origin )
set_pev ( ent, pev_nextthink, get_gametime () )
return FMRES_HANDLED
}
stock flashlight ( index, bool:status = false )
{
gFlashlight[index] = status
if ( status )
{
if ( !pev_valid ( gLightent[index] ) )
{
gLightent[index] = engfunc ( EngFunc_CreateNamedEntity, engfunc ( EngFunc_AllocString, "info_target" ) )
if ( gLightent[index] )
{
engfunc ( EngFunc_SetModel, gLightent[index], "sprites/dot.spr" )
set_pev ( gLightent[index], pev_classname, "flashlight" )
set_pev ( gLightent[index], pev_solid, SOLID_NOT )
set_pev ( gLightent[index], pev_movetype, MOVETYPE_FLY )
set_pev ( gLightent[index], pev_rendermode, kRenderTransTexture )
set_effects ( gLightent[index] )
set_pev ( gLightent[index], pev_renderamt, 0.0 )
set_pev ( gLightent[index], pev_owner, index )
set_pev ( gLightent[index], pev_nextthink, get_gametime () )
}
}
else
{
set_effects ( gLightent[index] )
set_pev ( gLightent[index], pev_nextthink, get_gametime () )
}
}
else
if ( pev_valid ( gLightent[index] ) )
reset_effects ( gLightent[index] )
}
stock reset_effects ( index )
set_pev ( index, pev_effects, 0 )
stock set_effects ( index )
set_pev ( index, pev_effects, EF_DIMLIGHT )
stock fm_get_aim_origin ( index, Float:origin[3] )
{
new Float:start[3], Float:view_ofs[3]
pev ( index, pev_origin, start )
pev ( index, pev_view_ofs, view_ofs )
start[0] += view_ofs[0]
start[1] += view_ofs[1]
start[2] += view_ofs[2]
new Float:dest[3]
pev ( index, pev_v_angle, dest )
engfunc ( EngFunc_MakeVectors, dest )
global_get ( glb_v_forward, dest )
dest[0] *= 9999.0
dest[1] *= 9999.0
dest[2] *= 9999.0
dest[0] += start[0]
dest[1] += start[1]
dest[2] += start[2]
engfunc ( EngFunc_TraceLine, start, dest, 0, index, 0 )
get_tr2 ( 0, TR_vecEndPos, origin )
return 1
}