From 89940b57c49d85866d2a91fc1e248e083b8e7f8b Mon Sep 17 00:00:00 2001 From: BenCat07 Date: Sat, 28 Nov 2020 15:27:04 +0100 Subject: [PATCH 1/2] 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; } From 7346a63b4c3dffff96b5eb0ace34eecf35529162 Mon Sep 17 00:00:00 2001 From: BenCat07 Date: Tue, 8 Dec 2020 19:22:46 +0100 Subject: [PATCH 2/2] Fix some syncing issues in nospread This fixes nospread sometimes breaking fakelag, and it trying to sync when the mantissa is bad --- src/nospread.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/nospread.cpp b/src/nospread.cpp index f610586b..205bc39c 100644 --- a/src/nospread.cpp +++ b/src/nospread.cpp @@ -513,6 +513,7 @@ bool DispatchUserMessage(bf_read *buf, int type) last_was_player_perf = true; should_call_original = false; bad_mantissa = true; + no_spread_synced = NOT_SYNCED; return should_call_original; } @@ -890,6 +891,13 @@ static InitRoutine init_bulletnospread([]() { } }, "nospread_createmove2"); + bullet.installChangeCallback([](settings::VariableBase &, bool after) { + if (!after) + { + is_syncing = false; + no_spread_synced = NOT_SYNCED; + } + }); #if ENABLE_VISUALS EC::Register( EC::Draw,