# 03. Hệ thống Chiến đấu & Hỗ trợ Người chơi (Combat & Assist System)

> **Trọng tâm**: Cơ chế chiến đấu đặc thù của Path of Exile 2 (v0.5.5), chế độ Hỗ trợ Người chơi (Co-Pilot) phản xạ tức thì, và chu trình Tự động Hoàn toàn (Full-Auto Bot).

---

## 1. Phân tích Cơ chế Chiến đấu Đặc thù của POE2 (v0.5.5)

Khác với lối chơi nhấp chuột một nút của POE1, POE2 sở hữu chiều sâu hành động tương tự các tựa game Soulslike và ARPG thế hệ mới:

```mermaid
mindmap
  root((Hệ thống Chiến đấu POE2 v0.5.5))
    Di chuyển & Né tránh
      Hệ thống WASD 8 hướng
      Dodge Roll lướt né iframe
      Hủy động tác Animation Cancel
    Tài nguyên & Kỹ năng
      Thanh Spirit hồi chiêu / Aura
      Hoán đổi Vũ khí Tự động theo Skill
      Không có Mana Flask vô hạn
    Tương tác Đòn đánh
      Cơ chế Primer & Detonator
      Thanh Choáng Boss Poise / Stagger
      Hệ thống phá vỡ Giáp Armor Break
```

1. **Hệ thống Lăn né (Dodge Roll) & Khung bất tử (Iframe)**:
   - Phím Spacebar kích hoạt động tác lăn né có khoảng ~300ms bất tử hoàn toàn trước sát thương và va chạm.
   - Cho phép hủy các animation tấn công chậm (Animation Canceling) để thoát khỏi các đòn đập chí mạng của Boss.
2. **Cơ chế Hoán đổi Vũ khí Kép (Dual Specialization / Auto Weapon Swap)**:
   - Nhân vật có thể trang bị 2 bộ vũ khí độc lập (ví dụ: Set 1 là Gậy Phép Băng, Set 2 là Cung Tên Lửa).
   - Mỗi kỹ năng trong bảng kỹ năng được gán cố định cho một bộ vũ khí. Khi bấm kỹ năng, nhân vật sẽ tự động tráo vũ khí trong vòng 0.1s trước khi ra chiêu.
3. **Cơ chế Mồi & Kích nổ (Primer + Detonation Combos)**:
   - Các kỹ năng trong POE2 tương tác chặt chẽ với nhau: Kỹ năng tạo mồi (Primer: ví dụ rải Dầu, phủ Băng, đóng đinh Armor Break) kết hợp cùng Kỹ năng kích nổ (Detonator: bắn tên Lửa gây nổ diện rộng, dùng búa giã đập tan khối băng).
4. **Hệ thống Choáng Boss (Boss Poise / Stagger Meter)**:
   - Mọi Boss và quái tinh anh đều có một thanh Stagger (màu trắng/vàng bên dưới thanh máu).
   - Khi người chơi gây đủ sát thương làm choáng (Stun buildup), thanh này đầy và Boss rơi vào trạng thái tê liệt hoàn toàn (Groggy/Staggered) trong 5 – 8 giây, nhận thêm 50% sát thương từ mọi nguồn.

---

## 2. Chế độ Hỗ trợ Người chơi (Co-Pilot / Semi-Auto Mode)

Chế độ Co-Pilot được thiết kế để **người chơi vẫn hoàn toàn tự do điều khiển nhân vật bằng WASD và chuột**, trong khi công cụ âm thầm hoạt động như một trợ lý phản xạ siêu đẳng:

