示例#1
0
                public override async Task Call(Card caller, GameHandler gameHandler, ulong curPlayer, ulong enemy, ExtraEffectInfo extraInf)
                {
                    if (extraInf.calledEffect == EffectType.AfterThisAttacks)
                    {
                        if (enemyAttack && !myAttack)
                        {
                            var attackInfo = new ExtraEffectInfo.DamageInfo(extraInf.ctx, 4,
                                                                            $"{gameHandler.players[curPlayer].name}'s Power Glove triggers, dealing 4 damage, ");

                            await gameHandler.players[enemy].TakeDamage(gameHandler, curPlayer, enemy, attackInfo);

                            var info = extraInf as ExtraEffectInfo.AfterAttackInfo;
                            info.output.Add(attackInfo.output);
                        }
                        myAttack = true;
                    }
                    else if (extraInf.calledEffect == EffectType.AfterTheEnemyAttacks)
                    {
                        if (myAttack && !enemyAttack)
                        {
                            var attackInfo = new ExtraEffectInfo.DamageInfo(extraInf.ctx, 4,
                                                                            $"{gameHandler.players[curPlayer].name}'s Power Glove triggers, dealing 4 damage, ");

                            await gameHandler.players[enemy].TakeDamage(gameHandler, curPlayer, enemy, attackInfo);

                            var info = extraInf as ExtraEffectInfo.AfterAttackInfo;
                            info.output.Add(attackInfo.output);
                        }
                        enemyAttack = true;
                    }
                }
示例#2
0
                public override async Task Call(Card caller, GameHandler gameHandler, ulong curPlayer, ulong enemy, ExtraEffectInfo extraInf)
                {
                    List <Card> list = CardsFilter.FilterList <Card>(gameHandler.players[curPlayer].playHistory, x => x.name.Contains("Venture Co."));

                    var info = new ExtraEffectInfo.DamageInfo(extraInf.ctx, 3 * list.Count(), $"{gameHandler.players[curPlayer].name}'s Venture Co. Flamethrower deals {2 * list.Count()} damage, ");

                    await gameHandler.players[enemy].TakeDamage(gameHandler, curPlayer, enemy, info);

                    var SOCinfo = extraInf as ExtraEffectInfo.StartOfCombatInfo;

                    SOCinfo.output.Add(info.output);
                }
示例#3
0
                public override async Task Call(Card caller, GameHandler gameHandler, ulong curPlayer, ulong enemy, ExtraEffectInfo extraInf)
                {
                    if (gameHandler.players[curPlayer].creatureData.health <= 5)
                    {
                        ExtraEffectInfo.DamageInfo damageInfo = new ExtraEffectInfo.DamageInfo(extraInf.ctx, 10, $"{gameHandler.players[curPlayer].name}'s Panic Button triggers, dealing 10 damage, ");
                        await gameHandler.players[enemy].TakeDamage(gameHandler, curPlayer, enemy, damageInfo);

                        var info = extraInf as ExtraEffectInfo.AfterAttackInfo;
                        info.output.Add(damageInfo.output);

                        this._toBeRemoved = true;
                    }
                }
示例#4
0
                public override async Task Call(Card caller, GameHandler gameHandler, ulong curPlayer, ulong enemy, ExtraEffectInfo extraInf)
                {
                    var info = extraInf as ExtraEffectInfo.StartOfCombatInfo;

                    var dmgInfo = new ExtraEffectInfo.DamageInfo(extraInf.ctx, 1, $"{gameHandler.players[curPlayer].name}'s Silicon Grenade Belt deals 1 damage, ");
                    await gameHandler.players[enemy].TakeDamage(gameHandler, curPlayer, enemy, dmgInfo);

                    info.output.Add(dmgInfo.output);

                    dmgInfo = new ExtraEffectInfo.DamageInfo(extraInf.ctx, 1, $"{gameHandler.players[curPlayer].name}'s Silicon Grenade Belt deals 1 damage, ");
                    await gameHandler.players[enemy].TakeDamage(gameHandler, curPlayer, enemy, dmgInfo);

                    info.output.Add(dmgInfo.output);
                }
示例#5
0
                public override async Task Call(Card caller, GameHandler gameHandler, ulong curPlayer, ulong enemy, ExtraEffectInfo extraInf)
                {
                    var info = extraInf as ExtraEffectInfo.StartOfCombatInfo;

                    if (gameHandler.players[curPlayer].overloaded > 0 || gameHandler.players[curPlayer].creatureData.staticKeywords[StaticKeyword.Overload] > 1)
                    {
                        var dmgInfo = new ExtraEffectInfo.DamageInfo(extraInf.ctx, 10, $"{gameHandler.players[curPlayer].name}'s Mass Accelerator triggers, dealing 10 damage, ");
                        await gameHandler.players[enemy].TakeDamage(gameHandler, curPlayer, enemy, dmgInfo);
                        info.output.Add(dmgInfo.output);
                    }
                    else
                    {
                        info.output.Add($"{gameHandler.players[curPlayer].name}'s Mass Accelerator failed to trigger.");
                    }
                }
