Ejemplo n.º 1
0
        public async Task DjinnInfo([Remainder] string name = "")
        {
            if (name == "")
            {
                return;
            }

            if (!DjinnAndSummonsDatabase.TryGetDjinn(name, out var djinn))
            {
                var emb = new EmbedBuilder();
                emb.WithDescription(":x: There is no such spirit with that description!");
                emb.WithColor(Colors.Get("Error"));
                await Context.Channel.SendMessageAsync("", false, emb.Build());

                return;
            }

            var embed = new EmbedBuilder();

            embed.WithAuthor($"{djinn.Name}");
            embed.AddField("Icon", djinn.Emote, true);
            embed.AddField("Stats", djinn.Stats.NonZerosToString(), true);
            var effectList = djinn.Effects.Count > 0 ? string.Join("\n", djinn.Effects.Select(e => e.ToString())) : "";

            embed.AddField("Description",
                           string.Join("\n", djinn.ToString(), effectList, djinn.HasPriority ? "Always goes first." : ""));

            embed.WithColor(Colors.Get(djinn.Element.ToString()));

            _ = Context.Channel.SendMessageAsync("", false, embed.Build());
            await Task.CompletedTask;
        }
Ejemplo n.º 2
0
 public async Task GiveSummon(string summonName, [Remainder] SocketGuildUser user = null)
 {
     if (DjinnAndSummonsDatabase.TryGetSummon(summonName, out Summon summon))
     {
         UserAccounts.GetAccount(user ?? Context.User).DjinnPocket.AddSummon(summon);
         await DjinnInv();
     }
 }
Ejemplo n.º 3
0
 public async Task GiveSummon(string summonName, [Remainder] SocketGuildUser user = null)
 {
     if (DjinnAndSummonsDatabase.TryGetSummon(summonName, out Summon summon))
     {
         var acc = EntityConverter.ConvertUser(user ?? Context.User);
         acc.DjinnPocket.AddSummon(summon);
         UserAccountProvider.StoreUser(acc);
     }
 }
Ejemplo n.º 4
0
 public async Task GiveDjinn(string djinnName, [Remainder] SocketGuildUser user = null)
 {
     if (DjinnAndSummonsDatabase.TryGetDjinn(djinnName, out Djinn djinn))
     {
         var acc = EntityConverter.ConvertUser(user ?? Context.User);
         acc.DjinnPocket.AddDjinn(djinn);
         UserAccountProvider.StoreUser(acc);
     }
     await Task.CompletedTask;
 }
Ejemplo n.º 5
0
        public async Task SummonInfo([Remainder] string name = "")
        {
            if (name == "")
            {
                return;
            }

            if (!DjinnAndSummonsDatabase.TryGetSummon(name, out var summon))
            {
                var emb = new EmbedBuilder();
                emb.WithDescription(":x: There is no such spirit with that description!");
                emb.WithColor(Colors.Get("Error"));
                await Context.Channel.SendMessageAsync("", false, emb.Build());

                return;
            }

            var embed = new EmbedBuilder();

            embed.WithAuthor($"{summon.Name}");
            embed.AddField("Icon", summon.Emote, true);
            embed.AddField("Needed",
                           string.Join("", Enumerable.Repeat(Emotes.GetIcon(Element.Venus), summon.VenusNeeded)
                                       .Concat(Enumerable.Repeat(Emotes.GetIcon(Element.Mars), summon.MarsNeeded))
                                       .Concat(Enumerable.Repeat(Emotes.GetIcon(Element.Jupiter), summon.JupiterNeeded))
                                       .Concat(Enumerable.Repeat(Emotes.GetIcon(Element.Mercury), summon.MercuryNeeded))),
                           true);
            var effectList = summon.Effects.Count > 0
                ? string.Join("\n", summon.Effects.Select(e => e.ToString()))
                : "";
            var userList = summon.EffectsOnUser?.Count > 0
                ? "On User:\n" + string.Join("\n", summon.EffectsOnUser.Select(e => e.ToString()))
                : "";
            var partyList = summon.EffectsOnParty?.Count > 0
                ? "On party:\n" + string.Join("\n", summon.EffectsOnParty.Select(e => e.ToString()))
                : "";

            embed.AddField("Description",
                           string.Join("\n", summon.ToString(), effectList, userList, partyList,
                                       summon.HasPriority ? "Always goes first." : ""));

            embed.WithColor(Colors.Get(
                                Enumerable.Repeat(Element.Venus.ToString(), summon.VenusNeeded)
                                .Concat(Enumerable.Repeat(Element.Mars.ToString(), summon.MarsNeeded))
                                .Concat(Enumerable.Repeat(Element.Jupiter.ToString(), summon.JupiterNeeded))
                                .Concat(Enumerable.Repeat(Element.Mercury.ToString(), summon.MercuryNeeded))
                                .ToArray()
                                ));

            _ = Context.Channel.SendMessageAsync("", false, embed.Build());
            await Task.CompletedTask;
        }
