static void Postfix(RelicManager __instance, CardManager.DiscardCardParams discardCardParams)
        {
            if (!discardCardParams.wasPlayed || !discardCardParams.discardCard.HasTrait(typeof(CardTraitExhaustState)))
            {
                return;
            }

            CombatManager combatManager;

            ProviderManager.TryGetProvider <CombatManager>(out combatManager);

            CardManager cardManager;

            ProviderManager.TryGetProvider <CardManager>(out cardManager);
            foreach (var card in cardManager.GetHand())
            {
                foreach (var trait in card.GetTraitStates())
                {
                    CardTraitSuppressExhaust cardTraitSuppressExhaust;
                    if ((cardTraitSuppressExhaust = (trait as CardTraitSuppressExhaust)) != null)
                    {
                        discardCardParams.outSuppressTraitOnDiscard = typeof(CardTraitExhaustState);
                    }
                }
            }
        }
Exemple #2
0
        static void Postfix(CardManager.DiscardCardParams discardCardParams, bool fromNaturalPlay)
        {
            ProviderManager.TryGetProvider(out SaveManager saveManager);
            ProviderManager.TryGetProvider(out RoomManager roomManager);
            if (saveManager == null || roomManager == null)
            {
                return;
            }

            if (saveManager.PreviewMode)
            {
                return;
            }

            RoomState             room = roomManager.GetRoom(roomManager.GetSelectedRoom());
            List <CharacterState> toProcessCharacters = new List <CharacterState>();

            room.AddCharactersToList(toProcessCharacters, Team.Type.Heroes | Team.Type.Monsters);

            foreach (CharacterState toProcessCharacter in toProcessCharacters)
            {
                foreach (IRoomStateModifier roomStateModifier in toProcessCharacter.GetRoomStateModifiers())
                {
                    IRoomStateCardDiscardedAdvancedModifier mod;
                    if ((mod = roomStateModifier as IRoomStateCardDiscardedAdvancedModifier) != null)
                    {
                        mod.OnCardDiscarded(discardCardParams, roomManager.GetSelectedRoom());
                    }
                }
            }
        }
Exemple #3
0
 public void OnCardDiscarded(CardManager.DiscardCardParams cardParams, int roomIndex)
 {
     // We handle played cards elsewhere
     if (!cardParams.wasPlayed)
     {
         cardManager.StartCoroutine(RemoveConsumeFromCard(cardParams.discardCard, true));
     }
 }
Exemple #4
0
        public override IEnumerator OnCardDiscarded(CardManager.DiscardCardParams discardCardParams, CardManager cardManager, RelicManager relicManager, CombatManager combatManager)
        {
            foreach (CardState item in cardManager.GetAllCards())
            {
                if (item.GetTemporaryCardStateModifiers().HasUpgrade(upgrade))
                {
                    item.GetTemporaryCardStateModifiers().RemoveUpgrade(upgrade);
                }
            }

            yield break;
        }
 // This exists because the base form implemented in the game (but unused) is broken and causes problems with CardStatistics counting
 public override IEnumerator OnCardDiscarded(CardManager.DiscardCardParams discardCardParams, CardManager cardManager, RelicManager relicManager, CombatManager combatManager)
 {
     if (discardCardParams.wasPlayed)
     {
         int additionalCardCount = GetAdditionalCardCount(cardManager.GetCardStatistics());
         for (int i = 0; i < additionalCardCount; i++)
         {
             if (!cardManager.RestoreNextExhaustedCard())
             {
                 break;
             }
         }
     }
     yield break;
 }