Example #1
0
        public override bool CheckFly(ref NLPointF position, ref int angle)
        {
            if (target == null || !target.IsAlive || parent == null || !parent.IsAlive)
            {
                return(false);
            }

            if (FlyProc(target.Position, ref position, ref angle) == FlyCheckType.EndPoint)
            {
                parent.HitTarget(target, false);
                BattleManager.Instance.EffectQueue.Add(new ActiveEffect(EffectBook.GetEffect(config.EffName), target, false));
                return(false);
            }
            return(true);
        }
Example #2
0
        public override bool CheckFly(ref NLPointF position, ref int angle)
        {
            if (parent == null || !parent.IsAlive)
            {
                return(false);
            }

            if (FlyProc(targetPos, ref position, ref angle) == FlyCheckType.EndPoint)
            {
                var mon = BattleLocationManager.GetPlaceMonster(targetPos.X, targetPos.Y);
                if (mon != null)
                {
                    parent.HitTarget(mon, false);
                    BattleManager.Instance.EffectQueue.Add(new ActiveEffect(EffectBook.GetEffect(config.EffName), mon, false));
                }
                return(false);
            }
            return(true);
        }
Example #3
0
        private void CheckFight(LiveMonster nearestEnemy)
        {
            if (monster.RealRange <= GameConstants.MaxMeleeAtkRange)
            {
                monster.HitTarget(nearestEnemy, true); //近战
                BattleManager.Instance.EffectQueue.Add(new ActiveEffect(EffectBook.GetEffect(monster.Arrow), nearestEnemy, false));
            }
            else
            {
                BasicMissileControler controler = new TraceMissileControler(monster, nearestEnemy);
                Missile mi = new Missile(monster.Arrow, monster.Position.X, monster.Position.Y, controler);
                BattleManager.Instance.MissileQueue.Add(mi);
            }

            if (monster.RealSpd != 0) //会返回一些ats
            {
                monster.AddActionRate((float)(monster.RealSpd) * GameConstants.SpdToRate / 100);
            }
            monster.MovRound = 0;
        }