# Tóm tắt Dự án (Project Context) - Mục tiêu: Chuyển đổi dự án Perfect World từ bản gốc PC (`e:\Projects\perfect-world-source`) sang phiên bản Mobile sử dụng Unity (`e:\Projects\perfect-world-unity`). - Ngôn ngữ & Nền tảng đích: C#, Unity Engine. # Nguyên Tắc Hoạt Động Của AI (Core Rules) ## 1. BẮT BUỘC LÀM RÕ YÊU CẦU (Clarification First Principle) - TUYỆT ĐỐI KHÔNG tự ý suy đoán và bắt đầu thay đổi code (hoặc thực hiện bất kỳ workflow nào) khi yêu cầu của người dùng còn mơ hồ, thiếu chi tiết hoặc có thể hiểu theo nhiều nghĩa. - NGUYÊN TẮC CỐT LÕI: "Liên tục hỏi và xác nhận cho đến khi chắc chắn 100% mới bắt đầu thực thi". ## 2. Quy trình 5 bước tiếp nhận và xử lý yêu cầu: - **Bước 1 - Phân tích:** Tiếp nhận yêu cầu. Đối chiếu với bối cảnh chuyển đổi từ PC sang Mobile. - **Bước 2 - Tìm điểm mù:** Tự hỏi bản thân xem có phần nào trong yêu cầu chưa đủ thông tin để viết code lập tức không (vd: thiếu file tham chiếu, logic mobile khác pc chỗ nào, biến nào chịu trách nhiệm lưu trữ trạng thái...). - **Bước 3 - Đặt câu hỏi:** Đưa ra các câu hỏi ngắn gọn, liệt kê theo gạch đầu dòng để người dùng giải đáp. (VD: "Ý bạn là nút này trên mobile chạm vào sẽ hiện ra mảng 15 skill hay sao?") - **Bước 4 - Chốt phương án:** Sau khi người dùng đã giải đáp xong mọi thắc mắc, tóm tắt lại phương án giải quyết (Kế hoạch thực hiện) và chờ người dùng nói "OK/Đồng ý". - **Bước 5 - Thực thi:** Chỉ tiến hành chạy công cụ sửa đổi code hoặc tạo file mới khi bước 4 đã hoàn tất. ## 3. Lưu ý đặc thù về chuyển đổi PC -> Mobile - Bất cứ khi nào làm việc với UI hoặc Input, luôn nhớ Mobile dùng Touch/Drag thay vì Mouse Click/Hover. - Nếu gặp logic không rõ ràng trong `perfect-world-unity`, hãy yêu cầu người dùng trỏ tới file tương ứng ở `perfect-world-source` để tham khảo cách hoạt động gốc. - **Quy tắc đặt tên khi convert:** Ưu tiên không thay đổi tên biến và hàm nếu có thể, làm giống bên C++ nhất có thể để dễ dàng đối chiếu và debug. ## 4. Workflow Init Dự Án (Project Initialization) - **Khi nào:** Khi người dùng yêu cầu init dự án hoặc khi bắt đầu làm việc với dự án mới. - **Mục đích:** Thu thập và ghi lại thông tin tổng quan về dự án vào file `claude.md` để làm context cho các phiên làm việc sau. - **Quy trình thực hiện:** 1. **Quét cấu trúc thư mục:** Sử dụng `list_dir` để khám phá cấu trúc thư mục chính của dự án (Assets, Scripts, Resources, v.v.). 2. **Xác định module chính:** Tìm và liệt kê các module/tính năng chính của dự án (Skill System, Network, UI, Movement, v.v.). 3. **Phân tích file quan trọng:** Đọc các file quan trọng như README, config files, entry points để hiểu kiến trúc tổng thể. 4. **Xác định pattern/convention:** Phân tích naming convention, coding style, design patterns được sử dụng trong dự án. 5. **Ghi vào claude.md:** Cập nhật file `claude.md` với các thông tin: - Cấu trúc thư mục chính - Danh sách module/tính năng quan trọng - File entry points và file quan trọng - Kiến trúc hệ thống (nếu có) - Pattern và convention được sử dụng - Thông tin về dependencies và build system - **Lưu ý:** Không cần đọc toàn bộ code, chỉ tập trung vào cấu trúc tổng thể và các file quan trọng để có cái nhìn tổng quan. ## 5. Chế Độ Ghi Nhớ (Memory Mode) - **Kích hoạt:** Khi người dùng bắt đầu câu lệnh bằng ký tự `#` (ví dụ: `# Rule mới: ...`, `# Ghi nhớ: ...`, `# Lưu ý: ...`) hoặc lệnh `/memory`. - **Hành động bắt buộc:** - AI phải NGAY LẬP TỨC nhận diện đây là Memory Mode. - Phân tích và trích xuất thông tin cần ghi nhớ từ câu lệnh của người dùng. - Tự động cập nhật nội dung đó vào file `claude.md` ở section phù hợp (hoặc tạo section mới nếu cần). - Không cần hỏi lại người dùng, chỉ cần ghi nhớ và cập nhật. - **Sau khi ghi:** Báo cáo ngắn gọn cho người dùng là đã cập nhật luật/ghi nhớ thành công vào `claude.md`. - **Mục đích:** Tích lũy kiến thức và quy tắc từ các phiên làm việc để sử dụng cho các lần trò chuyện hiện tại và sau này. ## 6. Chiến Lược Hiểu Codebase (Codebase Exploration) - **Giới hạn thực tế:** Dự án MMO (C++ & Unity) có quy mô khổng lồ (hàng ngàn file). Trí tuệ nhân tạo không thể "đọc" toàn bộ source code cùng một lúc do giới hạn bộ nhớ khả dụng trong một phiên hội thoại (context window). - **Phương pháp "Cuốn chiếu" (On-demand Analysis):** - **Truy xuất mục tiêu:** Khi bắt tay vào làm một *tính năng cụ thể* (VD: Skill, QuickBar, Di chuyển, Network), AI sẽ dùng công cụ quét (grep/search) để đọc chính xác các file liên quan ở bản C++ gốc và đối chiếu với bản C#. - **Tích lũy kiến thức:** Xử lý xong phần nào, AI sẽ đúc kết luồng logic của phần đó và ghi chú lại vào hệ thống Knowledge hoặc file `claude.md` để ghi nhớ vĩnh viễn. - **Cấu trúc Mặc định:** - **Bản gốc (C++)**: Nằm tại `~\CElement`. Logic chính của game client nằm trong `CElementClient`; Hệ thống UI (như bảng skill, túi đồ) nằm ở `AUInterface2` / `CElementClient`; Logic về hiệu ứng/đồ họa ở `GfxCommon`. - **Bản Unity (C#)**: Mọi sự chỉnh sửa, code logic chuyển đổi đều được tiến hành và lưu ở `~\perfect-world-unity\Assets`. ## 7. Phát Hiện Lỗi Build Tiềm Ẩn (Build Error Detection) - **Khi nào:** Khi code hoặc scan code trong quá trình thực thi yêu cầu của người dùng. - **Mục đích:** Tự động phát hiện và cảnh báo các lỗi build tiềm ẩn trước khi chúng gây ra vấn đề trong quá trình build. - **Các loại lỗi cần phát hiện:** 1. **Conditional Compilation Mismatch:** - Phát hiện khi một method/class được định nghĩa trong `#if UNITY_EDITOR` (hoặc các directive khác) nhưng được gọi từ code không có cùng directive. - Ví dụ: ```csharp #if UNITY_EDITOR public void MethodA(){} #endif public void MethodB(){ MethodA(); } // ❌ Lỗi: MethodA không tồn tại khi build không phải Editor ``` - Giải pháp: Đảm bảo code gọi method cũng nằm trong cùng directive, hoặc sử dụng `#if UNITY_EDITOR` cho cả MethodB, hoặc tách logic để tránh dependency. 2. **Missing References:** Kiểm tra các reference đến class/method có thể không tồn tại trong một số build configuration. 3. **Platform-Specific Code:** Phát hiện code chỉ hoạt động trên một platform cụ thể nhưng được gọi từ code chung. - **Hành động khi phát hiện:** - Cảnh báo người dùng ngay lập tức về lỗi tiềm ẩn. - Đề xuất giải pháp khắc phục cụ thể. - Không tự động sửa mà chờ xác nhận từ người dùng (theo quy trình 5 bước). - **Lưu ý:** Luôn kiểm tra các directive như `#if UNITY_EDITOR`, `#if UNITY_STANDALONE`, `#if UNITY_ANDROID`, `#if UNITY_IOS`, v.v. khi scan code.