コード例 #1
0
        private async Task HandleRankCommand(IGuildUser user, bool self = true)
        {
            Ranking ranking = database.GetRankings().FirstOrDefault(f => f.UserId == (long)user.Id && f.GuildId == (long)Context.Guild.Id);

            if (ranking == null)
            {
                string s = self ? "you aren't" : $"{user.Mention} isn't";
                await ReplyAsync($"{s} ranked yet. Talk, dont be shy!");

                return;
            }

            EmbedBuilder builder = new EmbedBuilder()
            {
                Color  = new Color(0, 0, 0),
                Author = new EmbedAuthorBuilder()
                {
                    Name    = user.Username,
                    IconUrl = user.GetAvatarUrl()
                },
                ThumbnailUrl = ranking.Rank.Image,
                Footer       = new EmbedFooterBuilder()
                {
                    Text = "ChayaBot"
                }
            };

            RankLevel nextLvl    = ranking.Rank.RankLevels.FirstOrDefault(f => f.Level == ranking.CurrentLevel + 1);
            double    expPercent = ((double)ranking.CurrentExperience / nextLvl.RequiredExperience) * 100;

            builder.AddInlineField("Level", ranking.CurrentLevel);
            builder.AddInlineField("Experience", string.Format("{0:N2}%", expPercent));

            await ReplyAsync("", false, builder.Build());
        }
コード例 #2
0
        internal RankLevel GetNextLevel(RankLevel rank)
        {
            if (Enum.GetValues(typeof(RankLevel)).Cast <int>().Max() == (int)rank)
            {
                throw new ArgumentException($"{rank} is maximum");
            }

            return((RankLevel)((int)rank + 1));
        }
コード例 #3
0
        public static Exercise Create(RankLevel rank, int?attempt = null)
        {
            var rand = new Random();

            var exercises  = ExerciseDict[(int)rank];
            var enumerable = exercises as Exercise[] ?? exercises.ToArray();
            var toSkip     = rand.Next(0, enumerable.Count());

            var exercise = enumerable.Skip(toSkip).Take(1).First();

            exercise.QuestionNumber = attempt.HasValue ? attempt.Value : 1;

            return(exercise);
        }
コード例 #4
0
 public Player(string firstName = "no first name", string lastName = "no last name",
     Gender sexGender = Gender.Male, RankLevel simpleLevel = RankLevel.NC,
     RankLevel doubleLevel = RankLevel.NC, RankLevel mixedLevel = RankLevel.NC,
     int licenseNumber = 0)
 {
     FirstName = firstName;
       LastName = lastName;
       SexGender = sexGender;
       SimpleLevel = simpleLevel;
       DoubleLevel = doubleLevel;
       MixedLevel = mixedLevel;
       WishList = new List<TypePlayer>();
       RefusalList = new List<TypePlayer>();
       LicenseNumber = licenseNumber;
 }
コード例 #5
0
        private bool IsTrackBullet(RankLevel rankLevel)
        {
            Random random       = new Random();
            int    randomNumber = random.Next(0, 100);
            bool   res          = false;

            switch (rankLevel)
            {
            case RankLevel.Level1:
                if (randomNumber < 20)
                {
                    res = true;
                }
                break;

            case RankLevel.Level2:
                if (randomNumber < 30)
                {
                    res = true;
                }
                break;

            case RankLevel.Level3:
                if (randomNumber < 40)
                {
                    res = true;
                }
                break;

            case RankLevel.Level4:
                if (randomNumber < 50)
                {
                    res = true;
                }
                break;
            }
            return(res);
        }
コード例 #6
0
        public int GetTimeOut(RankLevel rankLevel)
        {
            switch (rankLevel)
            {
            case RankLevel.Beginner:
                return(30000);

            case RankLevel.Talented:
                return(29000);

            case RankLevel.Intermediate:
                return(28000);

            case RankLevel.Advanced:
                return(27000);

            case RankLevel.Expert:
                return(26000);

            default:
                return(30000);
            }
        }
コード例 #7
0
        private async Task HandleMessage(SocketMessage msg, bool updated = false)
        {
            if (msg == null || msg.Author.IsBot)
            {
                return;
            }

            SocketGuildChannel channel = msg.Channel as SocketGuildChannel;

            // Get the user's ranking
            Ranking ranking = database.GetRankings().FirstOrDefault(f => f.UserId == (long)msg.Author.Id && f.GuildId == (long)channel.Guild.Id);

            // If the user is max rank/level
            if (ranking?.CurrentLevel == 15 && ranking?.RankId == 7)
            {
                return;
            }

            // If the user isn't ranked yet
            if (ranking == null)
            {
                ranking = new Ranking()
                {
                    UserId            = (long)msg.Author.Id,
                    GuildId           = (long)channel.Guild.Id,
                    RankId            = 1,
                    CurrentExperience = 0,
                    CurrentLevel      = 1
                };

                database.Rankings.Add(ranking);
                await database.SaveChangesAsync();
            }

            // Handle the exp
            Rank      rank      = ranking.Rank != null ? ranking.Rank : database.GetRanks().FirstOrDefault(f => f.Id == ranking.RankId);
            RankLevel nextLevel = rank.RankLevels.FirstOrDefault(f => f.Level == ranking.CurrentLevel + 1);

            int expNeededForNextLevel = nextLevel.RequiredExperience - ranking.CurrentExperience;
            int expWon = updated ? (int)(rank.ExperiencePerLevel * 0.4) :
                         rank.ExperiencePerLevel + (int)(rank.ExperiencePerLevel * (GetBonusExpPercent(msg) * 0.01));

            // Level up
            if (expWon >= expNeededForNextLevel)
            {
                ranking.CurrentLevel++;
                ranking.CurrentExperience = expWon - expNeededForNextLevel; // Exp left (if not 0)

                // Rank up
                if (ranking.CurrentLevel == 15 && ranking.RankId < 7)
                {
                    ranking.RankId++;
                    ranking.CurrentLevel = 1;
                    Rank newRank = database.GetRanks().FirstOrDefault(f => f.Id == ranking.RankId);
                    await msg.Channel.SendMessageAsync("", false, BuildEmbedBuilder("Rank Up!", $"Congrats {msg.Author.Mention}, you reached {newRank.Name}!",
                                                                                    msg.Author, newRank.Image));
                }
                else if (ranking.CurrentLevel < 15)
                {
                    await msg.Channel.SendMessageAsync("", false, BuildEmbedBuilder("Level Up!",
                                                                                    $"Congrats {msg.Author.Mention}, you reached level {ranking.CurrentLevel}!", msg.Author));
                }
            }
            else
            {
                ranking.CurrentExperience += expWon;
            }

            database.SaveChanges();
        }
コード例 #8
0
 public bool IsEndOfExercise(RankLevel rank)
 {
     return(rank == RankLevel.Expert);
 }
コード例 #9
0
 public string RankName()
 {
     return(RankLevel.ToString().Replace("_", " ").Replace("Soldier", String.Empty).Replace("Rank", String.Empty).Trim());;
 }