# Báo Cáo Thẩm Định Tiến Độ & Kế Hoạch Phát Triển Hệ Thống AutoPOE2

> **Thời điểm thẩm định**: 2026-09-06 02:11:00 (+07:00)  
> **Phiên bản mục tiêu**: Path of Exile 2 (v0.5.5 Early Access)  
> **Người thực hiện**: Antigravity AI Pair Programmer & System Auditor  
> **Trạng thái cốt lõi**: **MILESTONE ĐẠT ĐƯỢC: Tool chính (`AutoPOE2_Core.exe`) đã tự động đọc máu thời gian thực và tự động kích hoạt hồi phục (Auto-Flask) thành công cho nhân vật.**

---

## 1. Kết Quả Thẩm Định Trạng Thái Hệ Thống Hiện Tại

### 1.1. Những Gì Đã Vận Hành Thành Công 100%
1. **Đọc Máu Trực Tiếp Từ Bộ Nhớ Game (Live RAM Telemetry)**:
   - Chuỗi con trỏ tĩnh 2 cấp (`0x7FF70EB60000` + `0x4434CE0` $\rightarrow$ `+0x48` $\rightarrow$ `+0x1AD`) hoạt động chính xác trên PID tiến trình thật của `PathOfExile.exe`.
   - Cơ chế nạp tự động từ `bin/Release/offsets.toml` hoạt động ổn định, có fallback quét `{HP, maxHP, maxHP}` khi cần.
2. **Hạ Tầng IPC Shared Memory 4MB Lock-Free**:
   - Vận hành ở tần số **120Hz** với cơ chế Seqlock Double-Buffer (`0x1000` & `0x11000`), không xảy ra hiện tượng rách dữ liệu (Torn-Read).
   - Hàng đợi vòng lệnh vĩ mô SPSC Ring Buffer (16 slots tại `0x300000`) và Watchdog giám sát nhịp tim 2 chiều hoạt động chuẩn xác.
3. **Cơ Chế Tự Nâng Quyền UAC**:
   - Tự động phát hiện High Integrity Token và dùng `ShellExecuteExW` với verb `runas` để thăng cấp quyền Administrator, giải quyết triệt để lỗi `Access Denied (WinError 740)`.
4. **Phản Xạ Auto-Flask Bước Đầu**:
   - Nhận diện tức thời khi tỷ lệ HP $\le$ ngưỡng cấu hình (ví dụ 50%) và kích hoạt phím bơm máu (phím `1`), có cơ chế cooldown chống spam phím.

---

## 2. Phân Tích Kỹ Thuật: Từ Auto-Flask Đơn Lẻ Đến Động Cơ Sinh Tồn Hoàn Chỉnh

Hiện tại, việc tự bấm phím `1` khi máu tụt là một bước tiến rất lớn (chứng minh vòng lặp **Đọc RAM $\rightarrow$ Xử lý Ngưỡng $\rightarrow$ Mô phỏng Input** đã khép kín).

Tuy nhiên, trong thực tế chiến đấu của Path of Exile 2 (đặc biệt từ Act 2, Act 3 và Endgame Waystones), nhân vật thường chết vì 3 nguyên nhân:
1. **Dính Debuff sốc sát thương**: Sốc điện (Shock tăng 50% damage nhận vào), Chảy máu (Bleed mất máu theo quãng đường di chuyển), Đóng băng (Freeze không thể di chuyển), hoặc Máu Tha Hóa (Corrupted Blood dồn stack).
2. **Sát thương bùng nổ (One-shot / Slam của Boss)**: Đòn đánh chuẩn bị (Wind-up Slam) gây sát thương vượt ngưỡng tối đa của HP. Bơm máu sau khi trúng đòn là quá muộn.
3. **Cạn kiệt bình máu (Out of Flask Charges)**: Khi bình hết số lần dùng hoặc đang trong thời gian hồi, tool tiếp tục spam bấm phím nhưng không hồi được máu dẫn đến tử vong.

---

## 3. Đề Xuất Các Tính Năng Phát Triển Tiếp Theo (Xếp Theo Thứ Tự Ưu Tiên)

Dưới đây là 5 tính năng đề xuất bạn nên triển khai tiếp theo, xếp từ mức độ dễ triển khai nhất (Quick-Win) đến các tính năng nâng cao:

