From 57698d3c26c3fd272c3d02353d5e707cb619889d Mon Sep 17 00:00:00 2001 From: LightCat Date: Sat, 12 Jan 2019 17:40:16 +0100 Subject: [PATCH] fix Killstreak --- src/hacks/Misc.cpp | 15 +++++++++++++++ src/hooks/FireEvent.cpp | 7 ++++++- src/hooks/FireEventClientSide.cpp | 7 ++++++- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/hacks/Misc.cpp b/src/hacks/Misc.cpp index c7b65da0..278a81b0 100644 --- a/src/hacks/Misc.cpp +++ b/src/hacks/Misc.cpp @@ -544,8 +544,23 @@ static CatCommand dump_vars("debug_dump_netvars", "Dump netvars of entity", [](c DumpRecvTable(ent, clz->m_pRecvTable, 0, ft, 0); }); +void Shutdown() +{ + if (CE_BAD(LOCAL_E)) + return; + // unpatching local player + void **vtable = *(void ***) (g_pLocalPlayer->entity->InternalEntity()); + if (vtable[offsets::ShouldDraw()] == C_TFPlayer__ShouldDraw_hook) + { + void *page = (void *) ((uintptr_t) vtable & ~0xFFF); + mprotect(page, 0xFFF, PROT_READ | PROT_WRITE | PROT_EXEC); + vtable[offsets::ShouldDraw()] = (void *) C_TFPlayer__ShouldDraw_original; + mprotect(page, 0xFFF, PROT_READ | PROT_EXEC); + } +} InitRoutine init([]() { teammatesPushaway = g_ICvar->FindVar("tf_avoidteammates_pushaway"); + EC::Register(EC::Shutdown, Shutdown, "draw_local_player", EC::average); EC::Register(EC::CreateMove, CreateMove, "cm_misc_hacks", EC::average); #if ENABLE_VISUALS EC::Register(EC::Draw, DrawText, "draw_misc_hacks", EC::average); diff --git a/src/hooks/FireEvent.cpp b/src/hooks/FireEvent.cpp index c90b153f..4d6fbfb3 100644 --- a/src/hooks/FireEvent.cpp +++ b/src/hooks/FireEvent.cpp @@ -5,11 +5,16 @@ #include "HookedMethods.hpp" +namespace hacks::tf2::killstreak +{ +extern void fire_event(IGameEvent *event); +} namespace hooked_methods { DEFINE_HOOKED_METHOD(FireEvent, bool, IGameEventManager2 *this_, IGameEvent *event, bool no_broadcast) { + hacks::tf2::killstreak::fire_event(event); return original::FireEvent(this_, event, no_broadcast); } -} // namespace hooked_methods \ No newline at end of file +} // namespace hooked_methods diff --git a/src/hooks/FireEventClientSide.cpp b/src/hooks/FireEventClientSide.cpp index e1a08014..f9297a42 100644 --- a/src/hooks/FireEventClientSide.cpp +++ b/src/hooks/FireEventClientSide.cpp @@ -5,11 +5,16 @@ #include "HookedMethods.hpp" +namespace hacks::tf2::killstreak +{ +extern void fire_event(IGameEvent *event); +} namespace hooked_methods { DEFINE_HOOKED_METHOD(FireEventClientSide, bool, IGameEventManager2 *this_, IGameEvent *event) { + hacks::tf2::killstreak::fire_event(event); return original::FireEventClientSide(this_, event); } -} // namespace hooked_methods \ No newline at end of file +} // namespace hooked_methods