public override void AddDelegate(CardEffectState cardEffectState,
                                         CardEffectParams cardEffectParams,
                                         DeckScreen deckScreen)
        {
            deckScreen.AddDeckScreenCardStateChosenDelegate((DeckScreen.CardStateChosenDelegate)(chosenCardState =>
            {
                CardUpgradeState cardUpgradeState = new CardUpgradeState();
                cardUpgradeState.Setup(cardEffectState.GetParamCardUpgradeData());

                foreach (CardUpgradeMaskData filter in cardUpgradeState.GetFilters())
                {
                    if (!filter.FilterCard(chosenCardState, cardEffectParams.relicManager))
                    {
                        // If any of the filters matches, it doesn't get upgraded
                        return;
                    }
                }

                if (chosenCardState.GetCardType() == CardType.Monster)
                {
                    chosenCardState.GetTemporaryCardStateModifiers().AddUpgrade(cardUpgradeState);
                }
                if (chosenCardState.GetCardType() == CardType.Spell)
                {
                    chosenCardState.AddTemporaryTrait(new CardTraitDataBuilder {
                        TraitStateType = typeof(CardTraitPyreboost)
                    }.Build(), cardEffectParams.cardManager);
                }

                chosenCardState.UpdateCardBodyText();

                cardEffectParams.screenManager.SetScreenActive(ScreenName.Deck, false, (ScreenManager.ScreenActiveCallback)null);
            }));
        }
        public override void AddDelegate(CardEffectState cardEffectState,
                                         CardEffectParams cardEffectParams,
                                         DeckScreen deckScreen)
        {
            deckScreen.AddDeckScreenCardStateChosenDelegate((DeckScreen.CardStateChosenDelegate)(chosenCardState =>
            {
                cardEffectParams.cardManager.MoveToStandByPile(chosenCardState, wasPlayed: false, wasExhausted: true, new RemoveFromStandByCondition(() => CardPile.ExhaustedPile), new CardManager.DiscardCardParams(), HandUI.DiscardEffect.Exhausted);

                var allTargets = new List <CharacterState>();
                cardEffectParams.heroManager.AddCharactersInRoomToList(allTargets, cardEffectParams.GetSelectedRoom().GetRoomIndex());

                if (allTargets.Count > 0)
                {
                    for (int i = 0; i < chosenCardState.GetCostWithoutAnyModifications(); i++)
                    {
                        cardEffectParams.combatManager.ApplyDamageToTarget(5, allTargets[0], new CombatManager.ApplyDamageToTargetParameters
                        {
                            damageType = Damage.Type.TowerHeart,
                            playedCard = cardEffectParams.playedCard,
                        });
                    }
                }
                cardEffectParams.screenManager.SetScreenActive(ScreenName.Deck, false, (ScreenManager.ScreenActiveCallback)null);
            }));
        }
        static bool Prefix(ListCard __instance, bool useRemover)
        {
            var     card    = __instance;
            RunCtrl runCtrl = card.deCtrl.runCtrl;

            if (!CustomHell.IsHellEnabled(runCtrl, CustomHellPassEffect.TWO_REMOVES_FOR_PACT))
            {
                return(true);
            }

            if (!IsNormalPact(card) || !useRemover)
            {
                return(true);
            }

            DeckScreen deckScreen = GetDeckScreen(card);

            if (deckScreen.busy)
            {
                return(true);
            }

            // This is clunky, but so is using a transpiler.
            if (runCtrl.currentRun.removals < HELL_PRICE)
            {
                PlayForbiddenEffect(card, deckScreen);
                return(false);
            }

            runCtrl.currentRun.removals -= HELL_PRICE;
            deckScreen.UpdateRemoverCountText();
            PlayRemoveCardEffect(card);
            return(false);
        }
 public override void AddDelegate(CardEffectState cardEffectState,
                                  CardEffectParams cardEffectParams,
                                  DeckScreen deckScreen)
 {
     deckScreen.AddDeckScreenCardStateChosenDelegate((DeckScreen.CardStateChosenDelegate)(chosenCardState =>
     {
         cardEffectParams.cardManager.MoveToStandByPile(chosenCardState, wasPlayed: false, wasExhausted: true, new RemoveFromStandByCondition(() => CardPile.ExhaustedPile), new CardManager.DiscardCardParams(), HandUI.DiscardEffect.Exhausted);
         cardEffectParams.screenManager.SetScreenActive(ScreenName.Deck, false, (ScreenManager.ScreenActiveCallback)null);
     }));
 }
 public override void AddDelegate(CardEffectState cardEffectState,
                                  CardEffectParams cardEffectParams,
                                  DeckScreen deckScreen)
 {
     deckScreen.AddDeckScreenCardStateChosenDelegate((DeckScreen.CardStateChosenDelegate)(chosenCardState =>
     {
         chosenCardState.AddTemporaryTrait(new CardTraitDataBuilder {
             TraitStateName = "CardTraitFreebie", ParamInt = -99
         }.Build(), cardEffectParams.cardManager);
         cardEffectParams.screenManager.SetScreenActive(ScreenName.Deck, false, (ScreenManager.ScreenActiveCallback)null);
     }));
 }
 public virtual void AddDelegate(CardEffectState cardEffectState,
                                 CardEffectParams cardEffectParams,
                                 DeckScreen deckScreen)
 {
     deckScreen.AddDeckScreenCardStateChosenDelegate((DeckScreen.CardStateChosenDelegate)(chosenCardState =>
     {
         cardEffectParams.cardManager.DrawSpecificCard(chosenCardState, 0.0f, this.GetDrawSource(cardEffectState.GetTargetMode()), cardEffectParams.playedCard, 1, 1);
         chosenCardState.AddTemporaryTrait(new CardTraitDataBuilder {
             TraitStateName = "CardTraitExhaustState"
         }.Build(), cardEffectParams.cardManager);
         cardEffectParams.screenManager.SetScreenActive(ScreenName.Deck, false, (ScreenManager.ScreenActiveCallback)null);
     }));
 }
