فهرست منبع

Merge pull request #618 from DCGO2/hooperk-add-security

CEC method for checking a card was sent to security
x89rt2 5 ماه پیش
والد
کامیت
70b6775955

+ 19 - 20
Assets/Scripts/CardEffect/BT18/Yellow/BT18_034.cs

@@ -405,30 +405,29 @@ namespace DCGO.CardEffects.BT18
                                     CardSource securityCard = selectedPermanent.TopCard;
 
                                     yield return ContinuousController.instance.StartCoroutine(
-                                        new IPutSecurityPermanent(selectedPermanent,
-                                            CardEffectCommons.CardEffectHashtable(activateClass),
-                                            toTop: true).PutSecurity());
+                                        CardEffectCommons.PlacePermanentInSecurityAndProcessAccordingToResult(
+                                            selectedPermanent,
+                                            activateClass,
+                                            true,
+                                            SuccessProcess));
 
-                                    if (selectedPermanent.TopCard == null)
+                                    IEnumerator SuccessProcess(CardSource cardSource)
                                     {
-                                        if (securityCard.Owner.SecurityCards.Contains(securityCard) 
-                                            || (securityCard.IsToken && !CardEffectCommons.IsExistOnBattleArea(securityCard)))
+                                        if (CardEffectCommons.HasMatchConditionOwnersCardInTrash(card, IsCardLucemonChaosModeCondition))
                                         {
-                                            if (CardEffectCommons.HasMatchConditionOwnersCardInTrash(card, IsCardLucemonChaosModeCondition))
-                                            {
-                                                yield return ContinuousController.instance.StartCoroutine(
-                                                CardEffectCommons.DigivolveIntoHandOrTrashCard(
-                                                    targetPermanent: card.PermanentOfThisCard(),
-                                                    cardCondition: IsCardLucemonChaosModeCondition,
-                                                    payCost: false,
-                                                    reduceCostTuple: null,
-                                                    fixedCostTuple: null,
-                                                    ignoreDigivolutionRequirementFixedCost: -1,
-                                                    isHand: false,
-                                                    activateClass: activateClass,
-                                                    successProcess: null));
-                                            }
+                                            yield return ContinuousController.instance.StartCoroutine(
+                                            CardEffectCommons.DigivolveIntoHandOrTrashCard(
+                                                targetPermanent: card.PermanentOfThisCard(),
+                                                cardCondition: IsCardLucemonChaosModeCondition,
+                                                payCost: false,
+                                                reduceCostTuple: null,
+                                                fixedCostTuple: null,
+                                                ignoreDigivolutionRequirementFixedCost: -1,
+                                                isHand: false,
+                                                activateClass: activateClass,
+                                                successProcess: null));
                                         }
+                                        yield return null;
                                     }
                                 }
                             }

+ 8 - 6
Assets/Scripts/CardEffect/BT24/Yellow/BT24_040.cs

@@ -406,13 +406,14 @@ namespace DCGO.CardEffects.BT24
     
                                 CardSource topCard = selectedPermanent.TopCard;
     
-                                yield return ContinuousController.instance.StartCoroutine(new IPutSecurityPermanent(
-                                    permanent: selectedPermanent,
-                                    hashtable: _hashtable,
-                                    toTop: false).PutSecurity()
-                                );
+                                yield return ContinuousController.instance.StartCoroutine(
+                                    CardEffectCommons.PlacePermanentInSecurityAndProcessAccordingToResult(
+                                        targetPermanent: selectedPermanent,
+                                        activateClass: activateClass,
+                                        toTop: false,
+                                        SuccessProcess));
     
-                                if (card.Owner.SecurityCards.Contains(topCard) || card.Owner.Enemy.SecurityCards.Contains(topCard) || (selectedPermanent.IsToken && !CardEffectCommons.IsExistOnBattleArea(topCard)))
+                                IEnumerator SuccessProcess(CardSource cardSource)
                                 {
                                     foreach (Permanent permanent in removedPermanents)
                                     {
@@ -422,6 +423,7 @@ namespace DCGO.CardEffects.BT24
                                         permanent.HideDeckBounceEffect();
                                         permanent.HideWillRemoveFieldEffect();
                                     }
+                                    yield return null;
                                 }
                             }
                         }

+ 4 - 17
Assets/Scripts/CardEffect/LM/Yellow/LM_020.cs

@@ -63,8 +63,6 @@ namespace DCGO.CardEffects.LM
                 {
                     bool placedToSecurity = false;
 
-                    List<Permanent> selectedPermanents = new List<Permanent>();
-
                     SelectPermanentEffect selectPermanentEffect = GManager.instance.GetComponent<SelectPermanentEffect>();
 
                     selectPermanentEffect.SetUp(
@@ -88,23 +86,11 @@ namespace DCGO.CardEffects.LM
 
                     IEnumerator SelectPermanentCoroutine(Permanent permanent)
                     {
-                        selectedPermanents.Add(permanent);
-
-                        if (!permanent.IsToken)
-                        {
-                            Player selectedOwner = permanent.TopCard.Owner;
-                            int beforeEffectSecurityCount = permanent.TopCard.Owner.SecurityCards.Count;
-
-                            yield return ContinuousController.instance.StartCoroutine(new IPutSecurityPermanent(permanent, CardEffectCommons.CardEffectHashtable(activateClass), toTop: true).PutSecurity());
-
-                            if (selectedOwner.SecurityCards.Count > beforeEffectSecurityCount)
-                                placedToSecurity = true;
-                        }
-
-                        yield return null;
+                        yield return ContinuousController.instance.StartCoroutine(
+                            CardEffectCommons.PlacePermanentInSecurityAndProcessAccordingToResult(permanent, activateClass, toTop: true, SuccessProcess));
                     }
 
-                    if (placedToSecurity)
+                    IEnumerator SuccessProcess(CardSource cardSource)
                     {
                         if (card.Owner.Enemy.SecurityCards.Count >= 1)
                         {
@@ -162,6 +148,7 @@ namespace DCGO.CardEffects.LM
 
                             card.Owner.Enemy.SecurityCards = RandomUtility.ShuffledDeckCards(card.Owner.Enemy.SecurityCards);
                         }
+                        yield return null;
                     }
                 }
             }

+ 5 - 10
Assets/Scripts/CardEffect/P/Purple/P_187.cs

@@ -196,21 +196,16 @@ namespace DCGO.CardEffects.P
                                 yield return ContinuousController.instance.StartCoroutine(GManager.instance.userSelectionManager.WaitForEndSelect());
                                 bool position = GManager.instance.userSelectionManager.SelectedBoolValue;
 
-                                if (selectedPermanent.TopCard.Owner.CanAddSecurity(activateClass))
-                                {
-                                    CardSource topCard = selectedPermanent.TopCard;
-
-                                    // TODO: Replace this and if below with a PlaceInSecurityProcessFromResult
-                                    yield return ContinuousController.instance.StartCoroutine(new IPutSecurityPermanent(selectedPermanent, CardEffectCommons.CardEffectHashtable(activateClass), toTop: position).PutSecurity());
+                                yield return ContinuousController.instance.StartCoroutine(
+                                    CardEffectCommons.PlacePermanentInSecurityAndProcessAccordingToResult(selectedPermanent, activateClass, toTop: position, SuccessProcess));
 
-                                    if (topCard.Owner.SecurityCards.Contains(topCard) || topCard.IsToken)
-                                    {
-                                        yield return ContinuousController.instance.StartCoroutine(new IDestroySecurity(
+                                IEnumerator SuccessProcess(CardSource cardSource)
+                                {
+                                    yield return ContinuousController.instance.StartCoroutine(new IDestroySecurity(
                                         player: card.Owner.Enemy,
                                         destroySecurityCount: 1,
                                         cardEffect: activateClass,
                                         fromTop: true).DestroySecurity());
-                                    }
                                 }
                             }
                         }

+ 6 - 7
Assets/Scripts/CardEffect/ST22/Yellow/ST22_06.cs

@@ -325,15 +325,14 @@ namespace DCGO.CardEffects.ST22
                             {
                                 CardSource topCard = selectedPermanent.TopCard;
 
-                                // TODO: Replace this and if below with a PlaceInSecurityProcessFromResult - P-187 Mastemon
-                                yield return ContinuousController.instance.StartCoroutine(new IPutSecurityPermanent(
-                                permanent: selectedPermanent,
-                                hashtable: CardEffectCommons.CardEffectHashtable(activateClass),
-                                toTop: false).PutSecurity());
+                                yield return ContinuousController.instance.StartCoroutine(CardEffectCommons.PlacePermanentInSecurityAndProcessAccordingToResult(
+                                    targetPermanent: selectedPermanent,
+                                    activateClass: activateClass,
+                                    toTop: false,
+                                    SuccessProcess));
 
-                                if (topCard.Owner.SecurityCards.Contains(topCard) || (selectedPermanent.IsToken && !CardEffectCommons.IsExistOnBattleArea(topCard)))
+                                IEnumerator SuccessProcess(CardSource cardSource)
                                 {
-
                                     yield return ContinuousController.instance.StartCoroutine(new IDestroySecurity(
                                         player: card.Owner.Enemy,
                                         destroySecurityCount: 1,

+ 3 - 0
Assets/Scripts/Script/CardController.cs

@@ -3269,6 +3269,7 @@ public class IPutSecurityPermanent
     Hashtable _hashtable = new Hashtable();
     bool _toTop = false;
     bool _isFaceup = false;
+    public bool IsPlacedSecurity = false;
 
     public IEnumerator PutSecurity()
     {
@@ -3329,6 +3330,8 @@ public class IPutSecurityPermanent
 
         #endregion
 
+        IsPlacedSecurity = true;
+
         #region show cards
 
         if (!topCard.IsToken)

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

@@ -571,6 +571,36 @@ public partial class CardEffectCommons
 
     #endregion
 
+    #region Place in security with callbacks for success or failure
+    public static IEnumerator PlacePermanentInSecurityAndProcessAccordingToResult(Permanent targetPermanent, ICardEffect activateClass, bool toTop, Func<CardSource, IEnumerator> successProcess, Func<IEnumerator> failureProcess = null, bool isFaceUp = false)
+    {
+        IPutSecurityPermanent putSecurityPermanent = new IPutSecurityPermanent(targetPermanent, CardEffectCommons.CardEffectHashtable(activateClass), toTop, isFaceUp);
+
+        CardSource topCard = targetPermanent.TopCard;
+        if (activateClass.EffectSourceCard != null 
+            && activateClass.EffectSourceCard.Owner.CanAddSecurity(activateClass))
+        {
+            yield return ContinuousController.instance.StartCoroutine(putSecurityPermanent.PutSecurity());
+        }
+
+        if (putSecurityPermanent.IsPlacedSecurity)
+        {
+            if (successProcess != null)
+            {
+                yield return ContinuousController.instance.StartCoroutine(successProcess(topCard));
+            }
+        }
+        else
+        {
+            if (failureProcess != null)
+            {
+                yield return ContinuousController.instance.StartCoroutine(failureProcess());
+            }
+        }
+    }
+
+    #endregion
+
     #region Trash digivolution cards from top or bottom
 
     public static IEnumerator TrashDigivolutionCardsFromTopOrBottom(Permanent targetPermanent, int trashCount, bool isFromTop, ICardEffect activateClass, Func<CardSource, bool> cardCondition = null)