From 2d008c1c58cbc8ca6ed9750ecfad74d3701eea4e Mon Sep 17 00:00:00 2001 From: A1mDev <33463136+A1mDev@users.noreply.github.com> Date: Mon, 11 Nov 2024 11:34:54 +0700 Subject: [PATCH 1/5] Update natives.cpp --- extensions/dhooks/natives.cpp | 221 +++++++++++++++++++++++++++------- 1 file changed, 176 insertions(+), 45 deletions(-) diff --git a/extensions/dhooks/natives.cpp b/extensions/dhooks/natives.cpp index f228fcf306..b3caf95317 100644 --- a/extensions/dhooks/natives.cpp +++ b/extensions/dhooks/natives.cpp @@ -1096,20 +1096,46 @@ cell_t Native_GetParamObjectPtrVar(IPluginContext *pContext, const cell_t *param return 0; } - if(params[2] <= 0 || params[2] > (int)paramStruct->dg->params.size()) + void *addr = NULL; + + if(params[2] != 0) { - return pContext->ThrowNativeError("Invalid param number %i max params is %i", params[2], paramStruct->dg->params.size()); - } + if(params[2] < 0 || params[2] > (int)paramStruct->dg->params.size()) + { + return pContext->ThrowNativeError("Invalid param number %i max params is %i", params[2], paramStruct->dg->params.size()); + } - int index = params[2] - 1; + int index = params[2] - 1; - if(paramStruct->dg->params.at(index).type != HookParamType_ObjectPtr && paramStruct->dg->params.at(index).type != HookParamType_Object) - { - return pContext->ThrowNativeError("Invalid object value type %i", paramStruct->dg->params.at(index).type); + if(paramStruct->dg->params.at(index).type != HookParamType_ObjectPtr && paramStruct->dg->params.at(index).type != HookParamType_Object) + { + return pContext->ThrowNativeError("Invalid object value type %i", paramStruct->dg->params.at(index).type); + } + + size_t offset = GetParamOffset(paramStruct, index); + addr = GetObjectAddr(paramStruct->dg->params.at(index).type, paramStruct->dg->params.at(index).flags, paramStruct->orgParams, offset); } + else + { + HookSetup *setup; - size_t offset = GetParamOffset(paramStruct, index); - void *addr = GetObjectAddr(paramStruct->dg->params.at(index).type, paramStruct->dg->params.at(index).flags, paramStruct->orgParams, offset); + if(!GetHandleIfValidOrError(g_HookSetupHandle, (void **)&setup, pContext, params[1])) + { + return pContext->ThrowNativeError("Cannot determine calling convention type, parameter 'this' is only available in member functions"); + } + + if(paramStruct->dg->thisType != ThisPointer_Address) + { + return pContext->ThrowNativeError("Parameter 'this' is not specified as an address, it is not available"); + } + + if(setup->callConv != CallConv_THISCALL) + { + return pContext->ThrowNativeError("Parameter 'this' is only available in member functions, specify the calling convention type 'thiscall'"); + } + + addr = g_SHPtr->GetIfacePtr(); + } switch((ObjectValueType)params[4]) { @@ -1167,20 +1193,46 @@ cell_t Native_SetParamObjectPtrVar(IPluginContext *pContext, const cell_t *param return 0; } - if(params[2] <= 0 || params[2] > (int)paramStruct->dg->params.size()) + void *addr = NULL; + + if(params[2] != 0) { - return pContext->ThrowNativeError("Invalid param number %i max params is %i", params[2], paramStruct->dg->params.size()); - } + if(params[2] < 0 || params[2] > (int)paramStruct->dg->params.size()) + { + return pContext->ThrowNativeError("Invalid param number %i max params is %i", params[2], paramStruct->dg->params.size()); + } - int index = params[2] - 1; + int index = params[2] - 1; - if(paramStruct->dg->params.at(index).type != HookParamType_ObjectPtr && paramStruct->dg->params.at(index).type != HookParamType_Object) + if(paramStruct->dg->params.at(index).type != HookParamType_ObjectPtr && paramStruct->dg->params.at(index).type != HookParamType_Object) + { + return pContext->ThrowNativeError("Invalid object value type %i", paramStruct->dg->params.at(index).type); + } + + size_t offset = GetParamOffset(paramStruct, index); + addr = GetObjectAddr(paramStruct->dg->params.at(index).type, paramStruct->dg->params.at(index).flags, paramStruct->orgParams, offset); + } + else { - return pContext->ThrowNativeError("Invalid object value type %i", paramStruct->dg->params.at(index).type); + HookSetup *setup; + + if(!GetHandleIfValidOrError(g_HookSetupHandle, (void **)&setup, pContext, params[1])) + { + return pContext->ThrowNativeError("Cannot determine calling convention type, parameter 'this' is only available in member functions"); + } + + if(paramStruct->dg->thisType != ThisPointer_Address) + { + return pContext->ThrowNativeError("Parameter 'this' is not specified as an address, it is not available"); + } + + if(setup->callConv != CallConv_THISCALL) + { + return pContext->ThrowNativeError("Parameter 'this' is only available in member functions, specify the calling convention type 'thiscall'"); + } + + addr = g_SHPtr->GetIfacePtr(); } - - size_t offset = GetParamOffset(paramStruct, index); - void *addr = GetObjectAddr(paramStruct->dg->params.at(index).type, paramStruct->dg->params.at(index).flags, paramStruct->orgParams, offset); switch((ObjectValueType)params[4]) { @@ -1252,20 +1304,46 @@ cell_t Native_GetParamObjectPtrVarVector(IPluginContext *pContext, const cell_t return 0; } - if(params[2] <= 0 || params[2] > (int)paramStruct->dg->params.size()) + void *addr = NULL; + + if(params[2] != 0) { - return pContext->ThrowNativeError("Invalid param number %i max params is %i", params[2], paramStruct->dg->params.size()); - } + if(params[2] < 0 || params[2] > (int)paramStruct->dg->params.size()) + { + return pContext->ThrowNativeError("Invalid param number %i max params is %i", params[2], paramStruct->dg->params.size()); + } - int index = params[2] - 1; + int index = params[2] - 1; - if(paramStruct->dg->params.at(index).type != HookParamType_ObjectPtr && paramStruct->dg->params.at(index).type != HookParamType_Object) - { - return pContext->ThrowNativeError("Invalid object value type %i", paramStruct->dg->params.at(index).type); + if(paramStruct->dg->params.at(index).type != HookParamType_ObjectPtr && paramStruct->dg->params.at(index).type != HookParamType_Object) + { + return pContext->ThrowNativeError("Invalid object value type %i", paramStruct->dg->params.at(index).type); + } + + size_t offset = GetParamOffset(paramStruct, index); + addr = GetObjectAddr(paramStruct->dg->params.at(index).type, paramStruct->dg->params.at(index).flags, paramStruct->orgParams, offset); } + else + { + HookSetup *setup; - size_t offset = GetParamOffset(paramStruct, index); - void *addr = GetObjectAddr(paramStruct->dg->params.at(index).type, paramStruct->dg->params.at(index).flags, paramStruct->orgParams, offset); + if(!GetHandleIfValidOrError(g_HookSetupHandle, (void **)&setup, pContext, params[1])) + { + return pContext->ThrowNativeError("Cannot determine calling convention type, parameter 'this' is only available in member functions"); + } + + if(paramStruct->dg->thisType != ThisPointer_Address) + { + return pContext->ThrowNativeError("Parameter 'this' is not specified as an address, it is not available"); + } + + if(setup->callConv != CallConv_THISCALL) + { + return pContext->ThrowNativeError("Parameter 'this' is only available in member functions, specify the calling convention type 'thiscall'"); + } + + addr = g_SHPtr->GetIfacePtr(); + } cell_t *buffer; pContext->LocalToPhysAddr(params[5], &buffer); @@ -1305,21 +1383,47 @@ cell_t Native_SetParamObjectPtrVarVector(IPluginContext *pContext, const cell_t { return 0; } + + void *addr = NULL; - if(params[2] <= 0 || params[2] > (int)paramStruct->dg->params.size()) + if(params[2] != 0) { - return pContext->ThrowNativeError("Invalid param number %i max params is %i", params[2], paramStruct->dg->params.size()); - } + if(params[2] < 0 || params[2] > (int)paramStruct->dg->params.size()) + { + return pContext->ThrowNativeError("Invalid param number %i max params is %i", params[2], paramStruct->dg->params.size()); + } - int index = params[2] - 1; + int index = params[2] - 1; - if(paramStruct->dg->params.at(index).type != HookParamType_ObjectPtr && paramStruct->dg->params.at(index).type != HookParamType_Object) - { - return pContext->ThrowNativeError("Invalid object value type %i", paramStruct->dg->params.at(index).type); + if(paramStruct->dg->params.at(index).type != HookParamType_ObjectPtr && paramStruct->dg->params.at(index).type != HookParamType_Object) + { + return pContext->ThrowNativeError("Invalid object value type %i", paramStruct->dg->params.at(index).type); + } + + size_t offset = GetParamOffset(paramStruct, index); + addr = GetObjectAddr(paramStruct->dg->params.at(index).type, paramStruct->dg->params.at(index).flags, paramStruct->orgParams, offset); } + else + { + HookSetup *setup; - size_t offset = GetParamOffset(paramStruct, index); - void *addr = GetObjectAddr(paramStruct->dg->params.at(index).type, paramStruct->dg->params.at(index).flags, paramStruct->orgParams, offset); + if(!GetHandleIfValidOrError(g_HookSetupHandle, (void **)&setup, pContext, params[1])) + { + return pContext->ThrowNativeError("Cannot determine calling convention type, parameter 'this' is only available in member functions"); + } + + if(paramStruct->dg->thisType != ThisPointer_Address) + { + return pContext->ThrowNativeError("Parameter 'this' is not specified as an address, it is not available"); + } + + if(setup->callConv != CallConv_THISCALL) + { + return pContext->ThrowNativeError("Parameter 'this' is only available in member functions, specify the calling convention type 'thiscall'"); + } + + addr = g_SHPtr->GetIfacePtr(); + } cell_t *buffer; pContext->LocalToPhysAddr(params[5], &buffer); @@ -1346,6 +1450,7 @@ cell_t Native_SetParamObjectPtrVarVector(IPluginContext *pContext, const cell_t vec->z = sp_ctof(buffer[2]); return 1; } + return pContext->ThrowNativeError("Invalid Object value type (not a type of vector)"); } @@ -1359,20 +1464,46 @@ cell_t Native_GetParamObjectPtrString(IPluginContext *pContext, const cell_t *pa return 0; } - if(params[2] <= 0 || params[2] > (int)paramStruct->dg->params.size()) + void *addr = NULL; + + if(params[2] != 0) { - return pContext->ThrowNativeError("Invalid param number %i max params is %i", params[2], paramStruct->dg->params.size()); - } + if(params[2] <= 0 || params[2] > (int)paramStruct->dg->params.size()) + { + return pContext->ThrowNativeError("Invalid param number %i max params is %i", params[2], paramStruct->dg->params.size()); + } - int index = params[2] - 1; + int index = params[2] - 1; - if(paramStruct->dg->params.at(index).type != HookParamType_ObjectPtr && paramStruct->dg->params.at(index).type != HookParamType_Object) - { - return pContext->ThrowNativeError("Invalid object value type %i", paramStruct->dg->params.at(index).type); + if(paramStruct->dg->params.at(index).type != HookParamType_ObjectPtr && paramStruct->dg->params.at(index).type != HookParamType_Object) + { + return pContext->ThrowNativeError("Invalid object value type %i", paramStruct->dg->params.at(index).type); + } + + size_t offset = GetParamOffset(paramStruct, index); + addr = GetObjectAddr(paramStruct->dg->params.at(index).type, paramStruct->dg->params.at(index).flags, paramStruct->orgParams, offset); } + else + { + HookSetup *setup; - size_t offset = GetParamOffset(paramStruct, index); - void *addr = GetObjectAddr(paramStruct->dg->params.at(index).type, paramStruct->dg->params.at(index).flags, paramStruct->orgParams, offset); + if(!GetHandleIfValidOrError(g_HookSetupHandle, (void **)&setup, pContext, params[1])) + { + return pContext->ThrowNativeError("Cannot determine calling convention type, parameter 'this' is only available in member functions"); + } + + if(paramStruct->dg->thisType != ThisPointer_Address) + { + return pContext->ThrowNativeError("Parameter 'this' is not specified as an address, it is not available"); + } + + if(setup->callConv != CallConv_THISCALL) + { + return pContext->ThrowNativeError("Parameter 'this' is only available in member functions, specify the calling convention type 'thiscall'"); + } + + addr = g_SHPtr->GetIfacePtr(); + } switch((ObjectValueType)params[4]) { From 9c07ebe6666a1ac53ec62e7f359c9dbddebee862 Mon Sep 17 00:00:00 2001 From: A1mDev <33463136+A1mDev@users.noreply.github.com> Date: Mon, 11 Nov 2024 12:54:09 +0700 Subject: [PATCH 2/5] Update dhooks.inc --- plugins/include/dhooks.inc | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/plugins/include/dhooks.inc b/plugins/include/dhooks.inc index 99f17e7e8f..fa36aa0102 100644 --- a/plugins/include/dhooks.inc +++ b/plugins/include/dhooks.inc @@ -310,7 +310,7 @@ methodmap DHookParam < Handle // Gets an object's variable value. // - // @param num Parameter number to get, starting at 1. + // @param num Parameter number to get, 0 for param "this", other parameters start from 1 // @param offset Byte offset within the object to the var to get. // @param type Type of var it is. // @@ -320,7 +320,7 @@ methodmap DHookParam < Handle // Gets an object's vector variable value. // - // @param num Parameter number to get, starting at 1. + // @param num Parameter number to get, 0 for param "this", other parameters start from 1. // @param offset Byte offset within the object to the var to get. // @param type Type of var it is. // @param vec Buffer to store the result vector. @@ -330,7 +330,7 @@ methodmap DHookParam < Handle // Gets an object's string variable value. // - // @param num Parameter number to get, starting at 1. + // @param num Parameter number to get, 0 for param "this", other parameters start from 1. // @param offset Byte offset within the object to the var to get. // @param type Type of var it is. // @param buffer Buffer to store the result string. @@ -344,7 +344,7 @@ methodmap DHookParam < Handle // The changes are only applied when MRES_ChangedHandled or MRES_ChangedOverride // is returned in the callback. // - // @param num Parameter number to set, starting at 1. + // @param num Parameter number to set, 0 for param "this", other parameters start from 1. // @param offset Byte offset within the object to the var to set. // @param type Type of var it is. // @param value The value to set the var to. @@ -357,7 +357,7 @@ methodmap DHookParam < Handle // The changes are only applied when MRES_ChangedHandled or MRES_ChangedOverride // is returned in the callback. // - // @param num Parameter number to set, starting at 1. + // @param num Parameter number to set, 0 for param "this", other parameters start from 1. // @param offset Byte offset within the object to the var to set. // @param type Type of var it is. // @param vec The value to set the vector var to. @@ -928,7 +928,7 @@ native void DHookSetReturnString(Handle hReturn, char[] value); * Gets an objects variable value * * @param hParams Handle to params structure - * @param num Param number to get. + * @param num Param number to get, 0 for param "this". * @param offset Offset within the object to the var to get. * @param type Type of var it is * @@ -941,7 +941,7 @@ native any DHookGetParamObjectPtrVar(Handle hParams, int num, int offset, Object * Sets an objects variable value * * @param hParams Handle to params structure - * @param num Param number to set. + * @param num Param number to set, 0 for param "this". * @param offset Offset within the object to the var to set. * @param type Type of var it is * @param value The value to set the var to. @@ -954,7 +954,7 @@ native void DHookSetParamObjectPtrVar(Handle hParams, int num, int offset, Objec * Gets an objects vector variable value * * @param hParams Handle to params structure - * @param num Param number to get. + * @param num Param number to get, 0 for param "this". * @param offset Offset within the object to the var to get. * @param type Type of var it is * @param buffer Buffer to store the result vector @@ -967,7 +967,7 @@ native void DHookGetParamObjectPtrVarVector(Handle hParams, int num, int offset, * Sets an objects vector variable value * * @param hParams Handle to params structure - * @param num Param number to set. + * @param num Param number to set, 0 for param "this". * @param offset Offset within the object to the var to set. * @param type Type of var it is * @param value The value to set the vector var to. @@ -980,7 +980,7 @@ native void DHookSetParamObjectPtrVarVector(Handle hParams, int num, int offset, * Gets an objects string variable value * * @param hParams Handle to params structure - * @param num Param number to get. + * @param num Param number to get, 0 for param "this". * @param offset Offset within the object to the var to get. * @param type Type of var it is * @param buffer Buffer to store the result vector From 358eef1e5174809e8ab1e5f5e9c4957f023a2bad Mon Sep 17 00:00:00 2001 From: A1mDev <33463136+A1mDev@users.noreply.github.com> Date: Mon, 11 Nov 2024 13:01:55 +0700 Subject: [PATCH 3/5] Non-working code commented out --- extensions/dhooks/natives.cpp | 65 ++++++++++++++++------------------- 1 file changed, 30 insertions(+), 35 deletions(-) diff --git a/extensions/dhooks/natives.cpp b/extensions/dhooks/natives.cpp index b3caf95317..9195602735 100644 --- a/extensions/dhooks/natives.cpp +++ b/extensions/dhooks/natives.cpp @@ -1117,21 +1117,20 @@ cell_t Native_GetParamObjectPtrVar(IPluginContext *pContext, const cell_t *param } else { - HookSetup *setup; - + /*HookSetup* setup; if(!GetHandleIfValidOrError(g_HookSetupHandle, (void **)&setup, pContext, params[1])) { return pContext->ThrowNativeError("Cannot determine calling convention type, parameter 'this' is only available in member functions"); } - if(paramStruct->dg->thisType != ThisPointer_Address) - { - return pContext->ThrowNativeError("Parameter 'this' is not specified as an address, it is not available"); - } - if(setup->callConv != CallConv_THISCALL) { return pContext->ThrowNativeError("Parameter 'this' is only available in member functions, specify the calling convention type 'thiscall'"); + }*/ + + if(paramStruct->dg->thisType != ThisPointer_Address) + { + return pContext->ThrowNativeError("Parameter 'this' is not specified as an address, it is not available"); } addr = g_SHPtr->GetIfacePtr(); @@ -1214,21 +1213,20 @@ cell_t Native_SetParamObjectPtrVar(IPluginContext *pContext, const cell_t *param } else { - HookSetup *setup; - + /*HookSetup* setup; if(!GetHandleIfValidOrError(g_HookSetupHandle, (void **)&setup, pContext, params[1])) { return pContext->ThrowNativeError("Cannot determine calling convention type, parameter 'this' is only available in member functions"); } - if(paramStruct->dg->thisType != ThisPointer_Address) - { - return pContext->ThrowNativeError("Parameter 'this' is not specified as an address, it is not available"); - } - if(setup->callConv != CallConv_THISCALL) { return pContext->ThrowNativeError("Parameter 'this' is only available in member functions, specify the calling convention type 'thiscall'"); + }*/ + + if(paramStruct->dg->thisType != ThisPointer_Address) + { + return pContext->ThrowNativeError("Parameter 'this' is not specified as an address, it is not available"); } addr = g_SHPtr->GetIfacePtr(); @@ -1325,21 +1323,20 @@ cell_t Native_GetParamObjectPtrVarVector(IPluginContext *pContext, const cell_t } else { - HookSetup *setup; - + /*HookSetup* setup; if(!GetHandleIfValidOrError(g_HookSetupHandle, (void **)&setup, pContext, params[1])) { return pContext->ThrowNativeError("Cannot determine calling convention type, parameter 'this' is only available in member functions"); } - if(paramStruct->dg->thisType != ThisPointer_Address) - { - return pContext->ThrowNativeError("Parameter 'this' is not specified as an address, it is not available"); - } - if(setup->callConv != CallConv_THISCALL) { return pContext->ThrowNativeError("Parameter 'this' is only available in member functions, specify the calling convention type 'thiscall'"); + }*/ + + if(paramStruct->dg->thisType != ThisPointer_Address) + { + return pContext->ThrowNativeError("Parameter 'this' is not specified as an address, it is not available"); } addr = g_SHPtr->GetIfacePtr(); @@ -1405,21 +1402,20 @@ cell_t Native_SetParamObjectPtrVarVector(IPluginContext *pContext, const cell_t } else { - HookSetup *setup; - + /*HookSetup* setup; if(!GetHandleIfValidOrError(g_HookSetupHandle, (void **)&setup, pContext, params[1])) { return pContext->ThrowNativeError("Cannot determine calling convention type, parameter 'this' is only available in member functions"); } - if(paramStruct->dg->thisType != ThisPointer_Address) - { - return pContext->ThrowNativeError("Parameter 'this' is not specified as an address, it is not available"); - } - if(setup->callConv != CallConv_THISCALL) { return pContext->ThrowNativeError("Parameter 'this' is only available in member functions, specify the calling convention type 'thiscall'"); + }*/ + + if(paramStruct->dg->thisType != ThisPointer_Address) + { + return pContext->ThrowNativeError("Parameter 'this' is not specified as an address, it is not available"); } addr = g_SHPtr->GetIfacePtr(); @@ -1485,21 +1481,20 @@ cell_t Native_GetParamObjectPtrString(IPluginContext *pContext, const cell_t *pa } else { - HookSetup *setup; - + /*HookSetup* setup; if(!GetHandleIfValidOrError(g_HookSetupHandle, (void **)&setup, pContext, params[1])) { return pContext->ThrowNativeError("Cannot determine calling convention type, parameter 'this' is only available in member functions"); } - if(paramStruct->dg->thisType != ThisPointer_Address) - { - return pContext->ThrowNativeError("Parameter 'this' is not specified as an address, it is not available"); - } - if(setup->callConv != CallConv_THISCALL) { return pContext->ThrowNativeError("Parameter 'this' is only available in member functions, specify the calling convention type 'thiscall'"); + }*/ + + if(paramStruct->dg->thisType != ThisPointer_Address) + { + return pContext->ThrowNativeError("Parameter 'this' is not specified as an address, it is not available"); } addr = g_SHPtr->GetIfacePtr(); From 945499bd02ddc0533dbd12415cf8c1bca380d341 Mon Sep 17 00:00:00 2001 From: A1mDev <33463136+A1mDev@users.noreply.github.com> Date: Tue, 19 Nov 2024 09:34:27 +0700 Subject: [PATCH 4/5] Update natives.cpp --- extensions/dhooks/natives.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/extensions/dhooks/natives.cpp b/extensions/dhooks/natives.cpp index 9195602735..1ccf9dbde0 100644 --- a/extensions/dhooks/natives.cpp +++ b/extensions/dhooks/natives.cpp @@ -1446,7 +1446,6 @@ cell_t Native_SetParamObjectPtrVarVector(IPluginContext *pContext, const cell_t vec->z = sp_ctof(buffer[2]); return 1; } - return pContext->ThrowNativeError("Invalid Object value type (not a type of vector)"); } From 88024a71fc7c4ffa87534ffc26a0abab2aa1da3c Mon Sep 17 00:00:00 2001 From: A1mDev <33463136+A1mDev@users.noreply.github.com> Date: Tue, 19 Nov 2024 11:06:34 +0700 Subject: [PATCH 5/5] Allow working with the parameter "this", which is a class CBaseEntity --- extensions/dhooks/natives.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/extensions/dhooks/natives.cpp b/extensions/dhooks/natives.cpp index 1ccf9dbde0..8c3efdf5dd 100644 --- a/extensions/dhooks/natives.cpp +++ b/extensions/dhooks/natives.cpp @@ -1128,7 +1128,7 @@ cell_t Native_GetParamObjectPtrVar(IPluginContext *pContext, const cell_t *param return pContext->ThrowNativeError("Parameter 'this' is only available in member functions, specify the calling convention type 'thiscall'"); }*/ - if(paramStruct->dg->thisType != ThisPointer_Address) + if(paramStruct->dg->thisType != ThisPointer_Address && paramStruct->dg->thisType != ThisPointer_CBaseEntity) { return pContext->ThrowNativeError("Parameter 'this' is not specified as an address, it is not available"); } @@ -1224,7 +1224,7 @@ cell_t Native_SetParamObjectPtrVar(IPluginContext *pContext, const cell_t *param return pContext->ThrowNativeError("Parameter 'this' is only available in member functions, specify the calling convention type 'thiscall'"); }*/ - if(paramStruct->dg->thisType != ThisPointer_Address) + if(paramStruct->dg->thisType != ThisPointer_Address && paramStruct->dg->thisType != ThisPointer_CBaseEntity) { return pContext->ThrowNativeError("Parameter 'this' is not specified as an address, it is not available"); } @@ -1334,7 +1334,7 @@ cell_t Native_GetParamObjectPtrVarVector(IPluginContext *pContext, const cell_t return pContext->ThrowNativeError("Parameter 'this' is only available in member functions, specify the calling convention type 'thiscall'"); }*/ - if(paramStruct->dg->thisType != ThisPointer_Address) + if(paramStruct->dg->thisType != ThisPointer_Address && paramStruct->dg->thisType != ThisPointer_CBaseEntity) { return pContext->ThrowNativeError("Parameter 'this' is not specified as an address, it is not available"); } @@ -1413,7 +1413,7 @@ cell_t Native_SetParamObjectPtrVarVector(IPluginContext *pContext, const cell_t return pContext->ThrowNativeError("Parameter 'this' is only available in member functions, specify the calling convention type 'thiscall'"); }*/ - if(paramStruct->dg->thisType != ThisPointer_Address) + if(paramStruct->dg->thisType != ThisPointer_Address && paramStruct->dg->thisType != ThisPointer_CBaseEntity) { return pContext->ThrowNativeError("Parameter 'this' is not specified as an address, it is not available"); } @@ -1491,7 +1491,7 @@ cell_t Native_GetParamObjectPtrString(IPluginContext *pContext, const cell_t *pa return pContext->ThrowNativeError("Parameter 'this' is only available in member functions, specify the calling convention type 'thiscall'"); }*/ - if(paramStruct->dg->thisType != ThisPointer_Address) + if(paramStruct->dg->thisType != ThisPointer_Address && paramStruct->dg->thisType != ThisPointer_CBaseEntity) { return pContext->ThrowNativeError("Parameter 'this' is not specified as an address, it is not available"); }