diff --git a/src/game/g_active.c b/src/game/g_active.c index 017dc39..4e519c9 100644 --- a/src/game/g_active.c +++ b/src/game/g_active.c @@ -944,20 +944,21 @@ void ClientTimerActions( gentity_t *ent, int msec ) ent->client->pers.statscounters.spreefeeds -= 2; if( ent->client->pers.statscounters.spreekills > 1 ) ent->client->pers.statscounters.spreekills -= 2; - if( ent->client->pers.statscounters.spreebleeds > 3 ) + if( ent->client->pers.statscounters.spreebleeds ) { - ent->client->pers.statscounters.spreebleeds -= 4; if( ent->client->pers.bleeder ) + ent->client->pers.statscounters.spreebleeds -= 8; + else + ent->client->pers.statscounters.spreebleeds -= 4; + if( ent->client->pers.statscounters.spreebleeds < 0 ) + ent->client->pers.statscounters.spreebleeds = 0; + if( ent->client->pers.bleeder && + !ent->client->pers.statscounters.spreebleeds ) { - if( ent->client->pers.statscounters.spreebleeds > 3 ) - ent->client->pers.statscounters.spreebleeds -= 4; - if( ent->client->pers.statscounters.spreebleeds < 4 ) - { - ent->client->pers.bleeder = qfalse; - trap_SendServerCommand( ent-g_entities, "cp \"^2Your base has forgiven you^7\"" ); - if( level.bleeders ) - level.bleeders--; - } + ent->client->pers.bleeder = qfalse; + trap_SendServerCommand( ent-g_entities, "cp \"^2Your base has forgiven you^7\"" ); + if( level.bleeders ) + level.bleeders--; } } diff --git a/src/game/g_admin.c b/src/game/g_admin.c index 236bcf7..510fa57 100644 --- a/src/game/g_admin.c +++ b/src/game/g_admin.c @@ -246,8 +246,9 @@ g_admin_cmd_t g_admin_cmds[ ] = }, {"outlaw", G_admin_outlaw, "O", - "add to a player's bleed counter, making their base turn on them." - " adding a bleed value will add that many points to their bleed counter, 0 will pardon them", + "adjust a player's bleed counter, usually to make their base turn on them." + " bleed value can be '?' to query their current value, a number to add and activate bleed status," + " +num or -num will silently adjust their current bleed value, 0 will pardon them", "(^5name|slot^7) (^5bleed value)" }, @@ -7400,6 +7401,7 @@ qboolean G_admin_outlaw( gentity_t *ent, int skiparg ) char valuebuf[ 8 ]; gentity_t *vic; int points; + qboolean activate = qtrue; if( !g_bleedingSpree.integer ) { @@ -7419,10 +7421,22 @@ qboolean G_admin_outlaw( gentity_t *ent, int skiparg ) ADMP( va( "^3!mute: ^7%s\n", err ) ); return qfalse; } + vic = &g_entities[ pids[ 0 ] ]; if( G_SayArgc() > 2 + skiparg ) { G_SayArgv( 2 + skiparg, valuebuf, sizeof( valuebuf ) ); + if( valuebuf[ 0 ] == '?' ) + { + ADMP( va( "^3!outlaw: ^7%s^7's bleeder value is %d\n", + vic->client->pers.netname, + vic->client->pers.statscounters.spreebleeds ) ); + return qtrue; + } + if( valuebuf[ 0 ] == '+' || valuebuf[ 0 ] == '-' ) + { + activate = qfalse; + } points = atoi( valuebuf ); } else @@ -7432,15 +7446,16 @@ qboolean G_admin_outlaw( gentity_t *ent, int skiparg ) if( !admin_higher( ent, &g_entities[ pids[ 0 ] ] ) ) { - ADMP( "^3!mute: ^7sorry, but your intended victim has a higher admin" + ADMP( "^3!outlaw: ^7sorry, but your intended victim has a higher admin" " level than you\n" ); return qfalse; } - vic = &g_entities[ pids[ 0 ] ]; if( points ) { vic->client->pers.statscounters.spreebleeds += points; - if( !vic->client->pers.bleeder ) + if( vic->client->pers.statscounters.spreebleeds < 1 ) + vic->client->pers.statscounters.spreebleeds = 1; + if( activate && !vic->client->pers.bleeder ) { vic->client->pers.bleeder = qtrue; level.bleeders++; @@ -7449,10 +7464,19 @@ qboolean G_admin_outlaw( gentity_t *ent, int skiparg ) vic->client->pers.netname, ( ent ) ? ent->client->pers.netname : "console" ) ); } + else + { + AP( va( "print \"^3!outlaw: ^7%s^7 bleeder value has been adjusted by ^7%s\n\"", + vic->client->pers.netname, + ( ent ) ? ent->client->pers.netname : "console" ) ); + ADMP( va( "^3!outlaw: ^7%s^7's bleeder value is now %d\n", + vic->client->pers.netname, + vic->client->pers.statscounters.spreebleeds ) ); + } } else { - vic->client->pers.statscounters.spreebleeds = 8; + vic->client->pers.statscounters.spreebleeds = 1; AP( va( "print \"^3!outlaw: ^7%s^7 has been pardoned by ^7%s\n\"", vic->client->pers.netname, diff --git a/src/game/g_admin.h b/src/game/g_admin.h index d77145b..0621f9a 100644 --- a/src/game/g_admin.h +++ b/src/game/g_admin.h @@ -85,9 +85,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define ADMF_ADMINCHAT '?' #define ADMF_BUILDCHECK ')' -#define ADMF_SHOWOFF '(' - - #define ADMF_BANIMMUNITY '&' #define MAX_ADMIN_LISTITEMS 20 diff --git a/src/game/g_buildable.c b/src/game/g_buildable.c index f1d2076..b17575a 100644 --- a/src/game/g_buildable.c +++ b/src/game/g_buildable.c @@ -1468,6 +1468,18 @@ void ABooster_Touch( gentity_t *self, gentity_t *other, trace_t *trace ) if( client && client->ps.stats[ STAT_PTEAM ] == PTE_HUMANS ) return; + if( client->pers.bleeder ) + { + if( !(client->ps.stats[ STAT_STATE ] & SS_POISONCLOUDED ) ) + { + client->ps.stats[ STAT_STATE ] |= SS_POISONCLOUDED; + client->lastPoisonCloudedTime = level.time; + trap_SendServerCommand( client->ps.clientNum, "poisoncloud" ); + trap_SendServerCommand( client->ps.clientNum, "print \"Your booster has poisoned you\n\"" ); + } + return; + } + //only allow boostage once every 30 seconds if( client->lastBoostedTime + BOOSTER_INTERVAL > level.time ) return; @@ -1910,6 +1922,7 @@ void HMedistat_Think( gentity_t *self ) { if( player->health < player->client->ps.stats[ STAT_MAX_HEALTH ] && player->client->ps.pm_type != PM_DEAD && + !player->client->pers.bleeder && self->enemy == player ) occupied = qtrue; } @@ -1927,7 +1940,9 @@ void HMedistat_Think( gentity_t *self ) if( player->flags & FL_NOTARGET ) continue; // notarget cancels even beneficial effects? - if( player->client && player->client->ps.stats[ STAT_PTEAM ] == PTE_HUMANS && player->client->radiationTimer < g_radiationTime.integer ) + if( player->client && player->client->ps.stats[ STAT_PTEAM ] == PTE_HUMANS && + player->client->radiationTimer < g_radiationTime.integer && + !player->client->pers.bleeder ) { if( player->health < player->client->ps.stats[ STAT_MAX_HEALTH ] && player->client->ps.pm_type != PM_DEAD ) @@ -1947,6 +1962,34 @@ void HMedistat_Think( gentity_t *self ) } } + // bleeding spree retribution + if( level.bleeders && !self->enemy ) + { + //look for something to hurt + for( i = 0; i < num; i++ ) + { + player = &g_entities[ entityList[ i ] ]; + + if( player->client && player->client->ps.stats[ STAT_PTEAM ] == PTE_HUMANS && player->client->pers.bleeder ) + { + if( player->health > 0 && + player->client->ps.pm_type != PM_DEAD ) + { + self->enemy = player; + + //start the heal anim + if( !self->active ) + { + G_SetBuildableAnim( self, BANIM_ATTACK1, qfalse ); + self->active = qtrue; + } + } + if( BG_InventoryContainsUpgrade( UP_MEDKIT, player->client->ps.stats ) ) + BG_RemoveUpgradeFromInventory( UP_MEDKIT, player->client->ps.stats ); + } + } + } + //nothing left to heal so go back to idling if( !self->enemy && self->active ) { @@ -1959,6 +2002,12 @@ void HMedistat_Think( gentity_t *self ) } else if( self->enemy ) //heal! { + if( self->enemy->client->pers.bleeder ) + { + G_Damage( self->enemy, NULL, NULL, NULL, NULL, 10, 0, MOD_SLIME ); + return; + } + if( self->enemy->client && self->enemy->client->ps.stats[ STAT_STATE ] & SS_POISONED ) self->enemy->client->ps.stats[ STAT_STATE ] &= ~SS_POISONED; diff --git a/src/game/g_client.c b/src/game/g_client.c index 9c754ca..710f76b 100644 --- a/src/game/g_client.c +++ b/src/game/g_client.c @@ -1530,18 +1530,8 @@ void ClientBegin( int clientNum ) // locate ent at a spawn point ClientSpawn( ent, NULL, NULL, NULL ); - if( G_admin_permission( ent, ADMF_SHOWOFF) ) - { - trap_GetUserinfo( clientNum, userinfo, sizeof( userinfo ) ); - trap_SendServerCommand( -1, va( "print \"%s^7%s" S_COLOR_WHITE " entered the game\n\"", flag, client->pers.netname ) ); - Info_SetValueForKey( userinfo, "name", va( "%s^7%s", flag, client->pers.netname ) ); - trap_SetUserinfo( clientNum, userinfo ); - ClientUserinfoChanged( clientNum ); - } - else - { - trap_SendServerCommand( -1, va( "print \"%s" S_COLOR_WHITE " entered the game\n\"", client->pers.netname ) ); - } + + trap_SendServerCommand( -1, va( "print \"%s" S_COLOR_WHITE " entered the game\n\"", client->pers.netname ) ); // name can change between ClientConnect() and ClientBegin() G_admin_namelog_update( client, qfalse ); diff --git a/src/game/g_cmds.c b/src/game/g_cmds.c index 2092eaf..4aad5be 100644 --- a/src/game/g_cmds.c +++ b/src/game/g_cmds.c @@ -4247,7 +4247,7 @@ void Cmd_PTRCVerify_f( gentity_t *ent ) { trap_SendServerCommand( ent - g_entities, "print \"This PTR code is already in use\n\"" ); - G_AdminsPrintf("%s^7 attempted to use %s^7's PTR code", ent->client->pers.netname, players->client->pers.netname); + G_AdminsPrintf("%s^7 attempted to use %s^7's PTR code\n", ent->client->pers.netname, players->client->pers.netname); } } @@ -4313,7 +4313,7 @@ void Cmd_PTRCRestore_f( gentity_t *ent ) { trap_SendServerCommand( ent - g_entities, "print \"This PTR code is already in use\n\"" ); - G_AdminsPrintf("%s^7 attempted to use %s^7's PTR code", ent->client->pers.netname, players->client->pers.netname); + G_AdminsPrintf("%s^7 attempted to use %s^7's PTR code\n", ent->client->pers.netname, players->client->pers.netname); } } diff --git a/src/game/g_local.h b/src/game/g_local.h index cb32448..94a0acb 100644 --- a/src/game/g_local.h +++ b/src/game/g_local.h @@ -1403,8 +1403,6 @@ extern vmCvar_t g_specAspec; extern vmCvar_t g_healShove; -extern vmCvar_t g_chatAdminPrefix; - extern vmCvar_t g_modBuildableHealth; // Buildable health extern vmCvar_t g_modBuildableSpeed; // Buildable fire rate extern vmCvar_t g_modHumanStamina; // Human stamina diff --git a/src/game/g_main.c b/src/game/g_main.c index bf75286..91f633b 100644 --- a/src/game/g_main.c +++ b/src/game/g_main.c @@ -220,8 +220,6 @@ vmCvar_t g_specAspec; vmCvar_t g_healShove; -vmCvar_t g_chatAdminPrefix; - vmCvar_t g_modBuildableHealth; vmCvar_t g_modBuildableSpeed; vmCvar_t g_modHumanStamina; @@ -275,8 +273,6 @@ static cvarTable_t gameCvarTable[ ] = { &g_healShove, "g_healShove", "1", CVAR_ARCHIVE, 0, qtrue }, - { &g_chatAdminPrefix, "g_chatAdminPrefix", "^3@", CVAR_ARCHIVE, 0, qtrue }, - { &g_modBuildableHealth, "g_modBuildableHealth", "0", CVAR_ARCHIVE, 0, qfalse }, { &g_modBuildableSpeed, "g_modBuildableSpeed", "0", CVAR_ARCHIVE, 0, qfalse }, { &g_modHumanStamina, "g_modHumanStamina", "0", CVAR_ARCHIVE, 0, qfalse },