////////////////////
//RUS=killer  HUD//
///////////////////

// sample animation script
//
//
// commands:
//	Animate <panel name> <variable> <target value> <interpolator> <start time> <duration>
//		variables:
//			FgColor
//			BgColor
//			Position
//			Size
//			Blur		(hud panels only)
//			TextColor	(hud panels only)
//			Ammo2Color	(hud panels only)
//			Alpha		(hud weapon selection only)
//			SelectionAlpha  (hud weapon selection only)
//			TextScan	(hud weapon selection only)
//
//		interpolator:
//			Linear
//			Accel - starts moving slow, ends fast
//			Deaccel - starts moving fast, ends slow
//			Spline - simple ease in/out curve
//			Pulse - < freq > over the duration, the value is pulsed (cosine) freq times ending at the dest value (assuming freq is integral)
//			Flicker - < randomness factor 0.0 to 1.0 > over duration, each frame if random # is less than factor, use end value, otherwise use prev value
//
//	RunEvent <event name> <start time>
//		starts another even running at the specified time
//
//	StopEvent <event name> <start time>
//		stops another event that is current running at the specified time
//
//	StopAnimation <panel name> <variable> <start time>
//		stops all animations refering to the specified variable in the specified panel
//
//	StopPanelAnimations <panel name> <start time>
//		stops all active animations operating on the specified panel
//
//  SetFont <panel name> <fontparameter> <fontname from scheme> <set time> 
//
//	SetTexture <panel name> <textureidname> <texturefilename> <set time>
//
//  SetString <panel name> <string varname> <stringvalue> <set time>

event LevelInit
{
}

event OpenWeaponSelectionMenu
{
	StopEvent CloseWeaponSelectionMenu	0.0
	StopEvent WeaponPickup				0.0

	// make the display visible
	Animate HudWeaponSelection Alpha 		"128"		Linear 0.0 0.1
	Animate HudWeaponSelection SelectionAlpha 	"255"	Linear 0.0 0.1
	Animate HudWeaponSelection FgColor		"FgColor"	Linear 0.0 0.1
	//Animate HudWeaponSelection TextColor	"BrightFg"	Linear 0.0 0.1
	Animate HudWeaponSelection TextScan		"1" 		Linear 0.0 0.1
}

event CloseWeaponSelectionMenu
{
	StopEvent CloseWeaponSelectionMenu	0.0
	StopEvent WeaponPickup				0.0

	// make the display visible
	Animate HudWeaponSelection Alpha 		"128"		Linear 0.0 0.1
	Animate HudWeaponSelection SelectionAlpha 	"255"	Linear 0.0 0.1
	Animate HudWeaponSelection FgColor		"FgColor"	Linear 0.0 0.1
	//Animate HudWeaponSelection TextColor	"BrightFg"	Linear 0.0 0.1
	Animate HudWeaponSelection TextScan		"1" 		Linear 0.0 0.1
}


event MenuOpen
{
	StopEvent	MenuClose 0.0 

	// fade in
	Animate HudMenu Alpha 		"255"		Linear 0.0 0.1
	Animate HudMenu SelectionAlpha 	"255"		Linear 0.0 0.1
	Animate HudMenu FgColor		"FgColor"		Linear 0.0 0.1
	Animate HudMenu MenuColor		"MenuColor"	Linear  0.0 0.1
	Animate HudMenu ItemColor		"ItemColor"	Linear 0.0 0.1
	Animate HudMenu TextScan		"1"		Linear 0.0 0.1

	// Undo any blur
	Animate HudMenu		Blur		"1"			Linear	0.0		0.01
}

event MenuClose
{	
	// Hide it
	Animate HudMenu Alpha 		"0" Linear 0.0 1
	Animate HudMenu SelectionAlpha 	"0" Linear 0.0 1
	Animate HudMenu FgColor		"0 0 0 0" Linear 0.0 1
	Animate HudMenu MenuColor		"0 0 0 0" Linear 0.0 1
	Animate HudMenu ItemColor		"0 0 0 0" Linear 0.0 1
}

event MenuPulse
{
	Animate HudMenu		Blur		"7"			Linear	0.0		0.1
	Animate HudMenu		Blur		"2"			Deaccel	0.1		0.1
	Animate HudMenu		Blur		"7"			Linear	0.2		0.1
	Animate HudMenu		Blur		"2"			Deaccel	0.3		0.1
	Animate HudMenu		Blur		"7"			Linear	0.4		0.1
	Animate HudMenu		Blur		"2"			Deaccel	0.5		0.1
	Animate	HudMenu		Blur		"1"			Deaccel	0.6		0.4
}

