public static void OnPlayedCard(
            CardState cardState,
            int roomIndex,
            SpawnPoint dropLocation,
            CombatManager.ApplyPreEffectsVfxAction onPreEffectsFiredVfx,
            CombatManager.ApplyEffectsAction onEffectsFired)
        {
            if (cardState.GetCardType() != CardType.Spell)
            {
                return;
            }

            // Gotta check and make sure it's not a consume or purge card. Avoid crashes
            RelicManager relicManager;

            ProviderManager.TryGetProvider <RelicManager>(out relicManager);
            if (cardState.GetDiscardEffectWhenPlayed(relicManager, null) != HandUI.DiscardEffect.Default)
            {
                return;
            }

            // Make sure we're on the same floor as the Owner
            MonsterManager monsterManager;

            ProviderManager.TryGetProvider <MonsterManager>(out monsterManager);
            List <CharacterState> units = new List <CharacterState>();

            monsterManager.AddCharactersInRoomToList(units, roomIndex);

            bool ret = true;

            foreach (var unit in units)
            {
                foreach (var mod in unit.GetRoomStateModifiers())
                {
                    if (mod is RoomStateModifierRewind)
                    {
                        ret = false;
                    }
                }
            }
            if (ret)
            {
                return;
            }

            // Get the provider and do the effect
            CardManager cardManager;

            ProviderManager.TryGetProvider <CardManager>(out cardManager);

            if (cardManager.GetCardStatistics().GetNumCardsPlayedThisTurnOfType(CardType.Spell) < numOfCards)
            {
                var corountine = RedrawCard(cardState, cardManager.GetHand().Count);
                cardManager.StartCoroutine(corountine);
            }
        }