Всем привет!
Озадачился убрать свечение вокруг игрока при использовании фонарика (impulse 100).Причина думаю всем известна - на маломощных видеокартах начинаются лаги.
Попробовал вывод мессаги TE_DLIGHT через client_PreThink, но стало жалко процессор. Подскажите, есть ли альтернативные варианты убрать свечение вокруг игрока при использовании фонарика?
Озадачился убрать свечение вокруг игрока при использовании фонарика (impulse 100).Причина думаю всем известна - на маломощных видеокартах начинаются лаги.
Попробовал вывод мессаги TE_DLIGHT через client_PreThink, но стало жалко процессор. Подскажите, есть ли альтернативные варианты убрать свечение вокруг игрока при использовании фонарика?
Код:
/* **************************** CUSTOMIZATION AREA ******************************** */
new const SOUND_FLASHLIGHT_ON[] = "items/flashlight1.wav"
new const SOUND_FLASHLIGHT_OFF[] = "items/flashlight1.wav"
/* ******************************************************************************** */
#define MAX_PLAYERS 32
new g_iMaxPlayers
new bool:g_bFlashLight[MAX_PLAYERS+1]
new g_msgidFlashlight
new g_iShowAll = 0
new g_iRadius = 4
new g_iDistanceMax = 2000
public plugin_precache()
{
precache_sound(SOUND_FLASHLIGHT_ON)
precache_sound(SOUND_FLASHLIGHT_OFF)
}
public plugin_init()
{
register_plugin( PLUGIN, VERSION, AUTHOR )
register_impulse(100, "Impulse_100")
g_msgidFlashlight = get_user_msgid("Flashlight")
register_event("HLTV", "Event_HLTV_newround", "a", "1=0", "2=0")
register_event("DeathMsg", "Event_DeathMsg", "a")
}
public client_putinserver(id)
{
reset(id)
}
public Event_HLTV_newround()
{
for(new id=1; id<=g_iMaxPlayers; id++)
{
reset(id)
}
}
public Event_DeathMsg()
{
reset(read_data(2))
}
reset(id)
{
if( 1 <= id <= g_iMaxPlayers )
{
g_bFlashLight[id] = false
}
}
public Impulse_100( id )
{
if(is_user_alive(id))
{
if( g_bFlashLight[id] ) FlashlightTurnOff(id)
else FlashlightTurnOn(id)
}
return PLUGIN_CONTINUE
}
public client_PreThink(id)
{
if(g_bFlashLight[id])
{
Make_FlashLight(id)
}
}
Make_FlashLight(id)
{
static iOrigin[3], iAim[3], iDist
get_user_origin(id, iOrigin, 1)
get_user_origin(id, iAim, 3)
iDist = get_distance(iOrigin, iAim)
if( iDist > g_iDistanceMax )
return
static iDecay, iAttn
iDecay = iDist * 255 / g_iDistanceMax
iAttn =256 + iDecay * 5 // barney/dontaskme
if( g_iShowAll )
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
}
else
{
message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, _, id)
}
write_byte( TE_DLIGHT )
write_coord( iAim[0] )
write_coord( iAim[1] )
write_coord( iAim[2] )
write_byte( g_iRadius )
write_byte( 255 )
write_byte( 255 )
write_byte( 255 )
write_byte( 1 )
write_byte( iDecay )
message_end()
}
FlashlightTurnOff(id)
{
emit_sound(id, CHAN_WEAPON, SOUND_FLASHLIGHT_OFF, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
g_bFlashLight[id] = false
FlashlightHudDraw(id, 0)
}
FlashlightTurnOn(id)
{
emit_sound(id, CHAN_WEAPON, SOUND_FLASHLIGHT_ON, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
g_bFlashLight[id] = true
FlashlightHudDraw(id, 1)
}
FlashlightHudDraw(id, iFlag)
{
if( g_iShowAll )
{
emessage_begin(MSG_ONE_UNRELIABLE, g_msgidFlashlight, _, id)
ewrite_byte(iFlag)
ewrite_byte(100)
emessage_end()
}
else
{
message_begin(MSG_ONE_UNRELIABLE, g_msgidFlashlight, _, id)
write_byte(iFlag)
write_byte(100)
message_end()
}
}