EX12_074.cs 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. // Genshi Continent & Ashino Island
  4. namespace DCGO.CardEffects.EX12
  5. {
  6. public class EX12_074 : CEntity_Effect
  7. {
  8. public override List<ICardEffect> CardEffects(EffectTiming timing, CardSource card)
  9. {
  10. List<ICardEffect> cardEffects = new List<ICardEffect>();
  11. #region Use Req
  12. if (timing == EffectTiming.None)
  13. {
  14. cardEffects.Add(CardEffectFactory.UseRequirements(card, CardCondition));
  15. bool CardCondition(CardSource cardSource)
  16. {
  17. return cardSource.EqualsTraits("Shambala");
  18. }
  19. }
  20. #endregion
  21. #region Your Turn Security
  22. if (timing == EffectTiming.OnAllyAttack)
  23. {
  24. ActivateClass activateClass = new ActivateClass();
  25. activateClass.SetUpICardEffect("May digivolve to [Shambala] for 1 less", CanUseCondition, card);
  26. activateClass.SetUpActivateClass(CanActivateCondition, ActivateCoroutine, 1, true, EffectDescription());
  27. activateClass.SetHashString("EX12_074_YT");
  28. cardEffects.Add(activateClass);
  29. string EffectDescription()
  30. => "[Security] [Your Turn] [Once Per Turn] When one of your [Shambala] trait Digimon attacks, it may digivolve into a [Shambala] trait Digimon card in the hand with the cost reduced by 1.";
  31. bool CanUseCondition(Hashtable hashtable)
  32. => CardEffectCommons.IsExistInSecurity(card, false)
  33. && CardEffectCommons.IsOwnerTurn(card)
  34. && CardEffectCommons.CanTriggerOnPermanentAttack(hashtable, PermanentCondition);
  35. bool CanActivateCondition(Hashtable hashtable)
  36. => CardEffectCommons.IsExistInSecurity(card, false)
  37. && CardEffectCommons.HasMatchConditionOwnersHand(card, CanSelectCardCondition);
  38. bool PermanentCondition(Permanent permanent)
  39. => CardEffectCommons.IsPermanentExistsOnOwnerBattleAreaDigimon(permanent, card)
  40. && permanent.TopCard.EqualsTraits("Shambala");
  41. bool CanSelectCardCondition(CardSource cardSource)
  42. => cardSource.EqualsTraits("Shambala");
  43. IEnumerator ActivateCoroutine(Hashtable hashtable)
  44. {
  45. yield return ContinuousController.instance.StartCoroutine(CardEffectCommons.DigivolveIntoHandOrTrashCard(
  46. targetPermanent: GManager.instance.attackProcess.AttackingPermanent,
  47. cardCondition: CanSelectCardCondition,
  48. payCost: true,
  49. reduceCostTuple: (reduceCost: 1, reduceCostCardCondition: null),
  50. fixedCostTuple: null,
  51. ignoreDigivolutionRequirementFixedCost: -1,
  52. isHand: true,
  53. activateClass: activateClass,
  54. successProcess: null));
  55. }
  56. }
  57. #endregion
  58. #region Main Effect
  59. if (timing == EffectTiming.OptionSkill)
  60. {
  61. ActivateClass activateClass = new ActivateClass();
  62. activateClass.SetUpICardEffect("Replace your bottom sec with this face-up card, play a [Shambala] Digimon for -3", CanUseCondition, card);
  63. activateClass.SetUpActivateClass(null, ActivateCoroutine, -1, false, EffectDescription());
  64. cardEffects.Add(activateClass);
  65. string EffectDescription()
  66. {
  67. return "[Main] Add your bottom security card to the hand and place this card face up as the bottom security card. Then, you may play 1 [Shambala] trait Digimon card from your hand with the play cost reduced by 3.";
  68. }
  69. bool CanUseCondition(Hashtable hashtable)
  70. {
  71. return CardEffectCommons.CanTriggerOptionMainEffect(hashtable, card);
  72. }
  73. bool CanSelectCardCondition(CardSource cardSource)
  74. {
  75. return cardSource.IsDigimon
  76. && cardSource.EqualsTraits("Shambala")
  77. && CardEffectCommons.CanPlayAsNewPermanent(cardSource, true, activateClass, fixedCost: cardSource.GetCostItself - 3);
  78. }
  79. IEnumerator ActivateCoroutine(Hashtable hashtable)
  80. {
  81. yield return ContinuousController.instance.StartCoroutine(CardEffectFactory.ReplaceBottomSecurityWithFaceUpOptionEffect(card, activateClass));
  82. if (CardEffectCommons.HasMatchConditionOwnersHand(card, CanSelectCardCondition))
  83. {
  84. yield return ContinuousController.instance.StartCoroutine(CardEffectCommons.PlayByEffect(
  85. canTargetCondition: CanSelectCardCondition,
  86. SelectCardEffect.Root.Hand,
  87. activateClass,
  88. payCost: true,
  89. reduceCostTuple: (3, null)
  90. ));
  91. }
  92. }
  93. }
  94. #endregion
  95. #region Security Effect
  96. if (timing == EffectTiming.SecuritySkill)
  97. {
  98. ActivateClass activateClass = new ActivateClass();
  99. activateClass.SetUpICardEffect($"Play 1 play cost 5 or lower [Shambala] Digimon card from hand/trash", CanUseCondition, card);
  100. activateClass.SetUpActivateClass(null, ActivateCoroutine, -1, false, EffectDescription());
  101. activateClass.SetIsSecurityEffect(true);
  102. cardEffects.Add(activateClass);
  103. string EffectDescription()
  104. => "[Security] You may play 1 play cost 5 or lower [Shambala] trait Digimon card from your hand or trash without paying the cost.";
  105. bool CanUseCondition(Hashtable hashtable)
  106. {
  107. return CardEffectCommons.CanTriggerSecurityEffect(hashtable, card);
  108. }
  109. bool CanPlayCondition(CardSource cardSource)
  110. {
  111. return cardSource.IsDigimon
  112. && cardSource.HasPlayCost
  113. && cardSource.GetCostItself <= 5
  114. && cardSource.EqualsTraits("Shambala")
  115. && CardEffectCommons.CanPlayAsNewPermanent(cardSource: cardSource, payCost: false, cardEffect: activateClass);
  116. }
  117. IEnumerator ActivateCoroutine(Hashtable hashtable)
  118. {
  119. bool canSelectHand = CardEffectCommons.HasMatchConditionOwnersHand(card, CanPlayCondition);
  120. bool canSelectTrash = CardEffectCommons.HasMatchConditionOwnersCardInTrash(card, CanPlayCondition);
  121. if (canSelectHand || canSelectTrash)
  122. {
  123. if (canSelectHand && canSelectTrash)
  124. {
  125. List<SelectionElement<int>> selectionElements1 = new List<SelectionElement<int>>()
  126. {
  127. new (message: $"From hand", value : 1, spriteIndex: 0),
  128. new (message: $"From trash", value : 2, spriteIndex: 0),
  129. new (message: $"Don't play", value: 3, spriteIndex: 1)
  130. };
  131. string selectPlayerMessage1 = "From which area will you play a card?";
  132. string notSelectPlayerMessage1 = "The opponent is choosing from which area to select a card.";
  133. GManager.instance.userSelectionManager.SetIntSelection(selectionElements: selectionElements1, selectPlayer: card.Owner, selectPlayerMessage: selectPlayerMessage1, notSelectPlayerMessage: notSelectPlayerMessage1);
  134. }
  135. else
  136. {
  137. GManager.instance.userSelectionManager.SetInt(canSelectHand ? 1 : 2);
  138. }
  139. yield return ContinuousController.instance.StartCoroutine(GManager.instance.userSelectionManager.WaitForEndSelect());
  140. SelectCardEffect.Root root = GManager.instance.userSelectionManager.SelectedIntValue == 1 ? SelectCardEffect.Root.Hand : SelectCardEffect.Root.Trash;
  141. bool doSelect = GManager.instance.userSelectionManager.SelectedIntValue != 3;
  142. if (doSelect)
  143. {
  144. #region Hand/Trash Card Selection & Play
  145. yield return ContinuousController.instance.StartCoroutine(CardEffectCommons.PlayByEffect(
  146. canTargetCondition: CanPlayCondition,
  147. root,
  148. activateClass,
  149. payCost: false
  150. ));
  151. #endregion
  152. }
  153. }
  154. }
  155. }
  156. #endregion
  157. return cardEffects;
  158. }
  159. }
  160. }