diff --git a/regamedll/CMakeLists.txt b/regamedll/CMakeLists.txt
index 1b329ca9..735d54fc 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 00000000..51a5fd80
--- /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/dlls/weapons.cpp b/regamedll/dlls/weapons.cpp
index ac9aaea9..e341b1b7 100644
--- a/regamedll/dlls/weapons.cpp
+++ b/regamedll/dlls/weapons.cpp
@@ -814,18 +814,26 @@ BOOL CanAttack(float attack_time, float curtime, BOOL isPredicted)
bool CBasePlayerWeapon::HasSecondaryAttack()
{
+#ifdef REGAMEDLL_API
+ if (CSPlayerWeapon()->m_iStateSecondaryAttack != WEAPON_SECONDARY_ATTACK_NONE)
+ {
+ switch (CSPlayerWeapon()->m_iStateSecondaryAttack)
+ {
+ case WEAPON_SECONDARY_ATTACK_SET:
+ return true;
+ case WEAPON_SECONDARY_ATTACK_BLOCK:
+ return false;
+ default:
+ break;
+ }
+ }
+#endif
+
if (m_pPlayer && m_pPlayer->HasShield())
{
return true;
}
-#ifdef REGAMEDLL_API
- if (CSPlayerWeapon()->m_bHasSecondaryAttack)
- {
- return true;
- }
-#endif
-
switch (m_iId)
{
case WEAPON_AK47:
@@ -1195,8 +1203,6 @@ void CBasePlayerWeapon::Spawn()
if (GetItemInfo(&info)) {
CSPlayerItem()->SetItemInfo(&info);
}
-
- CSPlayerWeapon()->m_bHasSecondaryAttack = HasSecondaryAttack();
#endif
}
diff --git a/regamedll/msvc/ReGameDLL.vcxproj b/regamedll/msvc/ReGameDLL.vcxproj
index 6c43a577..b3227cd4 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 d8c27981..3e9c67f1 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 70317c93..22c02046 100644
--- a/regamedll/public/regamedll/API/CSPlayerWeapon.h
+++ b/regamedll/public/regamedll/API/CSPlayerWeapon.h
@@ -28,19 +28,32 @@
#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
{
public:
CCSPlayerWeapon() :
- m_bHasSecondaryAttack(false)
+ m_iStateSecondaryAttack(WEAPON_SECONDARY_ATTACK_NONE)
{
}
+ 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;
+ SecondaryAtkState m_iStateSecondaryAttack;
float m_flBaseDamage;
};
@@ -49,3 +62,4 @@ inline CBasePlayerWeapon *CCSPlayerWeapon::BasePlayerWeapon() const
{
return reinterpret_cast(this->m_pContainingEntity);
}
+