Ok, I think I got it, so please feel free to tell me I'm wrong or if I got it right.
By looking at the code, NOWHERE is it defined if an account is GM or non-GM. It does not state that GMlevel>0 is a GM account and GMlevel=0 is a Beta Tester account.
What the core does is specify for EVERY situation, where a privilege distinction is needed, a > or < or == ; it always states >SEC_PLAYER, or == SEC_PLAYER, or <SEC_GAMEMASTER and so on.
As I quoted from code before, Common.h is where you find the hierarchy or the AccountTypes. So the code knows that SEC_PLAYER is lower than SEC_MODERATOR, which il lower than SEC_GAMEMASTER and so on.
Just a hint for Devs: do you think this may cause problems in future when things get even more complicated, and maybe it is best to define 2 groups of AccountTypes, GM and non-GM, and then have sub-AccountTypes in these 2 groups? This way when implementing anything knew you don't care about the name or hierarchy of the AccountType, you just state if it matters whether it is GM or non-GM, and leave the hierarchy part for specific situations which require such precision.
I hope I was able to explain my proposition.
It is not a critic nor a complain, I wish I had the skills to explain it in proper technical terms or even better submit a patch myself as reference. :unsure:
Just a thought.