177 lines
5.7 KiB
C#
177 lines
5.7 KiB
C#
//-----------------------------------------------------------------------------
|
|
// Torque Game Engine
|
|
//
|
|
// Copyright (c) 2001 GarageGames.Com
|
|
// Portions Copyright (c) 2001 by Sierra Online, Inc.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// Functions dealing with connecting to a server
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Server connection error
|
|
//-----------------------------------------------------------------------------
|
|
|
|
addMessageCallback( 'MsgConnectionError', handleConnectionErrorMessage );
|
|
|
|
function handleConnectionErrorMessage(%msgType, %msgString, %msgError)
|
|
{
|
|
// On connect the server transmits a message to display if there
|
|
// are any problems with the connection. Most connection errors
|
|
// are game version differences, so hopefully the server message
|
|
// will tell us where to get the latest version of the game.
|
|
$ServerConnectionErrorMessage = %msgError;
|
|
}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// GameConnection client callbacks
|
|
//----------------------------------------------------------------------------
|
|
|
|
function GameConnection::initialControlSet(%this)
|
|
{
|
|
// this is BEYOND stupid but this engine doesn't set a good FOV without it:
|
|
%resolution = getResolution();
|
|
%horiz = getWord(%resolution, 0);
|
|
%verti = getWord(%resolution, 1);
|
|
// 74 = baseline vFOV
|
|
setFov(mFloor(2*mAtan(mTan((74 * 3.141592653 / 180) / 2) * (%horiz/%verti), 1) / 3.141592653 * 180));
|
|
echo ("*** Initial Control Object");
|
|
|
|
// The first control object has been set by the server
|
|
// and we are now ready to go.
|
|
|
|
// first check if the editor is active
|
|
if (!Editor::checkActiveLoadDone())
|
|
{
|
|
if (Canvas.getContent() != PlayGui.getId())
|
|
// reset the aDQ state, since we're setting interface content (which destroys all interfaces, including editors);
|
|
$alwaysDisqualify = 0;
|
|
Canvas.setContent(PlayGui);
|
|
}
|
|
}
|
|
|
|
function GameConnection::setLagIcon(%this, %state)
|
|
{
|
|
if (%this.getAddress() $= "local")
|
|
return;
|
|
LagIcon.setVisible(%state $= "true");
|
|
}
|
|
|
|
function GameConnection::onConnectionAccepted(%this)
|
|
{
|
|
// Called on the new connection object after connect() succeeds.
|
|
LagIcon.setVisible(false);
|
|
}
|
|
|
|
function GameConnection::onConnectionTimedOut(%this)
|
|
{
|
|
// Called when an established connection times out
|
|
disconnectedCleanup();
|
|
MessageBoxOK( "TIMED OUT", "The server connection has timed out.");
|
|
}
|
|
|
|
function GameConnection::onConnectionDropped(%this, %msg)
|
|
{
|
|
// Established connection was dropped by the server
|
|
disconnectedCleanup();
|
|
MessageBoxOK( "DISCONNECT", "The server has dropped the connection: " @ %msg);
|
|
}
|
|
|
|
function GameConnection::onConnectionError(%this, %msg)
|
|
{
|
|
// General connection error, usually raised by ghosted objects
|
|
// initialization problems, such as missing files. We'll display
|
|
// the server's connection error message.
|
|
disconnectedCleanup();
|
|
MessageBoxOK( "DISCONNECT", $ServerConnectionErrorMessage @ " (" @ %msg @ ")" );
|
|
}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Connection Failed Events
|
|
// These events aren't attached to a GameConnection object because they
|
|
// occur before one exists.
|
|
//----------------------------------------------------------------------------
|
|
|
|
function GameConnection::onConnectRequestRejected( %this, %msg )
|
|
{
|
|
switch$(%msg)
|
|
{
|
|
case "CR_INVALID_PROTOCOL_VERSION":
|
|
%error = "Incompatible protocol version: Your game version is not compatible with this server.";
|
|
case "CR_INVALID_CONNECT_PACKET":
|
|
%error = "Internal Error: badly formed network packet";
|
|
case "CR_YOUAREBANNED":
|
|
%error = "You are not allowed to play on this server.";
|
|
case "CR_SERVERFULL":
|
|
%error = "This server is full.";
|
|
case "CHR_PASSWORD":
|
|
// XXX Should put up a password-entry dialog.
|
|
if ($Client::Password $= "")
|
|
MessageBoxOK( "REJECTED", "That server requires a password.");
|
|
else {
|
|
$Client::Password = "";
|
|
MessageBoxOK( "REJECTED", "That password is incorrect.");
|
|
}
|
|
return;
|
|
case "CHR_PROTOCOL":
|
|
%error = "Incompatible protocol version: Your game version is not compatible with this server.";
|
|
case "CHR_CLASSCRC":
|
|
%error = "Incompatible game classes: Your game version is not compatible with this server.";
|
|
case "CHR_INVALID_CHALLENGE_PACKET":
|
|
%error = "Internal Error: Invalid server response packet";
|
|
default:
|
|
%error = "Connection error. Please try another server. Error code: (" @ %msg @ ")";
|
|
}
|
|
disconnectedCleanup();
|
|
MessageBoxOK( "REJECTED", %error);
|
|
}
|
|
|
|
function GameConnection::onConnectRequestTimedOut(%this)
|
|
{
|
|
disconnectedCleanup();
|
|
MessageBoxOK( "TIMED OUT", "Your connection to the server timed out." );
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Disconnect
|
|
//-----------------------------------------------------------------------------
|
|
|
|
function disconnect()
|
|
{
|
|
// Delete the connection if it's still there.
|
|
if (isObject(ServerConnection))
|
|
ServerConnection.delete();
|
|
disconnectedCleanup();
|
|
|
|
// Call destroyServer in case we're hosting
|
|
destroyServer();
|
|
}
|
|
|
|
function disconnectedCleanup()
|
|
{
|
|
// Clear misc script stuff
|
|
HudMessageVector.clear();
|
|
|
|
if (isObject(MusicPlayer))
|
|
MusicPlayer.stop();
|
|
//
|
|
//LagIcon.setVisible(false);
|
|
//PlayerListGui.clear();
|
|
|
|
// Clear all print messages
|
|
clientCmdclearBottomPrint();
|
|
clientCmdClearCenterPrint();
|
|
|
|
// Back to the launch screen
|
|
setPlayMissionGui();
|
|
|
|
// Dump anything we're not using
|
|
clearTextureHolds();
|
|
purgeResources();
|
|
stopDemo();
|
|
}
|
|
|