```mermaid
flowchart TD
    PlayerInput["Người chơi Di chuyển WASD & Nhắm Chuột"]
    
    subgraph CoPilot_Reflex ["Bộ Phản xạ Co-Pilot (Tier 1 C++ Core)"]
        subgraph HealthWatcher ["Giám sát Sinh mệnh"]
            HPCheck{"HP < 55% hoặc Debuff Nguy hiểm?"}
            TriggerFlask["Tự động bấm Phím 1-5 (Bơm Máu/Giải Hiệu Ứng)"]
        end
        
        subgraph DodgeWatcher ["Nhận diện Đòn chí mạng"]
            BossAnim{"Boss bắt đầu Wind-up Slam?"}
            TriggerDodge["Tự động nháy Spacebar lăn né an toàn"]
        end
        
        subgraph ComboAssister ["Hỗ trợ Combo Kỹ năng"]
            StateDetect{"Quái dính Primer (Dầu/Băng/Vỡ Giáp)?"}
            TriggerFinisher["Gợi ý / Tự bấm Kỹ năng Kết liễu"]
        end
        
        subgraph FastLoot ["Nhặt Đồ Tốc hành"]
            PlayerIdle{"Người chơi dừng lại / Thả phím?"}
            ItemInRange{"Có Đồ Xịn trong Tầm nhặt?"}
            AutoClick["Di chuyển chuột & Click nhặt (<15ms)"]
        end
    end

    HPCheck -- Có --> TriggerFlask
    BossAnim -- Có --> TriggerDodge
    StateDetect -- Có --> TriggerFinisher
    PlayerIdle & ItemInRange -- Có --> AutoClick
```

### 2.1. Auto Flask & Hộ mệnh Khẩn cấp (< 10ms)
- **Cơ chế Ngưỡng Máu/Mana**: Kích hoạt bình máu ngay khi HP tụt xuống dưới mức quy định (mặc định: 60%).
- **Cơ chế Giải Hiệu Ứng (Reactive Cleansing)**: Quét mảng `DebuffBitmask` của nhân vật. Khi xuất hiện các cờ debuff: `Freeze`, `Shock`, `Ignite`, `Bleed`, `Corrupted Blood`, hoặc `Poison`, công cụ tự động kích hoạt ngay lập tức bình dược phẩm có mod hóa giải tương ứng.
- **Phòng vệ Khẩn cấp (Emergency Guard Skill)**: Nếu HP tụt đột ngột trên 40% trong vòng 100ms, tự động kích hoạt kỹ năng phòng thủ (như Molten Shell, Steelskin, hoặc Frost Shield).

### 2.2. Auto Dodge Roll theo Hoạt ảnh Boss (Iframe Telegraph Detection)
- Trong POE2, các đòn đánh chí mạng (One-shot Slams) của Boss luôn đi kèm với hoạt ảnh vung tay/chuẩn bị (Wind-up Animation ID) kéo dài từ 400ms đến 1200ms.
- **Thuật toán Né**:
  1. Đọc mã `AnimationID` của Boss trong danh sách thực thể.
  2. Nếu `AnimationID` nằm trong cơ sở dữ liệu đòn đánh nguy hiểm:
     - Tính toán vector vị trí giữa nhân vật và tâm chấn đòn đánh.
     - Nếu nhân vật đang nằm trong bán kính nổ (Hitbox Radius), công cụ gửi tín hiệu phím điều hướng ngược hướng tâm chấn và nhấn `Spacebar` để kích hoạt Dodge Roll, tận dụng trọn vẹn 300ms iframe.

### 2.3. Hỗ trợ Combo Kỹ năng Thông minh (Smart Combo Sequencer)
- **Chuỗi Kỹ năng Tự động**: Người chơi chỉ cần nhấn một phím kích hoạt mồi (ví dụ: Phím `Q` - ném Lựu đạn Dầu). Tool theo dõi trạng thái đối tượng; ngay khi quái nhận hiệu ứng `Covered in Oil`, tool sẽ tự động kích hoạt phím `E` (Kỹ năng Lửa kết liễu), tự động hoán đổi sang vũ khí phù hợp mà không đòi hỏi người chơi phải phân tâm bấm nhiều tổ hợp phím phức tạp.
- **Tối ưu hóa Phase Choáng (Stagger Burst Window)**: Khi thanh Stagger của Boss chạm mốc 100%, tool phát âm thanh cảnh báo ngắn và sẵn sàng thi triển chuỗi dồn sát thương cực đại khi người chơi giữ chuột phải.

### 2.4. Tự động Nhặt Đồ Nhanh (Smart Fast-Loot)
- Khi người chơi dừng di chuyển trong khoảng thời gian > 200ms và trong bán kính tương tác (Pickup Radius ~25 đơn vị khoảng cách) có vật phẩm đạt điều kiện hiển thị của Loot Filter:
  - Tool tự động điều khiển chuột nhanh tới nhãn vật phẩm (Item Label).
  - Gửi một cú nhấp chuột trái dứt khoát và trả chuột về vị trí tâm ngắm ban đầu của người chơi trong vòng chưa đầy 30 mili-giây, tạo cảm giác hoàn toàn mượt mà tự nhiên.

