/* * Author: Needles * https://steamcommunity.com/profiles/76561198026257137/ */ printl("*** DAMAGE"); ::Damage <- {}; // @TODO - Incomplete function Damage::IsMinicrit(params) { // EARLY EXIT CONDITION - BACKUP AND VACC if (::Damage.DoIgnoreCrit(params)) return false; if (::Players.IsPlayerValid(params.attacker)) { if (::Players.IsMinicritBoosted(params.attacker)) return true; } if (::Players.IsPlayerValid(params.const_entity)) { // GENERIC TARGET MINICRITS if (params.const_entity.InCond(Constants.ETFCond.TF_COND_URINE)) // jarate return true; if (params.const_entity.InCond(Constants.ETFCond.TF_COND_MARKEDFORDEATH)) // marked for death return true; // DIRECT HIT AND RESERVE SHOOTER MINICRITS if ( (prams.const_entity.InAirDueToExplosion() || params.const_entity.InAirDueToKnockback()) && (params.idef == ITEM_DEFINITION_INDEX.DIRECT_HIT || params.idef == ITEM_DEFINITION_INDEX.RESERVE_SHOOTER) ) return true; // AXTINGUISHER, DETONATOR AND SCORCH SHOT if ((params.idef == ITEM_DEFINITION_INDEX.AXTINGUISHER || params.idef == ITEM_DEFINITION_INDEX.DETONATOR || params.idef == ITEM_DEFINITION_INDEX.SCORCH_SHOT) && ::Players.IsPlayerValid(params.const_entity) && ::Players.IsOnFire(params.const_entity)) return true; } // COW MANGLER if (params.idef == ITEM_DEFINITION_INDEX.COW_MANGLER) { if (::Players.IsPlayerValid(params.attacker) && ::Players.IsCritBoosted(params.attacker)) return true; if (NetProps.GetPropBool(params.inflictor, "m_bChargedShot") == true) return true; } // SYDNEY SLEEPER HEADSHOT // @TODO - implement // DEMO CHARGE // @TODO - implement // BACK SCATTER // @TODO - implement // ATOMIZER // @TODO - implement return false; } // @TODO - Incomplete function Damage::IsCrit(params) { if (::Damage.DoIgnoreCrit()) return false; if (::Players.IsPlayerValid(params.attacker)) { if (::Players.IsCritBoosted(params.attacker)) return true; // BUSHWAKA CRITS if (params.idef == ITEM_DEFINITION_INDEX.BUSHWACKA && ::Players.IsMinicritBoosted(params.attacker)) return true; } if (::Players.IsPlayerValid(params.const_entity)) { // FLAREGUN CRITS if (params.idef == ITEM_DEFINITION_INDEX.FLAREGUN && ::Players.IsOnFire(params.const_entity)) return true; } return false; } // @TODO - Figure out how to detect these cases function Damage::IsBullet(params) { return false; } function Damage::IsBlast(params) { return false; } function Damage::IsFire(params) { return false; } function Damage::DoIgnoreCrit(params) { if (!::Players.IsPlayerValid(params.const_entity)) return false; if (params.idef == ITEM_DEFINITION_INDEX.ENFORCER) return true; if (params.const_entity.InCond(Constants.ETFCond.TF_COND_DEFENSEBUFF)) return true; if (params.const_entity.InCond(Constants.ETFCond.TF_COND_MEDIGUN_UBER_BULLET_RESIST) && ::Damage.IsBullet(params.damage_type)) return true; if (params.const_entity.InCond(Constants.ETFCond.TF_COND_MEDIGUN_UBER_BLAST_RESIST) && ::Damage.IsBlast(params.damage_type)) return true; if (params.const_entity.InCond(Constants.ETFCond.TF_COND_MEDIGUN_UBER_FIRE_RESIST) && ::Damage.IsFire(params.damage_type)) return true; return false; } // @TODO - Incomplete function Damage::IsHeadshot(params) { if (params.weapon.GetClassname() != "tf_weapon_sniperrifle") return false; local isZoomed = (params.attacker.GetPlayerClass() != Constants.ETFClass.TF_CLASS_SNIPER && params.attacker.InCond(Constants.ETFCond.TF_COND_ZOOMED)); if (isZoomed == false) return false; return true; }