event TimerIncrement
{
	Animate HudTimer		Blur		"7"			Linear	0.0	0.1
	Animate HudTimer		Blur		"2"			Deaccel	0.1		0.8
	Animate	HudTimer		Blur		"0"			Deaccel	1.1		1.5
}

event TimerDecrement
{
	Animate HudTimer		Blur		"7"			Linear	0.0	0.1
	Animate HudTimer		Blur		"2"			Deaccel	0.1		0.8
	Animate	HudTimer		Blur		"0"			Deaccel	1.1		1.5
}


event ResourceIncrement
{
	Animate HudResources		Blur			"3"			Linear	0.0	0.0
	Animate HudResources		PulseAmount		"0"			Linear	0.0	0.01
	Animate HudResources		Blur			"1"			Deaccel	0.1	1.5
	Animate HudResources		PulseAmount		"1"			Linear	0.1	2

	Animate HudResources		PulseAmount		"0"			Linear	2	2
}

event ResourceDecrement
{
	Animate HudResources		Blur			"7"			Linear	0.0	0.0
	Animate HudResources		PulseAmount		"0"			Linear	0.0	0.01
	Animate HudResources		Blur			"1"			Deaccel	0.1	1.5
	Animate HudResources		PulseAmount		"1"			Linear	0.1	2

	Animate HudResources		PulseAmount		"0"			Linear	2	2
}

event ResourcePickup
{
	Animate HudResourcesPickup	Alpha			"255"			Linear	0	0
	Animate HudResourcesPickup	Position		"80 r40"		Linear	0	0
	Animate HudResourcesPickup	Position		"80 r120"		Deaccel	0	1
	Animate HudResourcesPickup	Blur			"7"			Deaccel 0	0.2
	Animate HudResourcesPickup	Alpha			"0"			Deaccel	.8	0.2
	Animate	HudResourcesPickup	Blur		"1"			Deaccel	0.2	0.3
}

event PrimaryAmmoIncrement
{
}

event PrimaryAmmoDecrement
{
	Animate HudAmmoPrimary  FgColor "HudIcon_Red" Linear 0.0 0.0001
	Animate HudAmmoPrimary  FgColor "FgColor"   Accel 0.0 3.0
}

event PrimaryAmmoEmpty
{
}


event SecondaryAmmoIncrement
{
}

event SecondaryAmmoDecrement
{
	Animate HudAmmoPrimary  FgColor "HudIcon_Red" Linear 0.0 0.0001
	Animate HudAmmoPrimary  FgColor "FgColor"   Accel 0.0 3.0
}

event SecondaryAmmoEmpty
{
}

event ShowPrimaryAmmoClipShowSecondaryAmmo
{
	// Turn on secondary
	Animate HudAmmoSecondary		Alpha		"255"	Linear	0.0		0.4
	// Turn on secondary
	Animate HudAmmoPrimaryClip		Alpha		"255"	Linear	0.0		0.4

	// Move primary to left
//	Animate HudAmmoPrimary			Position	"r125 400"	Deaccel	0.0		0.4
//	Animate HudAmmoPrimaryClip		Position	"r55 400"	Deaccel	0.0		0.4

}

event ShowPrimaryAmmoClipHideSecondaryAmmo
{
	// Turn off secondary
	Animate HudAmmoSecondary		Alpha		"0"	Linear	0.0		0.4
	// Turn on secondary
	Animate HudAmmoPrimaryClip		Alpha		"255"	Linear	0.0		0.4

	// Move primary to left
//	Animate HudAmmoPrimary			Position	"r100 400"	Deaccel	0.0		0.4
//	Animate HudAmmoPrimaryClip		Position	"r30 400"	Deaccel	0.0		0.4
}

event HidePrimaryAmmoClipShowSecondaryAmmo
{
	// Turn on secondary
	Animate HudAmmoSecondary		Alpha		"255"	Linear	0.0		0.4
	// Turn off secondary
	Animate HudAmmoPrimaryClip		Alpha		"0"	Linear	0.0		0.4

	// Move primary to left
//	Animate HudAmmoPrimary			Position	"100 400"	Deaccel	0.0		0.4
//	Animate HudAmmoPrimaryClip		Position	"r30 400"	Deaccel	0.0		0.4
}

