Exemplo n.º 1
0
        public async Task DeleteStatChannel(ulong guildId, StatOption stat)
        {
            using var context = new RPGContext(_options);

            GuildPreferences guildPrefs = await _guildPreferences.GetOrCreateGuildPreferences(guildId);

            CheckForGuildsStatCatergoryChannel(guildPrefs);

            var channelStat = guildPrefs.StatChannels.Where(x => x.StatOption == stat).FirstOrDefault();

            if (channelStat == null)
            {
                return;
            }

            context.Remove(channelStat);

            await context.SaveChangesAsync();
        }
Exemplo n.º 2
0
        public async Task CreateOrModifyStatChannel(ulong guildId, ulong channelId, StatOption stat, string message)
        {
            using var context = new RPGContext(_options);

            GuildPreferences guildPrefs = await _guildPreferences.GetOrCreateGuildPreferences(guildId);

            CheckForGuildsStatCatergoryChannel(guildPrefs);

            var channelStat = guildPrefs.StatChannels.Where(x => x.StatOption == stat).FirstOrDefault();

            if (channelStat == null)
            {
                if (guildPrefs.StatChannels.Count >= 3)
                {
                    throw new Exception("You can only have 3 stats at a time, to create a new one, you must delete one of the channels and type `w@guild stats update true`, then try to create your stat channel again.");
                }

                channelStat = new StatChannel()
                {
                    StatMessage        = message,
                    StatOption         = stat,
                    ChannelId          = channelId,
                    GuildPreferencesId = guildPrefs.Id
                };
                context.Add(channelStat);
            }
            else
            {
                channelStat.StatMessage = message;
                channelStat.ChannelId   = channelId;
                channelStat.StatOption  = stat;
                context.Update(channelStat);
            }

            await context.SaveChangesAsync();
        }
