# Quy Chuẩn Khớp Text Hội Thoại NPC & Nghiệm Thu Thực Địa (SSoT 2026)

> **Mã quy chuẩn**: `INV-NPC-TEXT-MATCH-FIRST`, `INV-LIVE-FIELD-ACCEPTANCE`  
> **Module liên quan**: `NpcDialogTextMatcher.cs`, `VulanLib.lua`, `LIVE_TESTING_RUNBOOK.md`

---

## 1. Khớp Text Hội Thoại NPC (`INV-NPC-TEXT-MATCH-FIRST`)
- **Lỗ hổng thứ tự cố định**: Gửi phím cứng (ví dụ: luôn bấm phím 1) sẽ bị lệch khi server cập nhật sự kiện mới lên dòng đầu của NPC, gây kẹt bot.
- **Giải pháp khớp text động (`NpcDialogTextMatcher.cs`)**:
  * Chuẩn hóa kép: Tự động giải mã chuỗi TCVN3 sang Unicode bằng `Tcvn3Encoding.ToUnicode`.
  * Khử số thứ tự đầu dòng: Xóa `"1. "`, `"[1] "`, `"(1) "`.
  * Khử dấu thanh (`RemoveDiacritics`) để đối chiếu linh hoạt.
  * Phân giải theo từ khóa cấu hình trong `BotConfig.cs` (`RepairMenuKeywords`, `MedicineMenuKeywords`).
  * Chỉ dùng phím dự phòng (`fallbackIndex`) khi không tìm thấy dòng nào khớp.
- **AutoVLBS Lua Engine (`VulanLib.lua`)**:
  * Hàm `tbVulanLib.SelectMenuByKeywords(nType, tblKeywords)` duyệt qua các option `0..15` bằng `menu.GetText` và click đúng mục.

---

## 2. Quy Chuẩn Nghiệm Thu Thực Địa (`INV-LIVE-FIELD-ACCEPTANCE`)
- **Test giả lập (Mock / In-memory)**: Chỉ dùng cho quá trình phát triển (Track 1) để kiểm tra cú pháp, logic toán học và UI nội bộ.
- **Tiêu chuẩn nghiệm thu chính thức (Track 2 - Live Ops)**:
  * Phải thực hiện trên tiến trình game thật (`vggame.exe`).
  * Bắt buộc tuân thủ sổ tay kiểm thử thực địa: [`LIVE_TESTING_RUNBOOK.md`](file:///c:/Projects/JX/LIVE_TESTING_RUNBOOK.md).
  * Chuột và phím vật lý của người chơi phải tự do 100% (`INV-BG-INPUT-NO-HIJACK`).
  * Chỉ xác nhận PASS khi có bằng chứng hình ảnh và log thời gian thực từ cửa sổ game thật.
