#include maps\mp\_utility; #include common_scripts\utility; #include maps\mp\zombies\_zm_utility; check_quickrevive_for_hotjoin(disconnecting_player) { // always use coop quick revive } 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; if ( getPlayers().size >= getDvarInt( "zombies_minplayers" ) ) { cur_time++; } if ( cur_time >= timeout ) { return; } } } end_game() { level waittill( "end_game" ); maps/mp/zombies/_zm::check_end_game_intermission_delay(); clientnotify( "zesn" ); if ( isDefined( level.sndgameovermusicoverride ) ) { level thread maps/mp/zombies/_zm_audio::change_zombie_music( level.sndgameovermusicoverride ); } else { level thread maps/mp/zombies/_zm_audio::change_zombie_music( "game_over" ); } players = get_players(); for ( i = 0; i < players.size; i++ ) { setclientsysstate( "lsm", "0", players[ i ] ); } for ( i = 0; i < players.size; i++ ) { if ( players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) { players[ i ] recordplayerdeathzombies(); players[ i ] maps/mp/zombies/_zm_stats::increment_player_stat( "deaths" ); players[ i ] maps/mp/zombies/_zm_stats::increment_client_stat( "deaths" ); players[ i ] maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_jugg_player_death_stat(); } if ( isdefined( players[ i ].revivetexthud) ) { players[ i ].revivetexthud destroy(); } } stopallrumbles(); level.intermission = 1; level.zombie_vars[ "zombie_powerup_insta_kill_time" ] = 0; level.zombie_vars[ "zombie_powerup_fire_sale_time" ] = 0; level.zombie_vars[ "zombie_powerup_point_doubler_time" ] = 0; wait 0.1; game_over = []; survived = []; players = get_players(); if ( !isDefined( level._supress_survived_screen ) ) { for ( i = 0; i < players.size; i++ ) { if ( isDefined( level.custom_game_over_hud_elem ) ) { game_over[ i ] = [[ level.custom_game_over_hud_elem ]]( players[ i ] ); } else { game_over[ i ] = newclienthudelem( players[ i ] ); game_over[ i ].alignx = "center"; game_over[ i ].aligny = "middle"; game_over[ i ].horzalign = "center"; game_over[ i ].vertalign = "middle"; game_over[ i ].y -= 130; game_over[ i ].foreground = 1; game_over[ i ].fontscale = 3; game_over[ i ].alpha = 0; game_over[ i ].color = ( 1, 1, 1 ); game_over[ i ].hidewheninmenu = 1; game_over[ i ] settext( &"ZOMBIE_GAME_OVER" ); game_over[ i ] fadeovertime( 1 ); game_over[ i ].alpha = 1; } survived[ i ] = newclienthudelem( players[ i ] ); survived[ i ].alignx = "center"; survived[ i ].aligny = "middle"; survived[ i ].horzalign = "center"; survived[ i ].vertalign = "middle"; survived[ i ].y -= 100; survived[ i ].foreground = 1; survived[ i ].fontscale = 2; survived[ i ].alpha = 0; survived[ i ].color = ( 1, 1, 1 ); survived[ i ].hidewheninmenu = 1; if ( level.round_number < 2 ) { if ( level.script == "zombie_moon" ) { if ( !isDefined( level.left_nomans_land ) ) { nomanslandtime = level.nml_best_time; player_survival_time = int( nomanslandtime / 1000 ); player_survival_time_in_mins = maps/mp/zombies/_zm::to_mins( player_survival_time ); survived[ i ] settext( &"ZOMBIE_SURVIVED_NOMANS", player_survival_time_in_mins ); } else if ( level.left_nomans_land == 2 ) { survived[ i ] settext( &"ZOMBIE_SURVIVED_ROUND" ); } } else { survived[ i ] settext( &"ZOMBIE_SURVIVED_ROUND" ); } } else { survived[ i ] settext( &"ZOMBIE_SURVIVED_ROUNDS", level.round_number ); } survived[ i ] fadeovertime( 1 ); survived[ i ].alpha = 1; } } if ( isDefined( level.custom_end_screen ) ) { level [[ level.custom_end_screen ]](); } for ( i = 0; i < players.size; i++ ) { players[ i ] setclientammocounterhide( 1 ); players[ i ] setclientminiscoreboardhide( 1 ); } uploadstats(); maps/mp/zombies/_zm_stats::update_players_stats_at_match_end( players ); maps/mp/zombies/_zm_stats::update_global_counters_on_match_end(); wait 1; wait 3.95; players = get_players(); foreach ( player in players ) { if ( isdefined( player.sessionstate ) && player.sessionstate == "spectator" ) { player.sessionstate = "playing"; } } wait 0.05; players = get_players(); if ( !isDefined( level._supress_survived_screen ) ) { for(i = 0; i < players.size; i++) { survived[ i ] destroy(); game_over[ i ] destroy(); } } for ( i = 0; i < players.size; i++ ) { if ( isDefined( players[ i ].survived_hud ) ) { players[ i ].survived_hud destroy(); } if ( isDefined( players[ i ].game_over_hud ) ) { players[ i ].game_over_hud destroy(); } } maps/mp/zombies/_zm::intermission(); wait level.zombie_vars[ "zombie_intermission_time" ]; level notify( "stop_intermission" ); array_thread( get_players(), maps/mp/zombies/_zm::player_exit_level ); bbprint( "zombie_epilogs", "rounds %d", level.round_number ); wait 1.5; players = get_players(); for ( i = 0; i < players.size; i++ ) { players[ i ] cameraactivate( 0 ); } exitlevel( 0 ); wait 666; }