private IEnumerator EndOfTurnResponse() { List <SelectCardDecision> storedResults = new List <SelectCardDecision>(); IEnumerator coroutine = base.GameController.SelectTargetsAndDealDamage(base.HeroTurnTakerController, new DamageSource(base.GameController, base.CharacterCard), 1, DamageType.Projectile, 1, false, 1, false, false, false, null, storedResults, null, null, null, true, null, null, false, null, GetCardSource(null)); if (UseUnityCoroutines) { yield return(base.GameController.StartCoroutine(coroutine)); } else { base.GameController.ExhaustCoroutine(coroutine); } Card target = storedResults.FirstOrDefault()?.SelectedCard; if ((base.GameController.IsCardInPlayAndNotUnderCard(base.PsionicTorrentIdentifier) || base.GameController.IsCardInPlayAndNotUnderCard(base.ToxicCloudIdentifier)) && target != null) { ReduceDamageStatusEffect rdse = new ReduceDamageStatusEffect(1); rdse.SourceCriteria.IsSpecificCard = target; rdse.UntilStartOfNextTurn(this.TurnTaker); rdse.UntilCardLeavesPlay(target); coroutine = AddStatusEffect(rdse, true); if (UseUnityCoroutines) { yield return(base.GameController.StartCoroutine(coroutine)); } else { base.GameController.ExhaustCoroutine(coroutine); } } if (base.GameController.IsCardInPlayAndNotUnderCard(base.PsionicTorrentIdentifier) && base.GameController.IsCardInPlayAndNotUnderCard(base.ToxicCloudIdentifier)) { PreventPhaseActionStatusEffect ppase = new PreventPhaseActionStatusEffect(); ppase.ToTurnPhaseCriteria.Phase = new Phase?(Phase.PlayCard); ppase.ToTurnPhaseCriteria.TurnTaker = base.FindEnvironment(null).TurnTaker; ppase.UntilEndOfPhase(base.FindEnvironment(null).TurnTaker, Phase.PlayCard); coroutine = AddStatusEffect(ppase, true); if (base.UseUnityCoroutines) { yield return(base.GameController.StartCoroutine(coroutine)); } else { base.GameController.ExhaustCoroutine(coroutine); } coroutine = base.GameController.SendMessageAction("Skip the next environment play phase!", Priority.High, GetCardSource(null), null, false); if (UseUnityCoroutines) { yield return(base.GameController.StartCoroutine(coroutine)); } else { base.GameController.ExhaustCoroutine(coroutine); } } }
public override IEnumerator Play() { List <DestroyCardAction> storedResults = new List <DestroyCardAction>(); IEnumerator coroutine = base.GameController.SelectAndDestroyCard(this.DecisionMaker, new LinqCardCriteria((Card c) => (c.IsOngoing && c.IsVillain) || (c.IsDevice && c.HitPoints <= 6) || (c.IsRelic && c.HitPoints <= 6), "villain ongoing, device with 6 or less HP, or relic with 6 or less HP", false, false, "villain ongoing card, device with 6 or less HP, or relic with 6 or less HP", "villain ongoing cards, devices with 6 or less HP, or relics with 6 or less HP", false), true, storedResults, null, base.GetCardSource(null)); if (base.UseUnityCoroutines) { yield return(base.GameController.StartCoroutine(coroutine)); } else { base.GameController.ExhaustCoroutine(coroutine); } List <DestroyCardAction> dca = new List <DestroyCardAction>(); coroutine = base.GameController.SelectAndDestroyCard(this.DecisionMaker, new LinqCardCriteria((Card c) => IsMicrostorm(c) && c.IsInPlayAndHasGameText, "microstorm", false, false, null, null, false), true, dca, null, null); if (base.UseUnityCoroutines) { yield return(base.GameController.StartCoroutine(coroutine)); } else { base.GameController.ExhaustCoroutine(coroutine); } if (DidDestroyCard(dca)) { var vilTurnTaker = GameController.AllTurnTakers.Where((TurnTaker tt) => tt.IsVillain || tt.IsVillainTeam); var vilToSkip = vilTurnTaker.FirstOrDefault(); PreventPhaseActionStatusEffect ppase = new PreventPhaseActionStatusEffect(); ppase.ToTurnPhaseCriteria.Phase = new Phase?(Phase.PlayCard); ppase.ToTurnPhaseCriteria.TurnTaker = vilToSkip; ppase.UntilEndOfPhase(vilToSkip, Phase.PlayCard); ppase.NumberOfUses = 1; coroutine = AddStatusEffect(ppase, true); if (base.UseUnityCoroutines) { yield return(base.GameController.StartCoroutine(coroutine)); } else { base.GameController.ExhaustCoroutine(coroutine); } coroutine = base.GameController.SendMessageAction("Skip the next villain play phase!", Priority.High, GetCardSource(null), null, false); if (UseUnityCoroutines) { yield return(base.GameController.StartCoroutine(coroutine)); } else { base.GameController.ExhaustCoroutine(coroutine); } yield break; } }