[ZP] Custom Flashlight

Descarcari de pluginuri si discutii despre acestea.

Moderators: Moderatori ajutători, Scripteri TheXForce

Post Reply
User avatar
Rainq
Fost administrator
Fost administrator
Posts: 381
Joined: Mon Jan 18, 2021 7:25 am
Status: Citesc forumul TheXForce.RO...!
Detinator Steam: Da
SteamID: mrainq
Gaming experience: Nu spun..
Reputatie: Fost administrator
Nume anterior: Light
Fost detinator zm.thexforce.ro
Fost detinator dr.thexforce.ro
Location: Bucureşti
Has thanked: 2 times
Been thanked: 1 time
Contact:

[ZP] Custom Flashlight

Post by Rainq »

Descriere: Lanterna modificata si simpla pentru zp

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()
	}
}
Nume: Custom Flashlight
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
4. Alti pasi necesari....

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()
}
mai exact aici:

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 )
Image
Post Reply

Return to “Pluginuri”