mirror of
https://github.com/FWGS/xash3d-fwgs.git
synced 2026-08-05 03:24:56 +08:00
engine: server: refactor variable declarations
This commit is contained in:
@@ -255,9 +255,7 @@ We don't do this search on a "reconnect, we just reuse the slot
|
||||
*/
|
||||
static sv_client_t *SV_FindEmptySlot( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
for( i = 0; i < svs.maxclients; i++ )
|
||||
for( int i = 0; i < svs.maxclients; i++ )
|
||||
{
|
||||
if( svs.clients[i].state == cs_free )
|
||||
return &svs.clients[i];
|
||||
@@ -268,11 +266,11 @@ static sv_client_t *SV_FindEmptySlot( void )
|
||||
|
||||
static void SV_MaybeNotifyPlayerCountChange( const sv_client_t *cl, const char *address )
|
||||
{
|
||||
int i, count = 0;
|
||||
int count = 0;
|
||||
|
||||
// if this was the first client on the server, or the last client
|
||||
// the server can hold, send a heartbeat to the master.
|
||||
for( i = 0; i < svs.maxclients; i++ )
|
||||
for( int i = 0; i < svs.maxclients; i++ )
|
||||
{
|
||||
if( svs.clients[i].state >= cs_connected )
|
||||
count++;
|
||||
@@ -299,7 +297,6 @@ static void SV_ConnectClient( netadr_t from )
|
||||
client_frame_t *frames;
|
||||
sv_client_t *newcl = NULL;
|
||||
int qport, version;
|
||||
int i;
|
||||
int challenge;
|
||||
const char *s;
|
||||
int extensions;
|
||||
@@ -369,7 +366,7 @@ static void SV_ConnectClient( netadr_t from )
|
||||
}
|
||||
|
||||
// if there is already a slot for this ip, reuse it
|
||||
for( i = 0; i < svs.maxclients; i++ )
|
||||
for( int i = 0; i < svs.maxclients; i++ )
|
||||
{
|
||||
sv_client_t *cl = &svs.clients[i];
|
||||
|
||||
@@ -798,8 +795,6 @@ static void SV_TestBandWidth( netadr_t from )
|
||||
{
|
||||
const int version = Q_atoi( Cmd_Argv( 1 ));
|
||||
const int packetsize = Q_atoi( Cmd_Argv( 2 ));
|
||||
uint32_t crc;
|
||||
int ofs;
|
||||
|
||||
// don't waste time of protocol mismatched
|
||||
if( version != PROTOCOL_VERSION )
|
||||
@@ -828,14 +823,14 @@ static void SV_TestBandWidth( netadr_t from )
|
||||
}
|
||||
|
||||
// don't go out of bounds
|
||||
ofs = packetsize - svs.testpacket_filepos - 1;
|
||||
int ofs = packetsize - svs.testpacket_filepos - 1;
|
||||
if(( ofs < 0 ) || ( ofs > svs.testpacket_filelen ))
|
||||
{
|
||||
SV_SendChallenge( from, true );
|
||||
return;
|
||||
}
|
||||
|
||||
crc = LittleLong( svs.testpacket_crcs[ofs] );
|
||||
uint32_t crc = LittleLong( svs.testpacket_crcs[ofs] );
|
||||
memcpy( svs.testpacket_crcpos, &crc, sizeof( crc ));
|
||||
|
||||
// send the datagram
|
||||
@@ -1058,7 +1053,6 @@ Redirect all printfs
|
||||
void SV_RemoteCommand( netadr_t from, sizebuf_t *msg )
|
||||
{
|
||||
const char *adr;
|
||||
int i;
|
||||
|
||||
if( !rcon_enable.value || COM_StringEmpty( rcon_password.string ))
|
||||
return;
|
||||
@@ -1075,7 +1069,7 @@ void SV_RemoteCommand( netadr_t from, sizebuf_t *msg )
|
||||
Log_Printf( "Rcon: \"%s\" from \"%s\"\n", MSG_GetData( msg ) + 4, adr );
|
||||
|
||||
remaining[0] = 0;
|
||||
for( i = 2; i < Cmd_Argc(); i++ )
|
||||
for( int i = 2; i < Cmd_Argc(); i++ )
|
||||
{
|
||||
p += Q_strncpy( p, "\"", sizeof( remaining ) - ( p - remaining ));
|
||||
p += Q_strncpy( p, Cmd_Argv( i ), sizeof( remaining ) - ( p - remaining ));
|
||||
@@ -1103,9 +1097,8 @@ recalc ping on current client
|
||||
int SV_CalcPing( const sv_client_t *cl )
|
||||
{
|
||||
float ping = 0;
|
||||
int i, count;
|
||||
int idx, back;
|
||||
client_frame_t *frame;
|
||||
int count;
|
||||
int back;
|
||||
|
||||
// bots don't have a real ping
|
||||
if( FBitSet( cl->flags, FCL_FAKECLIENT ) || !cl->frames )
|
||||
@@ -1120,10 +1113,10 @@ int SV_CalcPing( const sv_client_t *cl )
|
||||
|
||||
count = 0;
|
||||
|
||||
for( i = 0; i < back; i++ )
|
||||
for( int i = 0; i < back; i++ )
|
||||
{
|
||||
idx = cl->netchan.incoming_acknowledged + ~i;
|
||||
frame = &cl->frames[idx & SV_UPDATE_MASK];
|
||||
int idx = cl->netchan.incoming_acknowledged + ~i;
|
||||
client_frame_t *frame = &cl->frames[idx & SV_UPDATE_MASK];
|
||||
|
||||
if( frame->ping_time > 0.0f )
|
||||
{
|
||||
@@ -1147,7 +1140,6 @@ Finangles latency and the like.
|
||||
static void SV_EstablishTimeBase( sv_client_t *cl, const usercmd_t *cmds, int dropped, int numbackup, int numcmds )
|
||||
{
|
||||
double runcmd_time = 0.0;
|
||||
int i, cmdnum = dropped;
|
||||
|
||||
if( dropped < 24 )
|
||||
{
|
||||
@@ -1159,13 +1151,13 @@ static void SV_EstablishTimeBase( sv_client_t *cl, const usercmd_t *cmds, int dr
|
||||
|
||||
while( dropped > 0 )
|
||||
{
|
||||
cmdnum = dropped + numcmds - 1;
|
||||
int cmdnum = dropped + numcmds - 1;
|
||||
runcmd_time += (double)cmds[cmdnum].msec / 1000.0;
|
||||
dropped--;
|
||||
}
|
||||
}
|
||||
|
||||
for( i = numcmds - 1; i >= 0; i-- )
|
||||
for( int i = numcmds - 1; i >= 0; i-- )
|
||||
runcmd_time += cmds[i].msec / 1000.0;
|
||||
|
||||
cl->timebase = sv.time + sv.frametime - runcmd_time;
|
||||
@@ -1180,7 +1172,6 @@ compute latency for client
|
||||
*/
|
||||
static float SV_CalcClientTime( sv_client_t *cl )
|
||||
{
|
||||
float minping, maxping;
|
||||
float ping = 0.0f;
|
||||
int i, count = 0;
|
||||
int backtrack;
|
||||
@@ -1206,8 +1197,8 @@ static float SV_CalcClientTime( sv_client_t *cl )
|
||||
|
||||
if( !count ) return 0.0f;
|
||||
|
||||
minping = 9999.0f;
|
||||
maxping = -9999.0f;
|
||||
float minping = 9999.0f;
|
||||
float maxping = -9999.0f;
|
||||
ping /= count;
|
||||
|
||||
for( i = 0; i < ( SV_UPDATE_BACKUP <= 4 ? SV_UPDATE_BACKUP : 4 ); i++ )
|
||||
@@ -1241,12 +1232,11 @@ void SV_FullClientUpdate( sv_client_t *cl, sizebuf_t *msg )
|
||||
char info[MAX_INFO_STRING];
|
||||
char digest[16];
|
||||
MD5Context_t ctx;
|
||||
int i;
|
||||
|
||||
// process userinfo before updating
|
||||
SV_UserinfoChanged( cl );
|
||||
|
||||
i = cl - svs.clients;
|
||||
int i = cl - svs.clients;
|
||||
|
||||
MSG_BeginServerCmd( msg, svc_updateuserinfo );
|
||||
MSG_WriteUBitLong( msg, i, MAX_CLIENT_BITS );
|
||||
@@ -1367,7 +1357,6 @@ static void SV_PutClientInServer( sv_client_t *cl )
|
||||
{
|
||||
SAVERESTOREDATA levelData;
|
||||
string name;
|
||||
int i;
|
||||
|
||||
memset( &levelData, 0, sizeof( levelData ));
|
||||
svgame.globals->pSaveData = &levelData;
|
||||
@@ -1379,7 +1368,7 @@ static void SV_PutClientInServer( sv_client_t *cl )
|
||||
MSG_WriteString( &msg, name );
|
||||
MSG_WriteByte( &msg, levelData.connectionCount );
|
||||
|
||||
for( i = 0; i < levelData.connectionCount; i++ )
|
||||
for( int i = 0; i < levelData.connectionCount; i++ )
|
||||
MSG_WriteString( &msg, levelData.levelList[i].mapName );
|
||||
|
||||
svgame.globals->pSaveData = NULL;
|
||||
@@ -1608,9 +1597,7 @@ static qboolean SV_New_f( sv_client_t *cl )
|
||||
char szRejectReason[128];
|
||||
char szAddress[128];
|
||||
char szName[32];
|
||||
sv_client_t *cur;
|
||||
sizebuf_t msg;
|
||||
int i;
|
||||
|
||||
memset( msg_buf, 0, sizeof( msg_buf ));
|
||||
MSG_Init( &msg, "New", msg_buf, sizeof( msg_buf ));
|
||||
@@ -1643,8 +1630,10 @@ static qboolean SV_New_f( sv_client_t *cl )
|
||||
MSG_WriteStringf( &msg, "fullserverinfo \"%s\"\n", svs.serverinfo );
|
||||
|
||||
// collect the info about all the players and send to me
|
||||
for( i = 0, cur = svs.clients; i < svs.maxclients; i++, cur++ )
|
||||
for( int i = 0; i < svs.maxclients; i++ )
|
||||
{
|
||||
sv_client_t *cur = &svs.clients[i];
|
||||
|
||||
if( !cur->edict || cur->state != cs_spawned )
|
||||
continue; // not in game yet
|
||||
SV_FullClientUpdate( cur, &msg );
|
||||
@@ -2218,7 +2207,7 @@ static qboolean SV_ClientStatus_f( sv_client_t *cl )
|
||||
{
|
||||
netadr_t ip4, ip6;
|
||||
vec3_t origin = { 0 };
|
||||
int clients, bots, i;
|
||||
int clients, bots;
|
||||
|
||||
if( cl->state != cs_spawned )
|
||||
return false;
|
||||
@@ -2246,7 +2235,7 @@ static qboolean SV_ClientStatus_f( sv_client_t *cl )
|
||||
sv.name, (int)origin[0], (int)origin[1], (int)origin[2],
|
||||
clients, svs.maxclients );
|
||||
|
||||
for( i = 0; i < svs.maxclients; i++ )
|
||||
for( int i = 0; i < svs.maxclients; i++ )
|
||||
{
|
||||
const sv_client_t *pcl = &svs.clients[i];
|
||||
int j = 0;
|
||||
@@ -2301,7 +2290,6 @@ static edict_t *SV_GetCrossEnt( edict_t *player )
|
||||
float flMaxDot = 0.94;
|
||||
vec3_t forward;
|
||||
vec3_t viewPos;
|
||||
int i;
|
||||
float maxLen = 1000;
|
||||
|
||||
AngleVectors( player->v.v_angle, forward, NULL, NULL );
|
||||
@@ -2320,7 +2308,7 @@ static edict_t *SV_GetCrossEnt( edict_t *player )
|
||||
}
|
||||
|
||||
// check untraceable entities
|
||||
for ( i = 1; i < svgame.numEntities; i++, ent++ )
|
||||
for ( int i = 1; i < svgame.numEntities; i++, ent++ )
|
||||
{
|
||||
vec3_t vecLOS;
|
||||
vec3_t vecOrigin;
|
||||
@@ -2466,12 +2454,10 @@ Print list of entities to client
|
||||
static qboolean SV_EntList_f( sv_client_t *cl )
|
||||
{
|
||||
vec3_t borigin;
|
||||
edict_t *ent = NULL;
|
||||
int i;
|
||||
|
||||
for( i = 0; i < svgame.numEntities; i++ )
|
||||
for( int i = 0; i < svgame.numEntities; i++ )
|
||||
{
|
||||
ent = SV_EdictNum( i );
|
||||
edict_t *ent = SV_EdictNum( i );
|
||||
if( !SV_IsValidEdict( ent ))
|
||||
continue;
|
||||
|
||||
@@ -3437,18 +3423,16 @@ Parse resource list
|
||||
static void SV_ParseResourceList( sv_client_t *cl, sizebuf_t *msg )
|
||||
{
|
||||
int totalsize;
|
||||
resource_t *resource;
|
||||
int i, total;
|
||||
resourceinfo_t ri;
|
||||
|
||||
total = MSG_ReadShort( msg );
|
||||
int total = MSG_ReadShort( msg );
|
||||
|
||||
SV_ClearResourceList( &cl->resourcesneeded );
|
||||
SV_ClearResourceList( &cl->resourcesonhand );
|
||||
|
||||
for( i = 0; i < total; i++ )
|
||||
for( int i = 0; i < total; i++ )
|
||||
{
|
||||
resource = Z_Calloc( sizeof( resource_t ) );
|
||||
resource_t *resource = Z_Calloc( sizeof( resource_t ) );
|
||||
Q_strncpy( resource->szFileName, MSG_ReadString( msg ), sizeof( resource->szFileName ));
|
||||
resource->type = MSG_ReadByte( msg );
|
||||
resource->nIndex = MSG_ReadShort( msg );
|
||||
@@ -3570,7 +3554,6 @@ SV_ParseVoiceData
|
||||
static void SV_ParseVoiceData( sv_client_t *cl, sizebuf_t *msg )
|
||||
{
|
||||
char received[4096];
|
||||
int i;
|
||||
|
||||
const qboolean loopback = !!MSG_ReadByte( msg );
|
||||
const uint frames = MSG_ReadByte( msg );
|
||||
@@ -3598,7 +3581,7 @@ static void SV_ParseVoiceData( sv_client_t *cl, sizebuf_t *msg )
|
||||
if( svs.maxclients <= 1 && sv_voice_singleplayer.value == 0.0f )
|
||||
return;
|
||||
|
||||
for( i = 0; i < svs.maxclients; i++ )
|
||||
for( int i = 0; i < svs.maxclients; i++ )
|
||||
{
|
||||
sv_client_t *cur = &svs.clients[i];
|
||||
const qboolean local = cl == cur;
|
||||
|
||||
@@ -50,8 +50,6 @@ void SV_BroadcastPrintf( sv_client_t *ignore, const char *fmt, ... )
|
||||
{
|
||||
char string[MAX_SYSPATH];
|
||||
va_list argptr;
|
||||
sv_client_t *cl;
|
||||
int i;
|
||||
|
||||
va_start( argptr, fmt );
|
||||
Q_vsnprintf( string, sizeof( string ), fmt, argptr );
|
||||
@@ -59,6 +57,9 @@ void SV_BroadcastPrintf( sv_client_t *ignore, const char *fmt, ... )
|
||||
|
||||
if( sv.state == ss_active )
|
||||
{
|
||||
sv_client_t *cl;
|
||||
int i;
|
||||
|
||||
for( i = 0, cl = svs.clients; i < svs.maxclients; i++, cl++ )
|
||||
{
|
||||
if( FBitSet( cl->flags, FCL_FAKECLIENT ))
|
||||
@@ -111,9 +112,8 @@ Sets sv_client and sv_player to the player with idnum Cmd_Argv(1)
|
||||
*/
|
||||
static sv_client_t *SV_SetPlayer( void )
|
||||
{
|
||||
const char *s;
|
||||
sv_client_t *cl;
|
||||
int i, idnum;
|
||||
int i;
|
||||
|
||||
if( !svs.clients || sv.background )
|
||||
return NULL;
|
||||
@@ -124,12 +124,12 @@ static sv_client_t *SV_SetPlayer( void )
|
||||
return svs.clients;
|
||||
}
|
||||
|
||||
s = Cmd_Argv( 1 );
|
||||
const char *s = Cmd_Argv( 1 );
|
||||
|
||||
// numeric values are just slot numbers
|
||||
if( Q_isdigit( s ) || (s[0] == '-' && Q_isdigit( s + 1 )))
|
||||
{
|
||||
idnum = Q_atoi( s );
|
||||
int idnum = Q_atoi( s );
|
||||
|
||||
if( idnum < 0 || idnum >= svs.maxclients )
|
||||
{
|
||||
@@ -169,9 +169,7 @@ check map for typically errors
|
||||
*/
|
||||
static qboolean SV_ValidateMap( const char *pMapName )
|
||||
{
|
||||
int flags;
|
||||
|
||||
flags = SV_MapIsValid( pMapName, NULL );
|
||||
int flags = SV_MapIsValid( pMapName, NULL );
|
||||
|
||||
if( FBitSet( flags, MAP_INVALID_VERSION ))
|
||||
{
|
||||
@@ -230,8 +228,6 @@ static void SV_Maps_f( void )
|
||||
{
|
||||
const char *separator = "-------------------";
|
||||
const char *argStr = Cmd_Argv( 1 ); // Substr
|
||||
int nummaps;
|
||||
search_t *mapList;
|
||||
|
||||
if( Cmd_Argc() != 2 )
|
||||
{
|
||||
@@ -239,7 +235,7 @@ static void SV_Maps_f( void )
|
||||
return;
|
||||
}
|
||||
|
||||
mapList = FS_Search( va( "maps/*%s*.bsp", argStr ), true, true );
|
||||
search_t *mapList = FS_Search( va( "maps/*%s*.bsp", argStr ), true, true );
|
||||
|
||||
if( !mapList )
|
||||
{
|
||||
@@ -247,7 +243,7 @@ static void SV_Maps_f( void )
|
||||
return;
|
||||
}
|
||||
|
||||
nummaps = Cmd_ListMaps( mapList, NULL, 0, false );
|
||||
int nummaps = Cmd_ListMaps( mapList, NULL, 0, false );
|
||||
|
||||
Mem_Free( mapList );
|
||||
|
||||
@@ -310,10 +306,8 @@ For development work
|
||||
static void SV_NextMap_f( void )
|
||||
{
|
||||
char nextmap[MAX_QPATH];
|
||||
int i, next;
|
||||
search_t *t;
|
||||
search_t *t = FS_Search( "maps\\*.bsp", true, con_gamemaps.value ); // only in gamedir
|
||||
|
||||
t = FS_Search( "maps\\*.bsp", true, con_gamemaps.value ); // only in gamedir
|
||||
if( !t ) t = FS_Search( "maps/*.bsp", true, con_gamemaps.value ); // only in gamedir
|
||||
|
||||
if( !t )
|
||||
@@ -322,7 +316,7 @@ static void SV_NextMap_f( void )
|
||||
return;
|
||||
}
|
||||
|
||||
for( i = 0; i < t->numfilenames; i++ )
|
||||
for( int i = 0; i < t->numfilenames; i++ )
|
||||
{
|
||||
const char *ext = COM_FileExtension( t->filenames[i] );
|
||||
|
||||
@@ -333,7 +327,7 @@ static void SV_NextMap_f( void )
|
||||
if( Q_stricmp( sv_hostmap.string, nextmap ))
|
||||
continue;
|
||||
|
||||
next = ( i + 1 ) % t->numfilenames;
|
||||
int next = ( i + 1 ) % t->numfilenames;
|
||||
COM_FileBase( t->filenames[next], nextmap, sizeof( nextmap ));
|
||||
Cvar_DirectSet( &sv_hostmap, nextmap );
|
||||
|
||||
@@ -577,7 +571,6 @@ Kick a user off of the server
|
||||
static void SV_Kick_f( void )
|
||||
{
|
||||
sv_client_t *cl;
|
||||
const char *param;
|
||||
|
||||
if( Cmd_Argc() < 2 )
|
||||
{
|
||||
@@ -585,7 +578,7 @@ static void SV_Kick_f( void )
|
||||
return;
|
||||
}
|
||||
|
||||
param = Cmd_Argv( 1 );
|
||||
const char *param = Cmd_Argv( 1 );
|
||||
|
||||
if( *param == '#' && Q_isdigit( param + 1 ) )
|
||||
cl = SV_ClientById( Q_atoi( param + 1 ) );
|
||||
@@ -633,8 +626,6 @@ SV_Status_f
|
||||
*/
|
||||
static void SV_Status_f( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
#if !XASH_DEDICATED
|
||||
if( !svs.clients && CL_Active( ))
|
||||
{
|
||||
@@ -652,7 +643,7 @@ static void SV_Status_f( void )
|
||||
Con_Printf( "map: %s\n", sv.name );
|
||||
Con_Printf( "# score ping dev lastmsg qport useragent\t\tname\t\taddress\n" );
|
||||
|
||||
for( i = 0; i < svs.maxclients; i++ )
|
||||
for( int i = 0; i < svs.maxclients; i++ )
|
||||
{
|
||||
const sv_client_t *cl = &svs.clients[i];
|
||||
int j = 0;
|
||||
@@ -661,8 +652,6 @@ static void SV_Status_f( void )
|
||||
string version;
|
||||
string os;
|
||||
string arch;
|
||||
int buildnum;
|
||||
int input_devices;
|
||||
|
||||
if( !cl->state )
|
||||
continue;
|
||||
@@ -678,7 +667,7 @@ static void SV_Status_f( void )
|
||||
else
|
||||
s = va( "%8i", SV_CalcPing( cl ));
|
||||
|
||||
input_devices = Q_atoi( Info_ValueForKey( cl->useragent, "d" ));
|
||||
int input_devices = Q_atoi( Info_ValueForKey( cl->useragent, "d" ));
|
||||
|
||||
if( FBitSet( input_devices, INPUT_DEVICE_MOUSE ))
|
||||
devices[j++] = 'm';
|
||||
@@ -700,7 +689,7 @@ static void SV_Status_f( void )
|
||||
Q_strncpy( version, Info_ValueForKey( cl->useragent, "v" ), sizeof( version ));
|
||||
Q_strncpy( os, Info_ValueForKey( cl->useragent, "o" ), sizeof( os ));
|
||||
Q_strncpy( arch, Info_ValueForKey( cl->useragent, "a" ), sizeof( arch ));
|
||||
buildnum = Q_atoi( Info_ValueForKey( cl->useragent, "b" ));
|
||||
int buildnum = Q_atoi( Info_ValueForKey( cl->useragent, "b" ));
|
||||
|
||||
if( COM_StringEmpty( version ))
|
||||
Q_strncpy( version, "n/a", sizeof( version ));
|
||||
@@ -725,7 +714,6 @@ SV_ConSay_f
|
||||
*/
|
||||
static void SV_ConSay_f( void )
|
||||
{
|
||||
const char *p;
|
||||
char text[MAX_SYSPATH];
|
||||
|
||||
if( Cmd_Argc() < 2 ) return;
|
||||
@@ -736,7 +724,7 @@ static void SV_ConSay_f( void )
|
||||
return;
|
||||
}
|
||||
|
||||
p = Cmd_Args();
|
||||
const char *p = Cmd_Args();
|
||||
Q_strncpy( text, *p == '"' ? p + 1 : p, sizeof( text ));
|
||||
|
||||
if( *p == '"' )
|
||||
@@ -768,8 +756,6 @@ Examine or change the serverinfo string
|
||||
*/
|
||||
static void SV_ServerInfo_f( void )
|
||||
{
|
||||
convar_t *var;
|
||||
|
||||
if( Cmd_Argc() == 1 )
|
||||
{
|
||||
Con_Printf( "Server info settings:\n" );
|
||||
@@ -791,7 +777,7 @@ static void SV_ServerInfo_f( void )
|
||||
}
|
||||
|
||||
// if this is a cvar, change it too
|
||||
var = Cvar_FindVar( Cmd_Argv( 1 ));
|
||||
convar_t *var = Cvar_FindVar( Cmd_Argv( 1 ));
|
||||
if( var )
|
||||
{
|
||||
freestring( var->string ); // free the old value string
|
||||
@@ -922,15 +908,13 @@ SV_EdictUsage_f
|
||||
*/
|
||||
static void SV_EdictUsage_f( void )
|
||||
{
|
||||
int active;
|
||||
|
||||
if( sv.state != ss_active )
|
||||
{
|
||||
Con_Printf( "^3no server running.\n" );
|
||||
return;
|
||||
}
|
||||
|
||||
active = pfnNumberOfEntities();
|
||||
int active = pfnNumberOfEntities();
|
||||
Con_Printf( "%5i edicts is used\n", active );
|
||||
Con_Printf( "%5i edicts is free\n", GI->max_edicts - active );
|
||||
Con_Printf( "%5i total\n", GI->max_edicts );
|
||||
@@ -944,18 +928,15 @@ SV_EntityInfo_f
|
||||
*/
|
||||
static void SV_EntityInfo_f( void )
|
||||
{
|
||||
edict_t *ent;
|
||||
int i;
|
||||
|
||||
if( sv.state != ss_active )
|
||||
{
|
||||
Con_Printf( "^3no server running.\n" );
|
||||
return;
|
||||
}
|
||||
|
||||
for( i = 0; i < svgame.numEntities; i++ )
|
||||
for( int i = 0; i < svgame.numEntities; i++ )
|
||||
{
|
||||
ent = SV_EdictNum( i );
|
||||
edict_t *ent = SV_EdictNum( i );
|
||||
if( !SV_IsValidEdict( ent )) continue;
|
||||
|
||||
Con_Printf( "%5i origin: %.f %.f %.f", i, ent->v.origin[0], ent->v.origin[1], ent->v.origin[2] );
|
||||
|
||||
@@ -18,18 +18,13 @@ GNU General Public License for more details.
|
||||
|
||||
static void SV_CreateCustomizationList( sv_client_t *cl )
|
||||
{
|
||||
resource_t *pResource;
|
||||
customization_t *pList, *pCust;
|
||||
qboolean bFound;
|
||||
int nLumps;
|
||||
|
||||
cl->customdata.pNext = NULL;
|
||||
|
||||
for( pResource = cl->resourcesonhand.pNext; pResource != &cl->resourcesonhand; pResource = pResource->pNext )
|
||||
for( resource_t *pResource = cl->resourcesonhand.pNext; pResource != &cl->resourcesonhand; pResource = pResource->pNext )
|
||||
{
|
||||
bFound = false;
|
||||
qboolean bFound = false;
|
||||
|
||||
for( pList = cl->customdata.pNext; pList != NULL; pList = pList->pNext )
|
||||
for( customization_t *pList = cl->customdata.pNext; pList != NULL; pList = pList->pNext )
|
||||
{
|
||||
if( !memcmp( pList->resource.rgucMD5_hash, pResource->rgucMD5_hash, 16 ))
|
||||
{
|
||||
@@ -40,7 +35,8 @@ static void SV_CreateCustomizationList( sv_client_t *cl )
|
||||
|
||||
if( !bFound )
|
||||
{
|
||||
nLumps = 0;
|
||||
customization_t *pCust;
|
||||
int nLumps = 0;
|
||||
|
||||
if( COM_CreateCustomization( &cl->customdata, pResource, -1, FCUST_FROMHPAK|FCUST_WIPEDATA, &pCust, &nLumps ))
|
||||
{
|
||||
@@ -63,12 +59,10 @@ static void SV_CreateCustomizationList( sv_client_t *cl )
|
||||
|
||||
static qboolean SV_FileInConsistencyList( const char *filename, consistency_t **ppout )
|
||||
{
|
||||
int i;
|
||||
|
||||
if( ppout != NULL )
|
||||
*ppout = NULL;
|
||||
|
||||
for( i = 0; i < MAX_MODELS; i++ )
|
||||
for( int i = 0; i < MAX_MODELS; i++ )
|
||||
{
|
||||
consistency_t *pc = &sv.consistency_list[i];
|
||||
|
||||
@@ -88,16 +82,10 @@ static qboolean SV_FileInConsistencyList( const char *filename, consistency_t **
|
||||
|
||||
void SV_ParseConsistencyResponse( sv_client_t *cl, sizebuf_t *msg )
|
||||
{
|
||||
int i, c, idx, value;
|
||||
byte readbuffer[32];
|
||||
int c;
|
||||
byte nullbuffer[32];
|
||||
byte resbuffer[32];
|
||||
qboolean invalid_type;
|
||||
vec3_t cmins, cmaxs;
|
||||
int badresindex;
|
||||
vec3_t mins, maxs;
|
||||
FORCE_TYPE ft;
|
||||
resource_t *r;
|
||||
|
||||
memset( nullbuffer, 0, sizeof( nullbuffer ));
|
||||
invalid_type = false;
|
||||
@@ -106,7 +94,9 @@ void SV_ParseConsistencyResponse( sv_client_t *cl, sizebuf_t *msg )
|
||||
|
||||
while( MSG_ReadOneBit( msg ))
|
||||
{
|
||||
idx = MSG_ReadUBitLong( msg, MAX_MODEL_BITS );
|
||||
byte readbuffer[32];
|
||||
resource_t *r;
|
||||
int idx = MSG_ReadUBitLong( msg, MAX_MODEL_BITS );
|
||||
if( idx < 0 || idx >= sv.num_resources )
|
||||
break;
|
||||
|
||||
@@ -119,7 +109,7 @@ void SV_ParseConsistencyResponse( sv_client_t *cl, sizebuf_t *msg )
|
||||
|
||||
if( !memcmp( readbuffer, nullbuffer, 32 ))
|
||||
{
|
||||
value = MSG_ReadUBitLong( msg, 32 );
|
||||
int value = MSG_ReadUBitLong( msg, 32 );
|
||||
|
||||
LittleLongSW( value );
|
||||
|
||||
@@ -129,6 +119,11 @@ void SV_ParseConsistencyResponse( sv_client_t *cl, sizebuf_t *msg )
|
||||
}
|
||||
else
|
||||
{
|
||||
vec3_t cmins, cmaxs;
|
||||
vec3_t mins, maxs;
|
||||
byte resbuffer[32];
|
||||
FORCE_TYPE ft;
|
||||
|
||||
MSG_ReadBytes( msg, cmins, sizeof( cmins ));
|
||||
MSG_ReadBytes( msg, cmaxs, sizeof( cmaxs ));
|
||||
|
||||
@@ -148,7 +143,7 @@ void SV_ParseConsistencyResponse( sv_client_t *cl, sizebuf_t *msg )
|
||||
memcpy( mins, &resbuffer[0x01], sizeof( mins ));
|
||||
memcpy( maxs, &resbuffer[0x0D], sizeof( maxs ));
|
||||
|
||||
for( i = 0; i < 3; i++ )
|
||||
for( int i = 0; i < 3; i++ )
|
||||
{
|
||||
if( cmins[i] < mins[i] || cmaxs[i] > maxs[i] )
|
||||
{
|
||||
@@ -196,14 +191,13 @@ void SV_ParseConsistencyResponse( sv_client_t *cl, sizebuf_t *msg )
|
||||
void SV_TransferConsistencyInfo( void )
|
||||
{
|
||||
vec3_t mins, maxs;
|
||||
int i, total = 0;
|
||||
resource_t *pResource;
|
||||
string filepath;
|
||||
consistency_t *pc;
|
||||
int total = 0;
|
||||
|
||||
for( i = 0; i < sv.num_resources; i++ )
|
||||
for( int i = 0; i < sv.num_resources; i++ )
|
||||
{
|
||||
pResource = &sv.resources[i];
|
||||
string filepath;
|
||||
consistency_t *pc;
|
||||
resource_t *pResource = &sv.resources[i];
|
||||
|
||||
if( FBitSet( pResource->ucFlags, RES_CHECKFILE ))
|
||||
continue; // already checked?
|
||||
@@ -248,9 +242,6 @@ void SV_TransferConsistencyInfo( void )
|
||||
|
||||
static void SV_SendConsistencyList( sv_client_t *cl, sizebuf_t *msg )
|
||||
{
|
||||
int i, lastcheck;
|
||||
int delta;
|
||||
|
||||
if( svs.maxclients == 1 || !sv_consistency.value || !sv.num_consistency || FBitSet( cl->flags, FCL_HLTV_PROXY ))
|
||||
{
|
||||
ClearBits( cl->flags, FCL_FORCE_UNMODIFIED );
|
||||
@@ -260,14 +251,14 @@ static void SV_SendConsistencyList( sv_client_t *cl, sizebuf_t *msg )
|
||||
|
||||
SetBits( cl->flags, FCL_FORCE_UNMODIFIED );
|
||||
MSG_WriteOneBit( msg, 1 );
|
||||
lastcheck = 0;
|
||||
int lastcheck = 0;
|
||||
|
||||
for( i = 0; i < sv.num_resources; i++ )
|
||||
for( int i = 0; i < sv.num_resources; i++ )
|
||||
{
|
||||
if( !FBitSet( sv.resources[i].ucFlags, RES_CHECKFILE ))
|
||||
continue;
|
||||
|
||||
delta = i - lastcheck;
|
||||
int delta = i - lastcheck;
|
||||
MSG_WriteOneBit( msg, 1 );
|
||||
|
||||
if( delta > 31 )
|
||||
@@ -361,10 +352,9 @@ void SV_RemoveFromResourceList( resource_t *pResource )
|
||||
|
||||
void SV_ClearResourceList( resource_t *pList )
|
||||
{
|
||||
resource_t *p;
|
||||
resource_t *n;
|
||||
|
||||
for( p = pList->pNext; pList != p && p; p = n )
|
||||
for( resource_t *p = pList->pNext; pList != p && p; p = n )
|
||||
{
|
||||
n = p->pNext;
|
||||
|
||||
@@ -386,9 +376,8 @@ int SV_EstimateNeededResources( sv_client_t *cl )
|
||||
{
|
||||
int missing = 0;
|
||||
int size = 0;
|
||||
resource_t *p;
|
||||
|
||||
for( p = cl->resourcesneeded.pNext; p != &cl->resourcesneeded; p = p->pNext )
|
||||
for( resource_t *p = cl->resourcesneeded.pNext; p != &cl->resourcesneeded; p = p->pNext )
|
||||
{
|
||||
if( p->type != t_decal )
|
||||
continue;
|
||||
@@ -437,8 +426,6 @@ static void SV_Customization( sv_client_t *pClient, resource_t *pResource, qbool
|
||||
|
||||
static void SV_PropagateCustomizations( sv_client_t *pHost )
|
||||
{
|
||||
customization_t *pCust;
|
||||
resource_t *pResource;
|
||||
sv_client_t *cl;
|
||||
int i;
|
||||
|
||||
@@ -450,10 +437,10 @@ static void SV_PropagateCustomizations( sv_client_t *pHost )
|
||||
if( FBitSet( cl->flags, FCL_FAKECLIENT ))
|
||||
continue;
|
||||
|
||||
for( pCust = cl->customdata.pNext; pCust != NULL; pCust = pCust->pNext )
|
||||
for( customization_t *pCust = cl->customdata.pNext; pCust != NULL; pCust = pCust->pNext )
|
||||
{
|
||||
if( !pCust->bInUse ) continue;
|
||||
pResource = &pCust->resource;
|
||||
resource_t *pResource = &pCust->resource;
|
||||
SV_SendCustomization( pHost, i, pResource );
|
||||
}
|
||||
}
|
||||
@@ -502,10 +489,9 @@ void SV_RequestMissingResources( void )
|
||||
|
||||
void SV_BatchUploadRequest( sv_client_t *cl )
|
||||
{
|
||||
string filename;
|
||||
resource_t *p, *n;
|
||||
resource_t *n;
|
||||
|
||||
for( p = cl->resourcesneeded.pNext; p != &cl->resourcesneeded; p = n )
|
||||
for( resource_t *p = cl->resourcesneeded.pNext; p != &cl->resourcesneeded; p = n )
|
||||
{
|
||||
n = p->pNext;
|
||||
|
||||
@@ -519,6 +505,7 @@ void SV_BatchUploadRequest( sv_client_t *cl )
|
||||
{
|
||||
if( FBitSet( p->ucFlags, RES_CUSTOM ))
|
||||
{
|
||||
string filename;
|
||||
Q_snprintf( filename, sizeof( filename ), "!MD5%s", MD5_Print( p->rgucMD5_hash ));
|
||||
|
||||
if( SV_CheckFile( &cl->netchan.message, filename ))
|
||||
@@ -556,8 +543,6 @@ void SV_SendResource( resource_t *pResource, sizebuf_t *msg )
|
||||
|
||||
void SV_SendResources( sv_client_t *cl, sizebuf_t *msg )
|
||||
{
|
||||
int i;
|
||||
|
||||
MSG_BeginServerCmd( msg, svc_resourcerequest );
|
||||
MSG_WriteLong( msg, svs.spawncount );
|
||||
MSG_WriteLong( msg, 0 );
|
||||
@@ -571,7 +556,7 @@ void SV_SendResources( sv_client_t *cl, sizebuf_t *msg )
|
||||
MSG_BeginServerCmd( msg, svc_resourcelist );
|
||||
MSG_WriteUBitLong( msg, sv.num_resources, MAX_RESOURCE_BITS );
|
||||
|
||||
for( i = 0; i < sv.num_resources; i++ )
|
||||
for( int i = 0; i < sv.num_resources; i++ )
|
||||
{
|
||||
SV_SendResource( &sv.resources[i], msg );
|
||||
}
|
||||
|
||||
@@ -35,9 +35,9 @@ static cidfilter_t *cidfilter = NULL;
|
||||
|
||||
static void SV_RemoveID( const char *id )
|
||||
{
|
||||
cidfilter_t *filter, *prevfilter = NULL;
|
||||
cidfilter_t *prevfilter = NULL;
|
||||
|
||||
for( filter = cidfilter; filter; filter = filter->next )
|
||||
for( cidfilter_t *filter = cidfilter; filter; filter = filter->next )
|
||||
{
|
||||
if( Q_strcmp( filter->id, id ))
|
||||
{
|
||||
@@ -62,9 +62,8 @@ static void SV_RemoveID( const char *id )
|
||||
qboolean SV_CheckID( const char *id )
|
||||
{
|
||||
qboolean ret = false;
|
||||
cidfilter_t *filter;
|
||||
|
||||
for( filter = cidfilter; filter; filter = filter->next )
|
||||
for( cidfilter_t *filter = cidfilter; filter; filter = filter->next )
|
||||
{
|
||||
int len1 = Q_strlen( id ), len2 = Q_strlen( filter->id );
|
||||
int len = Q_min( len1, len2 );
|
||||
@@ -93,7 +92,6 @@ static void SV_BanID_f( void )
|
||||
float time = Q_atof( Cmd_Argv( 1 ));
|
||||
const char *id = Cmd_Argv( 2 );
|
||||
sv_client_t *cl = NULL;
|
||||
cidfilter_t *filter;
|
||||
|
||||
if( time )
|
||||
time = host.realtime + time * 60.0f;
|
||||
@@ -164,7 +162,7 @@ static void SV_BanID_f( void )
|
||||
|
||||
SV_RemoveID( id );
|
||||
|
||||
filter = Mem_Malloc( host.mempool, sizeof( cidfilter_t ));
|
||||
cidfilter_t *filter = Mem_Malloc( host.mempool, sizeof( cidfilter_t ));
|
||||
filter->endTime = time;
|
||||
filter->next = cidfilter;
|
||||
Q_strncpy( filter->id, id, sizeof( filter->id ));
|
||||
@@ -176,12 +174,10 @@ static void SV_BanID_f( void )
|
||||
|
||||
static void SV_ListID_f( void )
|
||||
{
|
||||
cidfilter_t *filter;
|
||||
|
||||
Con_Reportf( "id ban list\n" );
|
||||
Con_Reportf( "-----------\n" );
|
||||
|
||||
for( filter = cidfilter; filter; filter = filter->next )
|
||||
for( cidfilter_t *filter = cidfilter; filter; filter = filter->next )
|
||||
{
|
||||
if( filter->endTime && host.realtime > filter->endTime )
|
||||
continue; // no negative time
|
||||
@@ -219,7 +215,6 @@ static void SV_RemoveID_f( void )
|
||||
static void SV_WriteID_f( void )
|
||||
{
|
||||
file_t *f = FS_Open( Cvar_VariableString( "bannedcfgfile" ), "w", false );
|
||||
cidfilter_t *filter;
|
||||
|
||||
if( !f )
|
||||
{
|
||||
@@ -232,7 +227,7 @@ static void SV_WriteID_f( void )
|
||||
FS_Printf( f, "//\t\t %s - archive of id blacklist\n", Cvar_VariableString( "bannedcfgfile" ));
|
||||
FS_Printf( f, "//=======================================================================\n" );
|
||||
|
||||
for( filter = cidfilter; filter; filter = filter->next )
|
||||
for( cidfilter_t *filter = cidfilter; filter; filter = filter->next )
|
||||
if( !filter->endTime ) // only permanent
|
||||
FS_Printf( f, "banid 0 %s\n", filter->id );
|
||||
|
||||
@@ -249,8 +244,6 @@ static void SV_InitIDFilter( void )
|
||||
|
||||
static void SV_ShutdownIDFilter( void )
|
||||
{
|
||||
cidfilter_t *cidList, *cidNext;
|
||||
|
||||
// should be called manually because banned.cfg is not executed by engine
|
||||
//SV_WriteID_f();
|
||||
|
||||
@@ -259,7 +252,7 @@ static void SV_ShutdownIDFilter( void )
|
||||
Cmd_RemoveCommand( "removeid" );
|
||||
Cmd_RemoveCommand( "writeid" );
|
||||
|
||||
for( cidList = cidfilter; cidList; cidList = cidNext )
|
||||
for( cidfilter_t *cidList = cidfilter, *cidNext; cidList; cidList = cidNext )
|
||||
{
|
||||
cidNext = cidList->next;
|
||||
Mem_Free( cidList );
|
||||
@@ -352,9 +345,7 @@ static void SV_RemoveIPFilter( ipfilter_t *toremove, qboolean removeAll, qboolea
|
||||
qboolean SV_CheckIP( netadr_t *adr )
|
||||
{
|
||||
// TODO: ip rate limit
|
||||
ipfilter_t *entry = ipfilter;
|
||||
|
||||
for( ; entry; entry = entry->next )
|
||||
for( ipfilter_t *entry = ipfilter; entry; entry = entry->next )
|
||||
{
|
||||
if( entry->endTime && host.realtime > entry->endTime )
|
||||
continue; // expired
|
||||
@@ -400,7 +391,6 @@ static void SV_AddIP_f( void )
|
||||
const char *adr = Cmd_Argv( 2 );
|
||||
ipfilter_t filter, *newfilter;
|
||||
float minutes;
|
||||
int i;
|
||||
|
||||
if( Cmd_Argc() != 3 )
|
||||
{
|
||||
@@ -433,7 +423,7 @@ static void SV_AddIP_f( void )
|
||||
|
||||
ipfilter = newfilter;
|
||||
|
||||
for( i = 0; i < svs.maxclients; i++ )
|
||||
for( int i = 0; i < svs.maxclients; i++ )
|
||||
{
|
||||
netadr_t clientadr = svs.clients[i].netchan.remote_address;
|
||||
|
||||
@@ -448,7 +438,7 @@ static void SV_AddIP_f( void )
|
||||
static void SV_ListIP_f( void )
|
||||
{
|
||||
qboolean haveFilter = false;
|
||||
ipfilter_t filter, *f;
|
||||
ipfilter_t filter;
|
||||
|
||||
if( Cmd_Argc() > 2 )
|
||||
{
|
||||
@@ -476,7 +466,7 @@ static void SV_ListIP_f( void )
|
||||
|
||||
Con_Printf( "IP filter list:\n" );
|
||||
|
||||
for( f = ipfilter; f; f = f->next )
|
||||
for( ipfilter_t *f = ipfilter; f; f = f->next )
|
||||
{
|
||||
string filterStr;
|
||||
|
||||
@@ -515,7 +505,6 @@ static void SV_RemoveIP_f( void )
|
||||
static void SV_WriteIP_f( void )
|
||||
{
|
||||
file_t *fd = FS_Open( Cvar_VariableString( "listipcfgfile" ), "w", true );
|
||||
ipfilter_t *f;
|
||||
|
||||
if( !fd )
|
||||
{
|
||||
@@ -523,7 +512,7 @@ static void SV_WriteIP_f( void )
|
||||
return;
|
||||
}
|
||||
|
||||
for( f = ipfilter; f; f = f->next )
|
||||
for( ipfilter_t *f = ipfilter; f; f = f->next )
|
||||
{
|
||||
string filterStr;
|
||||
int size;
|
||||
@@ -549,12 +538,10 @@ static void SV_InitIPFilter( void )
|
||||
|
||||
static void SV_ShutdownIPFilter( void )
|
||||
{
|
||||
ipfilter_t *ipList, *ipNext;
|
||||
|
||||
// should be called manually because banned.cfg is not executed by engine
|
||||
//SV_WriteIP_f();
|
||||
|
||||
for( ipList = ipfilter; ipList; ipList = ipNext )
|
||||
for( ipfilter_t *ipList = ipfilter, *ipNext; ipList; ipList = ipNext )
|
||||
{
|
||||
ipNext = ipList->next;
|
||||
Mem_Free( ipList );
|
||||
@@ -582,7 +569,6 @@ void SV_ShutdownFilter( void )
|
||||
static void Test_StringToFilterAdr( void )
|
||||
{
|
||||
ipfilter_t f1;
|
||||
int i;
|
||||
struct
|
||||
{
|
||||
const char *str;
|
||||
@@ -614,7 +600,7 @@ static void Test_StringToFilterAdr( void )
|
||||
{ "fd8a:63d5:e014:0d62:ffff:ffff:ffff:ffff:ffff", false },
|
||||
};
|
||||
|
||||
for( i = 0; i < ARRAYSIZE( ipv4tests ); i++ )
|
||||
for( int i = 0; i < ARRAYSIZE( ipv4tests ); i++ )
|
||||
{
|
||||
qboolean ret = NET_StringToFilterAdr( ipv4tests[i].str, &f1.adr, &f1.prefixlen );
|
||||
|
||||
@@ -630,7 +616,7 @@ static void Test_StringToFilterAdr( void )
|
||||
}
|
||||
}
|
||||
|
||||
for( i = 0; i < ARRAYSIZE( ipv6tests ); i++ )
|
||||
for( int i = 0; i < ARRAYSIZE( ipv6tests ); i++ )
|
||||
{
|
||||
qboolean ret = NET_StringToFilterAdr( ipv6tests[i].str, &f1.adr, &f1.prefixlen );
|
||||
uint8_t x[16];
|
||||
@@ -662,7 +648,6 @@ static void Test_IPFilterIncludesIPFilter( void )
|
||||
"2a00:1370:8190:f9eb:3866:6126:330c:b82b" // 6
|
||||
};
|
||||
ipfilter_t f[7];
|
||||
int i;
|
||||
int tests[][3] =
|
||||
{
|
||||
// ipv4
|
||||
@@ -685,12 +670,12 @@ static void Test_IPFilterIncludesIPFilter( void )
|
||||
{ 6, 5, true },
|
||||
};
|
||||
|
||||
for( i = 0; i < 7; i++ )
|
||||
for( int i = 0; i < 7; i++ )
|
||||
{
|
||||
NET_StringToFilterAdr( adrs[i], &f[i].adr, &f[i].prefixlen );
|
||||
}
|
||||
|
||||
for( i = 0; i < ARRAYSIZE( tests ); i++ )
|
||||
for( int i = 0; i < ARRAYSIZE( tests ); i++ )
|
||||
{
|
||||
ret = SV_IPFilterIncludesIPFilter( &f[tests[i][0]], &f[tests[i][1]] );
|
||||
|
||||
|
||||
@@ -35,10 +35,8 @@ SV_EntityNumbers
|
||||
*/
|
||||
static int SV_EntityNumbers( const void *a, const void *b )
|
||||
{
|
||||
int ent1, ent2;
|
||||
|
||||
ent1 = ((entity_state_t *)a)->number;
|
||||
ent2 = ((entity_state_t *)b)->number;
|
||||
int ent1 = ((entity_state_t *)a)->number;
|
||||
int ent2 = ((entity_state_t *)b)->number;
|
||||
|
||||
// watcom libc compares ents with itself
|
||||
if( ent1 == ent2 )
|
||||
@@ -57,14 +55,10 @@ SV_AddEntitiesToPacket
|
||||
*/
|
||||
static void SV_AddEntitiesToPacket( edict_t *pViewEnt, edict_t *pClient, client_frame_t *frame, sv_ents_t *ents, qboolean from_client )
|
||||
{
|
||||
edict_t *ent;
|
||||
byte *clientpvs = NULL;
|
||||
byte *clientphs = NULL;
|
||||
qboolean fullvis = false;
|
||||
sv_client_t *cl = NULL;
|
||||
qboolean player;
|
||||
entity_state_t *state;
|
||||
int e;
|
||||
|
||||
// during an error shutdown message we may need to transmit
|
||||
// the shutdown message after the server has shutdown, so
|
||||
@@ -92,11 +86,12 @@ static void SV_AddEntitiesToPacket( edict_t *pViewEnt, edict_t *pClient, client_
|
||||
if( !clientpvs ) fullvis = true;
|
||||
|
||||
// g-cont: of course we can send world but not want to do it :-)
|
||||
for( e = 1; e < svgame.numEntities; e++ )
|
||||
for( int e = 1; e < svgame.numEntities; e++ )
|
||||
{
|
||||
byte *pset;
|
||||
|
||||
ent = SV_EdictNum( e );
|
||||
edict_t *ent = SV_EdictNum( e );
|
||||
qboolean player;
|
||||
entity_state_t *state;
|
||||
|
||||
// don't double add an entity through portals (in case this already added)
|
||||
if( CHECKVISBIT( ents->sended, e ))
|
||||
@@ -184,14 +179,13 @@ set frame to NULL to check for static entities
|
||||
int SV_FindBestBaseline( int index, entity_state_t **baseline, entity_state_t *to, client_frame_t *frame, qboolean player )
|
||||
{
|
||||
int bestBitCount;
|
||||
int i, bitCount;
|
||||
int bestfound, j;
|
||||
|
||||
bestBitCount = j = Delta_TestBaseline( *baseline, to, player, sv.time );
|
||||
bestfound = index;
|
||||
|
||||
// lookup backward for previous 64 states and try to interpret current delta as baseline
|
||||
for( i = index - 1; bestBitCount > 0 && i >= 0 && ( index - i ) < ( MAX_CUSTOM_BASELINES - 1 ); i-- )
|
||||
for( int i = index - 1; bestBitCount > 0 && i >= 0 && ( index - i ) < ( MAX_CUSTOM_BASELINES - 1 ); i-- )
|
||||
{
|
||||
// don't worry about underflow in circular buffer
|
||||
entity_state_t *test;
|
||||
@@ -204,7 +198,7 @@ int SV_FindBestBaseline( int index, entity_state_t **baseline, entity_state_t *t
|
||||
|
||||
if( to->entityType == test->entityType )
|
||||
{
|
||||
bitCount = Delta_TestBaseline( test, to, player, sv.time );
|
||||
int bitCount = Delta_TestBaseline( test, to, player, sv.time );
|
||||
|
||||
if( bitCount < bestBitCount )
|
||||
{
|
||||
@@ -236,7 +230,7 @@ static void SV_EmitPacketEntities( sv_client_t *cl, client_frame_t *to, sizebuf_
|
||||
{
|
||||
entity_state_t *oldent, *newent;
|
||||
int oldindex, newindex;
|
||||
int i, oldnum, newnum;
|
||||
int oldnum, newnum;
|
||||
qboolean player;
|
||||
int oldmax;
|
||||
client_frame_t *from;
|
||||
@@ -326,7 +320,7 @@ static void SV_EmitPacketEntities( sv_client_t *cl, client_frame_t *to, sizebuf_
|
||||
}
|
||||
else
|
||||
{
|
||||
for( i = 0; i < sv.num_instanced; i++ )
|
||||
for( int i = 0; i < sv.num_instanced; i++ )
|
||||
{
|
||||
if( !Q_strcmp( classname, sv.instanced[i].classname ))
|
||||
{
|
||||
@@ -372,17 +366,16 @@ static void SV_EmitEvents( sv_client_t *cl, client_frame_t *to, sizebuf_t *msg )
|
||||
{
|
||||
event_state_t *es;
|
||||
event_info_t *info;
|
||||
entity_state_t *state;
|
||||
event_args_t nullargs;
|
||||
int ev_count = 0;
|
||||
int count, ent_index;
|
||||
int i, j, ev;
|
||||
int i, j;
|
||||
|
||||
memset( &nullargs, 0, sizeof( nullargs ));
|
||||
es = &cl->events;
|
||||
|
||||
// count events
|
||||
for( ev = 0; ev < MAX_EVENT_QUEUE; ev++ )
|
||||
for( int ev = 0; ev < MAX_EVENT_QUEUE; ev++ )
|
||||
{
|
||||
if( es->ei[ev].index )
|
||||
ev_count++;
|
||||
@@ -404,7 +397,7 @@ static void SV_EmitEvents( sv_client_t *cl, client_frame_t *to, sizebuf_t *msg )
|
||||
|
||||
for( j = 0; j < to->num_entities; j++ )
|
||||
{
|
||||
state = &svs.packet_entities[(to->first_entity+j) % svs.num_client_entities];
|
||||
entity_state_t *state = &svs.packet_entities[(to->first_entity+j) % svs.num_client_entities];
|
||||
if( state->number == ent_index )
|
||||
break;
|
||||
}
|
||||
@@ -531,7 +524,6 @@ static void SV_WriteClientdataToMessage( sv_client_t *cl, sizebuf_t *msg )
|
||||
weapon_data_t *from_wd, *to_wd;
|
||||
client_frame_t *frame;
|
||||
edict_t *clent;
|
||||
int i;
|
||||
|
||||
memset( &nullcd, 0, sizeof( nullcd ));
|
||||
frame = &cl->frames[cl->netchan.outgoing_sequence & SV_UPDATE_MASK];
|
||||
@@ -590,7 +582,7 @@ static void SV_WriteClientdataToMessage( sv_client_t *cl, sizebuf_t *msg )
|
||||
{
|
||||
memset( &nullwd, 0, sizeof( nullwd ));
|
||||
|
||||
for( i = 0; i < MAX_LOCAL_WEAPONS; i++ )
|
||||
for( int i = 0; i < MAX_LOCAL_WEAPONS; i++ )
|
||||
{
|
||||
if( cl->delta_sequence == -1 ) from_wd = &nullwd;
|
||||
else from_wd = &cl->frames[cl->delta_sequence & SV_UPDATE_MASK].weapondata[i];
|
||||
@@ -613,9 +605,8 @@ SV_WriteEntitiesToClient
|
||||
static void SV_WriteEntitiesToClient( sv_client_t *cl, sizebuf_t *msg )
|
||||
{
|
||||
client_frame_t *frame;
|
||||
entity_state_t *state;
|
||||
static sv_ents_t frame_ents;
|
||||
int i, send_pings;
|
||||
int send_pings;
|
||||
|
||||
frame = &cl->frames[cl->netchan.outgoing_sequence & SV_UPDATE_MASK];
|
||||
send_pings = SV_ShouldUpdatePing( cl );
|
||||
@@ -656,10 +647,10 @@ static void SV_WriteEntitiesToClient( sv_client_t *cl, sizebuf_t *msg )
|
||||
frame->first_entity = svs.next_client_entities;
|
||||
frame->num_entities = 0;
|
||||
|
||||
for( i = 0; i < frame_ents.num_entities; i++ )
|
||||
for( int i = 0; i < frame_ents.num_entities; i++ )
|
||||
{
|
||||
// add it to the circular packet_entities array
|
||||
state = &svs.packet_entities[svs.next_client_entities % svs.num_client_entities];
|
||||
entity_state_t *state = &svs.packet_entities[svs.next_client_entities % svs.num_client_entities];
|
||||
*state = frame_ents.entities[i];
|
||||
svs.next_client_entities++;
|
||||
frame->num_entities++;
|
||||
@@ -821,7 +812,6 @@ void SV_SendClientMessages( void )
|
||||
{
|
||||
sv_client_t *cl;
|
||||
int i;
|
||||
double time_until_next_message;
|
||||
|
||||
if( sv.state == ss_dead )
|
||||
return;
|
||||
@@ -851,7 +841,7 @@ void SV_SendClientMessages( void )
|
||||
// If the target time for sending is within the next frame interval ( based on last frame ),
|
||||
// trigger the send now. Note that in single player,
|
||||
// FCL_SEND_NET_MESSAGE flag is also set any time a packet arrives from the client.
|
||||
time_until_next_message = cl->next_messagetime - ( host.realtime + sv.frametime );
|
||||
double time_until_next_message = cl->next_messagetime - ( host.realtime + sv.frametime );
|
||||
if( time_until_next_message <= 0.0 )
|
||||
SetBits( cl->flags, FCL_SEND_NET_MESSAGE );
|
||||
else if( time_until_next_message > 2.0 ) // something got hosed
|
||||
|
||||
@@ -164,12 +164,10 @@ update entity bounds, relink into world
|
||||
*/
|
||||
void SV_SetMinMaxSize( edict_t *e, const float *mins, const float *maxs, qboolean relink )
|
||||
{
|
||||
int i;
|
||||
|
||||
if( !SV_IsValidEdict( e ))
|
||||
return;
|
||||
|
||||
for( i = 0; i < 3; i++ )
|
||||
for( int i = 0; i < 3; i++ )
|
||||
{
|
||||
if( mins[i] > maxs[i] )
|
||||
{
|
||||
@@ -301,7 +299,6 @@ Check visibility through client camera, portal camera, etc
|
||||
*/
|
||||
static qboolean SV_CheckClientVisiblity( sv_client_t *cl, const byte *mask )
|
||||
{
|
||||
int i;
|
||||
vec3_t vieworg;
|
||||
mleaf_t *leaf;
|
||||
|
||||
@@ -319,7 +316,7 @@ static qboolean SV_CheckClientVisiblity( sv_client_t *cl, const byte *mask )
|
||||
return true; // visible from player view or camera view
|
||||
|
||||
// now check all the portal cameras
|
||||
for( i = 0; i < cl->num_viewents; i++ )
|
||||
for( int i = 0; i < cl->num_viewents; i++ )
|
||||
{
|
||||
edict_t *view = cl->viewentity[i];
|
||||
|
||||
@@ -532,7 +529,6 @@ qboolean SV_CreateStaticEntity( sizebuf_t *msg, int index )
|
||||
{
|
||||
entity_state_t nullstate, *baseline;
|
||||
entity_state_t *state;
|
||||
int offset;
|
||||
|
||||
if( index >= ( MAX_STATIC_ENTITIES - 1 ))
|
||||
{
|
||||
@@ -563,7 +559,7 @@ qboolean SV_CreateStaticEntity( sizebuf_t *msg, int index )
|
||||
state->number = 0;
|
||||
|
||||
// trying to compress with previous delta's
|
||||
offset = SV_FindBestBaseline( index, &baseline, state, NULL, false );
|
||||
int offset = SV_FindBestBaseline( index, &baseline, state, NULL, false );
|
||||
|
||||
MSG_BeginServerCmd( msg, svc_spawnstatic );
|
||||
MSG_WriteDeltaEntity( baseline, state, msg, true, DELTA_STATIC, sv.time, offset );
|
||||
@@ -580,13 +576,11 @@ Write all the static ents into demo
|
||||
*/
|
||||
void SV_RestartStaticEnts( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
// remove all the static entities on the client
|
||||
CL_ClearStaticEntities();
|
||||
|
||||
// resend them again
|
||||
for( i = 0; i < sv.num_static_entities; i++ )
|
||||
for( int i = 0; i < sv.num_static_entities; i++ )
|
||||
SV_CreateStaticEntity( &sv.reliable_datagram, i );
|
||||
}
|
||||
|
||||
@@ -617,7 +611,7 @@ void SV_RestartAmbientSounds( void )
|
||||
#if !XASH_DEDICATED
|
||||
soundlist_t soundInfo[256];
|
||||
string curtrack, looptrack;
|
||||
int i, nSounds;
|
||||
int nSounds;
|
||||
int position;
|
||||
|
||||
if( !SV_Active( ) || Host_IsDedicated( ))
|
||||
@@ -625,7 +619,7 @@ void SV_RestartAmbientSounds( void )
|
||||
|
||||
nSounds = S_GetCurrentStaticSounds( soundInfo, 256 );
|
||||
|
||||
for( i = 0; i < nSounds; i++ )
|
||||
for( int i = 0; i < nSounds; i++ )
|
||||
{
|
||||
soundlist_t *si = &soundInfo[i];
|
||||
|
||||
@@ -657,10 +651,8 @@ void SV_RestartDecals( void )
|
||||
// and better be reimplemented on client side
|
||||
#if !XASH_DEDICATED
|
||||
decallist_t *list;
|
||||
int decalIndex;
|
||||
int modelIndex;
|
||||
sizebuf_t *msg;
|
||||
int i, numdecals;
|
||||
int numdecals;
|
||||
|
||||
if( !SV_Active( ) || Host_IsDedicated( ))
|
||||
return;
|
||||
@@ -677,16 +669,16 @@ void SV_RestartDecals( void )
|
||||
msg = SV_GetReliableDatagram();
|
||||
|
||||
// restore decals and write them into network message
|
||||
for( i = 0; i < numdecals; i++ )
|
||||
for( int i = 0; i < numdecals; i++ )
|
||||
{
|
||||
decallist_t *entry = &list[i];
|
||||
modelIndex = SV_PEntityOfEntIndex( entry->entityIndex, true )->v.modelindex;
|
||||
int modelIndex = SV_PEntityOfEntIndex( entry->entityIndex, true )->v.modelindex;
|
||||
|
||||
// game override
|
||||
if( SV_RestoreCustomDecal( entry, SV_PEntityOfEntIndex( entry->entityIndex, true ), false ))
|
||||
continue;
|
||||
|
||||
decalIndex = pfnDecalIndex( entry->name );
|
||||
int decalIndex = pfnDecalIndex( entry->name );
|
||||
|
||||
// studiodecals will be restored at game-side
|
||||
if( !FBitSet( entry->flags, FDECAL_STUDIO ))
|
||||
@@ -1164,12 +1156,9 @@ release all the edicts from server
|
||||
*/
|
||||
void SV_FreeEdicts( void )
|
||||
{
|
||||
int i = 0;
|
||||
edict_t *ent;
|
||||
|
||||
for( i = 0; i < svgame.numEntities; i++ )
|
||||
for( int i = 0; i < svgame.numEntities; i++ )
|
||||
{
|
||||
ent = SV_EdictNum( i );
|
||||
edict_t *ent = SV_EdictNum( i );
|
||||
if( ent->free ) continue;
|
||||
SV_FreeEdict( ent );
|
||||
}
|
||||
@@ -1315,7 +1304,6 @@ pfnModelIndex
|
||||
static int GAME_EXPORT pfnModelIndex( const char *m )
|
||||
{
|
||||
char name[MAX_QPATH];
|
||||
int i;
|
||||
|
||||
if( COM_StringEmptyOrNULL( m ))
|
||||
return 0;
|
||||
@@ -1324,7 +1312,7 @@ static int GAME_EXPORT pfnModelIndex( const char *m )
|
||||
Q_strncpy( name, m, sizeof( name ));
|
||||
COM_FixSlashes( name );
|
||||
|
||||
for( i = 1; i < MAX_MODELS && sv.model_precache[i][0]; i++ )
|
||||
for( int i = 1; i < MAX_MODELS && sv.model_precache[i][0]; i++ )
|
||||
{
|
||||
if( !Q_stricmp( sv.model_precache[i], name ))
|
||||
return i;
|
||||
@@ -1484,17 +1472,15 @@ SV_FindEntityByString
|
||||
*/
|
||||
static edict_t *GAME_EXPORT SV_FindEntityByString( edict_t *pStartEdict, const char *pszField, const char *pszValue )
|
||||
{
|
||||
int i = 0, e = 0;
|
||||
int e = 0;
|
||||
const TYPEDESCRIPTION *desc = NULL;
|
||||
edict_t *ed;
|
||||
const char *t;
|
||||
|
||||
if( COM_StringEmptyOrNULL( pszValue ))
|
||||
return svgame.edicts;
|
||||
|
||||
if( pStartEdict ) e = NUM_FOR_EDICT( pStartEdict );
|
||||
|
||||
for( i = 0; i < ARRAYSIZE( gEntvarsDescription ); i++ )
|
||||
for( int i = 0; i < ARRAYSIZE( gEntvarsDescription ); i++ )
|
||||
{
|
||||
if( !Q_strcmp( pszField, gEntvarsDescription[i].fieldName ))
|
||||
{
|
||||
@@ -1511,7 +1497,9 @@ static edict_t *GAME_EXPORT SV_FindEntityByString( edict_t *pStartEdict, const c
|
||||
|
||||
for( e++; e < svgame.numEntities; e++ )
|
||||
{
|
||||
ed = SV_EdictNum( e );
|
||||
edict_t *ed = SV_EdictNum( e );
|
||||
const char *t;
|
||||
|
||||
if( !SV_IsValidEdict( ed )) continue;
|
||||
|
||||
if( e <= svs.maxclients && !SV_ClientFromEdict( ed, ( svs.maxclients != 1 )))
|
||||
@@ -1568,10 +1556,7 @@ find the entity in sphere
|
||||
*/
|
||||
static edict_t *GAME_EXPORT pfnFindEntityInSphere( edict_t *pStartEdict, const float *org, float flRadius )
|
||||
{
|
||||
float distSquared;
|
||||
int j, e = 0;
|
||||
float eorg;
|
||||
edict_t *ent;
|
||||
int e = 0;
|
||||
|
||||
flRadius *= flRadius;
|
||||
|
||||
@@ -1580,7 +1565,8 @@ static edict_t *GAME_EXPORT pfnFindEntityInSphere( edict_t *pStartEdict, const f
|
||||
|
||||
for( e++; e < svgame.numEntities; e++ )
|
||||
{
|
||||
ent = SV_EdictNum( e );
|
||||
edict_t *ent = SV_EdictNum( e );
|
||||
float distSquared = 0.0f;
|
||||
|
||||
if( !SV_IsValidEdict( ent ))
|
||||
continue;
|
||||
@@ -1589,10 +1575,10 @@ static edict_t *GAME_EXPORT pfnFindEntityInSphere( edict_t *pStartEdict, const f
|
||||
if( e <= svs.maxclients && !SV_ClientFromEdict( ent, true ))
|
||||
continue;
|
||||
|
||||
distSquared = 0.0f;
|
||||
|
||||
for( j = 0; j < 3 && distSquared <= flRadius; j++ )
|
||||
for( int j = 0; j < 3 && distSquared <= flRadius; j++ )
|
||||
{
|
||||
float eorg;
|
||||
|
||||
if( org[j] < ent->v.absmin[j] )
|
||||
eorg = org[j] - ent->v.absmin[j];
|
||||
else if( org[j] > ent->v.absmax[j] )
|
||||
@@ -1621,7 +1607,7 @@ static int SV_CheckClientPVS( int check, qboolean bMergePVS )
|
||||
byte *pvs;
|
||||
vec3_t vieworg;
|
||||
sv_client_t *cl;
|
||||
int i, j, k;
|
||||
int i;
|
||||
edict_t *ent = NULL;
|
||||
|
||||
// cycle to the next one
|
||||
@@ -1658,7 +1644,7 @@ static int SV_CheckClientPVS( int check, qboolean bMergePVS )
|
||||
if( !cl ) return i;
|
||||
|
||||
// now merge PVS with all the portal cameras
|
||||
for( k = 0; k < cl->num_viewents && bMergePVS; k++ )
|
||||
for( int k = 0; k < cl->num_viewents && bMergePVS; k++ )
|
||||
{
|
||||
edict_t *view = cl->viewentity[k];
|
||||
|
||||
@@ -1668,7 +1654,7 @@ static int SV_CheckClientPVS( int check, qboolean bMergePVS )
|
||||
VectorAdd( view->v.origin, view->v.view_ofs, vieworg );
|
||||
pvs = Mod_GetPVSForPoint( vieworg );
|
||||
|
||||
for( j = 0; j < world.visbytes && pvs; j++ )
|
||||
for( int j = 0; j < world.visbytes && pvs; j++ )
|
||||
SetBits( clientpvs[j], pvs[j] );
|
||||
}
|
||||
|
||||
@@ -1742,10 +1728,8 @@ pfnEntitiesInPVS
|
||||
*/
|
||||
static edict_t *pfnEntitiesInPVS( edict_t *pview )
|
||||
{
|
||||
edict_t *pchain, *ptest;
|
||||
edict_t *pchain;
|
||||
vec3_t viewpoint;
|
||||
edict_t *pent;
|
||||
int i;
|
||||
|
||||
if( !SV_IsValidEdict( pview ))
|
||||
return NULL;
|
||||
@@ -1753,9 +1737,10 @@ static edict_t *pfnEntitiesInPVS( edict_t *pview )
|
||||
VectorAdd( pview->v.origin, pview->v.view_ofs, viewpoint );
|
||||
pchain = SV_EdictNum( 0 );
|
||||
|
||||
for( i = 1; i < svgame.numEntities; i++ )
|
||||
for( int i = 1; i < svgame.numEntities; i++ )
|
||||
{
|
||||
pent = SV_EdictNum( i );
|
||||
edict_t *pent = SV_EdictNum( i );
|
||||
edict_t *ptest;
|
||||
|
||||
if( !SV_IsValidEdict( pent ))
|
||||
continue;
|
||||
@@ -2270,8 +2255,7 @@ static void GAME_EXPORT pfnGetAimVector( edict_t* ent, float speed, float *rgflR
|
||||
{
|
||||
edict_t *check;
|
||||
vec3_t start, dir, end, bestdir;
|
||||
float dist, bestdist;
|
||||
int i, j;
|
||||
float bestdist;
|
||||
trace_t tr;
|
||||
|
||||
VectorCopy( svgame.globals->v_forward, rgflReturn ); // assume failure if it returns early
|
||||
@@ -2298,8 +2282,10 @@ static void GAME_EXPORT pfnGetAimVector( edict_t* ent, float speed, float *rgflR
|
||||
else bestdist = 0;
|
||||
|
||||
check = SV_EdictNum( 1 ); // start at first client
|
||||
for( i = 1; i < svgame.numEntities; i++, check++ )
|
||||
for( int i = 1; i < svgame.numEntities; i++, check++ )
|
||||
{
|
||||
float dist;
|
||||
|
||||
if( check->v.takedamage != DAMAGE_AIM )
|
||||
continue;
|
||||
|
||||
@@ -2312,7 +2298,7 @@ static void GAME_EXPORT pfnGetAimVector( edict_t* ent, float speed, float *rgflR
|
||||
if( check == ent )
|
||||
continue;
|
||||
|
||||
for( j = 0; j < 3; j++ )
|
||||
for( int j = 0; j < 3; j++ )
|
||||
end[j] = check->v.origin[j] + 0.5f * (check->v.mins[j] + check->v.maxs[j]);
|
||||
|
||||
VectorSubtract( end, start, dir );
|
||||
@@ -2455,12 +2441,10 @@ register decal name on client
|
||||
*/
|
||||
int GAME_EXPORT pfnDecalIndex( const char *m )
|
||||
{
|
||||
int i;
|
||||
|
||||
if( COM_StringEmptyOrNULL( m ))
|
||||
return -1;
|
||||
|
||||
for( i = 1; i < MAX_DECALS && host.draw_decals[i][0]; i++ )
|
||||
for( int i = 1; i < MAX_DECALS && host.draw_decals[i][0]; i++ )
|
||||
{
|
||||
if( !Q_stricmp( host.draw_decals[i], m ))
|
||||
return i;
|
||||
@@ -2533,7 +2517,7 @@ pfnMessageBegin
|
||||
*/
|
||||
static void GAME_EXPORT pfnMessageBegin( int msg_dest, int msg_num, const float *pOrigin, edict_t *ed )
|
||||
{
|
||||
int i, iSize;
|
||||
int iSize;
|
||||
|
||||
if( svgame.msg_started )
|
||||
Host_Error( "%s: New message started when msg '%s' has not been sent yet\n", __func__, svgame.msg_name );
|
||||
@@ -2567,6 +2551,8 @@ static void GAME_EXPORT pfnMessageBegin( int msg_dest, int msg_num, const float
|
||||
}
|
||||
else
|
||||
{
|
||||
int i;
|
||||
|
||||
// check for existing
|
||||
for( i = 1; i < MAX_USER_MESSAGES && svgame.msg[i].name[0]; i++ )
|
||||
{
|
||||
@@ -3387,11 +3373,9 @@ pfnIndexOfEdict
|
||||
*/
|
||||
int GAME_EXPORT pfnIndexOfEdict( const edict_t *pEdict )
|
||||
{
|
||||
int number;
|
||||
|
||||
if( !pEdict ) return 0; // world ?
|
||||
|
||||
number = NUM_FOR_EDICT( pEdict );
|
||||
int number = NUM_FOR_EDICT( pEdict );
|
||||
if( number < 0 || number > GI->max_edicts )
|
||||
Host_Error( "bad entity number %d\n", number );
|
||||
return number;
|
||||
@@ -3429,15 +3413,12 @@ debug thing
|
||||
*/
|
||||
static edict_t *GAME_EXPORT pfnFindEntityByVars( entvars_t *pvars )
|
||||
{
|
||||
edict_t *pEdict;
|
||||
int i;
|
||||
|
||||
// don't pass invalid arguments
|
||||
if( !pvars ) return NULL;
|
||||
|
||||
for( i = 0; i < GI->max_edicts; i++ )
|
||||
for( int i = 0; i < GI->max_edicts; i++ )
|
||||
{
|
||||
pEdict = SV_EdictNum( i );
|
||||
edict_t *pEdict = SV_EdictNum( i );
|
||||
|
||||
// g-cont: we should compare pointers
|
||||
if( &pEdict->v == pvars )
|
||||
@@ -3863,9 +3844,9 @@ returns actual entity count
|
||||
*/
|
||||
int GAME_EXPORT pfnNumberOfEntities( void )
|
||||
{
|
||||
int i, total = 0;
|
||||
int total = 0;
|
||||
|
||||
for( i = 0; i < svgame.numEntities; i++ )
|
||||
for( int i = 0; i < svgame.numEntities; i++ )
|
||||
{
|
||||
if( svgame.edicts[i].free )
|
||||
continue;
|
||||
@@ -4030,7 +4011,7 @@ void GAME_EXPORT SV_PlaybackEventFull( int flags, const edict_t *pInvoker, word
|
||||
event_state_t *es;
|
||||
event_args_t args;
|
||||
event_info_t *ei = NULL;
|
||||
int j, slot, bestslot;
|
||||
int j, bestslot;
|
||||
int invokerIndex;
|
||||
byte *mask = NULL;
|
||||
vec3_t pvspoint;
|
||||
@@ -4138,7 +4119,8 @@ void GAME_EXPORT SV_PlaybackEventFull( int flags, const edict_t *pInvoker, word
|
||||
}
|
||||
|
||||
// process all the clients
|
||||
for( slot = 0, cl = svs.clients; slot < svs.maxclients; slot++, cl++ )
|
||||
cl = svs.clients;
|
||||
for( int slot = 0; slot < svs.maxclients; slot++, cl++ )
|
||||
{
|
||||
if( cl->state != cs_spawned || !cl->edict || FBitSet( cl->flags, FCL_FAKECLIENT ))
|
||||
continue;
|
||||
@@ -4328,7 +4310,7 @@ pfnCheckVisibility
|
||||
*/
|
||||
static int GAME_EXPORT pfnCheckVisibility( const edict_t *ent, byte *pset )
|
||||
{
|
||||
int i, leafnum;
|
||||
int i;
|
||||
qboolean large_leafs = FBitSet( sv.worldmodel->flags, MODEL_QBSP2 );
|
||||
|
||||
if( !SV_IsValidEdict( ent ))
|
||||
@@ -4361,6 +4343,8 @@ static int GAME_EXPORT pfnCheckVisibility( const edict_t *ent, byte *pset )
|
||||
}
|
||||
else
|
||||
{
|
||||
int leafnum;
|
||||
|
||||
for( i = 0; i < MAX_ENT_LEAFS( large_leafs ); i++ )
|
||||
{
|
||||
if( large_leafs )
|
||||
@@ -4496,17 +4480,14 @@ pfnForceUnmodified
|
||||
*/
|
||||
static void GAME_EXPORT pfnForceUnmodified( FORCE_TYPE type, float *mins, float *maxs, const char *filename )
|
||||
{
|
||||
consistency_t *pc;
|
||||
int i;
|
||||
|
||||
if( COM_StringEmptyOrNULL( filename ))
|
||||
return;
|
||||
|
||||
if( sv.state == ss_loading )
|
||||
{
|
||||
for( i = 0; i < MAX_MODELS; i++ )
|
||||
for( int i = 0; i < MAX_MODELS; i++ )
|
||||
{
|
||||
pc = &sv.consistency_list[i];
|
||||
consistency_t *pc = &sv.consistency_list[i];
|
||||
|
||||
if( !pc->filename )
|
||||
{
|
||||
@@ -4523,9 +4504,9 @@ static void GAME_EXPORT pfnForceUnmodified( FORCE_TYPE type, float *mins, float
|
||||
}
|
||||
else
|
||||
{
|
||||
for( i = 0; i < MAX_MODELS; i++ )
|
||||
for( int i = 0; i < MAX_MODELS; i++ )
|
||||
{
|
||||
pc = &sv.consistency_list[i];
|
||||
consistency_t *pc = &sv.consistency_list[i];
|
||||
if( !pc->filename ) continue;
|
||||
|
||||
if( !Q_strcmp( filename, pc->filename ))
|
||||
@@ -4886,7 +4867,7 @@ static qboolean SV_ParseEdict( char **pfile, edict_t *ent )
|
||||
{
|
||||
KeyValueData pkvd[256]; // per one entity
|
||||
qboolean adjust_origin = false, customentity;
|
||||
int i, numpairs = 0;
|
||||
int numpairs = 0;
|
||||
const char *classname = NULL;
|
||||
|
||||
// go through all the dictionary pairs
|
||||
@@ -5008,7 +4989,7 @@ static qboolean SV_ParseEdict( char **pfile, edict_t *ent )
|
||||
}
|
||||
#endif
|
||||
|
||||
for( i = 0; i < numpairs; i++ )
|
||||
for( int i = 0; i < numpairs; i++ )
|
||||
{
|
||||
char *keyname, *value;
|
||||
char temp[MAX_VA_STRING];
|
||||
@@ -5080,7 +5061,6 @@ static void SV_LoadFromFile( const char *mapname, char *entities )
|
||||
{
|
||||
char token[2048];
|
||||
qboolean create_world = true;
|
||||
int inhibited;
|
||||
edict_t *ent;
|
||||
|
||||
Assert( entities != NULL );
|
||||
@@ -5088,7 +5068,7 @@ static void SV_LoadFromFile( const char *mapname, char *entities )
|
||||
// user dll can override spawn entities function (Xash3D extension)
|
||||
if( !svgame.physFuncs.SV_LoadEntities || !svgame.physFuncs.SV_LoadEntities( mapname, entities ))
|
||||
{
|
||||
inhibited = 0;
|
||||
int inhibited = 0;
|
||||
|
||||
// parse ents
|
||||
while(( entities = COM_ParseFile( entities, token, sizeof( token ))) != NULL )
|
||||
@@ -5213,7 +5193,7 @@ void SV_UnloadProgs( void )
|
||||
|
||||
qboolean SV_LoadProgs( const char *name )
|
||||
{
|
||||
int i, version;
|
||||
int version;
|
||||
static APIFUNCTION GetEntityAPI;
|
||||
static APIFUNCTION2 GetEntityAPI2;
|
||||
static GIVEFNPTRSTODLL GiveFnptrsToDll;
|
||||
@@ -5221,7 +5201,6 @@ qboolean SV_LoadProgs( const char *name )
|
||||
static enginefuncs_t gpEngfuncs;
|
||||
static globalvars_t gpGlobals;
|
||||
static playermove_t gpMove;
|
||||
edict_t *e;
|
||||
qboolean init_entity_api = false;
|
||||
|
||||
if( svgame.hInstance )
|
||||
@@ -5342,8 +5321,8 @@ qboolean SV_LoadProgs( const char *name )
|
||||
svs.baselines = Z_Calloc( sizeof( entity_state_t ) * GI->max_edicts );
|
||||
svgame.numEntities = svs.maxclients + 1; // clients + world
|
||||
|
||||
for( i = 0, e = svgame.edicts; i < GI->max_edicts; i++, e++ )
|
||||
e->free = true; // mark all edicts as freed
|
||||
for( int i = 0; i < GI->max_edicts; i++ )
|
||||
svgame.edicts[i].free = true; // mark all edicts as freed
|
||||
|
||||
Cvar_FullSet( "host_gameloaded", "1", FCVAR_READ_ONLY );
|
||||
SV_AllocStringPool();
|
||||
|
||||
@@ -301,7 +301,6 @@ static void SV_ReadResourceList( const char *filename )
|
||||
string token;
|
||||
byte *afile;
|
||||
char *pfile;
|
||||
resourcetype_t restype;
|
||||
|
||||
afile = FS_LoadFile( filename, NULL, false );
|
||||
if( !afile ) return;
|
||||
@@ -313,6 +312,8 @@ static void SV_ReadResourceList( const char *filename )
|
||||
|
||||
while(( pfile = COM_ParseFile( pfile, token, sizeof( token ))) != NULL )
|
||||
{
|
||||
resourcetype_t restype;
|
||||
|
||||
if( !COM_IsSafeFileToDownload( token ))
|
||||
continue;
|
||||
|
||||
@@ -349,7 +350,6 @@ loads external resource list
|
||||
static void SV_CreateGenericResources( void )
|
||||
{
|
||||
string filename;
|
||||
int i;
|
||||
|
||||
Q_strncpy( filename, sv.model_precache[1], sizeof( filename ));
|
||||
COM_ReplaceExtension( filename, ".res", sizeof( filename ));
|
||||
@@ -359,7 +359,7 @@ static void SV_CreateGenericResources( void )
|
||||
SV_ReadResourceList( "reslist.txt" );
|
||||
|
||||
// precache wads so client can knows this map needs some extra wad files
|
||||
for( i = 0; i < world.wadcount; i++ )
|
||||
for( int i = 0; i < world.wadcount; i++ )
|
||||
{
|
||||
if( world.wadlist[i].usage > 0 )
|
||||
SV_GenericIndex( world.wadlist[i].name );
|
||||
@@ -375,7 +375,6 @@ add resources to common list
|
||||
*/
|
||||
static void SV_CreateResourceList( void )
|
||||
{
|
||||
qboolean ffirstsent = false;
|
||||
int i, nSize;
|
||||
char *s;
|
||||
|
||||
@@ -389,6 +388,7 @@ static void SV_CreateResourceList( void )
|
||||
SV_AddResource( t_generic, s, nSize, RES_FATALIFMISSING, i );
|
||||
}
|
||||
|
||||
qboolean ffirstsent = false;
|
||||
for( i = 1; i < MAX_SOUNDS; i++ )
|
||||
{
|
||||
s = sv.sound_precache[i];
|
||||
@@ -554,10 +554,9 @@ remove immediate entities
|
||||
void SV_FreeOldEntities( void )
|
||||
{
|
||||
edict_t *ent;
|
||||
int i;
|
||||
|
||||
// at end of frame kill all entities which supposed to it
|
||||
for( i = svs.maxclients + 1; i < svgame.numEntities; i++ )
|
||||
for( int i = svs.maxclients + 1; i < svgame.numEntities; i++ )
|
||||
{
|
||||
ent = SV_EdictNum( i );
|
||||
|
||||
@@ -681,7 +680,6 @@ deactivate server, free edicts, strings etc
|
||||
*/
|
||||
void SV_DeactivateServer( void )
|
||||
{
|
||||
int i;
|
||||
const char *cycle = Cvar_VariableString( "disconcfgfile" );
|
||||
|
||||
if( !COM_StringEmptyOrNULL( cycle ))
|
||||
@@ -706,7 +704,7 @@ void SV_DeactivateServer( void )
|
||||
SV_EmptyStringPool( true );
|
||||
Mem_EmptyPool( svgame.stringspool );
|
||||
|
||||
for( i = 0; i < svs.maxclients; i++ )
|
||||
for( int i = 0; i < svs.maxclients; i++ )
|
||||
{
|
||||
// release client frames
|
||||
if( svs.clients[i].frames )
|
||||
@@ -860,7 +858,6 @@ static void SV_GenerateTestPacket( void )
|
||||
uint32_t crc;
|
||||
file_t *file;
|
||||
byte *filepos;
|
||||
int i;
|
||||
|
||||
if( !sv_allow_testpacket.value )
|
||||
{
|
||||
@@ -907,7 +904,7 @@ static void SV_GenerateTestPacket( void )
|
||||
crc = 0; // intentional omit of CRC32_Init because of the client
|
||||
|
||||
// TODO: shrink to minimum!
|
||||
for( i = 0; i < svs.testpacket_filelen; i++ )
|
||||
for( int i = 0; i < svs.testpacket_filelen; i++ )
|
||||
{
|
||||
CRC32_ProcessByte( &crc, filepos[i] );
|
||||
svs.testpacket_crcs[i] = crc;
|
||||
@@ -934,9 +931,7 @@ clients along with it.
|
||||
*/
|
||||
qboolean SV_SpawnServer( const char *mapname, const char *startspot, qboolean background )
|
||||
{
|
||||
int i, current_skill;
|
||||
edict_t *ent;
|
||||
const char *cycle;
|
||||
int i;
|
||||
|
||||
SV_SetupClients();
|
||||
|
||||
@@ -959,7 +954,7 @@ qboolean SV_SpawnServer( const char *mapname, const char *startspot, qboolean ba
|
||||
for( i = 0; i < ARRAYSIZE( svs.challenge_salt ); i++ )
|
||||
svs.challenge_salt[i] = COM_RandomLong( 0, 0x7FFFFFFE );
|
||||
|
||||
cycle = Cvar_VariableString( "mapchangecfgfile" );
|
||||
const char *cycle = Cvar_VariableString( "mapchangecfgfile" );
|
||||
|
||||
if( !COM_StringEmptyOrNULL( cycle ))
|
||||
Cbuf_AddTextf( "exec %s\n", cycle );
|
||||
@@ -996,7 +991,7 @@ qboolean SV_SpawnServer( const char *mapname, const char *startspot, qboolean ba
|
||||
|
||||
// make cvars consistant
|
||||
if( coop.value ) Cvar_SetValue( "deathmatch", 0 );
|
||||
current_skill = Q_rint( skill.value );
|
||||
int current_skill = Q_rint( skill.value );
|
||||
current_skill = bound( 0, current_skill, 3 );
|
||||
Cvar_SetValue( "skill", (float)current_skill );
|
||||
|
||||
@@ -1053,6 +1048,8 @@ qboolean SV_SpawnServer( const char *mapname, const char *startspot, qboolean ba
|
||||
// leave slots at start for clients only
|
||||
for( i = 0; i < svs.maxclients; i++ )
|
||||
{
|
||||
edict_t *ent;
|
||||
|
||||
// needs to reconnect
|
||||
if( svs.clients[i].state > cs_connected )
|
||||
svs.clients[i].state = cs_connected;
|
||||
|
||||
@@ -18,12 +18,9 @@ GNU General Public License for more details.
|
||||
|
||||
void Log_Open( void )
|
||||
{
|
||||
time_t ltime;
|
||||
struct tm *today;
|
||||
char szFileBase[ MAX_OSPATH ];
|
||||
char szTestFile[ MAX_OSPATH ];
|
||||
file_t *fp = NULL;
|
||||
const char *temp;
|
||||
int i;
|
||||
|
||||
if( !svs.log.active )
|
||||
@@ -41,9 +38,10 @@ void Log_Open( void )
|
||||
Log_Close();
|
||||
|
||||
// Find a new log file slot
|
||||
time_t ltime;
|
||||
time( <ime );
|
||||
today = localtime( <ime );
|
||||
temp = Cvar_VariableString( "logsdir" );
|
||||
const struct tm *today = localtime( <ime );
|
||||
const char *temp = Cvar_VariableString( "logsdir" );
|
||||
|
||||
if( !COM_StringEmptyOrNULL( temp ) && !Q_strchr( temp, ':' ) && !Q_strstr( temp, ".." ))
|
||||
Q_snprintf( szFileBase, sizeof( szFileBase ), "%s/L%02i%02i", temp, today->tm_mon + 1, today->tm_mday );
|
||||
@@ -102,21 +100,18 @@ void Log_Printf( const char *fmt, ... )
|
||||
{
|
||||
va_list argptr;
|
||||
static char string[1024];
|
||||
char *p;
|
||||
time_t ltime;
|
||||
struct tm *today;
|
||||
int len;
|
||||
|
||||
if( !svs.log.net_log && !svs.log.active )
|
||||
return;
|
||||
|
||||
time_t ltime;
|
||||
time( <ime );
|
||||
today = localtime( <ime );
|
||||
const struct tm *today = localtime( <ime );
|
||||
|
||||
len = Q_snprintf( string, sizeof( string ), "%02i/%02i/%04i - %02i:%02i:%02i: ",
|
||||
const int len = Q_snprintf( string, sizeof( string ), "%02i/%02i/%04i - %02i:%02i:%02i: ",
|
||||
today->tm_mon+1, today->tm_mday, 1900 + today->tm_year, today->tm_hour, today->tm_min, today->tm_sec );
|
||||
|
||||
p = string + len;
|
||||
char *p = string + len;
|
||||
|
||||
va_start( argptr, fmt );
|
||||
Q_vsnprintf( p, sizeof( string ) - len, fmt, argptr );
|
||||
@@ -166,10 +161,6 @@ SV_SetLogAddress_f
|
||||
*/
|
||||
void SV_SetLogAddress_f( void )
|
||||
{
|
||||
const char *s;
|
||||
int port;
|
||||
string addr;
|
||||
|
||||
if( svs.log.net_log && Cmd_Argc() == 2 && !Q_strcmp( Cmd_Argv( 1 ), "off" ))
|
||||
{
|
||||
svs.log.net_log = false;
|
||||
@@ -190,20 +181,21 @@ void SV_SetLogAddress_f( void )
|
||||
return;
|
||||
}
|
||||
|
||||
port = Q_atoi( Cmd_Argv( 2 ));
|
||||
const int port = Q_atoi( Cmd_Argv( 2 ));
|
||||
if( !port )
|
||||
{
|
||||
Con_Printf( "logaddress: must specify a valid port\n" );
|
||||
return;
|
||||
}
|
||||
|
||||
s = Cmd_Argv( 1 );
|
||||
const char *s = Cmd_Argv( 1 );
|
||||
if( COM_StringEmptyOrNULL( s ))
|
||||
{
|
||||
Con_Printf( "logaddress: unparseable address\n" );
|
||||
return;
|
||||
}
|
||||
|
||||
string addr;
|
||||
Q_snprintf( addr, sizeof( addr ), "%s:%i", s, port );
|
||||
if( !NET_StringToAdr( addr, &svs.log.net_address ))
|
||||
{
|
||||
|
||||
@@ -165,12 +165,10 @@ returns true if server have spawned players
|
||||
*/
|
||||
static qboolean SV_HasActivePlayers( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
// server inactive
|
||||
if( !svs.clients ) return false;
|
||||
|
||||
for( i = 0; i < svs.maxclients; i++ )
|
||||
for( int i = 0; i < svs.maxclients; i++ )
|
||||
{
|
||||
if( svs.clients[i].state == cs_spawned )
|
||||
return true;
|
||||
@@ -250,7 +248,6 @@ static void SV_CheckCmdTimes( void )
|
||||
{
|
||||
sv_client_t *cl;
|
||||
static double lastreset = 0;
|
||||
float diff;
|
||||
int i;
|
||||
|
||||
if( sv_fps.value != 0.0f )
|
||||
@@ -280,7 +277,7 @@ static void SV_CheckCmdTimes( void )
|
||||
cl->connecttime = host.realtime;
|
||||
}
|
||||
|
||||
diff = cl->connecttime + cl->cmdtime - host.realtime;
|
||||
float diff = cl->connecttime + cl->cmdtime - host.realtime;
|
||||
|
||||
if( diff > net_clockwindow.value )
|
||||
{
|
||||
@@ -303,7 +300,6 @@ process incoming file (customization)
|
||||
*/
|
||||
static void SV_ProcessFile( sv_client_t *cl, const char *filename )
|
||||
{
|
||||
customization_t *pList;
|
||||
resource_t *resource;
|
||||
resource_t *next;
|
||||
byte md5[16];
|
||||
@@ -345,7 +341,7 @@ static void SV_ProcessFile( sv_client_t *cl, const char *filename )
|
||||
bError = false;
|
||||
bFound = false;
|
||||
|
||||
for( pList = cl->customdata.pNext; pList; pList = pList->pNext )
|
||||
for( customization_t *pList = cl->customdata.pNext; pList; pList = pList->pNext )
|
||||
{
|
||||
if( !memcmp( pList->resource.rgucMD5_hash, resource->rgucMD5_hash, 16 ))
|
||||
{
|
||||
@@ -549,12 +545,9 @@ player processing happens outside RunWorldFrame
|
||||
*/
|
||||
static void SV_PrepWorldFrame( void )
|
||||
{
|
||||
edict_t *ent;
|
||||
int i;
|
||||
|
||||
for( i = 1; i < svgame.numEntities; i++ )
|
||||
for( int i = 1; i < svgame.numEntities; i++ )
|
||||
{
|
||||
ent = SV_EdictNum( i );
|
||||
edict_t *ent = SV_EdictNum( i );
|
||||
if( ent->free ) continue;
|
||||
|
||||
ClearBits( ent->v.effects, EF_MUZZLEFLASH|EF_NOINTERP );
|
||||
@@ -788,7 +781,7 @@ qboolean SV_ProcessUserAgent( netadr_t from, const char *useragent )
|
||||
{
|
||||
const char *input_devices_str = Info_ValueForKey( useragent, "d" );
|
||||
const char *id = Info_ValueForKey( useragent, "uuid" );
|
||||
size_t len, i;
|
||||
size_t len;
|
||||
|
||||
len = Q_strlen( id );
|
||||
if( len != 32 )
|
||||
@@ -797,7 +790,7 @@ qboolean SV_ProcessUserAgent( netadr_t from, const char *useragent )
|
||||
return false;
|
||||
}
|
||||
|
||||
for( i = 0; i < len; i++ )
|
||||
for( size_t i = 0; i < len; i++ )
|
||||
{
|
||||
char c = id[i];
|
||||
|
||||
|
||||
@@ -229,11 +229,9 @@ float SV_VecToYaw( const vec3_t src )
|
||||
|
||||
qboolean SV_MoveStep( edict_t *ent, vec3_t move, qboolean relink )
|
||||
{
|
||||
int i;
|
||||
trace_t trace;
|
||||
vec3_t oldorg, neworg, end;
|
||||
qboolean monsterClip;
|
||||
edict_t *enemy;
|
||||
float dz;
|
||||
|
||||
VectorCopy( ent->v.origin, oldorg );
|
||||
@@ -243,8 +241,10 @@ qboolean SV_MoveStep( edict_t *ent, vec3_t move, qboolean relink )
|
||||
// well, try it. Flying and swimming monsters are easiest.
|
||||
if( FBitSet( ent->v.flags, FL_SWIM|FL_FLY ))
|
||||
{
|
||||
edict_t *enemy = NULL;
|
||||
|
||||
// try one move with vertical motion, then one without
|
||||
for( i = 0; i < 2; i++ )
|
||||
for( int i = 0; i < 2; i++ )
|
||||
{
|
||||
VectorAdd( ent->v.origin, move, neworg );
|
||||
|
||||
|
||||
@@ -68,8 +68,6 @@ SV_CheckAllEnts
|
||||
static void SV_CheckAllEnts( void )
|
||||
{
|
||||
static double nextcheck;
|
||||
edict_t *e;
|
||||
int i;
|
||||
|
||||
if( !sv_check_errors.value || sv.state != ss_active )
|
||||
return;
|
||||
@@ -81,9 +79,9 @@ static void SV_CheckAllEnts( void )
|
||||
nextcheck = Platform_DoubleTime() + 5.0;
|
||||
|
||||
// check edicts errors
|
||||
for( i = svs.maxclients + 1; i < svgame.numEntities; i++ )
|
||||
for( int i = svs.maxclients + 1; i < svgame.numEntities; i++ )
|
||||
{
|
||||
e = SV_EdictNum( i );
|
||||
edict_t *e = SV_EdictNum( i );
|
||||
|
||||
if( e->free && e->pvPrivateData != NULL )
|
||||
{
|
||||
@@ -121,10 +119,9 @@ void SV_CheckVelocity( edict_t *ent )
|
||||
{
|
||||
float wishspd;
|
||||
float maxspd;
|
||||
int i;
|
||||
|
||||
// bound velocity
|
||||
for( i = 0; i < 3; i++ )
|
||||
for( int i = 0; i < 3; i++ )
|
||||
{
|
||||
if( IS_NAN( ent->v.velocity[i] ))
|
||||
{
|
||||
@@ -335,14 +332,13 @@ may use friction for smooth stopping
|
||||
static void SV_AngularMove( edict_t *ent, float frametime, float friction )
|
||||
{
|
||||
float adjustment;
|
||||
int i;
|
||||
|
||||
VectorMA( ent->v.angles, frametime, ent->v.avelocity, ent->v.angles );
|
||||
if( friction == 0.0f ) return;
|
||||
|
||||
adjustment = frametime * (sv_stopspeed.value / 10.0f) * sv_friction.value * fabs( friction );
|
||||
|
||||
for( i = 0; i < 3; i++ )
|
||||
for( int i = 0; i < 3; i++ )
|
||||
{
|
||||
if( ent->v.avelocity[i] > 0.0f )
|
||||
{
|
||||
@@ -368,7 +364,6 @@ use friction for smooth stopping
|
||||
*/
|
||||
static void SV_LinearMove( edict_t *ent, float frametime, float friction )
|
||||
{
|
||||
int i;
|
||||
float adjustment;
|
||||
|
||||
VectorMA( ent->v.origin, frametime, ent->v.velocity, ent->v.origin );
|
||||
@@ -376,7 +371,7 @@ static void SV_LinearMove( edict_t *ent, float frametime, float friction )
|
||||
|
||||
adjustment = frametime * (sv_stopspeed.value / 10.0f) * sv_friction.value * fabs( friction );
|
||||
|
||||
for( i = 0; i < 3; i++ )
|
||||
for( int i = 0; i < 3; i++ )
|
||||
{
|
||||
if( ent->v.velocity[i] > 0.0f )
|
||||
{
|
||||
@@ -549,8 +544,7 @@ Slide off of the impacting object
|
||||
static int SV_ClipVelocity( vec3_t in, vec3_t normal, vec3_t out, float overbounce )
|
||||
{
|
||||
float backoff;
|
||||
float change;
|
||||
int i, blocked;
|
||||
int blocked;
|
||||
|
||||
blocked = 0;
|
||||
if( normal[2] > 0.0f ) blocked |= 1; // floor
|
||||
@@ -558,9 +552,9 @@ static int SV_ClipVelocity( vec3_t in, vec3_t normal, vec3_t out, float overboun
|
||||
|
||||
backoff = DotProduct( in, normal ) * overbounce;
|
||||
|
||||
for( i = 0; i < 3; i++ )
|
||||
for( int i = 0; i < 3; i++ )
|
||||
{
|
||||
change = normal[i] * backoff;
|
||||
float change = normal[i] * backoff;
|
||||
out[i] = in[i] - change;
|
||||
|
||||
if( out[i] > -1.0f && out[i] < 1.0f )
|
||||
@@ -591,15 +585,14 @@ Returns the clipflags if the velocity was modified (hit something solid)
|
||||
*/
|
||||
static int SV_FlyMove( edict_t *ent, float time, trace_t *steptrace )
|
||||
{
|
||||
int i, j, numplanes, bumpcount, blocked;
|
||||
int i, j, numplanes, blocked;
|
||||
vec3_t dir, end, planes[MAX_CLIP_PLANES];
|
||||
vec3_t primal_velocity, original_velocity, new_velocity;
|
||||
float d, time_left, allFraction;
|
||||
qboolean monsterClip;
|
||||
float time_left, allFraction;
|
||||
qboolean monsterClip = FBitSet( ent->v.flags, FL_MONSTERCLIP ) ? true : false;
|
||||
trace_t trace;
|
||||
|
||||
blocked = 0;
|
||||
monsterClip = FBitSet( ent->v.flags, FL_MONSTERCLIP ) ? true : false;
|
||||
VectorCopy( ent->v.velocity, original_velocity );
|
||||
VectorCopy( ent->v.velocity, primal_velocity );
|
||||
VectorClear( new_velocity );
|
||||
@@ -608,7 +601,7 @@ static int SV_FlyMove( edict_t *ent, float time, trace_t *steptrace )
|
||||
allFraction = 0.0f;
|
||||
time_left = time;
|
||||
|
||||
for( bumpcount = 0; bumpcount < MAX_CLIP_PLANES - 1; bumpcount++ )
|
||||
for( int bumpcount = 0; bumpcount < MAX_CLIP_PLANES - 1; bumpcount++ )
|
||||
{
|
||||
if( VectorIsNull( ent->v.velocity ))
|
||||
break;
|
||||
@@ -709,7 +702,7 @@ static int SV_FlyMove( edict_t *ent, float time, trace_t *steptrace )
|
||||
}
|
||||
|
||||
CrossProduct( planes[0], planes[1], dir );
|
||||
d = DotProduct( dir, ent->v.velocity );
|
||||
float d = DotProduct( dir, ent->v.velocity );
|
||||
VectorScale( dir, d, ent->v.velocity );
|
||||
}
|
||||
|
||||
@@ -898,11 +891,9 @@ SV_PushMove
|
||||
*/
|
||||
static edict_t *SV_PushMove( edict_t *pusher, float movetime )
|
||||
{
|
||||
int i, e, block;
|
||||
int oldsolid;
|
||||
vec3_t mins, maxs, lmove;
|
||||
sv_pushed_t *p, *pushed_p;
|
||||
edict_t *check;
|
||||
sv_pushed_t *pushed_p;
|
||||
|
||||
if( svgame.globals->changelevel || VectorIsNull( pusher->v.velocity ))
|
||||
{
|
||||
@@ -910,7 +901,7 @@ static edict_t *SV_PushMove( edict_t *pusher, float movetime )
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for( i = 0; i < 3; i++ )
|
||||
for( int i = 0; i < 3; i++ )
|
||||
{
|
||||
lmove[i] = pusher->v.velocity[i] * movetime;
|
||||
mins[i] = pusher->v.absmin[i] + lmove[i];
|
||||
@@ -936,9 +927,10 @@ static edict_t *SV_PushMove( edict_t *pusher, float movetime )
|
||||
return NULL;
|
||||
|
||||
// see if any solid entities are inside the final position
|
||||
for( e = 1; e < svgame.numEntities; e++ )
|
||||
for( int e = 1; e < svgame.numEntities; e++ )
|
||||
{
|
||||
check = SV_EdictNum( e );
|
||||
edict_t *check = SV_EdictNum( e );
|
||||
int block;
|
||||
if( !SV_IsValidEdict( check )) continue;
|
||||
|
||||
// filter movetypes to collide with
|
||||
@@ -992,7 +984,7 @@ static edict_t *SV_PushMove( edict_t *pusher, float movetime )
|
||||
// move back any entities we already moved
|
||||
// go backwards, so if the same entity was pushed
|
||||
// twice, it goes back to the original position
|
||||
for( p = pushed_p - 1; p >= svgame.pushed; p-- )
|
||||
for( sv_pushed_t *p = pushed_p - 1; p >= svgame.pushed; p-- )
|
||||
{
|
||||
VectorCopy( p->origin, p->ent->v.origin );
|
||||
VectorCopy( p->angles, p->ent->v.angles );
|
||||
@@ -1013,12 +1005,11 @@ SV_PushRotate
|
||||
*/
|
||||
static edict_t *SV_PushRotate( edict_t *pusher, float movetime )
|
||||
{
|
||||
int i, e, block, oldsolid;
|
||||
int oldsolid;
|
||||
matrix4x4 start_l, end_l;
|
||||
vec3_t lmove, amove;
|
||||
sv_pushed_t *p, *pushed_p;
|
||||
sv_pushed_t *pushed_p;
|
||||
vec3_t org, org2, temp;
|
||||
edict_t *check;
|
||||
|
||||
if( svgame.globals->changelevel || VectorIsNull( pusher->v.avelocity ))
|
||||
{
|
||||
@@ -1026,7 +1017,7 @@ static edict_t *SV_PushRotate( edict_t *pusher, float movetime )
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for( i = 0; i < 3; i++ )
|
||||
for( int i = 0; i < 3; i++ )
|
||||
amove[i] = pusher->v.avelocity[i] * movetime;
|
||||
|
||||
// create pusher initial position
|
||||
@@ -1054,9 +1045,10 @@ static edict_t *SV_PushRotate( edict_t *pusher, float movetime )
|
||||
Matrix4x4_CreateFromEntity( end_l, pusher->v.angles, pusher->v.origin, 1.0f );
|
||||
|
||||
// see if any solid entities are inside the final position
|
||||
for( e = 1; e < svgame.numEntities; e++ )
|
||||
for( int e = 1; e < svgame.numEntities; e++ )
|
||||
{
|
||||
check = SV_EdictNum( e );
|
||||
edict_t *check = SV_EdictNum( e );
|
||||
int block;
|
||||
if( !SV_IsValidEdict( check ))
|
||||
continue;
|
||||
|
||||
@@ -1129,7 +1121,7 @@ static edict_t *SV_PushRotate( edict_t *pusher, float movetime )
|
||||
// move back any entities we already moved
|
||||
// go backwards, so if the same entity was pushed
|
||||
// twice, it goes back to the original position
|
||||
for( p = pushed_p - 1; p >= svgame.pushed; p-- )
|
||||
for( sv_pushed_t *p = pushed_p - 1; p >= svgame.pushed; p-- )
|
||||
{
|
||||
VectorCopy( p->origin, p->ent->v.origin );
|
||||
VectorCopy( p->angles, p->ent->v.angles );
|
||||
@@ -1151,10 +1143,9 @@ SV_Physics_Pusher
|
||||
*/
|
||||
static void SV_Physics_Pusher( edict_t *ent )
|
||||
{
|
||||
float oldtime, oldtime2;
|
||||
float oldtime;
|
||||
float thinktime, movetime;
|
||||
edict_t *pBlocker;
|
||||
int i;
|
||||
|
||||
pBlocker = NULL;
|
||||
oldtime = ent->v.ltime;
|
||||
@@ -1177,7 +1168,7 @@ static void SV_Physics_Pusher( edict_t *ent )
|
||||
|
||||
if( !pBlocker )
|
||||
{
|
||||
oldtime2 = ent->v.ltime;
|
||||
float oldtime2 = ent->v.ltime;
|
||||
|
||||
// reset the local time to what it was before we rotated
|
||||
ent->v.ltime = oldtime;
|
||||
@@ -1201,7 +1192,7 @@ static void SV_Physics_Pusher( edict_t *ent )
|
||||
// otherwise, just stay in place until the obstacle is gone
|
||||
if( pBlocker ) svgame.dllFuncs.pfnBlocked( ent, pBlocker );
|
||||
|
||||
for( i = 0; i < 3; i++ )
|
||||
for( int i = 0; i < 3; i++ )
|
||||
{
|
||||
if( ent->v.angles[i] < -3600.0f || ent->v.angles[i] > 3600.0f )
|
||||
ent->v.angles[i] = fmod( ent->v.angles[i], 3600.0f );
|
||||
@@ -1589,7 +1580,6 @@ static void SV_Physics_Step( edict_t *ent )
|
||||
vec3_t mins, maxs;
|
||||
vec3_t point;
|
||||
trace_t trace;
|
||||
int x, y;
|
||||
|
||||
SV_WaterMove( ent );
|
||||
SV_CheckVelocity( ent );
|
||||
@@ -1661,12 +1651,12 @@ static void SV_Physics_Step( edict_t *ent )
|
||||
|
||||
point[2] = mins[2] - 1.0f;
|
||||
|
||||
for( x = 0; x <= 1; x++ )
|
||||
for( int x = 0; x <= 1; x++ )
|
||||
{
|
||||
if( FBitSet( ent->v.flags, FL_ONGROUND ))
|
||||
break;
|
||||
|
||||
for( y = 0; y <= 1; y++ )
|
||||
for( int y = 0; y <= 1; y++ )
|
||||
{
|
||||
point[0] = x ? maxs[0] : mins[0];
|
||||
point[1] = y ? maxs[1] : mins[1];
|
||||
@@ -1783,10 +1773,8 @@ static void SV_Physics_Entity( edict_t *ent )
|
||||
|
||||
static void SV_RunLightStyles( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
// run lightstyles animation
|
||||
for( i = 0; i < MAX_LIGHTSTYLES; i++ )
|
||||
for( int i = 0; i < MAX_LIGHTSTYLES; i++ )
|
||||
{
|
||||
lightstyle_t *ls = &sv.lightstyles[i];
|
||||
int ofs;
|
||||
@@ -1811,9 +1799,6 @@ SV_Physics
|
||||
*/
|
||||
void SV_Physics( void )
|
||||
{
|
||||
edict_t *ent;
|
||||
int i;
|
||||
|
||||
SV_CheckAllEnts ();
|
||||
|
||||
svgame.globals->time = sv.time;
|
||||
@@ -1822,9 +1807,9 @@ void SV_Physics( void )
|
||||
svgame.dllFuncs.pfnStartFrame();
|
||||
|
||||
// treat each object in turn
|
||||
for( i = 0; i < svgame.numEntities; i++ )
|
||||
for( int i = 0; i < svgame.numEntities; i++ )
|
||||
{
|
||||
ent = SV_EdictNum( i );
|
||||
edict_t *ent = SV_EdictNum( i );
|
||||
|
||||
if( !SV_IsValidEdict( ent ))
|
||||
continue;
|
||||
|
||||
@@ -283,12 +283,13 @@ static void SV_AddLaddersToPmove( areanode_t *node, const vec3_t pmove_mins, con
|
||||
{
|
||||
link_t *l, *next;
|
||||
edict_t *check;
|
||||
model_t *mod;
|
||||
physent_t *pe;
|
||||
|
||||
// get ladder edicts
|
||||
for( l = node->solid_edicts.next; l != &node->solid_edicts; l = next )
|
||||
{
|
||||
model_t *mod;
|
||||
physent_t *pe;
|
||||
|
||||
next = l->next;
|
||||
check = EDICT_FROM_AREA( l );
|
||||
|
||||
@@ -323,8 +324,6 @@ static void SV_AddLaddersToPmove( areanode_t *node, const vec3_t pmove_mins, con
|
||||
|
||||
static void GAME_EXPORT pfnParticle( const float *origin, int color, float life, int zpos, int zvel )
|
||||
{
|
||||
int v;
|
||||
|
||||
if( !origin )
|
||||
{
|
||||
Con_Reportf( S_ERROR "%s: NULL origin. Ignored\n", __func__ );
|
||||
@@ -335,7 +334,7 @@ static void GAME_EXPORT pfnParticle( const float *origin, int color, float life,
|
||||
MSG_WriteVec3Coord( &sv.reliable_datagram, origin );
|
||||
MSG_WriteChar( &sv.reliable_datagram, 0 ); // no x-vel
|
||||
MSG_WriteChar( &sv.reliable_datagram, 0 ); // no y-vel
|
||||
v = bound( -128, (zpos * zvel) * 16.0f, 127 );
|
||||
int v = bound( -128, (zpos * zvel) * 16.0f, 127 );
|
||||
MSG_WriteChar( &sv.reliable_datagram, v ); // write z-vel
|
||||
MSG_WriteByte( &sv.reliable_datagram, 1 );
|
||||
MSG_WriteByte( &sv.reliable_datagram, color );
|
||||
@@ -441,8 +440,6 @@ SV_InitClientMove
|
||||
*/
|
||||
void SV_InitClientMove( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
Pmove_Init ();
|
||||
|
||||
svgame.pmove->server = true;
|
||||
@@ -450,7 +447,7 @@ void SV_InitClientMove( void )
|
||||
svgame.pmove->runfuncs = false;
|
||||
|
||||
// enumerate client hulls
|
||||
for( i = 0; i < MAX_MAP_HULLS; i++ )
|
||||
for( int i = 0; i < MAX_MAP_HULLS; i++ )
|
||||
{
|
||||
if( svgame.dllFuncs.pfnGetHullBounds( i, host.player_mins[i], host.player_maxs[i] ))
|
||||
Con_Reportf( "SV: hull%i, player_mins: %g %g %g, player_maxs: %g %g %g\n", i,
|
||||
@@ -522,7 +519,6 @@ static void SV_SetupPMove( playermove_t *pmove, sv_client_t *cl, usercmd_t *ucmd
|
||||
{
|
||||
vec3_t absmin, absmax;
|
||||
edict_t *clent = cl->edict;
|
||||
int i;
|
||||
|
||||
svgame.globals->frametime = (ucmd->msec * 0.001f);
|
||||
|
||||
@@ -581,7 +577,7 @@ static void SV_SetupPMove( playermove_t *pmove, sv_client_t *cl, usercmd_t *ucmd
|
||||
pmove->numphysent = 0;
|
||||
pmove->nummoveent = 0;
|
||||
|
||||
for( i = 0; i < 3; i++ )
|
||||
for( int i = 0; i < 3; i++ )
|
||||
{
|
||||
absmin[i] = clent->v.origin[i] - 256.0f;
|
||||
absmax[i] = clent->v.origin[i] + 256.0f;
|
||||
@@ -665,12 +661,9 @@ static void SV_FinishPMove( playermove_t *pmove, sv_client_t *cl )
|
||||
|
||||
static entity_state_t *SV_FindEntInPack( int index, client_frame_t *frame )
|
||||
{
|
||||
entity_state_t *state;
|
||||
int i;
|
||||
|
||||
for( i = 0; i < frame->num_entities; i++ )
|
||||
for( int i = 0; i < frame->num_entities; i++ )
|
||||
{
|
||||
state = &svs.packet_entities[(frame->first_entity+i)%svs.num_client_entities];
|
||||
entity_state_t *state = &svs.packet_entities[(frame->first_entity+i)%svs.num_client_entities];
|
||||
|
||||
if( state->number == index )
|
||||
return state;
|
||||
@@ -680,9 +673,7 @@ static entity_state_t *SV_FindEntInPack( int index, client_frame_t *frame )
|
||||
|
||||
static qboolean SV_UnlagCheckTeleport( vec3_t old_pos, vec3_t new_pos )
|
||||
{
|
||||
int i;
|
||||
|
||||
for( i = 0; i < 3; i++ )
|
||||
for( int i = 0; i < 3; i++ )
|
||||
{
|
||||
if( fabs( old_pos[i] - new_pos[i] ) > 64.0f )
|
||||
return true;
|
||||
@@ -692,12 +683,11 @@ static qboolean SV_UnlagCheckTeleport( vec3_t old_pos, vec3_t new_pos )
|
||||
|
||||
static void SV_SetupMoveInterpolant( sv_client_t *cl )
|
||||
{
|
||||
int i, j, clientnum;
|
||||
int i;
|
||||
float finalpush, lerp_msec;
|
||||
float latency, lerpFrac;
|
||||
client_frame_t *frame, *frame2;
|
||||
entity_state_t *state, *lerpstate;
|
||||
vec3_t curpos, newpos;
|
||||
entity_state_t *state;
|
||||
sv_client_t *check;
|
||||
sv_interp_t *lerp;
|
||||
|
||||
@@ -749,7 +739,7 @@ static void SV_SetupMoveInterpolant( sv_client_t *cl )
|
||||
{
|
||||
frame = &cl->frames[(cl->netchan.outgoing_sequence - (i + 1)) & SV_UPDATE_MASK];
|
||||
|
||||
for( j = 0; j < frame->num_entities; j++ )
|
||||
for( int j = 0; j < frame->num_entities; j++ )
|
||||
{
|
||||
state = &svs.packet_entities[(frame->first_entity+j)%svs.num_client_entities];
|
||||
|
||||
@@ -803,6 +793,10 @@ static void SV_SetupMoveInterpolant( sv_client_t *cl )
|
||||
|
||||
for( i = 0; i < frame->num_entities; i++ )
|
||||
{
|
||||
int clientnum;
|
||||
entity_state_t *lerpstate;
|
||||
vec3_t curpos, newpos;
|
||||
|
||||
state = &svs.packet_entities[(frame->first_entity+i)%svs.num_client_entities];
|
||||
|
||||
if( state->number < 1 || state->number > svs.maxclients )
|
||||
@@ -846,7 +840,6 @@ static void SV_SetupMoveInterpolant( sv_client_t *cl )
|
||||
static void SV_RestoreMoveInterpolant( sv_client_t *cl )
|
||||
{
|
||||
sv_client_t *check;
|
||||
sv_interp_t *oldlerp;
|
||||
int i;
|
||||
|
||||
if( !has_update )
|
||||
@@ -860,6 +853,8 @@ static void SV_RestoreMoveInterpolant( sv_client_t *cl )
|
||||
|
||||
for( i = 0, check = svs.clients; i < svs.maxclients; i++, check++ )
|
||||
{
|
||||
sv_interp_t *oldlerp;
|
||||
|
||||
if( check->state != cs_spawned || check == cl )
|
||||
continue;
|
||||
|
||||
@@ -886,12 +881,8 @@ SV_RunCmd
|
||||
*/
|
||||
void SV_RunCmd( sv_client_t *cl, usercmd_t *ucmd, int random_seed )
|
||||
{
|
||||
edict_t *clent, *touch;
|
||||
edict_t *clent;
|
||||
double frametime;
|
||||
int i, oldmsec;
|
||||
pmtrace_t *pmtrace;
|
||||
trace_t trace;
|
||||
vec3_t oldvel;
|
||||
usercmd_t cmd;
|
||||
|
||||
// if the player got kicked, do not process commands
|
||||
@@ -924,7 +915,7 @@ void SV_RunCmd( sv_client_t *cl, usercmd_t *ucmd, int random_seed )
|
||||
// chop up very long commands
|
||||
if( cmd.msec > 50 )
|
||||
{
|
||||
oldmsec = ucmd->msec;
|
||||
int oldmsec = ucmd->msec;
|
||||
cmd.msec = oldmsec / 2;
|
||||
SV_RunCmd( cl, &cmd, random_seed );
|
||||
cmd.msec = oldmsec / 2;
|
||||
@@ -980,15 +971,19 @@ void SV_RunCmd( sv_client_t *cl, usercmd_t *ucmd, int random_seed )
|
||||
}
|
||||
else
|
||||
{
|
||||
vec3_t oldvel;
|
||||
|
||||
// link into place and touch triggers
|
||||
SV_LinkEdict( clent, true );
|
||||
VectorCopy( clent->v.velocity, oldvel ); // save velocity
|
||||
|
||||
// touch other objects
|
||||
for( i = 0; i < svgame.pmove->numtouch; i++ )
|
||||
for( int i = 0; i < svgame.pmove->numtouch; i++ )
|
||||
{
|
||||
pmtrace = &svgame.pmove->touchindex[i];
|
||||
touch = SV_EdictNum( svgame.pmove->physents[pmtrace->ent].info );
|
||||
pmtrace_t *pmtrace = &svgame.pmove->touchindex[i];
|
||||
edict_t *touch = SV_EdictNum( svgame.pmove->physents[pmtrace->ent].info );
|
||||
trace_t trace;
|
||||
|
||||
VectorCopy( pmtrace->deltavelocity, clent->v.velocity );
|
||||
PM_ConvertTrace( &trace, pmtrace, touch );
|
||||
SV_Impact( touch, clent, &trace );
|
||||
|
||||
@@ -71,7 +71,6 @@ SV_SourceQuery_Rules
|
||||
*/
|
||||
static void SV_SourceQuery_Rules( netadr_t from )
|
||||
{
|
||||
const cvar_t *cvar;
|
||||
sizebuf_t buf;
|
||||
char answer[MAX_PRINT_MSG - 4];
|
||||
int pos;
|
||||
@@ -85,7 +84,7 @@ static void SV_SourceQuery_Rules( netadr_t from )
|
||||
pos = MSG_GetNumBitsWritten( &buf );
|
||||
MSG_WriteShort( &buf, 0 );
|
||||
|
||||
for( cvar = Cvar_GetList( ); cvar; cvar = cvar->next )
|
||||
for( const cvar_t *cvar = Cvar_GetList( ); cvar; cvar = cvar->next )
|
||||
{
|
||||
if( !FBitSet( cvar->flags, FCVAR_SERVER ))
|
||||
continue;
|
||||
@@ -123,7 +122,7 @@ static void SV_SourceQuery_Players( netadr_t from )
|
||||
{
|
||||
sizebuf_t buf;
|
||||
char answer[MAX_PRINT_MSG - 4];
|
||||
int i, count = 0;
|
||||
int count = 0;
|
||||
int pos;
|
||||
|
||||
// respect players privacy
|
||||
@@ -138,7 +137,7 @@ static void SV_SourceQuery_Players( netadr_t from )
|
||||
pos = MSG_GetNumBitsWritten( &buf );
|
||||
MSG_WriteByte( &buf, 0 );
|
||||
|
||||
for( i = 0; i < svs.maxclients; i++ )
|
||||
for( int i = 0; i < svs.maxclients; i++ )
|
||||
{
|
||||
const sv_client_t *cl = &svs.clients[i];
|
||||
|
||||
|
||||
@@ -389,16 +389,13 @@ reserve space for ETABLE's
|
||||
*/
|
||||
static void InitEntityTable( SAVERESTOREDATA *pSaveData, int entityCount )
|
||||
{
|
||||
ENTITYTABLE *pTable;
|
||||
int i;
|
||||
|
||||
pSaveData->pTable = Mem_Calloc( host.mempool, sizeof( ENTITYTABLE ) * entityCount );
|
||||
pSaveData->tableCount = entityCount;
|
||||
|
||||
// setup entitytable
|
||||
for( i = 0; i < entityCount; i++ )
|
||||
for( int i = 0; i < entityCount; i++ )
|
||||
{
|
||||
pTable = &pSaveData->pTable[i];
|
||||
ENTITYTABLE *pTable = &pSaveData->pTable[i];
|
||||
pTable->pent = SV_EdictNum( i );
|
||||
pTable->id = i;
|
||||
}
|
||||
@@ -413,9 +410,7 @@ check level in transition list
|
||||
*/
|
||||
static int EntryInTable( SAVERESTOREDATA *pSaveData, const char *pMapName, int index )
|
||||
{
|
||||
int i;
|
||||
|
||||
for( i = index + 1; i < pSaveData->connectionCount; i++ )
|
||||
for( int i = index + 1; i < pSaveData->connectionCount; i++ )
|
||||
{
|
||||
if ( !Q_stricmp( pSaveData->levelList[i].mapName, pMapName ))
|
||||
return i;
|
||||
@@ -451,9 +446,7 @@ find global offset for a given landmark
|
||||
*/
|
||||
static void LandmarkOrigin( SAVERESTOREDATA *pSaveData, vec3_t output, const char *pLandmarkName )
|
||||
{
|
||||
int i;
|
||||
|
||||
for( i = 0; i < pSaveData->connectionCount; i++ )
|
||||
for( int i = 0; i < pSaveData->connectionCount; i++ )
|
||||
{
|
||||
if( !Q_strcmp( pSaveData->levelList[i].landmarkName, pLandmarkName ))
|
||||
{
|
||||
@@ -499,13 +492,12 @@ remove all the temp files HL1-HL3
|
||||
static void ClearSaveDir( void )
|
||||
{
|
||||
search_t *t;
|
||||
int i;
|
||||
|
||||
// just delete all HL? files
|
||||
t = FS_Search( DEFAULT_SAVE_DIRECTORY "*.HL?", true, true );
|
||||
if( !t ) return; // already empty
|
||||
|
||||
for( i = 0; i < t->numfilenames; i++ )
|
||||
for( int i = 0; i < t->numfilenames; i++ )
|
||||
FS_Delete( t->filenames[i] );
|
||||
|
||||
Mem_Free( t );
|
||||
@@ -646,18 +638,16 @@ put the HL1-HL3 files into .sav file
|
||||
*/
|
||||
static void DirectoryCopy( const char *pPath, file_t *pFile )
|
||||
{
|
||||
char szName[MAX_OSPATH];
|
||||
int i, fileSize;
|
||||
file_t *pCopy;
|
||||
search_t *t;
|
||||
|
||||
t = FS_Search( pPath, true, true );
|
||||
if( !t ) return; // nothing to copy ?
|
||||
|
||||
for( i = 0; i < t->numfilenames; i++ )
|
||||
for( int i = 0; i < t->numfilenames; i++ )
|
||||
{
|
||||
pCopy = FS_Open( t->filenames[i], "rb", true );
|
||||
fileSize = FS_FileLength( pCopy );
|
||||
char szName[MAX_OSPATH];
|
||||
file_t *pCopy = FS_Open( t->filenames[i], "rb", true );
|
||||
int fileSize = FS_FileLength( pCopy );
|
||||
|
||||
memset( szName, 0, sizeof( szName )); // clearing the string to prevent garbage in output file
|
||||
Q_strncpy( szName, COM_FileWithoutPath( t->filenames[i] ), sizeof( szName ));
|
||||
@@ -678,13 +668,13 @@ extract the HL1-HL3 files from the .sav file
|
||||
*/
|
||||
static qboolean DirectoryExtract( file_t *pFile, int fileCount )
|
||||
{
|
||||
char szName[MAX_OSPATH];
|
||||
char fileName[MAX_OSPATH];
|
||||
int i, fileSize;
|
||||
file_t *pCopy;
|
||||
|
||||
for( i = 0; i < fileCount; i++ )
|
||||
for( int i = 0; i < fileCount; i++ )
|
||||
{
|
||||
char szName[MAX_OSPATH];
|
||||
char fileName[MAX_OSPATH];
|
||||
int fileSize;
|
||||
file_t *pCopy;
|
||||
|
||||
// filename can only be as long as a map name + extension
|
||||
FS_Read( pFile, szName, MAX_OSPATH );
|
||||
FS_Read( pFile, &fileSize, sizeof( int ));
|
||||
@@ -792,12 +782,11 @@ write the stringtable into file
|
||||
static char *StoreHashTable( SAVERESTOREDATA *pSaveData )
|
||||
{
|
||||
char *pTokenData = pSaveData->pCurrentData;
|
||||
int i;
|
||||
|
||||
// Write entity string token table
|
||||
if( pSaveData->pTokens )
|
||||
{
|
||||
for( i = 0; i < pSaveData->tokenCount; i++ )
|
||||
for( int i = 0; i < pSaveData->tokenCount; i++ )
|
||||
{
|
||||
const char *pszToken = pSaveData->pTokens[i] ? pSaveData->pTokens[i] : "";
|
||||
|
||||
@@ -823,7 +812,6 @@ build the stringtable from buffer
|
||||
static void BuildHashTable( SAVERESTOREDATA *pSaveData, file_t *pFile )
|
||||
{
|
||||
char *pszTokenList = pSaveData->pBaseData;
|
||||
int i;
|
||||
|
||||
// Parse the symbol table
|
||||
if( pSaveData->tokenSize > 0 )
|
||||
@@ -831,7 +819,7 @@ static void BuildHashTable( SAVERESTOREDATA *pSaveData, file_t *pFile )
|
||||
FS_Read( pFile, pszTokenList, pSaveData->tokenSize );
|
||||
|
||||
// make sure the token strings pointed to by the pToken hashtable.
|
||||
for( i = 0; i < pSaveData->tokenCount; i++ )
|
||||
for( int i = 0; i < pSaveData->tokenCount; i++ )
|
||||
{
|
||||
pSaveData->pTokens[i] = *pszTokenList ? pszTokenList : NULL;
|
||||
while( *pszTokenList++ ); // Find next token (after next null)
|
||||
@@ -1056,7 +1044,7 @@ read the list of entities that are no longer in the save file for this level
|
||||
static void EntityPatchRead( SAVERESTOREDATA *pSaveData, const char *level )
|
||||
{
|
||||
char name[MAX_QPATH];
|
||||
int i, size, entityId;
|
||||
int size;
|
||||
file_t *pFile;
|
||||
|
||||
Q_snprintf( name, sizeof( name ), DEFAULT_SAVE_DIRECTORY "%s.HL3", level );
|
||||
@@ -1067,8 +1055,10 @@ static void EntityPatchRead( SAVERESTOREDATA *pSaveData, const char *level )
|
||||
// patch count
|
||||
FS_Read( pFile, &size, sizeof( int ));
|
||||
|
||||
for( i = 0; i < size; i++ )
|
||||
for( int i = 0; i < size; i++ )
|
||||
{
|
||||
int entityId;
|
||||
|
||||
FS_Read( pFile, &entityId, sizeof( int ));
|
||||
pSaveData->pTable[entityId].flags = FENTTABLE_REMOVED;
|
||||
}
|
||||
@@ -1189,7 +1179,7 @@ static qboolean SaveClientState( SAVERESTOREDATA *pSaveData, const char *level,
|
||||
soundlist_t soundInfo[MAX_CHANNELS];
|
||||
sv_client_t *cl = svs.clients;
|
||||
char name[MAX_QPATH];
|
||||
int i, id, version;
|
||||
int i;
|
||||
char *pTokenData;
|
||||
decallist_t *decalList = NULL;
|
||||
SAVE_CLIENT header = { 0 };
|
||||
@@ -1265,8 +1255,8 @@ static qboolean SaveClientState( SAVERESTOREDATA *pSaveData, const char *level,
|
||||
return false;
|
||||
}
|
||||
|
||||
version = CLIENT_SAVEGAME_VERSION;
|
||||
id = SAVEGAME_HEADER;
|
||||
int version = CLIENT_SAVEGAME_VERSION;
|
||||
int id = SAVEGAME_HEADER;
|
||||
|
||||
FS_Write( pFile, &id, sizeof( id ));
|
||||
FS_Write( pFile, &version, sizeof( version ));
|
||||
@@ -1628,10 +1618,7 @@ load current game state
|
||||
static int LoadGameState( char const *level, qboolean changelevel )
|
||||
{
|
||||
SAVERESTOREDATA *pSaveData;
|
||||
ENTITYTABLE *pTable;
|
||||
SAVE_HEADER header;
|
||||
edict_t *pent;
|
||||
int i;
|
||||
|
||||
pSaveData = LoadSaveData( level );
|
||||
if( !pSaveData ) return 0; // couldn't load the file
|
||||
@@ -1661,9 +1648,11 @@ static int LoadGameState( char const *level, qboolean changelevel )
|
||||
CreateEntitiesInRestoreList( pSaveData, 0, true );
|
||||
|
||||
// now spawn entities
|
||||
for( i = 0; i < pSaveData->tableCount; i++ )
|
||||
for( int i = 0; i < pSaveData->tableCount; i++ )
|
||||
{
|
||||
pTable = &pSaveData->pTable[i];
|
||||
ENTITYTABLE *pTable = &pSaveData->pTable[i];
|
||||
edict_t *pent;
|
||||
|
||||
pSaveData->pCurrentData = pSaveData->pBaseData + pTable->location;
|
||||
pSaveData->size = pTable->location;
|
||||
pSaveData->currentIndex = i;
|
||||
@@ -1705,7 +1694,6 @@ static qboolean SaveGameSlot( const char *pSaveName, const char *pSaveComment )
|
||||
{
|
||||
char hlPath[MAX_QPATH];
|
||||
char name[MAX_QPATH];
|
||||
int id, version;
|
||||
char *pTokenData;
|
||||
SAVERESTOREDATA *pSaveData;
|
||||
GAME_HEADER gameHeader;
|
||||
@@ -1753,8 +1741,8 @@ static qboolean SaveGameSlot( const char *pSaveName, const char *pSaveComment )
|
||||
Cbuf_AddTextf( "saveshot \"%s\"\n", pSaveName );
|
||||
Con_Printf( "Saving game to %s...\n", name );
|
||||
|
||||
version = SAVEGAME_VERSION;
|
||||
id = SAVEGAME_HEADER;
|
||||
int version = SAVEGAME_VERSION;
|
||||
int id = SAVEGAME_HEADER;
|
||||
|
||||
FS_Write( pFile, &id, sizeof( id ));
|
||||
FS_Write( pFile, &version, sizeof( version ));
|
||||
@@ -1835,9 +1823,7 @@ moving edicts to another level
|
||||
*/
|
||||
static int CreateEntityTransitionList( SAVERESTOREDATA *pSaveData, int levelMask )
|
||||
{
|
||||
int i, movedCount;
|
||||
ENTITYTABLE *pTable;
|
||||
edict_t *pent;
|
||||
int movedCount;
|
||||
|
||||
movedCount = 0;
|
||||
|
||||
@@ -1845,9 +1831,11 @@ static int CreateEntityTransitionList( SAVERESTOREDATA *pSaveData, int levelMask
|
||||
CreateEntitiesInRestoreList( pSaveData, levelMask, false );
|
||||
|
||||
// now spawn entities
|
||||
for( i = 0; i < pSaveData->tableCount; i++ )
|
||||
for( int i = 0; i < pSaveData->tableCount; i++ )
|
||||
{
|
||||
pTable = &pSaveData->pTable[i];
|
||||
ENTITYTABLE *pTable = &pSaveData->pTable[i];
|
||||
edict_t *pent;
|
||||
|
||||
pSaveData->pCurrentData = pSaveData->pBaseData + pTable->location;
|
||||
pSaveData->size = pTable->location;
|
||||
pSaveData->currentIndex = i;
|
||||
@@ -2261,16 +2249,16 @@ used for reload game after player death
|
||||
const char *SV_GetLatestSave( void )
|
||||
{
|
||||
static char savename[MAX_QPATH];
|
||||
int newest = 0, ft;
|
||||
int i, found = 0;
|
||||
int newest = 0;
|
||||
int found = 0;
|
||||
search_t *t;
|
||||
|
||||
if(( t = FS_Search( DEFAULT_SAVE_DIRECTORY "*.sav" , true, true )) == NULL )
|
||||
return NULL;
|
||||
|
||||
for( i = 0; i < t->numfilenames; i++ )
|
||||
for( int i = 0; i < t->numfilenames; i++ )
|
||||
{
|
||||
ft = FS_FileTime( t->filenames[i], true );
|
||||
int ft = FS_FileTime( t->filenames[i], true );
|
||||
|
||||
// found a match?
|
||||
if( ft > 0 )
|
||||
|
||||
@@ -53,14 +53,12 @@ can just be stored out and get a proper hull_t structure.
|
||||
*/
|
||||
static void SV_InitBoxHull( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
box_hull.clipnodes16 = (mclipnode16_t *)box_clipnodes16;
|
||||
box_hull.planes = box_planes;
|
||||
box_hull.firstclipnode = 0;
|
||||
box_hull.lastclipnode = 5;
|
||||
|
||||
for( i = 0; i < 6; i++ )
|
||||
for( int i = 0; i < 6; i++ )
|
||||
{
|
||||
box_planes[i].type = i>>1;
|
||||
box_planes[i].normal[i>>1] = 1;
|
||||
@@ -108,7 +106,7 @@ check clients only
|
||||
*/
|
||||
static qboolean SV_CheckSphereIntersection( edict_t *ent, const vec3_t start, const vec3_t end )
|
||||
{
|
||||
int i, sequence;
|
||||
int sequence;
|
||||
float radiusSquared;
|
||||
vec3_t traceOrg, traceDir;
|
||||
studiohdr_t *pstudiohdr;
|
||||
@@ -134,7 +132,7 @@ static qboolean SV_CheckSphereIntersection( edict_t *ent, const vec3_t start, co
|
||||
VectorSubtract( end, start, traceDir );
|
||||
radiusSquared = 0.0f;
|
||||
|
||||
for ( i = 0; i < 3; i++ )
|
||||
for ( int i = 0; i < 3; i++ )
|
||||
radiusSquared += Q_max( fabs( pseqdesc->bbmin[i] ), fabs( pseqdesc->bbmax[i] ));
|
||||
|
||||
return SphereIntersect( ent->v.origin, radiusSquared, traceOrg, traceDir );
|
||||
@@ -465,12 +463,10 @@ SV_ClearWorld
|
||||
*/
|
||||
void SV_ClearWorld( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
SV_InitBoxHull(); // for box testing
|
||||
|
||||
// clear lightstyles
|
||||
for( i = 0; i < MAX_LIGHTSTYLES; i++ )
|
||||
for( int i = 0; i < MAX_LIGHTSTYLES; i++ )
|
||||
{
|
||||
sv.lightstyles[i].value = 256.0f;
|
||||
sv.lightstyles[i].time = 0.0f;
|
||||
@@ -506,14 +502,15 @@ SV_TouchLinks
|
||||
static void SV_TouchLinks( edict_t *ent, areanode_t *node )
|
||||
{
|
||||
link_t *l, *next;
|
||||
edict_t *touch;
|
||||
hull_t *hull;
|
||||
vec3_t test, offset;
|
||||
model_t *mod;
|
||||
|
||||
// touch linked edicts
|
||||
for( l = node->trigger_edicts.next; l != &node->trigger_edicts; l = next )
|
||||
{
|
||||
edict_t *touch;
|
||||
hull_t *hull;
|
||||
vec3_t test, offset;
|
||||
model_t *mod;
|
||||
|
||||
next = l->next;
|
||||
touch = EDICT_FROM_AREA( l );
|
||||
|
||||
@@ -593,7 +590,6 @@ SV_FindTouchedLeafs
|
||||
static void SV_FindTouchedLeafs( edict_t *ent, model_t *mod, mnode_t *node, int *headnode )
|
||||
{
|
||||
int sides;
|
||||
mleaf_t *leaf;
|
||||
|
||||
if( node->contents == CONTENTS_SOLID )
|
||||
return;
|
||||
@@ -609,7 +605,7 @@ static void SV_FindTouchedLeafs( edict_t *ent, model_t *mod, mnode_t *node, int
|
||||
}
|
||||
else
|
||||
{
|
||||
leaf = (mleaf_t *)node;
|
||||
mleaf_t *leaf = (mleaf_t *)node;
|
||||
if( FBitSet( mod->flags, MODEL_QBSP2 ))
|
||||
ent->leafnums32[ent->num_leafs] = leaf->cluster;
|
||||
else
|
||||
@@ -640,7 +636,6 @@ SV_LinkEdict
|
||||
void GAME_EXPORT SV_LinkEdict( edict_t *ent, qboolean touch_triggers )
|
||||
{
|
||||
areanode_t *node;
|
||||
int headnode;
|
||||
|
||||
if( ent->area.prev ) SV_UnlinkEdict( ent ); // unlink from old position
|
||||
if( ent == svgame.edicts ) return; // don't add the world
|
||||
@@ -657,10 +652,11 @@ void GAME_EXPORT SV_LinkEdict( edict_t *ent, qboolean touch_triggers )
|
||||
}
|
||||
else
|
||||
{
|
||||
int headnode = -1;
|
||||
|
||||
// link to PVS leafs
|
||||
ent->num_leafs = 0;
|
||||
ent->headnode = -1;
|
||||
headnode = -1;
|
||||
|
||||
if( ent->v.modelindex )
|
||||
SV_FindTouchedLeafs( ent, sv.worldmodel, sv.worldmodel->nodes, &headnode );
|
||||
@@ -715,14 +711,15 @@ POINT TESTING IN HULLS
|
||||
static void SV_WaterLinks( const vec3_t origin, int *pCont, areanode_t *node )
|
||||
{
|
||||
link_t *l, *next;
|
||||
edict_t *touch;
|
||||
hull_t *hull;
|
||||
vec3_t test, offset;
|
||||
model_t *mod;
|
||||
|
||||
// get water edicts
|
||||
for( l = node->solid_edicts.next; l != &node->solid_edicts; l = next )
|
||||
{
|
||||
edict_t *touch;
|
||||
hull_t *hull;
|
||||
vec3_t test, offset;
|
||||
model_t *mod;
|
||||
|
||||
next = l->next;
|
||||
touch = EDICT_FROM_AREA( l );
|
||||
|
||||
@@ -838,10 +835,8 @@ void SV_ClipMoveToEntity( edict_t *ent, const vec3_t start, vec3_t mins, vec3_t
|
||||
hull_t *hull;
|
||||
model_t *model;
|
||||
vec3_t start_l, end_l;
|
||||
vec3_t offset, temp;
|
||||
int last_hitgroup;
|
||||
trace_t trace_hitbox;
|
||||
int i, j, hullcount;
|
||||
vec3_t offset;
|
||||
int hullcount;
|
||||
qboolean rotated, transform_bbox;
|
||||
matrix4x4 matrix;
|
||||
|
||||
@@ -889,7 +884,7 @@ void SV_ClipMoveToEntity( edict_t *ent, const vec3_t start, vec3_t mins, vec3_t
|
||||
World_TransformAABB( matrix, mins, maxs, out_mins, out_maxs );
|
||||
VectorSubtract( hull->clip_mins, out_mins, offset ); // calc new local offset
|
||||
|
||||
for( j = 0; j < 3; j++ )
|
||||
for( int j = 0; j < 3; j++ )
|
||||
{
|
||||
if( start_l[j] >= 0.0f )
|
||||
start_l[j] -= offset[j];
|
||||
@@ -912,9 +907,10 @@ void SV_ClipMoveToEntity( edict_t *ent, const vec3_t start, vec3_t mins, vec3_t
|
||||
}
|
||||
else
|
||||
{
|
||||
last_hitgroup = 0;
|
||||
int last_hitgroup = 0;
|
||||
trace_t trace_hitbox;
|
||||
|
||||
for( i = 0; i < hullcount; i++ )
|
||||
for( int i = 0; i < hullcount; i++ )
|
||||
{
|
||||
PM_InitTrace( &trace_hitbox, end );
|
||||
|
||||
@@ -943,6 +939,8 @@ void SV_ClipMoveToEntity( edict_t *ent, const vec3_t start, vec3_t mins, vec3_t
|
||||
|
||||
if( rotated )
|
||||
{
|
||||
vec3_t temp;
|
||||
|
||||
// transform plane
|
||||
VectorCopy( trace->plane.normal, temp );
|
||||
Matrix4x4_TransformPositivePlane( matrix, temp, trace->plane.dist, trace->plane.normal, &trace->plane.dist );
|
||||
@@ -969,7 +967,7 @@ continue the trace to the edges of the portal cutout instead.
|
||||
static void SV_PortalCSG( edict_t *portal, const vec3_t trace_mins, const vec3_t trace_maxs, const vec3_t start, const vec3_t end, trace_t *trace )
|
||||
{
|
||||
vec4_t planes[6]; //far, near, right, left, up, down
|
||||
int plane, k;
|
||||
int plane;
|
||||
vec3_t worldpos;
|
||||
float bestfrac;
|
||||
int hitplane;
|
||||
@@ -1010,7 +1008,7 @@ static void SV_PortalCSG( edict_t *portal, const vec3_t trace_mins, const vec3_t
|
||||
float d = DotProduct( worldpos, planes[plane] );
|
||||
vec3_t nearest;
|
||||
|
||||
for( k = 0; k < 3; k++ )
|
||||
for( int k = 0; k < 3; k++ )
|
||||
nearest[k] = (planes[plane][k]>=0) ? trace_maxs[k] : trace_mins[k];
|
||||
|
||||
// front plane gets further away with side
|
||||
@@ -1210,11 +1208,12 @@ Mins and maxs enclose the entire area swept by the move
|
||||
static void SV_ClipToLinks( areanode_t *node, moveclip_t *clip )
|
||||
{
|
||||
link_t *l, *next;
|
||||
edict_t *touch;
|
||||
|
||||
// touch linked edicts
|
||||
for( l = node->solid_edicts.next; l != &node->solid_edicts; l = next )
|
||||
{
|
||||
edict_t *touch;
|
||||
|
||||
next = l->next;
|
||||
|
||||
touch = EDICT_FROM_AREA( l );
|
||||
@@ -1242,11 +1241,12 @@ Mins and maxs enclose the entire area swept by the move
|
||||
static void SV_ClipToPortals( areanode_t *node, moveclip_t *clip )
|
||||
{
|
||||
link_t *l, *next;
|
||||
edict_t *touch;
|
||||
|
||||
// touch linked edicts
|
||||
for( l = node->portal_edicts.next; l != &node->portal_edicts; l = next )
|
||||
{
|
||||
edict_t *touch;
|
||||
|
||||
next = l->next;
|
||||
|
||||
touch = EDICT_FROM_AREA( l );
|
||||
@@ -1274,11 +1274,12 @@ Mins and maxs enclose the entire area swept by the move
|
||||
static void SV_ClipToWorldBrush( areanode_t *node, moveclip_t *clip )
|
||||
{
|
||||
link_t *l, *next;
|
||||
edict_t *touch;
|
||||
trace_t trace;
|
||||
|
||||
for( l = node->solid_edicts.next; l != &node->solid_edicts; l = next )
|
||||
{
|
||||
edict_t *touch;
|
||||
trace_t trace;
|
||||
|
||||
next = l->next;
|
||||
|
||||
touch = EDICT_FROM_AREA( l );
|
||||
@@ -1472,7 +1473,6 @@ trace_t SV_MoveToss( edict_t *tossent, edict_t *ignore )
|
||||
vec3_t original_angles;
|
||||
vec3_t original_avelocity;
|
||||
trace_t trace;
|
||||
int i;
|
||||
|
||||
VectorCopy( tossent->v.origin, original_origin );
|
||||
VectorCopy( tossent->v.velocity, original_velocity );
|
||||
@@ -1480,7 +1480,7 @@ trace_t SV_MoveToss( edict_t *tossent, edict_t *ignore )
|
||||
VectorCopy( tossent->v.avelocity, original_avelocity );
|
||||
gravity = tossent->v.gravity * sv_gravity.value * 0.05f;
|
||||
|
||||
for( i = 0; i < 200; i++ )
|
||||
for( int i = 0; i < 200; i++ )
|
||||
{
|
||||
SV_CheckVelocity( tossent );
|
||||
tossent->v.velocity[2] -= gravity;
|
||||
@@ -1516,7 +1516,7 @@ SV_RecursiveLightPoint
|
||||
static qboolean SV_RecursiveLightPoint( model_t *model, mnode_t *node, const vec3_t start, const vec3_t end, vec3_t point_color )
|
||||
{
|
||||
float front, back, frac;
|
||||
int i, side;
|
||||
int side;
|
||||
vec3_t mid;
|
||||
int numsurfaces, firstsurface;
|
||||
|
||||
@@ -1546,7 +1546,7 @@ static qboolean SV_RecursiveLightPoint( model_t *model, mnode_t *node, const vec
|
||||
// check for impact on this node
|
||||
numsurfaces = node_numsurfaces( node, model );
|
||||
firstsurface = node_firstsurface( node, model );
|
||||
for( i = 0; i < numsurfaces; i++ )
|
||||
for( int i = 0; i < numsurfaces; i++ )
|
||||
{
|
||||
const msurface_t *surf = &model->surfaces[firstsurface + i];
|
||||
const mextrasurf_t *info = surf->info;
|
||||
@@ -1611,13 +1611,13 @@ needs to get correct working SV_LightPoint
|
||||
*/
|
||||
void SV_SetLightStyle( int style, const char* s, float f )
|
||||
{
|
||||
int j, k;
|
||||
int j;
|
||||
|
||||
j = Q_strncpy( sv.lightstyles[style].pattern, s, sizeof( sv.lightstyles[0].pattern ));
|
||||
sv.lightstyles[style].time = f;
|
||||
sv.lightstyles[style].length = j;
|
||||
|
||||
for( k = 0; k < j; k++ )
|
||||
for( int k = 0; k < j; k++ )
|
||||
sv.lightstyles[style].map[k] = (float)(s[k] - 'a');
|
||||
|
||||
if( sv.state != ss_active ) return;
|
||||
|
||||
Reference in New Issue
Block a user