mirror of
https://github.com/s1lentq/ReGameDLL_CS.git
synced 2025-01-28 06:28:04 +03:00
Merge pull request #283 from fl0werD/master
Add hookchain for checking entity penetration
This commit is contained in:
commit
76daeb77f6
@ -116,6 +116,7 @@ GAMEHOOK_REGISTRY(ShowVGUIMenu);
|
||||
GAMEHOOK_REGISTRY(BuyGunAmmo);
|
||||
GAMEHOOK_REGISTRY(BuyWeaponByWeaponID);
|
||||
GAMEHOOK_REGISTRY(InternalCommand);
|
||||
GAMEHOOK_REGISTRY(IsPenetrableEntity);
|
||||
|
||||
GAMEHOOK_REGISTRY(CSGameRules_FShouldSwitchWeapon);
|
||||
GAMEHOOK_REGISTRY(CSGameRules_GetNextBestWeapon);
|
||||
|
@ -361,6 +361,10 @@ typedef IHookChainRegistryImpl<CBaseEntity *, CBasePlayer *, WeaponIdType> CReGa
|
||||
typedef IHookChainImpl<void, edict_t *, const char *, const char *> CReGameHook_InternalCommand;
|
||||
typedef IHookChainRegistryImpl<void, edict_t *, const char *, const char *> CReGameHookRegistry_InternalCommand;
|
||||
|
||||
// IsPenetrableEntity hook
|
||||
typedef IHookChainImpl<bool, Vector &, Vector &, entvars_t *, edict_t *> CReGameHook_IsPenetrableEntity;
|
||||
typedef IHookChainRegistryImpl<bool, Vector &, Vector &, entvars_t *, edict_t *> CReGameHookRegistry_IsPenetrableEntity;
|
||||
|
||||
// CHalfLifeMultiplay::FShouldSwitchWeapon hook
|
||||
typedef IHookChainClassImpl<BOOL, class CHalfLifeMultiplay, CBasePlayer *, CBasePlayerItem *> CReGameHook_CSGameRules_FShouldSwitchWeapon;
|
||||
typedef IHookChainRegistryClassEmptyImpl<BOOL, class CHalfLifeMultiplay, CBasePlayer *, CBasePlayerItem *> CReGameHookRegistry_CSGameRules_FShouldSwitchWeapon;
|
||||
@ -591,6 +595,7 @@ public:
|
||||
CReGameHookRegistry_BuyGunAmmo m_BuyGunAmmo;
|
||||
CReGameHookRegistry_BuyWeaponByWeaponID m_BuyWeaponByWeaponID;
|
||||
CReGameHookRegistry_InternalCommand m_InternalCommand;
|
||||
CReGameHookRegistry_IsPenetrableEntity m_IsPenetrableEntity;
|
||||
|
||||
CReGameHookRegistry_CSGameRules_FShouldSwitchWeapon m_CSGameRules_FShouldSwitchWeapon;
|
||||
CReGameHookRegistry_CSGameRules_GetNextBestWeapon m_CSGameRules_GetNextBestWeapon;
|
||||
@ -695,7 +700,8 @@ public:
|
||||
virtual IReGameHookRegistry_BuyGunAmmo *BuyGunAmmo();
|
||||
virtual IReGameHookRegistry_BuyWeaponByWeaponID *BuyWeaponByWeaponID();
|
||||
virtual IReGameHookRegistry_InternalCommand *InternalCommand();
|
||||
|
||||
virtual IReGameHookRegistry_IsPenetrableEntity *IsPenetrableEntity();
|
||||
|
||||
virtual IReGameHookRegistry_CSGameRules_FShouldSwitchWeapon *CSGameRules_FShouldSwitchWeapon();
|
||||
virtual IReGameHookRegistry_CSGameRules_GetNextBestWeapon *CSGameRules_GetNextBestWeapon();
|
||||
virtual IReGameHookRegistry_CSGameRules_FlPlayerFallDamage *CSGameRules_FlPlayerFallDamage();
|
||||
|
@ -1131,6 +1131,11 @@ void CBaseEntity::FireBullets(ULONG cShots, Vector vecSrc, Vector vecDirShooting
|
||||
ApplyMultiDamage(pev, pevAttacker);
|
||||
}
|
||||
|
||||
bool EXT_FUNC IsPenetrableEntity_default(Vector &vecSrc, Vector &vecEnd, entvars_t *pevAttacker, edict_t *pHit)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// Go to the trouble of combining multiple pellets into a single damage call.
|
||||
// This version is used by Players, uses the random seed generator to sync client and server side shots.
|
||||
Vector CBaseEntity::FireBullets3(Vector vecSrc, Vector vecDirShooting, float vecSpread, float flDistance, int iPenetration, int iBulletType, int iDamage, float flRangeModifier, entvars_t *pevAttacker, bool bPistol, int shared_rand)
|
||||
@ -1295,6 +1300,11 @@ Vector CBaseEntity::FireBullets3(Vector vecSrc, Vector vecDirShooting, float vec
|
||||
iPenetration = 0;
|
||||
}
|
||||
|
||||
bool bIsPenatrable = g_ReGameHookchains.m_IsPenetrableEntity.callChain(IsPenetrableEntity_default, vecSrc, tr.vecEndPos, pevAttacker, tr.pHit);
|
||||
|
||||
if (!bIsPenatrable)
|
||||
iPenetration = 0;
|
||||
|
||||
if (tr.iHitgroup == HITGROUP_SHIELD)
|
||||
{
|
||||
EMIT_SOUND(pEntity->edict(), CHAN_VOICE, (RANDOM_LONG(0, 1) == 1) ? "weapons/ric_metal-1.wav" : "weapons/ric_metal-2.wav", VOL_NORM, ATTN_NORM);
|
||||
|
@ -38,7 +38,7 @@
|
||||
#include <API/CSInterfaces.h>
|
||||
|
||||
#define REGAMEDLL_API_VERSION_MAJOR 5
|
||||
#define REGAMEDLL_API_VERSION_MINOR 7
|
||||
#define REGAMEDLL_API_VERSION_MINOR 8
|
||||
|
||||
// CBasePlayer::Spawn hook
|
||||
typedef IHookChainClass<void, class CBasePlayer> IReGameHook_CBasePlayer_Spawn;
|
||||
@ -264,6 +264,10 @@ typedef IHookChainRegistry<class CBaseEntity *, class CBasePlayer *, WeaponIdTyp
|
||||
typedef IHookChain<void, edict_t *, const char *, const char *> IReGameHook_InternalCommand;
|
||||
typedef IHookChainRegistry<void, edict_t *, const char *, const char *> IReGameHookRegistry_InternalCommand;
|
||||
|
||||
// IsPenetrableEntity hook
|
||||
typedef IHookChain<bool, Vector &, Vector &, entvars_t *, edict_t *> IReGameHook_IsPenetrableEntity;
|
||||
typedef IHookChainRegistry<bool, Vector &, Vector &, entvars_t *, edict_t *> IReGameHookRegistry_IsPenetrableEntity;
|
||||
|
||||
// CHalfLifeMultiplay::FShouldSwitchWeapon hook
|
||||
typedef IHookChain<BOOL, class CBasePlayer *, class CBasePlayerItem *> IReGameHook_CSGameRules_FShouldSwitchWeapon;
|
||||
typedef IHookChainRegistry<BOOL, class CBasePlayer *, class CBasePlayerItem *> IReGameHookRegistry_CSGameRules_FShouldSwitchWeapon;
|
||||
@ -496,6 +500,7 @@ public:
|
||||
virtual IReGameHookRegistry_BuyGunAmmo *BuyGunAmmo() = 0;
|
||||
virtual IReGameHookRegistry_BuyWeaponByWeaponID *BuyWeaponByWeaponID() = 0;
|
||||
virtual IReGameHookRegistry_InternalCommand *InternalCommand() = 0;
|
||||
virtual IReGameHookRegistry_IsPenetrableEntity *IsPenetrableEntity() = 0;
|
||||
|
||||
virtual IReGameHookRegistry_CSGameRules_FShouldSwitchWeapon *CSGameRules_FShouldSwitchWeapon() = 0;
|
||||
virtual IReGameHookRegistry_CSGameRules_GetNextBestWeapon *CSGameRules_GetNextBestWeapon() = 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user