示例#6
0
                public override async Task Call(Card caller, GameHandler gameHandler, ulong curPlayer, ulong enemy, ExtraEffectInfo extraInf)
                {
                    if (extraInf.calledEffect == EffectType.OnBuyingAMech)
                    {
                        this.dmg       += 2;
                        this.effectText = $"Permanent Start of Combat: Deal {this.dmg} damage to the enemy Mech. Improved by 2 after you buy an Upgrade.";
                    }
                    else if (extraInf.calledEffect == EffectType.StartOfCombat)
                    {
                        var info = extraInf as ExtraEffectInfo.StartOfCombatInfo;

                        var dmgInfo = new ExtraEffectInfo.DamageInfo(extraInf.ctx, this.dmg, $"{gameHandler.players[curPlayer].name}'s Pulsefire Ultracannon deals {this.dmg} damage, ");
                        await gameHandler.players[enemy].TakeDamage(gameHandler, curPlayer, enemy, dmgInfo);
                        info.output.Add(dmgInfo.output);
                    }
                    else if (extraInf.calledEffect == EffectType.AftermathMe)
                    {
                        gameHandler.players[curPlayer].nextRoundEffects.Add(new PulsefireEffect {
                            dmg = this.dmg
                        });
                    }
                }
示例#7
0
        public async Task <ExtraEffectInfo.DamageInfo> AttackMech(GameHandler gameHandler, ulong attacker, ulong defender, CommandContext ctx)
        {
            ExtraEffectInfo.DamageInfo damageInfo = new ExtraEffectInfo.DamageInfo(
                ctx, this.creatureData.attack, $"{this.name} attacks for {this.creatureData.attack} damage, ");

            if (this.creatureData.staticKeywords[StaticKeyword.Spikes] > 0 && !gameHandler.players[defender].specificEffects.ignoreSpikes)
            {
                damageInfo.dmg    += this.creatureData.staticKeywords[StaticKeyword.Spikes];
                damageInfo.output += $"increased to {damageInfo.dmg} by Spikes, ";
            }

            if (gameHandler.players[defender].creatureData.staticKeywords[StaticKeyword.Shields] > 0 && !this.specificEffects.ignoreShields)
            {
                damageInfo.dmg -= gameHandler.players[defender].creatureData.staticKeywords[StaticKeyword.Shields];
                if (damageInfo.dmg < 0)
                {
                    damageInfo.dmg = 0;
                }
                gameHandler.players[defender].creatureData.staticKeywords[StaticKeyword.Shields] = 0;

                if (this.creatureData.staticKeywords[StaticKeyword.Spikes] > 0)
                {
                    damageInfo.output = $"{this.name} attacks for {this.creatureData.attack} damage, adjusted to {damageInfo.dmg} by Spikes and Shields, ";
                }
                else
                {
                    damageInfo.output += $"reduced to {damageInfo.dmg} by Shields, ";
                }
            }

            if (!gameHandler.players[defender].specificEffects.ignoreSpikes)
            {
                this.creatureData.staticKeywords[StaticKeyword.Spikes] = 0;
            }

            await gameHandler.players[defender].TakeDamage(gameHandler, attacker, defender, damageInfo);

            return(damageInfo);
        }
示例#8
0
        public async Task TakeDamage(GameHandler gameHandler, ulong attacker, ulong defender, ExtraEffectInfo.DamageInfo damageInfo)
        {
            damageInfo.calledEffect = Effect.EffectType.BeforeTakingDamage;
            await Effect.CallEffects(this.effects, Effect.EffectType.BeforeTakingDamage, null, gameHandler, defender, attacker, damageInfo);

            this.creatureData.health -= damageInfo.dmg;

            if (this.creatureData.health > 0)
            {
                damageInfo.output += $"reducing {this.name} to {this.creatureData.health} Health.";
            }
            else
            {
                this.destroyed     = true;
                damageInfo.output += $"destroying {this.name}.";
                //gameHandler.combatOutputCollector.combatHeader.Add(msg);
                //return damage;
                return;
            }

            //Console.WriteLine("Called: " + msg);
            //gameHandler.combatOutputCollector.combatHeader.Add(msg);

            if (damageInfo.dmg > 0)
            {
                if (gameHandler.players[attacker].creatureData.staticKeywords[StaticKeyword.Poisonous] > 0)
                {
                    this.destroyed = true;
                    //gameHandler.combatOutputCollector.combatHeader.Add($"{gameHandler.players[attacker].name}'s Poisonous destroys {this.name}.");

                    //return damage;
                    return;
                }

                damageInfo.calledEffect = Effect.EffectType.AfterTheEnemyAttacks;
                await Effect.CallEffects(this.effects, Effect.EffectType.AfterThisTakesDamage, null, gameHandler, defender, attacker, damageInfo);
            }

            //return damage;
            return;
        }