示例#1
0
        // this factory produces skills from BasicSpells directory
        public Skill CreateSkill(Player player)
        {
            List <Skill> playerSkills = player.ListOfSkills;
            Skill        known        = CheckContent(playerSkills); // check what spells from the BasicSpells category are known by the player already

            if (known == null)                                      // no BasicSpells known - we will return one of them
            {
                FireArrow  s1 = new FireArrow();
                LightFlash s2 = new LightFlash();
                WindGust   s3 = new WindGust();
                // only include elligible spells
                List <Skill> tmp = new List <Skill>();
                if (s1.MinimumLevel <= player.Level)
                {
                    tmp.Add(s1);                                  // check level requirements
                }
                if (s2.MinimumLevel <= player.Level)
                {
                    tmp.Add(s2);
                }
                if (s3.MinimumLevel <= player.Level)
                {
                    tmp.Add(s3);
                }
                if (tmp.Count == 0)
                {
                    return(null);
                }
                Console.WriteLine(tmp.Count);
                return(tmp[Index.RNG(0, tmp.Count)]); // use Index.RNG for safe random numbers
            }
            else if (known.decoratedSkill == null)    // a BasicSpell has been already learned, use decorator to create a combo
            {
                FireArrowDecorator  s1  = new FireArrowDecorator(known);
                LightFlashDecorator s2  = new LightFlashDecorator(known);
                WindGustDecorator   s3  = new WindGustDecorator(known);
                List <Skill>        tmp = new List <Skill>();
                if (s1.MinimumLevel <= player.Level)
                {
                    tmp.Add(s1);                                  // check level requirements
                }
                if (s2.MinimumLevel <= player.Level)
                {
                    tmp.Add(s2);
                }
                if (s3.MinimumLevel <= player.Level)
                {
                    tmp.Add(s3);
                }
                if (tmp.Count == 0)
                {
                    return(null);
                }
                return(tmp[Index.RNG(0, tmp.Count)]);
            }
            else
            {
                return(null); // a combo of BasicSpells has been already learned - this factory doesn't offer double combos so we stop here
            }
        }
示例#2
0
        // this factory produces skills from BasicSpells directory
        public Skill CreateSkill(Player player)
        {
            List <Skill>  playerSkills = player.ListOfSkills;
            List <Skill>  tmp          = new List <Skill>();
            FireArrow     s1           = new FireArrow();
            WindGust      s2           = new WindGust();
            DeepBreath    s3           = new DeepBreath();
            ChargeGSArmor s4           = new ChargeGSArmor();

            if (s1.MinimumLevel <= player.Level)
            {
                tmp.Add(s1);                                  // check level requirements
            }
            if (s2.MinimumLevel <= player.Level)
            {
                tmp.Add(s2);
            }
            if (s3.MinimumLevel <= player.Level)
            {
                tmp.Add(s3);
            }
            if (s4.MinimumLevel <= player.Level)
            {
                tmp.Add(s4);
            }
            foreach (Skill skill in playerSkills) // don't offer skills which the player knows already
            {
                if (skill is FireArrow)
                {
                    tmp.Remove(s1);
                }
                if (skill is WindGust)
                {
                    tmp.Remove(s2);
                }
                if (skill is DeepBreath)
                {
                    tmp.Remove(s3);
                }
                if (skill is ChargeGSArmor)
                {
                    tmp.Remove(s4);
                }
            }
            if (tmp.Count == 0)
            {
                return(null);
            }
            return(tmp[Index.RNG(0, tmp.Count)]);
        }