summaryrefslogtreecommitdiffstats
path: root/src/esp.cpp (follow)
Commit message (Collapse)AuthorAgeFilesLines
* AI: use server relationships to classify NPC friendlinesssalmonik4 days1-6/+39
| | | | | | | | | | | - Read the server NPC's m_Relationship CUtlVector (entity row for the local player first, then the CLASS_PLAYER row): D_LI friendly, D_NU neutral, D_HT/D_FR hostile. - Use it for ESP colours and aimbot/silent-aim/melee target filtering, with the existing model heuristic as a fallback. - Treat bugbait-controlled antlions as friendly when their server m_hFollowTarget is set. - Resolve m_Relationship/m_hFollowTarget datamap offsets and log them.
* Startup crash: skip fullbright command when off; drop bad owner netvars; add ↵salmonik4 days1-0/+5
| | | | stage markers
* GUI: recover invalid fonts; vischeck: props and bulletproof glasssalmonik4 days1-3/+3
| | | | | | | | | | | | | - Validate the GUI font handles with GetTextSize and recreate them when the local player entity or UI scale changes. Small scaled sizes fall back to the proven 16 px size, and the failure log/toast is emitted once instead of every frame. This fixes sessions where the menu rendered with no text after a level transition. - Rework visibility: trace with MASK_SHOT/TRACE_EVERYTHING while ignoring the local player and target, so static props, crates and other NPCs block. Non-solid glass and breakable-glass materials are skipped; solid non-break glass (bulletproof) blocks. Fix CONTENTS_WINDOW 0x2 (was 0x4) in the masks. - Pass self/target to is_visible from aimbot/silent/melee callers.
* Handles: use the 11-bit networked EHANDLE entity indexsalmonik11 days1-4/+4
| | | | | | | | | The client m_hActiveWeapon is a networked EHANDLE: low 11 bits are the entity index and the rest is the serial. Masking with 0xFFFF included serial bits, so on later maps the weapon index became garbage (e.g. 49184/12319) and melee killbot could not recognize the crowbar. Use 0x7FF for client and server active-weapon handles, weapon owner checks and item-ESP weapon skips. Document the layout in CONTEXT.
* Melee: surface weapon state across maps; reset stale cachessalmonik11 days1-1/+18
| | | | | | | | | | | - Map transitions often leave a non-crowbar weapon active, so the killbot silently does nothing. Log every active-weapon change as a normal `melee: active ... crowbar=0/1` line and toast once suggesting the crowbar. - Recover the crowbar model from the server entity when the client weapon model index is missing/0 after a map change. - Clear the bone cache and aim/silent locks when the local player entity changes (map load/respawn) so stale entity/model data cannot poison melee target selection.
* Combat: fix silent-aim spread seed and lead projectilessalmonik11 days1-0/+61
| | | | | | | | | | - Silent aim and triggerbot set IN_ATTACK after CInput::CreateMove, so the minimal-spread seed was never applied to their shots. Re-apply spread_control_apply after setting the attack button, then update the CRC. - Crossbow bolts and RPG rockets are not hitscan. Lead the selected hitbox by target velocity * travel time; the crossbow bolt also gets its 0.05 gravity drop (30 u/s^2). Apply the same correction to the smooth aimbot. - Document both paths in CONTEXT.
* Item ESP: make 0 = unlimited explicit and persistentsalmonik11 days1-32/+9
| | | | | | | | | | - config_load now accepts max_dist=0 instead of clamping it to 250, so the "unlimited" setting survives a restart. - The Max distance slider shows "All" at 0 and its tooltip documents 0 = unlimited; the categories log prints max=All. - Skip unclassified entities before projecting them / computing distance. - Keep the removed prop/crate debug logging and the user's rule that the distance slider applies to every tag.
* Logging: per-session file and debug-gated verbose logssalmonik11 days1-27/+25
| | | | | | | | | | | | | | | | - 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.
* Item ESP: recover CPhysicsProp model names from the serversalmonik11 days1-4/+18
| | | | | | | Client CPhysicsProp entities frequently report m_nModelIndex == 0, so item crates appeared as model=? and were never classified. Fall back to the server entity's m_nModelIndex (set in CItem_ItemCrate::Spawn) when the client model index is missing, then resolve the name through the shared modelinfo.
* Item ESP: fix AR2/RPG/stunstick world-model namessalmonik11 days1-10/+17
| | | | | | | HL2 uses w_irifle for the AR2, w_rocket_launcher for the RPG and w_stunbaton for the stunstick. Keep the model-path fallback (with larger buffers) so unknown world models can still be identified in-game, and make the supply-crate marker larger.
* edge-case in weapon displaying and fixing RPG filteringsalmonik11 days1-2/+2
|
* Item ESP: focus crate diagnostics on nearby props; log build timesalmonik11 days1-2/+2
|
* Item ESP: always tag supply crates regardless of distancesalmonik11 days1-1/+4
|
* Item ESP: log every crate-like entity for diagnosissalmonik11 days1-7/+9
|
* Item ESP: tag world weapons, name ammo types, restrict cratessalmonik11 days1-27/+214
| | | | | | | | | | | | | - Add a Weapons category and classify world weapon models (crowbar, pistol, revolver, SMG, AR2, shotgun, crossbow, RPG, grenade, gravity gun, stunstick, bugbait, sniper). Skip the active weapon and anything with a valid m_hOwner/m_hOwnerEntity handle so held weapons do not tag. - Label ammo by model: pistol, SMG, AR2, .357, crossbow, shotgun, sniper, flares, AR2 grenade, RPG rocket and specific ammo-crate variants. - Only item_item_crate and item_beacon_crate are supply crates; generic breakable crates are no longer tagged. Crate chunks stay excluded. - Add item diagnostics: category state, prop-like entities with class/model/ kind/distance/origin, and every item crate seen.
* Item ESP: tag breakable wood/plastic/metal cratessalmonik11 days1-0/+13
|
* Remove stucklaunch; add valuable-item ESPsalmonik11 days1-65/+253
| | | | | | | | | | | | | | - Drop the stucklaunch feature, its settings, diagnostics and m_hGroundEntity resolution. - Add a Visuals feature that scans the client entity list for valuable pickups: health/medkits/chargers, ammo boxes/crates/grenades, batteries, HEV suit modules/chargers, supply crates and generic items. - Model-first classification with class fallbacks; category toggles, distance labels and a max-distance slider. - Draw colored marker/label tags through walls, independent of the hostile NPC ESP. - Persist [items] active/bind/health/ammo/armor/crates/distance/max_dist; Reset restores defaults; GUI card and CONTEXT updated.
* Stucklaunch: fix prop detection and add diagnosticssalmonik11 days1-7/+39
| | | | | | | | | | | | - Client physics props are CPhysicsProp/CPhysBox, not the server class prop_physics; the old case-sensitive class check never matched. Detect MOVETYPE_VPHYSICS first (the reliable signal), then case-insensitive class/model patterns. - Log the first few prop checks with index, movetype, class and model so a failed ground lookup is diagnosable. - Log once when Stucklaunch is active (with run state, bind and ground offset), when it engages, and when the ground is not a prop. - Toast a warning when binding a feature that is not Active yet.
* Fix tooltip truncation; add Stucklaunch assistsalmonik11 days1-0/+34
| | | | | | | | | | | | | | | | | | | Tooltips: text_in() shifted the x position to fit the full string before truncating, which drew the tooltip text outside its box. Truncate to the available width first, then clamp inside the clip. Stucklaunch (Movement): - opt-in feature (Active off by default) with its own bind; - holds jump, alternates +use every 2 ticks to regrab a physics prop, optionally +attack while the gravity gun is active, and air-strafes; - engagement uses m_hGroundEntity (client netvar) latched for ~0.5 s so the prop stays active while airborne; falls back to running whenever active if the netvar is unavailable, with a startup warning to bind it; - does not spawn or place props; the player supplies the prop and initial speed. Config gets [stucklaunch] active/bind/use_spam/gravspam/autostrafe; Reset restores those defaults. CONTEXT documents the assist and its limits.
* Speedgraph: lower the graphsalmonik11 days1-1/+1
|
* ESP/aimbot: mark male, female, monk and Odessa models friendlysalmonik11 days1-3/+3
|
* Spread control: override the server FireBullets seed for the local playersalmonik11 days1-3/+16
| | | | | | | | | | | | | | The installed 2024 server ignores the client usercmd random_seed and uses its own shot seed. Force the server's CBaseEntity::FireBullets RandomSeed call for the local player only: - hook the server.so RandomSeed GOT slot (R_386_JUMP_SLOT at 0xce1348); - read the FireBullets `this` from the caller frame and compare it with the local server player base; - replace the seed with the precomputed best single/shotgun window and step it per pellet; NPC shots and everything else pass through. - client prediction still uses the same chosen usercmd seed, so both sides agree on the spread pattern.
* Spread control: client-seed no-spreadsalmonik11 days1-0/+136
| | | | | | | | | | | | | | | HL2's CBaseEntity::FireBullets seeds its RNG from the usercmd random_seed (m_bUseServerRandomSeed is false for HL2 weapons), so the client can select the 8-bit seed that puts CShotManipulator::ApplySpread closest to the center. - New feature Spread control -> Active / No spread (both default on). - Precompute the best seed for a single shot and for the shotgun's 8-shot primary (first pellet accurate) and 12-shot secondary windows using the engine's own RandomSeed/RandomFloat from libvstdlib. - Set cmd->random_seed on attack commands; note_modified repairs the CRC. - The random cone offset is neutralized, but the cone size, the pistol accuracy penalty, server view punch and any damage falloff remain server-side; stock HL2 has no distance damage falloff.
* Melee killbot: 360-degree crowbar silent aimsalmonik11 days1-0/+258
| | | | | | | | | | | | | | | | | - New feature (default on): while the local player's active weapon is the crowbar, pick the nearest visible hostile NPC within the 75-unit crowbar range, sorted by distance to its collision AABB, and attack it through the normal silent-aim path (usercmd view + IN_ATTACK, movement preserved, rendered view restored at FRAME_RENDER_START). - Prefer the nearest visible hitbox center; fall back to the AABB center / closest point when bones are unavailable. Reuses the existing friendly / neutral and life-state filters and the world-only vischeck. - Detect the active weapon from the client m_hActiveWeapon handle, with the authoritative server m_hActiveWeapon handle as a fallback (client entity index from the low 16 bits). - While the crowbar is active and this feature is on, skip the gun aimbot, triggerbot and silent aim so they do not fight over the usercmd view. - Menu: Melee killbot -> Active; config [melee] active=...
* Speed graph: show current speed at the top-rightsalmonik12 days1-0/+6
|
* Speed graph: only sample while in-game and unpausedsalmonik12 days1-0/+9
|
* ESP: HUD speed graph (last 10 s)salmonik12 days1-0/+69
| | | | | | | - 0.1 s sampling, 100-sample ring; horizontal speed of the local player - small (240x64) panel centered in the lower half of the screen - min 0, max auto-scales to the maximum in the 10 s window; shows max value - ESP -> Show speed graph toggle, persisted as speedgraph=1
* ESP: draw the FOV circle as a stable screen-space ellipsesalmonik12 days1-20/+39
|
* Aimbot/silent aim: settable FOV, FOV circle, target lockingsalmonik12 days1-51/+153
| | | | | | | | | | | - Aimbot -> FOV and Silent aim -> FOV values (1..180 deg from the crosshair) - Aimbot -> Show FOV circle: projects the FOV cone through the engine's world->screen transform (hidden for >=89 deg since the boundary is behind the eye) - target lock: while a feature has a bind and the key is held, the acquired target is kept while it is alive and has a visible selected hitbox point; it only re-acquires when the target dies/leaves visibility or the key is released. With bind = None both features keep selecting the nearest target.
* Use one float-precision PI constantsalmonik12 days1-2/+0
| | | | | | - move PI_F into hl2h.h as constexpr 3.14159265f and remove the duplicated long-double-style literals from hl2h.cpp/esp.cpp - extra digits are compile-time only; float operations cost the same
* Silent aim: restore view at FRAME_RENDER_START; preserve movementsalmonik12 days1-2/+20
| | | | | | | | | - hook CHLClient::FrameStageNotify (vtable slot 35) and at FRAME_RENDER_START re-apply the player's original view angles after the engine has consumed the aimed usercmd; this fixes the slow pull with high-RPM weapons and the revolver leaving the view on the target - silent aim also rewrites forwardmove/sidemove so the world-space movement wish vector is unchanged by the temporary aim angles
* Silent aim: exact usercmd angle + fire, restore rendered viewsalmonik12 days1-28/+78
| | | | | | | | | | | | - new top-level Silent aim feature (Active + Bind, default Mouse3) - reuses the shared aim-target selection (bone checklist, nearest selected point, world-only MASK_VISIBLE vischeck) - writes the exact target angle into cmd->viewangles, sets IN_ATTACK for the shot, then immediately restores engine view angles to the player's input view (g_cam_view) so the camera stays where it was - shares the vischeck/bone selection with the aimbot; independent of the aimbot/triggerbot binds - config [silentaim] active/bind
* Triggerbot: crosshair entity trace, hostile-onlysalmonik12 days1-0/+53
| | | | | | | | | - top-level Triggerbot feature (Active + Bind, default Mouse4, rebindable) - trace the crosshair ray from the eye with MASK_SHOT and TRACE_EVERYTHING; the filter ignores the local player - if the first entity hit is a live hostile NPC, press IN_ATTACK and fix the usercmd CRC; walls/props/friendly/neutral/corpses do not trigger - independent of Aimbot; config [triggerbot] active/bind
* Aimbot v3: world-only vischecksalmonik12 days1-35/+61
| | | | | | | | | | - resolve EngineTraceClient003; TraceRay (slot 4) from the eye to the exact selected hitbox/bone point with MASK_VISIBLE - TRACE_WORLD_ONLY filter as requested (static props are not tested, per SDK) - Aimbot -> Vischeck toggle, persisted as vischeck=1; when on, blocked targets are skipped and the next-nearest candidate is tried - target candidates are ranked by angle; on each target the nearest visible selected hitbox point wins
* ESP: add Show box togglesalmonik12 days1-1/+2
|
* Aimbot v2: bone checklist and numeric smoothnesssalmonik12 days1-13/+27
| | | | | | | | | | - Aimbot -> Bones: Head, Torso (chest+stomach), Left/Right arm, Left/Right leg; the aimbot aims at the nearest selected hitbox point on the chosen target (head uses the head hitbox/bone fallback) - Aimbot -> Smoothness: value 1..45 deg/tick, Left/Right in the menu to adjust, persisted as smooth=N; default 5 (previous behaviour) - config: bone_* toggles + smooth under [aimbot] - menu gains a NODE_VALUE type (right-aligned value, Left/Right edit)
* Aimbot: fix eye height (m_vecViewOffset Z, not X); prefer head hitboxsalmonik12 days1-1/+11
| | | | | | | | - g_cam_eye was adding the X component of m_vecViewOffset to Z, leaving the eye ~64 units too low; the aimbot consequently aimed above heads - head_position now prefers the HITGROUP_HEAD hitbox center before falling back to bone names (zombie: headcrab body hitbox) - log the exact head and desired angles for the first few aim ticks
* Aimbot: push smoothed angles to engine view + diagnosticssalmonik12 days1-1/+34
|
* Aimbot: head-only nearest-to-crosshair with bounded smoothingsalmonik12 days1-0/+117
| | | | | | | | | | | - select the hostile NPC whose (approximate) head is closest in angle to the crosshair, then refine to its actual head hitbox/bone - aimbot menu feature (Active + Bind, default Mouse5, rebindable via the existing bind chooser); config [aimbot] active/bind - never snap: move at most 5 degrees per tick toward the target, shortest-path yaw, pitch clamped to +/-89, 0.05 degree deadzone; no overshoot/oscillation - fixes the usercmd CRC after modifying viewangles - skip when dead; ignores friendly/neutral entities (crows, citizens, ...)
* ESP: generic full-bone skeleton for non-humanoid NPCs (headcrabs, crows, ...)salmonik12 days1-1/+2
|
* ESP: restrict skeleton to humanoid core bones (no fingers/toes/headcrab)salmonik12 days1-2/+14
|
* ESP: skeleton ESPsalmonik12 days1-1/+37
| | | | | | | - render parent->child bone links from the SetupBones world matrices (ISurface DrawLine, projected once per bone) - menu option "Show skeleton" under ESP, persisted as skeleton=1 - skeletons use the same hostile/friendly/neutral colours as the boxes
* Bones: robust head lookup (hitbox name -> head bone) + hitbox dumpsalmonik12 days1-1/+7
|
* Bones: client-side SetupBones/studiohdr groundworksalmonik12 days1-0/+29
| | | | | | | | | | | - bones.cpp: resolve IClientRenderable via IClientUnknown slot 6, validate it against IVModelInfo GetModel, call SetupBones (slot 16) with engine Time() (slot 14), and parse the studio header (GetStudiomodel, slot 29) for bones/bone names/parents and hitboxes - cache up to 64 entity bone snapshots, refreshed at ~30 Hz - helpers: bone_find/parent/pos, hitbox_center (e.g. "head") - debug probe: HL2H_BONE_DEBUG=1 draws a white marker at each NPC's head hitbox center and logs bone count/head position once
* ESP: menu toggles for neutral/healthbar/healthnum/namesalmonik12 days1-3/+12
|
* ESP: vertical health bar right of the box, HP number beside itsalmonik12 days1-10/+17
|
* ESP working: NPC detection + authoritative server-side healthsalmonik12 days1-40/+222
| | | | | | | | | | | | | - entitylist slot 6 (GetHighestEntityIndex); class name via GetClientNetworkable -> GetClientClass (replaces the unsafe slot-2 call) - HL2 SP NPCs: class CAI_BaseNPC + m_lifeState, since NPC m_iHealth is not networked; model names from VModelInfoClient006 for labels/friend-foe - real HP/HP-max from the listen-server entity (IVEngineServer021 -> PEntityOfEntIndex -> edict->m_pUnk -> GetBaseEntity) using offsets scanned from server.so's datamap; validated against the client model index - world_to_screen via IVDebugOverlay003::ScreenPosition (fixes box drift) - maxs sanity clamp, NPC-only debug logging, neutral colour for wildlife - build.sh: restore -o libhl2hake.so and add server.cpp
* Default map d1_town_01 (intro-less, enemies spawned)salmonik2026-09-141-0/+124