Exemplo n.º 3
0
                private string GetStat(CommandContext ctx, StatOption option)
                {
                    var list       = _profileService.GetAllGuildProfiles(ctx.Guild.Id);
                    var memberList = ctx.Guild.GetAllMembersAsync().Result;

                    memberList = new List <DiscordMember>(memberList);
                    var memberIdList = memberList.Where(x => !x.IsBot).Select(x => x.Id).ToList();

                    try
                    {
                        switch (option)
                        {
                        case StatOption.Boganness:
                        {
                            var    returnMember = list.OrderByDescending(x => x.Boganometer).Where(x => memberIdList.Contains(x.DiscordId)).First();
                            string userName     = ctx.Guild.GetMemberAsync(returnMember.DiscordId).Result.Username;
                            return($"{Math.Round(returnMember.Boganometer)}% {userName}");
                        }

                        case StatOption.Gold:
                        {
                            var    returnMember = list.OrderByDescending(x => x.Gold).Where(x => memberIdList.Contains(x.DiscordId)).First();
                            string userName     = ctx.Guild.GetMemberAsync(returnMember.DiscordId).Result.Username;
                            return($"{returnMember.Gold} {userName}");
                        }

                        case StatOption.GoldStolen:
                        {
                            var    returnMember = list.OrderByDescending(x => x.GoldStolen).Where(x => memberIdList.Contains(x.DiscordId)).First();
                            string userName     = ctx.Guild.GetMemberAsync(returnMember.DiscordId).Result.Username;
                            return($"{returnMember.GoldStolen} {userName}");
                        }

                        case StatOption.Gots:
                        {
                            var    returnMember = list.OrderByDescending(x => x.Gots).Where(x => memberIdList.Contains(x.DiscordId)).First();
                            string userName     = ctx.Guild.GetMemberAsync(returnMember.DiscordId).Result.Username;
                            return($"{returnMember.Gots} {userName}");
                        }

                        case StatOption.RobAttackSuccessRate:
                        {
                            var    returnMember = list.Where(x => x.RobbingAttackWon + x.RobbingAttackLost > 10).OrderByDescending(x => x.RobAttackSuccessRate).Where(x => memberIdList.Contains(x.DiscordId) && x.RobAttackSuccessRate > 0).First();
                            string userName     = ctx.Guild.GetMemberAsync(returnMember.DiscordId).Result.Username;
                            return($"{Math.Round(returnMember.RobAttackSuccessRate)}% {userName}");
                        }

                        case StatOption.RobDefendSuccessRate:
                        {
                            var    returnMember = list.Where(x => x.RobbingDefendWon + x.RobbingDefendLost > 10).OrderByDescending(x => x.RobDefendSuccessRate).Where(x => memberIdList.Contains(x.DiscordId) && x.RobDefendSuccessRate > 0).First();
                            string userName     = ctx.Guild.GetMemberAsync(returnMember.DiscordId).Result.Username;
                            return($"{Math.Round(returnMember.RobDefendSuccessRate)}% {userName}");
                        }

                        case StatOption.SpellAcc:
                        {
                            var    returnMember = list.OrderByDescending(x => x.SpellAcc).Where(x => memberIdList.Contains(x.DiscordId) && x.SpellAcc > 0).First();
                            string userName     = ctx.Guild.GetMemberAsync(returnMember.DiscordId).Result.Username;
                            return($"{Math.Round(returnMember.SpellAcc)}% {userName}");
                        }

                        case StatOption.Xp:
                        {
                            var    returnMember = list.OrderByDescending(x => x.Xp).Where(x => memberIdList.Contains(x.DiscordId)).First();
                            string userName     = ctx.Guild.GetMemberAsync(returnMember.DiscordId).Result.Username;
                            return($"{returnMember.Xp} {userName}");
                        }

                        case StatOption.GoldLostFromTheft:
                        {
                            var    returnMember = list.OrderByDescending(x => x.GoldLostFromTheft).Where(x => memberIdList.Contains(x.DiscordId)).First();
                            string userName     = ctx.Guild.GetMemberAsync(returnMember.DiscordId).Result.Username;
                            return($"{returnMember.GoldLostFromTheft} {userName}");
                        }

                        case StatOption.RobbingAttackWon:
                        {
                            var    returnMember = list.OrderByDescending(x => x.RobbingAttackWon).Where(x => memberIdList.Contains(x.DiscordId)).First();
                            string userName     = ctx.Guild.GetMemberAsync(returnMember.DiscordId).Result.Username;
                            return($"{returnMember.RobbingAttackWon} {userName}");
                        }

                        case StatOption.RobbingDefendWon:
                        {
                            var    returnMember = list.OrderByDescending(x => x.RobbingDefendWon).Where(x => memberIdList.Contains(x.DiscordId)).First();
                            string userName     = ctx.Guild.GetMemberAsync(returnMember.DiscordId).Result.Username;
                            return($"{returnMember.RobbingDefendWon} {userName}");
                        }

                        case StatOption.HeadsOrTailsLosses:
                        {
                            var    returnMember = list.OrderByDescending(x => x.CoindFlipsLost).Where(x => memberIdList.Contains(x.DiscordId)).First();
                            string userName     = ctx.Guild.GetMemberAsync(returnMember.DiscordId).Result.Username;
                            return($"{returnMember.CoindFlipsLost} {userName}");
                        }

                        case StatOption.HeadsOrTailsWins:
                        {
                            var    returnMember = list.OrderByDescending(x => x.CoinFilpsWon).Where(x => memberIdList.Contains(x.DiscordId)).First();
                            string userName     = ctx.Guild.GetMemberAsync(returnMember.DiscordId).Result.Username;
                            return($"{returnMember.CoinFilpsWon} {userName}");
                        }

                        case StatOption.CoinflipWinRate:
                        {
                            var    returnMember = list.Where(x => x.CoinFilpsWon + x.CoindFlipsLost > 10).OrderByDescending(x => x.CoinFlipWinRate).Where(x => memberIdList.Contains(x.DiscordId)).First();
                            string userName     = ctx.Guild.GetMemberAsync(returnMember.DiscordId).Result.Username;
                            return($"{returnMember.CoinFlipWinRate}% {userName}");
                        }

                        default:
                        {
                            return("Error stat type not found.");
                        }
                        }
                    }
                    catch (InvalidOperationException ex)
                    {
                        return("Not Enough Data");
                    }
                }
