public void NextEvenWeightTest() { var w = new WeightedRandom <int>( WeightedParameterFactory.Create(1, 25), WeightedParameterFactory.Create(2, 25), WeightedParameterFactory.Create(3, 25), WeightedParameterFactory.Create(4, 25)); var dict = new Dictionary <int, int> { { 1, 0 }, { 2, 0 }, { 3, 0 }, { 4, 0 } }; for (int i = 0; i < 100 * RUN_MULTIPLIER; i++) { dict[w.Next()]++; } Assert.IsTrue(Math.Round(dict[1] / (double)RUN_MULTIPLIER, 0) == 25); Assert.IsTrue(Math.Round(dict[2] / (double)RUN_MULTIPLIER, 0) == 25); Assert.IsTrue(Math.Round(dict[3] / (double)RUN_MULTIPLIER, 0) == 25); Assert.IsTrue(Math.Round(dict[4] / (double)RUN_MULTIPLIER, 0) == 25); }
public static void Execute(EventArgs args) { /// <summary> /// The Cleanse Logic. /// </summary> if (Bools.HasNoProtection(ObjectManager.Player) && Bools.ShouldUseCleanse(ObjectManager.Player)) { if (ObjectManager.Player.ChampionName == "Gangplank" && Variables.W.IsReady()) { Variables.W.Cast(); return; } else if (Bools.IsSpellAvailable(SpellSlots.Cleanse)) { Utility.DelayAction.Add( Bools.MustRandomize() ? WeightedRandom.Next(100, 200) : 0, () => { ObjectManager.Player.Spellbook.CastSpell(SpellSlots.Cleanse); return; } ); } } /// <summary> /// The Clarity logic. /// </summary> if (Bools.IsSpellAvailable(SpellSlots.Clarity) && ObjectManager.Player.ManaPercent <= 40) { ObjectManager.Player.Spellbook.CastSpell(SpellSlots.Clarity); } /// <summary> /// The Ghost Logic. /// </summary> if (Bools.IsSpellAvailable(SpellSlots.Ghost) && (ObjectManager.Player.CountEnemiesInRange(ObjectManager.Player.AttackRange + 300) < ObjectManager.Player.CountAlliesInRange(ObjectManager.Player.AttackRange + 300)) || (ObjectManager.Player.CountEnemiesInRange(ObjectManager.Player.AttackRange + 300) > ObjectManager.Player.CountAlliesInRange(ObjectManager.Player.AttackRange + 300))) { ObjectManager.Player.Spellbook.CastSpell(SpellSlots.Ghost); } /* * /// <summary> * /// The Ignite Logic. * /// </summary> * if (Bools.IsSpellAvailable(SpellSlots.Ignite) && * Targets.target != null && * Targets.target.IsValidTarget(600f) && * ObjectManager.Player.GetSummonerSpellDamage(Targets.target, Damage.SpellSlot.Ignite) > Targets.target.Health) * { * ObjectManager.Player.Spellbook.CastSpell(SpellSlots.Ignite, Targets.target); * } */ }
private static void Obj_AI_Base_OnIssueOrder(Obj_AI_Base sender, PlayerIssueOrderEventArgs args) { var senderValid = sender != null && sender.IsValid && sender.IsMe; if (!senderValid || args.Order != GameObjectOrder.MoveTo || !Menu.Item("MovementEnabled").IsActive()) { return; } if (LastMovementPosition != Vector3.Zero && args.TargetPosition.Distance(LastMovementPosition) < 300) { if (NextMovementDelay == 0) { var min = Menu.Item("MinDelay").GetValue <Slider>().Value; var max = Menu.Item("MaxDelay").GetValue <Slider>().Value; NextMovementDelay = min > max ? min : WeightedRandom.Next(min, max); } if (Menu.Item("MovementHumanizeRate").IsActive() && LastMove.TimeSince() < NextMovementDelay) { NextMovementDelay = 0; BlockedMoveCount++; args.Process = false; return; } if (Menu.Item("MovementHumanizeDistance").IsActive()) { var wp = ObjectManager.Player.GetWaypoints(); /* if (wp.Count > 1 && wp.Last().Distance(args.TargetPosition) < 20) * { * //Console.WriteLine("HUMANIZE WAYPOINTS"); * BlockedMoveCount++; * args.Process = false; * return; * } * * if (args.TargetPosition.Distance(LastMovementPosition) < 20) * { * //Console.WriteLine("HUMANIZE LAST POSITION"); * BlockedMoveCount++; * args.Process = false; * return; * } */ if (args.TargetPosition.Distance(Player.ServerPosition) < 50) { // Console.WriteLine("HUMANIZE CURRENT POSITION"); BlockedMoveCount++; args.Process = false; return; } } } LastMovementPosition = args.TargetPosition; LastMove = Utils.TickCount; }
private static void OnUpdate(EventArgs args) { if (!Config.Item("enable").GetValue <bool>()) { return; } var random = Config.Item("EnableHumanizer").GetValue <bool>() ? WeightedRandom.Next(200, 700) : 0; var combo = Orbwalking.Orbwalker.Instances.Find(x => x.ActiveMode == Orbwalking.OrbwalkingMode.Combo); if (combo == null) { return; } foreach (var heros in HeroManager.Enemies.Where(x => !x.IsDead && x.Distance(ObjectManager.Player) < 1000)) { var path = heros.GetWaypoints().LastOrDefault().To3D(); // if (path == new Vector3(null)) return; if (NavMesh.IsWallOfGrass(path, 1)) { //Game.PrintChat("test"); if (heros.Distance(path) > 200) { return; } if (NavMesh.IsWallOfGrass(ObjectManager.Player.Position, 1) && ObjectManager.Player.Distance(path) < 200) { return; } if (ObjectManager.Player.Distance(path) < 500) { foreach ( var obj in ObjectManager.Get <Obj_AI_Base>().Where(x => x.Name.ToLower().Contains("ward") && x.IsAlly && x.Distance(path) < 300)) { // Game.PrintChat("hi"); if (NavMesh.IsWallOfGrass(obj.Position, 1)) { return; } // } } var items = Items.GetWardSlot(); if (items != null && Environment.TickCount - lastwarded > 1000) { Utility.DelayAction.Add(random, () => ObjectManager.Player.Spellbook.CastSpell(items.SpellSlot, path)); lastwarded = Environment.TickCount; } } } } }
/// <summary> /// Called when the game updates itself. /// </summary> /// <param name="args">The <see cref="EventArgs"/> instance containing the event data.</param> public static void Execute(EventArgs args) { if (Bools.ShouldUseCleanser() || (!Bools.IsSpellAvailable(SpellSlots.Cleanse) && Bools.ShouldUseCleanse(ObjectManager.Player))) { /// <summary> /// The Quicksilver Sash. /// </summary> if (ItemData.Quicksilver_Sash.GetItem().IsReady()) { Utility.DelayAction.Add( Variables.Menu.Item($"{Variables.MainMenuName}.randomizer").GetValue <bool>() ? WeightedRandom.Next(100, 200) : 0, () => { ItemData.Quicksilver_Sash.GetItem().Cast(); return; } ); } /// <summary> /// The Mikaels Crucible. /// </summary> if (ItemData.Mikaels_Crucible.GetItem().IsReady()) { if (Bools.ShouldUseCleanse(Targets.Ally) && Targets.Ally.IsValidTarget(750f, false)) { Utility.DelayAction.Add( Variables.Menu.Item($"{Variables.MainMenuName}.randomizer").GetValue <bool>() ? WeightedRandom.Next(100, 200) : 0, () => { ItemData.Mikaels_Crucible.GetItem().Cast(Targets.Ally); } ); } else if (Bools.ShouldUseCleanse(ObjectManager.Player)) { Utility.DelayAction.Add( Variables.Menu.Item($"{Variables.MainMenuName}.randomizer").GetValue <bool>() ? WeightedRandom.Next(100, 200) : 0, () => { ItemData.Mikaels_Crucible.GetItem().Cast(ObjectManager.Player); } ); } } } }
private static void Obj_AI_Base_OnIssueOrder(Obj_AI_Base sender, GameObjectIssueOrderEventArgs args) { var senderValid = sender != null && sender.IsValid && sender.IsMe; if (!senderValid || args.Order != GameObjectOrder.MoveTo || !Menu.Item("MovementEnabled").IsActive()) { return; } var min = Menu.Item("MinDelay").GetValue <Slider>().Value; var max = Menu.Item("MaxDelay").GetValue <Slider>().Value; var delay = min > max ? min : WeightedRandom.Next(min, max); if (Utils.TickCount - LastMove < delay) { args.Process = false; return; } LastMove = Utils.TickCount; }
/// <summary> /// Called when the game updates itself. /// </summary> /// <param name="args">The <see cref="EventArgs"/> instance containing the event data.</param> public static void Execute(EventArgs args) { if ((Bools.ShouldUseCleanser() || (Bools.ShouldUseCleanse(ObjectManager.Player) && !Bools.IsSpellAvailable(SpellSlots.Cleanse))) || ObjectManager.Player.HealthPercent <= 10 && HealthPrediction.GetHealthPrediction(ObjectManager.Player, (int)(500 + Game.Ping / 2f)) <= ObjectManager.Player.MaxHealth / 6) { /// <summary> /// The Dervish Blade. /// </summary> if (ItemData.Dervish_Blade.GetItem().IsReady()) { Utility.DelayAction.Add( Variables.Menu.Item($"{Variables.MainMenuName}.randomizer").GetValue <bool>() ? WeightedRandom.Next(100, 200) : 0, () => { ItemData.Dervish_Blade.GetItem().Cast(); return; } ); } /// <summary> /// The Mercurial Scimitar. /// </summary> if (ItemData.Mercurial_Scimitar.GetItem().IsReady()) { Utility.DelayAction.Add( Variables.Menu.Item($"{Variables.MainMenuName}.randomizer").GetValue <bool>() ? WeightedRandom.Next(100, 200) : 0, () => { ItemData.Mercurial_Scimitar.GetItem().Cast(); } ); } } }
private static void Obj_AI_Base_OnIssueOrder(Obj_AI_Base sender, PlayerIssueOrderEventArgs args) { var senderValid = sender != null && sender.IsValid && sender.IsMe; if (!senderValid || args.Order != GameObjectOrder.MoveTo || !getCheckBoxItem(move, "MovementEnabled")) { return; } if (LastMovementPosition != Vector3.Zero && args.TargetPosition.LSDistance(LastMovementPosition) < 300) { if (NextMovementDelay == 0) { var min = getSliderItem(move, "MinDelay"); var max = getSliderItem(move, "MaxDelay"); NextMovementDelay = min > max ? min : WeightedRandom.Next(min, max); } if (getCheckBoxItem(move, "MovementHumanizeRate") && LastMove.TimeSince() < NextMovementDelay) { NextMovementDelay = 0; BlockedMoveCount++; args.Process = false; return; } if (getCheckBoxItem(move, "MovementHumanizeDistance")) { var wp = ObjectManager.Player.GetWaypoints(); if (args.TargetPosition.LSDistance(Player.ServerPosition) < 50) { BlockedMoveCount++; args.Process = false; return; } } } LastMovementPosition = args.TargetPosition; LastMove = Utils.TickCount; }
private static void Spellbook_OnCastSpell(Spellbook sender, SpellbookCastSpellEventArgs args) { var spell = (int)args.Slot; var senderValid = sender != null && sender.Owner != null && sender.Owner.IsMe; if (!senderValid || !args.Slot.IsMainSpell() || !Menu.Item("Enabled" + spell).IsActive()) { return; } var min = Menu.Item("MinDelay" + spell).GetValue <Slider>().Value; var max = Menu.Item("MaxDelay" + spell).GetValue <Slider>().Value; var delay = min > max ? min : WeightedRandom.Next(min, max); if (Utils.TickCount - LastCast[spell] < delay) { args.Process = false; return; } LastCast[spell] = Utils.TickCount; }
private static void Spellbook_OnCastSpell(Spellbook sender, SpellbookCastSpellEventArgs args) { var spell = args.Slot; var senderValid = sender != null && sender.Owner != null && sender.Owner.IsMe; if (!senderValid || !Items.Contains(spell) || !Menu.Item("Enabled" + spell).IsActive()) { return; } var min = Menu.Item("MinDelay" + spell).GetValue <Slider>().Value; var max = Menu.Item("MaxDelay" + spell).GetValue <Slider>().Value; var delay = min >= max ? min : WeightedRandom.Next(min, max); if (LastCast[spell].TimeSince() < delay) { BlockedSpellCount++; args.Process = false; return; } LastCast[spell] = Utils.TickCount; }
/// <summary> /// Called when the game updates itself. /// </summary> /// <param name="args">The <see cref="EventArgs"/> instance containing the event data.</param> public static void Execute(EventArgs args) { /// <summary> /// The Cleanse Logic. /// </summary> if (Bools.ShouldUseCleanse(ObjectManager.Player)) { if (Variables.W.IsReady() && ObjectManager.Player.ChampionName.Equals("Gangplank")) { Variables.W.Cast(); return; } if (Bools.IsSpellAvailable(SpellSlots.Cleanse)) { Utility.DelayAction.Add( Variables.Menu.Item($"{Variables.MainMenuName}.randomizer").GetValue <bool>() ? WeightedRandom.Next(100, 200) : 0, () => { ObjectManager.Player.Spellbook.CastSpell(SpellSlots.Cleanse); } ); } } /// <summary> /// The Barrier Logic. /// </summary> if (Bools.IsSpellAvailable(SpellSlots.Barrier) && HealthPrediction.GetHealthPrediction(ObjectManager.Player, (int)(250 + Game.Ping / 2f)) <= ObjectManager.Player.MaxHealth / 6) { ObjectManager.Player.Spellbook.CastSpell(SpellSlots.Barrier); return; } /// <summary> /// The Heal Logic. /// </summary> if (Bools.IsSpellAvailable(SpellSlots.Heal) && !ItemData.Face_of_the_Mountain.GetItem().IsReady() && !ItemData.Locket_of_the_Iron_Solari.GetItem().IsReady()) { if ((ObjectManager.Player.CountEnemiesInRange(850f) > 0 && HealthPrediction.GetHealthPrediction(ObjectManager.Player, (int)(250 + Game.Ping / 2f)) <= ObjectManager.Player.MaxHealth / 6) || (Targets.Ally.IsValidTarget(850f) && Targets.Ally.CountEnemiesInRange(850f) > 0 && HealthPrediction.GetHealthPrediction(Targets.Ally, (int)(250 + Game.Ping / 2f)) <= Targets.Ally.MaxHealth / 6)) { ObjectManager.Player.Spellbook.CastSpell(SpellSlots.Heal); return; } } /// <summary> /// The Exhaust Logic. /// </summary> if (Bools.IsSpellAvailable(SpellSlots.Exhaust) && Targets.Target.IsValidTarget(650f) && (ObjectManager.Player.CountEnemiesInRange(850f) > 0 || Targets.Ally.CountEnemiesInRange(850f) > 0) && (HealthPrediction.GetHealthPrediction(ObjectManager.Player, (int)(250 + Game.Ping / 2f)) <= ObjectManager.Player.MaxHealth / 4 || HealthPrediction.GetHealthPrediction(Targets.Ally, (int)(250 + Game.Ping / 2f)) <= Targets.Ally.MaxHealth / 4)) { ObjectManager.Player.Spellbook.CastSpell(SpellSlots.Exhaust, Targets.Target); } /// <summary> /// The Ignite Logic. /// </summary> if (Bools.IsSpellAvailable(SpellSlots.Ignite) && Targets.Target.IsValidTarget(600f) && (ObjectManager.Player.GetSummonerSpellDamage(Targets.Target, Damage.SummonerSpell.Ignite) > Targets.Target.Health || HealthPrediction.GetHealthPrediction(Targets.Target, (int)(750 + Game.Ping / 2f)) <= 0)) { ObjectManager.Player.Spellbook.CastSpell(SpellSlots.Ignite, Targets.Target); } /// <summary> /// The Clarity logic. /// </summary> if (Bools.IsSpellAvailable(SpellSlots.Clarity) && ObjectManager.Player.ManaPercent <= 20) { ObjectManager.Player.Spellbook.CastSpell(SpellSlots.Clarity); } }
internal int getRandomItemINTERNAL() { return(mItemBag.Next()); }
/// <summary> /// Handles the <see cref="E:ProcessSpell" /> event. /// </summary> public static void OnProcessSpellCast(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args) { if (!Vars.Menu["enable"].GetValue <MenuSliderButton>().BValue) { return; } var objAiHero = sender as Obj_AI_Hero; if (objAiHero == null || !objAiHero.IsValidTarget() || !objAiHero.IsEnemy) { return; } if (!objAiHero.ServerPosition.IsOnScreen() && Vars.Menu["onscreen"].GetValue <MenuBool>().Value) { return; } if (GameObjects.Player.Distance(objAiHero) > Vars.Menu["enable"].GetValue <MenuSliderButton>().SValue) { return; } /// <summary> /// Check for the Not included Champions. /// </summary> if (Vars.NotIncludedChampions.Contains(objAiHero.ChampionName.ToLower())) { return; } switch (args.Slot) { case SpellSlot.R: /// <summary> /// The Ultimate (R). /// </summary> if (Vars.Menu[objAiHero.ChampionName.ToLower()]["ultimate"].GetValue <MenuBool>().Value) { /// <summary> /// Exceptions check. /// </summary> if (Vars.ExChampions.Contains(objAiHero.ChampionName)) { foreach (var s in Vars.RealSpells) { if (!objAiHero.Buffs.Any(b => b.Name.Equals(s))) { return; } if (objAiHero.GetBuffCount(Vars.RealSpells.First(r => r.Equals(args.SData.Name))) > 1) { return; } } } /// <summary> /// Let's delay the alert by 5-10 seconds since we're not Sean Wrona. /// </summary> DelayAction.Add( WeightedRandom.Next(5000, 10000), () => { if (Vars.Menu["nocombo"].GetValue <MenuBool>().Value && Vars.Menu["combokey"].GetValue <MenuKeyBind>().Active) { return; } /// <summary> /// Then we randomize the whole output (Structure/Names/SpellNames) to make it seem totally legit. /// </summary> switch (WeightedRandom.Next(1, 4)) { case 1: Game.Say($"{Vars.GetHumanName(objAiHero.ChampionName.ToLower())} no ulti"); break; case 2: Game.Say($"no ult {Vars.GetHumanName(objAiHero.ChampionName.ToLower())}"); break; case 3: Game.Say($"ult {Vars.GetHumanName(objAiHero.ChampionName.ToLower())}"); break; default: Game.Say($"{Vars.GetHumanName(objAiHero.ChampionName.ToLower())} ult"); break; } }); } break; case SpellSlot.Summoner1: /// <summary> /// The First SummonerSpell. /// </summary> if (Vars.GetHumanSpellName(objAiHero.Spellbook.Spells[4].Name.ToLower()) != null && Vars.Menu[objAiHero.ChampionName.ToLower()]["sum1"].GetValue <MenuBool>().Value) { /// <summary> /// Let's delay the alert by 5-10 seconds since we're not Sean Wrona. /// </summary> DelayAction.Add( WeightedRandom.Next(5000, 10000), () => { if (Vars.Menu["nocombo"].GetValue <MenuBool>().Value && Vars.Menu["combokey"].GetValue <MenuKeyBind>().Active) { return; } /// <summary> /// Then we randomize the whole output (Structure/Names/SpellNames) to make it seem totally legit. /// </summary> switch (WeightedRandom.Next(1, 4)) { case 1: Game.Say( $"no {Vars.GetHumanSpellName(objAiHero.Spellbook.Spells[4].Name.ToLower())} " + $"{Vars.GetHumanName(objAiHero.ChampionName.ToLower())}"); break; case 2: Game.Say( $"{Vars.GetHumanName(objAiHero.ChampionName.ToLower())} no " + $"{Vars.GetHumanSpellName(objAiHero.Spellbook.Spells[4].Name.ToLower())}"); break; case 3: Game.Say( $"{Vars.GetHumanSpellName(objAiHero.Spellbook.Spells[4].Name.ToLower())} " + $"{Vars.GetHumanName(objAiHero.ChampionName.ToLower())}"); break; default: Game.Say( $"{Vars.GetHumanName(objAiHero.ChampionName.ToLower())} " + $"{Vars.GetHumanSpellName(objAiHero.Spellbook.Spells[4].Name.ToLower())}"); break; } }); } break; case SpellSlot.Summoner2: /// <summary> /// The Second SummonerSpell. /// </summary> if (Vars.GetHumanSpellName(objAiHero.Spellbook.Spells[5].Name.ToLower()) != null && Vars.Menu[objAiHero.ChampionName.ToLower()]["sum2"].GetValue <MenuBool>().Value) { /// <summary> /// Let's delay the alert by 5-10 seconds since we're not Sean Wrona. /// </summary> DelayAction.Add( WeightedRandom.Next(5000, 10000), () => { if (Vars.Menu["nocombo"].GetValue <MenuBool>().Value && Vars.Menu["combokey"].GetValue <MenuKeyBind>().Active) { return; } /// <summary> /// Then we randomize the whole output (Structure/Names/SpellNames) to make it seem totally legit. /// </summary> switch (WeightedRandom.Next(1, 4)) { case 1: Game.Say( $"no {Vars.GetHumanSpellName(objAiHero.Spellbook.Spells[5].Name.ToLower())} " + $"{Vars.GetHumanName(objAiHero.ChampionName.ToLower())}"); break; case 2: Game.Say( $"{Vars.GetHumanName(objAiHero.ChampionName.ToLower())} no " + $"{Vars.GetHumanSpellName(objAiHero.Spellbook.Spells[5].Name.ToLower())}"); break; case 3: Game.Say( $"{Vars.GetHumanSpellName(objAiHero.Spellbook.Spells[5].Name.ToLower())} " + $"{Vars.GetHumanName(objAiHero.ChampionName.ToLower())}"); break; default: Game.Say( $"{Vars.GetHumanName(objAiHero.ChampionName.ToLower())} " + $"{Vars.GetHumanSpellName(objAiHero.Spellbook.Spells[5].Name.ToLower())}"); break; } }); } break; } }
public override void Refresh() { base.Refresh(); mBounds = InBounds.GetAllData <CGBounds>(); Path = InPath.GetData <CGPath>(); if (Path != null && Volume == null && UseVolume) { m_UseVolume = false; } List <CGSpot> spots = new List <CGSpot>(); List <GroupSet> endGroups = null; prepare(); if (Path && mBounds.Count > 0 && mGroupsHaveDepth) { float remainingLength = Length; StartDistance = Path.FToDistance(m_Range.Low); float currentDistance = StartDistance; // Fixed start group(s) for (int g = 0; g < FirstRepeating; g++) { addGroupItems(Groups[g], ref spots, ref remainingLength, ref currentDistance); if (remainingLength <= 0) { break; } } // Fixed end group(s) if (GroupCount - LastRepeating - 1 > 0) { endGroups = new List <GroupSet>(); float endDist = 0; for (int g = LastRepeating + 1; g < GroupCount; g++) { endGroups.Add(addGroupItems(Groups[g], ref spots, ref remainingLength, ref endDist, true)); } } // Mid-Groups, either in row or random if (RepeatingOrder == CurvyRepeatingOrderEnum.Row) { int g = FirstRepeating; while (remainingLength > 0) { addGroupItems(Groups[g++], ref spots, ref remainingLength, ref currentDistance); if (g > LastRepeating) { g = FirstRepeating; } } } else { while (remainingLength > 0) { addGroupItems(Groups[mGroupBag.Next()], ref spots, ref remainingLength, ref currentDistance); } } // If we have previously generated endgroups data, shift them now if (endGroups != null) { rebase(ref spots, ref endGroups, currentDistance, remainingLength); } } Count = spots.Count; SimulatedSpots = new CGSpots(spots); if (Simulate) { OutSpots.SetData(new CGSpots()); } else { OutSpots.SetData(SimulatedSpots); } }
private static void Main(string[] args) { #region Inconsequential locals const string id1 = "A"; const string id2 = "B"; const string id3 = "C"; const int weight1 = 10; const int weight2 = 50; const int weight3 = 40; const int numIterations = 100000; var id1Returned = 0; var id2Returned = 0; var id3Returned = 0; #endregion // // Initialize an instance of WeightedRandom with an array of WeightedRandomItems. // var items = new [] { new WeightedRandomItem<string> (id1, weight1), new WeightedRandomItem<string> (id2, weight2), new WeightedRandomItem<string> (id3, weight3) }; var weightedRandom = new WeightedRandom<string>(items); // // Call weightedRandom.Next() a bunch of times to demonstrate that, over time, the // items are returned according to their weighted distribution. // for (int ix = 0; ix < numIterations; ix++) { var id = weightedRandom.Next(); if (id1.Equals(id, StringComparison.OrdinalIgnoreCase)) { id1Returned++; } else if (id2.Equals(id, StringComparison.OrdinalIgnoreCase)) { id2Returned++; } else if (id3.Equals(id, StringComparison.OrdinalIgnoreCase)) { id3Returned++; } else { throw new Exception("An ID was returned from WeightedRandom.Next() that should not have been: " + id); } } // // Display the results. // Console.WriteLine("Number of iterations: {0}", numIterations); Console.WriteLine("\t{0} selected {1} times, or {2}% of the time (weight: {3})", id1, id1Returned, Percentage(id1Returned, numIterations), weight1); Console.WriteLine("\t{0} selected {1} times, or {2}% of the time (weight: {3})", id2, id2Returned, Percentage(id2Returned, numIterations), weight2); Console.WriteLine("\t{0} selected {1} times, or {2}% of the time (weight: {3})", id3, id3Returned, Percentage(id3Returned, numIterations), weight3); Console.WriteLine("Number of selections: {0}", id1Returned + id2Returned + id3Returned); Console.WriteLine("Press ENTER to quit the application"); Console.ReadLine(); }
public static void Execute(EventArgs args) { if (Bools.ShouldUseCleanser() || (Bools.ShouldUseCleanse(ObjectManager.Player) && !Bools.IsSpellAvailable(SpellSlots.Cleanse))) { /// <summary> /// The Dervish Blade. /// </summary> if (ItemData.Dervish_Blade.GetItem().IsReady()) { Utility.DelayAction.Add( Bools.HasZedMark(ObjectManager.Player) ? 1500 : Bools.MustRandomize() ? WeightedRandom.Next(100, 200) : 0, () => { ItemData.Dervish_Blade.GetItem().Cast(); return; } ); } /// <summary> /// The Mercurial Scimitar. /// </summary> if (ItemData.Mercurial_Scimitar.GetItem().IsReady()) { Utility.DelayAction.Add( Bools.HasZedMark(ObjectManager.Player) ? 1500 : Bools.MustRandomize() ? WeightedRandom.Next(100, 200) : 0, () => { ItemData.Mercurial_Scimitar.GetItem().Cast(); return; } ); } /// <summary> /// The Quicksilver Sash. /// </summary> if (ItemData.Quicksilver_Sash.GetItem().IsReady()) { Utility.DelayAction.Add( Bools.HasZedMark(ObjectManager.Player) ? 1500 : Bools.MustRandomize() ? WeightedRandom.Next(100, 200) : 0, () => { ItemData.Quicksilver_Sash.GetItem().Cast(); return; } ); } /// <summary> /// The Mikaels Crucible. /// </summary> if (ItemData.Mikaels_Crucible.GetItem().IsReady()) { foreach (var Ally in HeroManager.Allies .Where( h => h.IsValidTarget(750f, false) && Bools.ShouldUseCleanse(h) && Bools.HasNoProtection(h))) { Utility.DelayAction.Add( Bools.MustRandomize() ? WeightedRandom.Next(100, 200) : 0, () => { ItemData.Mikaels_Crucible.GetItem().Cast(Ally); return; } ); } } } }