credits to f1ssi0n for some help on this, enjoy Code: #include "CAutoAirblast.h" #include "SDK.h" #include "CEntity.h" #include "Util.h" CAutoAirblast::CAutoAirblast() { autoAirblastSwitch = new F1_ConVar<Switch>( "Auto Airblast", false ); enabled = new F1_ConVar<bool>( " - Enabled" , false); aimMode = new F1_ConVar<bool>( " - Aim mode", false ); } const char *CAutoAirblast::name() const { return "AUTO-AIRBLAST"; } void CAutoAirblast::processCommand(CUserCmd *pUserCmd) { if(!enabled->getValue()) return; if(gLocalPlayerVars.activeWeapon == classId::CTFFlameThrower) { CTarget closeIndex = targs.getBestTarget(); if(closeIndex.ent == -1) return; if(aimMode->getValue() == true) { //pUserCmd->viewangles.z += 23421341234151324123543514534534534590.0f; aimer.aim(pUserCmd, closeIndex.target, true); } pUserCmd->buttons |= IN_ATTACK2; targs.removeTarget( closeIndex.ent ); } return; } bool CAutoAirblast::processEntity(int index) { if(!enabled) return false; CEntity<> ent{index}; if(ent.isNull()) { targs.removeTarget(index); return false; } if(ent->IsDormant()) { targs.removeTarget(index); return false; } // if the projectile is from our own team we dont want or need to reflect it if(ent.get<int>(gEntVars.iTeam) == gLocalPlayerVars.team) { targs.removeTarget(index); return false; } auto entTag = CEntTag(ent.castToPointer<CBaseEntity>()); Vector vel; if( entTag.isProjectile() ) { vel = EstimateAbsVelocity( ent.castToPointer<CBaseEntity>() ); //if( vel == Vector(0,0,0) ) //{ // targs.removeTarget( index ); // return false; //} } else { targs.removeTarget( index ); return false; } Vector origin; ent->GetWorldSpaceCenter(origin); Vector eyePos = gLocalPlayerVars.pred.origin + CEntity<>{me}.get<Vector>(gEntVars.vecViewOffset); float latency = gInts.Engine->GetNetChannelInfo()->GetLatency(FLOW_INCOMING) + gInts.Engine->GetNetChannelInfo()->GetLatency(FLOW_OUTGOING); Vector target = origin + (vel * latency); //gInts.DebugOverlay->AddEntityTextOverlay( index, 0, 1, 255, 255, 255, 255, "%f", ::getDistanceToVector( target ) ); float length = ( target - eyePos ).Length(); if( length <= ( 185.0f ) ) { //Log::Console( "Target at %f dist", length ); targs.addTarget( { index, (target - eyePos) } ); } else { } return true; } void CAutoAirblast::menuUpdate( F1_IConVar **menuArray, int &currIndex ) { menuArray[ currIndex++ ] = autoAirblastSwitch; if(autoAirblastSwitch->getValue() == true ) { menuArray[ currIndex++ ] = enabled; menuArray[ currIndex++ ] = aimMode; } } /* int CAutoAirblast::findBestTarget() { float bestDist = 8192.0f; int bestIndex = -1; for(auto &targ : targets) { if(targ.second < bestDist) { bestDist = targ.second; bestIndex = targ.first; } } return bestIndex; } */