Exemplo n.º 1
0
        public static async Task RemovePlayerFromCombat(CombatInstance inst, UserAccount player)
        {
            var team = inst.GetTeam(player);

            inst.Players.Remove(player);

            var       turnskip = false;
            BasicCard skipCard = null;

            foreach (BasicCard card in player.ActiveCards)
            {
                //Remove any markers corresponding to the cards to be removed from combat
                var turnnum = inst.CardList.IndexOf(card);
                foreach (BasicCard card2 in inst.CardList)
                {
                    for (int i = card2.Markers.Count - 1; i >= 0; i--)
                    {
                        if (card2.Markers[i].OriginTurnNum == turnnum)
                        {
                            card2.Markers.RemoveAt(i);
                        }
                    }
                }

                inst.CardList.Remove(card);

                if (turnnum <= inst.TurnNumber)
                {
                    inst.TurnNumber--;
                }
                if (card.IsTurn)
                {
                    turnskip = true;
                    skipCard = card;
                }
            }

            inst.GetTeam(player).Members.Remove(player);
            player.ResetCombatFields(inst.IsDuel);

            await inst.PassiveUpdatePlayerLeft();

            await MessageHandler.UserForfeitsCombat(inst.Location, player);

            if (inst.IsDuel)
            {
                await CheckTeamElimination(inst, team);
            }

            if (turnskip)
            {
                await SkipTurn(inst, skipCard);
            }

            SaveInstances();
        }
Exemplo n.º 2
0
        public override async Task MoveEffect(CombatInstance inst, List <BasicCard> targets)
        {
            foreach (BasicCard card in targets)
            {
                List <int> rolls = RandomGen.RollDice(10, 7, true);
                await MessageHandler.DiceThrow(inst.Location, "10d7!", rolls);

                int damage = 0;

                foreach (int roll in rolls)
                {
                    damage += roll;
                }

                damage = inst.GetCardTurn().ApplyDamageBuffs(damage);
                var damages     = card.TakeDamage(damage);
                var finalDamage = damages[0];

                await MessageHandler.SendMessage(inst.Location, $"{inst.GetCardTurn().Signature} shakes their tail at {card.Signature}! Their life was drained from them! {card.DamageTakenString(damages)}");

                var heal = finalDamage * 3;
                heal = inst.GetCardTurn().ApplyHealingBuffs(heal, true);

                var team = inst.GetTeam(inst.GetCardTurn()).Members;
                var rem  = heal % team.Count;
                foreach (UserAccount teammate in inst.GetTeam(inst.GetCardTurn()).Members)
                {
                    foreach (BasicCard teamCard in teammate.ActiveCards)
                    {
                        if (!teamCard.Dead)
                        {
                            var teamheal = (int)Math.Floor((double)heal / team.Count);
                            if (rem > 0)
                            {
                                rem--;
                                teamheal++;
                            }

                            teamCard.Heal(teamheal, true);
                            await MessageHandler.SendMessage(inst.Location, $"{teamCard.Signature} healed for {teamheal} HP.");
                        }
                    }
                }

                await MessageHandler.SendMessage(inst.Location, $"{inst.GetCardTurn().Signature} healed the party for a total of {heal} HP!");
            }

            OnCooldown      = true;
            CurrentCooldown = Cooldown;
            inst.GetCardTurn().Actions--;
        }
Exemplo n.º 3
0
        public override async Task MoveEffect(CombatInstance inst)
        {
            int damage = 20;

            damage = inst.GetCardTurn().ApplyDamageBuffs(damage);
            string str      = "";
            var    totalDam = 0;

            foreach (Team team in inst.Teams)
            {
                if (team.TeamNum != inst.GetTeam(inst.GetCardTurn()).TeamNum)
                {
                    foreach (UserAccount user in team.Members)
                    {
                        foreach (BasicCard card in user.ActiveCards)
                        {
                            var tempDam = card.TakeDamage(damage);
                            totalDam += tempDam[0];
                            str      += $"\n{card.DamageTakenString(tempDam)}";
                        }
                    }
                }
            }

            await MessageHandler.SendMessage(inst.Location, $"{inst.GetCardTurn().Signature} rushes the enemy team!{str}\n{inst.GetCardTurn().Signature} dealt a total of {totalDam}");

            OnCooldown      = true;
            CurrentCooldown = Cooldown;
            inst.GetCardTurn().Actions--;
        }