---

## 3. Chế độ Tự động Hoàn toàn (Full-Auto Bot Mode)

> **15/09/2026 — phân biệt hiện trạng vs kế hoạch:** Opcode 5–8 **CODE-PRESENT**. Vòng hideout→TRAVERSE→map **chưa LIVE** (GAP chuột/U/WASD: [`61_autonomy_gap_audit_and_next_development_basis.md`](./61_autonomy_gap_audit_and_next_development_basis.md)). P0 vitals: [`43_current_status_and_next_development_basis.md`](./43_current_status_and_next_development_basis.md). Hợp đồng: [`29_botbrain_priority_fsm_pickit_and_closed_farming_loop.md`](./29_botbrain_priority_fsm_pickit_and_closed_farming_loop.md).

Ở chế độ đích, toàn bộ quy trình chơi được tự động hóa từ lúc vào bản đồ, chiến đấu, nhặt đồ cho tới khi về thị trấn cất hòm:

```mermaid
stateDiagram-v2
    [*] --> InTown_Check
    InTown_Check --> EnterMap: Mở Map & Đi qua Portal
    
    state InMap_Loop {
        [*] --> Explore_Scan
        Explore_Scan --> Combat_Routine: Phát hiện Quái vật
        Combat_Routine --> Kiting_Movement: Quái áp sát / Máu tụt
        Kiting_Movement --> Combat_Routine
        Combat_Routine --> Looting_Routine: Khu vực đã an toàn
        Looting_Routine --> Explore_Scan: Tiếp tục tìm đường
    }
    
    InMap_Loop --> Town_Return: Túi đồ Đầy / Hết Flask / Map Đã Clear
    Town_Return --> Stash_Sorting: Tới Rương đồ (Stash)
    Stash_Sorting --> Vendor_Salvage: Phân giải rác cho NPC
    Vendor_Salvage --> InTown_Check: Chuẩn bị Map Mới
```

### 3.1. Tìm đường & Điều hướng Địa hình Mê cung (Procedural NavMesh A*)
- POE2 tạo bản đồ ngẫu nhiên từ các khối địa hình (Tile Chunks).
- **Thuật toán Điều hướng**:
  - Trích xuất mảng dữ liệu độ cao và khả năng di chuyển (`WalkableGrid`) từ bộ nhớ game.
  - Thuật toán **Hierarchical A* (HPA\*)** tìm đường đi vĩ mô giữa các phòng lớn.
  - Thuật toán **Dynamic Obstacle Avoidance** điều hướng vi mô bằng phím WASD, liên tục điều chỉnh vector di chuyển để né các chướng ngại vật động (quái vật, bãi dung nham, vũng độc).

### 3.2. Thuật toán Chiến đấu & Thả diều Cơ động (Dynamic Kiting Combat)
- **Phân loại Ưu tiên Mục tiêu**:
  1. *Priority 1*: Boss chính của bản đồ.
  2. *Priority 2*: Quái Tinh anh (Rare Monsters) có mod aura nguy hiểm.
  3. *Priority 3*: Quái triệu hồi/Trụ phát sinh quái (Totems, Spawners).
  4. *Priority 4*: Quái ma thuật (Magic Packs).
  5. *Priority 5*: Quái thường (Normal White Mobs).
- **Cơ chế Thả diều (WASD Strafe & Shoot)**:
  - Tận dụng cơ chế WASD của POE2: Vừa di chuyển lùi hoặc di chuyển vòng tròn (Circle Strafe) bằng phím `A/S/D`, vừa giữ con trỏ chuột hướng về phía quái vật để xả kỹ năng tầm xa.
  - Duy trì khoảng cách lý tưởng (Sweet Spot Distance) tùy theo bộ kỹ năng: ~50-70 đơn vị đối với Cung thủ/Pháp sư, ~10-15 đơn vị đối với Đấu sĩ cận chiến.

