protected override void OnExecute(CGGameMode gameMode, ref EventExeucteResult outError)
        {
            Card cardObject = gameMode.GetActorObject(m_minion);
            Player playerObject = gameMode.GetActorObject(cardObject.GetOwnerPlayer());
            BattleField battleField = gameMode.GetBattleFieldObject(playerObject.GetPlayerPosition());

            if (playerObject.PveItems.HasFlag(PVEItem.BloodPayment) && !playerObject.HasBloodPaymented)
            {
                Hero hero = gameMode.GetActorObject(playerObject.GetHero());
                GameAttribute health = hero.GetHealth();
                health -= cardObject.GetCost().Value;
                hero.SetHealth(health);
                playerObject.HasBloodPaymented = true;
            }
            else
            {
                if (m_isSacrifice)
                {
                    ActorRef<Card>? result = battleField.GetMinionCard(m_destPosition.SubPosition);
                    Card sacrificeCard = gameMode.GetActorObject(result.Value);
                    PlayerCost curValue = playerObject.GetPlayerCost();
                    // 献祭场景下吸收献祭卡一半的费用
                    curValue.Value.Value += sacrificeCard.GetSacrificeCostValue();
                    // 花费自身的费用
                    curValue.Value.Value -= cardObject.GetCost().Value.Value.intValue;
                    playerObject.SetPlayerCost(curValue);
                    gameMode.MoveCardToGraveDeck(sacrificeCard);
                    cardObject.SetTribute(sacrificeCard);
                }
                else
                {
                    CGGivePlayerCostEvent giveCostEvent = new CGGivePlayerCostEvent();
                    giveCostEvent.Player = cardObject.GetOwnerPlayer();
                    giveCostEvent.Delta = -cardObject.GetCost();
                    giveCostEvent.Execute(gameMode);
                }
            }

            CGGameMode.MoveCardIn moveCardParam = new CGGameMode.MoveCardIn
            {
                Card = m_minion,
                DestPosition = new AccurateCardPosition(m_destPosition)
            };
            gameMode.MoveCard(moveCardParam);
            
            cardObject.SetIsDeployed(false);
            cardObject.DeployTimer.Start(gameMode, gameMode.GameConfig.MinionDeployGCD, 1);
            gameMode.OnAfterCardDeployedHandle?.Invoke(cardObject);
            
            cardObject.OnSoundPlayed(DamageAudioType.Deploy);
            if (playerObject.PveItems.HasFlag(PVEItem.Phantom))
            {
                cardObject.EnterAmbushTimer.Start(gameMode, GameTimeSpan.OneSecond * 3);
            }
            
            if (cardObject.HasEffect(CardKeyWordType.Expose) || cardObject.HasEffect(CardKeyWordType.CopyExpose))
            {
                PlayerPosition oppoPosition = gameMode.GetOppositePlayerPosition(playerObject.GetPlayerPosition());
                TrapField trapField = gameMode.GetTrapFieldObject(oppoPosition);
                List<Card> deployedTrapCards = trapField.GetDeployedCardObjects().ToList();
                foreach (var card in deployedTrapCards)
                {
                    if (card.HasEffect(CardKeyWordType.CounterExpose))
                    {
                        CGCastTrapCardToPositionEvent cardEvent = new CGCastTrapCardToPositionEvent
                        {
                            Card = gameMode.GetActor(card),
                            Player = gameMode.GetPlayer(oppoPosition).Value,
                            TargetCards = new List<ActorRef<Card>>
                            {
                                m_minion
                            }
                        };
                        cardEvent.Execute(gameMode);
                        return;
                    }
                }
                if (!cardObject.HasDamageEffect())
                {
                    cardObject.OnSoundPlayed(DamageAudioType.MinionNoDamage);
                }
            }
            
            if (cardObject.HasEffect(CardKeyWordType.Expose))
            {
                gameMode.AddStatusData(cardObject.GetOwnerPlayer(), StatusType.ExposeMinion, 1);
            }

            if (cardObject.HasEffect(CardKeyWordType.Cycle))
            {
                gameMode.AddStatusData(cardObject.GetOwnerPlayer(), StatusType.CycleMinion, 1);
            }
            
            if (cardObject.HasEffect(CardKeyWordType.Expose))
            {
                foreach (var effect in cardObject.GetCardAllEffectsByKeyword(CardKeyWordType.Expose))
                {
                    foreach (var triggerEffect in effect.triggerEffects)
                    {
                        ExecuteLuaSingleTarget(gameMode, triggerEffect, cardObject);
                    }
                }

                for (int i = 0; i < playerObject.GetExtraExposeTimes(); i++)
                {
                    foreach (var effect in cardObject.GetCardAllEffectsByKeyword(CardKeyWordType.Expose))
                    {
                        foreach (var triggerEffect in effect.triggerEffects)
                        {
                            ExecuteLuaSingleTarget(gameMode, triggerEffect, cardObject);
                        }
                    }
                }
                if (!playerObject.GetIsAlwaysDoubleExpose())
                {
                    if (playerObject.GetExtraExposeCount() > 0)
                    {
                        int count = playerObject.GetExtraExposeCount();
                        count--;
                        playerObject.SetExtraExposeCount(count);
                        // 使用完次数后清除双倍战吼效果
                        if (count == 0)
                        {
                            playerObject.SetExtraExposeTimes(0); 
                        }
                    }
                    else
                    {
                        playerObject.SetExtraExposeTimes(0);
                    }
                }
                VisualEffect visualEffect = new VisualEffect
                {
                    Name = "UniversalDebut",
                    SpineType = SpineType.Single,
                    LifeTime = 1f,
                    Actors = new List<IActor>
                    {
                        cardObject
                    }
                };
                gameMode.Trigger(cardObject, CGEventNames.OnAfterEffectExecute, visualEffect);
            }

            if (cardObject.HasEffect(CardKeyWordType.CopyExpose))
            {
                HandCardDeck handCardDeck = gameMode.GetActorObject(playerObject.GetHandCardDeck());
                if (handCardDeck.HasOtherPlayerCard())
                {
                    foreach (var effect in cardObject.GetCardAllEffectsByKeyword(CardKeyWordType.CopyExpose))
                    {
                        foreach (var triggerEffect in effect.triggerEffects)
                        {
                            ExecuteLuaSingleTarget(gameMode, triggerEffect, cardObject);
                        }
                    }
                    
                    for (int i = 0; i < playerObject.GetExtraExposeTimes(); i++)
                    {
                        foreach (var effect in cardObject.GetCardAllEffectsByKeyword(CardKeyWordType.CopyExpose))
                        {
                            foreach (var triggerEffect in effect.triggerEffects)
                            {
                                ExecuteLuaSingleTarget(gameMode, triggerEffect, cardObject);
                            }
                        }
                    }
                    if (!playerObject.GetIsAlwaysDoubleExpose())
                    {
                        if (playerObject.GetExtraExposeCount() > 0)
                        {
                            int count = playerObject.GetExtraExposeCount();
                            count--;
                            playerObject.SetExtraExposeCount(count);
                            // 使用完次数后清除双倍战吼效果
                            if (count == 0)
                            {
                                playerObject.SetExtraExposeTimes(0); 
                            }
                        }
                        else
                        {
                            playerObject.SetExtraExposeTimes(0);
                        }
                    }
                    VisualEffect visualEffect = new VisualEffect
                    {
                        Name = "UniversalDebut",
                        SpineType = SpineType.Single,
                        LifeTime = 1f,
                        Actors = new List<IActor>
                        {
                            cardObject
                        }
                    };
                    gameMode.Trigger(cardObject, CGEventNames.OnAfterEffectExecute, visualEffect);
                }
            }
            
            if (m_isSacrifice && cardObject.HasEffect(CardKeyWordType.SacrificeTrigger))
            {
                foreach (var effect in cardObject.GetCardAllEffectsByKeyword(CardKeyWordType.SacrificeTrigger))
                {
                    foreach (var triggerEffect in effect.triggerEffects)
                    {
                        ExecuteLuaSingleTarget(gameMode, triggerEffect, cardObject);
                    }
                }
            }
            
            HeroTalent heroTalent = gameMode.GetActorObject(playerObject.GetHeroTalent());
            if (!cardObject.GetOwnerPlayer().IsSameWith(cardObject.GetOriginOwner()))
            {
                if (heroTalent.GetTalentType() == HeroTypes.Marauder && heroTalent.GetTalentIndex() == 0)
                {
                    gameMode.MarauderTalent0(cardObject);
                }
                gameMode.OnAfterUseStealCardHandler?.Invoke(cardObject);
            }

            if (heroTalent.GetTalentType() == HeroTypes.Strategist && heroTalent.GetTalentIndex() == 0)
            {
                gameMode.StrategistTalent0(cardObject, m_minion);
            }
            
            // 部署的镜像也进行天赋计数
            if (cardObject.GetName().Equals("镜像"))
            {
                gameMode.MageEnergyDrainTalent(cardObject, true);
            }
        } 帮忙优化一下这段代码