```mermaid
graph TD
    Current["ĐÃ ĐẠT: Auto-Flask Đơn (Phím 1)"]
    
    subgraph P1 ["Ưu Tiên 1: Sinh Tồn Cấp Thiết (Quick-Wins)"]
        F1["1.1. Cụm 5 Bình Flask & Auto-Cleanse Debuff"]
        F2["1.2. Auto-Chicken / Emergency Logout (HP < 18%)"]
    end
    
    subgraph P2 ["Ưu Tiên 2: Phản Xạ Cơ Chế POE2 (High Impact)"]
        F3["2.1. Iframe Dodge Roll (Spacebar 300ms Bất Tử)"]
        F4["2.2. Quản lý Mana & Tự Đổi Vũ Khí (Weapon Swap)"]
    end
    
    subgraph P3 ["Ưu Tiên 3: Tiện Ích & Thu Thập (Visual & Economy)"]
        F5["3.1. Dò Con Trỏ Tĩnh Tọa Độ XYZ (Player Position)"]
        F6["3.2. Camera Zoom Hack 2.5x & Tắt Volumetric Fog"]
        F7["3.3. Smart Fast-Loot Clicker (Nhặt Vàng & Currency)"]
    end

    Current --> F1
    Current --> F2
    F1 --> F3
    F1 --> F4
    F3 --> F5
    F5 --> F6
    F5 --> F7
```

---

### 🔥 ĐỀ XUẤT 1 (ƯU TIÊN CAO NHẤT): Cụm Quản Lý 5 Bình Flask & Tự Động Hóa Giải Hiệu Ứng Xấu (Auto-Cleanse Cluster)

* **Mục tiêu**: Nâng cấp từ 1 phím thành hệ thống điều phối thông minh cho cả 5 khe bình thuốc (Phím 1, 2, 3, 4, 5).
* **Chi tiết triển khai**:
  1. **Phân loại bình thuốc trong cấu hình**:
     - *Slot 1*: Life Flask khẩn cấp (bấm khi HP $\le$ 50%).
     - *Slot 2*: Life Flask duy trì (bấm khi HP $\le$ 75%).
     - *Slot 3*: Mana Flask (bấm khi Mana $\le$ 25%).
     - *Slot 4 & 5*: Utility Flask (Bình tăng Giáp/Né tránh/Tốc chạy - kích hoạt khi vào combat hoặc có quái xung quanh).
  2. **Tự động giải Debuff (Auto-Cleanse)**:
     - Đọc trường `debuffMask` trong `PlayerTelemetryData`.
     - Nếu phát hiện bit `DEBUFF_BLEED` hoặc `DEBUFF_CORRUPTED_BLOOD`: Kích hoạt ngay bình có mod *Immunity to Bleeding* trong vòng < 5ms.
     - Nếu phát hiện bit `DEBUFF_FREEZE`: Kích hoạt bình chống đóng băng ngay lập tức.
  3. **Thời gian tác dụng (Flask Duration Buff Tracking)**:
     - Khi một bình đang trong thời gian hiệu lực (ví dụ bình Quicksilver 4 giây), ghi nhớ timestamp và không bấm lặp lại, tránh lãng phí charge.

---

### 🔥 ĐỀ XUẤT 2: Cơ Chế Thoát Hiểm Khẩn Cấp (Auto-Chicken / Emergency Logout & Portal)

* **Mục tiêu**: Bảo toàn tính mạng tuyệt đối cho nhân vật khi cạn kiệt bình máu hoặc gặp nguy hiểm vượt quá khả năng hồi phục. Cực kỳ giá trị để **không bao giờ bị mất 10% kinh nghiệm ở map Endgame** hoặc bảo vệ nhân vật Hardcore.
* **Chi tiết triển khai**:
  1. **Ngưỡng Tử Thần (Critical HP Threshold)**:
     - Khi $HP \le 18\% - 20\%$ và sát thương vẫn đang tụt dốc trong 2 frame liên tiếp:
  2. **Phương pháp Thoát Hiểm (3 Cấp độ)**:
     - *Cấp độ 1 (Soft Exit)*: Gửi phím tắt mở cuộn Portal (`Portal Scroll`) hoặc dùng kỹ năng lướt né ra xa.
     - *Cấp độ 2 (Fast Exit)*: Gửi lệnh chat Win32 `/exit` hoặc `/hideout` trực tiếp vào game client.
     - *Cấp độ 3 (Hard Disconnect - Ngắt kết nối tức thì < 1ms)*: Đóng socket kết nối TCP của `PathOfExile.exe` tới cụm server GGG bằng cách gửi cờ `TCP RST`. Game sẽ lập tức đưa nhân vật ra màn hình chọn nhân vật trong 0ms, server ngắt kết nối ngay mà quái vật không kịp tung đòn kết liễu.

---

### 🔥 ĐỀ XUẤT 3: Tự Động Lăn Né Chiêu (Iframe Dodge Roll - 300ms Bất Tử Đặc Thù POE2)