示例#7
0
        public override void AddDelegate(CardEffectState cardEffectState,
                                         CardEffectParams cardEffectParams,
                                         DeckScreen deckScreen)
        {
            deckScreen.AddDeckScreenCardStateChosenDelegate((DeckScreen.CardStateChosenDelegate)(chosenCardState =>
            {
                CardData cardData = cardEffectParams.allGameData.FindCardData(chosenCardState.GetCardDataID());
                if (cardData.GetID() == cardEffectParams.playedCard.GetCardDataID())
                {
                    Traverse.Create(cardEffectParams.cardManager).Field <HandUI>("handUI").Value.ShowCardSelectionErrorMessage("Revelation can not copy itself.", useCenterPositioning: true);
                    return;
                }

                CardManager.AddCardUpgradingInfo addCardUpgradingInfo = new CardManager.AddCardUpgradingInfo();

                addCardUpgradingInfo.ignoreTempUpgrades    = true;
                addCardUpgradingInfo.copyModifiersFromCard = chosenCardState;
                cardEffectParams.cardManager.AddCard(cardData, CardPile.HandPile, 1, 1, fromRelic: false, permanent: false, addCardUpgradingInfo);

                cardEffectParams.screenManager.SetScreenActive(ScreenName.Deck, false, (ScreenManager.ScreenActiveCallback)null);
            }));
        }
