Просмотр исходного кода

First attempt at solving issues with copy effects

hooperk 2 месяцев назад
Родитель
Сommit
4851714dfd

+ 5 - 106
Assets/Scripts/CardEffect/BT10/Red/BT10_011.cs

@@ -85,113 +85,12 @@ namespace DCGO.CardEffects.BT10
                 }
             }
 
-            if (timing == EffectTiming.None)
-            {
-                AddSkillClass addSkillClass = new AddSkillClass();
-                addSkillClass.SetUpICardEffect("This Digimon gains all effects of [Gammamon] in digivolution cards", CanUseCondition, card);
-                addSkillClass.SetUpAddSkillClass(cardSourceCondition: CardSourceCondition, getEffects: GetEffects);
-
-                cardEffects.Add(addSkillClass);
-
-                bool CanUseCondition(Hashtable hashtable)
-                {
-                    return CardEffectCommons.IsExistOnBattleArea(card);
-                }
-
-                bool PermanentCondition(Permanent permanent)
-                {
-                    return permanent == card.PermanentOfThisCard();
-                }
-
-                bool CardSourceCondition(CardSource cardSource)
-                {
-                    if (PermanentCondition(cardSource.PermanentOfThisCard()))
-                    {
-                        if (cardSource == cardSource.PermanentOfThisCard().TopCard)
-                        {
-                            return true;
-                        }
-                    }
-
-                    return false;
-                }
-
-                List<ICardEffect> GetEffects(CardSource cardSource, List<ICardEffect> cardEffects, EffectTiming _timing)
-                {
-                    if (CardSourceCondition(cardSource))
-                    {
-                        foreach (CardSource cardSource1 in cardSource.PermanentOfThisCard().DigivolutionCards)
-                        {
-                            if (cardSource1.ContainsCardName("Gammamon"))
-                            {
-                                foreach (ICardEffect cardEffect in cardSource1.cEntity_EffectController.GetCardEffects_ExceptAddedEffects(_timing, card))
-                                {
-                                    if (!cardEffect.IsSecurityEffect && !cardEffect.IsInheritedEffect)
-                                    {
-                                        cardEffects.Add(cardEffect);
-                                    }
-                                }
-                            }
-                        }
-                    }
-
-                    return cardEffects;
-                }
-            }
+            #region All Turns Copy effects of Gammamon in digivolution cards
+            bool CopyCardCondition(CardSource cardSource) => cardSource.ContainsCardName("Gammamon");
 
-            if (timing == EffectTiming.None)
-            {
-                AddSkillClass addSkillClass = new AddSkillClass();
-                addSkillClass.SetUpICardEffect("This Digimon gains all effects of [Gammamon] in digivolution cards", CanUseCondition, card);
-                addSkillClass.SetUpAddSkillClass(cardSourceCondition: CardSourceCondition, getEffects: GetEffects);
-                addSkillClass.SetIsInheritedEffect(true);
-                cardEffects.Add(addSkillClass);
-
-                bool CanUseCondition(Hashtable hashtable)
-                {
-                    return CardEffectCommons.IsExistOnBattleArea(card);
-                }
-
-                bool PermanentCondition(Permanent permanent)
-                {
-                    return permanent == card.PermanentOfThisCard();
-                }
-
-                bool CardSourceCondition(CardSource cardSource)
-                {
-                    if (PermanentCondition(cardSource.PermanentOfThisCard()))
-                    {
-                        if (cardSource == cardSource.PermanentOfThisCard().TopCard)
-                        {
-                            return true;
-                        }
-                    }
-
-                    return false;
-                }
-
-                List<ICardEffect> GetEffects(CardSource cardSource, List<ICardEffect> cardEffects, EffectTiming _timing)
-                {
-                    if (CardSourceCondition(cardSource))
-                    {
-                        foreach (CardSource cardSource1 in cardSource.PermanentOfThisCard().DigivolutionCards)
-                        {
-                            if (cardSource1.ContainsCardName("Gammamon"))
-                            {
-                                foreach (ICardEffect cardEffect in cardSource1.cEntity_EffectController.GetCardEffects_ExceptAddedEffects(_timing, card))
-                                {
-                                    if (!cardEffect.IsSecurityEffect && !cardEffect.IsInheritedEffect)
-                                    {
-                                        cardEffects.Add(cardEffect);
-                                    }
-                                }
-                            }
-                        }
-                    }
-
-                    return cardEffects;
-                }
-            }
+            CardEffectFactory.CopyDigivolutionCardEffects(ref cardEffects, timing, card, cardCondition: CopyCardCondition);
+            CardEffectFactory.CopyDigivolutionCardEffects(ref cardEffects, timing, card, isInheritedEffect: true, cardCondition: CopyCardCondition);
+            #endregion
 
             return cardEffects;
         }

