示例#1
0
        public async Task ListDungeons()
        {
            var account                    = UserAccounts.GetAccount(Context.User);
            var defaultDungeons            = EnemiesDatabase.DefaultDungeons;
            var availableDefaultDungeons   = defaultDungeons.Where(d => d.Requirement.Applies(account)).Select(s => s.Name).ToArray();
            var unavailableDefaultDungeons = defaultDungeons.Where(d => !d.Requirement.Applies(account)).Select(s => s.Name).ToArray();

            var unlockedDungeons       = account.Dungeons.Select(s => EnemiesDatabase.GetDungeon(s));
            var availablePermUnlocks   = unlockedDungeons.Where(d => !d.IsOneTimeOnly && d.Requirement.Applies(account)).Select(s => s.Name).ToArray();
            var unavailablePermUnlocks = unlockedDungeons.Where(d => !d.IsOneTimeOnly && !d.Requirement.Applies(account)).Select(s => s.Name).ToArray();

            var availableOneTimeUnlocks   = unlockedDungeons.Where(d => d.IsOneTimeOnly && d.Requirement.Applies(account)).Select(s => s.Name).ToArray();
            var unavailableOneTimeUnlocks = unlockedDungeons.Where(d => d.IsOneTimeOnly && !d.Requirement.Applies(account)).Select(s => s.Name).ToArray();

            var embed = new EmbedBuilder();

            embed.WithTitle("Dungeons");
            if (defaultDungeons.Count() > 0)
            {
                embed.AddField("<:town:606236181243625493> Default Unlocks", $"Available: {string.Join(", ", availableDefaultDungeons)} \n Unavailable: {string.Join(", ", unavailableDefaultDungeons)}");
            }
            if (availablePermUnlocks.Count() > 0)
            {
                embed.AddField("<:mapopen:606236181503410176> Places Discovered", $"Available: {string.Join(", ", availablePermUnlocks)} \n Unavailable: {string.Join(", ", unavailablePermUnlocks)}");
            }
            if (availableOneTimeUnlocks.Count() > 0)
            {
                embed.AddField("<:dungeonkey:606237382047694919> Dungeon Keys", $"Available: {string.Join(", ", availableOneTimeUnlocks)} \n Unavailable: {string.Join(", ", unavailableOneTimeUnlocks)}");
            }
            await Context.Channel.SendMessageAsync("", false, embed.Build());
        }
        protected override int InternalChooseBestTarget(List <ColossoFighter> targets)
        {
            friends ??= EnemyNames.Select(e => EnemiesDatabase.GetEnemy(e)).ToList();
            var deadFriends = targets.Where(s => friends.Any(f => f.Name.Equals(s.Name) && !s.IsAlive)).ToList();

            //Console.WriteLine($"{deadFriends.Count} dead targets.({targets.First().Name})");
            return(targets.IndexOf(deadFriends.Random()));
        }
示例#3
0
        public override List <string> Apply(ColossoFighter User, ColossoFighter Target)
        {
            List <string> log = new List <string>();

            if (EnemyNames.Select(e => EnemiesDatabase.GetEnemy(e)).ToList().Any(e => e.Name.Equals(Target.Name)))
            {
                log.Add($"{Target.Name} is {(Target.IsAlive ? "alive" : "dead")}");
                var Replacement = (NPCEnemy)EnemiesDatabase.GetEnemy(EnemyNames.Random()).Clone();
                Target.ReplaceWith(Replacement);
                log.Add($"{Target.Name} appears!");
            }
            return(log);
        }
示例#4
0
        public override List <string> Apply(ColossoFighter user, ColossoFighter target)
        {
            List <string> log = new();

            _friends ??= EnemyNames.Select(EnemiesDatabase.GetEnemy).ToList();
            if (!_friends.Any(e => e.Name.Equals(target.Name)))
            {
                return(log);
            }
            //log.Add($"{Target.Name} is {(Target.IsAlive ? "alive" : "dead")}");
            var replacement = (NpcEnemy)EnemiesDatabase.GetEnemy(EnemyNames.Random()).Clone();

            target.ReplaceWith(replacement);
            log.Add($"{target.Name} appears!");
            return(log);
        }
示例#5
0
    public void SetEnemy(EnemiesDatabase.enemy enemyType)
    {
        type  = enemyType;
        _name = EnemiesDatabase.GenerateName(enemyType);

        statsBase          = new DictionaryHolder();
        statsCurrent       = new DictionaryHolder();
        statsBase          = EnemiesDatabase.EnemyStats(enemyType);
        element            = EnemiesDatabase.GetElement(enemyType);
        statsCurrent       = statsBase;
        healthMax          = statsCurrent.health;
        healthCurrent      = healthMax;
        spellPointsMax     = statsCurrent.slime;
        spellPointsCurrent = spellPointsMax;

        expGiven = statsCurrent.expPool;
    }