示例#8
0
        public override void AddDelegate(CardEffectState cardEffectState,
                                         CardEffectParams cardEffectParams,
                                         DeckScreen deckScreen)
        {
            deckScreen.AddDeckScreenCardStateChosenDelegate((DeckScreen.CardStateChosenDelegate)(chosenCardState =>
            {
                CardUpgradeState cardUpgradeState = new CardUpgradeState();
                cardUpgradeState.Setup(cardEffectState.GetParamCardUpgradeData());

                foreach (CardUpgradeMaskData filter in cardUpgradeState.GetFilters())
                {
                    if (!filter.FilterCard(chosenCardState, cardEffectParams.relicManager))
                    {
                        // If any of the filters matches, it doesn't get upgraded
                        return;
                    }
                }
                chosenCardState.GetTemporaryCardStateModifiers().AddUpgrade(cardUpgradeState);
                chosenCardState.UpdateCardBodyText();

                cardEffectParams.screenManager.SetScreenActive(ScreenName.Deck, false, (ScreenManager.ScreenActiveCallback)null);
            }));
        }
        public override void AddDelegate(CardEffectState cardEffectState,
                                         CardEffectParams cardEffectParams,
                                         DeckScreen deckScreen)
        {
            deckScreen.AddDeckScreenCardStateChosenDelegate((DeckScreen.CardStateChosenDelegate)(chosenCardState =>
            {
                //cardEffectParams.cardManager.MoveToStandByPile(chosenCardState, wasPlayed: false, wasExhausted: false, new RemoveFromStandByCondition(() => CardPile.DiscardPile), new CardManager.DiscardCardParams(), HandUI.DiscardEffect.Default);

                cardEffectParams.cardManager.GetDrawPile().Remove(chosenCardState);
                cardEffectParams.cardManager.GetDiscardPile().Add(chosenCardState);

                cardEffectParams.relicManager.ApplyOnPostDiscardRelicEffects(chosenCardState);
                IEnumerable <CardTraitState> traitStates = chosenCardState.GetTraitStates();
                foreach (CardTraitState item in traitStates)
                {
                    item.OnCardDiscarded(new DiscardCardParams {
                        discardCard = chosenCardState
                    }, cardEffectParams.cardManager, cardEffectParams.relicManager, cardEffectParams.combatManager);
                }
                cardEffectParams.roomManager.GetRoom(cardEffectParams.roomManager.GetSelectedRoom()).UpdateCardManagerRoomStateModifiers(chosenCardState, drawn: false);
                chosenCardState.OnCardDiscarded();

                // I hate private funcitons so much
                int discardCount = cardEffectParams.cardManager.GetDiscardPile().Count;
                CardPileInformation cardPileInformation = default(CardPileInformation);
                cardPileInformation.deckCount           = cardEffectParams.cardManager.GetDrawPile().Count;
                cardPileInformation.handCount           = cardEffectParams.cardManager.GetHand().Count;
                cardPileInformation.discardCount        = discardCount;
                cardPileInformation.exhaustedCount      = cardEffectParams.cardManager.GetExhaustedPile().Count;
                cardPileInformation.eatenCount          = cardEffectParams.cardManager.GetEatenPile().Count;
                CardPileInformation type = cardPileInformation;
                cardEffectParams.cardManager.cardPilesChangedSignal.Dispatch(type);


                cardEffectParams.screenManager.SetScreenActive(ScreenName.Deck, false, (ScreenManager.ScreenActiveCallback)null);
            }));
        }
示例#10
0
        public override void AddDelegate(CardEffectState cardEffectState,
                                         CardEffectParams cardEffectParams,
                                         DeckScreen deckScreen)
        {
            deckScreen.AddDeckScreenCardStateChosenDelegate((DeckScreen.CardStateChosenDelegate)(chosenCardState =>
            {
                cardEffectParams.cardManager.MoveToStandByPile(chosenCardState, wasPlayed: false, wasExhausted: true, new RemoveFromStandByCondition(() => CardPile.ExhaustedPile), new CardManager.DiscardCardParams(), HandUI.DiscardEffect.Exhausted);

                switch (chosenCardState.GetRarityType())
                {
                case CollectableRarity.Common:
                    cardEffectParams.saveManager.AdjustGold(5, isReward: false);
                    break;

                case CollectableRarity.Uncommon:
                    cardEffectParams.saveManager.AdjustGold(10, isReward: false);
                    break;

                case CollectableRarity.Rare:
                    cardEffectParams.saveManager.AdjustGold(20, isReward: false);
                    break;

                case CollectableRarity.Champion:
                    cardEffectParams.saveManager.AdjustGold(50, isReward: false);
                    break;

                case CollectableRarity.Starter:
                    cardEffectParams.saveManager.AdjustGold(-10, isReward: false);
                    break;

                default:
                    break;
                }

                cardEffectParams.screenManager.SetScreenActive(ScreenName.Deck, false, (ScreenManager.ScreenActiveCallback)null);
            }));
        }
示例#11
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;
 }
 static void PlayForbiddenEffect(ListCard card, DeckScreen deckScreen)
 {
     S.I.PlayOnce(card.btnCtrl.lockedSound, false);
     deckScreen.removerAnimator.SetTrigger("FlashRed");
 }
        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;
        }
示例#14
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;
        }