Fix incorrect return and inability to block in TF2 OnCrit forward (r=FlaminSarge, VoiDeD).
This commit is contained in:
parent
1938be9e28
commit
5df8c9290f
@ -87,8 +87,8 @@ bool CritManager::TryEnable()
|
|||||||
if (!UTIL_ContainsDataTable(pNetworkable->GetServerClass()->m_pTable, TF_WEAPON_DATATABLE))
|
if (!UTIL_ContainsDataTable(pNetworkable->GetServerClass()->m_pTable, TF_WEAPON_DATATABLE))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
SH_ADD_MANUALHOOK(CalcIsAttackCriticalHelper, pEntity, SH_MEMBER(&g_CritManager, &CritManager::Hook_CalcIsAttackCriticalHelpers), false);
|
SH_ADD_MANUALHOOK(CalcIsAttackCriticalHelper, pEntity, SH_MEMBER(&g_CritManager, &CritManager::Hook_CalcIsAttackCriticalHelper), false);
|
||||||
SH_ADD_MANUALHOOK(CalcIsAttackCriticalHelperNoCrits, pEntity, SH_MEMBER(&g_CritManager, &CritManager::Hook_CalcIsAttackCriticalHelpers), false);
|
SH_ADD_MANUALHOOK(CalcIsAttackCriticalHelperNoCrits, pEntity, SH_MEMBER(&g_CritManager, &CritManager::Hook_CalcIsAttackCriticalHelperNoCrits), false);
|
||||||
|
|
||||||
m_entsHooked.Set(i);
|
m_entsHooked.Set(i);
|
||||||
}
|
}
|
||||||
@ -104,8 +104,8 @@ void CritManager::Disable()
|
|||||||
for (i; i != -1; i = m_entsHooked.FindNextSetBit(i))
|
for (i; i != -1; i = m_entsHooked.FindNextSetBit(i))
|
||||||
{
|
{
|
||||||
CBaseEntity *pEntity = gamehelpers->ReferenceToEntity(i);
|
CBaseEntity *pEntity = gamehelpers->ReferenceToEntity(i);
|
||||||
SH_REMOVE_MANUALHOOK(CalcIsAttackCriticalHelper, pEntity, SH_MEMBER(&g_CritManager, &CritManager::Hook_CalcIsAttackCriticalHelpers), false);
|
SH_REMOVE_MANUALHOOK(CalcIsAttackCriticalHelper, pEntity, SH_MEMBER(&g_CritManager, &CritManager::Hook_CalcIsAttackCriticalHelper), false);
|
||||||
SH_REMOVE_MANUALHOOK(CalcIsAttackCriticalHelperNoCrits, pEntity, SH_MEMBER(&g_CritManager, &CritManager::Hook_CalcIsAttackCriticalHelpers), false);
|
SH_REMOVE_MANUALHOOK(CalcIsAttackCriticalHelperNoCrits, pEntity, SH_MEMBER(&g_CritManager, &CritManager::Hook_CalcIsAttackCriticalHelperNoCrits), false);
|
||||||
|
|
||||||
m_entsHooked.Set(i, false);
|
m_entsHooked.Set(i, false);
|
||||||
}
|
}
|
||||||
@ -126,8 +126,8 @@ void CritManager::OnEntityCreated(CBaseEntity *pEntity, const char *classname)
|
|||||||
if (!UTIL_ContainsDataTable(pNetworkable->GetServerClass()->m_pTable, TF_WEAPON_DATATABLE))
|
if (!UTIL_ContainsDataTable(pNetworkable->GetServerClass()->m_pTable, TF_WEAPON_DATATABLE))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
SH_ADD_MANUALHOOK(CalcIsAttackCriticalHelper, pEntity, SH_MEMBER(&g_CritManager, &CritManager::Hook_CalcIsAttackCriticalHelpers), false);
|
SH_ADD_MANUALHOOK(CalcIsAttackCriticalHelper, pEntity, SH_MEMBER(&g_CritManager, &CritManager::Hook_CalcIsAttackCriticalHelper), false);
|
||||||
SH_ADD_MANUALHOOK(CalcIsAttackCriticalHelperNoCrits, pEntity, SH_MEMBER(&g_CritManager, &CritManager::Hook_CalcIsAttackCriticalHelpers), false);
|
SH_ADD_MANUALHOOK(CalcIsAttackCriticalHelperNoCrits, pEntity, SH_MEMBER(&g_CritManager, &CritManager::Hook_CalcIsAttackCriticalHelperNoCrits), false);
|
||||||
|
|
||||||
m_entsHooked.Set(gamehelpers->EntityToBCompatRef(pEntity));
|
m_entsHooked.Set(gamehelpers->EntityToBCompatRef(pEntity));
|
||||||
}
|
}
|
||||||
@ -144,13 +144,23 @@ void CritManager::OnEntityDestroyed(CBaseEntity *pEntity)
|
|||||||
if (!m_entsHooked.IsBitSet(index))
|
if (!m_entsHooked.IsBitSet(index))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
SH_REMOVE_MANUALHOOK(CalcIsAttackCriticalHelper, pEntity, SH_MEMBER(&g_CritManager, &CritManager::Hook_CalcIsAttackCriticalHelpers), false);
|
SH_REMOVE_MANUALHOOK(CalcIsAttackCriticalHelper, pEntity, SH_MEMBER(&g_CritManager, &CritManager::Hook_CalcIsAttackCriticalHelper), false);
|
||||||
SH_REMOVE_MANUALHOOK(CalcIsAttackCriticalHelperNoCrits, pEntity, SH_MEMBER(&g_CritManager, &CritManager::Hook_CalcIsAttackCriticalHelpers), false);
|
SH_REMOVE_MANUALHOOK(CalcIsAttackCriticalHelperNoCrits, pEntity, SH_MEMBER(&g_CritManager, &CritManager::Hook_CalcIsAttackCriticalHelperNoCrits), false);
|
||||||
|
|
||||||
m_entsHooked.Set(index, false);
|
m_entsHooked.Set(index, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CritManager::Hook_CalcIsAttackCriticalHelpers()
|
bool CritManager::Hook_CalcIsAttackCriticalHelper()
|
||||||
|
{
|
||||||
|
return Hook_CalcIsAttackCriticalHelpers(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CritManager::Hook_CalcIsAttackCriticalHelperNoCrits()
|
||||||
|
{
|
||||||
|
return Hook_CalcIsAttackCriticalHelpers(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CritManager::Hook_CalcIsAttackCriticalHelpers(bool noCrits)
|
||||||
{
|
{
|
||||||
CBaseEntity *pWeapon = META_IFACEPTR(CBaseEntity);
|
CBaseEntity *pWeapon = META_IFACEPTR(CBaseEntity);
|
||||||
|
|
||||||
@ -171,7 +181,15 @@ bool CritManager::Hook_CalcIsAttackCriticalHelpers()
|
|||||||
RETURN_META_VALUE(MRES_IGNORED, false);
|
RETURN_META_VALUE(MRES_IGNORED, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
int returnValue = 0;
|
int returnValue;
|
||||||
|
if (noCrits)
|
||||||
|
{
|
||||||
|
returnValue = SH_MCALL(pWeapon, CalcIsAttackCriticalHelperNoCrits)() ? 1 : 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
returnValue = SH_MCALL(pWeapon, CalcIsAttackCriticalHelper)() ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
int ownerIndex = -1;
|
int ownerIndex = -1;
|
||||||
CBaseHandle &hndl = *(CBaseHandle *) ((intptr_t)pWeapon + info.actual_offset);
|
CBaseHandle &hndl = *(CBaseHandle *) ((intptr_t)pWeapon + info.actual_offset);
|
||||||
@ -191,9 +209,9 @@ bool CritManager::Hook_CalcIsAttackCriticalHelpers()
|
|||||||
|
|
||||||
g_critForward->Execute(&result);
|
g_critForward->Execute(&result);
|
||||||
|
|
||||||
if (result && returnValue)
|
if (result > Pl_Continue)
|
||||||
{
|
{
|
||||||
RETURN_META_VALUE(MRES_SUPERCEDE, true);
|
RETURN_META_VALUE(MRES_SUPERCEDE, returnValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
RETURN_META_VALUE(MRES_IGNORED, false);
|
RETURN_META_VALUE(MRES_IGNORED, false);
|
||||||
|
@ -58,7 +58,10 @@ private:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
// CritHook
|
// CritHook
|
||||||
bool Hook_CalcIsAttackCriticalHelpers();
|
bool Hook_CalcIsAttackCriticalHelper();
|
||||||
|
bool Hook_CalcIsAttackCriticalHelperNoCrits();
|
||||||
|
private:
|
||||||
|
bool Hook_CalcIsAttackCriticalHelpers(bool noCrits);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool m_enabled;
|
bool m_enabled;
|
||||||
|
Loading…
Reference in New Issue
Block a user