public override void fromValueMap(Dictionary <string, string> vals) { int evaderCount = Int32.Parse(vals[GameParamsValueNames.EVADERS_COUNT.key]); int pursuerCount = Int32.Parse(vals[GameParamsValueNames.PURSUERS_COUNT.key]); r_p = Int32.Parse(vals[GameParamsValueNames.PURSUERS_VELOCITY.key]); r_e = Int32.Parse(vals[GameParamsValueNames.EVADERS_TRANSMISSION_RANGE.key]); r_s = Int32.Parse(vals[GameParamsValueNames.EVADERS_SENSING_RANGE.key]); p_d = double.Parse( GameParamsValueNames.PURSUERS_DETECTION_PROB.tryRead(vals)); canEvadersReceiveMultipleBroadcasts = (vals[GameParamsValueNames.EVADERS_CAN_RECEIVE_SIMULTENOUS_BROADCASTS.key] == "1"); canSinksSensePursuers = (vals[GameParamsValueNames.SINKS_SENSE_PURSUERS.key] == "1"); areSinksSafe = (vals[GameParamsValueNames.SINKS_SAFE_POINTS.key] == "1"); EvaderCircumferenceEntranceKillProb = float.Parse(GameParamsValueNames.EVADERS_CIRCUMFERENCE_ENTRY_KILL_PROB.tryRead(vals)); R = ReflectionUtils.constructEmptyCtorType <ARewardFunction>(vals[GameParamsValueNames.REWARD_FUNCTION_NAME.key]); R.setArgs(vals[GameParamsValueNames.REWARD_FUNCTION_ARGS.key]); A_E = Evader.getAgents(evaderCount); A_P = Pursuer.getAgents(pursuerCount); }
public override void fromValueMap(Dictionary <string, string> vals) { // FIXME: instead of having multiple functions reading/writing into a value map, automate this int evaderCount = Int32.Parse(vals[GameParamsValueNames.EVADERS_COUNT.key]); int pursuerCount = Int32.Parse(vals[GameParamsValueNames.PURSUERS_COUNT.key]); r_p = Int32.Parse(vals[GameParamsValueNames.PURSUERS_VELOCITY.key]); p_d = double.Parse( GameParamsValueNames.PURSUERS_DETECTION_PROB.tryRead(vals)); canEliminate = (1 == int.Parse(AdvRoutingGameParamsValueNames.CAN_PURSUERS_ELIMINATE.tryRead(vals))); sinkAlwaysDetectable = (1 == int.Parse(AdvRoutingGameParamsValueNames.SINK_ALWAYS_DETECTED.tryRead(vals))); accurateInterception = (1 == int.Parse(AdvRoutingGameParamsValueNames.CAN_SENSE_ACCURATE_LOCATION.tryRead(vals))); string rewardFuncName = GameParamsValueNames.REWARD_FUNCTION_NAME.tryRead(vals); R = ReflectionUtils.constructEmptyCtorType <ARewardFunction>(rewardFuncName); R.setArgs(GameParamsValueNames.REWARD_FUNCTION_ARGS.tryRead(vals)); A_E = Evader.getAgents(evaderCount); A_P = Pursuer.getAgents(pursuerCount); singleSourceRouter = "1" == AdvRoutingGameParamsValueNames.SINGLE_SOURCE.tryRead(vals); forceContinuousTransmission = "1" == AdvRoutingGameParamsValueNames.CONTINUOUS_ROUTERS.tryRead(vals); }
private static void Farm() { if (MainMenu["Farm"]["Q"] && Q.IsReady() && !Player.IsDashing() && (!HaveQ3 || MainMenu["Farm"]["Q3"])) { var minion = GameObjects.EnemyMinions.Where( i => i.IsValidTarget((!HaveQ3 ? Q : Q2).Range - 25) && (!HaveQ3 ? Q : Q2).GetHealthPrediction(i) > 0 && (!HaveQ3 ? Q : Q2).GetHealthPrediction(i) <= GetQDmg(i)).MaxOrDefault(i => i.MaxHealth); if (minion != null && Common.Cast(!HaveQ3 ? Q : Q2, minion, true) == CastStates.SuccessfullyCasted) { return; } } if (MainMenu["Farm"]["E"] && E.IsReady()) { var minion = GameObjects.EnemyMinions.Where( i => i.IsValidTarget(E.Range) && CanCastE(i) && Evader.IsSafePoint(PosAfterE(i).ToVector2()).IsSafe && (!UnderTower(PosAfterE(i)) || MainMenu["Farm"]["ETower"]) && E.GetHealthPrediction(i) > 0 && E.GetHealthPrediction(i) <= GetEDmg(i)).MaxOrDefault(i => i.MaxHealth); if (minion != null) { E.CastOnUnit(minion); } } }
public override void CreateConfigMenu() { combo = new Menu("Combo", "Combo"); combo.AddItem(new MenuItem("CUSEQ", "Use Q").SetValue(true)); combo.AddItem(new MenuItem("CUSEW", "Use W").SetValue(true)); harass = new Menu("Harass", "Harass"); harass.AddItem(new MenuItem("HUSEQ", "Use Q").SetValue(true)); harass.AddItem(new MenuItem("HUSEW", "Use W").SetValue(true)); harass.AddItem(new MenuItem("HMANA", "Min. Mana Percent").SetValue(new Slider(50, 0, 100))); laneclear = new Menu("LaneClear", "LaneClear"); laneclear.AddItem(new MenuItem("LUSEW", "Use W").SetValue(true)); laneclear.AddItem(new MenuItem("LMINW", "Min. Minions To W In Range").SetValue(new Slider(5, 2, 12))); laneclear.AddItem(new MenuItem("LMANA", "Min. Mana Percent").SetValue(new Slider(50, 0, 100))); misc = new Menu("Misc", "Misc"); misc.AddItem(new MenuItem("MAUTOQIMMO", "Auto Q Immobile Target").SetValue(true)); misc.AddItem(new MenuItem("MANTIGAPR", "Anti Gap Closer With R").SetValue(false)); m_evader = new Evader(out evade, EvadeMethods.SpellShield); m_targetedEvader = new TargetedSpellEvader(TargetedSpell_Evade, misc); Config.AddSubMenu(combo); Config.AddSubMenu(harass); Config.AddSubMenu(laneclear); Config.AddSubMenu(evade); Config.AddSubMenu(misc); Config.AddToMainMenu(); OrbwalkingFunctions[(int)Orbwalking.OrbwalkingMode.Combo] += Combo; OrbwalkingFunctions[(int)Orbwalking.OrbwalkingMode.Mixed] += Harass; OrbwalkingFunctions[(int)Orbwalking.OrbwalkingMode.LaneClear] += LaneClear; }
public override void CreateConfigMenu() { combo = new Menu("Combo", "Combo"); combo.AddItem(new MenuItem("CUSEQ", "Use Q").SetValue(true)); combo.AddItem(new MenuItem("CUSEW", "Use W").SetValue(false)); combo.AddItem(new MenuItem("CUSERHIT", "Use R If Enemies >=").SetValue(new Slider(2, 2, 5))); harass = new Menu("Harass", "Harass"); harass.AddItem(new MenuItem("HUSEQ", "Use Q").SetValue(true)); harass.AddItem(new MenuItem("HUSEW", "Use W").SetValue(true)); harass.AddItem(new MenuItem("HMANA", "Min. Mana Percent").SetValue(new Slider(50, 0, 100))); misc = new Menu("Misc", "Misc"); misc.AddItem(new MenuItem("MAUTOQ", "Auto Harass Q").SetValue(true)); misc.AddItem(new MenuItem("MAUTOQIMMO", "Auto Q Immobile Target").SetValue(true)); misc.AddItem(new MenuItem("MAUTOWIMMO", "Auto W Immobile Target").SetValue(true)); m_evader = new Evader(out evade, EvadeMethods.SpellShield); Config.AddSubMenu(combo); Config.AddSubMenu(harass); Config.AddSubMenu(evade); Config.AddSubMenu(misc); Config.AddToMainMenu(); base.OrbwalkingFunctions[(int)Orbwalking.OrbwalkingMode.Combo] += Combo; base.OrbwalkingFunctions[(int)Orbwalking.OrbwalkingMode.Mixed] += Harass; base.BeforeOrbWalking += BeforeOrbwalk; }
public override void SetSpells() { Spells[Q] = new Spell(SpellSlot.Q, 260f); Spells[W] = new Spell(SpellSlot.W, 250f); Spells[E] = new Spell(SpellSlot.E, 270f); Spells[R] = new Spell(SpellSlot.R, 900f); Spells[R].SetSkillshot(0.25f, 225f, 1600f, false, SkillshotType.SkillshotCone); m_evader = new Evader(out evade, EvadeMethods.RivenE, Spells[E]); Config.AddSubMenu(evade); }
private static void TryToEvade(List <Skillshot> hitBy, Vector2 to) { var dangerLevel = hitBy.Select( i => MainMenu["Evade"][i.SpellData.ChampionName.ToLowerInvariant()][i.SpellData.SpellName]["DangerLevel"] .GetValue <MenuSlider>().Value).Concat(new[] { 0 }).Max(); foreach (var evadeSpell in EvadeSpellDatabase.Spells.Where(i => i.Enabled && i.DangerLevel <= dangerLevel && i.IsReady) .OrderBy(i => i.DangerLevel)) { if (evadeSpell.EvadeType == EvadeTypes.Dash && evadeSpell.CastType == CastTypes.Target) { var targets = Evader.GetEvadeTargets(evadeSpell) .Where( i => Evader.IsSafePoint(PosAfterE(i).ToVector2()).IsSafe && (!UnderTower(PosAfterE(i)) || MainMenu["Evade"]["Spells"][evadeSpell.Name]["ETower"].GetValue <MenuBool>().Value)) .ToList(); if (targets.Count > 0) { var closestTarget = targets.MinOrDefault(i => to.Distance(PosAfterE(i))); Player.Spellbook.CastSpell(evadeSpell.Slot, closestTarget); return; } } if (evadeSpell.EvadeType == EvadeTypes.WindWall) { var skillshots = Evade.DetectedSkillshots.Where( i => i.Enabled && i.SpellData.CollisionObjects.Contains(CollisionObjectTypes.YasuoWall) && i.IsAboutToHit( 150 + evadeSpell.Delay - MainMenu["Evade"]["Spells"][evadeSpell.Name]["WDelay"].GetValue <MenuSlider>().Value, Player)).ToList(); if (skillshots.Count > 0) { var dangerousSkillshot = skillshots.MaxOrDefault( i => MainMenu["Evade"][i.SpellData.ChampionName.ToLowerInvariant()][i.SpellData.SpellName][ "DangerLevel"].GetValue <MenuSlider>().Value); Player.Spellbook.CastSpell( evadeSpell.Slot, Player.ServerPosition.Extend(dangerousSkillshot.Start, 100)); } } } }
public override void CreateConfigMenu() { combo = new Menu("Combo", "Combo"); combo.AddItem(new MenuItem("CUSEQ", "Use Q").SetValue(true)); combo.AddItem(new MenuItem("CUSEW", "Use W").SetValue(true)); // ult = new Menu("R Settings (BETA)", "rsetting"); ult.AddItem(new MenuItem("CUSER", "Use R").SetValue(true)); ult.AddItem(new MenuItem("CUSERHIT", "If Can Hit Enemies Count >=").SetValue(new Slider(3, 2, 5))); ult.AddItem(new MenuItem("CUSERHP", "If Target HP Percent <=").SetValue(new Slider(30, 1, 100))); ult.AddItem(new MenuItem("CUSEHPHIT", "Use Both ^ (x enemies with less than y% hp)").SetValue(true)); ult.AddItem(new MenuItem("CUSERRANGE", "Don't Use R If Enemy Count >= 2 In Range: ").SetValue(new Slider(600, 1, 2500))); ult.AddItem(new MenuItem("CRHITCHANCE", "Hit Chance").SetValue <StringList>(new StringList(ShineCommon.Utility.HitchanceNameArray, 2))); // combo.AddSubMenu(ult); harass = new Menu("Harass", "Harass"); harass.AddItem(new MenuItem("HUSEQ", "Use Q").SetValue(true)); harass.AddItem(new MenuItem("HUSEW", "Use W").SetValue(true)); harass.AddItem(new MenuItem("HMANA", "Min. Mana Percent").SetValue(new Slider(50, 0, 100))); laneclear = new Menu("LaneClear", "LaneClear"); laneclear.AddItem(new MenuItem("LUSEQ", "Use Q").SetValue(true)); laneclear.AddItem(new MenuItem("LMANA", "Min. Mana Percent").SetValue(new Slider(50, 0, 100))); misc = new Menu("Misc", "Misc"); misc.AddItem(new MenuItem("MLASTQ", "Last Hit Q").SetValue(true)); misc.AddItem(new MenuItem("MAUTOQ", "Auto Harass Q").SetValue(true)); misc.AddItem(new MenuItem("MUSER", "Use R If Killable").SetValue(false)); CustomizableAntiGapcloser.AddToMenu(misc.SubMenu("Customizable Antigapcloser")); misc.SubMenu("Customizable Antigapcloser").AddItem(new MenuItem("CUSTOMANTIGAPE", "Use E for Anti-Gapcloser").SetValue(true)); misc.SubMenu("Customizable Antigapcloser").AddItem(new MenuItem("CUSTOMANTIGAPEMETHOD", "Use E for Anti-Gapcloser").SetValue(new StringList(new[] { "Side", "Far from enemy" }))); CustomizableAntiGapcloser.OnEnemyCustomGapcloser += OnEnemyCustomGapcloser; m_evader = new Evader(out evade, EvadeMethods.Blink); Config.AddSubMenu(combo); Config.AddSubMenu(harass); Config.AddSubMenu(laneclear); Config.AddSubMenu(evade); Config.AddSubMenu(misc); Config.AddToMainMenu(); base.OrbwalkingFunctions[(int)Orbwalking.OrbwalkingMode.Combo] += Combo; base.OrbwalkingFunctions[(int)Orbwalking.OrbwalkingMode.Mixed] += Harass; base.OrbwalkingFunctions[(int)Orbwalking.OrbwalkingMode.LaneClear] += LaneClear; base.OrbwalkingFunctions[(int)Orbwalking.OrbwalkingMode.LastHit] += LastHit; base.BeforeOrbWalking += BeforeOrbwalk; }
public override void CreateConfigMenu() { combo = new Menu("Combo", "Combo"); combo.AddItem(new MenuItem("CUSEQ", "Use Q").SetValue(true)); combo.AddItem(new MenuItem("CUSEW", "Use W").SetValue(true)); // ult = new Menu("R Settings", "rsetting"); ult.AddItem(new MenuItem("CUSER", "Use R").SetValue(true)); ult.AddItem(new MenuItem("CUSERHIT", "If Can Hit Enemies Count >=").SetValue(new Slider(3, 2, 5))); ult.AddItem(new MenuItem("CUSERHP", "If Target HP Percent <=").SetValue(new Slider(30, 1, 100))); ult.AddItem(new MenuItem("CUSERRANGE", "Don't Use R If Enemy Count >= 2 In Range: ").SetValue(new Slider(600, 1, 2500))); ult.AddItem(new MenuItem("CRHITCHANCE", "Hit Chance").SetValue <StringList>(new StringList(ShineCommon.Utility.HitchanceNameArray, 2))); // combo.AddSubMenu(ult); harass = new Menu("Harass", "Harass"); harass.AddItem(new MenuItem("HUSEQ", "Use Q").SetValue(true)); harass.AddItem(new MenuItem("HUSEW", "Use W").SetValue(true)); harass.AddItem(new MenuItem("HMANA", "Min. Mana Percent").SetValue(new Slider(50, 0, 100))); laneclear = new Menu("LaneClear", "LaneClear"); laneclear.AddItem(new MenuItem("LUSEQ", "Use Q").SetValue(true)); laneclear.AddItem(new MenuItem("LMANA", "Min. Mana Percent").SetValue(new Slider(50, 0, 100))); misc = new Menu("Misc", "Misc"); misc.AddItem(new MenuItem("MLASTQ", "Last Hit Q").SetValue(true)); misc.AddItem(new MenuItem("MAUTOQ", "Auto Harass Q").SetValue(new KeyBind('T', KeyBindType.Toggle))); misc.AddItem(new MenuItem("MUSER", "Use R If Killable").SetValue(false)); misc.AddItem(new MenuItem("MJUNGLER", "Dragon/Baron Steal With R").SetValue(true)); m_evader = new Evader(out evade, EvadeMethods.EzrealE); Config.AddSubMenu(combo); Config.AddSubMenu(harass); Config.AddSubMenu(laneclear); Config.AddSubMenu(evade); Config.AddSubMenu(misc); Config.AddToMainMenu(); base.OrbwalkingFunctions[(int)Orbwalking.OrbwalkingMode.Combo] += Combo; base.OrbwalkingFunctions[(int)Orbwalking.OrbwalkingMode.Mixed] += Harass; base.OrbwalkingFunctions[(int)Orbwalking.OrbwalkingMode.LaneClear] += LaneClear; base.OrbwalkingFunctions[(int)Orbwalking.OrbwalkingMode.LastHit] += LastHit; base.BeforeOrbWalking += BeforeOrbwalk; }
private static Obj_AI_Base GetNearObj(Obj_AI_Base target = null, bool inQCir = false) { var pos = target != null ? Prediction.GetPrediction(target, E.Delay, 0, E.Speed).UnitPosition : Game.CursorPos; var obj = new List <Obj_AI_Base>(); obj.AddRange(GameObjects.EnemyHeroes.Where(i => i.IsValidTarget(E.Range) && CanCastE(i))); obj.AddRange(GameObjects.EnemyMinions.Where(i => i.IsValidTarget(E.Range) && CanCastE(i))); obj.AddRange(GameObjects.Jungle.Where(i => i.IsValidTarget(E.Range) && CanCastE(i))); return (obj.Where( i => PosAfterE(i).Distance(pos) < (inQCir ? QCirWidth : Player.Distance(pos)) && Evader.IsSafePoint(PosAfterE(i).ToVector2()).IsSafe) .MinOrDefault(i => PosAfterE(i).Distance(pos))); }
private static void OnUpdateEvade(EventArgs args) { if (Player.IsDead || !MainMenu["Evade"]["Enabled"].GetValue <MenuKeyBind>().Active) { return; } if (Player.HasBuffOfType(BuffType.SpellShield) || Player.HasBuffOfType(BuffType.SpellImmunity)) { return; } var safePoint = Evader.IsSafePoint(Player.ServerPosition.ToVector2()); var safePath = Evader.IsSafePath(Player.GetWaypoints(), 100); if (!safePath.IsSafe && !safePoint.IsSafe) { TryToEvade(safePoint.SkillshotList, Game.CursorPos.ToVector2()); } }
/// <summary> /// makes sure the active param object matches the GUI /// </summary> private void setParamData() { //param.canEvadersReceiveMultipleBroadcasts = chkMultipleBroadcasts.Checked; //param.canSinksSensePursuers = chkSinksSensePursuers.Checked; //param.areSinksSafe = chkSafeSinks.Checked; int psi; if (tryParseTextBox(txtPursuerCount, lblPursuerCount, out psi)) { param.A_P = Pursuer.getAgents(psi); } int evaderCount; if (tryParseTextBox(txtEvadersCount, lblEvaderCount, out evaderCount)) { param.A_E = Evader.getAgents(evaderCount); } int res; if (tryParseTextBox(txtres, lblrs, out res)) { param.r_e = res; } float fe; if (tryParseTextBox(txtRenewal, lblREnewal, out fe)) { param.f_e = fe; } float dp; if (tryParseTextBox(txtDetectionProb, lblDetectionProb, out dp)) { param.detectionProbRestraint = dp; } }
public SquareGame(int m, int u, int a, double scale, Evader E) { this.M = m; this.U = u; this.A = a; this.evader = E; int persuersSetCount = m; Random randonNumber = new Random(); // начальные положения преследователей for (int persuersSet = 1; persuersSet <= persuersSetCount; persuersSet++) { for (int persuerNumber = 0; persuerNumber < 4; persuerNumber++) { int r1 = randonNumber.Next(-(int)scale, (int)scale); int r2 = randonNumber.Next(-(int)scale, (int)scale); double coord1 = Math.Pow(-1, persuerNumber / 2) * scale * persuersSet + r1 /*- scale*/; double coord2 = Math.Pow(-1, (persuerNumber + 1) % 3) * scale * persuersSet + r2 /*- scale*/; Vector coordinates = new Vector(coord1, coord2); double Z1 = coord1 - E.coordinates.X; double Z2 = coord2 - E.coordinates.Y; Vector Z = new Vector(Z1, Z2); pursuers.Add(new Pursuer(coordinates, Z, false)); } } /* for (int i = 1; i <= m; i++) // начальные положения преследователей * { * double coord1 = scale * i; * double coord2 = scale * i; * double Z1 = coord1 - E.coordinates.X; * double Z2 = coord2 - E.coordinates.Y; * pursuers.Add(new Pursuer(coord1, coord2, Z1, Z2, false)); * } * * for (int i = m + 1; i <= 2 * m; i++) * { * double coord1 = scale * i; * double coord2 = -scale * i; * double Z1 = coord1 - E.coordinates.X; * double Z2 = coord2 - E.coordinates.Y; * pursuers.Add(new Pursuer(coord1, coord2, Z1, Z2, false)); * } * * for (int i = 2 * m + 1; i <= 3 * m; i++) * { * double coord1 = -scale * i; * double coord2 = scale * i; * double Z1 = coord1 - E.coordinates.X; * double Z2 = coord2 - E.coordinates.Y; * pursuers.Add(new Pursuer(coord1, coord2, Z1, Z2, false)); * } * * for (int i = 3 * m + 1; i <= 4 * m; i++) * { * double coord1 = -scale * i; * double coord2 = -scale * i; * double Z1 = coord1 - E.coordinates.X; * double Z2 = coord2 - E.coordinates.Y; * pursuers.Add(new Pursuer(coord1, coord2, Z1, Z2, false)); * }*/ }
public static List <Vector2> PathFind(Vector2 start, Vector2 end) { var result = new List <Vector2>(); try { var innerPolygonList = new List <Geometry.Polygon>(); var outerPolygonList = new List <Geometry.Polygon>(); foreach (var skillshot in Program.DetectedSkillshots) { if (skillshot.Evade()) { innerPolygonList.Add(skillshot.PathFindingInnerPolygon); outerPolygonList.Add(skillshot.PathFindingPolygon); } } var innerPolygons = Geometry.ClipPolygons(innerPolygonList).ToPolygons(); var outerPolygons = Geometry.ClipPolygons(outerPolygonList).ToPolygons(); if (outerPolygons.Aggregate(false, (current, poly) => current || !poly.IsOutside(end))) { end = Evader.GetClosestOutsidePoint(end, outerPolygons); } if (outerPolygons.Aggregate(false, (current, poly) => current || !poly.IsOutside(start))) { start = Evader.GetClosestOutsidePoint(start, outerPolygons); } if (Utils.CanReach(start, end, innerPolygons, true)) { return(new List <Vector2> { start, end }); } outerPolygons.Add(new Geometry.Polygon { Points = new List <Vector2> { start, end } }); var nodes = new List <Node>(); foreach (var pol in outerPolygons) { for (int i = 0; i < pol.Points.Count; i++) { if (pol.Points.Count == 2 || !Utils.IsVertexConcave(pol.Points, i)) { var node = nodes.FirstOrDefault(node1 => node1.Point == pol.Points[i]); if (node == null) { node = new Node(pol.Points[i]); } nodes.Add(node); foreach (var polygon in outerPolygons) { foreach (var point in polygon.Points) { if (Utils.CanReach(pol.Points[i], point, innerPolygons, true)) { var nodeToAdd = nodes.FirstOrDefault(node1 => node1.Point == point); if (nodeToAdd == null) { nodeToAdd = new Node(point); } nodes.Add(nodeToAdd); node.Neightbours.Add(nodeToAdd); } } } } } } var startNode = nodes.FirstOrDefault(n => n.Point == start); var endNode = nodes.FirstOrDefault(n => n.Point == end); if (endNode == null) { return(result); } Func <Node, Node, double> distance = (node1, node2) => node1.Point.LSDistance(node2.Point); Func <Node, double> estimate = t => t.Point.LSDistance(endNode.Point); var foundPath = FindPath(startNode, endNode, distance, estimate); if (foundPath == null) { return(result); } result.AddRange(foundPath.Select(node => node.Point)); result.Reverse(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } return(result); }
public Champion(string szChampName, string szMenuName, bool enableRangeDrawings = true, bool enableEvader = true) { Text = new Font(Drawing.Direct3DDevice, new FontDescription { FaceName = "Malgun Gothic", Height = 15, OutputPrecision = FontPrecision.Default, Quality = FontQuality.ClearTypeNatural }); ConfigMenu = new Menu(szMenuName, szChampName, true); TargetSelector.Initialize(ConfigMenu); Orbwalker = new Orbwalking.Orbwalker(ConfigMenu); SetSpells(); DrawingMenu = new Menu("Drawings", "drawings"); if (enableRangeDrawings) { if (this.Spells[0] != null && this.Spells[0].Range > 0) { this.DrawingMenu.AddItem(new MenuItem("DDRAWQ", "Draw Q").SetValue(new Circle(true, Color.Red, this.Spells[0].Range))); } if (this.Spells[1] != null && this.Spells[1].Range > 0) { this.DrawingMenu.AddItem(new MenuItem("DDRAWW", "Draw W").SetValue(new Circle(true, Color.Aqua, this.Spells[1].Range))); } if (this.Spells[2] != null && this.Spells[2].Range > 0) { this.DrawingMenu.AddItem(new MenuItem("DDRAWE", "Draw E").SetValue(new Circle(true, Color.Bisque, this.Spells[2].Range))); } if (this.Spells[3] != null && this.Spells[3].Range > 0 && this.Spells[3].Range < 3000) //global ult ? { this.DrawingMenu.AddItem(new MenuItem("DDRAWR", "Draw R").SetValue(new Circle(true, Color.Chartreuse, this.Spells[3].Range))); } } ConfigMenu.AddSubMenu(DrawingMenu); if (enableEvader) { Menu evaderMenu = null; Evader evader; switch (szChampName.ToLower()) { case "ezreal": evader = new Evader(out evaderMenu, Database.EvadeMethods.Blink, Spells[E]); break; case "sivir": case "morgana": evader = new Evader(out evaderMenu, Database.EvadeMethods.SpellShield, Spells[E]); break; case "fizz": evader = new Evader(out evaderMenu, Database.EvadeMethods.Dash, Spells[E]); break; case "lissandra": evader = new Evader(out evaderMenu, Database.EvadeMethods.Invulnerability, Spells[R]); break; case "nocturne": evader = new Evader(out evaderMenu, Database.EvadeMethods.SpellShield, Spells[W]); break; case "vladimir": evader = new Evader(out evaderMenu, Database.EvadeMethods.Invulnerability, Spells[W]); break; case "graves": case "gnar": case "lucian": case "riven": case "shen": evader = new Evader(out evaderMenu, Database.EvadeMethods.Dash, Spells[E]); break; case "zed": case "leblanc": evader = new Evader(out evaderMenu, Database.EvadeMethods.Dash, Spells[W]); break; case "vayne": evader = new Evader(out evaderMenu, Database.EvadeMethods.Dash, Spells[Q]); break; } if (evaderMenu != null) { ConfigMenu.AddSubMenu(evaderMenu); } } CreateConfigMenu(); #region Events Game.OnUpdate += this.Game_OnUpdate; Drawing.OnDraw += this.Drawing_OnDraw; Orbwalking.Events.BeforeAttack += this.Orbwalking_BeforeAttack; Orbwalking.Events.AfterAttack += this.Orbwalking_AfterAttack; AntiGapcloser.OnEnemyGapcloser += this.AntiGapcloser_OnEnemyGapcloser; Interrupter2.OnInterruptableTarget += this.Interrupter_OnPossibleToInterrupt; Obj_AI_Base.OnBuffAdd += this.Obj_AI_Base_OnBuffAdd; Obj_AI_Base.OnProcessSpellCast += this.Obj_AI_Base_OnProcessSpellCast; CustomEvents.Unit.OnDash += Unit_OnDash; #endregion Prediction.Prediction.Initialize(ConfigMenu); }
public TriangleGame(int m, int u, int a, double scale, Evader E) { this.M = m; this.U = u; this.A = a; this.evader = E; Random md = new Random(); // начальные положения преследователей int persuersSetCount = m; for (int persuersSet = 1; persuersSet <= persuersSetCount; persuersSet++) { // for (int persuerNumber = 0; persuerNumber < 3; persuerNumber++) // { int r1 = md.Next(1, (int)scale / 2); int r2 = md.Next(1, (int)scale / 2); double coord1 = r1; double coord2 = scale * persuersSet + r2; Vector coordinates = new Vector(coord1, coord2); double Z1 = coord1 - E.coordinates.X; double Z2 = coord2 - E.coordinates.Y; Vector Z = new Vector(Z1, Z2); pursuers.Add(new Pursuer(coordinates, Z, false)); r1 = md.Next(1, (int)scale / 2); r2 = md.Next(1, (int)scale / 2); coord1 = scale * persuersSet + r1; coord2 = -scale * persuersSet + r2; coordinates = new Vector(coord1, coord2); Z1 = coord1 - E.coordinates.X; Z2 = coord2 - E.coordinates.Y; Z = new Vector(Z1, Z2); pursuers.Add(new Pursuer(coordinates, Z, false)); r1 = md.Next(1, (int)scale / 2); r2 = md.Next(1, (int)scale / 2); coord1 = -scale * persuersSet + r1; coord2 = -scale * persuersSet + r2; coordinates = new Vector(coord1, coord2); Z1 = coord1 - E.coordinates.X; Z2 = coord2 - E.coordinates.Y; Z = new Vector(Z1, Z2); pursuers.Add(new Pursuer(coordinates, Z, false)); // } } /* for (int i = 1; i <= m; i++) // начальные положения преследователей * { * double coord1 = 0; * double coord2 = scale * i; * Vector coordinates = new Vector(coord1, coord2); * double Z1 = coord1 - E.coordinates.X; * double Z2 = coord2 - E.coordinates.Y; * Vector Z = new Vector(Z1, Z2); * pursuers.Add(new Pursuer(coordinates, Z, false)); * } * * for (int i = m + 1; i <= 2 * m; i++) * { * double coord1 = scale * i; * double coord2 = -scale * i; * Vector coordinates = new Vector(coord1, coord2); * double Z1 = coord1 - E.coordinates.X; * double Z2 = coord2 - E.coordinates.Y; * Vector Z = new Vector(Z1, Z2); * pursuers.Add(new Pursuer(coordinates, Z, false)); * * } * * for (int i = 2 * m + 1; i <= 3 * m; i++) * { * double coord1 = -scale * i; * double coord2 = -scale * i; * Vector coordinates = new Vector(coord1, coord2); * double Z1 = coord1 - E.coordinates.X; * double Z2 = coord2 - E.coordinates.Y; * Vector Z = new Vector(Z1, Z2); * pursuers.Add(new Pursuer(coordinates, Z, false)); * * }*/ }
public Jhin() { foreach (var enemy in EntityManager.Heroes.Enemies) { TextsInScreen.Add(enemy.NetworkId, new Text(enemy.ChampionName + " 可击杀", new Font("Arial", 30F, FontStyle.Bold)) { Color = Color.Red }); TextsInHeroPosition.Add(enemy.NetworkId, new Text("R 可击杀", new Font("Arial", 23F, FontStyle.Bold)) { Color = Color.Red }); LastPredictedPositionText.Add(enemy.NetworkId, new Text(enemy.ChampionName + " 最后预知位置", new Font("Arial", 23F, FontStyle.Bold)) { Color = Color.Red }); } Q = new SpellBase(SpellSlot.Q, SpellType.Targeted, 600) { Width = 450, Speed = 1800, CastDelay = 250, }; W = new SpellBase(SpellSlot.W, SpellType.Linear, 2500) { Width = 40, CastDelay = 750, AllowedCollisionCount = -1, }; E = new SpellBase(SpellSlot.E, SpellType.Circular, 750) { Width = 135, CastDelay = 250, Speed = 1600, }; R = new SpellBase(SpellSlot.R, SpellType.Linear, 3500) { Width = 80, CastDelay = 200, Speed = 5000, AllowedCollisionCount = -1, }; Evader.OnEvader += delegate { if (EvaderMenu.CheckBox("BlockW")) { LastBlockTick = Core.GameTickCount; } }; Spellbook.OnCastSpell += delegate(Spellbook sender, SpellbookCastSpellEventArgs args) { if (sender.Owner.IsMe) { if (args.Slot == SpellSlot.W) { args.Process = Core.GameTickCount - LastBlockTick > 750; } } }; Obj_AI_Base.OnProcessSpellCast += delegate(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args) { if (sender.IsMe) { switch (args.Slot) { case SpellSlot.W: W.LastCastTime = Core.GameTickCount; W.LastEndPosition = args.End; break; case SpellSlot.R: if (args.SData.Name == "JhinR") { IsCastingR = true; LastRCone = new Geometry.Polygon.Sector(sender.Position, args.End, (float)(60f * Math.PI / 180f), R.Range); Stacks = 4; } else if (args.SData.Name == "JhinRShot") { R.LastCastTime = Core.GameTickCount; TapKeyPressed = false; Stacks--; } break; } } }; Gapcloser.OnGapcloser += delegate(AIHeroClient sender, Gapcloser.GapcloserEventArgs args) { if (sender.IsValidTarget() && sender.IsEnemy) { if (MyHero.Distance(args.Start, true) > MyHero.Distance(args.End)) { if (AutomaticMenu.CheckBox("E.Gapcloser") && MyHero.IsInRange(args.End, E.Range)) { E.Cast(args.End); } if (MyHero.Distance(args.End, true) < (sender.GetAutoAttackRange(MyHero) * 1.5f).Pow()) { WShouldWaitTick = Core.GameTickCount; } } } }; MenuManager.AddSubMenu("Keys"); { KeysMenu.AddValue("TapKey", new KeyBind("R 半自动发射", false, KeyBind.BindTypes.HoldActive, 32)).OnValueChange += delegate(ValueBase <bool> sender, ValueBase <bool> .ValueChangeArgs args) { if (args.NewValue && R.IsLearned && IsCastingR) { TapKeyPressed = true; } }; ToggleManager.RegisterToggle( KeysMenu.AddValue("AutoW", new KeyBind("自动W开关", true, KeyBind.BindTypes.PressToggle, 'K')), delegate { foreach (var enemy in UnitManager.ValidEnemyHeroes.Where(TargetHaveEBuff)) { if (MyHero.ManaPercent >= MiscMenu.Slider("W.ManaPercent")) { if (MiscMenu.CheckBox("自动W." + enemy.ChampionName)) { CastW(enemy); } } } }); } W.AddConfigurableHitChancePercent(); R.AddConfigurableHitChancePercent(); MenuManager.AddSubMenu("Combo"); { ComboMenu.AddValue("Q", new CheckBox("Use Q")); ComboMenu.AddValue("E", new CheckBox("Use E")); ComboMenu.AddValue("Items", new CheckBox("Use offensive items")); ComboMenu.AddStringList("W", "Use W", new[] { "Never", "Only buffed enemies", "Always" }, 2); } MenuManager.AddSubMenu("Ultimate"); { UltimateMenu.AddStringList("Mode", "R 瞄准模式", new[] { "不使用", "使用扳机键", "自动" }, 2); UltimateMenu.AddValue("OnlyKillable", new CheckBox("只攻击可击杀目标")); UltimateMenu.AddValue("Delay", new Slider("R之间的延迟(毫秒)", 0, 0, 1500)); UltimateMenu.AddValue("NearMouse", new GroupLabel("鼠标附近设置")); UltimateMenu.AddValue("NearMouse.Enabled", new CheckBox("只选择鼠标附近目标", false)); UltimateMenu.AddValue("NearMouse.Radius", new Slider("靠近鼠标半径", 500, 100, 1500)); UltimateMenu.AddValue("NearMouse.Draw", new CheckBox("显示鼠标半径")); } MenuManager.AddSubMenu("Harass"); { HarassMenu.AddValue("Q", new CheckBox("Use Q")); HarassMenu.AddValue("W", new CheckBox("Use W", false)); HarassMenu.AddValue("E", new CheckBox("Use E", false)); HarassMenu.AddValue("ManaPercent", new Slider("Minimum Mana Percent", 20)); } MenuManager.AddSubMenu("Clear"); { ClearMenu.AddValue("LaneClear", new GroupLabel("LaneClear")); { ClearMenu.AddValue("LaneClear.Q", new Slider("Use Q if hit is greater than {0}", 3, 0, 10)); ClearMenu.AddValue("LaneClear.W", new Slider("Use W if hit is greater than {0}", 5, 0, 10)); ClearMenu.AddValue("LaneClear.E", new Slider("Use E if hit is greater than {0}", 4, 0, 10)); ClearMenu.AddValue("LaneClear.ManaPercent", new Slider("Minimum Mana Percent", 50)); } ClearMenu.AddValue("LastHit", new GroupLabel("LastHit")); { ClearMenu.AddStringList("LastHit.Q", "Use Q", new[] { "Never", "Smartly", "Always" }, 1); ClearMenu.AddValue("LastHit.ManaPercent", new Slider("Minimum Mana Percent", 50)); } ClearMenu.AddValue("JungleClear", new GroupLabel("JungleClear")); { ClearMenu.AddValue("JungleClear.Q", new CheckBox("Use Q")); ClearMenu.AddValue("JungleClear.W", new CheckBox("Use W")); ClearMenu.AddValue("JungleClear.E", new CheckBox("Use E")); ClearMenu.AddValue("JungleClear.ManaPercent", new Slider("Minimum Mana Percent", 20)); } } MenuManager.AddKillStealMenu(); { KillStealMenu.AddValue("Q", new CheckBox("Use Q")); KillStealMenu.AddValue("W", new CheckBox("Use W")); KillStealMenu.AddValue("E", new CheckBox("Use E")); KillStealMenu.AddValue("R", new CheckBox("Use R")); } MenuManager.AddSubMenu("Automatic"); { AutomaticMenu.AddValue("E.Gapcloser", new CheckBox("Use E on hero gapclosing / dashing")); AutomaticMenu.AddValue("Immobile", new CheckBox("对无法移动目标使用E")); } MenuManager.AddSubMenu("Evader"); { EvaderMenu.AddValue("BlockW", new CheckBox("保留W进行躲避")); } Evader.Initialize(); Evader.AddCrowdControlSpells(); Evader.AddDangerousSpells(); MenuManager.AddSubMenu("Misc"); { MiscMenu.AddValue("W.ManaPercent", new Slider("最低蓝量百分比使用自动W", 10)); MiscMenu.AddValue("Champions", new GroupLabel("自动使用W英雄")); foreach (var enemy in EntityManager.Heroes.Enemies) { MiscMenu.AddValue("自动W." + enemy.ChampionName, new CheckBox(enemy.ChampionName)); } } MenuManager.AddDrawingsMenu(); { Q.AddDrawings(false); W.AddDrawings(); E.AddDrawings(false); R.AddDrawings(); DrawingsMenu.AddValue("Toggles", new CheckBox("Draw toggles status")); DrawingsMenu.AddValue("R.Killable", new CheckBox("显示可被R击杀的目标")); DrawingsMenu.AddValue("R.LastPredictedPosition", new CheckBox("显示预判敌人最后出现位置")); } }
/// <summary> /// Champion constructor /// </summary> /// <param name="szChampName">The champion name.</param> /// <param name="szMenuName">The menu name.</param> /// <param name="enableRangeDrawings">if <c>true</c>, enables the spell range drawings</param> /// <param name="enableEvader">if <c>true</c>, enables the spell evader if the champion is supported</param> public Champion(string szChampName, string szMenuName, bool enableRangeDrawings = true, bool enableEvader = true) { Text = new Font(Drawing.Direct3DDevice, new FontDescription { FaceName = "Malgun Gothic", Height = 15, OutputPrecision = FontPrecision.Default, Quality = FontQuality.ClearTypeNatural }); ConfigMenu = new Menu(szMenuName, String.Format("SAutoCarry.{0}.Root", szChampName), true); TargetSelector.Initialize(ConfigMenu); Orbwalker = new Orbwalking.Orbwalker(ConfigMenu); SetSpells(); DrawingMenu = new Menu("Drawings", "drawings"); if (enableRangeDrawings) { if (this.Spells[Q] != null && this.Spells[0].Range > 0 && this.Spells[Q].Range < 3000) { this.DrawingMenu.AddItem(new MenuItem("DDRAWQ", "Draw Q").SetValue(new Circle(true, Color.Red, this.Spells[Q].Range))); } if (this.Spells[W] != null && this.Spells[1].Range > 0 && this.Spells[W].Range < 3000) { this.DrawingMenu.AddItem(new MenuItem("DDRAWW", "Draw W").SetValue(new Circle(true, Color.Aqua, this.Spells[W].Range))); } if (this.Spells[E] != null && this.Spells[2].Range > 0 && this.Spells[E].Range < 3000) { this.DrawingMenu.AddItem(new MenuItem("DDRAWE", "Draw E").SetValue(new Circle(true, Color.Bisque, this.Spells[E].Range))); } if (this.Spells[R] != null && this.Spells[3].Range > 0 && this.Spells[R].Range < 3000) //global ult ? { this.DrawingMenu.AddItem(new MenuItem("DDRAWR", "Draw R").SetValue(new Circle(true, Color.Chartreuse, this.Spells[R].Range))); } } ConfigMenu.AddSubMenu(DrawingMenu); if (enableEvader) { Menu evaderMenu = null; Evader evader; switch (szChampName.ToLower()) { case "ezreal": evader = new Evader(out evaderMenu, Database.EvadeMethods.Blink, Spells[E]); break; case "sivir": case "morgana": evader = new Evader(out evaderMenu, Database.EvadeMethods.SpellShield, Spells[E]); break; case "fizz": evader = new Evader(out evaderMenu, Database.EvadeMethods.Dash, Spells[E]); break; case "lissandra": evader = new Evader(out evaderMenu, Database.EvadeMethods.Invulnerability, Spells[R]); break; case "nocturne": evader = new Evader(out evaderMenu, Database.EvadeMethods.SpellShield, Spells[W]); break; case "vladimir": evader = new Evader(out evaderMenu, Database.EvadeMethods.Invulnerability, Spells[W]); break; case "graves": case "gnar": case "lucian": case "riven": case "shen": evader = new Evader(out evaderMenu, Database.EvadeMethods.Dash, Spells[E]); break; case "zed": case "leblanc": case "corki": evader = new Evader(out evaderMenu, Database.EvadeMethods.Dash, Spells[W]); break; case "vayne": evader = new Evader(out evaderMenu, Database.EvadeMethods.Dash, Spells[Q]); break; } if (evaderMenu != null) { ConfigMenu.AddSubMenu(evaderMenu); } } CreateConfigMenu(); Menu credits = new Menu("Credits", "SAutoCarry.Credits.Root"); credits.AddItem(new MenuItem("SAutoCarry.Credits.Root.Author", "SAutoCarry - Made By Synx")); credits.AddItem(new MenuItem("SAutoCarry.Credits.Root.Upvote", "Dont Forget to upvote in DB!")); Menu supportedChamps = new Menu("Supported Champions", "SAutoCarry.Credits.Supported"); Menu adc = new Menu("ADC (5)", "SAutoCarry.Credits.ADC"); adc.AddItem(new MenuItem("SAutoCarry.Credits.ADC.Supported1", " ->Corki ")); adc.AddItem(new MenuItem("SAutoCarry.Credits.ADC.Supported2", " ->Lucian ")); adc.AddItem(new MenuItem("SAutoCarry.Credits.ADC.Supported3", " ->Miss Fortune ")); adc.AddItem(new MenuItem("SAutoCarry.Credits.ADC.Supported4", " ->Twitch ")); adc.AddItem(new MenuItem("SAutoCarry.Credits.ADC.Supported5", " ->Vayne ")); // supportedChamps.AddSubMenu(adc); // Menu mid = new Menu("Mid (6)", "SAutoCarry.Credits.Mid"); mid.AddItem(new MenuItem("SAutoCarry.Credits.Mid.Supported1", " ->Azir ")); mid.AddItem(new MenuItem("SAutoCarry.Credits.Mid.Supported2", " ->Cassiopeia ")); mid.AddItem(new MenuItem("SAutoCarry.Credits.Mid.Supported3", " ->Orianna ")); mid.AddItem(new MenuItem("SAutoCarry.Credits.Mid.Supported4", " ->Twisted Fate ")); mid.AddItem(new MenuItem("SAutoCarry.Credits.Mid.Supported5", " ->Veigar ")); mid.AddItem(new MenuItem("SAutoCarry.Credits.Mid.Supported6", " ->Viktor ")); // supportedChamps.AddSubMenu(mid); // Menu top = new Menu("Top (5)", "SAutoCarry.Credits.Top"); top.AddItem(new MenuItem("SAutoCarry.Credits.Top.Supported1", " ->Darius ")); top.AddItem(new MenuItem("SAutoCarry.Credits.Top.Supported2", " ->Dr. Mundo ")); top.AddItem(new MenuItem("SAutoCarry.Credits.Top.Supported3", " ->Pantheon ")); top.AddItem(new MenuItem("SAutoCarry.Credits.Top.Supported4", " ->Rengar ")); top.AddItem(new MenuItem("SAutoCarry.Credits.Top.Supported5", " ->Riven ")); // supportedChamps.AddSubMenu(top); // Menu jungle = new Menu("Jungle (3)", "SAutoCarry.Credits.Jungle"); jungle.AddItem(new MenuItem("SAutoCarry.Credits.Jungle.Supported1", " ->Jax ")); jungle.AddItem(new MenuItem("SAutoCarry.Credits.Jungle.Supported2", " ->Master Yi ")); jungle.AddItem(new MenuItem("SAutoCarry.Credits.Jungle.Supported3", " ->Shyvana ")); // supportedChamps.AddSubMenu(jungle); // Menu support = new Menu("Support (1)", "SAutoCarry.Credits.Support"); support.AddItem(new MenuItem("SAutoCarry.Credits.Support.Support1", " ->Blitzcrank ")); // supportedChamps.AddSubMenu(support); // credits.AddSubMenu(supportedChamps); #region Events Game.OnUpdate += this.Game_OnUpdate; Drawing.OnDraw += this.Drawing_OnDraw; Orbwalking.Events.BeforeAttack += this.OrbwalkingEvents_BeforeAttack; Orbwalking.Events.AfterAttack += this.OrbwalkingEvents_AfterAttack; AntiGapcloser.OnEnemyGapcloser += this.AntiGapcloser_OnEnemyGapcloser; Interrupter2.OnInterruptableTarget += this.Interrupter_OnPossibleToInterrupt; Obj_AI_Base.OnBuffGain += this.Obj_AI_Base_OnBuffAdd; Obj_AI_Base.OnSpellCast += this.Obj_AI_Base_OnProcessSpellCast; CustomEvents.Unit.OnDash += this.Unit_OnDash; TargetedSpellDetector.OnDetected += this.TargetedSpellDetector_OnDetected; #endregion Prediction.Prediction.Initialize(ConfigMenu); ConfigMenu.AddSubMenu(credits); }
/// <summary> /// makes sure the active param object matches the GUI /// </summary> private void setParamData() { param.canEvadersReceiveMultipleBroadcasts = chkMultipleBroadcasts.Checked; param.canSinksSensePursuers = chkSinksSensePursuers.Checked; param.areSinksSafe = chkSafeSinks.Checked; int psi; if (tryParseTextBox(txtPursuerCount, lblPursuerCount, out psi)) { param.A_P = Pursuer.getAgents(psi); } int evaderCount; if (tryParseTextBox(txtEvadersCount, lblEvaderCount, out evaderCount)) { param.A_E = Evader.getAgents(evaderCount); } int rp; if (tryParseTextBox(txtrp, lblrp, out rp)) { param.r_p = rp; } int re; if (tryParseTextBox(txtre, lblre, out re)) { param.r_e = re; } int rs; if (tryParseTextBox(txtrs, lblrs, out rs)) { param.r_s = rs; } float pd; if (tryParseTextBox(txtpd, lblpd, out pd)) { param.p_d = pd; } try { // set reward func: if (cmbRewardFunc.SelectedItem == null) { lblR.ForeColor = Color.Red; return; } param.R = ReflectionUtils.constructEmptyCtorType <ARewardFunction>((string)cmbRewardFunc.SelectedItem); lblR.ForeColor = Color.Black; lstRewarrdDesc.Items.Clear(); lstRewarrdDesc.Items.AddRange(param.R.argumentsDescription().ToArray <object>()); try { param.R.setArgs(txtRewardArg.Text); lblRewardArg.ForeColor = Color.Black; } catch (Exception) { lblRewardArg.ForeColor = Color.Red; } //// if reward func isn't undefined, check argument validity: //int givenArgs; //if (txtRewardArg.Text == "") // givenArgs = 0; //else // givenArgs = txtRewardArg.Text.Split(new char[] { ',' }).Count() + 1; //if (givenArgs == param.R.argumentsDescription().Count) // lblRewardArg.ForeColor = Color.Black; //else // lblRewardArg.ForeColor = Color.Red; } catch (Exception ex) { lblR.ForeColor = Color.Red; } }
public Zed() { Q = new SpellBase(SpellSlot.Q, SpellType.Linear, 925) { CastDelay = 250, Speed = 1700, Width = 50 }; Q.SetSourceFunction(() => MyHero); Q.SetRangeCheckSourceFunction(() => MyHero); W = new SpellBase(SpellSlot.W, SpellType.Linear, WRange) { Speed = 1750, Width = 60 }; E = new SpellBase(SpellSlot.E, SpellType.Self, 280); E.SetSourceFunction(() => MyHero); E.SetRangeCheckSourceFunction(() => MyHero); R = new SpellBase(SpellSlot.R, SpellType.Targeted, 625); IsDeadText = new Text("", new Font("Arial", 30F, FontStyle.Bold)) { Color = Color.Red, Position = new Vector2(100, 50) }; Obj_AI_Base.OnBuffGain += delegate(Obj_AI_Base sender, Obj_AI_BaseBuffGainEventArgs args) { var minion = sender as Obj_AI_Minion; if (minion != null && minion.IsAlly && minion.BaseSkinName == ShadowSkinName && args.Buff.Caster.IsMe) { switch (args.Buff.Name) { case "zedwshadowbuff": WShadow = minion; break; case "zedrshadowbuff": RShadow = minion; break; } } }; Obj_AI_Base.OnPlayAnimation += delegate(Obj_AI_Base sender, GameObjectPlayAnimationEventArgs args) { var minion = sender as Obj_AI_Minion; if (minion != null && minion.IsAlly && minion.BaseSkinName == ShadowSkinName) { if (args.Animation == "Death") { if (WShadow.IdEquals(minion)) { WShadow = null; } else if (RShadow.IdEquals(minion)) { RShadow = null; } } } }; GameObject.OnCreate += delegate(GameObject sender, EventArgs args) { if (sender.Name == IsDeadName && RTarget != null && RTarget.IsInRange(sender, 200)) { IsDeadObject = sender; } }; GameObject.OnDelete += delegate(GameObject sender, EventArgs args) { var minion = sender as Obj_AI_Minion; if (minion != null && minion.IsAlly && minion.BaseSkinName == ShadowSkinName) { if (WShadow.IdEquals(minion)) { WShadow = null; } else if (RShadow.IdEquals(minion)) { RShadow = null; } } else if (sender.IdEquals(IsDeadObject)) { IsDeadObject = null; } }; Obj_AI_Base.OnProcessSpellCast += delegate(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args) { if (sender.IsMe) { switch (args.Slot) { case SpellSlot.W: if (args.SData.Name == "ZedW") { W.LastCastTime = Core.GameTickCount; W.LastEndPosition = args.End; } break; case SpellSlot.R: if (args.SData.Name == "ZedR") { MarkedDamageReceived = 0; EnemyWillDie = false; } break; } } }; Evader.OnEvader += delegate(EvaderArgs args) { var w1Distance = W.IsReady && IsW1 && EvaderMenu.CheckBox("Evader.W1") ? MyHero.GetDistanceSqr(args.Sender) : 16000000; var w2Distance = W.IsReady && WShadowIsValid && EvaderMenu.CheckBox("Evader.W2") && !args.WillHitMyHero(WShadow.Position) ? WShadow.GetDistanceSqr(args.Sender) : 16000000; var rTarget = TargetSelector.GetTarget(R.Range, DamageType.Physical) ?? args.Sender; var r1Distance = R.IsReady && IsR1 && rTarget != null && R.InRange(rTarget) && EvaderMenu.CheckBox("Evader.R1") ? MyHero.GetDistanceSqr(args.Sender) : 16000000; var r2Distance = R.IsReady && RShadowIsValid && EvaderMenu.CheckBox("Evader.R2") && !args.WillHitMyHero(RShadow.Position) ? RShadow.GetDistanceSqr(args.Sender) : 16000000; var min = Math.Min(w1Distance, Math.Min(w2Distance, Math.Min(r1Distance, r2Distance))); if (min < 16000000) { if (Math.Abs(min - r2Distance) < float.Epsilon) { R.Cast(); } else if (Math.Abs(min - r1Distance) < float.Epsilon) { R.Cast(rTarget); } else if (Math.Abs(min - w2Distance) < float.Epsilon) { W.Cast(); } else if (Math.Abs(min - w1Distance) < float.Epsilon) { var wPos = MyHero.ServerPosition + ((args.Sender.ServerPosition - MyHero.ServerPosition).Normalized() * WRange) .To2D() .Perpendicular() .To3DWorld(); W.Cast(wPos); } } }; AttackableUnit.OnDamage += delegate(AttackableUnit sender, AttackableUnitDamageEventArgs args) { if (args.Source.IsMe) { var hero = args.Target as AIHeroClient; if (hero != null && TargetHaveR(hero)) { MarkedDamageReceived += args.Damage; } } }; MenuManager.AddSubMenu("Keys"); { Orbwalker.RegisterKeyBind( KeysMenu.AddValue("Combo2", new KeyBind("Combo without R", false, KeyBind.BindTypes.HoldActive, 'A')), Orbwalker.ActiveModes.Combo); Orbwalker.RegisterKeyBind( KeysMenu.AddValue("Harass2", new KeyBind("Harass WEQ", false, KeyBind.BindTypes.HoldActive, 'S')), Orbwalker.ActiveModes.Harass); } Q.AddConfigurableHitChancePercent(); MenuManager.AddSubMenu("Combo"); { ComboMenu.AddStringList("Mode", "R Combo Mode", new[] { "Line", "Triangle", "MousePos" }); ComboMenu.AddValue("Q", new CheckBox("Use Q")); ComboMenu.AddValue("W", new CheckBox("Use W")); ComboMenu.AddValue("E", new CheckBox("Use E")); ComboMenu.AddValue("R", new CheckBox("Use R")); ComboMenu.AddValue("Items", new CheckBox("Use offensive items")); ComboMenu.AddValue("SwapDead", new CheckBox("Use W2/R2 if target will die")); ComboMenu.AddValue("SwapGapclose", new CheckBox("Use W2/R2 to get close to target")); ComboMenu.AddValue("SwapHP", new Slider("Use W2/R2 if my % of health is less than {0}", 15)); ComboMenu.AddValue("Prevent", new CheckBox("Don't use spells before R")); if (EntityManager.Heroes.Enemies.Count > 0) { ComboMenu.AddValue("BlackList.R", new GroupLabel("Don't use R on:")); var enemiesAdded = new HashSet <string>(); foreach (var enemy in EntityManager.Heroes.Enemies) { if (!enemiesAdded.Contains(enemy.ChampionName)) { ComboMenu.AddValue("BlackList." + enemy.ChampionName, new CheckBox(enemy.ChampionName, false)); enemiesAdded.Add(enemy.ChampionName); } } } } MenuManager.AddSubMenu("Harass"); { HarassMenu.AddValue("Collision", new CheckBox("Check collision when casting Q (more damage)", false)); HarassMenu.AddValue("WE", new CheckBox("Only harass when combo WE will hit", false)); HarassMenu.AddValue("SwapGapclose", new CheckBox("Use W2 if target is killable")); HarassMenu.AddValue("ManaPercent", new Slider("Minimum Mana Percent", 20)); } MenuManager.AddSubMenu("Clear"); { ClearMenu.AddValue("LaneClear", new GroupLabel("LaneClear")); { ClearMenu.AddValue("LaneClear.Q", new Slider("Use Q if hit is greater than {0}", 3, 0, 10)); ClearMenu.AddValue("LaneClear.W", new Slider("Use W if hit is greater than {0}", 4, 0, 10)); ClearMenu.AddValue("LaneClear.E", new Slider("Use E if hit is greater than {0}", 3, 0, 10)); ClearMenu.AddValue("LaneClear.ManaPercent", new Slider("Minimum Mana Percent", 50)); } ClearMenu.AddValue("LastHit", new GroupLabel("LastHit")); { ClearMenu.AddStringList("LastHit.Q", "Use Q", new[] { "Never", "Smartly", "Always" }, 1); ClearMenu.AddStringList("LastHit.E", "Use E", new[] { "Never", "Smartly", "Always" }, 1); ClearMenu.AddValue("LastHit.ManaPercent", new Slider("Minimum Mana Percent", 50)); } ClearMenu.AddValue("JungleClear", new GroupLabel("JungleClear")); { ClearMenu.AddValue("JungleClear.Q", new CheckBox("Use Q")); ClearMenu.AddValue("JungleClear.W", new CheckBox("Use W")); ClearMenu.AddValue("JungleClear.E", new CheckBox("Use E")); ClearMenu.AddValue("JungleClear.ManaPercent", new Slider("Minimum Mana Percent", 20)); } } MenuManager.AddKillStealMenu(); { KillStealMenu.AddValue("Q", new CheckBox("Use Q")); KillStealMenu.AddValue("W", new CheckBox("Use W")); KillStealMenu.AddValue("E", new CheckBox("Use E")); } MenuManager.AddSubMenu("Automatic"); { AutomaticMenu.AddValue("E", new CheckBox("Use E", false)); AutomaticMenu.AddValue("SwapDead", new CheckBox("Use W2/R2 if target will die", false)); } MenuManager.AddSubMenu("Evader"); { EvaderMenu.AddValue("Evader.W1", new CheckBox("Use W1", false)); EvaderMenu.AddValue("Evader.W2", new CheckBox("Use W2")); EvaderMenu.AddValue("Evader.R1", new CheckBox("Use R1")); EvaderMenu.AddValue("Evader.R2", new CheckBox("Use R2")); } Evader.Initialize(); Evader.AddCrowdControlSpells(); Evader.AddDangerousSpells(); MenuManager.AddDrawingsMenu(); { Q.AddDrawings(); W.AddDrawings(); E.AddDrawings(false); R.AddDrawings(); CircleManager.Circles.Add(new Circle( DrawingsMenu.AddValue("W.Shadow", new CheckBox("Draw W shadow circle")), SharpDX.Color.Blue, () => 100, () => WShadowIsValid, () => WShadow) { Width = 1 }); CircleManager.Circles.Add(new Circle( DrawingsMenu.AddValue("R.Shadow", new CheckBox("Draw R shadow circle")), SharpDX.Color.Orange, () => 100, () => RShadowIsValid, () => RShadow) { Width = 1 }); DrawingsMenu.AddValue("IsDead", new CheckBox("Draw text if target will die")); DrawingsMenu.AddValue("Passive", new CheckBox("Draw text when passive is available")); } }
private void btnSave_Click(object sender, EventArgs e) { foreach (object o in this.Controls) { Label l = o as Label; if (l != null && l.ForeColor.ToArgb() != Color.Black.ToArgb() && l.Visible == true) // ensure all fields are "valid" { MessageBox.Show(l.Text + " has invalid value"); return; } } SaveFileDialog d = new SaveFileDialog(); d.Filter = "Routing Game Param Files (*." + AppConstants.FileExtensions.ROUTING_PARAM + ")|*." + AppConstants.FileExtensions.ROUTING_PARAM; try { if (d.ShowDialog() != System.Windows.Forms.DialogResult.OK) { return; } string dialogFilename = d.FileName; float minRenew = float.Parse(txtRenewal.Text); int minRES = Int32.Parse(txtres.Text); //int minRPS = Int32.Parse(txtrps.Text); int minPsi = Int32.Parse(txtPursuerCount.Text); int minEta = Int32.Parse(txtEvadersCount.Text); //string minRewardArg = txtRewardArg.Text; int maxPsi = minPsi; int maxEta = minEta; int maxRES = minRES; //int maxRPS = minRPS; float maxRenew = minRenew; //string maxRewardArg = txtRewardArgMax.Text; if (txtMaxPsi.Text.Length > 0) { Int32.TryParse(txtMaxPsi.Text, out maxPsi); } if (txtMaxEta.Text.Length > 0) { Int32.TryParse(txtMaxEta.Text, out maxEta); } if (txtMaxRes.Text.Length > 0) { Int32.TryParse(txtMaxRes.Text, out maxRES); } //if (txtMaxRps.Text.Length > 0) // Int32.TryParse(txtMaxRps.Text, out maxRPS); if (txtRenewalMax.Text.Length > 0) { float.TryParse(txtRenewalMax.Text, out maxRenew); } if (minRenew == maxRenew && maxPsi == minPsi && maxEta == minEta && maxRES == minRES) { param.serialize(d.FileName); } else { //string rewardJump = txtRewardArgJump.Text; int rpJump, psiJump, etaJump, resJump, rpsJump; float renewalJump; Int32.TryParse(txtPsiJump.Text, out psiJump); Int32.TryParse(txtEtaJump.Text, out etaJump); Int32.TryParse(txtResJump.Text, out resJump); float.TryParse(txtRenewalJump.Text, out renewalJump); psiJump = Math.Max(psiJump, 1); etaJump = Math.Max(etaJump, 1); resJump = Math.Max(resJump, 1); renewalJump = Math.Max(renewalJump, 0); dialogFilename = dialogFilename.Substring(0, dialogFilename.LastIndexOf('.')); string newFolderName = ""; try { char slash = '\\'; if (!dialogFilename.Contains(slash)) { slash = '/'; } newFolderName = dialogFilename.Substring(dialogFilename.LastIndexOf(slash) + 1); Directory.CreateDirectory(dialogFilename); dialogFilename += (slash + newFolderName); } catch (Exception) { } //var rewardFuncs = param.R.getRewardFunctions(minRewardArg, maxRewardArg, rewardJump); //foreach(ARewardFunction rw in rewardFuncs) //for (int rps = minRPS; rps <= maxRPS; rps += rpsJump) for (int res = minRES; res <= maxRES; res += resJump) { for (int psi = minPsi; psi <= maxPsi; psi += psiJump) { for (int eta = minEta; eta <= maxEta; eta += etaJump) { for (float renewal = minRenew; renewal <= maxRenew; renewal += renewalJump) { param.A_E = Evader.getAgents(eta); param.A_P = Pursuer.getAgents(psi); param.r_e = res; param.detectionProbRestraint = double.Parse(txtDetectionProb.Text); param.f_e = renewal; //param.r_ps = rps; //param.R = rw; string fileName = dialogFilename + "_eta" + eta.ToString() + "_psi" + psi.ToString() + "_res" + res.ToString() + "_fe" + renewal.ToString("0.00") + "." + AppConstants.FileExtensions.ROUTING_PARAM; param.serialize(fileName); } } } } } isDirty = false; ParamFilePath = d.FileName; } catch (Exception ex) { MessageBox.Show(ex.Message); } }
/// <summary> /// makes sure the active param object matches the GUI /// </summary> private void setParamData() { //param.canEvadersReceiveMultipleBroadcasts = chkMultipleBroadcasts.Checked; //param.canSinksSensePursuers = chkSinksSensePursuers.Checked; //param.areSinksSafe = chkSafeSinks.Checked; int psi; if (tryParseTextBox(txtPursuerCount, lblPursuerCount, out psi)) { param.A_P = Pursuer.getAgents(psi); } int evaderCount; if (tryParseTextBox(txtEvadersCount, lblEvaderCount, out evaderCount)) { param.A_E = Evader.getAgents(evaderCount); } int rp; if (tryParseTextBox(txtrp, lblrp, out rp)) { param.r_p = rp; } int re; // if area is square, also make sure re is valid i.e. odd value if (tryParseTextBox(txtre, lblre, out re, (reval) => { return(!chkSquareArea.Checked || reval % 2 == 1); })) { param.r_e = re; } int res; if (tryParseTextBox(txtres, lblrs, out res)) { param.r_es = res; } //int rps; //if (tryParseTextBox(txtrps, lblrs, out rps)) // param.r_ps = rps; int ti; if (tryParseTextBox(txtti, lblti, out ti)) { param.t_i = ti; } param.IsAreaSquare = chkSquareArea.Checked; //try //{ // // set reward func: // if (cmbRewardFunc.SelectedItem == null) // { // lblR.ForeColor = Color.Red; // return; // } // param.R = ReflectionUtils.constructEmptyCtorType<ARewardFunction>((string)cmbRewardFunc.SelectedItem); // lblR.ForeColor = Color.Black; // lstRewarrdDesc.Items.Clear(); // lstRewarrdDesc.Items.AddRange(param.R.argumentsDescription().ToArray<object>()); // try // { // param.R.setArgs(txtRewardArg.Text); // lblRewardArg.ForeColor = Color.Black; // } // catch (Exception) // { // lblRewardArg.ForeColor = Color.Red; // } //} //catch (Exception ex) //{ // lblR.ForeColor = Color.Red; //} }
private void btnSave_Click(object sender, EventArgs e) { foreach (object o in this.Controls) { Label l = o as Label; if (l != null && l.ForeColor.ToArgb() != Color.Black.ToArgb() && l.Visible == true) // ensure all fields are "valid" { MessageBox.Show(l.Text + " has invalid value"); return; } } SaveFileDialog d = new SaveFileDialog(); d.Filter = "Intrusion Game Param Files (*." + AppConstants.FileExtensions.INTRUSION_PARAM + ")|*." + AppConstants.FileExtensions.INTRUSION_PARAM; try { if (d.ShowDialog() != System.Windows.Forms.DialogResult.OK) { return; } string dialogFilename = d.FileName; int minTI = Int32.Parse(txtti.Text); int minRES = Int32.Parse(txtres.Text); //int minRPS = Int32.Parse(txtrps.Text); int minRP = Int32.Parse(txtrp.Text); int minPsi = Int32.Parse(txtPursuerCount.Text); int minEta = Int32.Parse(txtEvadersCount.Text); //string minRewardArg = txtRewardArg.Text; int maxRP = minRP; int maxPsi = minPsi; int maxEta = minEta; int maxRES = minRES; //int maxRPS = minRPS; int maxTI = minTI; //string maxRewardArg = txtRewardArgMax.Text; if (txtMaxRP.Text.Length > 0) { Int32.TryParse(txtMaxRP.Text, out maxRP); } if (txtMaxPsi.Text.Length > 0) { Int32.TryParse(txtMaxPsi.Text, out maxPsi); } if (txtMaxEta.Text.Length > 0) { Int32.TryParse(txtMaxEta.Text, out maxEta); } if (txtMaxRes.Text.Length > 0) { Int32.TryParse(txtMaxRes.Text, out maxRES); } //if (txtMaxRps.Text.Length > 0) // Int32.TryParse(txtMaxRps.Text, out maxRPS); if (txtMaxTi.Text.Length > 0) { Int32.TryParse(txtMaxTi.Text, out maxTI); } if (maxRP == minRP && maxPsi == minPsi && maxEta == minEta //&& maxRPS == minRPS && maxRES == minRES && minTI == maxTI /*&& maxRewardArg.Length == 0*/) { param.serialize(d.FileName); } else { //string rewardJump = txtRewardArgJump.Text; int rpJump = 0, psiJump = 0, etaJump = 0, resJump = 0, rpsJump = 0, tiJump; Int32.TryParse(txtPsiJump.Text, out psiJump); Int32.TryParse(txtEtaJump.Text, out etaJump); Int32.TryParse(txtRPJump.Text, out rpJump); Int32.TryParse(txtResJump.Text, out resJump); //Int32.TryParse(txtRpsJump.Text, out rpsJump); Int32.TryParse(txtTiJump.Text, out tiJump); rpJump = Math.Max(rpJump, 1); psiJump = Math.Max(psiJump, 1); etaJump = Math.Max(etaJump, 1); resJump = Math.Max(resJump, 1); //rpsJump = Math.Max(rpsJump, 1); tiJump = Math.Max(tiJump, 1); dialogFilename = dialogFilename.Substring(0, dialogFilename.LastIndexOf('.')); string newFolderName = ""; try { char slash = '\\'; if (!dialogFilename.Contains(slash)) { slash = '/'; } newFolderName = dialogFilename.Substring(dialogFilename.LastIndexOf(slash) + 1); Directory.CreateDirectory(dialogFilename); dialogFilename += (slash + newFolderName); } catch (Exception) { } //var rewardFuncs = param.R.getRewardFunctions(minRewardArg, maxRewardArg, rewardJump); //foreach(ARewardFunction rw in rewardFuncs) //for (int rps = minRPS; rps <= maxRPS; rps += rpsJump) for (int res = minRES; res <= maxRES; res += resJump) { for (int rp = minRP; rp <= maxRP; rp += rpJump) { for (int psi = minPsi; psi <= maxPsi; psi += psiJump) { for (int eta = minEta; eta <= maxEta; eta += etaJump) { for (int ti = minTI; ti <= maxTI; ti += tiJump) { param.A_E = Evader.getAgents(eta); param.A_P = Pursuer.getAgents(psi); param.r_p = rp; param.t_i = ti; param.r_es = res; //param.r_ps = rps; //param.R = rw; string fileName = dialogFilename + "_eta" + eta.ToString() + "_rp" + rp.ToString() + "_psi" + psi.ToString() + "_res" + res.ToString() + //"_rps" + rps.ToString() + "_ti" + ti.ToString() + //"_" + rw.fileNameDescription() + "." + AppConstants.FileExtensions.INTRUSION_PARAM; param.serialize(fileName); } } } } } } isDirty = false; ParamFilePath = d.FileName; } catch (Exception ex) { MessageBox.Show(ex.Message); } }
/// <summary> /// Champion constructor /// </summary> /// <param name="szChampName">The champion name.</param> /// <param name="szMenuName">The menu name.</param> /// <param name="enableRangeDrawings">if <c>true</c>, enables the spell range drawings</param> /// <param name="enableEvader">if <c>true</c>, enables the spell evader if the champion is supported</param> public Champion(string szChampName, string szMenuName, bool enableRangeDrawings = true, bool enableEvader = true) { Text = new Font(Drawing.Direct3DDevice, new FontDescription { FaceName = "Malgun Gothic", Height = 15, OutputPrecision = FontPrecision.Default, Quality = FontQuality.ClearTypeNatural }); TargetSelector.Initialize(ConfigMenu); SetSpells(); if (enableEvader) { Menu evaderMenu = null; Evader evader; switch (szChampName.ToLower()) { case "ezreal": evader = new Evader(out evaderMenu, EvadeMethods.Blink, Spells[E]); break; case "sivir": case "morgana": evader = new Evader(out evaderMenu, EvadeMethods.SpellShield, Spells[E]); break; case "fizz": evader = new Evader(out evaderMenu, EvadeMethods.Dash, Spells[E]); break; case "lissandra": evader = new Evader(out evaderMenu, EvadeMethods.Invulnerability, Spells[R]); break; case "nocturne": evader = new Evader(out evaderMenu, EvadeMethods.SpellShield, Spells[W]); break; case "vladimir": evader = new Evader(out evaderMenu, EvadeMethods.Invulnerability, Spells[W]); break; case "graves": case "gnar": case "lucian": case "riven": case "shen": evader = new Evader(out evaderMenu, EvadeMethods.Dash, Spells[E]); break; case "zed": case "leblanc": case "corki": evader = new Evader(out evaderMenu, EvadeMethods.Dash, Spells[W]); break; case "vayne": evader = new Evader(out evaderMenu, EvadeMethods.Dash, Spells[Q]); break; } } #region Events Game.OnUpdate += Game_OnUpdate; Drawing.OnDraw += Drawing_OnDraw; Orbwalker.OnPreAttack += OrbwalkingEvents_BeforeAttack; Orbwalker.OnPostAttack += OrbwalkingEvents_AfterAttack; AntiGapcloser.OnEnemyGapcloser += AntiGapcloser_OnEnemyGapcloser; Interrupter2.OnInterruptableTarget += Interrupter_OnPossibleToInterrupt; Obj_AI_Base.OnBuffGain += Obj_AI_Base_OnBuffAdd; Obj_AI_Base.OnProcessSpellCast += Obj_AI_Base_OnProcessSpellCast; CustomEvents.Unit.OnDash += Unit_OnDash; TargetedSpellDetector.OnDetected += TargetedSpellDetector_OnDetected; #endregion }
public override void CreateConfigMenu() { combo = new Menu("Combo Settings", "Combo Settings"); { combo.AddItem(new MenuItem("combo.q", "Use Q").SetValue(true)); combo.AddItem(new MenuItem("combo.w", "Use W").SetValue(true)); combo.AddItem(new MenuItem("combo.e", "Use E").SetValue(true)); combo.AddItem(new MenuItem("combo.r", "Use R").SetValue(true)); ult = new Menu("R Settings", "rsettings"); { ult.AddItem(new MenuItem("r.min.hp.combo", "Min. HP Percent for R").SetValue(new Slider(30, 1, 99))); ult.AddItem(new MenuItem("r.enemy.count", "Min. Enemies for R").SetValue(new Slider(3, 1, 5))); ult.AddItem(new MenuItem("r.method", "R Method").SetValue <StringList>(new StringList(new string[] { "Smart R" }, 0))); combo.AddSubMenu(ult); } esettings = new Menu("E Settings", "esettings"); { esettings.AddItem(new MenuItem("e.method", "E Method").SetValue <StringList>(new StringList(new string[] { "Safe Position", "Cursor Position" }, 0))); combo.AddSubMenu(esettings); } Config.AddSubMenu(combo); } harass = new Menu("Harass Settings", "Harass Settings"); { harass.AddItem(new MenuItem("harass.q", "Use Q").SetValue(true)); harass.AddItem(new MenuItem("harass.mana", "Min. Mana Percent").SetValue(new Slider(50, 1, 99))); Config.AddSubMenu(harass); } laneclear = new Menu("Clear Settings", "Clear Settings"); { laneclear.AddItem(new MenuItem("clear.q", "Use Q").SetValue(true)); laneclear.AddItem(new MenuItem("min.minions.for.q", "Min. Minions to use Q ").SetValue <Slider>(new Slider(3, 1, 6))); laneclear.AddItem(new MenuItem("clear.mana", "Min. Mana Percent").SetValue(new Slider(50, 1, 99))); Config.AddSubMenu(laneclear); } jungle = new Menu("Jungle Settings", "Jungle Settings"); { jungle.AddItem(new MenuItem("jungle.q", "Use Q").SetValue(true)); jungle.AddItem(new MenuItem("jungle.w", "Use W").SetValue(true)); jungle.AddItem(new MenuItem("jungle.e", "Use E").SetValue(true)); jungle.AddItem(new MenuItem("jungle.mana", "Min. Mana Percent").SetValue(new Slider(50, 1, 99))); Config.AddSubMenu(jungle); } killsteal = new Menu("KillSteal Settings", "KillSteal Settings"); { killsteal.AddItem(new MenuItem("disable.ks", "Disable KillSteal?").SetValue(false)); killsteal.AddItem(new MenuItem("ayracx4", " KillSteal Settings")); killsteal.AddItem(new MenuItem("killsteal.q", "Use Q").SetValue(true)); killsteal.AddItem(new MenuItem("killsteal.e", "Use E").SetValue(true)); killsteal.AddItem(new MenuItem("killsteal.r", "Use R").SetValue(true)); killsteal.AddItem(new MenuItem("min.hp.killsteal", "Min. HP Percent").SetValue(new Slider(50, 1, 99))); Config.AddSubMenu(killsteal); } m_evader = new Evader(out evade, EvadeMethods.EkkoE); { Config.AddSubMenu(evade); } protector = new Menu("(R) Protector", "(R) Protector"); { protector.AddItem(new MenuItem("ayracx", " Protector Settings")); protector.AddItem(new MenuItem("hp.for.protect", "Min. HP Percent").SetValue(new Slider(10, 100, 0))); protector.AddItem(new MenuItem("protector", "Disable Protector?").SetValue(true)); protector.AddItem(new MenuItem("ayrac", " Protector Spell List")); foreach (var enemy in HeroManager.Enemies) { foreach (var skillshot in SSHCommon.Spell_Database.SpellDatabase.Spells.Where(x => x.charName == enemy.ChampionName)) // 2.5F Protector { protector.AddItem(new MenuItem("hero." + skillshot.spellName, "" + skillshot.charName + "(" + skillshot.spellKey + ")").SetValue(true)); } } Config.AddSubMenu(protector); } activator = new Menu("Activator Settings", "Activator Settings"); { new Smite(TargetSelector.DamageType.Magical, activator); new Ignite(TargetSelector.DamageType.Magical, activator); Config.AddSubMenu(activator); } misc = new Menu("Misc", "Misc"); { misc.AddItem(new MenuItem("auto.w.immobile", "Auto Cast W If Enemy Immobile").SetValue(true)); //misc.AddItem(new MenuItem("focus.method", "Focus Method").SetValue<StringList>(new StringList(new string[] { "Normal", "Always Focus 2 Stack Enemy" }, 0))); Config.AddSubMenu(misc); } drawing = new Menu("Draw Settings", "Draw Settings"); { drawing.AddItem(new MenuItem("q.draw", "Q Range").SetValue(new Circle(true, System.Drawing.Color.Chartreuse))); drawing.AddItem(new MenuItem("w.draw", "W Range").SetValue(new Circle(true, System.Drawing.Color.Yellow))); drawing.AddItem(new MenuItem("e.draw", "E Range").SetValue(new Circle(true, System.Drawing.Color.White))); drawing.AddItem(new MenuItem("r.draw", "R Range").SetValue(new Circle(true, System.Drawing.Color.SandyBrown))); //drawing.AddItem(new MenuItem("wall.draw", "Wall Jump Draw").SetValue(true)); Config.AddSubMenu(drawing); } Config.AddItem(new MenuItem("CRHITCHANCE", "Skillshot Hit Chance").SetValue <StringList>(new StringList(SSHCommon.Utility.HitchanceNameArray, 1))); Config.AddToMainMenu(); //DamageIndicator.DamageToUnit = (t) => (float)CalculateComboDamage(t); Game.OnUpdate += Game_OnGameUpdate; Orbwalking.AfterAttack += Orbwalking_AfterAttack; Obj_AI_Base.OnProcessSpellCast += OnProcessSpellCast; Drawing.OnDraw += OnDraw; }
public Jhin() { foreach (var enemy in EntityManager.Heroes.Enemies) { TextsInScreen.Add(enemy.NetworkId, new Text(enemy.ChampionName + " is R killable", new Font("Arial", 30F, FontStyle.Bold)) { Color = Color.Red }); TextsInHeroPosition.Add(enemy.NetworkId, new Text("R killable", new Font("Arial", 23F, FontStyle.Bold)) { Color = Color.Red }); LastPredictedPositionText.Add(enemy.NetworkId, new Text(enemy.ChampionName + " last predicted position", new Font("Arial", 23F, FontStyle.Bold)) { Color = Color.Red }); } Q = new SpellBase(SpellSlot.Q, SpellType.Targeted, 600) { Width = 450, Speed = 1800, CastDelay = 250, }; W = new SpellBase(SpellSlot.W, SpellType.Linear, 2500) { Width = 40, CastDelay = 750, Speed = 5000, AllowedCollisionCount = -1, }; E = new SpellBase(SpellSlot.E, SpellType.Circular, 750) { Width = 135, CastDelay = 250, Speed = 1600, }; R = new SpellBase(SpellSlot.R, SpellType.Linear, 3500) { Width = 65, CastDelay = 250, Speed = 5000, AllowedCollisionCount = -1, }; Evader.OnEvader += delegate { if (EvaderMenu.CheckBox("BlockW")) { LastBlockTick = Core.GameTickCount; } }; Spellbook.OnCastSpell += delegate(Spellbook sender, SpellbookCastSpellEventArgs args) { if (sender.Owner.IsMe) { if (args.Slot == SpellSlot.W) { args.Process = Core.GameTickCount - LastBlockTick > 750; } } }; Obj_AI_Base.OnProcessSpellCast += delegate(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args) { if (sender.IsMe) { switch (args.Slot) { case SpellSlot.W: W.LastCastTime = Core.GameTickCount; W.LastEndPosition = args.End; break; case SpellSlot.R: if (args.SData.Name == "JhinR") { IsCastingR = true; LastRCone = new Geometry.Polygon.Sector(sender.Position, args.End, (float)(45 * 2f * Math.PI / 175f), R.Range); Stacks = 4; } else if (args.SData.Name == "JhinRShot") { R.LastCastTime = Core.GameTickCount; TapKeyPressed = false; Stacks--; } break; } } }; Gapcloser.OnGapcloser += delegate(AIHeroClient sender, Gapcloser.GapcloserEventArgs args) { if (sender.IsValidTarget(E.Range) && sender.IsEnemy) { if (MyHero.Distance(args.Start, true) > MyHero.Distance(args.End)) { if (AutomaticMenu.CheckBox("E.Gapcloser") && MyHero.IsInRange(args.End, E.Range) && E.IsReady) { E.Cast(args.End); } if (MyHero.Distance(args.End, true) < (sender.GetAutoAttackRange(MyHero) * 1.5f).Pow()) { WShouldWaitTick = Core.GameTickCount; } } } }; MenuManager.AddSubMenu("Keys"); { KeysMenu.AddValue("TapKey", new KeyBind("R Tap Key", false, KeyBind.BindTypes.HoldActive, 'T')).OnValueChange += delegate(ValueBase <bool> sender, ValueBase <bool> .ValueChangeArgs args) { if (args.NewValue && R.IsLearned && (R.IsReady || IsCastingR) && R.EnemyHeroes.Count > 0) { TapKeyPressed = true; } }; KeysMenu.AddValue("UltKey", new KeyBind("R Key in game", false, KeyBind.BindTypes.HoldActive, 'R')).OnValueChange += delegate(ValueBase <bool> sender, ValueBase <bool> .ValueChangeArgs args) { if (args.NewValue && R.IsLearned && (R.IsReady || IsCastingR)) { Player.IssueOrder(GameObjectOrder.Stop, Player.Instance.ServerPosition); } }; ToggleManager.RegisterToggle( KeysMenu.AddValue("AutoW", new KeyBind("AutoW Toggle", false, KeyBind.BindTypes.PressToggle, 'K')), delegate { foreach (var enemy in UnitManager.ValidEnemyHeroes.Where(TargetHaveEBuff)) { if (MiscMenu.CheckBox("AutoW." + enemy.ChampionName)) { CastW(enemy); } } }); } W.AddConfigurableHitChancePercent(); R.AddConfigurableHitChancePercent(); MenuManager.AddSubMenu("Combo"); { ComboMenu.AddValue("Q", new CheckBox("Use Q")); ComboMenu.AddValue("W", new CheckBox("Use W", false)); ComboMenu.AddValue("E", new CheckBox("Use E", false)); ComboMenu.AddValue("Items", new CheckBox("Use offensive items")); } MenuManager.AddSubMenu("Ultimate"); { UltimateMenu.AddStringList("Mode", "R AIM Mode", new[] { "Disabled", "Using TapKey", "Automatic" }, 3); UltimateMenu.AddValue("OnlyKillable", new CheckBox("Only attack if it's killable", false)); UltimateMenu.AddValue("Delay", new Slider("Delay between R's (in ms)", 0, 0, 1500)); UltimateMenu.AddValue("NearMouse", new GroupLabel("Near Mouse Settings")); UltimateMenu.AddValue("NearMouse.Enabled", new CheckBox("Only select target near mouse", false)); UltimateMenu.AddValue("NearMouse.Radius", new Slider("Near mouse radius", 500, 100, 1500)); UltimateMenu.AddValue("NearMouse.Draw", new CheckBox("Draw near mouse radius")); } MenuManager.AddSubMenu("Harass"); { HarassMenu.AddValue("Q", new CheckBox("Use Q")); HarassMenu.AddValue("W", new CheckBox("Use W", false)); HarassMenu.AddValue("E", new CheckBox("Use E", false)); HarassMenu.AddValue("ManaPercent", new Slider("Minimum Mana Percent", 20)); } MenuManager.AddSubMenu("Clear"); { ClearMenu.AddValue("LaneClear", new GroupLabel("LaneClear")); { ClearMenu.AddValue("LaneClear.Q", new Slider("Use Q if hit is greater than {0}", 5, 0, 10)); ClearMenu.AddValue("LaneClear.W", new Slider("Use W if hit is greater than {0}", 6, 0, 10)); ClearMenu.AddValue("LaneClear.E", new Slider("Use E if hit is greater than {0}", 5, 0, 10)); ClearMenu.AddValue("LaneClear.ManaPercent", new Slider("Minimum Mana Percent", 50)); } ClearMenu.AddValue("LastHit", new GroupLabel("LastHit")); { ClearMenu.AddStringList("LastHit.Q", "Use Q", new[] { "Never", "Smartly", "Always" }, 1); ClearMenu.AddValue("LastHit.ManaPercent", new Slider("Minimum Mana Percent", 50)); } ClearMenu.AddValue("JungleClear", new GroupLabel("JungleClear")); { ClearMenu.AddValue("JungleClear.Q", new CheckBox("Use Q")); ClearMenu.AddValue("JungleClear.W", new CheckBox("Use W", false)); ClearMenu.AddValue("JungleClear.E", new CheckBox("Use E", false)); ClearMenu.AddValue("JungleClear.ManaPercent", new Slider("Minimum Mana Percent", 20)); } } MenuManager.AddKillStealMenu(); { KillStealMenu.AddValue("Q", new CheckBox("Use Q")); KillStealMenu.AddValue("Qmin", new CheckBox("Use Q On Minions")); KillStealMenu.AddValue("W", new CheckBox("Use W")); KillStealMenu.AddValue("E", new CheckBox("Use E", false)); KillStealMenu.AddValue("R", new CheckBox("Use R")); } MenuManager.AddSubMenu("Automatic"); { AutomaticMenu.AddValue("E.Gapcloser", new CheckBox("Use E on hero gapclosing / dashing")); AutomaticMenu.AddValue("Immobile", new CheckBox("Use E on hero immobile")); AutomaticMenu.AddValue("Buffed", new CheckBox("Use W on hero with buff")); } MenuManager.AddSubMenu("Evader"); { EvaderMenu.AddValue("BlockW", new CheckBox("Block W to Evade")); } Evader.Initialize(); Evader.AddCrowdControlSpells(); Evader.AddDangerousSpells(); MenuManager.AddSubMenu("Misc"); { MiscMenu.AddValue("Champions", new GroupLabel("Allowed champions to use Auto W")); foreach (var enemy in EntityManager.Heroes.Enemies) { MiscMenu.AddValue("AutoW." + enemy.ChampionName, new CheckBox(enemy.ChampionName)); } } MenuManager.AddDrawingsMenu(); { Q.AddDrawings(false); W.AddDrawings(); E.AddDrawings(false); R.AddDrawings(); DrawingsMenu.AddValue("Toggles", new CheckBox("Draw toggles status")); DrawingsMenu.AddValue("R.Killable", new CheckBox("Draw text if target is r killable")); DrawingsMenu.AddValue("R.LastPredictedPosition", new CheckBox("Draw last predicted position")); } }
public override void CreateConfigMenu() { combo = new Menu("Combo Settings", "Combo Settings"); combo.AddItem(new MenuItem("combo.q", "Use Q").SetValue(true)); combo.AddItem(new MenuItem("combo.e", "Use E").SetValue(true)); combo.AddItem(new MenuItem("combo.r", "Use R").SetValue(true)); combo.AddItem(new MenuItem("combo.r.count", "R on x Enemy").SetValue(new Slider(3, 1, 5))); harass = new Menu("Harass Settings", "Harass Settings"); harass.AddItem(new MenuItem("harass.q", "Use Q").SetValue(true)); harass.AddItem(new MenuItem("harass.e", "Use E").SetValue(true)); harass.AddItem(new MenuItem("harass.mana", "Min. Mana Percent").SetValue(new Slider(50, 0, 100))); jungle = new Menu("Jungle Settings", "Jungle Settings"); jungle.AddItem(new MenuItem("jungle.q", "Use Q").SetValue(true)); jungle.AddItem(new MenuItem("jungle.e", "Use E").SetValue(true)); jungle.AddItem(new MenuItem("jungle.mana", "Min. Mana Percent").SetValue(new Slider(50, 0, 100))); CondemnMenu = new Menu("» Condemn Settings «", "Condemn Settings"); condemnwhitelist = new Menu("» Condemn Whitelist", "Condemn Whitelist"); foreach (var enemy in ObjectManager.Get <Obj_AI_Hero>().Where(o => o.IsEnemy)) { condemnwhitelist.AddItem(new MenuItem("condemnset." + enemy.CharData.BaseSkinName, string.Format("Condemn: {0}", enemy.CharData.BaseSkinName)).SetValue(true)); } CondemnMenu.AddItem(new MenuItem("condemn.distance", "» Condemn Push Distance").SetValue(new Slider(410, 350, 420))); misc = new Menu("Miscellaneous", "Miscellaneous"); customizableinterrupter = new Menu("Customizable Interrupter", "Customizable Interrupter"); customizableinterrupter.AddItem(new MenuItem("miss.fortune.r", "Miss Fortune (R)").SetValue(true)); customizableinterrupter.AddItem(new MenuItem("katarina.r", "Katarina (R)").SetValue(true)); misc.AddItem(new MenuItem("auto.orb.buy", "Auto Scrying Orb Buy!").SetValue(true)); misc.AddItem(new MenuItem("orb.level", "Scrying Orb Buy Level").SetValue(new Slider(6, 0, 18))); activator = new Menu("Activator Settings", "Activator Settings"); #region QSS Usage qss = new Menu("QSS Settings", "QSS Settings"); qss.AddItem(new MenuItem("use.qss", "Use QSS").SetValue(true)); #region QSS Debuff List qssMenu = new Menu("QSS Debuff List", "QSS Debuff List"); qssMenu.AddItem(new MenuItem("qss.charm", "Charm").SetValue(true)); qssMenu.AddItem(new MenuItem("qss.flee", "Flee").SetValue(true)); qssMenu.AddItem(new MenuItem("qss.snare", "Snare").SetValue(true)); qssMenu.AddItem(new MenuItem("qss.polymorph", "Polymorph").SetValue(true)); qssMenu.AddItem(new MenuItem("qss.stun", "Stun").SetValue(true)); qssMenu.AddItem(new MenuItem("qss.suppression", "Suppression").SetValue(true)); qssMenu.AddItem(new MenuItem("qss.taunt", "Taunt").SetValue(true)); #endregion QSS Debuff List #endregion QSS Usage #region BOTRK Usage botrk = new Menu("BOTRK Settings", "BOTRK Settings"); botrk.AddItem(new MenuItem("use.botrk", "Use BOTRK").SetValue(true)); botrk.AddItem(new MenuItem("botrk.vayne.hp", "Use if Vayne HP < %").SetValue(new Slider(20, 0, 100))); botrk.AddItem(new MenuItem("botrk.enemy.hp", "Use if Enemy HP < %").SetValue(new Slider(20, 0, 100))); #endregion BOTRK Usage #region Youmuu Usage youmuu = new Menu("Youmuu Settings", "Youmuu Settings"); youmuu.AddItem(new MenuItem("use.youmuu", "Use Youmuu").SetValue(true)); #endregion Youmuu Usage m_evader = new Evader(out evade, EvadeMethods.VayneQ); Config.AddSubMenu(combo); Config.AddSubMenu(harass); Config.AddSubMenu(jungle); Config.AddSubMenu(evade); Config.AddSubMenu(CondemnMenu); CondemnMenu.AddSubMenu(condemnwhitelist); misc.AddSubMenu(customizableinterrupter); Config.AddSubMenu(misc); activator.AddSubMenu(qss); activator.AddSubMenu(botrk); activator.AddSubMenu(youmuu); qss.AddSubMenu(qssMenu); Config.AddSubMenu(activator); Config.AddItem(new MenuItem("masterracec0mb0", " HikiCarry Masterrace Mode")); Config.AddItem(new MenuItem("condemn.style", "Condemn Method").SetValue(new StringList(new[] { "Shine", "Asuna", "360" }))); Config.AddItem(new MenuItem("condemn.x1", "Condemn Style").SetValue(new StringList(new[] { "Only Combo" }))); Config.AddItem(new MenuItem("q.type", "Q Type").SetValue(new StringList(new[] { "Cursor Position" }))); Config.AddItem(new MenuItem("combo.type", "Combo Type").SetValue(new StringList(new[] { "Burst", "Normal" }))); Config.AddItem(new MenuItem("harass.type", "Harass Type").SetValue(new StringList(new[] { "2 Silver Stack + Q", "2 Silver Stack + E" }))); Config.AddToMainMenu(); var drawing = new Menu("Draw Settings", "Draw Settings"); { drawing.AddItem(new MenuItem("qDraw", "Q Range").SetValue(new Circle(true, System.Drawing.Color.Chartreuse))); drawing.AddItem(new MenuItem("eDraw", "E Range").SetValue(new Circle(true, System.Drawing.Color.Yellow))); drawing.AddItem(new MenuItem("aa.indicator", "AA Indicator").SetValue(true)); Config.AddSubMenu(drawing); } Game.OnUpdate += Game_OnGameUpdate; Orbwalking.AfterAttack += Orbwalking_AfterAttack; Drawing.OnDraw += OnDraw; }