+ 4 - 55
Assets/Scripts/CardEffect/BT12/Black/BT12_072.cs

@@ -132,62 +132,11 @@ namespace DCGO.CardEffects.BT12
                 }
             }
 
-            if (timing == EffectTiming.None)
-            {
-                AddSkillClass addSkillClass = new AddSkillClass();
-                addSkillClass.SetUpICardEffect("This Digimon gains all effects of [Machinedramon] and [Chaosdramon] in digivolution cards", CanUseCondition, card);
-                addSkillClass.SetUpAddSkillClass(cardSourceCondition: CardSourceCondition, getEffects: GetEffects);
-
-                cardEffects.Add(addSkillClass);
-
-                bool CanUseCondition(Hashtable hashtable)
-                {
-                    return CardEffectCommons.IsExistOnBattleArea(card);
-                }
-
-                bool PermanentCondition(Permanent permanent)
-                {
-                    return permanent == card.PermanentOfThisCard();
-                }
-
-                bool CardSourceCondition(CardSource cardSource)
-                {
-                    if (PermanentCondition(cardSource.PermanentOfThisCard()))
-                    {
-                        if (cardSource == cardSource.PermanentOfThisCard().TopCard)
-                        {
-                            return true;
-                        }
-                    }
+            #region Copy effects of Machinedramon and Chaosdramon in digivolution cards
+            bool CopyCardCondition(CardSource cardSource) => cardSource.EqualsCardName("Machinedramon") || cardSource.EqualsCardName("Chaosdramon");
 
-                    return false;
-                }
-
-                List<ICardEffect> GetEffects(CardSource cardSource, List<ICardEffect> cardEffects, EffectTiming _timing)
-                {
-                    if (CardSourceCondition(cardSource))
-                    {
-                        foreach (CardSource cardSource1 in cardSource.PermanentOfThisCard().DigivolutionCards)
-                        {
-                            if (!cardSource1.IsFlipped)
-                            {
-                                if (cardSource1.EqualsCardName("Machinedramon") || cardSource1.EqualsCardName("Chaosdramon"))
-                                {
-                                    foreach (ICardEffect cardEffect in cardSource1.cEntity_EffectController.GetCardEffects_ExceptAddedEffects(_timing, card))
-                                    {
-                                        if (!cardEffect.IsSecurityEffect && !cardEffect.IsInheritedEffect)
-                                        {
-                                            cardEffects.Add(cardEffect);
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                    }
-
-                    return cardEffects;
-                }
-            }
+            CardEffectFactory.CopyDigivolutionCardEffects(ref cardEffects, timing, card, cardCondition: CopyCardCondition);
+            #endregion
 
             if (timing == EffectTiming.WhenPermanentWouldBeDeleted)
             {

+ 4 - 113
Assets/Scripts/CardEffect/BT15/Yellow/BT15_039.cs

@@ -281,120 +281,11 @@ namespace DCGO.CardEffects.BT15
 
             #endregion
 
-            #region All Turns
-
-            if (timing == EffectTiming.None)
-            {
-                AddSkillClass addSkillClass = new AddSkillClass();
-                addSkillClass.SetUpICardEffect("This Digimon gains all effects of [Gammamon] in digivolution cards", CanUseCondition, card);
-                addSkillClass.SetUpAddSkillClass(cardSourceCondition: CardSourceCondition, getEffects: GetEffects);
-
-                cardEffects.Add(addSkillClass);
-
-                bool CanUseCondition(Hashtable hashtable)
-                {
-                    return CardEffectCommons.IsExistOnBattleArea(card);
-                }
-
-                bool PermanentCondition(Permanent permanent)
-                {
-                    return permanent == card.PermanentOfThisCard();
-                }
-
-                bool CardSourceCondition(CardSource cardSource)
-                {
-                    if (PermanentCondition(cardSource.PermanentOfThisCard()))
-                    {
-                        if (cardSource == cardSource.PermanentOfThisCard().TopCard)
-                        {
-                            return true;
-                        }
-                    }
-
-                    return false;
-                }
-
-                List<ICardEffect> GetEffects(CardSource cardSource, List<ICardEffect> cardEffects, EffectTiming _timing)
-                {
-                    if (CardSourceCondition(cardSource))
-                    {
-                        foreach (CardSource cardSource1 in cardSource.PermanentOfThisCard().DigivolutionCards)
-                        {
-                            if (cardSource1.ContainsCardName("Gammamon"))
-                            {
-                                foreach (ICardEffect cardEffect in cardSource1.cEntity_EffectController.GetCardEffects_ExceptAddedEffects(_timing, card))
-                                {
-                                    if (!cardEffect.IsSecurityEffect && !cardEffect.IsInheritedEffect)
-                                    {
-                                        cardEffects.Add(cardEffect);
-                                    }
-                                }
-                            }
-                        }
-                    }
-
-                    return cardEffects;
-                }
-            }
-
-            #endregion
-
-            #region Inheritable
-
-            if (timing == EffectTiming.None)
-            {
-                AddSkillClass addSkillClass = new AddSkillClass();
-                addSkillClass.SetUpICardEffect("This Digimon gains all effects of [Gammamon] in digivolution cards", CanUseCondition, card);
-                addSkillClass.SetUpAddSkillClass(cardSourceCondition: CardSourceCondition, getEffects: GetEffects);
-                addSkillClass.SetIsInheritedEffect(true);
-                cardEffects.Add(addSkillClass);
-
-                bool CanUseCondition(Hashtable hashtable)
-                {
-                    return CardEffectCommons.IsExistOnBattleArea(card);
-                }
-
-                bool PermanentCondition(Permanent permanent)
-                {
-                    return permanent == card.PermanentOfThisCard();
-                }
-
-                bool CardSourceCondition(CardSource cardSource)
-                {
-                    if (PermanentCondition(cardSource.PermanentOfThisCard()))
-                    {
-                        if (cardSource == cardSource.PermanentOfThisCard().TopCard)
-                        {
-                            return true;
-                        }
-                    }
-
-                    return false;
-                }
-
-                List<ICardEffect> GetEffects(CardSource cardSource, List<ICardEffect> cardEffects, EffectTiming _timing)
-                {
-                    if (CardSourceCondition(cardSource))
-                    {
-                        foreach (CardSource cardSource1 in cardSource.PermanentOfThisCard().DigivolutionCards)
-                        {
-                            if (cardSource1.ContainsCardName("Gammamon"))
-                            {
-                                foreach (ICardEffect cardEffect in cardSource1.cEntity_EffectController.GetCardEffects_ExceptAddedEffects(_timing, card))
-                                {
-                                    if (!cardEffect.IsSecurityEffect && !cardEffect.IsInheritedEffect)
-                                    {
-                                        cardEffects.Add(cardEffect);
-                                    }
-                                }
-                            }
-                        }
-                    }
-
-                    return cardEffects;
-                }
-            }
+            #region All Turns Copy effects of Gammamon in digivolution cards
+            bool CopyCardCondition(CardSource cardSource) => cardSource.ContainsCardName("Gammamon");
 
+            CardEffectFactory.CopyDigivolutionCardEffects(ref cardEffects, timing, card, cardCondition: CopyCardCondition);
+            CardEffectFactory.CopyDigivolutionCardEffects(ref cardEffects, timing, card, isInheritedEffect: true, cardCondition: CopyCardCondition);
             #endregion
 
             return cardEffects;

+ 3 - 55
Assets/Scripts/CardEffect/BT16/Red/BT16_014.cs

@@ -33,62 +33,10 @@ namespace DCGO.CardEffects.BT16
 
             #endregion
 
-            #region All Turns
-
-            if (timing == EffectTiming.None)
-            {
-                AddSkillClass addSkillClass = new AddSkillClass();
-                addSkillClass.SetUpICardEffect("This Digimon gains all effects of [Goldramon] in digivolution cards", CanUseCondition, card);
-                addSkillClass.SetUpAddSkillClass(cardSourceCondition: CardSourceCondition, getEffects: GetEffects);
-
-                cardEffects.Add(addSkillClass);
-
-                bool CanUseCondition(Hashtable hashtable)
-                {
-                    return CardEffectCommons.IsExistOnBattleArea(card);
-                }
-
-                bool PermanentCondition(Permanent permanent)
-                {
-                    return permanent == card.PermanentOfThisCard();
-                }
-
-                bool CardSourceCondition(CardSource cardSource)
-                {
-                    if (PermanentCondition(cardSource.PermanentOfThisCard()))
-                    {
-                        if (cardSource == cardSource.PermanentOfThisCard().TopCard)
-                        {
-                            return true;
-                        }
-                    }
-
-                    return false;
-                }
-
-                List<ICardEffect> GetEffects(CardSource cardSource, List<ICardEffect> cardEffects, EffectTiming _timing)
-                {
-                    if (CardSourceCondition(cardSource))
-                    {
-                        foreach (CardSource cardSource1 in cardSource.PermanentOfThisCard().DigivolutionCards)
-                        {
-                            if (cardSource1.CardNames.Contains("Goldramon"))
-                            {
-                                foreach (ICardEffect cardEffect in cardSource1.cEntity_EffectController.GetCardEffects_ExceptAddedEffects(_timing, card))
-                                {
-                                    if (!cardEffect.IsSecurityEffect && !cardEffect.IsInheritedEffect)
-                                    {
-                                        cardEffects.Add(cardEffect);
-                                    }
-                                }
-                            }
-                        }
-                    }
-
-                    return cardEffects;
-                }
-            }
+            #region All Turns Copy effects of Goldramon in digivolution cards
+            bool CopyCardCondition(CardSource cardSource) => cardSource.EqualsCardName("Goldramon");
 
+            CardEffectFactory.CopyDigivolutionCardEffects(ref cardEffects, timing, card, cardCondition: CopyCardCondition);
             #endregion
 
             #region When Digivolving || When Attacking

+ 5 - 106
Assets/Scripts/CardEffect/RB1/Blue/RB1_015.cs

@@ -155,113 +155,12 @@ public class RB1_015 : CEntity_Effect
             }
         }
 
-        if (timing == EffectTiming.None)
-        {
-            AddSkillClass addSkillClass = new AddSkillClass();
-            addSkillClass.SetUpICardEffect("This Digimon gains all effects of [Gammamon] in digivolution cards", CanUseCondition, card);
-            addSkillClass.SetUpAddSkillClass(cardSourceCondition: CardSourceCondition, getEffects: GetEffects);
-
-            cardEffects.Add(addSkillClass);
-
-            bool CanUseCondition(Hashtable hashtable)
-            {
-                return CardEffectCommons.IsExistOnBattleArea(card);
-            }
-
-            bool PermanentCondition(Permanent permanent)
-            {
-                return permanent == card.PermanentOfThisCard();
-            }
-
-            bool CardSourceCondition(CardSource cardSource)
-            {
-                if (PermanentCondition(cardSource.PermanentOfThisCard()))
-                {
-                    if (cardSource == cardSource.PermanentOfThisCard().TopCard)
-                    {
-                        return true;
-                    }
-                }
-
-                return false;
-            }
-
-            List<ICardEffect> GetEffects(CardSource cardSource, List<ICardEffect> cardEffects, EffectTiming _timing)
-            {
-                if (CardSourceCondition(cardSource))
-                {
-                    foreach (CardSource cardSource1 in cardSource.PermanentOfThisCard().DigivolutionCards)
-                    {
-                        if (cardSource1.ContainsCardName("Gammamon"))
-                        {
-                            foreach (ICardEffect cardEffect in cardSource1.cEntity_EffectController.GetCardEffects_ExceptAddedEffects(_timing, card))
-                            {
-                                if (!cardEffect.IsSecurityEffect && !cardEffect.IsInheritedEffect)
-                                {
-                                    cardEffects.Add(cardEffect);
-                                }
-                            }
-                        }
-                    }
-                }
-
-                return cardEffects;
-            }
-        }
+        #region All Turns Copy effects of Gammamon in digivolution cards
+        bool CopyCardCondition(CardSource cardSource) => cardSource.ContainsCardName("Gammamon");
 
-        if (timing == EffectTiming.None)
-        {
-            AddSkillClass addSkillClass = new AddSkillClass();
-            addSkillClass.SetUpICardEffect("This Digimon gains all effects of [Gammamon] in digivolution cards", CanUseCondition, card);
-            addSkillClass.SetUpAddSkillClass(cardSourceCondition: CardSourceCondition, getEffects: GetEffects);
-            addSkillClass.SetIsInheritedEffect(true);
-            cardEffects.Add(addSkillClass);
-
-            bool CanUseCondition(Hashtable hashtable)
-            {
-                return CardEffectCommons.IsExistOnBattleArea(card);
-            }
-
-            bool PermanentCondition(Permanent permanent)
-            {
-                return permanent == card.PermanentOfThisCard();
-            }
-
-            bool CardSourceCondition(CardSource cardSource)
-            {
-                if (PermanentCondition(cardSource.PermanentOfThisCard()))
-                {
-                    if (cardSource == cardSource.PermanentOfThisCard().TopCard)
-                    {
-                        return true;
-                    }
-                }
-
-                return false;
-            }
-
-            List<ICardEffect> GetEffects(CardSource cardSource, List<ICardEffect> cardEffects, EffectTiming _timing)
-            {
-                if (CardSourceCondition(cardSource))
-                {
-                    foreach (CardSource cardSource1 in cardSource.PermanentOfThisCard().DigivolutionCards)
-                    {
-                        if (cardSource1.ContainsCardName("Gammamon"))
-                        {
-                            foreach (ICardEffect cardEffect in cardSource1.cEntity_EffectController.GetCardEffects_ExceptAddedEffects(_timing, card))
-                            {
-                                if (!cardEffect.IsSecurityEffect && !cardEffect.IsInheritedEffect)
-                                {
-                                    cardEffects.Add(cardEffect);
-                                }
-                            }
-                        }
-                    }
-                }
-
-                return cardEffects;
-            }
-        }
+        CardEffectFactory.CopyDigivolutionCardEffects(ref cardEffects, timing, card, cardCondition: CopyCardCondition);
+        CardEffectFactory.CopyDigivolutionCardEffects(ref cardEffects, timing, card, isInheritedEffect: true, cardCondition: CopyCardCondition);
+        #endregion
 
         return cardEffects;
     }

+ 5 - 106
Assets/Scripts/CardEffect/RB1/Green/RB1_023.cs

@@ -125,113 +125,12 @@ public class RB1_023 : CEntity_Effect
             }
         }
 
-        if (timing == EffectTiming.None)
-        {
-            AddSkillClass addSkillClass = new AddSkillClass();
-            addSkillClass.SetUpICardEffect("This Digimon gains all effects of [Gammamon] in digivolution cards", CanUseCondition, card);
-            addSkillClass.SetUpAddSkillClass(cardSourceCondition: CardSourceCondition, getEffects: GetEffects);
-
-            cardEffects.Add(addSkillClass);
-
-            bool CanUseCondition(Hashtable hashtable)
-            {
-                return CardEffectCommons.IsExistOnBattleArea(card);
-            }
-
-            bool PermanentCondition(Permanent permanent)
-            {
-                return permanent == card.PermanentOfThisCard();
-            }
-
-            bool CardSourceCondition(CardSource cardSource)
-            {
-                if (PermanentCondition(cardSource.PermanentOfThisCard()))
-                {
-                    if (cardSource == cardSource.PermanentOfThisCard().TopCard)
-                    {
-                        return true;
-                    }
-                }
-
-                return false;
-            }
-
-            List<ICardEffect> GetEffects(CardSource cardSource, List<ICardEffect> cardEffects, EffectTiming _timing)
-            {
-                if (CardSourceCondition(cardSource))
-                {
-                    foreach (CardSource cardSource1 in cardSource.PermanentOfThisCard().DigivolutionCards)
-                    {
-                        if (cardSource1.ContainsCardName("Gammamon"))
-                        {
-                            foreach (ICardEffect cardEffect in cardSource1.cEntity_EffectController.GetCardEffects_ExceptAddedEffects(_timing, card))
-                            {
-                                if (!cardEffect.IsSecurityEffect && !cardEffect.IsInheritedEffect)
-                                {
-                                    cardEffects.Add(cardEffect);
-                                }
-                            }
-                        }
-                    }
-                }
-
-                return cardEffects;
-            }
-        }
+        #region All Turns Copy effects of Gammamon in digivolution cards
+        bool CopyCardCondition(CardSource cardSource) => cardSource.ContainsCardName("Gammamon");
 
-        if (timing == EffectTiming.None)
-        {
-            AddSkillClass addSkillClass = new AddSkillClass();
-            addSkillClass.SetUpICardEffect("This Digimon gains all effects of [Gammamon] in digivolution cards", CanUseCondition, card);
-            addSkillClass.SetUpAddSkillClass(cardSourceCondition: CardSourceCondition, getEffects: GetEffects);
-            addSkillClass.SetIsInheritedEffect(true);
-            cardEffects.Add(addSkillClass);
-
-            bool CanUseCondition(Hashtable hashtable)
-            {
-                return CardEffectCommons.IsExistOnBattleArea(card);
-            }
-
-            bool PermanentCondition(Permanent permanent)
-            {
-                return permanent == card.PermanentOfThisCard();
-            }
-
-            bool CardSourceCondition(CardSource cardSource)
-            {
-                if (PermanentCondition(cardSource.PermanentOfThisCard()))
-                {
-                    if (cardSource == cardSource.PermanentOfThisCard().TopCard)
-                    {
-                        return true;
-                    }
-                }
-
-                return false;
-            }
-
-            List<ICardEffect> GetEffects(CardSource cardSource, List<ICardEffect> cardEffects, EffectTiming _timing)
-            {
-                if (CardSourceCondition(cardSource))
-                {
-                    foreach (CardSource cardSource1 in cardSource.PermanentOfThisCard().DigivolutionCards)
-                    {
-                        if (cardSource1.ContainsCardName("Gammamon"))
-                        {
-                            foreach (ICardEffect cardEffect in cardSource1.cEntity_EffectController.GetCardEffects_ExceptAddedEffects(_timing, card))
-                            {
-                                if (!cardEffect.IsSecurityEffect && !cardEffect.IsInheritedEffect)
-                                {
-                                    cardEffects.Add(cardEffect);
-                                }
-                            }
-                        }
-                    }
-                }
-
-                return cardEffects;
-            }
-        }
+        CardEffectFactory.CopyDigivolutionCardEffects(ref cardEffects, timing, card, cardCondition: CopyCardCondition);
+        CardEffectFactory.CopyDigivolutionCardEffects(ref cardEffects, timing, card, isInheritedEffect: true, cardCondition: CopyCardCondition);
+        #endregion
 
         return cardEffects;
     }

