diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 3e9145a..fa5e229 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -12,15 +12,15 @@ on:
jobs:
build:
- runs-on: ubuntu-18.04
+ runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
- sm_version: [ "1.10", "1.11", "1.12" ]
+ sm_version: [ "1.11", "1.12" ]
steps:
- - uses: actions/checkout@v1
+ - uses: actions/checkout@v6
- name: Set environment variables
run: |
@@ -47,7 +47,7 @@ jobs:
working-directory: ${{ env.SCRIPTING_PATH }}/
- name: Uploading artifact
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v7
with:
name: movementapi-${{ env.GITHUB_SHA_SHORT }}
path: ./
diff --git a/.travis.yml b/.travis.yml
index d563940..da5c805 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -5,7 +5,7 @@ addons:
- lib32stdc++6 # needed for spcomp
env:
- - SMVERSION=1.10
+ - SMVERSION=1.12
before_script:
# install smbuilder
diff --git a/README.md b/README.md
index 191a28d..3b6ffc5 100644
--- a/README.md
+++ b/README.md
@@ -6,8 +6,7 @@ A SourceMod API focused on player movement in the form of a [function stock liba
### Requirements
- * SourceMod ^1.10
- * [DHooks 2 with detour support](https://github.com/peace-maker/DHooks2)
+ * SourceMod ^1.11
### Plugin Installation
diff --git a/addons/sourcemod/scripting/include/dhooks.inc b/addons/sourcemod/scripting/include/dhooks.inc
index 5354b89..d293fdb 100644
--- a/addons/sourcemod/scripting/include/dhooks.inc
+++ b/addons/sourcemod/scripting/include/dhooks.inc
@@ -1,3 +1,35 @@
+/**
+ * vim: set ts=4 sw=4 tw=99 noet :
+ * =============================================================================
+ * SourceMod (C)2021 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
#if defined _dhooks_included
#endinput
#endif
@@ -38,8 +70,8 @@ enum ReturnType
ReturnType_Int,
ReturnType_Bool,
ReturnType_Float,
- ReturnType_String, //Note this is a string_t
- ReturnType_StringPtr, //Note this is a string_t *
+ ReturnType_String, // Note this is a string_t
+ ReturnType_StringPtr, // Note this is a string_t *
ReturnType_CharPtr,
ReturnType_Vector,
ReturnType_VectorPtr,
@@ -53,8 +85,8 @@ enum HookParamType
HookParamType_Int,
HookParamType_Bool,
HookParamType_Float,
- HookParamType_String, //Note this is a string_t
- HookParamType_StringPtr, //Note this is a string_t *
+ HookParamType_String, // Note this is a string_t
+ HookParamType_StringPtr, // Note this is a string_t *
HookParamType_CharPtr,
HookParamType_VectorPtr,
HookParamType_CBaseEntity,
@@ -87,34 +119,34 @@ enum CallingConvention
enum HookMode
{
- Hook_Pre, // Callback will be executed BEFORE the original function.
- Hook_Post // Callback will be executed AFTER the original function.
+ Hook_Pre, /**< Callback will be executed BEFORE the original function. */
+ Hook_Post /**< Callback will be executed AFTER the original function. */
};
enum MRESReturn
{
- MRES_ChangedHandled = -2, // Use changed values and return MRES_Handled
- MRES_ChangedOverride, // Use changed values and return MRES_Override
- MRES_Ignored, // plugin didn't take any action
- MRES_Handled, // plugin did something, but real function should still be called
- MRES_Override, // call real function, but use my return value
- MRES_Supercede // skip real function; use my return value
+ MRES_ChangedHandled = -2, /**< Use changed values and return MRES_Handled */
+ MRES_ChangedOverride, /**< Use changed values and return MRES_Override */
+ MRES_Ignored, /**< plugin didn't take any action */
+ MRES_Handled, /**< plugin did something, but real function should still be called */
+ MRES_Override, /**< call real function, but use my return value */
+ MRES_Supercede /**< skip real function; use my return value */
};
enum DHookPassFlag
{
- DHookPass_ByVal = (1<<0), /**< Passing by value */
- DHookPass_ByRef = (1<<1), /**< Passing by reference */
- DHookPass_ODTOR = (1<<2), /**< Object has a destructor */
- DHookPass_OCTOR = (1<<3), /**< Object has a constructor */
- DHookPass_OASSIGNOP = (1<<4), /**< Object has an assignment operator */
+ DHookPass_ByVal = (1<<0), /**< Passing by value */
+ DHookPass_ByRef = (1<<1), /**< Passing by reference */
+ DHookPass_ODTOR = (1<<2), /**< Object has a destructor */
+ DHookPass_OCTOR = (1<<3), /**< Object has a constructor */
+ DHookPass_OASSIGNOP = (1<<4), /**< Object has an assignment operator */
};
enum DHookRegister
{
// Don't change the register and use the default for the calling convention.
DHookRegister_Default,
-
+
// 8-bit general purpose registers
DHookRegister_AL,
DHookRegister_CL,
@@ -124,7 +156,7 @@ enum DHookRegister
DHookRegister_CH,
DHookRegister_DH,
DHookRegister_BH,
-
+
// 32-bit general purpose registers
DHookRegister_EAX,
DHookRegister_ECX,
@@ -134,7 +166,7 @@ enum DHookRegister
DHookRegister_EBP,
DHookRegister_ESI,
DHookRegister_EDI,
-
+
// 128-bit XMM registers
DHookRegister_XMM0,
DHookRegister_XMM1,
@@ -144,17 +176,17 @@ enum DHookRegister
DHookRegister_XMM5,
DHookRegister_XMM6,
DHookRegister_XMM7,
-
+
// 80-bit FPU registers
DHookRegister_ST0
};
typeset ListenCB
{
- //Deleted
+ // Deleted
function void (int entity);
-
- //Created
+
+ // Created
function void (int entity, const char[] classname);
};
@@ -162,46 +194,47 @@ typeset DHookRemovalCB
{
function void (int hookid);
};
+
typeset DHookCallback
{
- //Function Example: void Ham::Test() with this pointer ignore
+ // Function Example: void Ham::Test() with this pointer ignore
function MRESReturn ();
-
- //Function Example: void Ham::Test() with this pointer passed
+
+ // Function Example: void Ham::Test() with this pointer passed
function MRESReturn (int pThis);
-
- //Function Example: void Ham::Test(int cake) with this pointer ignore
+
+ // Function Example: void Ham::Test(int cake) with this pointer ignore
function MRESReturn (DHookParam hParams);
-
- //Function Example: void Ham::Test(int cake) with this pointer passed
+
+ // Function Example: void Ham::Test(int cake) with this pointer passed
function MRESReturn (int pThis, DHookParam hParams);
-
- //Function Example: int Ham::Test() with this pointer ignore
+
+ // Function Example: int Ham::Test() with this pointer ignore
function MRESReturn (DHookReturn hReturn);
-
- //Function Example: int Ham::Test() with this pointer passed
+
+ // Function Example: int Ham::Test() with this pointer passed
function MRESReturn (int pThis, DHookReturn hReturn);
-
- //Function Example: int Ham::Test(int cake) with this pointer ignore
+
+ // Function Example: int Ham::Test(int cake) with this pointer ignore
function MRESReturn (DHookReturn hReturn, DHookParam hParams);
-
- //Function Example: int Ham::Test(int cake) with this pointer passed
+
+ // Function Example: int Ham::Test(int cake) with this pointer passed
function MRESReturn (int pThis, DHookReturn hReturn, DHookParam hParams);
-
- //Address NOW
-
- //Function Example: void Ham::Test() with this pointer passed
+
+ // Address NOW
+
+ // Function Example: void Ham::Test() with this pointer passed
function MRESReturn (Address pThis);
-
- //Function Example: void Ham::Test(int cake) with this pointer passed
+
+ // Function Example: void Ham::Test(int cake) with this pointer passed
function MRESReturn (Address pThis, DHookParam hParams);
-
- //Function Example: int Ham::Test() with this pointer passed
+
+ // Function Example: int Ham::Test() with this pointer passed
function MRESReturn (Address pThis, DHookReturn hReturn);
-
- //Function Example: int Ham::Test(int cake) with this pointer passed
+
+ // Function Example: int Ham::Test(int cake) with this pointer passed
function MRESReturn (Address pThis, DHookReturn hReturn, DHookParam hParams);
-
+
};
// Represents the parameters of the hooked function.
@@ -233,13 +266,15 @@ methodmap DHookParam < Handle
// @param num Parameter number to get, starting at 1.
// @param buffer String buffer to store result.
// @param size Buffer size.
- //
+ //
// @error Invalid handle, invalid param number or invalid param type.
public native void GetString(int num, char[] buffer, int size);
// Set the value of a parameter.
// Use only for: int, entity, edict, bool or float parameter types.
//
+ // An entity parameter type can be set to NULL using INVALID_ENT_REFERENCE (-1).
+ //
// The changes are only applied when MRES_ChangedHandled or MRES_ChangedOverride
// is returned in the callback.
//
@@ -336,9 +371,18 @@ methodmap DHookParam < Handle
//
// @param num Parameter number to check, starting at 1.
//
- // @return True if null, false otherwise.
+ // @return true if null, false otherwise.
// @error Non-pointer parameter.
public native bool IsNull(int num);
+
+ // Get param address (Use only for ptr param types)
+ //
+ // @param num Param number to get. (Example if the function has 2 params and you need the value
+ // of the first param num would be 1.)
+ //
+ // @return Address of the parameter.
+ // @error Invalid handle. Invalid param number. Invalid param type.
+ public native Address GetAddress(int num);
};
@@ -348,6 +392,8 @@ methodmap DHookReturn < Handle
// Retrieves or sets the return value.
// Use only for: int, entity, edict, bool or float return types.
//
+ // An entity return type can be set to NULL using INVALID_ENT_REFERENCE (-1).
+ //
// The return value is only readable in a post hook.
// The value is only applied when MRES_Override or MRES_Supercede is returned
// in the callback.
@@ -409,7 +455,7 @@ methodmap DHookSetup < Handle
// @param source Whether to look in Offsets, Signatures, or Addresses.
// @param name Name of the property to find.
//
- // @return True on success, false if nothing was found.
+ // @return true on success, false if nothing was found.
// @error Invalid setup or gamedata handle.
public native bool SetFromConf(Handle gameconf, SDKFuncConfSource source, const char[] name);
@@ -419,7 +465,7 @@ methodmap DHookSetup < Handle
// @param size Used for Objects (not Object ptr) to define the size of the object.
// @param flag Used to change the pass type (ignored by detours).
// @param custom_register The register this argument is passed in instead of the stack (ignored by vhooks).
- //
+ //
// @error Invalid setup handle or too many params added (request upping the max in thread).
public native void AddParam(HookParamType type, int size=-1, DHookPassFlag flag=DHookPass_ByVal, DHookRegister custom_register=DHookRegister_Default);
};
@@ -427,7 +473,7 @@ methodmap DHookSetup < Handle
// A DynamicHook allows to hook a virtual function on any C++ object.
// Currently CBaseEntity and CGameRules have a convenience API for easy entity hooking,
// but it's possible to provide a raw this-pointer to hook any object in memory too.
-//
+//
// Internally this intercepts function calls by replacing the function pointer
// in the virtual table of the object with our own function.
methodmap DynamicHook < DHookSetup
@@ -438,7 +484,7 @@ methodmap DynamicHook < DHookSetup
// @param hooktype Type of hook.
// @param returntype Type of return value.
// @param thistype Type of this pointer or ignore (ignore can be used if not needed).
- //
+ //
// @error Failed to create hook setup handle or invalid callback function.
public native DynamicHook(int offset, HookType hooktype, ReturnType returntype, ThisPointerType thistype);
@@ -460,14 +506,14 @@ methodmap DynamicHook < DHookSetup
// If you need to read the return value of the function, choose a post hook.
//
// @param mode The desired hook mode - pre or post.
- // A pre hook calls your callback BEFORE the original function is called.
+ // A pre hook calls your callback BEFORE the original function is called.
// You can access the parameters, set the return value, and skip the original function.
// A post hook calls your callback AFTER the original function executed.
// You can access the parameters and get/set the return value.
// @param entity Entity index to hook on.
// @param callback Callback function.
// @param removalcb Optional callback for when the hook is removed.
- //
+ //
// @return A hookid on success, INVALID_HOOK_ID otherwise.
// @error Invalid setup handle, invalid address, invalid hook type or invalid callback.
public native int HookEntity(HookMode mode, int entity, DHookCallback callback, DHookRemovalCB removalcb=INVALID_FUNCTION);
@@ -478,13 +524,13 @@ methodmap DynamicHook < DHookSetup
// If you need to read the return value of the function, choose a post hook.
//
// @param mode The desired hook mode - pre or post.
- // A pre hook calls your callback BEFORE the original function is called.
+ // A pre hook calls your callback BEFORE the original function is called.
// You can access the parameters, set the return value, and skip the original function.
// A post hook calls your callback AFTER the original function executed.
// You can access the parameters and get/set the return value.
// @param callback Callback function.
// @param removalcb Optional callback for when the hook is removed.
- //
+ //
// @return A hookid on success, INVALID_HOOK_ID otherwise.
// @error Invalid setup handle, invalid address, invalid hook type or invalid callback.
public native int HookGamerules(HookMode mode, DHookCallback callback, DHookRemovalCB removalcb=INVALID_FUNCTION);
@@ -493,23 +539,22 @@ methodmap DynamicHook < DHookSetup
// If you need to read the return value of the function, choose a post hook.
//
// @param mode The desired hook mode - pre or post.
- // A pre hook calls your callback BEFORE the original function is called.
+ // A pre hook calls your callback BEFORE the original function is called.
// You can access the parameters, set the return value, and skip the original function.
// A post hook calls your callback AFTER the original function executed.
// You can access the parameters and get/set the return value.
// @param addr This pointer address.
// @param callback Callback function.
- //
+ //
// @return A hookid on success, INVALID_HOOK_ID otherwise.
// @error Invalid setup handle, invalid address, invalid hook type or invalid callback.
public native int HookRaw(HookMode mode, Address addr, DHookCallback callback);
- // Remove hook by hook id:
- // This will NOT fire the removal callback!
- //
+ // Remove hook by hook id.
+ //
// @param hookid Hook id to remove.
- //
- // @return True on success, false otherwise
+ //
+ // @return true on success, false otherwise
public static native bool RemoveHook(int hookid);
};
@@ -521,7 +566,7 @@ methodmap DynamicHook < DHookSetup
// Internally this works by replacing the first instructions of the function
// with a jump to our own code. This means that the signature used to find
// the function address in the first place might not match anymore after a detour.
-// If you need to detour the same function in different plugins make sure to
+// If you need to detour the same function in different plugins make sure to
// wildcard \x2a the first 6 bytes of the signature to accommodate for the patched
// jump introduced by the detour.
methodmap DynamicDetour < DHookSetup
@@ -554,13 +599,13 @@ methodmap DynamicDetour < DHookSetup
// If you need to read the return value of the function, choose a post hook.
//
// @param mode The desired hook mode - pre or post.
- // A pre hook calls your callback BEFORE the original function is called.
+ // A pre hook calls your callback BEFORE the original function is called.
// You can access the parameters, set the return value, and skip the original function.
// A post hook calls your callback AFTER the original function executed.
// You can access the parameters and get/set the return value.
// @param callback Callback function.
//
- // @return True if detour was enabled, false otherwise.
+ // @return true if detour was enabled, false otherwise.
// @error Hook handle is not setup for a detour.
public native bool Enable(HookMode mode, DHookCallback callback);
@@ -569,367 +614,405 @@ methodmap DynamicDetour < DHookSetup
// @param mode The hook mode to disable - pre or post.
// @param callback Callback function.
//
- // @return True if detour was disabled, false otherwise.
+ // @return true if detour was disabled, false otherwise.
// @error Hook handle is not setup for a detour or function is not detoured.
public native bool Disable(HookMode mode, DHookCallback callback);
};
-/* Adds an entity listener hook
- *
- * @param type Type of listener to add
- * @param callback Callback to use
+/**
+ * Adds an entity listener hook
*
- * @noreturn
-*/
+ * @param type Type of listener to add
+ * @param callback Callback to use
+ */
native void DHookAddEntityListener(ListenType type, ListenCB callback);
-/* Removes an entity listener hook
+/**
+ * Removes an entity listener hook
*
- * @param type Type of listener to remove
- * @param callback Callback this listener was using
+ * @param type Type of listener to remove
+ * @param callback Callback this listener was using
*
- * @return True if one was removed false otherwise.
-*/
+ * @return true if one was removed, false otherwise
+ */
native bool DHookRemoveEntityListener(ListenType type, ListenCB callback);
-/* Creates a hook
+/**
+ * Creates a hook
*
- * @param offset vtable offset of function to hook
- * @param hooktype Type of hook
- * @param returntype Type of return value
- * @param thistype Type of this pointer or ignore (ignore can be used if not needed)
- * @param callback Optional callback function, if not set here must be set when hooking.
- *
- * @return Returns setup handle for the hook.
- * @error Failed to create hook setup handle or invalid callback function.
-*/
+ * @param offset vtable offset of function to hook
+ * @param hooktype Type of hook
+ * @param returntype Type of return value
+ * @param thistype Type of this pointer or ignore (ignore can be used if not needed)
+ * @param callback Optional callback function, if not set here must be set when hooking.
+ *
+ * @return Returns setup handle for the hook.
+ * @error Failed to create hook setup handle or invalid callback function.
+ */
native DynamicHook DHookCreate(int offset, HookType hooktype, ReturnType returntype, ThisPointerType thistype, DHookCallback callback=INVALID_FUNCTION);
/**
* Creates a detour
*
- * @param funcaddr The address of the function to detour.
- * Can be Address_Null if you want to load the address from gamedata using DHookSetFromConf.
- * @param callConv Calling convention of the function.
- * @param returnType Type of the return value.
- * @param thisType Type of this pointer or ignore (ignore can be used if not needed)
+ * @param funcaddr The address of the function to detour.
+ * Can be Address_Null if you want to load the address from gamedata using DHookSetFromConf.
+ * @param callConv Calling convention of the function.
+ * @param returnType Type of the return value.
+ * @param thisType Type of this pointer or ignore (ignore can be used if not needed)
*
- * @return Setup handle for the detour.
- * @error Failed to create detour setup handle.
- */
+ * @return Setup handle for the detour.
+ * @error Failed to create detour setup handle.
+ */
native DynamicDetour DHookCreateDetour(Address funcaddr, CallingConvention callConv, ReturnType returntype, ThisPointerType thisType);
/**
* Setup a detour or hook for a function as described in a "Functions" section in gamedata.
*
- * @param gameconf GameConfig handle
- * @param name Name of the function in the gamedata to load.
+ * @param gameconf GameConfig handle
+ * @param name Name of the function in the gamedata to load.
*
- * @return Setup handle for the detour or INVALID_HANDLE if offset/signature/address wasn't found.
- * @error Failed to create detour setup handle, invalid gamedata handle, invalid callback function or failed to find function in gamedata.
+ * @return Setup handle for the detour or INVALID_HANDLE if offset/signature/address wasn't found.
+ * @error Failed to create detour setup handle, invalid gamedata handle, invalid callback function or
+ * failed to find function in gamedata.
*/
native DHookSetup DHookCreateFromConf(Handle gameconf, const char[] name);
/**
* Load details for a vhook or detour from a gamedata file.
*
- * @param setup Hook setup handle to set the offset or address on.
- * @param gameconf GameConfig handle
- * @param source Whether to look in Offsets or Signatures.
- * @param name Name of the property to find.
+ * @param setup Hook setup handle to set the offset or address on.
+ * @param gameconf GameConfig handle
+ * @param source Whether to look in Offsets or Signatures.
+ * @param name Name of the property to find.
*
- * @return True on success, false if nothing was found.
- * @error Invalid setup or gamedata handle.
+ * @return true on success, false if nothing was found.
+ * @error Invalid setup or gamedata handle.
*/
native bool DHookSetFromConf(Handle setup, Handle gameconf, SDKFuncConfSource source, const char[] name);
/**
* Enable the detour of the function described in the hook setup handle.
*
- * @param setup Hook setup handle
- * @param post True to make the hook a post hook. (If you need to change the retunr value or need the return value use a post hook! If you need to change params and return use a pre and post hook!)
- * @param callback Callback function
+ * @param setup Hook setup handle
+ * @param post true to make the hook a post hook. (If you need to change the return value or need the return
+ * value use a post hook! If you need to change params and return use a pre and post hook!)
+ * @param callback Callback function
*
- * @return True if detour was enabled, false otherwise.
- * @error Hook handle is not setup for a detour.
+ * @return true if detour was enabled, false otherwise.
+ * @error Hook handle is not setup for a detour.
*/
native bool DHookEnableDetour(Handle setup, bool post, DHookCallback callback);
/**
* Disable the detour of the function described in the hook setup handle.
*
- * @param setup Hook setup handle
- * @param post True to disable a post hook.
- * @param callback Callback function
+ * @param setup Hook setup handle
+ * @param post true to disable a post hook.
+ * @param callback Callback function
*
- * @return True if detour was disabled, false otherwise.
- * @error Hook handle is not setup for a detour or function is not detoured.
+ * @return true if detour was disabled, false otherwise.
+ * @error Hook handle is not setup for a detour or function is not detoured.
*/
native bool DHookDisableDetour(Handle setup, bool post, DHookCallback callback);
-/* Adds param to a hook setup
+/**
+ * Adds param to a hook setup
*
- * @param setup Setup handle to add the param to.
- * @param type Param type
- * @param size Used for Objects (not Object ptr) to define the size of the object.
- * @param flag Used to change the pass type.
- * @param custom_register The register this argument is passed in instead of the stack.
- *
- * @error Invalid setup handle or too many params added (request upping the max in thread)
- * @noreturn
-*/
+ * @param setup Setup handle to add the param to.
+ * @param type Param type
+ * @param size Used for Objects (not Object ptr) to define the size of the object.
+ * @param flag Used to change the pass type.
+ * @param custom_register The register this argument is passed in instead of the stack.
+ *
+ * @error Invalid setup handle or too many params added (request upping the max in thread)
+ */
native void DHookAddParam(Handle setup, HookParamType type, int size=-1, DHookPassFlag flag=DHookPass_ByVal, DHookRegister custom_register=DHookRegister_Default);
-/* Hook entity
- *
- * @param setup Setup handle to use to add the hook.
- * @param post True to make the hook a post hook. (If you need to change the return value or need the return value use a post hook! If you need to change params and return use a pre and post hook!)
- * @param entity Entity index to hook on.
- * @param removalcb Callback for when the hook is removed (Entity hooks are auto-removed on entity destroyed and will call this callback)
- * @param callback Optional callback function, if not set here must be set when creating the hook.
- *
- * @error Invalid setup handle, invalid address, invalid hook type or invalid callback.
- * @return INVALID_HOOK_ID on fail a hookid on success
-*/
+/**
+ * Hook entity
+ *
+ * @param setup Setup handle to use to add the hook.
+ * @param post true to make the hook a post hook. (If you need to change the return value or need the return
+ * value use a post hook! If you need to change params and return use a pre and post hook!)
+ * @param entity Entity index to hook on.
+ * @param removalcb Callback for when the hook is removed (Entity hooks are auto-removed on entity destroyed and
+ * will call this callback)
+ * @param callback Optional callback function, if not set here must be set when creating the hook.
+ *
+ * @return INVALID_HOOK_ID on fail a hookid on success
+ * @error Invalid setup handle, invalid address, invalid hook type or invalid callback.
+ */
native int DHookEntity(Handle setup, bool post, int entity, DHookRemovalCB removalcb=INVALID_FUNCTION, DHookCallback callback=INVALID_FUNCTION);
-/* Hook gamerules
- *
- * @param setup Setup handle to use to add the hook.
- * @param post True to make the hook a post hook. (If you need to change the return value or need the return value use a post hook! If you need to change params and return use a pre and post hook!)
- * @param removalcb Callback for when the hook is removed (Game rules hooks are auto-removed on map end and will call this callback)
- * @param callback Optional callback function, if not set here must be set when creating the hook.
- *
- * @error Invalid setup handle, invalid address, invalid hook type or invalid callback.
- * @return INVALID_HOOK_ID on fail a hookid on success
-*/
+/**
+ * Hook gamerules
+ *
+ * @param setup Setup handle to use to add the hook.
+ * @param post true to make the hook a post hook. (If you need to change the return value or need the return
+ * value use a post hook! If you need to change params and return use a pre and post hook!)
+ * @param removalcb Callback for when the hook is removed (Game rules hooks are auto-removed on map end and will
+ * call this callback)
+ * @param callback Optional callback function, if not set here must be set when creating the hook.
+ *
+ * @return INVALID_HOOK_ID on fail a hookid on success
+ * @error Invalid setup handle, invalid address, invalid hook type or invalid callback.
+ */
native int DHookGamerules(Handle setup, bool post, DHookRemovalCB removalcb=INVALID_FUNCTION, DHookCallback callback=INVALID_FUNCTION);
-/* Hook a raw pointer
- *
- * @param setup Setup handle to use to add the hook.
- * @param post True to make the hook a post hook. (If you need to change the return value or need the return value use a post hook! If you need to change params and return use a pre and post hook!)
- * @param addr This pointer address.
- * @param removalcb Callback for when the hook is removed (Entity hooks are auto-removed on entity destroyed and will call this callback)
- * @param callback Optional callback function, if not set here must be set when creating the hook.
- *
- * @error Invalid setup handle, invalid address, invalid hook type or invalid callback.
- * @return INVALID_HOOK_ID on fail a hookid on success
-*/
+/**
+ * Hook a raw pointer
+ *
+ * @param setup Setup handle to use to add the hook.
+ * @param post true to make the hook a post hook. (If you need to change the return value or need the return
+ * value use a post hook! If you need to change params and return use a pre and post hook!)
+ * @param addr This pointer address.
+ * @param removalcb Callback for when the hook is removed (Entity hooks are auto-removed on entity destroyed and
+ * will call this callback)
+ * @param callback Optional callback function, if not set here must be set when creating the hook.
+ *
+ * @return INVALID_HOOK_ID on fail a hookid on success
+ * @error Invalid setup handle, invalid address, invalid hook type or invalid callback.
+ */
native int DHookRaw(Handle setup, bool post, Address addr, DHookRemovalCB removalcb=INVALID_FUNCTION, DHookCallback callback=INVALID_FUNCTION);
-/* Remove hook by hook id
- *
- * @param hookid Hook id to remove
- *
- * @return true on success false otherwise
- * @note This will not fire the removal callback!
-*/
+/**
+ * Remove hook by hook id
+ *
+ * @param hookid Hook id to remove
+ *
+ * @return true on success, false otherwise
+ */
native bool DHookRemoveHookID(int hookid);
-/* Get param value (Use only for: int, entity, bool or float param types)
- *
- * @param hParams Handle to params structure
- * @param num Param number to get. (Example if the function has 2 params and you need the value of the first param num would be 1. 0 Will return the number of params stored)
- *
- * @error Invalid handle. Invalid param number. Invalid param type.
- * @return value if num greater than 0. If 0 returns paramcount.
-*/
+/**
+ * Get param value (Use only for: int, entity, edict, bool or float param types)
+ *
+ * @param hParams Handle to params structure
+ * @param num Param number to get. (Example if the function has 2 params and you need the value of the first
+ * param num would be 1. 0 Will return the number of params stored)
+ *
+ * @return value if num greater than 0. If 0 returns paramcount.
+ * @error Invalid handle. Invalid param number. Invalid param type.
+ */
native any DHookGetParam(Handle hParams, int num);
-/* Get vector param value
- *
- * @param hParams Handle to params structure
- * @param num Param number to get. (Example if the function has 2 params and you need the value of the first param num would be 1.)
- * @param vec Vector buffer to store result.
- *
- * @error Invalid handle. Invalid param number. Invalid param type.
- * @noreturn
-*/
+/**
+ * Get vector param value
+ *
+ * @param hParams Handle to params structure
+ * @param num Param number to get. (Example if the function has 2 params and you need the value of the first
+ * param num would be 1.)
+ * @param vec Vector buffer to store result.
+ *
+ * @error Invalid handle. Invalid param number. Invalid param type.
+ */
native void DHookGetParamVector(Handle hParams, int num, float vec[3]);
-/* Get string param value
- *
- * @param hParams Handle to params structure
- * @param num Param number to get. (Example if the function has 2 params and you need the value of the first param num would be 1.)
- * @param buffer String buffer to store result
- * @param size Buffer size
- *
- * @error Invalid handle. Invalid param number. Invalid param type.
- * @noreturn
-*/
+/**
+ * Get string param value
+ *
+ * @param hParams Handle to params structure
+ * @param num Param number to get. (Example if the function has 2 params and you need the value of the first
+ * param num would be 1.)
+ * @param buffer String buffer to store result
+ * @param size Buffer size
+ *
+ * @error Invalid handle. Invalid param number. Invalid param type.
+ */
native void DHookGetParamString(Handle hParams, int num, char[] buffer, int size);
-/* Set param value (Use only for: int, entity, bool or float param types)
- *
- * @param hParams Handle to params structure
- * @param num Param number to set (Example if the function has 2 params and you need to set the value of the first param num would be 1.)
- * @param value Value to set it as (only pass int, bool, float or entity index)
- *
- * @error Invalid handle. Invalid param number. Invalid param type.
- * @noreturn
-*/
+/**
+ * Set param value (Use only for: int, entity, edict, bool or float param types)
+ *
+ * An entity param type can be set to NULL using INVALID_ENT_REFERENCE (-1).
+ *
+ * @param hParams Handle to params structure
+ * @param num Param number to set (Example if the function has 2 params and you need to set the value of the
+ * first param num would be 1.)
+ * @param value Value to set it as (only pass int, bool, float or entity index)
+ *
+ * @error Invalid handle. Invalid param number. Invalid param type.
+ */
native void DHookSetParam(Handle hParams, int num, any value);
-/* Set vector param value
- *
- * @param hParams Handle to params structure
- * @param num Param number to set (Example if the function has 2 params and you need to set the value of the first param num would be 1.)
- * @param vec Value to set vector as.
- *
- * @error Invalid handle. Invalid param number. Invalid param type.
- * @noreturn
-*/
+/**
+ * Set vector param value
+ *
+ * @param hParams Handle to params structure
+ * @param num Param number to set (Example if the function has 2 params and you need to set the value of the
+ * first param num would be 1.)
+ * @param vec Value to set vector as.
+ *
+ * @error Invalid handle. Invalid param number. Invalid param type.
+ */
native void DHookSetParamVector(Handle hParams, int num, float vec[3]);
-/* Set string param value
- *
- * @param hParams Handle to params structure
- * @param num Param number to set (Example if the function has 2 params and you need to set the value of the first param num would be 1.)
- * @param value Value to set string as.
- *
- * @error Invalid handle. Invalid param number. Invalid param type.
- * @noreturn
-*/
+/**
+ * Set string param value
+ *
+ * @param hParams Handle to params structure
+ * @param num Param number to set (Example if the function has 2 params and you need to set the value of the
+ * first param num would be 1.)
+ * @param value Value to set string as.
+ *
+ * @error Invalid handle. Invalid param number. Invalid param type.
+ */
native void DHookSetParamString(Handle hParams, int num, char[] value);
-/* Get return value (Use only for: int, entity, bool or float return types)
- *
- * @param hReturn Handle to return structure
- *
- * @error Invalid Handle, invalid type.
- * @return Returns default value if prehook returns actual value if post hook.
-*/
+/**
+ * Get return value (Use only for: int, entity, bool or float return types)
+ *
+ * @param hReturn Handle to return structure
+ *
+ * @error Invalid Handle, invalid type.
+ * @return Returns default value if prehook returns actual value if post hook.
+ */
native any DHookGetReturn(Handle hReturn);
-/* Get return vector value
- *
- * @param hReturn Handle to return structure
- * @param vec Vector buffer to store result in. (In pre hooks will be default value (0.0,0.0,0.0))
- *
- * @error Invalid Handle, invalid type.
- * @noreturn
-*/
+/**
+ * Get return vector value
+ *
+ * @param hReturn Handle to return structure
+ * @param vec Vector buffer to store result in. (In pre hooks will be default value (0.0,0.0,0.0))
+ *
+ * @error Invalid Handle, invalid type.
+ */
native void DHookGetReturnVector(Handle hReturn, float vec[3]);
-/* Get return string value
- *
- * @param hReturn Handle to return structure
- * @param buffer String buffer to store result in. (In pre hooks will be default value "")
- * @param size String buffer size
- *
- * @error Invalid Handle, invalid type.
- * @noreturn
-*/
+/**
+ * Get return string value
+ *
+ * @param hReturn Handle to return structure
+ * @param buffer String buffer to store result in. (In pre hooks will be default value "")
+ * @param size String buffer size
+ *
+ * @error Invalid Handle, invalid type.
+ */
native void DHookGetReturnString(Handle hReturn, char[] buffer, int size);
-/* Set return value (Use only for: int, entity, bool or float return types)
- *
- * @param hReturn Handle to return structure
- * @param value Value to set return as
- *
- * @error Invalid Handle, invalid type.
- * @noreturn
-*/
+/**
+ * Set return value (Use only for: int, entity, bool or float return types)
+ *
+ * An entity return type can be set to NULL using INVALID_ENT_REFERENCE (-1).
+ *
+ * @param hReturn Handle to return structure
+ * @param value Value to set return as
+ *
+ * @error Invalid Handle, invalid type.
+ */
native void DHookSetReturn(Handle hReturn, any value);
-/* Set return vector value
- *
- * @param hReturn Handle to return structure
- * @param vec Value to set return vector as
- *
- * @error Invalid Handle, invalid type.
- * @noreturn
-*/
+/**
+ * Set return vector value
+ *
+ * @param hReturn Handle to return structure
+ * @param vec Value to set return vector as
+ *
+ * @error Invalid Handle, invalid type.
+ */
native void DHookSetReturnVector(Handle hReturn, float vec[3]);
-/* Set return string value
- *
- * @param hReturn Handle to return structure
- * @param value Value to set return string as
- *
- * @error Invalid Handle, invalid type.
- * @noreturn
-*/
+/**
+ * Set return string value
+ *
+ * @param hReturn Handle to return structure
+ * @param value Value to set return string as
+ *
+ * @error Invalid Handle, invalid type.
+ */
native void DHookSetReturnString(Handle hReturn, char[] value);
//WE SHOULD WRAP THESE AROUND STOCKS FOR NON PTR AS WE SUPPORT BOTH WITH THESE NATIVE'S
-/* Gets an objects variable value
+/**
+ * Gets an objects variable value
*
- * @param hParams Handle to params structure
- * @param num Param number to get.
- * @param offset Offset within the object to the var to get.
- * @param type Type of var it is
+ * @param hParams Handle to params structure
+ * @param num Param number to get.
+ * @param offset Offset within the object to the var to get.
+ * @param type Type of var it is
*
- * @error Invalid handle. Invalid param number. Invalid param type. Invalid Object type.
- * @return Value of the objects var. If EHANDLE type or entity returns entity index.
-*/
+ * @error Invalid handle. Invalid param number. Invalid param type. Invalid Object type.
+ * @return Value of the objects var. If EHANDLE type or entity returns entity index.
+ */
native any DHookGetParamObjectPtrVar(Handle hParams, int num, int offset, ObjectValueType type);
-/* Sets an objects variable value
+/**
+ * Sets an objects variable value
*
- * @param hParams Handle to params structure
- * @param num Param number to set.
- * @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.
+ * @param hParams Handle to params structure
+ * @param num Param number to set.
+ * @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.
*
- * @error Invalid handle. Invalid param number. Invalid param type. Invalid Object type.
- * @noreturn
-*/
+ * @error Invalid handle. Invalid param number. Invalid param type. Invalid Object type.
+ */
native void DHookSetParamObjectPtrVar(Handle hParams, int num, int offset, ObjectValueType type, any value);
-/* Gets an objects vector variable value
+/**
+ * Gets an objects vector variable value
*
- * @param hParams Handle to params structure
- * @param num Param number to get.
- * @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
+ * @param hParams Handle to params structure
+ * @param num Param number to get.
+ * @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
*
- * @error Invalid handle. Invalid param number. Invalid param type. Invalid Object type.
- * @noreturn
-*/
+ * @error Invalid handle. Invalid param number. Invalid param type. Invalid Object type.
+ */
native void DHookGetParamObjectPtrVarVector(Handle hParams, int num, int offset, ObjectValueType type, float buffer[3]);
-/* Sets an objects vector variable value
+/**
+ * Sets an objects vector variable value
*
- * @param hParams Handle to params structure
- * @param num Param number to set.
- * @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.
+ * @param hParams Handle to params structure
+ * @param num Param number to set.
+ * @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.
*
- * @error Invalid handle. Invalid param number. Invalid param type. Invalid Object type.
- * @noreturn
-*/
+ * @error Invalid handle. Invalid param number. Invalid param type. Invalid Object type.
+ */
native void DHookSetParamObjectPtrVarVector(Handle hParams, int num, int offset, ObjectValueType type, float value[3]);
-/* Gets an objects string variable value
+/**
+ * Gets an objects string variable value
*
- * @param hParams Handle to params structure
- * @param num Param number to get.
- * @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
- * @param size Size of the buffer
+ * @param hParams Handle to params structure
+ * @param num Param number to get.
+ * @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
+ * @param size Size of the buffer
*
- * @error Invalid handle. Invalid param number. Invalid param type. Invalid Object type.
- * @noreturn
-*/
+ * @error Invalid handle. Invalid param number. Invalid param type. Invalid Object type.
+ */
native void DHookGetParamObjectPtrString(Handle hParams, int num, int offset, ObjectValueType type, char[] buffer, int size);
-/* Checks if a pointer param is null
+/**
+ * Checks if a pointer param is null
*
- * @param hParams Handle to params structure
- * @param num Param number to check.
+ * @param hParams Handle to params structure
+ * @param num Param number to check.
*
- * @error Non pointer param
- * @return True if null false otherwise.
-*/
+ * @return true if null, false otherwise.
+ * @error Non pointer param
+ */
native bool DHookIsNullParam(Handle hParams, int num);
+/**
+ * Get param address (Use only for ptr param types)
+ *
+ * @param hParams Handle to params structure
+ * @param num Param number to get. (Example if the function has 2 params and you need the value of the first
+ * param num would be 1.)
+ *
+ * @return Address of the parameter.
+ * @error Invalid handle. Invalid param number. Invalid param type.
+ */
+native Address DHookGetParamAddress(Handle hParams, int num);
+
public Extension __ext_dhooks =
{
name = "dhooks",
@@ -980,6 +1063,7 @@ public __ext_dhooks_SetNTVOptional()
MarkNativeAsOptional("DHookSetParamObjectPtrVarVector");
MarkNativeAsOptional("DHookIsNullParam");
MarkNativeAsOptional("DHookGetParamObjectPtrString");
+ MarkNativeAsOptional("DHookGetParamAddress");
MarkNativeAsOptional("DHookParam.IsNull");
MarkNativeAsOptional("DHookParam.Get");
@@ -993,6 +1077,7 @@ public __ext_dhooks_SetNTVOptional()
MarkNativeAsOptional("DHookParam.GetObjectVarString");
MarkNativeAsOptional("DHookParam.SetObjectVar");
MarkNativeAsOptional("DHookParam.SetObjectVarVector");
+ MarkNativeAsOptional("DHookParam.GetAddress");
MarkNativeAsOptional("DHookReturn.Value.get");
MarkNativeAsOptional("DHookReturn.Value.set");
MarkNativeAsOptional("DHookReturn.GetVector");