BT10_041.cs 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using System.Linq;
  5. using Photon;
  6. using System;
  7. using Photon.Pun;
  8. namespace DCGO.CardEffects.BT10
  9. {
  10. public class BT10_041 : CEntity_Effect
  11. {
  12. public override List<ICardEffect> CardEffects(EffectTiming timing, CardSource card)
  13. {
  14. List<ICardEffect> cardEffects = new List<ICardEffect>();
  15. if (timing == EffectTiming.OnEnterFieldAnyone)
  16. {
  17. ActivateClass activateClass = new ActivateClass();
  18. activateClass.SetUpICardEffect("Play 1 Option from hand", CanUseCondition, card);
  19. activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, true, EffectDiscription());
  20. cardEffects.Add(activateClass);
  21. string EffectDiscription()
  22. {
  23. return "[When Digivolving] You may use 1 Option card with [Plug-In] in its name or that's yellow and has a memory cost of 5 or less from your hand without meeting its color requirements or paying its memory cost. Place the Option card used with this effect on top of your security stack face down instead of placing it in your trash.";
  24. }
  25. bool OptionCondition(CardSource cardSource)
  26. {
  27. if (cardSource.IsOption)
  28. {
  29. if (cardSource.ContainsCardName("Plug-In"))
  30. {
  31. return true;
  32. }
  33. if (cardSource.HasCardColor(CardColor.Yellow))
  34. {
  35. if (cardSource.GetCostItself <= 5)
  36. {
  37. return true;
  38. }
  39. }
  40. }
  41. return false;
  42. }
  43. bool CanSelectCardCondition(CardSource cardSource)
  44. {
  45. if (OptionCondition(cardSource))
  46. {
  47. if (!cardSource.CanNotPlayThisOption)
  48. {
  49. return true;
  50. }
  51. }
  52. return false;
  53. }
  54. bool CanUseCondition(Hashtable hashtable)
  55. {
  56. return CardEffectCommons.CanTriggerWhenDigivolving(hashtable, card);
  57. }
  58. bool CanActivateCondition(Hashtable hashtable)
  59. {
  60. if (CardEffectCommons.IsExistOnBattleArea(card))
  61. {
  62. if (card.Owner.HandCards.Count >= 1)
  63. {
  64. return true;
  65. }
  66. }
  67. return false;
  68. }
  69. IEnumerator ActivateCoroutine(Hashtable _hashtable)
  70. {
  71. #region ignore color requirement
  72. IgnoreColorConditionClass ignoreColorConditionClass = new IgnoreColorConditionClass();
  73. ignoreColorConditionClass.SetUpICardEffect("ignore color condition", CanUseCondition1, card);
  74. ignoreColorConditionClass.SetUpIgnoreColorConditionClass(cardCondition: OptionCondition);
  75. Func<EffectTiming, ICardEffect> getCardEffect = GetCardEffect;
  76. card.Owner.UntilCalculateFixedCostEffect.Add(getCardEffect);
  77. ICardEffect GetCardEffect(EffectTiming _timing)
  78. {
  79. if (_timing == EffectTiming.None)
  80. {
  81. return ignoreColorConditionClass;
  82. }
  83. return null;
  84. }
  85. bool CanUseCondition1(Hashtable hashtable)
  86. {
  87. return true;
  88. }
  89. #endregion
  90. if (card.Owner.HandCards.Count(CanSelectCardCondition) >= 1)
  91. {
  92. List<CardSource> selectedCards = new List<CardSource>();
  93. int maxCount = 1;
  94. SelectHandEffect selectHandEffect = GManager.instance.GetComponent<SelectHandEffect>();
  95. selectHandEffect.SetUp(
  96. selectPlayer: card.Owner,
  97. canTargetCondition: CanSelectCardCondition,
  98. canTargetCondition_ByPreSelecetedList: null,
  99. canEndSelectCondition: null,
  100. maxCount: maxCount,
  101. canNoSelect: true,
  102. canEndNotMax: false,
  103. isShowOpponent: true,
  104. selectCardCoroutine: SelectCardCoroutine,
  105. afterSelectCardCoroutine: null,
  106. mode: SelectHandEffect.Mode.Custom,
  107. cardEffect: activateClass);
  108. selectHandEffect.SetUpCustomMessage(
  109. "Select 1 option card to use.",
  110. "The opponent is selecting 1 option card to use.");
  111. selectHandEffect.SetUpCustomMessage_ShowCard("Used Card");
  112. yield return StartCoroutine(selectHandEffect.Activate());
  113. IEnumerator SelectCardCoroutine(CardSource cardSource)
  114. {
  115. selectedCards.Add(cardSource);
  116. yield return null;
  117. }
  118. yield return ContinuousController.instance.StartCoroutine(
  119. CardEffectCommons.PlayOptionCards(
  120. cardSources: selectedCards,
  121. activateClass: activateClass,
  122. payCost: false,
  123. root: SelectCardEffect.Root.Hand,
  124. setAddSecurityEndOption: true
  125. )
  126. );
  127. }
  128. #region release effect
  129. card.Owner.UntilCalculateFixedCostEffect.Remove(getCardEffect);
  130. #endregion
  131. }
  132. }
  133. if (timing == EffectTiming.OnAllyAttack)
  134. {
  135. ActivateClass activateClass = new ActivateClass();
  136. activateClass.SetUpICardEffect("This Digimon digivolves", CanUseCondition, card);
  137. activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, -1, true, EffectDiscription());
  138. cardEffects.Add(activateClass);
  139. string EffectDiscription()
  140. {
  141. return "[When Attacking] This Digimon may digivolve into a [Sakuyamon] in your hand for a cost of 1, ignoring its digivolution requirements.";
  142. }
  143. bool CanSelectCardCondition(CardSource cardSource)
  144. {
  145. return cardSource.CardNames.Contains("Sakuyamon");
  146. }
  147. bool CanUseCondition(Hashtable hashtable)
  148. {
  149. return CardEffectCommons.CanTriggerOnAttack(hashtable, card);
  150. }
  151. bool CanActivateCondition(Hashtable hashtable)
  152. {
  153. if (CardEffectCommons.IsExistOnBattleArea(card))
  154. {
  155. if (card.Owner.HandCards.Count >= 1)
  156. {
  157. return true;
  158. }
  159. }
  160. return false;
  161. }
  162. IEnumerator ActivateCoroutine(Hashtable _hashtable)
  163. {
  164. yield return ContinuousController.instance.StartCoroutine(CardEffectCommons.DigivolveIntoHandOrTrashCard(
  165. targetPermanent: card.PermanentOfThisCard(),
  166. cardCondition: CanSelectCardCondition,
  167. payCost: true,
  168. reduceCostTuple: null,
  169. fixedCostTuple: null,
  170. ignoreDigivolutionRequirementFixedCost: 1,
  171. isHand: true,
  172. activateClass: activateClass,
  173. successProcess: null));
  174. }
  175. }
  176. return cardEffects;
  177. }
  178. }
  179. }