+ 5 - 106
Assets/Scripts/CardEffect/RB1/Purple/RB1_030.cs

@@ -231,113 +231,12 @@ public class RB1_030 : CEntity_Effect
             }
         }
 
-        if (timing == EffectTiming.None)
-        {
-            AddSkillClass addSkillClass = new AddSkillClass();
-            addSkillClass.SetUpICardEffect("This Digimon gains all effects of [Gammamon] in digivolution cards", CanUseCondition, card);
-            addSkillClass.SetUpAddSkillClass(cardSourceCondition: CardSourceCondition, getEffects: GetEffects);
-
-            cardEffects.Add(addSkillClass);
-
-            bool CanUseCondition(Hashtable hashtable)
-            {
-                return CardEffectCommons.IsExistOnBattleArea(card);
-            }
-
-            bool PermanentCondition(Permanent permanent)
-            {
-                return permanent == card.PermanentOfThisCard();
-            }
-
-            bool CardSourceCondition(CardSource cardSource)
-            {
-                if (PermanentCondition(cardSource.PermanentOfThisCard()))
-                {
-                    if (cardSource == cardSource.PermanentOfThisCard().TopCard)
-                    {
-                        return true;
-                    }
-                }
-
-                return false;
-            }
-
-            List<ICardEffect> GetEffects(CardSource cardSource, List<ICardEffect> cardEffects, EffectTiming _timing)
-            {
-                if (CardSourceCondition(cardSource))
-                {
-                    foreach (CardSource cardSource1 in cardSource.PermanentOfThisCard().DigivolutionCards)
-                    {
-                        if (cardSource1.ContainsCardName("Gammamon"))
-                        {
-                            foreach (ICardEffect cardEffect in cardSource1.cEntity_EffectController.GetCardEffects_ExceptAddedEffects(_timing, card))
-                            {
-                                if (!cardEffect.IsSecurityEffect && !cardEffect.IsInheritedEffect)
-                                {
-                                    cardEffects.Add(cardEffect);
-                                }
-                            }
-                        }
-                    }
-                }
-
-                return cardEffects;
-            }
-        }
+        #region All Turns Copy effects of Gammamon in digivolution cards
+        bool CopyCardCondition(CardSource cardSource) => cardSource.ContainsCardName("Gammamon");
 