### 3.3. Quy trình Thu dọn Chiến lợi phẩm (Looting Pipeline)
1. **Kiểm tra An toàn Khu vực**: Không bao giờ nhặt đồ khi xung quanh vẫn còn quái vật nguy hiểm đang tấn công.
2. **Bộ lọc Vật phẩm Đa cấp độ**:
   - *Tier 0 (Thần thánh/Gương)*: Mirror of Kalandra, Divine Orb, Unique cực hiếm -> Nhặt lập tức bất kể tình huống.
   - *Tier 1 (Giá trị cao)*: Exalted Orb, Chaos Orb, High Tier Maps, Uncut Skill Gems Lv cao.
   - *Tier 2 (Nguyên liệu & Đồ Base)*: Currencies tầm trung, Rare Items có base level chuẩn meta.
   - *Tier 3 (Bỏ qua)*: Đồ trắng, đồ xanh vô giá trị, trang bị không đạt chỉ tiêu.

### 3.4. Quản lý Thị trấn & Rương đồ (Town & Stash Routine)
1. Sử dụng cuộn dịch chuyển (Portal Scroll) hoặc kỹ năng về thị trấn.
2. Di chuyển đến NPC trong Hideout/Thị trấn để nạp lại đầy các bình Flask và hồi sinh linh thú (Minions/Spirit).
3. Mở rương đồ cá nhân (Stash Tab):
   - Chuyển Currency vào Currency Tab chuyên dụng.
   - Chuyển Gems, Runes và Omens vào các tab tương ứng.
   - Các trang bị Rare được gửi sang cho **Sub-Agent AI LootAppraiser** thẩm định affixes; đồ rác sẽ được tự động bán cho NPC hoặc đưa vào bàn phân giải (Salvage Bench) để thu hồi vàng và nguyên liệu.

---

## 4. Hiện thực Thực tế: Động cơ Phản xạ `ReflexManager` (C++ Core Engine)

