I have a couple of theories on how to combat functionality provided by trainers or other cheat methods. I have not put these into practice, but I think it might be worth discussing:
First, why not run checks to validate actions based on what is allowed instead of what isn't?
This would eliminate a lot more loopholes being found and exploited.
Like, I saw a recent post about invalid characters in names ... Maybe you should only have a set of allowed characters instead, that way some forgotten character from another character set or even a custom character can't be used.
My second theory is a little more complex. The game applies properties to players based on what happens when playing. Unfortunately we can't change the fact that hacks will trick this procedure, but we can use a different method. Make the server mandate your own effects to different gameplay actions and you will have more control.
This would require that the server apply different results manually and use separate sets of values instead of relying on default game properties stored in LU classes (players, vehicles, etc.)
Let me give an example:
Player 1 shoots Player 2 with a pistol, but Player 2 has god mode on. Obviously he won't take damage by default, right? Well, why not have the server decrement his health manually, and set an array value to the new health amount. If the server figures out that his health doesn't match the value that was set in the array, then you could warn the player that they need to turn off the hacks. If this checks keeps coming back wrong, automatically take action (kick or something).
This could be applied to a lot of other things, too. Just remember that the server doesn't distinguish the fact that a certain event just fired before another, so you need to explicitly create the check yourself via scripts.