Explorar el Código

Machinedramon Ace

Lewisaaronwelch hace 1 mes
padre
commit
b92f3fa683

+ 32 - 14
Assets/Scripts/CardEffect/EX12/Black/EX12_059.cs

@@ -118,7 +118,7 @@ namespace DCGO.CardEffects.EX12
                     yield return ContinuousController.instance.StartCoroutine(selectPermanentEffect.Activate());
                 }
 
-                if(card.Owner.HandCards.Count(CanSelectCardCondition) + card.Owner.TrashCards.Count(CanSelectCardCondition) >= 2)
+                if (card.Owner.HandCards.Count(CanSelectCardCondition) + card.Owner.TrashCards.Count(CanSelectCardCondition) >= 2)
                 {
                     int toSelect = 2;
                     List<CardSource> selectedCards = new List<CardSource>();
@@ -230,22 +230,40 @@ namespace DCGO.CardEffects.EX12
 
                     if (selectedCards.Count == 2)
                     {
-                        yield return ContinuousController.instance.StartCoroutine(GManager.instance.GetComponent<Effects>().ShowCardEffect2(selectedCards, "Digivolution Cards", true, true));
-                        yield return ContinuousController.instance.StartCoroutine(card.PermanentOfThisCard().AddDigivolutionCardsBottom(selectedCards, activateClass));
-
-                        bool DigimonCondition(Permanent permanent)
+                        yield return CardEffectCommons.AddDigivolutionCardsAndProcessAccordingToResult(
+                            targetPermanent: card.PermanentOfThisCard(),
+                            targetDigivolutionCards: selectedCards,
+                            isTop: false,
+                            activateClass: activateClass,
+                            successProcess: SuccessProcess,
+                            failureProcess: null);
+
+                        IEnumerator SuccessProcess(List<CardSource> sources)
                         {
-                            return CardEffectCommons.IsPermanentExistsOnOwnerBattleAreaDigimon(permanent, card)
-                                && !permanent.TopCard.CanNotBeAffected(activateClass);
-                        }
+                            #region Setup
+                            bool EffectCondition(ICardEffect cardEffect) => CardEffectCommons.IsOpponentEffect(cardEffect, card);
+                            bool DigimonCondition(Permanent permanent)
+                            {
+                                return CardEffectCommons.IsPermanentExistsOnOwnerBattleAreaDigimon(permanent, card)
+                                    && !permanent.TopCard.CanNotBeAffected(activateClass);
+                            }
 
-                        ImmuneStackTrashingClass immuneFromStackTrashingClass = new ImmuneStackTrashingClass();
-                        immuneFromStackTrashingClass.SetUpICardEffect("Isn't affected by trashing any stacked card", hashtable => true, card);
-                        immuneFromStackTrashingClass.SetUpImmuneFromStackTrashingClass(PermanentCondition: DigimonCondition, EffectCondition: EffectCondition);
-                        card.Owner.UntilOpponentTurnEndEffects.Add((_timing) => immuneFromStackTrashingClass);
-                        card.Owner.UntilOpponentTurnEndEffects.Add((_timing) => PermanentEffectFactory.StaticAddDetailClass(_ => true, DigimonCondition, "Opponent's effects cannot trash stacked cards", false, activateClass));
+                            ImmuneStackTrashingClass immuneFromStackTrashingClass = new ImmuneStackTrashingClass();
+                            immuneFromStackTrashingClass.SetUpICardEffect("Isn't affected by trashing any stacked card", hashtable => true, card);
+                            immuneFromStackTrashingClass.SetUpImmuneFromStackTrashingClass(PermanentCondition: DigimonCondition, EffectCondition: EffectCondition);
 
-                        bool EffectCondition(ICardEffect cardEffect) => CardEffectCommons.IsOpponentEffect(cardEffect, card);
+                            ImmuneFromDeDigivolveClass immuneFromDeDigivolveClass = new ImmuneFromDeDigivolveClass();
+                            immuneFromDeDigivolveClass.SetUpICardEffect("Isn't affected by De-Digivolve", hashtable => true, card);
+                            immuneFromDeDigivolveClass.SetUpImmuneFromDeDigivolveClass(DigimonCondition);
+                            #endregion
+
+                            card.Owner.UntilOpponentTurnEndEffects.Add((_timing) => immuneFromStackTrashingClass);
+                            card.Owner.UntilOpponentTurnEndEffects.Add((_timing) => PermanentEffectFactory.StaticAddDetailClass(_ => true, DigimonCondition, "Opponent's effects cannot trash stacked cards", false, activateClass));
+
+                            card.Owner.UntilOpponentTurnEndEffects.Add((_timing) => immuneFromDeDigivolveClass);
+                            card.Owner.UntilOpponentTurnEndEffects.Add((_timing) => PermanentEffectFactory.StaticAddDetailClass(_ => true, DigimonCondition, "Opponent's effects cannot De-Digivolve", false, activateClass));
+                            return null;
+                        }
                     }
                 }
             }

+ 30 - 0
Assets/Scripts/Script/CardEffectCommons.cs

@@ -563,6 +563,36 @@ public partial class CardEffectCommons
 
     #endregion
 
+    #region Add target digivolution cards, and the effect determines whether the digivolution cards were added or not
+
+    public static IEnumerator AddDigivolutionCardsAndProcessAccordingToResult(Permanent targetPermanent, List<CardSource> targetDigivolutionCards, bool isTop, ICardEffect activateClass, Func<List<CardSource>, IEnumerator> successProcess, Func<IEnumerator> failureProcess)
+    {
+        if (targetPermanent == null) yield break;
+        if (targetDigivolutionCards == null) yield break;
+        if (targetDigivolutionCards.Count == 0) yield break;
+
+        yield return ContinuousController.instance.StartCoroutine(GManager.instance.GetComponent<Effects>().ShowCardEffect2(targetDigivolutionCards, "Digivolution Cards", true, true));
+        if (isTop) yield return ContinuousController.instance.StartCoroutine(targetPermanent.AddDigivolutionCardsTop(targetDigivolutionCards, activateClass));
+        else yield return ContinuousController.instance.StartCoroutine(targetPermanent.AddDigivolutionCardsBottom(targetDigivolutionCards, activateClass));
+
+        if (targetDigivolutionCards.Some((sourceCard) => targetPermanent.DigivolutionCards.Contains(sourceCard)))
+        {
+            if (successProcess != null)
+            {
+                yield return ContinuousController.instance.StartCoroutine(successProcess(targetDigivolutionCards));
+            }
+        }
+        else
+        {
+            if (failureProcess != null)
+            {
+                yield return ContinuousController.instance.StartCoroutine(failureProcess());
+            }
+        }
+    }
+
+    #endregion
+
     #region Trash target digivolution cards, and the effect determines whether the digivolution cards were trashed or not
 
     public static IEnumerator TrashDigivolutionCardsAndProcessAccordingToResult(Permanent targetPermanent, List<CardSource> targetDigivolutionCards, ICardEffect activateClass, Func<List<CardSource>, IEnumerator> successProcess, Func<IEnumerator> failureProcess)