Accuracy Fix само за потребители с определен флаг

В този раздел можете да подавате всякакви заявки за намиране, изработка или преработка на плъгини/модове.
Аватар
thoughtz
Извън линия
Модератор
Модератор
Мнения: 585
Регистриран на: 13 Окт 2016, 00:32
Местоположение: гр. София
Се отблагодари: 112 пъти
Получена благодарност: 79 пъти
Обратна връзка:

Accuracy Fix само за потребители с определен флаг

Мнение от thoughtz » 28 Фев 2019, 23:10

Здравейте, някой може ли да преправи следния плъгин да може да се ползва само ако имаш определен флаг? Благодаря.

Код за потвърждение: Избери целия код

/**
 *
 * Accuracy Fix
 *  by Numb
 *
 *
 * Description:
 *  One of the least known bugs in Counter-Strike is that accuracy of your bullet is set at
 *  the moment you made your previous shot, and how much time you wait has no effect on the
 *  bullet you just fired. However it has effect on the next time when you shall shoot.
 *  Sometimes players even think that their reg (bullet registration on the server) is off
 *  quite a bit. Fortunately this isn't a net code issue, but the actual glitch in accuracy
 *  calculation, what this plugin fixes. Also this plugin has few more has few more extra
 *  features. Shortly here's everything what it does:
 *  + Fixes "use accuracy from last bullet fired earlier" glitch.
 *  + Fixes and improves smooth spread transitions when shooting automatic weapons.
 *  + Fixes spread cool-down at low fps.
 *  + Fixes switched glock burst-fire accuracy of when moving and when standing still.
 *  + Improves accuracy drastically, when you aren't moving and your spread is cooled down
 *   so to speak. You must stay on ground of course for that to happen. If you crouch, than
 *   effect becomes even stronger (in most weapons this scenario makes first bullet dead on
 *   center).
 *  + One more drastic change is major improvement on sg550 weapon - as you may noticed,
 *   normally it isn't accurate at all, and that the spread is simply horrible, especially
 *   comparing to terrorist sniper rifle g3sg1.
 *  + Last, but not least, when standing scout accuracy is somewhat improved - normally
 *   scout is really inaccurate, you must duck to make a shot after what you wont ask
 *   yourself "Whaaat??? How did I miss?".
 *
 *
 * Requires:
 *  FakeMeta
 *  HamSandWich
 *
 *
 * Additional info:
 *  Tested in Counter-Strike 1.6 with amxmodx 1.8.2. You may also download demos to see for
 *  yourself this bugs and how well plugin handles them.
 *
 *
 * Notes:
 *  Once installed, you wont see no graphical changes in accuracy. This is due to
 *  client-side accuracy calculation, what server does not update by default. In order to
 *  see actual location where bullet decal appears, you have to type "cl_lw 0" in console.
 *  But don't use this setting in actual gameplay, cause it disables client-side fire
 *  animations, and forces server-side ones what are delayed due to ping ("cl_lw 0" may
 *  and will lead to laggy gameplay).
 *
 *
 * Credits:
 *  Special thanks to Arkshine ( http://forums.alliedmods.net/member.php?u=7779 ) for
 *  Counter-Strike SDK ( https://github.com/Arkshine/CSSDK/ )!
 *
 *
 * Change-Log:
 *
 *  + 3.0
 *  - Added: Fix for glock wrong movement condition accuracy when in burst mode.
 *
 *  + 2.0
 *  - Added: Fix for smooth spread transitions of automatic weapons.
 *  - Added: Improved smooth spread transitions of automatic weapons.
 *  - Added: Fix for slow spread cool-down of automatic weapons at low fps.
 *  - Added: Smoother transition to maximum accuracy for pistols and sg550.
 *
 *  + 1.0
 *  - First release.
 *
 *
 * Downloads:
 *  Amx Mod X forums: http://forums.alliedmods.net/showthread.php?p=1549133#post1549133
 *
**/


#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#define PLUGIN_NAME	"Accuracy Fix"
#define PLUGIN_VERSION	"3.0"
#define PLUGIN_AUTHOR	"Numb"

#define SMOOTH_SPREAD_TRANSITION
#define LOW_FPS_SPREAD_COOLDOWN_FIX

#define m_pPlayer 41
#define m_flAccuracy 62
#define m_flLastFire 63
#define m_iShotsFired 64
#define m_fWeaponState 74
#define WEAPONSTATE_GLOCK18_BURST_MODE (1<<1)
#define m_flDecreaseShotsFired 76

new Float:g_fAccuracy;
#if defined LOW_FPS_SPREAD_COOLDOWN_FIX
new Float:g_fOldDecreaseShotsFired;
new g_iOldShotsFired;
#endif
new bool:g_bGlockDuckRemoved;
new bool:g_bGlockVelocityChanged;
new Float:g_fGlockVelocity[3];