event HidePrimaryAmmoClipHideSecondaryAmmo
{
	// Turn off secondary
	Animate HudAmmoSecondary		Alpha		"0"	Linear	0.0		0.4
	// Turn off secondary
	Animate HudAmmoPrimaryClip		Alpha		"0"	Linear	0.0		0.4

	// Move primary to left
//	Animate HudAmmoPrimary			Position	"r70 400"	Deaccel	0.0		0.4
//	Animate HudAmmoPrimaryClip		Position	"r30 400"	Deaccel	0.0		0.4
}

//activecolor - instantly turn red, fade back to yellow
event AccountMoneyRemoved
{
	Animate HudAccount		FgColor	"HudMoneyMinus" Linear 0.0 0.0001
	Animate HudAccount		FgColor	"HudColor" Accel 0.0 3.0

	Animate	HudAccount		Ammo2Color "HudMoneyMinus" Linear 0.0 0.0001
	Animate HudAccount		Ammo2Color "0 0 0 0" Accel 0.0 3.0
}

//activecolor - instantly turn green, fade back to yellow
event AccountMoneyAdded
{
	Animate HudAccount		FgColor	"HudMoneyPlus" Linear 0.0 0.0001
	Animate HudAccount		FgColor	"HudColor" Accel 0.0 3.0

	Animate HudAccount		Ammo2Color "HudMoneyPlus" Accel 0.0 0.0001
	Animate HudAccount		Ammo2Color "0 0 0 0" Accel 0.0 3.0
}

event AccountMoneyInvisible
{
	Animate HudAccount		FgColor	"HudColor" Accel 0.0 0.0001
	Animate HudAccount		Ammo2Color "0 0 0 0" Accel 0.0 0.0001
}

event HealthLow
{
	Animate HudHealth		FgColor	"Orange"	Linear 0.0 0.01
	Animate HudHealth		FgColor	"HudMinHealthColor"	Pulse 1080 0 540
}

event HealthTookDamage
{
	Animate HudHealth		FgColor	"HudHealthFlash"	Linear 0.0 0.01
	Animate HudHealth		FgColor	"HudHealthNormal"	Pulse 	8 0.0 1.0
}

event HealthRestored
{
	Animate HudHealth		FgColor	"HudMaxHealthColor"	Linear 0.0 0.01
}

event HintMessageShow
{
	// show the hints
	Animate HudHintDisplay Alpha	255 Linear 0.0 0.5
	Animate HudHintDisplay FgColor	"HintMessageFg"		Linear 0.0 0.01

	// hide the panel after a while	
	Animate HudHintDisplay Alpha	0 Linear 6.0 1.0
}

event HintMessageHide
{
	Animate HudHintDisplay Alpha	0 Linear 0.0 0.5
}cAimbot gAimbot;

cAimbot::cAimbot( )
{
	iTarget = -1;
}

void cAimbot::MakeVector( QAngle angle, QAngle& vector ) 
{ 
	float pitch; 
	float yaw; 
	float tmp;           

	pitch	= (float)(angle[0] * M_PI/180); 
	yaw		= (float)(angle[1] * M_PI/180); 
	tmp		= (float) cos(pitch);

	vector[0] = (float) (-tmp * -cos(yaw)); 
	vector[1] = (float) (sin(yaw)*tmp);
	vector[2] = (float) -sin(pitch);
}

void cAimbot::CalcAngle( Vector &src, Vector &dst, QAngle &angles )
{
	double delta[3] = { (src[0]-dst[0]), (src[1]-dst[1]), (src[2]-dst[2]) };
	double hyp = sqrt(delta[0]*delta[0] + delta[1]*delta[1]);

	angles[0] = (float) (atan(delta[2]/hyp) * 57.295779513082);
	angles[1] = (float) (atan(delta[1]/delta[0]) * 57.295779513082);
	angles[2] = 0.0f;

	if(delta[0] >= 0.0) { angles[1] += 180.0f; }
}

float cAimbot::GetFov( QAngle angle, Vector src, Vector dst ) 
{ 
	float fov = 0.0f; 
	QAngle ang,aim; 

	CalcAngle(src, dst, ang); 
	MakeVector(angle, aim); 
	MakeVector(ang, ang);      

	float mag_s = sqrt((aim[0]*aim[0]) + (aim[1]*aim[1]) + (aim[2]*aim[2])); 
	float mag_d = sqrt((aim[0]*aim[0]) + (aim[1]*aim[1]) + (aim[2]*aim[2])); 

	float u_dot_v = aim[0]*ang[0] + aim[1]*ang[1] + aim[2]*ang[2]; 

	fov = acos(u_dot_v / (mag_s*mag_d)) * (180.0 / M_PI); 

	return fov; 
}

