From 51667e88674cd87e0d82d5e2ecc4c2abb815bda3 Mon Sep 17 00:00:00 2001 From: Tungdv Date: Mon, 9 Mar 2026 19:28:45 +0700 Subject: [PATCH] feat: add config instance. --- Assets/Addressable/instance.json | 967 ++++++++++++++++ Assets/Addressable/instance.json.meta | 7 + Assets/PerfectWorld/Resources/instance.asset | 1021 +++++++++++++++++ .../Resources/instance.asset.meta | 8 + .../Scripts/Common/AWScriptFile.cs | 61 + .../PerfectWorld/Scripts/Move/CECHostMove.cs | 8 +- .../JsonScriptableObjectImporterWindow.cs | 370 ++++++ ...JsonScriptableObjectImporterWindow.cs.meta | 2 + .../Scripts/Utils/instanceDataAsset.cs | 30 + .../Scripts/Utils/instanceDataAsset.cs.meta | 2 + .../PerfectWorld/Scripts/World/EC_Instance.cs | 15 +- Assets/Scripts/EC_GameRun.cs | 50 +- 12 files changed, 2528 insertions(+), 13 deletions(-) create mode 100644 Assets/Addressable/instance.json create mode 100644 Assets/Addressable/instance.json.meta create mode 100644 Assets/PerfectWorld/Resources/instance.asset create mode 100644 Assets/PerfectWorld/Resources/instance.asset.meta create mode 100644 Assets/PerfectWorld/Scripts/Utils/Editor/JsonScriptableObjectImporterWindow.cs create mode 100644 Assets/PerfectWorld/Scripts/Utils/Editor/JsonScriptableObjectImporterWindow.cs.meta create mode 100644 Assets/PerfectWorld/Scripts/Utils/instanceDataAsset.cs create mode 100644 Assets/PerfectWorld/Scripts/Utils/instanceDataAsset.cs.meta diff --git a/Assets/Addressable/instance.json b/Assets/Addressable/instance.json new file mode 100644 index 0000000000..7ee81124ff --- /dev/null +++ b/Assets/Addressable/instance.json @@ -0,0 +1,967 @@ +[ + { + "m_strName": "Đại lục Hoàn Mỹ", + "m_id": 1, + "m_strPath": "world", + "m_iRowNum": 11, + "m_iColNum": 8, + "m_bLimitJump": 0, + "m_routeFiles": [ + "r1_5-c4_5-l0", + "r3_3-c6_6-l0", + "r4_7-c2_3-l0", + "r8_8-c1_3-l0", + "r8_9-c6_6-l0", + "r1_2-c7_7-l0" + ], + "m_content": "{}" + }, + { + "m_strName": "Minh Thú Thành", + "m_id": 101, + "m_strPath": "a01", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Anh Hùng Trủng", + "m_id": 102, + "m_strPath": "a02", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + "r0_0-c0_0-l0" + ], + "m_content": "{}" + }, + { + "m_strName": "Bàn Ti Động", + "m_id": 103, + "m_strPath": "a03", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Thổ Nâu Động Huyệt", + "m_id": 104, + "m_strPath": "a04", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Hỏa Nham Động Huyệt", + "m_id": 105, + "m_strPath": "a05", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + "r0_0-c0_0-l0" + ], + "m_content": "{}" + }, + { + "m_strName": "Cuồng Lang Sào Huyệt", + "m_id": 106, + "m_strPath": "a06", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + "r0_0-c0_0-l0" + ], + "m_content": "{}" + }, + { + "m_strName": "Xà Hạt Động", + "m_id": 107, + "m_strPath": "a07", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + "r0_0-c0_0-l0" + ], + "m_content": "{}" + }, + { + "m_strName": "Thanh Y Trủng", + "m_id": 108, + "m_strPath": "a08", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + "r0_0-c0_0-l0" + ], + "m_content": "{}" + }, + { + "m_strName": "U Minh Cư", + "m_id": 109, + "m_strPath": "a09", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + "r0_0-c0_0-l0" + ], + "m_content": "{}" + }, + { + "m_strName": "Lí Sương Bí Cảnh", + "m_id": 110, + "m_strPath": "a10", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + "r0_0-c0_0-l0" + ], + "m_content": "{}" + }, + { + "m_strName": "Thiên Kiếp Cốc", + "m_id": 111, + "m_strPath": "a11", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + "r0_0-c0_0-l0" + ], + "m_content": "{}" + }, + { + "m_strName": "Tùng Lâm Di Tích", + "m_id": 112, + "m_strPath": "a12", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Quỷ Vực Huyễn Cảnh", + "m_id": 113, + "m_strPath": "a13", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Oán Linh Chi Môn", + "m_id": 114, + "m_strPath": "a14", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + "r0_0-c0_0-l0" + ], + "m_content": "{}" + }, + { + "m_strName": "Bí Bảo Quật", + "m_id": 115, + "m_strPath": "a15", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + "r0_0-c0_0-l0" + ], + "m_content": "{}" + }, + { + "m_strName": "Tiên Huyễn Thiên", + "m_id": 116, + "m_strPath": "a16", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Ma Huyễn Thiên", + "m_id": 117, + "m_strPath": "a17", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Long Cung", + "m_id": 118, + "m_strPath": "a18", + "m_iRowNum": 3, + "m_iColNum": 3, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Dạ Khốc Đảo", + "m_id": 119, + "m_strPath": "a19", + "m_iRowNum": 3, + "m_iColNum": 3, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Vạn Xà Đảo", + "m_id": 120, + "m_strPath": "a20", + "m_iRowNum": 3, + "m_iColNum": 3, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Tiên Giới", + "m_id": 121, + "m_strPath": "a21", + "m_iRowNum": 4, + "m_iColNum": 4, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Ma Giới", + "m_id": 122, + "m_strPath": "a22", + "m_iRowNum": 4, + "m_iColNum": 4, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Thiên Giới Luyện Ngục", + "m_id": 123, + "m_strPath": "a23", + "m_iRowNum": 3, + "m_iColNum": 3, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Ma Vực Đào Nguyên", + "m_id": 124, + "m_strPath": "a24", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Chiến Ca Chi Thành", + "m_id": 125, + "m_strPath": "a25", + "m_iRowNum": 3, + "m_iColNum": 3, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Luân Hồi Điện", + "m_id": 126, + "m_strPath": "a26", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Thần Nguyệt Cốc", + "m_id": 127, + "m_strPath": "a27", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Thần Vô Cốc", + "m_id": 128, + "m_strPath": "a28", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Phúc Sương Thành", + "m_id": 129, + "m_strPath": "a29", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Hoàng Hôn Thánh Điện", + "m_id": 131, + "m_strPath": "a31", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Vận Mệnh Ma Phương", + "m_id": 132, + "m_strPath": "a32", + "m_iRowNum": 3, + "m_iColNum": 3, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Thiên Lệ Chi Thành", + "m_id": 133, + "m_strPath": "a33", + "m_iRowNum": 2, + "m_iColNum": 2, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Khung cảnh Hôn Lễ", + "m_id": 134, + "m_strPath": "a34", + "m_iRowNum": 2, + "m_iColNum": 2, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Phụ bản Bang Phái", + "m_id": 135, + "m_strPath": "a35", + "m_iRowNum": 4, + "m_iColNum": 1, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Bồng Lai Huyễn Cảnh", + "m_id": 137, + "m_strPath": "a37", + "m_iRowNum": 3, + "m_iColNum": 6, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Phượng Minh Cốc", + "m_id": 138, + "m_strPath": "a38", + "m_iRowNum": 2, + "m_iColNum": 2, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Vô ĐỊnh Trụ-mô thức cấp thấp", + "m_id": 139, + "m_strPath": "a39", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Phục Nhĩ Địa Huyệt Thần Độc Chi Gian", + "m_id": 140, + "m_strPath": "a40", + "m_iRowNum": 2, + "m_iColNum": 2, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{ 0, -200, 160, 200, a40_tile_0101.dds }" + }, + { + "m_strName": "Vô ĐỊnh Trụ-mô thức cấp cao", + "m_id": 141, + "m_strPath": "a41", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Chiến Thần Cốc", + "m_id": 142, + "m_strPath": "a42", + "m_iRowNum": 2, + "m_iColNum": 2, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Ngũ Đế Chi Đô", + "m_id": 143, + "m_strPath": "a43", + "m_iRowNum": 6, + "m_iColNum": 2, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Quốc Chiến-Cô Đảo Đoạt Kì", + "m_id": 144, + "m_strPath": "a44", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Quốc Chiến-Thủy Tinh Tranh Đoạt", + "m_id": 145, + "m_strPath": "a45", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Quốc Chiến-Đoạn Kiều Đối Trì", + "m_id": 146, + "m_strPath": "a46", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Lạc Nhật Cốc", + "m_id": 147, + "m_strPath": "a47", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Bất Xá Đường", + "m_id": 148, + "m_strPath": "a48", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Linh Đàn Huyễn Cảnh", + "m_id": 150, + "m_strPath": "a50", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Long Ẩn Quật", + "m_id": 149, + "m_strPath": "a49", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Linh Độ Đinh Châu", + "m_id": 161, + "m_strPath": "a61", + "m_iRowNum": 3, + "m_iColNum": 4, + "m_bLimitJump": 0, + "m_routeFiles": [ + "r1_1-c1_2-l0" + ], + "m_content": "{}" + }, + { + "m_strName": "Khung Thế Giới", + "m_id": 162, + "m_strPath": "a62", + "m_iRowNum": 3, + "m_iColNum": 4, + "m_bLimitJump": 0, + "m_routeFiles": [ + "r1_1-c1_2-l0" + ], + "m_content": "{}" + }, + { + "m_strName": "Nhân Giới", + "m_id": 163, + "m_strPath": "a63", + "m_iRowNum": 4, + "m_iColNum": 4, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Lưu Ngân Cung", + "m_id": 166, + "m_strPath": "a66", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Phục Ba Đường", + "m_id": 167, + "m_strPath": "a67", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Mô thức Câu chuyện Nhân Giới", + "m_id": 168, + "m_strPath": "a68", + "m_iRowNum": 4, + "m_iColNum": 4, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Bồng Minh Động", + "m_id": 169, + "m_strPath": "a69", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + "r0_0-c0_0-l0" + ], + "m_content": "{}" + }, + { + "m_strName": "Vận Mệnh Ma Phương", + "m_id": 170, + "m_strPath": "a70", + "m_iRowNum": 3, + "m_iColNum": 3, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Thiện Long Cốc", + "m_id": 171, + "m_strPath": "a71", + "m_iRowNum": 4, + "m_iColNum": 3, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Tru Thiên Phù Đồ Tháp", + "m_id": 172, + "m_strPath": "a72", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Tru Thiên Phù Đồ Tháp", + "m_id": 173, + "m_strPath": "a72", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Tru Thiên Phù Đồ Tháp", + "m_id": 174, + "m_strPath": "a72", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Tru Thiên Phù Đồ Tháp", + "m_id": 175, + "m_strPath": "a72", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Thiên Hạ Đệ Nhất Tỉ Võ Đại Hội", + "m_id": 177, + "m_strPath": "a77", + "m_iRowNum": 2, + "m_iColNum": 1, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Huyễn Hải Kì Đàm", + "m_id": 176, + "m_strPath": "a76", + "m_iRowNum": 3, + "m_iColNum": 3, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Lăng Vân Giới", + "m_id": 180, + "m_strPath": "a80", + "m_iRowNum": 3, + "m_iColNum": 3, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Lăng Vân Giới", + "m_id": 181, + "m_strPath": "a80", + "m_iRowNum": 3, + "m_iColNum": 3, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Lăng Vân Giới", + "m_id": 182, + "m_strPath": "a80", + "m_iRowNum": 3, + "m_iColNum": 3, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Lăng Vân Giới", + "m_id": 183, + "m_strPath": "a80", + "m_iRowNum": 3, + "m_iColNum": 3, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Đấu trường Kiếm Tiên Thành", + "m_id": 201, + "m_strPath": "b01", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Đấu trường Vạn Hóa Thành", + "m_id": 202, + "m_strPath": "b02", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Đấu trường Tích Vũ Thành", + "m_id": 203, + "m_strPath": "b03", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Đấu trường Tổ Long Thành", + "m_id": 204, + "m_strPath": "b04", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Huyễn Sa Thận Cảnh", + "m_id": 213, + "m_strPath": "random03", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Mê Sa Huyễn Cảnh", + "m_id": 214, + "m_strPath": "random03", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 1, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Thành Chiến 1", + "m_id": 230, + "m_strPath": "b30", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Thành Chiến 2", + "m_id": 231, + "m_strPath": "b30", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Thành Chiến 3", + "m_id": 232, + "m_strPath": "b30", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Thành Chiến 4", + "m_id": 233, + "m_strPath": "b30", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Thành Chiến 5", + "m_id": 234, + "m_strPath": "b30", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + }, + { + "m_strName": "Thành Chiến 6", + "m_id": 235, + "m_strPath": "b30", + "m_iRowNum": 1, + "m_iColNum": 1, + "m_bLimitJump": 0, + "m_routeFiles": [ + + ], + "m_content": "{}" + } +] diff --git a/Assets/Addressable/instance.json.meta b/Assets/Addressable/instance.json.meta new file mode 100644 index 0000000000..a5fcb22d23 --- /dev/null +++ b/Assets/Addressable/instance.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4dde960e818ed37448ebde2cbe895031 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PerfectWorld/Resources/instance.asset b/Assets/PerfectWorld/Resources/instance.asset new file mode 100644 index 0000000000..cafdecaded --- /dev/null +++ b/Assets/PerfectWorld/Resources/instance.asset @@ -0,0 +1,1021 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c6cd16271da5b06429a4ead9732e46b5, type: 3} + m_Name: instance + m_EditorClassIdentifier: + data: + m_strName: + m_id: 0 + m_strPath: + m_iRowNum: 0 + m_iColNum: 0 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: + items: + - m_strName: "\u0110\u1EA1i l\u1EE5c Ho\xE0n M\u1EF9" + m_id: 1 + m_strPath: world + m_iRowNum: 11 + m_iColNum: 8 + m_bLimitJump: 0 + m_routeFiles: + - r1_5-c4_5-l0 + - r3_3-c6_6-l0 + - r4_7-c2_3-l0 + - r8_8-c1_3-l0 + - r8_9-c6_6-l0 + - r1_2-c7_7-l0 + m_content: '{}' + - m_strName: "Minh Th\xFA Th\xE0nh" + m_id: 101 + m_strPath: a01 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Anh H\xF9ng Tr\u1EE7ng" + m_id: 102 + m_strPath: a02 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: + - r0_0-c0_0-l0 + m_content: '{}' + - m_strName: "B\xE0n Ti \u0110\u1ED9ng" + m_id: 103 + m_strPath: a03 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Th\u1ED5 N\xE2u \u0110\u1ED9ng Huy\u1EC7t" + m_id: 104 + m_strPath: a04 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "H\u1ECFa Nham \u0110\u1ED9ng Huy\u1EC7t" + m_id: 105 + m_strPath: a05 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: + - r0_0-c0_0-l0 + m_content: '{}' + - m_strName: "Cu\u1ED3ng Lang S\xE0o Huy\u1EC7t" + m_id: 106 + m_strPath: a06 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: + - r0_0-c0_0-l0 + m_content: '{}' + - m_strName: "X\xE0 H\u1EA1t \u0110\u1ED9ng" + m_id: 107 + m_strPath: a07 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: + - r0_0-c0_0-l0 + m_content: '{}' + - m_strName: "Thanh Y Tr\u1EE7ng" + m_id: 108 + m_strPath: a08 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: + - r0_0-c0_0-l0 + m_content: '{}' + - m_strName: "U Minh C\u01B0" + m_id: 109 + m_strPath: a09 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: + - r0_0-c0_0-l0 + m_content: '{}' + - m_strName: "L\xED S\u01B0\u01A1ng B\xED C\u1EA3nh" + m_id: 110 + m_strPath: a10 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: + - r0_0-c0_0-l0 + m_content: '{}' + - m_strName: "Thi\xEAn Ki\u1EBFp C\u1ED1c" + m_id: 111 + m_strPath: a11 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: + - r0_0-c0_0-l0 + m_content: '{}' + - m_strName: "T\xF9ng L\xE2m Di T\xEDch" + m_id: 112 + m_strPath: a12 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Qu\u1EF7 V\u1EF1c Huy\u1EC5n C\u1EA3nh" + m_id: 113 + m_strPath: a13 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "O\xE1n Linh Chi M\xF4n" + m_id: 114 + m_strPath: a14 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: + - r0_0-c0_0-l0 + m_content: '{}' + - m_strName: "B\xED B\u1EA3o Qu\u1EADt" + m_id: 115 + m_strPath: a15 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: + - r0_0-c0_0-l0 + m_content: '{}' + - m_strName: "Ti\xEAn Huy\u1EC5n Thi\xEAn" + m_id: 116 + m_strPath: a16 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Ma Huy\u1EC5n Thi\xEAn" + m_id: 117 + m_strPath: a17 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: Long Cung + m_id: 118 + m_strPath: a18 + m_iRowNum: 3 + m_iColNum: 3 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "D\u1EA1 Kh\u1ED1c \u0110\u1EA3o" + m_id: 119 + m_strPath: a19 + m_iRowNum: 3 + m_iColNum: 3 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "V\u1EA1n X\xE0 \u0110\u1EA3o" + m_id: 120 + m_strPath: a20 + m_iRowNum: 3 + m_iColNum: 3 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Ti\xEAn Gi\u1EDBi" + m_id: 121 + m_strPath: a21 + m_iRowNum: 4 + m_iColNum: 4 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Ma Gi\u1EDBi" + m_id: 122 + m_strPath: a22 + m_iRowNum: 4 + m_iColNum: 4 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Thi\xEAn Gi\u1EDBi Luy\u1EC7n Ng\u1EE5c" + m_id: 123 + m_strPath: a23 + m_iRowNum: 3 + m_iColNum: 3 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Ma V\u1EF1c \u0110\xE0o Nguy\xEAn" + m_id: 124 + m_strPath: a24 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Chi\u1EBFn Ca Chi Th\xE0nh" + m_id: 125 + m_strPath: a25 + m_iRowNum: 3 + m_iColNum: 3 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Lu\xE2n H\u1ED3i \u0110i\u1EC7n" + m_id: 126 + m_strPath: a26 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Th\u1EA7n Nguy\u1EC7t C\u1ED1c" + m_id: 127 + m_strPath: a27 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Th\u1EA7n V\xF4 C\u1ED1c" + m_id: 128 + m_strPath: a28 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Ph\xFAc S\u01B0\u01A1ng Th\xE0nh" + m_id: 129 + m_strPath: a29 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Ho\xE0ng H\xF4n Th\xE1nh \u0110i\u1EC7n" + m_id: 131 + m_strPath: a31 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "V\u1EADn M\u1EC7nh Ma Ph\u01B0\u01A1ng" + m_id: 132 + m_strPath: a32 + m_iRowNum: 3 + m_iColNum: 3 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Thi\xEAn L\u1EC7 Chi Th\xE0nh" + m_id: 133 + m_strPath: a33 + m_iRowNum: 2 + m_iColNum: 2 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Khung c\u1EA3nh H\xF4n L\u1EC5" + m_id: 134 + m_strPath: a34 + m_iRowNum: 2 + m_iColNum: 2 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Ph\u1EE5 b\u1EA3n Bang Ph\xE1i" + m_id: 135 + m_strPath: a35 + m_iRowNum: 4 + m_iColNum: 1 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "B\u1ED3ng Lai Huy\u1EC5n C\u1EA3nh" + m_id: 137 + m_strPath: a37 + m_iRowNum: 3 + m_iColNum: 6 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Ph\u01B0\u1EE3ng Minh C\u1ED1c" + m_id: 138 + m_strPath: a38 + m_iRowNum: 2 + m_iColNum: 2 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "V\xF4 \u0110\u1ECAnh Tr\u1EE5-m\xF4 th\u1EE9c c\u1EA5p th\u1EA5p" + m_id: 139 + m_strPath: a39 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Ph\u1EE5c Nh\u0129 \u0110\u1ECBa Huy\u1EC7t Th\u1EA7n \u0110\u1ED9c + Chi Gian" + m_id: 140 + m_strPath: a40 + m_iRowNum: 2 + m_iColNum: 2 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{ 0, -200, 160, 200, a40_tile_0101.dds }' + - m_strName: "V\xF4 \u0110\u1ECAnh Tr\u1EE5-m\xF4 th\u1EE9c c\u1EA5p cao" + m_id: 141 + m_strPath: a41 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Chi\u1EBFn Th\u1EA7n C\u1ED1c" + m_id: 142 + m_strPath: a42 + m_iRowNum: 2 + m_iColNum: 2 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Ng\u0169 \u0110\u1EBF Chi \u0110\xF4" + m_id: 143 + m_strPath: a43 + m_iRowNum: 6 + m_iColNum: 2 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Qu\u1ED1c Chi\u1EBFn-C\xF4 \u0110\u1EA3o \u0110o\u1EA1t K\xEC" + m_id: 144 + m_strPath: a44 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Qu\u1ED1c Chi\u1EBFn-Th\u1EE7y Tinh Tranh \u0110o\u1EA1t" + m_id: 145 + m_strPath: a45 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Qu\u1ED1c Chi\u1EBFn-\u0110o\u1EA1n Ki\u1EC1u \u0110\u1ED1i Tr\xEC" + m_id: 146 + m_strPath: a46 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "L\u1EA1c Nh\u1EADt C\u1ED1c" + m_id: 147 + m_strPath: a47 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "B\u1EA5t X\xE1 \u0110\u01B0\u1EDDng" + m_id: 148 + m_strPath: a48 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Linh \u0110\xE0n Huy\u1EC5n C\u1EA3nh" + m_id: 150 + m_strPath: a50 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Long \u1EA8n Qu\u1EADt" + m_id: 149 + m_strPath: a49 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Linh \u0110\u1ED9 \u0110inh Ch\xE2u" + m_id: 161 + m_strPath: a61 + m_iRowNum: 3 + m_iColNum: 4 + m_bLimitJump: 0 + m_routeFiles: + - r1_1-c1_2-l0 + m_content: '{}' + - m_strName: "Khung Th\u1EBF Gi\u1EDBi" + m_id: 162 + m_strPath: a62 + m_iRowNum: 3 + m_iColNum: 4 + m_bLimitJump: 0 + m_routeFiles: + - r1_1-c1_2-l0 + m_content: '{}' + - m_strName: "Nh\xE2n Gi\u1EDBi" + m_id: 163 + m_strPath: a63 + m_iRowNum: 4 + m_iColNum: 4 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "L\u01B0u Ng\xE2n Cung" + m_id: 166 + m_strPath: a66 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Ph\u1EE5c Ba \u0110\u01B0\u1EDDng" + m_id: 167 + m_strPath: a67 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "M\xF4 th\u1EE9c C\xE2u chuy\u1EC7n Nh\xE2n Gi\u1EDBi" + m_id: 168 + m_strPath: a68 + m_iRowNum: 4 + m_iColNum: 4 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "B\u1ED3ng Minh \u0110\u1ED9ng" + m_id: 169 + m_strPath: a69 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: + - r0_0-c0_0-l0 + m_content: '{}' + - m_strName: "V\u1EADn M\u1EC7nh Ma Ph\u01B0\u01A1ng" + m_id: 170 + m_strPath: a70 + m_iRowNum: 3 + m_iColNum: 3 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Thi\u1EC7n Long C\u1ED1c" + m_id: 171 + m_strPath: a71 + m_iRowNum: 4 + m_iColNum: 3 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Tru Thi\xEAn Ph\xF9 \u0110\u1ED3 Th\xE1p" + m_id: 172 + m_strPath: a72 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Tru Thi\xEAn Ph\xF9 \u0110\u1ED3 Th\xE1p" + m_id: 173 + m_strPath: a72 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Tru Thi\xEAn Ph\xF9 \u0110\u1ED3 Th\xE1p" + m_id: 174 + m_strPath: a72 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Tru Thi\xEAn Ph\xF9 \u0110\u1ED3 Th\xE1p" + m_id: 175 + m_strPath: a72 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Thi\xEAn H\u1EA1 \u0110\u1EC7 Nh\u1EA5t T\u1EC9 V\xF5 \u0110\u1EA1i + H\u1ED9i" + m_id: 177 + m_strPath: a77 + m_iRowNum: 2 + m_iColNum: 1 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Huy\u1EC5n H\u1EA3i K\xEC \u0110\xE0m" + m_id: 176 + m_strPath: a76 + m_iRowNum: 3 + m_iColNum: 3 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "L\u0103ng V\xE2n Gi\u1EDBi" + m_id: 180 + m_strPath: a80 + m_iRowNum: 3 + m_iColNum: 3 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "L\u0103ng V\xE2n Gi\u1EDBi" + m_id: 181 + m_strPath: a80 + m_iRowNum: 3 + m_iColNum: 3 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "L\u0103ng V\xE2n Gi\u1EDBi" + m_id: 182 + m_strPath: a80 + m_iRowNum: 3 + m_iColNum: 3 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "L\u0103ng V\xE2n Gi\u1EDBi" + m_id: 183 + m_strPath: a80 + m_iRowNum: 3 + m_iColNum: 3 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "\u0110\u1EA5u tr\u01B0\u1EDDng Ki\u1EBFm Ti\xEAn Th\xE0nh" + m_id: 201 + m_strPath: b01 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "\u0110\u1EA5u tr\u01B0\u1EDDng V\u1EA1n H\xF3a Th\xE0nh" + m_id: 202 + m_strPath: b02 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "\u0110\u1EA5u tr\u01B0\u1EDDng T\xEDch V\u0169 Th\xE0nh" + m_id: 203 + m_strPath: b03 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "\u0110\u1EA5u tr\u01B0\u1EDDng T\u1ED5 Long Th\xE0nh" + m_id: 204 + m_strPath: b04 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Huy\u1EC5n Sa Th\u1EADn C\u1EA3nh" + m_id: 213 + m_strPath: random03 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "M\xEA Sa Huy\u1EC5n C\u1EA3nh" + m_id: 214 + m_strPath: random03 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 1 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Th\xE0nh Chi\u1EBFn 1" + m_id: 230 + m_strPath: b30 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Th\xE0nh Chi\u1EBFn 2" + m_id: 231 + m_strPath: b30 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Th\xE0nh Chi\u1EBFn 3" + m_id: 232 + m_strPath: b30 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Th\xE0nh Chi\u1EBFn 4" + m_id: 233 + m_strPath: b30 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Th\xE0nh Chi\u1EBFn 5" + m_id: 234 + m_strPath: b30 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + - m_strName: "Th\xE0nh Chi\u1EBFn 6" + m_id: 235 + m_strPath: b30 + m_iRowNum: 1 + m_iColNum: 1 + m_bLimitJump: 0 + m_routeFiles: [] + m_content: '{}' + rawJson: "[\r\n {\r\n \"m_strName\": \"\u0110\u1EA1i l\u1EE5c Ho\xE0n + M\u1EF9\",\r\n \"m_id\": 1,\r\n \"m_strPath\": \"world\",\r\n + \"m_iRowNum\": 11,\r\n \"m_iColNum\": 8,\r\n \"m_bLimitJump\": + 0,\r\n \"m_routeFiles\": [\r\n \"r1_5-c4_5-l0\",\r\n + \"r3_3-c6_6-l0\",\r\n \"r4_7-c2_3-l0\",\r\n + \"r8_8-c1_3-l0\",\r\n \"r8_9-c6_6-l0\",\r\n + \"r1_2-c7_7-l0\"\r\n ],\r\n \"m_content\": \"{}\"\r\n + },\r\n {\r\n \"m_strName\": \"Minh Th\xFA Th\xE0nh\",\r\n \"m_id\": + 101,\r\n \"m_strPath\": \"a01\",\r\n \"m_iRowNum\": 1,\r\n + \"m_iColNum\": 1,\r\n \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": + [\r\n\r\n ],\r\n \"m_content\": \"{}\"\r\n + },\r\n {\r\n \"m_strName\": \"Anh H\xF9ng Tr\u1EE7ng\",\r\n + \"m_id\": 102,\r\n \"m_strPath\": \"a02\",\r\n \"m_iRowNum\": + 1,\r\n \"m_iColNum\": 1,\r\n \"m_bLimitJump\": 1,\r\n + \"m_routeFiles\": [\r\n \"r0_0-c0_0-l0\"\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"B\xE0n Ti \u0110\u1ED9ng\",\r\n \"m_id\": 103,\r\n \"m_strPath\": + \"a03\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": 1,\r\n + \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Th\u1ED5 N\xE2u \u0110\u1ED9ng Huy\u1EC7t\",\r\n \"m_id\": 104,\r\n + \"m_strPath\": \"a04\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": + 1,\r\n \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"H\u1ECFa Nham \u0110\u1ED9ng Huy\u1EC7t\",\r\n \"m_id\": 105,\r\n + \"m_strPath\": \"a05\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": + 1,\r\n \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n + \"r0_0-c0_0-l0\"\r\n ],\r\n \"m_content\": \"{}\"\r\n + },\r\n {\r\n \"m_strName\": \"Cu\u1ED3ng Lang S\xE0o Huy\u1EC7t\",\r\n + \"m_id\": 106,\r\n \"m_strPath\": \"a06\",\r\n \"m_iRowNum\": + 1,\r\n \"m_iColNum\": 1,\r\n \"m_bLimitJump\": 1,\r\n + \"m_routeFiles\": [\r\n \"r0_0-c0_0-l0\"\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"X\xE0 H\u1EA1t \u0110\u1ED9ng\",\r\n \"m_id\": 107,\r\n \"m_strPath\": + \"a07\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": 1,\r\n + \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n + \"r0_0-c0_0-l0\"\r\n ],\r\n \"m_content\": \"{}\"\r\n + },\r\n {\r\n \"m_strName\": \"Thanh Y Tr\u1EE7ng\",\r\n \"m_id\": + 108,\r\n \"m_strPath\": \"a08\",\r\n \"m_iRowNum\": 1,\r\n + \"m_iColNum\": 1,\r\n \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": + [\r\n \"r0_0-c0_0-l0\"\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"U Minh C\u01B0\",\r\n \"m_id\": 109,\r\n \"m_strPath\": \"a09\",\r\n + \"m_iRowNum\": 1,\r\n \"m_iColNum\": 1,\r\n \"m_bLimitJump\": + 1,\r\n \"m_routeFiles\": [\r\n \"r0_0-c0_0-l0\"\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"L\xED S\u01B0\u01A1ng B\xED C\u1EA3nh\",\r\n \"m_id\": 110,\r\n + \"m_strPath\": \"a10\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": + 1,\r\n \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n + \"r0_0-c0_0-l0\"\r\n ],\r\n \"m_content\": \"{}\"\r\n + },\r\n {\r\n \"m_strName\": \"Thi\xEAn Ki\u1EBFp C\u1ED1c\",\r\n + \"m_id\": 111,\r\n \"m_strPath\": \"a11\",\r\n \"m_iRowNum\": + 1,\r\n \"m_iColNum\": 1,\r\n \"m_bLimitJump\": 1,\r\n + \"m_routeFiles\": [\r\n \"r0_0-c0_0-l0\"\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"T\xF9ng L\xE2m Di T\xEDch\",\r\n \"m_id\": 112,\r\n \"m_strPath\": + \"a12\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": 1,\r\n + \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Qu\u1EF7 V\u1EF1c Huy\u1EC5n C\u1EA3nh\",\r\n \"m_id\": 113,\r\n + \"m_strPath\": \"a13\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": + 1,\r\n \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"O\xE1n Linh Chi M\xF4n\",\r\n \"m_id\": 114,\r\n \"m_strPath\": + \"a14\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": 1,\r\n + \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n + \"r0_0-c0_0-l0\"\r\n ],\r\n \"m_content\": \"{}\"\r\n + },\r\n {\r\n \"m_strName\": \"B\xED B\u1EA3o Qu\u1EADt\",\r\n + \"m_id\": 115,\r\n \"m_strPath\": \"a15\",\r\n \"m_iRowNum\": + 1,\r\n \"m_iColNum\": 1,\r\n \"m_bLimitJump\": 1,\r\n + \"m_routeFiles\": [\r\n \"r0_0-c0_0-l0\"\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Ti\xEAn Huy\u1EC5n Thi\xEAn\",\r\n \"m_id\": 116,\r\n \"m_strPath\": + \"a16\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": 1,\r\n + \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Ma Huy\u1EC5n Thi\xEAn\",\r\n \"m_id\": 117,\r\n \"m_strPath\": + \"a17\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": 1,\r\n + \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Long Cung\",\r\n \"m_id\": 118,\r\n \"m_strPath\": \"a18\",\r\n + \"m_iRowNum\": 3,\r\n \"m_iColNum\": 3,\r\n \"m_bLimitJump\": + 1,\r\n \"m_routeFiles\": [\r\n\r\n ],\r\n + \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": \"D\u1EA1 + Kh\u1ED1c \u0110\u1EA3o\",\r\n \"m_id\": 119,\r\n \"m_strPath\": + \"a19\",\r\n \"m_iRowNum\": 3,\r\n \"m_iColNum\": 3,\r\n + \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"V\u1EA1n X\xE0 \u0110\u1EA3o\",\r\n \"m_id\": 120,\r\n \"m_strPath\": + \"a20\",\r\n \"m_iRowNum\": 3,\r\n \"m_iColNum\": 3,\r\n + \"m_bLimitJump\": 0,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Ti\xEAn Gi\u1EDBi\",\r\n \"m_id\": 121,\r\n \"m_strPath\": + \"a21\",\r\n \"m_iRowNum\": 4,\r\n \"m_iColNum\": 4,\r\n + \"m_bLimitJump\": 0,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Ma Gi\u1EDBi\",\r\n \"m_id\": 122,\r\n \"m_strPath\": \"a22\",\r\n + \"m_iRowNum\": 4,\r\n \"m_iColNum\": 4,\r\n \"m_bLimitJump\": + 0,\r\n \"m_routeFiles\": [\r\n\r\n ],\r\n + \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": \"Thi\xEAn + Gi\u1EDBi Luy\u1EC7n Ng\u1EE5c\",\r\n \"m_id\": 123,\r\n \"m_strPath\": + \"a23\",\r\n \"m_iRowNum\": 3,\r\n \"m_iColNum\": 3,\r\n + \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Ma V\u1EF1c \u0110\xE0o Nguy\xEAn\",\r\n \"m_id\": 124,\r\n + \"m_strPath\": \"a24\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": + 1,\r\n \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Chi\u1EBFn Ca Chi Th\xE0nh\",\r\n \"m_id\": 125,\r\n \"m_strPath\": + \"a25\",\r\n \"m_iRowNum\": 3,\r\n \"m_iColNum\": 3,\r\n + \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Lu\xE2n H\u1ED3i \u0110i\u1EC7n\",\r\n \"m_id\": 126,\r\n \"m_strPath\": + \"a26\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": 1,\r\n + \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Th\u1EA7n Nguy\u1EC7t C\u1ED1c\",\r\n \"m_id\": 127,\r\n \"m_strPath\": + \"a27\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": 1,\r\n + \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Th\u1EA7n V\xF4 C\u1ED1c\",\r\n \"m_id\": 128,\r\n \"m_strPath\": + \"a28\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": 1,\r\n + \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Ph\xFAc S\u01B0\u01A1ng Th\xE0nh\",\r\n \"m_id\": 129,\r\n \"m_strPath\": + \"a29\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": 1,\r\n + \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Ho\xE0ng H\xF4n Th\xE1nh \u0110i\u1EC7n\",\r\n \"m_id\": 131,\r\n + \"m_strPath\": \"a31\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": + 1,\r\n \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"V\u1EADn M\u1EC7nh Ma Ph\u01B0\u01A1ng\",\r\n \"m_id\": 132,\r\n + \"m_strPath\": \"a32\",\r\n \"m_iRowNum\": 3,\r\n \"m_iColNum\": + 3,\r\n \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Thi\xEAn L\u1EC7 Chi Th\xE0nh\",\r\n \"m_id\": 133,\r\n \"m_strPath\": + \"a33\",\r\n \"m_iRowNum\": 2,\r\n \"m_iColNum\": 2,\r\n + \"m_bLimitJump\": 0,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Khung c\u1EA3nh H\xF4n L\u1EC5\",\r\n \"m_id\": 134,\r\n \"m_strPath\": + \"a34\",\r\n \"m_iRowNum\": 2,\r\n \"m_iColNum\": 2,\r\n + \"m_bLimitJump\": 0,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Ph\u1EE5 b\u1EA3n Bang Ph\xE1i\",\r\n \"m_id\": 135,\r\n \"m_strPath\": + \"a35\",\r\n \"m_iRowNum\": 4,\r\n \"m_iColNum\": 1,\r\n + \"m_bLimitJump\": 0,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"B\u1ED3ng Lai Huy\u1EC5n C\u1EA3nh\",\r\n \"m_id\": 137,\r\n + \"m_strPath\": \"a37\",\r\n \"m_iRowNum\": 3,\r\n \"m_iColNum\": + 6,\r\n \"m_bLimitJump\": 0,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Ph\u01B0\u1EE3ng Minh C\u1ED1c\",\r\n \"m_id\": 138,\r\n \"m_strPath\": + \"a38\",\r\n \"m_iRowNum\": 2,\r\n \"m_iColNum\": 2,\r\n + \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"V\xF4 \u0110\u1ECAnh Tr\u1EE5-m\xF4 th\u1EE9c c\u1EA5p th\u1EA5p\",\r\n + \"m_id\": 139,\r\n \"m_strPath\": \"a39\",\r\n \"m_iRowNum\": + 1,\r\n \"m_iColNum\": 1,\r\n \"m_bLimitJump\": 1,\r\n + \"m_routeFiles\": [\r\n\r\n ],\r\n \"m_content\": + \"{}\"\r\n },\r\n {\r\n \"m_strName\": \"Ph\u1EE5c Nh\u0129 \u0110\u1ECBa + Huy\u1EC7t Th\u1EA7n \u0110\u1ED9c Chi Gian\",\r\n \"m_id\": 140,\r\n + \"m_strPath\": \"a40\",\r\n \"m_iRowNum\": 2,\r\n \"m_iColNum\": + 2,\r\n \"m_bLimitJump\": 0,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{ 0, -200, 160, 200, a40_tile_0101.dds }\"\r\n + },\r\n {\r\n \"m_strName\": \"V\xF4 \u0110\u1ECAnh Tr\u1EE5-m\xF4 + th\u1EE9c c\u1EA5p cao\",\r\n \"m_id\": 141,\r\n \"m_strPath\": + \"a41\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": 1,\r\n + \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Chi\u1EBFn Th\u1EA7n C\u1ED1c\",\r\n \"m_id\": 142,\r\n \"m_strPath\": + \"a42\",\r\n \"m_iRowNum\": 2,\r\n \"m_iColNum\": 2,\r\n + \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Ng\u0169 \u0110\u1EBF Chi \u0110\xF4\",\r\n \"m_id\": 143,\r\n + \"m_strPath\": \"a43\",\r\n \"m_iRowNum\": 6,\r\n \"m_iColNum\": + 2,\r\n \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Qu\u1ED1c Chi\u1EBFn-C\xF4 \u0110\u1EA3o \u0110o\u1EA1t K\xEC\",\r\n + \"m_id\": 144,\r\n \"m_strPath\": \"a44\",\r\n \"m_iRowNum\": + 1,\r\n \"m_iColNum\": 1,\r\n \"m_bLimitJump\": 0,\r\n + \"m_routeFiles\": [\r\n\r\n ],\r\n \"m_content\": + \"{}\"\r\n },\r\n {\r\n \"m_strName\": \"Qu\u1ED1c Chi\u1EBFn-Th\u1EE7y + Tinh Tranh \u0110o\u1EA1t\",\r\n \"m_id\": 145,\r\n \"m_strPath\": + \"a45\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": 1,\r\n + \"m_bLimitJump\": 0,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Qu\u1ED1c Chi\u1EBFn-\u0110o\u1EA1n Ki\u1EC1u \u0110\u1ED1i Tr\xEC\",\r\n + \"m_id\": 146,\r\n \"m_strPath\": \"a46\",\r\n \"m_iRowNum\": + 1,\r\n \"m_iColNum\": 1,\r\n \"m_bLimitJump\": 0,\r\n + \"m_routeFiles\": [\r\n\r\n ],\r\n \"m_content\": + \"{}\"\r\n },\r\n {\r\n \"m_strName\": \"L\u1EA1c Nh\u1EADt C\u1ED1c\",\r\n + \"m_id\": 147,\r\n \"m_strPath\": \"a47\",\r\n \"m_iRowNum\": + 1,\r\n \"m_iColNum\": 1,\r\n \"m_bLimitJump\": 1,\r\n + \"m_routeFiles\": [\r\n\r\n ],\r\n \"m_content\": + \"{}\"\r\n },\r\n {\r\n \"m_strName\": \"B\u1EA5t X\xE1 \u0110\u01B0\u1EDDng\",\r\n + \"m_id\": 148,\r\n \"m_strPath\": \"a48\",\r\n \"m_iRowNum\": + 1,\r\n \"m_iColNum\": 1,\r\n \"m_bLimitJump\": 0,\r\n + \"m_routeFiles\": [\r\n\r\n ],\r\n \"m_content\": + \"{}\"\r\n },\r\n {\r\n \"m_strName\": \"Linh \u0110\xE0n Huy\u1EC5n + C\u1EA3nh\",\r\n \"m_id\": 150,\r\n \"m_strPath\": \"a50\",\r\n + \"m_iRowNum\": 1,\r\n \"m_iColNum\": 1,\r\n \"m_bLimitJump\": + 0,\r\n \"m_routeFiles\": [\r\n\r\n ],\r\n + \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": \"Long \u1EA8n + Qu\u1EADt\",\r\n \"m_id\": 149,\r\n \"m_strPath\": \"a49\",\r\n + \"m_iRowNum\": 1,\r\n \"m_iColNum\": 1,\r\n \"m_bLimitJump\": + 0,\r\n \"m_routeFiles\": [\r\n\r\n ],\r\n + \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": \"Linh \u0110\u1ED9 + \u0110inh Ch\xE2u\",\r\n \"m_id\": 161,\r\n \"m_strPath\": \"a61\",\r\n + \"m_iRowNum\": 3,\r\n \"m_iColNum\": 4,\r\n \"m_bLimitJump\": + 0,\r\n \"m_routeFiles\": [\r\n \"r1_1-c1_2-l0\"\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Khung Th\u1EBF Gi\u1EDBi\",\r\n \"m_id\": 162,\r\n \"m_strPath\": + \"a62\",\r\n \"m_iRowNum\": 3,\r\n \"m_iColNum\": 4,\r\n + \"m_bLimitJump\": 0,\r\n \"m_routeFiles\": [\r\n + \"r1_1-c1_2-l0\"\r\n ],\r\n \"m_content\": \"{}\"\r\n + },\r\n {\r\n \"m_strName\": \"Nh\xE2n Gi\u1EDBi\",\r\n \"m_id\": + 163,\r\n \"m_strPath\": \"a63\",\r\n \"m_iRowNum\": 4,\r\n + \"m_iColNum\": 4,\r\n \"m_bLimitJump\": 0,\r\n \"m_routeFiles\": + [\r\n\r\n ],\r\n \"m_content\": \"{}\"\r\n + },\r\n {\r\n \"m_strName\": \"L\u01B0u Ng\xE2n Cung\",\r\n + \"m_id\": 166,\r\n \"m_strPath\": \"a66\",\r\n \"m_iRowNum\": + 1,\r\n \"m_iColNum\": 1,\r\n \"m_bLimitJump\": 1,\r\n + \"m_routeFiles\": [\r\n\r\n ],\r\n \"m_content\": + \"{}\"\r\n },\r\n {\r\n \"m_strName\": \"Ph\u1EE5c Ba \u0110\u01B0\u1EDDng\",\r\n + \"m_id\": 167,\r\n \"m_strPath\": \"a67\",\r\n \"m_iRowNum\": + 1,\r\n \"m_iColNum\": 1,\r\n \"m_bLimitJump\": 0,\r\n + \"m_routeFiles\": [\r\n\r\n ],\r\n \"m_content\": + \"{}\"\r\n },\r\n {\r\n \"m_strName\": \"M\xF4 th\u1EE9c C\xE2u + chuy\u1EC7n Nh\xE2n Gi\u1EDBi\",\r\n \"m_id\": 168,\r\n \"m_strPath\": + \"a68\",\r\n \"m_iRowNum\": 4,\r\n \"m_iColNum\": 4,\r\n + \"m_bLimitJump\": 0,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"B\u1ED3ng Minh \u0110\u1ED9ng\",\r\n \"m_id\": 169,\r\n \"m_strPath\": + \"a69\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": 1,\r\n + \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n + \"r0_0-c0_0-l0\"\r\n ],\r\n \"m_content\": \"{}\"\r\n + },\r\n {\r\n \"m_strName\": \"V\u1EADn M\u1EC7nh Ma Ph\u01B0\u01A1ng\",\r\n + \"m_id\": 170,\r\n \"m_strPath\": \"a70\",\r\n \"m_iRowNum\": + 3,\r\n \"m_iColNum\": 3,\r\n \"m_bLimitJump\": 1,\r\n + \"m_routeFiles\": [\r\n\r\n ],\r\n \"m_content\": + \"{}\"\r\n },\r\n {\r\n \"m_strName\": \"Thi\u1EC7n Long C\u1ED1c\",\r\n + \"m_id\": 171,\r\n \"m_strPath\": \"a71\",\r\n \"m_iRowNum\": + 4,\r\n \"m_iColNum\": 3,\r\n \"m_bLimitJump\": 0,\r\n + \"m_routeFiles\": [\r\n\r\n ],\r\n \"m_content\": + \"{}\"\r\n },\r\n {\r\n \"m_strName\": \"Tru Thi\xEAn Ph\xF9 \u0110\u1ED3 + Th\xE1p\",\r\n \"m_id\": 172,\r\n \"m_strPath\": \"a72\",\r\n + \"m_iRowNum\": 1,\r\n \"m_iColNum\": 1,\r\n \"m_bLimitJump\": + 1,\r\n \"m_routeFiles\": [\r\n\r\n ],\r\n + \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": \"Tru Thi\xEAn + Ph\xF9 \u0110\u1ED3 Th\xE1p\",\r\n \"m_id\": 173,\r\n \"m_strPath\": + \"a72\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": 1,\r\n + \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Tru Thi\xEAn Ph\xF9 \u0110\u1ED3 Th\xE1p\",\r\n \"m_id\": 174,\r\n + \"m_strPath\": \"a72\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": + 1,\r\n \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Tru Thi\xEAn Ph\xF9 \u0110\u1ED3 Th\xE1p\",\r\n \"m_id\": 175,\r\n + \"m_strPath\": \"a72\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": + 1,\r\n \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Thi\xEAn H\u1EA1 \u0110\u1EC7 Nh\u1EA5t T\u1EC9 V\xF5 \u0110\u1EA1i H\u1ED9i\",\r\n + \"m_id\": 177,\r\n \"m_strPath\": \"a77\",\r\n \"m_iRowNum\": + 2,\r\n \"m_iColNum\": 1,\r\n \"m_bLimitJump\": 0,\r\n + \"m_routeFiles\": [\r\n\r\n ],\r\n \"m_content\": + \"{}\"\r\n },\r\n {\r\n \"m_strName\": \"Huy\u1EC5n H\u1EA3i K\xEC + \u0110\xE0m\",\r\n \"m_id\": 176,\r\n \"m_strPath\": \"a76\",\r\n + \"m_iRowNum\": 3,\r\n \"m_iColNum\": 3,\r\n \"m_bLimitJump\": + 0,\r\n \"m_routeFiles\": [\r\n\r\n ],\r\n + \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": \"L\u0103ng + V\xE2n Gi\u1EDBi\",\r\n \"m_id\": 180,\r\n \"m_strPath\": \"a80\",\r\n + \"m_iRowNum\": 3,\r\n \"m_iColNum\": 3,\r\n \"m_bLimitJump\": + 0,\r\n \"m_routeFiles\": [\r\n\r\n ],\r\n + \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": \"L\u0103ng + V\xE2n Gi\u1EDBi\",\r\n \"m_id\": 181,\r\n \"m_strPath\": \"a80\",\r\n + \"m_iRowNum\": 3,\r\n \"m_iColNum\": 3,\r\n \"m_bLimitJump\": + 0,\r\n \"m_routeFiles\": [\r\n\r\n ],\r\n + \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": \"L\u0103ng + V\xE2n Gi\u1EDBi\",\r\n \"m_id\": 182,\r\n \"m_strPath\": \"a80\",\r\n + \"m_iRowNum\": 3,\r\n \"m_iColNum\": 3,\r\n \"m_bLimitJump\": + 0,\r\n \"m_routeFiles\": [\r\n\r\n ],\r\n + \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": \"L\u0103ng + V\xE2n Gi\u1EDBi\",\r\n \"m_id\": 183,\r\n \"m_strPath\": \"a80\",\r\n + \"m_iRowNum\": 3,\r\n \"m_iColNum\": 3,\r\n \"m_bLimitJump\": + 0,\r\n \"m_routeFiles\": [\r\n\r\n ],\r\n + \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": \"\u0110\u1EA5u + tr\u01B0\u1EDDng Ki\u1EBFm Ti\xEAn Th\xE0nh\",\r\n \"m_id\": 201,\r\n + \"m_strPath\": \"b01\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": + 1,\r\n \"m_bLimitJump\": 0,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"\u0110\u1EA5u tr\u01B0\u1EDDng V\u1EA1n H\xF3a Th\xE0nh\",\r\n \"m_id\": + 202,\r\n \"m_strPath\": \"b02\",\r\n \"m_iRowNum\": 1,\r\n + \"m_iColNum\": 1,\r\n \"m_bLimitJump\": 0,\r\n \"m_routeFiles\": + [\r\n\r\n ],\r\n \"m_content\": \"{}\"\r\n + },\r\n {\r\n \"m_strName\": \"\u0110\u1EA5u tr\u01B0\u1EDDng T\xEDch + V\u0169 Th\xE0nh\",\r\n \"m_id\": 203,\r\n \"m_strPath\": \"b03\",\r\n + \"m_iRowNum\": 1,\r\n \"m_iColNum\": 1,\r\n \"m_bLimitJump\": + 0,\r\n \"m_routeFiles\": [\r\n\r\n ],\r\n + \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": \"\u0110\u1EA5u + tr\u01B0\u1EDDng T\u1ED5 Long Th\xE0nh\",\r\n \"m_id\": 204,\r\n + \"m_strPath\": \"b04\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": + 1,\r\n \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Huy\u1EC5n Sa Th\u1EADn C\u1EA3nh\",\r\n \"m_id\": 213,\r\n + \"m_strPath\": \"random03\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": + 1,\r\n \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"M\xEA Sa Huy\u1EC5n C\u1EA3nh\",\r\n \"m_id\": 214,\r\n \"m_strPath\": + \"random03\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": 1,\r\n + \"m_bLimitJump\": 1,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Th\xE0nh Chi\u1EBFn 1\",\r\n \"m_id\": 230,\r\n \"m_strPath\": + \"b30\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": 1,\r\n + \"m_bLimitJump\": 0,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Th\xE0nh Chi\u1EBFn 2\",\r\n \"m_id\": 231,\r\n \"m_strPath\": + \"b30\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": 1,\r\n + \"m_bLimitJump\": 0,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Th\xE0nh Chi\u1EBFn 3\",\r\n \"m_id\": 232,\r\n \"m_strPath\": + \"b30\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": 1,\r\n + \"m_bLimitJump\": 0,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Th\xE0nh Chi\u1EBFn 4\",\r\n \"m_id\": 233,\r\n \"m_strPath\": + \"b30\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": 1,\r\n + \"m_bLimitJump\": 0,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Th\xE0nh Chi\u1EBFn 5\",\r\n \"m_id\": 234,\r\n \"m_strPath\": + \"b30\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": 1,\r\n + \"m_bLimitJump\": 0,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n },\r\n {\r\n \"m_strName\": + \"Th\xE0nh Chi\u1EBFn 6\",\r\n \"m_id\": 235,\r\n \"m_strPath\": + \"b30\",\r\n \"m_iRowNum\": 1,\r\n \"m_iColNum\": 1,\r\n + \"m_bLimitJump\": 0,\r\n \"m_routeFiles\": [\r\n\r\n + ],\r\n \"m_content\": \"{}\"\r\n }\r\n]\r\n" diff --git a/Assets/PerfectWorld/Resources/instance.asset.meta b/Assets/PerfectWorld/Resources/instance.asset.meta new file mode 100644 index 0000000000..294c39e0aa --- /dev/null +++ b/Assets/PerfectWorld/Resources/instance.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ac7d3a4570c17794eba58d06044d53b0 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PerfectWorld/Scripts/Common/AWScriptFile.cs b/Assets/PerfectWorld/Scripts/Common/AWScriptFile.cs index ec7e2f888b..64df0c4794 100644 --- a/Assets/PerfectWorld/Scripts/Common/AWScriptFile.cs +++ b/Assets/PerfectWorld/Scripts/Common/AWScriptFile.cs @@ -256,5 +256,66 @@ namespace BrewMonster.Common public bool IsEnd() { return m_Script.pCurIndex >= m_Script.pFileBuf.Length; } // Get current line public int GetCurLine() { return m_Script.iLine; } + + /* Search specified token. This function get next token and check whether it match + specified string, if match, then stop and return true, otherwise get next token + again until all file is checked or token is found. + + Note: This will be crossing-line search. + + Return true for success, otherwise return false. + + wszToken: specified token will be searched + bCaseSensitive: true, case sensitive + */ + public bool MatchToken(ushort[] wszToken, bool bCaseSensitive) + { + while (GetNextToken(true)) + { + if (bCaseSensitive) + { + if (string.Compare(ByteToStringUtils.UshortArrayToUnicodeString(m_szToken), + ByteToStringUtils.UshortArrayToUnicodeString(wszToken), + StringComparison.Ordinal) == 0) + { + return true; + } + } + else + { + if (string.Compare(ByteToStringUtils.UshortArrayToUnicodeString(m_szToken), + ByteToStringUtils.UshortArrayToUnicodeString(wszToken), + StringComparison.OrdinalIgnoreCase) == 0) + { + return true; + } + } + } + return false; + } + + public bool MatchToken(string wszToken, bool bCaseSensitive) + { + while (GetNextToken(true)) + { + if (bCaseSensitive) + { + if (string.Compare(ByteToStringUtils.UshortArrayToUnicodeString(m_szToken), + wszToken, StringComparison.Ordinal) == 0) + { + return true; + } + } + else + { + if (string.Compare(ByteToStringUtils.UshortArrayToUnicodeString(m_szToken), + wszToken, StringComparison.OrdinalIgnoreCase) == 0) + { + return true; + } + } + } + return false; + } } } \ No newline at end of file diff --git a/Assets/PerfectWorld/Scripts/Move/CECHostMove.cs b/Assets/PerfectWorld/Scripts/Move/CECHostMove.cs index 607625315b..02cf0d01d8 100644 --- a/Assets/PerfectWorld/Scripts/Move/CECHostMove.cs +++ b/Assets/PerfectWorld/Scripts/Move/CECHostMove.cs @@ -303,10 +303,10 @@ namespace BrewMonster fSpeedH = -fSpeedH; } - //int idInst = g_pGame.GetGameRun().GetWorld().GetInstanceID(); - //CECInstance pInstance = g_pGame.GetGameRun().GetInstance(idInst); - //if (pInstance.GetLimitJump()) - //fGravity *= 4.0f; + int idInst = EC_Game.GetGameRun().GetWorld().GetInstanceID(); + CECInstance pInstance = EC_Game.GetGameRun().GetInstance(idInst); + if (pInstance.GetLimitJump()) + fGravity *= 4.0f; Vector3 posStart = EC_Utility.ToVector3(m_pHost.m_aabbServer.Center); CDR_INFO cdr = m_pHost.m_CDRInfo; cdr.vCenter = m_pHost.m_aabbServer.Center; diff --git a/Assets/PerfectWorld/Scripts/Utils/Editor/JsonScriptableObjectImporterWindow.cs b/Assets/PerfectWorld/Scripts/Utils/Editor/JsonScriptableObjectImporterWindow.cs new file mode 100644 index 0000000000..347349b373 --- /dev/null +++ b/Assets/PerfectWorld/Scripts/Utils/Editor/JsonScriptableObjectImporterWindow.cs @@ -0,0 +1,370 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using UnityEditor; +using UnityEngine; + +namespace BrewMonster.Utils +{ + public class JsonScriptableObjectImporterWindow : EditorWindow + { + private const string DefaultFieldTemplate = + @"public string m_strName; + public int m_id; + public string m_strPath; + public int m_iRowNum; + public int m_iColNum; + public int m_bLimitJump; + public string[] m_routeFiles; + public string m_content;"; + + private TextAsset jsonFile; + private DefaultAsset outputFolder; + private string dataTypeName = "JsonData"; + private string assetTypeName = "JsonDataAsset"; + private string assetFileName = "JsonDataAsset"; + private string fieldDefinitions = DefaultFieldTemplate; + private bool generateStruct; + private Vector2 scrollPosition; + + [MenuItem("Tools/JSON ScriptableObject Importer")] + public static void OpenWindow() + { + GetWindow("JSON -> ScriptableObject"); + } + + private void OnGUI() + { + scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition); + + EditorGUILayout.Space(); + EditorGUILayout.HelpBox( + "1. Keo file JSON vao o ben duoi.\n" + + "2. Dien ten type va field cho struct/class.\n" + + "3. Bam Generate Runtime Types de tao file C# trong project Unity.\n" + + "4. Cho Unity compile xong, bam Create Asset From JSON.", + MessageType.Info); + + DrawJsonDropZone(); + + EditorGUILayout.Space(); + jsonFile = (TextAsset)EditorGUILayout.ObjectField("JSON Input", jsonFile, typeof(TextAsset), false); + outputFolder = (DefaultAsset)EditorGUILayout.ObjectField("Output Folder", outputFolder, typeof(DefaultAsset), false); + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Type Settings", EditorStyles.boldLabel); + dataTypeName = EditorGUILayout.TextField("Data Type Name", dataTypeName); + assetTypeName = EditorGUILayout.TextField("Asset Type Name", assetTypeName); + assetFileName = EditorGUILayout.TextField("Asset File Name", assetFileName); + generateStruct = EditorGUILayout.Toggle("Generate As Struct", generateStruct); + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Struct/Class Fields", EditorStyles.boldLabel); + EditorGUILayout.HelpBox( + "Dien cac field theo cu phap C#. Vi du: public string name; public int id; public string[] tags;", + MessageType.None); + fieldDefinitions = EditorGUILayout.TextArea(fieldDefinitions, GUILayout.MinHeight(220)); + + EditorGUILayout.Space(); + using (new EditorGUILayout.HorizontalScope()) + { + if (GUILayout.Button("Generate Runtime Types", GUILayout.Height(32))) + { + GenerateRuntimeTypes(); + } + + if (GUILayout.Button("Create Asset From JSON", GUILayout.Height(32))) + { + CreateAssetFromJson(); + } + } + + EditorGUILayout.EndScrollView(); + } + + private void DrawJsonDropZone() + { + Rect dropArea = GUILayoutUtility.GetRect(0f, 70f, GUILayout.ExpandWidth(true)); + GUI.Box(dropArea, "Drop file JSON vao day", EditorStyles.helpBox); + + Event currentEvent = Event.current; + if (!dropArea.Contains(currentEvent.mousePosition)) + { + return; + } + + if (currentEvent.type == EventType.DragUpdated || currentEvent.type == EventType.DragPerform) + { + DragAndDrop.visualMode = DragAndDropVisualMode.Copy; + + if (currentEvent.type == EventType.DragPerform) + { + DragAndDrop.AcceptDrag(); + foreach (UnityEngine.Object draggedObject in DragAndDrop.objectReferences) + { + if (draggedObject is TextAsset textAsset) + { + jsonFile = textAsset; + GUI.FocusControl(null); + break; + } + } + } + + currentEvent.Use(); + } + } + + private void GenerateRuntimeTypes() + { + if (!ValidateGenerateInputs()) + { + return; + } + + string folderPath = AssetDatabase.GetAssetPath(outputFolder); + string sanitizedDataTypeName = SanitizeIdentifier(dataTypeName, "JsonData"); + string sanitizedAssetTypeName = SanitizeIdentifier(assetTypeName, sanitizedDataTypeName + "Asset"); + string outputPath = Path.Combine(folderPath, sanitizedAssetTypeName + ".cs").Replace("\\", "/"); + + string source = BuildRuntimeSource( + sanitizedDataTypeName, + sanitizedAssetTypeName, + generateStruct, + fieldDefinitions); + + File.WriteAllText(outputPath, source, new UTF8Encoding(false)); + AssetDatabase.Refresh(); + + Debug.Log("Generated runtime types at: " + outputPath); + EditorUtility.DisplayDialog( + "Generate Complete", + "Da tao file C# runtime. Hay doi Unity compile xong roi bam 'Create Asset From JSON'.", + "OK"); + } + + private void CreateAssetFromJson() + { + if (!ValidateImportInputs()) + { + return; + } + + string sanitizedDataTypeName = SanitizeIdentifier(dataTypeName, "JsonData"); + string sanitizedAssetTypeName = SanitizeIdentifier(assetTypeName, sanitizedDataTypeName + "Asset"); + string jsonText = jsonFile.text; + + Type dataType = FindType(sanitizedDataTypeName); + Type assetType = FindType(sanitizedAssetTypeName); + Type wrapperType = FindType(sanitizedDataTypeName + "ArrayWrapper"); + + if (dataType == null || assetType == null || wrapperType == null) + { + EditorUtility.DisplayDialog( + "Types Not Ready", + "Khong tim thay cac type vua generate. Hay chac chan Unity da compile xong sau khi bam Generate.", + "OK"); + return; + } + + ScriptableObject asset = ScriptableObject.CreateInstance(assetType); + SetFieldIfExists(assetType, asset, "rawJson", jsonText); + + string trimmedJson = jsonText.TrimStart(); + if (trimmedJson.StartsWith("[", StringComparison.Ordinal)) + { + object wrapper = JsonUtility.FromJson("{\"items\":" + jsonText + "}", wrapperType); + object items = wrapperType.GetField("items", BindingFlags.Public | BindingFlags.Instance)?.GetValue(wrapper); + SetFieldIfExists(assetType, asset, "items", items); + } + else + { + object data = JsonUtility.FromJson(jsonText, dataType); + SetFieldIfExists(assetType, asset, "data", data); + } + + string folderPath = AssetDatabase.GetAssetPath(outputFolder); + string requestedName = string.IsNullOrWhiteSpace(assetFileName) ? sanitizedAssetTypeName : assetFileName.Trim(); + string assetPath = AssetDatabase.GenerateUniqueAssetPath( + Path.Combine(folderPath, requestedName + ".asset").Replace("\\", "/")); + + AssetDatabase.CreateAsset(asset, assetPath); + EditorUtility.SetDirty(asset); + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + Selection.activeObject = asset; + + Debug.Log("Created ScriptableObject asset at: " + assetPath); + EditorUtility.DisplayDialog("Import Complete", "Da tao asset tu JSON thanh cong.", "OK"); + } + + private bool ValidateGenerateInputs() + { + if (outputFolder == null) + { + EditorUtility.DisplayDialog("Missing Output Folder", "Hay chon folder de tao file C# runtime.", "OK"); + return false; + } + + string folderPath = AssetDatabase.GetAssetPath(outputFolder); + if (!AssetDatabase.IsValidFolder(folderPath)) + { + EditorUtility.DisplayDialog("Invalid Folder", "Output Folder phai la mot folder trong Assets.", "OK"); + return false; + } + + if (string.IsNullOrWhiteSpace(dataTypeName) || string.IsNullOrWhiteSpace(assetTypeName)) + { + EditorUtility.DisplayDialog("Missing Type Names", "Hay nhap Data Type Name va Asset Type Name.", "OK"); + return false; + } + + if (string.IsNullOrWhiteSpace(fieldDefinitions)) + { + EditorUtility.DisplayDialog("Missing Fields", "Hay nhap field cho struct/class.", "OK"); + return false; + } + + return true; + } + + private bool ValidateImportInputs() + { + if (!ValidateGenerateInputs()) + { + return false; + } + + if (jsonFile == null) + { + EditorUtility.DisplayDialog("Missing JSON", "Hay keo hoac chon file JSON dau vao.", "OK"); + return false; + } + + return true; + } + + private static string BuildRuntimeSource( + string dataType, + string assetType, + bool asStruct, + string fields) + { + string keyword = asStruct ? "struct" : "class"; + string createMenuName = "Tools/Generated/" + assetType; + + StringBuilder builder = new StringBuilder(); + builder.AppendLine("using System;"); + builder.AppendLine("using UnityEngine;"); + builder.AppendLine(); + builder.AppendLine("[Serializable]"); + builder.AppendLine("public " + keyword + " " + dataType); + builder.AppendLine("{"); + foreach (string line in NormalizeFieldLines(fields)) + { + builder.AppendLine(" " + line); + } + + builder.AppendLine("}"); + builder.AppendLine(); + builder.AppendLine("[CreateAssetMenu(fileName = \"" + assetType + "\", menuName = \"" + createMenuName + "\")]"); + builder.AppendLine("public class " + assetType + " : ScriptableObject"); + builder.AppendLine("{"); + builder.AppendLine(" public " + dataType + " data;"); + builder.AppendLine(" public " + dataType + "[] items;"); + builder.AppendLine(" [TextArea(5, 20)]"); + builder.AppendLine(" public string rawJson;"); + builder.AppendLine("}"); + builder.AppendLine(); + builder.AppendLine("[Serializable]"); + builder.AppendLine("public class " + dataType + "ArrayWrapper"); + builder.AppendLine("{"); + builder.AppendLine(" public " + dataType + "[] items;"); + builder.AppendLine("}"); + + return builder.ToString(); + } + + private static IEnumerable NormalizeFieldLines(string fields) + { + return fields + .Replace("\r\n", "\n") + .Split('\n') + .Select(line => line.Trim()) + .Where(line => !string.IsNullOrWhiteSpace(line)); + } + + private static void SetFieldIfExists(Type targetType, object target, string fieldName, object value) + { + FieldInfo field = targetType.GetField(fieldName, BindingFlags.Public | BindingFlags.Instance); + if (field != null) + { + field.SetValue(target, value); + } + } + + private static string SanitizeIdentifier(string value, string fallback) + { + if (string.IsNullOrWhiteSpace(value)) + { + return fallback; + } + + List chars = new List(); + foreach (char character in value.Trim()) + { + if (char.IsLetterOrDigit(character) || character == '_') + { + chars.Add(character); + } + } + + if (chars.Count == 0) + { + return fallback; + } + + if (!char.IsLetter(chars[0]) && chars[0] != '_') + { + chars.Insert(0, '_'); + } + + return new string(chars.ToArray()); + } + + private static Type FindType(string typeName) + { + foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies()) + { + Type directMatch = assembly.GetType(typeName); + if (directMatch != null) + { + return directMatch; + } + + Type fallbackMatch = GetTypesSafely(assembly).FirstOrDefault(type => type.Name == typeName); + if (fallbackMatch != null) + { + return fallbackMatch; + } + } + + return null; + } + + private static IEnumerable GetTypesSafely(Assembly assembly) + { + try + { + return assembly.GetTypes(); + } + catch (ReflectionTypeLoadException exception) + { + return exception.Types.Where(type => type != null); + } + } + } +} diff --git a/Assets/PerfectWorld/Scripts/Utils/Editor/JsonScriptableObjectImporterWindow.cs.meta b/Assets/PerfectWorld/Scripts/Utils/Editor/JsonScriptableObjectImporterWindow.cs.meta new file mode 100644 index 0000000000..b3d4614644 --- /dev/null +++ b/Assets/PerfectWorld/Scripts/Utils/Editor/JsonScriptableObjectImporterWindow.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: f4e64c3f6188cad4788ef2f489c614db \ No newline at end of file diff --git a/Assets/PerfectWorld/Scripts/Utils/instanceDataAsset.cs b/Assets/PerfectWorld/Scripts/Utils/instanceDataAsset.cs new file mode 100644 index 0000000000..4491ba92c6 --- /dev/null +++ b/Assets/PerfectWorld/Scripts/Utils/instanceDataAsset.cs @@ -0,0 +1,30 @@ +using System; +using UnityEngine; + +[Serializable] +public struct instanceStruct +{ + public string m_strName; + public int m_id; + public string m_strPath; + public int m_iRowNum; + public int m_iColNum; + public int m_bLimitJump; + public string[] m_routeFiles; + public string m_content; +} + +[CreateAssetMenu(fileName = "instanceDataAsset", menuName = "Tools/Generated/instanceDataAsset")] +public class instanceDataAsset : ScriptableObject +{ + public instanceStruct data; + public instanceStruct[] items; + [TextArea(5, 20)] + public string rawJson; +} + +[Serializable] +public class instanceStructArrayWrapper +{ + public instanceStruct[] items; +} diff --git a/Assets/PerfectWorld/Scripts/Utils/instanceDataAsset.cs.meta b/Assets/PerfectWorld/Scripts/Utils/instanceDataAsset.cs.meta new file mode 100644 index 0000000000..09130f0620 --- /dev/null +++ b/Assets/PerfectWorld/Scripts/Utils/instanceDataAsset.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: c6cd16271da5b06429a4ead9732e46b5 \ No newline at end of file diff --git a/Assets/PerfectWorld/Scripts/World/EC_Instance.cs b/Assets/PerfectWorld/Scripts/World/EC_Instance.cs index 81ca67075f..b6584728ad 100644 --- a/Assets/PerfectWorld/Scripts/World/EC_Instance.cs +++ b/Assets/PerfectWorld/Scripts/World/EC_Instance.cs @@ -1,4 +1,5 @@ using BrewMonster.Common; +using ModelRenderer.Scripts.Common; using System; using System.Collections.Generic; using UnityEngine; @@ -8,7 +9,7 @@ namespace BrewMonster.Scripts public class CECInstance { int m_id = 161; // Instance ID - ushort[] m_strName; // Instance name + string m_strName; // Instance name string m_strPath; // Path int m_iRowNum = 3; // Number of map row int m_iColNum = 4; // Number of map column @@ -36,7 +37,7 @@ namespace BrewMonster.Scripts // Get instance ID public int GetID() { return m_id; } // Get instance name - public ushort[] GetName() { return m_strName; } + public string GetName() { return m_strName; } // Get instance data path public string GetPath() { return m_strPath; } // Get row and column number of map @@ -50,8 +51,16 @@ namespace BrewMonster.Scripts } // Load instance information from file - public bool Load(AWScriptFile psf) + public bool Load(instanceStruct data) { + m_id = data.m_id; + m_strName = data.m_strName; + m_strPath = data.m_strPath; + m_iRowNum = data.m_iRowNum; + m_iColNum = data.m_iColNum; + m_bLimitJump = (data.m_bLimitJump != 0); + m_routeFiles.Clear(); + m_routeFiles.AddRange(data.m_routeFiles); return true; } } diff --git a/Assets/Scripts/EC_GameRun.cs b/Assets/Scripts/EC_GameRun.cs index d178052914..a51e38986a 100644 --- a/Assets/Scripts/EC_GameRun.cs +++ b/Assets/Scripts/EC_GameRun.cs @@ -17,6 +17,7 @@ using PerfectWorld.Scripts.Shop; using Unity.Cinemachine; using Unity.VisualScripting; using UnityEngine; +using BrewMonster.Common; public partial class CECGameRun : ITickable { @@ -109,11 +110,19 @@ public partial class CECGameRun : ITickable // Load instance information //if (!LoadInstanceInfo("Configs\\instance.txt")) //{ - // glb_ErrorOutput(ECERR_FAILEDTOCALL, "CECGameRun::Init", __LINE__); - // return false; + // //glb_ErrorOutput(ECERR_FAILEDTOCALL, "CECGameRun::Init", __LINE__); + // //return false; //} - if (!m_InstTab.ContainsKey(161)) - m_InstTab.Add(161, new CECInstance()); + var instanceOB = Resources.Load("instance"); + for(int i = 0; i < instanceOB.items.Length; i++) + { + if (!m_InstTab.ContainsKey(instanceOB.items[i].m_id)) + { + var cecInstance = new CECInstance(); + cecInstance.Load(instanceOB.items[i]); + m_InstTab.Add(instanceOB.items[i].m_id, cecInstance); + } + } AddressableManager.Instance.OnDispose += Dispose; if (m_pWorld == null) m_pWorld = new CECWorld(); @@ -1171,8 +1180,37 @@ public partial class CECGameRun : ITickable return true; } - - + + // Load instance information from file + bool LoadInstanceInfo(string szFile) + { + // AWScriptFile sf = new AWScriptFile(); + //if (!sf.Open(szFile)) + //{ + // //a_LogOutput(1, "CECGameRun::LoadInstanceInfo, Failed to load %s", szFile); + // return false; + //} + // CECInstance pInst; + // while (sf.PeekNextToken(true)) + // { + // pInst = new CECInstance(); + // if (pInst == null || !pInst.Load(sf)) + // { + // //a_LogOutput(1, "CECGameRun::LoadInstanceInfo, Failed to read %s near line:%d", szFile, sf.GetCurLine()); + // return false; + // } + + // if (!m_InstTab.ContainsKey(pInst.GetID())) + // { + // // ID collsion ? + // m_InstTab.Add(pInst.GetID(), pInst); + // } + // } + + // sf.Close(); + + return true; + } } public enum GameState