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:
174
scripts/zm/replaced/_globallogic_ui.gsc
Normal file
174
scripts/zm/replaced/_globallogic_ui.gsc
Normal 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";
|
||||
}
|
||||
}
|
||||
}
|
@ -907,11 +907,6 @@ getfreespawnpoint( spawnpoints, player )
|
||||
}
|
||||
}
|
||||
|
||||
if(!is_true(self.team_set))
|
||||
{
|
||||
self waittill("team_set");
|
||||
}
|
||||
|
||||
if ( isdefined( player ) && isdefined( player.team ) )
|
||||
{
|
||||
i = 0;
|
||||
@ -965,7 +960,7 @@ getfreespawnpoint( spawnpoints, player )
|
||||
|
||||
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;
|
||||
break;
|
||||
|
@ -200,3 +200,216 @@ hide_gump_loading_for_hotjoiners()
|
||||
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 ]]();
|
||||
}
|
@ -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::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::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\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._powerup_grab_check = ::powerup_can_player_grab;
|
||||
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.is_respawn_gamemode_func = ::is_respawn_gamemode;
|
||||
@ -95,60 +97,11 @@ init()
|
||||
level thread remove_round_number();
|
||||
level thread unlimited_zombies();
|
||||
level thread unlimited_powerups();
|
||||
level thread save_teams_on_intermission();
|
||||
level thread all_voice_on_intermission();
|
||||
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()
|
||||
{
|
||||
level.grief_gamemode_hud = newHudElem();
|
||||
@ -350,8 +303,16 @@ set_grief_vars()
|
||||
{
|
||||
setDvar("ui_gametype_pro", 0);
|
||||
}
|
||||
|
||||
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.zombie_powerups["meat_stink"].solo = 1;
|
||||
level.zombie_powerups["meat_stink"].func_should_drop_with_regular_powerups = ::func_should_drop_meat;
|
||||
@ -719,7 +680,6 @@ player_spawn_override()
|
||||
|
||||
grief_onplayerconnect()
|
||||
{
|
||||
self set_team();
|
||||
self thread on_player_spawned();
|
||||
self thread on_player_spectate();
|
||||
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()
|
||||
{
|
||||
level waittill("intermission");
|
||||
|
Reference in New Issue
Block a user