Day of Defeat Plugins Community
This site is an archive — everything is readable and downloadable, nothing can be posted. Admin
Archive › Old Forum Threads › DoD Plugins › Trash › Artificial bullet
1 post · 5,601 views Thread Rating: ★★★★★
closedArtificial bullet
Started by Dr.G on 02-08-2010, 04:45 PM
Dr.G
started this thread
Posts: 776
Threads: 75
Joined: Nov 2007
02-08-2010, 04:45 PM #1

This is THE way to make a "fake bullet" with spread. Written by xxavalanchexxrnrn->rnrn

#include <amxmodx>rn#include <fakemeta>rn#include <hamsandwich>rn#include <xs>rnrnnew beamSpr;rnrnpublic plugin_init()rn{rn	register_clcmd("fire","do_fire");rn}rnrnpublic plugin_precache()rn{rn	beamSpr = precache_model("sprites/laserbeam.spr");rn}rnrnpublic do_fire(id)rn{rn	new arg1[4], arg2[8];rn	read_argv(1,arg1,3);rn	read_argv(2,arg2,7);rn	new cShots = str_to_num(arg1);rn	new Float:flSpread = floatstr(arg2);rn	rn	new Float:vecSrc[3], Float:vecOrigin[3], Float:vecViewOfs[3];rn	rn	pev(id, pev_origin, vecOrigin);rn	pev(id, pev_view_ofs, vecViewOfs);rn	rn	xs_vec_add(vecOrigin, vecViewOfs, vecSrc);rn	rn	new Float:vecVAngle[3], Float:vecPunchAngle[3], Float:vecTemp[3], Float:vecDirShooting[3];rn	rn	pev(id, pev_v_angle, vecVAngle);rn	pev(id, pev_punchangle, vecPunchAngle);rn	xs_vec_add(vecVAngle, vecPunchAngle, vecTemp);rn	rn	engfunc(EngFunc_MakeVectors, vecTemp);rn	global_get(glb_v_forward, vecDirShooting);rn	rn	new Float:vecSpread[3];rn	vecSpread[0] = flSpread;rn	vecSpread[1] = flSpread;rn	vecSpread[2] = flSpread;rn	rn	FireBulletsPlayer(cShots, vecSrc, vecDirShooting, vecSpread, 2048.0, 10, id);rn	rn	return PLUGIN_HANDLED;rn}rnrnpublic FireBulletsPlayer ( cShots, Float:vecSrc[3], Float:vecDirShooting[3], Float:vecSpread[3], Float:flDistance, iDamage, pevAttacker )rn{rn	new tr;rn	rn	new Float:vecRight[3], Float:vecUp[3];rn	global_get( glb_v_right, vecRight );rn	global_get( glb_v_up, vecUp );rn	rn	new Float:x, Float:y/* , Float:z; */rn	rn	new Float:vecDir[3], Float:vecEnd[3], Float:vecTemp1[3], Float:vecTemp2[3];rn	rn	for ( new iShot = 1; iShot <= cShots; iShot++ )rn	{rn		//Use player's random seed.rn		// get circular gaussian spreadrn		x = random_float( -0.5, 0.5 ) + random_float( -0.5, 0.5 );rn		y = random_float( -0.5, 0.5 ) + random_float( -0.5, 0.5 );rn		/* z = x * x + y * y; */rn		rn		/* Vector vecDir = vecDirShooting +rn		x * vecSpread.x * vecRight +rn		y * vecSpread.y * vecUp; */rn		rn		xs_vec_mul_scalar( vecRight, x * vecSpread[0], vecTemp1 );rn		xs_vec_mul_scalar( vecUp, y * vecSpread[1], vecTemp2 );rn		rn		xs_vec_add( vecDirShooting, vecTemp1, vecDir );rn		xs_vec_add( vecDir, vecTemp2, vecDir );rn		rn		/* vecEnd = vecSrc + vecDir * flDistance; */rn		rn		xs_vec_mul_scalar( vecDir, flDistance, vecTemp1 );rn		xs_vec_add( vecSrc, vecTemp1, vecEnd );rn		rn		engfunc( EngFunc_TraceLine, vecSrc, vecEnd, DONT_IGNORE_MONSTERS, pevAttacker/*pentIgnore*/, tr );rn		rn		new Float:flFraction;rn		get_tr2( tr, TR_flFraction, flFraction );rn		rn		// do damage, paint decalsrn		if(flFraction != 1.0)rn		{rn			new pEntity = get_tr2( tr, TR_pHit );rn			rn			if ( iDamage && pev_valid(pEntity) )rn			{rn				ExecuteHam( Ham_TakeDamage, pEntity, any:pevAttacker, any:pevAttacker, any:float(iDamage), any:(DMG_BULLET | ((iDamage > 16) ? DMG_ALWAYSGIB : DMG_NEVERGIB)) );rn				rn				/* TEXTURETYPE_PlaySound(&tr, vecSrc, vecEnd, iBulletType);rn				DecalGunshot( &tr, iBulletType ); */rn			} rn		}rn		// make bullet trailsrn		/* UTIL_BubbleTrail( vecSrc, tr.vecEndPos, (flDistance * tr.flFraction) / 64.0 ); */rn		rn		new Float:vecEndPos[3];rn		get_tr2( tr, TR_vecEndPos, vecEndPos );rn		rn		// beam effectrn		message_begin( MSG_BROADCAST, SVC_TEMPENTITY );rn		write_byte( TE_BEAMPOINTS );rn		write_coord( floatround(vecSrc[0]) );rn		write_coord( floatround(vecSrc[1]) );rn		write_coord( floatround(vecSrc[2]) );rn		write_coord( floatround(vecEndPos[0]) );rn		write_coord( floatround(vecEndPos[1]) );rn		write_coord( floatround(vecEndPos[2]) );rn		write_short( beamSpr );rn		write_byte( 0 );rn		write_byte( 0 );rn		write_byte( 255 );rn		write_byte( 10 );rn		write_byte( 0 );rn		write_byte( 0 );rn		write_byte( 255 );rn		write_byte( 0 );rn		write_byte( 200 );rn		write_byte( 0 );rn		message_end( );rn	}rn	rn	return 1;rn}
rnrnThe spread gotta be set really low, I use 0.23 for a shotgun eg.

Archive › Old Forum Threads › DoD Plugins › Trash › Artificial bullet
DoD Plugins Archive · Repository · Old Forum Threads · Maps · Admin · built 14 Sep 2026 00:34 UTC