Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

API: CSPlayerWeapon integration + new members and functions #850

Merged
merged 5 commits into from
Aug 23, 2023
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions regamedll/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
54 changes: 54 additions & 0 deletions regamedll/dlls/API/CSPlayerWeapon.cpp
Original file line number Diff line number Diff line change
@@ -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);
}
20 changes: 13 additions & 7 deletions regamedll/dlls/weapons.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -814,17 +814,25 @@ 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;
}
#endif

switch (m_iId)
{
Expand Down Expand Up @@ -1195,8 +1203,6 @@ void CBasePlayerWeapon::Spawn()
if (GetItemInfo(&info)) {
CSPlayerItem()->SetItemInfo(&info);
}

CSPlayerWeapon()->m_bHasSecondaryAttack = HasSecondaryAttack();
#endif
}

Expand Down
4 changes: 4 additions & 0 deletions regamedll/msvc/ReGameDLL.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@
<ClCompile Include="..\dlls\API\CSPlayerItem.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Tests|Win32'">
</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\dlls\API\CSPlayerWeapon.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Tests|Win32'">
</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\dlls\basemonster.cpp" />
<ClCompile Include="..\dlls\bmodels.cpp" />
Expand Down
3 changes: 3 additions & 0 deletions regamedll/msvc/ReGameDLL.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -540,6 +540,9 @@
<ClCompile Include="..\dlls\API\CSPlayerItem.cpp">
<Filter>dlls\API</Filter>
</ClCompile>
<ClCompile Include="..\dlls\API\CSPlayerWeapon.cpp">
<Filter>dlls\API</Filter>
</ClCompile>
<ClCompile Include="..\regamedll\public_amalgamation.cpp">
<Filter>regamedll</Filter>
</ClCompile>
Expand Down
19 changes: 17 additions & 2 deletions regamedll/public/regamedll/API/CSPlayerWeapon.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,28 @@ 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;
enum SecondaryAtkState : uint8_t
{
WEAPON_SECONDARY_ATTACK_NONE = 0,
WEAPON_SECONDARY_ATTACK_SET,
WEAPON_SECONDARY_ATTACK_BLOCK
};

public:
SecondaryAtkState m_iStateSecondaryAttack;
float m_flBaseDamage;
};

Expand All @@ -49,3 +63,4 @@ inline CBasePlayerWeapon *CCSPlayerWeapon::BasePlayerWeapon() const
{
return reinterpret_cast<CBasePlayerWeapon *>(this->m_pContainingEntity);
}