Skip to content

Addon: [1.9.3] - Fix dead soft target blocking combat with body-pulled mobs (#720)#746

Merged
Xian55 merged 1 commit intodevfrom
fix/720
Feb 2, 2026
Merged

Addon: [1.9.3] - Fix dead soft target blocking combat with body-pulled mobs (#720)#746
Xian55 merged 1 commit intodevfrom
fix/720

Conversation

@Xian55
Copy link
Owner

@Xian55 Xian55 commented Feb 2, 2026

Problem:

When a mob dies while fighting multiple enemies, the soft target system would lock onto the dead mob's corpse, preventing the player from attacking live mobs that were body-pulled during combat.

Root Cause:

AutoAttack used INTERACTTARGET which respects soft target priority, causing attacks to be directed at the dead soft target instead of the current hard target.

Solution:

Use STARTATTACK command which bypasses soft target interaction and directly engages the current hard target.

Addon Changes (v1.9.2 -> v1.9.3)

  • Add lastDamageDoneTime tracking for time-based stuck detection
  • Add STARTATTACK key binding (ALT-NUMPADPLUS)
  • Increment NUMBER_OF_FRAMES to 112 for new data cell

Core Changes

Combat System

  • AutoAttack now uses STARTATTACK instead of INTERACTTARGET
  • AutoAttack requirement changed from "!SoftTargetDead" to "!MeleeSwinging"
  • Add IsMeleeSwinging() to PlayerReader using swing timer + network latency
  • Add LastDamageDoneTime to CombatLog for stuck detection

CombatGoal Improvements

  • Add UnstuckDeadSoftTargetLock() with time-based detection
    • Triggers after 2x main hand speed with no damage dealt
    • Turns away from dead soft target to clear it
    • Falls back to strafing if full 360° rotation doesn't clear
  • Move stuck detection before spell casting loop
  • FindPossibleThreats now checks DamageTaken for body-pulled mobs

ReactCastError Improvements

  • Skip fast interact turn when soft target blocks combat
  • Fall back to slow 180° turn when interact fails
  • Fix direction calculation bug (was = -Tau, now -= Tau)

GoapAgent Fix

  • Properly call OnExit() when goal becomes empty

New Infrastructure

  • Add SoftInteract_CombatBlocker() to AddonBits
  • Add StrafeLeft/StrafeRight KeyActions for emergency unstuck
  • Add STARTATTACK to KeyBindingDefaults

New Requirements

Requirement Description
MeleeSwinging Player is in melee range and actively swinging (based on swing timer + latency)
LastDamageDealtMs Time since last damage was dealt to any target in milliseconds

Example usage:

"Requirement": "MeleeSwinging"           // Player is actively melee swinging
"Requirement": "LastDamageDealtMs < 2000" // Dealt damage within last 2 seconds

Side effects / Known issues:

  • Since INTERACTTARGET no longer periodically pressed in combat but in Reaction to the system message bad facing, while the player is approaches the target, it might overshoot and stop over the enemy, then turn around 180* and goes back.

Problem:
When a mob dies while fighting multiple enemies, the soft target system
would lock onto the dead mob's corpse, preventing the player from
attacking live mobs that were body-pulled during combat.

Root Cause:
AutoAttack used INTERACTTARGET which respects soft target priority,
causing attacks to be directed at the dead soft target instead of
the current hard target.

Solution:
Use STARTATTACK command which bypasses soft target interaction and
directly engages the current hard target.

## Addon Changes (v1.9.2 -> v1.9.3)

- Add lastDamageDoneTime tracking for time-based stuck detection
- Add STARTATTACK key binding (ALT-NUMPADPLUS)
- Increment NUMBER_OF_FRAMES to 112 for new data cell

## Core Changes

### Combat System
- AutoAttack now uses STARTATTACK instead of INTERACTTARGET
- AutoAttack requirement changed from "!SoftTargetDead" to "!MeleeSwinging"
- Add IsMeleeSwinging() to PlayerReader using swing timer + network latency
- Add LastDamageDoneTime to CombatLog for stuck detection

### CombatGoal Improvements
- Add UnstuckDeadSoftTargetLock() with time-based detection
  - Triggers after 2x main hand speed with no damage dealt
  - Turns away from dead soft target to clear it
  - Falls back to strafing if full 360° rotation doesn't clear
- Move stuck detection before spell casting loop
- FindPossibleThreats now checks DamageTaken for body-pulled mobs

### ReactCastError Improvements
- Skip fast interact turn when soft target blocks combat
- Fall back to slow 180° turn when interact fails
- Fix direction calculation bug (was = -Tau, now -= Tau)

### GoapAgent Fix
- Properly call OnExit() when goal becomes empty

### New Infrastructure
- Add SoftInteract_CombatBlocker() to AddonBits
- Add StrafeLeft/StrafeRight KeyActions for emergency unstuck
- Add MeleeSwinging requirement to RequirementFactory
- Add STARTATTACK to KeyBindingDefaults

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@Xian55 Xian55 added the bugfix This pull request fixes an issue. label Feb 2, 2026
@Xian55 Xian55 linked an issue Feb 2, 2026 that may be closed by this pull request
@Xian55 Xian55 merged commit daa055a into dev Feb 2, 2026
1 check passed
@Xian55 Xian55 deleted the fix/720 branch February 2, 2026 23:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bugfix This pull request fixes an issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Dead SoftInteract unit prevents engaging in-melee range body pulled mobs

1 participant