keybode

css v34 sdk ( weapon.cpp )

Aug 15th, 2015
773
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 13.16 KB | None | 0 0
  1. #include "Weapon.h"
  2. #include "Player.h"
  3. #include "HL2.h"
  4. #include "NetVarManager.h"
  5.  
  6. const char* C_BaseCombatWeapon::GetName()
  7. {
  8.     typedef const char* (__thiscall* GetNameFn)(void*);
  9.     return GetMethod<GetNameFn>(this, 260)(this);
  10. }
  11.  
  12. const char* C_BaseCombatWeapon::GetPrintName()
  13. {
  14.     typedef const char* (__thiscall* GetPrintNameFn)(void*);
  15.     return GetMethod<GetPrintNameFn>(this, 261)(this);
  16. }
  17.  
  18. int C_BaseCombatWeapon::GetPrimaryAmmoType()
  19. {
  20.     static uintptr_t dwOffset = gNetVarManager.GetNetVar("DT_BaseCombatWeapon", "m_iPrimaryAmmoType");
  21.  
  22.     return *(int*)(this + dwOffset);
  23. }
  24.  
  25. int C_BaseCombatWeapon::GetSecondaryAmmoType()
  26. {
  27.     static uintptr_t dwOffset = gNetVarManager.GetNetVar("DT_BaseCombatWeapon", "m_iSecondaryAmmoType");
  28.  
  29.     return *(int*)(this + dwOffset);
  30. }
  31.  
  32. int C_BaseCombatWeapon::Clip1()
  33. {
  34.     static uintptr_t dwOffset = gNetVarManager.GetNetVar("DT_BaseCombatWeapon", "m_iClip1");
  35.  
  36.     return *(int*)(this + dwOffset);
  37. }
  38.  
  39. int C_BaseCombatWeapon::Clip2()
  40. {
  41.     static uintptr_t dwOffset = gNetVarManager.GetNetVar("DT_BaseCombatWeapon", "m_iClip2");
  42.  
  43.     return *(int*)(this + dwOffset);
  44. }
  45.  
  46. float C_BaseCombatWeapon::GetNextPrimaryAttack()
  47. {
  48.     static uintptr_t dwOffset = gNetVarManager.GetNetVar("DT_BaseCombatWeapon", "m_flNextPrimaryAttack");
  49.  
  50.     return *(float*)(this + dwOffset);
  51. }
  52.  
  53. float C_BaseCombatWeapon::GetNextSecondaryAttack()
  54. {
  55.     static uintptr_t dwOffset = gNetVarManager.GetNetVar("DT_BaseCombatWeapon", "m_flNextSecondaryAttack");
  56.  
  57.     return *(float*)(this + dwOffset);
  58. }
  59.  
  60. const char* WeaponIDToAlias(int id)
  61. {
  62.     typedef const char* (*WeaponIDToAliasFn)(int);
  63.     static WeaponIDToAliasFn WeaponIDToAlias = (WeaponIDToAliasFn)API::PatternScan(0xC9F4E76B, "8B 44 24 04 83 F8 22");
  64.  
  65.     if (!WeaponIDToAlias)
  66.         return NULL;
  67.  
  68.     return WeaponIDToAlias(id);
  69. }
  70.  
  71. CCSWeaponInfo C_WeaponCSBase::GetCSWpnData()
  72. {
  73.     typedef CCSWeaponInfo& (__thiscall* GetCSWpnDataFn)(void*);
  74.     static GetCSWpnDataFn GetCSWpnData = (GetCSWpnDataFn)API::PatternScan(0xC9F4E76B, "66 8B 81 ?? ?? ?? ?? 50 E8 ?? ?? ?? ?? 83 C4 04");
  75.  
  76.     if (!GetCSWpnData)
  77.         return CCSWeaponInfo();
  78.  
  79.     CCSWeaponInfo CSWeaponInfo = GetCSWpnData(this);
  80.  
  81.     if (GetWeaponID() == WEAPON_GLOCK)
  82.     {
  83.         if (IsInSpecialMode())
  84.         {
  85.             CSWeaponInfo.m_iDamage = 18;
  86.             CSWeaponInfo.m_flRangeModifier = 0.9f;
  87.         }
  88.     }
  89.     else if (GetWeaponID() == WEAPON_M4A1)
  90.     {
  91.         if (IsInSpecialMode())
  92.         {
  93.             CSWeaponInfo.m_flRangeModifier = 0.95f;
  94.         }
  95.     }
  96.     else if (GetWeaponID() == WEAPON_USP)
  97.     {
  98.         if (IsInSpecialMode())
  99.         {
  100.             CSWeaponInfo.m_iDamage = 30;
  101.         }
  102.     }
  103.  
  104.     return CSWeaponInfo;
  105. }
  106.  
  107. CSWeaponID C_WeaponCSBase::GetWeaponID()
  108. {
  109.     typedef int(__thiscall* GetWeaponIDFn)(void*);
  110.     return (CSWeaponID)GetMethod<GetWeaponIDFn>(this, 297)(this);
  111. }
  112.  
  113. float C_WeaponCSBase::GetAccuracy()
  114. {
  115.     return *(float*)(this + 0x760);
  116. }
  117.  
  118. bool C_WeaponCSBase::IsInSpecialMode()
  119. {
  120.     if (GetWeaponID() == WEAPON_FAMAS)
  121.     {
  122.         static uintptr_t dwOffset = gNetVarManager.GetNetVar("DT_WeaponFamas", "m_bBurstMode");
  123.  
  124.         return *(bool*)(this + dwOffset);
  125.     }
  126.     else if (GetWeaponID() == WEAPON_GLOCK)
  127.     {
  128.         static uintptr_t dwOffset = gNetVarManager.GetNetVar("DT_WeaponGlock", "m_bBurstMode");
  129.  
  130.         return *(bool*)(this + dwOffset);
  131.     }
  132.     else if (GetWeaponID() == WEAPON_M4A1)
  133.     {
  134.         static uintptr_t dwOffset = gNetVarManager.GetNetVar("DT_WeaponM4A1", "m_bSilencerOn");
  135.  
  136.         return *(bool*)(this + dwOffset);
  137.     }
  138.     else if (GetWeaponID() == WEAPON_USP)
  139.     {
  140.         static uintptr_t dwOffset = gNetVarManager.GetNetVar("DT_WeaponUSP", "m_bSilencerOn");
  141.  
  142.         return *(bool*)(this + dwOffset);
  143.     }
  144.  
  145.     return false;
  146. }
  147.  
  148. float C_WeaponCSBase::GetGlockShoot()
  149. {
  150.     return *(float*)(this + 0x780);
  151. }
  152.  
  153. float C_WeaponCSBase::GetFamasShoot()
  154. {
  155.     return *(float*)(this + 0x784);
  156. }
  157.  
  158. float C_WeaponCSBase::GetFamasBurstSpread()
  159. {
  160.     return *(float*)(this + 0x78C);
  161. }
  162.  
  163. float C_WeaponCSBase::GetSpread()
  164. {
  165.     C_CSPlayer* pLocal = C_CSPlayer::GetLocalCSPlayer();
  166.  
  167.     if (!pLocal)
  168.         return 0.0f;
  169.  
  170.     float flSpread = 0.0f;
  171.  
  172.     int iSpeed = (int)pLocal->GetLocalVelocity().Length2D();
  173.  
  174.     switch (GetWeaponID())
  175.     {
  176.         case WEAPON_NONE:
  177.         {
  178.             flSpread = 0.0f;
  179.             break;
  180.         }
  181.         case WEAPON_AK47:
  182.         {
  183.             if (!(pLocal->GetFlags() & FL_ONGROUND))
  184.                 flSpread = (0.04f + (0.4f) * (GetAccuracy()));
  185.             else if (iSpeed > 140)
  186.                 flSpread = (0.04f + (0.07f) * (GetAccuracy()));
  187.             else
  188.                 flSpread = ((0.0275f) * (GetAccuracy()));
  189.             break;
  190.         }
  191.         case WEAPON_AUG:
  192.         {
  193.             if (!(pLocal->GetFlags() & FL_ONGROUND))
  194.                 flSpread = (0.035f + (0.4f) * (GetAccuracy()));
  195.             else if (iSpeed > 140)
  196.                 flSpread = (0.035f + (0.07f) * (GetAccuracy()));
  197.             else
  198.                 flSpread = ((0.02f) * (GetAccuracy()));
  199.             break;
  200.         }
  201.         case WEAPON_AWP:
  202.         {
  203.             if (!(pLocal->GetFlags() & FL_ONGROUND))
  204.                 flSpread = 0.85f;
  205.             else if (iSpeed > 140)
  206.                 flSpread = 0.25f;
  207.             else if (iSpeed > 10)
  208.                 flSpread = 0.10f;
  209.             else if (pLocal->GetFlags() & FL_DUCKING)
  210.                 flSpread = 0.0f;
  211.             else
  212.                 flSpread = 0.001f;
  213.  
  214.             if (pLocal->GetFOV() == 0 || pLocal->GetFOV() == 90)
  215.                 flSpread += 0.08f;
  216.             break;
  217.         }
  218.         case WEAPON_C4:
  219.         {
  220.             flSpread = 0.0f;
  221.             break;
  222.         }
  223.         case WEAPON_DEAGLE:
  224.         {
  225.             if (!(pLocal->GetFlags() & FL_ONGROUND))
  226.                 flSpread = ((1.5f) * (1 - GetAccuracy()));
  227.             else if (iSpeed > 5)
  228.                 flSpread = ((0.25f) * (1 - GetAccuracy()));
  229.             else if ((pLocal->GetFlags() & FL_DUCKING))
  230.                 flSpread = ((0.115f) * (1 - GetAccuracy()));
  231.             else
  232.                 flSpread = ((0.13f) * (1 - GetAccuracy()));
  233.             break;
  234.         }
  235.         case WEAPON_ELITE:
  236.         {
  237.             if (!(pLocal->GetFlags() & FL_ONGROUND))
  238.                 flSpread = ((1.3f) * (1 - GetAccuracy()));
  239.             else if (iSpeed > 5)
  240.                 flSpread = ((0.175f) * (1 - GetAccuracy()));
  241.             else if ((pLocal->GetFlags() & FL_DUCKING))
  242.                 flSpread = ((0.08f) * (1 - GetAccuracy()));
  243.             else
  244.                 flSpread = ((0.1f) * (1 - GetAccuracy()));
  245.             break;
  246.         }
  247.         case WEAPON_FAMAS:
  248.         {
  249.             if (!(pLocal->GetFlags() & FL_ONGROUND))
  250.                 flSpread = (0.03f + (0.3f) * (GetAccuracy()));
  251.             else if (iSpeed > 140)
  252.                 flSpread = (0.03f + (0.07f) * (GetAccuracy()));
  253.             else
  254.                 flSpread = ((0.02f) * (GetAccuracy()));
  255.  
  256.             if (IsInSpecialMode())
  257.             {
  258.                 if (GetFamasShoot() != 0.0f && GetFamasShoot() < HL2::m_pGlobals->curtime)
  259.                 {
  260.                     flSpread = GetFamasBurstSpread();
  261.                 }
  262.             }
  263.             else
  264.             {
  265.                 flSpread += 0.01f;
  266.             }
  267.             break;
  268.         }
  269.         case WEAPON_FIVESEVEN:
  270.         {
  271.             if (!(pLocal->GetFlags() & FL_ONGROUND))
  272.                 flSpread = ((1.5f) * (1 - GetAccuracy()));
  273.             else if (iSpeed > 5)
  274.                 flSpread = ((0.255f) * (1 - GetAccuracy()));
  275.             else if (pLocal->GetFlags() & FL_DUCKING)
  276.                 flSpread = ((0.075f) * (1 - GetAccuracy()));
  277.             else
  278.                 flSpread = ((0.15f) * (1 - GetAccuracy()));
  279.             break;
  280.         }
  281.         case WEAPON_FLASHBANG:
  282.         {
  283.             flSpread = 0.0f;
  284.             break;
  285.         }
  286.         case WEAPON_G3SG1:
  287.         {
  288.             if (!(pLocal->GetFlags() & FL_ONGROUND))
  289.                 flSpread = ((0.45f) * (1 - GetAccuracy()));
  290.             else if (iSpeed > 5)
  291.                 flSpread = 0.15f;
  292.             else if ((pLocal->GetFlags() & FL_DUCKING))
  293.                 flSpread = ((0.035f) * (1 - GetAccuracy()));
  294.             else
  295.                 flSpread = ((0.055f) * (1 - GetAccuracy()));
  296.  
  297.             if (pLocal->GetFOV() == 0 || pLocal->GetFOV() == 90)
  298.                 flSpread += 0.025f;
  299.             break;
  300.         }
  301.         case WEAPON_GALIL:
  302.         {
  303.             if (!(pLocal->GetFlags() & FL_ONGROUND))
  304.                 flSpread = (0.04f + (0.3f) * (GetAccuracy()));
  305.             else if (iSpeed > 140)
  306.                 flSpread = (0.04f + (0.07f) * (GetAccuracy()));
  307.             else
  308.                 flSpread = ((0.0375f) * (GetAccuracy()));
  309.             break;
  310.         }
  311.         case WEAPON_GLOCK:
  312.         {
  313.             if (IsInSpecialMode())
  314.             {
  315.                 if (GetGlockShoot() != 0.0f)
  316.                 {
  317.                     flSpread = 0.05f;
  318.                 }
  319.                 else
  320.                 {
  321.                     if (!(pLocal->GetFlags() & FL_ONGROUND))
  322.                         flSpread = ((1.2f) * (1 - GetAccuracy()));
  323.                     else if (iSpeed > 5)
  324.                         flSpread = ((0.185f) * (1 - GetAccuracy()));
  325.                     else if ((pLocal->GetFlags() & FL_DUCKING))
  326.                         flSpread = ((0.095f) * (1 - GetAccuracy()));
  327.                     else
  328.                         flSpread = ((0.3f) * (1 - GetAccuracy()));
  329.                 }
  330.             }
  331.             else
  332.             {
  333.                 if (!(pLocal->GetFlags() & FL_ONGROUND))
  334.                     flSpread = ((1.0f) * (1 - GetAccuracy()));
  335.                 else if (iSpeed > 5)
  336.                     flSpread = ((0.165f) * (1 - GetAccuracy()));
  337.                 else if ((pLocal->GetFlags() & FL_DUCKING))
  338.                     flSpread = ((0.075f) * (1 - GetAccuracy()));
  339.                 else
  340.                     flSpread = ((0.1f) * (1 - GetAccuracy()));
  341.             }
  342.             break;
  343.         }
  344.         case WEAPON_HEGRENADE:
  345.         {
  346.             flSpread = 0.0f;
  347.             break;
  348.         }
  349.         case WEAPON_KNIFE:
  350.         {
  351.             flSpread = 0.0f;
  352.             break;
  353.         }
  354.         case WEAPON_M249:
  355.         {
  356.             if (!(pLocal->GetFlags() & FL_ONGROUND))
  357.                 flSpread = (0.045f + (0.5f) * (GetAccuracy()));
  358.             else if (iSpeed > 140)
  359.                 flSpread = (0.045f + (0.095f) * (GetAccuracy()));
  360.             else
  361.                 flSpread = ((0.03f) * (GetAccuracy()));
  362.             break;
  363.         }
  364.         case WEAPON_M3:
  365.         {
  366.             flSpread = 0.0675f;
  367.             break;
  368.         }
  369.         case WEAPON_M4A1:
  370.         {
  371.             if (!(pLocal->GetFlags() & FL_ONGROUND))
  372.                 flSpread = (0.035f + (0.4f) * (GetAccuracy()));
  373.             else if (iSpeed > 140)
  374.                 flSpread = (0.035f + (0.07f) * (GetAccuracy()));
  375.             else
  376.             {
  377.                 if (IsInSpecialMode())
  378.                     flSpread = ((0.025f) * (GetAccuracy()));
  379.                 else
  380.                     flSpread = ((0.02f) * (GetAccuracy()));
  381.             }
  382.             break;
  383.         }
  384.         case WEAPON_MAC10:
  385.         {
  386.             if (!(pLocal->GetFlags() & FL_ONGROUND))
  387.                 flSpread = ((0.375f) * (GetAccuracy()));
  388.             else
  389.                 flSpread = ((0.03f) * (GetAccuracy()));
  390.             break;
  391.         }
  392.         case WEAPON_MP5NAVY:
  393.         {
  394.             if (!(pLocal->GetFlags() & FL_ONGROUND))
  395.                 flSpread = ((0.2f) * (GetAccuracy()));
  396.             else
  397.                 flSpread = ((0.04f) * (GetAccuracy()));
  398.             break;
  399.         }
  400.         case WEAPON_P228:
  401.         {
  402.             if (!(pLocal->GetFlags() & FL_ONGROUND))
  403.                 flSpread = ((1.5f) * (1 - GetAccuracy()));
  404.             else if (iSpeed > 5)
  405.                 flSpread = ((0.255f) * (1 - GetAccuracy()));
  406.             else if ((pLocal->GetFlags() & FL_DUCKING))
  407.                 flSpread = ((0.075f) * (1 - GetAccuracy()));
  408.             else
  409.                 flSpread = ((0.15f) * (1 - GetAccuracy()));
  410.             break;
  411.         }
  412.         case WEAPON_P90:
  413.         {
  414.             if (!(pLocal->GetFlags() & FL_ONGROUND))
  415.                 flSpread = ((0.3f) * (GetAccuracy()));
  416.             else if (iSpeed > 170)
  417.                 flSpread = ((0.115f) * (GetAccuracy()));
  418.             else
  419.                 flSpread = ((0.045f) * (GetAccuracy()));
  420.             break;
  421.         }
  422.         case WEAPON_SCOUT:
  423.         {
  424.             if (!(pLocal->GetFlags() & FL_ONGROUND))
  425.                 flSpread = 0.2f;
  426.             else if (iSpeed > 170)
  427.                 flSpread = 0.075f;
  428.             else if ((pLocal->GetFlags() & FL_DUCKING))
  429.                 flSpread = 0.0f;
  430.             else
  431.                 flSpread = 0.007f;
  432.  
  433.             if (pLocal->GetFOV() == 0 || pLocal->GetFOV() == 90)
  434.                 flSpread += 0.025f;
  435.             break;
  436.         }
  437.         case WEAPON_SG550:
  438.         {
  439.             if (!(pLocal->GetFlags() & FL_ONGROUND))
  440.                 flSpread = ((0.45f) * (1 - GetAccuracy()));
  441.             else if (iSpeed > 5)
  442.                 flSpread = 0.15f;
  443.             else if ((pLocal->GetFlags() & FL_DUCKING))
  444.                 flSpread = ((0.04f) * (1 - GetAccuracy()));
  445.             else
  446.                 flSpread = ((0.05f) * (1 - GetAccuracy()));
  447.  
  448.             if (pLocal->GetFOV() == 0 || pLocal->GetFOV() == 90)
  449.                 flSpread += 0.025f;
  450.             break;
  451.         }
  452.         case WEAPON_SG552:
  453.         {
  454.             if (!(pLocal->GetFlags() & FL_ONGROUND))
  455.                 flSpread = (0.035f + (0.45f) * (GetAccuracy()));
  456.             else if (iSpeed > 140)
  457.                 flSpread = (0.035f + (0.075f) * (GetAccuracy()));
  458.             else
  459.                 flSpread = ((0.02f) * (GetAccuracy()));
  460.             break;
  461.         }
  462.         case WEAPON_SMOKEGRENADE:
  463.         {
  464.             flSpread = 0.0f;
  465.             break;
  466.         }
  467.         case WEAPON_TMP:
  468.         {
  469.             if (!(pLocal->GetFlags() & FL_ONGROUND))
  470.                 flSpread = ((0.25f) * (GetAccuracy()));
  471.             else
  472.                 flSpread = ((0.03f) * (GetAccuracy()));
  473.             break;
  474.         }
  475.         case WEAPON_UMP45:
  476.         {
  477.             if (!(pLocal->GetFlags() & FL_ONGROUND))
  478.                 flSpread = ((0.24f) * (GetAccuracy()));
  479.             else
  480.                 flSpread = ((0.04f) * (GetAccuracy()));
  481.             break;
  482.         }
  483.         case WEAPON_USP:
  484.         {
  485.             if (IsInSpecialMode())
  486.             {
  487.                 if (!(pLocal->GetFlags() & FL_ONGROUND))
  488.                     flSpread = ((1.3f) * (1 - GetAccuracy()));
  489.                 else if (iSpeed > 5)
  490.                     flSpread = ((0.25f) * (1 - GetAccuracy()));
  491.                 else if ((pLocal->GetFlags() & FL_DUCKING))
  492.                     flSpread = ((0.125f) * (1 - GetAccuracy()));
  493.                 else
  494.                     flSpread = ((0.15f) * (1 - GetAccuracy()));
  495.             }
  496.             else
  497.             {
  498.                 if (!(pLocal->GetFlags() & FL_ONGROUND))
  499.                     flSpread = ((1.2f) * (1 - GetAccuracy()));
  500.                 else if (iSpeed > 5)
  501.                     flSpread = ((0.225f) * (1 - GetAccuracy()));
  502.                 else if ((pLocal->GetFlags() & FL_DUCKING))
  503.                     flSpread = ((0.08f) * (1 - GetAccuracy()));
  504.                 else
  505.                     flSpread = ((0.1f) * (1 - GetAccuracy()));
  506.             }
  507.             break;
  508.         }
  509.         case WEAPON_XM1014:
  510.         {
  511.             flSpread = 0.0725f;
  512.             break;
  513.         }
  514.         default:
  515.         {
  516.             flSpread = 0.0f;
  517.             break;
  518.         }
  519.     }
  520.  
  521.     return flSpread;
  522. }
  523.  
  524. bool C_WeaponCSBase::IsMeleeWeapon()
  525. {
  526.     return GetCSWpnData().m_WeaponType == WEAPONTYPE_KNIFE
  527.         || GetCSWpnData().m_WeaponType == WEAPONTYPE_C4
  528.         || GetCSWpnData().m_WeaponType == WEAPONTYPE_GRENADE;
  529. }
  530.  
  531. bool C_WeaponCSBase::CanFire()
  532. {
  533.     C_CSPlayer* pLocal = C_CSPlayer::GetLocalCSPlayer();
  534.  
  535.     if (!pLocal)
  536.         return false;
  537.  
  538.     if (GetWeaponID() == WEAPON_GLOCK)
  539.     {
  540.         if (IsInSpecialMode())
  541.         {
  542.             if (GetGlockShoot() != 0.0f)
  543.             {
  544.                 return true;
  545.             }
  546.         }
  547.     }
  548.     else if (GetWeaponID() == WEAPON_FAMAS)
  549.     {
  550.         if (IsInSpecialMode())
  551.         {
  552.             if (GetFamasShoot() != 0.0f && GetFamasShoot() < HL2::m_pGlobals->curtime)
  553.             {
  554.                 return true;
  555.             }
  556.         }
  557.     }
  558.  
  559.     return HL2::m_pGlobals->curtime >= pLocal->GetNextAttack()
  560.         && HL2::m_pGlobals->curtime >= GetNextPrimaryAttack();
  561. }
Advertisement
Add Comment
Please, Sign In to add comment