public plugin_init()
{
	register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
	
	register_cvar("accuracy_fix", PLUGIN_VERSION, (FCVAR_SERVER|FCVAR_SPONLY));
	
#if defined LOW_FPS_SPREAD_COOLDOWN_FIX
	RegisterHam(Ham_Item_PostFrame, "weapon_ak47",    "Ham_PostFrame_Pre", 0);
	RegisterHam(Ham_Item_PostFrame, "weapon_aug",     "Ham_PostFrame_Pre", 0);
	RegisterHam(Ham_Item_PostFrame, "weapon_famas",   "Ham_PostFrame_Pre", 0);
	RegisterHam(Ham_Item_PostFrame, "weapon_galil",   "Ham_PostFrame_Pre", 0);
	RegisterHam(Ham_Item_PostFrame, "weapon_m249",    "Ham_PostFrame_Pre", 0);
	RegisterHam(Ham_Item_PostFrame, "weapon_m4a1",    "Ham_PostFrame_Pre", 0);
	RegisterHam(Ham_Item_PostFrame, "weapon_mac10",   "Ham_PostFrame_Pre", 0);
	RegisterHam(Ham_Item_PostFrame, "weapon_mp5navy", "Ham_PostFrame_Pre", 0);
	RegisterHam(Ham_Item_PostFrame, "weapon_p90",     "Ham_PostFrame_Pre", 0);
	RegisterHam(Ham_Item_PostFrame, "weapon_sg552",   "Ham_PostFrame_Pre", 0);
	RegisterHam(Ham_Item_PostFrame, "weapon_tmp",     "Ham_PostFrame_Pre", 0);
	RegisterHam(Ham_Item_PostFrame, "weapon_ump45",   "Ham_PostFrame_Pre", 0);
	RegisterHam(Ham_Item_PostFrame, "weapon_ak47",    "Ham_PostFrame_Pre", 0);
	
	RegisterHam(Ham_Item_PostFrame, "weapon_aug",     "Ham_PostFrame_Post", 1);
	RegisterHam(Ham_Item_PostFrame, "weapon_famas",   "Ham_PostFrame_Post", 1);
	RegisterHam(Ham_Item_PostFrame, "weapon_galil",   "Ham_PostFrame_Post", 1);
	RegisterHam(Ham_Item_PostFrame, "weapon_m249",    "Ham_PostFrame_Post", 1);
	RegisterHam(Ham_Item_PostFrame, "weapon_m4a1",    "Ham_PostFrame_Post", 1);
	RegisterHam(Ham_Item_PostFrame, "weapon_mac10",   "Ham_PostFrame_Post", 1);
	RegisterHam(Ham_Item_PostFrame, "weapon_mp5navy", "Ham_PostFrame_Post", 1);
	RegisterHam(Ham_Item_PostFrame, "weapon_p90",     "Ham_PostFrame_Post", 1);
	RegisterHam(Ham_Item_PostFrame, "weapon_sg552",   "Ham_PostFrame_Post", 1);
	RegisterHam(Ham_Item_PostFrame, "weapon_tmp",     "Ham_PostFrame_Post", 1);
	RegisterHam(Ham_Item_PostFrame, "weapon_ump45",   "Ham_PostFrame_Post", 1);
#endif
	
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_ak47",      "Ham_Attack_ak47_Pre",    0);
	
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_aug",       "Ham_Attack_aug_Pre",     0);
	
	// awp accuracy offset does not exist
	
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_deagle",    "Ham_Attack_deagle_Pre",  0);
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_deagle",    "Ham_Attack_deagle_Post", 1);
	
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_elite",     "Ham_Attack_elite_Pre",   0);
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_elite",     "Ham_Attack_elite_Post",  1);
	
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_famas",     "Ham_Attack_famas_Pre",   0);
	
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_fiveseven", "Ham_Attack_57_Pre",      0);
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_fiveseven", "Ham_Attack_57_Post",     1);
	
	// g3sg1 accuracy offset has no effect
	
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_galil",     "Ham_Attack_galil_Pre",   0);
	
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_glock18",   "Ham_Attack_glock_Pre",   0);
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_glock18",   "Ham_Attack_glock_Post",  1);
	
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_m249",      "Ham_Attack_m249_Pre",    0);
	
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_m4a1",      "Ham_Attack_m4a1_Pre",    0);
	
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_mac10",     "Ham_Attack_mac10_Pre",   0);
	
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_mp5navy",   "Ham_Attack_mp5_Pre",     0);
	
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_p228",      "Ham_Attack_p228_Pre",    0);
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_p228",      "Ham_Attack_p228_Post",   1);
	
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_p90",       "Ham_Attack_p90_Pre",     0);
	
	// scout accuracy offset does not exist
	
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_scout",     "Ham_Attack_scout_Pre",   0);
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_scout",     "Ham_Attack_scout_Post",  1);
	
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_sg550",     "Ham_Attack_sg550_Pre",   0);
	
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_sg552",     "Ham_Attack_sg552_Pre",   0);
	
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_tmp",       "Ham_Attack_tmp_Pre",     0);
	
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_ump45",     "Ham_Attack_ump45_Pre",   0);
	
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_usp",       "Ham_Attack_usp_Pre",     0);
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_usp",       "Ham_Attack_usp_Post",    1);
}

public plugin_unpause()
{
	g_fAccuracy = 0.0;
#if defined LOW_FPS_SPREAD_COOLDOWN_FIX
	g_fOldDecreaseShotsFired = 0.0;
	g_iOldShotsFired = 0;
#endif
	
	g_bGlockDuckRemoved = false;
	g_bGlockVelocityChanged = false;
}

#if defined LOW_FPS_SPREAD_COOLDOWN_FIX
public Ham_PostFrame_Pre(iEnt)
{
	if( pev(get_pdata_cbase(iEnt, m_pPlayer, 4), pev_button)&IN_ATTACK )
	{
		g_fOldDecreaseShotsFired = 0.0;
		g_iOldShotsFired = 0;
	}
	else
	{
		g_fOldDecreaseShotsFired = get_pdata_float(iEnt, m_flDecreaseShotsFired, 4);
		if( g_fOldDecreaseShotsFired<get_gametime() )
			g_iOldShotsFired = get_pdata_int(iEnt, m_iShotsFired, 4);
		else
		{
			g_fOldDecreaseShotsFired = 0.0;
			g_iOldShotsFired = 0;
		}
	}
}

public Ham_PostFrame_Post(iEnt)
{
	if( g_iOldShotsFired>0 && g_fOldDecreaseShotsFired>0.0 )
	{
		static s_iShotsFired;
		s_iShotsFired = get_pdata_int(iEnt, m_iShotsFired, 4);
		
		if( g_iOldShotsFired>s_iShotsFired>0 )
		{
			static Float:s_fDecreaseShotsFired;
			s_fDecreaseShotsFired = get_pdata_float(iEnt, m_flDecreaseShotsFired, 4);
			
			if( s_fDecreaseShotsFired>g_fOldDecreaseShotsFired )
			{
				static Float:s_fGameTime;
				s_fGameTime = get_gametime();
				
				if( s_fDecreaseShotsFired>s_fGameTime )
				{
					static Float:s_fDelay;
					s_fDelay = (s_fDecreaseShotsFired-s_fGameTime);
					s_fDecreaseShotsFired -= (s_fGameTime-g_fOldDecreaseShotsFired);
					
					/*while( s_fDecreaseShotsFired<s_fGameTime ) // may not be super CPU friendly, if some other plugin messes things up
					{
						s_fDecreaseShotsFired += s_fDelay;
						s_iShotsFired--;
						
						if( s_iShotsFired<=0 )
							break;
					}
					
					set_pdata_float(iEnt, m_flDecreaseShotsFired, s_fDecreaseShotsFired, 4);
					set_pdata_int(iEnt, m_iShotsFired, s_iShotsFired, 4);*/
					
					if( s_fDecreaseShotsFired<s_fGameTime ) // 'a bit' more complicated way, but does the same thing
					{
						static s_iDecreaseCount;
						s_iDecreaseCount = floatround(((s_fGameTime-s_fDecreaseShotsFired)/s_fDelay), floatround_ceil);
						
						if( s_iDecreaseCount>s_iShotsFired )
							s_iDecreaseCount = s_iShotsFired;
						
						set_pdata_float(iEnt, m_flDecreaseShotsFired, (s_fDecreaseShotsFired+(float(s_iDecreaseCount)*s_fDelay)), 4);
						set_pdata_int(iEnt, m_iShotsFired, (s_iShotsFired-s_iDecreaseCount), 4);
					}
					else
						set_pdata_float(iEnt, m_flDecreaseShotsFired, s_fDecreaseShotsFired, 4);
				}
			}
		}
	}
}
#endif


public Ham_Attack_ak47_Pre(iEnt)
{
	static s_iShotsFired;
	s_iShotsFired = get_pdata_int(iEnt, m_iShotsFired, 4)-1;
	if( s_iShotsFired>=0 )
	{
#if defined SMOOTH_SPREAD_TRANSITION
		g_fAccuracy = (((s_iShotsFired*s_iShotsFired*s_iShotsFired)/200.0)+0.2+smooth_accuracy_transition((s_iShotsFired+1), 0.15, 3));
#else
		g_fAccuracy = ((s_iShotsFired*s_iShotsFired*s_iShotsFired)/200.0)+0.35;
#endif
		
		if( g_fAccuracy>1.25 )
			g_fAccuracy = 1.25;
		
		set_pdata_float(iEnt, m_flAccuracy, g_fAccuracy, 4);
	}
	else
	{
		static s_iOwner, s_iFlags;
		s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
		s_iFlags = pev(s_iOwner, pev_flags);
		
		if( s_iFlags&FL_ONGROUND )
		{
			static Float:s_fVelocity[3];
			pev(s_iOwner, pev_velocity, s_fVelocity);
			
			if( !s_fVelocity[0] && !s_fVelocity[1] )
			{
				if( s_iFlags&FL_DUCKING )
					set_pdata_float(iEnt, m_flAccuracy, 0.0, 4);
				else
					set_pdata_float(iEnt, m_flAccuracy, 0.1, 4);
			}
			else
				set_pdata_float(iEnt, m_flAccuracy, 0.2, 4);
		}
		else
			set_pdata_float(iEnt, m_flAccuracy, 0.2, 4);
	}
}

public Ham_Attack_aug_Pre(iEnt)
{
	static s_iShotsFired;
	s_iShotsFired = get_pdata_int(iEnt, m_iShotsFired, 4)-1;
	if( s_iShotsFired>=0 )
	{
#if defined SMOOTH_SPREAD_TRANSITION
		g_fAccuracy = (((s_iShotsFired*s_iShotsFired*s_iShotsFired)/215.0)+0.2+smooth_accuracy_transition((s_iShotsFired+1), 0.1, 2));
#else
		g_fAccuracy = ((s_iShotsFired*s_iShotsFired*s_iShotsFired)/215.0)+0.3;
#endif
		
		if( g_fAccuracy>1.0 )
			g_fAccuracy = 1.0;
		
		set_pdata_float(iEnt, m_flAccuracy, g_fAccuracy, 4);
	}
	else
	{
		static s_iOwner, s_iFlags;
		s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
		s_iFlags = pev(s_iOwner, pev_flags);
		
		if( s_iFlags&FL_ONGROUND )
		{
			static Float:s_fVelocity[3];
			pev(s_iOwner, pev_velocity, s_fVelocity);
			
			if( !s_fVelocity[0] && !s_fVelocity[1] )
			{
				if( s_iFlags&FL_DUCKING )
					set_pdata_float(iEnt, m_flAccuracy, 0.0, 4);
				else
					set_pdata_float(iEnt, m_flAccuracy, 0.1, 4);
			}
			else
				set_pdata_float(iEnt, m_flAccuracy, 0.2, 4);
		}
		else
			set_pdata_float(iEnt, m_flAccuracy, 0.2, 4);
	}
}


public Ham_Attack_deagle_Pre(iEnt)
{
	static Float:s_fLastFire;
	s_fLastFire = get_pdata_float(iEnt, m_flLastFire, 4);
	if( !s_fLastFire )
	{
		static s_iOwner, s_iFlags;
		s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
		s_iFlags = pev(s_iOwner, pev_flags);
		
		if( s_iFlags&FL_ONGROUND )
		{
			static Float:s_fVelocity[3];
			pev(s_iOwner, pev_velocity, s_fVelocity);
			
			if( !s_fVelocity[0] && !s_fVelocity[1] )
			{
				if( s_iFlags&FL_DUCKING )
					g_fAccuracy = 1.0;
				else
					g_fAccuracy = 0.96;
			}
			else
				g_fAccuracy = 0.92;
		}
		else
			g_fAccuracy = 0.92;
		set_pdata_float(iEnt, m_flAccuracy, g_fAccuracy, 4);
	}
	else if( get_pdata_int(iEnt, m_iShotsFired, 4)<=0 )
	{
		g_fAccuracy = get_pdata_float(iEnt, m_flAccuracy, 4);
		g_fAccuracy -= (0.4-(get_gametime()-s_fLastFire))*0.35;
		
		if( g_fAccuracy<0.55 )
			g_fAccuracy = 0.55;
		else if( g_fAccuracy>0.92 )
		{
			static s_iOwner, s_iFlags;
			s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
			s_iFlags = pev(s_iOwner, pev_flags);
			
			if( s_iFlags&FL_ONGROUND )
			{
				static Float:s_fVelocity[3];
				pev(s_iOwner, pev_velocity, s_fVelocity);
				
				if( !s_fVelocity[0] && !s_fVelocity[1] )
				{
					if( s_iFlags&FL_DUCKING )
					{
						if( g_fAccuracy>1.0 )
							g_fAccuracy = 1.0;
					}
					else if( g_fAccuracy>0.96 )
						g_fAccuracy = 0.96;
				}
				else
					g_fAccuracy = 0.92;
			}
			else
				g_fAccuracy = 0.92;
		}
		set_pdata_float(iEnt, m_flAccuracy , g_fAccuracy, 4);
	}
	else
		g_fAccuracy = -1.0;
}

public Ham_Attack_deagle_Post(iEnt)
{
	if( g_fAccuracy>0.92 )
		set_pdata_float(iEnt, m_flAccuracy , 0.92, 4);
	else if( g_fAccuracy>0.0 )
		set_pdata_float(iEnt, m_flAccuracy , g_fAccuracy, 4);
}


public Ham_Attack_elite_Pre(iEnt)
{
	static Float:s_fLastFire;
	s_fLastFire = get_pdata_float(iEnt, m_flLastFire, 4);
	if( !s_fLastFire )
	{
		static s_iOwner, s_iFlags;
		s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
		s_iFlags = pev(s_iOwner, pev_flags);
		
		if( s_iFlags&FL_ONGROUND )
		{
			static Float:s_fVelocity[3];
			pev(s_iOwner, pev_velocity, s_fVelocity);
			
			if( !s_fVelocity[0] && !s_fVelocity[1] )
			{
				if( s_iFlags&FL_DUCKING )
					g_fAccuracy = 1.0;
				else
					g_fAccuracy = 0.94;
			}
			else
				g_fAccuracy = 0.88;
		}
		else
			g_fAccuracy = 0.88;
		set_pdata_float(iEnt, m_flAccuracy, g_fAccuracy, 4);
	}
	else if( get_pdata_int(iEnt, m_iShotsFired, 4)<=0 )
	{
		g_fAccuracy = get_pdata_float(iEnt, m_flAccuracy, 4);
		g_fAccuracy -= (0.325-(get_gametime()-s_fLastFire))*0.275;
		
		if( g_fAccuracy<0.55 )
			g_fAccuracy = 0.55;
		else if( g_fAccuracy>0.88 )
		{
			static s_iOwner, s_iFlags;
			s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
			s_iFlags = pev(s_iOwner, pev_flags);
			
			if( s_iFlags&FL_ONGROUND )
			{
				static Float:s_fVelocity[3];
				pev(s_iOwner, pev_velocity, s_fVelocity);
				
				if( !s_fVelocity[0] && !s_fVelocity[1] )
				{
					if( s_iFlags&FL_DUCKING )
					{
						if( g_fAccuracy>1.0 )
							g_fAccuracy = 1.0;
					}
					else if( g_fAccuracy>0.94 )
						g_fAccuracy = 0.94;
				}
				else
					g_fAccuracy = 0.88;
			}
			else
				g_fAccuracy = 0.88;
		}
		set_pdata_float(iEnt, m_flAccuracy , g_fAccuracy, 4);
	}
	else
		g_fAccuracy = -1.0;
}

