diff --git a/scripts/zm/replaced/_globallogic_ui.gsc b/scripts/zm/replaced/_globallogic_ui.gsc index 268b5dcf..ad794e0f 100644 --- a/scripts/zm/replaced/_globallogic_ui.gsc +++ b/scripts/zm/replaced/_globallogic_ui.gsc @@ -129,7 +129,6 @@ menuautoassign( comingfrommenu ) self.ffateam = assignment; } - self.joined_team = true; self notify( "joined_team" ); level notify( "joined_team" ); self notify( "end_respawn" ); diff --git a/scripts/zm/replaced/_zm.gsc b/scripts/zm/replaced/_zm.gsc index ee927618..b42356e9 100644 --- a/scripts/zm/replaced/_zm.gsc +++ b/scripts/zm/replaced/_zm.gsc @@ -565,7 +565,7 @@ fade_out_intro_screen_zm( hold_black_time, fade_out_time, destroyed_afterwards ) if ( isDedicated() && isDefined( level.pregame_minplayers ) ) { pregame_hud = createServerFontString( "objective", 1.5 ); - pregame_hud setPoint( "CENTER", "CENTER", 0, -40 ); + pregame_hud setPoint( "CENTER", "CENTER", 0, -100 ); pregame_hud.foreground = 1; pregame_hud.color = ( 1, 1, 1 ); pregame_hud.hidewheninmenu = true; @@ -573,6 +573,12 @@ fade_out_intro_screen_zm( hold_black_time, fade_out_time, destroyed_afterwards ) num_players = get_number_of_valid_players(); while ( num_players < level.pregame_minplayers ) { + players = get_players(); + for ( i = 0; i < players.size; i++ ) + { + players[i] freezecontrols( 1 ); + } + num_waiting_for = level.pregame_minplayers - num_players; if (level.intermission) @@ -593,12 +599,60 @@ fade_out_intro_screen_zm( hold_black_time, fade_out_time, destroyed_afterwards ) num_players = get_number_of_valid_players(); } + if ( level.allow_teamchange ) + { + ready_up_hud = createServerFontString( "objective", 1.5 ); + ready_up_hud setPoint( "CENTER", "CENTER", 0, -120 ); + ready_up_hud.foreground = 1; + ready_up_hud.color = ( 1, 1, 1 ); + ready_up_hud.hidewheninmenu = true; + ready_up_hud setText("PRESS ^3[{+gostand}]^7 OR ^3[{+activate}]^7 TO READY UP"); + + num_ready = 0; + players = get_players(); + while ( num_ready < players.size ) + { + for ( i = 0; i < players.size; i++ ) + { + players[i] freezecontrols( 1 ); + + if ( players[i] jumpbuttonpressed() || players[i] usebuttonpressed() ) + { + players[i].ready = 1; + } + + if ( is_true(players[i].ready) ) + { + num_ready++; + players[i].statusicon = "menu_mp_killstreak_select"; + } + else + { + players[i].statusicon = "menu_mp_contract_expired"; + } + } + + num_waiting_for = players.size - num_ready; + + pregame_hud setText("WAITING FOR " + num_waiting_for + " PLAYERS TO BE READY [" + num_ready + "/" + players.size + "]"); + + wait 0.05; + + num_ready = 0; + players = get_players(); + } + + ready_up_hud destroy(); + } + pregame_hud destroy(); } players = get_players(); for ( i = 0; i < players.size; i++ ) { + players[i].statusicon = ""; + if ( !( isdefined( level.host_ended_game ) && level.host_ended_game ) ) { if ( isdefined( level.player_movement_suppressed ) ) @@ -1055,7 +1109,7 @@ getfreespawnpoint( spawnpoints, player ) if ( !isdefined( self.playernum ) ) { num = 0; - players = get_players(); + players = get_players(self.team); for(num = 0; num < 4; num++) { @@ -1063,7 +1117,7 @@ getfreespawnpoint( spawnpoints, player ) foreach(player in players) { - if(is_true(player.joined_team) && player != self && player.team == self.team && player.playernum == num) + if(player != self && isdefined(player.playernum) && player.playernum == num) { valid_num = false; break; diff --git a/scripts/zm/replaced/_zm_gametype.gsc b/scripts/zm/replaced/_zm_gametype.gsc index b1452a8c..0e3ebcec 100644 --- a/scripts/zm/replaced/_zm_gametype.gsc +++ b/scripts/zm/replaced/_zm_gametype.gsc @@ -233,21 +233,7 @@ menu_onmenuresponse() { self closemenu(); self closeingamemenu(); - - if ( !level.allow_teamchange ) - { - teamplayers = countplayers( self.pers["team"] ); - otherteamplayers = countplayers( getotherteam( self.pers["team"] ) ); - - if ( teamplayers - 1 <= otherteamplayers ) - { - self iprintln( "Can only change teams if unbalanced." ); - continue; - } - } - - set_team( getotherteam( self.pers["team"] ) ); - + self thread do_team_change(); continue; } @@ -386,6 +372,68 @@ menu_onmenuresponse() } } +do_team_change() +{ + if ( !level.allow_teamchange ) + { + teamplayers = countplayers( self.pers["team"] ); + otherteamplayers = countplayers( getotherteam( self.pers["team"] ) ); + + if ( teamplayers - 1 <= otherteamplayers ) + { + self iprintln( "Can only change teams if unbalanced." ); + return; + } + } + + self.playernum = undefined; + + level notify( "team_change", self.pers["team"] ); + + num = 0; + valid_num = false; + other_team = getotherteam(self.pers["team"]); + players = get_players(other_team); + + for(num = 0; num < 4; num++) + { + valid_num = true; + + foreach(player in players) + { + if(isdefined(player.playernum) && player.playernum == num) + { + valid_num = false; + break; + } + } + + if(valid_num) + { + break; + } + } + + if (!valid_num) + { + self iprintln( "Waiting for other player to change teams." ); + + level waittill( "team_change", team ); + + if (team == self.pers["team"]) + { + return; + } + } + + set_team( getotherteam( self.pers["team"] ) ); + + if ( !flag( "initial_blackscreen_passed" ) ) + { + self [[ level.spawnplayer ]](); + } +} + set_team(team) { if ( team == "axis" ) diff --git a/scripts/zm/zgrief/zgrief_reimagined.gsc b/scripts/zm/zgrief/zgrief_reimagined.gsc index d3bff9d0..5b589d8d 100644 --- a/scripts/zm/zgrief/zgrief_reimagined.gsc +++ b/scripts/zm/zgrief/zgrief_reimagined.gsc @@ -54,6 +54,9 @@ init() level.player_spawn_sound = "zmb_spawn_powerup"; } + precacheStatusIcon( "menu_mp_killstreak_select" ); + precacheStatusIcon( "menu_mp_contract_expired" ); + setDvar("ui_scorelimit", 1); setteamscore("axis", 0);