Add more natives! Add support for reading Objects. Fix more boogs and update include
This commit is contained in:
parent
a916cdb66b
commit
e06b52c1ec
340
natives.cpp
340
natives.cpp
@ -1,4 +1,13 @@
|
|||||||
#include "natives.h"
|
#include "natives.h"
|
||||||
|
#include <isaverestore.h>
|
||||||
|
|
||||||
|
#ifndef _DEBUG
|
||||||
|
#include <ehandle.h>
|
||||||
|
#else
|
||||||
|
#undef _DEBUG
|
||||||
|
#include <ehandle.h>
|
||||||
|
#define _DEBUG 1
|
||||||
|
#endif
|
||||||
|
|
||||||
CBaseEntity *UTIL_GetCBaseEntity(int num)
|
CBaseEntity *UTIL_GetCBaseEntity(int num)
|
||||||
{
|
{
|
||||||
@ -32,6 +41,17 @@ bool GetHandleIfValidOrError(HandleType_t type, void **object, IPluginContext *p
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
intptr_t GetObjectAddr(HookParamType type, void **params, int index)
|
||||||
|
{
|
||||||
|
if(type == HookParamType_Object)
|
||||||
|
return (intptr_t)¶ms[index];
|
||||||
|
else if(type == HookParamType_ObjectPtr)
|
||||||
|
return (intptr_t)params[index];
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
//native Handle:DHookCreate(offset, HookType:hooktype, ReturnType:returntype, ThisPointerType:thistype, DHookCallback:callback);
|
//native Handle:DHookCreate(offset, HookType:hooktype, ReturnType:returntype, ThisPointerType:thistype, DHookCallback:callback);
|
||||||
cell_t Native_CreateHook(IPluginContext *pContext, const cell_t *params)
|
cell_t Native_CreateHook(IPluginContext *pContext, const cell_t *params)
|
||||||
{
|
{
|
||||||
@ -53,7 +73,7 @@ cell_t Native_CreateHook(IPluginContext *pContext, const cell_t *params)
|
|||||||
return hndl;
|
return hndl;
|
||||||
}
|
}
|
||||||
//native bool:DHookAddParam(Handle:setup, HookParamType:type); OLD
|
//native bool:DHookAddParam(Handle:setup, HookParamType:type); OLD
|
||||||
//native DHookAddParam(Handle:setup, HookParamType:type, size=-1, DHookPassFlag:flag=DHookPass_ByVal);
|
//native bool:DHookAddParam(Handle:setup, HookParamType:type, size=-1, DHookPassFlag:flag=DHookPass_ByVal);
|
||||||
cell_t Native_AddParam(IPluginContext *pContext, const cell_t *params)
|
cell_t Native_AddParam(IPluginContext *pContext, const cell_t *params)
|
||||||
{
|
{
|
||||||
HookSetup *setup;
|
HookSetup *setup;
|
||||||
@ -617,6 +637,319 @@ cell_t Native_RemoveEntityListener(IPluginContext *pContext, const cell_t *param
|
|||||||
return pContext->ThrowNativeError("Failed to get g_pEntityListener");
|
return pContext->ThrowNativeError("Failed to get g_pEntityListener");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//native any:DHookGetParamObjectPtrVar(Handle:hParams, num, offset, ObjectValueType:type);
|
||||||
|
cell_t Native_GetParamObjectPtrVar(IPluginContext *pContext, const cell_t *params)
|
||||||
|
{
|
||||||
|
HookParamsStruct *paramStruct;
|
||||||
|
|
||||||
|
if(!GetHandleIfValidOrError(g_HookParamsHandle, (void **)¶mStruct, pContext, params[1]))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(params[2] <= 0 || params[2] > paramStruct->dg->params.Count())
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Invalid param number %i max params is %i", params[2], paramStruct->dg->params.Count());
|
||||||
|
}
|
||||||
|
|
||||||
|
int index = params[2] - 1;
|
||||||
|
|
||||||
|
if(paramStruct->dg->params.Element(index).type != HookParamType_ObjectPtr && paramStruct->dg->params.Element(index).type != HookParamType_Object)
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Invalid object value type %i", paramStruct->dg->params.Element(index).type);
|
||||||
|
}
|
||||||
|
|
||||||
|
intptr_t addr = GetObjectAddr(paramStruct->dg->params.Element(index).type, paramStruct->orgParams, index);
|
||||||
|
|
||||||
|
switch((ObjectValueType)params[4])
|
||||||
|
{
|
||||||
|
case ObjectValueType_Int:
|
||||||
|
{
|
||||||
|
return *(int *)(addr + params[3]);
|
||||||
|
}
|
||||||
|
case ObjectValueType_Bool:
|
||||||
|
return *(bool *)(addr + params[3]) ? 1 : 0;
|
||||||
|
case ObjectValueType_Ehandle:
|
||||||
|
{
|
||||||
|
EHANDLE hEntity = *(EHANDLE *)(addr + params[3]);
|
||||||
|
return hEntity.IsValid()?hEntity.GetEntryIndex():-1;
|
||||||
|
}
|
||||||
|
case ObjectValueType_Float:
|
||||||
|
return sp_ftoc(*(float *)(addr + params[3]));
|
||||||
|
case ObjectValueType_CBaseEntityPtr:
|
||||||
|
return gamehelpers->EntityToBCompatRef(*(CBaseEntity **)(addr + params[3]));
|
||||||
|
case ObjectValueType_IntPtr:
|
||||||
|
{
|
||||||
|
int *ptr = *(int **)(addr + params[3]);
|
||||||
|
return *ptr;
|
||||||
|
}
|
||||||
|
case ObjectValueType_BoolPtr:
|
||||||
|
{
|
||||||
|
bool *ptr = *(bool **)(addr + params[3]);
|
||||||
|
return *ptr ? 1 : 0;
|
||||||
|
}
|
||||||
|
case ObjectValueType_EhandlePtr:
|
||||||
|
{
|
||||||
|
EHANDLE *hEntity = *(EHANDLE **)(addr + params[3]);
|
||||||
|
return hEntity->IsValid()?hEntity->GetEntryIndex():-1;
|
||||||
|
}
|
||||||
|
case ObjectValueType_FloatPtr:
|
||||||
|
{
|
||||||
|
float *ptr = *(float **)(addr + params[3]);
|
||||||
|
return sp_ftoc(*ptr);
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return pContext->ThrowNativeError("Invalid Object value type");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//native DHookSetParamObjectPtrVar(Handle:hParams, num, offset, ObjectValueType:type, value)
|
||||||
|
cell_t Native_SetParamObjectPtrVar(IPluginContext *pContext, const cell_t *params)
|
||||||
|
{
|
||||||
|
HookParamsStruct *paramStruct;
|
||||||
|
|
||||||
|
if(!GetHandleIfValidOrError(g_HookParamsHandle, (void **)¶mStruct, pContext, params[1]))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(params[2] <= 0 || params[2] > paramStruct->dg->params.Count())
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Invalid param number %i max params is %i", params[2], paramStruct->dg->params.Count());
|
||||||
|
}
|
||||||
|
|
||||||
|
int index = params[2] - 1;
|
||||||
|
|
||||||
|
if(paramStruct->dg->params.Element(index).type != HookParamType_ObjectPtr)
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Invalid object value type %i", paramStruct->dg->params.Element(index).type);
|
||||||
|
}
|
||||||
|
|
||||||
|
intptr_t addr = GetObjectAddr(paramStruct->dg->params.Element(index).type, paramStruct->orgParams, index);
|
||||||
|
|
||||||
|
switch((ObjectValueType)params[4])
|
||||||
|
{
|
||||||
|
case ObjectValueType_Int:
|
||||||
|
*(int *)(addr + params[3]) = params[5];
|
||||||
|
break;
|
||||||
|
case ObjectValueType_Bool:
|
||||||
|
*(bool *)(addr + params[3]) = params[5] != 0;
|
||||||
|
break;
|
||||||
|
case ObjectValueType_Ehandle:
|
||||||
|
{
|
||||||
|
CBaseEntity *pEnt = UTIL_GetCBaseEntity(params[5]);
|
||||||
|
|
||||||
|
if(!pEnt)
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Invalid entity passed");
|
||||||
|
}
|
||||||
|
|
||||||
|
*(EHANDLE *)(addr + params[3]) = pEnt;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ObjectValueType_Float:
|
||||||
|
*(float *)(addr + params[3]) = sp_ctof(params[5]);
|
||||||
|
break;
|
||||||
|
case ObjectValueType_CBaseEntityPtr:
|
||||||
|
{
|
||||||
|
CBaseEntity *pEnt = UTIL_GetCBaseEntity(params[5]);
|
||||||
|
|
||||||
|
if(!pEnt)
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Invalid entity passed");
|
||||||
|
}
|
||||||
|
|
||||||
|
*(CBaseEntity **)(addr + params[3]) = pEnt;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ObjectValueType_IntPtr:
|
||||||
|
{
|
||||||
|
int *ptr = *(int **)(addr + params[3]);
|
||||||
|
*ptr = params[5];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ObjectValueType_BoolPtr:
|
||||||
|
{
|
||||||
|
bool *ptr = *(bool **)(addr + params[3]);
|
||||||
|
*ptr = params[5] != 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ObjectValueType_EhandlePtr:
|
||||||
|
{
|
||||||
|
CBaseEntity *pEnt = UTIL_GetCBaseEntity(params[5]);
|
||||||
|
|
||||||
|
if(!pEnt)
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Invalid entity passed");
|
||||||
|
}
|
||||||
|
|
||||||
|
EHANDLE *hEntity = *(EHANDLE **)(addr + params[3]);
|
||||||
|
*hEntity = pEnt;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ObjectValueType_FloatPtr:
|
||||||
|
{
|
||||||
|
float *ptr = *(float **)(addr + params[3]);
|
||||||
|
*ptr = sp_ctof(params[5]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return pContext->ThrowNativeError("Invalid Object value type");
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//native DHookGetParamObjectPtrVarVector(Handle:hParams, num, offset, ObjectValueType:type, Float:buffer[3]);
|
||||||
|
cell_t Native_GetParamObjectPtrVarVector(IPluginContext *pContext, const cell_t *params)
|
||||||
|
{
|
||||||
|
HookParamsStruct *paramStruct;
|
||||||
|
|
||||||
|
if(!GetHandleIfValidOrError(g_HookParamsHandle, (void **)¶mStruct, pContext, params[1]))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(params[2] <= 0 || params[2] > paramStruct->dg->params.Count())
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Invalid param number %i max params is %i", params[2], paramStruct->dg->params.Count());
|
||||||
|
}
|
||||||
|
|
||||||
|
int index = params[2] - 1;
|
||||||
|
|
||||||
|
if(paramStruct->dg->params.Element(index).type != HookParamType_ObjectPtr && paramStruct->dg->params.Element(index).type != HookParamType_Object)
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Invalid object value type %i", paramStruct->dg->params.Element(index).type);
|
||||||
|
}
|
||||||
|
|
||||||
|
intptr_t addr = GetObjectAddr(paramStruct->dg->params.Element(index).type, paramStruct->orgParams, index);
|
||||||
|
|
||||||
|
cell_t *buffer;
|
||||||
|
pContext->LocalToPhysAddr(params[5], &buffer);
|
||||||
|
|
||||||
|
if((ObjectValueType)params[4] == ObjectValueType_VectorPtr)
|
||||||
|
{
|
||||||
|
Vector *vec = *(Vector **)(addr + params[3]);
|
||||||
|
if(vec == NULL)
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Trying to get value for null pointer.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
buffer[0] = sp_ftoc(vec->x);
|
||||||
|
buffer[1] = sp_ftoc(vec->y);
|
||||||
|
buffer[2] = sp_ftoc(vec->z);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if((ObjectValueType)params[4] == ObjectValueType_Vector)
|
||||||
|
{
|
||||||
|
Vector vec = *(Vector *)(addr + params[3]);
|
||||||
|
buffer[0] = sp_ftoc(vec.x);
|
||||||
|
buffer[1] = sp_ftoc(vec.y);
|
||||||
|
buffer[2] = sp_ftoc(vec.z);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Invalid Object value type (not a type of vector)");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//native DHookSetParamObjectPtrVarVector(Handle:hParams, num, offset, ObjectValueType:type, Float:value[3]);
|
||||||
|
cell_t Native_SetParamObjectPtrVarVector(IPluginContext *pContext, const cell_t *params)
|
||||||
|
{
|
||||||
|
HookParamsStruct *paramStruct;
|
||||||
|
|
||||||
|
if(!GetHandleIfValidOrError(g_HookParamsHandle, (void **)¶mStruct, pContext, params[1]))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(params[2] <= 0 || params[2] > paramStruct->dg->params.Count())
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Invalid param number %i max params is %i", params[2], paramStruct->dg->params.Count());
|
||||||
|
}
|
||||||
|
|
||||||
|
int index = params[2] - 1;
|
||||||
|
|
||||||
|
if(paramStruct->dg->params.Element(index).type != HookParamType_ObjectPtr)
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Invalid object value type %i", paramStruct->dg->params.Element(index).type);
|
||||||
|
}
|
||||||
|
|
||||||
|
intptr_t addr = GetObjectAddr(paramStruct->dg->params.Element(index).type, paramStruct->orgParams, index);
|
||||||
|
|
||||||
|
cell_t *buffer;
|
||||||
|
pContext->LocalToPhysAddr(params[5], &buffer);
|
||||||
|
|
||||||
|
if((ObjectValueType)params[4] == ObjectValueType_VectorPtr)
|
||||||
|
{
|
||||||
|
Vector *vec = *(Vector **)(addr + params[3]);
|
||||||
|
if(vec == NULL)
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Trying to set value for null pointer.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vec->x = sp_ctof(buffer[0]);
|
||||||
|
vec->y = sp_ctof(buffer[1]);
|
||||||
|
vec->z = sp_ctof(buffer[2]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if((ObjectValueType)params[4] == ObjectValueType_Vector)
|
||||||
|
{
|
||||||
|
(*(Vector *)(addr + params[3])).x = sp_ctof(buffer[0]);
|
||||||
|
(*(Vector *)(addr + params[3])).y = sp_ctof(buffer[1]);
|
||||||
|
(*(Vector *)(addr + params[3])).z = sp_ctof(buffer[2]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Invalid Object value type (not a type of vector)");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//native DHookGetParamObjectPtrString(Handle:hParams, num, offset, ObjectValueType:type, String:buffer[], size)
|
||||||
|
cell_t Native_GetParamObjectPtrString(IPluginContext *pContext, const cell_t *params)
|
||||||
|
{
|
||||||
|
HookParamsStruct *paramStruct;
|
||||||
|
|
||||||
|
if(!GetHandleIfValidOrError(g_HookParamsHandle, (void **)¶mStruct, pContext, params[1]))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(params[2] <= 0 || params[2] > paramStruct->dg->params.Count())
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Invalid param number %i max params is %i", params[2], paramStruct->dg->params.Count());
|
||||||
|
}
|
||||||
|
|
||||||
|
int index = params[2] - 1;
|
||||||
|
|
||||||
|
if(paramStruct->dg->params.Element(index).type != HookParamType_ObjectPtr && paramStruct->dg->params.Element(index).type != HookParamType_Object)
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Invalid object value type %i", paramStruct->dg->params.Element(index).type);
|
||||||
|
}
|
||||||
|
|
||||||
|
intptr_t addr = GetObjectAddr(paramStruct->dg->params.Element(index).type, paramStruct->orgParams, index);
|
||||||
|
|
||||||
|
if((ObjectValueType)params[4] == ObjectValueType_CharPtr)
|
||||||
|
{
|
||||||
|
char *ptr = *(char **)(addr + params[3]);
|
||||||
|
pContext->StringToLocal(params[5], params[6], ptr == NULL ? "" : (const char *)ptr);
|
||||||
|
}
|
||||||
|
else if((ObjectValueType)params[4] == ObjectValueType_String)
|
||||||
|
{
|
||||||
|
string_t string = *(string_t *)(addr + params[3]);
|
||||||
|
pContext->StringToLocal(params[5], params[6], string == NULL_STRING ? "" : STRING(string));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return pContext->ThrowNativeError("Invalid Object value type (not a type of string)");
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
//native bool:DHookIsNullParam(Handle:hParams, num);
|
//native bool:DHookIsNullParam(Handle:hParams, num);
|
||||||
cell_t Native_IsNullParam(IPluginContext *pContext, const cell_t *params)
|
cell_t Native_IsNullParam(IPluginContext *pContext, const cell_t *params)
|
||||||
{
|
{
|
||||||
@ -665,10 +998,11 @@ sp_nativeinfo_t g_Natives[] =
|
|||||||
{"DHookSetParamString", Native_SetParamString},
|
{"DHookSetParamString", Native_SetParamString},
|
||||||
{"DHookAddEntityListener", Native_AddEntityListener},
|
{"DHookAddEntityListener", Native_AddEntityListener},
|
||||||
{"DHookRemoveEntityListener", Native_RemoveEntityListener},
|
{"DHookRemoveEntityListener", Native_RemoveEntityListener},
|
||||||
/*{"DHookGetParamObjectPtrVar", Native_GetParamObjectPtrVar},
|
{"DHookGetParamObjectPtrVar", Native_GetParamObjectPtrVar},
|
||||||
{"DHookSetParamObjectPtrVar", Native_SetParamObjectPtrVar},
|
{"DHookSetParamObjectPtrVar", Native_SetParamObjectPtrVar},
|
||||||
{"DHookGetParamObjectPtrVarVector", Native_GetParamObjectPtrVarVector},
|
{"DHookGetParamObjectPtrVarVector", Native_GetParamObjectPtrVarVector},
|
||||||
{"DHookSetParamObjectPtrVarVector", Native_SetParamObjectPtrVarVector},*/
|
{"DHookSetParamObjectPtrVarVector", Native_SetParamObjectPtrVarVector},
|
||||||
|
{"DHookGetParamObjectPtrString", Native_GetParamObjectPtrString},
|
||||||
{"DHookIsNullParam", Native_IsNullParam},
|
{"DHookIsNullParam", Native_IsNullParam},
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
@ -14,7 +14,9 @@ enum ObjectValueType
|
|||||||
ObjectValueType_EhandlePtr,
|
ObjectValueType_EhandlePtr,
|
||||||
ObjectValueType_FloatPtr,
|
ObjectValueType_FloatPtr,
|
||||||
ObjectValueType_Vector,
|
ObjectValueType_Vector,
|
||||||
ObjectValueType_VectorPtr
|
ObjectValueType_VectorPtr,
|
||||||
|
ObjectValueType_CharPtr,
|
||||||
|
ObjectValueType_String
|
||||||
};
|
};
|
||||||
enum ListenType
|
enum ListenType
|
||||||
{
|
{
|
||||||
@ -393,6 +395,11 @@ native DHookGetParamObjectPtrVarVector(Handle:hParams, num, offset, ObjectValueT
|
|||||||
*/
|
*/
|
||||||
native DHookSetParamObjectPtrVarVector(Handle:hParams, num, offset, ObjectValueType:type, Float:value[3]);
|
native DHookSetParamObjectPtrVarVector(Handle:hParams, num, offset, ObjectValueType:type, Float:value[3]);
|
||||||
|
|
||||||
|
|
||||||
|
//ADD DOCS OR ELSE
|
||||||
|
//WE SHOULD WRAP THESE AROUND STOCKS FOR NON PTR AS WE SUPPORT BOTH WITH THIS NATIVE
|
||||||
|
native DHookGetParamObjectPtrString(Handle:hParams, num, offset, ObjectValueType:type, String:buffer[], size);
|
||||||
|
|
||||||
/* Checks if a pointer param is null
|
/* Checks if a pointer param is null
|
||||||
*
|
*
|
||||||
* @param hParams Handle to params structure
|
* @param hParams Handle to params structure
|
||||||
@ -447,5 +454,6 @@ public __ext_dhooks_SetNTVOptional()
|
|||||||
MarkNativeAsOptional("DHookGetParamObjectPtrVarVector");
|
MarkNativeAsOptional("DHookGetParamObjectPtrVarVector");
|
||||||
MarkNativeAsOptional("DHookSetParamObjectPtrVarVector");
|
MarkNativeAsOptional("DHookSetParamObjectPtrVarVector");
|
||||||
MarkNativeAsOptional("DHookIsNullParam");
|
MarkNativeAsOptional("DHookIsNullParam");
|
||||||
|
MarkNativeAsOptional("DHookGetParamObjectPtrString");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
@ -47,11 +47,11 @@ DHooksManager::DHooksManager(HookSetup *setup, void *iface, IPluginFunction *rem
|
|||||||
}
|
}
|
||||||
else if(this->callback->returnType == ReturnType_Float)
|
else if(this->callback->returnType == ReturnType_Float)
|
||||||
{
|
{
|
||||||
protoInfo.SetReturnType(sizeof(void *), SourceHook::PassInfo::PassType_Float, setup->returnFlag, NULL, NULL, NULL, NULL);
|
protoInfo.SetReturnType(sizeof(float), SourceHook::PassInfo::PassType_Float, setup->returnFlag, NULL, NULL, NULL, NULL);
|
||||||
}
|
}
|
||||||
else if(this->callback->returnType == ReturnType_String)
|
else if(this->callback->returnType == ReturnType_String)
|
||||||
{
|
{
|
||||||
protoInfo.SetReturnType(sizeof(void *), SourceHook::PassInfo::PassType_Object, setup->returnFlag, NULL, NULL, NULL, NULL);
|
protoInfo.SetReturnType(sizeof(string_t), SourceHook::PassInfo::PassType_Object, setup->returnFlag, NULL, NULL, NULL, NULL);//We have to be 4 really... or else RIP
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
17
vhook.h
17
vhook.h
@ -15,6 +15,23 @@ enum MRESReturn
|
|||||||
MRES_Supercede // skip real function; use my return value
|
MRES_Supercede // skip real function; use my return value
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum ObjectValueType
|
||||||
|
{
|
||||||
|
ObjectValueType_Int = 0,
|
||||||
|
ObjectValueType_Bool,
|
||||||
|
ObjectValueType_Ehandle,
|
||||||
|
ObjectValueType_Float,
|
||||||
|
ObjectValueType_CBaseEntityPtr,
|
||||||
|
ObjectValueType_IntPtr,
|
||||||
|
ObjectValueType_BoolPtr,
|
||||||
|
ObjectValueType_EhandlePtr,
|
||||||
|
ObjectValueType_FloatPtr,
|
||||||
|
ObjectValueType_Vector,
|
||||||
|
ObjectValueType_VectorPtr,
|
||||||
|
ObjectValueType_CharPtr,
|
||||||
|
ObjectValueType_String
|
||||||
|
};
|
||||||
|
|
||||||
enum HookParamType
|
enum HookParamType
|
||||||
{
|
{
|
||||||
HookParamType_Unknown,
|
HookParamType_Unknown,
|
||||||
|
Loading…
Reference in New Issue
Block a user