public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { if (!CoinFlipConditional.IsOk(game, caster)) { return; } var target = Targeting.AskForTargetFromTargetingMode(TargetingMode, game, caster, opponent, pokemonSource); if (target.Hp > onlyIfLessThanThisHp) { return; } var ability = new AttackStoppingAbility() { TurnDuration = Duration, IsBuff = true, OnlyStopThisAttack = OnlyThisAttack }; if (OnlyStopAttacksOnSelf) { ability.OnlyOnCard = pokemonSource.Id; } target.TemporaryAbilities.Add(ability); }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { if (!CoinFlipConditional.IsOk(game, caster)) { return; } if (opponent.BenchedPokemon.Count <= AmountOfTargets) { foreach (var pokemon in opponent.BenchedPokemon.ValidPokemonCards) { pokemon.DealDamage(Damage, game, pokemonSource, true); } return; } var message = new SelectFromOpponentBenchMessage(AmountOfTargets).ToNetworkMessage(game.Id); var response = caster.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(message); foreach (var pokemon in response.Cards.Select(id => game.Cards[id]).OfType <PokemonCard>()) { pokemon.DealDamage(Damage, game, pokemonSource, true); } }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { if (!CoinFlipConditional.IsOk(game, caster)) { return; } var target = Targeting.AskForTargetFromTargetingMode(TargetingMode.YourBench, game, caster, opponent, pokemonSource); if (target == null) { return; } var filter = new EvolvesFromPokemonFilter() { Name = target.Name }; var response = DeckSearchUtil.SearchDeck(game, caster, new List <IDeckFilter> { filter }, 1); if (response.Count == 0) { return; } game.EvolvePokemon(target, (PokemonCard)response[0], true); caster.Deck.Cards = new Stack <Card>(caster.Deck.Cards.Except(response).ToList()); caster.Deck.Shuffle(); }
public void IsOk_No_Flip() { var condition = new CoinFlipConditional() { FlipCoin = false }; Assert.True(condition.IsOk(new GameField(), new Player())); }
public void IsOk_Heads_Flip() { var condition = new CoinFlipConditional() { FlipCoin = true }; Assert.True(condition.IsOk(new GameField().WithFlips(CoinFlipper.HEADS), new Player())); }
public void IsOk_Tails_Flip() { var condition = new CoinFlipConditional() { FlipCoin = true }; Assert.False(condition.IsOk(new GameField().WithFlips(CoinFlipper.TAILS), new Player())); }
public override Damage GetDamage(Player owner, Player opponent, GameField game) { if (!CoinFlipConditional.IsOk(game, owner)) { return(0); } var extraDamage = (owner.ActivePokemonCard.DamageCounters / 10) * extraPerDamageCounter; return(Damage + extraDamage); }
public void IsOk_Flip_2_2_Heads_1_Required() { var condition = new CoinFlipConditional() { FlipCoin = true, CoinsToFlip = 2, SuccessessForBonus = 2 }; Assert.True(condition.IsOk(new GameField().WithFlips(CoinFlipper.HEADS, CoinFlipper.HEADS), new Player())); }
public void IsOk_Flip_2_Check_2_Tails_1_Heads() { var condition = new CoinFlipConditional() { FlipCoin = true, CoinsToFlip = 2, CheckTails = true, SuccessessForBonus = 2 }; Assert.False(condition.IsOk(new GameField().WithFlips(CoinFlipper.HEADS, CoinFlipper.TAILS), new Player())); }
public void IsOk_Last_Flip_Heads() { var condition = new CoinFlipConditional() { FlipCoin = true, UseLastCoin = true }; Assert.True(condition.IsOk(new GameField() { LastCoinFlipResult = CoinFlipper.HEADS, LastCoinFlipHeadCount = 1 }, new Player())); }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { if (!CoinFlipConditional.IsOk(game, caster)) { return; } game.TemporaryPassiveAbilities.Add(new StopTrainerCastsAbility(caster.ActivePokemonCard) { LimitedByTime = true, TurnsLeft = 2, IsBuff = true }); }
public void IsOk_Last_Flip_Tails_Check_Tails() { var condition = new CoinFlipConditional() { FlipCoin = true, UseLastCoin = true, CheckTails = true }; Assert.True(condition.IsOk(new GameField() { LastCoinFlipResult = CoinFlipper.TAILS, LastCoinFlipHeadCount = 0 }, new Player())); }
public void IsOk_Double_Tails_First_Second_Check_Last() { var game = new GameField().WithFlips(CoinFlipper.TAILS, CoinFlipper.TAILS); var conditional = new CoinFlipConditional { FlipCoin = true, CoinsToFlip = 2, SuccessessForBonus = 2, CheckTails = true }; Assert.True(conditional.IsOk(game, null)); var secondCondition = new CoinFlipConditional { UseLastCoin = true }; Assert.True(secondCondition.IsOk(game, null)); }
public override void ProcessEffects(GameField game, Player owner, Player opponent) { if (!CoinFlipConditional.IsOk(game, owner)) { return; } var source = game?.ActivePlayer.ActivePokemonCard; owner.ActivePokemonCard.DealDamage(SelfDamage, game, source, false); foreach (var pokemon in opponent.BenchedPokemon.ValidPokemonCards) { pokemon.DealDamage(EnemyBenchDamage, game, source, true); } foreach (var pokemon in owner.BenchedPokemon.ValidPokemonCards) { pokemon.DealDamage(TeamBenchDamage, game, source, true); } base.ProcessEffects(game, owner, opponent); }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { if (!CoinFlipConditional.IsOk(game, caster)) { return; } var filter = new ExactCardFilter() { Name = CardName, Invert = Inverted }; foreach (var card in DeckSearchUtil.SearchDeck(game, caster, new List <IDeckFilter> { filter }, 1)) { card.RevealToAll(); caster.DrawCardsFromDeck(new List <NetworkId> { card.Id }); } }
public void IsOk_Empty() { var condition = new CoinFlipConditional(); Assert.True(condition.IsOk(new GameField(), new Player())); }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { if (!CoinFlipConditional.IsOk(game, caster)) { return; } var topCard = opponent.Deck.Cards.Pop(); caster.RevealCard(topCard); if (OnlyDiscardType == CardType.Any) { opponent.DiscardPile.Add(topCard); opponent.TriggerDiscardEvent(new List <Card> { topCard }); } else if (OnlyDiscardType == CardType.Pokemon && topCard is PokemonCard) { opponent.DiscardPile.Add(topCard); opponent.TriggerDiscardEvent(new List <Card> { topCard }); } else if (OnlyDiscardType == CardType.Trainer && topCard is TrainerCard) { opponent.DiscardPile.Add(topCard); opponent.TriggerDiscardEvent(new List <Card> { topCard }); } else if (OnlyDiscardType == CardType.Energy && topCard is EnergyCard) { opponent.DiscardPile.Add(topCard); opponent.TriggerDiscardEvent(new List <Card> { topCard }); } else if (OnlyDiscardType == CardType.BasicEnergy && topCard is EnergyCard && ((EnergyCard)topCard).IsBasic) { opponent.DiscardPile.Add(topCard); opponent.TriggerDiscardEvent(new List <Card> { topCard }); } else if (OnlyDiscardType == CardType.BasicPokemon && topCard is PokemonCard && ((PokemonCard)topCard).Stage == 0) { opponent.DiscardPile.Add(topCard); opponent.TriggerDiscardEvent(new List <Card> { topCard }); } else if (DrawsIfWrong) { opponent.Deck.Cards.Push(topCard); opponent.DrawCards(1); } else { opponent.Deck.Cards.Push(topCard); } }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { if (!CoinFlipConditional.IsOk(game, caster)) { return; } var filter = CardUtil.GetCardFilters(CardType, EnergyType).ToList(); int amount = useLastDiscardCount ? game.LastDiscard : Amount; foreach (var card in DeckSearchUtil.SearchDeck(game, caster, filter, amount)) { if (revealCard) { card.RevealToAll(); } switch (result) { case SearchDeckResult.PutInHand: caster.DrawCardsFromDeck(new List <Card> { card }); break; case SearchDeckResult.PutInDiscard: { caster.Deck.Cards.Except(new[] { card }); caster.DiscardPile.Add(card); caster.TriggerDiscardEvent(new List <Card>() { card }); } break; case SearchDeckResult.PutOnBench: { caster.Deck.Cards.Except(new[] { card }); int benchIndex = caster.BenchedPokemon.GetNextFreeIndex(); caster.BenchedPokemon.Add((PokemonCard)card); game.SendEventToPlayers(new PokemonAddedToBenchEvent() { Player = caster.Id, Pokemon = (PokemonCard)card, Index = benchIndex }); } break; case SearchDeckResult.AttachToTarget: { caster.Deck.Cards.Except(new[] { card }); var target = Targeting.AskForTargetFromTargetingMode(TargetingMode, game, caster, opponent, pokemonSource); target.AttachEnergy((EnergyCard)card, game); } break; default: break; } } caster.Deck.Shuffle(); }