I was working on this months ago when I was working on lamapro but I never finished it because I abandoned my mod after a year and a half of work… however I went over the code today and finished it up so here you go.
re-randomize spawn times after x amount of people are killed in 4 seconds of the spawn shield being up.
all I ask is if you use it… give me credit for it 
g_match.c G_loadMatchGame
// derek add new spawn function to replace these lines
G_NewSpawn();
// Set version info for demoplayback compatibility
// trap_SetConfigstring(CS_OSPVERSION, va("%s", G_BASEVERSION)); // Add more tokens as needed
// Set up the random reinforcement seeds for both teams and send to clients
/* dwBlueOffset = rand() % MAX_REINFSEEDS;
dwRedOffset = rand() % MAX_REINFSEEDS;
strcpy(strReinfSeeds, va("%d %d", (dwBlueOffset << REINF_BLUEDELT) + (rand() % (1 << REINF_BLUEDELT)),
(dwRedOffset << REINF_REDDELT) + (rand() % (1 << REINF_REDDELT))));
for(i=0; i<MAX_REINFSEEDS; i++) {
aRandomValues[i] = (rand() % REINF_RANGE) * aReinfSeeds[i];
strcat(strReinfSeeds, va(" %d", aRandomValues[i]));
}
level.dwBlueReinfOffset = 1000 * aRandomValues[dwBlueOffset] / aReinfSeeds[dwBlueOffset];
level.dwRedReinfOffset = 1000 * aRandomValues[dwRedOffset] / aReinfSeeds[dwRedOffset];
trap_SetConfigstring(CS_REINFSEEDS, strReinfSeeds);
*/
g_combat.c player_die
G_LogKill( attacker, weap );
//derek add random spawn adjuster for spawnkilling
if (self->client->respawnTime >= (level.timeCurrent - self->client->ps.powerups[PW_INVULNERABLE] - 4000)){
kill++;
}else{
kill = 0;
}
if (d_randomautospawns.integer > 0 && kill >= d_randomautospawns.integer){
if (level.warmupTime <= 0 && g_gamestate.integer == GS_PLAYING){
G_NewTeamSpawn(self->client->sess.sessionTeam);
}
}
if( g_gamestate.integer == GS_PLAYING ) {
then just add 2 new functions NewSpawn and NewTeamSpawn along with this struct.
typedef struct {
int dwBlueOffset;
int dwRedOffset;
int aRandomValues[2][MAX_REINFSEEDS];
int dwBlueReinfOffset;
int dwRedReinfOffset;
} spawn_t;
spawn_t Teamspawn;
void G_NewSpawn(void)
{
unsigned int i, dwBlueOffset, dwRedOffset;
unsigned int aRandomValues[MAX_REINFSEEDS];
char strReinfSeeds[MAX_STRING_CHARS];
// Set up the random reinforcement seeds for both teams and send to clients
Teamspawn.dwBlueOffset = dwBlueOffset = rand() % MAX_REINFSEEDS;
Teamspawn.dwRedOffset = dwRedOffset = rand() % MAX_REINFSEEDS;
Teamspawn.dwBlueReinfOffset = (dwBlueOffset << REINF_BLUEDELT) + (rand() % (1 << REINF_BLUEDELT));
Teamspawn.dwRedReinfOffset = (dwRedOffset << REINF_REDDELT) + (rand() % (1 << REINF_REDDELT));
strcpy(strReinfSeeds, va("%d %d", Teamspawn.dwBlueReinfOffset, Teamspawn.dwRedReinfOffset));
for(i=0; i<MAX_REINFSEEDS; i++) {
Teamspawn.aRandomValues[0][i] = Teamspawn.aRandomValues[1][i] = aRandomValues[i] = (rand() % REINF_RANGE) * aReinfSeeds[i];
strcat(strReinfSeeds, va(" %d", aRandomValues[i]));
}
level.dwBlueReinfOffset = 1000 * aRandomValues[dwBlueOffset] / aReinfSeeds[dwBlueOffset];
level.dwRedReinfOffset = 1000 * aRandomValues[dwRedOffset] / aReinfSeeds[dwRedOffset];
trap_SetConfigstring(CS_REINFSEEDS, strReinfSeeds);
}
void G_NewTeamSpawn(int team)
{
unsigned int i, dwBlueOffset, dwRedOffset;
unsigned int aRandomValues[MAX_REINFSEEDS];
char strReinfSeeds[MAX_STRING_CHARS];
int red, blue;
if (team == TEAM_ALLIES){
// Set up the random reinforcement seeds for both teams and send to clients
Teamspawn.dwBlueOffset = dwBlueOffset = rand() % MAX_REINFSEEDS;
}else if (team == TEAM_AXIS){
Teamspawn.dwRedOffset = dwRedOffset = rand() % MAX_REINFSEEDS;
}
// derek dont allow use of same position in the array... will screw up the array
while (Teamspawn.dwBlueOffset == Teamspawn.dwRedOffset){
if (team == TEAM_ALLIES){
// Set up the random reinforcement seeds for both teams and send to clients
Teamspawn.dwBlueOffset = dwBlueOffset = rand() % MAX_REINFSEEDS;
}else if (team == TEAM_AXIS){
Teamspawn.dwRedOffset = dwRedOffset = rand() % MAX_REINFSEEDS;
}
}
if (team == TEAM_ALLIES){
Teamspawn.dwBlueReinfOffset = (dwBlueOffset << REINF_BLUEDELT) + (rand() % (1 << REINF_BLUEDELT));
}else if (team == TEAM_AXIS){
Teamspawn.dwRedReinfOffset = (dwRedOffset << REINF_REDDELT) + (rand() % (1 << REINF_REDDELT));
}
strcpy(strReinfSeeds, va("%d %d", Teamspawn.dwBlueReinfOffset, Teamspawn.dwRedReinfOffset));
for(i=0; i<MAX_REINFSEEDS; i++) {
aRandomValues[i] = (rand() % REINF_RANGE) * aReinfSeeds[i];
if (team == TEAM_AXIS){
if(i == Teamspawn.dwBlueOffset){
aRandomValues[i] = Teamspawn.aRandomValues[1][Teamspawn.dwBlueOffset];
}else{
Teamspawn.aRandomValues[0][i] = aRandomValues[i];
}
}else if (team == TEAM_ALLIES){
if(i == Teamspawn.dwRedOffset){
aRandomValues[i]= Teamspawn.aRandomValues[0][Teamspawn.dwRedOffset];
}else{
Teamspawn.aRandomValues[1][i] = aRandomValues[i];
}
}
strcat(strReinfSeeds, va(" %d", aRandomValues[i]));
}
if (team == TEAM_ALLIES){
level.dwBlueReinfOffset = 1000 * aRandomValues[dwBlueOffset] / aReinfSeeds[dwBlueOffset];
}else if (team == TEAM_AXIS){
level.dwRedReinfOffset = 1000 * aRandomValues[dwRedOffset] / aReinfSeeds[dwRedOffset];
}
trap_SetConfigstring(CS_REINFSEEDS, strReinfSeeds);
}