BT18_054.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. namespace DCGO.CardEffects.BT18
  4. {
  5. public class BT18_054 : CEntity_Effect
  6. {
  7. public override List<ICardEffect> CardEffects(EffectTiming timing, CardSource card)
  8. {
  9. List<ICardEffect> cardEffects = new List<ICardEffect>();
  10. #region DigiXros
  11. if (timing == EffectTiming.None)
  12. {
  13. AddDigiXrosConditionClass addDigiXrosConditionClass = new AddDigiXrosConditionClass();
  14. addDigiXrosConditionClass.SetUpICardEffect($"DigiXros -2", CanUseCondition, card);
  15. addDigiXrosConditionClass.SetUpAddDigiXrosConditionClass(getDigiXrosCondition: GetDigiXros);
  16. addDigiXrosConditionClass.SetNotShowUI(true);
  17. cardEffects.Add(addDigiXrosConditionClass);
  18. bool CanUseCondition(Hashtable hashtable)
  19. {
  20. return true;
  21. }
  22. DigiXrosCondition GetDigiXros(CardSource cardSource)
  23. {
  24. if (cardSource == card)
  25. {
  26. DigiXrosConditionElement elementHuman =
  27. new DigiXrosConditionElement(CanSelectCardCondition, "Kazemon");
  28. bool CanSelectCardCondition(CardSource conditionCardSource)
  29. {
  30. if (conditionCardSource != null)
  31. {
  32. if (conditionCardSource.Owner == card.Owner)
  33. {
  34. if (conditionCardSource.IsDigimon)
  35. {
  36. if (conditionCardSource.CardNames_DigiXros.Contains("Kazemon"))
  37. {
  38. return true;
  39. }
  40. }
  41. }
  42. }
  43. return false;
  44. }
  45. DigiXrosConditionElement elementBeast =
  46. new DigiXrosConditionElement(CanSelectCardCondition1, "Zephyrmon");
  47. bool CanSelectCardCondition1(CardSource conditionCardSource)
  48. {
  49. if (conditionCardSource != null)
  50. {
  51. if (conditionCardSource.Owner == card.Owner)
  52. {
  53. if (conditionCardSource.IsDigimon)
  54. {
  55. if (conditionCardSource.CardNames_DigiXros.Contains("Zephyrmon"))
  56. {
  57. return true;
  58. }
  59. }
  60. }
  61. }
  62. return false;
  63. }
  64. List<DigiXrosConditionElement> elements = new List<DigiXrosConditionElement>()
  65. { elementHuman, elementBeast };
  66. DigiXrosCondition digiXrosCondition = new DigiXrosCondition(elements, null, 2);
  67. return digiXrosCondition;
  68. }
  69. return null;
  70. }
  71. }
  72. #endregion
  73. #region Shared OP / WD
  74. string SharedEffectName = "Suspend all of your opponent's Digimon with as much or less DP as this Digimon";
  75. string SharedEffectDescription(string tag) => $"[{tag}] Suspend all of your opponent's Digimon with as much or less DP as this Digimon. None of your opponent's Digimon can unsuspend until the end of their turn.";
  76. bool CanActivateConditionShared(Hashtable hashtable)
  77. {
  78. return CardEffectCommons.IsExistOnBattleAreaDigimon(card);
  79. }
  80. bool SharedOpponentsDigimon(Permanent permanent)
  81. {
  82. return CardEffectCommons.IsPermanentExistsOnOpponentBattleAreaDigimon(permanent, card);
  83. }
  84. IEnumerator SharedActivateCoroutine(Hashtable hashtable, ActivateClass activateClass)
  85. {
  86. bool SharedPermanentCondition(Permanent permanent)
  87. {
  88. return CardEffectCommons.IsPermanentExistsOnOpponentBattleAreaDigimon(permanent, card)
  89. && card.PermanentOfThisCard().HasDP
  90. && permanent.TopCard.HasDP
  91. && permanent.DP <= card.PermanentOfThisCard().DP
  92. && !permanent.TopCard.CanNotBeAffected(activateClass)
  93. && permanent.CanSuspend;
  94. }
  95. List<Permanent> suspendTargetPermanents = card.Owner.Enemy.GetBattleAreaDigimons().Filter(SharedPermanentCondition);
  96. yield return ContinuousController.instance.StartCoroutine(new SuspendPermanentsClass(
  97. suspendTargetPermanents,
  98. CardEffectCommons.CardEffectHashtable(activateClass)).Tap());
  99. yield return ContinuousController.instance.StartCoroutine(CardEffectCommons.GainCanNotUnsuspendPlayerEffect(
  100. permanentCondition: SharedOpponentsDigimon,
  101. effectDuration: EffectDuration.UntilOpponentTurnEnd,
  102. activateClass: activateClass,
  103. isOnlyActivePhase: false,
  104. effectName: "Can't Unsuspend"));
  105. }
  106. #endregion
  107. #region On Play
  108. if (timing == EffectTiming.OnEnterFieldAnyone)
  109. {
  110. ActivateClass activateClass = new ActivateClass();
  111. activateClass.SetUpICardEffect(SharedEffectName, CanUseCondition, card);
  112. activateClass.SetUpActivateClass(CanActivateConditionShared, hashtable => SharedActivateCoroutine(hashtable, activateClass), -1, false, SharedEffectDescription("On Play"));
  113. cardEffects.Add(activateClass);
  114. bool CanUseCondition(Hashtable hashtable)
  115. {
  116. return CardEffectCommons.IsExistOnBattleAreaDigimon(card)
  117. && CardEffectCommons.CanTriggerOnPlay(hashtable, card);
  118. }
  119. }
  120. #endregion
  121. #region When Digivolving
  122. if (timing == EffectTiming.OnEnterFieldAnyone)
  123. {
  124. ActivateClass activateClass = new ActivateClass();
  125. activateClass.SetUpICardEffect(SharedEffectName, CanUseCondition, card);
  126. activateClass.SetUpActivateClass(CanActivateConditionShared, hashtable => SharedActivateCoroutine(hashtable, activateClass), -1, false, SharedEffectDescription("When Digivolving"));
  127. cardEffects.Add(activateClass);
  128. bool CanUseCondition(Hashtable hashtable)
  129. {
  130. return CardEffectCommons.IsExistOnBattleAreaDigimon(card)
  131. && CardEffectCommons.CanTriggerWhenDigivolving(hashtable, card);
  132. }
  133. }
  134. #endregion
  135. #region All Turns
  136. if (timing == EffectTiming.WhenRemoveField)
  137. {
  138. ActivateClass activateClass = new ActivateClass();
  139. activateClass.SetUpICardEffect("Play a Digimon from digivolution cards.", CanUseCondition, card);
  140. activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, true, EffectDescription());
  141. cardEffects.Add(activateClass);
  142. string EffectDescription()
  143. {
  144. return
  145. "[All Turns] When this Digimon would leave the battle area, you may play 1 level 4 or lower Digimon card with the [Avian]/[Bird]/[Fairy]/[Hybrid] trait from this Digimon's digivolution cards without paying the cost.";
  146. }
  147. bool CanUseCondition(Hashtable hashtable)
  148. {
  149. return CardEffectCommons.IsExistOnBattleAreaDigimon(card) &&
  150. CardEffectCommons.CanTriggerWhenRemoveField(hashtable, card);
  151. }
  152. bool CanSelectCardCondition(CardSource cardSource)
  153. {
  154. return cardSource.IsDigimon && cardSource.HasLevel && cardSource.Level <= 4 &&
  155. (cardSource.ContainsTraits("Avian") || cardSource.ContainsTraits("Bird") || cardSource.ContainsTraits("Fairy") ||
  156. cardSource.ContainsTraits("Hybrid")) &&
  157. CardEffectCommons.CanPlayAsNewPermanent(cardSource: cardSource, payCost: false, cardEffect: activateClass);
  158. }
  159. bool CanActivateCondition(Hashtable hashtable)
  160. {
  161. return CardEffectCommons.IsExistOnBattleAreaDigimon(card) &&
  162. card.PermanentOfThisCard().DigivolutionCards.Some(CanSelectCardCondition);
  163. }
  164. IEnumerator ActivateCoroutine(Hashtable hashtable)
  165. {
  166. List<CardSource> selectedCards = new List<CardSource>();
  167. SelectCardEffect selectCardEffect = GManager.instance.GetComponent<SelectCardEffect>();
  168. selectCardEffect.SetUp(
  169. canTargetCondition: CanSelectCardCondition,
  170. canTargetCondition_ByPreSelecetedList: null,
  171. canEndSelectCondition: null,
  172. canNoSelect: () => true,
  173. selectCardCoroutine: SelectCardCoroutine,
  174. afterSelectCardCoroutine: null,
  175. message: "Select 1 digivolution card to play.",
  176. maxCount: 1,
  177. canEndNotMax: false,
  178. isShowOpponent: true,
  179. mode: SelectCardEffect.Mode.Custom,
  180. root: SelectCardEffect.Root.Custom,
  181. customRootCardList: card.PermanentOfThisCard().DigivolutionCards,
  182. canLookReverseCard: true,
  183. selectPlayer: card.Owner,
  184. cardEffect: activateClass);
  185. selectCardEffect.SetUpCustomMessage(
  186. "Select 1 digivolution card to play.",
  187. "The opponent is selecting 1 digivolution card to play.");
  188. selectCardEffect.SetUpCustomMessage_ShowCard("Played Card");
  189. yield return StartCoroutine(selectCardEffect.Activate());
  190. IEnumerator SelectCardCoroutine(CardSource cardSource)
  191. {
  192. selectedCards.Add(cardSource);
  193. yield return null;
  194. }
  195. yield return ContinuousController.instance.StartCoroutine(
  196. CardEffectCommons.PlayPermanentCards(
  197. cardSources: selectedCards,
  198. activateClass: activateClass,
  199. payCost: false,
  200. isTapped: false,
  201. root: SelectCardEffect.Root.DigivolutionCards,
  202. activateETB: true));
  203. }
  204. }
  205. #endregion
  206. return cardEffects;
  207. }
  208. }
  209. }