Exemplo n.º 4
0
        public override async Task MoveEffect(CombatInstance inst)
        {
            int damage = 25;

            damage = inst.GetCardTurn().ApplyDamageBuffs(damage);

            string str      = "";
            var    totalDam = 0;

            foreach (Team team in inst.Teams)
            {
                if (team.TeamNum != inst.GetTeam(inst.GetCardTurn()).TeamNum)
                {
                    foreach (UserAccount user in team.Members)
                    {
                        foreach (BasicCard card in user.ActiveCards)
                        {
                            var tempDams = card.TakeDamage(damage);
                            totalDam += tempDams[0];
                            str      += $"\n{card.DamageTakenString(tempDams)}";
                        }
                    }
                }
            }

            await MessageHandler.SendMessage(inst.Location, $"{inst.GetCardTurn().Signature} swipes using their tail!{str}\n{inst.GetCardTurn().Signature} dealt a total of {totalDam} damage.");

            inst.GetCardTurn().Actions--;
        }
Exemplo n.º 5
0
        public override async Task MoveEffect(CombatInstance inst)
        {
            foreach (UserAccount user in inst.GetTeam(UserHandler.GetUser(inst.GetCardTurn().Owner)).Members)
            {
                foreach (BasicCard card in user.ActiveCards)
                {
                    BuffDebuff buff = new BuffDebuff()
                    {
                        Name           = $"Stalwart Soul",
                        Buff           = true,
                        Origin         = $"({inst.GetCardTurn().Signature})",
                        Description    = "All damage nullified.",
                        DefenseSetBuff = 0,
                        Rounds         = 2
                    };

                    card.Effects.Add(buff);
                }
            }

            await MessageHandler.SendMessage(inst.Location, $"{inst.GetCardTurn().Signature} fortifies the party against all damage!");

            inst.GetCardTurn().Actions--;
            OnCooldown      = true;
            CurrentCooldown = Cooldown;
        }
Exemplo n.º 6
0
        public override async Task MoveEffect(CombatInstance inst)
        {
            foreach (UserAccount user in inst.GetTeam(UserHandler.GetUser(inst.GetCardTurn().Owner)).Members)
            {
                foreach (BasicCard card in user.ActiveCards)
                {
                    if (card.Owner != inst.GetCardTurn().Owner)
                    {
                        BuffDebuff buff = new BuffDebuff()
                        {
                            Name               = "Hair Raise",
                            Buff               = true,
                            Origin             = $"({inst.GetCardTurn().Signature})",
                            Description        = "Untargetable and take 25% less damage.",
                            DefensePercentBuff = 0.25,
                            Untargetable       = true,
                            Rounds             = 2
                        };

                        card.Effects.Add(buff);
                    }
                }
            }

            await MessageHandler.SendMessage(inst.Location, $"{inst.GetCardTurn().Signature} alerts the party to danger! All other party members are untargetable for 2 rounds and take 25% less damage.");

            OnCooldown      = true;
            CurrentCooldown = Cooldown;
            inst.GetCardTurn().Actions--;
        }
Exemplo n.º 7
0
        public override async Task MoveEffect(CombatInstance inst)
        {
            List <int> rolls = RandomGen.RollDice(4, 20);
            string     str   = "";

            int damage = 0;

            foreach (int roll in rolls)
            {
                damage += roll;
            }

            damage = inst.GetCardTurn().ApplyDamageBuffs(damage);

            foreach (Team team in inst.Teams)
            {
                if (team.TeamNum != inst.GetTeam(inst.GetCardTurn()).TeamNum)
                {
                    foreach (UserAccount user in team.Members)
                    {
                        foreach (BasicCard card in user.ActiveCards)
                        {
                            var latchDmg = 1.0;

                            if (card.SearchForMarker(inst.TurnNumber) != null)
                            {
                                latchDmg = 1.5;
                                str      = $"\n{inst.GetCardTurn().Signature} dismounts from {card.Signature}, dealing 50% more damage!";
                                for (int i = card.Markers.Count - 1; i >= 0; i--)
                                {
                                    if (card.Markers[i].OriginTurnNum == inst.TurnNumber)
                                    {
                                        card.Markers.RemoveAt(i);
                                    }
                                }
                            }

                            var tempDam = card.TakeDamage((int)(damage * latchDmg));
                            str += $"\n{card.DamageTakenString(tempDam)}";
                        }
                    }
                }
            }

            await MessageHandler.DiceThrow(inst.Location, "4d20", rolls);

            await MessageHandler.SendMessage(inst.Location, $"{inst.GetCardTurn().Signature} hits the enemy team with a powerful gust of wind!{str}");

            OnCooldown      = true;
            CurrentCooldown = Cooldown;
            inst.GetCardTurn().Actions--;
        }
