diff --git a/extensions/tf2/criticals.cpp b/extensions/tf2/criticals.cpp index 4c523a3d..f072cc36 100644 --- a/extensions/tf2/criticals.cpp +++ b/extensions/tf2/criticals.cpp @@ -188,7 +188,7 @@ DETOUR_DECL_MEMBER0(CalcIsAttackCriticalHelperBow, bool) } } -void InitialiseCritDetours() +bool InitialiseCritDetours() { calcIsAttackCriticalDetour = DETOUR_CREATE_MEMBER(CalcIsAttackCriticalHelper, "CalcCritical"); calcIsAttackCriticalMeleeDetour = DETOUR_CREATE_MEMBER(CalcIsAttackCriticalHelperMelee, "CalcCriticalMelee"); @@ -214,17 +214,33 @@ void InitialiseCritDetours() HookCreated = true; } - if (!HookCreated) + if (HookCreated) { - g_pSM->LogError(myself, "No critical hit forwards could be initialized - Disabled critical hit hooks"); - return; + return true; } + g_pSM->LogError(myself, "No critical hit forwards could be initialized - Disabled critical hit hooks"); + + return false; } void RemoveCritDetours() { - calcIsAttackCriticalDetour->Destroy(); - calcIsAttackCriticalMeleeDetour->Destroy(); - calcIsAttackCriticalBowDetour->Destroy(); + if (calcIsAttackCriticalDetour != NULL) + { + calcIsAttackCriticalDetour->Destroy(); + calcIsAttackCriticalDetour = NULL; + } + + if (calcIsAttackCriticalMeleeDetour != NULL) + { + calcIsAttackCriticalMeleeDetour->Destroy(); + calcIsAttackCriticalMeleeDetour = NULL; + } + + if (calcIsAttackCriticalBowDetour != NULL) + { + calcIsAttackCriticalBowDetour->Destroy(); + calcIsAttackCriticalBowDetour = NULL; + } } diff --git a/extensions/tf2/criticals.h b/extensions/tf2/criticals.h index 8aac6f48..e0f5722d 100644 --- a/extensions/tf2/criticals.h +++ b/extensions/tf2/criticals.h @@ -37,7 +37,7 @@ #include #include "CDetour/detours.h" -void InitialiseCritDetours(); +bool InitialiseCritDetours(); void RemoveCritDetours(); extern IForward *g_critForward; diff --git a/extensions/tf2/extension.cpp b/extensions/tf2/extension.cpp index ff71b55d..f683f962 100644 --- a/extensions/tf2/extension.cpp +++ b/extensions/tf2/extension.cpp @@ -303,13 +303,11 @@ void TF2Tools::OnPluginLoaded(IPlugin *plugin) { if (!m_CritDetoursEnabled && g_critForward->GetFunctionCount()) { - InitialiseCritDetours(); - m_CritDetoursEnabled = true; + m_CritDetoursEnabled = InitialiseCritDetours(); } if (!m_GetHolidayDetourEnabled && g_getHolidayForward->GetFunctionCount()) { - InitialiseGetHolidayDetour(); - m_GetHolidayDetourEnabled = true; + m_GetHolidayDetourEnabled = InitialiseGetHolidayDetour(); } } diff --git a/extensions/tf2/holiday.cpp b/extensions/tf2/holiday.cpp index bcefc822..d94fd3f2 100644 --- a/extensions/tf2/holiday.cpp +++ b/extensions/tf2/holiday.cpp @@ -27,17 +27,18 @@ DETOUR_DECL_STATIC0(GetHoliday, int) return actualres; } -void InitialiseGetHolidayDetour() +bool InitialiseGetHolidayDetour() { getHolidayDetour = DETOUR_CREATE_STATIC(GetHoliday, "GetHoliday"); - if (!getHolidayDetour) + if (getHolidayDetour != NULL) { - g_pSM->LogError(myself, "GetHoliday detour failed"); - return; + getHolidayDetour->EnableDetour(); + return true; } - getHolidayDetour->EnableDetour(); + g_pSM->LogError(myself, "GetHoliday detour failed"); + return false; } void RemoveGetHolidayDetour() diff --git a/extensions/tf2/holiday.h b/extensions/tf2/holiday.h index ad20bf63..5075062c 100644 --- a/extensions/tf2/holiday.h +++ b/extensions/tf2/holiday.h @@ -37,7 +37,7 @@ #include #include "CDetour/detours.h" -void InitialiseGetHolidayDetour(); +bool InitialiseGetHolidayDetour(); void RemoveGetHolidayDetour(); extern IForward *g_getHolidayForward;