public Ham_Attack_elite_Post(iEnt)
{
	if( g_fAccuracy>0.88 )
		set_pdata_float(iEnt, m_flAccuracy , 0.88, 4);
	else if( g_fAccuracy>0.0 )
		set_pdata_float(iEnt, m_flAccuracy , g_fAccuracy, 4);
}


public Ham_Attack_famas_Pre(iEnt)
{
	static s_iShotsFired;
	s_iShotsFired = get_pdata_int(iEnt, m_iShotsFired, 4)-1;
	if( s_iShotsFired>=0 )
	{
#if defined SMOOTH_SPREAD_TRANSITION
		g_fAccuracy = (((s_iShotsFired*s_iShotsFired*s_iShotsFired)/215.0)+0.2+smooth_accuracy_transition((s_iShotsFired+1), 0.1, 2));
#else
		g_fAccuracy = ((s_iShotsFired*s_iShotsFired*s_iShotsFired)/215.0)+0.3;
#endif
		
		if( g_fAccuracy>1.0 )
			g_fAccuracy = 1.0;
		
		set_pdata_float(iEnt, m_flAccuracy, g_fAccuracy, 4);
	}
	else
	{
		static s_iOwner, s_iFlags;
		s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
		s_iFlags = pev(s_iOwner, pev_flags);
		
		if( s_iFlags&FL_ONGROUND )
		{
			static Float:s_fVelocity[3];
			pev(s_iOwner, pev_velocity, s_fVelocity);
			
			if( !s_fVelocity[0] && !s_fVelocity[1] )
			{
				if( s_iFlags&FL_DUCKING )
					set_pdata_float(iEnt, m_flAccuracy, 0.0, 4);
				else
					set_pdata_float(iEnt, m_flAccuracy, 0.1, 4);
			}
			else
				set_pdata_float(iEnt, m_flAccuracy, 0.2, 4);
		}
		else
			set_pdata_float(iEnt, m_flAccuracy, 0.2, 4);
	}
}


public Ham_Attack_57_Pre(iEnt)
{
	static Float:s_fLastFire;
	s_fLastFire = get_pdata_float(iEnt, m_flLastFire, 4);
	if( !s_fLastFire )
	{
		static s_iOwner, s_iFlags;
		s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
		s_iFlags = pev(s_iOwner, pev_flags);
		
		if( s_iFlags&FL_ONGROUND )
		{
			static Float:s_fVelocity[3];
			pev(s_iOwner, pev_velocity, s_fVelocity);
			
			if( !s_fVelocity[0] && !s_fVelocity[1] )
			{
				if( s_iFlags&FL_DUCKING )
					g_fAccuracy = 1.0;
				else
					g_fAccuracy = 0.96;
			}
			else
				g_fAccuracy = 0.92;
		}
		else
			g_fAccuracy = 0.92;
		set_pdata_float(iEnt, m_flAccuracy, g_fAccuracy, 4);
	}
	else if( get_pdata_int(iEnt, m_iShotsFired, 4)<=0 )
	{
		g_fAccuracy = get_pdata_float(iEnt, m_flAccuracy, 4);
		g_fAccuracy -= (0.275-(get_gametime()-s_fLastFire))*0.25;
		
		if( g_fAccuracy<0.725 )
			g_fAccuracy = 0.725;
		else if( g_fAccuracy>0.92 )
		{
			static s_iOwner, s_iFlags;
			s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
			s_iFlags = pev(s_iOwner, pev_flags);
			
			if( s_iFlags&FL_ONGROUND )
			{
				static Float:s_fVelocity[3];
				pev(s_iOwner, pev_velocity, s_fVelocity);
				
				if( !s_fVelocity[0] && !s_fVelocity[1] )
				{
					if( s_iFlags&FL_DUCKING )
					{
						if( g_fAccuracy>1.0 )
							g_fAccuracy = 1.0;
					}
					else if( g_fAccuracy>0.96 )
						g_fAccuracy = 0.96;
				}
				else
					g_fAccuracy = 0.92;
			}
			else
				g_fAccuracy = 0.92;
		}
		set_pdata_float(iEnt, m_flAccuracy , g_fAccuracy, 4);
	}
	else
		g_fAccuracy = -1.0;
}

public Ham_Attack_57_Post(iEnt)
{
	if( g_fAccuracy>0.92 )
		set_pdata_float(iEnt, m_flAccuracy , 0.92, 4);
	else if( g_fAccuracy>0.0 )
		set_pdata_float(iEnt, m_flAccuracy , g_fAccuracy, 4);
}


public Ham_Attack_galil_Pre(iEnt)
{
	static s_iShotsFired;
	s_iShotsFired = get_pdata_int(iEnt, m_iShotsFired, 4)-1;
	if( s_iShotsFired>=0 )
	{
#if defined SMOOTH_SPREAD_TRANSITION
		g_fAccuracy = (((s_iShotsFired*s_iShotsFired*s_iShotsFired)/200.0)+0.2+smooth_accuracy_transition((s_iShotsFired+1), 0.15, 4));
#else
		g_fAccuracy = ((s_iShotsFired*s_iShotsFired*s_iShotsFired)/200.0)+0.35;
#endif
		
		if( g_fAccuracy>1.25 )
			g_fAccuracy = 1.25;
		
		set_pdata_float(iEnt, m_flAccuracy, g_fAccuracy, 4);
	}
	else
	{
		static s_iOwner, s_iFlags;
		s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
		s_iFlags = pev(s_iOwner, pev_flags);
		
		if( s_iFlags&FL_ONGROUND )
		{
			static Float:s_fVelocity[3];
			pev(s_iOwner, pev_velocity, s_fVelocity);
			
			if( !s_fVelocity[0] && !s_fVelocity[1] )
			{
				if( s_iFlags&FL_DUCKING )
					set_pdata_float(iEnt, m_flAccuracy, 0.0, 4);
				else
					set_pdata_float(iEnt, m_flAccuracy, 0.1, 4);
			}
			else
				set_pdata_float(iEnt, m_flAccuracy, 0.2, 4);
		}
		else
			set_pdata_float(iEnt, m_flAccuracy, 0.2, 4);
	}
}

