mbunch_kascope 1 год назад
Родитель
Сommit
9104fdf5a2

+ 19 - 19
Assets/CardEffect/BT1/Red/BT1_002.cs

@@ -13,31 +13,31 @@ public class BT1_002 : CEntity_Effect
     {
         List<ICardEffect> cardEffects = new List<ICardEffect>();
 
-        if (timing == EffectTiming.None)
+        #region Your Turn
+
+        if (timing == EffectTiming.RulesTiming || timing == EffectTiming.AfterEffectsActivate)
         {
-            bool Condition()
+            if (CardEffectCommons.IsExistOnBattleAreaDigimon(card))
             {
-                if (CardEffectCommons.IsExistOnBattleArea(card))
-                {
-                    if (CardEffectCommons.IsOwnerTurn(card))
-                    {
-                        if (card.PermanentOfThisCard().HasPierce)
-                        {
-                            return true;
-                        }
-                    }
-                }
-
-                return false;
+                Permanent thisPermanent = card.PermanentOfThisCard();
+
+                if (Condition())
+                    thisPermanent.AddBoost(new Permanent.DPBoost("BT1_002", 2000, Condition));
+                else
+                    thisPermanent.RemoveBoost("BT1_002");
             }
 
-            cardEffects.Add(CardEffectFactory.ChangeSelfDPStaticEffect(
-                changeValue: 2000,
-                isInheritedEffect: true,
-                card: card,
-                condition: Condition));
+            bool Condition()
+            {
+                return CardEffectCommons.IsPermanentExistsOnOwnerBattleArea(card.PermanentOfThisCard(), card) &&
+                       CardEffectCommons.IsOwnerTurn(card) &&
+                       card.PermanentOfThisCard().DigivolutionCards.Contains(card) &&
+                       card.PermanentOfThisCard().HasPierce;
+            }
         }
 
+        #endregion
+
         return cardEffects;
     }
 }

+ 1 - 1
Assets/CardEffect/EX4/Black/EX4_003.cs

