Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
             * }
             */
        }
Ejemplo n.º 3
0
        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;
        }
Ejemplo n.º 4
0
        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;
                        }
                    }
                }
            }
        }
Ejemplo n.º 5
0
        /// <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);
                        }
                            );
                    }
                }
            }
        }
Ejemplo n.º 6
0
        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;
        }
Ejemplo n.º 7
0
        /// <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();
                    }
                        );
                }
            }
        }
Ejemplo n.º 8
0
        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;
        }
Ejemplo n.º 9
0
        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;
        }
Ejemplo n.º 10
0
        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;
        }
Ejemplo n.º 11
0
        /// <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);
            }
        }
Ejemplo n.º 12
0
 internal int getRandomItemINTERNAL()
 {
     return(mItemBag.Next());
 }
Ejemplo n.º 13
0
        /// <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;
            }
        }
Ejemplo n.º 14
0
        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);
            }
        }
Ejemplo n.º 15
0
        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();
        }
Ejemplo n.º 16
0
        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;
                        }
                            );
                    }
                }
            }
        }