EX9_062.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. // SkullGreymon
  5. namespace DCGO.CardEffects.EX9
  6. {
  7. public class EX9_062 : CEntity_Effect
  8. {
  9. public override List<ICardEffect> CardEffects(EffectTiming timing, CardSource card)
  10. {
  11. List<ICardEffect> cardEffects = new List<ICardEffect>();
  12. #region Alternate Digivolution Requirement
  13. if (timing == EffectTiming.None)
  14. {
  15. static bool PermanentCondition(Permanent targetPermanent)
  16. {
  17. return targetPermanent.TopCard.IsLevel4 &&
  18. targetPermanent.TopCard.EqualsTraits("DM");
  19. }
  20. cardEffects.Add(CardEffectFactory.AddSelfDigivolutionRequirementStaticEffect(permanentCondition: PermanentCondition, digivolutionCost: 3, ignoreDigivolutionRequirement: false, card: card, condition: null));
  21. }
  22. #endregion
  23. #region Alternative Assembly Level
  24. if (timing == EffectTiming.None)
  25. {
  26. ChangeCardLevelForAssemblyClass changeCardLevelForAssemblyClass = new ChangeCardLevelForAssemblyClass();
  27. changeCardLevelForAssemblyClass.SetUpICardEffect("This card is also treated as level 4 for [Kimeramon]'s assembly.", CanUseCondition, card);
  28. changeCardLevelForAssemblyClass.SetUpChangeCardLevelForAssemblyClass(changeCardLevel: changeCardLevel);
  29. cardEffects.Add(changeCardLevelForAssemblyClass);
  30. bool CanUseCondition(Hashtable hashtable)
  31. {
  32. return true;
  33. }
  34. List<int> changeCardLevel(CardSource cardSource, List<int> Level)
  35. {
  36. if (cardSource == card)
  37. {
  38. Level.Add(4);
  39. }
  40. return Level;
  41. }
  42. }
  43. #endregion
  44. #region On Play
  45. if (timing == EffectTiming.OnEnterFieldAnyone)
  46. {
  47. ActivateClass activateClass = new ActivateClass();
  48. activateClass.SetUpICardEffect($"Trash cards from deck, then return 1 [DM] digimon from trash to hand", CanUseCondition, card);
  49. activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, false, EffectDiscription());
  50. cardEffects.Add(activateClass);
  51. string EffectDiscription()
  52. {
  53. return "[On Play] For each of this Digimon's face-down digivolution cards, trash the top card of your deck. Then, you may return 1 [DM] trait Digimon card from your trash to the hand.";
  54. }
  55. bool CanUseCondition(Hashtable hashtable)
  56. {
  57. return CardEffectCommons.CanTriggerOnPlay(hashtable, card);
  58. }
  59. bool CanActivateCondition(Hashtable hashtable)
  60. {
  61. return CardEffectCommons.IsExistOnBattleAreaDigimon(card);
  62. }
  63. bool CanSelectCardCondition(CardSource cardSource)
  64. {
  65. return cardSource.IsDigimon && cardSource.EqualsTraits("DM");
  66. }
  67. IEnumerator ActivateCoroutine(Hashtable hashtable)
  68. {
  69. int trashCount = card.PermanentOfThisCard().DigivolutionCards.Filter(x => x.IsFlipped).Count;
  70. if (trashCount >= 1)
  71. {
  72. IAddTrashCardsFromLibraryTop addTrashCard = new IAddTrashCardsFromLibraryTop(trashCount, card.Owner, activateClass);
  73. addTrashCard.SetNotShowCards();
  74. yield return ContinuousController.instance.StartCoroutine(addTrashCard.AddTrashCardsFromLibraryTop());
  75. ContinuousController.instance.StartCoroutine(GManager.instance.GetComponent<Effects>().ShowCardEffect2(addTrashCard.discardedCards, "Your Discarded Cards", true, true));
  76. }
  77. if (CardEffectCommons.HasMatchConditionOwnersCardInTrash(card, CanSelectCardCondition))
  78. {
  79. SelectCardEffect selectCardEffect = GManager.instance.GetComponent<SelectCardEffect>();
  80. selectCardEffect.SetUp(
  81. canTargetCondition: CanSelectCardCondition,
  82. canTargetCondition_ByPreSelecetedList: null,
  83. canEndSelectCondition: null,
  84. canNoSelect: () => true,
  85. selectCardCoroutine: null,
  86. afterSelectCardCoroutine: null,
  87. message: "Select 1 [DM] digimon to add to hand",
  88. maxCount: 1,
  89. canEndNotMax: true,
  90. isShowOpponent: true,
  91. mode: SelectCardEffect.Mode.AddHand,
  92. root: SelectCardEffect.Root.Trash,
  93. customRootCardList: null,
  94. canLookReverseCard: true,
  95. selectPlayer: card.Owner,
  96. cardEffect: activateClass);
  97. selectCardEffect.SetUpCustomMessage("Select 1 [DM] digimon to add to hand", "The opponent is selecting 1 digimon to add to hand.");
  98. yield return StartCoroutine(selectCardEffect.Activate());
  99. }
  100. }
  101. }
  102. #endregion
  103. #region When Digivolving
  104. if (timing == EffectTiming.OnEnterFieldAnyone)
  105. {
  106. ActivateClass activateClass = new ActivateClass();
  107. activateClass.SetUpICardEffect($"Trash cards from deck, then return 1 [DM] digimon from trash to hand", CanUseCondition, card);
  108. activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, false, EffectDiscription());
  109. cardEffects.Add(activateClass);
  110. string EffectDiscription()
  111. {
  112. return "[When Digivolving] For each of this Digimon's face-down digivolution cards, trash the top card of your deck. Then, you may return 1 [DM] trait Digimon card from your trash to the hand.";
  113. }
  114. bool CanUseCondition(Hashtable hashtable)
  115. {
  116. return CardEffectCommons.CanTriggerWhenDigivolving(hashtable, card);
  117. }
  118. bool CanActivateCondition(Hashtable hashtable)
  119. {
  120. return CardEffectCommons.IsExistOnBattleAreaDigimon(card);
  121. }
  122. bool CanSelectCardCondition(CardSource cardSource)
  123. {
  124. return cardSource.IsDigimon && cardSource.EqualsTraits("DM");
  125. }
  126. IEnumerator ActivateCoroutine(Hashtable hashtable)
  127. {
  128. int trashCount = card.PermanentOfThisCard().DigivolutionCards.Filter(x => x.IsFlipped).Count;
  129. if (trashCount >= 1)
  130. {
  131. IAddTrashCardsFromLibraryTop addTrashCard = new IAddTrashCardsFromLibraryTop(trashCount, card.Owner, activateClass);
  132. addTrashCard.SetNotShowCards();
  133. yield return ContinuousController.instance.StartCoroutine(addTrashCard.AddTrashCardsFromLibraryTop());
  134. ContinuousController.instance.StartCoroutine(GManager.instance.GetComponent<Effects>().ShowCardEffect2(addTrashCard.discardedCards, "Your Discarded Cards", true, true));
  135. }
  136. if (CardEffectCommons.HasMatchConditionOwnersCardInTrash(card, CanSelectCardCondition))
  137. {
  138. SelectCardEffect selectCardEffect = GManager.instance.GetComponent<SelectCardEffect>();
  139. selectCardEffect.SetUp(
  140. canTargetCondition: CanSelectCardCondition,
  141. canTargetCondition_ByPreSelecetedList: null,
  142. canEndSelectCondition: null,
  143. canNoSelect: () => true,
  144. selectCardCoroutine: null,
  145. afterSelectCardCoroutine: null,
  146. message: "Select 1 [DM] digimon to add to hand",
  147. maxCount: 1,
  148. canEndNotMax: true,
  149. isShowOpponent: true,
  150. mode: SelectCardEffect.Mode.AddHand,
  151. root: SelectCardEffect.Root.Trash,
  152. customRootCardList: null,
  153. canLookReverseCard: true,
  154. selectPlayer: card.Owner,
  155. cardEffect: activateClass);
  156. selectCardEffect.SetUpCustomMessage("Select 1 [DM] digimon to add to hand", "The opponent is selecting 1 digimon to add to hand.");
  157. yield return StartCoroutine(selectCardEffect.Activate());
  158. }
  159. }
  160. }
  161. #endregion
  162. #region On Deletion
  163. if (timing == EffectTiming.OnDestroyedAnyone)
  164. {
  165. ActivateClass activateClass = new ActivateClass();
  166. activateClass.SetUpICardEffect("Play 1 level 4 or less [DM] Digimon", CanUseCondition, card);
  167. activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, true, EffectDiscription());
  168. cardEffects.Add(activateClass);
  169. string EffectDiscription()
  170. {
  171. return "[On Deletion] you may play 1 level 4 or lower [DM] trait Digimon card from your trash without paying the cost.";
  172. }
  173. bool CanUseCondition(Hashtable hashtable)
  174. {
  175. return CardEffectCommons.CanTriggerOnDeletion(hashtable, card, activateClass);
  176. }
  177. bool CanActivateCondition(Hashtable hashtable)
  178. {
  179. return CardEffectCommons.CanActivateOnDeletion(card, activateClass);
  180. }
  181. bool CanSelectCardCondition(CardSource cardSource)
  182. {
  183. if (cardSource.IsDigimon && cardSource.Level <= 4 && cardSource.EqualsTraits("DM"))
  184. {
  185. if (CardEffectCommons.CanPlayAsNewPermanent(cardSource: cardSource, payCost: false, cardEffect: activateClass))
  186. {
  187. return true;
  188. }
  189. }
  190. return false;
  191. }
  192. IEnumerator ActivateCoroutine(Hashtable hashtable)
  193. {
  194. if (CardEffectCommons.HasMatchConditionOwnersCardInTrash(card, CanSelectCardCondition))
  195. {
  196. CardSource selectedCard = null;
  197. int maxCount = Math.Min(1, CardEffectCommons.MatchConditionOwnersCardCountInTrash(card, CanSelectCardCondition));
  198. SelectCardEffect selectCardEffect = GManager.instance.GetComponent<SelectCardEffect>();
  199. selectCardEffect.SetUp(
  200. canTargetCondition: CanSelectCardCondition,
  201. canTargetCondition_ByPreSelecetedList: null,
  202. canEndSelectCondition: null,
  203. canNoSelect: () => true,
  204. selectCardCoroutine: SelectCardCoroutine,
  205. afterSelectCardCoroutine: null,
  206. message: "Select 1 [DM] digimon to play",
  207. maxCount: maxCount,
  208. canEndNotMax: true,
  209. isShowOpponent: true,
  210. mode: SelectCardEffect.Mode.Custom,
  211. root: SelectCardEffect.Root.Trash,
  212. customRootCardList: null,
  213. canLookReverseCard: true,
  214. selectPlayer: card.Owner,
  215. cardEffect: activateClass);
  216. selectCardEffect.SetUpCustomMessage("Select 1 [DM] digimon to play", "The opponent is selecting 1 digimon to play.");
  217. yield return StartCoroutine(selectCardEffect.Activate());
  218. IEnumerator SelectCardCoroutine(CardSource cardSource)
  219. {
  220. selectedCard = cardSource;
  221. yield return null;
  222. }
  223. 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));
  224. }
  225. }
  226. }
  227. #endregion
  228. #region ESS
  229. if (timing == EffectTiming.OnDestroyedAnyone)
  230. {
  231. ActivateClass activateClass = new ActivateClass();
  232. activateClass.SetUpICardEffect("Play 1 level 4 or less [DM] Digimon", CanUseCondition, card);
  233. activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, true, EffectDiscription());
  234. activateClass.SetIsInheritedEffect(true);
  235. cardEffects.Add(activateClass);
  236. string EffectDiscription()
  237. {
  238. return "[On Deletion] you may play 1 level 4 or lower [DM] trait Digimon card from your trash without paying the cost.";
  239. }
  240. bool CanUseCondition(Hashtable hashtable)
  241. {
  242. return CardEffectCommons.CanTriggerOnDeletion(hashtable, card, activateClass);
  243. }
  244. bool CanActivateCondition(Hashtable hashtable)
  245. {
  246. return CardEffectCommons.CanActivateOnDeletion(card, activateClass);
  247. }
  248. bool CanSelectCardCondition(CardSource cardSource)
  249. {
  250. if (cardSource.IsDigimon && cardSource.Level <= 4 && cardSource.EqualsTraits("DM"))
  251. {
  252. if (CardEffectCommons.CanPlayAsNewPermanent(cardSource: cardSource, payCost: false, cardEffect: activateClass))
  253. {
  254. return true;
  255. }
  256. }
  257. return false;
  258. }
  259. IEnumerator ActivateCoroutine(Hashtable hashtable)
  260. {
  261. if (CardEffectCommons.HasMatchConditionOwnersCardInTrash(card, CanSelectCardCondition))
  262. {
  263. CardSource selectedCard = null;
  264. SelectCardEffect selectCardEffect = GManager.instance.GetComponent<SelectCardEffect>();
  265. selectCardEffect.SetUp(
  266. canTargetCondition: CanSelectCardCondition,
  267. canTargetCondition_ByPreSelecetedList: null,
  268. canEndSelectCondition: null,
  269. canNoSelect: () => true,
  270. selectCardCoroutine: SelectCardCoroutine,
  271. afterSelectCardCoroutine: null,
  272. message: "Select 1 [DM] digimon to play",
  273. maxCount: 1,
  274. canEndNotMax: true,
  275. isShowOpponent: true,
  276. mode: SelectCardEffect.Mode.Custom,
  277. root: SelectCardEffect.Root.Trash,
  278. customRootCardList: null,
  279. canLookReverseCard: true,
  280. selectPlayer: card.Owner,
  281. cardEffect: activateClass);
  282. selectCardEffect.SetUpCustomMessage("Select 1 [DM] digimon to play", "The opponent is selecting 1 digimon to play.");
  283. yield return StartCoroutine(selectCardEffect.Activate());
  284. IEnumerator SelectCardCoroutine(CardSource cardSource)
  285. {
  286. selectedCard = cardSource;
  287. yield return null;
  288. }
  289. 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));
  290. }
  291. }
  292. }
  293. #endregion
  294. return cardEffects;
  295. }
  296. }
  297. }