Esempio n. 1
0
        /// <summary>
        /// Monster Locations, Generators<para />
        /// This will be called from a separate task from our constructor. Use thread safety when interacting with this landblock.
        /// </summary>
        private void CreateWorldObjects()
        {
            var objects        = DatabaseManager.World.GetCachedInstancesByLandblock(Id.Landblock);
            var shardObjects   = DatabaseManager.Shard.GetStaticObjectsByLandblock(Id.Landblock);
            var factoryObjects = WorldObjectFactory.CreateNewWorldObjects(objects, shardObjects);

            // for mansion linking
            var houses = new List <House>();

            actionQueue.EnqueueAction(new ActionEventDelegate(() =>
            {
                foreach (var fo in factoryObjects)
                {
                    WorldObject parent = null;
                    if (fo.WeenieType == ACE.Entity.Enum.WeenieType.House && fo.HouseType == ACE.Entity.Enum.HouseType.Mansion)
                    {
                        var house = fo as House;
                        houses.Add(house);
                        house.LinkedHouses.Add(houses[0]);

                        if (houses.Count > 1)
                        {
                            houses[0].LinkedHouses.Add(house);
                            parent = houses[0];
                        }
                    }

                    AddWorldObject(fo);
                    fo.ActivateLinks(objects, shardObjects, parent);
                }
            }));
        }
Esempio n. 2
0
        /// <summary>
        /// Monster Locations, Generators<para />
        /// This will be called from a separate task from our constructor. Use thread safety when interacting with this landblock.
        /// </summary>
        private void CreateWorldObjects()
        {
            var objects        = DatabaseManager.World.GetCachedInstancesByLandblock(Id.Landblock);
            var shardObjects   = DatabaseManager.Shard.GetStaticObjectsByLandblock(Id.Landblock);
            var factoryObjects = WorldObjectFactory.CreateNewWorldObjects(objects, shardObjects);

            actionQueue.EnqueueAction(new ActionEventDelegate(() =>
            {
                foreach (var fo in factoryObjects)
                {
                    AddWorldObject(fo);
                    fo.ActivateLinks(objects, shardObjects);
                }
            }));
        }
Esempio n. 3
0
 public void AllStarCombo(Obj_AI_Base target)
 {
     ActionQueue.EnqueueAction(
         ComboQueue,
         () => R.IsReady() && Player.Instance.IsVisible,
         () =>
     {
         R.Cast(target);
         LastRCast = Game.Time;
     },
         () => R.IsReady() && !Player.Instance.IsVisible && !ShadowManager.CanCastR(true));
     ActionQueue.EnqueueAction(
         ComboQueue,
         () => true,
         () => ItemManager.UseAll(target),
         () => true);
     ActionQueue.EnqueueAction(
         ComboQueue,
         () => Misc.IsChecked(ComboMenu, "comboW") && ShadowManager.CanCastW,
         () => ShadowManager.Cast(target.ServerPosition),
         () => target.IsDead || target.IsZombie || !Misc.IsChecked(ComboMenu, "comboW"));
     ActionQueue.EnqueueAction(
         ComboQueue,
         () => Misc.IsChecked(ComboMenu, "comboQ") && Q.IsReady(),
         () => Q.Cast(Q.GetPrediction(target).CastPosition),
         () => target.IsDead || target.IsZombie || !Q.IsReady() || !Misc.IsChecked(ComboMenu, "comboQ"));
     ActionQueue.EnqueueAction(
         ComboQueue,
         () => Misc.IsChecked(ComboMenu, "comboE") && E.IsReady() && Player.Instance.GetAutoAttackRange() >= Player.Instance.Distance(target),
         () => E.Cast(),
         () => target.IsDead || target.IsZombie || !E.IsReady() || !Misc.IsChecked(ComboMenu, "comboE") || !E.IsInRange(target));
 }
