Applied global pause fix patch, now functions as its supposed to. Added listadmins search listing for immunity.

This commit is contained in:
Paradox460 committed 2008-01-06 22:28:48 +00:00
1 parent b95ce8be3d
commit 1c6bd56fb2
8 files changed
+151 -43

No files matched your search

+11 -2
View File
@@ -870,7 +870,8 @@ void ClientTimerActions( gentity_t *ent, int msec )
}
if( ent->health > 0 && ent->health < client->ps.stats[ STAT_MAX_HEALTH ] &&
( ent->lastDamageTime + ALIEN_REGEN_DAMAGE_TIME ) < level.time )
( ent->lastDamageTime + ALIEN_REGEN_DAMAGE_TIME ) < level.time &&
!level.paused )
ent->health += BG_FindRegenRateForClass( client->ps.stats[ STAT_PCLASS ] ) * modifier;
if( ent->health > client->ps.stats[ STAT_MAX_HEALTH ] )
@@ -1396,6 +1397,7 @@ void ClientThink_real( gentity_t *ent )
int oldEventSequence;
int msec;
usercmd_t *ucmd;
int real_pm_type;
client = ent->client;
@@ -1488,6 +1490,10 @@ void ClientThink_real( gentity_t *ent )
else
client->ps.pm_type = PM_NORMAL;
// paused
real_pm_type = client->ps.pm_type;
if ( level.paused ) client->ps.pm_type = PM_SPECTATOR;
if( client->ps.stats[ STAT_STATE ] & SS_GRABBED &&
client->grabExpiryTime < level.time )
client->ps.stats[ STAT_STATE ] &= ~SS_GRABBED;
@@ -1533,7 +1539,7 @@ void ClientThink_real( gentity_t *ent )
{
BG_DeactivateUpgrade( UP_MEDKIT, client->ps.stats );
}
else if( client->ps.stats[ STAT_HEALTH ] > 0 )
else if( client->ps.stats[ STAT_HEALTH ] > 0 && !level.paused )
{
//remove anti toxin
BG_DeactivateUpgrade( UP_MEDKIT, client->ps.stats );
@@ -1664,6 +1670,9 @@ void ClientThink_real( gentity_t *ent )
if( ent->client->ps.eventSequence != oldEventSequence )
ent->eventTime = level.time;
// paused pm_type restoration
if ( level.paused ) client->ps.pm_type = real_pm_type;
if( g_smoothClients.integer )
BG_PlayerStateToEntityStateExtraPolate( &ent->client->ps, &ent->s, ent->client->ps.commandTime, qtrue );
else
+97 -23
View File
@@ -245,12 +245,14 @@ g_admin_cmd_t g_admin_cmds[ ] =
},
{"pause", G_admin_pause, "S",
"prevent a player from interacting with the game.",
"(^5name|slot^7)"
"prevent a player from interacting with the game."
" * will pause all players, using no argument will pause game clock",
"(^5name|slot|*^7)"
},
{"unpause", G_admin_pause, "S",
"allow a player to interact with the game",
"(^5name|slot^7)"
"allow a player to interact with the game."
" * will unpause all players, using no argument will unpause game clock",
"(^5name|slot|*^7)"
},
{"buildlog", G_admin_buildlog, "U",
@@ -1009,11 +1011,12 @@ static int admin_listadmins( gentity_t *ent, int start, char *search, int minlev
break;
}
}
ADMBP( va( "%4i %4i %s^7 (*%s) %s^7\n",
ADMBP( va( "%4i %4i %s^7 (*%s) ^1%1s ^7%s^7\n",
i,
l,
lname,
guid_stub,
( G_admin_permission( &g_entities[ i ], ADMF_BANIMMUNITY ) ) ? "I" : "",
vic->client->pers.netname ) );
drawn++;
}
@@ -2793,6 +2796,12 @@ qboolean G_admin_listplayers( gentity_t *ent, int skiparg )
Q_strncpyz( immune, "I", sizeof( immune ) );
}
if( p->pers.paused )
{
// use immunity slot for paused player status
Q_strncpyz( immune, "L", sizeof( immune ) );
}
l = 0;
G_SanitiseName( p->pers.netname, n2 );
n[ 0 ] = '\0';
@@ -3860,6 +3869,12 @@ qboolean G_admin_putmespec( gentity_t *ent, int skiparg )
ADMP( "!specme: sorry, but console isn't allowed on the spectators team\n");
return qfalse;
}
if( level.paused )
{
ADMP("!specme: disabled when game is paused\n");
return qfalse;
}
if(ent->client->pers.teamSelection == PTE_NONE)
return qfalse;
@@ -4092,31 +4107,95 @@ AP( va( "print \"^3!unforcespec: ^7%s^7 has allowed joining of teams for ^7%s\n\
}
static qboolean G_admin_global_pause( gentity_t *ent, int skiparg )
{
if( level.paused )
{
level.pauseTime = level.time;
ADMP( "^3!pause: ^7Game is already paused, unpause timer reset\n" );
return qfalse;
}
level.paused = qtrue;
level.pauseTime = level.time;
level.pause_speed = g_speed.value;
level.pause_gravity = g_gravity.value;
level.pause_knockback = g_knockback.value;
level.pause_ff = g_friendlyFire.integer;
level.pause_ffb = g_friendlyBuildableFire.integer;
g_speed.value = 0;
g_gravity.value = 0;
g_knockback.value = 0;
g_friendlyFire.integer = 0;
g_friendlyBuildableFire.integer = 0;
CP( "cp \"^1Game is PAUSED\"" );
AP( va( "print \"^3!pause: ^7The game has been paused by %s\n\"",
( ent ) ? ent->client->pers.netname : "console" ) );
return qtrue;
}
static qboolean G_admin_global_unpause( gentity_t *ent, int skiparg )
{
if( !level.paused )
{
ADMP( "^3!unpause: ^7Game is not paused\n" );
return qfalse;
}
level.paused = qfalse;
g_speed.value = level.pause_speed;
g_gravity.value = level.pause_gravity;
g_knockback.value = level.pause_knockback;
g_friendlyFire.integer = level.pause_ff;
g_friendlyBuildableFire.integer = level.pause_ffb;
CP( "cp \"^2Game is RESUMED\"" );
AP( va( "print \"^3!unpause: ^7The game has been resumed by %s\n\"",
( ent ) ? ent->client->pers.netname : "console" ) );
return qtrue;
}
qboolean G_admin_pause( gentity_t *ent, int skiparg )
{ //this is all very similar to denybuild,
//it performs an essentially identical function
int i, j = 0, pids[ MAX_CLIENTS + 1 ];
char name[ MAX_NAME_LENGTH ], err[ MAX_STRING_CHARS ];
char command[ MAX_ADMIN_CMD_LEN ], *cmd;
int minargc;
qboolean targeted = qfalse;
//targeted is set to ensure we don't get spam when pausing everybody
gentity_t *vic;
minargc = 2 + skiparg;
if( G_SayArgc() < minargc )
{
//Removed game-wide pause, and made it echo an error message, with instructions.
ADMP( va( "^3!pause: ^7usage: ^3!pause ^7(^5name|slot^7)\n" ) );
return qfalse;
}
G_SayArgv( skiparg, command, sizeof( command ) );
cmd = command;
if( cmd && *cmd == '!' )
cmd++;
if( G_SayArgc() == 1 + skiparg )
if( G_SayArgc() < 2 + skiparg )
{
// global pause
if( !Q_stricmp( cmd, "pause" ) )
{
return G_admin_global_pause( ent, skiparg );
}
else
{
return G_admin_global_unpause( ent, skiparg );
}
}
if( G_SayArgc() != 2 + skiparg )
{
ADMP( va( "^3!pause: ^7usage: ^7(^5name|slot|*^7)\n", cmd, cmd ) );
return qfalse;
}
G_SayArgv( 1 + skiparg, name, sizeof( name ) );
if( !Q_stricmp( name, "*" ) )
{
for( i = 0; i < MAX_CLIENTS; i++ )
{
@@ -4130,9 +4209,8 @@ qboolean G_admin_pause( gentity_t *ent, int skiparg )
}
pids[ j ] = -1;
}
else if( G_SayArgc() == 2 + skiparg )
else
{
G_SayArgv( 1 + skiparg, name, sizeof( name ) );
if( G_ClientNumbersFromString( name, pids ) != 1 )
{
G_MatchOnePlayer( pids, err, sizeof( err ) );
@@ -4141,11 +4219,7 @@ qboolean G_admin_pause( gentity_t *ent, int skiparg )
}
targeted = qtrue;
}
else if( G_SayArgc() > 2 + skiparg )
{
ADMP( va( "^3!pause: ^7usage: ^7(^5name|slot^7)\n", cmd, cmd ) );
return qfalse;
}
for( i = 0; pids[ i ] >= 0; i++ )
{
vic = &g_entities[ pids[ i ] ];
+8 -1
View File
@@ -1079,6 +1079,7 @@ void AAcidTube_Think( gentity_t *self )
continue;
if( enemy->client && enemy->client->ps.stats[ STAT_PTEAM ] == PTE_HUMANS &&
!level.paused &&
!enemy->client->pers.paused )
{
self->timestamp = level.time;
@@ -1154,6 +1155,7 @@ void AHive_Think( gentity_t *self )
continue;
if( enemy->client && enemy->client->ps.stats[ STAT_PTEAM ] == PTE_HUMANS &&
!level.paused &&
!enemy->client->pers.paused )
{
self->active = qtrue;
@@ -1751,6 +1753,7 @@ void HReactor_Think( gentity_t *self )
continue;
if( enemy->client && !enemy->client->pers.paused &&
!level.paused &&
enemy->client->ps.stats[ STAT_PTEAM ] == PTE_ALIENS )
{
self->timestamp = level.time;
@@ -2085,6 +2088,9 @@ qboolean HMGTurret_CheckTarget( gentity_t *self, gentity_t *target, qboolean ign
if( target->client->pers.paused )
return qfalse;
if( level.paused )
return qfalse;
if( target->health <= 0 )
return qfalse;
@@ -2283,6 +2289,7 @@ void HTeslaGen_Think( gentity_t *self )
if( enemy->client && enemy->client->ps.stats[ STAT_PTEAM ] == PTE_ALIENS &&
enemy->health > 0 && !enemy->client->pers.paused &&
!level.paused &&
Distance( enemy->s.pos.trBase, self->s.pos.trBase ) <= TESLAGEN_RANGE )
{
VectorSubtract( enemy->s.pos.trBase, self->s.pos.trBase, dir );
@@ -2601,7 +2608,7 @@ void G_BuildableThink( gentity_t *ent, int msec )
//pack health, power and dcc
//toggle spawned flag for buildables
if( !ent->spawned && ent->health > 0 && !level.pausedTime )
if( !ent->spawned && ent->health > 0 )
{
if( ent->buildTime + bTime < level.time )
ent->spawned = qtrue;
+8
View File
@@ -4094,7 +4094,15 @@ void ClientCommand( int clientNum )
// do tests here to reduce the amount of repeated code
if( !( cmds[ i ].cmdFlags & CMD_INTERMISSION ) && ( level.intermissiontime || level.paused ) )
{
if ( level.paused &&
cmds[ i ].cmdHandler == Cmd_Team_f )
{
trap_SendServerCommand( clientNum,
"print \"Teams are locked when the game is paused\n\"" );
}
return;
}
if( cmds[ i ].cmdFlags & CMD_CHEAT && !g_cheats.integer )
{
+4
View File
@@ -1247,6 +1247,10 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker,
// check for godmode
if ( targ->flags & FL_GODMODE && !g_devmapNoGod.integer)
return;
// paused
if ( level.paused )
return;
if(targ->s.eType == ET_BUILDABLE && g_cheats.integer && g_devmapNoStructDmg.integer)
return;
+8 -2
View File
@@ -714,8 +714,14 @@ typedef struct
qboolean uncondHumanWin;
qboolean alienTeamLocked;
qboolean humanTeamLocked;
qboolean paused;
int pausedTime;
qboolean paused;
int pauseTime;
float pause_speed;
float pause_gravity;
float pause_knockback;
int pause_ff;
int pause_ffb;
int unlaggedIndex;
int unlaggedTimes[ MAX_UNLAGGED_MARKERS ];
+12 -15
View File
@@ -2387,20 +2387,19 @@ void G_RunFrame( int levelTime )
// if we are waiting for the level to restart, do nothing
if( level.restarted )
return;
if( level.paused )
if( level.paused )
{
level.pausedTime = levelTime - level.time;
if( ( level.pausedTime % 3000 ) == 0)
trap_SendServerCommand( -1, "cp \"The game has been paused. Please wait.\"" );
for(i=0;i<level.maxclients;i++)
{
level.clients[ i ].ps.commandTime = levelTime;
}
return;
if( ( levelTime % 6000 ) == 0)
trap_SendServerCommand( -1, "cp \"^3Game is paused.\"" );
level.startTime += levelTime - level.time;
trap_SetConfigstring( CS_LEVEL_START_TIME, va( "%i", level.startTime ) );
if( levelTime - level.pauseTime > 3 * 60000 )
{
trap_SendConsoleCommand( EXEC_APPEND, "!unpause" );
}
}
level.framenum++;
@@ -2545,8 +2544,6 @@ void G_RunFrame( int levelTime )
G_Printf( "%4i: %s\n", i, g_entities[ i ].classname );
trap_Cvar_Set( "g_listEntity", "0" );
level.pausedTime=0;
}
}
+3
View File
@@ -1537,6 +1537,9 @@ void FireWeapon( gentity_t *ent )
VectorCopy( ent->s.pos.trBase, muzzle );
}
// paused
if ( level.paused ) return;
// fire the specific weapon
switch( ent->s.weapon )
{