Descarcare:
Code: Select all
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <zombieplague>
native zp_get_user_assassin(id);
#define PLUGIN "Custom Flashlight"
#define AUTHOR "ConnorMcLeod"
#define VERSION "0.5.4"
new const SOUND_FLASHLIGHT_ON[] = "items/flashlight1.wav"
new const SOUND_FLASHLIGHT_OFF[] = "items/flashlight1.wav"
#define LIFE 2 // try 2 if light is flickering
#define MAX_PLAYERS 32
new g_iMaxPlayers
new bool:g_bFlashLight[MAX_PLAYERS+1]
new g_iFlashBattery[MAX_PLAYERS+1]
new Float:g_flFlashLightTime[MAX_PLAYERS+1]
new g_msgidFlashlight, g_msgidFlashBat
new g_bEnabled = true
new g_iShowAll = 0
new g_iRadius = 10
new g_iAttenuation = 10
new g_iDistanceMax = 2000
new Float:g_flDrain = 1.2
new Float:g_flCharge = 0.2
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")
register_event("HLTV", "Event_HLTV_newround", "a", "1=0", "2=0")
register_event("DeathMsg", "Event_DeathMsg", "a")
plugin_precfg()
}
plugin_precfg()
{
g_msgidFlashlight = get_user_msgid("Flashlight")
g_msgidFlashBat = get_user_msgid("FlashBat")
g_iMaxPlayers = get_maxplayers()
}
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_iFlashBattery[id] = 100
g_bFlashLight[id] = false
g_flFlashLightTime[id] = 0.0
}
}
public Impulse_100( id )
{
if( g_bEnabled )
{
if(is_user_alive(id) && !zp_get_user_zombie(id) && !zp_get_user_nemesis(id) && !zp_get_user_assassin(id))
{
if( g_bFlashLight[id] )
{
FlashlightTurnOff(id)
}
else if( g_iFlashBattery[id] )
{
FlashlightTurnOn(id)
}
}
}
return PLUGIN_CONTINUE
}
public client_PreThink(id)
{
static Float:flTime
flTime = get_gametime()
if(g_flDrain && g_flFlashLightTime[id] && g_flFlashLightTime[id] <= flTime)
{
if(g_bFlashLight[id])
if(is_user_alive(id))
{
if(g_iFlashBattery[id])
{
g_flFlashLightTime[id] = g_flDrain + flTime
g_iFlashBattery[id]--
if(!g_iFlashBattery[id])
{
FlashlightTurnOff(id)
}
}
}
else
{
if(g_iFlashBattery[id] < 100)
{
g_flFlashLightTime[id] = g_flCharge + flTime
g_iFlashBattery[id]++
}
else
g_flFlashLightTime[id] = 0.0
}
message_begin(MSG_ONE_UNRELIABLE, g_msgidFlashBat, _, id)
write_byte(g_iFlashBattery[id])
message_end()
}
if(g_bFlashLight[id])
{
if(is_user_alive(id) && !zp_get_user_zombie(id) && !zp_get_user_nemesis(id) && !zp_get_user_assassin(id))
{
Make_FlashLight(id)
}
}
}
public zp_get_infected(iVictim, iInfector)
{
FlashlightTurnOff(iVictim)
}
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 * g_iAttenuation // 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 <<8) / iAttn ) // de aici modifici culorile la flashlight (red / green / blue) <<8 -> radius
write_byte( (255 <<8) / iAttn )
write_byte( (255 <<8) / iAttn )
write_byte( LIFE )
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)
g_flFlashLightTime[id] = g_flCharge + get_gametime()
}
FlashlightTurnOn(id)
{
if(is_user_alive(id) && !zp_get_user_zombie(id) && !zp_get_user_nemesis(id) && !zp_get_user_assassin(id))
emit_sound(id, CHAN_WEAPON, SOUND_FLASHLIGHT_ON, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
g_bFlashLight[id] = true
FlashlightHudDraw(id, 1)
g_flFlashLightTime[id] = g_flDrain + get_gametime()
}
FlashlightHudDraw(id, iFlag)
{
if( g_iShowAll )
if(is_user_alive(id) && !zp_get_user_zombie(id) && !zp_get_user_nemesis(id) && !zp_get_user_assassin(id))
{
emessage_begin(MSG_ONE_UNRELIABLE, g_msgidFlashlight, _, id)
ewrite_byte(iFlag)
ewrite_byte(g_iFlashBattery[id])
emessage_end()
}
else
{
message_begin(MSG_ONE_UNRELIABLE, g_msgidFlashlight, _, id)
write_byte(iFlag)
write_byte(g_iFlashBattery[id])
message_end()
}
}
Versiune: 0.5.4
Link oficial: https://forums.alliedmods.net/showthread.php?t=72143
Instalare:
1. Fisierul costum_flashlight.sma il puneti in addons/amxmodx/scripting
2. Fisierul costum_flashlight.amxx il puneti in addons/amxmodx/plugins
3. Intrati in fisierul addons/amxmodx/configs/plugins.ini si adaugati la urma:
Code: Select all
costum_flashlight.amxx
Cvar-uri (se adauga in fisierul amxmodx\configs\amxx.cfg): -
Imagini: -
de aici modificati culorile
Code: Select all
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 * g_iAttenuation // 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 <<8) / iAttn ) // de aici modifici culorile la flashlight (red / green / blue) <<8 -> radius
write_byte( (255 <<8) / iAttn )
write_byte( (255 <<8) / iAttn )
write_byte( LIFE )
write_byte( iDecay )
message_end()
}
Code: Select all
write_byte( (255 <<8) / iAttn ) // de aici modifici culorile la flashlight (red / green / blue) <<8 -> radius
write_byte( (255 <<8) / iAttn )
write_byte( (255 <<8) / iAttn )