From 16546e5818408f35adc60c2d937cf4541ff7840a Mon Sep 17 00:00:00 2001 From: salmonik Date: Wed, 28 Oct 2026 12:24:10 +0100 Subject: Logging: per-session file and debug-gated verbose logs - Open /tmp/hl2hake.log once in the library constructor with "w" so each session starts clean, use line buffering, flush each line, and close it via atexit. No more fopen/fclose per message. - Add logd() for verbose diagnostics, enabled only with HL2H_DEBUG=1. - Move ESP/NPC scans, item-prop/item-classification logs, aimbot/silent-aim/ melee/triggerbot/spread details, jumpbug tracking, bone dumps, netvar dumps, cmd-modified and ground-trace noise to logd(). - Keep logf() for lifecycle, config, warnings/errors, GUI open/close, item category/tagging summaries and item-crate detections so crate debugging works without the ESP stream. - Supply crates now respect the max-distance slider (user change), with the stale comment and CONTEXT updated. - Document HL2H_DEBUG=1 in play.sh and CONTEXT. --- src/hl2h.cpp | 76 ++++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 56 insertions(+), 20 deletions(-) (limited to 'src/hl2h.cpp') diff --git a/src/hl2h.cpp b/src/hl2h.cpp index 8c6b5db..256b9ab 100644 --- a/src/hl2h.cpp +++ b/src/hl2h.cpp @@ -10,21 +10,56 @@ // logging // --------------------------------------------------------------------------- -void logf(const char *fmt, ...) { - va_list ap, ap2; - va_start(ap, fmt); - va_copy(ap2, ap); - fprintf(stderr, "hl2hake: "); - vfprintf(stderr, fmt, ap2); - fprintf(stderr, "\n"); +static FILE *g_log = nullptr; +static bool g_log_debug = false; +static pthread_mutex_t g_log_mu = PTHREAD_MUTEX_INITIALIZER; + +static void log_close() { + pthread_mutex_lock(&g_log_mu); + if (g_log) { + fclose(g_log); + g_log = nullptr; + } + pthread_mutex_unlock(&g_log_mu); +} + +// Open once per process and truncate, so /tmp/hl2hake.log only ever contains +// the current session. HL2H_DEBUG=1 enables logd() noise. +static void log_open() { + const char *dbg = getenv("HL2H_DEBUG"); + g_log_debug = dbg && *dbg && strcmp(dbg, "0") != 0; + g_log = fopen("/tmp/hl2hake.log", "w"); + if (g_log) + setvbuf(g_log, nullptr, _IOLBF, 0); + atexit(log_close); +} + +static void log_write(const char *fmt, va_list ap) { + char buf[4096]; + vsnprintf(buf, sizeof(buf), fmt, ap); + pthread_mutex_lock(&g_log_mu); + fprintf(stderr, "hl2hake: %s\n", buf); fflush(stderr); - va_end(ap2); - if (FILE *f = fopen("/tmp/hl2hake.log", "a")) { - fprintf(f, "hl2hake: "); - vfprintf(f, fmt, ap); - fprintf(f, "\n"); - fclose(f); + if (g_log) { + fprintf(g_log, "hl2hake: %s\n", buf); + fflush(g_log); } + pthread_mutex_unlock(&g_log_mu); +} + +void logf(const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + log_write(fmt, ap); + va_end(ap); +} + +void logd(const char *fmt, ...) { + if (!g_log_debug) + return; + va_list ap; + va_start(ap, fmt); + log_write(fmt, ap); va_end(ap); } @@ -93,7 +128,7 @@ void note_modified(const CUserCmd *cmd, int flags, const float *vel) { fix_verified_crc(cmd->command_number, usercmd_checksum(cmd)); if (g_modified_logged < 5) { - logf("cmd modified: seq=%d flags=0x%X buttons=0x%X fw=%.2f " + logd("cmd modified: seq=%d flags=0x%X buttons=0x%X fw=%.2f " "vel=(%.1f,%.1f,%.1f)", cmd->command_number, flags, cmd->buttons, cmd->forwardmove, vel[0], vel[1], vel[2]); @@ -311,7 +346,7 @@ static bool jumpbug_apply(CUserCmd *cmd, int local, void *ent, int flags, } if (!jb_tracked) { jb_tracked = true; - logf("jumpbug: tracking x=%.1f vz=%.1f impact=%.1f", x, vz, impact); + logd("jumpbug: tracking x=%.1f vz=%.1f impact=%.1f", x, vz, impact); } bool assist = jumpbug_assist_enabled(); @@ -345,7 +380,7 @@ static bool jumpbug_apply(CUserCmd *cmd, int local, void *ent, int flags, jb_tracked = false; if (jb_logs < 30) { jb_logs++; - logf("jumpbug: trigger x=%.2f drop=%.2f vz=%.1f assist=%d", x, jb_drop, + logd("jumpbug: trigger x=%.2f drop=%.2f vz=%.1f assist=%d", x, jb_drop, vz, (int)assist); } } else { @@ -357,7 +392,7 @@ static bool jumpbug_apply(CUserCmd *cmd, int local, void *ent, int flags, if (jb_force_next_distance(local, ent, vel, x, JB_TARGET_DIST)) { if (jb_logs < 30) { jb_logs++; - logf("jumpbug: assist duck x=%.2f next=%.2f -> vz=%.1f", x, + logd("jumpbug: assist duck x=%.2f next=%.2f -> vz=%.1f", x, next_x, vel[2]); } } else { @@ -391,10 +426,10 @@ static bool jumpbug_apply(CUserCmd *cmd, int local, void *ent, int flags, if (jb_logs < 30) { jb_logs++; if (assist) - logf("jumpbug: setup assist x=%.2f drop=%.2f vz=%.1f ok=%d", x, + logd("jumpbug: setup assist x=%.2f drop=%.2f vz=%.1f ok=%d", x, jb_drop, vel[2], (int)forced); else - logf("jumpbug: setup x=%.2f drop=%.2f pred=%.2f vz=%.1f", x, + logd("jumpbug: setup x=%.2f drop=%.2f pred=%.2f vz=%.1f", x, jb_drop, x + JB_DUCK_RAISE - jb_drop, vz); } } @@ -458,7 +493,7 @@ static void hkdSrvRandomSeed(int seed) { if (trace && (bullet_site || logs < 12)) { if (logs < 200) { logs++; - logf("srvseed: seed=%d off=0x%lx bullet=%d self=%p local=%d", seed, off, + logd("srvseed: seed=%d off=0x%lx bullet=%d self=%p local=%d", seed, off, (int)bullet_site, self, (int)local); } } @@ -893,6 +928,7 @@ static void *setup_thread(void *) { __attribute__((constructor)) static void hl2hake_load() { if (!is_hl2_process()) return; + log_open(); logf("loaded (pid %d) build %s %s", getpid(), __DATE__, __TIME__); pthread_t t; if (pthread_create(&t, nullptr, setup_thread, nullptr) == 0) -- cgit v1.2.3