EX12_065.cs 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. // Kaguyamon
  4. namespace DCGO.CardEffects.EX12
  5. {
  6. public class EX12_065 : CEntity_Effect
  7. {
  8. public override List<ICardEffect> CardEffects(EffectTiming timing, CardSource card)
  9. {
  10. List<ICardEffect> cardEffects = new List<ICardEffect>();
  11. #region Alternative Digivolution Cost
  12. if (timing == EffectTiming.None)
  13. {
  14. bool PermanentCondition(Permanent targetPermanent)
  15. {
  16. return targetPermanent.TopCard.EqualsTraits("Puppet")
  17. || targetPermanent.TopCard.EqualsTraits("Shambala");
  18. }
  19. cardEffects.Add(CardEffectFactory.AddSelfDigivolutionRequirementStaticEffect(
  20. permanentCondition: PermanentCondition,
  21. digivolutionCost: 3,
  22. ignoreDigivolutionRequirement: false,
  23. card: card,
  24. condition: null,
  25. level: 5)
  26. );
  27. }
  28. #endregion
  29. #region Fortitude
  30. if (timing == EffectTiming.OnDestroyedAnyone)
  31. {
  32. cardEffects.Add(CardEffectFactory.FortitudeSelfEffect(isInheritedEffect: false, card: card, condition: null));
  33. }
  34. #endregion
  35. #region Shared OP/WD/WA
  36. string SharedEffectName = "May play 1 5 cost or lower [Puppet]/[Shambala] from trash for free";
  37. string SharedHashString = "EX12_065_OP_WD_WA";
  38. CardEffectFactory.ActivateClassesForSharedEffects
  39. (ref cardEffects, timing, card,
  40. SharedEffectName,
  41. SharedActivateCoroutine,
  42. SharedEffectDescription,
  43. hashValue: SharedHashString,
  44. maxCountPerTurn: 1,
  45. optional: false,
  46. isSkippable: true,
  47. onPlay: true,
  48. whenDigivolving: true,
  49. whenAttacking: true);
  50. string SharedEffectDescription(string tag) => $"[{tag}] [Once Per Turn] You may play 1 play cost 5 or lower [Puppet] or [Shambala] trait card from your trash without paying the cost.";
  51. IEnumerator SharedActivateCoroutine(Hashtable hashtable, ActivateClass activateClass)
  52. {
  53. bool CanPlayCardCondition(CardSource cardSource)
  54. {
  55. return cardSource.HasPlayCost
  56. && cardSource.GetCostItself <= 5
  57. && (cardSource.EqualsTraits("Puppet")
  58. || cardSource.EqualsTraits("Shambala"))
  59. && CardEffectCommons.CanPlayAsNewPermanent(cardSource, false, activateClass);
  60. }
  61. yield return ContinuousController.instance.StartCoroutine(CardEffectCommons.PlayByEffect(
  62. canTargetCondition: CanPlayCardCondition,
  63. SelectCardEffect.Root.Trash,
  64. activateClass,
  65. payCost: false,
  66. afterSelectCardCoroutine: AfterSelectCardCoroutine
  67. ));
  68. IEnumerator AfterSelectCardCoroutine(List<CardSource> cardSources)
  69. {
  70. if (cardSources.Count == 0)
  71. {
  72. activateClass.RemoveUse();
  73. yield return null;
  74. }
  75. }
  76. }
  77. #endregion
  78. #region All Turns Give Blocker & Retaliation
  79. bool SharedPermanentCondition(Permanent permanent)
  80. {
  81. return CardEffectCommons.IsPermanentExistsOnOwnerBattleAreaDigimon(permanent, card)
  82. && (permanent.TopCard.EqualsTraits("Puppet")
  83. || permanent.TopCard.EqualsTraits("TB"));
  84. }
  85. if (timing == EffectTiming.None)
  86. {
  87. bool CanUseAllTurnsCondition()
  88. {
  89. return CardEffectCommons.IsExistOnBattleArea(card);
  90. }
  91. cardEffects.Add(CardEffectFactory.BlockerStaticEffect(
  92. permanentCondition: SharedPermanentCondition,
  93. isInheritedEffect: false,
  94. card: card,
  95. condition: CanUseAllTurnsCondition));
  96. AddSkillClass addSkillClass = new AddSkillClass();
  97. addSkillClass.SetUpICardEffect("Your [Puppet]/[TB] Digimon get Retaliation", CanUseCondition, card);
  98. addSkillClass.SetUpAddSkillClass(cardSourceCondition: CardSourceCondition, getEffects: GetEffects, limitTiming: EffectTiming.OnDestroyedAnyone);
  99. cardEffects.Add(addSkillClass);
  100. bool CanUseCondition(Hashtable hashtable)
  101. {
  102. return CardEffectCommons.IsExistOnBattleArea(card);
  103. }
  104. bool PermanentCondition(Permanent permanent)
  105. {
  106. return CardEffectCommons.IsPermanentExistsOnOwnerBattleAreaDigimon(permanent, card);
  107. }
  108. bool CardSourceCondition(CardSource cardSource)
  109. {
  110. return PermanentCondition(cardSource.PermanentOfThisCard())
  111. && cardSource == cardSource.PermanentOfThisCard().TopCard
  112. && (cardSource.EqualsTraits("Puppet")
  113. || cardSource.EqualsTraits("TB"));
  114. }
  115. List<ICardEffect> GetEffects(CardSource cardSource, List<ICardEffect> cardEffects, EffectTiming _timing)
  116. {
  117. if (_timing == EffectTiming.OnDestroyedAnyone)
  118. {
  119. bool Condition()
  120. {
  121. return CardSourceCondition(cardSource)
  122. && CardEffectCommons.HasMatchConditionOwnersPermanent(card, (permanent) => card.PermanentOfThisCard() == permanent);
  123. }
  124. cardEffects.Add(CardEffectFactory.RetaliationSelfEffect(isInheritedEffect: false, card: cardSource, condition: Condition));
  125. }
  126. return cardEffects;
  127. }
  128. }
  129. #endregion
  130. #region On Delete
  131. if (timing == EffectTiming.OnDestroyedAnyone)
  132. {
  133. ActivateClass activateClass = new ActivateClass();
  134. activateClass.SetUpICardEffect("Bottom deck 1 enemy lowest level Digimon", CanUseCondition, card);
  135. activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, false, EffectDescription());
  136. cardEffects.Add(activateClass);
  137. string EffectDescription()
  138. {
  139. return "[On Deletion] Return 1 of your opponent's lowest level Digimon to the bottom of the deck.";
  140. }
  141. bool CanUseCondition(Hashtable hashtable)
  142. {
  143. return CardEffectCommons.CanTriggerOnDeletion(hashtable, card, activateClass);
  144. }
  145. bool CanActivateCondition(Hashtable hashtable)
  146. {
  147. return CardEffectCommons.CanActivateOnDeletion(card, activateClass);
  148. }
  149. bool CanSelectPermanentCondition(Permanent permanent)
  150. {
  151. return CardEffectCommons.IsMinLevel(permanent, card.Owner.Enemy);
  152. }
  153. IEnumerator ActivateCoroutine(Hashtable hashtable)
  154. {
  155. if (CardEffectCommons.HasMatchConditionPermanent(CanSelectPermanentCondition))
  156. {
  157. SelectPermanentEffect selectPermanentEffect = GManager.instance.GetComponent<SelectPermanentEffect>();
  158. selectPermanentEffect.SetUp(
  159. selectPlayer: card.Owner,
  160. canTargetCondition: CanSelectPermanentCondition,
  161. canTargetCondition_ByPreSelecetedList: null,
  162. canEndSelectCondition: null,
  163. maxCount: 1,
  164. canNoSelect: false,
  165. canEndNotMax: false,
  166. selectPermanentCoroutine: null,
  167. afterSelectPermanentCoroutine: null,
  168. mode: SelectPermanentEffect.Mode.PutLibraryBottom,
  169. cardEffect: activateClass);
  170. yield return ContinuousController.instance.StartCoroutine(selectPermanentEffect.Activate());
  171. }
  172. }
  173. }
  174. #endregion
  175. return cardEffects;
  176. }
  177. }
  178. }