1 #using scripts\codescripts\struct;
3 #using scripts\shared\callbacks_shared;
4 #using scripts\shared\persistence_shared;
5 #using scripts\shared\system_shared;
6 #using scripts\shared\util_shared;
8 #insert scripts\shared\shared.gsh;
10 #using scripts\mp\gametypes\_globallogic_ui;
11 #using scripts\mp\gametypes\_spectating;
13 #using scripts\mp\_util;
15 #precache( "material", "mpflag_spectator" );
16 #precache( "string", "MP_AUTOBALANCE_NOW" );
27 level.use_team_based_logic_for_locking_on =
true;
32 game[
"strings"][
"autobalance"] = &
"MP_AUTOBALANCE_NOW";
34 if(GetDvarString(
"scr_teambalance") ==
"")
35 SetDvar(
"scr_teambalance",
"0");
36 level.teambalance = GetDvarint(
"scr_teambalance");
37 level.teambalancetimer = 0;
39 if(GetDvarString(
"scr_timeplayedcap") ==
"")
40 SetDvar(
"scr_timeplayedcap",
"1800");
41 level.timeplayedcap = int(GetDvarint(
"scr_timeplayedcap"));
43 level.freeplayers = [];
47 level.alliesplayers = [];
48 level.axisplayers = [];
56 if ( level.onlineGame )
66 if ( level.onlineGame)
85 /#println(
"joined team: " +
self.pers[
"team"] );#/
91 self.pers[
"teamTime"] = undefined;
96 self endon(
"disconnect" );
98 if ( !isdefined(
self.pers[
"totalTimePlayed"] ) )
100 self.pers[
"totalTimePlayed"] = 0;
103 foreach ( team
in level.teams )
105 self.timePlayed[team] = 0;
107 self.timePlayed[
"free"] = 0;
108 self.timePlayed[
"other"] = 0;
109 self.timePlayed[
"alive"] = 0;
112 if ( !isdefined(
self.timePlayed[
"total"] ) || !( (level.gameType ==
"twar") && (0 < game[
"roundsplayed"]) && (0 <
self.timeplayed[
"total"]) ) )
113 self.timePlayed[
"total"] = 0;
115 while ( level.inPrematchPeriod )
120 if ( game[
"state"] ==
"playing" )
122 if ( isdefined( level.teams[
self.sessionteam] ) )
124 self.timePlayed[
self.sessionteam]++;
125 self.timePlayed[
"total"]++;
127 if ( level.mpCustomMatch )
129 self.pers[
"sbtimeplayed"] =
self.timeplayed[
"total"];
130 self.sbtimeplayed =
self.pers[
"sbtimeplayed"];
133 if ( IsAlive(
self ) )
134 self.timePlayed[
"alive"]++;
136 else if (
self.sessionteam ==
"spectator" )
138 self.timePlayed[
"other"]++;
149 const minWait = 10.0;
156 varWait = varWait - step;
159 if ( nextToUpdate >= level.players.size )
171 if ( isdefined( level.players[nextToUpdate] ) )
183 pixbeginevent(
"updatePlayedTime");
185 if ( level.rankedMatch || level.leagueMatch )
187 foreach( team
in level.teams )
189 if (
self.timePlayed[team] )
191 if ( level.teambased )
193 self AddPlayerStat(
"time_played_"+team,
int( min(
self.timePlayed[team], level.timeplayedcap ) ) );
196 self AddPlayerStatWithGameType(
"time_played_total",
int( min(
self.timePlayed[team], level.timeplayedcap ) ) );
200 if (
self.timePlayed[
"other"] )
202 self AddPlayerStat(
"time_played_other",
int( min(
self.timePlayed[
"other"], level.timeplayedcap ) ) );
203 self AddPlayerStatWithGameType(
"time_played_total",
int( min(
self.timePlayed[
"other"], level.timeplayedcap ) ) );
206 if (
self.timePlayed[
"alive"] )
208 timeAlive = int( min(
self.timePlayed[
"alive"], level.timeplayedcap ) );
210 self AddPlayerStat(
"time_played_alive", timeAlive );
214 if ( level.onlineGame )
216 timeAlive = int( min(
self.timePlayed[
"alive"], level.timeplayedcap ) );
217 self.pers[
"time_played_alive"] += timeAlive;
222 if ( game[
"state"] ==
"postgame" )
225 foreach( team
in level.teams )
227 self.timePlayed[team] = 0;
229 self.timePlayed[
"other"] = 0;
230 self.timePlayed[
"alive"] = 0;
236 if ( game[
"state"] !=
"playing" )
239 self.pers[
"teamTime"] = getTime();
246 teambalance = GetDvarint(
"scr_teambalance");
247 if(level.teambalance != teambalance)
248 level.teambalance = GetDvarint(
"scr_teambalance");
250 timeplayedcap = GetDvarint(
"scr_timeplayedcap");
251 if(level.timeplayedcap != timeplayedcap)
252 level.timeplayedcap = int(GetDvarint(
"scr_timeplayedcap"));
260 if (
self.sessionstate !=
"dead")
263 self.switching_teams =
true;
264 self.switchedTeamsResetGadgets =
true;
265 self.joining_team = team;
266 self.leaving_team =
self.pers[
"team"];
272 self.pers[
"team"] = team;
274 self.pers[
"weapon"] = undefined;
275 self.pers[
"spawnweapon"] = undefined;
276 self.pers[
"savedmodel"] = undefined;
277 self.pers[
"teamTime"] = undefined;
278 self.sessionteam =
self.pers[
"team"];
285 self SetClientScriptMainMenu( game[
"menu_start_menu" ] );
286 self openMenu(game[
"menu_start_menu" ]);
288 self notify(
"end_respawn");
293 players = level.players;
296 foreach( team
in level.teams )
298 playerCounts[team] = 0;
301 foreach( player
in level.players )
306 team = player.pers[
"team"];
307 if( isdefined(team) && isdefined( level.teams[team] ) )
308 playerCounts[team]++;
316 self endon(
"disconnect" );
318 foreach( team
in level.teams )
320 self.timePlayed[team] = 0;
323 self.timePlayed[
"other"] = 0;
324 self.timePlayed[
"total"] = 0;
325 self.timePlayed[
"alive"] = 0;
329 if ( game[
"state"] ==
"playing" )
331 team =
self.pers[
"team"];
332 if ( isdefined( team ) && isdefined( level.teams[team] ) &&
self.sessionteam !=
"spectator" )
334 self.timePlayed[team]++;
335 self.timePlayed[
"total"]++;
336 if ( IsAlive(
self ) )
337 self.timePlayed[
"alive"]++;
341 self.timePlayed[
"other"]++;
352 self SetMoveSpeedScale( 1 );
353 self SetSprintDuration( 4 );
354 self SetSprintCooldown( 0 );
359 assert(isdefined(game[
"flagmodels"]));
360 assert(isdefined(game[
"flagmodels"][teamRef]));
361 return ( game[
"flagmodels"][teamRef] );
366 assert(isdefined(game[
"carry_flagmodels"]));
367 assert(isdefined(game[
"carry_flagmodels"][teamRef]));
368 return ( game[
"carry_flagmodels"][teamRef] );
373 if( !isdefined( team ) )
383 if( team ==
"allies" )
398 foreach( team
in level.teams )
400 if ( team == player_team )
403 if ( team ==
"spectator" )
416 foreach( player
in level.players )
418 if( player.team ==
"spectator" )
423 if( ( level.teamBased && player.team !=
self.team ) || ( !level.teamBased && player !=
self ) )
436 foreach( player
in level.players )
438 if( ( player.team ==
self.team ) && ( player !=
self ) )
449 if( isdefined( end_condition1 ) )
450 self endon( end_condition1 );
451 if( isdefined( end_condition2 ) )
452 self endon( end_condition2 );
453 if( isdefined( end_condition3 ) )
454 self endon( end_condition3 );
467 self notify( singletonString );
468 self endon( singletonString );
469 if( isdefined( end_condition1 ) )
470 self endon( end_condition1 );
471 if( isdefined( end_condition2 ) )
472 self endon( end_condition2 );
473 if( isdefined( end_condition3 ) )
474 self endon( end_condition3 );
480 self thread [[
callback ]]( arg, event );
487 if( level.teambased )
489 self SetVisibleToAllExceptTeam(
self.team );
493 self SetVisibleToAll();
494 self SetInvisibleToPlayer(
self.owner );