Beispiel #1
0
        public override IEnumerator ApplyEffect(CardEffectState cardEffectState, CardEffectParams cardEffectParams)
        {
            int       num             = 0;
            CardState parentCardState = cardEffectState.GetParentCardState();

            if (parentCardState != null)
            {
                CardTraitState.ApplyingHealParameters healParameters = default(CardTraitState.ApplyingHealParameters);
                healParameters.combatManager = cardEffectParams.combatManager;
                foreach (CardTraitState traitState in parentCardState.GetTraitStates())
                {
                    healParameters.healAmount = num;
                    num = traitState.OnApplyingTrainHeal(healParameters);
                }
            }
            num += cardEffectState.GetParamInt();
            PyreRoomState  pyreRoom       = cardEffectParams.roomManager.GetPyreRoom();
            CharacterState characterState = pyreRoom?.GetPyreHeart();

            if (characterState != null)
            {
                num = Mathf.Min(cardEffectParams.saveManager.GetMaxTowerHP() - cardEffectParams.playerManager.GetTowerHP(), num);
                characterState.GetCharacterUI().ApplyStateToUI(pyreRoom.GetPyreHeart(), cardEffectParams.popupNotificationManager, num, doingDamage: false);
            }
            cardEffectParams.playerManager.HealTowerHP(num);

            yield break;
        }
        static void Postfix(CardEffectState __instance, ref int __result, int startingParam)
        {
            CardStateModifiers cardStateModifiers  = null;
            CardStateModifiers cardStateModifiers2 = null;

            if (__instance.GetParentCardState() != null)
            {
                cardStateModifiers  = __instance.GetParentCardState().GetCardStateModifiers();
                cardStateModifiers2 = __instance.GetParentCardState().GetTemporaryCardStateModifiers();
            }
            if (__instance.GetCardEffect() is CardEffectEmberwave)
            {
                __result = CardStateModifiers.GetUpgradedStatValue(__result, CardStateModifiers.StatType.Damage, cardStateModifiers);
                __result = CardStateModifiers.GetUpgradedStatValue(__result, CardStateModifiers.StatType.Damage, cardStateModifiers2);
            }
        }
Beispiel #3
0
        public override IEnumerator ApplyEffect(CardEffectState cardEffectState, CardEffectParams cardEffectParams)
        {
            foreach (CharacterState target in cardEffectParams.targets)
            {
                if (!TestEffectOnTarget(cardEffectState, cardEffectParams, target))
                {
                    continue;
                }
                buffAmount = (target.GetAttackDamageWithoutStatusEffectBuffs() / 2);
                if (cardEffectState.GetParentCardState() != null)
                {
                    CardTraitState.ApplyingDamageParameters applyingDamageParameters = default(CardTraitState.ApplyingDamageParameters);
                    applyingDamageParameters.damage        = buffAmount;
                    applyingDamageParameters.damageType    = Damage.Type.Default;
                    applyingDamageParameters.combatManager = cardEffectParams.combatManager;
                    CardTraitState.ApplyingDamageParameters damageParams = applyingDamageParameters;
                    foreach (CardTraitState traitState in cardEffectState.GetParentCardState().GetTraitStates())
                    {
                        damageParams.damage = buffAmount;
                        buffAmount          = traitState.OnApplyingBuffDamageToUnit(cardEffectParams.cardManager, damageParams);
                    }
                }

                target.DebuffDamage(buffAmount);

                //CardUpgradeData upgrade = new CardUpgradeDataBuilder
                //{
                //	BonusDamage = -buffAmount
                //}.Build();

                //var upgradeState = new CardUpgradeState();
                //upgradeState.Setup(upgrade);

                //target.ApplyCardUpgrade(upgradeState);

                NotifyHealthEffectTriggered(cardEffectParams.saveManager, cardEffectParams.popupNotificationManager, GetActivatedDescription(cardEffectState), target.GetCharacterUI());
            }
            yield break;
        }
