Because there are specific situations in which it will happen, it's easy to detect. This isn't a finished stock, nor is the one for critbuffed.
PHP Code:
stock bool:TF2_WillMinicrit(iAtker, iVictim = -1, iDmgType = DMG_GENERIC, iWeapon = -1) // DMG_GENERIC is also known as 0
{
if (iDmgType & DMG_CRIT || TF2_IsPlayerCritBuffed(iAtker))
{
return false;
}
if (TF2_IsPlayerMiniCritBuffed(iAtker))
{
return true;
}
if (iVictim != -1)
{
if (TF2_IsPlayerMiniCritDebuffed(iVictim))
{
return true;
}
/*if (iWeapon != -1)
{
switch (GetWeaponIndex(iWeapon))
{
case 127, 415: // Direct Hit, Reserve Shooter | If you have TF2Attributes, you can just use HasAttribute for "mod mini-crit airborne"
{
if (TF2_IsPlayerAirborne(iVictim)) // 114 | mod mini-crit airborne
{
return true;
}
}
}
}*/
}
return false;
}
stock bool:TF2_IsPlayerAirborne(iClient)
{
if (!(GetEntityFlags(iClient) & FL_ONGROUND))
{
return TF2_IsPlayerInAnyOneOfConditions(iClient, {TFCond:99, TFCond_BlastJumping, TFCond:99}, 3); // the second 99 should be the new airblast condition
}
return false;
}
stock bool:TF2_IsPlayerCritBuffed(iClient) // TODO: Compare with Slender version
{
return TF2_IsPlayerInAnyOneOfConditions(iClient,
{TFCond_Kritzkrieged, TFCond_HalloweenCritCandy, TFCond_CritCanteen,
TFCond_CritDemoCharge, TFCond_CritOnFirstBlood, TFCond_CritOnWin,
TFCond_CritOnFlagCapture, TFCond_CritOnKill, TFCond_CritMmmph}, 9
);
}
stock bool:TF2_IsPlayerMiniCritBuffed(iClient) // TFCond_CritHype
{
return TF2_IsPlayerInAnyOneOfConditions(iClient, {TFCond_CritCola, TFCond_Buffed}, 2);
}
stock bool:TF2_IsPlayerMiniCritDebuffed(iClient)
{
return TF2_IsPlayerInAnyOneOfConditions(iClient, {TFCond_MarkedForDeath, TFCond_MarkedForDeathSilent, TFCond_Jarated}, 3);
}
stock GetWeaponIndex(iWeapon)
{
return (iWeapon > MaxClients && IsValidEntity(iWeapon)) ? GetEntProp(iWeapon, Prop_Send, "m_iItemDefinitionIndex"):-1;
}
public const TFCondValue_Invaild = -1;
stock bool:TF2_IsPlayerInAnyOneOfConditions(iClient, iCond[], iCount)
{
for (new i = 0; i < iCount; i++)
{
if (iCond[i] <= TFCondValue_Invaild)
{
break;
}
if (TF2_IsPlayerInCondition(iClient, TFCond:iCond[i]))
{
return true;
}
}
return false;
}
__________________