void cAimbot::PredictTarget( Vector &vOrigin, Vector &vPredicted )
{
	if( gCvar.pred )
	{
		static Vector vOldOrigin( 0, 0, 0 );
		static Vector vOldestOrigin( 0, 0, 0 );
		
		// This is the change in origin
		Vector vDeltaOrigin( 0, 0, 0 );

		// Calculate the delta origin
		vDeltaOrigin = vOrigin - vOldestOrigin;
		vOldestOrigin = vOldOrigin;
		vOldOrigin = vOrigin;

		float fLatency = gEngineFuncs.GetNetChannelInfo( )->GetLatency( FLOW_OUTGOING );

		// Compensate the latency
		vDeltaOrigin[0] *= fLatency;
		vDeltaOrigin[1] *= fLatency;
		vDeltaOrigin[2] *= fLatency;

		// Apply the prediction
		vPredicted = vOrigin + vDeltaOrigin;
	}
	else
		VectorCopy( vOrigin, vPredicted );
}

void cAimbot::DoAim( )
{
	IClientEntity* pLocalEnt = g_pEntList->GetClientEntity( gEngineFuncs.GetLocalPlayer( ) );

	if( pLocalEnt == NULL )
		return;

	for( int pIndex = 0; pIndex < gEngineFuncs.GetMaxClients() + 1; pIndex++ )
	{
		if( pIndex == gEngineFuncs.GetLocalPlayer( ) )
			continue;

		IClientEntity* pClientEnt = g_pEntList->GetClientEntity( pIndex );

		if( pClientEnt == NULL )
			continue;

		C_BaseEntity* pBaseEnt = pClientEnt->GetBaseEntity( );

		if( pBaseEnt == NULL )
			continue;

		C_BaseCombatCharacter* pBaseCombat = ToBaseCombatCharacter( pBaseEnt );

		if ( pBaseCombat == NULL )
			continue;

		C_BaseAnimating* pBaseAni = pBaseCombat->GetBaseAnimating( );

		if ( pBaseAni == NULL )
			continue;

		matrix3x4_t pBoneToWorld;

		Vector vOrigin, vForward, vRight, vUp, vMin, vMax;
		if( pBaseEnt->IsPlayer( ) && !pBaseEnt->IsDormant( ) && pBaseEnt->IsAlive( ) && pBaseEnt->IsSolid( ) )
		{
			switch( gCvar.aim_mode )
			{
			case 1:
				pBaseCombat->GetBonePosition( gCvar.aim_bone, vAim, QAngle(0,0,0) );
				vAim.x += vBoneVec.x;
				vAim.y += vBoneVec.y;
				vAim.z += vBoneVec.z;
				break;
			case 2:
				{
					mstudiobbox_t *pBox = pBaseAni->GetModelPtr( )->pHitboxSet( pBaseAni->m_nHitboxSet )->pHitbox( gCvar.aim_hitbox );

					if ( pBox == NULL )
						continue;

					pBaseCombat->GetBoneTransform( pBox->bone, pBoneToWorld );
					VectorTransform( pBox->bbmin, pBoneToWorld, vMin );
					VectorTransform( pBox->bbmax, pBoneToWorld, vMax );
					vAim = ( vMin + vMax ) * 0.5f;

					vAim.x += vHitboxVec.x;
					vAim.y += vHitboxVec.y;
					vAim.z += vHitboxVec.z;

					if( gCvar.aim_drawhitbox )
					{
						Vector vBoxPos;
						QAngle qBoxAngle;
						Color_t* TeamColor = gColorManager.GetTeamColor( pIndex );
						pBaseCombat->GetBonePosition( pBox->bone, vBoxPos, qBoxAngle );
						g_pDebugoverlay->AddBoxOverlay( vBoxPos, pBox->bbmin, pBox->bbmax, qBoxAngle, TeamColor->R, TeamColor->G, TeamColor->B, 100, g_pGlobals->frametime + 0.01 );
					}
				}
				break;
			default:
				AngleVectors( pBaseEnt->EyeAngles(), &vForward, &vRight, &vUp );
				vForward.z = -vForward.z;

				if( pBaseEnt->GetFlags( ) & FL_DUCKING )
					vAim = pBaseEnt->WorldSpaceCenter() + ( ( vForward * vDuckVec.x ) + ( vUp * vDuckVec.z ) + ( vRight * vDuckVec.y ) );
				else 
					vAim = pBaseEnt->WorldSpaceCenter() + ( ( vForward * vStandVec.x ) + ( vUp * vStandVec.z ) + ( vRight * vStandVec.y ) );
				break;
			}
			
			Vector vPred;
			PredictTarget( vAim, vPred );

			Vector vDrawSpot;
			if( gEsp.bWorldToScreen( vPred, vDrawSpot ) && gCvar.aim_spot )
			{
				gDraw.FillArea( vDrawSpot.x, vDrawSpot.y, 4, 4, 255, 255, 255, 255 );
				gDraw.OutlineArea( vDrawSpot.x, vDrawSpot.y, 4, 4, 0, 0, 0, 255 );
				if( gCvar.aim_triggerbot )
				{
					gDraw.FillArea( vDrawSpot.x - gCvar.aim_triggerbot / 2, vDrawSpot.y - gCvar.aim_triggerbot / 2, gCvar.aim_triggerbot, gCvar.aim_triggerbot, 255, 255, 255, 170 );
					gDraw.OutlineArea( vDrawSpot.x - gCvar.aim_triggerbot / 2, vDrawSpot.y - gCvar.aim_triggerbot / 2, gCvar.aim_triggerbot, gCvar.aim_triggerbot, 0, 0, 0, 255 );
				}
			}

			VectorAngles( vPred - pLocalEnt->GetBaseEntity( )->EyePosition( ), qAim );

			if( !( ( gCvar.aim_team == 1 && pBaseEnt->GetTeamNumber( ) != pLocalEnt->GetBaseEntity( )->GetTeamNumber( ) ) ||
				( gCvar.aim_team == 2 && pBaseEnt->GetTeamNumber( ) == pLocalEnt->GetBaseEntity( )->GetTeamNumber( ) ) ||
				( !gCvar.aim_team ) ) )
				continue;

			if( !bIsVisible( vPred, pLocalEnt->GetBaseEntity( )->EyePosition(), MASK_NPCWORLDSTATIC, pLocalEnt->GetBaseEntity( ) ) )
				continue;

			if( gCvar.aim_triggerbot && pLocalEnt->GetBaseEntity( )->IsAlive( ) )
			{
				Vector vTriBot;
				if( gEsp.bWorldToScreen( vPred, vTriBot ) )
				{
					if( ( vTriBot.x < ( sScreenSize.m_iWidth / 2 ) + gCvar.aim_triggerbot / 2 && vTriBot.x > ( sScreenSize.m_iWidth / 2 ) - gCvar.aim_triggerbot / 2 ) && ( vTriBot.y < ( sScreenSize.m_iHeight / 2 ) + gCvar.aim_triggerbot / 2 && vTriBot.y > ( sScreenSize.m_iHeight / 2 ) - gCvar.aim_triggerbot / 2 ) )
						bAttack = true;
					else
						bAttack = false;
				}
				else
					bAttack = false;
			}

			if ( GetFov( pLocalEnt->GetBaseEntity( )->LocalEyeAngles( ), pLocalEnt->GetBaseEntity( )->EyePosition( ), vPred ) > gCvar.aim_fov )
				continue;

			if( pLocalEnt->GetBaseEntity( )->IsAlive( ) )
			{
				if( gCvar.aim && !bHasMiscWeapon( ) && bHasAmmo( ) )
				{
					if( !gCvar.aim_triggerbot )
						gEngineFuncs.SetViewAngles( qAim );
				}
				iTarget = pIndex;	// settting target :)
				return; // exit function once aimED - my ghetto ways ;P
			}
			else
				iTarget = -1;
		}
	}
	iTarget = -1;
	bAttack = false;
}

