Advertisement
Guest User

Untitled

a guest
Jan 18th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 15.92 KB | None | 0 0
  1. // ===================================================================================
  2. // Includes
  3. #include "Main.h"
  4. // ===================================================================================
  5.  
  6.  
  7. // ===================================================================================
  8. // WeaponInfo functions
  9. weapon_t* WeaponInfo::GetWeaponByID(int WeaponID)
  10. {
  11.     //GetWEAPONByID to get weapon info
  12.     if (dwGetWeaponByID == NULL)
  13.         return NULL;
  14.  
  15.     return ((weapon_t*(__cdecl*)(int WeaponID))dwGetWeaponByID)(WeaponID);
  16. }
  17.  
  18. bool WeaponInfo::IsWeaponReady()
  19. {
  20.     // Check if weapon is ready (ptrs etc retrieved)
  21.     weapon_t* pWeapon = WeaponInfo::GetWeaponByID(g_Local.WeaponID);
  22.     if (pWeapon == NULL)
  23.         return false;
  24.  
  25.     if (pWeapon->Ammo == 0)
  26.         return false;
  27.  
  28.     if (pWeapon->Reloading)
  29.         return false;
  30.  
  31.     return true;
  32. }
  33.  
  34. eWeaponType WeaponInfo::GetWeaponType(int WeaponID)
  35. {
  36.     // Simplifies things when doing nospread, aimbot etc. anything that required to lock out weapons
  37.     eWeaponType WeaponType = WEAPONTYPE_NONE;
  38.     if (WeaponID == WEAPON_P228 || WeaponID == WEAPON_USP || WeaponID == WEAPON_GLOCK18 || WeaponID == WEAPON_DEAGLE || WeaponID == WEAPON_ELITE || WeaponID == WEAPON_FIVESEVEN)
  39.         WeaponType = WEAPONTYPE_PISTOL;
  40.     if (WeaponID == WEAPON_M3 || WeaponID == WEAPON_XM1014)
  41.         WeaponType = WEAPONTYPE_SHOTGUN;
  42.     if (WeaponID == WEAPON_MAC10 || WeaponID == WEAPON_UMP45 || WeaponID == WEAPON_MP5 || WeaponID == WEAPON_TMP || WeaponID == WEAPON_P90)
  43.         WeaponType = WEAPONTYPE_SMG;
  44.     if (WeaponID == WEAPON_AUG || WeaponID == WEAPON_GALIL || WeaponID == WEAPON_FAMAS || WeaponID == WEAPON_M4A1 || WeaponID == WEAPON_AK47 || WeaponID == WEAPON_SG552 || WeaponID == WEAPON_M249)
  45.         WeaponType = WEAPONTYPE_RIFLE;
  46.     if (WeaponID == WEAPON_SCOUT || WeaponID == WEAPON_G3SG1 || WeaponID == WEAPON_SG550 || WeaponID == WEAPON_AWP)
  47.         WeaponType = WEAPONTYPE_SNIPER;
  48.     if (WeaponID == WEAPON_NONE || WeaponID == WEAPON_UNKNOWN1 || WeaponID == WEAPON_HEGRENADE || WeaponID == WEAPON_C4 || WeaponID == WEAPON_SMOKEGRENADE || WeaponID == WEAPON_FLASHBANG)
  49.         WeaponType = WEAPONTYPE_MISC;
  50.     if (WeaponID == WEAPON_KNIFE)
  51.         WeaponType = WEAPONTYPE_KNIFE;
  52.  
  53.     return WeaponType;
  54. }
  55.  
  56. void WeaponInfo::Init()
  57. {
  58.     // GetWEAPONByID is the name in dylib
  59.     dwGetWeaponByID = Utility->FindPattern("client.dll", "8B 44 24 04 48 83 F8 1D 0F 87 ? ? ? ?", false);
  60.  
  61.     Utility->DeleteLog("Weapon.txt");
  62.     Utility->Log("Weapon.txt", "GetWeaponByID: 0x%p\n", dwGetWeaponByID);
  63. }
  64. // ===================================================================================
  65.  
  66.  
  67. // ===================================================================================
  68. // Spread and recoil handling
  69. float WeaponInfo::GetSpreadFactor()
  70. {
  71.     // Retrieve weapon info
  72.     weapon_t* pWeapon = GetWeaponByID(g_Local.WeaponID);
  73.     int WeaponID = pWeapon->WeaponID;
  74.     eWeaponBit WeaponBit = pWeapon->WeaponBit;
  75.     bool OnGround = (g_Local.Flags &FL_ONGROUND) != 0;
  76.     bool Ducking = (g_Local.Flags &FL_DUCKING) != 0;
  77.     float FOV = g_Local.FOV;
  78.     float Speed = g_Local.Velocity.Length2D();
  79.     float SpreadVar = pWeapon->SpreadVar;
  80.     float Recoil = (float)pWeapon->Recoil;
  81.     float SpreadFactor = pWeapon->SpreadVar;
  82.    
  83.     // Factor spread based by weapon
  84.     if (WeaponID == WEAPON_P228) // 1
  85.     {
  86.         // Calc spreadvar
  87.         if (pWeapon->PredRecoil != 0.0f)
  88.         {
  89.             SpreadVar = pWeapon->SpreadVar - (0.325f - (g_pGlobals->time - pWeapon->PredRecoil)) * 0.3f;
  90.             if (SpreadVar < 0.6f) SpreadVar = 0.6f;
  91.             if (SpreadVar > 0.9f) SpreadVar = 0.9f;
  92.         }
  93.  
  94.         // Factor spread
  95.         if (OnGround)
  96.         {
  97.             if (Speed > 0.0f)
  98.                 SpreadFactor = (1.0f - SpreadVar) * 0.255f;
  99.             else if (Ducking == true)
  100.                 SpreadFactor = (1.0f - SpreadVar) * 0.075f;
  101.             else
  102.                 SpreadFactor = (1.0f - SpreadVar) * 0.15f;
  103.         }
  104.         else
  105.             SpreadFactor = (1.0f - SpreadVar) * 1.5f;
  106.     }
  107.  
  108.     if (WeaponID == WEAPON_SCOUT) // 3
  109.     {
  110.         // Factor spread
  111.         if (OnGround)
  112.         {
  113.             if (Speed <= 170.0f)
  114.             {
  115.                 if (Ducking)
  116.                     SpreadFactor = 0.0f;
  117.                 else
  118.                     SpreadFactor = 0.007f;
  119.             }
  120.             else
  121.                 SpreadFactor = 0.075f;
  122.         }
  123.         else
  124.             SpreadFactor = 0.2f;
  125.  
  126.         if (FOV == 90.0f)
  127.             SpreadFactor += 0.025f;
  128.     }
  129.    
  130.     if (WeaponID == WEAPON_MAC10) // 7
  131.     {
  132.         // Calc spreadvar
  133.         if (Recoil) Recoil -= 1;
  134.         float Spread = (Recoil * Recoil * Recoil / 200) + 0.6f;
  135.         SpreadVar = fminf(1.65f, Spread);
  136.  
  137.         // Factor spread
  138.         if (OnGround)
  139.             SpreadFactor = SpreadVar * 0.03f;
  140.         else
  141.             SpreadFactor = SpreadVar * 0.375f;
  142.     }
  143.  
  144.     if (WeaponID == WEAPON_AUG) // 8
  145.     {
  146.         // Calc spreadvar
  147.         if (Recoil) Recoil -= 1;
  148.         float Spread = (Recoil * Recoil * Recoil / 215) + 0.3f;
  149.         SpreadVar = fminf(1.0f, Spread);
  150.  
  151.         // Factor spread
  152.         if (OnGround)
  153.         {
  154.             if (Speed <= 140)
  155.                 SpreadFactor = SpreadVar * 0.02f;
  156.             else
  157.                 SpreadFactor = SpreadVar * 0.07f + 0.035f;
  158.         }
  159.         else
  160.             SpreadFactor = SpreadVar * 0.4f + 0.035f;
  161.     }
  162.    
  163.     if (WeaponID == WEAPON_ELITE) // 10 - inaccurate, todo: center guns based on wich is firing
  164.     {
  165.         // Calc spreadvar
  166.         if (pWeapon->PredRecoil != 0.0f)
  167.         {
  168.             SpreadVar = pWeapon->SpreadVar - (0.325f - (g_pGlobals->time - pWeapon->PredRecoil)) * 0.275f;
  169.             if (SpreadVar < 0.55f) SpreadVar = 0.55f;
  170.             if (SpreadVar > 0.88f) SpreadVar = 0.88f;
  171.         }
  172.  
  173.         // Factor spread
  174.         if (OnGround)
  175.         {
  176.             if (Speed > 0.0f)
  177.                 SpreadFactor = (1.0f - SpreadVar) * 0.175f;
  178.             else if (Ducking == true)
  179.                 SpreadFactor = (1.0f - SpreadVar) * 0.08f;
  180.             else
  181.                 SpreadFactor = (1.0f - SpreadVar) * 0.1f;
  182.         }
  183.         else
  184.             SpreadFactor = (1.0f - SpreadVar) * 1.3f;
  185.     }
  186.    
  187.     if (WeaponID == WEAPON_FIVESEVEN) // 11
  188.     {
  189.         // Calc spreadvar
  190.         if (pWeapon->PredRecoil != 0.0f)
  191.         {
  192.             SpreadVar = pWeapon->SpreadVar - (0.275f - (g_pGlobals->time - pWeapon->PredRecoil)) * 0.25f;
  193.             if (SpreadVar < 0.725f) SpreadVar = 0.725f;
  194.             if (SpreadVar > 0.92f) SpreadVar = 0.92f;
  195.         }
  196.  
  197.         // Factor spread
  198.         if (OnGround)
  199.         {
  200.             if (Speed > 0)
  201.                 SpreadFactor = (1.0f - SpreadVar) * 0.255f;
  202.             else if (Ducking == true)
  203.                 SpreadFactor = (1.0f - SpreadVar) * 0.075f;
  204.             else
  205.                 SpreadFactor = (1.0f - SpreadVar) * 0.15f;
  206.         }
  207.         else
  208.             SpreadFactor = (1.0f - SpreadVar) * 1.5f;
  209.     }
  210.    
  211.     if (WeaponID == WEAPON_UMP45) // 12
  212.     {
  213.         // Calc spreadvar
  214.         if (Recoil) Recoil -= 1;
  215.         float Spread = (Recoil * Recoil / 210) + 0.5f;
  216.         SpreadVar = fminf(1.0f, Spread);
  217.  
  218.         // Factor spread
  219.         if (OnGround)
  220.             SpreadFactor = SpreadVar * 0.04f;
  221.         else
  222.             SpreadFactor = SpreadVar * 0.24f;
  223.     }
  224.  
  225.     if (WeaponID == WEAPON_SG550) // 13
  226.     {
  227.         // Calc spreadvar
  228.         if (pWeapon->PredRecoil != 0.0f)
  229.         {
  230.             SpreadVar = (g_pGlobals->time - pWeapon->PredRecoil) * 0.35f + 0.65f;
  231.             if (SpreadVar > 0.98f)
  232.                 SpreadVar = 0.98f;
  233.         }
  234.  
  235.         // Factor spread
  236.         if (OnGround)
  237.         {
  238.             if (Speed > 0.0f)
  239.                 SpreadFactor = (1.0f - SpreadVar) * 0.15f;
  240.             else if (Ducking == true)
  241.                 SpreadFactor = (1.0f - SpreadVar) * 0.04f;
  242.             else
  243.                 SpreadFactor = (1.0f - SpreadVar) * 0.05f;
  244.         }
  245.         else
  246.             SpreadFactor = (1.0f - SpreadVar) * 0.45f;
  247.  
  248.         if (FOV == 90.0f)
  249.             SpreadVar += 0.025f;
  250.     }
  251.    
  252.     if (WeaponID == WEAPON_GALIL) // 14
  253.     {
  254.         // Calc spreadvar
  255.         if (Recoil) Recoil -= 1;
  256.         float Spread = (Recoil * Recoil * Recoil / 200) + 0.35f;
  257.         SpreadVar = fminf(1.25f, Spread);
  258.  
  259.         // Factor spread
  260.         if (OnGround)
  261.         {
  262.             if (Speed <= 140.0f)
  263.                 SpreadFactor = SpreadVar * 0.0375f;
  264.             else
  265.                 SpreadFactor = SpreadVar * 0.07f + 0.04f;
  266.         }
  267.         else
  268.             SpreadFactor = SpreadVar * 0.3f + 0.04f;
  269.     }
  270.  
  271.     if (WeaponID == WEAPON_FAMAS) // 15
  272.     {
  273.         // Calc spreadvar
  274.         if (Recoil) Recoil -= 1;
  275.         float Spread = (Recoil * Recoil * Recoil / 215) + 0.3f;
  276.         SpreadVar = fminf(1.0f, Spread);
  277.  
  278.         // Factor spread
  279.         if (OnGround)
  280.         {
  281.             if (Speed <= 140.0f)
  282.                 SpreadFactor = SpreadVar * 0.02f;
  283.             else
  284.                 SpreadFactor = SpreadVar * 0.07f + 0.03f;
  285.         }
  286.         else
  287.             SpreadFactor = SpreadVar * 0.3f + 0.03f;
  288.  
  289.         if (WeaponBit != WEAPONBIT_FAMASBURST)
  290.             SpreadFactor += 0.01f;
  291.  
  292.         if (WeaponBit == WEAPONBIT_FAMASBURST && pWeapon->BurstSpread != 0.0f)
  293.             SpreadFactor += 0.05f;
  294.     }
  295.  
  296.     if (WeaponID == WEAPON_USP) // 16
  297.     {
  298.         // Calc spreadvar
  299.         if (pWeapon->PredRecoil != 0.0f)
  300.         {
  301.             SpreadVar = pWeapon->SpreadVar - (0.3f - (g_pGlobals->time - pWeapon->PredRecoil)) * 0.275f;
  302.             if (SpreadVar < 0.6f) SpreadVar = 0.6f;
  303.             if (SpreadVar > 0.92f) SpreadVar = 0.92f;
  304.         }
  305.  
  306.         // Factor spread
  307.         if (WeaponBit == WEAPONBIT_USPSILENCER)
  308.         {
  309.             if (OnGround)
  310.             {
  311.                 if (Speed > 0.0f)
  312.                     SpreadFactor = (1.0f - SpreadVar) * 0.225f;
  313.                 else if (Ducking == true)
  314.                     SpreadFactor = (1.0f - SpreadVar) * 0.08f;
  315.                 else
  316.                     SpreadFactor = (1.0f - SpreadVar) * 0.1f;
  317.             }
  318.             else
  319.                 SpreadFactor = (1.0f - SpreadVar) * 1.2f;
  320.         }
  321.         else
  322.         {
  323.             if (OnGround)
  324.             {
  325.                 if (Speed > 0.0f)
  326.                     SpreadFactor = (1.0f - SpreadVar) * 0.25f;
  327.                 else if (Ducking == true)
  328.                     SpreadFactor = (1.0f - SpreadVar) * 0.125f;
  329.                 else
  330.                     SpreadFactor = (1.0f - SpreadVar) * 0.15f;
  331.             }
  332.             else
  333.                 SpreadFactor = (1.0f - SpreadVar) * 1.3f;
  334.         }
  335.     }
  336.    
  337.     if (WeaponID == WEAPON_GLOCK18) // 17
  338.     {
  339.         // Calc spreadvar
  340.         if (pWeapon->PredRecoil != 0.0f)
  341.         {
  342.             SpreadVar = pWeapon->SpreadVar - (0.325f - (g_pGlobals->time - pWeapon->PredRecoil)) * 0.275f;
  343.             if (SpreadVar < 0.6f) SpreadVar = 0.6f;
  344.             if (SpreadVar > 0.9f) SpreadVar = 0.9f;
  345.         }
  346.  
  347.         // Factor Spread
  348.         if (WeaponBit >= WEAPONBIT_GLOCKBURST)
  349.         {
  350.             if (OnGround)
  351.             {
  352.                 if (Speed > 0.0f)
  353.                     SpreadFactor = (1.0f - SpreadVar) * 0.185f;
  354.                 else if (Ducking == true)
  355.                     SpreadFactor = (1.0f - SpreadVar) * 0.095f;
  356.                 else
  357.                     SpreadFactor = (1.0f - SpreadVar) * 0.3f;
  358.             }
  359.             else
  360.                 SpreadFactor = (1.0f - SpreadVar) * 1.2f;
  361.         }
  362.         else
  363.         {
  364.             if (OnGround)
  365.             {
  366.                 if (Speed > 0.0f)
  367.                     SpreadFactor = (1.0f - SpreadVar) * 0.165f;
  368.                 else if (Ducking == true)
  369.                     SpreadFactor = (1.0f - SpreadVar) * 0.075f;
  370.                 else
  371.                     SpreadFactor = (1.0f - SpreadVar) * 0.1f;
  372.             }
  373.             else
  374.                 SpreadFactor = 1.0f - SpreadVar;
  375.         }
  376.  
  377.         if (!WeaponBit)
  378.             SpreadFactor -= 0.05f;
  379.        
  380.         if (pWeapon->PistolBurstSpread != 0.0f)
  381.             SpreadFactor += 0.1f;
  382.        
  383.     }
  384.  
  385.     if (WeaponID == WEAPON_AWP) // 18
  386.     {
  387.         // Factor spread
  388.         if (OnGround)
  389.         {
  390.             if (Speed <= 10)
  391.             {
  392.                 if (Ducking)
  393.                     SpreadFactor = 0.0f;
  394.                 else
  395.                     SpreadFactor = 0.001f;
  396.             }
  397.             else if (Speed <= 140)
  398.                 SpreadFactor = 0.1f;
  399.             else
  400.                 SpreadFactor = 0.25f;
  401.         }
  402.         else
  403.             SpreadFactor = 0.85f;
  404.  
  405.         if (FOV == 90.0f)
  406.             SpreadFactor += 0.08f;
  407.     }
  408.  
  409.     if (WeaponID == WEAPON_MP5) // 19
  410.     {
  411.         // Calc spreadvar
  412.         if (Recoil) Recoil -= 1;
  413.         float Spread = (Recoil * Recoil) * 0.004543389368468878f + 0.45f;
  414.         SpreadVar = fminf(0.75f, Spread);
  415.  
  416.         // Factor spread
  417.         if (OnGround)
  418.             SpreadFactor = SpreadVar * 0.04f;
  419.         else
  420.             SpreadFactor = SpreadVar * 0.2f;
  421.     }
  422.    
  423.     if (WeaponID == WEAPON_M249) // 20
  424.     {
  425.         // Calc spreadvar
  426.         if (Recoil != 0.0f) Recoil -= 1;
  427.         float Spread = (Recoil * Recoil * Recoil / 175) + 0.4f;
  428.         SpreadVar = fminf(0.9f, Spread);
  429.  
  430.         // Factor spread
  431.         if (OnGround)
  432.         {
  433.             if (Speed <= 140.0f)
  434.                 SpreadFactor = SpreadVar * 0.03f;
  435.             else
  436.                 SpreadFactor = SpreadVar * 0.095f + 0.045f;
  437.         }
  438.         else
  439.             SpreadFactor = SpreadVar * 0.5f + 0.045f;
  440.     }
  441.  
  442.     if (WeaponID == WEAPON_M4A1) // 22
  443.     {
  444.         // Calc spreadvar
  445.         if (Recoil != 0.0f) Recoil -= 1;
  446.         float Spread = (Recoil * Recoil * Recoil / 220) + 0.3f;
  447.         SpreadVar = fminf(1.0f, Spread);
  448.  
  449.         // Factor spread
  450.         if (OnGround)
  451.         {
  452.             if (Speed <= 140.0f)
  453.             {
  454.                 if (WeaponBit == WEAPONBIT_M4A1SILENCER)
  455.                     SpreadFactor = SpreadVar * 0.025f;
  456.                 else
  457.                     SpreadFactor = SpreadVar * 0.02f;
  458.             }
  459.             else
  460.                 SpreadFactor = SpreadVar * 0.07f + 0.035f;
  461.         }
  462.         else
  463.             SpreadFactor = SpreadVar * 0.4f + 0.035f;
  464.     }
  465.  
  466.     if (WeaponID == WEAPON_TMP) // 23
  467.     {
  468.         // Calc spreadvar
  469.         if (Recoil) Recoil -= 1;
  470.         float Spread = (Recoil * Recoil * Recoil / 200) + 0.55f;
  471.         SpreadVar = fminf(1.4f, Spread);
  472.  
  473.         // Factor spread
  474.         if (OnGround)
  475.             SpreadFactor = SpreadVar * 0.03f;
  476.         else
  477.             SpreadFactor = SpreadVar * 0.25f;
  478.     }
  479.    
  480.     if (WeaponID == WEAPON_G3SG1) // 24
  481.     {
  482.         // Calc spreadvar
  483.         if (pWeapon->PredRecoil == 0.0f)
  484.             SpreadVar = 0.98f;
  485.         else
  486.         {
  487.             SpreadVar = (g_pGlobals->time - pWeapon->PredRecoil) * 0.3f + 0.55f;
  488.             if (SpreadVar > 0.98f) SpreadVar = 0.98f;
  489.         }
  490.  
  491.         // Factor spread
  492.         if (OnGround)
  493.         {
  494.             if (Speed > 0.0f)
  495.                 SpreadFactor = (1.0f - SpreadVar) * 0.15f;
  496.             else if (Ducking == true)
  497.                 SpreadFactor = (1.0f - SpreadVar) * 0.035f;
  498.             else
  499.                 SpreadFactor = (1.0f - SpreadVar) * 0.055f;
  500.         }
  501.         else
  502.             SpreadFactor = (1.0f - SpreadVar) * 0.45f;
  503.  
  504.         if (FOV == 90.0f)
  505.             SpreadFactor += 0.025f;
  506.     }
  507.  
  508.     if (WeaponID == WEAPON_DEAGLE) // 26 - inaccurate (did i forget something - punchangles done differently?)
  509.     {
  510.         // Calc spreadvar
  511.         if (pWeapon->PredRecoil != 0.0f)
  512.         {
  513.             SpreadVar = pWeapon->SpreadVar - (0.4f - (g_pGlobals->time - pWeapon->PredRecoil)) * 0.35f;
  514.             if (SpreadVar < 0.55f) SpreadVar = 0.55f;
  515.             if (SpreadVar > 0.9f) SpreadVar = 0.9f;
  516.         }
  517.  
  518.         // Factor spread
  519.         if (OnGround)
  520.         {
  521.             if (Speed > 0.0f)
  522.                 SpreadFactor = (1.0f - SpreadVar) * 0.25f;
  523.             else if (Ducking == true)
  524.                 SpreadFactor = (1.0f - SpreadVar) * 0.115f;
  525.             else
  526.                 SpreadFactor = (1.0f - SpreadVar) * 0.13f;
  527.         }
  528.         else
  529.             SpreadFactor = (1.0f - SpreadVar) * 1.5f;
  530.     }
  531.  
  532.     if (WeaponID == WEAPON_SG552) // 27
  533.     {
  534.         // Calc spreadvar
  535.         if (Recoil) Recoil -= 1;
  536.         float Spread = (Recoil * Recoil * Recoil / 220) + 0.3f;
  537.         SpreadVar = fminf(1.0f, Spread);
  538.  
  539.         // Factor spread
  540.         if (OnGround)
  541.         {
  542.             if (Speed <= 140.0f)
  543.                 SpreadFactor = SpreadVar * 0.02f;
  544.             else
  545.                 SpreadFactor = SpreadVar * 0.075f + 0.035f;
  546.         }
  547.         else
  548.             SpreadFactor = SpreadVar * 0.45f + 0.035f;
  549.     }
  550.    
  551.     if (WeaponID == WEAPON_AK47) // 28
  552.     {
  553.         // Calculate spreadvar
  554.         if (Recoil) Recoil -= 1;
  555.         float Spread = (Recoil * Recoil * Recoil / 200) + 0.35f;
  556.         SpreadVar = fminf(1.25f, Spread);
  557.  
  558.         // Factor spread
  559.         if (OnGround)
  560.         {
  561.             if (Speed <= 140.0f)
  562.                 SpreadFactor = SpreadVar * 0.0275f;
  563.             else
  564.                 SpreadFactor = SpreadVar * 0.07f + 0.04f;
  565.         }
  566.         else
  567.             SpreadFactor = SpreadVar * 0.4f + 0.04f;
  568.     }
  569.  
  570.     if (WeaponID == WEAPON_P90) // 30
  571.     {
  572.         // Calc spreadvar
  573.         if (Recoil) Recoil -= 1;
  574.         float Spread = (Recoil * Recoil / 175) + 0.45f;
  575.         SpreadVar = fminf(1.0f, Spread);
  576.  
  577.         // Factor spread
  578.         if (OnGround)
  579.         {
  580.             if (Speed <= 170.0f)
  581.                 SpreadFactor = SpreadVar * 0.045f;
  582.             else
  583.                 SpreadFactor = SpreadVar * 0.115f;
  584.         }
  585.         else
  586.             SpreadFactor = SpreadVar * 0.3f;
  587.     }
  588.    
  589.     return SpreadFactor;
  590. }
  591.  
  592. void WeaponInfo::UpdateSpreadAngles()
  593. {
  594.     // Check if weapon is ready
  595.     if (IsWeaponReady() == false)
  596.         return;
  597.  
  598.     // Check if weapon type is pistol or higher
  599.     if (GetWeaponType(g_Local.WeaponID) < WEAPONTYPE_PISTOL)
  600.         return;
  601.  
  602.     // Calculate spread angle
  603.     Vector vAngles, vSpreadAngles, vSpread, vF, vR, vU;
  604.  
  605.     float flSpreadVar = GetSpreadFactor();
  606.     float flSpreadX = UTIL_SharedRandomFloat(g_Local.RandomSeed + 1, -0.5f, 0.5f) + UTIL_SharedRandomFloat(g_Local.RandomSeed + 2, -0.5f, 0.5f);
  607.     float flSpreadY = UTIL_SharedRandomFloat(g_Local.RandomSeed + 3, -0.5f, 0.5f) + UTIL_SharedRandomFloat(g_Local.RandomSeed + 4, -0.5f, 0.5f);
  608.  
  609.     flSpreadX *= flSpreadVar;
  610.     flSpreadY *= flSpreadVar;
  611.  
  612.     g_pEngine->pfnAngleVectors(g_Local.ViewAngles, vF, vR, vU);
  613.     vSpread = vF + vR * flSpreadX + vU * flSpreadY;
  614.     EngineHelper::VectorAngles(vSpread, vSpreadAngles);
  615.     vSpreadAngles[0] *= -1;
  616.  
  617.     VectorSubtract(g_Local.ViewAngles, vSpreadAngles, vAngles);
  618.    
  619.     // Apply spread
  620.     g_Local.SpreadAngles.x = vAngles.x;
  621.     g_Local.SpreadAngles.y = vAngles.y;
  622.     g_Local.SpreadAngles.z = 0.0f;
  623. }
  624.  
  625. void WeaponInfo::UpdatePunchAngles(ref_params_t* pParams)
  626. {
  627.     VectorCopy(pParams->punchangle, g_Local.PunchAngles);
  628.     float flLength = (float)EngineHelper::VectorNormalize(g_Local.PunchAngles);
  629.     float flTmp = flLength - (0.5f * flLength + 10.0f) * pParams->frametime;
  630.     VectorScale(g_Local.PunchAngles, max(flTmp, 0.0f), g_Local.PunchAngles);
  631. }
  632. // ===================================================================================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement