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