public static async Task <Upgrade> FreezeUpgradeInShopAsync(GameHandler gameHandler, ulong curPlayer, ulong enemy, CommandContext ctx, int freezeAmount = 1) { if (gameHandler.players[curPlayer].shop.OptionsCount() == 0) { return(new BlankUpgrade()); } string defaultAns = (gameHandler.players[curPlayer].shop.GetRandomUpgradeIndex() + 1).ToString(); PlayerInteraction interaction = new PlayerInteraction("Choose an Upgrade in your shop to Freeze", string.Empty, "Write the corresponding index"); string ret = await interaction.SendInteractionAsync(gameHandler, curPlayer, PlayerInteraction.CheckValidShopUpgradeIndex, defaultAns, ctx); if (ret == string.Empty) { return(new BlankUpgrade()); } int pos = int.Parse(ret) - 1; Upgrade chosen = gameHandler.players[curPlayer].shop.At(pos); chosen.creatureData.staticKeywords[StaticKeyword.Freeze] = Math.Max(freezeAmount, chosen.creatureData.staticKeywords[StaticKeyword.Freeze]); //chosen.OnBeingFrozen(gameHandler, curPlayer, enemy); var generalInfo = new ExtraEffectInfo(ctx); await Effect.CallEffects(chosen.effects, Effect.EffectType.OnBeingFrozen, chosen, gameHandler, curPlayer, enemy, generalInfo); return(chosen); }
public async Task NextRound(Room room, CommandContext ctx) { Console.WriteLine("Frog1"); this.currentRound++; this.pairsHandler.NextRoundPairs(this); this.amountReady = 0; Console.WriteLine("Frog2"); int newMana = Math.Max(0, Math.Min(5, this.gameSettings.maxManaCap - this.curMaxMana)); this.curMaxMana += newMana; Console.WriteLine("Frog3"); foreach (var player in this.players) { player.Value.aftermathMessages.Clear(); player.Value.maxMana += newMana; player.Value.shop.Refresh(this, player.Value.pool, player.Value.maxMana); player.Value.overloaded = player.Value.creatureData.staticKeywords[Cards.StaticKeyword.Overload]; player.Value.curMana = Math.Max(0, player.Value.maxMana - player.Value.overloaded); player.Value.ready = false; player.Value.playHistory.Add(new List <Cards.Card>()); player.Value.buyHistory.Add(new List <Cards.Upgrade>()); player.Value.creatureData.InitStaticKeywordsDictionary(); } Console.WriteLine("Frog4"); foreach (var player in this.players) { ExtraEffectInfo aftermathMeInfo = new ExtraEffectInfo(ctx); await Effect.CallEffects(player.Value.effects, Effect.EffectType.AftermathMe, null, this, player.Key, this.pairsHandler.opponents[player.Key], aftermathMeInfo); } Console.WriteLine("Frog5"); foreach (var player in this.players) { ExtraEffectInfo aftermathEnemyInfo = new ExtraEffectInfo(ctx); await Effect.CallEffects(player.Value.effects, Effect.EffectType.AftermathEnemy, null, this, player.Key, this.pairsHandler.opponents[player.Key], aftermathEnemyInfo); } Console.WriteLine("Frog6"); foreach (var player in this.players) { player.Value.effects = player.Value.nextRoundEffects; player.Value.nextRoundEffects = new List <Effect>(); } Console.WriteLine("Frog7"); foreach (var player in this.players) { player.Value.attachedUpgrades.Clear(); player.Value.hand.RemoveAllBlankUpgrades(); player.Value.specificEffects = new SpecificEffects(); } Console.WriteLine("Frog8"); }
public virtual async Task <bool> BuyCard(int shopPos, GameHandler gameHandler, ulong curPlayer, ulong enemy, CommandContext ctx) { gameHandler.players[curPlayer].curMana -= this.Cost; ExtraEffectInfo extraInf = new ExtraEffectInfo(ctx); await Effect.CallEffects(gameHandler.players[curPlayer].effects, Effect.EffectType.OnBuyingAMech, this, gameHandler, curPlayer, enemy, extraInf); await gameHandler.players[curPlayer].AttachMech(this, gameHandler, curPlayer, enemy, ctx); return(true); }
public override async Task CastOnUpgradeInShop(int shopPos, GameHandler gameHandler, ulong curPlayer, ulong enemy, CommandContext ctx) { Upgrade u = gameHandler.players[curPlayer].shop.At(shopPos); u.creatureData.attack += 4; u.creatureData.health += 4; u.creatureData.staticKeywords[StaticKeyword.Freeze] = Math.Max(1, u.creatureData.staticKeywords[StaticKeyword.Freeze]); var generalInfo = new ExtraEffectInfo(ctx); await Effect.CallEffects(u.effects, Effect.EffectType.OnBeingFrozen, u, gameHandler, curPlayer, enemy, generalInfo); }
public async Task AttachMech(Upgrade mech, GameHandler gameHandler, ulong curPlayer, ulong enemy, CommandContext ctx) { ExtraEffectInfo extraInf = new ExtraEffectInfo(ctx); await Effect.CallEffects(mech.effects, Effect.EffectType.OnPlay, mech, gameHandler, curPlayer, enemy, extraInf); if (mech.creatureData.staticKeywords[StaticKeyword.Magnetic] > 0) { for (int i = 0; i < mech.creatureData.staticKeywords[StaticKeyword.Magnetic]; i++) { await PlayerInteraction.ActivateMagneticAsync(gameHandler, curPlayer, enemy, ctx); } } if (mech.creatureData.staticKeywords[StaticKeyword.Echo] > 0) { gameHandler.players[curPlayer].shop.AddUpgrade(mech.BasicCopy(gameHandler.players[curPlayer].pool)); } if (mech.creatureData.staticKeywords[StaticKeyword.Binary] > 0) { mech.creatureData.staticKeywords[StaticKeyword.Binary]--; Upgrade binaryLessCopy = mech.BasicCopy(gameHandler.players[curPlayer].pool); binaryLessCopy.cardText += " (No Binary)"; binaryLessCopy.creatureData.staticKeywords[StaticKeyword.Binary]--; //the copy should have basic stats gameHandler.players[curPlayer].hand.AddCard(binaryLessCopy); } mech.creatureData.staticKeywords[StaticKeyword.Binary] = 0; this.creatureData += mech.creatureData; this.creatureData.staticKeywords[StaticKeyword.Echo] = 0; this.creatureData.staticKeywords[StaticKeyword.Magnetic] = 0; this.creatureData.staticKeywords[StaticKeyword.Freeze] = 0; this.creatureData.staticKeywords[StaticKeyword.Binary] = 0; //await mech.Battlecry(gameHandler, curPlayer, enemy); await Effect.CallEffects(mech.effects, Effect.EffectType.Battlecry, mech, gameHandler, curPlayer, enemy, extraInf); if (gameHandler.players[curPlayer].playHistory[gameHandler.players[curPlayer].playHistory.Count() - 1].Count() > 0) { await Effect.CallEffects(mech.effects, Effect.EffectType.Combo, mech, gameHandler, curPlayer, enemy, extraInf); } this.attachedUpgrades.Add((Upgrade)mech.DeepCopy()); foreach (var upgradeEffect in mech.effects) { this.effects.Add(upgradeEffect.Copy()); } }
public override async Task <bool> PlayCard(int handPos, GameHandler gameHandler, ulong curPlayer, ulong enemy, CommandContext ctx) { gameHandler.players[curPlayer].curMana -= this.Cost; ExtraEffectInfo extraInf = new ExtraEffectInfo(ctx); await Effect.CallEffects(this.effects, Effect.EffectType.OnPlay, this, gameHandler, curPlayer, enemy, extraInf); await Effect.CallEffects(gameHandler.players[curPlayer].effects, Effect.EffectType.OnSpellCast, this, gameHandler, curPlayer, enemy, extraInf); await Effect.CallEffects(gameHandler.players[curPlayer].effects, Effect.EffectType.Spellburst, this, gameHandler, curPlayer, enemy, extraInf, true); return(true); }
public override async Task <bool> BuyCard(int shopPos, GameHandler gameHandler, ulong curPlayer, ulong enemy, CommandContext ctx) { if (gameHandler.players[curPlayer].buyHistory.Last().Count == 0) { return(await base.BuyCard(shopPos, gameHandler, curPlayer, enemy, ctx)); } if (gameHandler.players[curPlayer].buyHistory.Last().Last().name == "Morphing Nanoswarm" || gameHandler.players[curPlayer].buyHistory.Last().Last().name == this.name) { return(await base.BuyCard(shopPos, gameHandler, curPlayer, enemy, ctx)); } Upgrade u = gameHandler.players[curPlayer].buyHistory.Last().Last(); gameHandler.players[curPlayer].curMana -= u.Cost; ExtraEffectInfo extraInf = new ExtraEffectInfo(ctx); await Effect.CallEffects(gameHandler.players[curPlayer].effects, Effect.EffectType.OnBuyingAMech, u, gameHandler, curPlayer, enemy, extraInf); await gameHandler.players[curPlayer].AttachMech(u, gameHandler, curPlayer, enemy, ctx); return(true); }
public override Task Call(Card caller, GameHandler gameHandler, ulong curPlayer, ulong enemy, ExtraEffectInfo extraInf) { List <int> handIndexes = gameHandler.players[curPlayer].hand.GetAllCardIndexes(); for (int i = 0; i < handIndexes.Count(); i++) { if (Attribute.IsDefined(gameHandler.players[curPlayer].hand.At(handIndexes[i]).GetType(), typeof(SparePartAttribute))) { gameHandler.players[curPlayer].hand.RemoveCard(handIndexes[i]); gameHandler.players[curPlayer].creatureData.attack += 3; gameHandler.players[curPlayer].creatureData.health += 3; } } return(Task.CompletedTask); }
public override Task Call(Card caller, GameHandler gameHandler, ulong curPlayer, ulong enemy, ExtraEffectInfo extraInf) { var info = extraInf as ExtraEffectInfo.StartOfCombatInfo; int lowestCost = 9999; List <Upgrade> upgradesList = new List <Upgrade>(); for (int i = 0; i < gameHandler.players[enemy].buyHistory.Last().Count(); i++) { if (gameHandler.players[enemy].buyHistory.Last()[i].Cost < lowestCost && gameHandler.players[enemy].buyHistory.Last()[i].creatureData.attack != 0 && gameHandler.players[enemy].buyHistory.Last()[i].creatureData.health != 0) { lowestCost = gameHandler.players[enemy].buyHistory.Last()[i].Cost; upgradesList.Clear(); upgradesList.Add(gameHandler.players[enemy].buyHistory.Last()[i]); } } if (upgradesList.Count == 0) { info.output.Add( $"{gameHandler.players[curPlayer].name}'s Super Scooper triggers but doesn't do anything."); return(Task.CompletedTask); } int pos = GameHandler.randomGenerator.Next(0, upgradesList.Count()); int attackst = upgradesList[pos].creatureData.attack; int healthst = upgradesList[pos].creatureData.health; upgradesList[pos].creatureData.attack = 0; upgradesList[pos].creatureData.health = 0; gameHandler.players[curPlayer].creatureData.attack += attackst; gameHandler.players[curPlayer].creatureData.health += healthst; gameHandler.players[enemy].creatureData.attack -= attackst; gameHandler.players[enemy].creatureData.health -= healthst; info.output.Add( $"{gameHandler.players[curPlayer].name}'s Super Scooper steals {attackst}/{healthst} from {gameHandler.players[enemy].name}'s {upgradesList[pos].name}, " + $"leaving it as a {gameHandler.players[enemy].creatureData.Stats()} and leaving {gameHandler.players[curPlayer].name} as a {gameHandler.players[curPlayer].creatureData.Stats()}."); return(Task.CompletedTask); }
public override Task Call(Card caller, GameHandler gameHandler, ulong curPlayer, ulong enemy, ExtraEffectInfo extraInf) { string aftermathMsg = "Your Database Core gives you "; bool checkedFirst = false; foreach (var keyword in _kw.staticKeywords) { if (keyword.Value > 0) { gameHandler.players[curPlayer].creatureData.staticKeywords[keyword.Key] += keyword.Value; if (!checkedFirst) { checkedFirst = true; aftermathMsg += $"{keyword.Key} x{keyword.Value}"; } else { aftermathMsg += $", {keyword.Key} x{keyword.Value}"; } } } gameHandler.players[curPlayer].aftermathMessages.Add(aftermathMsg); return(Task.CompletedTask); }
public override Task Call(Card caller, GameHandler gameHandler, ulong curPlayer, ulong enemy, ExtraEffectInfo extraInf) { CreatureData kws = gameHandler.players[curPlayer].creatureData.DeepCopy(); Aftermath aftermath = new Aftermath(kws); aftermath.effectText = "Aftermath: Gain "; aftermath.displayMode = EffectDisplayMode.Private; bool checkedFirst = false; foreach (var keyword in kws.staticKeywords) { if (keyword.Value != 0) { if (!checkedFirst) { aftermath.effectText += $"{keyword.Key} x{keyword.Value}"; checkedFirst = true; } else { aftermath.effectText += $", {keyword.Key} x{keyword.Value}"; } } } aftermath.effectText += "."; gameHandler.players[curPlayer].effects.Add(aftermath); return(Task.CompletedTask); }
public override async Task Call(Card caller, GameHandler gameHandler, ulong curPlayer, ulong enemy, ExtraEffectInfo extraInf) { PlayerInteraction playerInteraction = new PlayerInteraction("Name a number of Attack or Health", "First type the number, followed by 'Attack' or 'Health'", "Capitalisation is ignored"); string defaultAns = "0 Attack"; await playerInteraction.SendInteractionAsync(gameHandler, curPlayer, this.InteractionCheck, defaultAns, extraInf.ctx); }
public override Task Call(Card caller, GameHandler gameHandler, ulong curPlayer, ulong enemy, ExtraEffectInfo extraInf) { if (caller is Upgrade u) { u.creatureData.staticKeywords[StaticKeyword.Binary] = Math.Max(1, u.creatureData.staticKeywords[StaticKeyword.Binary]); this._toBeRemoved = true; } return(Task.CompletedTask); }
public override Task Call(Card caller, GameHandler gameHandler, ulong curPlayer, ulong enemy, ExtraEffectInfo extraInf) { for (int i = 0; i < 3; i++) { int poolSize = gameHandler.players[curPlayer].pool.upgrades.Count(); gameHandler.players[curPlayer].shop.AddUpgrade(gameHandler.players[curPlayer].pool.upgrades[GameHandler.randomGenerator.Next(0, poolSize)]); } gameHandler.players[curPlayer].aftermathMessages.Add( "Your Grand Vault adds 3 random Upgrades to your shop."); gameHandler.players[curPlayer].nextRoundEffects.Add(new Aftermath()); return(Task.CompletedTask); }
public override Task Call(Card caller, GameHandler gameHandler, ulong curPlayer, ulong enemy, ExtraEffectInfo extraInf) { gameHandler.players[curPlayer].maxMana++; return(Task.CompletedTask); }
public override Task Call(Card caller, GameHandler gameHandler, ulong curPlayer, ulong enemy, ExtraEffectInfo extraInf) { int bonus = CardsFilter.FilterList <Card>(gameHandler.players[curPlayer].playHistory, this.criteria).Count; gameHandler.players[curPlayer].maxMana += bonus; return(Task.CompletedTask); }
public override Task Call(Card caller, GameHandler gameHandler, ulong curPlayer, ulong enemy, ExtraEffectInfo extraInf) { gameHandler.players[curPlayer].shop.Refresh(gameHandler, gameHandler.players[curPlayer].pool, gameHandler.players[curPlayer].maxMana, false); return(Task.CompletedTask); }
public override Task Call(Card caller, GameHandler gameHandler, ulong curPlayer, ulong enemy, ExtraEffectInfo extraInf) { List <int> shopIndexes = gameHandler.players[curPlayer].shop.GetAllUpgradeIndexes(); List <Upgrade> legendaries = CardsFilter.FilterList <Upgrade>(gameHandler.players[curPlayer].pool.upgrades, x => x.rarity == Rarity.Legendary); foreach (var index in shopIndexes) { if (gameHandler.players[curPlayer].shop.At(index).rarity == Rarity.Common) { gameHandler.players[curPlayer].shop.TransformUpgrade(index, legendaries[GameHandler.randomGenerator.Next(legendaries.Count)]); } } return(Task.CompletedTask); }
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 Task Call(Card caller, GameHandler gameHandler, ulong curPlayer, ulong enemy, ExtraEffectInfo extraInf) { for (int i = 0; i < 6; i++) { if (gameHandler.players[curPlayer].shop.OptionsCount() == 0) { break; } int index = gameHandler.players[curPlayer].shop.GetRandomUpgradeIndex(); Console.WriteLine(index); gameHandler.players[curPlayer].shop.RemoveUpgrade(index); } gameHandler.players[curPlayer].aftermathMessages.Add("Your Fallen Reaver destroys 6 random Upgrades in your shop."); return(Task.CompletedTask); }
public override Task Call(Card caller, GameHandler gameHandler, ulong curPlayer, ulong enemy, ExtraEffectInfo extraInf) { var enemyShopIndexes = gameHandler.players[enemy].shop.GetAllUpgradeIndexes(); var commonIndexes = CardsFilter.FilterList <int>(enemyShopIndexes, x => gameHandler.players[enemy].shop.At(x).rarity == Rarity.Common); int stolen = commonIndexes[GameHandler.randomGenerator.Next(commonIndexes.Count)]; gameHandler.players[curPlayer].aftermathMessages.Add( $"Your Garbage Grabber stole a {gameHandler.players[enemy].shop.At(stolen).name} from your opponent's shop."); gameHandler.players[enemy].aftermathMessages.Add( $"{gameHandler.players[curPlayer].name}'s Garbage Grabber stole a Common Upgrade from your shop."); gameHandler.players[curPlayer].shop.AddUpgrade(gameHandler.players[enemy].shop.At(stolen)); gameHandler.players[enemy].shop.RemoveUpgrade(stolen); return(Task.CompletedTask); }
public override Task Call(Card caller, GameHandler gameHandler, ulong curPlayer, ulong enemy, ExtraEffectInfo extraInf) { int pos = GameHandler.randomGenerator.Next(gameHandler.players[curPlayer].pool.spareparts.Count()); gameHandler.players[curPlayer].hand.AddCard(gameHandler.players[curPlayer].pool.spareparts[pos]); gameHandler.players[curPlayer].aftermathMessages.Add( $"Your Circus Circuit added a {gameHandler.players[curPlayer].pool.spareparts[pos].name} to your hand."); return(Task.CompletedTask); }
public override Task Call(Card caller, GameHandler gameHandler, ulong curPlayer, ulong enemy, ExtraEffectInfo extraInf) { gameHandler.players[curPlayer].effects.Add(new OnBuyingAMech()); return(Task.CompletedTask); }
public override Task Call(Card caller, GameHandler gameHandler, ulong curPlayer, ulong enemy, ExtraEffectInfo extraInf) { gameHandler.players[curPlayer].creatureData.staticKeywords[StaticKeyword.Spikes] += 2; gameHandler.players[curPlayer].creatureData.staticKeywords[StaticKeyword.Shields] += 2; return(Task.CompletedTask); }
public override Task Call(Card caller, GameHandler gameHandler, ulong curPlayer, ulong enemy, ExtraEffectInfo extraInf) { gameHandler.players[curPlayer].hand.AddCard(new Receipt()); gameHandler.players[curPlayer].nextRoundEffects.Add(new Aftermath()); return(Task.CompletedTask); }
public override async Task Call(Card caller, GameHandler gameHandler, ulong curPlayer, ulong enemy, ExtraEffectInfo extraInf) { PlayerInteraction chooseOne = new PlayerInteraction("Choose One", "1) Gain +1 Attack for each other Upgrade in your shop\n2) Gain +1 Health for each other Upgrade in your shop", "Write the corresponding number"); string defaultAns = GameHandler.randomGenerator.Next(1, 3).ToString(); string ret = await chooseOne.SendInteractionAsync(gameHandler, curPlayer, (x, y, z) => GeneralFunctions.Within(x, 1, 2), defaultAns, extraInf.ctx); if (int.Parse(ret) == 1) { gameHandler.players[curPlayer].creatureData.attack += gameHandler.players[curPlayer].shop.GetAllUpgradeIndexes().Count(); } else if (int.Parse(ret) == 2) { gameHandler.players[curPlayer].creatureData.health += gameHandler.players[curPlayer].shop.GetAllUpgradeIndexes().Count(); } }
public override Task Call(Card caller, GameHandler gameHandler, ulong curPlayer, ulong enemy, ExtraEffectInfo extraInf) { List <Upgrade> list = CardsFilter.FilterList <Upgrade>(gameHandler.players[curPlayer].pool.upgrades, x => x.rarity == Rarity.Epic && x.Cost <= gameHandler.players[curPlayer].maxMana - 5); for (int i = 0; i < 2; i++) { int pos = GameHandler.randomGenerator.Next(0, list.Count()); gameHandler.players[curPlayer].shop.AddUpgrade(list[pos]); } gameHandler.players[curPlayer].aftermathMessages.Add( "Your Golden Gunner adds 2 random Epic Upgrades to your shop."); return(Task.CompletedTask); }
public override Task Call(Card caller, GameHandler gameHandler, ulong curPlayer, ulong enemy, ExtraEffectInfo extraInf) { int stolenat = Math.Min(gameHandler.players[enemy].creatureData.attack - 1, 2); int stolenhp = Math.Min(gameHandler.players[enemy].creatureData.health, 2); gameHandler.players[curPlayer].creatureData.attack += stolenat; gameHandler.players[curPlayer].creatureData.health += stolenhp; gameHandler.players[enemy].creatureData.attack -= stolenat; gameHandler.players[enemy].creatureData.health -= stolenhp; var info = extraInf as ExtraEffectInfo.AfterAttackInfo; info.output.Add( $"{gameHandler.players[curPlayer].name}'s Scrapbarber steals {stolenat}/{stolenhp} from {gameHandler.players[enemy].name}, " + $"leaving it as a {gameHandler.players[enemy].creatureData.Stats()} and leaving {gameHandler.players[curPlayer].name} as a {gameHandler.players[curPlayer].creatureData.Stats()}."); return(Task.CompletedTask); }
public override Task Call(Card caller, GameHandler gameHandler, ulong curPlayer, ulong enemy, ExtraEffectInfo extraInf) { gameHandler.players[curPlayer].creatureData.attack += gameHandler.players[curPlayer].shop.OptionsCount(); gameHandler.players[curPlayer].creatureData.health += gameHandler.players[curPlayer].shop.OptionsCount(); gameHandler.players[curPlayer].shop.Clear(); return(Task.CompletedTask); }
public override Task Call(Card caller, GameHandler gameHandler, ulong curPlayer, ulong enemy, ExtraEffectInfo extraInf) { gameHandler.players[curPlayer].shop.Clear(); List <Upgrade> subList = CardsFilter.FilterList <Upgrade>(gameHandler.players[curPlayer].pool.upgrades, x => x.rarity == Rarity.Common && x.Cost <= gameHandler.players[curPlayer].maxMana - 5); for (int i = 0; i < 6; i++) { Upgrade m = subList[GameHandler.randomGenerator.Next(0, subList.Count())]; gameHandler.players[curPlayer].shop.AddUpgrade(m); } return(Task.CompletedTask); }