PDA

View Full Version : [MU] Cần giúp đỡ về giải mã item



duongca
05-03-15, 12:38 AM
Chào các bạn tiền bối. Mình mới bắt đầu tìm hiểu về MU nên còn nhiếu vấn đề chưa hiểu hết được. Mình đang muốn tạo một module nhỏ để quản lý các item. Twf mã của tem mình lấy được từ MU Market, làm thế nào để giải mã đwocj thông tin của item đó: tên item, thông tin các dòng, các chỉ số của item. Cao thủ nào biết xin chỉ giúp mình với. Xin chân thành cảm ơn rất nhiều.

BladeKnight109
05-03-15, 07:30 AM
Chào các bạn tiền bối. Mình mới bắt đầu tìm hiểu về MU nên còn nhiếu vấn đề chưa hiểu hết được. Mình đang muốn tạo một module nhỏ để quản lý các item. Twf mã của tem mình lấy được từ MU Market, làm thế nào để giải mã đwocj thông tin của item đó: tên item, thông tin các dòng, các chỉ số của item. Cao thủ nào biết xin chỉ giúp mình với. Xin chân thành cảm ơn rất nhiều.

bạn nên đọc bài này
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
tuy nói còn thiếu nhưng cứ hiểu cơ bản vậy đã.

nampro
05-03-15, 08:57 AM
Chào các bạn tiền bối. Mình mới bắt đầu tìm hiểu về MU nên còn nhiếu vấn đề chưa hiểu hết được. Mình đang muốn tạo một module nhỏ để quản lý các item. Twf mã của tem mình lấy được từ MU Market, làm thế nào để giải mã đwocj thông tin của item đó: tên item, thông tin các dòng, các chỉ số của item. Cao thủ nào biết xin chỉ giúp mình với. Xin chân thành cảm ơn rất nhiều.


tất cả item trong Mumarket nó nằm trong file MuMaker.mdb :D

BladeKnight109
05-03-15, 11:35 AM
tất cả item trong Mumarket nó nằm trong file MuMaker.mdb :D

Người ta hỏi về phân tích dữ liệu của item. chứ không phải mấy thông số type, index, level.... trong file DB đó đâu bạn.

duongca
05-03-15, 12:44 PM
bạn nên đọc bài này
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
tuy nói còn thiếu nhưng cứ hiểu cơ bản vậy đã.

Cảm hơn bạn đã trả lời giúp. Nưng mình đọc hết bài viết đó cũng vẫn chưa hiểu được hết nội dung và giải đáp được vấn đề mình đang cần. Mình có một mã item được copy từ mumarket gồm 32 ký tự. Mình muốn giải mã các thông tin như: lever item, tên item. các dòng thuộc tính, item socket, 380... bạn có cách nào không chia sẻ mình với. Cảm ơn

BladeKnight109
05-03-15, 12:47 PM
cảm hơn bạn đã trả lời giúp. Nưng mình đọc hết bài viết đó cũng vẫn chưa hiểu được hết nội dung và giải đáp được vấn đề mình đang cần. Mình có một mã item được copy từ mumarket gồm 32 ký tự. Mình muốn giải mã các thông tin như: Lever item, tên item. Các dòng thuộc tính, item socket, 380... Bạn có cách nào không chia sẻ mình với. Cảm ơn

bạn post đoạn mã đó lên. Mình sẽ giải thích cho bạn.

duongca
05-03-15, 12:57 PM
bạn post đoạn mã đó lên. Mình sẽ giải thích cho bạn.
VD mình có cái mã item từ mu Maket như này: 1D236DE4DA7A003F00B8000000000000
Bạn giúp mình giải thích và lấy các thông tin chỉ số từ nó với. Cảm ơn bạn

Van_Bom
05-03-15, 01:21 PM
VD mình có cái mã item từ mu Maket như này: 1D236DE4DA7A003F00B8000000000000
Bạn giúp mình giải thích và lấy các thông tin chỉ số từ nó với. Cảm ơn bạn

tớ không giỏi vụ này lắm nhưng xin nhắc bạn 1 điều, đó là các ver cũ thì kết cấu nó lại khác các ver cao bạn à, nếu muốn làm trung trung thì học cái DB của ss2

duongca
05-03-15, 01:31 PM
tớ không giỏi vụ này lắm nhưng xin nhắc bạn 1 điều, đó là các ver cũ thì kết cấu nó lại khác các ver cao bạn à, nếu muốn làm trung trung thì học cái DB của ss2

Uhm, cảm ơn bạn. Mình chờ sự giúp đỡ của bạn BK xem sao. hy vọng bạn ấy giúp được mình, [-O<

BladeKnight109
05-03-15, 04:10 PM
VD mình có cái mã item từ mu Maket như này: 1D236DE4DA7A003F00B8000000000000
Bạn giúp mình giải thích và lấy các thông tin chỉ số từ nó với. Cảm ơn bạn

1D 23 6D E4 DA 7A 00 3F 00 B8 00 00 00 00 00 00

mình không chỉ full cho bạn, mà chỉ cho bạn các làm thế nào để phân biệt được các offset nào chứa các option nào.
Bây giờ bạn kiếm 1 source GS season 6 (zTeam chẳng hạn). Bạn xem function DbItemSetInByte hoặc DGGetWarehouseList.
với SS6 thì Size của 1 item luôn luôn = 16, còn các version nhỏ hơn thì có thể khác.
và mình có 1 đoạn thế này:


if(ItemDbByte == 16)
{
itype |= (lpMsg->dbInventory[n*ItemDbByte+9] & 0xF0) * 32;
itype |= (lpMsg->dbInventory[n*ItemDbByte+7] & 0x80) * 2;
_type = itype;
}
_type ItemID. ItemID được tính theo công thứ ItemID = ItemType*512+ItemIndex. khi bạn đã lấy được _type thì bạn có thể dùng công thức trên để tính type và index là bao nhiêu. tất nhiên có cách nhanh hơn nhưng mình sẽ không nói ở đây.
lpMsg->dbInventory[n*ItemDbByte+9] ở đây chính là offset thứ 9 trong dãy hex DB item ở trên.

tiếp theo mình cũng có 1 đoạn

item.m_Level = DBI_GET_LEVEL(lpMsg->dbInventory[n*ItemDbByte+1]);
đoạn này lấy ra Level của item. Level item nằm ở offset 1.

#define DBI_GET_LEVEL(x) ( ((x)>>3) & 0xF)
hay viết cách khác Level = (Offset[1]>>3) & 0xF)

