KevinBlast/marble/client/scripts/serverconnection.cs

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();
}