My approach is not elegant but a reliable one(the example is for 6 zombies).
Place 6 Zombies labeld A-H on the map and edit their properties in this way:
Spawn at Start = No
Max at any Time = 1
Spawn when Dead = Yes
Spawn after Delay = Yes
Delay Random = anything from 5-30 seconds depending on map
Maximum Spawn = how many waves you want.
Then place a trigger zone that activates all 6 for the first time.
Every spawning place needs an excuse for zombies to reappear undetected - like a corner of complete darkness or a hole in the ceiling/floor.
The central area should have 3 entry paths for the zombies while 2 different zombie spawn points lead into a single area entry path each.
The zombies themselves need scripts that don't include plrcanbeseen and have a plrdstwithin=1000 so when they spawn, they immediately set march to the player (their path should be completely obstacle free)
So what happens now?
1. Player enters trigger zone and zombies start to spawn.
2. Whichever path the player takes (the way he entered should be blocked somehow)he will encounter zombies.
3. Whenever a zombie dies, the same one respawns. But since there is a random delay and each 2 zombies share a single entry path to the main area it's not always the same zombie appearing there first - and there is also no obvious correlation between kill and respawn.
4. Since they don't respawn indefinitely, the player can survive if the kills them fast enough.
What's good about this method?
- There is a fixed max number of zombies activated at any time.
- There is no script needed so there shouldn't be any errors
- During playtesting the odds can easily be altered.
- If the paths are build right, no zombie ever will get stuck.
What's bad with this method?
- If a player presses forward to a single path and kills the zombies which just spawned there, he would actually watch the respawns.
- If the player has enough time to think a little about it we will realize that there is a simple system behind the respawns
I used this method with a fantasy graveyard where the skeletons respawned at different crypt entrances to make the impression that they poured out of the crypts. Technically it worked perfectly but it was of course illogical that a skellie walks out of a crypt while the player can't open the door himself.
In case you find my grammar and spelling weird ---> native German speaker ^^