Esempio n. 4
0
        /// <summary>
        /// Monster Locations, Generators<para />
        /// This will be called from a separate task from our constructor. Use thread safety when interacting with this landblock.
        /// </summary>
        private void CreateWorldObjects()
        {
            var objects        = DatabaseManager.World.GetCachedInstancesByLandblock(Id.Landblock);
            var shardObjects   = DatabaseManager.Shard.GetStaticObjectsByLandblock(Id.Landblock);
            var factoryObjects = WorldObjectFactory.CreateNewWorldObjects(objects, shardObjects);

            actionQueue.EnqueueAction(new ActionEventDelegate(() =>
            {
                // for mansion linking
                var houses = new List <House>();

                foreach (var fo in factoryObjects)
                {
                    WorldObject parent = null;
                    if (fo.WeenieType == WeenieType.House)
                    {
                        var house = fo as House;
                        Houses.Add(house);

                        if (fo.HouseType == HouseType.Mansion)
                        {
                            houses.Add(house);
                            house.LinkedHouses.Add(houses[0]);

                            if (houses.Count > 1)
                            {
                                houses[0].LinkedHouses.Add(house);
                                parent = houses[0];
                            }
                        }
                    }

                    AddWorldObject(fo);
                    fo.ActivateLinks(objects, shardObjects, parent);

                    if (fo.PhysicsObj != null)
                    {
                        fo.PhysicsObj.Order = 0;
                    }
                }

                CreateWorldObjectsCompleted = true;

                _landblock.SortObjects();
            }));
        }
Esempio n. 5
0
        private void AntiGapcloser_OnEnemyGapcloser(ActiveGapcloser gapcloser)
        {
            if (ObjectManager.Player.Distance(gapcloser.Sender.Position) > e.Range)
            {
                return;
            }

            if (zedMenu.GetParamBool("koreanzed.miscmenu.useeantigc") && e.IsReady())
            {
                e.Cast();
                //Console.WriteLine("antig1");
            }

            if (zedMenu.GetParamBool("koreanzed.miscmenu.usewantigc") && w.IsReady() && antiGapCloserList.Count == 0)
            {
                if (shadows.CanCast)
                {
                    actionQueue.EnqueueAction(
                        antiGapCloserList,
                        () => player.Mana > w.ManaCost && player.HealthPercent - 10 < gapcloser.Sender.HealthPercent,
                        () => shadows.Cast(Vector3.Negate(gapcloser.Sender.Position)),
                        () => true);
                    actionQueue.EnqueueAction(
                        antiGapCloserList,
                        () => w.Instance.ToggleState != 0,
                        () => shadows.Switch(),
                        () => !w.IsReady());
                    Game.OnUpdate += Game_OnUpdate;
                    return;
                }
                else if (!shadows.CanCast && shadows.CanSwitch)
                {
                    int champCount =
                        HeroManager.Enemies.Count(enemy => enemy.Distance(shadows.Instance.Position) < 1500F);

                    if ((player.HealthPercent > 80 && champCount <= 3) ||
                        (player.HealthPercent > 40 && champCount <= 2)
                        )
                    {
                        shadows.Switch();
                        //Console.WriteLine("antig2");
                    }
                }
            }
        }
Esempio n. 6
0
        public static void PlayerEnterWorld(Session session, Character character)
        {
            var offlinePlayer = PlayerManager.GetOfflinePlayer(character.Id);

            if (offlinePlayer == null)
            {
                log.Error($"PlayerEnterWorld requested for character.Id 0x{character.Id:X8} not found in PlayerManager OfflinePlayers.");
                return;
            }

            var start = DateTime.UtcNow;

            DatabaseManager.Shard.GetPossessedBiotasInParallel(character.Id, biotas =>
            {
                log.Debug($"GetPossessedBiotasInParallel for {character.Name} took {(DateTime.UtcNow - start).TotalMilliseconds:N0} ms");

                ActionQueue.EnqueueAction(new ActionEventDelegate(() => DoPlayerEnterWorld(session, character, offlinePlayer.Biota, biotas)));
            });
        }
Esempio n. 7
0
        public static void PlayerEnterWorld(Session session, Character character)
        {
            var start = DateTime.UtcNow;

            DatabaseManager.Shard.GetPlayerBiotas(character.Id, biotas =>
            {
                log.Debug($"GetPlayerBiotas for {character.Name} took {(DateTime.UtcNow - start).TotalMilliseconds:N0} ms");

                playerEnterWorldQueue.EnqueueAction(new ActionEventDelegate(() => DoPlayerEnterWorld(session, character, biotas)));
            });
        }
Esempio n. 8
0
 /// <summary>
 /// Prepare new action to run on this object
 /// </summary>
 public LinkedListNode <IAction> EnqueueAction(IAction action)
 {
     return(actionQueue.EnqueueAction(action));
 }
Esempio n. 9
0
 /// <summary>
 /// Prepare new action to run on this player
 /// </summary>
 public override void EnqueueAction(IAction action)
 {
     actionQueue.EnqueueAction(action);
 }
