2
0
mirror of https://github.com/rehlds/reapi.git synced 2025-01-29 06:57:55 +03:00

Add hookchain and getter/setter for spawn protection

Add hookchain for IsPenetrableEntity
This commit is contained in:
fl0wer 2018-04-10 22:51:00 +03:00 committed by Asmodai
parent b0026f3c34
commit 8996519b6e
9 changed files with 79 additions and 4 deletions

View File

@ -1,3 +1,3 @@
majorVersion=5 majorVersion=5
minorVersion=5 minorVersion=6
maintenanceVersion=0 maintenanceVersion=0

View File

@ -372,7 +372,14 @@ enum GamedllFunc
* Return type: CGrenade * (Entity index of bomb) * Return type: CGrenade * (Entity index of bomb)
* Params: (const index, Float:vecStart[3], Float:vecVelocity[3]) * Params: (const index, Float:vecStart[3], Float:vecVelocity[3])
*/ */
RG_PlantBomb RG_PlantBomb,
/*
* Description: Called when a player hit to entity.
* Return type: bool
* Params: (Float:vecSrc[3], Float:vecEnd[3], index, entity)
*/
RG_IsPenetrableEntity,
}; };
/** /**
@ -724,6 +731,20 @@ enum GamedllFunc_CBasePlayer
* Params: (const this, const grenade, Float:vecSrc[3], Float:vecThrow[3], Float:time, const usEvent) * Params: (const this, const grenade, Float:vecSrc[3], Float:vecThrow[3], Float:time, const usEvent)
*/ */
RG_CBasePlayer_ThrowGrenade, RG_CBasePlayer_ThrowGrenade,
/*
* Description: Called when a player's set protection.
* Return type: void
* Params: (const this, Float:time)
*/
RG_CBasePlayer_SetSpawnProtection,
/*
* Description: Called when a player's remove protection.
* Return type: void
* Params: (const this)
*/
RG_CBasePlayer_RemoveSpawnProtection,
}; };
/** /**
@ -4371,6 +4392,14 @@ enum CCSPlayer_Members
* Set params: set_member(index, member, Float:value); * Set params: set_member(index, member, Float:value);
*/ */
m_flRespawnPending, m_flRespawnPending,
/*
* Description: -
* Member type: float
* Get params: Float:get_member(index, member);
* Set params: set_member(index, member, Float:value);
*/
m_flSpawnProtectionEndTime,
}; };
/** /**

View File

@ -33,7 +33,7 @@
class CCSPlayer: public CCSMonster { class CCSPlayer: public CCSMonster {
public: public:
CCSPlayer() : m_bForceShowMenu(false), m_flRespawnPending(0) CCSPlayer() : m_bForceShowMenu(false), m_flRespawnPending(0), m_flSpawnProtectionEndTime(0)
{ {
m_szModel[0] = '\0'; m_szModel[0] = '\0';
} }
@ -80,6 +80,8 @@ public:
virtual void ResetSequenceInfo(); virtual void ResetSequenceInfo();
virtual void StartDeathCam(); virtual void StartDeathCam();
virtual bool RemovePlayerItemEx(const char* pszItemName, bool bRemoveAmmo); virtual bool RemovePlayerItemEx(const char* pszItemName, bool bRemoveAmmo);
virtual void SetSpawnProtection(float flProtectionTime);
virtual void RemoveSpawnProtection();
CBasePlayer *BasePlayer() const; CBasePlayer *BasePlayer() const;
@ -87,6 +89,7 @@ public:
char m_szModel[32]; char m_szModel[32];
bool m_bForceShowMenu; bool m_bForceShowMenu;
float m_flRespawnPending; float m_flRespawnPending;
float m_flSpawnProtectionEndTime;
}; };
// Inlines // Inlines

View File

@ -512,6 +512,26 @@ CGrenade *CBasePlayer_ThrowGrenade(IReGameHook_CBasePlayer_ThrowGrenade *chain,
return getPrivate<CGrenade>(callForward<size_t>(RG_CBasePlayer_ThrowGrenade, original, indexOfEdict(pthis->pev), indexOfEdict(pWeapon->pev), getAmxVector(vecSrcCopy), getAmxVector(vecThrowCopy), time, usEvent)); return getPrivate<CGrenade>(callForward<size_t>(RG_CBasePlayer_ThrowGrenade, original, indexOfEdict(pthis->pev), indexOfEdict(pWeapon->pev), getAmxVector(vecSrcCopy), getAmxVector(vecThrowCopy), time, usEvent));
} }
void CBasePlayer_SetSpawnProtection(IReGameHook_CBasePlayer_SetSpawnProtection *chain, CBasePlayer *pthis, float flProtectionTime)
{
auto original = [chain](int _pthis, float _flProtectionTime)
{
return chain->callNext(getPrivate<CBasePlayer>(_pthis), _flProtectionTime);
};
callVoidForward(RG_CBasePlayer_SetSpawnProtection, original, indexOfEdict(pthis->pev), flProtectionTime);
}
void CBasePlayer_RemoveSpawnProtection(IReGameHook_CBasePlayer_RemoveSpawnProtection *chain, CBasePlayer *pthis)
{
auto original = [chain](int _pthis)
{
return chain->callNext(getPrivate<CBasePlayer>(_pthis));
};
callVoidForward(RG_CBasePlayer_RemoveSpawnProtection, original, indexOfEdict(pthis->pev));
}
void CBaseAnimating_ResetSequenceInfo(IReGameHook_CBaseAnimating_ResetSequenceInfo *chain, CBaseAnimating *pthis) void CBaseAnimating_ResetSequenceInfo(IReGameHook_CBaseAnimating_ResetSequenceInfo *chain, CBaseAnimating *pthis)
{ {
auto original = [chain](int _pthis) auto original = [chain](int _pthis)
@ -1004,6 +1024,18 @@ CGrenade *PlantBomb(IReGameHook_PlantBomb *chain, entvars_t *pevOwner, Vector &v
return getPrivate<CGrenade>(callForward<size_t>(RG_PlantBomb, original, indexOfEdict(pevOwner), getAmxVector(vecStartCopy), getAmxVector(vecVelocityCopy))); return getPrivate<CGrenade>(callForward<size_t>(RG_PlantBomb, original, indexOfEdict(pevOwner), getAmxVector(vecStartCopy), getAmxVector(vecVelocityCopy)));
} }
bool IsPenetrableEntity(IReGameHook_IsPenetrableEntity *chain, Vector &vecSrc, Vector &vecEnd, entvars_t *pevAttacker, edict_t *pHit)
{
Vector vecSrcCopy(vecSrc), vecEndCopy(vecEnd);
auto original = [chain, &vecSrcCopy, &vecEndCopy](cell _vecSrc, cell _vecEnd, int _pevAttacker, int _pHit)
{
return chain->callNext(vecSrcCopy, vecEndCopy, PEV(_pevAttacker), edictByIndexAmx(_pHit));
};
return callForward<bool>(RG_IsPenetrableEntity, original, getAmxVector(vecSrcCopy), getAmxVector(vecEndCopy), indexOfEdict(pevAttacker), indexOfEdict(pHit));
}
int g_iClientStartSpeak, g_iClientStopSpeak; int g_iClientStartSpeak, g_iClientStopSpeak;
void OnClientStartSpeak(size_t clientIndex) void OnClientStartSpeak(size_t clientIndex)

View File

@ -330,6 +330,7 @@ CGrenade *ThrowHeGrenade(IReGameHook_ThrowHeGrenade *chain, entvars_t *pevOwner,
CGrenade *ThrowFlashbang(IReGameHook_ThrowFlashbang *chain, entvars_t *pevOwner, Vector &vecStart, Vector &vecVelocity, float time); CGrenade *ThrowFlashbang(IReGameHook_ThrowFlashbang *chain, entvars_t *pevOwner, Vector &vecStart, Vector &vecVelocity, float time);
CGrenade *ThrowSmokeGrenade(IReGameHook_ThrowSmokeGrenade *chain, entvars_t *pevOwner, Vector &vecStart, Vector &vecVelocity, float time, unsigned short usEvent); CGrenade *ThrowSmokeGrenade(IReGameHook_ThrowSmokeGrenade *chain, entvars_t *pevOwner, Vector &vecStart, Vector &vecVelocity, float time, unsigned short usEvent);
CGrenade *PlantBomb(IReGameHook_PlantBomb *chain, entvars_t *pevOwner, Vector &vecStart, Vector &vecVelocity); CGrenade *PlantBomb(IReGameHook_PlantBomb *chain, entvars_t *pevOwner, Vector &vecStart, Vector &vecVelocity);
bool IsPenetrableEntity(IReGameHook_IsPenetrableEntity *chain, Vector &vecSrc, Vector &vecEnd, entvars_t *pevAttacker, edict_t *pHit);
// regamedll functions - player // regamedll functions - player
void CBasePlayer_Spawn(IReGameHook_CBasePlayer_Spawn *chain, CBasePlayer *pthis); void CBasePlayer_Spawn(IReGameHook_CBasePlayer_Spawn *chain, CBasePlayer *pthis);
@ -377,6 +378,8 @@ void CBasePlayer_StartDeathCam(IReGameHook_CBasePlayer_StartDeathCam *chain, CBa
void CBasePlayer_SwitchTeam(IReGameHook_CBasePlayer_SwitchTeam *chain, CBasePlayer *pthis); void CBasePlayer_SwitchTeam(IReGameHook_CBasePlayer_SwitchTeam *chain, CBasePlayer *pthis);
bool CBasePlayer_CanSwitchTeam(IReGameHook_CBasePlayer_CanSwitchTeam *chain, CBasePlayer *pthis, TeamName teamToSwap); bool CBasePlayer_CanSwitchTeam(IReGameHook_CBasePlayer_CanSwitchTeam *chain, CBasePlayer *pthis, TeamName teamToSwap);
CGrenade *CBasePlayer_ThrowGrenade(IReGameHook_CBasePlayer_ThrowGrenade *chain, CBasePlayer *pthis, CBasePlayerWeapon *pWeapon, Vector &vecSrc, Vector &vecThrow, float time, unsigned short usEvent); CGrenade *CBasePlayer_ThrowGrenade(IReGameHook_CBasePlayer_ThrowGrenade *chain, CBasePlayer *pthis, CBasePlayerWeapon *pWeapon, Vector &vecSrc, Vector &vecThrow, float time, unsigned short usEvent);
void CBasePlayer_SetSpawnProtection(IReGameHook_CBasePlayer_SetSpawnProtection *chain, CBasePlayer *pthis, float flProtectionTime);
void CBasePlayer_RemoveSpawnProtection(IReGameHook_CBasePlayer_RemoveSpawnProtection *chain, CBasePlayer *pthis);
void CBaseAnimating_ResetSequenceInfo(IReGameHook_CBaseAnimating_ResetSequenceInfo *chain, CBaseAnimating *pthis); void CBaseAnimating_ResetSequenceInfo(IReGameHook_CBaseAnimating_ResetSequenceInfo *chain, CBaseAnimating *pthis);

View File

@ -98,6 +98,7 @@ hook_t hooklist_gamedll[] = {
DLL(ThrowFlashbang), DLL(ThrowFlashbang),
DLL(ThrowSmokeGrenade), DLL(ThrowSmokeGrenade),
DLL(PlantBomb), DLL(PlantBomb),
DLL(IsPenetrableEntity),
}; };
hook_t hooklist_animating[] = { hook_t hooklist_animating[] = {
@ -150,6 +151,8 @@ hook_t hooklist_player[] = {
DLL(CBasePlayer_SwitchTeam), DLL(CBasePlayer_SwitchTeam),
DLL(CBasePlayer_CanSwitchTeam), DLL(CBasePlayer_CanSwitchTeam),
DLL(CBasePlayer_ThrowGrenade), DLL(CBasePlayer_ThrowGrenade),
DLL(CBasePlayer_SetSpawnProtection),
DLL(CBasePlayer_RemoveSpawnProtection),
}; };
hook_t hooklist_gamerules[] = { hook_t hooklist_gamerules[] = {

View File

@ -111,7 +111,8 @@ enum GamedllFunc
RG_ThrowHeGrenade, RG_ThrowHeGrenade,
RG_ThrowFlashbang, RG_ThrowFlashbang,
RG_ThrowSmokeGrenade, RG_ThrowSmokeGrenade,
RG_PlantBomb RG_PlantBomb,
RG_IsPenetrableEntity,
// [...] // [...]
}; };
@ -172,6 +173,8 @@ enum GamedllFunc_CBasePlayer
RG_CBasePlayer_SwitchTeam, RG_CBasePlayer_SwitchTeam,
RG_CBasePlayer_CanSwitchTeam, RG_CBasePlayer_CanSwitchTeam,
RG_CBasePlayer_ThrowGrenade, RG_CBasePlayer_ThrowGrenade,
RG_CBasePlayer_SetSpawnProtection,
RG_CBasePlayer_RemoveSpawnProtection,
// [...] // [...]
}; };

View File

@ -727,6 +727,7 @@ member_t memberlist_csplayer[] = {
CSPL_MEMBERS(m_szModel), CSPL_MEMBERS(m_szModel),
CSPL_MEMBERS(m_bForceShowMenu), CSPL_MEMBERS(m_bForceShowMenu),
CSPL_MEMBERS(m_flRespawnPending), CSPL_MEMBERS(m_flRespawnPending),
CSPL_MEMBERS(m_flSpawnProtectionEndTime),
}; };
member_t memberlist_baseitem[] = { member_t memberlist_baseitem[] = {

View File

@ -735,6 +735,7 @@ enum CSPlayer_Members
m_szModel = BEGIN_MEMBER_REGION(csplayer), m_szModel = BEGIN_MEMBER_REGION(csplayer),
m_bForceShowMenu, m_bForceShowMenu,
m_flRespawnPending, m_flRespawnPending,
m_flSpawnProtectionEndTime,
}; };
enum CBasePlayerItem_Members enum CBasePlayerItem_Members