Added cg_RQ3_SuicideLikeARealMan, timestamping to server logs and

fixed stats for non-TP modes.
This commit is contained in:
Richard Allen 2002-08-28 23:10:06 +00:00
parent 649e9a9281
commit 5b338afa44
9 changed files with 100 additions and 40 deletions

View file

@ -58,6 +58,10 @@
* Players can now use the kill cmd, plummet and kill teammates after rounds in tp without loosing frags.
* Fixed message for players wearing a kevlar vest and get hiot by weapons other than the SSG
* Added the Keanu male radio soundset.
* Added a clientside cvar (cg_RQ3_SuicideLikeARealMan) to control frag lossage on suicides
* Fixed stats for non-TP gametypes
* Cleaned up server logging and added real timestamping to them.
# List fixes here for the 2.1 release

View file

@ -5,6 +5,10 @@
//-----------------------------------------------------------------------------
//
// $Log$
// Revision 1.122 2002/08/28 23:10:06 jbravo
// Added cg_RQ3_SuicideLikeARealMan, timestamping to server logs and
// fixed stats for non-TP modes.
//
// Revision 1.121 2002/08/28 18:52:09 jbravo
// Added the Keanu male radio sound set.
//
@ -1679,6 +1683,7 @@ extern vmCvar_t cg_RQ3_overlaycrosshair;
extern vmCvar_t cg_RQ3_tkokAutoPopup;
extern vmCvar_t cg_RQ3_radiovoice_male;
extern vmCvar_t cg_RQ3_radiovoice_female;
extern vmCvar_t cg_RQ3_SuicideLikeARealMan;
extern vmCvar_t cg_RQ3_dynamicRadio;
// Slicer: for the Anti-Cheat System

View file