Esempio n. 10
0
        private void Combo()
        {
            if (actionQueue.ExecuteNextAction(comboQueue))
            {
                return;
            }

            if (q.UseOnCombo && q.IsReady())
            {
                if (CastQ(true))
                {
                    return;
                }
            }

            if (w.UseOnCombo && w.IsReady() &&
                TargetSelector.GetTarget(player.AttackRange + 30F, TargetSelector.DamageType.Physical) != null)
            {
                AIHeroClient target = TargetSelector.GetTarget(player.AttackRange + 30F, TargetSelector.DamageType.Physical);

                if (target != null)
                {
                    actionQueue.EnqueueAction(comboQueue, () => true, () => w.Cast(), () => !w.IsReady());
                    actionQueue.EnqueueAction(comboQueue, () => true, () => olafItems.UseItems(target), () => true);
                    actionQueue.EnqueueAction(
                        comboQueue,
                        () => true,
                        () => EloBuddy.Player.IssueOrder(GameObjectOrder.AttackUnit, target),
                        () =>
                        autoAttackCheck.Status || player.Distance(target) > Orbwalking.GetRealAutoAttackRange(target));
                    return;
                }
            }

            if (e.UseOnCombo && e.IsReady())
            {
                AIHeroClient target = TargetSelector.GetTarget(e.Range, e.DamageType);

                if (target != null)
                {
                    actionQueue.EnqueueAction(
                        comboQueue,
                        () => true,
                        () => EloBuddy.Player.IssueOrder(GameObjectOrder.AttackUnit, target),
                        () => autoAttackCheck.Status);
                    actionQueue.EnqueueAction(comboQueue, () => true, () => olafItems.UseItems(target), () => true);
                    actionQueue.EnqueueAction(comboQueue, () => true, () => CastE(target), () => !e.IsReady());
                    actionQueue.EnqueueAction(
                        comboQueue,
                        () => true,
                        () => EloBuddy.Player.IssueOrder(GameObjectOrder.AttackUnit, target),
                        () =>
                        autoAttackCheck.Status || player.Distance(target) > Orbwalking.GetRealAutoAttackRange(target));
                }
            }
        }
Esempio n. 11
0
        private void Combo()
        {
            if (actionQueue.ExecuteNextAction(comboQueue))
            {
                return;
            }

            if (w.UseOnCombo && w.IsReady() && player.HasBuff("zedr2") && shadows.CanCast)
            {
                Obj_AI_Hero target = TargetSelector.GetTarget(w.Range + e.Range, TargetSelector.DamageType.Physical);

                if (target != null)
                {
                    actionQueue.EnqueueAction(comboQueue,
                                              () => true,
                                              () => shadows.Cast(target),
                                              () => true);
                    return;
                }
            }

            float maxRange = float.MaxValue;

            if (r.UseOnCombo && r.IsReady() && r.Instance.ToggleState == 0)
            {
                Obj_AI_Hero target = null;

                maxRange = Math.Min(maxRange, r.Range);

                if (zedMenu.GetParamBool("koreanzed.combo.ronselected"))
                {
                    if (TargetSelector.SelectedTarget != null && TargetSelector.SelectedTarget.IsValidTarget(maxRange))
                    {
                        target = TargetSelector.SelectedTarget;
                    }
                }
                else
                {
                    List <Obj_AI_Hero> ignoredChamps = zedMenu.GetBlockList(BlockListType.Ultimate);
                    target = TargetSelector.GetTarget(maxRange, r.DamageType, true, ignoredChamps);
                }

                if (target != null)
                {
                    actionQueue.EnqueueAction(
                        comboQueue,
                        () => r.IsReady() && r.Instance.ToggleState == 0,
                        () => r.Cast(target),
                        () => r.Instance.ToggleState != 0);

                    actionQueue.EnqueueAction(comboQueue, () => true, () => zedItems.UseItems(target), () => true);

                    return;
                }
            }

            if (q.UseOnCombo)
            {
                maxRange = Math.Min(maxRange, q.Range);
                Obj_AI_Hero target = TargetSelector.GetTarget(maxRange, q.DamageType);

                PredictionOutput predictionOutput = q.GetPrediction(target);

                if (predictionOutput.Hitchance >= HitChance.VeryHigh)
                {
                    q.Cast(predictionOutput.CastPosition);
                }
            }

            if (e.UseOnCombo)
            {
                maxRange = Math.Min(maxRange, e.Range);
                Obj_AI_Hero target = TargetSelector.GetTarget(maxRange, e.DamageType);
                if (target != null)
                {
                    actionQueue.EnqueueAction(comboQueue,
                                              () => true,
                                              () => zedItems.UseItems(target),
                                              () => true);

                    actionQueue.EnqueueAction(comboQueue,
                                              () => e.IsReady(),
                                              () => e.Cast(),
                                              () => true);
                }
            }

            if (w.UseOnCombo && w.IsReady() && w.Instance.ToggleState != 0)
            {
                List <Obj_AI_Base> shadowList = shadows.GetShadows();

                foreach (Obj_AI_Base objAiBase in shadowList)
                {
                    Obj_AI_Hero target = TargetSelector.GetTarget(2000F, TargetSelector.DamageType.Physical);

                    if (target != null && player.Distance(target) > Orbwalking.GetRealAutoAttackRange(target) + 50F &&
                        objAiBase.Distance(target) < player.Distance(target))
                    {
                        w.Cast();
                    }
                }
            }
        }
