From 888ba17eedf312084bb0dca3bae82ecf2f0329c8 Mon Sep 17 00:00:00 2001 From: dystopm Date: Sun, 16 Jul 2023 23:17:47 -0400 Subject: [PATCH 1/5] CSPlayerWeapon.cpp file integration --- regamedll/CMakeLists.txt | 1 + regamedll/dlls/API/CSPlayerWeapon.cpp | 54 +++++++++++++++++++ regamedll/msvc/ReGameDLL.vcxproj | 4 ++ regamedll/msvc/ReGameDLL.vcxproj.filters | 3 ++ .../public/regamedll/API/CSPlayerWeapon.h | 10 +++- 5 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 regamedll/dlls/API/CSPlayerWeapon.cpp diff --git a/regamedll/CMakeLists.txt b/regamedll/CMakeLists.txt index 1b329ca95..735d54fc8 100644 --- a/regamedll/CMakeLists.txt +++ b/regamedll/CMakeLists.txt @@ -226,6 +226,7 @@ set(GAMEDLL_SRCS "dlls/API/CSEntity.cpp" "dlls/API/CSPlayer.cpp" "dlls/API/CSPlayerItem.cpp" + "dlls/API/CSPlayerWeapon.cpp" "dlls/addons/item_airbox.cpp" "dlls/addons/point_command.cpp" "dlls/addons/trigger_random.cpp" diff --git a/regamedll/dlls/API/CSPlayerWeapon.cpp b/regamedll/dlls/API/CSPlayerWeapon.cpp new file mode 100644 index 000000000..51a5fd806 --- /dev/null +++ b/regamedll/dlls/API/CSPlayerWeapon.cpp @@ -0,0 +1,54 @@ +/* +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at +* your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +* In addition, as a special exception, the author gives permission to +* link the code of this program with the Half-Life Game Engine ("HL +* Engine") and Modified Game Libraries ("MODs") developed by Valve, +* L.L.C ("Valve"). You must obey the GNU General Public License in all +* respects for all of the code used other than the HL Engine and MODs +* from Valve. If you modify this file, you may extend this exception +* to your version of the file, but you are not obligated to do so. If +* you do not wish to do so, delete this exception statement from your +* version. +* +*/ + +#include "precompiled.h" + +EXT_FUNC BOOL CCSPlayerWeapon::DefaultDeploy(char *szViewModel, char *szWeaponModel, int iAnim, char *szAnimExt, int skiplocal) +{ + return BasePlayerWeapon()->DefaultDeploy(szViewModel, szWeaponModel, iAnim, szAnimExt, skiplocal); +} + +EXT_FUNC int CCSPlayerWeapon::DefaultReload(int iClipSize, int iAnim, float fDelay) +{ + return BasePlayerWeapon()->DefaultReload(iClipSize, iAnim, fDelay); +} + +EXT_FUNC bool CCSPlayerWeapon::DefaultShotgunReload(int iAnim, int iStartAnim, float fDelay, float fStartDelay, const char *pszReloadSound1, const char *pszReloadSound2) +{ + return BasePlayerWeapon()->DefaultShotgunReload(iAnim, iStartAnim, fDelay, fStartDelay, pszReloadSound1, pszReloadSound2); +} + +EXT_FUNC void CCSPlayerWeapon::KickBack(float up_base, float lateral_base, float up_modifier, float lateral_modifier, float up_max, float lateral_max, int direction_change) +{ + BasePlayerWeapon()->KickBack(up_base, lateral_base, up_modifier, lateral_modifier, up_max, lateral_max, direction_change); +} + +EXT_FUNC void CCSPlayerWeapon::SendWeaponAnim(int iAnim, int skiplocal) +{ + BasePlayerWeapon()->SendWeaponAnim(iAnim, skiplocal); +} diff --git a/regamedll/msvc/ReGameDLL.vcxproj b/regamedll/msvc/ReGameDLL.vcxproj index 6c43a5775..b3227cd45 100644 --- a/regamedll/msvc/ReGameDLL.vcxproj +++ b/regamedll/msvc/ReGameDLL.vcxproj @@ -46,6 +46,10 @@ + + + + diff --git a/regamedll/msvc/ReGameDLL.vcxproj.filters b/regamedll/msvc/ReGameDLL.vcxproj.filters index d8c27981d..3e9c67f15 100644 --- a/regamedll/msvc/ReGameDLL.vcxproj.filters +++ b/regamedll/msvc/ReGameDLL.vcxproj.filters @@ -540,6 +540,9 @@ dlls\API + + dlls\API + regamedll diff --git a/regamedll/public/regamedll/API/CSPlayerWeapon.h b/regamedll/public/regamedll/API/CSPlayerWeapon.h index 70317c931..c36c838cc 100644 --- a/regamedll/public/regamedll/API/CSPlayerWeapon.h +++ b/regamedll/public/regamedll/API/CSPlayerWeapon.h @@ -33,15 +33,23 @@ class CCSPlayerWeapon: public CCSPlayerItem { public: CCSPlayerWeapon() : - m_bHasSecondaryAttack(false) + m_bHasSecondaryAttack(false), + m_bBlockSecondaryAttack(false) { } + virtual BOOL DefaultDeploy(char *szViewModel, char *szWeaponModel, int iAnim, char *szAnimExt, int skiplocal = 0); + virtual int DefaultReload(int iClipSize, int iAnim, float fDelay); + virtual bool DefaultShotgunReload(int iAnim, int iStartAnim, float fDelay, float fStartDelay, const char *pszReloadSound1 = nullptr, const char *pszReloadSound2 = nullptr); + virtual void KickBack(float up_base, float lateral_base, float up_modifier, float lateral_modifier, float up_max, float lateral_max, int direction_change); + virtual void SendWeaponAnim(int iAnim, int skiplocal = 0); + CBasePlayerWeapon *BasePlayerWeapon() const; public: bool m_bHasSecondaryAttack; float m_flBaseDamage; + bool m_bBlockSecondaryAttack; }; // Inlines From cf5bfb66040174aa7bad17f873dda871b2465a01 Mon Sep 17 00:00:00 2001 From: dystopm Date: Sun, 16 Jul 2023 23:22:53 -0400 Subject: [PATCH 2/5] Update weapons.cpp --- regamedll/dlls/weapons.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/regamedll/dlls/weapons.cpp b/regamedll/dlls/weapons.cpp index ac9aaea90..ebdb45c9b 100644 --- a/regamedll/dlls/weapons.cpp +++ b/regamedll/dlls/weapons.cpp @@ -824,6 +824,10 @@ bool CBasePlayerWeapon::HasSecondaryAttack() { return true; } + if (CSPlayerWeapon()->m_bBlockSecondaryAttack) + { + return false; + } #endif switch (m_iId) @@ -1196,7 +1200,9 @@ void CBasePlayerWeapon::Spawn() CSPlayerItem()->SetItemInfo(&info); } - CSPlayerWeapon()->m_bHasSecondaryAttack = HasSecondaryAttack(); + bool secondaryAble = HasSecondaryAttack(); + CSPlayerWeapon()->m_bHasSecondaryAttack = secondaryAble; + CSPlayerWeapon()->m_bBlockSecondaryAttack = !secondaryAble; // this could be only one member *sigh* #endif } From 231a97be07be614225ebf65d5f25bd50c9d57f3f Mon Sep 17 00:00:00 2001 From: dystopm Date: Mon, 17 Jul 2023 12:21:28 -0400 Subject: [PATCH 3/5] m_bHasSecondaryAttack refactory - Member name changed to m_iStateSecondaryAttack - Member type changed to uint8_t which has same size of bool but allows more values than true or false (this wont break API compatibility) - Moved logic inside HasSecondaryAttack to correctly alter function return based on m_iStateSecondaryAttack, which can be (0) no value / null (1) set (2) block -Removed logic in CBasePlayerWeapon::Spawn that caches the return value of HasSecondaryAttack, as this can only be overridden when set, rather than always --- regamedll/dlls/weapons.cpp | 62 +++++++++---------- .../public/regamedll/API/CSPlayerWeapon.h | 15 +++-- 2 files changed, 42 insertions(+), 35 deletions(-) diff --git a/regamedll/dlls/weapons.cpp b/regamedll/dlls/weapons.cpp index ebdb45c9b..fd58896b1 100644 --- a/regamedll/dlls/weapons.cpp +++ b/regamedll/dlls/weapons.cpp @@ -814,44 +814,48 @@ BOOL CanAttack(float attack_time, float curtime, BOOL isPredicted) bool CBasePlayerWeapon::HasSecondaryAttack() { - if (m_pPlayer && m_pPlayer->HasShield()) +#ifdef REGAMEDLL_API + if (CSPlayerWeapon()->m_iStateSecondaryAttack != CCSPlayerWeapon::WEAPON_SECONDARY_ATTACK_NONE) { - return true; + switch (CSPlayerWeapon()->m_iStateSecondaryAttack) + { + case CCSPlayerWeapon::WEAPON_SECONDARY_ATTACK_SET: + return true; + case CCSPlayerWeapon::WEAPON_SECONDARY_ATTACK_BLOCK: + return false; + default: + break; + } } +#endif -#ifdef REGAMEDLL_API - if (CSPlayerWeapon()->m_bHasSecondaryAttack) + if (m_pPlayer && m_pPlayer->HasShield()) { return true; } - if (CSPlayerWeapon()->m_bBlockSecondaryAttack) - { - return false; - } -#endif switch (m_iId) { - case WEAPON_AK47: - case WEAPON_XM1014: - case WEAPON_MAC10: - case WEAPON_ELITE: - case WEAPON_FIVESEVEN: - case WEAPON_MP5N: + case WEAPON_AK47: + case WEAPON_XM1014: + case WEAPON_MAC10: + case WEAPON_ELITE: + case WEAPON_FIVESEVEN: + case WEAPON_MP5N: #ifdef BUILD_LATEST_FIXES - case WEAPON_UMP45: + case WEAPON_UMP45: #endif - case WEAPON_M249: - case WEAPON_M3: - case WEAPON_TMP: - case WEAPON_DEAGLE: - case WEAPON_P228: - case WEAPON_P90: - case WEAPON_C4: - case WEAPON_GALIL: - return false; - default: - break; + case WEAPON_M249: + case WEAPON_M3: + case WEAPON_TMP: + case WEAPON_DEAGLE: + case WEAPON_P228: + case WEAPON_P90: + case WEAPON_C4: + case WEAPON_GALIL: + return false; + default: + break; } return true; @@ -1199,10 +1203,6 @@ void CBasePlayerWeapon::Spawn() if (GetItemInfo(&info)) { CSPlayerItem()->SetItemInfo(&info); } - - bool secondaryAble = HasSecondaryAttack(); - CSPlayerWeapon()->m_bHasSecondaryAttack = secondaryAble; - CSPlayerWeapon()->m_bBlockSecondaryAttack = !secondaryAble; // this could be only one member *sigh* #endif } diff --git a/regamedll/public/regamedll/API/CSPlayerWeapon.h b/regamedll/public/regamedll/API/CSPlayerWeapon.h index c36c838cc..73719ede0 100644 --- a/regamedll/public/regamedll/API/CSPlayerWeapon.h +++ b/regamedll/public/regamedll/API/CSPlayerWeapon.h @@ -33,8 +33,7 @@ class CCSPlayerWeapon: public CCSPlayerItem { public: CCSPlayerWeapon() : - m_bHasSecondaryAttack(false), - m_bBlockSecondaryAttack(false) + m_iStateSecondaryAttack(WEAPON_SECONDARY_ATTACK_NONE) { } @@ -47,9 +46,16 @@ class CCSPlayerWeapon: public CCSPlayerItem CBasePlayerWeapon *BasePlayerWeapon() const; public: - bool m_bHasSecondaryAttack; + enum SecondaryAtkState : uint8_t + { + WEAPON_SECONDARY_ATTACK_NONE = 0, + WEAPON_SECONDARY_ATTACK_SET, + WEAPON_SECONDARY_ATTACK_BLOCK + }; + +public: + SecondaryAtkState m_iStateSecondaryAttack; float m_flBaseDamage; - bool m_bBlockSecondaryAttack; }; // Inlines @@ -57,3 +63,4 @@ inline CBasePlayerWeapon *CCSPlayerWeapon::BasePlayerWeapon() const { return reinterpret_cast(this->m_pContainingEntity); } + From 139642c0ec04551de86e538e9d8464b5b9d313ab Mon Sep 17 00:00:00 2001 From: Dmitry Novikov Date: Tue, 18 Jul 2023 09:43:08 +0700 Subject: [PATCH 4/5] Update weapons.cpp Undone indents in switch --- regamedll/dlls/weapons.cpp | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/regamedll/dlls/weapons.cpp b/regamedll/dlls/weapons.cpp index fd58896b1..5f69edef4 100644 --- a/regamedll/dlls/weapons.cpp +++ b/regamedll/dlls/weapons.cpp @@ -836,26 +836,26 @@ bool CBasePlayerWeapon::HasSecondaryAttack() switch (m_iId) { - case WEAPON_AK47: - case WEAPON_XM1014: - case WEAPON_MAC10: - case WEAPON_ELITE: - case WEAPON_FIVESEVEN: - case WEAPON_MP5N: + case WEAPON_AK47: + case WEAPON_XM1014: + case WEAPON_MAC10: + case WEAPON_ELITE: + case WEAPON_FIVESEVEN: + case WEAPON_MP5N: #ifdef BUILD_LATEST_FIXES - case WEAPON_UMP45: + case WEAPON_UMP45: #endif - case WEAPON_M249: - case WEAPON_M3: - case WEAPON_TMP: - case WEAPON_DEAGLE: - case WEAPON_P228: - case WEAPON_P90: - case WEAPON_C4: - case WEAPON_GALIL: - return false; - default: - break; + case WEAPON_M249: + case WEAPON_M3: + case WEAPON_TMP: + case WEAPON_DEAGLE: + case WEAPON_P228: + case WEAPON_P90: + case WEAPON_C4: + case WEAPON_GALIL: + return false; + default: + break; } return true; From 612c522976d336a55e650b34dfb7fb6df1dd47fe Mon Sep 17 00:00:00 2001 From: dystopm Date: Sat, 29 Jul 2023 16:21:17 -0400 Subject: [PATCH 5/5] Improve API compatibility --- regamedll/dlls/weapons.cpp | 6 +++--- regamedll/public/regamedll/API/CSPlayerWeapon.h | 15 +++++++-------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/regamedll/dlls/weapons.cpp b/regamedll/dlls/weapons.cpp index 5f69edef4..e341b1b7e 100644 --- a/regamedll/dlls/weapons.cpp +++ b/regamedll/dlls/weapons.cpp @@ -815,13 +815,13 @@ BOOL CanAttack(float attack_time, float curtime, BOOL isPredicted) bool CBasePlayerWeapon::HasSecondaryAttack() { #ifdef REGAMEDLL_API - if (CSPlayerWeapon()->m_iStateSecondaryAttack != CCSPlayerWeapon::WEAPON_SECONDARY_ATTACK_NONE) + if (CSPlayerWeapon()->m_iStateSecondaryAttack != WEAPON_SECONDARY_ATTACK_NONE) { switch (CSPlayerWeapon()->m_iStateSecondaryAttack) { - case CCSPlayerWeapon::WEAPON_SECONDARY_ATTACK_SET: + case WEAPON_SECONDARY_ATTACK_SET: return true; - case CCSPlayerWeapon::WEAPON_SECONDARY_ATTACK_BLOCK: + case WEAPON_SECONDARY_ATTACK_BLOCK: return false; default: break; diff --git a/regamedll/public/regamedll/API/CSPlayerWeapon.h b/regamedll/public/regamedll/API/CSPlayerWeapon.h index 73719ede0..22c020464 100644 --- a/regamedll/public/regamedll/API/CSPlayerWeapon.h +++ b/regamedll/public/regamedll/API/CSPlayerWeapon.h @@ -28,6 +28,13 @@ #pragma once +enum SecondaryAtkState : uint8_t +{ + WEAPON_SECONDARY_ATTACK_NONE = 0, + WEAPON_SECONDARY_ATTACK_SET, + WEAPON_SECONDARY_ATTACK_BLOCK +}; + class CBasePlayerWeapon; class CCSPlayerWeapon: public CCSPlayerItem { @@ -45,14 +52,6 @@ class CCSPlayerWeapon: public CCSPlayerItem CBasePlayerWeapon *BasePlayerWeapon() const; -public: - enum SecondaryAtkState : uint8_t - { - WEAPON_SECONDARY_ATTACK_NONE = 0, - WEAPON_SECONDARY_ATTACK_SET, - WEAPON_SECONDARY_ATTACK_BLOCK - }; - public: SecondaryAtkState m_iStateSecondaryAttack; float m_flBaseDamage;