1 #using scripts\shared\array_shared;
2 #using scripts\shared\hud_util_shared;
3 #using scripts\shared\callbacks_shared;
4 #using scripts\shared\util_shared;
6 #insert scripts\shared\shared.gsh;
8 #using scripts\mp\gametypes\_globallogic;
9 #using scripts\mp\gametypes\_globallogic_player;
10 #using scripts\mp\gametypes\_loadout;
11 #using scripts\mp\gametypes\_spectating;
13 #using scripts\mp\_util;
14 #using scripts\mp\bots\_bot;
15 #using scripts\mp\killstreaks\_killstreaks;
16 #using scripts\mp\teams\_teams;
18 #precache( "string", "MP_HALFTIME" );
19 #precache( "string", "MP_OVERTIME" );
20 #precache( "string", "MP_ROUNDEND" );
21 #precache( "string", "MP_INTERMISSION" );
22 #precache( "string", "MP_SWITCHING_SIDES_CAPS" );
23 #precache( "string", "MP_FRIENDLY_FIRE_WILL_NOT" );
24 #precache( "string", "MP_RAMPAGE" );
25 #precache( "string", "MP_ENDED_GAME" );
26 #precache( "string", "MP_HOST_ENDED_GAME" );
28 #precache( "eventstring", "medal_received" );
29 #precache( "eventstring", "killstreak_received" );
30 #precache( "eventstring", "player_callout" );
31 #precache( "eventstring", "score_event" );
32 #precache( "eventstring", "rank_up" );
33 #precache( "eventstring", "gun_level_complete" );
34 #precache( "eventstring", "challenge_complete" );
35 #precache( "eventstring", "clear_notification_queue" );
37 #namespace globallogic_ui;
56 if ( isdefined(
self.perkicon ) )
58 for ( numSpecialties = 0; numSpecialties < level.maxSpecialties; numSpecialties++ )
60 if ( isdefined(
self.perkicon[ numSpecialties ] ) )
68 if ( isdefined(
self.perkHudelem ) )
74 if ( isdefined(
self.killstreakicon ) )
76 if ( isdefined(
self.killstreakicon[0] ) )
80 if ( isdefined(
self.killstreakicon[1] ) )
84 if ( isdefined(
self.killstreakicon[2] ) )
88 if ( isdefined(
self.killstreakicon[3] ) )
92 if ( isdefined(
self.killstreakicon[4] ) )
99 if ( isdefined(
self.lowerMessage ) )
101 if ( isdefined(
self.lowerTimer ) )
105 if ( isdefined(
self.proxBar ) )
107 if ( isdefined(
self.proxBarText ) )
111 if ( isdefined(
self.carryIcon ) )
119 foreach( team
in level.teams )
121 if ( !isdefined( count ) )
123 count = playerCounts[team];
126 if ( count != playerCounts[team] )
136 lowest_team = undefined;
138 foreach( team
in level.teams )
140 if ( count > playerCounts[team] )
142 count = playerCounts[team];
152 if ( level.rankedMatch )
155 if (teamName !=
"free")
158 if ( comingFromMenu )
164 if ( level.forceAutoAssign)
170 if (
self IsSplitscreen() )
178 teamKeys = GetArrayKeys( level.teams );
179 assignment = teamKeys[randomInt(teamKeys.size)];
183 self LUINotifyEvent( &
"clear_notification_queue" );
185 if ( level.teamBased )
190 assert( isdefined( host ) );
192 if ( !isdefined( host.team ) || host.team ==
"spectator" )
194 host.team = array::random( teamKeys );
199 assignment = host.team;
209 teamName = getAssignedTeamName(
self );
210 if( isdefined( teamName ) && teamName !=
"free" && !comingFromMenu )
212 assignment = teamName;
218 assignment =
"spectator";
229 if ( !level.splitscreen &&
self IsSplitScreen() )
233 if ( assignment ==
"" )
248 if ( assignment ==
self.pers[
"team"] && (
self.sessionstate ==
"playing" ||
self.sessionstate ==
"dead") )
257 if ( !comingFromMenu )
259 assignment =
self.sessionteam;
263 clientNum =
self getEntityNumber();
265 foreach ( team
in level.teams )
267 if ( team ==
"free" )
273 if ( count == clientNum + 1 )
282 if (
self.sessionstate ==
"playing" ||
self.sessionstate ==
"dead")
288 if ( assignment ==
"spectator" && (!level.forceAutoAssign) )
290 self.pers[
"team"] = assignment;
291 self.team = assignment;
292 self.sessionteam = assignment;
293 self SetClientScriptMainMenu( game[
"menu_start_menu" ] );
297 if ( assignment !=
self.pers[
"team"] && (
self.sessionstate ==
"playing" ||
self.sessionstate ==
"dead") )
299 self.switching_teams =
true;
300 self.switchedTeamsResetGadgets =
true;
301 self.joining_team = assignment;
302 self.leaving_team =
self.pers[
"team"];
306 self.pers[
"team"] = assignment;
307 self.team = assignment;
308 self.pers[
"class"] = undefined;
309 self.curClass = undefined;
310 self.pers[
"weapon"] = undefined;
311 self.pers[
"savedmodel"] = undefined;
315 self.sessionteam = assignment;
317 if ( !isAlive(
self ) )
318 self.statusicon =
"hud_status_dead";
320 self notify(
"joined_team");
321 level notify(
"joined_team" );
323 self notify(
"end_respawn");
326 self SetClientScriptMainMenu( game[
"menu_start_menu" ] );
334 foreach( team
in level.teams )
336 if ( !isdefined( score ) )
338 score = getTeamScore(team);
341 if ( score != getTeamScore(team) )
351 lowest_team = undefined;
353 foreach( team
in level.teams )
355 if ( score > getTeamScore(team ) )
364 assignment =
"allies";
367 assignment = teams[randomInt(teams.size)];
376 for ( index = 0; index < level.players.size; index++ )
378 if ( !isdefined(level.players[index]) )
381 if ( level.players[index] ==
self )
384 if ( !(
self IsPlayerOnSameMachine( level.players[index] )) )
387 team = level.players[index].sessionteam;
390 if ( team !=
"spectator" )
399 if ( (
self.pers[
"team"] ==
"spectator") )
401 self SetClientCGObjectiveText(
"" );
405 if( level.scorelimit > 0 || level.roundScoreLimit > 0 )
418 self closeInGameMenu();
423 assert( isdefined( level.teams[
self.pers[
"team"]] ) );
425 team =
self.pers[
"team"];
427 if ( level.disableClassSelection == 1 || GetDvarint(
"migration_soak" ) == 1 )
431 started_waiting = GetTime();
434 while ( (!
self isStreamerReady( -1,
true )) && started_waiting + 90000 > GetTime() )
439 self.pers[
"class"] = level.defaultClass;
440 self.curClass = level.defaultClass;
442 if (
self.sessionstate !=
"playing" && game[
"state"] ==
"playing" )
443 self thread [[level.spawnClient]]();
458 self openMenu( game[
"menu_changeclass_" + team ] );
463 assert( isdefined( level.teams[
self.pers[
"team"]] ) );
465 team =
self.pers[
"team"];
470 self openMenu( game[
"menu_changeclass_" + team ] );
477 if ( !level.console && level.allow_teamchange ==
"0" && (isdefined(
self.hasDoneCombat) &&
self.hasDoneCombat) )
482 if(
self.pers[
"team"] != team)
485 if ( level.inGracePeriod && (!isdefined(
self.hasDoneCombat) || !
self.hasDoneCombat) )
486 self.hasSpawned =
false;
488 if(
self.sessionstate ==
"playing")
490 self.switching_teams =
true;
491 self.switchedTeamsResetGadgets =
true;
492 self.joining_team = team;
493 self.leaving_team =
self.pers[
"team"];
497 self LUINotifyEvent( &
"clear_notification_queue" );
499 self.pers[
"team"] = team;
501 self.pers[
"class"] = undefined;
502 self.curClass = undefined;
503 self.pers[
"weapon"] = undefined;
504 self.pers[
"savedmodel"] = undefined;
508 if ( !level.rankedMatch && !level.leagueMatch )
510 self.sessionstate =
"spectator";
513 self.sessionteam = team;
515 self SetClientScriptMainMenu( game[
"menu_start_menu" ] );
517 self notify(
"joined_team");
518 level notify(
"joined_team" );
520 self notify(
"end_respawn");
530 if(
self.pers[
"team"] !=
"spectator")
534 self.switching_teams =
true;
535 self.switchedTeamsResetGadgets =
true;
536 self.joining_team =
"spectator";
537 self.leaving_team =
self.pers[
"team"];
541 self.pers[
"team"] =
"spectator";
542 self.team =
"spectator";
543 self.pers[
"class"] = undefined;
544 self.curClass = undefined;
545 self.pers[
"weapon"] = undefined;
546 self.pers[
"savedmodel"] = undefined;
550 self.sessionteam =
"spectator";
552 [[level.spawnSpectator]]();
556 self SetClientScriptMainMenu( game[
"menu_start_menu" ] );
558 self notify(
"joined_spectators");
568 if(!isdefined(
self.pers[
"team"]) || !(isdefined( level.teams[
self.pers[
"team"]] ) ) )
571 if ( !isdefined( forcedClass ) )
574 playerClass = forcedClass;
576 if( (isdefined(
self.pers[
"class"] ) &&
self.pers[
"class"] == playerclass) )
579 self.pers[
"changed_class"] =
true;
580 self notify (
"changed_class" );
583 if( isdefined(
self.curClass) &&
self.curClass == playerclass )
585 self.pers[
"changed_class"] =
false;
588 self.pers[
"class"] = playerClass;
589 self.curClass = playerclass;
591 self.pers[
"weapon"] = undefined;
593 if ( game[
"state"] ==
"postgame" )
596 if (
self.sessionstate ==
"playing" )
598 supplyStationClassChange = isdefined(
self.usingSupplyStation ) &&
self.usingSupplyStation;
599 self.usingSupplyStation =
false;
601 if ( ( level.inGracePeriod && !
self.hasDoneCombat ) || supplyStationClassChange )
604 self.tag_stowed_back = undefined;
605 self.tag_stowed_hip = undefined;
609 else if ( !(
self IsSplitScreen() ) )
611 self IPrintLnBold( game[
"strings"][
"change_class"] );
616 if (
self.sessionstate !=
"spectator" )
618 if (
self IsInVehicle() )
621 if (
self IsRemoteControlling() )
624 if (
self IsWeaponViewOnlyLinked() )
628 if ( game[
"state"] ==
"playing" )
630 timePassed = undefined;
632 if ( isdefined(
self.respawnTimerStartTime ) )
634 timePassed = (gettime() -
self.respawnTimerStartTime) / 1000;
637 self thread [[level.spawnClient]](timePassed);
639 self.respawnTimerStartTime = undefined;
651 self endon(
"disconnect");
655 self endon(
"end_respawn");