P_151.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. namespace DCGO.CardEffects.P
  4. {
  5. public class P_151 : CEntity_Effect
  6. {
  7. public override List<ICardEffect> CardEffects(EffectTiming timing, CardSource card)
  8. {
  9. List<ICardEffect> cardEffects = new List<ICardEffect>();
  10. #region Ignore Color Requirement
  11. if (timing == EffectTiming.None)
  12. {
  13. IgnoreColorConditionClass ignoreColorConditionClass = new IgnoreColorConditionClass();
  14. ignoreColorConditionClass.SetUpICardEffect("Ignore color requirements", CanUseCondition, card);
  15. ignoreColorConditionClass.SetUpIgnoreColorConditionClass(cardCondition: CardCondition);
  16. cardEffects.Add(ignoreColorConditionClass);
  17. bool HasLiberatorTrait(Permanent permanent)
  18. {
  19. if (permanent.TopCard.ContainsTraits("Liberator") || permanent.TopCard.ContainsTraits("LIBERATOR"))
  20. {
  21. if(permanent.IsDigimon || permanent.IsTamer)
  22. {
  23. return true;
  24. }
  25. }
  26. return false;
  27. }
  28. bool CanUseCondition(Hashtable hashtable)
  29. {
  30. return CardEffectCommons.HasMatchConditionOwnersPermanent(card, HasLiberatorTrait);
  31. }
  32. bool CardCondition(CardSource cardSource)
  33. {
  34. return cardSource == card;
  35. }
  36. }
  37. #endregion
  38. #region Option Skill
  39. if (timing == EffectTiming.OptionSkill)
  40. {
  41. ActivateClass activateClass = new ActivateClass();
  42. activateClass.SetUpICardEffect("Reveal top 3, Add 1 with [LIBERATOR] trait. Then Play 1 with [LIBERATOR] trait", CanUseCondition, card);
  43. activateClass.SetUpActivateClass(null, ActivateCoroutine, -1, false, EffectDiscription());
  44. cardEffects.Add(activateClass);
  45. string EffectDiscription()
  46. {
  47. return "[Main] Reveal the top 3 cards of your deck. Add 1 card with the [LIBERATOR] trait among them to the hand. Return the rest to the bottom of the deck.Then, you may play 1 card with the [LIBERATOR] trait and a play cost of 3 or less from your hand without paying the cost.";
  48. }
  49. bool SelectLiberatorTrait(CardSource cardSource)
  50. {
  51. return cardSource.ContainsTraits("LIBERATOR");
  52. }
  53. bool SelectPlayTarget(CardSource cardSource)
  54. {
  55. if(cardSource.HasPlayCost && cardSource.GetCostItself <= 3)
  56. {
  57. if(CardEffectCommons.CanPlayAsNewPermanent(
  58. cardSource: cardSource,
  59. payCost: false,
  60. cardEffect: activateClass))
  61. {
  62. return SelectLiberatorTrait(cardSource);
  63. }
  64. }
  65. return false;
  66. }
  67. bool CanUseCondition(Hashtable hashtable)
  68. {
  69. return CardEffectCommons.CanTriggerOptionMainEffect(hashtable, card);
  70. }
  71. IEnumerator ActivateCoroutine(Hashtable hashtable)
  72. {
  73. yield return ContinuousController.instance.StartCoroutine(CardEffectCommons.SimplifiedRevealDeckTopCardsAndSelect(
  74. revealCount: 3,
  75. simplifiedSelectCardConditions:
  76. new SimplifiedSelectCardConditionClass[]
  77. {
  78. new SimplifiedSelectCardConditionClass(
  79. canTargetCondition:SelectLiberatorTrait,
  80. message: "Select 1 card with [LIBERATOR] trait.",
  81. mode: SelectCardEffect.Mode.AddHand,
  82. maxCount: 1,
  83. selectCardCoroutine: null),
  84. },
  85. remainingCardsPlace: RemainingCardsPlace.DeckBottom,
  86. activateClass: activateClass
  87. ));
  88. SelectHandEffect selectHandEffect = GManager.instance.GetComponent<SelectHandEffect>();
  89. selectHandEffect.SetUp(
  90. selectPlayer: card.Owner,
  91. canTargetCondition: SelectPlayTarget,
  92. canTargetCondition_ByPreSelecetedList: null,
  93. canEndSelectCondition: null,
  94. maxCount: 1,
  95. canNoSelect: true,
  96. canEndNotMax: false,
  97. isShowOpponent: true,
  98. selectCardCoroutine: null,
  99. afterSelectCardCoroutine: PlaySelectedCard,
  100. mode: SelectHandEffect.Mode.Custom,
  101. cardEffect: activateClass);
  102. selectHandEffect.SetUpCustomMessage("Select 1 card to play.", "The opponent is selecting 1 card to play.");
  103. selectHandEffect.SetUpCustomMessage_ShowCard("Played Card");
  104. yield return ContinuousController.instance.StartCoroutine(selectHandEffect.Activate());
  105. IEnumerator PlaySelectedCard(List<CardSource> selectedCards)
  106. {
  107. yield return ContinuousController.instance.StartCoroutine(CardEffectCommons.PlayPermanentCards(
  108. cardSources: selectedCards,
  109. activateClass: activateClass,
  110. payCost: false,
  111. isTapped: false,
  112. root: SelectCardEffect.Root.Hand,
  113. activateETB: true));
  114. }
  115. }
  116. }
  117. #endregion
  118. #region Security Skill
  119. if (timing == EffectTiming.SecuritySkill)
  120. {
  121. CardEffectCommons.AddActivateMainOptionSecurityEffect(
  122. card: card,
  123. cardEffects: ref cardEffects,
  124. effectName: $"Reveal top 3, Add 1 with [LIBERATOR] trait. Then Play 1 with [LIBERATOR] trait");
  125. }
  126. #endregion
  127. return cardEffects;
  128. }
  129. }
  130. }