@@ -25,7 +25,7 @@ namespace DCGO.CardEffects.EX4
 
                 bool PermanentCondition(Permanent permanent)
                 {
-                    if (CardEffectCommons.IsPermanentExistsOnOwnerBattleArea(permanent, card))
+                    if (CardEffectCommons.IsPermanentExistsOnOwnerBattleAreaDigimon(permanent, card))
                     {
                         if (permanent != card.PermanentOfThisCard())
                         {

+ 225 - 197
Assets/CardEffect/EX7/Black/EX7_043.cs

@@ -71,132 +71,146 @@ namespace DCGO.CardEffects.EX7
 
                 IEnumerator ActivateCoroutine(Hashtable hashtable)
                 {
-                    bool canSelectHand = card.Owner.HandCards.Count(CanSelectCardSharedCondition) >= 3;
-                    bool canSelectTrash = card.Owner.TrashCards.Count(CanSelectCardSharedCondition) >= 3;
+                    List<CardSource> selectedCards = new List<CardSource>();
+                    int maxCount = 3;
 
-                    if (canSelectHand || canSelectTrash)
+                    int handCount = card.Owner.HandCards.Count(CanSelectCardSharedCondition);
+                    int trashCount = card.Owner.TrashCards.Count(CanSelectCardSharedCondition);
+
+                    if (handCount + trashCount >= maxCount)
                     {
-                        if (canSelectHand && canSelectTrash)
+                        while (selectedCards.Count != maxCount)
                         {
-                            List<SelectionElement<bool>> selectionElements = new List<SelectionElement<bool>>
+                            bool canSelectHand = handCount > 1;
+                            bool canSelectTrash = trashCount > 1;
+
+                            if (canSelectHand || canSelectTrash)
                             {
-                                new(message: "From hand", value: true, spriteIndex: 0),
-                                new(message: "From trash", value: false, spriteIndex: 1),
-                            };
+                                if (canSelectHand && canSelectTrash)
+                                {
+                                    List<SelectionElement<bool>> selectionElements = new List<SelectionElement<bool>>
+                                    {
+                                        new(message: "From hand", value: true, spriteIndex: 0),
+                                        new(message: "From trash", value: false, spriteIndex: 1),
+                                    };
 
-                            string selectPlayerMessage = "From which area do you return cards?";
-                            string notSelectPlayerMessage = "The opponent is choosing from which area to return cards.";
+                                    string selectPlayerMessage = "From which area do you return cards?";
+                                    string notSelectPlayerMessage = "The opponent is choosing from which area to return cards.";
 
-                            GManager.instance.userSelectionManager.SetBoolSelection(selectionElements: selectionElements,
-                                selectPlayer: card.Owner, selectPlayerMessage: selectPlayerMessage,
-                                notSelectPlayerMessage: notSelectPlayerMessage);
-                        }
+                                    GManager.instance.userSelectionManager.SetBoolSelection(selectionElements: selectionElements,
+                                        selectPlayer: card.Owner, selectPlayerMessage: selectPlayerMessage,
+                                        notSelectPlayerMessage: notSelectPlayerMessage);
+                                }
 
-                        else
-                        {
-                            GManager.instance.userSelectionManager.SetBool(canSelectHand);
-                        }
+                                else
+                                {
+                                    GManager.instance.userSelectionManager.SetBool(canSelectHand);
+                                }
 
-                        yield return ContinuousController.instance.StartCoroutine(GManager.instance.userSelectionManager
-                            .WaitForEndSelect());
+                                yield return ContinuousController.instance.StartCoroutine(GManager.instance.userSelectionManager.WaitForEndSelect());
 
-                        bool fromHand = GManager.instance.userSelectionManager.SelectedBoolValue;
+                                bool fromHand = GManager.instance.userSelectionManager.SelectedBoolValue;
+                                int allowedCount = maxCount - selectedCards.Count;
 
-                        if (fromHand)
-                        {
-                            SelectHandEffect selectHandEffect = GManager.instance.GetComponent<SelectHandEffect>();
-
-                            selectHandEffect.SetUp(
-                                selectPlayer: card.Owner,
-                                canTargetCondition: CanSelectCardSharedCondition,
-                                canTargetCondition_ByPreSelecetedList: null,
-                                canEndSelectCondition: null,
-                                maxCount: 3,
-                                canNoSelect: true,
-                                canEndNotMax: false,
-                                isShowOpponent: false,
-                                selectCardCoroutine: null,
-                                afterSelectCardCoroutine: AfterSelectCardCoroutine,
-                                mode: SelectHandEffect.Mode.Custom,
-                                cardEffect: activateClass);
-
-                            selectHandEffect.SetUpCustomMessage("Select 3 cards to top deck\n(cards will be placed back to the top of the deck so that cards with lower numbers are on top).",
-                                "The opponent is selecting 3 cards to top deck.");
-                            selectHandEffect.SetUpCustomMessage_ShowCard("Deck Top Cards");
-
-                            yield return StartCoroutine(selectHandEffect.Activate());
-                        }
+                                if (fromHand)
+                                {
+                                    SelectHandEffect selectHandEffect = GManager.instance.GetComponent<SelectHandEffect>();
 
-                        else
-                        {
-                            SelectCardEffect selectCardEffect = GManager.instance.GetComponent<SelectCardEffect>();
-
-                            selectCardEffect.SetUp(
-                                canTargetCondition: CanSelectCardSharedCondition,
-                                canTargetCondition_ByPreSelecetedList: null,
-                                canEndSelectCondition: null,
-                                canNoSelect: () => true,
-                                selectCardCoroutine: null,
-                                afterSelectCardCoroutine: AfterSelectCardCoroutine,
-                                message:
-                                "Select cards to place at the top of the deck\n(cards will be placed back to the top of the deck so that cards with lower numbers are on top).",
-                                maxCount: 3,
-                                canEndNotMax: false,
-                                isShowOpponent: false,
-                                mode: SelectCardEffect.Mode.Custom,
-                                root: SelectCardEffect.Root.Trash,
-                                customRootCardList: null,
-                                canLookReverseCard: true,
-                                selectPlayer: card.Owner,
-                                cardEffect: activateClass);
-
-                            selectCardEffect.SetUpCustomMessage("Select 3 cards to top deck.",
-                                "The opponent is selecting 3 cards to top deck.");
-                            selectCardEffect.SetUpCustomMessage_ShowCard("Deck Top Cards");
-
-                            yield return ContinuousController.instance.StartCoroutine(selectCardEffect.Activate());
-                        }
+                                    selectHandEffect.SetUp(
+                                        selectPlayer: card.Owner,
+                                        canTargetCondition: CanSelectCardSharedCondition,
+                                        canTargetCondition_ByPreSelecetedList: null,
+                                        canEndSelectCondition: null,
+                                        maxCount: allowedCount,
+                                        canNoSelect: true,
+                                        canEndNotMax: true,
+                                        isShowOpponent: false,
+                                        selectCardCoroutine: null,
+                                        afterSelectCardCoroutine: AfterSelectCardCoroutine,
+                                        mode: SelectHandEffect.Mode.Custom,
+                                        cardEffect: activateClass);
 
-                        IEnumerator AfterSelectCardCoroutine(List<CardSource> cardSources)
-                        {
-                            if (cardSources.Count == 3)
-                            {
-                                cardSources.Reverse();
+                                    selectHandEffect.SetUpCustomMessage("Select cards to top deck\n(cards will be placed back to the top of the deck so that cards with lower numbers are on top).",
+                                        "The opponent is selecting cards to top deck.");
+                                    selectHandEffect.SetUpCustomMessage_ShowCard("Deck Top Cards");
 
-                                yield return ContinuousController.instance.StartCoroutine(
-                                    CardObjectController.AddLibraryTopCards(cardSources));
+                                    yield return StartCoroutine(selectHandEffect.Activate());
+                                }
 
-                                if (CardEffectCommons.HasMatchConditionPermanent(CanSelectPermanentSharedCondition))
+                                else
                                 {
-                                    SelectPermanentEffect selectPermanentEffect =
-                                        GManager.instance.GetComponent<SelectPermanentEffect>();
+                                    SelectCardEffect selectCardEffect = GManager.instance.GetComponent<SelectCardEffect>();
 
-                                    selectPermanentEffect.SetUp(
-                                        selectPlayer: card.Owner,
-                                        canTargetCondition: CanSelectPermanentSharedCondition,
+                                    selectCardEffect.SetUp(
+                                        canTargetCondition: CanSelectCardSharedCondition,
                                         canTargetCondition_ByPreSelecetedList: null,
                                         canEndSelectCondition: null,
-                                        maxCount: 1,
-                                        canNoSelect: false,
-                                        canEndNotMax: false,
-                                        selectPermanentCoroutine: SelectPermanentCoroutine,
-                                        afterSelectPermanentCoroutine: null,
-                                        mode: SelectPermanentEffect.Mode.Custom,
+                                        canNoSelect: () => true,
+                                        selectCardCoroutine: null,
+                                        afterSelectCardCoroutine: AfterSelectCardCoroutine,
+                                        message:
+                                        "Select cards to place at the top of the deck\n(cards will be placed back to the top of the deck so that cards with lower numbers are on top).",
+                                        maxCount: allowedCount,
+                                        canEndNotMax: true,
+                                        isShowOpponent: false,
+                                        mode: SelectCardEffect.Mode.Custom,
+                                        root: SelectCardEffect.Root.Trash,
+                                        customRootCardList: null,
+                                        canLookReverseCard: true,
+                                        selectPlayer: card.Owner,
                                         cardEffect: activateClass);
 
-                                    selectPermanentEffect.SetUpCustomMessage("Select 1 Digimon to De-Digivolve.",
-                                        "The opponent is selecting 1 Digimon to De-Digivolve.");
-                                    yield return ContinuousController.instance.StartCoroutine(selectPermanentEffect.Activate());
+                                    selectCardEffect.SetUpCustomMessage("Select cards to top deck.",
+                                        "The opponent is selecting cards to top deck.");
+                                    selectCardEffect.SetUpCustomMessage_ShowCard("Deck Top Cards");
+
+                                    yield return ContinuousController.instance.StartCoroutine(selectCardEffect.Activate());
+                                }
 
-                                    IEnumerator SelectPermanentCoroutine(Permanent permanent)
+                                IEnumerator AfterSelectCardCoroutine(List<CardSource> cardSources)
+                                {
+                                    selectedCards.AddRange(cardSources);
+
+                                    if (selectedCards.Count == 3)
                                     {
+                                        cardSources.Reverse();
+
                                         yield return ContinuousController.instance.StartCoroutine(
-                                            new IDegeneration(permanent, 1, activateClass).Degeneration());
+                                            CardObjectController.AddLibraryTopCards(cardSources));
+
+                                        if (CardEffectCommons.HasMatchConditionPermanent(CanSelectPermanentSharedCondition))
+                                        {
+                                            SelectPermanentEffect selectPermanentEffect =
+                                                GManager.instance.GetComponent<SelectPermanentEffect>();
+
+                                            selectPermanentEffect.SetUp(
+                                                selectPlayer: card.Owner,
+                                                canTargetCondition: CanSelectPermanentSharedCondition,
+                                                canTargetCondition_ByPreSelecetedList: null,
+                                                canEndSelectCondition: null,
+                                                maxCount: 1,
+                                                canNoSelect: false,
+                                                canEndNotMax: false,
+                                                selectPermanentCoroutine: SelectPermanentCoroutine,
+                                                afterSelectPermanentCoroutine: null,
+                                                mode: SelectPermanentEffect.Mode.Custom,
+                                                cardEffect: activateClass);
+
+                                            selectPermanentEffect.SetUpCustomMessage("Select 1 Digimon to De-Digivolve.",
+                                                "The opponent is selecting 1 Digimon to De-Digivolve.");
+                                            yield return ContinuousController.instance.StartCoroutine(selectPermanentEffect.Activate());
+
+                                            IEnumerator SelectPermanentCoroutine(Permanent permanent)
+                                            {
+                                                yield return ContinuousController.instance.StartCoroutine(
+                                                    new IDegeneration(permanent, 1, activateClass).Degeneration());
+                                            }
+                                        }
                                     }
                                 }
                             }
                         }
-                    }
+                    }                    
                 }
             }
 
@@ -224,127 +238,141 @@ namespace DCGO.CardEffects.EX7
 
                 IEnumerator ActivateCoroutine(Hashtable hashtable)
                 {
-                    bool canSelectHand = card.Owner.HandCards.Count(CanSelectCardSharedCondition) >= 3;
-                    bool canSelectTrash = card.Owner.TrashCards.Count(CanSelectCardSharedCondition) >= 3;
+                    List<CardSource> selectedCards = new List<CardSource>();
+                    int maxCount = 3;
 
-                    if (canSelectHand || canSelectTrash)
+                    int handCount = card.Owner.HandCards.Count(CanSelectCardSharedCondition);
+                    int trashCount = card.Owner.TrashCards.Count(CanSelectCardSharedCondition);
+
+                    if (handCount + trashCount >= maxCount)
                     {
-                        if (canSelectHand && canSelectTrash)
+                        while (selectedCards.Count != maxCount)
                         {
-                            List<SelectionElement<bool>> selectionElements = new List<SelectionElement<bool>>
+                            bool canSelectHand = handCount > 1;
+                            bool canSelectTrash = trashCount > 1;
+
+                            if (canSelectHand || canSelectTrash)
                             {
-                                new(message: "From hand", value: true, spriteIndex: 0),
-                                new(message: "From trash", value: false, spriteIndex: 1),
-                            };
+                                if (canSelectHand && canSelectTrash)
+                                {
+                                    List<SelectionElement<bool>> selectionElements = new List<SelectionElement<bool>>
+                                    {
+                                        new(message: "From hand", value: true, spriteIndex: 0),
+                                        new(message: "From trash", value: false, spriteIndex: 1),
+                                    };
 
-                            string selectPlayerMessage = "From which area do you return cards?";
-                            string notSelectPlayerMessage = "The opponent is choosing from which area to return cards.";
+                                    string selectPlayerMessage = "From which area do you return cards?";
+                                    string notSelectPlayerMessage = "The opponent is choosing from which area to return cards.";
 
-                            GManager.instance.userSelectionManager.SetBoolSelection(selectionElements: selectionElements,
-                                selectPlayer: card.Owner, selectPlayerMessage: selectPlayerMessage,
-                                notSelectPlayerMessage: notSelectPlayerMessage);
-                        }
+                                    GManager.instance.userSelectionManager.SetBoolSelection(selectionElements: selectionElements,
+                                        selectPlayer: card.Owner, selectPlayerMessage: selectPlayerMessage,
+                                        notSelectPlayerMessage: notSelectPlayerMessage);
+                                }
 
-                        else
-                        {
-                            GManager.instance.userSelectionManager.SetBool(canSelectHand);
-                        }
+                                else
+                                {
+                                    GManager.instance.userSelectionManager.SetBool(canSelectHand);
+                                }
 
-                        yield return ContinuousController.instance.StartCoroutine(GManager.instance.userSelectionManager
-                            .WaitForEndSelect());
+                                yield return ContinuousController.instance.StartCoroutine(GManager.instance.userSelectionManager.WaitForEndSelect());
 
-                        bool fromHand = GManager.instance.userSelectionManager.SelectedBoolValue;
+                                bool fromHand = GManager.instance.userSelectionManager.SelectedBoolValue;
+                                int allowedCount = maxCount - selectedCards.Count;
 
-                        if (fromHand)
-                        {
-                            SelectHandEffect selectHandEffect = GManager.instance.GetComponent<SelectHandEffect>();
-
-                            selectHandEffect.SetUp(
-                                selectPlayer: card.Owner,
-                                canTargetCondition: CanSelectCardSharedCondition,
-                                canTargetCondition_ByPreSelecetedList: null,
-                                canEndSelectCondition: null,
-                                maxCount: 3,
-                                canNoSelect: true,
-                                canEndNotMax: false,
-                                isShowOpponent: false,
-                                selectCardCoroutine: null,
-                                afterSelectCardCoroutine: AfterSelectCardCoroutine,
-                                mode: SelectHandEffect.Mode.Custom,
-                                cardEffect: activateClass);
-
-                            selectHandEffect.SetUpCustomMessage("Select 3 cards to top deck\n(cards will be placed back to the top of the deck so that cards with lower numbers are on top).",
-                                "The opponent is selecting 3 cards to top deck.");
-                            selectHandEffect.SetUpCustomMessage_ShowCard("Deck Top Cards");
-
-                            yield return StartCoroutine(selectHandEffect.Activate());
-                        }
+                                if (fromHand)
+                                {
+                                    SelectHandEffect selectHandEffect = GManager.instance.GetComponent<SelectHandEffect>();
 
-                        else
-                        {
-                            SelectCardEffect selectCardEffect = GManager.instance.GetComponent<SelectCardEffect>();
-
-                            selectCardEffect.SetUp(
-                                canTargetCondition: CanSelectCardSharedCondition,
-                                canTargetCondition_ByPreSelecetedList: null,
-                                canEndSelectCondition: null,
-                                canNoSelect: () => true,
-                                selectCardCoroutine: null,
-                                afterSelectCardCoroutine: AfterSelectCardCoroutine,
-                                message:
-                                "Select cards to place at the top of the deck\n(cards will be placed back to the top of the deck so that cards with lower numbers are on top).",
-                                maxCount: 3,
-                                canEndNotMax: false,
-                                isShowOpponent: false,
-                                mode: SelectCardEffect.Mode.Custom,
-                                root: SelectCardEffect.Root.Trash,
-                                customRootCardList: null,
-                                canLookReverseCard: true,
-                                selectPlayer: card.Owner,
-                                cardEffect: activateClass);
-
-                            selectCardEffect.SetUpCustomMessage("Select 3 cards to top deck.",
-                                "The opponent is selecting 3 cards to top deck.");
-                            selectCardEffect.SetUpCustomMessage_ShowCard("Deck Top Cards");
-
-                            yield return ContinuousController.instance.StartCoroutine(selectCardEffect.Activate());
-                        }
+                                    selectHandEffect.SetUp(
+                                        selectPlayer: card.Owner,
+                                        canTargetCondition: CanSelectCardSharedCondition,
+                                        canTargetCondition_ByPreSelecetedList: null,
+                                        canEndSelectCondition: null,
+                                        maxCount: allowedCount,
+                                        canNoSelect: true,
+                                        canEndNotMax: true,
+                                        isShowOpponent: false,
+                                        selectCardCoroutine: null,
+                                        afterSelectCardCoroutine: AfterSelectCardCoroutine,
+                                        mode: SelectHandEffect.Mode.Custom,
+                                        cardEffect: activateClass);
 
-                        IEnumerator AfterSelectCardCoroutine(List<CardSource> cardSources)
-                        {
-                            if (cardSources.Count == 3)
-                            {
-                                cardSources.Reverse();
+                                    selectHandEffect.SetUpCustomMessage("Select cards to top deck\n(cards will be placed back to the top of the deck so that cards with lower numbers are on top).",
+                                        "The opponent is selecting cards to top deck.");
+                                    selectHandEffect.SetUpCustomMessage_ShowCard("Deck Top Cards");
 
-                                yield return ContinuousController.instance.StartCoroutine(
-                                    CardObjectController.AddLibraryTopCards(cardSources));
+                                    yield return StartCoroutine(selectHandEffect.Activate());
+                                }
 
-                                if (CardEffectCommons.HasMatchConditionPermanent(CanSelectPermanentSharedCondition))
+                                else
                                 {
-                                    SelectPermanentEffect selectPermanentEffect =
-                                        GManager.instance.GetComponent<SelectPermanentEffect>();
+                                    SelectCardEffect selectCardEffect = GManager.instance.GetComponent<SelectCardEffect>();
 
-                                    selectPermanentEffect.SetUp(
-                                        selectPlayer: card.Owner,
-                                        canTargetCondition: CanSelectPermanentSharedCondition,
+                                    selectCardEffect.SetUp(
+                                        canTargetCondition: CanSelectCardSharedCondition,
                                         canTargetCondition_ByPreSelecetedList: null,
                                         canEndSelectCondition: null,
-                                        maxCount: 1,
-                                        canNoSelect: false,
-                                        canEndNotMax: false,
-                                        selectPermanentCoroutine: SelectPermanentCoroutine,
-                                        afterSelectPermanentCoroutine: null,
-                                        mode: SelectPermanentEffect.Mode.Custom,
+                                        canNoSelect: () => true,
+                                        selectCardCoroutine: null,
+                                        afterSelectCardCoroutine: AfterSelectCardCoroutine,
+                                        message:
+                                        "Select cards to place at the top of the deck\n(cards will be placed back to the top of the deck so that cards with lower numbers are on top).",
+                                        maxCount: allowedCount,
+                                        canEndNotMax: true,
+                                        isShowOpponent: false,
+                                        mode: SelectCardEffect.Mode.Custom,
+                                        root: SelectCardEffect.Root.Trash,
+                                        customRootCardList: null,
+                                        canLookReverseCard: true,
+                                        selectPlayer: card.Owner,
                                         cardEffect: activateClass);
 
-                                    selectPermanentEffect.SetUpCustomMessage("Select 1 Digimon to De-Digivolve.",
-                                        "The opponent is selecting 1 Digimon to De-Digivolve.");
-                                    yield return ContinuousController.instance.StartCoroutine(selectPermanentEffect.Activate());
+                                    selectCardEffect.SetUpCustomMessage("Select cards to top deck.",
+                                        "The opponent is selecting cards to top deck.");
+                                    selectCardEffect.SetUpCustomMessage_ShowCard("Deck Top Cards");
+
+                                    yield return ContinuousController.instance.StartCoroutine(selectCardEffect.Activate());
+                                }
 
-                                    IEnumerator SelectPermanentCoroutine(Permanent permanent)
+                                IEnumerator AfterSelectCardCoroutine(List<CardSource> cardSources)
+                                {
+                                    selectedCards.AddRange(cardSources);
+
+                                    if (selectedCards.Count == 3)
                                     {
+                                        cardSources.Reverse();
+
                                         yield return ContinuousController.instance.StartCoroutine(
-                                            new IDegeneration(permanent, 1, activateClass).Degeneration());
+                                            CardObjectController.AddLibraryTopCards(cardSources));
+
+                                        if (CardEffectCommons.HasMatchConditionPermanent(CanSelectPermanentSharedCondition))
+                                        {
+                                            SelectPermanentEffect selectPermanentEffect =
+                                                GManager.instance.GetComponent<SelectPermanentEffect>();
+
+                                            selectPermanentEffect.SetUp(
+                                                selectPlayer: card.Owner,
+                                                canTargetCondition: CanSelectPermanentSharedCondition,
+                                                canTargetCondition_ByPreSelecetedList: null,
+                                                canEndSelectCondition: null,
+                                                maxCount: 1,
+                                                canNoSelect: false,
+                                                canEndNotMax: false,
+                                                selectPermanentCoroutine: SelectPermanentCoroutine,
+                                                afterSelectPermanentCoroutine: null,
+                                                mode: SelectPermanentEffect.Mode.Custom,
+                                                cardEffect: activateClass);
+
+                                            selectPermanentEffect.SetUpCustomMessage("Select 1 Digimon to De-Digivolve.",
+                                                "The opponent is selecting 1 Digimon to De-Digivolve.");
+                                            yield return ContinuousController.instance.StartCoroutine(selectPermanentEffect.Activate());
+
+                                            IEnumerator SelectPermanentCoroutine(Permanent permanent)
+                                            {
+                                                yield return ContinuousController.instance.StartCoroutine(
+                                                    new IDegeneration(permanent, 1, activateClass).Degeneration());
+                                            }
+                                        }
                                     }
                                 }
                             }

+ 1 - 1
Assets/CardEffect/ST9/Green/Kokabuterimon_ST9_07.cs → Assets/CardEffect/ST9/Green/ST9_07.cs

@@ -6,7 +6,7 @@ using Photon;
 using System;
 using Photon.Pun;
 
-public class Kokabuterimon_ST9_07 : CEntity_Effect
+public class ST9_07 : CEntity_Effect
 {
     public override List<ICardEffect> CardEffects(EffectTiming timing, CardSource card)
     {

+ 0 - 0
Assets/CardEffect/ST9/Green/Kokabuterimon_ST9_07.cs.meta → Assets/CardEffect/ST9/Green/ST9_07.cs.meta


+ 19 - 2
Assets/Scripts/CardSource.cs

@@ -1126,6 +1126,23 @@ public class CardSource : MonoBehaviour
     }
     #endregion
 
+    #region CardNameRules 
+    bool CardNameRules(string name)
+    {
+        bool passTest = true;
+
+        string testName = name.Replace(" ", "").ToLower();
+
+        if (testName.Contains("greymon"))
+            return testName != "dorugreymon" && testName != "burninggreymon" && testName != "dexdorugreymon";
+
+        if (testName.Contains("argomon"))
+            return !testName.Contains("gargomon");
+
+        return passTest;
+    }
+    #endregion
+
     #region Whether target other card's name has same name as this
     public bool HasSameCardName(CardSource cardSource) => cardSource.CardNames.Count((cardName) => EqualsCardName(cardName)) >= 1;
     //public bool HasSameCardName(CardSource cardSource) => cardSource.CardNames.Count((cardName) => CardNames.Contains(cardName)) >= 1;
@@ -1173,10 +1190,10 @@ public class CardSource : MonoBehaviour
         string lower = name.ToLower();
 
         return CardNames.Some((cardName) =>
-        cardName.Contains(name)
+        ( cardName.Contains(name)
         || cardName.Contains(replaced)
         || cardName.Contains(lower)
-        || cardName.ToLower().Contains(lower));
+        || cardName.ToLower().Contains(lower)) && CardNameRules(cardName));
     }
     #endregion