Just as title says I adapted a mod from hima_simple that pauses the game playing custom zombies. The problem with it was that the zombies still moved to your last Coords before stopping in place and zombies continued to spawn as well. useful for the start or end of the round but not in the middle. Mine pauses spawning, movement, allows 5 seconds of invuln when unpausing to reposition. This was very much vibe coded and hasn't been tested on bosses yet but I will report back!
How to Use
open chat by pressing 'T'
Type 'p' and press Enter.
How to install
C:\Users\13103\AppData\Local\Plutonium\storage\t6\scripts\zm
Or equivalent
Most likely will have to create ZM file
Add new notepad file in zm, copy code in, name it pause_mod.gsc. Save and play! LMK if anything is broken!
GSC CODE
#include maps\mp\gametypes_zm_hud_util;
#include maps\mp\gametypes_zm_hud_message;
init()
{
level.is_game_paused = false;
level.is_unpausing = false;
level thread watchchatpause();
}
watchchatpause()
{
level endon("end_game");
for(;;)
{
level waittill("say", message, player);
message = tolower(message);
// Pause Command
if (message == "p" && !level.is_game_paused && !level.is_unpausing)
{
level.is_game_paused = true;
// Backup total/active AI limits and throttle spawn cap to 0
if(isDefined(level.zombie_ai_limit) && level.zombie_ai_limit > 0)
{
level.old_ai_limit = level.zombie_ai_limit;
}
else
{
level.old_ai_limit = 24;
}
level.zombie_ai_limit = 0;
if(!isDefined(level.gamestate))
{
level.gamestate = createServerFontString("hudsmall", 3.0);
level.gamestate setPoint("CENTER", "TOP", 0, 190);
}
level.gamestate setText("Game Paused");
// Secure players
players = getplayers();
for(i = 0; i < players.size; i++)
{
players[i].godmode = true;
players[i].ignoreme = 1;
players[i] freezeControls(true);
players[i] iprintln("^1Game Paused");
}
// Freeze standard zombies AND special actors/bosses
freeze_all_enemies();
}
// Unpause Command
else if (message == "u" && level.is_game_paused && !level.is_unpausing)
{
level.is_unpausing = true;
// Unfreeze players immediately so they can move during countdown
players = getplayers();
for(i = 0; i < players.size; i++)
{
players[i] freezeControls(false);
players[i] iprintln("^2Resuming! Move into position...");
}
// Countdown loop
for(i = 5; i > 0; i--)
{
if(isDefined(level.gamestate))
{
level.gamestate setText("Resuming in: " + i);
}
players = getplayers();
for(p = 0; p < players.size; p++)
{
players[p] playlocalsound("zmb_admin_beep");
}
wait 1.0;
}
if(isDefined(level.gamestate))
{
level.gamestate destroy();
}
// Restore AI limits safely so the round manager continues spawning
if(isDefined(level.old_ai_limit))
{
level.zombie_ai_limit = level.old_ai_limit;
}
else
{
level.zombie_ai_limit = 24;
}
// Restore player protection status
players = getplayers();
for(i = 0; i < players.size; i++)
{
players[i].godmode = false;
players[i].ignoreme = 0;
players[i] iprintln("^2Enemies Resumed!");
}
// Unfreeze standard zombies AND special actors/bosses
unfreeze_all_enemies();
level notify("resume_zombies");
level.is_game_paused = false;
level.is_unpausing = false;
}
wait 0.05;
}
}
freeze_all_enemies()
{
enemies = get_all_enemies();
for(i = 0; i < enemies.size; i++)
{
if(isDefined(enemies[i]) && isAlive(enemies[i]))
{
enemies[i].anchor_origin = enemies[i].origin;
enemies[i].ignoreall = true;
enemies[i] setGoalPos(enemies[i].origin);
enemies[i] thread freeze_zombie_position();
}
}
}
unfreeze_all_enemies()
{
enemies = get_all_enemies();
for(i = 0; i < enemies.size; i++)
{
if(isDefined(enemies[i]) && isAlive(enemies[i]))
{
enemies[i].ignoreall = false;
}
}
}
get_all_enemies()
{
enemies = getaiarray();
actors = getentarray("actor", "classname");
if (isDefined(actors) && actors.size > 0)
{
for(i = 0; i < actors.size; i++)
{
enemies[enemies.size] = actors[i];
}
}
return enemies;
}
freeze_zombie_position()
{
self endon("death");
level endon("resume_zombies");
for(;;)
{
if(isDefined(self.anchor_origin))
{
self setorigin(self.anchor_origin);
self setGoalPos(self.anchor_origin);
}
wait 0.1;
}
}
Type 'u' to unpause.[pause_mod.gsc]