Esempio n. 12
0
        public void LaneClear(ActionQueue actionQueue, ActionQueueList laneClearQueue)
        {
            Obj_AI_Base shadow = GetShadows().FirstOrDefault();

            if (!energy.ReadyToLaneClear || shadow == null)
            {
                return;
            }

            if (e.UseOnLaneClear && e.IsReady())
            {
                int extendedWillHit = MinionManager.GetMinions(shadow.Position, e.Range).Count();
                int shortenWillHit  = MinionManager.GetMinions(e.Range).Count;
                int param           = zedMenu.GetParamSlider("koreanzed.laneclearmenu.useeif");

                if (extendedWillHit >= param || shortenWillHit >= param)
                {
                    actionQueue.EnqueueAction(
                        laneClearQueue,
                        () => true,
                        () => e.Cast(),
                        () => !e.IsReady());
                    //Console.WriteLine("shadow lc e 1");
                    return;
                }
            }

            if (q.UseOnLaneClear && q.IsReady())
            {
                int     extendedWillHit      = 0;
                Vector3 extendedFarmLocation = Vector3.Zero;
                foreach (Obj_AI_Base objAiBase in MinionManager.GetMinions(shadow.Position, q.Range))
                {
                    var colisionList = q.GetCollision(
                        shadow.Position.To2D(),
                        new List <Vector2>()
                    {
                        objAiBase.Position.To2D()
                    },
                        w.Delay);

                    if (colisionList.Count > extendedWillHit)
                    {
                        extendedFarmLocation =
                            colisionList.OrderByDescending(c => c.Distance(shadow.Position)).FirstOrDefault().Position;
                        extendedWillHit = colisionList.Count;
                    }
                }

                var shortenFarmLocation = q.GetLineFarmLocation(MinionManager.GetMinions(q.Range));

                int shortenWillHit = shortenFarmLocation.MinionsHit;
                int param          = zedMenu.GetParamSlider("koreanzed.laneclearmenu.useqif");

                if (CanCast && shadow.Position != Vector3.Zero && extendedWillHit >= param)
                {
                    actionQueue.EnqueueAction(
                        laneClearQueue,
                        () => CanCast,
                        () => Cast(shadow.Position),
                        () => !CanCast);
                    //Console.WriteLine("shadow lc w 2");
                    actionQueue.EnqueueAction(
                        laneClearQueue,
                        () => w.Instance.ToggleState != 0,
                        () => q.Cast(extendedFarmLocation),
                        () => !q.IsReady());
                    //Console.WriteLine("shadow lc q 3");
                    return;
                }
                else if (shortenWillHit >= param)
                {
                    actionQueue.EnqueueAction(
                        laneClearQueue,
                        () => q.IsReady(),
                        () => q.Cast(shortenFarmLocation.Position),
                        () => !q.IsReady());
                    //Console.WriteLine("shadow lc q 4");
                    return;
                }
            }
        }
Esempio n. 13
0
 /// <summary>
 /// Prepare new action to run on this object
 /// </summary>
 public void EnqueueAction(IAction action)
 {
     actionQueue.EnqueueAction(action);
 }