Ejemplo n.º 6
0
        public static Move GetMove(string move)
        {
            if (offpsy.TryGetValue(move, out OffensivePsynergy op))
            {
                return((OffensivePsynergy)op.Clone());
            }

            if (healpsy.TryGetValue(move, out HealPsynergy hp))
            {
                return((HealPsynergy)hp.Clone());
            }

            if (statpsy.TryGetValue(move, out StatusPsynergy sp))
            {
                return((StatusPsynergy)sp.Clone());
            }

            if (DjinnAndSummonsDatabase.TryGetDjinn(move, out Djinn d))
            {
                return(d);
            }

            if (DjinnAndSummonsDatabase.TryGetSummon(move, out Summon s))
            {
                return(s);
            }

            //Console.WriteLine($"{psynergy} is not implemented.");
            return(new StatusPsynergy()
            {
                Name = $"{move} (NOT IMPLEMENTED)",
                Effects = new List <Effect>()
                {
                    new NoEffect()
                }
            });
        }
Ejemplo n.º 7
0
        public override string Award(UserAccount userAccount)
        {
            List <string> awardLog = new List <string>();

            if (RequireTag.Count > 0 && !RequireTag.All(t => userAccount.Tags.Contains(t)))
            {
                return("");
            }

            if (Obtainable > 0 && userAccount.Tags.Count(r => r.Equals(Tag)) >= Obtainable)
            {
                return("");
            }
            var giveTag = true;

            userAccount.AddXp(xp);
            userAccount.Inv.AddBalance(coins);

            if (HasChest)
            {
                userAccount.Inv.AwardChest(Chest);
                awardLog.Add($"{userAccount.Name} found a {Inventory.ChestIcons[Chest]} {Chest} chest!");
            }
            if (Item != "")
            {
                var item = ItemDatabase.GetItem(Item);
                if (userAccount.Inv.Add(Item))
                {
                    awardLog.Add($"{userAccount.Name} found a {item.Icon} {item.Name}!");
                }
                else
                {
                    giveTag = false;
                }
            }

            if (EnemiesDatabase.TryGetDungeon(Dungeon, out var dungeon))
            {
                if (!userAccount.Dungeons.Contains(dungeon.Name))
                {
                    userAccount.Dungeons.Add(dungeon.Name);
                    awardLog.Add($"{userAccount.Name} found a {(dungeon.IsOneTimeOnly ? "<:dungeonkey:606237382047694919> Key" : "<:mapclosed:606236181486632985> Map")} to {dungeon.Name}!");
                }
            }

            if (DjinnAndSummonsDatabase.TryGetDjinn(Djinn, out var djinn))
            {
                if (!userAccount.DjinnPocket.djinn.Any(d => d.Djinnname == djinn.Djinnname))
                {
                    if (userAccount.DjinnPocket.AddDjinn(djinn))
                    {
                        awardLog.Add($"{userAccount.Name} found the {djinn.Element} djinni {djinn.Emote} {djinn.Name}!");
                        if (userAccount.DjinnPocket.djinn.Count == 1)
                        {
                            awardLog.Add($"You have found your first djinni, the {djinn.Element} djinni {djinn.Emote} {djinn.Name}. " +
                                         $"To view what it can do, use the djinninfo command `i!di {djinn.Name}` and to take it with you on your journey, use `i!djinn take {djinn.Name}`. " +
                                         $"In battle you can use a djinn to unleash its powers. After that it will go into \"Ready\" mode. From there you can use it to call a summon. After summoning, a djinn will take some turns to recover. " +
                                         $"You can also team up with other people to use a higher number of djinn in even more powerful summon sequences! " +
                                         $"Make sure to check `i!help DjinnAndSummons` for a full list of the commands related to djinn!");
                        }
                    }
                    else
                    {
                        giveTag = false;
                    }
                }
                else
                {
                    giveTag = false;
                }
            }
            else if (Enum.TryParse <Element>(Djinn, out var element))
            {
                djinn         = DjinnAndSummonsDatabase.GetRandomDjinn(element);
                djinn.IsShiny = Global.Random.Next(0, 128) == 0;
                djinn.UpdateMove();
                if (userAccount.DjinnPocket.AddDjinn(djinn))
                {
                    awardLog.Add($"{userAccount.Name} found the {djinn.Element} djinni {djinn.Emote} {djinn.Name}!");
                    if (userAccount.DjinnPocket.djinn.Count == 1)
                    {
                        awardLog.Add($"You have found your first djinni, the {djinn.Element} djinni {djinn.Emote} {djinn.Name}. " +
                                     $"To view what it can do, use the djinninfo command `i!di {djinn.Name}` and to take it with you on your journey, use `i!djinn take {djinn.Name}` as long as it matches one of your classes elements. " +
                                     $"In battle you can use a djinn to unleash its powers. After that it will go into \"Ready\" mode. From there you can use it to call a summon. After summoning, a djinn will take some turns to recover. " +
                                     $"You can also team up with other people to use a higher number of djinn in even more powerful summon sequences! " +
                                     $"Find more djinn by battling them in various towns and locations, and with some luck they will join you." +
                                     $"Make sure to check `i!help DjinnAndSummons` for a full list of the commands related to djinn!");
                    }
                }
                else
                {
                    giveTag = false;
                }
            }

            if (DjinnAndSummonsDatabase.TryGetSummon(Summon, out var summon))
            {
                if (!userAccount.DjinnPocket.summons.Contains(summon))
                {
                    userAccount.DjinnPocket.AddSummon(summon);
                    awardLog.Add($"{userAccount.Name} found the summon tablet for {summon.Emote} {summon.Name}!");
                }
            }

            if (Message != "")
            {
                awardLog.Add(string.Format(Message, userAccount.Name));
            }
            if (giveTag && Tag != "")
            {
                userAccount.Tags.Add(Tag);
            }
            return(string.Join("\n", awardLog));
        }
