[TF2] Detecting minicrits
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; }
|