| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- // The general flow of a gane - server's creation, loading and hosting clients, and then destruction is as follows:
- // First, a client will always create a server in the event that they want to host a single player
- // game. Torque3D treats even single player connections as a soft multiplayer game, with some stuff
- // in the networking short-circuited to sidestep around lag and packet transmission times.
- // initServer() is called, loading the default server scripts.
- // After that, if this is a dedicated server session, initDedicated() is called, otherwise initClient is called
- // to prep a playable client session.
- // When a local game is started - a listen server - via calling StartGame() a server is created and then the client is
- // connected to it via createAndConnectToLocalServer().
- function ClientServer::create( %this )
- {
- echo("\n--------- Initializing Directory: scripts ---------");
- exec( "./scripts/client/client.cs" );
- exec( "./scripts/server/server.cs" );
- $Game::MissionGroup = "MissionGroup";
- initServer();
-
- %dbList = new ArrayObject(DatablockFilesList);
- // Start up in either client, or dedicated server mode
- if ($Server::Dedicated)
- {
- initDedicated();
- }
- else
- {
- initClient();
- }
- }
- function ClientServer::destroy( %this )
- {
- // Ensure that we are disconnected and/or the server is destroyed.
- // This prevents crashes due to the SceneGraph being deleted before
- // the objects it contains.
- if ($Server::Dedicated)
- destroyServer();
- else
- disconnect();
-
- // Destroy the physics plugin.
- //physicsDestroy();
-
- sfxShutdown();
-
- echo("Exporting client prefs");
- %prefPath = getPrefpath();
- export("$pref::*", %prefPath @ "/clientPrefs.cs", false);
- echo("Exporting server prefs");
- export("$Pref::Server::*", %prefPath @ "/serverPrefs.cs", false);
- BanList::Export(%prefPath @ "/banlist.cs");
- }
- //-----------------------------------------------------------------------------
- function StartGame( %mission, %hostingType )
- {
- if( %mission $= "" )
- {
- %id = CL_levelList.getSelectedId();
- %mission = getField(CL_levelList.getRowTextById(%id), 1);
- //error("Cannot start a level with no level selected!");
- }
- if (%hostingType !$= "")
- {
- %serverType = %hostingType;
- }
- else
- {
- if ($pref::HostMultiPlayer)
- %serverType = "MultiPlayer";
- else
- %serverType = "SinglePlayer";
- }
- // Show the loading screen immediately.
- if ( isObject( LoadingGui ) )
- {
- Canvas.setContent("LoadingGui");
- LoadingProgress.setValue(1);
- LoadingProgressTxt.setValue("LOADING MISSION FILE");
- Canvas.repaint();
- }
- createAndConnectToLocalServer( %serverType, %mission );
- }
- function JoinGame( %serverIndex )
- {
- // The server info index is stored in the row along with the
- // rest of displayed info.
- if( setServerInfo( %serverIndex ) )
- {
- Canvas.setContent("LoadingGui");
- LoadingProgress.setValue(1);
- LoadingProgressTxt.setValue("WAITING FOR SERVER");
- Canvas.repaint();
- %conn = new GameConnection(ServerConnection);
- %conn.setConnectArgs($pref::Player::Name);
- %conn.setJoinPassword($Client::Password);
- %conn.connect($ServerInfo::Address);
- }
- }
|