void cAimbot::SetVec( char* szSeq, float h, float f, float r )
{
	strlwr( szSeq );
	if( !strcmp( szSeq, "duck" ) )
	{
		vDuckVec.x = f;
		vDuckVec.z = h;
		vDuckVec.y = r;
	}
	else if( !strcmp( szSeq, "stand" ) )
	{
		vStandVec.x = f;
		vStandVec.z = h;
		vStandVec.y = r;
	}
	else if( !strcmp( szSeq, "bone" ) )
	{
		vBoneVec.x = f;
		vBoneVec.z = h;
		vBoneVec.y = r;
	}
	else if( !strcmp( szSeq, "hitbox" ) )
	{
		vHitboxVec.x = f;
		vHitboxVec.z = h;
		vHitboxVec.y = r;
	}
}

void cAimbot::SaveVec( char* szFileName )
{
	ofstream ofs( szFileName, ios::binary | ios::app); 
	ofs << "// Si Hook Reborn\n";
	ofs << "/addvec stand " << vStandVec.z << ' ' << vStandVec.x << ' ' << vStandVec.y << "\n";
	ofs << "/addvec duck " << vDuckVec.z << ' ' << vDuckVec.x << ' ' << vDuckVec.y << "\n";
	ofs << "/addvec bone " << vBoneVec.z << ' ' << vBoneVec.x << ' ' << vBoneVec.y << "\n";
	ofs << "/addvec hitbox " << vHitboxVec.z << ' ' << vHitboxVec.x << ' ' << vHitboxVec.y << "\n\n";
	ofs.close();
}

