1 #using scripts\codescripts\struct;
3 #using scripts\shared\hostmigration_shared;
4 #using scripts\shared\hud_message_shared;
5 #using scripts\shared\killstreaks_shared;
7 #insert scripts\shared\shared.gsh;
9 #using scripts\mp\gametypes\_globallogic_score;
10 #using scripts\mp\gametypes\_hostmigration;
11 #using scripts\mp\gametypes\_hud_message;
13 #using scripts\mp\killstreaks\_killstreaks;
15 #namespace globallogic_utils;
19 self endon (
"death" );
20 self endon (
"disconnect" );
26 notifyData = spawnStruct();
27 notifyData.titleText = &
"MP_CHALLENGE_COMPLETED";
28 notifyData.notifyText =
"wheee";
29 notifyData.sound =
"mp_challenge_complete";
37 self endon (
"death" );
38 self endon (
"disconnect" );
44 numShots = randomInt( 6 );
46 for ( i = 0; i < numShots; i++ )
48 iPrintLnBold( numShots );
49 self shellShock(
"frag_grenade_mp", 0.2 );
57 self endon (
"death" );
58 self endon (
"disconnect" );
61 hps[hps.size] =
"radar";
62 hps[hps.size] =
"artillery";
63 hps[hps.size] =
"dogs";
70 self playLocalSound( level.killstreaks[hp].informDialog );
82 if ( level.gameEnded )
84 timePassed = (getTime() - level.gameEndTime) / 1000;
85 timeRemaining = level.postRoundTime - timePassed;
87 if ( timeRemaining < 0 )
93 if ( level.inOvertime )
96 if ( level.timeLimit <= 0 )
99 if ( !isdefined( level.startTime ) )
103 timeRemaining = (level.timeLimit * 60) - timePassed;
105 return timeRemaining + level.postRoundTime;
116 if ( !isdefined( level.postRoundEvents ) )
117 level.postRoundEvents = [];
119 level.postRoundEvents[level.postRoundEvents.size] = eventFunc;
124 if ( !isdefined( level.postRoundEvents ) )
127 for ( i = 0 ; i < level.postRoundEvents.size ; i++ )
129 [[level.postRoundEvents[i]]]();
135 if ( value > maxValue )
137 else if ( value < minValue )
146 if ( SessionModeIsZombiesGame() )
148 assert( !isdefined( c ) );
151 return isdefined( c ) && c !=
"";
158 self endon(
"stop_ticking");
159 level endon(
"game_ended");
161 time = level.bombTimer;
165 self playSound( gametype_tick_sound );
193 self notify(
"stop_ticking");
198 level endon (
"game_ended" );
200 level waittill(
"prematch_over");
202 level.startTime = getTime();
203 level.discardTime = 0;
205 if ( isdefined( game[
"roundMillisecondsAlreadyPassed"] ) )
207 level.startTime -= game[
"roundMillisecondsAlreadyPassed"];
208 game[
"roundMillisecondsAlreadyPassed"] = undefined;
211 prevtime = gettime() - 1000;
213 while ( game[
"state"] ==
"playing" )
215 if ( !level.timerStopped )
218 game[
"timepassed"] += gettime() - prevtime;
220 if ( !level.playableTimerStopped )
222 game[
"playabletimepassed"] += gettime() - prevtime;
224 prevtime = gettime();
233 player endon(
"death" );
234 player endon(
"disconnect" );
241 player DisableRoundStartDelay();
246 waitTime = level.roundStartExplosiveDelay - ([[level.getTimePassed]]() / 1000);
257 self endon(
"disconnect");
258 self endon(
"joined_spectators");
261 if( isDefined( level.prematch_over ) && level.prematch_over )
267 level waittill(
"prematch_over");
270 self EnableRoundStartDelay();
276 if ( !isdefined( level.startTime ) )
279 if ( level.timerStopped )
280 return (level.timerPauseTime - level.startTime) - level.discardTime;
282 return (gettime() - level.startTime) - level.discardTime;
289 level.playableTimerStopped = pausePlayableTimer;
291 if ( level.timerStopped )
294 level.timerStopped =
true;
295 level.timerPauseTime = gettime();
301 if ( !level.timerStopped )
304 level.timerStopped =
false;
305 level.playableTimerStopped =
false;
306 level.discardTime += gettime() - level.timerPauseTime;
311 if ( !level.timerStopped )
314 level.timerStopped =
false;
315 level.discardTime = discardTime;
320 assert( IsPlayer(
self ) || isdefined( team ) );
322 scoreLimit = level.scoreLimit;
324 if ( IsPlayer(
self ) )
327 return scoreLimit - GetTeamScore( team );
332 if ( level.cumulativeRoundScores && isdefined( game[
"lastroundscore"][team] ) )
334 return GetTeamScore( team ) - game[
"lastroundscore"][team];
337 return GetTeamScore( team );
342 assert( IsPlayer(
self ) || isdefined( team ) );
346 if ( IsPlayer(
self ) )
355 assert( IsPlayer(
self ) || isdefined( team ) );
360 if ( !scorePerMinute )
363 return scoreRemaining / scorePerMinute;
369 self endon(
"disconnect");
373 self PlayRumbleOnEntity(
"damage_heavy" );
380 self endon( notifyname );
387 self endon( notifyname );
389 while( isdefined( level.artilleryInProgress ) )
391 assert( level.artilleryInProgress );
397 function isHeadShot( weapon, sHitLoc, sMeansOfDeath, eInflictor )
399 if( sHitLoc !=
"head" && sHitLoc !=
"helmet" )
404 switch( sMeansOfDeath )
407 case "MOD_MELEE_ASSASSINATE":
410 if( weapon.rootWeapon != level.weaponBallisticKnife )
416 if ( !isdefined( eInflictor ) || !isdefined( eInflictor.controlled ) || eInflictor.controlled ==
false )
435 case "right_arm_upper":
436 case "left_arm_upper":
437 case "right_arm_lower":
438 case "left_arm_lower":
445 case "right_leg_upper":
446 case "left_leg_upper":
448 case "right_leg_lower":
449 case "left_leg_lower":
461 for ( i = 0; i < 50; i++ )
472 for ( index = 0; index < entityList.size; index++ )
474 if ( entity == entityList[index] )
483 startedWaiting = getTime();
485 waitedTime = (getTime() - startedWaiting)/1000;
487 if ( waitedTime < desiredDelay )
489 wait desiredDelay - waitedTime;
501 log_string = wintype;
503 if( isdefined( winner ) )
505 log_string = log_string +
", win: " + winner;
508 foreach ( team
in level.teams )
510 log_string = log_string +
", " + team +
": " + game[
"teamScores"][team];