All pastes #69644 Raw Edit

Someone

public text v1 · immutable
#69644 ·published 2006-06-23 06:28 UTC
rendered paste body
//*****{INCLUDES}*****
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>
#include <engine>
#include <fakemeta>
#define KeysNades (1<<0)|(1<<1)|(1<<2)|(1<<3)
#define TE_BEAMFOLLOW 22

new g_nMsgScreenFade
new bool:hastrail[33]
new bool:hasglow[33]
new bool:hasSMOKENADE[33]
new bool:hasHENADE[33]
new bool:hasFLASHNADE[33]
new bool:g_has_hnade[33]
new pause_entity[999]
new sprite

public plugin_init()
{
	register_plugin("SeekNades", "1.0", "SweatyBanana")
	register_event("CurWeapon","event_curweapon","b")
	register_event("SendAudio","nade_thrown","bc","2=%!MRAD_FIREINHOLE")
	register_menucmd(register_menuid("Nades"), KeysNades, "PressedNades")
	register_event("ResetHUD","startround","be")
	register_cvar("amx_n", "1")
	register_cvar("amx_n_smokecost", "1000")
	register_cvar("amx_n_hecost", "1000")
	register_cvar("amx_n_flashcost", "1000")
	register_concmd("say /nadesprices", "funcwepprice")
	register_concmd("amx_nadesprices", "funcwepprice")
	register_concmd("say /nadesmenu", "ShowNades")
	register_concmd("amx_nadesmenu", "ShowNades")
	register_cvar("amx_n_hegrenade_fuse", "5")
	register_cvar("amx_heatseeking_hegrenade_nadespeed", "900")
	register_cvar("amx_heatseeking_hegrenade_launchtime", "1")
	register_event("ScreenFade","FlashedEvent","be","4=255","5=255","6=255","7>199")
	g_nMsgScreenFade = get_user_msgid("ScreenFade")
	register_cvar("amx_fb_mode", "1")
	register_cvar("amx_fb_r",    "255")
	register_cvar("amx_fb_g",    "25")
	register_cvar("amx_fb_b",    "25")
	register_cvar("sv_nadefx_glow",  "1");
	register_cvar("sv_nadefx_trail", "2");

}
public plugin_precache()
{
	precache_model("models/nades/v_smokegrenade.mdl")
	precache_model("models/nades/v_flashbang.mdl")
	precache_model("models/nades/v_hegrenade.mdl")
	precache_model("models/nades/p_smokegrenade.mdl")
	precache_model("models/nades/p_hegrenade.mdl")
	precache_model("models/nades/p_flashbang.mdl")
	sprite = precache_model("sprites/smoke.spr")
}
public funcbuysmokenade(id)
{
	if(get_cvar_num("amx_n") == 0)
	{
		client_print(id,print_chat,"This mod is disabled.")
		return PLUGIN_HANDLED
	}
	else
	{

		new price = get_cvar_num("amx_n_smokecost")
		hasSMOKENADE[id] = true
		hastrail[id] = true
		hasglow[id] = true
		cs_set_user_money(id,cs_get_user_money(id)-get_cvar_num("amx_n_smoke"))
		give_item(id,"weapon_smokegrenade")
		cs_set_user_bpammo(id, CSW_AK47, 1)
		client_print(id,print_chat,"You have bought the smoke nade for %i dollars.",price)
		set_hudmessage(id, 255, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 4)
		show_hudmessage(id, "Your have bought the smoke grenade.")
	}
	return PLUGIN_HANDLED
}
public funcbuyhenade(id)
{
	if(get_cvar_num("amx_n") == 0)
	{
		client_print(id,print_chat,"This mod is disabled.")
		return PLUGIN_HANDLED
	}
	else
	{

		new price = get_cvar_num("amx_n_hecost")
		new ammo, clip
		new damage
		damage = read_data (2)
		hasHENADE[id] = true
		g_has_hnade[id] = true
		hastrail[id] = true
		hasglow[id] = true
		cs_set_user_money(id,cs_get_user_money(id)-get_cvar_num("amx_n_hecost"))
		give_item(id,"weapon_hegrenade")
		cs_set_user_bpammo(id, CSW_HEGRENADE, 1)
		client_print(id,print_chat,"You have bought the HE nade for %i dollars.",price)
		set_hudmessage(id, 255, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 4)
		show_hudmessage(id,"You have bought the Seeking HE grenade.")
		if(get_user_weapon(id,ammo,clip) == CSW_HEGRENADE)
		{
			damage = damage*4/3
		}
		return PLUGIN_HANDLED
	}
	return PLUGIN_HANDLED
}
public funcbuyflash(id)
{
	if(get_cvar_num("amx_n") == 0)
	{
		client_print(id,print_chat,"This mod is disabled.")
		return PLUGIN_HANDLED
	}
	else
	{
		new price = get_cvar_num("amx_n_flashcost")
		hasFLASHNADE[id] = true
		hastrail[id] = true
		hasglow[id] = true
		cs_set_user_money(id,cs_get_user_money(id)-get_cvar_num("amx_n_flashcost"))
		give_item(id,"weapon_flashbang")
		cs_set_user_bpammo(id, CSW_FLASHBANG, 1)
		client_print(id,print_chat,"You have bought the flash grenade for %i dollars.",price)
		set_hudmessage(id, 255, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 4)
		show_hudmessage(id, "Your have bought the colored flash grenade.")
	}
	return PLUGIN_HANDLED
}
public END_MENU(id)
{
	return PLUGIN_HANDLED
}
public client_PreThink(id)
{
	new ammo, clip
	if(hasSMOKENADE[id] == true && get_user_weapon(id,ammo,clip) == CSW_SMOKEGRENADE)
	{
		if(get_user_button(id) & IN_ATTACK)
		{
			entity_set_vector(id, EV_VEC_punchangle, Float:{0.0, 0.0, 0.0})
		}
		return PLUGIN_HANDLED
	}
	if(hasHENADE[id] == true && get_user_weapon(id,ammo,clip) == CSW_HEGRENADE)
		{
		if(get_user_button(id) & IN_ATTACK)
		{
			entity_set_vector(id, EV_VEC_punchangle, Float:{0.0, 0.0, 0.0})
		}
		return PLUGIN_HANDLED
	}
	if(hasFLASHNADE[id] == true && get_user_weapon(id,ammo,clip) == CSW_FLASHBANG)
	{
		if(get_user_button(id) & IN_ATTACK)
		{
			entity_set_vector(id, EV_VEC_punchangle, Float:{0.0, 0.0, 0.0})
		}
		return PLUGIN_HANDLED
	}
	return PLUGIN_HANDLED
}
public event_curweapon(id)
{
	new ammo, clip
	if(hasSMOKENADE[id] == true && get_user_weapon(id,ammo,clip) == CSW_SMOKEGRENADE)
	{
		entity_set_string(id,EV_SZ_viewmodel,"models/nades/v_smokegrenade.mdl")
		entity_set_string(id,EV_SZ_weaponmodel,"models/nades/p_smokegrenade.mdl")

	}
	if(hasHENADE[id] == true && get_user_weapon(id,ammo,clip) == CSW_HEGRENADE)
	{
		entity_set_string(id,EV_SZ_viewmodel,"models/nades/v_hegrenade.mdl")
		entity_set_string(id,EV_SZ_weaponmodel,"models/nades/p_hegrenade.mdl")

	}
	if(hasFLASHNADE[id] == true && get_user_weapon(id,ammo,clip) == CSW_FLASHBANG)
	{
		entity_set_string(id,EV_SZ_viewmodel,"models/nades/v_flashbang.mdl")
		entity_set_string(id,EV_SZ_weaponmodel,"models/nades/p_flashbang.mdl")

	}
}
public funcwepprice(id)
{
	new priceSmokenade = get_cvar_num("amx_n_smokecost")
	new priceHenade = get_cvar_num("amx_n_hecost")
	new priceFlash = get_cvar_num("amx_n_flashcost")
	client_print(id,print_chat,"The smoke nade %i dollars, type /nadesmenu to buy one.",priceSmokenade)
	client_print(id,print_chat,"The HE nade cost %i dollars, type /nadesmenu to buy one.",priceHenade)
	client_print(id,print_chat,"The flash nade cost %i dollars, type /nadesmenu to buy one.",priceFlash)
	return PLUGIN_HANDLED
}
public ShowNades(id)
{
	if(get_cvar_num("amx_n") == 0)
	{
		client_print(id,print_chat,"This mod is disabled.")
		return PLUGIN_HANDLED
	}
	if(cs_get_user_buyzone(id) != 1)
	{
		client_print(id,print_chat,"You must be in a buyzone to access the grenade menu.")
		return PLUGIN_HANDLED
	}
	else
	{
		show_menu(id, KeysNades, "Nades^n^n1. Buy Smoke nade^n2. Buy He nade^n3. Buy Flash nade^n4. Exit^n", -1, "Nades")

		return PLUGIN_HANDLED
	}
	return PLUGIN_HANDLED
}
public PressedNades(id, key)
{
	switch (key)
	{
		case 0:
		{
			funcbuysmokenade(id)
		}
		case 1:
		{
			funcbuyhenade(id)
		}
		case 2:
		{
			funcbuyflash(id)
		}
		case 3:
		{
			END_MENU(id)
		}
	}
}
public grenade_throw(index, greindex, wId)
{
	if(get_cvar_num("amx_n") == 1)
	{
		new id = index
		new grenade = greindex
		if(g_has_hnade[id] == true)
		{
			if(wId == CSW_HEGRENADE)
			{
				entity_set_edict(grenade, EV_ENT_owner, id)
				new param[1]
				param[0] = grenade
				new Float:lauchtime = get_cvar_float("amx_heatseeking_hegrenade_launchtime")

				set_task(lauchtime, "seek_n_destroy", 0, param, 1)
			}

			new Float:fusetime = get_cvar_float("amx_heatseeking_hegrenade_fuse")
			pause_entity[greindex] = 1
			set_task(fusetime, "nade_explode", grenade)
			g_has_hnade[id] = false
		}
	}
	new iGrenID = greindex;
	new id = index
	if(!is_valid_ent(iGrenID)) return PLUGIN_CONTINUE;
	if(get_cvar_num("sv_nadefx_glow") && (hasglow[id]))
	{
		switch(wId)
		{
			case CSW_HEGRENADE:    set_rendering(iGrenID, kRenderFxGlowShell, 255, 0, 0);
			case CSW_FLASHBANG:    set_rendering(iGrenID, kRenderFxGlowShell, 0, 255, 0);
			case CSW_SMOKEGRENADE: set_rendering(iGrenID, kRenderFxGlowShell, 0, 0, 255);
		}
	}

	new iTrail = get_cvar_num("sv_nadefx_trail");

	if(iTrail == 0 || (iTrail != 1 && iTrail != 2))
		return PLUGIN_CONTINUE;

	new iTeam = get_user_team(index);

	new r=0,g=0,b=0;

	switch( iTrail )
	{
		case 1:
		{
			switch( iTeam )
			{
				case 1: r=0, b=255, g=0;
				case 2:	r=255, b=0, g=0;
			}
		}
		case 2:
		{
			switch( wId )
			{
				case CSW_HEGRENADE:    r=255, b=0, g=0;
				case CSW_FLASHBANG:    r=0, b=0, g=255;
				case CSW_SMOKEGRENADE: r=255, b=255, g=255;
			}
		}
	}
	if(hastrail[id])
	{
		message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
		write_byte( TE_BEAMFOLLOW );
		write_short( iGrenID );
		write_short( sprite );
		write_byte( 10 );
		write_byte( 5 );
		write_byte( r );
		write_byte( g );
		write_byte( b );
		write_byte( 150 );
		message_end();

		return PLUGIN_CONTINUE;
	}
	return PLUGIN_CONTINUE
}

