/// <summary> /// Gets the spell. /// </summary> /// <param name="entry">The entry.</param> /// <returns></returns> public static Spell GetSpell(this SpellDatabaseEntry entry) { var spell = new Spell(entry.Slot); spell.SetSkillshot(spell.Delay / 1000, spell.Width, spell.Speed, spell.Collision, spell.Type); return(spell); }
/// <summary> /// Gets the prediction. /// </summary> /// <param name="target">The target.</param> /// <param name="spell">The spell.</param> /// <param name="source">The source.</param> /// <returns> /// <see cref="BakedCupcake" /> /// </returns> public BakedCupcake GetPrediction(Obj_AI_Base target, SpellDatabaseEntry spell, Obj_AI_Hero source = null) { return(this.GetPrediction( target, spell.Range, spell.Delay / 1000f, spell.MissileSpeed, spell.SpellType == SpellType.SkillshotCircle ? spell.Radius : spell.Width, spell.CollisionObjects.Any( x => x != CollisionableObjects.YasuoWall || x != CollisionableObjects.BraumShield), source)); }
public static Spell CreateSpell(this SpellDatabaseEntry entry) { try { var s = new Spell(entry.Slot, entry.Range); var collision = entry.CollisionObjects.Length > 1; var type = entry.SpellType.GetSkillshotType(); s.SetSkillshot(entry.Delay, entry.Width, entry.MissileSpeed, collision, type); return(s); } catch { return(new Spell(SpellSlot.Unknown)); } }
public static bool IsCurrentSpell(this SpellDatabaseEntry entry) { var spell = ObjectManager.Player.Spellbook.GetSpell(entry.Slot); return(string.Equals(spell.Name, entry.SpellName, StringComparison.CurrentCultureIgnoreCase)); }
/// <summary> /// Uses the spell. /// </summary> /// <param name="entry">The entry.</param> /// <param name="mode">The mode.</param> /// <exception cref="System.ArgumentOutOfRangeException"></exception> public void UseSpell(SpellDatabaseEntry entry, Orbwalking.OrbwalkingMode mode) { var spell = entry.GetSpell(); var castType = entry.CastType.First(); // Disable activated abilites if (mode == Orbwalking.OrbwalkingMode.None) { if (castType == CastType.Activate || castType == CastType.Toggle) { entry.GetSpell().Cast(); } return; } switch (castType) { case CastType.EnemyChampions: if (mode == Orbwalking.OrbwalkingMode.Combo) { spell.Cast(TargetSelector.GetTarget(spell.Range, TargetSelector.DamageType.True)); } break; case CastType.EnemyMinions: if (mode == Orbwalking.OrbwalkingMode.LaneClear) { var position = MinionManager.GetBestLineFarmLocation( MinionManager.GetMinions(spell.Range).Select(x => x.ServerPosition.To2D()).ToList(), spell.Width, spell.Range); if (position.MinionsHit > 2) { spell.Cast(position.Position); } } break; case CastType.EnemyTurrets: spell.Cast( ObjectManager.Get <Obj_AI_Turret>() .Where(x => x.IsEnemy && !x.IsDead && x.IsValid) .OrderBy(x => x.Distance(ObjectManager.Player)) .FirstOrDefault()); break; case CastType.AllyChampions: spell.Cast( HeroManager.Allies.Where(x => x.IsValidTarget(spell.Range, false)) .OrderBy(x => x.Distance(ObjectManager.Player)) .FirstOrDefault()); break; case CastType.AllyMinions: spell.Cast(MinionManager.GetMinions(spell.Range, MinionTypes.All, MinionTeam.Ally).FirstOrDefault()); break; case CastType.AllyTurrets: spell.Cast( ObjectManager.Get <Obj_AI_Turret>() .Where(x => x.IsAlly && !x.IsDead && x.IsValid) .OrderBy(x => x.Distance(ObjectManager.Player)) .FirstOrDefault()); break; case CastType.HeroPets: // todo REKSAI break; case CastType.Position: spell.Cast(TargetSelector.GetTarget(spell.Range, TargetSelector.DamageType.True)); break; case CastType.Direction: spell.Cast(TargetSelector.GetTarget(spell.Range, TargetSelector.DamageType.True)); break; case CastType.Self: spell.Cast(); break; case CastType.Charging: spell.Cast(); break; case CastType.Toggle: spell.Cast(); break; case CastType.Activate: spell.Cast(); break; default: throw new ArgumentOutOfRangeException(); } }