From 89940b57c49d85866d2a91fc1e248e083b8e7f8b Mon Sep 17 00:00:00 2001 From: BenCat07 Date: Sat, 28 Nov 2020 15:27:04 +0100 Subject: [PATCH] Fix nospread failing in alot of cases --- include/reclasses/C_BasePlayer.hpp | 10 ++++++++++ src/nospread.cpp | 17 ++++++++--------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/include/reclasses/C_BasePlayer.hpp b/include/reclasses/C_BasePlayer.hpp index 6d78857d..6f742cf6 100644 --- a/include/reclasses/C_BasePlayer.hpp +++ b/include/reclasses/C_BasePlayer.hpp @@ -17,5 +17,15 @@ public: typedef Vector (*fn_t)(IClientEntity *); return vfunc(self, offsets::PlatformOffset(194, offsets::undefined, 194), 0)(self); } + inline static Vector &GetEyeAngles(IClientEntity *self) + { + typedef Vector &(*fn_t)(IClientEntity *); + return vfunc(self, offsets::PlatformOffset(195, offsets::undefined, 195), 0)(self); + } + inline static Vector &GetLocalEyeAngles(IClientEntity *self) + { + typedef Vector &(*fn_t)(IClientEntity *); + return vfunc(self, offsets::PlatformOffset(196, offsets::undefined, 196), 0)(self); + } }; } // namespace re diff --git a/src/nospread.cpp b/src/nospread.cpp index 7001e888..f610586b 100644 --- a/src/nospread.cpp +++ b/src/nospread.cpp @@ -132,18 +132,19 @@ void CreateMove() { case CL_CLASS(CTFSyringeGun): { + if (g_pLocalPlayer->v_OrigViewangles == current_user_cmd->viewangles) + g_pLocalPlayer->bUseSilentAngles = true; float spread = 1.5f; current_user_cmd->viewangles.x -= RandomFloat(-spread, spread); current_user_cmd->viewangles.y -= RandomFloat(-spread, spread); fClampAngle(current_user_cmd->viewangles); - g_pLocalPlayer->bUseSilentAngles = true; break; } case CL_CLASS(CTFCompoundBow): { - Vector view = current_user_cmd->viewangles; - if (g_pLocalPlayer->bUseSilentAngles) - view = g_pLocalPlayer->v_OrigViewangles; + Vector view = re::C_BasePlayer::GetLocalEyeAngles(RAW_ENT(LOCAL_E)); + if (g_pLocalPlayer->v_OrigViewangles == current_user_cmd->viewangles) + g_pLocalPlayer->bUseSilentAngles = true; Vector spread; Vector src; @@ -152,20 +153,18 @@ void CreateMove() spread -= view; current_user_cmd->viewangles -= spread; - g_pLocalPlayer->bUseSilentAngles = true; fClampAngle(current_user_cmd->viewangles); break; } default: - Vector view = current_user_cmd->viewangles; - if (g_pLocalPlayer->bUseSilentAngles) - view = g_pLocalPlayer->v_OrigViewangles; + Vector view = re::C_BasePlayer::GetLocalEyeAngles(RAW_ENT(LOCAL_E)); + if (g_pLocalPlayer->v_OrigViewangles == current_user_cmd->viewangles) + g_pLocalPlayer->bUseSilentAngles = true; Vector spread = re::C_TFWeaponBase::GetSpreadAngles(RAW_ENT(LOCAL_W)); spread -= view; current_user_cmd->viewangles -= spread; - g_pLocalPlayer->bUseSilentAngles = true; fClampAngle(current_user_cmd->viewangles); break; }