コード例 #1
0
        // Token: 0x06000162 RID: 354 RVA: 0x0000C888 File Offset: 0x0000AA88
        public override bool ShouldConditionCast(TargetManager targetManager, IComboModeMenu menu, List <UsableAbility> usableAbilities)
        {
            Unit9         target        = targetManager.Target;
            UsableAbility usableAbility = usableAbilities.Find((UsableAbility x) => x.Ability.Id == AbilityId.windrunner_powershot);

            return(usableAbility == null || (float)usableAbility.Ability.GetDamage(target) <= target.Health);
        }
コード例 #2
0
ファイル: IcarusDive.cs プロジェクト: ihatevim/Divine.Plugins
        public override bool ShouldConditionCast(TargetManager targetManager, IComboModeMenu menu, List <UsableAbility> usableAbilities)
        {
            var nova = usableAbilities.Find(x => x.Ability.Id == AbilityId.phoenix_supernova);

            if (nova != null && this.Owner.HasAghanimsScepter)
            {
                var mouse = GameManager.MousePosition;
                var ally  = targetManager.AllyHeroes
                            .Where(x => !x.Equals(this.Owner) && x.HealthPercentage < 35 && x.Distance(this.Owner) < this.Ability.CastRange)
                            .OrderBy(x => x.Distance(mouse))
                            .FirstOrDefault();

                if (ally != null)
                {
                    this.CastPosition = ally.Position;
                    return(true);
                }
            }

            this.CastPosition = Vector3.Zero;

            var ray = this.Owner.Abilities.FirstOrDefault(x => x.Id == AbilityId.phoenix_sun_ray) as BaseSunRay;

            if (ray?.IsSunRayActive == true)
            {
                return(false);
            }

            return(true);
        }
コード例 #3
0
ファイル: BlinkDaggerAOE.cs プロジェクト: vana41203/O9K
        public override bool ShouldConditionCast(TargetManager targetManager, IComboModeMenu menu, List <UsableAbility> usableAbilities)
        {
            var ability = usableAbilities.FirstOrDefault();

            if (ability == null)
            {
                return(false);
            }

            var input = ability.Ability.GetPredictionInput(targetManager.Target, targetManager.EnemyHeroes);

            input.Range        += this.Ability.CastRange;
            input.CastRange     = this.Ability.CastRange;
            input.SkillShotType = SkillShotType.Circle;
            var output = ability.Ability.GetPredictionOutput(input);

            if (output.HitChance < HitChance.Low || output.TargetPosition.Distance2D(output.CastPosition) > ability.Ability.Radius * 0.9f)
            {
                return(false);
            }

            this.blinkPosition = output.CastPosition;
            if (this.Owner.Distance(this.blinkPosition) > this.Ability.CastRange)
            {
                return(false);
            }

            return(true);
        }
コード例 #4
0
        // Token: 0x06000445 RID: 1093 RVA: 0x00017400 File Offset: 0x00015600
        public override bool CanHit(TargetManager targetManager, IComboModeMenu comboMenu)
        {
            Unit9            target          = targetManager.Target;
            PredictionInput9 predictionInput = base.Ability.GetPredictionInput(target, null);

            if (base.Ability.GetPredictionOutput(predictionInput).HitChance <= 0)
            {
                return(false);
            }
            if (target.Distance(base.Owner) < 300f || target.GetImmobilityDuration() > 0f)
            {
                return(true);
            }
            if (!target.Equals(this.lastTarget))
            {
                this.lastTarget   = target;
                this.rotationTime = Game.RawGameTime;
                this.rotation     = target.BaseUnit.NetworkRotationRad;
                return(false);
            }
            if ((double)Math.Abs(this.rotation - target.BaseUnit.NetworkRotationRad) > 0.1)
            {
                this.rotationTime = Game.RawGameTime;
                this.rotation     = target.BaseUnit.NetworkRotationRad;
                return(false);
            }
            MeatHookMenu abilitySettingsMenu = comboMenu.GetAbilitySettingsMenu <MeatHookMenu>(this);

            return(this.rotationTime + abilitySettingsMenu.Delay / 1000f <= Game.RawGameTime);
        }
