cod5-sdk/raw/maps/_callbackglobal.gsc
2008-11-20 00:00:00 +00:00

998 lines
26 KiB
Text

#include maps\_utility;
#include common_scripts\utility;
#include maps\_music;
init()
{
level.splitscreen = isSplitScreen();
level.xenon = ( getdvar( "xenonGame" ) == "true" );
level.ps3 = ( getdvar( "ps3Game" ) == "true" );
level.wii = ( getdvar( "wiiGame" ) == "true" );
level.onlineGame = getDvarInt( "onlinegame" );
level.systemLink = getDvarInt( "systemlink" );
level.console = ( level.xenon || level.ps3 || level.wii );
// CODER_MOD: Austin (8/15/08): display briefing menu until all players have joined
PrecacheMenu( "briefing" );
// CODER_MOD
// GMJ( 7/13/08 ): Players can earn xp and unlock things in private matches.
level.rankedMatch = ( level.onlineGame
// && !getDvarInt( "xblive_privatematch" )
);
/#
if( getdvarint( "scr_forcerankedmatch" ) == 1 )
{
level.rankedMatch = true;
}
#/
}
SetupCallbacks()
{
level.otherPlayersSpectate = false;
level.spawnPlayer = ::spawnPlayer;
level.spawnClient = ::spawnClient;
level.spawnSpectator = ::spawnSpectator;
level.spawnIntermission = ::spawnIntermission;
level.onSpawnPlayer = ::default_onSpawnPlayer;
level.onPostSpawnPlayer = ::default_onPostSpawnPlayer;
level.onSpawnSpectator = ::default_onSpawnSpectator;
level.onSpawnIntermission = ::default_onSpawnIntermission;
level.onStartGameType = ::blank;
level.onPlayerConnect = ::blank;
level.onPlayerDisconnect = ::blank;
level.onPlayerDamage = ::blank;
level.onPlayerKilled = ::blank;
level.onPlayerWeaponSwap = ::blank;
level.loadout = ::menuLoadout;
}
blank( arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10 )
{
}
// CODER_MOD
// Austin( 7/5/07 ): used by the curve code to notify the level entity of a curve event
Callback_CurveNotify( string, curveId, nodeIndex )
{
level notify( string, curveId, nodeIndex );
}
Callback_StartGameType()
{
//CODER_MOD: TOMMYK 07/16/2008 - For coop scoreboards
//maps\_gameskill::initialScoreUpdate();
}
BriefInvulnerability()
{
self endon( "disconnect" );
self EnableInvulnerability();
/#
println( "****EnableInvulnerability****" );
#/
wait (3);
self DisableInvulnerability();
/#
println( "****DisableInvulnerability****" );
#/
}
Callback_SaveRestored()
{
/#
println( "****Coop CodeCallback_SaveRestored****" );
#/
players = get_players();
level.debug_player = players[0];
num = 0;
if( isdefined( level._save_pos ) )
{
num = level._save_trig_ent;
}
// println("*** Restoring with breadcrumbs from player " + num);
for( i = 0; i < 4; i++ )
{
player = players[i];
if( isDefined( player ) )
{
// CODER_MOD JB - Prevents "death" loop with player upon restoring savegame
player thread BriefInvulnerability();
player thread maps\_quotes::main();
/* player setorigin( level._player_breadcrumbs[num][i].pos );
player setplayerangles( level._player_breadcrumbs[num][i].ang ); */
if( isdefined( player.savedVisionSet ) )
{
player VisionSetNaked( player.savedVisionSet, 0.1 );
}
// this is to aviod having the deaths reset when restarting from a checkpoint
dvarName = "player" + player GetEntityNumber() + "downs";
player.downs = getdvarint( dvarName );
maps\_challenges_coop::doMissionCallback( "checkpointLoaded", player );
}
}
// CODER_MOD: Austin (7/31/08): re-initialize the collectibles system
maps\_collectibles::onSaveRestored();
maps\_challenges_coop::onSaveRestored();
// CODER_MOD: TommyK (8/5/08)
level thread maps\_arcademode::arcadeMode_checkpoint_restore();
level thread maps\_collectibles_game::collectibles_checkpoint_restore();
}
Player_BreadCrumb_Reset( position, angles )
{
if( !isdefined( angles ) )
{
angles = ( 0, 0, 0 );
}
level.playerPrevOrigin0 = position;
level.playerPrevOrigin1 = position;
if( !isdefined( level._player_breadcrumbs ) )
{
level._player_breadcrumbs = [];
for( i = 0; i < 4; i ++ )
{
level._player_breadcrumbs[i] = [];
for( j = 0; j < 4; j ++ )
{
level._player_breadcrumbs[i][j] = spawnstruct();
}
}
}
for( i = 0; i < 4; i ++ )
{
for( j = 0; j < 4; j ++ )
{
level._player_breadcrumbs[i][j].pos = position;
level._player_breadcrumbs[i][j].ang = angles;
}
}
}
Player_BreadCrumb_Update()
{
self endon( "disconnect" );
drop_distance = 70;
right = anglestoright( self.angles ) * drop_distance;
level.playerPrevOrigin0 = self.origin + right;
level.playerPrevOrigin1 = self.origin - right;
if( !isdefined( level._player_breadcrumbs ) )
{
Player_BreadCrumb_Reset( self.origin, self.angles );
}
num = self GetEntityNumber();
while( 1 )
{
wait 1;
dist_squared = distancesquared( self.origin, level.playerPrevOrigin0 );
if( dist_squared > 500*500 ) // just in case player is teleported
{
right = anglestoright( self.angles ) * drop_distance;
level.playerPrevOrigin0 = self.origin + right;
level.playerPrevOrigin1 = self.origin - right;
}
else if( dist_squared > drop_distance*drop_distance )
{
level.playerPrevOrigin1 = level.playerPrevOrigin0;
level.playerPrevOrigin0 = self.origin;
}
dist_squared = distancesquared( self.origin, level._player_breadcrumbs[num][0].pos );
/* if( dist_squared > 500 * 500 )
{
right = anglestoright( self.angles ) * drop_distance;
pos = self.origin -( right * 2 );
level._player_breadcrumbs[num][0].pos = pos;
pos += right;
level._player_breadcrumbs[num][1].pos = pos;
pos += right;
pos += right; // skip player position
level._player_breadcrumbs[num][2].pos = pos;
pos += right;
level._player_breadcrumbs[num][3].pos = pos;
for( i = 0; i < 4; i ++ )
{
level._player_breadcrumbs[num][i].ang = self.angles;
}
}
else if( dist_squared > drop_distance * drop_distance ) */
dropBreadcrumbs = true;
if(IsDefined( level.flag ) && IsDefined( level.flag["drop_breadcrumbs"]))
{
if(!flag("drop_breadcrumbs"))
{
dropBreadcrumbs = false;
}
}
if( dropBreadcrumbs && (dist_squared > drop_distance * drop_distance) )
{
for( i = 2; i >= 0; i -- )
{
level._player_breadcrumbs[num][i + 1].pos = level._player_breadcrumbs[num][i].pos;
level._player_breadcrumbs[num][i + 1].ang = level._player_breadcrumbs[num][i].ang;
}
level._player_breadcrumbs[num][0].pos = PlayerPhysicsTrace(self.origin, self.origin + ( 0, 0, -1000 ));
level._player_breadcrumbs[num][0].ang = self.angles;
}
/*
for( i = 0; i < 4; i ++ )
{
col = ( 0.0, 0.8, 0.0 );
switch( num )
{
case 1:
col = ( 0.8, 0.0, 0.0 );
break;
case 2:
col = ( 0.0, 0.0, 0.8 );
break;
case 3:
col = ( 0.8, 0.0, 0.8 );
break;
}
print3d( level._player_breadcrumbs[num][i].pos, i, col, 1, 1, 20 );
}
if( num == 0 )
{
if( isdefined( level._save_pos ) )
{
print3d( level._save_pos, "svp " + level._save_trig_ent, ( 0.0, 0.8, 0.0 ), 1, 1, 20 );
}
}
*/
}
}
SetPlayerSpawnPos()
{
players = get_players();
player = players[0];
if( !isdefined( level._player_breadcrumbs ) )
{
spawnpoints = getentarray( "info_player_deathmatch", "classname" );
if( player.origin == ( 0, 0, 0 ) && isdefined( spawnpoints ) && spawnpoints.size > 0 )
{
Player_BreadCrumb_Reset( spawnpoints[0].origin, spawnpoints[0].angles );
}
else
{
Player_BreadCrumb_Reset( player.origin, player.angles );
}
}
too_close = 30;
spawn_pos = level._player_breadcrumbs[0][0].pos;
dist_squared = distancesquared( player.origin, spawn_pos );
if( dist_squared > 500*500 ) // just in case player is teleported
{
if( player.origin != ( 0, 0, 0 ) )
{
spawn_pos = player.origin +( 0, 30, 0 );
}
}
else if( dist_squared < too_close*too_close )
{
spawn_pos = level._player_breadcrumbs[0][1].pos;
}
spawn_angles = vectornormalize( player.origin - spawn_pos );
spawn_angles = vectorToAngles( spawn_angles );
// make sure that this is a valid spawn position
if( !playerpositionvalid( spawn_pos ) )
{
// for now just put them at the player position
// we know this position is valid
spawn_pos = player.origin;
spawn_angles = player.angles;
}
/*
self setOrigin( spawn_pos );
// set them looking at player0
self setPlayerAngles( spawn_angles ); */
}
Callback_PlayerConnect()
{
// CODER_MOD: Bryce( 05/08/08 ): Useful output for debugging replay system
/#
if( getdebugdvar( "replay_debug" ) == "1" )
{
println( "File: _callbackglobal.gsc. Function: Callback_PlayerConnect()\n" );
}
#/
thread first_player_connect();
// CODER_MOD: Bryce( 05/08/08 ): Useful output for debugging replay system
/#
if( getdebugdvar( "replay_debug" ) == "1" )
{
println( "File: _callbackglobal.gsc. Function: Callback_PlayerConnect() - START WAIT begin and waittillframeend\n" );
}
#/
self waittill( "begin" );
self reset_clientdvars();
waittillframeend;
// CODER_MOD: Bryce( 05/08/08 ): Useful output for debugging replay system
/#
if( getdebugdvar( "replay_debug" ) == "1" )
{
println( "File: _callbackglobal.gsc. Function: Callback_PlayerConnect() - STOP WAIT begin and waittillframeend\n" );
}
#/
level notify( "connected", self );
self thread maps\_load::player_special_death_hint();
// we want to give the player a good default starting position
// info_player_spawn actually gets renamed to info_player_deathmatch
// in the game
info_player_spawn = getentarray( "info_player_deathmatch", "classname" );
if( isdefined( info_player_spawn ) && info_player_spawn.size > 0 )
{
// CODER_MOD
// Danl( 08/03/07 ) Band aid to spawn clients at host position.
players = get_players();
if( Isdefined( players ) &&( players.size != 0 ) )// || players[0] == self ) )
{
if( players[0] == self )
{
println( "2: Setting player origin to info_player_start " + info_player_spawn[0].origin );
self setOrigin( info_player_spawn[0].origin );
self setPlayerAngles( info_player_spawn[0].angles );
self thread Player_BreadCrumb_Update();
}
else
{
println( "Callback_PlayerConnect: Setting player origin near host position " + players[0].origin );
self SetPlayerSpawnPos();
self thread Player_BreadCrumb_Update();
}
}
else
{
println( "Callback_PlayerConnect: Setting player origin to info_player_start " + info_player_spawn[0].origin );
self setOrigin( info_player_spawn[0].origin );
self setPlayerAngles( info_player_spawn[0].angles );
self thread Player_BreadCrumb_Update();
}
}
// SCRIPTER_MOD
// JesseS( 3/15/2007 ): added player flag setup function
// CODER_MOD
// Danl( 08/03/2007 ) - bandaid to facilitate hot joined players being at the host position on restart from checkpoint
if( !IsDefined( self.flag ) )
{
self.flag = [];
self.flags_lock = [];
}
if( !IsDefined( self.flag["player_has_red_flashing_overlay"] ) )
{
self player_flag_init( "player_has_red_flashing_overlay" );
self player_flag_init( "player_is_invulnerable" );
}
if( !IsDefined( self.flag["loadout_given"] ) )
{
self player_flag_init( "loadout_given" );
}
self player_flag_clear( "loadout_given" );
// CODER_MOD
// Austin( 6/20/07 ): added spectate camera
// create the spectate camera
// self.spectate_cam = spawn( "script_camera", ( 0, 0, 0 ) );
//
// // pick a random player to spectate on
// players = get_players();
// if( players.size > 0 )
// {
// num = RandomInt( players.size );
//
// self.spectate_cam linkto( players[num], "tag_origin", ( -100, 0, 50 ), ( 0, 0, 0 ) );
//
// // activate the spectate camera
// self playerlinktocamera( self.spectate_cam, 0, 0 );
// }
// CODER_MOD: Jon E - This is needed for the SP_TOOL or MP_TOOL to work for MODS
if( GetDvar( "r_reflectionProbeGenerate" ) == "1" )
{
waittillframeend;
//self spawn( self.origin, self.angles );
self thread spawnPlayer();
return;
}
/#
if( !isdefined( level.spawnClient ) )
{
waittillframeend;
//self spawn( self.origin, self.angles );
self thread spawnPlayer();
return;
}
#/
self setClientDvar( "ui_allow_loadoutchange", "1" );
self thread[[level.spawnClient]]();
dvarName = "player" + self GetEntityNumber() + "downs";
setdvar( dvarName, self.downs );
// CODER_MOD: Bryce( 05/08/08 ): Useful output for debugging replay system
/#
if( getdebugdvar( "replay_debug" ) == "1" )
{
println( "File: _callbackglobal.gsc. Function: Callback_PlayerConnect() - COMPLETE\n" );
}
#/
}
reset_clientdvars()
{
if( IsDefined( level.reset_clientdvars ) )
{
self [[level.reset_clientdvars]]();
return;
}
self SetClientDvars( "compass", "1",
"hud_showStance", "1",
"cg_thirdPerson", "0",
"cg_fov", "65",
"cg_thirdPersonAngle", "0",
"ammoCounterHide", "0",
"miniscoreboardhide", "0",
"ui_hud_hardcore", "0",
"credits_active", "0" );
self AllowSpectateTeam( "allies", false );
self AllowSpectateTeam( "axis", false );
self AllowSpectateTeam( "freelook", false );
self AllowSpectateTeam( "none", false );
}
Callback_PlayerDisconnect()
{
}
Callback_PlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, modelIndex, psOffsetTime )
{
if( IsDefined( level.overridePlayerDamage ) )
{
self [[level.overridePlayerDamage]]( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, modelIndex, psOffsetTime );
}
//CODER MOD: TOMMY K, this is to prevent a player killing another player
if( isdefined( eAttacker ) && isPlayer( eAttacker ) && ( !isDefined( level.friendlyexplosivedamage ) || !level.friendlyexplosivedamage ))
{
if( self != eAttacker )
{
//one player shouldn't damage another player, grenades, airstrikes called in by another player
return;
}
else if( sMeansOfDeath != "MOD_GRENADE_SPLASH"
&& sMeansOfDeath != "MOD_GRENADE"
&& sMeansOfDeath != "MOD_EXPLOSIVE"
&& sMeansOfDeath != "MOD_PROJECTILE"
&& sMeansOfDeath != "MOD_PROJECTILE_SPLASH"
&& sMeansOfDeath != "MOD_BURNED" )
{
//player should be able to damage they're selves with grenades and stuff
//otherwise don't damage the player, so like airstrikes won't kill the player
return;
}
}
self finishPlayerDamageWrapper( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, modelIndex, psOffsetTime );
}
finishPlayerDamageWrapper( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, modelIndex, psOffsetTime )
{
self finishPlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, modelIndex, psOffsetTime );
}
/*================
Called when a player has been revived while in last stand
================ */
Callback_RevivePlayer()
{
self endon( "disconnect" );
self RevivePlayer();
}
/*================
Called when a player has been killed, but has last stand perk.
self is the player that was killed.
================ */
Callback_PlayerLastStand( eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration )
{
self endon( "disconnect" );
[[maps\_laststand::PlayerLastStand]]( eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration );
}
Callback_PlayerKilled( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration )
{
self thread[[level.onPlayerKilled]]( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration );
// get rid of the head icon
//self.headicon = "";
// setmusicstate( "DEATH" );
self.downs++;
dvarName = "player" + self GetEntityNumber() + "downs";
setdvar( dvarName, self.downs );
if( IsDefined( level.player_killed_shellshock ) )
{
self ShellShock( level.player_killed_shellshock, 3 );
}
else
{
self ShellShock( "death", 3 );
}
self PlayLocalSound( "mx_death" );
self PlayLocalSound( "mx_death_rear" );
// restore the movement
self setmovespeedscale( 1.0 );
self.ignoreme = false;
self notify( "killed_player" );
wait( 1 );
// wait for the death sequence to finish
if( IsDefined( level.overridePlayerKilled ) )
{
self [[level.overridePlayerKilled]]();
}
if( get_players().size > 1 )
{
// CODER_MOD
// BNANDAKUMAR( 05/29/08 )
// We will display a Mission Failed text for all the players
// We will also display a message below if "You have died" or "Your teammate has died"
players = get_players();
for( i = 0; i < players.size; i++ )
{
if( isDefined( players[i] ) )
{
players[i] thread maps\_quotes::displayMissionFailed();
if( !isAlive( players[i] ) )
{
players[i] thread maps\_quotes::displayPlayerDead();
println( "Player #"+i+" is dead" );
}
else
{
players[i] thread maps\_quotes::displayTeammateDead( self );
println( "Player #"+i+" is alive" );
}
}
}
missionfailed();
return;
}
/#
if( !isdefined( level.spawnClient ) )
{
waittillframeend;
self spawn( self.origin, self.angles );
return;
}
#/
}
// this function is going to handle waiting for player input or programmed delays before starting the spawn
spawnClient()
{
self endon( "disconnect" );
self endon( "end_respawn" );
println( "*************************spawnClient****" );
// CODER_MOD
// Austin( 6/20/07 ): added spectate camera
// shut off the spectate cam
self unlink();
if( isdefined( self.spectate_cam ) )
{
self.spectate_cam delete();
}
if( level.otherPlayersSpectate )
{
self thread [[level.spawnSpectator]]();
}
else
{
self thread [[level.spawnPlayer]]();
}
}
spawnPlayer( spawnOnHost )
{
self endon( "disconnect" );
self endon( "spawned_spectator" );
self notify( "spawned" );
self notify( "end_respawn" );
// Be sure everyone is connected before actually spawning in.
// Wait until all players are connected
synchronize_players();
setSpawnVariables();
self.sessionstate = "playing";
self.spectatorclient = -1;
self.archivetime = 0;
self.psoffsettime = 0;
self.statusicon = "";
// self.maxhealth = maps\mp\gametypes\_tweakables::getTweakableValue( "player", "maxhealth" );
// self.health = self.maxhealth;
self.maxhealth = self.health;
self.shellshocked = false;
self.inWater = false;
self.friendlydamage = undefined;
self.hasSpawned = true;
self.spawnTime = getTime();
self.afk = false;
println( "*************************spawnPlayer****" );
self detachAll();
if( IsDefined( level.custom_spawnPlayer ) )
{
self [[level.custom_spawnPlayer]]();
return;
}
if( isdefined( level.onSpawnPlayer ) )
{
self [[level.onSpawnPlayer]]();
}
wait_for_first_player();
if( isdefined( spawnOnHost ) )
{
self Spawn( get_players()[0].origin, get_players()[0].angles );
self SetPlayerSpawnPos();
}
else
{
self Spawn( self.origin, self.angles );
}
if( isdefined( level.onPostSpawnPlayer ) )
{
self[[level.onPostSpawnPlayer]]();
}
if( isdefined( level.onPlayerWeaponSwap ) )
{
self thread[[level.onPlayerWeaponSwap]]();
}
// Insert all checks for other utility scripts here...
// If you do not thread it, make sure it immediately finishes the function( no waits )
self maps\_introscreen::introscreen_player_connect();
// should not need this wait. something in the spawn overides the weapons
waittillframeend;
// CODER_MOD
// Dan L( 08/01/06 ) we need to delay the rest of the creation process, until the messages dealing with the
// spawning of the player has finished propagating to remote clients. This is not a good final solution.
// Ultimately, this whole chain of code shouldn't be triggered off until the server has determined that the clients
// have all received the map_restart message.
if( self != get_players()[0] )
{
wait( 0.5 );
}
self notify( "spawned_player" );
}
synchronize_players()
{
// If this flag is not set, then we are either in a testmap or reflection probes is being called
if( !IsDefined( level.flag ) || !IsDefined( level.flag["all_players_connected"] ) )
{
println( "^1**** ERROR: You must call _load::main() if you don't want bad coop things to happen! ****" );
println( "^1**** ERROR: You must call _load::main() if you don't want bad coop things to happen! ****" );
println( "^1**** ERROR: You must call _load::main() if you don't want bad coop things to happen! ****" );
return;
}
// MikeD( 6/2/2008 ): If the expected and connected players match, then don't even bother with
// the synchronize screen.
if( GetNumConnectedPlayers() == GetNumExpectedPlayers() )
{
return;
}
if( flag( "all_players_connected" ) )
{
return;
}
// CODER_MOD: Austin (8/15/08): rework to display briefing menu in online coop and black screen for splitscreen
background = undefined;
if ( level.onlineGame || level.systemLink )
{
self OpenMenu( "briefing" );
}
else
{
background = NewHudElem();
background.x = 0;
background.y = 0;
background.horzAlign = "fullscreen";
background.vertAlign = "fullscreen";
background.foreground = true;
background SetShader( "black", 640, 480 );
}
flag_wait( "all_players_connected" );
if ( level.onlineGame || level.systemLink )
{
players = get_players();
for ( i = 0; i < players.size; i++ )
{
players[i] CloseMenu();
}
}
else
{
assert( IsDefined( background ) );
background Destroy();
}
}
spawnSpectator()
{
self endon( "disconnect" );
self endon( "spawned_spectator" );
self notify( "spawned" );
self notify( "end_respawn" );
setSpawnVariables();
self.sessionstate = "spectator";
self.spectatorclient = -1;
if( isdefined( level.otherPlayersSpectateClient ) )
{
self.spectatorclient = level.otherPlayersSpectateClient getEntityNumber();
}
self setClientDvars( "cg_thirdPerson", 0 );
self setSpectatePermissions();
self.archivetime = 0;
self.psoffsettime = 0;
self.statusicon = "";
// self.maxhealth = maps\mp\gametypes\_tweakables::getTweakableValue( "player", "maxhealth" );
// self.health = self.maxhealth;
self.maxhealth = self.health;
self.shellshocked = false;
self.inWater = false;
self.friendlydamage = undefined;
self.hasSpawned = true;
self.spawnTime = getTime();
self.afk = false;
println( "*************************spawnSpectator***" );
self detachAll();
if( isdefined( level.onSpawnSpectator ) )
{
self[[level.onSpawnSpectator]]();
}
self Spawn( self.origin, self.angles );
// should not need this wait. something in the spawn overides the weapons
waittillframeend;
flag_wait( "all_players_connected" );
self notify( "spawned_spectator" );
}
setSpectatePermissions()
{
self AllowSpectateTeam( "allies", true );
self AllowSpectateTeam( "axis", false );
self AllowSpectateTeam( "freelook", false );
self AllowSpectateTeam( "none", false );
}
spawnIntermission()
{
self notify( "spawned" );
self notify( "end_respawn" );
self setSpawnVariables();
self freezeControls( false );
self setClientDvar( "cg_everyoneHearsEveryone", "1" );
self.sessionstate = "intermission";
self.spectatorclient = -1;
self.killcamentity = -1;
self.archivetime = 0;
self.psoffsettime = 0;
self.friendlydamage = undefined;
[[level.onSpawnIntermission]]();
self setDepthOfField( 0, 128, 512, 4000, 6, 1.8 );
}
default_onSpawnPlayer()
{
}
default_onPostSpawnPlayer()
{
}
default_onSpawnSpectator()
{
}
default_onSpawnIntermission()
{
spawnpointname = "info_intermission";
spawnpoints = getentarray( spawnpointname, "classname" );
// CODER_MOD: TommyK (8/5/08)
if(spawnpoints.size < 1)
{
println( "NO " + spawnpointname + " SPAWNPOINTS IN MAP" );
return;
}
spawnpoint = spawnpoints[RandomInt(spawnpoints.size)];
if( isDefined( spawnpoint ) )
{
self spawn( spawnpoint.origin, spawnpoint.angles );
}
}
first_player_connect()
{
// CODER_MOD: Bryce( 05/08/08 ): Useful output for debugging replay system
/#
if( getdebugdvar( "replay_debug" ) == "1" )
{
println( "File: _callbackglobal.gsc. Function: first_player_connect()\n" );
}
#/
waittillframeend;
if( isDefined( self ) )
{
level notify( "connecting", self );
players = get_players();
if( isdefined( players ) &&( players.size == 0 || players[0] == self ) )
{
level notify( "connecting_first_player", self );
self waittill( "spawned_player" );
waittillframeend;
level notify( "first_player_ready", self );
}
}
// CODER_MOD: Bryce( 05/08/08 ): Useful output for debugging replay system
/#
if( getdebugdvar( "replay_debug" ) == "1" )
{
println( "File: _callbackglobal.gsc. Function: first_player_connect() - COMPLETE\n" );
}
#/
}
menuLoadout( response )
{
// class = self maps\mp\gametypes\_class::getClassChoice( response );
println( "*************************************** " + response );
if( response != "back" )
{
self.pers["class"] = response;
}
self thread[[level.spawnClient]]();
}
setSpawnVariables()
{
resetTimeout();
// Stop shellshock and rumble
self StopShellshock();
self StopRumble( "damage_heavy" );
}