diff --git a/scripts/zm/main/_zm_reimagined_zgrief.gsc b/scripts/zm/main/_zm_reimagined_zgrief.gsc index 28220749..c9adeced 100644 --- a/scripts/zm/main/_zm_reimagined_zgrief.gsc +++ b/scripts/zm/main/_zm_reimagined_zgrief.gsc @@ -11,6 +11,7 @@ main() return; } + replaceFunc(maps/mp/zombies/_zm::onallplayersready, ::onallplayersready); replaceFunc(maps/mp/zombies/_zm_audio_announcer::playleaderdialogonplayer, ::playleaderdialogonplayer); replaceFunc(maps/mp/zombies/_zm_game_module::wait_for_team_death_and_round_end, ::wait_for_team_death_and_round_end); replaceFunc(maps/mp/zombies/_zm_blockers::handle_post_board_repair_rewards, ::handle_post_board_repair_rewards); @@ -160,6 +161,7 @@ set_grief_vars() level.grief_score["B"] = 0; level.game_mode_shellshock_time = 0.75; level.game_mode_griefed_time = 2.5; + level.crash_delay = 20; flag_wait( "start_zombie_round_logic" ); // needs a wait @@ -1105,6 +1107,50 @@ unlimited_zombies() } } +onallplayersready() +{ + while ( getPlayers().size == 0 ) + { + wait 0.1; + } + game[ "state" ] = "playing"; + wait_for_all_players_to_connect( level.crash_delay ); + setinitialplayersconnected(); + flag_set( "initial_players_connected" ); + while ( !aretexturesloaded() ) + { + wait 0.05; + } + thread maps/mp/zombies/_zm::start_zombie_logic_in_x_sec( 3 ); + maps/mp/zombies/_zm::fade_out_intro_screen_zm( 5, 1.5, 1 ); +} + +wait_for_all_players_to_connect( max_wait ) +{ + timeout = int( max_wait * 10 ); + cur_time = 0; + player_count_actual = 0; + while ( getnumconnectedplayers() < getnumexpectedplayers() || player_count_actual != getnumexpectedplayers() ) + { + players = getPlayers(); + player_count_actual = 0; + for ( i = 0; i < players.size; i++ ) + { + players[ i ] freezecontrols( 1 ); + if ( players[ i ].sessionstate == "playing" ) + { + player_count_actual++; + } + } + wait 0.1; + cur_time++; + if ( cur_time >= timeout ) + { + return; + } + } +} + playleaderdialogonplayer( dialog, team, waittime ) { self endon( "disconnect" );