Exemplo n.º 4
0
                public async Task AddOrModify(CommandContext ctx)
                {
                    var guildPrefs = await _guildPreferences.GetOrCreateGuildPreferences(ctx.Guild.Id);

                    DiscordChannel parentChannel = ctx.Guild.GetChannel(guildPrefs.StatChannelCatergoryId);

                    if (parentChannel == null)
                    {
                        throw new Exception("You have not yet added a category where stats will be shown under. `w@guild stat setcategory <Channel category>`.");
                    }

                    var messageStep = new TextStep("What would you like the channel name to say? Will show as `<Your text here>: [stat] [Members name]` the limited number of characters is set low to prevent the stat from being hidden.", null, 0, 12);
                    var statStep    = new IntStep("What kind of stat would you like to track you can only have one of each type, to modify an existing one just select the same option? Please enter the corresponding number.\nMost gold - 0\nRobbing attack success rate - 1\nRobbing defense success rate - 2\nXp - 3\nGots - 4\nBoganness - 5\nGold Stolen - 6\nSpelling accuracy - 7\nGold Lost From Theft - 8\nRobbing Attack Wins - 9\nRobbing Defend Wins - 10\nHeads or tails wins - 11\nHeads or tails losses - 12\nCoin flip Win Rate - 13", messageStep, 0, 13);

                    int        statInput;
                    StatOption stat = StatOption.Gold;

                    string msgInput;
                    string message = "1";

                    statStep.OnValidResult += (result) =>
                    {
                        statInput = result;

                        stat = (StatOption)result;

                        statStep.SetNextStep(messageStep);
                    };

                    messageStep.onValidResult += (result) =>
                    {
                        msgInput = result;

                        message = result;
                    };

                    var userChannel = await ctx.Member.CreateDmChannelAsync().ConfigureAwait(false);

                    var inputDialogueHandler = new DialogueHandler(
                        ctx.Client,
                        ctx.Channel,
                        ctx.User,
                        statStep
                        );

                    bool succeeded = await inputDialogueHandler.ProcessDialogue().ConfigureAwait(false);

                    if (!succeeded)
                    {
                        return;
                    }

                    ulong channelId;

                    if (guildPrefs.StatChannels.Exists(x => x.StatOption == stat))
                    {
                        channelId = guildPrefs.StatChannels.Where(x => x.StatOption == stat).FirstOrDefault().ChannelId;
                    }
                    else
                    {
                        channelId = ctx.Guild.CreateVoiceChannelAsync("waiting for update...", parentChannel).Result.Id;
                    }

                    await _statChannelService.CreateOrModifyStatChannel(ctx.Guild.Id, channelId, stat, message);

                    await ctx.Channel.SendMessageAsync("There should be a new text channel in the specified category and will be updated on the next stat update cycle.").ConfigureAwait(false);
                }
Exemplo n.º 5
0
        /// <summary>Modify the Stats on an animal </summary>
        public static void ModifyStat(Stat stat, float Value, StatOption modify)
        {
            if (stat == null)
            {
                return;                    //Means that there's no Stat
            }
            switch (modify)
            {
            case StatOption.AddValue:
                stat.Modify(Value);
                break;

            case StatOption.SetValue:
                stat.Value = Value;
                break;

            case StatOption.SubstractValue:
                stat.Modify(-Value);
                break;

            case StatOption.ModifyMaxValue:
                stat.ModifyMAX(Value);
                break;

            case StatOption.SetMaxValue:
                stat.MaxValue = Value;
                break;

            case StatOption.Degenerate:
                stat.DegenRate  = Value;
                stat.Degenerate = true;
                break;

            case StatOption.StopDegenerate:
                stat.DegenRate  = Value;
                stat.Degenerate = false;
                break;

            case StatOption.Regenerate:
                stat.Regenerate = true;
                stat.RegenRate  = Value;
                break;

            case StatOption.StopRegenerate:
                stat.Regenerate = false;
                stat.RegenRate  = Value;
                break;

            case StatOption.Reset:
                stat.Reset();
                break;

            case StatOption.ReduceByPercent:
                stat.Modify(-(stat.MaxValue * Value / 100));
                break;

            case StatOption.IncreaseByPercent:
                stat.Modify(stat.MaxValue * Value / 100);
                break;

            default:
                break;
            }
        }
Exemplo n.º 6
0
 public virtual void Stat_ModifyValue(StatID ID, float modifyvalue, StatOption modifyType)
 {
     Stat_Get(ID)?.Modify(modifyvalue, modifyType);
 }
Exemplo n.º 7
0
 public StatModifier()
 {
     ID     = null;
     modify = StatOption.None;
     Value  = new FloatReference(0);
 }
Exemplo n.º 8
0
 public StatModifier(StatModifier mod)
 {
     ID     = mod.ID;
     modify = mod.modify;
     Value  = new FloatReference(mod.Value.Value);
 }
Exemplo n.º 9
0
 public virtual void Stat_ModifyValue(string name, float modifyvalue, StatOption modifyType) => Stat_Get(name)?.Modify(modifyvalue, modifyType);