float GetSpread ( C_BaseCombatWeapon* pBaseWeapon ) { if (!pBaseWeapon) return 0.0f; float m_flAccuracy = *MakePointer(pBaseWeapon, 0x760); const char* weaponName = pBaseWeapon->GetName(); weaponID ID = GetWeaponID(weaponName); C_BaseEntity* pLocalPlayer = g_pInterfaces->m_pClientEntList->GetClientEntity(g_pInterfaces->m_pEngineClient->GetLocalPlayer())->GetBaseEntity(); int m_bWeaponBit = 0; float flSpread = 0.0f; if (!pLocalPlayer) return 0.0f; int iFlags = pLocalPlayer->m_fFlags; int iSpeed = 0; float fFOV = Entity::GetFOV((C_BasePlayer*)pLocalPlayer); Vector vecVelocity = pLocalPlayer->m_vecVelocity; if (!vecVelocity.IsLengthLessThan(1.0f)) iSpeed = vecVelocity.Length2D(); switch (ID) { case WEAPON_AK47: { if(!(iFlags &FL_ONGROUND)) flSpread = (0.04 + (0.4) * (m_flAccuracy)); else if(iSpeed > 140) flSpread = (0.04 + (0.07) * (m_flAccuracy)); else flSpread = ((0.0275) * (m_flAccuracy)); break; } case WEAPON_AUG: { if(!(iFlags &FL_ONGROUND)) flSpread = (0.035 + (0.4) * (m_flAccuracy)); else if (iSpeed > 140) flSpread = (0.035 + (0.07) * (m_flAccuracy)); else flSpread = ((0.02) * (m_flAccuracy)); break; } case WEAPON_AWP: { if(!(iFlags &FL_ONGROUND)) flSpread = 0.85; else if (iSpeed > 140) flSpread = 0.25; else if (iSpeed > 10) flSpread = 0.1; else if (iFlags &FL_DUCKING) flSpread = 0.0; else flSpread = 0.001; if(fFOV == 90) flSpread += 0.08; break; } case WEAPON_DEAGLE: { if(!(iFlags &FL_ONGROUND)) flSpread = ((1.5) * (1 - m_flAccuracy)); else if(iSpeed > 5) flSpread = ((0.25) * (1 - m_flAccuracy)); else if((iFlags &FL_DUCKING)) flSpread = ((0.115) * (1 - m_flAccuracy)); else flSpread = ((0.13) * (1 - m_flAccuracy)); break; } case WEAPON_ELITES: { if(!(iFlags &FL_ONGROUND)) flSpread = ((1.3) * (1 - m_flAccuracy)); else if(iSpeed > 5) flSpread = ((0.175) * (1 - m_flAccuracy)); else if((iFlags &FL_DUCKING)) flSpread = ((0.08) * (1 - m_flAccuracy)); else flSpread = ((0.1) * (1 - m_flAccuracy)); break; } case WEAPON_FAMAS: { if(!(iFlags &FL_ONGROUND)) flSpread = (0.030 + (0.3) * (m_flAccuracy)); else if(iSpeed > 140) flSpread = (0.030 + (0.07) * (m_flAccuracy)); else flSpread = ((0.020) * (m_flAccuracy)); break; } case WEAPON_FIVESEVEN: { if(!(iFlags &FL_ONGROUND)) flSpread = ((1.5) * (1 - m_flAccuracy)); else if (iSpeed > 5) flSpread = ((0.255) * (1 - m_flAccuracy)); else if (iFlags &FL_DUCKING) flSpread = ((0.075) * (1 - m_flAccuracy)); else flSpread = ((0.15) * (1 - m_flAccuracy)); break; } case WEAPON_G3SG1: { if(!(iFlags &FL_ONGROUND)) flSpread = ((0.45) * (1 - m_flAccuracy)); else if(iSpeed > 5) flSpread = 0.15; else if((iFlags &FL_DUCKING)) flSpread = ((0.035) * (1 - m_flAccuracy)); else flSpread = ((0.055) * (1 - m_flAccuracy)); if(fFOV == 90) flSpread += 0.025; break; } case WEAPON_GALIL: { if(!(iFlags &FL_ONGROUND)) flSpread = (0.04 + (0.3) * (m_flAccuracy)); else if(iSpeed > 140) flSpread = (0.04 + (0.07) * (m_flAccuracy)); else flSpread = ((0.0375) * (m_flAccuracy)); break; } case WEAPON_GLOCK18: { if(m_bWeaponBit) { if(!(iFlags &FL_ONGROUND)) flSpread = ((1.2) * (1 - m_flAccuracy)); else if(iSpeed > 5) flSpread = ((0.185) * (1 - m_flAccuracy)); else if((iFlags &FL_DUCKING)) flSpread = ((0.095) * (1 - m_flAccuracy)); else flSpread = ((0.3) * (1 - m_flAccuracy)); } else { if(!(iFlags &FL_ONGROUND)) flSpread = ((1.0) * (1 - m_flAccuracy)); else if(iSpeed > 5) flSpread = ((0.165) * (1 - m_flAccuracy)); else if((iFlags &FL_DUCKING)) flSpread = ((0.075) * (1 - m_flAccuracy)); else flSpread = ((0.1) * (1 - m_flAccuracy)); } break; } case WEAPON_M249: { if(!(iFlags &FL_ONGROUND)) flSpread = (0.045 + (0.5) * (m_flAccuracy)); else if(iSpeed > 140) flSpread = (0.045 + (0.095) * (m_flAccuracy)); else flSpread = ((0.03) * (m_flAccuracy)); break; } case WEAPON_M4A1: { if(!(iFlags &FL_ONGROUND)) flSpread = (0.035 + (0.4) * (m_flAccuracy)); else if(iSpeed > 140) flSpread = (0.035 + (0.07) * (m_flAccuracy)); else if((iFlags &FL_DUCKING)) flSpread = ((0.095) * (1 - m_flAccuracy)); else if(m_bWeaponBit) flSpread = ((0.025) * (m_flAccuracy)); else flSpread = ((0.02) * (m_flAccuracy)); break; } case WEAPON_MAC10: { if(!(iFlags &FL_ONGROUND)) flSpread = ((0.375) * (m_flAccuracy)); else flSpread = ((0.03) * (m_flAccuracy)); break; } case WEAPON_MP5: { if(!(iFlags &FL_ONGROUND)) flSpread = ((0.2) * (m_flAccuracy)); else flSpread = ((0.04) * (m_flAccuracy)); break; } case WEAPON_P228: { if(!(iFlags &FL_ONGROUND)) flSpread = ((1.5) * (1 - m_flAccuracy)); else if(iSpeed > 5) flSpread = ((0.255) * (1 - m_flAccuracy)); else if((iFlags &FL_DUCKING)) flSpread = ((0.075) * (1 - m_flAccuracy)); else flSpread = ((0.15) * (1 - m_flAccuracy)); break; } case WEAPON_P90: { if(!(iFlags &FL_ONGROUND)) flSpread = ((0.3) * (m_flAccuracy)); else if(iSpeed > 170) flSpread = ((0.115) * (m_flAccuracy)); else flSpread = ((0.045) * (m_flAccuracy)); break; } case WEAPON_SCOUT: { if(!(iFlags &FL_ONGROUND)) flSpread = 0.2; else if(iSpeed > 170) flSpread = 0.075; else if((iFlags &FL_DUCKING)) flSpread = 0.0; else flSpread = 0.007; if(fFOV == 90) flSpread += 0.025; break; } case WEAPON_SG550: { if(!(iFlags &FL_ONGROUND)) flSpread = ((0.45) * (1 - m_flAccuracy)); else if(iSpeed > 5) flSpread = 0.15; else if((iFlags &FL_DUCKING)) flSpread = ((0.04) * (1 - m_flAccuracy)); else flSpread = ((0.05) * (1 - m_flAccuracy)); if(fFOV == 90) flSpread += 0.025; break; } case WEAPON_SG552: { if(!(iFlags &FL_ONGROUND)) flSpread = (0.035 + (0.45) * (m_flAccuracy)); else if(iSpeed > 140) flSpread = (0.035 + (0.075) * (m_flAccuracy)); else flSpread = ((0.02) * (m_flAccuracy)); break; } case WEAPON_TMP: { if(!(iFlags &FL_ONGROUND)) flSpread = ((0.25) * (m_flAccuracy)); else flSpread = ((0.03) * (m_flAccuracy)); break; } case WEAPON_UMP45: { if(!(iFlags &FL_ONGROUND)) flSpread = ((0.24) * (m_flAccuracy)); else flSpread = ((0.04) * (m_flAccuracy)); break; } case WEAPON_USP45: { if(m_bWeaponBit) { if(!(iFlags &FL_ONGROUND)) flSpread = ((1.3) * (1 - m_flAccuracy)); else if(iSpeed > 5) flSpread = ((0.25) * (1 - m_flAccuracy)); else if((iFlags &FL_DUCKING)) flSpread = ((0.125) * (1 - m_flAccuracy)); else flSpread = ((0.15) * (1 - m_flAccuracy)); } else { if(!(iFlags &FL_ONGROUND)) flSpread = ((1.2) * (1 - m_flAccuracy)); else if(iSpeed > 5) flSpread = ((0.225) * (1 - m_flAccuracy)); else if((iFlags &FL_DUCKING)) flSpread = ((0.08) * (1 - m_flAccuracy)); else flSpread = ((0.1) * (1 - m_flAccuracy)); } break; } default: flSpread = 0.0; } return flSpread; } weaponID GetWeaponID(const char *szWeaponName) { if(!szWeaponName || !strcmp(szWeaponName,"weapon_none") || !strcmp(szWeaponName,"weapon_shieldgun")) return WEAPON_NONE; if(!strcmp(szWeaponName,"weapon_ak47")) return WEAPON_AK47; if(!strcmp(szWeaponName,"weapon_aug")) return WEAPON_AUG; if(!strcmp(szWeaponName,"weapon_awp")) return WEAPON_AWP; if(!strcmp(szWeaponName,"weapon_c4")) return WEAPON_C4; if(!strcmp(szWeaponName,"weapon_deagle")) return WEAPON_DEAGLE; if(!strcmp(szWeaponName,"weapon_elite")) return WEAPON_ELITES; if(!strcmp(szWeaponName,"weapon_famas")) return WEAPON_FAMAS; if(!strcmp(szWeaponName,"weapon_fiveseven")) return WEAPON_FIVESEVEN; if(!strcmp(szWeaponName,"weapon_flashbang")) return WEAPON_FLASHBANG; if(!strcmp(szWeaponName,"weapon_g3sg1")) return WEAPON_G3SG1; if(!strcmp(szWeaponName,"weapon_galil")) return WEAPON_GALIL; if(!strcmp(szWeaponName,"weapon_glock")) return WEAPON_GLOCK18; if(!strcmp(szWeaponName,"weapon_hegrenade")) return WEAPON_HE_GRENADE; if(!strcmp(szWeaponName,"weapon_knife")) return WEAPON_KNIFE; if(!strcmp(szWeaponName,"weapon_m249")) return WEAPON_M249; if(!strcmp(szWeaponName,"weapon_m3")) return WEAPON_M3; if(!strcmp(szWeaponName,"weapon_m4a1")) return WEAPON_M4A1; if(!strcmp(szWeaponName,"weapon_mac10")) return WEAPON_MAC10; if(!strcmp(szWeaponName,"weapon_mp5navy")) return WEAPON_MP5; if(!strcmp(szWeaponName,"weapon_p228")) return WEAPON_P228; if(!strcmp(szWeaponName,"weapon_p90")) return WEAPON_P90; if(!strcmp(szWeaponName,"weapon_scout")) return WEAPON_SCOUT; if(!strcmp(szWeaponName,"weapon_sg550")) return WEAPON_SG550; if(!strcmp(szWeaponName,"weapon_sg552")) return WEAPON_SG552; if(!strcmp(szWeaponName,"weapon_smokegrenade")) return WEAPON_SMOKE_GRENADE; if(!strcmp(szWeaponName,"weapon_tmp")) return WEAPON_TMP; if(!strcmp(szWeaponName,"weapon_ump45")) return WEAPON_UMP45; if(!strcmp(szWeaponName,"weapon_usp")) return WEAPON_USP45; if(!strcmp(szWeaponName,"weapon_xm1014")) return WEAPON_XM1014; return WEAPON_NONE; }