public Ham_Attack_glock_Pre(iEnt)
{
	static Float:s_fLastFire, bool:s_bInBurst;
	s_fLastFire = get_pdata_float(iEnt, m_flLastFire, 4);
	if( get_pdata_int(iEnt, m_fWeaponState, 4)&WEAPONSTATE_GLOCK18_BURST_MODE )
		s_bInBurst = true;
	else
		s_bInBurst = false;
	if( !s_fLastFire )
	{
		static s_iOwner, s_iFlags;
		s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
		s_iFlags = pev(s_iOwner, pev_flags);
		
		if( s_iFlags&FL_ONGROUND )
		{
			pev(s_iOwner, pev_velocity, g_fGlockVelocity);
			
			if( !g_fGlockVelocity[0] && !g_fGlockVelocity[1] )
			{
				if( s_iFlags&FL_DUCKING )
					g_fAccuracy = 1.0;
				else
					g_fAccuracy = 0.95;
				
				if( s_bInBurst )
				{
					if( ~s_iFlags&FL_DUCKING )
					{
						g_bGlockVelocityChanged = true;
						set_pev(s_iOwner, pev_velocity, Float:{150.0, 0.0, 0.0});
					}
				}
			}
			else
			{
				g_fAccuracy = 0.90;
				
				if( s_bInBurst )
				{
					g_bGlockVelocityChanged = true;
					set_pev(s_iOwner, pev_velocity, Float:{0.0, 0.0, 0.0});
					if( s_iFlags&FL_DUCKING )
					{
						g_bGlockDuckRemoved = true;
						set_pev(s_iOwner, pev_flags, (s_iFlags&~FL_DUCKING));
					}
				}
			}
		}
		else
			g_fAccuracy = 0.90;
		set_pdata_float(iEnt, m_flAccuracy, g_fAccuracy, 4);
	}
	else if( get_pdata_int(iEnt, m_iShotsFired, 4)<=0 || s_bInBurst )
	{
		g_fAccuracy = get_pdata_float(iEnt, m_flAccuracy, 4);
		g_fAccuracy -= (0.325-(get_gametime()-s_fLastFire))*0.275;
		
		if( g_fAccuracy<0.6 )
			g_fAccuracy = 0.6;
		else if( g_fAccuracy>0.90 )
		{
			static s_iOwner, s_iFlags;
			s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
			s_iFlags = pev(s_iOwner, pev_flags);
			
			if( s_iFlags&FL_ONGROUND )
			{
				pev(s_iOwner, pev_velocity, g_fGlockVelocity);
				
				if( !g_fGlockVelocity[0] && !g_fGlockVelocity[1] )
				{
					if( s_iFlags&FL_DUCKING )
					{
						if( g_fAccuracy>1.0 )
							g_fAccuracy = 1.0;
					}
					else if( g_fAccuracy>0.95 )
						g_fAccuracy = 0.95;
				
					if( s_bInBurst )
					{
						if( ~s_iFlags&FL_DUCKING )
						{
							g_bGlockVelocityChanged = true;
							set_pev(s_iOwner, pev_velocity, Float:{150.0, 0.0, 0.0});
						}
					}
				}
				else
				{
					g_fAccuracy = 0.90;
				
					if( s_bInBurst )
					{
						g_bGlockVelocityChanged = true;
						set_pev(s_iOwner, pev_velocity, Float:{0.0, 0.0, 0.0});
						if( s_iFlags&FL_DUCKING )
						{
							g_bGlockDuckRemoved = true;
							set_pev(s_iOwner, pev_flags, (s_iFlags&~FL_DUCKING));
						}
					}
				}
			}
			else
				g_fAccuracy = 0.90;
		}
		set_pdata_float(iEnt, m_flAccuracy , g_fAccuracy, 4);
	}
	else
		g_fAccuracy = -1.0;
}

public Ham_Attack_glock_Post(iEnt)
{
	if( g_fAccuracy>0.90 )
		set_pdata_float(iEnt, m_flAccuracy , 0.90, 4);
	else if( g_fAccuracy>0.0 )
		set_pdata_float(iEnt, m_flAccuracy , g_fAccuracy, 4);
	
	static s_iOwner;
	s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
	
	if( g_bGlockVelocityChanged )
	{
		g_bGlockVelocityChanged = false;
		set_pev(s_iOwner, pev_velocity, g_fGlockVelocity);
	}
	
	if( g_bGlockDuckRemoved )
	{
		g_bGlockDuckRemoved = false;
		set_pev(s_iOwner, pev_flags, (pev(s_iOwner, pev_flags)|FL_DUCKING));
	}
}


public Ham_Attack_m249_Pre(iEnt)
{
	static s_iShotsFired;
	s_iShotsFired = get_pdata_int(iEnt, m_iShotsFired, 4)-1;
	if( s_iShotsFired>=0 )
	{
#if defined SMOOTH_SPREAD_TRANSITION
		g_fAccuracy = (((s_iShotsFired*s_iShotsFired*s_iShotsFired)/175.0)+0.2+smooth_accuracy_transition((s_iShotsFired+1), 0.2, 4));
#else
		g_fAccuracy = ((s_iShotsFired*s_iShotsFired*s_iShotsFired)/175.0)+0.4;
#endif
		
		if( g_fAccuracy>0.9 )
			g_fAccuracy = 0.9;
		
		set_pdata_float(iEnt, m_flAccuracy, g_fAccuracy, 4);
	}
	else
	{
		static s_iOwner, s_iFlags;
		s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
		s_iFlags = pev(s_iOwner, pev_flags);
		
		if( s_iFlags&FL_ONGROUND )
		{
			static Float:s_fVelocity[3];
			pev(s_iOwner, pev_velocity, s_fVelocity);
			
			if( !s_fVelocity[0] && !s_fVelocity[1] )
			{
				if( s_iFlags&FL_DUCKING )
					set_pdata_float(iEnt, m_flAccuracy, 0.0, 4);
				else
					set_pdata_float(iEnt, m_flAccuracy, 0.1, 4);
			}
			else
				set_pdata_float(iEnt, m_flAccuracy, 0.2, 4);
		}
		else
			set_pdata_float(iEnt, m_flAccuracy, 0.2, 4);
	}
}


