public SpellBase(SpellSlot slot, SpellType?type, int range = int.MaxValue) { Slot = slot; Type = type ?? SpellType.Self; Range = range; Game.OnTick += delegate { if (FpsBooster.CanBeExecuted(CalculationType.Prediction)) { } CachedPredictions.Clear(); if (FpsBooster.CanBeExecuted(CalculationType.Damage)) { _cachedDamage.Clear(); } if (FpsBooster.CanBeExecuted(CalculationType.HealthPrediction)) { _killableMinions.Clear(); } if (FpsBooster.CanBeExecuted(CalculationType.IsValidTarget)) { } _cachedObjectsInRange.Clear(); _cachedIsOnSegment.Clear(); _enemyHeroesCanBeCalculated = true; _laneClearMinionsCanBeCalculated = true; _enemyMinionsCanBeCalculated = true; _monstersCanBeCalculated = true; _bestObjectInLine.Hits = 0; _bestCircularObject.Hits = 0; }; }
public static void Initialize() { Game.OnTick += delegate { if (FpsBooster.CanBeExecuted(CalculationType.IsValidTarget)) { } ValidHeroes.Clear(); ValidHeroes.AddRange(EntityManager.Heroes.AllHeroes.Where(h => h.IsValidTarget())); ValidEnemyHeroes.Clear(); ValidEnemyHeroes.AddRange(ValidHeroes.Where(h => h.IsEnemy && !h.HasUndyingBuff() && !h.HasIgnite())); ValidEnemyHeroesInRange.Clear(); ValidEnemyHeroesInRange.AddRange(ValidEnemyHeroes.Where(h => AIO.MyHero.IsInRange(h, AIO.CurrentChampion.Range + h.BoundingRadius))); ValidAllyHeroes.Clear(); ValidAllyHeroes.AddRange(ValidHeroes.Where(h => h.IsAlly)); ValidAllyHeroesInRange.Clear(); ValidAllyHeroesInRange.AddRange(ValidAllyHeroes.Where(h => AIO.MyHero.IsInRange(h, AIO.CurrentChampion.Range + h.BoundingRadius))); }; }
public static void Initialize() { Game.OnTick += delegate { if (FpsBooster.CanBeExecuted(CalculationType.Distance)) { } CachedDistanceSqr.Clear(); CachedDistance.Clear(); CachedInRange.Clear(); CachedInAutoAttackRange.Clear(); if (FpsBooster.CanBeExecuted(CalculationType.IsValidTarget)) { } CachedHasBuff.Clear(); if (FpsBooster.CanBeExecuted(CalculationType.Damage)) { } CachedAutoAttackDamage.Clear(); }; }
public static void Initialize() { Game.OnTick += delegate { if (FpsBooster.CanBeExecuted(CalculationType.Distance)) { } foreach (var pair in CachedDistanceSqr) { pair.Value.Clear(); } foreach (var pair in CachedDistance) { pair.Value.Clear(); } foreach (var pair in CachedInRange.SelectMany(pair => pair.Value)) { pair.Value.Clear(); } foreach (var pair in CachedInAutoAttackRange) { pair.Value.Clear(); } if (FpsBooster.CanBeExecuted(CalculationType.IsValidTarget)) { } foreach (var pair in CachedHasBuff) { pair.Value.Clear(); } if (FpsBooster.CanBeExecuted(CalculationType.Damage)) { } foreach (var pair in CachedAutoAttackDamage) { pair.Value.Clear(); } }; }
public virtual BestDamageResult GetBestCombo(Obj_AI_Base target) { if (target != null) { var canBeCalculated = FpsBooster.CanBeExecuted(CalculationType.Damage); if (!PredictedDamage.ContainsKey(target.NetworkId)) { PredictedDamage[target.NetworkId] = new BestDamageResult { Target = target }; canBeCalculated = false; } var bestDamage = PredictedDamage[target.NetworkId]; if (!canBeCalculated) { return(bestDamage); } bestDamage = new BestDamageResult { Target = target }; foreach (var r1 in R.IsReady ? new[] { false, true } : new[] { false }) { var list = new List <SpellBase> { Smite, Ignite }; var manaWasted = 0f; if (r1) { list.Add(R); manaWasted = R.Mana; } foreach (var q1 in Q.IsReady ? new[] { false, true } : new[] { false }) { if (q1) { list.Add(Q); manaWasted += Q.Mana; } foreach (var w1 in W.IsReady ? new[] { false, true } : new[] { false }) { if (w1) { list.Add(W); manaWasted += W.Mana; } foreach (var e1 in E.IsReady ? new[] { false, true } : new[] { false }) { if (e1) { list.Add(E); manaWasted += E.Mana; } if (manaWasted <= MyHero.Mana) { var result = GetComboDamage(target, list); if (bestDamage.Damage >= target.TotalShieldHealth()) { if (result >= target.TotalShieldHealth() && (result < bestDamage.Damage || manaWasted < bestDamage.Mana || (bestDamage.R && !r1))) { bestDamage.Damage = result; bestDamage.Mana = manaWasted; bestDamage.List = list; } } else { if (result >= bestDamage.Damage) { bestDamage.Damage = result; bestDamage.Mana = manaWasted; bestDamage.List = list; } } } } } } } PredictedDamage[target.NetworkId] = bestDamage; return(PredictedDamage[target.NetworkId]); } return(new BestDamageResult { Damage = 0, Mana = 0 }); }