hmm, maybe. Also my version have one not nice problem: if player have 2 controlled pets as possible by some spells (but not yet implemented in mangos) then its will share global cooldown. I select this version originally just becase see that only pets have currently global cooldown and not do research spells.
If global cooldown spells only exist for player/pet cases thne not reason have data in Unit.
I think we in this case can have same structure in charmed data (this will affect pets/charmed cases/controlled players) and in player as currently.
As you see i move some your code to spell for speedup and this can hide this 2 way work in 2 spell functions.
Ofc, if some raw creature spells have global cooldown data then no reason not have its just in Unit.
I will do look at spell.
Any way you implement main functionality of gcd system in right way as i look and only need select proper implementation details