First version.
This commit is contained in:
commit
ef1c2cc347
473 files changed
+305366
No files matched your search
@@ -0,0 +1,180 @@
|
||||
/*
|
||||
===========================================================================
|
||||
Copyright (C) 1999-2005 Id Software, Inc.
|
||||
Copyright (C) 2000-2006 Tim Angus
|
||||
|
||||
This file is part of Tremulous.
|
||||
|
||||
Tremulous is free software; you can redistribute it
|
||||
and/or modify it under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the License,
|
||||
or (at your option) any later version.
|
||||
|
||||
Tremulous is distributed in the hope that it will be
|
||||
useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Tremulous; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
===========================================================================
|
||||
*/
|
||||
|
||||
// g_ptr.c -- post timeout restoration handling
|
||||
|
||||
#include "g_local.h"
|
||||
|
||||
static connectionRecord_t connections[ MAX_CLIENTS ];
|
||||
|
||||
/*
|
||||
===============
|
||||
G_CheckForUniquePTRC
|
||||
|
||||
Callback to detect ptrc clashes
|
||||
===============
|
||||
*/
|
||||
static qboolean G_CheckForUniquePTRC( int code )
|
||||
{
|
||||
int i;
|
||||
|
||||
if( code == 0 )
|
||||
return qfalse;
|
||||
|
||||
for( i = 0; i < MAX_CLIENTS; i++ )
|
||||
{
|
||||
if( connections[ i ].ptrCode == code )
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
return qtrue;
|
||||
}
|
||||
|
||||
/*
|
||||
===============
|
||||
G_UpdatePTRConnection
|
||||
|
||||
Update the data in a connection record
|
||||
===============
|
||||
*/
|
||||
void G_UpdatePTRConnection( gclient_t *client )
|
||||
{
|
||||
if( client && client->pers.connection )
|
||||
{
|
||||
client->pers.connection->clientTeam = client->pers.teamSelection;
|
||||
if( client->pers.teamSelection == PTE_NONE )
|
||||
client->pers.connection->clientCredit = client->pers.savedCredit;
|
||||
else
|
||||
client->pers.connection->clientCredit = client->ps.persistant[ PERS_CREDIT ];
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
===============
|
||||
G_GenerateNewConnection
|
||||
|
||||
Generates a new connection
|
||||
===============
|
||||
*/
|
||||
connectionRecord_t *G_GenerateNewConnection( gclient_t *client )
|
||||
{
|
||||
int code = 0;
|
||||
int i;
|
||||
|
||||
// this should be really random
|
||||
srand( trap_Milliseconds( ) );
|
||||
|
||||
// there is a very very small possibility that this
|
||||
// will loop infinitely
|
||||
do
|
||||
{
|
||||
code = rand( );
|
||||
} while( !G_CheckForUniquePTRC( code ) );
|
||||
|
||||
for( i = 0; i < MAX_CLIENTS; i++ )
|
||||
{
|
||||
//found an unused slot
|
||||
if( !connections[ i ].ptrCode )
|
||||
{
|
||||
connections[ i ].ptrCode = code;
|
||||
connections[ i ].clientNum = client->ps.clientNum;
|
||||
client->pers.connection = &connections[ i ];
|
||||
G_UpdatePTRConnection( client );
|
||||
|
||||
return &connections[ i ];
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
===============
|
||||
G_VerifyPTRC
|
||||
|
||||
Check a PTR code for validity
|
||||
===============
|
||||
*/
|
||||
qboolean G_VerifyPTRC( int code )
|
||||
{
|
||||
int i;
|
||||
|
||||
if( code == 0 )
|
||||
return qfalse;
|
||||
|
||||
for( i = 0; i < MAX_CLIENTS; i++ )
|
||||
{
|
||||
if( connections[ i ].ptrCode == code )
|
||||
return qtrue;
|
||||
}
|
||||
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
/*
|
||||
===============
|
||||
G_FindConnectionForCode
|
||||
|
||||
Finds a connection for a given code
|
||||
===============
|
||||
*/
|
||||
connectionRecord_t *G_FindConnectionForCode( int code )
|
||||
{
|
||||
int i;
|
||||
|
||||
if( code == 0 )
|
||||
return NULL;
|
||||
|
||||
for( i = 0; i < MAX_CLIENTS; i++ )
|
||||
{
|
||||
if( connections[ i ].ptrCode == code )
|
||||
return &connections[ i ];
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
===============
|
||||
G_DeletePTRConnection
|
||||
|
||||
Finds a connection and deletes it
|
||||
===============
|
||||
*/
|
||||
void G_DeletePTRConnection( connectionRecord_t *connection )
|
||||
{
|
||||
if( connection )
|
||||
memset( connection, 0, sizeof( connectionRecord_t ) );
|
||||
}
|
||||
|
||||
/*
|
||||
===============
|
||||
G_ResetPTRConnections
|
||||
|
||||
Invalidate any existing codes
|
||||
===============
|
||||
*/
|
||||
void G_ResetPTRConnections( void )
|
||||
{
|
||||
memset( connections, 0, sizeof( connectionRecord_t ) * MAX_CLIENTS );
|
||||
}
|
||||
Reference in new issue
Block a user