From b44b09d07be0dd0c8f9df9bf3c243f332c4f190c Mon Sep 17 00:00:00 2001
From: golukon <119600102+golukon@users.noreply.github.com>
Date: Fri, 28 Mar 2025 01:30:32 +0300
Subject: [PATCH] feat: add new cvar "mp_logkills" (#1039)
---
README.md | 1 +
regamedll/dlls/game.cpp | 2 ++
regamedll/dlls/game.h | 1 +
regamedll/dlls/multiplay_gamerules.cpp | 48 ++++++++++++++------------
4 files changed, 30 insertions(+), 22 deletions(-)
diff --git a/README.md b/README.md
index 7611beb1..e9a42cfc 100644
--- a/README.md
+++ b/README.md
@@ -124,6 +124,7 @@ This means that plugins that do binary code analysis (Orpheu for example) probab
| mp_ammo_respawn_time | 20 | 0.0 | - | The respawn time for ammunition. |
| mp_vote_flags | km | 0 | - | Vote systems enabled in server.
`0` voting disabled
`k` votekick enabled via `vote` command
`m` votemap enabled via `votemap` command |
| mp_votemap_min_time | 180 | 0.0 | - | Minimum seconds that must elapse on map before `votemap` command can be used. |
+| mp_logkills | 1 | 0 | 1 | Log kills.
`0` disabled
`1` enabled |
| mp_jump_height | 45 | 0.0 | - | Player jump height. |
| bot_excellent_morale | 0 | 0 | 1 | Bots always have great morale regardless of defeat or victory. |
| mp_randomspawn | 0 | 0 | 1 | Random player spawns
`0` disabled
`1` enabled
`NOTE`: Navigation `maps/.nav` file required |
diff --git a/regamedll/dlls/game.cpp b/regamedll/dlls/game.cpp
index 37b264fb..a6e15b26 100644
--- a/regamedll/dlls/game.cpp
+++ b/regamedll/dlls/game.cpp
@@ -190,6 +190,7 @@ cvar_t ammo_respawn_time = { "mp_ammo_respawn_time", "20", FCVAR_SERVER, 2
cvar_t vote_flags = { "mp_vote_flags", "km", 0, 0.0f, nullptr };
cvar_t votemap_min_time = { "mp_votemap_min_time", "180", 0, 180.0f, nullptr };
+cvar_t logkills = { "mp_logkills", "1", FCVAR_SERVER, 0.0f, nullptr };
cvar_t randomspawn = { "mp_randomspawn", "0", FCVAR_SERVER, 0.0f, nullptr };
void GameDLL_Version_f()
@@ -469,6 +470,7 @@ void EXT_FUNC GameDLLInit()
CVAR_REGISTER(&cv_bot_enable);
CVAR_REGISTER(&cv_hostage_ai_enable);
+ CVAR_REGISTER(&logkills);
// print version
CONSOLE_ECHO("ReGameDLL version: " APP_VERSION "\n");
diff --git a/regamedll/dlls/game.h b/regamedll/dlls/game.h
index f016c0f3..bf5130d2 100644
--- a/regamedll/dlls/game.h
+++ b/regamedll/dlls/game.h
@@ -210,6 +210,7 @@ extern cvar_t weapon_respawn_time;
extern cvar_t ammo_respawn_time;
extern cvar_t vote_flags;
extern cvar_t votemap_min_time;
+extern cvar_t logkills;
extern cvar_t randomspawn;
#endif
diff --git a/regamedll/dlls/multiplay_gamerules.cpp b/regamedll/dlls/multiplay_gamerules.cpp
index 7a84afd4..1ba7122b 100644
--- a/regamedll/dlls/multiplay_gamerules.cpp
+++ b/regamedll/dlls/multiplay_gamerules.cpp
@@ -4160,29 +4160,33 @@ void EXT_FUNC CHalfLifeMultiplay::__API_HOOK(DeathNotice)(CBasePlayer *pVictim,
pVictim->CSPlayer()->m_iNumKilledByUnanswered[iPlayerIndexKiller - 1]++;
}
}
+#ifdef REGAMEDLL_ADD
+ if (static_cast(logkills.value))
+#endif
+ {
+ // Did he kill himself?
+ if (pVictim->pev == pevKiller)
+ {
+ // killed self
+ char *team = GetTeam(pVictim->m_iTeam);
+ UTIL_LogPrintf("\"%s<%i><%s><%s>\" committed suicide with \"%s\"\n", STRING(pVictim->pev->netname), GETPLAYERUSERID(pVictim->edict()),
+ GETPLAYERAUTHID(pVictim->edict()), team, killer_weapon_name);
+ }
+ else if (pevKiller->flags & FL_CLIENT)
+ {
+ const char *VictimTeam = GetTeam(pVictim->m_iTeam);
+ const char *KillerTeam = (pKiller && pKiller->IsPlayer()) ? GetTeam(pKiller->m_iTeam) : "";
- // Did he kill himself?
- if (pVictim->pev == pevKiller)
- {
- // killed self
- char *team = GetTeam(pVictim->m_iTeam);
- UTIL_LogPrintf("\"%s<%i><%s><%s>\" committed suicide with \"%s\"\n", STRING(pVictim->pev->netname), GETPLAYERUSERID(pVictim->edict()),
- GETPLAYERAUTHID(pVictim->edict()), team, killer_weapon_name);
- }
- else if (pevKiller->flags & FL_CLIENT)
- {
- const char *VictimTeam = GetTeam(pVictim->m_iTeam);
- const char *KillerTeam = (pKiller && pKiller->IsPlayer()) ? GetTeam(pKiller->m_iTeam) : "";
-
- UTIL_LogPrintf("\"%s<%i><%s><%s>\" killed \"%s<%i><%s><%s>\" with \"%s\"\n", STRING(pevKiller->netname), GETPLAYERUSERID(ENT(pevKiller)), GETPLAYERAUTHID(ENT(pevKiller)),
- KillerTeam, STRING(pVictim->pev->netname), GETPLAYERUSERID(pVictim->edict()), GETPLAYERAUTHID(pVictim->edict()), VictimTeam, killer_weapon_name);
- }
- else
- {
- // killed by the world
- char *team = GetTeam(pVictim->m_iTeam);
- UTIL_LogPrintf("\"%s<%i><%s><%s>\" committed suicide with \"%s\" (world)\n", STRING(pVictim->pev->netname), GETPLAYERUSERID(pVictim->edict()),
- GETPLAYERAUTHID(pVictim->edict()), team, killer_weapon_name);
+ UTIL_LogPrintf("\"%s<%i><%s><%s>\" killed \"%s<%i><%s><%s>\" with \"%s\"\n", STRING(pevKiller->netname), GETPLAYERUSERID(ENT(pevKiller)), GETPLAYERAUTHID(ENT(pevKiller)),
+ KillerTeam, STRING(pVictim->pev->netname), GETPLAYERUSERID(pVictim->edict()), GETPLAYERAUTHID(pVictim->edict()), VictimTeam, killer_weapon_name);
+ }
+ else
+ {
+ // killed by the world
+ char *team = GetTeam(pVictim->m_iTeam);
+ UTIL_LogPrintf("\"%s<%i><%s><%s>\" committed suicide with \"%s\" (world)\n", STRING(pVictim->pev->netname), GETPLAYERUSERID(pVictim->edict()),
+ GETPLAYERAUTHID(pVictim->edict()), team, killer_weapon_name);
+ }
}
// TODO: It is called in CBasePlayer::Killed too, most likely,