1 #using scripts\codescripts\struct;
3 #using scripts\shared\math_shared;
5 #insert scripts\shared\shared.gsh;
7 #using scripts\zm\gametypes\_globallogic;
8 #using scripts\zm\gametypes\_globallogic_audio;
9 #using scripts\zm\gametypes\_globallogic_score;
10 #using scripts\zm\gametypes\_globallogic_utils;
11 #using scripts\zm\gametypes\_spawnlogic;
13 #using scripts\zm\_util;
15 #namespace globallogic_defaults;
19 if ( level.multiTeam )
23 return util::getotherteam(losing_team);
29 level.gameForfeited=
true;
31 level notify (
"forfeit in progress" );
32 level endon(
"forfeit in progress" );
33 level endon(
"abort forfeit" );
37 announcement( game[
"strings"][
"opponent_forfeiting_in"], forfeit_delay, 0 );
39 announcement( game[
"strings"][
"opponent_forfeiting_in"], 10.0, 0 );
43 if ( !isdefined( team ) )
45 SetDvar(
"ui_text_endreason", game[
"strings"][
"players_forfeited"] );
46 endReason = game[
"strings"][
"players_forfeited"];
47 winner = level.players[0];
49 else if ( isdefined( level.teams[team] ) )
51 endReason = game[
"strings"][team+
"_forfeited"];
52 SetDvar(
"ui_text_endreason", endReason );
58 assert( isdefined( team ),
"Forfeited team is not defined" );
59 assert( 0,
"Forfeited team " + team +
" is not allies or axis" );
63 level.forcedEnd =
true;
70 if ( isdefined( level.teams[team] ) )
72 eliminatedString = game[
"strings"][team +
"_eliminated"];
73 iPrintLn( eliminatedString );
75 SetDvar(
"ui_text_endreason", eliminatedString );
85 SetDvar(
"ui_text_endreason", game[
"strings"][
"tie"] );
89 if ( level.teamBased )
107 if ( !level.teamBased )
115 for ( index = 0; index < level.players.size; index++ )
117 player = level.players[index];
119 if ( !isAlive( player ) )
122 if ( !isdefined( player.pers[
"team"] ) || player.pers[
"team"] != team )
136 if ( level.teamBased )
150 SetDvar(
"ui_text_endreason", game[
"strings"][
"time_limit_reached"] );
157 if ( !level.endGameOnScoreLimit )
162 if ( level.teamBased )
174 SetDvar(
"ui_text_endreason", game[
"strings"][
"score_limit_reached"] );
182 if( isdefined( origin ) && isdefined( angles ) )
184 self spawn(origin, angles);
188 spawnpointname =
"mp_global_intermission";
189 spawnpoints = getentarray(spawnpointname,
"classname");
190 assert( spawnpoints.size,
"There are no mp_global_intermission spawn points in the map. There must be at least one." );
193 self spawn(spawnpoint.origin, spawnpoint.angles);
198 spawnpointname =
"mp_global_intermission";
199 spawnpoints = getentarray(spawnpointname,
"classname");
201 spawnpoint = spawnPoints[0];
203 if( isdefined( spawnpoint ) )
205 self spawn( spawnpoint.origin, spawnpoint.angles );
214 return math::clamp( GetGametypeSetting(
"timeLimit" ), level.timeLimitMin, level.timeLimitMax );