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