cứ như thế, bạn chỉ cần xem GS viết thế nào, từ đó bạn suy ra. Tất nhiên đây là ngôn ngữ C++, khi qua ngôn ngữ khác như C#, VB.NET hoặc PHP chẳng hạn, thì bạn phải biết các toán tử &, |, >> của các ngôn ngữ kia là gì, có hỗ trợ hay ko :).
Bên dưới mình liệt kê các các offset chứa những option nào.
Bạn cũng có thể download code NBB web về xem cách làm của họ cũng được :). Cách nào miễn khi mình sử dụng mà GS load đúng theo ý của mình là ok :).

[0] 1D: Item Index
[1] 23: Level, Skill, Luck, 28 option
[2] 6D: Durability
[3,4,5,6] E4 DA 7A 00: Serial Item
[7] 3F: Option Data (các option excellent)
[8] 00: Set option
[9] B8: Type item, 380 option, Period Option.
[10] 00: Yellow option (luu ý, nếu là socket item, thì sẽ ko có yellow op, mà thay vào đó là socket + thêm)
[11,12,13,14,15] 00 00 00 00 00 00: Socket item

--- Chế độ gộp bài viết ---


tớ không giỏi vụ này lắm nhưng xin nhắc bạn 1 điều, đó là các ver cũ thì kết cấu nó lại khác các ver cao bạn à, nếu muốn làm trung trung thì học cái DB của ss2

version cũ chỉ khác nhau về kích thước DB thôi. nhưng cách tính cũng na ná nhau :)

duongca
05-03-15, 06:04 PM
1D 23 6D E4 DA 7A 00 3F 00 B8 00 00 00 00 00 00

mình không chỉ full cho bạn, mà chỉ cho bạn các làm thế nào để phân biệt được các offset nào chứa các option nào.
Bây giờ bạn kiếm 1 source GS season 6 (zTeam chẳng hạn). Bạn xem function DbItemSetInByte hoặc DGGetWarehouseList.
với SS6 thì Size của 1 item luôn luôn = 16, còn các version nhỏ hơn thì có thể khác.
và mình có 1 đoạn thế này:


if(ItemDbByte == 16)
{
itype |= (lpMsg->dbInventory[n*ItemDbByte+9] & 0xF0) * 32;
itype |= (lpMsg->dbInventory[n*ItemDbByte+7] & 0x80) * 2;
_type = itype;
}
_type ItemID. ItemID được tính theo công thứ ItemID = ItemType*512+ItemIndex. khi bạn đã lấy được _type thì bạn có thể dùng công thức trên để tính type và index là bao nhiêu. tất nhiên có cách nhanh hơn nhưng mình sẽ không nói ở đây.
lpMsg->dbInventory[n*ItemDbByte+9] ở đây chính là offset thứ 9 trong dãy hex DB item ở trên.

tiếp theo mình cũng có 1 đoạn

item.m_Level = DBI_GET_LEVEL(lpMsg->dbInventory[n*ItemDbByte+1]);
đoạn này lấy ra Level của item. Level item nằm ở offset 1.

#define DBI_GET_LEVEL(x) ( ((x)>>3) & 0xF)
hay viết cách khác Level = (Offset[1]>>3) & 0xF)

cứ như thế, bạn chỉ cần xem GS viết thế nào, từ đó bạn suy ra. Tất nhiên đây là ngôn ngữ C++, khi qua ngôn ngữ khác như C#, VB.NET hoặc PHP chẳng hạn, thì bạn phải biết các toán tử &, |, >> của các ngôn ngữ kia là gì, có hỗ trợ hay ko :).
Bên dưới mình liệt kê các các offset chứa những option nào.
Bạn cũng có thể download code NBB web về xem cách làm của họ cũng được :). Cách nào miễn khi mình sử dụng mà GS load đúng theo ý của mình là ok :).

[0] 1D: Item Index
[1] 23: Level, Skill, Luck, 28 option
[2] 6D: Durability
[3,4,5,6] E4 DA 7A 00: Serial Item
[7] 3F: Option Data (các option excellent)
[8] 00: Set option
[9] B8: Type item, 380 option, Period Option.
[10] 00: Yellow option (luu ý, nếu là socket item, thì sẽ ko có yellow op, mà thay vào đó là socket + thêm)
[11,12,13,14,15] 00 00 00 00 00 00: Socket item

--- Chế độ gộp bài viết ---



version cũ chỉ khác nhau về kích thước DB thôi. nhưng cách tính cũng na ná nhau :)

Thật sự cảm ơn bạn. Đọc bài mình cũng hiểu được cơ bản nhưng vẫn chưa thể làm được. Chắc mình phải nghiên cứ thêm nhiều nữa rồi. Rất mong nhận được sự giúp đỡ thêm từ phía bạn :D

Thanks