|
The Salt Boss
|
05-13-2015
, 17:30
Re: DHooks (Dynamic Hooks - Dev Preview)
|
#281
|
Quote:
Originally Posted by Neuro Toxin
Spoiler
Code:
#pragma semicolon 1
#include <sourcemod>
#include <sdktools>
#include <dhooks>
//int CCSPlayer::GiveNamedItem(char const*, int, CEconItemView*, bool)
Handle hGiveNamedItem;
public void OnPluginStart()
{
int offset = 445; // change to 446 for linux
hGiveNamedItem = DHookCreate(offset, HookType_Entity, ReturnType_Int, ThisPointer_CBaseEntity, OnGiveNamedItem);
DHookAddParam(hGiveNamedItem, HookParamType_CharPtr, -1, DHookPass_ByRef);
DHookAddParam(hGiveNamedItem, HookParamType_Int, -1, DHookPass_ByVal);
DHookAddParam(hGiveNamedItem, HookParamType_Int, -1, DHookPass_ByRef);
DHookAddParam(hGiveNamedItem, HookParamType_Bool, -1, DHookPass_ByVal);
}
public void OnMapStart()
{
for (int client = 1; client < MaxClients; client++)
{
if (IsClientInGame(client))
OnClientPutInServer(client);
}
}
public void OnClientPutInServer(client)
{
if (IsFakeClient(client))
return;
DHookEntity(hGiveNamedItem, true, client);
}
//CBaseEntity *GiveNamedItem(char const*, int, CEconItemView*, bool)
public MRESReturn OnGiveNamedItem(int client, Handle hReturn, Handle hParams)
{
int entity = DHookGetReturn(hReturn);
PrintToConsole(client, "----------==========> MRESReturn:OnGiveNamedItem(client=%d, entity=%d)", client, entity);
return MRES_Ignored;
}
I cant get DHookGetReturn to give me an entity index for GiveNamedItem's return type.
If I create a hook with the return type of ReturnType_Int it get this:
Code:
----------==========> MRESReturn:OnGiveNamedItem(client=3, entity=164975072)
----------==========> MRESReturn:OnGiveNamedItem(client=3, entity=177344800)
----------==========> MRESReturn:OnGiveNamedItem(client=3, entity=177231552)
----------==========> MRESReturn:OnGiveNamedItem(client=3, entity=164039216)
Which looks like a pointer to me. So I naturally try ReturnType_CBaseEntity which crashes the server
I think the return type is CBaseEntity*. Is there anyway way for me to convert this into a entity index?
|
There is a bug in DHooks2, I will fix it soon. It appears I did some bad copy pasting from the param logic and this totally broke returns of pointers
|
|
|
|