BT22_089.cs 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. // Mirei Mikagura
  5. namespace DCGO.CardEffects.BT22
  6. {
  7. public class BT22_089 : CEntity_Effect
  8. {
  9. public override List<ICardEffect> CardEffects(EffectTiming timing, CardSource card)
  10. {
  11. List<ICardEffect> cardEffects = new List<ICardEffect>();
  12. #region Start Of Your Main Phase
  13. if (timing == EffectTiming.OnStartMainPhase)
  14. {
  15. ActivateClass activateClass = new ActivateClass();
  16. activateClass.SetUpICardEffect("By bottom decking, Play 1 4 cost or higher [Mirei Mikagura] or [CS] tamer from hand", CanUseCondition, card);
  17. activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, true, EffectDiscription());
  18. cardEffects.Add(activateClass);
  19. string EffectDiscription()
  20. {
  21. return "[Start of Your Main Phase] By returning this Tamer to the bottom of the deck, you may play 1 play cost 4 or higher [Mirei Mikagura] or play cost 4 or higher Tamer card with the [CS] trait from your hand without paying the cost.";
  22. }
  23. bool CanUseCondition(Hashtable hashtable)
  24. {
  25. return CardEffectCommons.IsExistOnBattleArea(card) &&
  26. CardEffectCommons.IsOwnerTurn(card);
  27. }
  28. bool CanActivateCondition(Hashtable hashtable)
  29. {
  30. return CardEffectCommons.IsExistOnBattleArea(card);
  31. }
  32. bool CanSelectCardCondition(CardSource cardSource)
  33. {
  34. return CardEffectCommons.IsExistOnHand(cardSource)
  35. && cardSource.HasPlayCost && cardSource.BasePlayCostFromEntity >= 4
  36. && (cardSource.EqualsCardName("Mirei Mikagura") || (cardSource.IsTamer && cardSource.HasCSTraits))
  37. && CardEffectCommons.CanPlayAsNewPermanent(cardSource, false, activateClass);
  38. }
  39. IEnumerator ActivateCoroutine(Hashtable hashtable)
  40. {
  41. yield return ContinuousController.instance.StartCoroutine(
  42. CardEffectCommons.DeckBouncePeremanentAndProcessAccordingToResult(
  43. targetPermanents: new List<Permanent>() { card.PermanentOfThisCard() },
  44. activateClass: activateClass,
  45. successProcess: SuccessProcess(),
  46. failureProcess: null));
  47. IEnumerator SuccessProcess()
  48. {
  49. if (CardEffectCommons.HasMatchConditionOwnersHand(card, CanSelectCardCondition))
  50. {
  51. CardSource selectedHandCard = null;
  52. #region Select Hand card
  53. int maxCount = Math.Min(1, CardEffectCommons.MatchConditionOwnersCardCountInHand(card, CanSelectCardCondition));
  54. SelectHandEffect selectHandEffect = GManager.instance.GetComponent<SelectHandEffect>();
  55. selectHandEffect.SetUp(
  56. selectPlayer: card.Owner,
  57. canTargetCondition: CanSelectCardCondition,
  58. canTargetCondition_ByPreSelecetedList: null,
  59. canEndSelectCondition: null,
  60. maxCount: maxCount,
  61. canNoSelect: true,
  62. canEndNotMax: false,
  63. isShowOpponent: true,
  64. selectCardCoroutine: SelectCardCoroutine,
  65. afterSelectCardCoroutine: null,
  66. mode: SelectHandEffect.Mode.Custom,
  67. cardEffect: activateClass);
  68. IEnumerator SelectCardCoroutine(CardSource cardSource)
  69. {
  70. selectedHandCard = cardSource;
  71. yield return null;
  72. }
  73. selectHandEffect.SetUpCustomMessage("Select 1 tamer to play", "The opponent is selecting 1 tamer to play");
  74. selectHandEffect.SetUpCustomMessage_ShowCard("Selected card");
  75. yield return ContinuousController.instance.StartCoroutine(selectHandEffect.Activate());
  76. #endregion
  77. if (selectedHandCard != null) yield return ContinuousController.instance.StartCoroutine(
  78. CardEffectCommons.PlayPermanentCards(
  79. cardSources: new List<CardSource>() { selectedHandCard },
  80. activateClass: activateClass,
  81. payCost: false,
  82. isTapped: false,
  83. root: SelectCardEffect.Root.Hand,
  84. activateETB: true));
  85. }
  86. }
  87. }
  88. }
  89. #endregion
  90. #region On Play
  91. if (timing == EffectTiming.OnEnterFieldAnyone)
  92. {
  93. ActivateClass activateClass = new ActivateClass();
  94. activateClass.SetUpICardEffect("By trashing 1 [Holy Beast]/[Angel]/[Archangel]/[Fallen Angel]/[CS], Draw 2", CanUseCondition, card);
  95. activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, true, EffectDiscription());
  96. cardEffects.Add(activateClass);
  97. string EffectDiscription()
  98. {
  99. return "[On Play] By trashing 1 card with the [Holy Beast], [Angel], [Archangel], [Fallen Angel] or [CS] trait from your hand, <Draw 2> (Draw 2 cards from your deck.)";
  100. }
  101. bool CanUseCondition(Hashtable hashtable)
  102. {
  103. return CardEffectCommons.IsExistOnBattleArea(card)
  104. && CardEffectCommons.CanTriggerOnPlay(hashtable, card);
  105. }
  106. bool CanActivateCondition(Hashtable hashtable)
  107. {
  108. return CardEffectCommons.IsExistOnBattleArea(card)
  109. && CardEffectCommons.HasMatchConditionOwnersHand(card, CanSelectCardCondition);
  110. }
  111. bool CanSelectCardCondition(CardSource cardSource)
  112. {
  113. return CardEffectCommons.IsExistOnHand(cardSource)
  114. && cardSource.HasHolyBeastTraits
  115. || cardSource.EqualsTraits("Angel")
  116. || cardSource.HasArchAngelTraits
  117. || cardSource.HasFallenAngelTraits
  118. || cardSource.HasCSTraits;
  119. }
  120. IEnumerator ActivateCoroutine(Hashtable hashtable)
  121. {
  122. if (CardEffectCommons.HasMatchConditionOwnersHand(card, CanSelectCardCondition))
  123. {
  124. CardSource selectedHandCard = null;
  125. #region Select Hand card
  126. int maxCount = Math.Min(1, CardEffectCommons.MatchConditionOwnersCardCountInHand(card, CanSelectCardCondition));
  127. SelectHandEffect selectHandEffect = GManager.instance.GetComponent<SelectHandEffect>();
  128. selectHandEffect.SetUp(
  129. selectPlayer: card.Owner,
  130. canTargetCondition: CanSelectCardCondition,
  131. canTargetCondition_ByPreSelecetedList: null,
  132. canEndSelectCondition: null,
  133. maxCount: maxCount,
  134. canNoSelect: true,
  135. canEndNotMax: false,
  136. isShowOpponent: true,
  137. selectCardCoroutine: SelectCardCoroutine,
  138. afterSelectCardCoroutine: null,
  139. mode: SelectHandEffect.Mode.Custom,
  140. cardEffect: activateClass);
  141. IEnumerator SelectCardCoroutine(CardSource cardSource)
  142. {
  143. selectedHandCard = cardSource;
  144. yield return null;
  145. }
  146. selectHandEffect.SetUpCustomMessage("Select 1 card to discard", "The opponent is selecting 1 card to discard");
  147. selectHandEffect.SetUpCustomMessage_ShowCard("Selected card");
  148. yield return ContinuousController.instance.StartCoroutine(selectHandEffect.Activate());
  149. #endregion
  150. if (selectedHandCard != null)
  151. {
  152. IDiscardHand discardHandEffect = new IDiscardHand(selectedHandCard, hashtable);
  153. yield return ContinuousController.instance.StartCoroutine(discardHandEffect.Discard());
  154. if (discardHandEffect.discarded) yield return ContinuousController.instance.StartCoroutine(
  155. new DrawClass(card.Owner, 2, activateClass).Draw());
  156. }
  157. }
  158. }
  159. }
  160. #endregion
  161. #region Security
  162. if (timing == EffectTiming.SecuritySkill)
  163. {
  164. cardEffects.Add(CardEffectFactory.PlaySelfTamerSecurityEffect(card));
  165. }
  166. #endregion
  167. return cardEffects;
  168. }
  169. }
  170. }