Ejemplo n.º 8
0
        public override string Award(UserAccount userAccount)
        {
            List <string> awardLog = new List <string>();

            if (RequireTag.Count > 0 && !RequireTag.All(t => userAccount.Tags.Contains(t)))
            {
                return("");
            }

            if (Obtainable > 0 && userAccount.Tags.Count(r => r.Equals(Tag)) >= Obtainable)
            {
                return("");
            }
            var giveTag = true;

            userAccount.AddXp(Xp);
            userAccount.Inv.AddBalance(Coins);

            if (HasChest)
            {
                userAccount.Inv.AwardChest(Chest);
                awardLog.Add($"{userAccount.Name} found a {Inventory.ChestIcons[Chest]} {Chest} chest!");
            }
            if (Item != "")
            {
                var item = ItemDatabase.GetItem(Item);
                if (userAccount.Inv.Add(Item))
                {
                    awardLog.Add($"{userAccount.Name} found a {item.Icon} {item.Name}!");
                }
                else
                {
                    giveTag = false;
                }
            }

            if (EnemiesDatabase.TryGetDungeon(Dungeon, out var dungeon))
            {
                if (!userAccount.Dungeons.Contains(dungeon.Name))
                {
                    userAccount.Dungeons.Add(dungeon.Name);
                    awardLog.Add($"{userAccount.Name} found a {(dungeon.IsOneTimeOnly ? "<:dungeonkey:606237382047694919> Key" : "<:mapclosed:606236181486632985> Map")} to {dungeon.Name}!");
                }
            }

            if (DjinnAndSummonsDatabase.TryGetDjinn(Djinn, out var djinn))
            {
                if (userAccount.DjinnPocket.AddDjinn(djinn))
                {
                    awardLog.Add($"{userAccount.Name} found the {djinn.Element} djinni {djinn.Emote} {djinn.Name}!");
                    if (userAccount.DjinnPocket.Djinn.Count == 1)
                    {
                        awardLog.Add($"You have found your first djinni, the {djinn.Element} djinni {djinn.Emote} {djinn.Name}. " +
                                     $"To view what it can do, use the djinninfo command `i!di {djinn.Name}` and to take it with you on your journey, use `i!djinn take {djinn.Name}`. " +
                                     $"In battle you can use a djinn to unleash its powers. After that it will go into \"Ready\" mode. From there you can use it to call a summon. After summoning, a djinn will take some turns to recover. " +
                                     $"You can also team up with other people to use a higher number of djinn in even more powerful summon sequences! " +
                                     $"Make sure to check `i!help DjinnAndSummons` for a full list of the commands related to djinn!");
                    }

                    if (djinn.IsEvent && userAccount.DjinnPocket.Djinn.Count(d => d.IsEvent) == 1)
                    {
                        awardLog.Add($"Congratulations, You have found an **Event Djinni**! They are custom made djinni, only available within the event, as a small trinket for your participation. " +
                                     $"They behave differently to other djinn, in that they will not count towards your Djinn Pocket limit or any class upgrades, " +
                                     $"however they will carry over if you decide to reset your game :)" +
                                     $"(Event Djinn will not be allowed in any upcoming tournaments.)");
                    }

                    if (userAccount.DjinnPocket.Djinn.Count == userAccount.DjinnPocket.PocketSize)
                    {
                        awardLog.Add($"Attention! Your Djinn Pocket has reached its limit. " +
                                     $"In order to further obtain djinn, you must either make space by releasing djinn or upgrading it using `i!upgradedjinn`!");
                    }
                }
                else
                {
                    giveTag = false;
                }
            }
            else if (Enum.TryParse <Element>(Djinn, out var element))
            {
                djinn = DjinnAndSummonsDatabase.GetRandomDjinn(element);
                bool isShiny = Global.RandomNumber(0, 128 - userAccount.DjinnBadLuck < 0 ? 0 : 128 - userAccount.DjinnBadLuck) <= 0;
                if (!isShiny && userAccount.DjinnPocket.Djinn.Any(d => d.Djinnname == djinn.Djinnname))
                {
                    djinn = DjinnAndSummonsDatabase.GetRandomDjinn(element);
                }
                djinn.IsShiny = isShiny && djinn.CanBeShiny;
                djinn.UpdateMove();
                if (userAccount.DjinnPocket.AddDjinn(djinn))
                {
                    awardLog.Add($"{userAccount.Name} found the {djinn.Element} djinni {djinn.Emote} {djinn.Name}!");
                    if (userAccount.DjinnPocket.Djinn.Count == 1)
                    {
                        awardLog.Add($"You have found your first djinni, the {djinn.Element} djinni {djinn.Emote} {djinn.Name}. " +
                                     $"To view what it can do, use the djinninfo command `i!di {djinn.Name}` and to take it with you on your journey, use `i!djinn take {djinn.Name}` as long as it matches one of your classes elements. " +
                                     $"In battle you can use a djinn to unleash its powers. After that it will go into \"Ready\" mode. From there you can use it to call a summon. After summoning, a djinn will take some turns to recover. " +
                                     $"You can also team up with other people to use a higher number of djinn in even more powerful summon sequences! " +
                                     $"Find more djinn by battling them in various towns and locations, and with some luck they will join you." +
                                     $"Make sure to check `i!help DjinnAndSummons` for a full list of the commands related to djinn!");
                    }

                    if (userAccount.DjinnPocket.Djinn.Count == userAccount.DjinnPocket.PocketSize)
                    {
                        awardLog.Add($"Attention! Your Djinn Pocket has reached its limit. " +
                                     $"In order to further obtain djinn, you must either make space by releasing djinn or upgrading it using `i!upgradedjinn`!");
                    }

                    if (djinn.IsShiny)
                    {
                        userAccount.DjinnBadLuck = 0;
                    }
                    else if (djinn.CanBeShiny)
                    {
                        userAccount.DjinnBadLuck++;
                    }
                }
                else
                {
                    giveTag = false;
                }
            }

            if (DjinnAndSummonsDatabase.TryGetSummon(Summon, out var summon))
            {
                if (!userAccount.DjinnPocket.Summons.Contains(summon))
                {
                    userAccount.DjinnPocket.AddSummon(summon);
                    awardLog.Add($"{userAccount.Name} found the summon tablet for {summon.Emote} {summon.Name}!");
                }
            }

            if (Message != "")
            {
                awardLog.Add(string.Format(Message, userAccount.Name));
            }
            if (giveTag && Tag != "")
            {
                userAccount.Tags.Add(Tag);
            }
            return(string.Join("\n", awardLog));
        }