1
0
mirror of https://github.com/JezuzLizard/BO2-Reimagined.git synced 2025-07-08 04:48:13 -05:00

Encounter: add team change option

This commit is contained in:
Jbleezy
2023-04-22 17:38:04 -07:00
parent ee249b2268
commit 480bde9619
4 changed files with 422 additions and 57 deletions

View File

@ -0,0 +1,174 @@
#include maps\mp\_utility;
#include maps\mp\gametypes_zm\_hud_util;
#include maps\mp\gametypes_zm\_globallogic;
#include maps\mp\gametypes_zm\_spectating;
#include maps\mp\gametypes_zm\_globallogic_player;
#include maps\mp\gametypes_zm\_globallogic_ui;
menuautoassign( comingfrommenu )
{
teamkeys = getarraykeys( level.teams );
assignment = teamkeys[randomint( teamkeys.size )];
self closemenus();
if ( isdefined( level.forceallallies ) && level.forceallallies )
assignment = "allies";
else if ( level.teambased )
{
if ( getdvarint( "party_autoteams" ) == 1 )
{
if ( level.allow_teamchange == "1" && ( self.hasspawned || comingfrommenu ) )
assignment = "";
else
{
team = getassignedteam( self );
switch ( team )
{
case 1:
assignment = teamkeys[1];
break;
case 2:
assignment = teamkeys[0];
break;
case 3:
assignment = teamkeys[2];
break;
case 4:
if ( !isdefined( level.forceautoassign ) || !level.forceautoassign )
{
self setclientscriptmainmenu( game["menu_class"] );
return;
}
default:
assignment = "";
if ( isdefined( level.teams[team] ) )
assignment = team;
else if ( team == "spectator" && !level.forceautoassign )
{
self setclientscriptmainmenu( game["menu_class"] );
return;
}
}
}
}
if ( assignment == "" || getdvarint( "party_autoteams" ) == 0 )
{
if ( sessionmodeiszombiesgame() )
{
if (level.allow_teamchange)
{
if (assignment == "")
{
guids = strTok(getDvar("team_axis"), " ");
foreach (guid in guids)
{
if (self getguid() == int(guid))
{
assignment = "axis";
break;
}
}
}
if (assignment == "")
{
guids = strTok(getDvar("team_allies"), " ");
foreach (guid in guids)
{
if (self getguid() == int(guid))
{
assignment = "allies";
break;
}
}
}
}
if (assignment == "")
{
assignment = get_lowest_team();
}
}
}
if ( assignment == self.pers["team"] && ( self.sessionstate == "playing" || self.sessionstate == "dead" ) )
{
self beginclasschoice();
return;
}
}
else if ( getdvarint( "party_autoteams" ) == 1 )
{
if ( level.allow_teamchange != "1" || !self.hasspawned && !comingfrommenu )
{
team = getassignedteam( self );
if ( isdefined( level.teams[team] ) )
assignment = team;
else if ( team == "spectator" && !level.forceautoassign )
{
self setclientscriptmainmenu( game["menu_class"] );
return;
}
}
}
self.pers["team"] = assignment;
self.team = assignment;
self.pers["class"] = undefined;
self.class = undefined;
self.pers["weapon"] = undefined;
self.pers["savedmodel"] = undefined;
self updateobjectivetext();
if ( level.teambased )
self.sessionteam = assignment;
else
{
self.sessionteam = "none";
self.ffateam = assignment;
}
self.joined_team = true;
self notify( "joined_team" );
level notify( "joined_team" );
self notify( "end_respawn" );
self beginclasschoice();
self setclientscriptmainmenu( game["menu_class"] );
}
get_lowest_team()
{
teamplayers = [];
teamplayers["axis"] = countplayers("axis");
teamplayers["allies"] = countplayers("allies");
// don't count self
teamplayers[self.team]--;
if ( teamplayers["allies"] == teamplayers["axis"] )
{
if ( randomint( 100 ) >= 50 )
{
return "axis";
}
else
{
return "allies";
}
}
else
{
if ( teamplayers["allies"] > teamplayers["axis"] )
{
return "axis";
}
else
{
return "allies";
}
}
}