public Ham_Attack_m4a1_Pre(iEnt)
{
	static s_iShotsFired;
	s_iShotsFired = get_pdata_int(iEnt, m_iShotsFired, 4)-1;
	if( s_iShotsFired>=0 )
	{
#if defined SMOOTH_SPREAD_TRANSITION
		g_fAccuracy = (((s_iShotsFired*s_iShotsFired*s_iShotsFired)/220.0)+0.2+smooth_accuracy_transition((s_iShotsFired+1), 0.15, 3));
#else
		g_fAccuracy = ((s_iShotsFired*s_iShotsFired*s_iShotsFired)/220.0)+0.35;
#endif
		
		if( g_fAccuracy>1.25 )
			g_fAccuracy = 1.25;
		
		set_pdata_float(iEnt, m_flAccuracy, g_fAccuracy, 4);
	}
	else
	{
		static s_iOwner, s_iFlags;
		s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
		s_iFlags = pev(s_iOwner, pev_flags);
		
		if( s_iFlags&FL_ONGROUND )
		{
			static Float:s_fVelocity[3];
			pev(s_iOwner, pev_velocity, s_fVelocity);
			
			if( !s_fVelocity[0] && !s_fVelocity[1] )
			{
				if( s_iFlags&FL_DUCKING )
					set_pdata_float(iEnt, m_flAccuracy, 0.0, 4);
				else
					set_pdata_float(iEnt, m_flAccuracy, 0.1, 4);
			}
			else
				set_pdata_float(iEnt, m_flAccuracy, 0.2, 4);
		}
		else
			set_pdata_float(iEnt, m_flAccuracy, 0.2, 4);
	}
}


public Ham_Attack_mac10_Pre(iEnt)
{
	static s_iShotsFired;
	s_iShotsFired = get_pdata_int(iEnt, m_iShotsFired, 4)-1;
	if( s_iShotsFired>=0 )
	{
#if defined SMOOTH_SPREAD_TRANSITION
		g_fAccuracy = (((s_iShotsFired*s_iShotsFired*s_iShotsFired)/200.0)+0.15+smooth_accuracy_transition((s_iShotsFired+1), 0.45, 8));
#else
		g_fAccuracy = ((s_iShotsFired*s_iShotsFired*s_iShotsFired)/200.0)+0.6;
#endif
		
		if( g_fAccuracy>1.65 )
			g_fAccuracy = 1.65;
		
		set_pdata_float(iEnt, m_flAccuracy, g_fAccuracy, 4);
	}
	else
	{
		static s_iOwner, s_iFlags;
		s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
		s_iFlags = pev(s_iOwner, pev_flags);
		
		if( s_iFlags&FL_ONGROUND )
		{
			static Float:s_fVelocity[3];
			pev(s_iOwner, pev_velocity, s_fVelocity);
			
			if( !s_fVelocity[0] && !s_fVelocity[1] )
			{
				if( s_iFlags&FL_DUCKING )
					set_pdata_float(iEnt, m_flAccuracy, 0.0, 4);
				else
					set_pdata_float(iEnt, m_flAccuracy, 0.075, 4);
			}
			else
				set_pdata_float(iEnt, m_flAccuracy, 0.15, 4);
		}
		else
			set_pdata_float(iEnt, m_flAccuracy, 0.15, 4);
	}
}


public Ham_Attack_mp5_Pre(iEnt)
{
	static s_iShotsFired;
	s_iShotsFired = get_pdata_int(iEnt, m_iShotsFired, 4)-1;
	if( s_iShotsFired>=0 )
	{
#if defined SMOOTH_SPREAD_TRANSITION
		g_fAccuracy = (((s_iShotsFired*s_iShotsFired)/220.0)+0.2+smooth_accuracy_transition((s_iShotsFired+1), 0.25, 5));
#else
		g_fAccuracy = ((s_iShotsFired*s_iShotsFired)/220.0)+0.45;
#endif
		
		if( g_fAccuracy>0.75 )
			g_fAccuracy = 0.75;
		
		set_pdata_float(iEnt, m_flAccuracy, g_fAccuracy, 4);
	}
	else
	{
		static s_iOwner, s_iFlags;
		s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
		s_iFlags = pev(s_iOwner, pev_flags);
		
		if( s_iFlags&FL_ONGROUND )
		{
			static Float:s_fVelocity[3];
			pev(s_iOwner, pev_velocity, s_fVelocity);
			
			if( !s_fVelocity[0] && !s_fVelocity[1] )
			{
				if( s_iFlags&FL_DUCKING )
					set_pdata_float(iEnt, m_flAccuracy, 0.0, 4);
				else
					set_pdata_float(iEnt, m_flAccuracy, 0.1, 4);
			}
			else
				set_pdata_float(iEnt, m_flAccuracy, 0.2, 4);
		}
		else
			set_pdata_float(iEnt, m_flAccuracy, 0.2, 4);
	}
}


public Ham_Attack_p228_Pre(iEnt)
{
	static Float:s_fLastFire;
	s_fLastFire = get_pdata_float(iEnt, m_flLastFire, 4);
	if( !s_fLastFire )
	{
		static s_iOwner, s_iFlags;
		s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
		s_iFlags = pev(s_iOwner, pev_flags);
		
		if( s_iFlags&FL_ONGROUND )
		{
			static Float:s_fVelocity[3];
			pev(s_iOwner, pev_velocity, s_fVelocity);
			
			if( !s_fVelocity[0] && !s_fVelocity[1] )
			{
				if( s_iFlags&FL_DUCKING )
					g_fAccuracy = 1.0;
				else
					g_fAccuracy = 0.95;
			}
			else
				g_fAccuracy = 0.90;
		}
		else
			g_fAccuracy = 0.90;
		set_pdata_float(iEnt, m_flAccuracy, g_fAccuracy, 4);
	}
	else if( get_pdata_int(iEnt, m_iShotsFired, 4)<=0 )
	{
		g_fAccuracy = get_pdata_float(iEnt, m_flAccuracy, 4);
		g_fAccuracy -= (0.325-(get_gametime()-s_fLastFire))*0.3;
		
		if( g_fAccuracy<0.6 )
			g_fAccuracy = 0.6;
		else if( g_fAccuracy>0.90 )
		{
			static s_iOwner, s_iFlags;
			s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
			s_iFlags = pev(s_iOwner, pev_flags);
			
			if( s_iFlags&FL_ONGROUND )
			{
				static Float:s_fVelocity[3];
				pev(s_iOwner, pev_velocity, s_fVelocity);
				
				if( !s_fVelocity[0] && !s_fVelocity[1] )
				{
					if( s_iFlags&FL_DUCKING )
					{
						if( g_fAccuracy>1.0 )
							g_fAccuracy = 1.0;
					}
					else if( g_fAccuracy>0.95 )
						g_fAccuracy = 0.95;
				}
				else
					g_fAccuracy = 0.90;
			}
			else
				g_fAccuracy = 0.90;
		}
		set_pdata_float(iEnt, m_flAccuracy , g_fAccuracy, 4);
	}
	else
		g_fAccuracy = -1.0;
}

public Ham_Attack_p228_Post(iEnt)
{
	if( g_fAccuracy>0.90 )
		set_pdata_float(iEnt, m_flAccuracy , 0.90, 4);
	else if( g_fAccuracy>0.0 )
		set_pdata_float(iEnt, m_flAccuracy , g_fAccuracy, 4);
}