bool cAimbot::bHasAmmo( )
{
	C_BaseEntity* pLocalEnt = g_pEntList->GetClientEntity( gEngineFuncs.GetLocalPlayer( ) )->GetBaseEntity( );

	if( pLocalEnt == NULL )
		return false;

	C_BaseCombatCharacter* pBaseCombat = ToBaseCombatCharacter( pLocalEnt );

	if( pBaseCombat == NULL )
		return false;

	C_BaseCombatWeapon* pWeapon = pBaseCombat->GetWeapon( -1 );

	if( pWeapon == NULL )
		return false;

	if( pWeapon->Clip1( ) == 0 || pWeapon->Clip2( ) == 0 )
		return false;

	return true;
}

bool cAimbot::bHasMiscWeapon( )
{
	C_BaseEntity* pLocalEnt = g_pEntList->GetClientEntity( gEngineFuncs.GetLocalPlayer( ) )->GetBaseEntity( );

	if( pLocalEnt == NULL )
		return false;

	C_BaseCombatCharacter* pBaseCombat = ToBaseCombatCharacter( pLocalEnt );

	if( pBaseCombat == NULL )
		return false;

	C_BaseCombatWeapon* pWeapon = pBaseCombat->GetWeapon( -1 );

	if( pWeapon == NULL )
		return false;

	string strWeaponName = strlwr( (char*)pWeapon->GetPrintName( ) );

	if( strWeaponName.empty( ) )
		return false;

	if( strstr( strWeaponName.c_str( ), "knife" ) && !gCvar.aim_knife )
		return true;
	else if( strstr( strWeaponName.c_str( ), "c4" ) )
		return true;
	else if( strstr( strWeaponName.c_str( ), "flashbang" ) )
		return true;
	else if( strstr( strWeaponName.c_str( ), "hegrenade" ) )
		return true;
	else if( strstr( strWeaponName.c_str( ), "smokegrenade" ) )
		return true;

	return false;
}

bool cAimbot::bCurWeaponPistol( )
{
	C_BaseEntity* pLocalEnt = g_pEntList->GetClientEntity( gEngineFuncs.GetLocalPlayer( ) )->GetBaseEntity( );

	if( pLocalEnt == NULL )
		return false;

	C_BaseCombatCharacter* pBaseCombat = ToBaseCombatCharacter( pLocalEnt );

	if( pBaseCombat == NULL )
		return false;

	C_BaseCombatWeapon* pWeapon = pBaseCombat->GetWeapon( -1 );

	if( pWeapon == NULL )
		return false;

	string strWeaponName = strlwr( (char*)pWeapon->GetPrintName( ) );

	if( strWeaponName.empty( ) )
		return false;

	if( !strcmp( strWeaponName.c_str( ), "weapon_deagle" ) )
		return true;
	else if( !strcmp( strWeaponName.c_str( ), "weapon_elite" ) )
		return true;
	else if( !strcmp( strWeaponName.c_str( ), "weapon_fiveseven" ) )
		return true;
	else if( !strcmp( strWeaponName.c_str( ), "weapon_glock" ) )
		return true;
	else if( !strcmp( strWeaponName.c_str( ), "weapon_usp" ) )
		return true;
	else if( !strcmp( strWeaponName.c_str( ), "weapon_p228" ) )
		return true;

	return false;
}private:
	void MakeVector( QAngle angle, QAngle& vector );
	void CalcAngle( Vector &src, Vector &dst, QAngle &angles );
	void PredictTarget( Vector &vOrigin, Vector &vPredicted );
	float GetFov( QAngle angle, Vector src, Vector dst );
	Vector vDuckVec;
	Vector vStandVec;
	Vector vBoneVec;
	Vector vHitboxVec;
	Vector vAim;
	QAngle qAim;

};

extern cAimbot gAimbot;

#endif

