Sanity Checks for NPCs Running on Client?

Making a game with as many zombies as possible and diving deep into optimizations. After some initial test of having a single part to represent the NPC on the server and CFraming it every .25 seconds, this slows down pretty heavily at even 100 entities. I’m not even using pathfinding, just a simple CFrame move.

I want to explore having NPCs run on the locally instead, as he have seen in some examples such as this: Humanoid Optimisation and 500 NPCs

The above example from @ForeverHD runs the NPCs completely on the client with good results. This is CLEARLY the best way to render a lot of NPCs.

However, what can we do in terms of sanity checks to make this actually work in a live game? If we simply allow the player full ability to do with NPCs as they please, they can cheat, EASILY.

Has anyone done this before with some sort of sanity check to verify killing NPCs, being hit by them, etc? Looking for creative solutions.