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; } }
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); }
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; } }
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); }
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."); } }
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 }); } }
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); }
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; }