Exemplo n.º 8
0
        public override async Task MoveEffect(CombatInstance inst, List <BasicCard> targets)
        {
            string str = "The king is raising the dead!";

            foreach (BasicCard card in targets)
            {
                if (card.Dead)
                {
                    if (inst.GetTeam(card).TeamNum == inst.GetTeam(inst.GetCardTurn()).TeamNum)
                    {
                        card.Dead      = false;
                        card.CurrentHP = card.TotalHP / 2;

                        str += $"\n{card.Signature} has risen!";
                    }
                    else
                    {
                        await MessageHandler.SendMessage(inst.Location, $"MOVE FAILED! You must target players on your team!");

                        return;
                    }
                }
                else
                {
                    await MessageHandler.SendMessage(inst.Location, $"MOVE FAILED! One or more players are not dead!");

                    return;
                }
            }

            await MessageHandler.SendMessage(inst.Location, $"{str}");

            OnCooldown      = true;
            CurrentCooldown = Cooldown;
            inst.GetCardTurn().Actions--;
        }
Exemplo n.º 9
0
        public static async Task CheckPlayerDeath(CombatInstance inst)
        {
            foreach (BasicCard card in inst.CardList)
            {
                if (!card.Dead && card.CurrentHP <= 0)
                {
                    card.Dead = true;
                    card.RemoveAllBuffs();
                    await MessageHandler.SendMessage(inst.Location, card.GetDeathMessage());

                    card.Death();
                    await CheckTeamElimination(inst, inst.GetTeam(card));
                }
            }
        }
Exemplo n.º 10
0
        public override void Update(CombatInstance inst, BasicCard owner)
        {
            var playerCount = -1;

            foreach (UserAccount user in inst.GetTeam(inst.GetCardTurn()).Members)
            {
                foreach (BasicCard allyCard in user.ActiveCards)
                {
                    playerCount++;
                }
            }

            eff.DamagePercentBuff = 0.05 * playerCount;

            Status = $"Currently at **{eff.DamagePercentBuff*100.0}%** bonus damage.";
        }
Exemplo n.º 11
0
        public override async Task MoveEffect(CombatInstance inst)
        {
            List <int> rolls  = RandomGen.RollDice(20, 3, true);
            int        damage = 0;

            foreach (int roll in rolls)
            {
                damage += roll;
            }
            damage = inst.GetCardTurn().ApplyDamageBuffs(damage);

            await MessageHandler.DiceThrow(inst.Location, "20d3!", rolls);

            string str      = "";
            var    totalDam = 0;

            foreach (Team team in inst.Teams)
            {
                if (team.TeamNum != inst.GetTeam(inst.GetCardTurn()).TeamNum)
                {
                    foreach (UserAccount user in team.Members)
                    {
                        foreach (BasicCard card in user.ActiveCards)
                        {
                            var tempDams = card.TakeDamage(damage);
                            totalDam += tempDams[0];
                            str      += $"\n{card.DamageTakenString(tempDams)} Their next attack reduced by 50%";
                            card.AddBuff(new BuffDebuff()
                            {
                                Name                = $"Sticky",
                                Buff                = false,
                                Origin              = $"({inst.GetCardTurn().Signature})",
                                Description         = "Sticky syrup got on you! Your next attack is reduced by 50%",
                                DamagePercentDebuff = 0.5,
                                Attacks             = 1
                            });
                        }
                    }
                }
            }

            await MessageHandler.SendMessage(inst.Location, $"{inst.GetCardTurn().Signature} unleashes an avalanche of syrup!{str}\n{inst.GetCardTurn().Signature} dealt a total of {totalDam} damage.");

            OnCooldown      = true;
            CurrentCooldown = Cooldown;
            inst.GetCardTurn().Actions--;
        }