示例#6
0
    private void DefendRoutine()
    {
        //randomizes between -1(basic attack) and skill count
        int randomSkill = 0;

        randomSkill = Random.Range(-1, EnemiesDatabase.EnemySkill(enemy.GetEnemyType()).Count);

        //deal damage
        if (randomSkill < 0)
        {
            //damage
            player.GetComponent <CharacterStats>().TakeDamage(enemy.BasicAttack(), DictionaryHolder.element.Neutral);

            //basic
            WriteToInfoLabel(string.Format("<color=purple>{0}</color> used Basic Attack. <color=red>{1}</color> damage.", enemy.GetComponent <Enemy>().GetEnemyName(), enemy.BasicAttack().ToString()));
        }
        else
        {
            if (enemy.CanUseSkill(EnemiesDatabase.EnemySkill(enemy.GetEnemyType())[randomSkill]))
            {
                //damage
                player.GetComponent <CharacterStats>().TakeDamage(enemy.GetComponent <Enemy>().SkillDamage(EnemiesDatabase.EnemySkill(enemy.GetEnemyType())[randomSkill]), EnemiesDatabase.EnemySkill(enemy.GetEnemyType())[randomSkill].GetElement());

                //skill
                WriteToInfoLabel(string.Format("<color=purple>{0}</color> uses <color=" + DictionaryHolder.ElementColor(EnemiesDatabase.EnemySkill(enemy.GetEnemyType())[randomSkill].GetElement()) + ">{1}</color> and deals <color=red>{2}</color> damage.", enemy.GetComponent <Enemy>().GetEnemyName(), EnemiesDatabase.EnemySkill(enemy.GetEnemyType())[randomSkill].GetName(), enemy.GetComponent <Enemy>().SkillDamage(EnemiesDatabase.EnemySkill(enemy.GetEnemyType())[randomSkill]).ToString()));

                //skill effect
                EnemiesDatabase.EnemySkill(enemy.GetEnemyType())[randomSkill].UseEffect();
            }
            else
            {
                //damage
                player.GetComponent <CharacterStats>().TakeDamage(enemy.BasicAttack(), DictionaryHolder.element.Neutral);

                //basic
                WriteToInfoLabel(string.Format("<color=purple>{0}</color> tried to use <color=gray>{1}</color>.\n<color=purple>{2}</color> used Basic Attack. <color=red>{3}</color> damage.", enemy.GetComponent <Enemy>().GetEnemyName(), EnemiesDatabase.EnemySkill(enemy.GetEnemyType())[randomSkill].GetName(), enemy.GetComponent <Enemy>().GetEnemyName(), enemy.BasicAttack().ToString()));
            }
        }
    }
示例#7
0
        public async Task ListDungeons()
        {
            var account                    = EntityConverter.ConvertUser(Context.User);
            var defaultDungeons            = EnemiesDatabase.DefaultDungeons.Where(d => !d.Requirement.IsLocked(account));
            var availableDefaultDungeons   = defaultDungeons.Where(d => d.Requirement.Applies(account)).Select(s => s.Name).ToArray();
            var unavailableDefaultDungeons = defaultDungeons.Where(d => !d.Requirement.Applies(account)).Select(s => s.Name).ToArray();

            var unlockedDungeons     = account.Dungeons.Where(s => EnemiesDatabase.HasDungeon(s)).Select(s => EnemiesDatabase.GetDungeon(s)).Where(d => !d.Requirement.IsLocked(account));
            var availablePermUnlocks = availableDefaultDungeons
                                       .Concat(unlockedDungeons.Where(d =>
                                                                      !d.IsOneTimeOnly &&
                                                                      d.Requirement.FulfilledRequirements(account))
                                               .Select(s => s.Name)
                                               .ToArray());
            var unavailablePermUnlocks = unavailableDefaultDungeons
                                         .Concat(unlockedDungeons.Where(d =>
                                                                        !d.IsOneTimeOnly &&
                                                                        !d.Requirement.FulfilledRequirements(account))
                                                 .Select(s => s.Name)
                                                 .ToArray());

            var availableOneTimeUnlocks   = unlockedDungeons.Where(d => d.IsOneTimeOnly && d.Requirement.FulfilledRequirements(account)).Select(s => s.Name).ToArray();
            var unavailableOneTimeUnlocks = unlockedDungeons.Where(d => d.IsOneTimeOnly && !d.Requirement.FulfilledRequirements(account)).Select(s => s.Name).ToArray();

            var embed = new EmbedBuilder();

            embed.WithTitle("Dungeons");

            if (availablePermUnlocks.Count() > 0)
            {
                embed.AddField("<:mapopen:606236181503410176> Places Discovered", $"Available: {string.Join(", ", availablePermUnlocks)} \nUnavailable: {string.Join(", ", unavailablePermUnlocks)}");
            }
            if (availableOneTimeUnlocks.Count() + unavailableOneTimeUnlocks.Count() > 0)
            {
                embed.AddField("<:cave:607402486562684944> Dungeon Keys", $"Available: {string.Join(", ", availableOneTimeUnlocks)} \nUnavailable: {string.Join(", ", unavailableOneTimeUnlocks)}");
            }
            await Context.Channel.SendMessageAsync("", false, embed.Build());
        }
示例#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.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));
        }
示例#9
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));
        }
 protected override bool InternalValidSelection(ColossoFighter user)
 {
     friends ??= EnemyNames.Select(e => EnemiesDatabase.GetEnemy(e)).ToList();
     return(user.GetTeam().Any(s => friends.Any(f => f.Name.Equals(s.Name) && !s.IsAlive)));
 }