BT22_011.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. // BlueMeramon
  5. namespace DCGO.CardEffects.BT22
  6. {
  7. public class BT22_011 : 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 Condition
  13. if (timing == EffectTiming.None)
  14. {
  15. bool PermanentCondition(Permanent targetPermanent)
  16. {
  17. return targetPermanent.TopCard.IsLevel4 && (targetPermanent.TopCard.HasFlameTraits || targetPermanent.TopCard.HasCSTraits);
  18. }
  19. cardEffects.Add(CardEffectFactory.AddSelfDigivolutionRequirementStaticEffect(permanentCondition: PermanentCondition, digivolutionCost: 3, ignoreDigivolutionRequirement: false, card: card, condition: null));
  20. }
  21. #endregion
  22. #region Alliance
  23. if (timing == EffectTiming.OnAllyAttack)
  24. {
  25. cardEffects.Add(CardEffectFactory.AllianceSelfEffect(isInheritedEffect: false, card: card, condition: null));
  26. }
  27. #endregion
  28. #region Main
  29. if (timing == EffectTiming.OnDeclaration)
  30. {
  31. ActivateClass activateClass = new ActivateClass();
  32. activateClass.SetUpICardEffect("Pay 3, Play 1 level 5 or lower [Flame]/[CS] digimon from trash. then it may attack", CanUseCondition, card);
  33. activateClass.SetUpActivateClass(null, ActivateCoroutine, 1, false, EffectDiscription());
  34. activateClass.SetHashString("BT22_011_Main");
  35. cardEffects.Add(activateClass);
  36. string EffectDiscription()
  37. {
  38. return "[Main] [Once Per Turn] By paying 3 cost, you may play 1 play cost 5 or lower Digimon card with the [Flame] or [CS] trait from your trash without paying the cost. Then, this Digimon may attack.";
  39. }
  40. bool CanUseCondition(Hashtable hashtable)
  41. {
  42. return CardEffectCommons.IsExistOnBattleAreaDigimon(card) && CardEffectCommons.IsOwnerTurn(card);
  43. }
  44. bool CanSelectCardCondition(CardSource cardSource)
  45. {
  46. return cardSource.IsDigimon
  47. && (cardSource.HasFlameTraits || cardSource.HasCSTraits)
  48. && cardSource.HasPlayCost && cardSource.BasePlayCostFromEntity <= 5
  49. && CardEffectCommons.CanPlayAsNewPermanent(cardSource: cardSource, payCost: false, cardEffect: activateClass);
  50. }
  51. IEnumerator ActivateCoroutine(Hashtable hashtable)
  52. {
  53. yield return ContinuousController.instance.StartCoroutine(card.Owner.AddMemory(-3, activateClass));
  54. if (CardEffectCommons.HasMatchConditionOwnersCardInTrash(card, CanSelectCardCondition))
  55. {
  56. CardSource selectedCard = null;
  57. int maxCount = Math.Min(1, CardEffectCommons.MatchConditionOwnersCardCountInTrash(card, CanSelectCardCondition));
  58. SelectCardEffect selectCardEffect = GManager.instance.GetComponent<SelectCardEffect>();
  59. selectCardEffect.SetUp(
  60. canTargetCondition: CanSelectCardCondition,
  61. canTargetCondition_ByPreSelecetedList: null,
  62. canEndSelectCondition: null,
  63. canNoSelect: () => true,
  64. selectCardCoroutine: SelectCardCoroutine,
  65. afterSelectCardCoroutine: null,
  66. message: "Select 1 digimon card to play.",
  67. maxCount: maxCount,
  68. canEndNotMax: false,
  69. isShowOpponent: true,
  70. mode: SelectCardEffect.Mode.Custom,
  71. root: SelectCardEffect.Root.Trash,
  72. customRootCardList: null,
  73. canLookReverseCard: true,
  74. selectPlayer: card.Owner,
  75. cardEffect: activateClass);
  76. IEnumerator SelectCardCoroutine(CardSource cardSource)
  77. {
  78. selectedCard = cardSource;
  79. yield return null;
  80. }
  81. selectCardEffect.SetUpCustomMessage("Select 1 digimon card to play.", "The opponent is selecting 1 digimon card to play.");
  82. selectCardEffect.SetUpCustomMessage_ShowCard("Selected Card");
  83. yield return StartCoroutine(selectCardEffect.Activate());
  84. if (selectedCard) yield return ContinuousController.instance.StartCoroutine(CardEffectCommons.PlayPermanentCards(cardSources: new List<CardSource>() { selectedCard }, activateClass: activateClass, payCost: false, isTapped: false, root: SelectCardEffect.Root.Trash, activateETB: true));
  85. }
  86. if (card.PermanentOfThisCard().CanAttack(activateClass))
  87. {
  88. SelectAttackEffect selectAttackEffect = GManager.instance.GetComponent<SelectAttackEffect>();
  89. selectAttackEffect.SetUp(
  90. attacker: card.PermanentOfThisCard(),
  91. canAttackPlayerCondition: () => true,
  92. defenderCondition: _ => true,
  93. cardEffect: activateClass);
  94. yield return ContinuousController.instance.StartCoroutine(selectAttackEffect.Activate());
  95. }
  96. }
  97. }
  98. #endregion
  99. #region ESS
  100. if (timing == EffectTiming.OnAllyAttack)
  101. {
  102. bool Condition()
  103. {
  104. return CardEffectCommons.IsExistOnBattleArea(card)
  105. && CardEffectCommons.IsOwnerTurn(card)
  106. && (card.PermanentOfThisCard().TopCard.HasFlameTraits || card.PermanentOfThisCard().TopCard.HasCSTraits);
  107. }
  108. cardEffects.Add(CardEffectFactory.AllianceSelfEffect(isInheritedEffect: true, card: card, condition: Condition));
  109. }
  110. #endregion
  111. return cardEffects;
  112. }
  113. }
  114. }