From cdebbc96a2427d3803674ae95e9cbe9aad8bfbd1 Mon Sep 17 00:00:00 2001 From: Haze1337 Date: Thu, 26 Aug 2021 05:26:14 +0300 Subject: [PATCH] Add CSS compatibility (#1) --- README.md | 3 -- .../sourcemod/gamedata/noclipspeed.games.txt | 38 +++++++++++++------ addons/sourcemod/scripting/noclipspeed.sp | 24 +++++++++--- 3 files changed, 45 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 47f3b16..3470a4f 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,6 @@ # NoclipSpeed SourceMod plugin that allows players to change noclip speed. -## Note -Only CSGO is currently supported. - ## Requirements * [Dhooks with detour support](https://forums.alliedmods.net/showpost.php?p=2588686&postcount=589); * SourceMod 1.10 or higher. diff --git a/addons/sourcemod/gamedata/noclipspeed.games.txt b/addons/sourcemod/gamedata/noclipspeed.games.txt index 465a149..0d0ffe3 100644 --- a/addons/sourcemod/gamedata/noclipspeed.games.txt +++ b/addons/sourcemod/gamedata/noclipspeed.games.txt @@ -1,6 +1,6 @@ "Games" { - "csgo" + "#default" { "Keys" { @@ -12,16 +12,6 @@ "CBaseEntity::m_RefEHandle" "12" } - "Signatures" - { - "CGameMovement::FullNoClipMove" - { - "library" "server" - "windows" "\x53\x8B\xDC\x83\xEC\x08\x83\xE4\xF0\x83\xC4\x04\x55\x8B\x6B\x04\x89\x6C\x24\x04\x8B\xEC\x83\xEC\x5C\x56\x8B\xF1" - "linux" "\x55\x89\xE5\x57\x56\x53\x81\xEC\x9C\x00\x00\x00\xA1\x2A\x2A\x2A\x2A\x8B\x5D\x08\x3D\x2A\x2A\x2A\x2A" - } - } - "Offsets" { "OSType" @@ -37,4 +27,30 @@ } } } + + "csgo" + { + "Signatures" + { + "CGameMovement::FullNoClipMove" + { + "library" "server" + "windows" "\x53\x8B\xDC\x83\xEC\x08\x83\xE4\xF0\x83\xC4\x04\x55\x8B\x6B\x04\x89\x6C\x24\x04\x8B\xEC\x83\xEC\x5C\x56\x8B\xF1" + "linux" "\x55\x89\xE5\x57\x56\x53\x81\xEC\x9C\x00\x00\x00\xA1\x2A\x2A\x2A\x2A\x8B\x5D\x08\x3D\x2A\x2A\x2A\x2A" + } + } + } + + "cstrike" + { + "Signatures" + { + "CGameMovement::FullNoClipMove" + { + "library" "server" + "windows" "\x53\x8B\xDC\x83\xEC\x08\x83\xE4\xF0\x83\xC4\x04\x55\x8B\x6B\x04\x89\x6C\x24\x04\x8B\xEC\x83\xEC\x6C\xA1\x2A\x2A\x2A\x2A" + "linux" "@_ZN13CGameMovement14FullNoClipMoveEff" + } + } + } } \ No newline at end of file diff --git a/addons/sourcemod/scripting/noclipspeed.sp b/addons/sourcemod/scripting/noclipspeed.sp index 2348925..2f5a05b 100644 --- a/addons/sourcemod/scripting/noclipspeed.sp +++ b/addons/sourcemod/scripting/noclipspeed.sp @@ -20,13 +20,13 @@ public Plugin myinfo = #define MAX_EDICT_BITS 11 #define MAX_EDICTS (1 << MAX_EDICT_BITS) -#define NUM_ENT_ENTRY_BITS (MAX_EDICT_BITS + 2) +#define NUM_ENT_ENTRY_BITS (MAX_EDICT_BITS + 1) #define NUM_ENT_ENTRIES (1 << NUM_ENT_ENTRY_BITS) #define INVALID_EHANDLE_INDEX 0xFFFFFFFF #define NUM_SERIAL_NUM_BITS 16 // (32 - NUM_ENT_ENTRY_BITS) -#define NUM_SERIAL_NUM_SHIFT_BITS (32 - NUM_SERIAL_NUM_BITS) -#define ENT_ENTRY_MASK (( 1 << NUM_SERIAL_NUM_BITS) - 1) +#define ENT_ENTRY_MASK_CSGO (( 1 << NUM_SERIAL_NUM_BITS) - 1) +#define ENT_ENTRY_MASK_CSS (NUM_ENT_ENTRIES - 1) enum OSType { @@ -48,8 +48,12 @@ ConVar sv_maxspeed; ConVar sv_friction; ConVar sv_noclipspeed; +EngineVersion gEVType; + public void OnPluginStart() { + gEVType = GetEngineVersion(); + RegConsoleCmd("sm_ns", SM_NoclipSpeed, "Sets noclip speed."); RegConsoleCmd("sm_noclipspeed", SM_NoclipSpeed, "Sets noclip speed."); @@ -101,8 +105,16 @@ void SetupDhooks(GameData gd) ASSERT_MSG(DHookSetFromConf(dhook, gd, SDKConf_Signature, "CGameMovement::FullNoClipMove"), "Failed to find \"CGameMovement::FullNoClipMove\" signature."); DHookAddParam(dhook, HookParamType_Int, .custom_register = DHookRegister_ECX); - DHookAddParam(dhook, HookParamType_Float, .custom_register = DHookRegister_XMM1); - DHookAddParam(dhook, HookParamType_Float, .custom_register = DHookRegister_XMM2); + if(gEVType == Engine_CSGO) + { + DHookAddParam(dhook, HookParamType_Float, .custom_register = DHookRegister_XMM1); + DHookAddParam(dhook, HookParamType_Float, .custom_register = DHookRegister_XMM2); + } + else + { + DHookAddParam(dhook, HookParamType_Float); + DHookAddParam(dhook, HookParamType_Float); + } ASSERT_MSG(DHookEnableDetour(dhook, false, FullNoClipMove_Dhook), "Failed to enable \"CGameMovement::FullNoClipMove\" detour."); } @@ -169,7 +181,7 @@ int EntityToBCompatRef(Address player) return INVALID_EHANDLE_INDEX; // https://github.com/perilouswithadollarsign/cstrike15_src/blob/29e4c1fda9698d5cebcdaf1a0de4b829fa149bf8/public/basehandle.h#L137 - int entry_idx = m_RefEHandle & ENT_ENTRY_MASK; + int entry_idx = gEVType == Engine_CSGO ? m_RefEHandle & ENT_ENTRY_MASK_CSGO : m_RefEHandle & ENT_ENTRY_MASK_CSS; if(entry_idx >= MAX_EDICTS) return m_RefEHandle | (1 << 31);