public static float healthAfterTime(TrackedRecall recall, float time) { var staticHPRegen = recall.Caster.CharData.BaseStaticHPRegen; var notVisiable = NotVisiableEnemies.FirstOrDefault(t => t.Target.IdEquals(recall.Caster)); return(Math.Min(recall.Caster.TotalShieldMaxHealth(), recall.Caster.TotalShieldHealth() + (staticHPRegen * ((notVisiable?.TicksPassed / 1000f ?? 0f) + (time / 1000f))))); }
public static bool CanBaseUlt(TrackedRecall recall, Baseult spell, AIHeroClient source) { var visiable = NotVisiableEnemies.FirstOrDefault(e => e.Target.IdEquals(recall.Caster)); return(!recall.Ulted && spell.IsReady() && (FowTolerance == 0 || visiable == null || FowTolerance * 1000 > visiable.TicksPassed - recall.TicksPassed) && MenuIni.Get <CheckBox>(recall.Caster.BaseSkinName).CurrentValue && spell.IsInRange(recall.CastPosition(spell, source)) && recall.TicksLeft > spell.TravelTime(recall.CastPosition(spell, source)) && Collision.Check(source, recall.CastPosition(spell, source), spell, recall.Caster) && calculateDamage(recall, source, spell) >= healthAfterTime(recall, spell.TravelTime(recall.CastPosition(spell, source)))); }
public float CalculateDamage(Obj_AI_Base source, TrackedRecall recall) { if (recall.Caster == null) { return(-1f); } var rawDamage = this.Damage; if (source.BaseSkinName.Equals("Jinx")) { rawDamage += (0.2f + 0.05f * source.Spellbook.GetSpell(this.Slot).Level) * (recall.Caster.MaxHealth - Program.healthAfterTime(recall, TravelTime(recall.CastPosition(this, source)))); } return(source.CalculateDamageOnUnit(recall.Caster, DamageType, rawDamage)); }
private static float calculateDamage(TrackedRecall recall, AIHeroClient source, Baseult spell) { return(spell.CalculateDamage(source, recall)); }
private static void Game_OnUpdate(EventArgs args) { foreach (var enemy in EntityManager.Heroes.Enemies) { if (!enemy.IsHPBarRendered && !NotVisiableEnemies.Any(e => e.Target.IdEquals(enemy))) { NotVisiableEnemies.Add(new NotVisiable(enemy)); } if (enemy.IsHPBarRendered && NotVisiableEnemies.Any(e => e.Target.IdEquals(enemy))) { NotVisiableEnemies.RemoveAll(t => t.Target.IdEquals(enemy)); } } if (BaseUltSpell == null || !TrackedRecalls.Any()) { return; } TrackedRecalls.RemoveAll(t => t.Ended); if (!Enabled || DisableKey) { return; } TrackedRecall recallTarget = null; switch (FocusMode) { case 0: recallTarget = TrackedRecalls.OrderByDescending(t => TargetSelector.GetPriority(t.Caster)).FirstOrDefault(t => CanBaseUlt(t, BaseUltSpell, Player.Instance)); break; case 1: recallTarget = TrackedRecalls.OrderBy(t => healthAfterTime(t, BaseUltSpell.TravelTime(t.CastPosition(BaseUltSpell, Player.Instance)))).FirstOrDefault(t => CanBaseUlt(t, BaseUltSpell, Player.Instance)); break; case 2: recallTarget = TrackedRecalls.OrderBy(t => t.StartTick).FirstOrDefault(t => CanBaseUlt(t, BaseUltSpell, Player.Instance)); break; case 3: recallTarget = TrackedRecalls.OrderByDescending(t => t.StartTick).FirstOrDefault(t => CanBaseUlt(t, BaseUltSpell, Player.Instance)); break; default: recallTarget = TrackedRecalls.OrderByDescending(t => TargetSelector.GetPriority(t.Caster)).FirstOrDefault(t => CanBaseUlt(t, BaseUltSpell, Player.Instance)); break; } if (recallTarget == null) { return; } var travelTime = BaseUltSpell.TravelTime(recallTarget.CastPosition(BaseUltSpell, Player.Instance)); var offset = 50 + Game.Ping + Tolerance; var mod = recallTarget.TicksLeft - travelTime; if (offset >= mod && BaseUltSpell.Cast(recallTarget.CastPosition(BaseUltSpell, Player.Instance))) { recallTarget.Ulted = true; } }