-        if (timing == EffectTiming.None)
-        {
-            AddSkillClass addSkillClass = new AddSkillClass();
-            addSkillClass.SetUpICardEffect("This Digimon gains all effects of [Gammamon] in digivolution cards", CanUseCondition, card);
-            addSkillClass.SetUpAddSkillClass(cardSourceCondition: CardSourceCondition, getEffects: GetEffects);
-            addSkillClass.SetIsInheritedEffect(true);
-            cardEffects.Add(addSkillClass);
-
-            bool CanUseCondition(Hashtable hashtable)
-            {
-                return CardEffectCommons.IsExistOnBattleArea(card);
-            }
-
-            bool PermanentCondition(Permanent permanent)
-            {
-                return permanent == card.PermanentOfThisCard();
-            }
-
-            bool CardSourceCondition(CardSource cardSource)
-            {
-                if (PermanentCondition(cardSource.PermanentOfThisCard()))
-                {
-                    if (cardSource == cardSource.PermanentOfThisCard().TopCard)
-                    {
-                        return true;
-                    }
-                }
-
-                return false;
-            }
-
-            List<ICardEffect> GetEffects(CardSource cardSource, List<ICardEffect> cardEffects, EffectTiming _timing)
-            {
-                if (CardSourceCondition(cardSource))
-                {
-                    foreach (CardSource cardSource1 in cardSource.PermanentOfThisCard().DigivolutionCards)
-                    {
-                        if (cardSource1.ContainsCardName("Gammamon"))
-                        {
-                            foreach (ICardEffect cardEffect in cardSource1.cEntity_EffectController.GetCardEffects_ExceptAddedEffects(_timing, card))
-                            {
-                                if (!cardEffect.IsSecurityEffect && !cardEffect.IsInheritedEffect)
-                                {
-                                    cardEffects.Add(cardEffect);
-                                }
-                            }
-                        }
-                    }
-                }
-
-                return cardEffects;
-            }
-        }
+        CardEffectFactory.CopyDigivolutionCardEffects(ref cardEffects, timing, card, cardCondition: CopyCardCondition);
+        CardEffectFactory.CopyDigivolutionCardEffects(ref cardEffects, timing, card, isInheritedEffect: true, cardCondition: CopyCardCondition);
+        #endregion
 
         return cardEffects;
     }

