hlsdk

hlsdk

May 2nd, 2010
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.53 KB | None | 0 0
  1.         float GetSpread ( C_BaseCombatWeapon* pBaseWeapon )
  2.         {
  3.             if (!pBaseWeapon) return 0.0f;
  4.             float m_flAccuracy = *MakePointer<float>(pBaseWeapon, 0x760);
  5.  
  6.             const char* weaponName = pBaseWeapon->GetName();
  7.             weaponID ID = GetWeaponID(weaponName);
  8.             C_BaseEntity* pLocalPlayer = g_pInterfaces->m_pClientEntList->GetClientEntity(g_pInterfaces->m_pEngineClient->GetLocalPlayer())->GetBaseEntity();
  9.            
  10.             int m_bWeaponBit = 0;
  11.             float flSpread = 0.0f;
  12.             if (!pLocalPlayer)
  13.                 return 0.0f;
  14.  
  15.             int iFlags = pLocalPlayer->m_fFlags;
  16.             int iSpeed = 0;
  17.             float fFOV = Entity::GetFOV((C_BasePlayer*)pLocalPlayer);
  18.  
  19.             Vector vecVelocity = pLocalPlayer->m_vecVelocity;
  20.             if (!vecVelocity.IsLengthLessThan(1.0f))
  21.                 iSpeed = vecVelocity.Length2D();
  22.            
  23.             switch (ID)
  24.             {
  25.             case WEAPON_AK47:
  26.                     {
  27.  
  28.                         if(!(iFlags &FL_ONGROUND))
  29.                             flSpread = (0.04 + (0.4) * (m_flAccuracy));
  30.                         else if(iSpeed > 140)
  31.                             flSpread = (0.04 + (0.07) * (m_flAccuracy));
  32.                         else
  33.                             flSpread = ((0.0275) * (m_flAccuracy));
  34.                         break;
  35.                     }
  36.                 case WEAPON_AUG:
  37.                     {
  38.                         if(!(iFlags &FL_ONGROUND))
  39.                             flSpread = (0.035 + (0.4) * (m_flAccuracy));
  40.                         else if (iSpeed > 140)
  41.                             flSpread = (0.035 + (0.07) * (m_flAccuracy));
  42.                         else
  43.                             flSpread = ((0.02) * (m_flAccuracy));
  44.                         break;
  45.                     }
  46.                 case WEAPON_AWP:
  47.                     {
  48.                         if(!(iFlags &FL_ONGROUND))
  49.                             flSpread =  0.85;
  50.                         else if (iSpeed > 140)
  51.                             flSpread =  0.25;
  52.                         else if (iSpeed > 10)
  53.                             flSpread =  0.1;
  54.                         else if (iFlags &FL_DUCKING)
  55.                             flSpread =  0.0;
  56.                         else
  57.                             flSpread =  0.001;
  58.                         if(fFOV == 90)
  59.                             flSpread += 0.08;
  60.                         break;
  61.                     }
  62.                 case WEAPON_DEAGLE:
  63.                     {
  64.                         if(!(iFlags &FL_ONGROUND))
  65.                             flSpread = ((1.5) * (1 - m_flAccuracy));
  66.                         else if(iSpeed > 5)
  67.                             flSpread = ((0.25) * (1 - m_flAccuracy));
  68.                         else if((iFlags &FL_DUCKING))
  69.                             flSpread = ((0.115) * (1 - m_flAccuracy));
  70.                         else
  71.                             flSpread = ((0.13) * (1 - m_flAccuracy));
  72.                         break;
  73.                     }
  74.                 case WEAPON_ELITES:
  75.                     {
  76.                         if(!(iFlags &FL_ONGROUND))
  77.                             flSpread = ((1.3) * (1 - m_flAccuracy));
  78.                         else if(iSpeed > 5)
  79.                             flSpread = ((0.175) * (1 - m_flAccuracy));
  80.                         else if((iFlags &FL_DUCKING))
  81.                             flSpread = ((0.08) * (1 - m_flAccuracy));
  82.                         else
  83.                             flSpread = ((0.1) * (1 - m_flAccuracy));
  84.                         break;
  85.                     }
  86.                 case WEAPON_FAMAS:
  87.                     {
  88.                         if(!(iFlags &FL_ONGROUND))
  89.                             flSpread = (0.030 + (0.3) * (m_flAccuracy));
  90.                         else if(iSpeed > 140)
  91.                             flSpread = (0.030 + (0.07) * (m_flAccuracy));
  92.                         else
  93.                             flSpread = ((0.020) * (m_flAccuracy));
  94.                         break;
  95.                     }
  96.                 case WEAPON_FIVESEVEN:
  97.                     {
  98.                         if(!(iFlags &FL_ONGROUND))
  99.                             flSpread = ((1.5) * (1 - m_flAccuracy));
  100.                         else if (iSpeed > 5)
  101.                             flSpread = ((0.255) * (1 - m_flAccuracy));
  102.                         else if (iFlags &FL_DUCKING)
  103.                             flSpread = ((0.075) * (1 - m_flAccuracy));
  104.                         else
  105.                             flSpread = ((0.15) * (1 - m_flAccuracy));
  106.                         break;
  107.                     }
  108.                 case WEAPON_G3SG1:
  109.                     {
  110.                         if(!(iFlags &FL_ONGROUND))
  111.                             flSpread = ((0.45) * (1 - m_flAccuracy));
  112.                         else if(iSpeed > 5)
  113.                             flSpread = 0.15;
  114.                         else if((iFlags &FL_DUCKING))
  115.                             flSpread = ((0.035) * (1 - m_flAccuracy));
  116.                         else
  117.                             flSpread = ((0.055) * (1 - m_flAccuracy));
  118.                         if(fFOV == 90)
  119.                             flSpread += 0.025;
  120.                         break;
  121.                     }
  122.                 case WEAPON_GALIL:
  123.                     {
  124.                         if(!(iFlags &FL_ONGROUND))
  125.                             flSpread = (0.04 + (0.3) * (m_flAccuracy));
  126.                         else if(iSpeed > 140)
  127.                             flSpread = (0.04 + (0.07) * (m_flAccuracy));
  128.                         else
  129.                             flSpread = ((0.0375) * (m_flAccuracy));
  130.  
  131.                         break;
  132.                     }
  133.                 case WEAPON_GLOCK18:
  134.                     {
  135.                         if(m_bWeaponBit)
  136.                         {
  137.                             if(!(iFlags &FL_ONGROUND))
  138.                                 flSpread = ((1.2) * (1 - m_flAccuracy));
  139.                             else if(iSpeed > 5)
  140.                                 flSpread = ((0.185) * (1 - m_flAccuracy));
  141.                             else if((iFlags &FL_DUCKING))
  142.                                 flSpread = ((0.095) * (1 - m_flAccuracy));
  143.                             else
  144.                                 flSpread = ((0.3) * (1 - m_flAccuracy));
  145.                         }
  146.                         else
  147.                         {
  148.                             if(!(iFlags &FL_ONGROUND))
  149.                                 flSpread = ((1.0) * (1 - m_flAccuracy));
  150.                             else if(iSpeed > 5)
  151.                                 flSpread = ((0.165) * (1 - m_flAccuracy));
  152.                             else if((iFlags &FL_DUCKING))
  153.                                 flSpread = ((0.075) * (1 - m_flAccuracy));
  154.                             else
  155.                                 flSpread = ((0.1) * (1 - m_flAccuracy));
  156.                         }
  157.                         break;
  158.                     }
  159.                 case WEAPON_M249:
  160.                     {
  161.                         if(!(iFlags &FL_ONGROUND))
  162.                             flSpread = (0.045 + (0.5) * (m_flAccuracy));
  163.                         else if(iSpeed > 140)
  164.                             flSpread = (0.045 + (0.095) * (m_flAccuracy));
  165.                         else
  166.                             flSpread = ((0.03) * (m_flAccuracy));
  167.                         break;
  168.                     }
  169.                 case WEAPON_M4A1:
  170.                     {
  171.                         if(!(iFlags &FL_ONGROUND))
  172.                             flSpread = (0.035 + (0.4) * (m_flAccuracy));
  173.                         else if(iSpeed > 140)
  174.                             flSpread = (0.035 + (0.07) * (m_flAccuracy));
  175.                         else if((iFlags &FL_DUCKING))
  176.                             flSpread = ((0.095) * (1 - m_flAccuracy));
  177.                         else if(m_bWeaponBit)
  178.                             flSpread = ((0.025) * (m_flAccuracy));
  179.                         else
  180.                             flSpread = ((0.02) * (m_flAccuracy));
  181.                         break;
  182.                     }
  183.                 case WEAPON_MAC10:
  184.                     {
  185.                         if(!(iFlags &FL_ONGROUND))
  186.                             flSpread = ((0.375) * (m_flAccuracy));
  187.                         else
  188.                             flSpread = ((0.03) * (m_flAccuracy));
  189.                         break;
  190.                     }
  191.                 case WEAPON_MP5:
  192.                     {
  193.                         if(!(iFlags &FL_ONGROUND))
  194.                             flSpread = ((0.2) * (m_flAccuracy));
  195.                         else
  196.                             flSpread = ((0.04) * (m_flAccuracy));
  197.                         break;
  198.                     }
  199.                 case WEAPON_P228:
  200.                     {
  201.                         if(!(iFlags &FL_ONGROUND))
  202.                             flSpread = ((1.5) * (1 - m_flAccuracy));
  203.                         else if(iSpeed > 5)
  204.                             flSpread = ((0.255) * (1 - m_flAccuracy));
  205.                         else if((iFlags &FL_DUCKING))
  206.                             flSpread = ((0.075) * (1 - m_flAccuracy));
  207.                         else
  208.                             flSpread = ((0.15) * (1 - m_flAccuracy));
  209.                         break;
  210.                     }
  211.                 case WEAPON_P90:
  212.                     {
  213.                         if(!(iFlags &FL_ONGROUND))
  214.                             flSpread = ((0.3) * (m_flAccuracy));
  215.                         else if(iSpeed > 170)
  216.                             flSpread = ((0.115) * (m_flAccuracy));
  217.                         else
  218.                             flSpread = ((0.045) * (m_flAccuracy));
  219.                         break;
  220.                     }
  221.                 case WEAPON_SCOUT:
  222.                     {
  223.                         if(!(iFlags &FL_ONGROUND))
  224.                             flSpread = 0.2;
  225.                         else if(iSpeed > 170)
  226.                             flSpread = 0.075;
  227.                         else if((iFlags &FL_DUCKING))
  228.                             flSpread = 0.0;
  229.                         else
  230.                             flSpread = 0.007;
  231.                         if(fFOV == 90)
  232.                             flSpread += 0.025;
  233.                         break;
  234.                     }
  235.                 case WEAPON_SG550:
  236.                     {
  237.                         if(!(iFlags &FL_ONGROUND))
  238.                             flSpread = ((0.45) * (1 - m_flAccuracy));
  239.                         else if(iSpeed > 5)
  240.                             flSpread = 0.15;
  241.                         else if((iFlags &FL_DUCKING))
  242.                             flSpread = ((0.04) * (1 - m_flAccuracy));
  243.                         else
  244.                             flSpread = ((0.05) * (1 - m_flAccuracy));
  245.                         if(fFOV == 90)
  246.                             flSpread += 0.025;
  247.                         break;
  248.                     }
  249.                 case WEAPON_SG552:
  250.                     {
  251.                         if(!(iFlags &FL_ONGROUND))
  252.                             flSpread = (0.035 + (0.45) * (m_flAccuracy));
  253.                         else if(iSpeed > 140)
  254.                             flSpread = (0.035 + (0.075) * (m_flAccuracy));
  255.                         else
  256.                             flSpread = ((0.02) * (m_flAccuracy));
  257.                         break;
  258.                     }
  259.                 case WEAPON_TMP:
  260.                     {
  261.                         if(!(iFlags &FL_ONGROUND))
  262.                             flSpread = ((0.25) * (m_flAccuracy));
  263.                         else
  264.                             flSpread = ((0.03) * (m_flAccuracy));
  265.                         break;     
  266.                     }
  267.                 case WEAPON_UMP45:
  268.                     {
  269.                         if(!(iFlags &FL_ONGROUND))
  270.                             flSpread = ((0.24) * (m_flAccuracy));
  271.                         else
  272.                             flSpread = ((0.04) * (m_flAccuracy));
  273.                         break;
  274.                     }
  275.                 case WEAPON_USP45:
  276.                     {
  277.                         if(m_bWeaponBit)
  278.                         {
  279.                             if(!(iFlags &FL_ONGROUND))
  280.                                 flSpread = ((1.3) * (1 - m_flAccuracy));
  281.                             else if(iSpeed > 5)
  282.                                 flSpread = ((0.25) * (1 - m_flAccuracy));
  283.                             else if((iFlags &FL_DUCKING))
  284.                                 flSpread = ((0.125) * (1 - m_flAccuracy));
  285.                             else
  286.                                 flSpread = ((0.15) * (1 - m_flAccuracy));
  287.                         }
  288.                         else
  289.                         {
  290.                             if(!(iFlags &FL_ONGROUND))
  291.                                 flSpread = ((1.2) * (1 - m_flAccuracy));
  292.                             else if(iSpeed > 5)
  293.                                 flSpread = ((0.225) * (1 - m_flAccuracy));
  294.                             else if((iFlags &FL_DUCKING))
  295.                                 flSpread = ((0.08) * (1 - m_flAccuracy));
  296.                             else
  297.                                 flSpread = ((0.1) * (1 - m_flAccuracy));
  298.                         }
  299.                         break;
  300.                     }
  301.                 default:
  302.                     flSpread = 0.0;
  303.                 }
  304.                 return flSpread;
  305.             }
  306.  
  307.         weaponID GetWeaponID(const char *szWeaponName)
  308.         {
  309.             if(!szWeaponName || !strcmp(szWeaponName,"weapon_none") || !strcmp(szWeaponName,"weapon_shieldgun"))
  310.                 return WEAPON_NONE;
  311.             if(!strcmp(szWeaponName,"weapon_ak47"))
  312.                 return WEAPON_AK47;
  313.             if(!strcmp(szWeaponName,"weapon_aug"))
  314.                 return WEAPON_AUG;
  315.             if(!strcmp(szWeaponName,"weapon_awp"))
  316.                 return WEAPON_AWP;
  317.             if(!strcmp(szWeaponName,"weapon_c4"))
  318.                 return WEAPON_C4;
  319.             if(!strcmp(szWeaponName,"weapon_deagle"))
  320.                 return WEAPON_DEAGLE;
  321.             if(!strcmp(szWeaponName,"weapon_elite"))
  322.                 return WEAPON_ELITES;
  323.             if(!strcmp(szWeaponName,"weapon_famas"))
  324.                 return WEAPON_FAMAS;
  325.             if(!strcmp(szWeaponName,"weapon_fiveseven"))
  326.                 return WEAPON_FIVESEVEN;
  327.             if(!strcmp(szWeaponName,"weapon_flashbang"))
  328.                 return WEAPON_FLASHBANG;
  329.             if(!strcmp(szWeaponName,"weapon_g3sg1"))
  330.                 return WEAPON_G3SG1;
  331.             if(!strcmp(szWeaponName,"weapon_galil"))
  332.                 return WEAPON_GALIL;
  333.             if(!strcmp(szWeaponName,"weapon_glock"))
  334.                 return WEAPON_GLOCK18;
  335.             if(!strcmp(szWeaponName,"weapon_hegrenade"))
  336.                 return WEAPON_HE_GRENADE;
  337.             if(!strcmp(szWeaponName,"weapon_knife"))
  338.                 return WEAPON_KNIFE;
  339.             if(!strcmp(szWeaponName,"weapon_m249"))
  340.                 return WEAPON_M249;
  341.             if(!strcmp(szWeaponName,"weapon_m3"))
  342.                 return WEAPON_M3;
  343.             if(!strcmp(szWeaponName,"weapon_m4a1"))
  344.                 return WEAPON_M4A1;
  345.             if(!strcmp(szWeaponName,"weapon_mac10"))
  346.                 return WEAPON_MAC10;
  347.             if(!strcmp(szWeaponName,"weapon_mp5navy"))
  348.                 return WEAPON_MP5;
  349.             if(!strcmp(szWeaponName,"weapon_p228"))
  350.                 return WEAPON_P228;
  351.             if(!strcmp(szWeaponName,"weapon_p90"))
  352.                 return WEAPON_P90;
  353.             if(!strcmp(szWeaponName,"weapon_scout"))
  354.                 return WEAPON_SCOUT;
  355.             if(!strcmp(szWeaponName,"weapon_sg550"))
  356.                 return WEAPON_SG550;
  357.             if(!strcmp(szWeaponName,"weapon_sg552"))
  358.                 return WEAPON_SG552;
  359.             if(!strcmp(szWeaponName,"weapon_smokegrenade"))
  360.                 return WEAPON_SMOKE_GRENADE;
  361.             if(!strcmp(szWeaponName,"weapon_tmp"))
  362.                 return WEAPON_TMP;
  363.             if(!strcmp(szWeaponName,"weapon_ump45"))
  364.                 return WEAPON_UMP45;
  365.             if(!strcmp(szWeaponName,"weapon_usp"))
  366.                 return WEAPON_USP45;
  367.             if(!strcmp(szWeaponName,"weapon_xm1014"))
  368.                 return WEAPON_XM1014;
  369.             return WEAPON_NONE;
  370.         }
Add Comment
Please, Sign In to add comment