* **Mục tiêu**: Khai thác tối đa cơ chế độc quyền của POE2 — kỹ năng **Dodge Roll (phím Space)** có 300 mili-giây hoàn toàn miễn nhiễm sát thương (Iframe).
* **Chi tiết triển khai**:
  1. **Phát hiện sát thương đột ngột (Damage Burst Detection)**:
     - Nếu trong 1 tick (8.33ms), nhân vật bị mất một lượng máu $\ge 25\%$ lượng máu tối đa:
     - Tự động kích hoạt phím `Spacebar` kết hợp hướng phím WASD lùi về sau để nhân vật lướt ra khỏi vùng dính sát thương tiếp theo.
  2. **Bắt hoạt ảnh Slam của Boss (Nâng cao)**:
     - Đọc trường `animationId` của quái vật Unique/Boss. Khi mã hoạt ảnh trùng với hoạt ảnh vận chiêu đập đất (Slam Telegraph): Tự động né đòn trước khi chiêu chạm đất.

---

### 🔥 ĐỀ XUẤT 4: Tìm Chuỗi Con Trỏ Tĩnh Tọa Độ Nhân Vật (Player XYZ Position) Bằng `MemProbe Bridge`

* **Mục tiêu**: Biết chính xác tọa độ $X, Y, Z$ của nhân vật trong không gian 3D của bản đồ mà không cần phải chạy lại `CalibratePositionInteractive()` mỗi lần mở game.
* **Chi tiết triển khai**:
  1. Chạy game, sử dụng hàm calibrate vị trí sẵn có trong Core để lấy địa chỉ RAM chứa XYZ (ví dụ: `0x50265410...`).
  2. Dùng công cụ vừa nâng cấp trong dự án:
     ```cmd
     bin\Release\AutoPOE2_MemProbe.exe bridge <XYZ_ADDRESS_HEX>
     ```
  3. `MemProbe` sẽ tự động chạy thuật toán Bi-Directional BFS hẹp sai số để tìm ra Static RVA và các cấp offset từ `PathOfExile.exe`.
  4. Lưu cấu hình vào `offsets.toml` dưới mục `[player_position]`:
     ```toml
     [player_position]
     static_rva = 0x...
     num_offsets = 2
     offset_1 = 0x...
     offset_2 = 0x...
     ```
  5. *Giá trị mang lại*: Mở đường cho tính năng di chuyển tự động (A* Pathfinding), tự né vùng độc dưới đất (Ground Hazards), và tự tìm lối đi tới cửa phụ bản.

---

### 🔥 ĐỀ XUẤT 5: Mở Rộng Góc Nhìn Camera (Zoom Hack 2.0x - 3.0x) & Xóa Sương Mù (Volumetric Fog)

