public static bool IsFullMagiclResistZuus(this Unit source) { return source.HasModifier("modifier_medusa_stone_gaze_stone") || source.HasModifier("modifier_huskar_life_break_charge") || source.HasModifier("modifier_oracle_fates_edict") || source.HasModifier("modifier_obsidian_destroyer_astral_imprisonment_prison") || source.HasModifier("modifier_puck_phase_shift") || source.HasModifier("modifier_eul_cyclone") || source.HasModifier("modifier_invoker_tornado") || source.HasModifier("modifier_dazzle_shallow_grave") || source.HasModifier("modifier_winter_wyvern_winters_curse") || (source.HasModifier("modifier_legion_commander_duel") && source.ClassID== ClassID.CDOTA_Unit_Hero_Legion_Commander && source.AghanimState()) || source.HasModifier("modifier_brewmaster_storm_cyclone") || source.HasModifier("modifier_shadow_demon_disruption") || source.HasModifier("modifier_tusk_snowball_movement") || source.HasModifier("modifier_abaddon_borrowed_time") || source.HasModifier("modifier_faceless_void_time_walk") || source.HasModifier("modifier_huskar_life_break_charge"); }
/// <summary> /// Returns actual attack range of a unit /// </summary> /// <param name="unit"></param> /// <returns></returns> public static float GetAttackRange(this Unit unit) { var bonus = 0.0; var classId = unit.ClassID; switch (classId) { case ClassID.CDOTA_Unit_Hero_TemplarAssassin: var psi = unit.Spellbook.SpellE; if (psi != null && psi.Level > 0) { var firstOrDefault = psi.AbilityData.FirstOrDefault(x => x.Name == "bonus_attack_range"); if (firstOrDefault != null) { bonus = firstOrDefault.GetValue(psi.Level - 1); } } break; case ClassID.CDOTA_Unit_Hero_Sniper: var aim = unit.Spellbook.SpellE; if (aim != null && aim.Level > 0) { var firstOrDefault = aim.AbilityData.FirstOrDefault(x => x.Name == "bonus_attack_range"); if (firstOrDefault != null) { bonus = firstOrDefault.GetValue(aim.Level - 1); } } break; case ClassID.CDOTA_Unit_Hero_Enchantress: var impetus = unit.Spellbook.SpellR; if (impetus.Level > 0 && unit.AghanimState()) { bonus = 190; } break; default: if (unit.Modifiers.Any(x => (x.Name == "modifier_lone_druid_true_form"))) { bonus = -423; } else if (unit.Modifiers.Any(x => (x.Name == "modifier_dragon_knight_dragon_form"))) { bonus = 372; } else if (unit.Modifiers.Any(x => (x.Name == "modifier_terrorblade_metamorphosis"))) { bonus = 422; } break; } return (float)(unit.AttackRange + bonus + unit.HullRadius / 2); }
/// <summary> /// Returns actual attack range of a hero /// </summary> /// <param name="hero"> /// The hero. /// </param> /// <returns> /// The <see cref="float" />. /// </returns> public static float GetAttackRange(this Hero hero) { var bonus = 0.0; float range; if (rangeDictionary.TryGetValue(hero.Handle, out range) && !Utils.SleepCheck("Common.GetAttackRange." + hero.Handle)) { return range; } var classId = hero.ClassID; switch (classId) { case ClassID.CDOTA_Unit_Hero_TemplarAssassin: var psi = hero.Spellbook.SpellE; if (psi != null && psi.Level > 0) { bonus = psi.GetAbilityData("bonus_attack_range"); } break; case ClassID.CDOTA_Unit_Hero_Sniper: var aim = hero.Spellbook.SpellE; if (aim != null && aim.Level > 0) { bonus = aim.GetAbilityData("bonus_attack_range"); } break; case ClassID.CDOTA_Unit_Hero_Enchantress: var impetus = hero.Spellbook.SpellR; if (impetus.Level > 0 && hero.AghanimState()) { bonus = 190; } break; default: if (hero.HasModifier("modifier_lone_druid_true_form")) { bonus = -423; } else if (hero.HasModifier("modifier_dragon_knight_dragon_form")) { bonus = 350; } else if (hero.HasModifier("modifier_terrorblade_metamorphosis")) { bonus = 400; } break; } if (hero.IsRanged) { var dragonLance = hero.FindItem("item_dragon_lance", true) ?? hero.FindItem("item_hurricane_pike", true); if (dragonLance != null && dragonLance.IsValid) { bonus += dragonLance.GetAbilityData("base_attack_range"); } } range = (float)(hero.AttackRange + bonus + hero.HullRadius); if (!rangeDictionary.ContainsKey(hero.Handle)) { rangeDictionary.Add(hero.Handle, range); } else { rangeDictionary[hero.Handle] = range; } Utils.Sleep(500, "Common.GetAttackRange." + hero.Handle); return range; }
/// <summary> /// Poofs all other meepos to this ones position. /// </summary> /// <param name="meepo"> /// The meepo. /// </param> public static void PoofAllToThisMeepo(this Meepo meepo) { var meepoCount = 1 + meepo.Spellbook.SpellR.Level + (meepo.AghanimState() ? 1 : 0); if (meeposList.Count(x => x.IsValid) <= meepoCount) { meeposList = ObjectManager.GetEntities<Meepo>().ToList(); } foreach (var poof in meeposList.Where(x => x.IsValid && !x.Equals(meepo) && x.IsAlive && x.CanCast()) .Select(otherMeepo => otherMeepo.Spellbook.Spell2) .Where(poof => poof.CanBeCasted())) { poof.UseAbility(meepo.Position); } }
/// <summary> /// Returns actual attack range of a unit /// </summary> /// <param name="unit"></param> /// <returns></returns> public static float GetAttackRange(this Unit unit) { var bonus = 0.0; float range; if (!RangeDictionary.TryGetValue(unit.Handle, out range) || Utils.SleepCheck("Common.GetAttackRange." + unit.Handle)) { var classId = unit.ClassID; switch (classId) { case ClassID.CDOTA_Unit_Hero_TemplarAssassin: var psi = unit.Spellbook.SpellE; if (psi != null && psi.Level > 0) { bonus = psi.GetAbilityData("bonus_attack_range"); } break; case ClassID.CDOTA_Unit_Hero_Sniper: var aim = unit.Spellbook.SpellE; if (aim != null && aim.Level > 0) { bonus = aim.GetAbilityData("bonus_attack_range"); } break; case ClassID.CDOTA_Unit_Hero_Enchantress: var impetus = unit.Spellbook.SpellR; if (impetus.Level > 0 && unit.AghanimState()) { bonus = 190; } break; default: if (unit.HasModifier("modifier_lone_druid_true_form")) { bonus = -423; } else if (unit.HasModifier("modifier_dragon_knight_dragon_form")) { bonus = 372; } else if (unit.HasModifier("modifier_terrorblade_metamorphosis")) { bonus = 422; } break; } if (unit.IsRanged) { var dragonLance = unit.FindItem("item_dragon_lance"); if (dragonLance != null) { bonus += dragonLance.GetAbilityData("base_attack_range"); } } range = (float)(unit.AttackRange + bonus + unit.HullRadius / 2); if (!RangeDictionary.ContainsKey(unit.Handle)) { RangeDictionary.Add(unit.Handle, range); } else { RangeDictionary[unit.Handle] = range; } Utils.Sleep(500, "Common.GetAttackRange." + unit.Handle); } return range; }