#include "CAimbot.h" #include "sdk.h" //===================================================================== bool isPistol(const char *szWeaponName){ if ( strstr( szWeaponName, "_knife_t.mdl" ) )return true; else if ( strstr( szWeaponName, "_knife_ct.mdl" ) )return true; else if ( strstr( szWeaponName, "_pist_deagle.mdl" ) )return true; else if ( strstr( szWeaponName, "_pist_elite.mdl" ) )return true; else if ( strstr( szWeaponName, "_pist_fiveseven.mdl" ) )return true; else if ( strstr( szWeaponName, "_pist_glock18.mdl" ) )return true; else if ( strstr( szWeaponName, "_pist_p228.mdl" ) )return true; else if ( strstr( szWeaponName, "_pist_usp.mdl" ) )return true; else return false; } //===================================================================== void cCAimbot::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 cCAimbot::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) * M_RADPI); angles[1] = (float) (atan(delta[1]/delta[0]) * M_RADPI); angles[2] = 0.0f; if(delta[0] >= 0.0) { angles[1] += 180.0f; } } //===================================================================== float cCAimbot::GetFov( QAngle angle, Vector src, Vector dst ) { QAngle ang,aim; float fov; 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; } //===================================================================== /*bool cCAimbot::GetVisible( Vector& vecAbsStart, Vector& vecAbsEnd, C_BaseEntity* pBaseEnt ) { player_info_t pinfo; trace_t tr; Ray_t ray; ray.Init( vecAbsStart, vecAbsEnd ); m_pEnginetrace->TraceRay( ray, MASK_NPCWORLDSTATIC|CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTER|CONTENTS_WINDOW|CONTENTS_DEBRIS|CONTENTS_HITBOX, NULL, &tr ); if ( tr.fraction > 0.97f )return true; if ( tr.m_pEnt && pBaseEnt ){ if ( tr.m_pEnt->index == 0 || tr.allsolid )return false; if (( m_pEngine->GetPlayerInfo( tr.m_pEnt->index, &pinfo )|| pBaseEnt->index == tr.m_pEnt->index) && tr.fraction > 0.92)return true; } return false; }*/ //===================================================================== bool cCAimbot::GetVisible( Vector& vAbsStart, Vector& vAbsEnd, C_BaseEntity* pBaseEnt ) { player_info_t pInfo; trace_t pTrace; Ray_t pRay; pRay.Init( vAbsStart, vAbsEnd ); m_pEnginetrace->TraceRay( pRay, MASK_NPCWORLDSTATIC|CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTER|CONTENTS_WINDOW|CONTENTS_DEBRIS|CONTENTS_HITBOX, NULL, &pTrace ); //surfacedata_t *m_pSurfaceData = m_pPhysicAPI->GetSurfaceData(pTrace.surface.surfaceProps); if ( pTrace.fraction > 0.97f ) return true; if ( pTrace.m_pEnt && pBaseEnt ){ if ( pTrace.m_pEnt->index == 0 || pTrace.allsolid ) return false; if (( m_pEngine->GetPlayerInfo( pTrace.m_pEnt->index, &pInfo ) || pBaseEnt->index == pTrace.m_pEnt->index) && pTrace.fraction > 0.92) return true; //the 85 is the % player has to be visible } return false; } //===================================================================== bool GetBonePosition ( int iBone, Vector& vecOrigin, QAngle qAngles, int index ) { if( iBone < 0 || iBone >= 20 )return false; matrix3x4_t pmatrix[MAXSTUDIOBONES]; IClientEntity* ClientEntity = m_pEntList->GetClientEntity( index ); if ( ClientEntity == NULL )return false; if ( ClientEntity->IsDormant() )return false; IClientRenderable* RenderEntity = ClientEntity->GetClientRenderable(); if( RenderEntity == NULL/* nothing */ )return false; if( RenderEntity->SetupBones( pmatrix, 128, BONE_USED_BY_HITBOX, m_pGlobals->curtime ) == false )return false; MatrixAngles( pmatrix[ iBone ], qAngles, vecOrigin ); return true; } //===================================================================== //===================================================================== //===================================================================== void cCAimbot::AimAtTarget( CUserCmd* c ) { if( m_pEngine->IsInGame() == false || m_pEngine->IsHLTV() == true || m_pMyPlayer->BaseEnt() == NULL ) return; m_nTarget = -1; player_info_t pinfo; for( int index = 1; index <= m_pEntList->NumberOfEntities( false ); ++index ) { if ( index == m_pEngine->GetLocalPlayer() ) continue; IClientEntity* ClientEntity = m_pEntList->GetClientEntity( index ); if ( ClientEntity == NULL || ClientEntity->IsDormant() ) continue; CBaseEntity* pBaseEntity = ClientEntity->GetBaseEntity(); int iLifestate = *(int*) ( ( DWORD )pBaseEntity + ( DWORD )0x87 ); if( pBaseEntity == NULL || pBaseEntity->IsDormant() || !(iLifestate == LIFE_ALIVE) || m_pEngine->GetPlayerInfo( index, &pinfo ) == false || pBaseEntity->GetTeamNumber() == m_pMyPlayer->BaseEnt()->GetTeamNumber() || !GetBonePosition( 14, vPlayer, c->viewangles, index ) || GetFov( m_pMyPlayer->BaseEnt()->GetAbsAngles(), m_pMyPlayer->BaseEnt()->EyePosition(), vPlayer )>gCvar.aim_fov || !GetVisible( m_pMyPlayer->BaseEnt()->EyePosition(), vPlayer, pBaseEntity )) continue; m_nTarget = index; } if( m_nTarget == -1 ) return; CalcAngle( m_pMyPlayer->BaseEnt()->EyePosition(), vPlayer, c->viewangles ); m_pEngine->SetViewAngles( c->viewangles ); char szWeapon[255]; C_BaseCombatWeapon *cWeapon = m_pNeeded->GetBaseCombatActiveWeapon(m_pMyPlayer->BaseEnt()); strcat(szWeapon,m_pModelinfo->GetModelName(cWeapon->GetModel())); c->buttons |= IN_ATTACK; if ( c->buttons & IN_ATTACK && isPistol(szWeapon)){ static bool o = false; if(o) c->buttons |= IN_ATTACK; else c->buttons &= (~IN_ATTACK); o = !o; } } //=====================================================================