コード例 #5
0
        public override bool ShouldConditionCast(TargetManager targetManager, IComboModeMenu menu, List <UsableAbility> usableAbilities)
        {
            if (!(usableAbilities.Find(x => x.Ability.Id == AbilityId.magnataur_reverse_polarity) is ReversePolarity polarity))
            {
                return(false);
            }

            var input = polarity.Ability.GetPredictionInput(targetManager.Target, targetManager.EnemyHeroes);

            input.Range        += this.Ability.CastRange;
            input.CastRange     = this.Ability.CastRange;
            input.SkillShotType = SkillShotType.Circle;
            var output = polarity.Ability.GetPredictionOutput(input);

            if (output.HitChance < HitChance.Low || output.AoeTargetsHit.Count < polarity.TargetsToHit(menu))
            {
                return(false);
            }

            this.blinkPosition = output.CastPosition;
            if (this.Owner.Distance(this.blinkPosition) > this.Ability.CastRange)
            {
                return(false);
            }

            return(true);
        }
コード例 #6
0
        public override bool ShouldConditionCast(TargetManager targetManager, IComboModeMenu menu, List <UsableAbility> usableAbilities)
        {
            if (!base.ShouldConditionCast(targetManager, menu, usableAbilities))
            {
                return(false);
            }

            var ally = EntityManager9.Heroes
                       .Where(x => !x.Equals(this.Owner) && x.IsAlly(this.Owner) && x.IsAlive && x.Distance(this.Owner) < 1500)
                       .OrderBy(x => x.Distance(this.Owner))
                       .FirstOrDefault();
            var allyPosition = ally == null ? EntityManager9.AllyFountain : ally.Position;

            if (this.Owner.Position.AngleBetween(targetManager.Target.Position, allyPosition) > 30)
            {
                if (this.Owner.Move(targetManager.Target.Position.Extend2D(allyPosition, -100)))
                {
                    this.OrbwalkSleeper.Sleep(0.1f);
                    this.Sleeper.Sleep(0.1f);
                    return(false);
                }

                return(false);
            }

            return(true);
        }
コード例 #7
0
        // Token: 0x060002A5 RID: 677 RVA: 0x00010E94 File Offset: 0x0000F094
        public override bool ShouldConditionCast(TargetManager targetManager, IComboModeMenu menu, List <UsableAbility> usableAbilities)
        {
            Unit9 target = targetManager.Target;

            if (base.Owner.Distance(target) < 600f)
            {
                return(false);
            }
            if (usableAbilities.FirstOrDefault((UsableAbility x) => x.Ability.Id == AbilityId.shredder_timber_chain) == null)
            {
                return(true);
            }
            this.blinkPosition = target.Position;
            UsableAbility usableAbility = usableAbilities.FirstOrDefault((UsableAbility x) => x.Ability.Id == AbilityId.shredder_whirling_death);

            if (usableAbility != null)
            {
                PredictionInput9 predictionInput = usableAbility.Ability.GetPredictionInput(target, targetManager.EnemyHeroes);
                predictionInput.Range        += base.Ability.CastRange;
                predictionInput.CastRange     = base.Ability.CastRange;
                predictionInput.SkillShotType = 4;
                PredictionOutput9 predictionOutput = usableAbility.Ability.GetPredictionOutput(predictionInput);
                if (predictionOutput.HitChance < 1)
                {
                    return(false);
                }
                this.blinkPosition = predictionOutput.CastPosition;
            }
            return(base.Owner.Distance(this.blinkPosition) < base.Ability.CastRange);
        }
