protected List<CGLuaParam> PrepareExecuteLuaParams(CGGameMode gameMode, Effect effect,
            ActorRef<Card> triggerCard,
            List<ActorRef<Card>> targetCards, List<ActorRef<Hero>> targetHeroes)
        {
            List<CGLuaParam> luaParams = new List<CGLuaParam>();

            Card cardObject = gameMode.GetActorObject(triggerCard);
            Player player = gameMode.GetActorObject(cardObject.GetOwnerPlayer());
            Hero cardHero = gameMode.GetActorObject(player.GetHero());
            int spellPowerValue = cardHero.GetSpellPowerValue();

            foreach (var triggerEffect in effect.triggerEffects)
            {
                // 抽牌效果或者如果是全场则是作为攻击者
                if (!cardObject.IsNeedChooseTriggerEffect(triggerEffect))
                {
                    if (triggerEffect.luaPath.Contains("All"))
                    {
                        triggerEffect.targetValue += spellPowerValue;
                    }

                    PrepareLuaSingleParam(gameMode, triggerEffect, cardObject, luaParams);
                    continue;
                }

                int targetValue = triggerEffect.targetValue;
                foreach (var targetCard in targetCards)
                {
                    // 计算上法强的值
                    if (triggerEffect.luaPath.Contains("Damage") || triggerEffect.luaPath.Contains("Heal"))
                    {
                        targetValue += spellPowerValue;
                    }

                    Card targetCardObject = gameMode.GetActorObject(targetCard);
                    if (triggerEffect.luaPath.Contains("Damage"))
                    {
                        if (targetCardObject.HasEffect(CardKeyWordType.HolyShield) &&
                            !targetCardObject.HasEffect(CardKeyWordType.Degrade)&&
                            targetCardObject.GetPreviewData().Count == 0)
                        {
                            targetCardObject.SetPreviewData(0);
                        }
                        else
                        {
                            targetCardObject.SetPreviewData(-targetValue);
                        }
                    }
                    else if (triggerEffect.luaPath.Contains("Heal"))
                    {
                        targetCardObject.SetPreviewData(targetValue);
                    }
                }

                foreach (var targetHero in targetHeroes)
                {
                    // 计算上法强的值
                    if (triggerEffect.luaPath.Contains("Damage") || triggerEffect.luaPath.Contains("Heal"))
                    {
                        targetValue += spellPowerValue;
                    }

                    Hero targetHeroObject = gameMode.GetActorObject(targetHero);

                    if (triggerEffect.luaPath.Contains("Damage"))
                    {
                        targetHeroObject.SetPreviewData(-targetValue);
                    }
                    else if (triggerEffect.luaPath.Contains("Heal"))
                    {
                        targetHeroObject.SetPreviewData(targetValue);
                    }
                }

                // 如果目标只有英雄
                if (targetHeroes.Count > 0 && targetCards.Count == 0)
                {
                    CGLuaHeroParam cgLuaHeroParam = new CGLuaHeroParam
                    {
                        Value = targetValue,
                        Heroes = targetHeroes
                    };
                    CGLuaParam cgLuaParam = new CGLuaParam()
                    {
                        LuaPath = triggerEffect.luaPath,
                        LuaParam = cgLuaHeroParam
                    };
                    luaParams.Add(cgLuaParam);
                    continue;
                }

                // 如果目标只有卡牌
                if (targetCards.Count > 0 && targetHeroes.Count == 0)
                {
                    CGLuaCardParam cgLuaCardParam = new CGLuaCardParam
                    {
                        Value = targetValue,
                        Cards = targetCards
                    };
                    CGLuaParam cgLuaParam = new CGLuaParam()
                    {
                        LuaPath = triggerEffect.luaPath,
                        LuaParam = cgLuaCardParam
                    };
                    luaParams.Add(cgLuaParam);
                    continue;
                }

                if (targetHeroes.Count > 0 && targetCards.Count > 0)
                {
                    CGLuaHeroParam cgLuaHeroParam = new CGLuaHeroParam
                    {
                        Value = targetValue,
                        Heroes = targetHeroes
                    };
                    CGLuaCardParam cgLuaCardParam = new CGLuaCardParam
                    {
                        Value = targetValue,
                        Cards = targetCards
                    };
                    CGLuaParam luaHeroParam = new CGLuaParam()
                    {
                        LuaPath = triggerEffect.luaPath,
                        LuaParam = cgLuaHeroParam
                    };
                    luaParams.Add(luaHeroParam);
                    CGLuaParam cgLuaParam = new CGLuaParam()
                    {
                        LuaPath = triggerEffect.luaPath,
                        LuaParam = cgLuaCardParam
                    };
                    luaParams.Add(cgLuaParam);
                }
            }

            return luaParams;
        }

        protected void PrepareLuaSingleParam(CGGameMode gameMode, TriggerEffect triggerEffect, Card card,
            List<CGLuaParam> luaParams)
        {
            CGLuaParam luaParam = new CGLuaParam
            {
                LuaPath = triggerEffect.luaPath
            };

            List<ActorRef<Hero>> heroes = new List<ActorRef<Hero>>();
            CGLuaHeroParam cgLuaHeroParam = new CGLuaHeroParam
            {
                Value = triggerEffect.targetValue,
                Heroes = heroes
            };

            List<ActorRef<Card>> cards = new List<ActorRef<Card>>();
            CGLuaCardParam cgLuaCardParam = new CGLuaCardParam
            {
                Value = triggerEffect.targetValue,
                Cards = cards
            };

            List<AccurateCardPosition> positions = new List<AccurateCardPosition>();
            CGLuaPositionParam cgLuaPositionParam = new CGLuaPositionParam
            {
                Value = triggerEffect.targetValue,
                Positions = positions
            };

            switch (triggerEffect.targetType.ToString())
            {
                // 己方英雄
                case "528":
                    ActorRef<Hero> targetHero = gameMode.GetHeroByCard(card);
                    if (targetHero.IsValid)
                    {
                        heroes.Add(targetHero);
                        luaParam.LuaParam = cgLuaHeroParam;
                        luaParams.Add(luaParam);
                    }

                    break;
                // 敌方英雄
                case "534":
                    ActorRef<Hero> oppositeHero = gameMode.GetOppositeHeroByCard(card);
                    if (oppositeHero.IsValid)
                    {
                        heroes.Add(oppositeHero);
                        luaParam.LuaParam = cgLuaHeroParam;
                        luaParams.Add(luaParam);
                    }

                    break;
                // 双方英雄
                case "560":
                    ActorRef<Hero> ownSideHero = gameMode.GetHeroByCard(card);
                    ActorRef<Hero> oppoHero = gameMode.GetOppositeHeroByCard(card);
                    heroes.Add(ownSideHero);
                    heroes.Add(oppoHero);
                    luaParam.LuaParam = cgLuaHeroParam;
                    luaParams.Add(luaParam);
                    break;
                // 己方单个随从
                case "82":
                    ActorRef<Card> targetCard = gameMode.GetTargetCard(card, triggerEffect);
                    if (targetCard.IsValid)
                    {
                        cards.Add(targetCard);
                        luaParam.LuaParam = cgLuaCardParam;
                        luaParams.Add(luaParam);
                    }

                    break;
                // 敌方单个随从
                case "98":
                    ActorRef<Card> targetOppositeCardCard = gameMode.GetTargetOppositeCard(card, triggerEffect);
                    if (targetOppositeCardCard.IsValid)
                    {
                        cards.Add(targetOppositeCardCard);
                        luaParam.LuaParam = cgLuaCardParam;
                        luaParams.Add(luaParam);
                    }

                    break;
                // 对敌方单位
                case "609":
                    int tempValue = triggerEffect.targetValue;
                    while (tempValue > 0)
                    {
                        tempValue--;
                        CGActor actor = gameMode.GetRandomOppositeTarget(card);
                        CGLuaParam tempLuaParam = new CGLuaParam
                        {
                            LuaPath = triggerEffect.luaPath
                        };
                        if (actor is Hero)
                        {
                            Debug.Log($"damage on hero {triggerEffect.targetValue}");
                            List<ActorRef<Hero>> tempHeroes = new List<ActorRef<Hero>>();
                            tempHeroes.Add(gameMode.GetActor((Hero)actor));
                            CGLuaHeroParam tempLuaHeroParam = new CGLuaHeroParam
                            {
                                Value = 1,
                                Heroes = tempHeroes
                            };
                            Hero hero = actor as Hero;
                            hero.SetPreviewData(-1);
                            tempLuaParam.LuaParam = tempLuaHeroParam;
                            luaParams.Add(tempLuaParam);
                        }
                        else
                        {
                            Debug.Log($"damage on card {triggerEffect.targetValue}");
                            List<ActorRef<Card>> tempCards = new List<ActorRef<Card>>();
                            tempCards.Add(gameMode.GetActor((Card)actor));
                            CGLuaCardParam tempLuaCardParam = new CGLuaCardParam
                            {
                                Value = 1,
                                Cards = tempCards
                            };
                            Card tempCard = actor as Card;
                            if (tempCard.HasEffect(CardKeyWordType.HolyShield) &&
                                !tempCard.HasEffect(CardKeyWordType.Degrade))
                            {
                                tempCard.SetPreviewData(0);
                            }
                            else
                            {
                                tempCard.SetPreviewData(-1);
                            }

                            tempLuaParam.LuaParam = tempLuaCardParam;
                            luaParams.Add(tempLuaParam);
                        }
                    }

                    break;
                // 对所有敌方随从 all，opposite，minion
                case "97":
                    cards.AddRange(gameMode.GetTargetOppositeCards(card));
                    luaParam.LuaParam = cgLuaCardParam;
                    luaParams.Add(luaParam);
                    break;
                // 对所有友方随从 all，ownSide，minion
                case "81":
                    cards.AddRange(gameMode.GetTargetOwnSideCards(card));
                    luaParam.LuaParam = cgLuaCardParam;
                    luaParams.Add(luaParam);
                    break;
                // 己方单个空位
                case "1042":
                    AccurateCardPosition targetPosition = gameMode.GetTargetPosition(card, triggerEffect);
                    positions.Add(targetPosition);
                    luaParam.LuaParam = cgLuaPositionParam;
                    luaParams.Add(luaParam);
                    break;
            }

            foreach (var targetCard in cards)
            {
                Card targetCardObject = gameMode.GetActorObject(targetCard);
                if (triggerEffect.luaPath.Contains("Damage"))
                {
                    if (targetCardObject.HasEffect(CardKeyWordType.HolyShield) &&
                        !targetCardObject.HasEffect(CardKeyWordType.Degrade)&&
                        targetCardObject.GetPreviewData().Count == 0)
                    {
                        targetCardObject.SetPreviewData(0);
                    }
                    else
                    {
                        targetCardObject.SetPreviewData(-triggerEffect.targetValue);
                    }
                }
                else if (triggerEffect.luaPath.Contains("Heal"))
                {
                    targetCardObject.SetPreviewData(triggerEffect.targetValue);
                }
            }

            foreach (var targetHero in heroes)
            {
                Hero targetHeroObject = gameMode.GetActorObject(targetHero);

                if (triggerEffect.luaPath.Contains("Damage"))
                {
                    targetHeroObject.SetPreviewData(-triggerEffect.targetValue);
                }
                else if (triggerEffect.luaPath.Contains("Heal"))
                {
                    targetHeroObject.SetPreviewData(triggerEffect.targetValue);
                }
            }
        }  请帮忙优化这两个方法