public seek_n_destroy(param[])
{
	new grenade = param[0]
	new Float:ShortestDistance = 9999.9
	new NearestPlayer = 0

	if(is_valid_ent(grenade))
	{
		new grenade_owner = entity_get_edict(grenade, EV_ENT_owner)

		new players[32], count
		get_players(players, count)
		for(new i = 1; i < count; i++)
		{
			new vteam = get_user_team(players[i])
			new ateam = get_user_team(grenade_owner)
			if(vteam != 3)
			{
				if(is_user_alive(players[i]))
				{
					if(grenade_owner != (players[i]))
					{
						if(vteam != ateam)
						{
							new Float:PlayerOrigin[3], Float:GrenadeOrigin[3]
							entity_get_vector(players[i], EV_VEC_origin, PlayerOrigin)
							entity_get_vector(grenade, EV_VEC_origin, GrenadeOrigin)

							new Float:Distance = vector_distance(PlayerOrigin, GrenadeOrigin)
							if(Distance <= ShortestDistance)
							{
								ShortestDistance = Distance
								NearestPlayer = players[i]
							}
						}
					}
				}
			}
		}
	}
	if(NearestPlayer > 0)
		{

		new param2[2]
		param2[0] = grenade
		param2[1] = NearestPlayer
		set_task(0.1, "fire_in_the_hole", grenade, param2, 2, "b")
	}
}
public fire_in_the_hole(param[])
	{
	new grenade = param[0]
	new target = param[1]

	if(is_user_alive(target) && is_valid_ent(grenade))
		{
		new Float:nadespeed = get_cvar_float("amx_heatseeking_hegrenade_nadespeed")
		entity_set_follow(grenade, target, nadespeed)
		new Float:Velocity[3]
		new Float:NewAngle[3]

		entity_get_vector(grenade, EV_VEC_velocity, Velocity)
		vector_to_angle(Velocity, NewAngle)
		entity_set_vector(grenade, EV_VEC_angles, NewAngle)

		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)

		write_byte(22)
		write_short(grenade)
		write_short(sprite)
		write_byte(10)
		write_byte(5)

		write_byte(255)
		write_byte(0)
		write_byte(0)

		switch(random_num(0,2))
		{
			case 0:write_byte(64)
			case 1:write_byte(128)
			case 2:write_byte(192)
		}
		message_end()
	}
	else
		{
		remove_task(grenade)
		new param3[1]
		param3[0] = grenade
		set_task(0.1, "seek_n_destroy", 0, param3, 1)
	}
}
public pfn_touch(ptr, ptd)
	{
	if(is_valid_ent(ptd) && is_valid_ent(ptr) && is_user_connected(ptd) && is_user_alive(ptd))
		{
		new Classname[32]
		entity_get_string(ptr, EV_SZ_classname, Classname, 31)
		if(equal(Classname, "grenade"))
			{
			nade_explode(ptr)
		}
	}
}
public nade_explode(ent)
	{
	if(!is_valid_ent(ent)) {
		pause_entity[ent] = 0
		return
	}
	if(get_cvar_num("amx_n") == 0) {
		return
	}

	pause_entity[ent] = 0
	return
}
public fw_entity_think(ent)
	{
	if(ent < 0 || ent > sizeof(pause_entity)-1 || get_cvar_num("amx_n") == 0)
		{
		return FMRES_IGNORED
	}

	if(pause_entity[ent] == 1)
		{
		new Float:nextthink = entity_get_float(ent, EV_FL_nextthink)
		set_pev(ent, pev_nextthink, nextthink + 0.1)
		return FMRES_SUPERCEDE
	}
	return FMRES_IGNORED
}
stock entity_set_follow(entity, target, Float:speed)
	{
	if(!is_valid_ent(entity) || !is_valid_ent(target)) return 0

	new Float:entity_origin[3], Float:target_origin[3]
	entity_get_vector(entity, EV_VEC_origin, entity_origin)
	entity_get_vector(target, EV_VEC_origin, target_origin)

	new Float:diff[3]
	diff[0] = target_origin[0] - entity_origin[0]
	diff[1] = target_origin[1] - entity_origin[1]
	diff[2] = target_origin[2] - entity_origin[2]

	new Float:length = floatsqroot(floatpower(diff[0], 2.0) + floatpower(diff[1], 2.0) + floatpower(diff[2], 2.0))

	new Float:Velocity[3]
	Velocity[0] = diff[0] * (speed / length)
	Velocity[1] = diff[1] * (speed / length)
	Velocity[2] = diff[2] * (speed / length)

	entity_set_vector(entity, EV_VEC_velocity, Velocity)

	return 1
}
public startround(id)
	{
	hasSMOKENADE[id] = false
	hasHENADE[id] = false
	hasFLASHNADE[id] = false
	g_has_hnade[id] = false
	hastrail[id] = false
	hasglow[id] = false
	client_print(id,print_chat,"This server is using Super Nades Mod, type /nadesprices in chat to see the nades prices.")
	set_hudmessage(id, 255, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 4)
	show_hudmessage(id, "This server is using Super Nade Mod, type /nadesprices in chat to see the nades prices.")
}
public client_connect(id)
	{
	hasSMOKENADE[id] = false
	hasHENADE[id] = false
	hasFLASHNADE[id] = false
	g_has_hnade[id] = false
	hastrail[id] = false
	hasglow[id] = false
}
public client_disconnect(id)
	{
	hasSMOKENADE[id] = false
	hasHENADE[id] = false
	hasFLASHNADE[id] = false
	g_has_hnade[id] = false
	hastrail[id] = false
	hasglow[id] = false
}
public nade_thrown(id)
{
	hasSMOKENADE[id] = false
	hasHENADE[id] = false
	hasFLASHNADE[id] = false
	g_has_hnade[id] = false
	hastrail[id] = false
	hasglow[id] = false
}
public FlashedEvent(id, wId )
	{
	new iMode = get_cvar_num("amx_fb_mode")

	if ( !iMode ) return PLUGIN_CONTINUE

	new iRed,iGreen,iBlue

	switch( iMode )
	{
		case 1:
		{
			iRed =   get_cvar_num("amx_fb_r")
			iGreen = get_cvar_num("amx_fb_g")
			iBlue =  get_cvar_num("amx_fb_b")
		}
		case 2:
		{
			iRed =   random_num(0,255)
			iGreen = random_num(0,255)
			iBlue =  random_num(0,255)
		}
	}

	if ( !( iRed ) || !( iGreen ) || !( iBlue ) )
		{
		iRed =   100
		iGreen = 100
		iBlue =  100
	}
	if(hasFLASHNADE[id])
		{

		message_begin( MSG_ONE,g_nMsgScreenFade,{0,0,0}, id)
		write_short( read_data( 1 ) )	// Duration
		write_short( read_data( 2 ) )	// Hold time
		write_short( read_data( 3 ) )	// Fade type
		write_byte ( iRed )		// Red
		write_byte ( iGreen )		// Green
		write_byte ( iBlue )		// Blue
		write_byte ( read_data( 7 ) )	// Alpha
		message_end()

		return PLUGIN_HANDLED
	}
	return PLUGIN_CONTINUE
}