> **Mã nguồn triển khai**: [`src/core/combat/reflex_manager.hpp`](file:///c:/Projects/AutoPOE2/src/core/combat/reflex_manager.hpp) & [`reflex_manager.cpp`](file:///c:/Projects/AutoPOE2/src/core/combat/reflex_manager.cpp)  
> **Vòng lặp vận hành**: 120Hz trực tiếp trong `GameSession` / `main.cpp` của C++ Core, độ trễ phản xạ $< 8.3\text{ ms}$.

```mermaid
flowchart TD
    Tick["Tick 120Hz (GameSession::Tick)"] --> ReadData["Đọc HP/Mana & Tọa độ XYZ (xyz_addr)"]
    ReadData --> Emergency{"HP <= 18%?"}
    Emergency -- Có --> Chicken["Auto-Chicken: Gửi VK_ESCAPE mở menu ngắt an toàn"]
    Emergency -- Không --> BurstCheck{"Tụt >= 22% maxHP trong tick?"}
    BurstCheck -- Có --> Dodge["Iframe Dodge: S + Spacebar (Hold 35ms, CD 850ms)"]
    BurstCheck -- Không --> FlaskLife{"HP <= 55%?"}
    FlaskLife -- Có --> CheckHoT{"Máu đang trong HoT 3000ms & HP > 28%?"}
    CheckHoT -- Đang hồi --> SkipLife["Bỏ qua, không lãng phí sạc bình"]
    CheckHoT -- Nguy kịch/Hết HoT --> PressLife["Bấm Phím 1 (Life Flask, CD 800ms)"]
    FlaskLife -- Không --> FlaskMana{"Mana <= 25%?"}
    FlaskMana -- Có --> CheckEmpty{"Bình cạn (3 lần bấm không tăng)?"}
    CheckEmpty -- Cạn --> SkipMana["Tạm dừng spam chống loạn phím"]
    CheckEmpty -- Còn sạc --> PressMana["Bấm Phím 2 (Mana Flask, CD 1200ms)"]
    FlaskMana -- Không --> KiteCheck{"Quái vật < 35 units?"}
    KiteCheck -- Có --> KiteMove["Tính vector dX, dY -> Gửi WASD lùi xa quái"]
    KiteCheck -- Không --> Idle["Duy trì trạng thái bình thường"]
```

### 4.1. Iframe Dodge Roll (`HandleIframeDodge`)
- **Ngưỡng kích hoạt**: `burstDamageRatio = 0.22f` (nhận sát thương tức thì $\ge 22\%$ maxHP giữa 2 mẫu đo).
- **Hành động phản xạ**: Gửi đồng thời phím lùi `S` (`VK_S` / HID `0x16`) và `Spacebar` (`VK_SPACE` / HID `0x2C`) với thời gian giữ phím (Key Hold) 35ms nhằm đảm bảo game engine nhận diện đúng lệnh né lùi.
- **Bảo vệ chống kẹt**: Cooldown `dodgeCooldownMs = 850ms` ngăn chặn việc lãng phí thanh nội lực né hoặc kẹt cứng hoạt ảnh (Animation Lock).

### 4.2. Smart Life Flask với Cơ chế HoT-Aware (`HandleLifeFlask`)
- **Ngưỡng kích hoạt chuẩn**: `hpThreshold = 0.55f` ($HP \le 55\%$).
- **Nhận thức chu kỳ hồi phục (Heal-over-Time Tracking)**:
  - Trong POE2, bình máu có thời gian tác dụng hồi phục kéo dài ~3.000ms (`lifeHoTDurationMs = 3000ms`).
  - Nếu bình vừa được bấm và lượng máu hiện tại vẫn đang tăng so với thời điểm bấm (`currentHP > lifePressHP`), hệ thống duy trì cờ `isLifeHoT = true` và **tạm ngừng bấm thêm** nhằm tránh lãng phí sạc bình quý giá.
- **Chế độ Vượt ngưỡng Nguy kịch (Critical Burst Override)**:
  - Khi máu tiếp tục sụt giảm xuống dưới `criticalHpThreshold = 0.28f` ($HP \le 28\%$), hệ thống lập tức phá vỡ trạng thái HoT (`isLifeHoT = false`) để cho phép dồn bình cấp cứu ngay lập tức.

### 4.3. Smart Mana Flask & Thuật toán Phát hiện Cạn Bình (`HandleManaFlask`)
- **Ngưỡng kích hoạt**: `manaThreshold = 0.25f` ($Mana \le 25\%$).
- **Phát hiện cạn bình (Empty Detection)**:
  - Sau mỗi lần bấm phím 2 (`lifeFlaskVk = 0x32`), hệ thống đợi 600ms để kiểm tra xem Mana có tăng hay không (`currentMana > preManaValue`).
  - Nếu sau 3 lần bấm liên tiếp mà mana không có dấu hiệu phục hồi (`manaNoEffectCount >= 3`), hệ thống xác định bình mana đã cạn charge (`manaEmpty = true`) và tạm dừng spam phím, tránh làm nghẽn hàng đợi phím hoặc gây hành vi bất thường.
  - Cờ `manaEmpty` tự động được xóa khi phát hiện mana hồi phục trở lại (ví dụ sau khi về thị trấn hoặc nhặt giọt năng lượng).

### 4.4. Thả Diều Động Theo Tọa Độ XYZ (`HandleKiting`)
- **Nguồn dữ liệu không gian**: Tọa độ $(X, Y, Z)$ người chơi được đọc trực tiếp từ `xyz_addr = 0x50264019c10` (lưu trong `offsets.toml`).
- **Thuật toán Vector Né Quái**:
  - Quét toàn bộ quái vật sống (`ent.type == 1 && !(ent.extraFlags & 4)`) trong `packet.entities`.
  - Tìm quái vật có khoảng cách Euclidean nhỏ nhất:
    $$\text{dist} = \sqrt{(X_{\text{player}} - X_{\text{ent}})^2 + (Y_{\text{player}} - Y_{\text{ent}})^2}$$
  - Nếu $\text{dist} < \text{safeDistance}$ (mặc định $35.0$ đơn vị khoảng cách):
    - Tính vector lệch $dX = X_{\text{player}} - X_{\text{ent}}$, $dY = Y_{\text{player}} - Y_{\text{ent}}$.
    - Ánh xạ sang phím `W, A, S, D` để di chuyển ngược hướng quái vật, giữ cự ly bắn tỉa hoàn hảo cho người chơi.

### 4.5. Auto-Chicken Cấp Cứu Thoát Hiểm (`HandleEmergencyLogout`)
- **Ngưỡng kích hoạt**: `emergencyHpThreshold = 0.18f` ($HP \le 18\%$).
- **Cơ chế**: Tự động gửi phím `VK_ESCAPE` mở menu thoát an toàn lập tức khi mọi biện pháp bơm máu và né đòn thất bại. Bảo toàn nguyên vẹn 10% kinh nghiệm ở các cấp độ Endgame của Path of Exile 2.