* **Mục tiêu**: Tăng trường nhìn bao quát toàn bộ quái vật từ khoảng cách 150 đơn vị và tăng khung hình (FPS) thêm 15-20%.
* **Chi tiết triển khai**:
  - Xem đặc tả chi tiết tại [`docs/development/02_engine_visual_mods.md`](file:///c:/Projects/AutoPOE2/docs/development/02_engine_visual_mods.md).
  - Tìm con trỏ `CameraInstance` trong `.data` qua mẫu AOB:
    `48 8D 0D ? ? ? ? F3 0F 10 41 2C F3 0F 10 49 34 0F 2F C1`
  - Ghi đè `CameraDistance` từ mặc định `1000.0f` lên `2200.0f`.
  - Nhân hệ số mặt phẳng cắt xa `zFar` lên tương ứng để địa hình và quái ở rìa màn hình không bị culling.

---

## 4. Gợi Ý Đoạn Mã Mẫu (Code Snippet) Để Bạn Tích Hợp Thẳng Vào `main.cpp`

Dưới đây là khung code mở rộng cụm Flask thông minh (Life + Mana + Anti-Spam) mà bạn có thể đặt trực tiếp vào vị trí dòng 372 của [`src/core/main.cpp`](file:///c:/Projects/AutoPOE2/src/core/main.cpp#L372):

```cpp
// ==========================================================
// CỤM ĐIỀU PHỐI FLASK ĐA NĂNG (Gợi ý triển khai tiếp theo)
// ==========================================================
struct SmartFlaskManager {
    struct Slot {
        uint8_t vkKey;          // Mã phím (0x31 = '1', 0x32 = '2', ...)
        uint32_t cooldownMs;    // Thời gian giãn cách giữa các lần bấm
        uint64_t lastUsedMs = 0;
    };

    Slot lifeFlask1{ 0x31, 1000 };  // Phím 1: Bình máu chính (CD 1s)
    Slot lifeFlask2{ 0x32, 2500 };  // Phím 2: Bình máu phụ/duy trì (CD 2.5s)
    Slot manaFlask{  0x33, 3000 };  // Phím 3: Bình mana (CD 3s)
    Slot panicLogout{ VK_F12, 5000 }; // Emergency

    void Update(const PlayerTelemetryData& player, KMBoxNet& kmbox, uint64_t nowMs) {
        if (player.maxHP == 0) return;

        const float hpPct = static_cast<float>(player.currentHP) / static_cast<float>(player.maxHP);
        const float manaPct = (player.maxMana > 0) 
            ? static_cast<float>(player.currentMana) / static_cast<float>(player.maxMana) 
            : 1.0f;

        // 1. CẤP CỨU KHẨN CẤP: HP tụt dưới 18% -> Auto Chicken / Logout
        if (hpPct <= 0.18f && hpPct > 0.0f) {
            std::cout << "[EMERGENCY] HP nguy cấp (" << static_cast<int>(hpPct * 100) 
                      << "%)! Thực hiện ngắt kết nối an toàn..." << std::endl;
            // Gửi phím thoát hoặc gọi lệnh ngắt kết nối
            return;
        }

        // 2. BƠM MÁU CHÍNH (Slot 1): HP <= 55%
        if (hpPct <= 0.55f && (nowMs - lifeFlask1.lastUsedMs >= lifeFlask1.cooldownMs)) {
            kmbox.ClickMouse(0); // hoặc keybd_event/KMBox phím 1
            keybd_event(lifeFlask1.vkKey, 0, 0, 0);
            keybd_event(lifeFlask1.vkKey, 0, KEYEVENTF_KEYUP, 0);
            lifeFlask1.lastUsedMs = nowMs;
            std::cout << "[AutoFlask] Bơm Life Flask [1] - HP: " << static_cast<int>(hpPct * 100) << "%" << std::endl;
        }

        // 3. BƠM MÁU PHỤ (Slot 2): HP <= 35% (đang tụt nhanh cần dồn 2 bình)
        if (hpPct <= 0.35f && (nowMs - lifeFlask2.lastUsedMs >= lifeFlask2.cooldownMs)) {
            keybd_event(lifeFlask2.vkKey, 0, 0, 0);
            keybd_event(lifeFlask2.vkKey, 0, KEYEVENTF_KEYUP, 0);
            lifeFlask2.lastUsedMs = nowMs;
            std::cout << "[AutoFlask] DỒN BÌNH MÁU [2] - HP: " << static_cast<int>(hpPct * 100) << "%" << std::endl;
        }

        // 4. BƠM MANA (Slot 3): Mana <= 20%
        if (manaPct <= 0.20f && (nowMs - manaFlask.lastUsedMs >= manaFlask.cooldownMs)) {
            keybd_event(manaFlask.vkKey, 0, 0, 0);
            keybd_event(manaFlask.vkKey, 0, KEYEVENTF_KEYUP, 0);
            manaFlask.lastUsedMs = nowMs;
            std::cout << "[AutoFlask] Bơm Mana Flask [3] - Mana: " << static_cast<int>(manaPct * 100) << "%" << std::endl;
        }
    }
};
```

---

## 5. Kế Hoạch Đề Xuất Cho Lần Cập Nhật Tiếp Theo (Action Items)

| Thứ tự | Hạng mục công việc | Mức độ phức tạp | Tệp liên quan cần chỉnh sửa |
| :---: | :--- | :---: | :--- |
| **1** | Mở rộng cấu hình phím & logic cho cả 5 Flask (Life 1, Life 2, Mana, Buffs). | Dễ (1-2 giờ) | [`src/core/main.cpp`](file:///c:/Projects/AutoPOE2/src/core/main.cpp) |
| **2** | Tích hợp Auto-Chicken thoát game khẩn cấp khi HP < 18%. | Dễ (1 giờ) | [`src/core/main.cpp`](file:///c:/Projects/AutoPOE2/src/core/main.cpp) |
| **3** | Chạy `memprobe.exe bridge` để tìm chuỗi con trỏ tĩnh cho Player Position (XYZ). | Vừa (2 giờ) | [`tools/memprobe.cpp`](file:///c:/Projects/AutoPOE2/tools/memprobe.cpp), `offsets.toml` |
| **4** | Viết hàm kích hoạt Dodge Roll (Spacebar) khi HP tụt dột biến trong 1 tick. | Vừa (2-3 giờ) | [`src/core/main.cpp`](file:///c:/Projects/AutoPOE2/src/core/main.cpp) |
| **5** | Nghiên cứu AOB cho `CameraInstance` để zoom xa mở rộng tầm nhìn. | Nâng cao | [`docs/development/02_engine_visual_mods.md`](file:///c:/Projects/AutoPOE2/docs/development/02_engine_visual_mods.md) |