+ 5 - 106
Assets/Scripts/CardEffect/RB1/Red/RB1_009.cs

@@ -46,113 +46,12 @@ namespace DCGO.CardEffects.RB1
                 cardEffects.Add(CardEffectFactory.AddSelfDigivolutionRequirementStaticEffect(permanentCondition: PermanentCondition, digivolutionCost: 3, ignoreDigivolutionRequirement: true, card: card, condition: Condition));
             }
 
-            if (timing == EffectTiming.None)
-            {
-                AddSkillClass addSkillClass = new AddSkillClass();
-                addSkillClass.SetUpICardEffect("This Digimon gains all effects of [Gammamon] in digivolution cards", CanUseCondition, card);
-                addSkillClass.SetUpAddSkillClass(cardSourceCondition: CardSourceCondition, getEffects: GetEffects);
-
-                cardEffects.Add(addSkillClass);
-
-                bool CanUseCondition(Hashtable hashtable)
-                {
-                    return CardEffectCommons.IsExistOnBattleArea(card);
-                }
-
-                bool PermanentCondition(Permanent permanent)
-                {
-                    return permanent == card.PermanentOfThisCard();
-                }
-
-                bool CardSourceCondition(CardSource cardSource)
-                {
-                    if (PermanentCondition(cardSource.PermanentOfThisCard()))
-                    {
-                        if (cardSource == cardSource.PermanentOfThisCard().TopCard)
-                        {
-                            return true;
-                        }
-                    }
-
-                    return false;
-                }
-
-                List<ICardEffect> GetEffects(CardSource cardSource, List<ICardEffect> cardEffects, EffectTiming _timing)
-                {
-                    if (CardSourceCondition(cardSource))
-                    {
-                        foreach (CardSource cardSource1 in cardSource.PermanentOfThisCard().DigivolutionCards)
-                        {
-                            if (cardSource1.ContainsCardName("Gammamon"))
-                            {
-                                foreach (ICardEffect cardEffect in cardSource1.cEntity_EffectController.GetCardEffects_ExceptAddedEffects(_timing, card))
-                                {
-                                    if (!cardEffect.IsSecurityEffect && !cardEffect.IsInheritedEffect)
-                                    {
-                                        cardEffects.Add(cardEffect);
-                                    }
-                                }
-                            }
-                        }
-                    }
-
-                    return cardEffects;
-                }
-            }
+            #region All Turns Copy effects of Gammamon in digivolution cards
+            bool CopyCardCondition(CardSource cardSource) => cardSource.ContainsCardName("Gammamon");
 
