Beispiel #1
0
 public static bool IsCasted(this Spell.CastStates state)
 {
     return(state == Spell.CastStates.SuccessfullyCasted);
 }
Beispiel #2
0
        static void ShootQ(bool useE = true)
        {
            if (!Q.IsReady())
            {
                return;
            }

            Obj_AI_Base pixTarget = null;

            if (PixManager.Pix != null)
            {
                pixTarget = TargetSelector.GetTarget(PixManager.Pix, Q.Range, TargetSelector.DamageType.Magical);
            }

            Obj_AI_Base luluTarget = TargetSelector.GetTarget(Q.Range, TargetSelector.DamageType.Magical);

            var pixTargetEffectiveHealth = pixTarget != null ? pixTarget.Health * (1 + pixTarget.SpellBlock / 100f)  :
                                           float.MaxValue;
            var luluTargetEffectiveHealth = luluTarget != null ? luluTarget.Health * (1 + luluTarget.SpellBlock / 100f) :
                                            float.MaxValue;

            var target = pixTargetEffectiveHealth * 1.2f > luluTargetEffectiveHealth ? luluTarget : pixTarget;
            var flag   = false;

            Spell.CastStates qCastState = Spell.CastStates.OutOfRange;
            if (target != null)
            {
                var distanceToTargetFromPlayer = Player.Distance(target, true);
                var distanceToTargetFromPix    = PixManager.Pix != null?PixManager.Pix.Distance(target, true) : float.MaxValue;

                var source = PixManager.Pix == null ? Player : (distanceToTargetFromPix < distanceToTargetFromPlayer ? PixManager.Pix : Player);
                Q.From           = source.ServerPosition;
                Q.RangeCheckFrom = source.ServerPosition;
                if (!useE || !E.IsReady() || Q.From.Distance(target.ServerPosition) < Q.Range - 100)
                {
                    qCastState = Q.Cast(target);
                }
                flag = true;
            }

            if (qCastState == Spell.CastStates.OutOfRange)   //or outofrange
            {
                if (useE && E.IsReady())
                {
                    var eqTarget = TargetSelector.GetTarget(Q.Range + E.Range, TargetSelector.DamageType.Magical);
                    if (eqTarget != null)
                    {
                        var eTarget =
                            ObjectManager.Get <Obj_AI_Base>()
                            .Where(t => t.IsValidTarget(E.Range) && t.Distance(eqTarget, true) < Q.RangeSqr && !E.IsKillable(eqTarget)).MinOrDefault(t => t.Distance(eqTarget, true));
                        if (eTarget != null)
                        {
                            E.Cast(eTarget);
                            return;
                        }
                    }
                }

                if (flag)
                {
                    qCastState = Q.Cast(target);
                }
            }
        }
        public static void PixEQCombo(bool useE = true)
        {
            Obj_AI_Base pixTarget = null;

            if (pix != null)
            {
                pixTarget = TargetSelector.GetTarget(pix, _q.Range, TargetSelector.DamageType.Magical);
            }

            Obj_AI_Base luluTarget = TargetSelector.GetTarget(_q.Range, TargetSelector.DamageType.Magical);

            var pixTargetEffectiveHealth  = pixTarget != null ? pixTarget.Health * (1 + pixTarget.SpellBlock / 100f) : float.MaxValue;
            var luluTargetEffectiveHealth = luluTarget != null ? luluTarget.Health * (1 + luluTarget.SpellBlock / 100f) : float.MaxValue;
            var target = pixTargetEffectiveHealth * 1.2f > luluTargetEffectiveHealth ? luluTarget : pixTarget;          // HP를 가지고 타겟을 정하나?

            var bflag = false;

            Spell.CastStates qCastState = Spell.CastStates.OutOfRange;

            // 일단 Q 사거리내에 있는 적챔피언을 검색한 후...
            if (target != null)
            {
                var distanceToTargetFromPlayer = Player.Distance(target, true);
                var distanceToTargetFromPix    = pix != null?pix.Distance(target, true) : float.MaxValue;

                var source = pix == null ? Player : (distanceToTargetFromPix < distanceToTargetFromPlayer ? pix : Player);      // Pix 타겟에 더 가까우면

                _q.From           = source.ServerPosition;
                _q.RangeCheckFrom = source.ServerPosition;

                // E가 준비되지 않거나, 사거리내 있으면... 일단 시전
                if (!useE || !_e.IsReady() || _q.From.Distance(target.ServerPosition) < _q.Range - 100)
                {
                    qCastState = _q.Cast(target);
                }
                bflag = true;
            }

            // 일단 했으나, 결과가 사거리 밖이라는 표식이 뜨면... 혹은 타겟이 Null 이면
            if (qCastState == Spell.CastStates.OutOfRange)
            {
                if (useE && _e.IsReady())
                {
                    var eqTarget = TargetSelector.GetTarget(_q.Range + _e.Range, TargetSelector.DamageType.Magical);
                    if (eqTarget != null)
                    {
                        // E Range 안에 있는 적에게 일단 E Cast
                        var eTarget =
                            ObjectManager.Get <Obj_AI_Base>()
                            .Where(t => t.IsValidTarget(_e.Range) && t.Distance(eqTarget, true) < _q.RangeSqr && !_e.IsKillable(eqTarget)).MinOrDefault(t => t.Distance(eqTarget, true));
                        if (eTarget != null && _q.IsReady())
                        {
                            _e.Cast(eTarget);
                            return;
                        }
                    }
                }

                if (bflag)
                {
                    qCastState = _q.Cast(target);
                }
            }
        }