Skip to content

Commit 5b582d4

Browse files
authored
Implement SendSayMessage hook (#378)
* Implement SendSayMessage hook
1 parent 1d18ddb commit 5b582d4

6 files changed

Lines changed: 28 additions & 2 deletions

File tree

reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -487,6 +487,12 @@ enum GamedllFunc
487487
* Params: (const pPlayer, iSlot)
488488
*/
489489
RG_BuyItem,
490+
491+
/*
492+
* Description: Called when player says a message in server chat
493+
* Params: (const pPlayer, const szCmd[], bool:teamonly, const szText[], const pszFormat[], const pszConsoleFormat[], bool:bSenderDead, const placeName[], bool:consoleUsesPlaceName)
494+
*/
495+
RG_SendSayMessage,
490496
};
491497

492498
/**

reapi/include/cssdk/dlls/regamedll_api.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -638,6 +638,10 @@ typedef IHookChainRegistryClass<void, class CBasePlayer> IReGameHookRegistry_CBa
638638
typedef IHookChainClass<void, class CBasePlayer, class CBasePlayer *, float, float> IReGameHook_CBasePlayer_TakeDamageImpulse;
639639
typedef IHookChainRegistryClass<void, class CBasePlayer, class CBasePlayer *, float, float> IReGameHookRegistry_CBasePlayer_TakeDamageImpulse;
640640

641+
// SendSayMessage hook
642+
typedef IHookChain<void, CBasePlayer *, const char *, BOOL, const char*, const char*, const char*, bool, const char*, bool> IReGameHook_SendSayMessage;
643+
typedef IHookChainRegistry<void, CBasePlayer *, const char *, BOOL, const char*, const char*, const char*, bool, const char*, bool> IReGameHookRegistry_SendSayMessage;
644+
641645
class IReGameHookchains {
642646
public:
643647
virtual ~IReGameHookchains() {}
@@ -800,8 +804,11 @@ class IReGameHookchains {
800804
virtual IReGameHookRegistry_CBasePlayer_PlayerDeathThink *CBasePlayer_PlayerDeathThink() = 0;
801805
virtual IReGameHookRegistry_CBasePlayer_Observer_Think *CBasePlayer_Observer_Think() = 0;
802806
virtual IReGameHookRegistry_CBasePlayer_RemoveAllItems *CBasePlayer_RemoveAllItems() = 0;
807+
803808
virtual IReGameHookRegistry_CBasePlayer_UpdateStatusBar *CBasePlayer_UpdateStatusBar() = 0;
804809
virtual IReGameHookRegistry_CBasePlayer_TakeDamageImpulse *CBasePlayer_TakeDamageImpulse() = 0;
810+
811+
virtual IReGameHookRegistry_SendSayMessage *SendSayMessage() = 0;
805812
};
806813

807814
struct ReGameFuncs_t {

reapi/src/hook_callback.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1772,7 +1772,7 @@ void CBasePlayer_UpdateStatusBar(IReGameHook_CBasePlayer_UpdateStatusBar *chain,
17721772
{
17731773
chain->callNext(getPrivate<CBasePlayer>(_pthis));
17741774
};
1775-
1775+
17761776
callVoidForward(RG_CBasePlayer_UpdateStatusBar, original, indexOfEdict(pthis->pev));
17771777
}
17781778

@@ -1782,10 +1782,20 @@ void CBasePlayer_TakeDamageImpulse(IReGameHook_CBasePlayer_TakeDamageImpulse *ch
17821782
{
17831783
chain->callNext(getPrivate<CBasePlayer>(_pthis), getPrivate<CBasePlayer>(_pAttacker), _flKnockbackForce, _flVelModifier);
17841784
};
1785-
1785+
17861786
callVoidForward(RG_CBasePlayer_TakeDamageImpulse, original, indexOfEdict(pthis->pev), indexOfEdict(pAttacker->pev), flKnockbackForce, flVelModifier);
17871787
}
17881788

1789+
void SendSayMessage(IReGameHook_SendSayMessage *chain, CBasePlayer *pPlayer, const char *pszCmd, BOOL teamonly, const char *pszText, const char *pszFormat, const char *pszConsoleFormat, bool bSenderDead, const char *placeName, bool consoleUsesPlaceName)
1790+
{
1791+
auto original = [chain](int _pPlayer, const char *_pszCmd, BOOL _teamonly, const char *_pszText, const char *_pszFormat, const char *_pszConsoleFormat, bool _bSenderDead, const char *_placeName, bool _consoleUsesPlaceName)
1792+
{
1793+
chain->callNext(getPrivate<CBasePlayer>(_pPlayer), _pszCmd, _teamonly, _pszText, _pszFormat, _pszConsoleFormat, _bSenderDead, _placeName, _consoleUsesPlaceName);
1794+
};
1795+
1796+
callVoidForward(RG_SendSayMessage, original, indexOfEdict(pPlayer->pev), pszCmd, teamonly, pszText, pszFormat, pszConsoleFormat, bSenderDead, placeName, consoleUsesPlaceName);
1797+
}
1798+
17891799
/*
17901800
* VTC functions
17911801
*/

reapi/src/hook_callback.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,7 @@ void CBasePlayer_RemoveAllItems(IReGameHook_CBasePlayer_RemoveAllItems *chain, C
576576
void CSGameRules_SendDeathMessage(IReGameHook_CSGameRules_SendDeathMessage *chain, CBaseEntity *pKiller, CBasePlayer *pVictim, CBasePlayer *pAssister, entvars_t *pevInflictor, const char *killerWeaponName, int iDeathMessageFlags, int iRarityOfKill);
577577
void CBasePlayer_UpdateStatusBar(IReGameHook_CBasePlayer_UpdateStatusBar *chain, CBasePlayer *pthis);
578578
void CBasePlayer_TakeDamageImpulse(IReGameHook_CBasePlayer_TakeDamageImpulse *chain, CBasePlayer *pthis, CBasePlayer *pAttacker, float flKnockbackForce, float flVelModifier);
579+
void SendSayMessage(IReGameHook_SendSayMessage *chain, CBasePlayer *pPlayer, const char *pszCmd, BOOL teamonly, const char *pszText, const char *pszFormat, const char *pszConsoleFormat, bool bSenderDead, const char *placeName, bool consoleUsesPlaceName);
579580

580581
/*
581582
* VTC functions

reapi/src/hook_list.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ hook_t hooklist_gamedll[] = {
145145
DLL(AddMultiDamage),
146146
DLL(ApplyMultiDamage),
147147
DLL(BuyItem),
148+
DLL(SendSayMessage),
148149
};
149150

150151
hook_t hooklist_animating[] = {

reapi/src/hook_list.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ enum GamedllFunc
161161
RG_AddMultiDamage,
162162
RG_ApplyMultiDamage,
163163
RG_BuyItem,
164+
RG_SendSayMessage,
164165

165166
// [...]
166167
};

0 commit comments

Comments
 (0)