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); })); }
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); })); }
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); })); }
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); })); }
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; }
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; }