mirror of
https://github.com/rehlds/reapi.git
synced 2025-01-14 23:58:08 +03:00
Implement RG_CBasePlayerWeapon_CanDeploy & CBasePlayerWeapon_DefaultDeploy hooks (#150)
* Implement RG_CBasePlayerWeapon_CanDeploy & CBasePlayerWeapon_DefaultDeploy hooks * Implement RG_CBasePlayerWeapon_CanDeploy & CBasePlayerWeapon_DefaultDeploy hooks * Implement RG_CBasePlayerWeapon_DefaultReload hook * ImplementRG_ CBasePlayerWeapon_DefaultShotgunReload hook
This commit is contained in:
parent
45584b6716
commit
9874820989
@ -1,3 +1,3 @@
|
|||||||
majorVersion=5
|
majorVersion=5
|
||||||
minorVersion=10
|
minorVersion=11
|
||||||
maintenanceVersion=0
|
maintenanceVersion=0
|
||||||
|
@ -22,7 +22,8 @@ enum hooks_tables_e
|
|||||||
ht_gamerules,
|
ht_gamerules,
|
||||||
ht_rechecker,
|
ht_rechecker,
|
||||||
ht_grenade,
|
ht_grenade,
|
||||||
ht_weaponbox
|
ht_weaponbox,
|
||||||
|
ht_weapon
|
||||||
};
|
};
|
||||||
|
|
||||||
enum members_tables_e
|
enum members_tables_e
|
||||||
@ -136,7 +137,7 @@ enum HookChain
|
|||||||
*
|
*
|
||||||
* @return Returns a hook handle. Use EnableHookChain/DisableHookChain to toggle the forward on or off
|
* @return Returns a hook handle. Use EnableHookChain/DisableHookChain to toggle the forward on or off
|
||||||
*/
|
*/
|
||||||
native HookChain:RegisterHookChain({EngineFunc, GamedllFunc, GamedllFunc_CBaseAnimating, GamedllFunc_CBasePlayer, GamedllFunc_CSGameRules, GamedllFunc_CGrenade, GamedllFunc_CWeaponBox, ReCheckerFunc}:function_id, const callback[], post = 0);
|
native HookChain:RegisterHookChain({EngineFunc, GamedllFunc, GamedllFunc_CBaseAnimating, GamedllFunc_CBasePlayer, GamedllFunc_CSGameRules, GamedllFunc_CGrenade, GamedllFunc_CWeaponBox, ReCheckerFunc, GamedllFunc_CBasePlayerWeapon}:function_id, const callback[], post = 0);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Stops a hook from triggering.
|
* Stops a hook from triggering.
|
||||||
|
@ -763,6 +763,40 @@ enum GamedllFunc_CBasePlayer
|
|||||||
RG_CBasePlayer_UseEmpty,
|
RG_CBasePlayer_UseEmpty,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GamedllFunc CBasePlayer
|
||||||
|
*/
|
||||||
|
enum GamedllFunc_CBasePlayerWeapon
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Return type: BOOL
|
||||||
|
* Params: (const this)
|
||||||
|
*/
|
||||||
|
RG_CBasePlayerWeapon_CanDeploy = BEGIN_FUNC_REGION(weapon),
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Return type: BOOL
|
||||||
|
* Params: (const this, szViewModel[], szWeaponModel[], iAnim, szAnimExt[], skiplocal)
|
||||||
|
*/
|
||||||
|
RG_CBasePlayerWeapon_DefaultDeploy,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Return type: int
|
||||||
|
* Params: (const this, iClipSize, iAnim, Float:fDelay)
|
||||||
|
*/
|
||||||
|
RG_CBasePlayerWeapon_DefaultReload,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Return type: bool
|
||||||
|
* Params: (const this, iAnim, iStartAnim, Float:fDelay, Float:fStartDelay, const pszReloadSound1[], const pszReloadSound2[])
|
||||||
|
*/
|
||||||
|
RG_CBasePlayerWeapon_DefaultShotgunReload,
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GamedllFunc CSGameRules
|
* GamedllFunc CSGameRules
|
||||||
*/
|
*/
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
#include <API/CSInterfaces.h>
|
#include <API/CSInterfaces.h>
|
||||||
|
|
||||||
#define REGAMEDLL_API_VERSION_MAJOR 5
|
#define REGAMEDLL_API_VERSION_MAJOR 5
|
||||||
#define REGAMEDLL_API_VERSION_MINOR 11
|
#define REGAMEDLL_API_VERSION_MINOR 12
|
||||||
|
|
||||||
// CBasePlayer::Spawn hook
|
// CBasePlayer::Spawn hook
|
||||||
typedef IHookChainClass<void, class CBasePlayer> IReGameHook_CBasePlayer_Spawn;
|
typedef IHookChainClass<void, class CBasePlayer> IReGameHook_CBasePlayer_Spawn;
|
||||||
@ -444,6 +444,22 @@ typedef IHookChainRegistryClass<bool, class CBasePlayer, const char *, float, bo
|
|||||||
typedef IHookChainClass<void, class CBasePlayer> IReGameHook_CBasePlayer_UseEmpty;
|
typedef IHookChainClass<void, class CBasePlayer> IReGameHook_CBasePlayer_UseEmpty;
|
||||||
typedef IHookChainRegistryClass<void, class CBasePlayer> IReGameHookRegistry_CBasePlayer_UseEmpty;
|
typedef IHookChainRegistryClass<void, class CBasePlayer> IReGameHookRegistry_CBasePlayer_UseEmpty;
|
||||||
|
|
||||||
|
// CBasePlayerWeapon::CanDeploy hook
|
||||||
|
typedef IHookChainClass<BOOL, class CBasePlayerWeapon> IReGameHook_CBasePlayerWeapon_CanDeploy;
|
||||||
|
typedef IHookChainRegistryClass<BOOL, class CBasePlayerWeapon> IReGameHookRegistry_CBasePlayerWeapon_CanDeploy;
|
||||||
|
|
||||||
|
// CBasePlayerWeapon::DefaultDeploy hook
|
||||||
|
typedef IHookChainClass<BOOL, class CBasePlayerWeapon, char *, char *, int, char *, int> IReGameHook_CBasePlayerWeapon_DefaultDeploy;
|
||||||
|
typedef IHookChainRegistryClass<BOOL, class CBasePlayerWeapon, char *, char *, int, char *, int> IReGameHookRegistry_CBasePlayerWeapon_DefaultDeploy;
|
||||||
|
|
||||||
|
// CBasePlayerWeapon::DefaultReload hook
|
||||||
|
typedef IHookChainClass<int, class CBasePlayerWeapon, int, int, float> IReGameHook_CBasePlayerWeapon_DefaultReload;
|
||||||
|
typedef IHookChainRegistryClass<int, class CBasePlayerWeapon, int, int, float> IReGameHookRegistry_CBasePlayerWeapon_DefaultReload;
|
||||||
|
|
||||||
|
// CBasePlayerWeapon::DefaultShotgunReload hook
|
||||||
|
typedef IHookChainClass<bool, class CBasePlayerWeapon, int, int, float, float, const char *, const char *> IReGameHook_CBasePlayerWeapon_DefaultShotgunReload;
|
||||||
|
typedef IHookChainRegistryClass<bool, class CBasePlayerWeapon, int, int, float, float, const char *, const char *> IReGameHookRegistry_CBasePlayerWeapon_DefaultShotgunReload;
|
||||||
|
|
||||||
class IReGameHookchains {
|
class IReGameHookchains {
|
||||||
public:
|
public:
|
||||||
virtual ~IReGameHookchains() {}
|
virtual ~IReGameHookchains() {}
|
||||||
@ -554,6 +570,10 @@ public:
|
|||||||
virtual IReGameHookRegistry_IsPenetrableEntity *IsPenetrableEntity() = 0;
|
virtual IReGameHookRegistry_IsPenetrableEntity *IsPenetrableEntity() = 0;
|
||||||
virtual IReGameHookRegistry_CBasePlayer_HintMessageEx *CBasePlayer_HintMessageEx() = 0;
|
virtual IReGameHookRegistry_CBasePlayer_HintMessageEx *CBasePlayer_HintMessageEx() = 0;
|
||||||
virtual IReGameHookRegistry_CBasePlayer_UseEmpty *CBasePlayer_UseEmpty() = 0;
|
virtual IReGameHookRegistry_CBasePlayer_UseEmpty *CBasePlayer_UseEmpty() = 0;
|
||||||
|
virtual IReGameHookRegistry_CBasePlayerWeapon_CanDeploy *CBasePlayerWeapon_CanDeploy() = 0;
|
||||||
|
virtual IReGameHookRegistry_CBasePlayerWeapon_DefaultDeploy *CBasePlayerWeapon_DefaultDeploy() = 0;
|
||||||
|
virtual IReGameHookRegistry_CBasePlayerWeapon_DefaultReload *CBasePlayerWeapon_DefaultReload() = 0;
|
||||||
|
virtual IReGameHookRegistry_CBasePlayerWeapon_DefaultShotgunReload *CBasePlayerWeapon_DefaultShotgunReload() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ReGameFuncs_t {
|
struct ReGameFuncs_t {
|
||||||
|
@ -562,6 +562,46 @@ void CBaseAnimating_ResetSequenceInfo(IReGameHook_CBaseAnimating_ResetSequenceIn
|
|||||||
callVoidForward(RG_CBaseAnimating_ResetSequenceInfo, original, indexOfEdict(pthis->pev));
|
callVoidForward(RG_CBaseAnimating_ResetSequenceInfo, original, indexOfEdict(pthis->pev));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOL CBasePlayerWeapon_CanDeploy(IReGameHook_CBasePlayerWeapon_CanDeploy *chain, CBasePlayerWeapon *pthis)
|
||||||
|
{
|
||||||
|
auto original = [chain](int _pthis)
|
||||||
|
{
|
||||||
|
return chain->callNext(getPrivate<CBasePlayerWeapon>(_pthis));
|
||||||
|
};
|
||||||
|
|
||||||
|
return callForward<BOOL>(RG_CBasePlayerWeapon_CanDeploy, original, indexOfEdict(pthis->pev));
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CBasePlayerWeapon_DefaultDeploy(IReGameHook_CBasePlayerWeapon_DefaultDeploy *chain, CBasePlayerWeapon *pthis, char *szViewModel, char *szWeaponModel, int iAnim, char *szAnimExt, int skiplocal)
|
||||||
|
{
|
||||||
|
auto original = [chain](int _pthis, char *_szViewModel, char *_szWeaponModel, int _iAnim, char *_szAnimExt, int _skiplocal)
|
||||||
|
{
|
||||||
|
return chain->callNext(getPrivate<CBasePlayerWeapon>(_pthis), _szViewModel, _szWeaponModel, _iAnim, _szAnimExt, _skiplocal);
|
||||||
|
};
|
||||||
|
|
||||||
|
return callForward<BOOL>(RG_CBasePlayerWeapon_DefaultDeploy, original, indexOfEdict(pthis->pev), szViewModel, szWeaponModel, iAnim, szAnimExt, skiplocal);
|
||||||
|
}
|
||||||
|
|
||||||
|
int CBasePlayerWeapon_DefaultReload(IReGameHook_CBasePlayerWeapon_DefaultReload *chain, CBasePlayerWeapon *pthis, int iClipSize, int iAnim, float fDelay)
|
||||||
|
{
|
||||||
|
auto original = [chain](int _pthis, int _iClipSize, int _iAnim, float _fDelay)
|
||||||
|
{
|
||||||
|
return chain->callNext(getPrivate<CBasePlayerWeapon>(_pthis), _iClipSize, _iAnim, _fDelay);
|
||||||
|
};
|
||||||
|
|
||||||
|
return callForward<int>(RG_CBasePlayerWeapon_DefaultReload, original, indexOfEdict(pthis->pev), iClipSize, iAnim, fDelay);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CBasePlayerWeapon_DefaultShotgunReload(IReGameHook_CBasePlayerWeapon_DefaultShotgunReload *chain, CBasePlayerWeapon *pthis, int iAnim, int iStartAnim, float fDelay, float fStartDelay, const char *pszReloadSound1, const char *pszReloadSound2)
|
||||||
|
{
|
||||||
|
auto original = [chain](int _pthis, int _iAnim, int _iStartAnim, float _fDelay, float _fStartDelay, const char *_pszReloadSound1, const char *_pszReloadSound2)
|
||||||
|
{
|
||||||
|
return chain->callNext(getPrivate<CBasePlayerWeapon>(_pthis), _iAnim, _iStartAnim, _fDelay, _fStartDelay, _pszReloadSound1, _pszReloadSound2);
|
||||||
|
};
|
||||||
|
|
||||||
|
return callForward<int>(RG_CBasePlayerWeapon_DefaultShotgunReload, original, indexOfEdict(pthis->pev), iAnim, iStartAnim, fDelay, fStartDelay, pszReloadSound1, pszReloadSound2);
|
||||||
|
}
|
||||||
|
|
||||||
int GetForceCamera(IReGameHook_GetForceCamera *chain, CBasePlayer *pObserver)
|
int GetForceCamera(IReGameHook_GetForceCamera *chain, CBasePlayer *pObserver)
|
||||||
{
|
{
|
||||||
auto original = [chain](int _pObserver)
|
auto original = [chain](int _pObserver)
|
||||||
|
@ -392,6 +392,11 @@ void CBasePlayer_UseEmpty(IReGameHook_CBasePlayer_UseEmpty *chain, CBasePlayer *
|
|||||||
|
|
||||||
void CBaseAnimating_ResetSequenceInfo(IReGameHook_CBaseAnimating_ResetSequenceInfo *chain, CBaseAnimating *pthis);
|
void CBaseAnimating_ResetSequenceInfo(IReGameHook_CBaseAnimating_ResetSequenceInfo *chain, CBaseAnimating *pthis);
|
||||||
|
|
||||||
|
BOOL CBasePlayerWeapon_CanDeploy(IReGameHook_CBasePlayerWeapon_CanDeploy *chain, CBasePlayerWeapon *pthis);
|
||||||
|
BOOL CBasePlayerWeapon_DefaultDeploy(IReGameHook_CBasePlayerWeapon_DefaultDeploy *chain, CBasePlayerWeapon *pthis, char *szViewModel, char *szWeaponModel, int iAnim, char *szAnimExt, int skiplocal);
|
||||||
|
int CBasePlayerWeapon_DefaultReload(IReGameHook_CBasePlayerWeapon_DefaultReload *chain, CBasePlayerWeapon *pthis, int iClipSize, int iAnim, float fDelay);
|
||||||
|
bool CBasePlayerWeapon_DefaultShotgunReload(IReGameHook_CBasePlayerWeapon_DefaultShotgunReload *chain, CBasePlayerWeapon *pthis, int iAnim, int iStartAnim, float fDelay, float fStartDelay, const char *pszReloadSound1, const char *pszReloadSound2);
|
||||||
|
|
||||||
BOOL CSGameRules_FShouldSwitchWeapon(IReGameHook_CSGameRules_FShouldSwitchWeapon *chain, CBasePlayer *pPlayer, CBasePlayerItem *pWeapon);
|
BOOL CSGameRules_FShouldSwitchWeapon(IReGameHook_CSGameRules_FShouldSwitchWeapon *chain, CBasePlayer *pPlayer, CBasePlayerItem *pWeapon);
|
||||||
BOOL CSGameRules_GetNextBestWeapon(IReGameHook_CSGameRules_GetNextBestWeapon *chain, CBasePlayer *pPlayer, CBasePlayerItem *pCurrentWeapon);
|
BOOL CSGameRules_GetNextBestWeapon(IReGameHook_CSGameRules_GetNextBestWeapon *chain, CBasePlayer *pPlayer, CBasePlayerItem *pCurrentWeapon);
|
||||||
float CSGameRules_FlPlayerFallDamage(IReGameHook_CSGameRules_FlPlayerFallDamage *chain, CBasePlayer *pPlayer);
|
float CSGameRules_FlPlayerFallDamage(IReGameHook_CSGameRules_FlPlayerFallDamage *chain, CBasePlayer *pPlayer);
|
||||||
|
@ -197,6 +197,13 @@ hook_t hooklist_weaponbox[] = {
|
|||||||
DLL(CWeaponBox_SetModel),
|
DLL(CWeaponBox_SetModel),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
hook_t hooklist_weapon[] = {
|
||||||
|
DLL(CBasePlayerWeapon_CanDeploy),
|
||||||
|
DLL(CBasePlayerWeapon_DefaultDeploy),
|
||||||
|
DLL(CBasePlayerWeapon_DefaultReload),
|
||||||
|
DLL(CBasePlayerWeapon_DefaultShotgunReload),
|
||||||
|
};
|
||||||
|
|
||||||
#define RCHECK(h,...) { {}, {}, #h, "ReChecker", [](){ return api_cfg.hasRechecker(); }, ((!(RC_##h & (MAX_REGION_RANGE - 1)) ? regfunc::current_cell = 1, true : false) || (RC_##h & (MAX_REGION_RANGE - 1)) == regfunc::current_cell++) ? regfunc(h##__VA_ARGS__) : regfunc(#h#__VA_ARGS__), [](){ g_RecheckerHookchains->h()->registerHook(&h); }, [](){ g_RecheckerHookchains->h()->unregisterHook(&h); }}
|
#define RCHECK(h,...) { {}, {}, #h, "ReChecker", [](){ return api_cfg.hasRechecker(); }, ((!(RC_##h & (MAX_REGION_RANGE - 1)) ? regfunc::current_cell = 1, true : false) || (RC_##h & (MAX_REGION_RANGE - 1)) == regfunc::current_cell++) ? regfunc(h##__VA_ARGS__) : regfunc(#h#__VA_ARGS__), [](){ g_RecheckerHookchains->h()->registerHook(&h); }, [](){ g_RecheckerHookchains->h()->unregisterHook(&h); }}
|
||||||
hook_t hooklist_rechecker[] = {
|
hook_t hooklist_rechecker[] = {
|
||||||
RCHECK(FileConsistencyProcess, _AMXX),
|
RCHECK(FileConsistencyProcess, _AMXX),
|
||||||
@ -220,6 +227,7 @@ hook_t* hooklist_t::getHookSafe(size_t hook)
|
|||||||
CASE(rechecker)
|
CASE(rechecker)
|
||||||
CASE(grenade)
|
CASE(grenade)
|
||||||
CASE(weaponbox)
|
CASE(weaponbox)
|
||||||
|
CASE(weapon)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
@ -237,6 +245,7 @@ void hooklist_t::clear()
|
|||||||
FOREACH_CLEAR(rechecker);
|
FOREACH_CLEAR(rechecker);
|
||||||
FOREACH_CLEAR(grenade);
|
FOREACH_CLEAR(grenade);
|
||||||
FOREACH_CLEAR(weaponbox);
|
FOREACH_CLEAR(weaponbox);
|
||||||
|
FOREACH_CLEAR(weapon);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hook_t::clear()
|
void hook_t::clear()
|
||||||
|
@ -33,6 +33,7 @@ extern hook_t hooklist_gamerules[];
|
|||||||
extern hook_t hooklist_rechecker[];
|
extern hook_t hooklist_rechecker[];
|
||||||
extern hook_t hooklist_grenade[];
|
extern hook_t hooklist_grenade[];
|
||||||
extern hook_t hooklist_weaponbox[];
|
extern hook_t hooklist_weaponbox[];
|
||||||
|
extern hook_t hooklist_weapon[];
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
@ -57,6 +58,7 @@ struct hooklist_t
|
|||||||
CASE(rechecker)
|
CASE(rechecker)
|
||||||
CASE(grenade)
|
CASE(grenade)
|
||||||
CASE(weaponbox)
|
CASE(weaponbox)
|
||||||
|
CASE(weapon)
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef CASE
|
#undef CASE
|
||||||
@ -76,7 +78,8 @@ struct hooklist_t
|
|||||||
ht_gamerules,
|
ht_gamerules,
|
||||||
ht_rechecker,
|
ht_rechecker,
|
||||||
ht_grenade,
|
ht_grenade,
|
||||||
ht_weaponbox
|
ht_weaponbox,
|
||||||
|
ht_weapon
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -200,6 +203,16 @@ enum GamedllFunc_CWeaponBox
|
|||||||
// [...]
|
// [...]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum GamedllFunc_CBasePlayerWeapon
|
||||||
|
{
|
||||||
|
RG_CBasePlayerWeapon_CanDeploy = BEGIN_FUNC_REGION(weapon),
|
||||||
|
RG_CBasePlayerWeapon_DefaultDeploy,
|
||||||
|
RG_CBasePlayerWeapon_DefaultReload,
|
||||||
|
RG_CBasePlayerWeapon_DefaultShotgunReload,
|
||||||
|
|
||||||
|
// [...]
|
||||||
|
};
|
||||||
|
|
||||||
enum GamedllFunc_CSGameRules
|
enum GamedllFunc_CSGameRules
|
||||||
{
|
{
|
||||||
// CSGameRules virtual
|
// CSGameRules virtual
|
||||||
|
Loading…
x
Reference in New Issue
Block a user