@ -5,6 +5,10 @@
//-----------------------------------------------------------------------------
//
// $Log$
// Revision 1.106 2002/08/28 23:10:06 jbravo
// Added cg_RQ3_SuicideLikeARealMan, timestamping to server logs and
// fixed stats for non-TP modes.
//
// Revision 1.105 2002/08/28 18:52:09 jbravo
// Added the Keanu male radio sound set.
//
@ -399,6 +403,7 @@ vmCvar_t cg_RQ3_tkokAutoPopup;
// JBravo: radio cvars.
vmCvar_t cg_RQ3_radiovoice_male;
vmCvar_t cg_RQ3_radiovoice_female;
vmCvar_t cg_RQ3_SuicideLikeARealMan;
vmCvar_t cg_RQ3_dynamicRadio;
// Slicer: for the Anti-Cheat System
@ -645,8 +650,8 @@ static cvarTable_t cvarTable[] = { // bk001129
{&cg_RQ3_ssgColorG, "cg_RQ3_ssgColorG", "1.0", CVAR_ARCHIVE},
{&cg_RQ3_ssgColorB, "cg_RQ3_ssgColorB", "0.0", CVAR_ARCHIVE},
{&cg_RQ3_ssgColorA, "cg_RQ3_ssgColorA", "0.75", CVAR_ARCHIVE},
//Blaze: allow regular crosshair to be overlaid ontop of the ssg crosshair
{&cg_RQ3_overlaycrosshair, "cg_RQ3_overlaycrosshair", "0", CVAR_ARCHIVE},
//Blaze: allow regular crosshair to be overlaid ontop of the ssg crosshair
{&cg_RQ3_overlaycrosshair, "cg_RQ3_overlaycrosshair", "0", CVAR_ARCHIVE},
// JBravo: cvars for regular crosshairs and their colors
// Makro - changed default color to white; it was 0/1/0/.75 before
@ -657,6 +662,7 @@ static cvarTable_t cvarTable[] = { // bk001129
{&cg_RQ3_tkokAutoPopup, "cg_RQ3_tkokAutoPopup", "0", CVAR_ARCHIVE},
{&cg_RQ3_radiovoice_male, "cg_RQ3_radiovoice_male", "1", CVAR_USERINFO | CVAR_ARCHIVE},
{&cg_RQ3_radiovoice_female, "cg_RQ3_radiovoice_female", "1", CVAR_USERINFO | CVAR_ARCHIVE},
{&cg_RQ3_SuicideLikeARealMan, "cg_RQ3_SuicideLikeARealMan", "0", CVAR_USERINFO | CVAR_ARCHIVE},
{&cg_RQ3_dynamicRadio, "cg_RQ3_dynamicRadio", "1", CVAR_ARCHIVE},
{&cg_RQ3_impactEffects, "cg_RQ3_impactEffects", "1", CVAR_ARCHIVE},
{&cg_RQ3_laserAssist, "cg_RQ3_laserAssist", "0", CVAR_ARCHIVE},

View file

@ -5,6 +5,10 @@
//-----------------------------------------------------------------------------
//
// $Log$
// Revision 1.113 2002/08/28 23:10:06 jbravo
// Added cg_RQ3_SuicideLikeARealMan, timestamping to server logs and
// fixed stats for non-TP modes.
//
// Revision 1.112 2002/08/23 14:25:05 slicer
// Added a new Referee System with multiple ref support
//
@ -1129,7 +1133,14 @@ void ClientUserinfoChanged(int clientNum)
} else {
client->radioSetFemale = atoi(s);
}
// JBravo: Does the client get a frag reduced on suicides or not.
s = Info_ValueForKey(userinfo, "cg_RQ3_SuicideLikeARealMan");
if (!atoi(s)) {
client->SuicideLikeARealMan = 0;
} else {
client->SuicideLikeARealMan = atoi(s);
}
if (g_gametype.integer == GT_TEAMPLAY || g_gametype.integer == GT_CTF) {
if (client->sess.sessionTeam == TEAM_RED) {
Q_strncpyz(model2, g_RQ3_team1model.string, sizeof(model));

View file

@ -5,6 +5,10 @@
//-----------------------------------------------------------------------------
//
// $Log$
// Revision 1.124 2002/08/28 23:10:06 jbravo
// Added cg_RQ3_SuicideLikeARealMan, timestamping to server logs and
// fixed stats for non-TP modes.
//
// Revision 1.123 2002/08/27 11:28:43 jbravo
// Kevlar hits didnt tell the target who was shooting or of the kevlar got hit
//
@ -684,7 +688,7 @@ void SendObit(char *msg, gentity_t * deadguy, gentity_t * attacker)
int i;
gentity_t *other;
if (g_gametype.integer < GT_TEAM) {
if (g_gametype.integer != GT_TEAMPLAY) {
trap_SendServerCommand(-1, va("print \"%s\"", msg));
} else {
if (g_RQ3_showOwnKills.integer == 0) {
@ -1183,7 +1187,7 @@ void player_die(gentity_t * self, gentity_t * inflictor, gentity_t * attacker, i
if ((self->client->lasthurt_location & LOCATION_HEAD) == LOCATION_HEAD ||
(self->client->lasthurt_location & LOCATION_FACE) == LOCATION_FACE) {
// head kill
if (level.team_round_going) {
if ((g_gametype.integer == GT_TEAMPLAY && level.team_round_going) || g_gametype.integer != GT_TEAMPLAY) {
self->client->pers.records[REC_HEADDEATHS]++;
if (attacker && attacker->client)
attacker->client->pers.records[REC_HEADKILLS]++;
@ -1193,7 +1197,7 @@ void player_die(gentity_t * self, gentity_t * inflictor, gentity_t * attacker, i
} else if ((self->client->lasthurt_location & LOCATION_CHEST) == LOCATION_CHEST ||
(self->client->lasthurt_location & LOCATION_SHOULDER) == LOCATION_SHOULDER) {
// chest kill
if (level.team_round_going) {
if ((g_gametype.integer == GT_TEAMPLAY && level.team_round_going) || g_gametype.integer != GT_TEAMPLAY) {
self->client->pers.records[REC_CHESTDEATHS]++;
if (attacker && attacker->client)
attacker->client->pers.records[REC_CHESTKILLS]++;
@ -1203,7 +1207,7 @@ void player_die(gentity_t * self, gentity_t * inflictor, gentity_t * attacker, i
} else if ((self->client->lasthurt_location & LOCATION_STOMACH) == LOCATION_STOMACH ||
(self->client->lasthurt_location & LOCATION_GROIN) == LOCATION_GROIN) {
// stomach kill
if (level.team_round_going) {
if ((g_gametype.integer == GT_TEAMPLAY && level.team_round_going) || g_gametype.integer != GT_TEAMPLAY) {
self->client->pers.records[REC_STOMACHDEATHS]++;
if (attacker && attacker->client)
attacker->client->pers.records[REC_STOMACHKILLS]++;
@ -1213,7 +1217,7 @@ void player_die(gentity_t * self, gentity_t * inflictor, gentity_t * attacker, i
} else if ((self->client->lasthurt_location & LOCATION_LEG) == LOCATION_LEG ||
(self->client->lasthurt_location & LOCATION_FOOT) == LOCATION_FOOT) {
// leg kill
if (level.team_round_going) {
if ((g_gametype.integer == GT_TEAMPLAY && level.team_round_going) || g_gametype.integer != GT_TEAMPLAY) {
self->client->pers.records[REC_LEGDEATHS]++;
if (attacker && attacker->client)
attacker->client->pers.records[REC_LEGKILLS]++;
@ -1221,7 +1225,7 @@ void player_die(gentity_t * self, gentity_t * inflictor, gentity_t * attacker, i
PrintDeathMessage(self, attacker, LOC_LDAM, meansOfDeath);
hurt = LOC_LDAM;
} else {
// // non-location/world kill
// non-location/world kill
PrintDeathMessage(self, attacker, LOC_NOLOC, meansOfDeath);
hurt = 0;
}
@ -1309,7 +1313,7 @@ void player_die(gentity_t * self, gentity_t * inflictor, gentity_t * attacker, i
ResetKills(self);
// JBravo: make it OK to frag teammates after rounds are over.
if (attacker == self) {
if (g_gametype.integer == GT_TEAMPLAY && !level.team_round_going) {
if (g_gametype.integer == GT_TEAMPLAY && !level.team_round_going && !self->client->SuicideLikeARealMan) {
} else
AddScore(attacker, self->r.currentOrigin, -1);
} else if (OnSameTeam(self, attacker)) {
@ -1381,7 +1385,7 @@ void player_die(gentity_t * self, gentity_t * inflictor, gentity_t * attacker, i
attacker->client->lastKillTime = level.time;
}
} else {
if (g_gametype.integer == GT_TEAMPLAY && !level.team_round_going) {
if (g_gametype.integer == GT_TEAMPLAY && !level.team_round_going && !self->client->SuicideLikeARealMan) {
} else
AddScore(self, self->r.currentOrigin, -1);
}
@ -1399,7 +1403,6 @@ void player_die(gentity_t * self, gentity_t * inflictor, gentity_t * attacker, i
self->client->pers.records[REC_SUICIDES]++;
self->client->pers.records[REC_KILLS]--;
}
// AddScore(self, self->r.currentOrigin, -1);
if (g_gametype.integer != GT_TEAMPLAY) {
if (self->client->ps.powerups[PW_NEUTRALFLAG]) { // only happens in One Flag CTF
Team_ReturnFlag(TEAM_FREE);

View file

@ -5,6 +5,10 @@
//-----------------------------------------------------------------------------
//
// $Log$
// Revision 1.120 2002/08/28 23:10:06 jbravo
// Added cg_RQ3_SuicideLikeARealMan, timestamping to server logs and
// fixed stats for non-TP modes.
//
// Revision 1.119 2002/08/27 04:47:48 niceass
// ref say added
//
@ -693,6 +697,7 @@ struct gclient_s {
int radioGender;
int radioSetMale;
int radioSetFemale;
int SuicideLikeARealMan;
qboolean radioOff;
int team_wounds;
int team_wounds_before;

View file

@ -5,6 +5,10 @@
//-----------------------------------------------------------------------------
//
// $Log$
// Revision 1.111 2002/08/28 23:10:06 jbravo
// Added cg_RQ3_SuicideLikeARealMan, timestamping to server logs and
// fixed stats for non-TP modes.
//
// Revision 1.110 2002/08/27 01:25:22 jbravo
// Fixed scoring in TOURNAMENT mode and made it a legit gametype.
//
@ -307,6 +311,7 @@
#include "g_local.h"
#include "zcam.h"
#include "q_shared.h"
level_locals_t level;
@ -1688,24 +1693,22 @@ void QDECL G_LogPrintf(const char *fmt, ...)
{
va_list argptr;
char string[1024];
int min, tens, sec, i, l;
int i, l;
qtime_t now;
sec = level.time / 1000;
min = sec / 60;
sec -= min * 60;
tens = sec / 10;
sec -= tens * 10;
trap_RealTime(&now);
l = i = 0;
Com_sprintf(string, sizeof(string), "%3i:%i%i ", min, tens, sec);
string[0] = '\0';
Com_sprintf(string, sizeof(string), "[%02i:%02i:%02i] ", now.tm_hour, now.tm_min, now.tm_sec);
va_start(argptr, fmt);
vsprintf(string + 7, fmt, argptr);
vsprintf(string + 11, fmt, argptr);
va_end(argptr);
if (g_dedicated.integer) {
G_Printf("%s", string + 7);
G_Printf("%s", string + 11);
}
if (!level.logFile) {
@ -1739,8 +1742,17 @@ void LogExit(const char *string)
{
int i, numSorted;
gclient_t *cl;
qtime_t now;
char* names_day[] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };
char* names_month[] = { "January", "February", "March", "April", "May", "June", "July", "August",
"September", "October", "November", "December" };
G_LogPrintf("Exit: %s\n", string);
trap_RealTime(&now);
G_LogPrintf("Game ending at %s %i %s %i %i:%i:%i : %s\n", names_day[now.tm_wday], now.tm_mday, names_month[now.tm_mon],
(now.tm_year)+1900, now.tm_hour, now.tm_min, now.tm_sec, string);
trap_SendServerCommand(-1, va("print \"Game ending at %s %i %s %i %i:%i:%i.\n\"", names_day[now.tm_wday],
now.tm_mday, names_month[now.tm_mon], (now.tm_year)+1900, now.tm_hour,
now.tm_min, now.tm_sec, string));
level.intermissionQueued = level.time;

View file

@ -5,6 +5,10 @@
//-----------------------------------------------------------------------------
//
// $Log$
// Revision 1.30 2002/08/28 23:10:06 jbravo
// Added cg_RQ3_SuicideLikeARealMan, timestamping to server logs and
// fixed stats for non-TP modes.
//
// Revision 1.29 2002/06/16 20:06:14 jbravo
// Reindented all the source files with "indent -kr -ut -i8 -l120 -lc120 -sob -bad -bap"
//
@ -117,10 +121,12 @@ void G_ExplodeMissile(gentity_t * ent)
ent->splashMethodOfDeath)) {
g_entities[ent->r.ownerNum].client->accuracy_hits++;
// Elder: Statistics tracking
if (ent->s.weapon == WP_KNIFE && level.team_round_going)
if (ent->s.weapon == WP_KNIFE &&
((g_gametype.integer == GT_TEAMPLAY && level.team_round_going) || g_gametype.integer != GT_TEAMPLAY))
g_entities[ent->r.ownerNum].client->pers.records[REC_KNIFETHROWHITS]++;
//g_entities[ent->r.ownerNum].client->knifeHits++;
if (ent->s.weapon == WP_GRENADE && level.team_round_going)
if (ent->s.weapon == WP_GRENADE &&
((g_gametype.integer == GT_TEAMPLAY && level.team_round_going) || g_gametype.integer != GT_TEAMPLAY))
g_entities[ent->r.ownerNum].client->pers.records[REC_GRENADEHITS]++;
//g_entities[ent->r.ownerNum].client->grenHits++;
}
@ -171,10 +177,12 @@ void G_MissileImpact(gentity_t * ent, trace_t * trace)
if (LogAccuracyHit(other, &g_entities[ent->r.ownerNum])) {
g_entities[ent->r.ownerNum].client->accuracy_hits++;
// Elder: Statistics tracking
if (ent->s.weapon == WP_KNIFE && level.team_round_going)
if (ent->s.weapon == WP_KNIFE &&
((g_gametype.integer == GT_TEAMPLAY && level.team_round_going) || g_gametype.integer != GT_TEAMPLAY))
g_entities[ent->r.ownerNum].client->pers.records[REC_KNIFETHROWHITS]++;
//g_entities[ent->r.ownerNum].client->knifeHits++;
if (ent->s.weapon == WP_GRENADE && level.team_round_going)
if (ent->s.weapon == WP_GRENADE &&
((g_gametype.integer == GT_TEAMPLAY && level.team_round_going) || g_gametype.integer != GT_TEAMPLAY))
g_entities[ent->r.ownerNum].client->pers.records[REC_GRENADEHITS]++;
//g_entities[ent->r.ownerNum].client->grenHits++;
hitClient = qtrue;
@ -357,10 +365,12 @@ void G_MissileImpact(gentity_t * ent, trace_t * trace)
if (!hitClient) {
g_entities[ent->r.ownerNum].client->accuracy_hits++;
// Elder: Statistics tracking
if (ent->s.weapon == WP_KNIFE && level.team_round_going)
if (ent->s.weapon == WP_KNIFE &&
((g_gametype.integer == GT_TEAMPLAY && level.team_round_going) || g_gametype.integer != GT_TEAMPLAY))
g_entities[ent->r.ownerNum].client->pers.records[REC_KNIFETHROWHITS]++;
//g_entities[ent->r.ownerNum].client->knifeHits++;
if (ent->s.weapon == WP_GRENADE && level.team_round_going)
if (ent->s.weapon == WP_GRENADE &&
((g_gametype.integer == GT_TEAMPLAY && level.team_round_going) || g_gametype.integer != GT_TEAMPLAY))
g_entities[ent->r.ownerNum].client->pers.records[REC_GRENADEHITS]++;
//g_entities[ent->r.ownerNum].client->grenHits++;
}
@ -564,7 +574,7 @@ gentity_t *fire_grenade(gentity_t * self, vec3_t start, vec3_t dir)
//Elder: grenade toggle distances/speeds
if (self->client) {
// Elder: Statistics tracking
if (level.team_round_going)
if ((g_gametype.integer == GT_TEAMPLAY && level.team_round_going) || g_gametype.integer != GT_TEAMPLAY)
self->client->pers.records[REC_GRENADESHOTS]++;
if (self->client->ps.stats[STAT_HEALTH] <= 0 ||
// (self->client->ps.stats[STAT_RQ3] & RQ3_BANDAGE_WORK) == RQ3_BANDAGE_WORK ||
@ -633,7 +643,7 @@ gentity_t *fire_knife(gentity_t * self, vec3_t start, vec3_t dir)
VectorCopy(dir, bolt->s.apos.trBase);
VectorCopy(dir, bolt->r.currentAngles);
if (self->client && level.team_round_going) {
if (self->client && ((g_gametype.integer == GT_TEAMPLAY && level.team_round_going) || g_gametype.integer != GT_TEAMPLAY)) {
// Elder: Statistics tracking
self->client->pers.records[REC_KNIFETHROWSHOTS]++;
}

View file

@ -5,6 +5,10 @@
//-----------------------------------------------------------------------------
//
// $Log$
// Revision 1.79 2002/08/28 23:10:06 jbravo
// Added cg_RQ3_SuicideLikeARealMan, timestamping to server logs and
// fixed stats for non-TP modes.
//
// Revision 1.78 2002/08/23 23:07:01 blaze
// Should have fixed the unkickable thing breaking explosive breakables.
//
@ -556,7 +560,7 @@ void Bullet_Fire(gentity_t * ent, float spread, int damage, int MOD)
if (LogAccuracyHit(traceEnt, ent)) {
ent->client->accuracy_hits++;
// Elder: Statistics tracking
if (level.team_round_going) {
if ((g_gametype.integer == GT_TEAMPLAY && level.team_round_going) || g_gametype.integer != GT_TEAMPLAY) {
switch (MOD) {
case MOD_PISTOL:
ent->client->pers.records[REC_MK23HITS]++;
@ -746,18 +750,18 @@ void ShotgunPattern(vec3_t origin, vec3_t origin2, int seed, gentity_t * ent, in
//Elder: added
if (shotType == WP_M3) {
// Elder: Statistics tracking
if (level.team_round_going)
if ((g_gametype.integer == GT_TEAMPLAY && level.team_round_going) || g_gametype.integer != GT_TEAMPLAY)
ent->client->pers.records[REC_M3SHOTS]++;
count = DEFAULT_M3_COUNT;
} else if (shotType == WP_HANDCANNON) {
// Elder: Statistics tracking
if (level.team_round_going)
if ((g_gametype.integer == GT_TEAMPLAY && level.team_round_going) || g_gametype.integer != GT_TEAMPLAY)
ent->client->pers.records[REC_HANDCANNONSHOTS]++;
count = DEFAULT_HANDCANNON_COUNT;
hc_multipler = 4;
} else {
// Elder: Statistics tracking
if (level.team_round_going)
if ((g_gametype.integer == GT_TEAMPLAY && level.team_round_going) || g_gametype.integer != GT_TEAMPLAY)
ent->client->pers.records[REC_HANDCANNONSHOTS]++;
count = DEFAULT_HANDCANNON_COUNT;
hc_multipler = 5;
@ -784,7 +788,7 @@ void ShotgunPattern(vec3_t origin, vec3_t origin2, int seed, gentity_t * ent, in
hitClient = qtrue;
ent->client->accuracy_hits++;
// Elder: Statistics tracking
if (level.team_round_going) {
if ((g_gametype.integer == GT_TEAMPLAY && level.team_round_going) || g_gametype.integer != GT_TEAMPLAY) {
switch (shotType) {
case WP_M3:
ent->client->pers.records[REC_M3HITS]++;
@ -1031,7 +1035,7 @@ void Knife_Attack(gentity_t * self, int damage)
gentity_t *hitent;
gentity_t *tent;
if (self->client && level.team_round_going)
if (self->client && ((g_gametype.integer == GT_TEAMPLAY && level.team_round_going) || g_gametype.integer != GT_TEAMPLAY))
self->client->pers.records[REC_KNIFESLASHSHOTS]++;
VectorMA(muzzle, KNIFE_RANGE, forward, end);
@ -1064,7 +1068,7 @@ void Knife_Attack(gentity_t * self, int damage)
} else if (self->client->knife_sound == -2) { // Hit player
tent = G_TempEntity(tr.endpos, EV_RQ3_SOUND);
tent->s.eventParm = RQ3_SOUND_KNIFEHIT;
if (self->client && level.team_round_going)
if (self->client && ((g_gametype.integer == GT_TEAMPLAY && level.team_round_going) || g_gametype.integer != GT_TEAMPLAY))
self->client->pers.records[REC_KNIFESLASHHITS]++;
}
self->client->knife_sound = 0;
@ -1397,7 +1401,7 @@ void Weapon_SSG3000_Fire(gentity_t * ent)
int Material;
// Elder: Statistics tracking
if (ent->client && level.team_round_going)
if (ent->client && ((g_gametype.integer == GT_TEAMPLAY && level.team_round_going) || g_gametype.integer != GT_TEAMPLAY))
ent->client->pers.records[REC_SSG3000SHOTS]++;
VectorMA(muzzle, 8192 * 16, forward, end);
@ -1634,7 +1638,7 @@ void Weapon_SSG3000_Fire(gentity_t * ent)
ent->client->rewardTime = level.time + REWARD_SPRITE_TIME;
}
ent->client->accuracy_hits++;
if (level.team_round_going)
if ((g_gametype.integer == GT_TEAMPLAY && level.team_round_going) || g_gametype.integer != GT_TEAMPLAY)
ent->client->pers.records[REC_SSG3000HITS]++;
//ent->client->ssgHits++;
}
@ -1882,7 +1886,7 @@ qboolean LogAccuracyHit(gentity_t * target, gentity_t * attacker)
if (target->client->ps.stats[STAT_HEALTH] <= 0) {
// Elder: Statistics tracking
if (level.team_round_going)
if ((g_gametype.integer == GT_TEAMPLAY && level.team_round_going) || g_gametype.integer != GT_TEAMPLAY)
attacker->client->pers.records[REC_CORPSESHOTS]++;
return qfalse;
}