Esempio n. 14
0
        private void Combo()
        {
            if (actionQueue.ExecuteNextAction(comboQueue))
            {
                return;
            }

            AIHeroClient itemsTarget = TargetSelector.GetTarget(player.AttackRange, TargetSelector.DamageType.Physical);

            if (itemsTarget != null)
            {
                zedItems.UseItems(itemsTarget);
            }

            shadows.Combo();

            if (w.UseOnCombo && shadows.CanCast && player.HasBuff("ZedR2"))
            {
                AIHeroClient target = TargetSelector.GetTarget(w.Range + e.Range, TargetSelector.DamageType.Physical);

                if (target != null)
                {
                    actionQueue.EnqueueAction(comboQueue,
                                              () => true,
                                              () => shadows.Cast(w.GetPrediction(target).CastPosition),
                                              () => true);
                    return;
                }
            }

            float maxRange = float.MaxValue;

            if (r.UseOnCombo && r.IsReady() && r.Instance.ToggleState == 0)
            {
                AIHeroClient target = null;

                maxRange = Math.Min(maxRange, r.Range);

                if (zedMenu.GetParamBool("koreanzed.combo.ronselected"))
                {
                    if (TargetSelector.SelectedTarget != null && TargetSelector.SelectedTarget.IsValidTarget(maxRange))
                    {
                        target = TargetSelector.SelectedTarget;
                    }
                }
                else
                {
                    List <AIHeroClient> ignoredChamps = zedMenu.GetBlockList(BlockListType.Ultimate);
                    target = TargetSelector.GetTarget(maxRange, r.DamageType, true, ignoredChamps);
                }

                if (target != null)
                {
                    switch (zedMenu.GetCombo())
                    {
                    case ComboType.AllStar:
                        AllStarCombo(target);
                        break;

                    case ComboType.TheLine:
                        TheLineCombo(target);
                        break;
                    }
                    return;
                }
            }
            else if (w.UseOnCombo && shadows.CanCast && (!r.UseOnCombo || (r.UseOnCombo && !r.IsReady())) &&
                     (player.Mana > w.ManaCost + (q.UseOnCombo && q.IsReady() ? q.ManaCost : 0F) + (e.UseOnCombo && e.IsReady() ? e.ManaCost : 0F)))
            {
                maxRange = Math.Min(maxRange, w.Range + e.Range);
                AIHeroClient target = TargetSelector.GetTarget(maxRange, TargetSelector.DamageType.Physical);
                if (target != null)
                {
                    actionQueue.EnqueueAction(
                        comboQueue,
                        () => shadows.CanCast,
                        () => shadows.Cast(w.GetPrediction(target).CastPosition),
                        () => !shadows.CanCast);
                    actionQueue.EnqueueAction(
                        comboQueue,
                        () => w.Instance.ToggleState != 0,
                        () => shadows.Combo(),
                        () => true);
                    actionQueue.EnqueueAction(
                        comboQueue,
                        () => shadows.CanSwitch && target.Distance(shadows.Instance.Position) <= player.AttackRange,
                        () => shadows.Switch(),
                        () => !shadows.CanSwitch || target.Distance(shadows.Instance.Position) > player.AttackRange || !w.IsReady());
                    actionQueue.EnqueueAction(
                        comboQueue,
                        () => player.Distance(target) <= Orbwalking.GetRealAutoAttackRange(target),
                        () => EloBuddy.Player.IssueOrder(GameObjectOrder.AttackUnit, target),
                        () => target.IsDead || target.IsZombie || player.Distance(target) > Orbwalking.GetRealAutoAttackRange(target) || checkAutoAttack.Status);
                    return;
                }
            }

            if (q.UseOnCombo && q.IsReady() && player.Mana > q.ManaCost)
            {
                maxRange = Math.Min(maxRange, q.Range);
                AIHeroClient target = TargetSelector.GetTarget(maxRange, q.DamageType);

                PredictionOutput predictionOutput = q.GetPrediction(target);

                if (predictionOutput.Hitchance >= HitChance.Medium)
                {
                    q.Cast(predictionOutput.CastPosition);
                }
            }

            if (e.UseOnCombo && e.IsReady() && player.Mana > e.ManaCost)
            {
                maxRange = Math.Min(maxRange, e.Range);
                AIHeroClient target = TargetSelector.GetTarget(maxRange, e.DamageType);
                if (target != null)
                {
                    actionQueue.EnqueueAction(comboQueue,
                                              () => e.IsReady(),
                                              () => e.Cast(),
                                              () => true);
                    return;
                }
            }

            if (w.UseOnCombo && w.IsReady() && shadows.CanSwitch)
            {
                List <Obj_AI_Base> shadowList = shadows.GetShadows();

                foreach (Obj_AI_Base objAiBase in shadowList)
                {
                    AIHeroClient target = TargetSelector.GetTarget(2000F, TargetSelector.DamageType.Physical);

                    if (target != null && player.Distance(target) > Orbwalking.GetRealAutoAttackRange(target) + 50F &&
                        objAiBase.Distance(target) < player.Distance(target))
                    {
                        shadows.Switch();
                    }
                }
            }
        }