151 lines
4.1 KiB
C#
151 lines
4.1 KiB
C#
//-----------------------------------------------------------------------------
|
|
// Torque Game Engine
|
|
//
|
|
// Copyright (c) 2001 GarageGames.Com
|
|
// Portions Copyright (c) 2001 by Sierra Online, Inc.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Server mission loading
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// On every mission load except the first, there is a pause after
|
|
// the initial mission info is downloaded to the client.
|
|
$MissionLoadPause = 5000;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
function loadMission( %missionName, %isFirstMission )
|
|
{
|
|
endMission();
|
|
echo("*** LOADING MISSION: " @ %missionName);
|
|
echo("*** Stage 1 load");
|
|
|
|
// Reset all of these
|
|
clearCenterPrintAll();
|
|
clearBottomPrintAll();
|
|
clearServerPaths();
|
|
|
|
// increment the mission sequence (used for ghost sequencing)
|
|
$missionSequence++;
|
|
$missionRunning = false;
|
|
$Server::MissionFile = %missionName;
|
|
|
|
// Extract mission info from the mission file,
|
|
// including the display name and stuff to send
|
|
// to the client.
|
|
buildLoadInfo( %missionName );
|
|
|
|
// Download mission info to the clients
|
|
%count = ClientGroup.getCount();
|
|
for( %cl = 0; %cl < %count; %cl++ ) {
|
|
%client = ClientGroup.getObject( %cl );
|
|
if (!%client.isAIControlled())
|
|
sendLoadInfoToClient(%client);
|
|
}
|
|
|
|
// if this isn't the first mission, allow some time for the server
|
|
// to transmit information to the clients:
|
|
if( %isFirstMission || $Server::ServerType $= "SinglePlayer" )
|
|
loadMissionStage2();
|
|
else
|
|
schedule( $MissionLoadPause, ServerGroup, loadMissionStage2 );
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
function loadMissionStage2()
|
|
{
|
|
// Create the mission group off the ServerGroup
|
|
echo("*** Stage 2 load");
|
|
$instantGroup = ServerGroup;
|
|
|
|
// Make sure the mission exists
|
|
%file = $Server::MissionFile;
|
|
|
|
if( !isFile( %file ) ) {
|
|
error( "Could not find mission " @ %file );
|
|
return;
|
|
}
|
|
|
|
// Calculate the mission CRC. The CRC is used by the clients
|
|
// to caching mission lighting.
|
|
$missionCRC = getFileCRC( %file );
|
|
|
|
// Exec the mission, objects are added to the ServerGroup
|
|
exec(%file);
|
|
|
|
// If there was a problem with the load, let's try another mission
|
|
if( !isObject(MissionGroup) ) {
|
|
error( "No 'MissionGroup' found in mission \"" @ $missionName @ "\"." );
|
|
schedule( 3000, ServerGroup, CycleMissions );
|
|
return;
|
|
}
|
|
|
|
// Mission cleanup group
|
|
new SimGroup( MissionCleanup );
|
|
$instantGroup = MissionCleanup;
|
|
|
|
// Construct MOD paths
|
|
pathOnMissionLoadDone();
|
|
|
|
// Mission loading done...
|
|
echo("*** Mission loaded");
|
|
|
|
// Start all the clients in the mission
|
|
$missionRunning = true;
|
|
for( %clientIndex = 0; %clientIndex < ClientGroup.getCount(); %clientIndex++ )
|
|
ClientGroup.getObject(%clientIndex).loadMission();
|
|
|
|
// Go ahead and launch the game
|
|
onMissionLoaded();
|
|
purgeResources();
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
function endMission()
|
|
{
|
|
if (!isObject( MissionGroup ))
|
|
return;
|
|
|
|
echo("*** ENDING MISSION");
|
|
|
|
// Inform the game code we're done.
|
|
onMissionEnded();
|
|
|
|
// Inform the clients
|
|
for( %clientIndex = 0; %clientIndex < ClientGroup.getCount(); %clientIndex++ ) {
|
|
// clear ghosts and paths from all clients
|
|
%cl = ClientGroup.getObject( %clientIndex );
|
|
%cl.endMission();
|
|
%cl.resetGhosting();
|
|
%cl.clearPaths();
|
|
}
|
|
|
|
// Delete everything
|
|
MissionGroup.delete();
|
|
MissionCleanup.delete();
|
|
|
|
$ServerGroup.delete();
|
|
$ServerGroup = new SimGroup(ServerGroup);
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
function resetMission()
|
|
{
|
|
echo("*** MISSION RESET");
|
|
|
|
// Remove any temporary mission objects
|
|
MissionCleanup.delete();
|
|
$instantGroup = ServerGroup;
|
|
new SimGroup( MissionCleanup );
|
|
$instantGroup = MissionCleanup;
|
|
|
|
//
|
|
onMissionReset();
|
|
}
|