EX3_035.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. namespace DCGO.CardEffects.EX3
  6. {
  7. public class EX3_035 : CEntity_Effect
  8. {
  9. public override List<ICardEffect> CardEffects(EffectTiming timing, CardSource card)
  10. {
  11. List<ICardEffect> cardEffects = new List<ICardEffect>();
  12. if (timing == EffectTiming.OnEnterFieldAnyone)
  13. {
  14. ActivateClass activateClass = new ActivateClass();
  15. activateClass.SetUpICardEffect("Return 1 card from trash to hand", CanUseCondition, card);
  16. activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, true, EffectDiscription());
  17. cardEffects.Add(activateClass);
  18. string EffectDiscription()
  19. {
  20. return "[When Digivolving] You may return 1 card with the [Four Great Dragons] trait from your trash to your hand.";
  21. }
  22. bool CanSelectCardCondition(CardSource cardSource)
  23. {
  24. if (cardSource != null)
  25. {
  26. if (cardSource.Owner == card.Owner)
  27. {
  28. if (cardSource.CardTraits.Contains("Four Great Dragons"))
  29. {
  30. return true;
  31. }
  32. if (cardSource.CardTraits.Contains("FourGreatDragons"))
  33. {
  34. return true;
  35. }
  36. }
  37. }
  38. return false;
  39. }
  40. bool CanUseCondition(Hashtable hashtable)
  41. {
  42. return CardEffectCommons.CanTriggerWhenDigivolving(hashtable, card);
  43. }
  44. bool CanActivateCondition(Hashtable hashtable)
  45. {
  46. if (CardEffectCommons.IsExistOnBattleArea(card))
  47. {
  48. if (CardEffectCommons.HasMatchConditionOwnersCardInTrash(card, CanSelectCardCondition))
  49. {
  50. return true;
  51. }
  52. }
  53. return false;
  54. }
  55. IEnumerator ActivateCoroutine(Hashtable _hashtable)
  56. {
  57. if (isExistOnField(card))
  58. {
  59. if (card.Owner.GetBattleAreaDigimons().Contains(card.PermanentOfThisCard()))
  60. {
  61. if (CardEffectCommons.HasMatchConditionOwnersCardInTrash(card, CanSelectCardCondition))
  62. {
  63. int maxCount = Math.Min(1, card.Owner.TrashCards.Count(CanSelectCardCondition));
  64. SelectCardEffect selectCardEffect = GManager.instance.GetComponent<SelectCardEffect>();
  65. selectCardEffect.SetUp(
  66. canTargetCondition: CanSelectCardCondition,
  67. canTargetCondition_ByPreSelecetedList: null,
  68. canEndSelectCondition: null,
  69. canNoSelect: () => true,
  70. selectCardCoroutine: null,
  71. afterSelectCardCoroutine: null,
  72. message: "Select 1 card to add to your hand.",
  73. maxCount: maxCount,
  74. canEndNotMax: false,
  75. isShowOpponent: true,
  76. mode: SelectCardEffect.Mode.AddHand,
  77. root: SelectCardEffect.Root.Trash,
  78. customRootCardList: null,
  79. canLookReverseCard: true,
  80. selectPlayer: card.Owner,
  81. cardEffect: activateClass);
  82. yield return ContinuousController.instance.StartCoroutine(selectCardEffect.Activate());
  83. }
  84. }
  85. }
  86. }
  87. }
  88. if (timing == EffectTiming.OnAllyAttack)
  89. {
  90. ActivateClass activateClass = new ActivateClass();
  91. activateClass.SetUpICardEffect("DP -6000 and trash the top 2 cards of opponent's security", CanUseCondition, card);
  92. activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, false, EffectDiscription());
  93. cardEffects.Add(activateClass);
  94. string EffectDiscription()
  95. {
  96. return "[When Attacking] 1 of your opponent's Digimon gets -6000 for the turn. Then, by returning 1 [Magnadramon], 1 [Azulongmon], and 1 [Megidramon] from your trash to the bottom of your deck in any order, trash the top 2 cards of your opponent's security stack.";
  97. }
  98. bool CanSelectPermanentCondition(Permanent permanent)
  99. {
  100. return CardEffectCommons.IsPermanentExistsOnOpponentBattleAreaDigimon(permanent, card);
  101. }
  102. bool CanSelectCardCondition(CardSource cardSource)
  103. {
  104. if (cardSource != null)
  105. {
  106. if (cardSource.Owner == card.Owner)
  107. {
  108. if (cardSource.CardNames.Contains("Magnadramon"))
  109. {
  110. return true;
  111. }
  112. }
  113. }
  114. return false;
  115. }
  116. bool CanSelectCardCondition1(CardSource cardSource)
  117. {
  118. if (cardSource != null)
  119. {
  120. if (cardSource.Owner == card.Owner)
  121. {
  122. if (cardSource.CardNames.Contains("Azulongmon"))
  123. {
  124. return true;
  125. }
  126. }
  127. }
  128. return false;
  129. }
  130. bool CanSelectCardCondition2(CardSource cardSource)
  131. {
  132. if (cardSource != null)
  133. {
  134. if (cardSource.Owner == card.Owner)
  135. {
  136. if (cardSource.CardNames.Contains("Megidramon"))
  137. {
  138. return true;
  139. }
  140. }
  141. }
  142. return false;
  143. }
  144. bool CanUseCondition(Hashtable hashtable)
  145. {
  146. return CardEffectCommons.CanTriggerOnAttack(hashtable, card);
  147. }
  148. bool CanActivateCondition(Hashtable hashtable)
  149. {
  150. if (isExistOnField(card))
  151. {
  152. if (card.Owner.GetBattleAreaDigimons().Contains(card.PermanentOfThisCard()))
  153. {
  154. if (CardEffectCommons.HasMatchConditionPermanent(CanSelectPermanentCondition))
  155. {
  156. return true;
  157. }
  158. if (CardEffectCommons.HasMatchConditionOwnersCardInTrash(card, CanSelectCardCondition))
  159. {
  160. if (CardEffectCommons.HasMatchConditionOwnersCardInTrash(card, CanSelectCardCondition1))
  161. {
  162. if (CardEffectCommons.HasMatchConditionOwnersCardInTrash(card, CanSelectCardCondition2))
  163. {
  164. return true;
  165. }
  166. }
  167. }
  168. }
  169. }
  170. return false;
  171. }
  172. IEnumerator ActivateCoroutine(Hashtable _hashtable)
  173. {
  174. if (isExistOnField(card))
  175. {
  176. if (card.Owner.GetBattleAreaDigimons().Contains(card.PermanentOfThisCard()))
  177. {
  178. if (CardEffectCommons.HasMatchConditionPermanent(CanSelectPermanentCondition))
  179. {
  180. int maxCount = Math.Min(1, CardEffectCommons.MatchConditionPermanentCount(CanSelectPermanentCondition));
  181. SelectPermanentEffect selectPermanentEffect = GManager.instance.GetComponent<SelectPermanentEffect>();
  182. selectPermanentEffect.SetUp(
  183. selectPlayer: card.Owner,
  184. canTargetCondition: CanSelectPermanentCondition,
  185. canTargetCondition_ByPreSelecetedList: null,
  186. canEndSelectCondition: null,
  187. maxCount: maxCount,
  188. canNoSelect: false,
  189. canEndNotMax: false,
  190. selectPermanentCoroutine: SelectPermanentCoroutine,
  191. afterSelectPermanentCoroutine: null,
  192. mode: SelectPermanentEffect.Mode.Custom,
  193. cardEffect: activateClass);
  194. selectPermanentEffect.SetUpCustomMessage("Select 1 Digimon that will get DP -6000.", "The opponent is selecting 1 Digimon that will get DP -6000.");
  195. yield return ContinuousController.instance.StartCoroutine(selectPermanentEffect.Activate());
  196. IEnumerator SelectPermanentCoroutine(Permanent permanent)
  197. {
  198. yield return ContinuousController.instance.StartCoroutine(CardEffectCommons.ChangeDigimonDP(targetPermanent: permanent, changeValue: -6000, effectDuration: EffectDuration.UntilEachTurnEnd, activateClass: activateClass));
  199. }
  200. }
  201. if (CardEffectCommons.HasMatchConditionOwnersCardInTrash(card, CanSelectCardCondition))
  202. {
  203. if (CardEffectCommons.HasMatchConditionOwnersCardInTrash(card, CanSelectCardCondition1))
  204. {
  205. if (CardEffectCommons.HasMatchConditionOwnersCardInTrash(card, CanSelectCardCondition2))
  206. {
  207. int maxCount = 3;
  208. SelectCardEffect selectCardEffect = GManager.instance.GetComponent<SelectCardEffect>();
  209. selectCardEffect.SetUp(
  210. canTargetCondition: (cardSource) => CanSelectCardCondition(cardSource) || CanSelectCardCondition1(cardSource) || CanSelectCardCondition2(cardSource),
  211. canTargetCondition_ByPreSelecetedList: CanTargetCondition_ByPreSelecetedList,
  212. canEndSelectCondition: CanEndSelectCondition,
  213. canNoSelect: () => true,
  214. selectCardCoroutine: null,
  215. afterSelectCardCoroutine: AfterSelectCardCoroutine1,
  216. message: "Select cards to place at the bottom of the deck\n(cards will be placed back to the bottom of the deck so that cards with lower numbers are on top).",
  217. maxCount: maxCount,
  218. canEndNotMax: false,
  219. isShowOpponent: false,
  220. mode: SelectCardEffect.Mode.Custom,
  221. root: SelectCardEffect.Root.Trash,
  222. customRootCardList: null,
  223. canLookReverseCard: true,
  224. selectPlayer: card.Owner,
  225. cardEffect: activateClass);
  226. selectCardEffect.SetNotShowCard();
  227. selectCardEffect.SetNotAddLog();
  228. yield return ContinuousController.instance.StartCoroutine(selectCardEffect.Activate());
  229. bool CanTargetCondition_ByPreSelecetedList(List<CardSource> cardSources, CardSource cardSource)
  230. {
  231. if (cardSources.Count(CanSelectCardCondition) >= 1)
  232. {
  233. if (CanSelectCardCondition(cardSource))
  234. {
  235. if (!CanSelectCardCondition1(cardSource) && !CanSelectCardCondition2(cardSource))
  236. {
  237. return false;
  238. }
  239. }
  240. }
  241. if (cardSources.Count(CanSelectCardCondition1) >= 1)
  242. {
  243. if (CanSelectCardCondition1(cardSource))
  244. {
  245. if (!CanSelectCardCondition(cardSource) && !CanSelectCardCondition2(cardSource))
  246. {
  247. return false;
  248. }
  249. }
  250. }
  251. if (cardSources.Count(CanSelectCardCondition2) >= 1)
  252. {
  253. if (CanSelectCardCondition2(cardSource))
  254. {
  255. if (!CanSelectCardCondition1(cardSource) && !CanSelectCardCondition(cardSource))
  256. {
  257. return false;
  258. }
  259. }
  260. }
  261. return true;
  262. }
  263. bool CanEndSelectCondition(List<CardSource> cardSources)
  264. {
  265. if (cardSources.Count(CanSelectCardCondition) == 0)
  266. {
  267. return false;
  268. }
  269. if (cardSources.Count(CanSelectCardCondition1) == 0)
  270. {
  271. return false;
  272. }
  273. if (cardSources.Count(CanSelectCardCondition2) == 0)
  274. {
  275. return false;
  276. }
  277. return true;
  278. }
  279. IEnumerator AfterSelectCardCoroutine1(List<CardSource> cardSources)
  280. {
  281. if (cardSources.Count == 3)
  282. {
  283. yield return ContinuousController.instance.StartCoroutine(CardObjectController.AddLibraryBottomCards(cardSources));
  284. yield return ContinuousController.instance.StartCoroutine(GManager.instance.GetComponent<Effects>().ShowCardEffect(cardSources, "Deck Bottom Cards", true, true));
  285. yield return ContinuousController.instance.StartCoroutine(new IDestroySecurity(
  286. player: card.Owner.Enemy,
  287. destroySecurityCount: 2,
  288. cardEffect: activateClass,
  289. fromTop: true).DestroySecurity());
  290. }
  291. }
  292. }
  293. }
  294. }
  295. }
  296. }
  297. }
  298. }
  299. return cardEffects;
  300. }
  301. }
  302. }