2
0
mirror of https://github.com/rehlds/reapi.git synced 2024-12-28 15:45:31 +03:00

Implement GetEntityInit hook (#215)

Co-authored-by: Sergey Shorokhov <wopox1337@ya.ru>
This commit is contained in:
Franco Romaniello 2021-10-20 18:51:07 +02:00 committed by GitHub
parent c5fb2919b4
commit 3543e90fdf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 43 additions and 0 deletions

View File

@ -55,6 +55,11 @@ enum EngineFunc
RH_SV_WriteFullClientUpdate,
/*
* Description: -
* Params: (const classname[])
*/
RH_GetEntityInit,
* Description: Called after processing a client connection request.
* Params: (const client)
*/

View File

@ -189,6 +189,26 @@ typedef IHookChainRegistry<int, enum sv_delta_s, IGameClient *, struct packet_en
typedef IHookChain<bool, edict_t *, IGameClient *, int, const char*, float, float, int, int, int, const float*> IRehldsHook_SV_EmitSound2;
typedef IHookChainRegistry<bool, edict_t *, IGameClient *, int, const char*, float, float, int, int, int, const float*> IRehldsHookRegistry_SV_EmitSound2;
//CreateFakeClient hook
typedef IHookChain<edict_t *, const char *> IRehldsHook_CreateFakeClient;
typedef IHookChainRegistry<edict_t *, const char *> IRehldsHookRegistry_CreateFakeClient;
//SV_CheckConnectionLessRateLimits
typedef IHookChain<bool, netadr_t &, const uint8_t *, int> IRehldsHook_SV_CheckConnectionLessRateLimits;
typedef IHookChainRegistry<bool, netadr_t &, const uint8_t *, int> IRehldsHookRegistry_SV_CheckConnectionLessRateLimits;
//SV_Frame hook
typedef IVoidHookChain<> IRehldsHook_SV_Frame;
typedef IVoidHookChainRegistry<> IRehldsHookRegistry_SV_Frame;
//SV_ShouldSendConsistencyList hook
typedef IHookChain<bool, IGameClient *, bool> IRehldsHook_SV_ShouldSendConsistencyList;
typedef IHookChainRegistry<bool, IGameClient *, bool> IRehldsHookRegistry_SV_ShouldSendConsistencyList;
//GetEntityInit hook
typedef IHookChain<struct entvars_s *, char *> IRehldsHook_GetEntityInit;
typedef IHookChainRegistry<struct entvars_s *, char *> IRehldsHookRegistry_GetEntityInit;
class IRehldsHookchains {
public:
virtual ~IRehldsHookchains() { }
@ -231,6 +251,11 @@ public:
virtual IRehldsHookRegistry_SV_Spawn_f* SV_Spawn_f() = 0;
virtual IRehldsHookRegistry_SV_CreatePacketEntities* SV_CreatePacketEntities() = 0;
virtual IRehldsHookRegistry_SV_EmitSound2* SV_EmitSound2() = 0;
virtual IRehldsHookRegistry_CreateFakeClient* CreateFakeClient() = 0;
virtual IRehldsHookRegistry_SV_CheckConnectionLessRateLimits* SV_CheckConnectionLessRateLimits() = 0;
virtual IRehldsHookRegistry_SV_Frame* SV_Frame() = 0;
virtual IRehldsHookRegistry_SV_ShouldSendConsistencyList* SV_ShouldSendConsistencyList() = 0;
virtual IRehldsHookRegistry_GetEntityInit* GetEntityInit() = 0;
};
struct RehldsFuncs_t {

View File

@ -63,6 +63,16 @@ void SV_WriteFullClientUpdate(IRehldsHook_SV_WriteFullClientUpdate *chain, IGame
SV_WriteFullClientUpdate_AMXX(&data, client, (size_t)buffer, receiver);
}
entvars_t *GetEntityInit(IRehldsHook_GetEntityInit *chain, char *classname)
{
auto original = [chain](char *_classname)
{
return (entvars_t *)chain->callNext(_classname);
};
return callForward<entvars_t *>(RH_GetEntityInit, original, classname);
}
void ClientConnected(IRehldsHook_ClientConnected* chain, IGameClient* cl)
{
auto original = [chain](int client)

View File

@ -344,6 +344,7 @@ struct SV_WriteFullClientUpdate_args_t
using SV_WriteFullClientUpdate_t = hookdata_t<IRehldsHook_SV_WriteFullClientUpdate *, SV_WriteFullClientUpdate_args_t &>;
void SV_WriteFullClientUpdate_AMXX(SV_WriteFullClientUpdate_t *data, IGameClient *client, size_t buffer, IGameClient *receiver);
void SV_WriteFullClientUpdate(IRehldsHook_SV_WriteFullClientUpdate *chain, IGameClient *client, char *buffer, size_t maxlen, sizebuf_t *sb, IGameClient *receiver);
entvars_s *GetEntityInit(IRehldsHook_GetEntityInit *chain, char *classname);
// regamedll functions
int GetForceCamera(IReGameHook_GetForceCamera *chain, CBasePlayer *pObserver);

View File

@ -87,6 +87,7 @@ hook_t hooklist_engine[] = {
ENG(SV_ActivateServer),
ENG(Cvar_DirectSet),
ENG(SV_WriteFullClientUpdate, _AMXX),
ENG(GetEntityInit),
ENG(ClientConnected)
};

View File

@ -98,6 +98,7 @@ enum EngineFunc
RH_SV_ActivateServer,
RH_Cvar_DirectSet,
RH_SV_WriteFullClientUpdate,
RH_GetEntityInit,
RH_ClientConnected
// [...]