We can definitely look into adding this as a future feature, but I believe we can currently achieve this with Yanfly Buffs & States Core and Yanfly Auto Passive States. plugins. Here's one potential implementation assuming this is a solo member party game:
1. Create a state called CardsPlayedTracker. This state will be set to 0 at the start of an Actor's turn increment its State Counter each time a Card is played. For the purposes of this example, I'm going to say that this is State 15.
<Custom Battle Effect> target.setStateCounter(15, 0); </Custom Battle Effect> <Custom Turn Start Effect> target.setStateCounter(15, 0); </Custom Turn Start Effect> <Custom Action End Effect> target.addStateCounter(15,1); </Custom Action End Effect>
2. Create a Variable called MaxCardsPlayed and set it to the base number of Cards you want played in a Turn (e.g. 4). For the purposes of this example, I'm going to say that this is Variable 23.
3. You can add this Card Passives notetag for all of your cards so that if CardsPlayedTracker Counter exceeds the MaxCardsPlayed variable, then cards can no longer be played until start of next turn.
<Card Passives> Require $gameParty.leader().getStateCounter(15) < $gameVariables.value(23) </Card Passives>
3. Add CardsPlayerTracker state as a Passive State to your playable Actors in their Notetag section:
<Passive State: 15>
The result should be pretty close to the intended system you want and you can refine it from there. The MaxCardPlayed variable can be incremented with each level up. This is possible with multiple party members, but you will need to get more clever with the code so that you are tracking each Actor's CardsPlayedTracker and MaxCardsPlayed separately and the Passive requirement should be for the current Actor and not just the game party leader.
You can also do the reverse of this where you have an Energy budget for playing cards. As Flow9881 suggested, you can use TP or MP values for it. Yanfly's Skill Core should also let you specify custom skill costs and skill requirements.
Let us know if this helps or if we need to troubleshoot further :)