From 4f75e08261756e17b6940db4dc0981cbc425c9d7 Mon Sep 17 00:00:00 2001 From: Dino <8dino2@gmail.com> Date: Sun, 3 Sep 2023 09:48:24 -0400 Subject: [PATCH] Gun stats, more cleanup --- actionlite/a_game.cpp | 54 +++++++++++++++--------------- actionlite/a_team.cpp | 62 +++++++++++++++------------------- actionlite/g_local.h | 73 +++++++++++++++++++++++++++++++++++++++-- actionlite/g_main.cpp | 17 ++++++++++ actionlite/p_client.cpp | 60 ++++++++++++++++----------------- 5 files changed, 170 insertions(+), 96 deletions(-) diff --git a/actionlite/a_game.cpp b/actionlite/a_game.cpp index 6b6a895..4ef3d3f 100644 --- a/actionlite/a_game.cpp +++ b/actionlite/a_game.cpp @@ -453,7 +453,7 @@ void PlaceHolder( edict_t * ent ); // p_weapon.c void ShellTouch(edict_t * self, edict_t * other, cplane_t * plane, csurface_t * surf) { - if (self->owner->client->curr_weap == M3_NUM) + if (self->owner->client->curr_weap == IT_WEAPON_M3) gi.sound(self, CHAN_WEAPON, gi.soundindex("weapons/shellhit1.wav"), 1, ATTN_STATIC, 0); else if (random() < 0.5) gi.sound(self, CHAN_WEAPON, gi.soundindex("weapons/tink1.wav"), 0.2, ATTN_STATIC, 0); @@ -519,30 +519,30 @@ void EjectShell(edict_t * self, vec3_t start, int toggle) // zucc spent a fair amount of time hacking these until they look ok, // several of them could be improved however. - if (self->client->curr_weap == MK23_NUM) { + if (self->client->curr_weap == IT_WEAPON_MK23) { VectorMA(start, left ? -7 : .4, right, start); VectorMA(start, left ? 5 : 2, forward, start); VectorMA(start, left ? -10 : -8, up, start); - } else if (self->client->curr_weap == M4_NUM) { + } else if (self->client->curr_weap == IT_WEAPON_M4) { VectorMA(start, left ? -10 : 5, right, start); VectorMA(start, left ? 6 : 12, forward, start); VectorMA(start, left ? -9 : -11, up, start); - } else if (self->client->curr_weap == MP5_NUM) { + } else if (self->client->curr_weap == IT_WEAPON_MP5) { VectorMA(start, left ? -10 : 6, right, start); VectorMA(start, left ? 6 : 8, forward, start); VectorMA(start, left ? -9 : -10, up, start); - } else if (self->client->curr_weap == SNIPER_NUM) { + } else if (self->client->curr_weap == IT_WEAPON_SNIPER) { VectorMA(start, fix * 11, right, start); VectorMA(start, 2, forward, start); VectorMA(start, -11, up, start); - } else if (self->client->curr_weap == M3_NUM) { + } else if (self->client->curr_weap == IT_WEAPON_M3) { VectorMA(start, left ? -9 : 3, right, start); VectorMA(start, left ? 4 : 4, forward, start); VectorMA(start, left ? -1 : -1, up, start); } - else if (self->client->curr_weap == DUAL_NUM) { + else if (self->client->curr_weap == IT_WEAPON_DUALMK23) { if (self->client->pers.hand == LEFT_HANDED) VectorMA(start, ((toggle == 1) ? 8 : -8), right, start); else @@ -654,9 +654,9 @@ void EjectShell(edict_t * self, vec3_t start, int toggle) VectorCopy(start, shell->old_origin); if (fix == 0) // we want some velocity on those center handed ones fix = 1; - if (self->client->curr_weap == SNIPER_NUM) + if (self->client->curr_weap == IT_WEAPON_SNIPER) VectorMA(shell->velocity, fix * (-35 + random() * -60), right, shell->velocity); - else if (self->client->curr_weap == DUAL_NUM) { + else if (self->client->curr_weap == IT_WEAPON_DUALMK23) { if (self->client->pers.hand == LEFT_HANDED) VectorMA(shell->velocity, (toggle == 1 ? 1 : -1) * (35 + random() * 60), right, shell->velocity); @@ -666,7 +666,7 @@ void EjectShell(edict_t * self, vec3_t start, int toggle) } else VectorMA(shell->velocity, fix * (35 + random() * 60), right, shell->velocity); VectorMA(shell->avelocity, 500, right, shell->avelocity); - if (self->client->curr_weap == SNIPER_NUM) + if (self->client->curr_weap == IT_WEAPON_SNIPER) VectorMA(shell->velocity, 60 + 40, up, shell->velocity); else VectorMA(shell->velocity, 60 + random() * 90, up, shell->velocity); @@ -674,9 +674,9 @@ void EjectShell(edict_t * self, vec3_t start, int toggle) shell->movetype = MOVETYPE_BOUNCE; shell->solid = SOLID_BBOX; - if( (self->client->curr_weap == M3_NUM) || (self->client->curr_weap == HC_NUM) ) + if( (self->client->curr_weap == IT_WEAPON_M3) || (self->client->curr_weap == IT_WEAPON_HANDCANNON) ) shell->s.modelindex = gi.modelindex("models/weapons/shell/tris2.md2"); - else if( (self->client->curr_weap == SNIPER_NUM) || (self->client->curr_weap == M4_NUM) ) + else if( (self->client->curr_weap == IT_WEAPON_SNIPER) || (self->client->curr_weap == IT_WEAPON_M4) ) shell->s.modelindex = gi.modelindex("models/weapons/shell/tris3.md2"); else shell->s.modelindex = gi.modelindex("models/weapons/shell/tris.md2"); @@ -798,7 +798,7 @@ void AttachToEntity( edict_t *self, edict_t *onto ) UpdateAttachedPos( self ); } -qboolean CanBeAttachedTo( const edict_t *ent ) +bool CanBeAttachedTo( const edict_t *ent ) { return (ent && ( (Q_strnicmp( ent->classname, "func_door", 9 ) == 0) || (Q_stricmp( ent->classname, "func_plat" ) == 0) @@ -810,7 +810,7 @@ qboolean CanBeAttachedTo( const edict_t *ent ) void AddDecal(edict_t * self, trace_t * tr) { edict_t *decal, *dec; - qboolean attached; + bool attached; if (bholelimit->value < 1) return; @@ -862,7 +862,7 @@ void AddSplat(edict_t * self, vec3_t point, trace_t * tr) { edict_t *splat, *spt; float r; - qboolean attached; + bool attached; if (splatlimit->value < 1) return; @@ -966,56 +966,56 @@ void GetAmmo( edict_t *ent, char *buf ) if( IS_ALIVE(ent) && ent->client->weapon ) { - switch( ent->client->curr_weap ) + switch( ent->client->pers.weapon->id ) { - case MK23_NUM: + case IT_WEAPON_MK23: sprintf( buf, "%d round%s (%d extra mag%s)", ent->client->mk23_rds, ent->client->mk23_rds == 1 ? "" : "s", ent->client->inventory[ent->client->ammo_index], ent->client->inventory[ent->client->ammo_index] == 1 ? "" : "s"); return; - case MP5_NUM: + case IT_WEAPON_MP5: sprintf( buf, "%d round%s (%d extra mag%s)", ent->client->mp5_rds, ent->client->mp5_rds == 1 ? "" : "s", ent->client->inventory[ent->client->ammo_index], ent->client->inventory[ent->client->ammo_index] == 1 ? "" : "s"); return; - case M4_NUM: + case IT_WEAPON_M4: sprintf( buf, "%d round%s (%d extra mag%s)", ent->client->m4_rds, ent->client->m4_rds == 1 ? "" : "s", ent->client->inventory[ent->client->ammo_index], ent->client->inventory[ent->client->ammo_index] == 1 ? "" : "s"); return; - case M3_NUM: + case IT_WEAPON_M3: sprintf( buf, "%d shell%s (%d extra shell%s)", ent->client->shot_rds, ent->client->shot_rds == 1 ? "" : "s", ent->client->inventory[ent->client->ammo_index], ent->client->inventory[ent->client->ammo_index] == 1 ? "" : "s"); return; - case HC_NUM: + case IT_WEAPON_HANDCANNON: sprintf( buf, "%d shell%s (%d extra shell%s)", ent->client->cannon_rds, ent->client->cannon_rds == 1 ? "" : "s", ent->client->inventory[ent->client->ammo_index], ent->client->inventory[ent->client->ammo_index] == 1 ? "" : "s"); return; - case SNIPER_NUM: + case IT_WEAPON_SNIPER: sprintf( buf, "%d round%s (%d extra round%s)", ent->client->sniper_rds, ent->client->sniper_rds == 1 ? "" : "s", ent->client->inventory[ent->client->ammo_index], ent->client->inventory[ent->client->ammo_index] == 1 ? "" : "s"); return; - case DUAL_NUM: + case IT_WEAPON_DUALMK23: sprintf( buf, "%d round%s (%d extra mag%s)", ent->client->dual_rds, ent->client->dual_rds == 1 ? "" : "s", ent->client->inventory[ent->client->ammo_index], ent->client->inventory[ent->client->ammo_index] == 1 ? "" : "s"); return; - case KNIFE_NUM: - ammo = INV_AMMO( ent, KNIFE_NUM ); + case IT_WEAPON_KNIFE: + ammo = INV_AMMO( ent, IT_WEAPON_KNIFE ); sprintf( buf, "%d kni%s", ammo, (ammo == 1) ? "fe" : "ves" ); return; - case GRENADE_NUM: - ammo = INV_AMMO( ent, GRENADE_NUM ); + case IT_WEAPON_GRENADES: + ammo = INV_AMMO( ent, IT_WEAPON_GRENADES ); sprintf( buf, "%d grenade%s", ammo, (ammo == 1) ? "" : "s" ); return; } diff --git a/actionlite/a_team.cpp b/actionlite/a_team.cpp index fdc39be..e1cf9a1 100644 --- a/actionlite/a_team.cpp +++ b/actionlite/a_team.cpp @@ -977,13 +977,11 @@ void JoinTeam (edict_t * ent, int desired_team, int skip_menuclose) if (ctf->value) { ent->client->resp.ctf_state = CTF_STATE_START; - gi.bprintf (PRINT_HIGH, "%s %s %s.\n", ent->client->pers.netname, a, CTFTeamName(desired_team)); - IRC_printf (IRC_T_GAME, "%n %s %n.", ent->client->pers.netname, a, CTFTeamName(desired_team)); + gi.LocBroadcast_Print (PRINT_HIGH, "%s %s %s.\n", ent->client->pers.netname, a, CTFTeamName(desired_team)); } else { - gi.bprintf (PRINT_HIGH, "%s %s %s.\n", ent->client->pers.netname, a, TeamName(desired_team)); - IRC_printf (IRC_T_GAME, "%n %s %n.", ent->client->pers.netname, a, TeamName(desired_team)); + gi.LocBroadcast_Print (PRINT_HIGH, "%s %s %s.\n", ent->client->pers.netname, a, TeamName(desired_team)); } ent->client->resp.joined_team = level.realFramenum; @@ -1044,8 +1042,7 @@ void LeaveTeam (edict_t * ent) genderstr = GENDER_STR(ent, "his", "her", "its"); - gi.bprintf (PRINT_HIGH, "%s left %s team.\n", ent->client->pers.netname, genderstr); - IRC_printf (IRC_T_GAME, "%n left %n team.", ent->client->pers.netname, genderstr); + gi.LocBroadcast_Print (PRINT_HIGH, "%s left %s team.\n", ent->client->pers.netname, genderstr); MM_LeftTeam( ent ); EspLeaderLeftTeam ( ent ); @@ -1203,8 +1200,9 @@ void OpenWeaponMenu (edict_t * ent) if ((int)wp_flags->value & WPF_MASK) { for (menuEntry = menu_items, i = 0; i < count; i++, menuEntry++) { - if (!WPF_ALLOWED(menuEntry->itemNum)) - continue; + // TOD: Work in weapon bans + // if (!WPF_ALLOWED(menuEntry->itemNum)) + // continue; weapmenu[pos].text = menu_itemnames[menuEntry->itemNum]; weapmenu[pos].SelectFunc = menuEntry->SelectFunc; @@ -1346,7 +1344,7 @@ void CleanLevel () if (!ent->classname) continue; switch (ent->typeNum) { - case MK23_NUM: + case IT_WEAPON_MK23: case IT_WEAPON_MP5: case IT_WEAPON_M4: case IT_WEAPON_M3: @@ -1664,14 +1662,15 @@ static void SpawnPlayers(void) // make sure teamplay spawners always have some weapon, warmup starts only after weapon selected if (!ent->client->pers.chosenWeapon) { - if (WPF_ALLOWED(IT_WEAPON_MP5)) { - ent->client->pers.chosenWeapon = GetItemByIndex(IT_WEAPON_MP5); - } else if (WPF_ALLOWED(MK23_NUM)) { - ent->client->pers.chosenWeapon = GetItemByIndex(MK23_NUM); - } else if (WPF_ALLOWED(IT_WEAPON_KNIFE)) { - ent->client->pers.chosenWeapon = GetItemByIndex(IT_WEAPON_KNIFE); - } else { - ent->client->pers.chosenWeapon = GetItemByIndex(MK23_NUM); + // TODO: Work in weapon bans + // if (WPF_ALLOWED(IT_WEAPON_MP5)) { + // ent->client->pers.chosenWeapon = GetItemByIndex(IT_WEAPON_MP5); + // } else if (WPF_ALLOWED(IT_WEAPON_MK23)) { + // ent->client->pers.chosenWeapon = GetItemByIndex(IT_WEAPON_MK23); + // } else if (WPF_ALLOWED(IT_WEAPON_KNIFE)) { + // ent->client->pers.chosenWeapon = GetItemByIndex(IT_WEAPON_KNIFE); + // } else { + ent->client->pers.chosenWeapon = GetItemByIndex(IT_WEAPON_MK23); } } @@ -1862,11 +1861,9 @@ void MakeAllLivePlayersObservers (void) void PrintScores (void) { if (teamCount == 3) { - gi.bprintf (PRINT_HIGH, "Current score is %s: %d to %s: %d to %s: %d\n", TeamName (TEAM1), teams[TEAM1].score, TeamName (TEAM2), teams[TEAM2].score, TeamName (TEAM3), teams[TEAM3].score); - IRC_printf (IRC_T_TOPIC, "Current score on map %n is %n: %k to %n: %k to %n: %k", level.mapname, TeamName (TEAM1), teams[TEAM1].score, TeamName (TEAM2), teams[TEAM2].score, TeamName (TEAM3), teams[TEAM3].score); + gi.LocBroadcast_Print (PRINT_HIGH, "Current score is %s: %d to %s: %d to %s: %d\n", TeamName (TEAM1), teams[TEAM1].score, TeamName (TEAM2), teams[TEAM2].score, TeamName (TEAM3), teams[TEAM3].score); } else { - gi.bprintf (PRINT_HIGH, "Current score is %s: %d to %s: %d\n", TeamName (TEAM1), teams[TEAM1].score, TeamName (TEAM2), teams[TEAM2].score); - IRC_printf (IRC_T_TOPIC, "Current score on map %n is %n: %k to %n: %k", level.mapname, TeamName (TEAM1), teams[TEAM1].score, TeamName (TEAM2), teams[TEAM2].score); + gi.LocBroadcast_Print (PRINT_HIGH, "Current score is %s: %d to %s: %d\n", TeamName (TEAM1), teams[TEAM1].score, TeamName (TEAM2), teams[TEAM2].score); } } @@ -1890,8 +1887,7 @@ bool CheckTimelimit( void ) MakeAllLivePlayersObservers(); ctfgame.halftime = 0; } else { - gi.bprintf( PRINT_HIGH, "Timelimit hit.\n" ); - IRC_printf( IRC_T_GAME, "Timelimit hit." ); + gi.LocBroadcast_Print( PRINT_HIGH, "Timelimit hit.\n" ); if (!(gameSettings & GS_ROUNDBASED)) ResetPlayers(); EndDMLevel(); @@ -1942,8 +1938,7 @@ static bool CheckRoundTimeLimit( void ) { int winTeam = NOTEAM; - gi.bprintf( PRINT_HIGH, "Round timelimit hit.\n" ); - IRC_printf( IRC_T_GAME, "Round timelimit hit." ); + gi.LocBroadcast_Print( PRINT_HIGH, "Round timelimit hit.\n" ); winTeam = CheckForForcedWinner(); if (WonGame( winTeam )) @@ -2004,8 +1999,7 @@ static bool CheckRoundLimit( void ) team_round_going = team_round_countdown = team_game_going = 0; MakeAllLivePlayersObservers(); } else { - gi.bprintf( PRINT_HIGH, "Roundlimit hit.\n" ); - IRC_printf( IRC_T_GAME, "Roundlimit hit." ); + gi.LocBroadcast_Print( PRINT_HIGH, "Roundlimit hit.\n" ); EndDMLevel(); } team_round_going = team_round_countdown = team_game_going = 0; @@ -2023,12 +2017,10 @@ int WonGame (int winner) int i; char arg[64]; - gi.bprintf (PRINT_HIGH, "The round is over:\n"); - IRC_printf (IRC_T_GAME, "The round is over:"); + gi.LocBroadcast_Print (PRINT_HIGH, "The round is over:\n"); if (winner == WINNER_TIE) { - gi.bprintf (PRINT_HIGH, "It was a tie, no points awarded!\n"); - IRC_printf (IRC_T_GAME, "It was a tie, no points awarded!"); + gi.LocBroadcast_Print (PRINT_HIGH, "It was a tie, no points awarded!\n"); if(use_warnings->value) gi.sound(&g_edicts[0], CHAN_VOICE | CHAN_NO_PHS_ADD, level.snd_teamwins[0], 1.0, ATTN_NONE, 0.0); @@ -2045,17 +2037,15 @@ int WonGame (int winner) if (player) { - gi.bprintf (PRINT_HIGH, "%s was victorious!\n", + gi.LocBroadcast_Print (PRINT_HIGH, "%s was victorious!\n", player->client->pers.netname); - IRC_printf (IRC_T_GAME, "%n was victorious!", player->client->pers.netname); TourneyWinner (player); } } else { - gi.bprintf (PRINT_HIGH, "%s won!\n", TeamName(winner)); - IRC_printf (IRC_T_GAME, "%n won!", TeamName(winner)); + gi.LocBroadcast_Print (PRINT_HIGH, "%s won!\n", TeamName(winner)); // AQ:TNG Igor[Rock] changing sound dir if(use_warnings->value) gi.sound(&g_edicts[0], CHAN_VOICE | CHAN_NO_PHS_ADD, level.snd_teamwins[winner], 1.0, ATTN_NONE, 0.0); @@ -2295,7 +2285,7 @@ int CheckTeamRules (void) strftime( ltm, 64, "%Y%m%d-%H%M%S", now ); snprintf( mvdstring, sizeof(mvdstring), "mvdrecord %s-%s\n", ltm, level.mapname ); gi.AddCommandString( mvdstring ); - gi.bprintf( PRINT_HIGH, "Starting MVD recording to file %s-%s.mvd2\n", ltm, level.mapname ); + gi.LocBroadcast_Print( PRINT_HIGH, "Starting MVD recording to file %s-%s.mvd2\n", ltm, level.mapname ); } // JBravo: End MVD2 } diff --git a/actionlite/g_local.h b/actionlite/g_local.h index 083fef4..9d50299 100644 --- a/actionlite/g_local.h +++ b/actionlite/g_local.h @@ -1621,13 +1621,28 @@ extern int sm_meat_index; extern int snd_fry; // Action Add +extern cvar_t *teamdm; +extern cvar_t *teamdm_respawn; +extern cvar_t *respawn_effect; +extern cvar_t *use_warnings; +extern cvar_t *use_killcounts; +extern cvar_t *use_rewards; +extern cvar_t *motd_time; +extern cvar_t *actionmaps; +extern cvar_t *roundtimelimit; +extern cvar_t *maxteamkills; +extern cvar_t *twbanrounds; +extern cvar_t *tkbanrounds; +extern cvar_t *limchasecam; +extern cvar_t *roundlimit; + extern int snd_silencer; extern int snd_headshot; extern int snd_vesthit; extern int snd_knifethrow; extern int snd_kick; extern int snd_noammo; -extern int meansOfDeath; +extern mod_id_t meansOfDeath; // zucc for hitlocation of death extern int locOfDeath; // stop an armor piercing round that hits a vest @@ -1944,14 +1959,39 @@ constexpr item_id_t weap_ids[] = { IT_WEAPON_SNIPER }; -typedef enum { +enum damage_loc_t { + LOC_HDAM, // head + LOC_CDAM, // chest + LOC_SDAM, // stomach + LOC_LDAM, // legs + LOC_KVLR_HELMET, // kevlar helmet Freud, for %D + LOC_KVLR_VEST, // kevlar vest Freud, for %D + LOC_NO, // Shot by shotgun or handcannon + LOC_MAX // must be last +}; + +enum award_t { + ACCURACY, + IMPRESSIVE, + EXCELLENT +}; + +enum gender_t { GENDER_MALE, GENDER_FEMALE, GENDER_NEUTRAL -} gender_t; +}; #define GENDER_STR( ent, he, she, it ) (((ent)->client->pers.gender == GENDER_MALE) ? he : (((ent)->client->pers.gender == GENDER_FEMALE) ? she : it)) +struct gunStats_t +{ + int shots; //Number of shots + int hits; //Number of hits + int headshots; //Number of headshots + int kills; //Number of kills + int damage; //Damage dealt +}; //====================================================================== // Action Add End @@ -2824,6 +2864,32 @@ struct client_respawn_t aqteam_t team; int32_t sniper_mode; + + int32_t idletime; + int32_t totalidletime; + int32_t tourneynumber; + edict_t *kickvote; + + char *mapvote; // pointer to map voted on (if any) + char *cvote; // pointer to config voted on (if any) + bool scramblevote; // want scramble + + int32_t ignore_time; // framenum when the player called ignore - to prevent spamming + + int32_t stat_mode; // Automatical Send of statistics to client + int32_t stat_mode_intermission; + + int32_t kills; + int32_t shotsTotal; //Total number of shots + int32_t hitsTotal; //Total number of hits + int32_t streakKills; //Kills in a row + int32_t roundStreakKills; //Kills in a row in that round + int32_t streakHS; //Headshots in a Row + int32_t streakKillsHighest; //Highest kills in a row + int32_t streakHSHighest; //Highest headshots in a Row + + int32_t hitsLocations[LOC_MAX]; //Number of hits for different locations + gunStats_t gunstats[MOD_TOTAL]; //Number of shots/hits for different guns, adjusted to MOD_TOTAL to allow grenade, kick and punch stats }; // Action Add @@ -3067,6 +3133,7 @@ struct gclient_t gtime_t last_attacker_time; // Action Add + char ip[64]; // For banning IPs int32_t unique_item_total; int32_t unique_weapon_total; diff --git a/actionlite/g_main.cpp b/actionlite/g_main.cpp index b51ac0e..6558329 100644 --- a/actionlite/g_main.cpp +++ b/actionlite/g_main.cpp @@ -153,6 +153,22 @@ cvar_t *ai_movement_disabled; // Action Add //====================================================================== +cvar_t *teamdm; +cvar_t *teamdm_respawn; +cvar_t *respawn_effect; +cvar_t *use_warnings; +cvar_t *use_killcounts; +cvar_t *use_rewards; + +cvar_t *motd_time; +cvar_t *actionmaps; +cvar_t *roundtimelimit; +cvar_t *maxteamkills; +cvar_t *twbanrounds; +cvar_t *tkbanrounds; +cvar_t *limchasecam; +cvar_t *roundlimit; + cvar_t *allitem; cvar_t *allweapon; cvar_t *unique_items; @@ -163,6 +179,7 @@ cvar_t *weapon_respawn; cvar_t *ammo_respawn; cvar_t *hc_single; cvar_t *use_punch; +cvar_t *radiolog; cvar_t *radio_max; cvar_t *radio_time; cvar_t *radio_ban; diff --git a/actionlite/p_client.cpp b/actionlite/p_client.cpp index 2ce947a..217697b 100644 --- a/actionlite/p_client.cpp +++ b/actionlite/p_client.cpp @@ -118,9 +118,6 @@ void Add_Frag(edict_t * ent, int mod) gi.LocBroadcast_Print(PRINT_MEDIUM, "%s has %d kills in a row and receives %d frags for the kill!\n", ent->client->pers.netname, ent->client->resp.streakKills, frags ); - IRC_printf(IRC_T_GAME, - "%n has %k kills in a row and receives %k frags for the kill!", - ent->client->pers.netname, ent->client->resp.streakKills, frags ); } ent->client->resp.score += frags; @@ -181,7 +178,7 @@ void Subtract_Frag(edict_t * ent) teams[ent->client->resp.team].score--; } -void Add_Death( edict_t *ent, qboolean end_streak ) +void Add_Death( edict_t *ent, bool end_streak ) { if( in_warmup ) return; @@ -616,7 +613,6 @@ void ClientObituary(edict_t *self, edict_t *inflictor, edict_t *attacker, mod_t sprintf(death_msg, "%s %s %s\n", self->client->pers.netname, special_message, self->client->attacker->client->pers.netname); PrintDeathMessage(death_msg, self); - IRC_printf(IRC_T_KILL, death_msg); AddKilledPlayer(self->client->attacker, self); #if USE_AQTION @@ -648,7 +644,6 @@ void ClientObituary(edict_t *self, edict_t *inflictor, edict_t *attacker, mod_t { sprintf( death_msg, "%s %s\n", self->client->pers.netname, message ); PrintDeathMessage(death_msg, self ); - IRC_printf( IRC_T_DEATH, death_msg ); if (!teamplay->value || team_round_going || !ff_afterround->value) { Subtract_Frag( self ); @@ -995,7 +990,6 @@ void ClientObituary(edict_t *self, edict_t *inflictor, edict_t *attacker, mod_t sprintf(death_msg, "%s%s %s%s\n", self->client->pers.netname, message, attacker->client->pers.netname, message2); PrintDeathMessage(death_msg, self); - IRC_printf(IRC_T_KILL, death_msg); AddKilledPlayer(attacker, self); #if USE_AQTION @@ -1026,7 +1020,6 @@ void ClientObituary(edict_t *self, edict_t *inflictor, edict_t *attacker, mod_t sprintf(death_msg, "%s died\n", self->client->pers.netname); PrintDeathMessage(death_msg, self); - IRC_printf(IRC_T_DEATH, death_msg); #if USE_AQTION if (stat_logs->value) { // Only create stats logs if stat_logs is 1 @@ -1049,7 +1042,7 @@ void EjectItem(edict_t * ent, gitem_t * item) ent->client->v_angle[YAW] -= spread; drop = Drop_Item(ent, item); ent->client->v_angle[YAW] += spread; - drop->spawnflags = DROPPED_PLAYER_ITEM; + drop->spawnflags = SPAWNFLAG_ITEM_DROPPED_PLAYER; } } @@ -1065,7 +1058,7 @@ void EjectWeapon(edict_t * ent, gitem_t * item) ent->client->v_angle[YAW] -= spread; drop = Drop_Item(ent, item); ent->client->v_angle[YAW] += spread; - drop->spawnflags = DROPPED_PLAYER_ITEM; + drop->spawnflags = SPAWNFLAG_ITEM_DROPPED_PLAYER; if (!in_warmup) drop->think = temp_think_specweap; } @@ -1097,7 +1090,7 @@ void EjectMedKit( edict_t *ent, int medkit ) void TossItemsOnDeath(edict_t * ent) { gitem_t *item; - qboolean quad = false; + bool quad = false; int i; // don't bother dropping stuff when allweapons/items is active @@ -1115,15 +1108,15 @@ void TossItemsOnDeath(edict_t * ent) if (allweapon->value)// don't drop weapons if allweapons is on return; - if (WPF_ALLOWED(MK23_NUM) && WPF_ALLOWED(DUAL_NUM)) { + //if (WPF_ALLOWED(MK23_NUM) && WPF_ALLOWED(IT_WEAPON_DUALMK23)) { // give the player a dual pistol so they can be sure to drop one - item = GET_ITEM(DUAL_NUM); - ent->client->inventory[ITEM_INDEX(item)]++; - EjectItem(ent, item); - } + item = GET_ITEM(IT_WEAPON_DUALMK23); + ent->client->inventory[ITEM_INDEX(item)]++; + EjectItem(ent, item); + //} // check for every item we want to drop when a player dies - for (i = MP5_NUM; i < DUAL_NUM; i++) { + for (i = MP5_NUM; i < IT_WEAPON_DUALMK23; i++) { item = GET_ITEM( i ); while (ent->client->inventory[ITEM_INDEX( item )] > 0) { ent->client->inventory[ITEM_INDEX( item )]--; @@ -1131,35 +1124,35 @@ void TossItemsOnDeath(edict_t * ent) } } - item = GET_ITEM(KNIFE_NUM); + item = GET_ITEM(IT_WEAPON_KNIFE); if (ent->client->inventory[ITEM_INDEX(item)] > 0) { EjectItem(ent, item); } // special items - if (!DMFLAGS(DF_QUAD_DROP)) - quad = false; - else - quad = (ent->client->quad_framenum > (level.framenum + HZ)); + // if (!DMFLAGS(DF_QUAD_DROP)) + // quad = false; + // else + // quad = (ent->client->quad_framenum > (level.framenum + HZ)); } void TossClientWeapon(edict_t * self) { gitem_t *item; edict_t *drop; - qboolean quad; + bool quad; float spread; - item = self->client->weapon; + item = self->client->pers.weapon->id; if (!self->client->inventory[self->client->ammo_index]) item = NULL; if (item && (strcmp(item->pickup_name, "Blaster") == 0)) item = NULL; - if (!DMFLAGS(DF_QUAD_DROP)) - quad = false; - else - quad = (self->client->quad_framenum > (level.framenum + HZ)); + // if (!DMFLAGS(DF_QUAD_DROP)) + // quad = false; + // else + // quad = (self->client->quad_framenum > (level.framenum + HZ)); if (item && quad) spread = 22.5; @@ -1170,7 +1163,7 @@ void TossClientWeapon(edict_t * self) self->client->v_angle[YAW] -= spread; drop = Drop_Item(self, item); self->client->v_angle[YAW] += spread; - drop->spawnflags = DROPPED_PLAYER_ITEM; + drop->spawnflags = SPAWNFLAG_ITEM_DROPPED_PLAYER; } } @@ -3719,8 +3712,15 @@ bool ClientConnect(edict_t *ent, char *userinfo, const char *social_id, bool isB } #endif - // check for a spectator + // define value char value[MAX_INFO_VALUE] = { 0 }; + + if (gi.Info_ValueForKey(userinfo, "ip", value, sizeof(value))){ + // Append to pers.ip + Q_strlcat(ent->client->pers.ip, value, sizeof(ent->client->pers.ip)); + } + + // check for a spectator gi.Info_ValueForKey(userinfo, "spectator", value, sizeof(value)); if (deathmatch->integer && *value && strcmp(value, "0"))