diff options
| author | salmonik <salmonik@tuta.io> | 2026-10-28 13:02:26 +0100 |
|---|---|---|
| committer | salmonik <salmonik@tuta.io> | 2026-10-28 13:02:26 +0100 |
| commit | b212e8e13835cfdc4849a61c1b57146bd0312a29 (patch) | |
| tree | 128a64c8c20411749ee8ea4a78ef4a51a9604515 /src/bones.cpp | |
| parent | Combat: fix silent-aim spread seed and lead projectiles (diff) | |
| download | hl2h-b212e8e13835cfdc4849a61c1b57146bd0312a29.tar.gz hl2h-b212e8e13835cfdc4849a61c1b57146bd0312a29.zip | |
Melee: surface weapon state across maps; reset stale caches
- 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.
Diffstat (limited to '')
| -rw-r--r-- | src/bones.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/bones.cpp b/src/bones.cpp index 0df13f2..c777067 100644 --- a/src/bones.cpp +++ b/src/bones.cpp | |||
| @@ -509,6 +509,19 @@ bool head_position(int idx, Vector &out) { | |||
| 509 | // Collect world-space aim points for the selected hit groups (HITGROUP_*). | 509 | // Collect world-space aim points for the selected hit groups (HITGROUP_*). |
| 510 | // Group 1 (head) uses head_position for its bone fallback; other groups are | 510 | // Group 1 (head) uses head_position for its bone fallback; other groups are |
| 511 | // the hitbox centers. The caller picks the point nearest to the crosshair. | 511 | // the hitbox centers. The caller picks the point nearest to the crosshair. |
| 512 | void bones_clear() { | ||
| 513 | for (auto &e : g_entries) { | ||
| 514 | e.ent = nullptr; | ||
| 515 | e.valid = false; | ||
| 516 | e.hdr = nullptr; | ||
| 517 | e.count = 0; | ||
| 518 | e.stamp = 0.0; | ||
| 519 | } | ||
| 520 | g_next = 0; | ||
| 521 | g_logged = 0; | ||
| 522 | g_renderable_warned = false; | ||
| 523 | } | ||
| 524 | |||
| 512 | int aim_points(int idx, unsigned group_mask, Vector *out, int max) { | 525 | int aim_points(int idx, unsigned group_mask, Vector *out, int max) { |
| 513 | if (!out || max <= 0) | 526 | if (!out || max <= 0) |
| 514 | return 0; | 527 | return 0; |