-            if (timing == EffectTiming.None)
-            {
-                AddSkillClass addSkillClass = new AddSkillClass();
-                addSkillClass.SetUpICardEffect("This Digimon gains all effects of [Gammamon] in digivolution cards", CanUseCondition, card);
-                addSkillClass.SetUpAddSkillClass(cardSourceCondition: CardSourceCondition, getEffects: GetEffects);
-                addSkillClass.SetIsInheritedEffect(true);
-                cardEffects.Add(addSkillClass);
-
-                bool CanUseCondition(Hashtable hashtable)
-                {
-                    return CardEffectCommons.IsExistOnBattleArea(card);
-                }
-
-                bool PermanentCondition(Permanent permanent)
-                {
-                    return permanent == card.PermanentOfThisCard();
-                }
-
-                bool CardSourceCondition(CardSource cardSource)
-                {
-                    if (PermanentCondition(cardSource.PermanentOfThisCard()))
-                    {
-                        if (cardSource == cardSource.PermanentOfThisCard().TopCard)
-                        {
-                            return true;
-                        }
-                    }
-
-                    return false;
-                }
-
-                List<ICardEffect> GetEffects(CardSource cardSource, List<ICardEffect> cardEffects, EffectTiming _timing)
-                {
-                    if (CardSourceCondition(cardSource))
-                    {
-                        foreach (CardSource cardSource1 in cardSource.PermanentOfThisCard().DigivolutionCards)
-                        {
-                            if (cardSource1.ContainsCardName("Gammamon"))
-                            {
-                                foreach (ICardEffect cardEffect in cardSource1.cEntity_EffectController.GetCardEffects_ExceptAddedEffects(_timing, card))
-                                {
-                                    if (!cardEffect.IsSecurityEffect && !cardEffect.IsInheritedEffect)
-                                    {
-                                        cardEffects.Add(cardEffect);
-                                    }
-                                }
-                            }
-                        }
-                    }
-
-                    return cardEffects;
-                }
-            }
+            CardEffectFactory.CopyDigivolutionCardEffects(ref cardEffects, timing, card, cardCondition: CopyCardCondition);
+            CardEffectFactory.CopyDigivolutionCardEffects(ref cardEffects, timing, card, isInheritedEffect: true, cardCondition: CopyCardCondition);
+            #endregion
 
             return cardEffects;
         }

