public static void Harass() { var target = TargetSelector2.GetTarget(720, DamageType.Magical); { if (Program.Q.IsReady() && target.IsValidTarget(Program.Q.Range) && Program.HarassMenu["useQ"].Cast <CheckBox>().CurrentValue) { Program.Q.Cast(target); } if (Program.W.IsReady() && target.IsValidTarget(Program.W.Range) && ObjectManager.Player.Spellbook.GetSpell(SpellSlot.W).Name != "leblancslidereturn" && Program.HarassMenu["useW"].Cast <CheckBox>().CurrentValue) { { var w = Program.W.GetPrediction(target); if (w.HitChance >= EloBuddy.SDK.Enumerations.HitChance.Low) { var predW = Prediction.Position.PredictCircularMissile(target, Program.E.Range, 500, 250, 1450); Program.W.Cast(target); } } } if (Program.E.IsReady() && target.IsValidTarget(Program.E.Range) && !Program.R.IsReady() && Program.HarassMenu["useE"].Cast <CheckBox>().CurrentValue) { var e = Program.E.GetPrediction(target); if (e.HitChance >= EloBuddy.SDK.Enumerations.HitChance.High) { var predE = Prediction.Position.PredictLinearMissile(target, Program.E.Range, 55, 250, 1600, 0); Program.E.Cast(predE.CastPosition); } } } }
public override void Execute() { var target = TargetSelector2.GetTarget(Q.Range, DamageType.Physical); if (target != null && target.IsValidTarget(Q.Range)) { PassiveManager.CastAutoAttack(target); if (Settings.UseQ && Q.IsReady() && target.IsValidTarget(Q.Range) && !target.IsZombie && Player.Instance.ManaPercent > Settings.Mana) { SpellManager.CastQ(); } if (Settings.UseTiamatHydra) { ItemManager.UseHydra(target); } if (Settings.UseE && E.IsReady() && target.IsValidTarget(E.Range) && !target.IsZombie && Player.Instance.ManaPercent > Settings.Mana) { E.Cast(); } if (Settings.UseR && R.IsReady() && target.IsValidTarget(R.Range) && !target.IsZombie && Player.Instance.ManaPercent > Settings.Mana) { SpellManager.CastR(); } } }
public static void Combo() { var target = TargetSelector2.GetTarget(1320, DamageType.Magical); var jumpPoint = Program.myHero.Position.Extend(target, 600).To3D(); { if (Program.W.IsReady() && !target.IsValidTarget(Program.W.Range) && target.IsValidTarget(Program.W.Range + Program.Q.Range) && ObjectManager.Player.Spellbook.GetSpell(SpellSlot.W).Name != "leblancslidereturn" && Program.Q.IsReady() && Program.R.IsReady() && target.Health < QDamage(target) + Q2Damage(target) + RQDamage(target)) { Program.W.Cast(jumpPoint); } if (Program.W.IsReady() && !target.IsValidTarget(Program.W.Range) && target.IsValidTarget(Program.W.Range + Program.Q.Range) && ObjectManager.Player.Spellbook.GetSpell(SpellSlot.W).Name != "leblancslidereturn" && Program.Q.IsReady() && target.Health < QDamage(target)) { Program.W.Cast(jumpPoint); } if (Program.Q.IsReady() && target.IsValidTarget(Program.Q.Range)) { Program.Q.Cast(target); } if (Program.R.IsReady() && target.IsValidTarget(Program.Q.Range) && ObjectManager.Player.Spellbook.GetSpell(SpellSlot.R).Name == "LeblancChaosOrbM") { Program.R.Cast(target); } if (Program.W.IsReady() && target.IsValidTarget(Program.W.Range) && ObjectManager.Player.Spellbook.GetSpell(SpellSlot.W).Name != "leblancslidereturn" && !Program.R.IsReady()) { Program.W.Cast(target); } else if (Program.R.IsReady() && Program.LastCast[Program.Spells["W"]] + 150 < Environment.TickCount && ObjectManager.Player.Spellbook.GetSpell(SpellSlot.W).Name != "leblancslidereturn") { Program.W.Cast(target); } if (Program.E.IsReady() && target.IsValidTarget(Program.E.Range) && Program.LastCast[Program.Spells["E"]] + 150 < Environment.TickCount) { var e = Program.E.GetPrediction(target); if (e.HitChance >= EloBuddy.SDK.Enumerations.HitChance.High) { var predE = Prediction.Position.PredictLinearMissile(target, Program.E.Range, 55, 250, 1600, 0); Program.E.Cast(predE.CastPosition); } } } }
public static void ToggleHarass() { var target = TargetSelector2.GetTarget(720, DamageType.Magical); { if (Program.Q.IsReady() && Program.HarassMenu["qHarassToggle"].Cast <KeyBind>().CurrentValue&& target.IsValidTarget(Program.Q.Range)) { Program.Q.Cast(target); } } }
private static void Combo() { if (Heal != null && SubMenu["Misc"]["heal"].Cast <CheckBox>().CurrentValue&& Heal.IsReady() && HealthPercent <= SubMenu["Misc"]["hp"].Cast <Slider>().CurrentValue && myHero.CountEnemiesInRange2(600) > 0 && Heal.IsReady()) { Heal.Cast(); Console.WriteLine("heal "); } var target = TargetSelector2.GetTarget(E.Range, TargetSelector2.DamageType.Physical); orbwalker.ForceTarget(target); if (!target.IsValidTarget(E.Range)) { return; } if (SubMenu["Combo"]["E"].Cast <CheckBox>().CurrentValue&& target != null && target.IsValidTarget(E.Range) && E.IsReady() && SubMenu["Misc"][target.ChampionName + "E"].Cast <CheckBox>().CurrentValue) { Condemn(); Console.WriteLine(" E"); } if (SubMenu["Combo"]["R"].Cast <CheckBox>().CurrentValue&& myHero.CountEnemiesInRange2(600f) >= (SubMenu["Combo"]["R2"].Cast <Slider>().CurrentValue) && R.IsReady()) { R.Cast(); Console.WriteLine("R"); } var mousePos = myHero.Position.Extend2(Game.CursorPos, Q.Range); if ((SubMenu["Combo"]["Qult"].Cast <CheckBox>().CurrentValue&& Q.IsReady() && myHero.HasBuff("vayneinquisition") && myHero.CountEnemiesInRange2(1500) > 0 && myHero.CountEnemiesInRange2(670) != 1)) { myHero.Spellbook.CastSpell(SpellSlot.Q, mousePos, true); Console.WriteLine(" RQ"); } if (SubMenu["Combo"]["useItems"].Cast <CheckBox>().CurrentValue) { if (Item.HasItem((int)ItemId.Blade_of_the_Ruined_King, myHero) && Item.CanUseItem((int)ItemId.Blade_of_the_Ruined_King) && HealthPercent <= SubMenu["Combo"]["myhp"].Cast <Slider>().CurrentValue) { Item.UseItem((int)ItemId.Blade_of_the_Ruined_King, target); } if (Item.HasItem((int)ItemId.Bilgewater_Cutlass, myHero) && Item.CanUseItem((int)ItemId.Bilgewater_Cutlass) && target.IsValidTarget(myHero.GetAutoAttackRange())) { Item.UseItem((int)ItemId.Bilgewater_Cutlass, target); } if (Item.HasItem((int)ItemId.Youmuus_Ghostblade, myHero) && Item.CanUseItem((int)ItemId.Youmuus_Ghostblade) && myHero.Distance4(target.Position) <= myHero.GetAutoAttackRange()) { Item.UseItem((int)ItemId.Youmuus_Ghostblade); } } }
public override void Execute() { var target = TargetSelector2.GetTarget(Q.Range, DamageType.Physical); if (target != null && target.IsValidTarget(R.Range)) { PassiveManager.CastAutoAttack(target); if (Settings.UseYomuus) { ItemManager.UseYomu(); } if (Settings.UseQ && Q.IsReady() && target.IsValidTarget(Q.Range) && !target.IsZombie) { SpellManager.CastQ(); } if (Settings.UseCutlassBotrk) { ItemManager.UseCastables(); } if (Settings.UseTiamatHydra) { ItemManager.UseHydra(target); } if (Settings.UseE && E.IsReady() && target.IsValidTarget(E.Range) && !target.IsZombie) { E.Cast(); } if (Settings.UseR && R.IsReady() && target.IsValidTarget(R.Range) && !target.IsZombie && Config.Modes.Combo.UseRonTarget(target.ChampionName) && Player.Instance.HealthPercent <= Config.Modes.Combo.RSliderValue()) { SpellManager.CastR(); } } }
public static void Chainz() { var target = TargetSelector2.GetTarget(950, DamageType.Magical); if (Program.E.IsReady() && target.IsValidTarget(Program.E.Range)) { var e = Program.E.GetPrediction(target); if (e.HitChance >= EloBuddy.SDK.Enumerations.HitChance.High) { var predE = Prediction.Position.PredictLinearMissile(target, Program.E.Range, 55, 250, 1600, 0); Program.E.Cast(predE.CastPosition); } } if (Program.R.IsReady() && target.IsValidTarget(Program.E.Range) && ObjectManager.Player.Spellbook.GetSpell(SpellSlot.R).Name == "LeblancSoulShackleM") { var e = Program.E.GetPrediction(target); if (e.HitChance >= EloBuddy.SDK.Enumerations.HitChance.High && Program.LastCast[Program.Spells["ER"]] + 1000 < Environment.TickCount) { var predR = Prediction.Position.PredictLinearMissile(target, Program.E.Range, 55, 250, 1600, 0); Program.R.Cast(predR.CastPosition); } } }
public static void Loading_OnLoadingComplete(EventArgs args) { if (myHero.Hero != Champion.Vayne) { return; } Chat.Print("<font color=\"#F20000\"><b>Doctor Vayne:</b></font> Loaded!"); Chat.Print("Good Luck!"); Q = new Spell2(SpellSlot.Q); W = new Spell2(SpellSlot.W); E = new Spell2(SpellSlot.E, 590f); E.SetTargetted(0.25f, 2200f); R = new Spell2(SpellSlot.R); var slot = myHero.GetSpellSlotFromName("summonerheal"); if (slot != SpellSlot.Unknown) { Heal = new Spell.Active(slot, 600); } menu = MainMenu.AddMenu(AddonName, AddonName + " by " + Author + " v1.0"); menu.AddLabel(AddonName + " Doctor Vayne " + Author); menu.AddLabel("Good Luck!"); SubMenu["Combo"] = menu.AddSubMenu("连招", "Combo"); SubMenu["Combo"].AddGroupLabel("Q 设置"); SubMenu["Combo"].Add("Q", new CheckBox("使用 Q", true)); SubMenu["Combo"].Add("Qult", new CheckBox("大招智能 Q", true)); var Q1 = SubMenu["Combo"].Add("Qmode", new Slider("Q 模式", 0, 0, 1)); var Q2 = new[] { "智能", "鼠标位置" }; Q1.DisplayName = Q2[Q1.CurrentValue]; Q1.OnValueChange += delegate(ValueBase <int> sender, ValueBase <int> .ValueChangeArgs changeArgs) { sender.DisplayName = Q2[changeArgs.NewValue]; }; SubMenu["Combo"].AddSeparator(10); SubMenu["Combo"].Add("E", new CheckBox("使用 E", true)); SubMenu["Combo"].Add("ELast", new CheckBox("使用 E 击杀敌人", false)); SubMenu["Combo"].Add("PushDistance", new Slider("E 推距离", 380, 300, 425)); SubMenu["Combo"].Add("R", new CheckBox("使用 R", true)); SubMenu["Combo"].Add("R2", new Slider("范围内敌人数量 X 时", 2, 0, 5)); SubMenu["Combo"].Add("noaastealth", new CheckBox("隐身时不普攻", true)); SubMenu["Combo"].Add("noaastealth2", new Slider("范围内敌人数量 X 时", 2, 0, 5)); SubMenu["Combo"].AddSeparator(10); SubMenu["Combo"].AddGroupLabel("物品设置"); SubMenu["Combo"].Add("useItems", new CheckBox("使用物品", true)); SubMenu["Combo"].Add("myhp", new Slider("玩家生命低于X %时使用破败", 55, 0, 100)); SubMenu["Harass"] = menu.AddSubMenu("骚扰", "Harass"); SubMenu["Harass"].Add("Q", new CheckBox("使用 Q", true)); SubMenu["Harass"].Add("E", new CheckBox("使用 E", true)); SubMenu["LastHit"] = menu.AddSubMenu("尾兵", "LastHit"); SubMenu["LastHit"].Add("Q", new CheckBox("使用 Q", true)); SubMenu["LastHit"].Add("LastHitMana", new Slider("蓝量大于", 80, 0, 100)); SubMenu["LaneClear"] = menu.AddSubMenu("清线", "LaneClear"); SubMenu["LaneClear"].Add("Q", new CheckBox("使用 Q", true)); SubMenu["LaneClear"].Add("LaneClearMana", new Slider("蓝量大于", 85, 0, 100)); SubMenu["JungleClear"] = menu.AddSubMenu("清野", "JungleClear"); SubMenu["JungleClear"].Add("E", new CheckBox("使用 E", true)); SubMenu["JungleClear"].Add("JungleClearMana", new Slider("蓝量大于", 50, 0, 100)); SubMenu["Misc"] = menu.AddSubMenu("杂项", "Misc"); SubMenu["Misc"].AddGroupLabel("防突进/技能打断设置"); SubMenu["Misc"].Add("UseEInterrupt", new CheckBox("使用E防突进/技能打断", true)); SubMenu["Misc"].Add("AntiGapQ", new CheckBox("使用Q造成间距", true)); SubMenu["Misc"].AddSeparator(10); foreach (var hero in EntityManager.Heroes.Enemies.Where(x => x.IsEnemy)) { SubMenu["Misc"].Add(hero.ChampionName, new CheckBox("对英雄防突进/技能打断 " + hero.ChampionName, true)); } SubMenu["Misc"].AddSeparator(10); foreach (var enemy in EntityManager.Heroes.Enemies.Where(x => x.IsEnemy)) { SubMenu["Misc"].Add(enemy.ChampionName + "E", new CheckBox("对英雄使用E " + enemy.ChampionName, true)); } SubMenu["Misc"].AddSeparator(10); SubMenu["Misc"].AddGroupLabel("优先攻击W目标"); SubMenu["Misc"].Add("focusW", new CheckBox("优先攻击W目标触发3W", true)); SubMenu["Misc"].Add("waypoint", new CheckBox("显示目标行径", true)); SubMenu["Misc"].AddSeparator(10); SubMenu["Misc"].AddGroupLabel("治疗设置"); SubMenu["Misc"].Add("heal", new CheckBox("使用治疗", true)); SubMenu["Misc"].Add("hp", new Slider("生命低于", 25, 0, 100)); SubMenu["QSS"] = menu.AddSubMenu("自动解控", "QSS"); SubMenu["QSS"].AddGroupLabel("自动水银/米凯尔"); SubMenu["QSS"].Add("use", new KeyBind("使用水银/米凯尔", false, KeyBind.BindTypes.PressToggle, 'K')); SubMenu["QSS"].Add("delay", new Slider("延迟施放设置", 1000, 0, 2000)); buffs = new[] { BuffType.Blind, BuffType.Charm, BuffType.CombatDehancer, BuffType.Fear, BuffType.Flee, BuffType.Knockback, BuffType.Knockup, BuffType.Polymorph, BuffType.Silence, BuffType.Sleep, BuffType.Snare, BuffType.Stun, BuffType.Suppression, BuffType.Taunt, BuffType.Poison }; for (int i = 0; i < buffs.Length; i++) { SubMenu["QSS"].Add(buffs[i].ToString(), new CheckBox(buffs[i].ToString(), true)); } orbwalker = new Orbwalking.Orbwalker(menu); TargetSelector2.Initialize(); Spell2.Initialize(); Prediction2.Initialize(); _traps = new List <GameObject>(); Obj_AI_Base.OnProcessSpellCast += Obj_AI_Base_OnProcessSpellCast; Game.OnUpdate += Game_OnUpdate; Obj_AI_Base.OnSpellCast += Obj_AI_Base_OnSpellCast; Obj_AI_Base.OnCreate += Obj_AI_Base_OnCreate; Obj_AI_Base.OnDelete += Obj_AI_Base_OnDelete; Orbwalking.AfterAttack += Orbwalking_AfterAttack; Interrupter2.OnInterruptableTarget += Interrupter2_OnInterruptableTarget; AntiGapcloser.OnEnemyGapcloser += AntiGapcloser_OnEnemyGapcloser; Drawing.OnDraw += Drawing_OnDraw; Player.OnIssueOrder += Player_OnIssueOrder; }
public static void Game_OnUpdate(EventArgs args) { switch (orbwalker.ActiveMode) { case Orbwalking.OrbwalkingMode.Combo: Combo(); break; case Orbwalking.OrbwalkingMode.Clear: JungleClear2(); break; } if (SubMenu["QSS"]["use"].Cast <KeyBind>().CurrentValue) { for (int i = 0; i < buffs.Length; i++) { if (myHero.HasBuffOfType(buffs[i]) && SubMenu["QSS"][buffs[i].ToString()].Cast <CheckBox>().CurrentValue&& myHero.CountEnemiesInRange(800) > 0) { var delay = SubMenu["QSS"]["delay"].Cast <Slider>().CurrentValue; if (Item.CanUseItem(3140)) { Core.DelayAction(() => { Item.UseItem(3140); }, delay); } else if (Item.CanUseItem(3139)) { Core.DelayAction(() => { Item.UseItem(3139); }, delay); } } } } if (SubMenu["Misc"]["focusW"].Cast <CheckBox>().CurrentValue) { if (FocusWTarget == null && orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.Combo || orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.Mixed) { return; } if (FocusWTarget.IsValidTarget(myHero.GetAutoAttackRange()) && !FocusWTarget.IsDead && orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Combo || orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Mixed) { TargetSelector2.GetPriority(FocusWTarget); Console.WriteLine("Focus W"); } else { TargetSelector2.GetPriority( TargetSelector2.GetTarget(myHero.AttackRange, TargetSelector2.DamageType.Physical)); } } AIHeroClient bestEnemy = null; foreach (var target in EntityManager.Heroes.Enemies.Where(target => target.IsValidTarget(E.Range))) { if (target == null) { return; } if (bestEnemy == null) { bestEnemy = target; } else if (myHero.Distance4(target.Position) < myHero.Distance4(bestEnemy.Position)) { bestEnemy = target; } if (SubMenu["Combo"]["castE"].Cast <KeyBind>().CurrentValue&& bestEnemy != null) { E.CastOnUnit(bestEnemy); } } }
private static void Obj_AI_Base_OnSpellCast(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args) { if (!sender.IsMe) { return; } var enemy = TargetSelector2.GetTarget(E.Range, TargetSelector2.DamageType.Physical); if (enemy == null) { return; } if (enemy != null) { var mousePos = myHero.Position.Extend2(Game.CursorPos, Q.Range); if (SubMenu["Harass"]["Q"].Cast <CheckBox>().CurrentValue&& orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Mixed && enemy.IsValidTarget(myHero.GetAutoAttackRange()) && Q.IsReady()) { myHero.Spellbook.CastSpell(SpellSlot.Q, mousePos, true); orbwalker.ForceTarget(enemy); } if (SubMenu["Harass"]["E"].Cast <CheckBox>().CurrentValue&& E.IsReady() && !Q.IsReady() && orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Mixed && enemy.IsValidTarget(myHero.GetAutoAttackRange())) { E.Cast(enemy); orbwalker.ForceTarget(enemy); } } var LastHitE = myHero; foreach (var Etarget in EntityManager.Heroes.Enemies.Where(Etarget => Etarget.IsValidTarget(E.Range) && Etarget.Path.Count() < 2)) { if (SubMenu["Combo"]["ELast"].Cast <CheckBox>().CurrentValue&& E.IsReady() && myHero.CountEnemiesInRange2(600) <= 1) { var dmgE = myHero.GetSpellDamage2(Etarget, SpellSlot.E); if (dmgE > Etarget.Health || (WTarget(Etarget) == 2 && dmgE + Wdmg(Etarget) > Etarget.Health)) { LastHitE = Etarget; } } if (LastHitE != myHero) { E.CastOnUnit(LastHitE); } } if (sender.Spellbook.Owner.IsMe) { if (args.Slot == SpellSlot.Q) { if (Tumble.TumbleOrderPos != Vector3.Zero) { if (Tumble.TumbleOrderPos.IsDangerousPosition()) { Tumble.TumbleOrderPos = Vector3.Zero; args.Process = false; } else { Tumble.TumbleOrderPos = Vector3.Zero; } } } } }
private static void Game_OnTick(EventArgs args) { foreach (var item in ActiveItems) { if (_Player.InventoryItems.All(a => a.Id != item.Id)) { continue; } switch (item.ItemType) { case ItemType.Offensive: { if (!Orbwalker.ActiveModesFlags.HasFlag(Orbwalker.ActiveModes.Combo)) { continue; } var target = TargetSelector2.GetTarget(1320, DamageType.Magical); var menuItem = OffensiveMenu[item.Name + "Manager"].Cast <CheckBox>() ?? Offensive2Menu[item.Name + "Manager"].Cast <CheckBox>(); var menuItemMe = OffensiveMenu[item.Name + "ManagerMinMeHP"].Cast <Slider>() ?? Offensive2Menu[item.Name + "ManagerMinMeHP"].Cast <Slider>(); var menuItemEnemy = OffensiveMenu[item.Name + "ManagerMinEnemyHP"].Cast <Slider>() ?? Offensive2Menu[item.Name + "ManagerMinEnemyHP"].Cast <Slider>(); if (!target.IsValidTarget() || target.Distance(_Player) > item.Range || (item.MeleeOnly && !_Player.IsMelee) || !menuItem.CurrentValue || menuItemMe.CurrentValue <= _Player.HealthPercent || menuItemEnemy.CurrentValue <= target.HealthPercent) { continue; } switch (item.CastType) { case CastType.Targeted: { var spellSlot = _Player.InventoryItems.FirstOrDefault(a => a.Id == item.Id); if (spellSlot != null && Player.GetSpell(spellSlot.SpellSlot).IsReady) { Player.CastSpell(spellSlot.SpellSlot, target); } } break; case CastType.SelfCast: { var spellSlot = _Player.InventoryItems.FirstOrDefault(a => a.Id == item.Id); if (spellSlot != null && Player.GetSpell(spellSlot.SpellSlot).IsReady) { Player.CastSpell(spellSlot.SpellSlot); } } break; } } break; case ItemType.Healing: { var menuItem = PotionsMenu[item.Name + "Manager"].Cast <CheckBox>(); var menuItemMe = PotionsMenu[item.Name + "ManagerMinMeHP"].Cast <Slider>(); if (_Player.InFountain() || _Player.HasBuff(item.BuffName) || !menuItem.CurrentValue || menuItemMe.CurrentValue < _Player.HealthPercent) { continue; } var spellSlot = _Player.InventoryItems.FirstOrDefault(a => a.Id == item.Id); if (spellSlot != null && Player.GetSpell(spellSlot.SpellSlot).IsReady) { Player.CastSpell(spellSlot.SpellSlot); } } break; case ItemType.ManaRestore: { var menuItem = PotionsMenu[item.Name + "Manager"].Cast <CheckBox>(); var menuItemMe = PotionsMenu[item.Name + "ManagerMinMeMana"].Cast <Slider>(); if (_Player.InFountain() || _Player.HasBuff(item.BuffName) || !menuItem.CurrentValue || menuItemMe.CurrentValue < _Player.ManaPercent) { continue; } var spellSlot = _Player.InventoryItems.FirstOrDefault(a => a.Id == item.Id); if (spellSlot != null && Player.GetSpell(spellSlot.SpellSlot).IsReady) { Player.CastSpell(spellSlot.SpellSlot); } } break; case ItemType.Cleanse: { if (!Orbwalker.ActiveModesFlags.HasFlag(Orbwalker.ActiveModes.Combo)) { return; } foreach (var buffInstance in _Player.Buffs) { if (BuffTypes.ContainsKey(buffInstance.Type) && Cleansers[BuffTypes[buffInstance.Type]].Cast <CheckBox>().CurrentValue) { var spellSlot = _Player.InventoryItems.FirstOrDefault(a => a.Id == item.Id); if (spellSlot != null && Player.GetSpell(spellSlot.SpellSlot).IsReady) { Player.CastSpell(spellSlot.SpellSlot, _Player); } } } } break; } } }