public Ham_Attack_p90_Pre(iEnt)
{
	static s_iShotsFired;
	s_iShotsFired = get_pdata_int(iEnt, m_iShotsFired, 4)-1;
	if( s_iShotsFired>=0 )
	{
#if defined SMOOTH_SPREAD_TRANSITION
		g_fAccuracy = (((s_iShotsFired*s_iShotsFired)/175.0)+0.2+smooth_accuracy_transition((s_iShotsFired+1), 0.25, 6));
#else
		g_fAccuracy = ((s_iShotsFired*s_iShotsFired)/175.0)+0.45;
#endif
		
		if( g_fAccuracy>1.0 )
			g_fAccuracy = 1.0;
		
		set_pdata_float(iEnt, m_flAccuracy, g_fAccuracy, 4);
	}
	else
	{
		static s_iOwner, s_iFlags;
		s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
		s_iFlags = pev(s_iOwner, pev_flags);
		
		if( s_iFlags&FL_ONGROUND )
		{
			static Float:s_fVelocity[3];
			pev(s_iOwner, pev_velocity, s_fVelocity);
			
			if( !s_fVelocity[0] && !s_fVelocity[1] )
			{
				if( s_iFlags&FL_DUCKING )
					set_pdata_float(iEnt, m_flAccuracy, 0.0, 4);
				else
					set_pdata_float(iEnt, m_flAccuracy, 0.1, 4);
			}
			else
				set_pdata_float(iEnt, m_flAccuracy, 0.2, 4);
		}
		else
			set_pdata_float(iEnt, m_flAccuracy, 0.2, 4);
	}
}


public Ham_Attack_scout_Pre(iEnt)
{
	static s_iOwner, s_iFlags;
	s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
	s_iFlags = pev(s_iOwner, pev_flags);
	
	if( s_iFlags&FL_DUCKING || ~s_iFlags&FL_ONGROUND )
		g_fAccuracy = 0.0;
	else
	{
		static Float:s_fVelocity[3];
		pev(s_iOwner, pev_velocity, s_fVelocity);
		
		if( !s_fVelocity[0] && !s_fVelocity[1] )
		{
			set_pev(s_iOwner, pev_flags, (s_iFlags|FL_DUCKING));
			g_fAccuracy = 1.0;
		}
		else
			g_fAccuracy = 0.0;
	}
}

public Ham_Attack_scout_Post(iEnt)
{
	if( g_fAccuracy )
	{
		static s_iOwner;
		s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
		set_pev(s_iOwner, pev_flags, (pev(s_iOwner, pev_flags)&~FL_DUCKING));
	}
}


public Ham_Attack_sg550_Pre(iEnt)
{
	static Float:s_fLastFire;
	s_fLastFire = get_pdata_float(iEnt, m_flLastFire, 4);
	if( !s_fLastFire )
	{
		static s_iOwner, s_iFlags;
		s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
		s_iFlags = pev(s_iOwner, pev_flags);
		
		if( s_iFlags&FL_ONGROUND )
		{
			static Float:s_fVelocity[3];
			pev(s_iOwner, pev_velocity, s_fVelocity);
			
			if( !s_fVelocity[0] && !s_fVelocity[1] )
			{
				if( s_iFlags&FL_DUCKING )
					g_fAccuracy = 1.0;
				else
					g_fAccuracy = 0.99;
			}
			else
				g_fAccuracy = 0.98;
		}
		else
			g_fAccuracy = 0.98;
		set_pdata_float(iEnt, m_flAccuracy, g_fAccuracy, 4);
	}
	else
	{
		g_fAccuracy = (0.65+(get_gametime()-s_fLastFire))*0.725; //*0.35; (this is way too inaccurate comparing to g3sg1)
		
		if( g_fAccuracy>0.98 )
		{
			static s_iOwner, s_iFlags;
			s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
			s_iFlags = pev(s_iOwner, pev_flags);
			
			if( s_iFlags&FL_ONGROUND )
			{
				static Float:s_fVelocity[3];
				pev(s_iOwner, pev_velocity, s_fVelocity);
				
				if( !s_fVelocity[0] && !s_fVelocity[1] )
				{
					if( s_iFlags&FL_DUCKING )
					{
						if( g_fAccuracy>1.0 )
							g_fAccuracy = 1.0;
					}
					else if( g_fAccuracy>0.99 )
						g_fAccuracy = 0.99;
				}
				else
					g_fAccuracy = 0.98;
			}
			else
				g_fAccuracy = 0.98;
		}
		else if( g_fAccuracy<0.5 )
			g_fAccuracy = 0.5;
		
		set_pdata_float(iEnt, m_flAccuracy , g_fAccuracy, 4);
	}
}


public Ham_Attack_sg552_Pre(iEnt)
{
	static s_iShotsFired;
	s_iShotsFired = get_pdata_int(iEnt, m_iShotsFired, 4)-1;
	if( s_iShotsFired>=0 )
	{
#if defined SMOOTH_SPREAD_TRANSITION
		g_fAccuracy = (((s_iShotsFired*s_iShotsFired*s_iShotsFired)/220.0)+0.2+smooth_accuracy_transition((s_iShotsFired+1), 0.1, 3));
#else
		g_fAccuracy = ((s_iShotsFired*s_iShotsFired*s_iShotsFired)/220.0)+0.3;
#endif
		
		if( g_fAccuracy>1.0 )
			g_fAccuracy = 1.0;
		
		set_pdata_float(iEnt, m_flAccuracy, g_fAccuracy, 4);
	}
	else
	{
		static s_iOwner, s_iFlags;
		s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
		s_iFlags = pev(s_iOwner, pev_flags);
		
		if( s_iFlags&FL_ONGROUND )
		{
			static Float:s_fVelocity[3];
			pev(s_iOwner, pev_velocity, s_fVelocity);
			
			if( !s_fVelocity[0] && !s_fVelocity[1] )
			{
				if( s_iFlags&FL_DUCKING )
					set_pdata_float(iEnt, m_flAccuracy, 0.0, 4);
				else
					set_pdata_float(iEnt, m_flAccuracy, 0.1, 4);
			}
			else
				set_pdata_float(iEnt, m_flAccuracy, 0.2, 4);
		}
		else
			set_pdata_float(iEnt, m_flAccuracy, 0.2, 4);
	}
}


