diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index da5c805..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,31 +0,0 @@
-sudo: false
-
-addons:
- apt_packages:
- - lib32stdc++6 # needed for spcomp
-
-env:
- - SMVERSION=1.12
-
-before_script:
- # install smbuilder
- - git clone https://github.com/splewis/sm-builder
- - cd sm-builder
- - pip install --user -r requirements.txt
- - python setup.py install --prefix=~/.local
- - cd ..
-
- # install the sourcemod compiler
- - SMPACKAGE="http://sourcemod.net/latest.php?os=linux&version=${SMVERSION}"
- - wget $SMPACKAGE
- - tar xfz $(basename $SMPACKAGE)
- - cd addons/sourcemod/scripting/
- - chmod +x spcomp
- - PATH+=":$PWD"
- - cd ../../..
-
-script:
- - smbuilder --flags="-E"
-
-notifications:
- email: false
\ No newline at end of file
diff --git a/README.md b/README.md
index f326173..ccd1cda 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,8 @@
# MovementAPI
-[](https://travis-ci.org/danzayau/MovementAPI)
+[](https://github.com/danzayau/MovementAPI/actions/workflows/ci.yml)
-A SourceMod API focused on player movement in the form of a [function stock libary](addons/sourcemod/scripting/include/movement.inc) and an optional plugin with [forwards and natives](addons/sourcemod/scripting/include/movementapi.inc). MovementAPI officially supports CS:GO servers only.
+A SourceMod API focused on player movement in the form of a [function stock library](addons/sourcemod/scripting/include/movement.inc) and an optional plugin with [forwards and natives](addons/sourcemod/scripting/include/movementapi.inc). MovementAPI officially supports CS:GO servers only.
### Requirements
@@ -17,7 +17,7 @@ A SourceMod API focused on player movement in the form of a [function stock liba
* **Takeoff** - Becoming airborne, including jumping, falling, getting off a ladder and leaving noclip.
* **Landing** - Leaving the air, including landing on the ground, grabbing a ladder, leaving noclip while on ground and entering noclip.
* **Perfect Bunnyhop (Perf)** - When the player has jumped in the tick after landing and keeps their speed.
- * **Duckbug/Crouchbug** - When the player sucessfully lands due to uncrouching from mid air and not by falling down. This causes no stamina loss or fall damage upon landing.
+ * **Duckbug/Crouchbug** - When the player successfully lands due to uncrouching from mid air and not by falling down. This causes no stamina loss or fall damage upon landing.
* **Jumpbug** - This is achieved by duckbugging and jumping at the same time. The player is never seen as 'on ground' when bunnyhopping from a tick by tick perspective. A jumpbug inherits the same behavior as a duckbug/crouchbug, along with its effects such as maintaining speed due to no stamina loss.
* **Edgebug** - When the player lands on the edge of a block and slides off it within the same tick. The floor contact removes their downward velocity, but they stay airborne, keeping their speed and taking no fall damage.
* **Distbug** - Landing behavior varies depending on whether the player lands close to the edge of a block or not:
diff --git a/addons/sourcemod/scripting/include/dhooks.inc b/addons/sourcemod/scripting/include/dhooks.inc
deleted file mode 100644
index d293fdb..0000000
--- a/addons/sourcemod/scripting/include/dhooks.inc
+++ /dev/null
@@ -1,1100 +0,0 @@
-/**
- * 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
-#define _dhooks_included
-
-// Needed for the SDKFuncConfSource enum.
-#include
-
-#define INVALID_HOOK_ID 0
-
-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 ListenType
-{
- ListenType_Created,
- ListenType_Deleted
-};
-
-enum ReturnType
-{
- ReturnType_Unknown,
- ReturnType_Void,
- ReturnType_Int,
- ReturnType_Bool,
- ReturnType_Float,
- ReturnType_String, // Note this is a string_t
- ReturnType_StringPtr, // Note this is a string_t *
- ReturnType_CharPtr,
- ReturnType_Vector,
- ReturnType_VectorPtr,
- ReturnType_CBaseEntity,
- ReturnType_Edict
-};
-
-enum HookParamType
-{
- HookParamType_Unknown,
- HookParamType_Int,
- HookParamType_Bool,
- HookParamType_Float,
- HookParamType_String, // Note this is a string_t
- HookParamType_StringPtr, // Note this is a string_t *
- HookParamType_CharPtr,
- HookParamType_VectorPtr,
- HookParamType_CBaseEntity,
- HookParamType_ObjectPtr,
- HookParamType_Edict,
- HookParamType_Object
-};
-
-enum ThisPointerType
-{
- ThisPointer_Ignore,
- ThisPointer_CBaseEntity,
- ThisPointer_Address
-};
-
-enum HookType
-{
- HookType_Entity,
- HookType_GameRules,
- HookType_Raw
-};
-
-enum CallingConvention
-{
- CallConv_CDECL,
- CallConv_THISCALL,
- CallConv_STDCALL,
- CallConv_FASTCALL,
-};
-
-enum HookMode
-{
- 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 */
-};
-
-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 */
-};
-
-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,
- DHookRegister_DL,
- DHookRegister_BL,
- DHookRegister_AH,
- DHookRegister_CH,
- DHookRegister_DH,
- DHookRegister_BH,
-
- // 32-bit general purpose registers
- DHookRegister_EAX,
- DHookRegister_ECX,
- DHookRegister_EDX,
- DHookRegister_EBX,
- DHookRegister_ESP,
- DHookRegister_EBP,
- DHookRegister_ESI,
- DHookRegister_EDI,
-
- // 128-bit XMM registers
- DHookRegister_XMM0,
- DHookRegister_XMM1,
- DHookRegister_XMM2,
- DHookRegister_XMM3,
- DHookRegister_XMM4,
- DHookRegister_XMM5,
- DHookRegister_XMM6,
- DHookRegister_XMM7,
-
- // 80-bit FPU registers
- DHookRegister_ST0
-};
-
-typeset ListenCB
-{
- // Deleted
- function void (int entity);
-
- // Created
- function void (int entity, const char[] classname);
-};
-
-typeset DHookRemovalCB
-{
- function void (int hookid);
-};
-
-typeset DHookCallback
-{
- // Function Example: void Ham::Test() with this pointer ignore
- function MRESReturn ();
-
- // 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 MRESReturn (DHookParam hParams);
-
- // 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 MRESReturn (DHookReturn hReturn);
-
- // 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 MRESReturn (DHookReturn hReturn, DHookParam hParams);
-
- // 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
- function MRESReturn (Address pThis);
-
- // 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 MRESReturn (Address pThis, DHookReturn hReturn);
-
- // 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.
-methodmap DHookParam < Handle
-{
- // Get the value of a parameter.
- // Use only for: int, entity, edict, bool or float parameter types.
- //
- // @param num Parameter number to get, starting at 1. Parameter number 0 returns
- // the number of parameters.
- //
- // @return Value if num greater than 0. If 0 returns parameter count.
- // If CBaseEntity returns entity index.
- // @error Invalid handle, invalid param number or invalid param type.
- public native any Get(int num);
-
- // Get the value of a vector parameter.
- // Use only for: vector or vectorptr parameter types.
- //
- // @param num Parameter number to get, starting at 1.
- // @param vec Vector buffer to store result.
- //
- // @error Invalid handle, invalid param number or invalid param type.
- public native void GetVector(int num, float vec[3]);
-
- // Get the value of a string parameter.
- // Use only for: string, stringptr or charptr parameter types.
- //
- // @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.
- //
- // @param num Parameter number to set starting at 1.
- // @param value Value to set it as (only pass int, bool, float or entity index).
- //
- // @error Invalid handle, invalid param number or invalid param type.
- public native void Set(int num, any value);
-
- // Set the value of a vector parameter.
- // Use only for: vector or vectorptr parameter types.
- //
- // 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 vec Value to set vector as.
- //
- // @error Invalid handle, invalid param number or invalid param type.
- public native void SetVector(int num, const float vec[3]);
-
- // Set the value of a string parameter.
- // Use only for: string, stringptr or charptr parameter types.
- //
- // 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 value Value to set string as.
- //
- // @error Invalid handle, invalid param number or invalid param type.
- public native void SetString(int num, const char[] value);
-
- // Gets an object's variable value.
- //
- // @param num Parameter number to get, starting at 1.
- // @param offset Byte offset within the object to the var to get.
- // @param type Type of var it is.
- //
- // @return Value of the objects var. If EHANDLE type or entity returns entity index.
- // @error Invalid handle, invalid param number, invalid param type or invalid Object type.
- public native any GetObjectVar(int num, int offset, ObjectValueType type);
-
- // Gets an object's vector variable value.
- //
- // @param num Parameter number to get, starting at 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.
- //
- // @error Invalid handle, invalid param number, invalid param type or invalid Object type.
- public native void GetObjectVarVector(int num, int offset, ObjectValueType type, float vec[3]);
-
- // Gets an object's string variable value.
- //
- // @param num Parameter number to get, starting at 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.
- // @param size Size of the buffer.
- //
- // @error Invalid handle, invalid param number, invalid param type or invalid Object type.
- public native void GetObjectVarString(int num, int offset, ObjectValueType type, char[] buffer, int size);
-
- // Sets an object's variable value.
- //
- // 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 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.
- //
- // @error Invalid handle, invalid param number, invalid param type or invalid Object type.
- public native void SetObjectVar(int num, int offset, ObjectValueType type, any value);
-
- // Sets an object's vector variable value.
- //
- // 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 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.
- //
- // @error Invalid handle, invalid param number, invalid param type or invalid Object type.
- public native void SetObjectVarVector(int num, int offset, ObjectValueType type, const float vec[3]);
-
- // No setter for object strings yet. Open an issue if you really need it.
-
- // Checks if a pointer parameter is null.
- //
- // @param num Parameter number to check, starting at 1.
- //
- // @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);
-};
-
-
-// Represents the return value of the hooked function.
-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.
- property any Value {
- public native get();
- public native set(any value);
- }
-
- // Get return vector value.
- // Use only for: vector or vectorptr return types.
- //
- // Only useful in post hooks.
- //
- // @param vec Vector buffer to store result in.
- //
- // @error Invalid Handle or invalid type.
- public native void GetVector(float vec[3]);
-
- // Get return string value.
- // Use only for: string, stringptr or charptr return types.
- //
- // Only useful in post hooks.
- //
- // @param buffer String buffer to store result in.
- // @param size String buffer size.
- //
- // @error Invalid Handle or invalid type.
- public native void GetString(char[] buffer, int size);
-
- // Set return vector value.
- // Use only for: vector or vectorptr return types.
- //
- // The value is only applied when MRES_Override or MRES_Supercede is returned
- // in the callback.
- //
- // @param vec Value to set return vector to.
- //
- // @error Invalid Handle or invalid type.
- public native void SetVector(const float vec[3]);
-
- // Set return string value.
- // Use only for: string, stringptr or charptr return types.
- //
- // The value is only applied when MRES_Override or MRES_Supercede is returned
- // in the callback.
- //
- // @param buffer Value to set return string to.
- //
- // @error Invalid Handle or invalid type.
- public native void SetString(const char[] buffer);
-};
-
-// Base method map for common functions between virtual hooks and detours.
-methodmap DHookSetup < Handle
-{
- // Load address or offset for a vtable hook or detour from a gamedata file.
- //
- // @param gameconf GameData 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.
- // @error Invalid setup or gamedata handle.
- public native bool SetFromConf(Handle gameconf, SDKFuncConfSource source, const char[] name);
-
- // Adds a parameter to a hook setup.
- //
- // @param type Parameter type.
- // @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);
-};
-
-// 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
-{
- // Creates a vtable hook.
- //
- // @param offset Virtual table 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).
- //
- // @error Failed to create hook setup handle or invalid callback function.
- public native DynamicHook(int offset, HookType hooktype, ReturnType returntype, ThisPointerType thistype);
-
- // Setup a vtable hook for a function as described in a "Functions" section in gamedata.
- // The "Functions" section is parsed once the gamedata file is loaded and cached globally.
- //
- // @param gameconf GameData handle to use for address lookup.
- // Doesn't have to be the same as the one with the "Functions" section.
- // @param name Name of the function in a "Functions" section to load.
- //
- // @return Setup handle for the detour or null if offset wasn't found.
- // @error Failed to create detour setup handle, invalid gamedata handle,
- // invalid callback function or failed to find function in cached "Functions" sections.
- public static native DynamicHook FromConf(Handle gameconf, const char[] name);
-
- // Hook an entity.
- //
- // Entity hooks are auto-removed when the entity is destroyed.
- // 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.
- // 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);
-
- // Hook gamerules object.
- //
- // Game rules hooks are auto-removed on map end.
- // 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.
- // 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);
-
- // Hook a raw this-pointer.
- // 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.
- // 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.
- //
- // @param hookid Hook id to remove.
- //
- // @return true on success, false otherwise
- public static native bool RemoveHook(int hookid);
-};
-
-// A DynamicDetour is a way to hook and block any function in memory.
-// Given the address of a function, it can call a callback in your script whenever
-// the function gets called. The callback has access to all parameters of the function
-// as well as the return value.
-//
-// 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
-// wildcard \x2a the first 6 bytes of the signature to accommodate for the patched
-// jump introduced by the detour.
-methodmap DynamicDetour < DHookSetup
-{
- // 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).
- // Only used for thiscall detours.
- //
- // @error Failed to create detour setup handle.
- public native DynamicDetour(Address funcaddr, CallingConvention callConv, ReturnType returntype, ThisPointerType thisType=ThisPointer_Ignore);
-
- // Setup a detour for a function as described in a "Functions" section in gamedata.
- // The "Functions" section is parsed once the gamedata file is loaded and cached globally.
- //
- // @param gameconf GameData handle to use for address lookup.
- // Doesn't have to be the same as the one with the "Functions" section.
- // @param name Name of the function in a "Functions" section to load.
- //
- // @return Setup handle for the detour or null if offset wasn't found.
- // @error Failed to create detour setup handle, invalid gamedata handle,
- // invalid callback function or failed to find function in cached "Functions" sections.
- public static native DynamicDetour FromConf(Handle gameconf, const char[] name);
-
- // Enable the detour of the function described in this detour setup.
- // 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.
- // 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.
- // @error Hook handle is not setup for a detour.
- public native bool Enable(HookMode mode, DHookCallback callback);
-
- // Disable the detour of the function described in this detour setup.
- //
- // @param mode The hook mode to disable - pre or post.
- // @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.
- 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
- */
-native void DHookAddEntityListener(ListenType type, ListenCB callback);
-
-/**
- * Removes an entity listener hook
- *
- * @param type Type of listener to remove
- * @param callback Callback this listener was using
- *
- * @return true if one was removed, false otherwise
- */
-native bool DHookRemoveEntityListener(ListenType type, ListenCB callback);
-
-/**
- * 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.
- */
-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)
- *
- * @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.
- *
- * @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.
- *
- * @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 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.
- */
-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
- *
- * @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
- *
- * @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.
- *
- * @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.
- *
- * @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.
- *
- * @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
- */
-native bool DHookRemoveHookID(int hookid);
-
-/**
- * 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.
- */
-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.
- */
-native void DHookGetParamString(Handle hParams, int num, char[] buffer, int size);
-
-/**
- * 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.
- */
-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.
- */
-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.
- */
-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.
- */
-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.
- */
-native void DHookGetReturnString(Handle hReturn, char[] buffer, int size);
-
-/**
- * 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.
- */
-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.
- */
-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
- *
- * @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.
- */
-native any DHookGetParamObjectPtrVar(Handle hParams, int num, int offset, ObjectValueType type);
-
-/**
- * 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.
- *
- * @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
- *
- * @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.
- */
-native void DHookGetParamObjectPtrVarVector(Handle hParams, int num, int offset, ObjectValueType type, float buffer[3]);
-
-/**
- * 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.
- *
- * @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
- *
- * @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.
- */
-native void DHookGetParamObjectPtrString(Handle hParams, int num, int offset, ObjectValueType type, char[] buffer, int size);
-
-/**
- * Checks if a pointer param is null
- *
- * @param hParams Handle to params structure
- * @param num Param number to check.
- *
- * @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",
- file = "dhooks.ext",
-#if defined AUTOLOAD_EXTENSIONS
- autoload = 1,
-#else
- autoload = 0,
-#endif
-#if defined REQUIRE_EXTENSIONS
- required = 1,
-#else
- required = 0,
-#endif
-};
-
-#if !defined REQUIRE_EXTENSIONS
-public __ext_dhooks_SetNTVOptional()
-{
- MarkNativeAsOptional("DHookAddEntityListener");
- MarkNativeAsOptional("DHookRemoveEntityListener");
- MarkNativeAsOptional("DHookCreate");
- MarkNativeAsOptional("DHookCreateDetour");
- MarkNativeAsOptional("DHookCreateFromConf");
- MarkNativeAsOptional("DHookSetFromConf");
- MarkNativeAsOptional("DHookEnableDetour");
- MarkNativeAsOptional("DHookDisableDetour");
- MarkNativeAsOptional("DHookAddParam");
- MarkNativeAsOptional("DHookEntity");
- MarkNativeAsOptional("DHookGamerules");
- MarkNativeAsOptional("DHookRaw");
- MarkNativeAsOptional("DHookRemoveHookID");
- MarkNativeAsOptional("DHookGetParam");
- MarkNativeAsOptional("DHookGetParamVector");
- MarkNativeAsOptional("DHookGetParamString");
- MarkNativeAsOptional("DHookSetParam");
- MarkNativeAsOptional("DHookSetParamVector");
- MarkNativeAsOptional("DHookSetParamString");
- MarkNativeAsOptional("DHookGetReturn");
- MarkNativeAsOptional("DHookGetReturnVector");
- MarkNativeAsOptional("DHookGetReturnString");
- MarkNativeAsOptional("DHookSetReturn");
- MarkNativeAsOptional("DHookSetReturnVector");
- MarkNativeAsOptional("DHookSetReturnString");
- MarkNativeAsOptional("DHookGetParamObjectPtrVar");
- MarkNativeAsOptional("DHookSetParamObjectPtrVar");
- MarkNativeAsOptional("DHookGetParamObjectPtrVarVector");
- MarkNativeAsOptional("DHookSetParamObjectPtrVarVector");
- MarkNativeAsOptional("DHookIsNullParam");
- MarkNativeAsOptional("DHookGetParamObjectPtrString");
- MarkNativeAsOptional("DHookGetParamAddress");
-
- MarkNativeAsOptional("DHookParam.IsNull");
- MarkNativeAsOptional("DHookParam.Get");
- MarkNativeAsOptional("DHookParam.GetVector");
- MarkNativeAsOptional("DHookParam.GetString");
- MarkNativeAsOptional("DHookParam.Set");
- MarkNativeAsOptional("DHookParam.SetVector");
- MarkNativeAsOptional("DHookParam.SetString");
- MarkNativeAsOptional("DHookParam.GetObjectVar");
- MarkNativeAsOptional("DHookParam.GetObjectVarVector");
- MarkNativeAsOptional("DHookParam.GetObjectVarString");
- MarkNativeAsOptional("DHookParam.SetObjectVar");
- MarkNativeAsOptional("DHookParam.SetObjectVarVector");
- MarkNativeAsOptional("DHookParam.GetAddress");
- MarkNativeAsOptional("DHookReturn.Value.get");
- MarkNativeAsOptional("DHookReturn.Value.set");
- MarkNativeAsOptional("DHookReturn.GetVector");
- MarkNativeAsOptional("DHookReturn.GetString");
- MarkNativeAsOptional("DHookReturn.SetVector");
- MarkNativeAsOptional("DHookReturn.SetString");
- MarkNativeAsOptional("DHookSetup.SetFromConf");
- MarkNativeAsOptional("DHookSetup.AddParam");
- MarkNativeAsOptional("DynamicHook.DynamicHook");
- MarkNativeAsOptional("DynamicHook.FromConf");
- MarkNativeAsOptional("DynamicHook.HookEntity");
- MarkNativeAsOptional("DynamicHook.HookGamerules");
- MarkNativeAsOptional("DynamicHook.HookRaw");
- MarkNativeAsOptional("DynamicHook.RemoveHook");
- MarkNativeAsOptional("DynamicDetour.DynamicDetour");
- MarkNativeAsOptional("DynamicDetour.FromConf");
- MarkNativeAsOptional("DynamicDetour.Enable");
- MarkNativeAsOptional("DynamicDetour.Disable");
-}
-#endif
\ No newline at end of file
diff --git a/addons/sourcemod/scripting/include/movementapi.inc b/addons/sourcemod/scripting/include/movementapi.inc
index 3634bd8..8950bcd 100644
--- a/addons/sourcemod/scripting/include/movementapi.inc
+++ b/addons/sourcemod/scripting/include/movementapi.inc
@@ -20,13 +20,14 @@
Becoming airborne, including jumping, falling, getting off a ladder and leaving noclip.
Landing
- Leaving the air, including landing on the ground, grabbing a ladder and entering noclip.
+ Leaving the air, including landing on the ground, grabbing a ladder, leaving noclip
+ while on ground and entering noclip.
Perfect Bunnyhop (Perf)
When the player has jumped in the tick after landing and keeps their speed.
Duckbug/Crouchbug
- When the player sucessfully lands due to uncrouching from mid air and not by falling
+ When the player successfully lands due to uncrouching from mid air and not by falling
down. This causes no stamina loss or fall damage upon landing.
Jumpbug
@@ -113,7 +114,7 @@ forward void Movement_OnStopDucking(int client);
forward void Movement_OnPlayerJump(int client, bool jumpbug);
/**
- * Called when a player edgebugs.
+ * Called when a player edgebugs. Not called for bots.
* Setting velocity when this is called may not be effective.
*
* @param client Client index.
@@ -299,7 +300,7 @@ forward Action Movement_OnCategorizePositionPre(int client, float origin[3], flo
forward Action Movement_OnCategorizePositionPost(int client, float origin[3], float velocity[3]);
/**
- * Called before TryPlayerMove movement function is called.
+ * Called before TryPlayerMove movement function is called. Not called for bots.
* Modifying origin or velocity parameters will change player's origin and velocity accordingly.
*
* @param client Client index.
@@ -310,7 +311,7 @@ forward Action Movement_OnCategorizePositionPost(int client, float origin[3], fl
forward Action Movement_OnTryPlayerMovePre(int client, float origin[3], float velocity[3]);
/**
- * Called after TryPlayerMove movement function is called.
+ * Called after TryPlayerMove movement function is called. Not called for bots.
* Modifying origin or velocity parameters will change player's origin and velocity accordingly.
*
* @param client Client index.
@@ -323,10 +324,11 @@ forward Action Movement_OnTryPlayerMovePost(int client, float origin[3], float v
// =====[ NATIVES ]=====
/**
- * Gets whether a player's last takeoff was a jump.
+ * Gets whether a player jumped this tick.
+ * Reset at the start of each tick's movement processing.
*
* @param client Client index.
- * @return Whether player's last takeoff was a jump.
+ * @return Whether player jumped this tick.
*/
native bool Movement_GetJumped(int client);
@@ -544,6 +546,7 @@ native void Movement_SetLandingVelocity(int client, float velocity[3]);
* Get the player's number of collisions during movement processing.
* This function should ideally be called after inside Movement_OnTryPlayerMovePost.
* Collisions are from the last TryPlayerMove call, in bump order.
+ * Always 0 for bots, their TryPlayerMove calls are not tracked.
*
* @param client Client index.
* @return Number of collisions, up to MOVEMENT_MAX_COLLISIONS.
@@ -555,7 +558,7 @@ native int Movement_GetCollisionCount(int client);
* This function should ideally be called after inside Movement_OnTryPlayerMovePost.
*
* @param client Client index.
- * @param num Collision number, must not exceed Movement_GetCollisionCount's value.
+ * @param num Collision number, must be less than Movement_GetCollisionCount's value.
* @param result Resultant vector.
* @error Invalid collision index.
*/
@@ -566,7 +569,7 @@ native void Movement_GetCollisionStartOrigin(int client, int num, float result[3
* This function should ideally be called after inside Movement_OnTryPlayerMovePost.
*
* @param client Client index.
- * @param num Collision number, must not exceed Movement_GetCollisionCount's value.
+ * @param num Collision number, must be less than Movement_GetCollisionCount's value.
* @param result Resultant vector.
* @error Invalid collision index.
*/
@@ -577,7 +580,7 @@ native void Movement_GetCollisionEndOrigin(int client, int num, float result[3])
* This function should ideally be called after inside Movement_OnTryPlayerMovePost.
*
* @param client Client index.
- * @param num Collision number, must not exceed Movement_GetCollisionCount's value.
+ * @param num Collision number, must be less than Movement_GetCollisionCount's value.
* @param result Resultant vector.
* @error Invalid collision index.
*/