diff --git a/AccuracyFix/AccuracyFix.cpp b/AccuracyFix/AccuracyFix.cpp index 003e30f..bc0b3c6 100644 --- a/AccuracyFix/AccuracyFix.cpp +++ b/AccuracyFix/AccuracyFix.cpp @@ -4,11 +4,13 @@ CAccuracyFix gAccuracyFix; void CAccuracyFix::ServerActivate() { +#ifndef ACCURACY_DISABLE_RECOIL_CONTROL this->m_Data.clear(); - this->m_af_accuracy_all = this->CvarRegister("af_accuracy_all", "-1.0"); - this->m_af_recoil_all = this->CvarRegister("af_recoil_all", "-1.0"); +#endif + + this->m_af_accuracy_all = this->CvarRegister("af_accuracy_all", "-1.0"); this->m_af_distance_all = this->CvarRegister("af_distance_all", "-1.0"); @@ -18,7 +20,7 @@ void CAccuracyFix::ServerActivate() if (SlotInfo) { - if (SlotInfo->slot == PRIMARY_WEAPON_SLOT || SlotInfo->slot == PISTOL_SLOT) + if ((SlotInfo->slot == PRIMARY_WEAPON_SLOT) || (SlotInfo->slot == PISTOL_SLOT)) { if (SlotInfo->weaponName) { @@ -26,15 +28,17 @@ void CAccuracyFix::ServerActivate() Q_snprintf(cvarName, sizeof(cvarName), "af_accuracy_%s", SlotInfo->weaponName); - this->m_af_accuracy[WeaponID] = this->CvarRegister(cvarName, "8192.0"); + this->m_af_accuracy[WeaponID] = this->CvarRegister(cvarName, "3200.0"); +#ifndef ACCURACY_DISABLE_RECOIL_CONTROL Q_snprintf(cvarName, sizeof(cvarName), "af_recoil_%s", SlotInfo->weaponName); this->m_af_recoil[WeaponID] = this->CvarRegister(cvarName, "1.0"); +#endif Q_snprintf(cvarName, sizeof(cvarName), "af_distance_%s", SlotInfo->weaponName); - this->m_af_distance[WeaponID] = this->CvarRegister(cvarName, "8192.0"); + this->m_af_distance[WeaponID] = this->CvarRegister(cvarName, "3200.0"); } } } @@ -44,6 +48,7 @@ void CAccuracyFix::ServerActivate() g_engfuncs.pfnServerExecute(); } +#ifndef ACCURACY_DISABLE_RECOIL_CONTROL void CAccuracyFix::CmdEnd(const edict_t* pEdict) { auto Player = UTIL_PlayerByIndexSafe(ENTINDEX(pEdict)); @@ -56,6 +61,7 @@ void CAccuracyFix::CmdEnd(const edict_t* pEdict) } } } +#endif bool CAccuracyFix::TraceLine(const float* start, const float* end, int fNoMonsters, edict_t* pentToSkip, TraceResult* ptr) { @@ -71,6 +77,7 @@ bool CAccuracyFix::TraceLine(const float* start, const float* end, int fNoMonste { if (!((BIT(WEAPON_NONE) | BIT(WEAPON_HEGRENADE) | BIT(WEAPON_C4) | BIT(WEAPON_SMOKEGRENADE) | BIT(WEAPON_FLASHBANG) | BIT(WEAPON_KNIFE)) & BIT(Player->m_pActiveItem->m_iId))) { +#ifndef ACCURACY_DISABLE_RECOIL_CONTROL auto EntityIndex = Player->entindex(); if ((Player->edict()->v.button & IN_ATTACK) && (Player->m_flLastFired != this->m_Data[EntityIndex].LastFired)) @@ -79,8 +86,7 @@ bool CAccuracyFix::TraceLine(const float* start, const float* end, int fNoMonste this->m_Data[EntityIndex].WeaponId = Player->m_pActiveItem->m_iId; } - - int TargetIndex = 0, HitBoxPlace = 0; +#endif auto aimDistance = this->m_af_distance[Player->m_pActiveItem->m_iId]->value; @@ -89,32 +95,49 @@ bool CAccuracyFix::TraceLine(const float* start, const float* end, int fNoMonste aimDistance = this->m_af_accuracy_all->value; } + int TargetIndex = 0, HitBoxPlace = 0; + if (this->GetUserAiming(pentToSkip, &TargetIndex, &HitBoxPlace, aimDistance) > 0.0f) { - if (TargetIndex && HitBoxPlace) + if (TargetIndex) { - auto fwdDistance = this->m_af_accuracy[Player->m_pActiveItem->m_iId]->value; - - if (fwdDistance > 0) + if (HitBoxPlace) { - if (this->m_af_accuracy_all->value > 0) + if (!Player->IsBot()) { - fwdDistance = this->m_af_accuracy_all->value; + auto Target = UTIL_PlayerByIndexSafe(TargetIndex); + + if (Target) + { + auto Distance = (Player->edict()->v.origin - Target->edict()->v.origin).Length(); + + LOG_CONSOLE(PLID, "[%s] Distance: %f", __func__, Distance); + } } - g_engfuncs.pfnMakeVectors(pentToSkip->v.v_angle); + auto fwdDistance = this->m_af_accuracy[Player->m_pActiveItem->m_iId]->value; - Vector vEnd = Vector(0, 0, 0); + if (fwdDistance > 0.0f) + { + if (this->m_af_accuracy_all->value > 0.0f) + { + fwdDistance = this->m_af_accuracy_all->value; + } - vEnd = gpGlobals->v_forward * fwdDistance; + g_engfuncs.pfnMakeVectors(pentToSkip->v.v_angle); - vEnd[0] = start[0] + vEnd[0]; - vEnd[1] = start[1] + vEnd[1]; - vEnd[2] = start[2] + vEnd[2]; + Vector vEnd = Vector(0.0f, 0.0f, 0.0f); - g_engfuncs.pfnTraceLine(start, vEnd, fNoMonsters, pentToSkip, ptr); + vEnd = gpGlobals->v_forward * fwdDistance; - return true; + vEnd[0] = start[0] + vEnd[0]; + vEnd[1] = start[1] + vEnd[1]; + vEnd[2] = start[2] + vEnd[2]; + + g_engfuncs.pfnTraceLine(start, vEnd, fNoMonsters, pentToSkip, ptr); + + return true; + } } } } @@ -127,6 +150,7 @@ bool CAccuracyFix::TraceLine(const float* start, const float* end, int fNoMonste return false; } +#ifndef ACCURACY_DISABLE_RECOIL_CONTROL void CAccuracyFix::PostThink(CBasePlayer* Player) { if (Player->IsAlive()) @@ -155,6 +179,7 @@ void CAccuracyFix::PostThink(CBasePlayer* Player) } } } +#endif float CAccuracyFix::GetUserAiming(edict_t* edict, int* cpId, int* cpBody, float distance) { diff --git a/AccuracyFix/AccuracyFix.h b/AccuracyFix/AccuracyFix.h index 482b4b7..4fda0d7 100644 --- a/AccuracyFix/AccuracyFix.h +++ b/AccuracyFix/AccuracyFix.h @@ -1,10 +1,12 @@ #pragma once +#ifndef ACCURACY_DISABLE_RECOIL_CONTROL typedef struct S_PLAYER_DATA { float LastFired; int WeaponId; } P_PLAYER_DATA, *LP_PLAYER_DATA; +#endif class CAccuracyFix { @@ -18,14 +20,18 @@ class CAccuracyFix cvar_t* CvarRegister(const char* Name, const char* Value); private: +#ifndef ACCURACY_DISABLE_RECOIL_CONTROL std::map m_Data; +#endif std::map m_Cvar; cvar_t* m_af_accuracy_all; std::array m_af_accuracy; +#ifndef ACCURACY_DISABLE_RECOIL_CONTROL cvar_t* m_af_recoil_all; std::array m_af_recoil; +#endif; cvar_t* m_af_distance_all; std::array m_af_distance; diff --git a/AccuracyFix/MetaDLL.cpp b/AccuracyFix/MetaDLL.cpp index a55d8a2..b9079a6 100644 --- a/AccuracyFix/MetaDLL.cpp +++ b/AccuracyFix/MetaDLL.cpp @@ -27,7 +27,9 @@ C_DLLEXPORT int GetEntityAPI2_Post(DLL_FUNCTIONS* pFunctionTable, int* interface // Register Functions Here // gDLL_FunctionTable_Post.pfnServerActivate = DLL_POST_ServerActivate; +#ifndef ACCURACY_DISABLE_RECOIL_CONTROL gDLL_FunctionTable_Post.pfnCmdEnd = DLL_POST_CmdEnd; +#endif memcpy(pFunctionTable, &gDLL_FunctionTable_Post, sizeof(DLL_FUNCTIONS)); @@ -41,8 +43,10 @@ void DLL_POST_ServerActivate(edict_t* pEdictList, int edictCount, int clientMax) RETURN_META(MRES_IGNORED); } +#ifndef ACCURACY_DISABLE_RECOIL_CONTROL void DLL_POST_CmdEnd(const edict_t* pEdict) { gAccuracyFix.CmdEnd(pEdict); } +#endif #pragma endregion \ No newline at end of file diff --git a/AccuracyFix/MetaDLL.h b/AccuracyFix/MetaDLL.h index 6ca734d..477cf60 100644 --- a/AccuracyFix/MetaDLL.h +++ b/AccuracyFix/MetaDLL.h @@ -5,5 +5,7 @@ #pragma region DLL_POST void DLL_POST_ServerActivate(edict_t* pEdictList, int edictCount, int clientMax); +#ifndef ACCURACY_DISABLE_RECOIL_CONTROL void DLL_POST_CmdEnd(const edict_t* pEdict); +#endif #pragma endregion \ No newline at end of file diff --git a/AccuracyFix/ReGameDLL.cpp b/AccuracyFix/ReGameDLL.cpp index 4983cf8..65fbe90 100644 --- a/AccuracyFix/ReGameDLL.cpp +++ b/AccuracyFix/ReGameDLL.cpp @@ -77,15 +77,18 @@ bool ReGameDLL_Init() return false; } +#ifndef ACCURACY_DISABLE_RECOIL_CONTROL g_ReGameHookchains->CBasePlayer_PostThink()->registerHook(ReGameDLL_CBasePlayer_PostThink); +#endif return true; } bool ReGameDLL_Stop() { +#ifndef ACCURACY_DISABLE_RECOIL_CONTROL g_ReGameHookchains->CBasePlayer_PostThink()->unregisterHook(ReGameDLL_CBasePlayer_PostThink); - +#endif return true; } @@ -104,10 +107,11 @@ CGameRules *ReGameDLL_InstallGameRules(IReGameHook_InstallGameRules *chain) return gamerules; } - +#ifndef ACCURACY_DISABLE_RECOIL_CONTROL void ReGameDLL_CBasePlayer_PostThink(IReGameHook_CBasePlayer_PostThink* chain, CBasePlayer* pthis) { chain->callNext(pthis); gAccuracyFix.PostThink(pthis); } +#endif \ No newline at end of file diff --git a/AccuracyFix/ReGameDLL.h b/AccuracyFix/ReGameDLL.h index 5e6b8a4..2242b14 100644 --- a/AccuracyFix/ReGameDLL.h +++ b/AccuracyFix/ReGameDLL.h @@ -9,4 +9,6 @@ extern bool ReGameDLL_Init(); extern bool ReGameDLL_Stop(); CGameRules *ReGameDLL_InstallGameRules(IReGameHook_InstallGameRules* chain); -void ReGameDLL_CBasePlayer_PostThink(IReGameHook_CBasePlayer_PostThink* chain, CBasePlayer* pthis); \ No newline at end of file +#ifndef ACCURACY_DISABLE_RECOIL_CONTROL +void ReGameDLL_CBasePlayer_PostThink(IReGameHook_CBasePlayer_PostThink* chain, CBasePlayer* pthis); +#endif \ No newline at end of file diff --git a/AccuracyFix/precompiled.h b/AccuracyFix/precompiled.h index 21f817e..e3809a9 100644 --- a/AccuracyFix/precompiled.h +++ b/AccuracyFix/precompiled.h @@ -5,6 +5,9 @@ #define _CRT_SECURE_NO_WARNINGS #endif +// Disable Recoil Fix +#define ACCURACY_DISABLE_RECOIL_CONTROL + // If is not MSVC build #ifndef _WIN32 #define _GLIBCXX_USE_CXX11_ABI 0 diff --git a/cstrike/addons/accuracyfix/accuracyfix.cfg b/cstrike/addons/accuracyfix/accuracyfix.cfg index e0726ef..877dcf9 100644 --- a/cstrike/addons/accuracyfix/accuracyfix.cfg +++ b/cstrike/addons/accuracyfix/accuracyfix.cfg @@ -1,6 +1,6 @@ // Accuracy of all weapons // If is set, it will replace all weapon variables -// The default distance to fix trace line is 8192.0 +// The default distance to fix trace line is 3200.0 // Set to -1.0 to disable and use individual weapon values // // Default "-1.0" @@ -8,34 +8,34 @@ af_accuracy_all "-1.0" // Accuracy of each weapon -// The default distance to fix trace line is 8192.0 +// The default distance to fix trace line is 3200.0 // -// Default "8192.0" +// Default "3200.0" // -af_accuracy_weapon_ak47 "8192.0" -af_accuracy_weapon_aug "8192.0" -af_accuracy_weapon_awp "8192.0" -af_accuracy_weapon_deagle "8192.0" -af_accuracy_weapon_elite "8192.0" -af_accuracy_weapon_famas "8192.0" -af_accuracy_weapon_fiveseven "8192.0" -af_accuracy_weapon_g3sg1 "8192.0" -af_accuracy_weapon_galil "8192.0" -af_accuracy_weapon_glock "8192.0" -af_accuracy_weapon_glock18 "8192.0" -af_accuracy_weapon_m249 "8192.0" +af_accuracy_weapon_ak47 "3200.0" +af_accuracy_weapon_aug "3200.0" +af_accuracy_weapon_awp "3200.0" +af_accuracy_weapon_deagle "3200.0" +af_accuracy_weapon_elite "3200.0" +af_accuracy_weapon_famas "3200.0" +af_accuracy_weapon_fiveseven "3200.0" +af_accuracy_weapon_g3sg1 "3200.0" +af_accuracy_weapon_galil "3200.0" +af_accuracy_weapon_glock "3200.0" +af_accuracy_weapon_glock18 "3200.0" +af_accuracy_weapon_m249 "3200.0" af_accuracy_weapon_m3 "2020.0" -af_accuracy_weapon_m4a1 "8192.0" -af_accuracy_weapon_mac10 "8192.0" -af_accuracy_weapon_mp5navy "8192.0" -af_accuracy_weapon_p228 "8192.0" -af_accuracy_weapon_p90 "8192.0" -af_accuracy_weapon_scout "8192.0" -af_accuracy_weapon_sg550 "8192.0" -af_accuracy_weapon_sg552 "8192.0" -af_accuracy_weapon_tmp "8192.0" -af_accuracy_weapon_ump45 "8192.0" -af_accuracy_weapon_usp "8192.0" +af_accuracy_weapon_m4a1 "3200.0" +af_accuracy_weapon_mac10 "3200.0" +af_accuracy_weapon_mp5navy "3200.0" +af_accuracy_weapon_p228 "3200.0" +af_accuracy_weapon_p90 "3200.0" +af_accuracy_weapon_scout "3200.0" +af_accuracy_weapon_sg550 "3200.0" +af_accuracy_weapon_sg552 "3200.0" +af_accuracy_weapon_tmp "3200.0" +af_accuracy_weapon_ump45 "3200.0" +af_accuracy_weapon_usp "3200.0" af_accuracy_weapon_xm1014 "2020.0" // Recoil of all weapons @@ -89,32 +89,32 @@ af_recoil_weapon_xm1014 "1.0" af_distance_all "-1.0" // Aim distance check of each weapon -// The default distance check aim is 8192.0 +// The default distance check aim is 3200.0 // -// Default "8192.0" +// Default "3200.0" // -af_distance_weapon_ak47 "8192.0" -af_distance_weapon_aug "8192.0" -af_distance_weapon_awp "8192.0" -af_distance_weapon_deagle "8192.0" -af_distance_weapon_elite "8192.0" -af_distance_weapon_famas "8192.0" -af_distance_weapon_fiveseven "8192.0" -af_distance_weapon_g3sg1 "8192.0" -af_distance_weapon_galil "8192.0" -af_distance_weapon_glock "8192.0" -af_distance_weapon_glock18 "8192.0" -af_distance_weapon_m249 "8192.0" -af_distance_weapon_m3 "8192.0" -af_distance_weapon_m4a1 "8192.0" -af_distance_weapon_mac10 "8192.0" -af_distance_weapon_mp5navy "8192.0" -af_distance_weapon_p228 "8192.0" -af_distance_weapon_p90 "8192.0" -af_distance_weapon_scout "8192.0" -af_distance_weapon_sg550 "8192.0" -af_distance_weapon_sg552 "8192.0" -af_distance_weapon_tmp "8192.0" -af_distance_weapon_ump45 "8192.0" -af_distance_weapon_usp "8192.0" -af_distance_weapon_xm1014 "8192.0" +af_distance_weapon_ak47 "3200.0" +af_distance_weapon_aug "3200.0" +af_distance_weapon_awp "3200.0" +af_distance_weapon_deagle "3200.0" +af_distance_weapon_elite "3200.0" +af_distance_weapon_famas "3200.0" +af_distance_weapon_fiveseven "3200.0" +af_distance_weapon_g3sg1 "3200.0" +af_distance_weapon_galil "3200.0" +af_distance_weapon_glock "3200.0" +af_distance_weapon_glock18 "3200.0" +af_distance_weapon_m249 "3200.0" +af_distance_weapon_m3 "3200.0" +af_distance_weapon_m4a1 "3200.0" +af_distance_weapon_mac10 "3200.0" +af_distance_weapon_mp5navy "3200.0" +af_distance_weapon_p228 "3200.0" +af_distance_weapon_p90 "3200.0" +af_distance_weapon_scout "3200.0" +af_distance_weapon_sg550 "3200.0" +af_distance_weapon_sg552 "3200.0" +af_distance_weapon_tmp "3200.0" +af_distance_weapon_ump45 "3200.0" +af_distance_weapon_usp "3200.0" +af_distance_weapon_xm1014 "3200.0"