I've built these systems. Before i learnt about VCE loops, i simply used a database, where when a player 'bought' the spell, it fired a relay up a chain of bricks until it found one that hadn't had a relay, which then fired the relay to the side, where the spell events were. Hell, i could probably find a save of it.
However, it is much easier just to use VCE loops. onVariableTrue > Self > VCE_IfValue > "1" "Equals" "1" "Blah" will loop every however long, but it will work with as many clients as you can give it.
Another less-popular way is using functions. State a function called <var:cl:bl_id>, then call it, and have onVariableFunction > Self > CallFunction > "<var:cl:bl_id>" " ". That way, each client can only have one loop, and buying the spell multiple times will not make it fire twice as often, i think.
Edit: Turns out those spell database systems i built were for VCE v4.