EX9_065.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. // Titamon
  5. namespace DCGO.CardEffects.EX9
  6. {
  7. public class EX9_065 : CEntity_Effect
  8. {
  9. public override List<ICardEffect> CardEffects(EffectTiming timing, CardSource card)
  10. {
  11. List<ICardEffect> cardEffects = new List<ICardEffect>();
  12. #region Alternative Digivolution Cost
  13. if (timing == EffectTiming.None)
  14. {
  15. static bool PermanentCondition(Permanent targetPermanent)
  16. {
  17. return targetPermanent.TopCard.EqualsTraits("DM") && targetPermanent.TopCard.IsLevel5;
  18. }
  19. cardEffects.Add(CardEffectFactory.AddSelfDigivolutionRequirementStaticEffect(permanentCondition: PermanentCondition, digivolutionCost: 3, ignoreDigivolutionRequirement: false, card: card, condition: null));
  20. }
  21. #endregion
  22. #region Blast Digivolve
  23. if (timing == EffectTiming.OnCounterTiming)
  24. {
  25. cardEffects.Add(CardEffectFactory.BlastDigivolveEffect(card: card, condition: null));
  26. }
  27. #endregion
  28. #region Scapegoat
  29. if (timing == EffectTiming.WhenPermanentWouldBeDeleted)
  30. {
  31. cardEffects.Add(CardEffectFactory.ScapegoatSelfEffect(isInheritedEffect: false, card: card, condition: null, effectName: "<Scapegoat>", effectDiscription: null));
  32. }
  33. #endregion
  34. #region Give Ver.4 Digimon Blocker/Retaliation
  35. if (timing == EffectTiming.None)
  36. {
  37. bool CanUseCondition()
  38. {
  39. return CardEffectCommons.IsExistOnBattleArea(card);
  40. }
  41. bool PermanentCondition(Permanent permanent)
  42. {
  43. return CardEffectCommons.IsPermanentExistsOnOwnerBattleAreaDigimon(permanent, card) &&
  44. permanent.TopCard.EqualsTraits("Ver.4");
  45. }
  46. cardEffects.Add(CardEffectFactory.BlockerStaticEffect(
  47. permanentCondition: PermanentCondition,
  48. isInheritedEffect: false,
  49. card: card,
  50. condition: CanUseCondition));
  51. AddSkillClass addSkillClass = new AddSkillClass();
  52. addSkillClass.SetUpICardEffect("Your Digimon gain <Retaliation>", CanUseRetaliationCondition, card);
  53. addSkillClass.SetUpAddSkillClass(cardSourceCondition: CardSourceCondition, getEffects: GetEffects);
  54. cardEffects.Add(addSkillClass);
  55. bool CanUseRetaliationCondition(Hashtable hashtable)
  56. {
  57. return CanUseCondition();
  58. }
  59. bool CardSourceCondition(CardSource cardSource)
  60. {
  61. if (CardEffectCommons.IsExistOnBattleAreaDigimon(cardSource))
  62. {
  63. if (cardSource == cardSource.PermanentOfThisCard().TopCard)
  64. {
  65. if (PermanentCondition(cardSource.PermanentOfThisCard()))
  66. {
  67. return true;
  68. }
  69. }
  70. }
  71. return false;
  72. }
  73. List<ICardEffect> GetEffects(CardSource cardSource, List<ICardEffect> cardEffects, EffectTiming _timing)
  74. {
  75. if (_timing == EffectTiming.OnDestroyedAnyone)
  76. {
  77. cardEffects.Add(CardEffectFactory.RetaliationSelfEffect(isInheritedEffect: false, card: cardSource, condition: null));
  78. }
  79. return cardEffects;
  80. }
  81. }
  82. #endregion
  83. #region On Play
  84. if (timing == EffectTiming.OnEnterFieldAnyone)
  85. {
  86. ActivateClass activateClass = new ActivateClass();
  87. activateClass.SetUpICardEffect("Play 1 level 4 or lower [DM] Digimon from trash", CanUseCondition, card);
  88. activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, true, EffectDiscription());
  89. cardEffects.Add(activateClass);
  90. string EffectDiscription()
  91. {
  92. return "[On Play] You may play 1 level 4 or lower [DM] trait Digimon card from your trash without paying the cost.";
  93. }
  94. bool CanUseCondition(Hashtable hashtable)
  95. {
  96. return CardEffectCommons.CanTriggerOnPlay(hashtable, card);
  97. }
  98. bool CanActivateCondition(Hashtable hashtable)
  99. {
  100. return CardEffectCommons.IsExistOnBattleAreaDigimon(card);
  101. }
  102. bool CanSelectCardCondition(CardSource cardSource)
  103. {
  104. return cardSource.IsDigimon &&
  105. cardSource.HasLevel && cardSource.Level <= 4 &&
  106. cardSource.EqualsTraits("DM") &&
  107. CardEffectCommons.CanPlayAsNewPermanent(cardSource: cardSource, payCost: false, cardEffect: activateClass);
  108. }
  109. IEnumerator ActivateCoroutine(Hashtable hashtable)
  110. {
  111. if (CardEffectCommons.HasMatchConditionOwnersCardInTrash(card, CanSelectCardCondition))
  112. {
  113. CardSource selectedCard = null;
  114. int maxCount = Math.Min(1, CardEffectCommons.MatchConditionOwnersCardCountInTrash(card, CanSelectCardCondition));
  115. SelectCardEffect selectCardEffect = GManager.instance.GetComponent<SelectCardEffect>();
  116. selectCardEffect.SetUp(
  117. canTargetCondition: CanSelectCardCondition,
  118. canTargetCondition_ByPreSelecetedList: null,
  119. canEndSelectCondition: null,
  120. canNoSelect: () => true,
  121. selectCardCoroutine: SelectCardCoroutine,
  122. afterSelectCardCoroutine: null,
  123. message: "Select 1 [DM] digimon to play",
  124. maxCount: maxCount,
  125. canEndNotMax: true,
  126. isShowOpponent: true,
  127. mode: SelectCardEffect.Mode.Custom,
  128. root: SelectCardEffect.Root.Trash,
  129. customRootCardList: null,
  130. canLookReverseCard: true,
  131. selectPlayer: card.Owner,
  132. cardEffect: activateClass);
  133. selectCardEffect.SetUpCustomMessage("Select 1 [DM] digimon to play", "The opponent is selecting 1 digimon to play.");
  134. yield return StartCoroutine(selectCardEffect.Activate());
  135. IEnumerator SelectCardCoroutine(CardSource cardSource)
  136. {
  137. selectedCard = cardSource;
  138. yield return null;
  139. }
  140. if (selectedCard != null) yield return ContinuousController.instance.StartCoroutine(CardEffectCommons.PlayPermanentCards(cardSources: new List<CardSource> { selectedCard }, activateClass: activateClass, payCost: false, isTapped: false, root: SelectCardEffect.Root.Trash, activateETB: true));
  141. }
  142. }
  143. }
  144. #endregion
  145. #region When Digivolving
  146. if (timing == EffectTiming.OnEnterFieldAnyone)
  147. {
  148. ActivateClass activateClass = new ActivateClass();
  149. activateClass.SetUpICardEffect("Play 1 level 4 or lower [DM] Digimon from trash", CanUseCondition, card);
  150. activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, true, EffectDiscription());
  151. cardEffects.Add(activateClass);
  152. string EffectDiscription()
  153. {
  154. return "[When Digivolving] You may play 1 level 4 or lower [DM] trait Digimon card from your trash without paying the cost.";
  155. }
  156. bool CanUseCondition(Hashtable hashtable)
  157. {
  158. return CardEffectCommons.CanTriggerWhenDigivolving(hashtable, card);
  159. }
  160. bool CanActivateCondition(Hashtable hashtable)
  161. {
  162. return CardEffectCommons.IsExistOnBattleAreaDigimon(card);
  163. }
  164. bool CanSelectCardCondition(CardSource cardSource)
  165. {
  166. return cardSource.IsDigimon &&
  167. cardSource.HasLevel && cardSource.Level <= 4 &&
  168. cardSource.EqualsTraits("DM") &&
  169. CardEffectCommons.CanPlayAsNewPermanent(cardSource: cardSource, payCost: false, cardEffect: activateClass);
  170. }
  171. IEnumerator ActivateCoroutine(Hashtable hashtable)
  172. {
  173. if (CardEffectCommons.HasMatchConditionOwnersCardInTrash(card, CanSelectCardCondition))
  174. {
  175. CardSource selectedCard = null;
  176. int maxCount = Math.Min(1, CardEffectCommons.MatchConditionOwnersCardCountInTrash(card, CanSelectCardCondition));
  177. SelectCardEffect selectCardEffect = GManager.instance.GetComponent<SelectCardEffect>();
  178. selectCardEffect.SetUp(
  179. canTargetCondition: CanSelectCardCondition,
  180. canTargetCondition_ByPreSelecetedList: null,
  181. canEndSelectCondition: null,
  182. canNoSelect: () => true,
  183. selectCardCoroutine: SelectCardCoroutine,
  184. afterSelectCardCoroutine: null,
  185. message: "Select 1 [DM] digimon to play",
  186. maxCount: maxCount,
  187. canEndNotMax: true,
  188. isShowOpponent: true,
  189. mode: SelectCardEffect.Mode.Custom,
  190. root: SelectCardEffect.Root.Trash,
  191. customRootCardList: null,
  192. canLookReverseCard: true,
  193. selectPlayer: card.Owner,
  194. cardEffect: activateClass);
  195. selectCardEffect.SetUpCustomMessage("Select 1 [DM] digimon to play", "The opponent is selecting 1 digimon to play.");
  196. yield return StartCoroutine(selectCardEffect.Activate());
  197. IEnumerator SelectCardCoroutine(CardSource cardSource)
  198. {
  199. selectedCard = cardSource;
  200. yield return null;
  201. }
  202. if (selectedCard != null) yield return ContinuousController.instance.StartCoroutine(CardEffectCommons.PlayPermanentCards(cardSources: new List<CardSource> { selectedCard }, activateClass: activateClass, payCost: false, isTapped: false, root: SelectCardEffect.Root.Trash, activateETB: true));
  203. }
  204. }
  205. }
  206. #endregion
  207. return cardEffects;
  208. }
  209. }
  210. }