+ 60 - 0
Assets/Scripts/Script/CardEffectFactory/CopiedEffects.cs

@@ -0,0 +1,60 @@
+using System;
+using System.Collections.Generic;
+
+public partial class CardEffectFactory
+{
+    /// <summary>
+    /// Effect to copy through the effects of digivolution cards as effect of the top card. Done directly in CEntity_Effect.CardEffects for efficiency
+    /// </summary>
+    /// <param name="cardEffects">Reference to the list of effects for this card to add effects to</param>
+    /// <param name="timing">timing being queried</param>
+    /// <param name="card">Card with the copy effect</param>
+    /// <param name="canUseCondition">Condition to use this effect (Current turn, This digimon with X trait, etc.)</param>
+    /// <param name="cardCondition">Condition of the cards to copy from (gammamon in name, MachineDramon or Chaosdramon, etc.)</param>
+    /// <param name="effectCondition">Conditions on the effects to copy (Only On Plays, only activate effects, etc.)</param>
+    public static void CopyDigivolutionCardEffects(ref List<ICardEffect> cardEffects,
+                                                   EffectTiming timing, 
+                                                   CardSource card,
+                                                   bool isInheritedEffect = false,
+                                                   bool isLinkedEffect = false,
+                                                   Func<bool> canUseCondition = null,
+                                                   Func<CardSource, bool> cardCondition = null,
+                                                   Func<ICardEffect, bool> effectCondition = null
+                                                   )
+    {
+        if (card.PermanentOfThisCard() == null) return;
+        if (canUseCondition != null && !canUseCondition()) return;
+
+        Permanent thisPermanent = card.PermanentOfThisCard();
+
+        //If it is an inherited effect it should be in digivolution cards, if link effect should be linked, if neither it should not be in either (leaving only topcard)
+        if (isInheritedEffect != thisPermanent.DigivolutionCards.Contains(card)) return;
+        if (isLinkedEffect != thisPermanent.LinkedCards.Contains(card)) return;
+
+        List<CardSource> validSources = thisPermanent.DigivolutionCards.Filter(cardSource => cardSource != card && (cardCondition == null || cardCondition(cardSource)));
+
+        foreach (CardSource cardSource in validSources)
+        {
+            List<ICardEffect> toCopyEffects = cardSource.EffectList(timing);
+            int i = 0;
+            foreach (ICardEffect cardEffect in toCopyEffects)
+            {
+                if (cardEffect.IsInheritedEffect || cardEffect.IsLinkedEffect) continue;
+
+                if (cardEffect is ActivateClass)
+                {
+                    ActivateClass activateClass = (ActivateClass)cardEffect;
+                    activateClass.SetHashString(GenerateHashString(card, cardSource, i));//Set unique hashstring so OPTs work correctly
+                    cardEffects.Add(activateClass);
+                    cardEffects.Add(PermanentEffectFactory.AddDetailClass(thisPermanent, activateClass.EffectDiscription, true, activateClass));
+                }
+                else//If any other effect types need their can use condition changed to work correctly those can be handled here, otherwise just copied through
+                {
+                    cardEffects.Add(cardEffect);
+                }
+            }
+        }
+    }
+
+    private static string GenerateHashString(CardSource card, CardSource cardSource, int i) => $"Card-{card.CardIndex}-Copying-Card-{cardSource.CardIndex}-effect-{i}";
+}

+ 11 - 0
Assets/Scripts/Script/CardEffectFactory/CopiedEffects.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e6d8035616139d344a4b062aca0caadc
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: