示例#1
0
        public async Task SetModeAsync(
            CommandContext ctx,
            [Description("The name of the mode")]
            string mode)
        {
            if (Enum.TryParse(mode, true, out WheelSettingExtension.WheelMode wheelMode))
            {
                await WheelSettingExtension.SetMode(wheelMode, ctx.Guild.Id);

                await ctx.RespondAsync($"Mode for this guild is now \"{wheelMode.ToFormattedText()}\"!");
            }
            else
            {
                DiscordEmbedBuilder builder = new DiscordEmbedBuilder()
                {
                    Title       = "Cannot parse",
                    Description = $"I can't find a mode with the name \"{mode}\". Please use one of the following: "
                };

                foreach (WheelSettingExtension.WheelMode cMode in Enum.GetValues(typeof(WheelSettingExtension.WheelMode)))
                {
                    builder.AddField(cMode.ToFormattedText(), ((int)cMode).ToString());
                }

                await ctx.RespondAsync(embed : builder.Build());
            }
        }
示例#2
0
        private async Task <UserSetting.Outcome> GetOutcome(CommandContext ctx, DiscordContext context)
        {
            Users user = await UserExtension.GetUser(Convert.ToInt64(ctx.Message.Author.Id), context);

            var wheelMode = await WheelSettingExtension.GetMode(ctx.Guild.Id, context);

            var wheelDifficultySetting = await UserSetting.GetSettingAsync(user.UserId, UserSetting.SettingID.WheelDifficulty, context);

            var difficulty = UserSettingExtensions.GetValue <UserSetting.WheelDifficultyPreference>(wheelDifficultySetting);

            WheelChances chances = await context.WheelChances.FindAsync((int)difficulty);

            var cumScore = await CalculateCumScore(context, user);

            var cumChance = Convert.ToInt32(cumScore * chances.O****m);

            if (wheelMode.HasFlag(WheelSettingExtension.WheelMode.NoCum))
            {
                cumChance = 0;
            }

            var ruinChance = Convert.ToInt32(cumScore * chances.Ruin);

            if (wheelMode.HasFlag(WheelSettingExtension.WheelMode.NoRuin))
            {
                ruinChance = 0;
            }

            var denialChance = chances.Denial;

            if (wheelMode.HasFlag(WheelSettingExtension.WheelMode.NoDenial))
            {
                denialChance = 0;
            }

            var outcomeChanceValue = Helpers.RandomGenerator.RandomInt(
                0,
                denialChance + chances.Task + chances.Edge + ruinChance + cumChance);

            UserSetting.Outcome outcome;
            if (outcomeChanceValue < denialChance)
            {
                outcome = UserSetting.Outcome.Denial;
            }
            else if (outcomeChanceValue < denialChance + chances.Edge)
            {
                outcome = UserSetting.Outcome.Edge;
            }
            else if (outcomeChanceValue < denialChance + chances.Edge + chances.Task)
            {
                outcome = UserSetting.Outcome.Task;
            }
            else if (outcomeChanceValue < denialChance + chances.Edge + chances.Task + cumChance)
            {
                outcome = UserSetting.Outcome.Ruin;
            }
            else
            {
                outcome = UserSetting.Outcome.O****m;
            }

            return(outcome);
        }
示例#3
0
        public async Task FullOrgasmWheel(CommandContext ctx)
        {
            await ctx.TriggerTypingAsync();

            using DiscordContext context = new DiscordContext();
            Users user = await UserExtension.GetUser(Convert.ToInt64(ctx.Message.Author.Id), context);

            if (!await DoInitialCheck(ctx))
            {
                return;
            }

            var wheelMode = await WheelSettingExtension.GetMode(ctx.Guild.Id, context);

            if (wheelMode == WheelSettingExtension.WheelMode.Infinite)
            {
                await ctx.RespondAsync("Wheel is set to infinite Mode. Please Change it to a Mode where an outcome is possible");

                return;
            }

            var isLocked = !await CheckLocked(ctx, user, context);

            if (isLocked)
            {
                return;
            }

            List <WheelOutcome> outcomes = new List <WheelOutcome>();

            var outcome = await GetOutcome(ctx, context);

            while (outcomes.All(o => o.Outcome != UserSetting.Outcome.Denial && o.Outcome != UserSetting.Outcome.Ruin && o.Outcome != UserSetting.Outcome.O****m))
            {
                outcome = await GetOutcome(ctx, context);

                outcome = await CheckDenial(ctx, user, outcome);

                outcomes.Add(await GetWheelOutcome(context, user, outcome));
            }

            //Last outcome will be end of wheel

            var outcomeTime = DateTime.Now;

            foreach (var wheelOutcome in outcomes)
            {
                outcomeTime += TimeSpan.FromSeconds(1);
                if (wheelOutcome.Embed != null)
                {
                    await ctx.RespondAsync(embed : wheelOutcome.Embed);
                }
                else
                {
                    await ctx.RespondAsync(wheelOutcome.Text);
                }

                DbWheelOutcome dbOutcome = new DbWheelOutcome()
                {
                    IsUserReport = 0,
                    Time         = outcomeTime,
                    Type         = (int)outcome,
                    UserId       = user.UserId
                };

                context.WheelOutcome.Add(dbOutcome);

                if (wheelOutcome.GetType() == typeof(Entities.WheelOutcomes.Content))
                {
                    ((Entities.WheelOutcomes.Content)wheelOutcome).CleanUp(context);
                }
            }

            var endOutcome = outcomes.First(o => o.Outcome == UserSetting.Outcome.Denial || o.Outcome == UserSetting.Outcome.Ruin || o.Outcome == UserSetting.Outcome.O****m);

            if (endOutcome.WheelLockedTime != null && endOutcome.WheelLockedTime > TimeSpan.Zero)
            {
                switch (outcome)
                {
                case UserSetting.Outcome.Edge:
                case UserSetting.Outcome.Task:
                    user.LockReason = ((int)UserSetting.LockReason.Task).ToString();
                    break;

                default:
                    user.LockReason = ((int)UserSetting.LockReason.Cooldown).ToString();
                    break;
                }
            }

            if (user.DenialTime == null || user.DenialTime < DateTime.Now)
            {
                user.DenialTime = DateTime.Now;
            }

            if (user.LockTime == null || user.LockTime < DateTime.Now)
            {
                user.LockTime = DateTime.Now;
            }

            user.DenialTime += endOutcome.DenialTime;
            user.LockTime   += endOutcome.WheelLockedTime;

            await context.SaveChangesAsync();

            await CheckUserHasOrgasm(ctx, outcome);
        }