Beispiel #4
0
 private IEnumerator HandleChooseCard(
     CardEffectState cardEffectState,
     CardEffectParams cardEffectParams)
 {
     cardEffectParams.screenManager.SetScreenActive(ScreenName.Deck, true, (ScreenManager.ScreenActiveCallback)(screen =>
     {
         DeckScreen deckScreen = screen as DeckScreen;
         deckScreen.Setup(new DeckScreen.Params()
         {
             mode               = DeckScreen.Mode.CardSelection,
             targetMode         = cardEffectState.GetTargetMode(),
             showCancel         = false,
             titleKey           = cardEffectState.GetParentCardState().GetTitleKey(),
             instructionsKey    = "SeekCopyInstructions",
             numCardsSelectable = cardEffectState.GetParamInt(),
         });
         deckScreen.AddDeckScreenCardStateChosenDelegate((DeckScreen.CardStateChosenDelegate)(chosenCardState =>
         {
             cardEffectParams.cardManager.DrawSpecificCard(chosenCardState, 0.0f, this.GetDrawSource(cardEffectState.GetTargetMode()), cardEffectParams.playedCard, 1, 1);
             cardEffectParams.screenManager.SetScreenActive(ScreenName.Deck, false, (ScreenManager.ScreenActiveCallback)null);
         }));
     }));
     yield break;
 }
        public virtual IEnumerator HandleChooseCard(
            CardEffectState cardEffectState,
            CardEffectParams cardEffectParams)
        {
            // Generate the Scryed Cards
            // Param Int -> Cards to scry, Additional Param Int -> cards to choose
            List <CardState> drawPile         = cardEffectParams.cardManager.GetDrawPile();
            List <CardState> scryedCards      = new List <CardState>();
            CardState        priorityUnitDraw = DivinePriorityUnit(drawPile);

            // Adjust Divine for priority draw
            if (priorityUnitDraw != null)
            {
                scryedCards.Add(priorityUnitDraw);
            }

            // Draw Piles are dumb?
            drawPile.Reverse();

            // Draw normally
            int drawSize = scryedCards.Count;

            for (int i = 0; i < Math.Min(cardsToScry - drawSize, drawPile.Count); i++)
            {
                if (drawPile[i] != priorityUnitDraw)
                {
                    scryedCards.Add(drawPile[i]);
                }
            }

            // Draw Piles are dumb? Yep
            drawPile.Reverse();

            // Hardcoded Divine interaction to always divine a card with ID "ChosenOne"
            foreach (var card in drawPile)
            {
                if (card.GetID() == "ChosenOne")
                {
                    if (!scryedCards.Contains(card))
                    {
                        scryedCards.Add(card);
                    }
                }
            }
            foreach (var card in cardEffectParams.cardManager.GetDiscardPile())
            {
                if (card.GetID() == "ChosenOne")
                {
                    if (!scryedCards.Contains(card))
                    {
                        scryedCards.Add(card);
                    }
                }
            }

            cardEffectParams.screenManager.SetScreenActive(ScreenName.Deck, true, screen =>
            {
                DeckScreen deckScreen = screen as DeckScreen;
                deckScreen.Setup(new DeckScreen.Params()
                {
                    mode               = DeckScreen.Mode.CardSelection,
                    showCancel         = true,
                    targetMode         = TargetMode.Deck,
                    titleKey           = cardEffectState.GetParentCardState().GetTitleKey(),
                    instructionsKey    = DescriptionKey,
                    numCardsSelectable = cardEffectState.GetAdditionalParamInt(),
                });

                // Reset the card List to the scryed cards
                AccessTools.Field(typeof(DeckScreen), "cardStates").SetValue(screen, scryedCards);
                AccessTools.Method(typeof(DeckScreen), "ApplyStateToCachedCards").Invoke(screen, new object[] { scryedCards, cardEffectParams.cardManager.GetCardStatistics(), cardEffectParams.cardManager.GetMonsterManager(), cardEffectParams.cardManager.GetHeroManager(), null });

                AddDelegate(cardEffectState, cardEffectParams, deckScreen);
            });

            yield break;
        }
Beispiel #6
0
        public override IEnumerator HandleChooseCard(
            CardEffectState cardEffectState,
            CardEffectParams cardEffectParams)
        {
            List <CardState> toProcessCards = new List <CardState>();

            toProcessCards.AddRange(cardEffectParams.cardManager.GetDrawPile());

            List <CardState> scryedCards = new List <CardState>();

            int num        = 0;
            int intInRange = cardsToScry;

            for (int i = 0; i < toProcessCards.Count; i++)
            {
                if (num >= intInRange)
                {
                    break;
                }
                scryedCards.Add(toProcessCards[i]);
            }
            List <CardState> drawPile = cardEffectParams.cardManager.GetDrawPile();

            drawPile.AddRange(cardEffectParams.cardManager.GetDiscardPile());

            foreach (var card in drawPile)
            {
                if (card.GetID() == "ChosenOne")
                {
                    if (!scryedCards.Contains(card))
                    {
                        scryedCards.Add(card);
                    }
                }
            }

            // Generate the Scryed Cards
            // Param Int -> Cards to scry, Additional Param Int -> cards to choose

            cardEffectParams.screenManager.SetScreenActive(ScreenName.Deck, true, screen =>
            {
                DeckScreen deckScreen = screen as DeckScreen;
                deckScreen.Setup(new DeckScreen.Params()
                {
                    mode               = DeckScreen.Mode.CardSelection,
                    showCancel         = true,
                    targetMode         = TargetMode.Deck,
                    titleKey           = cardEffectState.GetParentCardState().GetTitleKey(),
                    instructionsKey    = GetTooltipBaseKey(),
                    numCardsSelectable = cardEffectState.GetAdditionalParamInt(),
                });

                // Reset the card List to the scryed cards
                AccessTools.Field(typeof(DeckScreen), "cardStates").SetValue(screen, scryedCards);
                AccessTools.Method(typeof(DeckScreen), "ApplyStateToCachedCards").Invoke(screen, new object[] { scryedCards, cardEffectParams.cardManager.GetCardStatistics(), cardEffectParams.cardManager.GetMonsterManager(), cardEffectParams.cardManager.GetHeroManager(), null });

                AddDelegate(cardEffectState, cardEffectParams, deckScreen);
            });

            yield break;
        }