Exemplo n.º 12
0
        public override async Task UpdateAsync(CombatInstance inst, BasicCard owner)
        {
            if (inst.RoundNumber != 1)
            {
                BasicCard lowest   = null;
                var       lowestHP = 1.0;
                foreach (UserAccount teammate in inst.GetTeam(owner).Members)
                {
                    foreach (BasicCard card in teammate.ActiveCards)
                    {
                        if (card.HPPercentage() < lowestHP && !card.Dead && card.Owner != owner.Owner)
                        {
                            Console.WriteLine($"{card.HPPercentage()}% health detected");
                            lowestHP = card.HPPercentage();
                            lowest   = card;
                        }
                    }
                }

                if (lowestHP < 1.0 && lowest != null)
                {
                    var heal = 10;
                    heal          = owner.ApplyHealingBuffs(heal, false);
                    heal          = lowest.Heal(heal, false);
                    eff.Extra[0] += heal;
                    Status        = $"Healed a total of {eff.Extra[0]} HP.";

                    await MessageHandler.SendMessage(inst.Location, $"{owner.Signature} gives {lowest.Signature} a spare carrot! They restore {heal} HP.");
                }
                else
                {
                    //Nobody needed healing
                    await MessageHandler.SendMessage(inst.Location, $"{owner.Signature} has a spare carrot but nobody needed healing!");
                }
            }
        }
Exemplo n.º 13
0
        public override async Task UpdateAsync(CombatInstance inst, BasicCard owner)
        {
            if (inst.RoundNumber != 1)
            {
                Console.WriteLine("A");
                var cute   = 0;
                var fluffy = 0;
                var speedy = 0;
                foreach (UserAccount teammate in inst.GetTeam(owner).Members)
                {
                    foreach (BasicCard card in teammate.ActiveCards)
                    {
                        if (card.Name.Equals("Cute Bunny"))
                        {
                            cute++;
                        }
                        if (card.Name.Equals("Fluffy Angora"))
                        {
                            fluffy++;
                        }
                        if (card.Name.Equals("Speedy Hare"))
                        {
                            speedy++;
                        }
                    }
                }

                if (cute > 0)
                {
                    var success = RandomGen.PercentChance(15 * cute);
                    if (success && owner.CurrentHP < owner.TotalHP)
                    {
                        var heal = 5;
                        heal          = owner.ApplyHealingBuffs(heal, false);
                        heal          = owner.Heal(heal, false);
                        eff.Extra[0] += heal;
                        Status        = $"Healed a total of **{eff.Extra[0]}** HP.\nGained a total of **{eff.Extra[1]}** light shields.\nTotal of **{eff.Extra[2]}** bonus attack damage.";

                        await MessageHandler.SendMessage(inst.Location, $"**(Herd Leader)** {owner.Signature} gained **{heal}** health from **{cute}** Cute Bunnies");
                    }
                }

                if (fluffy > 0)
                {
                    var success = RandomGen.PercentChance(15 * fluffy);
                    if (success)
                    {
                        owner.AddBuff(new BuffDebuff()
                        {
                            Name        = "Herd Shielding",
                            Buff        = true,
                            Origin      = $"(Passive)",
                            Description = $"The herd shields you! You gain 1 light shield.",
                            ShieldOnly  = true,
                            LightShield = 1
                        });
                        eff.Extra[1]++;
                        Status = $"Healed a total of **{eff.Extra[0]}** HP.\nGained a total of **{eff.Extra[1]}** light shields.\nTotal of **{eff.Extra[2]}** bonus attack damage.";

                        await MessageHandler.SendMessage(inst.Location, $"**(Herd Leader)** {owner.Signature} gained **1 light shield** from **{fluffy}** Fluffy Angora");
                    }
                }

                if (speedy > 0)
                {
                    var success = RandomGen.PercentChance(15 * speedy);
                    if (success)
                    {
                        eff.DamageStaticBuff++;
                        eff.Extra[2] = eff.DamageStaticBuff;

                        Status = $"Healed a total of **{eff.Extra[0]}** HP.\nGained a total of **{eff.Extra[1]}** light shields.\nTotal of **{eff.Extra[2]}** bonus attack damage.";

                        await MessageHandler.SendMessage(inst.Location, $"**(Herd Leader)** {owner.Signature} gained **1 permanent bonus damage** from **{speedy}** Fluffy Angora");
                    }
                }

                Console.WriteLine("B");
            }
        }