コード例 #8
0
        public override bool ShouldConditionCast(TargetManager targetManager, IComboModeMenu menu, List <UsableAbility> usableAbilities)
        {
            if (this.Owner.Distance(targetManager.Target) < 500)
            {
                return(true);
            }

            var skewer = usableAbilities.Find(x => x.Ability.Id == AbilityId.magnataur_skewer);

            if (skewer != null)
            {
                var polarity = usableAbilities.Find(x => x.Ability.Id == AbilityId.magnataur_reverse_polarity);
                if (polarity != null)
                {
                    return(false);
                }
            }

            var blink = usableAbilities.Find(x => x.Ability.Id == AbilityId.item_blink || x.Ability.Id == AbilityId.item_force_staff);

            if (blink == null || this.Ability.GetDamage(targetManager.Target) > targetManager.Target.Health)
            {
                return(true);
            }

            if (this.Owner.Distance(targetManager.Target) > 800)
            {
                return(false);
            }

            return(true);
        }
コード例 #9
0
        public override bool ShouldConditionCast(TargetManager targetManager, IComboModeMenu menu, List <UsableAbility> usableAbilities)
        {
            var field = (FreezingField)usableAbilities.Find(x => x.Ability.Id == AbilityId.crystal_maiden_freezing_field);

            if (field == null)
            {
                return(false);
            }

            var input = field.Ability.GetPredictionInput(targetManager.Target, targetManager.EnemyHeroes);

            input.Range        += this.Ability.CastRange;
            input.CastRange     = this.Ability.CastRange;
            input.SkillShotType = SkillShotType.Circle;
            input.Radius       *= 0.7f;
            var output = field.Ability.GetPredictionOutput(input);

            if (output.HitChance < HitChance.Low || output.AoeTargetsHit.Count < field.TargetsToHit(menu))
            {
                return(false);
            }

            this.blinkPosition = output.CastPosition;
            if (this.Owner.Distance(this.blinkPosition) > this.Ability.CastRange)
            {
                return(false);
            }

            return(true);
        }
コード例 #10
0
        public override bool ShouldConditionCast(TargetManager targetManager, IComboModeMenu menu, List <UsableAbility> usableAbilities)
        {
            var blackHole = (BlackHole)usableAbilities.Find(x => x.Ability.Id == AbilityId.enigma_black_hole);

            if (blackHole == null)
            {
                return(false);
            }

            var input = blackHole.Ability.GetPredictionInput(targetManager.Target, EntityManager9.EnemyHeroes);

            input.CastRange += this.Ability.CastRange;
            input.Range     += this.Ability.CastRange;
            var output = blackHole.Ability.GetPredictionOutput(input);

            if (output.HitChance < HitChance.Low || output.AoeTargetsHit.Count < blackHole.TargetsToHit(menu))
            {
                return(false);
            }

            var range = Math.Min(this.Ability.CastRange, this.Owner.Distance(output.CastPosition) - 200);

            this.blinkPosition = this.Owner.Position.Extend2D(output.CastPosition, range);

            if (this.Owner.Distance(this.blinkPosition) > this.Ability.CastRange)
            {
                return(false);
            }

            return(true);
        }
コード例 #11
0
        // Token: 0x060007B5 RID: 1973 RVA: 0x00023558 File Offset: 0x00021758
        public override bool ShouldConditionCast(TargetManager targetManager, IComboModeMenu menu, List <UsableAbility> usableAbilities)
        {
            Chronosphere chronosphere = (Chronosphere)usableAbilities.Find((UsableAbility x) => x.Ability.Id == AbilityId.faceless_void_chronosphere);

            if (chronosphere == null)
            {
                if (base.Owner.Distance(targetManager.Target) < 300f)
                {
                    return(false);
                }
                this.blinkPosition = Vector3.Zero;
                return(true);
            }
            else
            {
                PredictionInput9 predictionInput = chronosphere.Ability.GetPredictionInput(targetManager.Target, EntityManager9.EnemyHeroes);
                predictionInput.CastRange += base.Ability.CastRange;
                predictionInput.Range     += base.Ability.CastRange;
                PredictionOutput9 predictionOutput = chronosphere.Ability.GetPredictionOutput(predictionInput);
                if (predictionOutput.HitChance < 1 || predictionOutput.AoeTargetsHit.Count < chronosphere.TargetsToHit(menu))
                {
                    return(false);
                }
                float num = Math.Min(base.Ability.CastRange, base.Owner.Distance(predictionOutput.CastPosition) - 200f);
                this.blinkPosition = Vector3Extensions.Extend2D(base.Owner.Position, predictionOutput.CastPosition, num);
                return(base.Owner.Distance(this.blinkPosition) <= base.Ability.CastRange);
            }
        }
コード例 #12
0
        public override bool ShouldConditionCast(TargetManager targetManager, IComboModeMenu menu, List <UsableAbility> usableAbilities)
        {
            var totem = usableAbilities.Find(x => x.Ability.Id == AbilityId.earthshaker_enchant_totem);

            if (totem != null)
            {
                var inputTotem = totem.Ability.GetPredictionInput(targetManager.Target, targetManager.EnemyHeroes);
                inputTotem.Range        += this.Ability.CastRange;
                inputTotem.CastRange     = this.Ability.CastRange;
                inputTotem.SkillShotType = SkillShotType.Circle;

                if (this.Owner.HasModifier("modifier_earthshaker_enchant_totem"))
                {
                    inputTotem.AreaOfEffect = false;
                    inputTotem.Delay       -= 0.1f;
                }

                var outputTotem = totem.Ability.GetPredictionOutput(inputTotem);
                if (outputTotem.HitChance < HitChance.Low)
                {
                    return(false);
                }

                this.blinkPosition = outputTotem.CastPosition;
                if (this.Owner.Distance(this.blinkPosition) > this.Ability.CastRange ||
                    this.Owner.Distance(this.blinkPosition) < totem.Ability.Radius - 50)
                {
                    return(false);
                }

                return(true);
            }

            if (!(usableAbilities.Find(x => x.Ability.Id == AbilityId.earthshaker_echo_slam) is EchoSlam echo))
            {
                return(false);
            }

            var input = echo.Ability.GetPredictionInput(targetManager.Target, targetManager.EnemyHeroes);

            input.Range        += this.Ability.CastRange;
            input.CastRange     = this.Ability.CastRange;
            input.SkillShotType = SkillShotType.Circle;
            var output = echo.Ability.GetPredictionOutput(input);

            if (output.HitChance < HitChance.Low || output.AoeTargetsHit.Count < echo.TargetsToHit(menu))
            {
                return(false);
            }

            this.blinkPosition = output.CastPosition;
            if (this.Owner.Distance(this.blinkPosition) > this.Ability.CastRange ||
                output.AoeTargetsHit.Count == 1 && this.Owner.Distance(this.blinkPosition) < 350)
            {
                return(false);
            }

            return(true);
        }
コード例 #13
0
        // Token: 0x060003B1 RID: 945 RVA: 0x00014E08 File Offset: 0x00013008
        public override bool ShouldConditionCast(TargetManager targetManager, IComboModeMenu menu, List <UsableAbility> usableAbilities)
        {
            UsableAbility usableAbility  = usableAbilities.Find((UsableAbility x) => x.Ability.Id == AbilityId.item_blink);
            UsableAbility usableAbility2 = usableAbilities.Find((UsableAbility x) => x.Ability.Id == AbilityId.sandking_burrowstrike);
            float         num            = ((usableAbility2 != null) ? usableAbility2.Ability.CastRange : 0f) + ((usableAbility != null) ? usableAbility.Ability.CastRange : 0f) + base.Ability.Radius;

            return(base.Owner.Distance(targetManager.Target) < num);
        }
コード例 #14
0
ファイル: AbilityHelper.cs プロジェクト: vana41203/O9K
 public AbilityHelper(TargetManager targetManager, IComboModeMenu comboModeMenu, ControllableUnit controllableUnit)
 {
     this.unit           = controllableUnit.Owner;
     this.TargetManager  = targetManager;
     this.comboSleeper   = controllableUnit.ComboSleeper;
     this.orbwalkSleeper = controllableUnit.OrbwalkSleeper;
     this.menu           = comboModeMenu;
 }
コード例 #15
0
        public override bool CanHit(TargetManager targetManager, IComboModeMenu comboMenu)
        {
            if (this.Owner.HasModifier("modifier_earth_spirit_rolling_boulder_caster"))
            {
                return(false);
            }

            return(true);
        }
コード例 #16
0
        public override bool CanHit(TargetManager targetManager, IComboModeMenu comboMenu)
        {
            if (this.Owner.Distance(targetManager.Target) > 900)
            {
                return(false);
            }

            return(true);
        }
コード例 #17
0
        // Token: 0x06000A03 RID: 2563 RVA: 0x0002BB30 File Offset: 0x00029D30
        public bool CanBeCasted(UsableAbility ability, bool canHit = true, bool shouldCast = true, bool channelingCheck = true, bool canBeCastedCheck = true)
        {
            if (ability == null || !ability.Ability.IsValid)
            {
                return(false);
            }
            IComboModeMenu comboModeMenu = this.menu;

            return((comboModeMenu == null || comboModeMenu.IsAbilityEnabled(ability.Ability)) && (!canBeCastedCheck || ability.CanBeCasted(this.TargetManager, channelingCheck, this.menu)) && (!canHit || ability.CanHit(this.TargetManager, this.menu)) && (!shouldCast || ability.ShouldCast(this.TargetManager)));
        }
コード例 #18
0
        // Token: 0x060004AA RID: 1194 RVA: 0x00018A90 File Offset: 0x00016C90
        public override bool ShouldConditionCast(TargetManager targetManager, IComboModeMenu menu, List <UsableAbility> usableAbilities)
        {
            UsableAbility usableAbility = usableAbilities.Find((UsableAbility x) => x.Ability.Id == AbilityId.item_blink);

            if (usableAbility == null)
            {
                return(base.Owner.Distance(targetManager.Target) < 600f);
            }
            return(base.Owner.Distance(targetManager.Target) < usableAbility.Ability.CastRange + 200f);
        }
コード例 #19
0
        public override bool CanHit(TargetManager targetManager, IComboModeMenu comboMenu)
        {
            var remnants = EntityManager9.Units.Any(
                x => x.IsAlly(this.Owner) && x.Name == "npc_dota_ember_spirit_remnant" &&
                x.Distance(
                    targetManager.Target.GetPredictedPosition(this.Owner.Distance(x) / this.Ability.Speed))
                < this.Ability.Radius);

            return(remnants);
        }
コード例 #20
0
        // Token: 0x060006C2 RID: 1730 RVA: 0x000209F0 File Offset: 0x0001EBF0
        public override bool ShouldConditionCast(TargetManager targetManager, IComboModeMenu menu, List <UsableAbility> usableAbilities)
        {
            if (usableAbilities.Find((UsableAbility x) => x.Ability.Id == AbilityId.dark_willow_cursed_crown) != null)
            {
                return(true);
            }
            Modifier modifier = targetManager.Target.GetModifier("modifier_dark_willow_cursed_crown");

            return(!(modifier == null) && modifier.RemainingTime >= base.Ability.Duration + 0.1f);
        }
コード例 #21
0
        public override bool ShouldConditionCast(TargetManager targetManager, IComboModeMenu menu, List <UsableAbility> usableAbilities)
        {
            if (!(usableAbilities.FirstOrDefault(x => x.Ability.Id == AbilityId.windrunner_shackleshot) is Shackleshot shackle))
            {
                return(false);
            }

            this.blinkPosition = shackle.GetBlinkPosition(targetManager, this.Ability.CastRange);
            return(!this.blinkPosition.IsZero);
        }
コード例 #22
0
        // Token: 0x06000301 RID: 769 RVA: 0x00012430 File Offset: 0x00010630
        public override bool CanHit(TargetManager targetManager, IComboModeMenu comboMenu)
        {
            BallLightningMenu abilitySettingsMenu = comboMenu.GetAbilitySettingsMenu <BallLightningMenu>(this);

            if (abilitySettingsMenu != null)
            {
                this.menuMaxCastRange = abilitySettingsMenu.MaxCastRange;
                this.maxDamage        = abilitySettingsMenu.MaxDamageCombo;
            }
            return(true);
        }
コード例 #23
0
ファイル: Dismember.cs プロジェクト: vana41203/O9K
        public override bool CanHit(TargetManager targetManager, IComboModeMenu comboMenu)
        {
            var target = targetManager.Target;

            if (targetManager.Target.HasModifier("modifier_pudge_meat_hook") && target.Distance(this.Owner) < 500)
            {
                return(true);
            }

            return(base.CanHit(targetManager, comboMenu));
        }
コード例 #24
0
        public override bool ShouldConditionCast(TargetManager targetManager, IComboModeMenu menu, List <UsableAbility> usableAbilities)
        {
            var dismember = usableAbilities.Find(x => x.Ability.Id == AbilityId.pudge_dismember);

            if (dismember == null)
            {
                return(false);
            }

            return(true);
        }
コード例 #25
0
        // Token: 0x0600015B RID: 347 RVA: 0x0000C7BC File Offset: 0x0000A9BC
        public override bool ShouldConditionCast(TargetManager targetManager, IComboModeMenu menu, List <UsableAbility> usableAbilities)
        {
            Shackleshot shackleshot;

            if ((shackleshot = (usableAbilities.FirstOrDefault((UsableAbility x) => x.Ability.Id == AbilityId.windrunner_shackleshot) as Shackleshot)) == null)
            {
                return(false);
            }
            this.blinkPosition = shackleshot.GetBlinkPosition(targetManager, base.Ability.CastRange);
            return(!this.blinkPosition.IsZero);
        }
コード例 #26
0
ファイル: RollingThunder.cs プロジェクト: vana41203/O9K
        public override bool ShouldConditionCast(TargetManager targetManager, IComboModeMenu menu, List <UsableAbility> usableAbilities)
        {
            var blink = usableAbilities.Find(x => x.Ability.Id == AbilityId.item_blink);

            if (blink == null)
            {
                return(this.Owner.Distance(targetManager.Target) < 600);
            }

            return(this.Owner.Distance(targetManager.Target) < blink.Ability.CastRange + 200);
        }
コード例 #27
0
ファイル: Ghostship.cs プロジェクト: vana41203/O9K
        public override bool CanHit(TargetManager targetManager, IComboModeMenu comboMenu)
        {
            var menu = comboMenu.GetAbilitySettingsMenu <XMarkOnlyMenu>(this);

            if (menu.XMarkOnly)
            {
                return(false);
            }

            return(base.CanHit(targetManager, comboMenu));
        }
コード例 #28
0
        public override bool CanHit(TargetManager targetManager, IComboModeMenu comboMenu)
        {
            var menu = comboMenu.GetAbilitySettingsMenu <IceBlastMenu>(this);

            if (menu.StunOnly && targetManager.Target.GetImmobilityDuration() < 1.5f)
            {
                return(false);
            }

            return(base.CanHit(targetManager, comboMenu));
        }
コード例 #29
0
        // Token: 0x06000343 RID: 835 RVA: 0x0001317C File Offset: 0x0001137C
        public override bool CanHit(TargetManager targetManager, IComboModeMenu comboMenu)
        {
            Unit9 target = targetManager.Target;

            if (target.IsMagicImmune)
            {
                return(false);
            }
            PredictionInput9 predictionInput = base.Ability.GetPredictionInput(target, null);

            return(base.Ability.GetPredictionOutput(predictionInput).HitChance > 0);
        }
コード例 #30
0
 // Token: 0x0600099B RID: 2459 RVA: 0x00029E40 File Offset: 0x00028040
 public override bool ShouldConditionCast(TargetManager targetManager, IComboModeMenu menu, List <UsableAbility> usableAbilities)
 {
     if (targetManager.Target.IsRuptured)
     {
         return(true);
     }
     if (usableAbilities.Find((UsableAbility x) => x.Ability.Id == AbilityId.bloodseeker_rupture) != null && targetManager.Target.GetImmobilityDuration() <= 0f)
     {
         return(false);
     }
     return(usableAbilities.Find((UsableAbility x) => x.Ability.Id == AbilityId.item_cyclone) == null);
 }