public Ham_Attack_tmp_Pre(iEnt)
{
	static s_iShotsFired;
	s_iShotsFired = get_pdata_int(iEnt, m_iShotsFired, 4)-1;
	if( s_iShotsFired>=0 )
	{
#if defined SMOOTH_SPREAD_TRANSITION
		g_fAccuracy = (((s_iShotsFired*s_iShotsFired*s_iShotsFired)/220.0)+0.2+smooth_accuracy_transition((s_iShotsFired+1), 0.35, 7));
#else
		g_fAccuracy = ((s_iShotsFired*s_iShotsFired*s_iShotsFired)/220.0)+0.55;
#endif
		
		if( g_fAccuracy>1.4 )
			g_fAccuracy = 1.4;
		
		set_pdata_float(iEnt, m_flAccuracy, g_fAccuracy, 4);
	}
	else
	{
		static s_iOwner, s_iFlags;
		s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
		s_iFlags = pev(s_iOwner, pev_flags);
		
		if( s_iFlags&FL_ONGROUND )
		{
			static Float:s_fVelocity[3];
			pev(s_iOwner, pev_velocity, s_fVelocity);
			
			if( !s_fVelocity[0] && !s_fVelocity[1] )
			{
				if( s_iFlags&FL_DUCKING )
					set_pdata_float(iEnt, m_flAccuracy, 0.0, 4);
				else
					set_pdata_float(iEnt, m_flAccuracy, 0.1, 4);
			}
			else
				set_pdata_float(iEnt, m_flAccuracy, 0.2, 4);
		}
		else
			set_pdata_float(iEnt, m_flAccuracy, 0.2, 4);
	}
}


public Ham_Attack_ump45_Pre(iEnt)
{
	static s_iShotsFired;
	s_iShotsFired = get_pdata_int(iEnt, m_iShotsFired, 4)-1;
	if( s_iShotsFired>=0 )
	{
#if defined SMOOTH_SPREAD_TRANSITION
		g_fAccuracy = (((s_iShotsFired*s_iShotsFired)/210.0)+0.2+smooth_accuracy_transition((s_iShotsFired+1), 0.3, 5));
#else
		g_fAccuracy = ((s_iShotsFired*s_iShotsFired)/210.0)+0.5;
#endif
		
		if( g_fAccuracy>1.0 )
			g_fAccuracy = 1.0;
		
		set_pdata_float(iEnt, m_flAccuracy, g_fAccuracy, 4);
	}
	else
	{
		static s_iOwner, s_iFlags;
		s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
		s_iFlags = pev(s_iOwner, pev_flags);
		
		if( s_iFlags&FL_ONGROUND )
		{
			static Float:s_fVelocity[3];
			pev(s_iOwner, pev_velocity, s_fVelocity);
			
			if( !s_fVelocity[0] && !s_fVelocity[1] )
			{
				if( s_iFlags&FL_DUCKING )
					set_pdata_float(iEnt, m_flAccuracy, 0.0, 4);
				else
					set_pdata_float(iEnt, m_flAccuracy, 0.1, 4);
			}
			else
				set_pdata_float(iEnt, m_flAccuracy, 0.2, 4);
		}
		else
			set_pdata_float(iEnt, m_flAccuracy, 0.2, 4);
	}
}


public Ham_Attack_usp_Pre(iEnt)
{
	static Float:s_fLastFire;
	s_fLastFire = get_pdata_float(iEnt, m_flLastFire, 4);
	if( !s_fLastFire )
	{
		static s_iOwner, s_iFlags;
		s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
		s_iFlags = pev(s_iOwner, pev_flags);
		
		if( s_iFlags&FL_ONGROUND )
		{
			static Float:s_fVelocity[3];
			pev(s_iOwner, pev_velocity, s_fVelocity);
			
			if( !s_fVelocity[0] && !s_fVelocity[1] )
			{
				if( s_iFlags&FL_DUCKING )
					g_fAccuracy = 1.0;
				else
					g_fAccuracy = 0.96;
			}
			else
				g_fAccuracy = 0.92;
		}
		else
			g_fAccuracy = 0.92;
		set_pdata_float(iEnt, m_flAccuracy, g_fAccuracy, 4);
	}
	else if( get_pdata_int(iEnt, m_iShotsFired, 4)<=0 )
	{
		g_fAccuracy = get_pdata_float(iEnt, m_flAccuracy, 4);
		g_fAccuracy -= (0.3-(get_gametime()-s_fLastFire))*0.275;
		
		if( g_fAccuracy<0.6 )
			g_fAccuracy = 0.6;
		else if( g_fAccuracy>0.92 )
		{
			static s_iOwner, s_iFlags;
			s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
			s_iFlags = pev(s_iOwner, pev_flags);
			
			if( s_iFlags&FL_ONGROUND )
			{
				static Float:s_fVelocity[3];
				pev(s_iOwner, pev_velocity, s_fVelocity);
				
				if( !s_fVelocity[0] && !s_fVelocity[1] )
				{
					if( s_iFlags&FL_DUCKING )
					{
						if( g_fAccuracy>1.0 )
							g_fAccuracy = 1.0;
					}
					else if( g_fAccuracy>0.96 )
						g_fAccuracy = 0.96;
				}
				else
					g_fAccuracy = 0.92;
			}
			else
				g_fAccuracy = 0.92;
		}
		set_pdata_float(iEnt, m_flAccuracy , g_fAccuracy, 4);
	}
	else
		g_fAccuracy = -1.0;
}

public Ham_Attack_usp_Post(iEnt)
{
	if( g_fAccuracy>0.92 )
		set_pdata_float(iEnt, m_flAccuracy , 0.92, 4);
	else if( g_fAccuracy>0.0 )
		set_pdata_float(iEnt, m_flAccuracy , g_fAccuracy, 4);
}

#if defined SMOOTH_SPREAD_TRANSITION
Float:smooth_accuracy_transition(iSteppingId, Float:fMaxInaccuracy, iSteppingsMax)
{
	if( iSteppingId>=iSteppingsMax )
		return fMaxInaccuracy;
	
	return ((float(iSteppingId)*fMaxInaccuracy)/float(iSteppingsMax));
}
#endif

Аватар
Huehue
Извън линия
Модератор
Модератор
Мнения: 352
Регистриран на: 16 Яну 2017, 23:42
Местоположение: София
Се отблагодари: 7 пъти
Получена благодарност: 171 пъти
Обратна връзка:

Accuracy Fix само за потребители с определен флаг

Мнение от Huehue » 28 Фев 2019, 23:19

Заповядай..
accuracy_fix_amxxbg_request.sma
(42.41 KiB) Свалено 163 пъти
accuracy_fix_amxxbg_request.sma
(42.41 KiB) Свалено 163 пъти
LOYAL TO THE OATH OF OMERTА̀

Зад монитора мъжкари, това не го разбирам..
На живо сте мишкари, това го гарантирам!
Седиш на 30 метра от мен като препариран!
Ако има нещо брат, номерът ми е блокиран..

My GitHub Profile
GitHub

My AMXX Includes Collection
AMXX Include Libraries

My Steam Profile (from SteamDB)
  • Value: 4179€
  • Games owned: 1855
  • Games played: 754 (40%)
  • Hours on record: 4,994.9h

Заключено
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Заявки за плъгини”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 23 госта