View File

@ -907,11 +907,6 @@ getfreespawnpoint( spawnpoints, player )
} }
} }
if(!is_true(self.team_set))
{
self waittill("team_set");
}
if ( isdefined( player ) && isdefined( player.team ) ) if ( isdefined( player ) && isdefined( player.team ) )
{ {
i = 0; i = 0;
@ -965,7 +960,7 @@ getfreespawnpoint( spawnpoints, player )
foreach(player in players) foreach(player in players)
{ {
if(player != self && isDefined(player.team_set) && player.team == self.team && player.playernum == num) if(is_true(player.joined_team) && player != self && player.team == self.team && player.playernum == num)
{ {
valid_num = false; valid_num = false;
break; break;

View File

@ -199,4 +199,217 @@ hide_gump_loading_for_hotjoiners()
self.health = 100; self.health = 100;
self thread [[ level.custom_intermission ]](); self thread [[ level.custom_intermission ]]();
} }
}
menu_onmenuresponse()
{
self endon( "disconnect" );
for (;;)
{
self waittill( "menuresponse", menu, response );
if ( response == "back" )
{
self closemenu();
self closeingamemenu();
if ( level.console )
{
if ( menu == game["menu_changeclass"] || menu == game["menu_changeclass_offline"] || menu == game["menu_team"] || menu == game["menu_controls"] )
{
if ( self.pers["team"] == "allies" )
self openmenu( game["menu_class"] );
if ( self.pers["team"] == "axis" )
self openmenu( game["menu_class"] );
}
}
continue;
}
if ( menu == game["menu_team"] )
{
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"] ) );
continue;
}
if ( response == "changeclass_marines" )
{
self closemenu();
self closeingamemenu();
self openmenu( game["menu_changeclass_allies"] );
continue;
}
if ( response == "changeclass_opfor" )
{
self closemenu();
self closeingamemenu();
self openmenu( game["menu_changeclass_axis"] );
continue;
}
if ( response == "changeclass_wager" )
{
self closemenu();
self closeingamemenu();
self openmenu( game["menu_changeclass_wager"] );
continue;
}
if ( response == "changeclass_custom" )
{
self closemenu();
self closeingamemenu();
self openmenu( game["menu_changeclass_custom"] );
continue;
}
if ( response == "changeclass_barebones" )
{
self closemenu();
self closeingamemenu();
self openmenu( game["menu_changeclass_barebones"] );
continue;
}
if ( response == "changeclass_marines_splitscreen" )
self openmenu( "changeclass_marines_splitscreen" );
if ( response == "changeclass_opfor_splitscreen" )
self openmenu( "changeclass_opfor_splitscreen" );
if ( response == "endgame" )
{
if ( self issplitscreen() )
{
level.skipvote = 1;
if ( !( isdefined( level.gameended ) && level.gameended ) )
{
self maps\mp\zombies\_zm_laststand::add_weighted_down();
self maps\mp\zombies\_zm_stats::increment_client_stat( "deaths" );
self maps\mp\zombies\_zm_stats::increment_player_stat( "deaths" );
self maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_jugg_player_death_stat();
level.host_ended_game = 1;
maps\mp\zombies\_zm_game_module::freeze_players( 1 );
level notify( "end_game" );
}
}
continue;
}
if ( response == "restart_level_zm" )
{
self maps\mp\zombies\_zm_laststand::add_weighted_down();
self maps\mp\zombies\_zm_stats::increment_client_stat( "deaths" );
self maps\mp\zombies\_zm_stats::increment_player_stat( "deaths" );
self maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_jugg_player_death_stat();
missionfailed();
}
if ( response == "killserverpc" )
{
level thread maps\mp\gametypes_zm\_globallogic::killserverpc();
continue;
}
if ( response == "endround" )
{
if ( !( isdefined( level.gameended ) && level.gameended ) )
{
self maps\mp\gametypes_zm\_globallogic::gamehistoryplayerquit();
self maps\mp\zombies\_zm_laststand::add_weighted_down();
self closemenu();
self closeingamemenu();
level.host_ended_game = 1;
maps\mp\zombies\_zm_game_module::freeze_players( 1 );
level notify( "end_game" );
}
else
{
self closemenu();
self closeingamemenu();
self iprintln( &"MP_HOST_ENDGAME_RESPONSE" );
}
continue;
}
if ( menu == game["menu_team"] && level.allow_teamchange == "1" )
{
switch ( response )
{
case "allies":
self [[ level.allies ]]();
break;
case "axis":
self [[ level.teammenu ]]( response );
break;
case "autoassign":
self [[ level.autoassign ]]( 1 );
break;
case "spectator":
self [[ level.spectator ]]();
break;
}
continue;
}
if ( menu == game["menu_changeclass"] || menu == game["menu_changeclass_offline"] || menu == game["menu_changeclass_wager"] || menu == game["menu_changeclass_custom"] || menu == game["menu_changeclass_barebones"] )
{
self closemenu();
self closeingamemenu();
if ( level.rankedmatch && issubstr( response, "custom" ) )
{
}
self.selectedclass = 1;
self [[ level.class ]]( response );
}
}
}
set_team(team)
{
if ( team == "axis" )
{
self.team = "axis";
self.sessionteam = "axis";
self.pers["team"] = "axis";
self._encounters_team = "A";
self.characterindex = 0;
}
else
{
self.team = "allies";
self.sessionteam = "allies";
self.pers["team"] = "allies";
self._encounters_team = "B";
self.characterindex = 1;
}
self [[ level.givecustomcharacters ]]();
} }

View File

@ -24,6 +24,7 @@ main()
replaceFunc(maps\mp\gametypes_zm\_zm_gametype::onspawnplayer, scripts\zm\replaced\_zm_gametype::onspawnplayer); replaceFunc(maps\mp\gametypes_zm\_zm_gametype::onspawnplayer, scripts\zm\replaced\_zm_gametype::onspawnplayer);
replaceFunc(maps\mp\gametypes_zm\_zm_gametype::onplayerspawned, scripts\zm\replaced\_zm_gametype::onplayerspawned); replaceFunc(maps\mp\gametypes_zm\_zm_gametype::onplayerspawned, scripts\zm\replaced\_zm_gametype::onplayerspawned);
replaceFunc(maps\mp\gametypes_zm\_zm_gametype::hide_gump_loading_for_hotjoiners, scripts\zm\replaced\_zm_gametype::hide_gump_loading_for_hotjoiners); replaceFunc(maps\mp\gametypes_zm\_zm_gametype::hide_gump_loading_for_hotjoiners, scripts\zm\replaced\_zm_gametype::hide_gump_loading_for_hotjoiners);
replaceFunc(maps\mp\gametypes_zm\_zm_gametype::menu_onmenuresponse, scripts\zm\replaced\_zm_gametype::menu_onmenuresponse);
replaceFunc(maps\mp\gametypes_zm\zgrief::meat_stink, scripts\zm\replaced\zgrief::meat_stink); replaceFunc(maps\mp\gametypes_zm\zgrief::meat_stink, scripts\zm\replaced\zgrief::meat_stink);
replaceFunc(maps\mp\gametypes_zm\zmeat::item_meat_on_spawn_retrieve_trigger, scripts\zm\replaced\zmeat::item_meat_on_spawn_retrieve_trigger); replaceFunc(maps\mp\gametypes_zm\zmeat::item_meat_on_spawn_retrieve_trigger, scripts\zm\replaced\zmeat::item_meat_on_spawn_retrieve_trigger);
} }
@ -82,6 +83,7 @@ init()
level.can_revive_game_module = ::can_revive; level.can_revive_game_module = ::can_revive;
level._powerup_grab_check = ::powerup_can_player_grab; level._powerup_grab_check = ::powerup_can_player_grab;
level.meat_bounce_override = scripts\zm\replaced\zgrief::meat_bounce_override; level.meat_bounce_override = scripts\zm\replaced\zgrief::meat_bounce_override;
level.autoassign = scripts\zm\replaced\_globallogic_ui::menuautoassign;
level.custom_spectate_permissions = undefined; level.custom_spectate_permissions = undefined;
level.is_respawn_gamemode_func = ::is_respawn_gamemode; level.is_respawn_gamemode_func = ::is_respawn_gamemode;
@ -95,60 +97,11 @@ init()
level thread remove_round_number(); level thread remove_round_number();
level thread unlimited_zombies(); level thread unlimited_zombies();
level thread unlimited_powerups(); level thread unlimited_powerups();
level thread save_teams_on_intermission();
level thread all_voice_on_intermission(); level thread all_voice_on_intermission();
level thread spawn_bots(); level thread spawn_bots();
} }
set_team()
{
self.team_set = true;
self notify("team_set");
teamplayers = [];
teamplayers["axis"] = countplayers("axis");
teamplayers["allies"] = countplayers("allies");
// don't count self
teamplayers[self.team]--;
if(teamplayers["allies"] == teamplayers["axis"])
{
if(cointoss())
{
self.team = "axis";
self.sessionteam = "axis";
self.pers["team"] = "axis";
self._encounters_team = "A";
}
else
{
self.team = "allies";
self.sessionteam = "allies";
self.pers["team"] = "allies";
self._encounters_team = "B";
}
}
else
{
if(teamplayers["allies"] > teamplayers["axis"])
{
self.team = "axis";
self.sessionteam = "axis";
self.pers["team"] = "axis";
self._encounters_team = "A";
}
else
{
self.team = "allies";
self.sessionteam = "allies";
self.pers["team"] = "allies";
self._encounters_team = "B";
}
}
self [[ level.givecustomcharacters ]]();
}
grief_gamemode_hud() grief_gamemode_hud()
{ {
level.grief_gamemode_hud = newHudElem(); level.grief_gamemode_hud = newHudElem();
@ -350,8 +303,16 @@ set_grief_vars()
{ {
setDvar("ui_gametype_pro", 0); setDvar("ui_gametype_pro", 0);
} }
level.scr_zm_ui_gametype_pro = getDvarInt("ui_gametype_pro"); level.scr_zm_ui_gametype_pro = getDvarInt("ui_gametype_pro");
if(getDvar("ui_gametype_team_change") == "")
{
setDvar("ui_gametype_team_change", 0);
}
level.allow_teamchange = getDvarInt("ui_gametype_team_change");
level.noroundnumber = 1; level.noroundnumber = 1;
level.zombie_powerups["meat_stink"].solo = 1; level.zombie_powerups["meat_stink"].solo = 1;
level.zombie_powerups["meat_stink"].func_should_drop_with_regular_powerups = ::func_should_drop_meat; level.zombie_powerups["meat_stink"].func_should_drop_with_regular_powerups = ::func_should_drop_meat;
@ -719,7 +680,6 @@ player_spawn_override()
grief_onplayerconnect() grief_onplayerconnect()
{ {
self set_team();
self thread on_player_spawned(); self thread on_player_spawned();
self thread on_player_spectate(); self thread on_player_spectate();
self thread on_player_downed(); self thread on_player_downed();
@ -2588,6 +2548,29 @@ remove_round_number()
} }
} }
save_teams_on_intermission()
{
level waittill("intermission");
text = "";
players = get_players("axis");
foreach (player in players)
{
text += player getguid() + " ";
}
setDvar("team_axis", text);
text = "";
players = get_players("allies");
foreach (player in players)
{
text += player getguid() + " ";
}
setDvar("team_allies", text);
}
all_voice_on_intermission() all_voice_on_intermission()
{ {
level waittill("intermission"); level waittill("intermission");