diff --git a/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc b/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc index 82749cb4..144f92b7 100644 --- a/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc +++ b/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc @@ -1272,6 +1272,12 @@ enum GamedllFunc_CSGameRules * Params: (const pKiller, const pVictim, const pAssister, const pevInflictor, const killerWeaponName[], const DeathMessageFlags:iDeathMessageFlags, const KillRarity:iRarityOfKill) */ RG_CSGameRules_SendDeathMessage, + + /* + * Description: Called when a player picks up an item. + * Params: (const pPlayer, const pItem) + */ + RG_CSGameRules_PlayerGotItem, }; /** diff --git a/reapi/include/cssdk/dlls/regamedll_api.h b/reapi/include/cssdk/dlls/regamedll_api.h index 62273fe6..2f3ca4cf 100644 --- a/reapi/include/cssdk/dlls/regamedll_api.h +++ b/reapi/include/cssdk/dlls/regamedll_api.h @@ -40,7 +40,7 @@ #include #define REGAMEDLL_API_VERSION_MAJOR 5 -#define REGAMEDLL_API_VERSION_MINOR 30 +#define REGAMEDLL_API_VERSION_MINOR 31 // CBasePlayer::Spawn hook typedef IHookChainClass IReGameHook_CBasePlayer_Spawn; @@ -638,6 +638,10 @@ typedef IHookChainRegistryClass IReGameHookRegistry_CBa typedef IHookChainClass IReGameHook_CBasePlayer_TakeDamageImpulse; typedef IHookChainRegistryClass IReGameHookRegistry_CBasePlayer_TakeDamageImpulse; +// CHalfLifeMultiplay::PlayerGotItem hook +typedef IHookChain IReGameHook_CSGameRules_PlayerGotItem; +typedef IHookChainRegistry IReGameHookRegistry_CSGameRules_PlayerGotItem; + class IReGameHookchains { public: virtual ~IReGameHookchains() {} @@ -802,6 +806,7 @@ class IReGameHookchains { virtual IReGameHookRegistry_CBasePlayer_RemoveAllItems *CBasePlayer_RemoveAllItems() = 0; virtual IReGameHookRegistry_CBasePlayer_UpdateStatusBar *CBasePlayer_UpdateStatusBar() = 0; virtual IReGameHookRegistry_CBasePlayer_TakeDamageImpulse *CBasePlayer_TakeDamageImpulse() = 0; + virtual IReGameHookRegistry_CSGameRules_PlayerGotItem *CSGameRules_PlayerGotItem() = 0; }; struct ReGameFuncs_t { diff --git a/reapi/src/hook_callback.cpp b/reapi/src/hook_callback.cpp index fdb723e4..91de718b 100644 --- a/reapi/src/hook_callback.cpp +++ b/reapi/src/hook_callback.cpp @@ -1786,6 +1786,16 @@ void CBasePlayer_TakeDamageImpulse(IReGameHook_CBasePlayer_TakeDamageImpulse *ch callVoidForward(RG_CBasePlayer_TakeDamageImpulse, original, indexOfEdict(pthis->pev), indexOfEdict(pAttacker->pev), flKnockbackForce, flVelModifier); } +void CSGameRules_PlayerGotItem(IReGameHook_CSGameRules_PlayerGotItem *chain, CBasePlayer *pPlayer, CItem *pItem) +{ + auto original = [chain](int _pPlayer, int _pItem) + { + chain->callNext(getPrivate(_pPlayer), getPrivate(_pItem)); + }; + + callVoidForward(RG_CSGameRules_PlayerGotItem, original, indexOfEdict(pPlayer->pev), indexOfEdict(pItem->pev)); +} + /* * VTC functions */ diff --git a/reapi/src/hook_callback.h b/reapi/src/hook_callback.h index 1065997a..dc2a42ed 100644 --- a/reapi/src/hook_callback.h +++ b/reapi/src/hook_callback.h @@ -576,6 +576,7 @@ void CBasePlayer_RemoveAllItems(IReGameHook_CBasePlayer_RemoveAllItems *chain, C void CSGameRules_SendDeathMessage(IReGameHook_CSGameRules_SendDeathMessage *chain, CBaseEntity *pKiller, CBasePlayer *pVictim, CBasePlayer *pAssister, entvars_t *pevInflictor, const char *killerWeaponName, int iDeathMessageFlags, int iRarityOfKill); void CBasePlayer_UpdateStatusBar(IReGameHook_CBasePlayer_UpdateStatusBar *chain, CBasePlayer *pthis); void CBasePlayer_TakeDamageImpulse(IReGameHook_CBasePlayer_TakeDamageImpulse *chain, CBasePlayer *pthis, CBasePlayer *pAttacker, float flKnockbackForce, float flVelModifier); +void CSGameRules_PlayerGotItem(IReGameHook_CSGameRules_PlayerGotItem *chain, CBasePlayer *pPlayer, CItem *pItem); /* * VTC functions diff --git a/reapi/src/hook_list.cpp b/reapi/src/hook_list.cpp index cb8bd17e..8f060857 100644 --- a/reapi/src/hook_list.cpp +++ b/reapi/src/hook_list.cpp @@ -250,6 +250,7 @@ hook_t hooklist_gamerules[] = { DLL(CSGameRules_TeamStacked), DLL(CSGameRules_PlayerGotWeapon), DLL(CSGameRules_SendDeathMessage), + DLL(CSGameRules_PlayerGotItem), }; hook_t hooklist_grenade[] = { diff --git a/reapi/src/hook_list.h b/reapi/src/hook_list.h index 1cdb7bb4..f5f6c363 100644 --- a/reapi/src/hook_list.h +++ b/reapi/src/hook_list.h @@ -310,6 +310,7 @@ enum GamedllFunc_CSGameRules RG_CSGameRules_TeamStacked, RG_CSGameRules_PlayerGotWeapon, RG_CSGameRules_SendDeathMessage, + RG_CSGameRules_PlayerGotItem, // [...] }; diff --git a/reapi/version/version.h b/reapi/version/version.h index d3e8b9db..3838a2f8 100644 --- a/reapi/version/version.h +++ b/reapi/version/version.h @@ -6,5 +6,5 @@ #pragma once #define VERSION_MAJOR 5 -#define VERSION_MINOR 29 +#define VERSION_MINOR 30 #define VERSION_MAINTENANCE 0