PDA

View Full Version : [KT] Phân tích server danhkiem



hieubg1900
16-03-12, 10:06 AM
Thấy nhiều người dùng SV danhkiem share rồi kêu kẹt acc + kẹt map v.v.....
Nhưng nguyên nhân là gì thì nhiều người chưa biết nên mình sẽ phân tích 2 file gameserver của danhkiem cho mọi người hiểu

Đầu tiên là 1 gameserver bình thường:

<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>

Thứ 2 là gamerserver danhkiem với tốc độ load map + dữ liệu phải nói là như tên bắn :))

<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>

Nhìn vào 2 ảnh chắc các bạn cũng thấy rõ là file chạy của danhkiem Import thiếu khai báo đến SQL => Do không truy xuất vào SQL nên việc load dữ liệu chỉ diễn ra trong script và setting => Dữ liệu nhân vật ghi vào SQL sẽ mang tính chất hên xui vui thì lưu không vui thì thôi :)).

Kẹt acc vì server không lưu dữ liệu hoặc đã xóa dữ liệu nhân vật của bạn => Server có biết bạn là ai đâu mà cho bạn vào chơi đc :-ss

Cách khắc phục là add thêm LIBMYSQL.dll vào Import :Laluot_233:

P/s: Các bạn cứ fix mái thoải + cấu hình, thay patch mái thoải đi nó cũng không mất được tình trạng các bạn đang gặp đâu zZ

satthulauhyh
16-03-12, 10:25 AM
Bạn biết thêm không chỉ ae lun đi, mấy cái này ng ngoài nhìn vào mù tịt :(
Thank for all!!!

lastpr0
16-03-12, 10:58 AM
Đúng là chưa ai nghĩ đến vấn đề này, không quơ đũa, không tự nhận mình là mọi người, nhưng có lẽ thực tế là vậy ~:>

=D>

heybaby2707
16-03-12, 11:17 AM
Có thể nó load thư viện mysql ở phần khác chứ nếu ko load thì nó hiểu mysql là cái gì để mà lưu các nhân vật? Làm sao send lệnh lên mysql server đc [-O<. Ở đây các server vẫn lưu + load nhân vật bình thường. Server nào load 4 sub + worldset ngon thì ko kẹt acc khi chuyển map nhưng kẹt acc khi load dữ liệu nhân vật quá lớn.

Nhận định sơ bộ:
Client: Em có thể kết nối trao đổi dữ liệu với anh ko?
Server: Okie. Anh truyền được xxx byte 1 lần thế còn em?
Client: Em truyền được có yyy byte một lần thôi anh chia ra đi
Server: Ờ thì chia. Nhận lấy này ...
WAN: ĐM chia ra lắm thế tao có chứng chỉ MTU 1500 chỉ mang đc 585 gói mày chia nhiều thế thì đi chết đi =))

BMK
16-03-12, 11:26 AM
thực tế các này điều được edit lại dành cho người không chuyên sài vì vậy đã lượt các lệnh callback để truy xuất data dẫn đến các hàm trong game không đầy đủ và dẫn đến việc không addd đồng được (khựa thì nó tính sẵn rồi offline thôi còn online thì tự hex ko thì mua bản full :))) còn kẹt map thì ko phải tại nó :-ss đã test chứng thực 100%

satthulauhyh
16-03-12, 11:47 AM
thực tế các này điều được edit lại dành cho người không chuyên sài vì vậy đã lượt các lệnh callback để truy xuất data dẫn đến các hàm trong game không đầy đủ và dẫn đến việc không addd đồng được (khựa thì nó tính sẵn rồi offline thôi còn online thì tự hex ko thì mua bản full :))) còn kẹt map thì ko phải tại nó :-ss đã test chứng thực 100%

Bạn xem giúp cái kẹt acc, fix theo cách của bạn là chỉnh IP thì vẫn hok dc

VNGameZoneVN
16-03-12, 12:23 PM
vậy bạn chỉ cách impor luôn đi! chứ mọi người nóng lòng. PRO HỒ DUY QUỐC ẨO ĐÃ ADD ĐƯỢC ĐỒNG THƯỜNG RỒI

nguyenhophuc87
16-03-12, 12:53 PM
mình cũng đã thử mở file exe như bạn đã nói, tuy nhiên mình so sánh giữa 2 file gameserver và gameserverd phát hiện có sự khác biệt ở chổ thiếu import file SQL như trên, tuy nhiên theo mình nghĩ thì cái này dẫn đến lỗi kẹt acc thì không hẳn, mà cái mình nghĩ đến chính là lỗi ADD ĐỒNG THƯỜNG ở server của shinichi (DanhKiem), nhớ lại lúc trước có AE lấy script của sv trantoai bỏ vào và chạy gameserverd thì miễn cưỡng add được đồng thường.

sau nhiều lần check file và so sánh mình thấy có khác biệt cơ bản là thư viện SQL như sau :

gameserver của các server add được đồng thường : có thư viện SQL
gameserverd của shinichi có khả năng add được đồng thường (còn lỗi nên ít người dùng, hầu hết dùng gameserver.exe để load)
gameserver của shinichi không có khả năng add đồng thường : thiếu thư viện SQL

và cái nhìn đầu tiên vào sự khác biệt này dẫn tới nghi vấn : Liệu có phải thiếu thư viện này làm cho sv shinichi không add được đồng và 1 số lỗi nhỏ khác ? tuy nhiên vẫn còn mâu thuẫn chứ ko phải chắc, vì nếu chắc thì mình khẳng định luôn chứ chẳng cần nghi vấn :P mâu thuẩn ở chổ ...
- Nếu thiếu thư viện SQL mà ko add được đồng thường thì đồng khóa và tiền add bằng thư viện nào >.< (có thể đồng thường có cơ chế add khác, hy vọng vậy >>> nếu vậy thì có thể fix được vụ đồng này)
- Có thể server của shinichi sử dụng thư viện SQL ở 1 nơi khác hoặc 1 cơ chế khác >>> nếu vậy có thể ko cần import SQL trên

Tuy vậy, mình vẫn muốn test thử, import thư viện SQL vào gameserver.exe của shinichi để chạy server. Nhưng thằng cha eXeScope của mình hình như chưa có KEY nên không cho import mà chỉ cho export, cũng có thể tại file exe đó ko cho import. AE nào có tools khác để thử không ? Resource hacker mình cũng thử rồi nhưng không được.

1 làn gió mới thổi đến mang theo hy vọng hoàn thiện server Shinichi, hy vọng AE cố gắng [-O<

BMK
16-03-12, 02:52 PM
khi add đồng thường các bạn chú ý ở gameserver sẽ báo lỗi callback đơn giản thiếu file và đã được edit các hàm đó nên gameserver khi load script không thành công dẫn đến ko báo dòng gì là lỗi cả :|

p/s muôn skhongo kẹt acc khi online thì các bạn phải NAT port vào config ip lại để khi vào vào ip đăng nhập là 10.0.2.2 thì work còn ip thật thì té :)).

lastpr0
16-03-12, 03:22 PM
Theo mình thì nghĩ khác, đừng suy nghĩ xa xôi.

Chui vào database xem thế nào, mình đang tiến hành đây, nhưng dự đoán sơ bộ là.

Khi 1 account đăng nhập vào, gameserver.exe sẽ xử lý và add vào database nội dung là "true" (ví dụ thôi) tức là đã đăng nhập. Khi thoát game, gameserver sẽ lưu thông tin nhân vật lại, và query vào database sửa true thành false (tức là chưa đăng nhập). Trường hợp kẹt account có nghĩa là, gameserver.exe không thể query vào database để đổi true thành false, khiến cho tài khoản bị server hiểu lầm là "true" (đã đăng nhập, và đang trong game).


Từ đó có thể suy ra những nguyên nhân sau:

1. Do dữ liệu truyền ra vào quá lớn, dẫn đến overload (so với điều kiện cho phép của gameserver), gameserver.exe từ chối kết nối đột ngột đến client x dẫn đến chưa kịp lưu lại thông tin nhân vật hoặc chưa kịp chuyển true thành false như vấn đề nêu bên trên.

2. Database bị lỗi.

3. Gameserver.exe lập trình query bị thiếu sót hoặc xung đột vấn đề gì đó với 1 số thứ khác trong database, dẫn đến khi query bị fail ngay lúc xử lý query kick tài khoản.


Lý do có thể suy luận như vậy,

Tài khoản bị kẹt, nhưng vẫn còn tồn tại thông tin tài khoản lẫn thông tin nhân vật, mình đã dùng PHP query từng table trong data ra coi, mất cả ngày.

Điều đó có thể chứng minh rằng nguyên nhân thứ 1 mình suy luận là có căn cứ. Nhưng hiện tại mình chưa tìm được data-table chứa thông tin ghi lại stat của 1 user.



Dữ liệu quá tải, quá nhanh so với mức cho phép, thì windows hay bản thân gameserver sẽ có 3 hướng, 1 là từ chối, 2 là chịu đựng, 3 là crash.

Mình có 1 vấn đề như thế này. Rõ ràng, bản server này là bản "Debug" cứ không phải "Release". Nếu là release build thì không cần cài thư viện debug mới chạy được => đây là bản server chưa hoàn chỉnh.

Để tranh lỗi, các bạn cần cài Windows Server 2008 Enterprise để chạy là tốt nhất. Vì xét thấy, server này viết trên nền Visual Studio 2005, không ai dùng windows XP/windows SV 2003 để viết và dev bằng VS 2005 hết.

Tôi nhớ có 1 lần VNG có 1 đợt bảo trì lớn toàn bộ hệ thống, hình như hồi năm 2010 là phải. Lúc đó VNG chuyển toàn bộ máy chủ, thay toàn bộ đường mạng, thành lập datacenter riêng, đăng ký dãi IP dành riêng cho VNG. Lúc vừa mới chuyển, Kiếm Thế rất lag, tất cả các mạng truy cập vào game đều lag, disconnect liên tục cả tuần lễ. Sau đó VNG đã khắc phục xong, nhưng sự cố đó hình như không ảnh hưởng gì đến kẹt tài khoản cả => Đường mạng chậm không ảnh hưởng đến chuyện kẹt account.


=> Cái cốt lõi cần soi ở đây theo thứ tự ưu tiên sẽ là, HĐH -> Database -> hết cách thì mò vào gameserver cầu may

Đây là những nhận xét cá nhân, ý đồ cùng phát triễn chứ không có ý định quăng bom ném đá gì cả, ae cùng đóng góp ý kiến để phát triển ngày một tốt hơn.

hieubg1900
16-03-12, 03:51 PM
mình cũng đã thử mở file exe như bạn đã nói, tuy nhiên mình so sánh giữa 2 file gameserver và gameserverd phát hiện có sự khác biệt ở chổ thiếu import file SQL như trên, tuy nhiên theo mình nghĩ thì cái này dẫn đến lỗi kẹt acc thì không hẳn, mà cái mình nghĩ đến chính là lỗi ADD ĐỒNG THƯỜNG ở server của shinichi (DanhKiem), nhớ lại lúc trước có AE lấy script của sv trantoai bỏ vào và chạy gameserverd thì miễn cưỡng add được đồng thường.

sau nhiều lần check file và so sánh mình thấy có khác biệt cơ bản là thư viện SQL như sau :

gameserver của các server add được đồng thường : có thư viện SQL
gameserverd của shinichi có khả năng add được đồng thường (còn lỗi nên ít người dùng, hầu hết dùng gameserver.exe để load)
gameserver của shinichi không có khả năng add đồng thường : thiếu thư viện SQL

và cái nhìn đầu tiên vào sự khác biệt này dẫn tới nghi vấn : Liệu có phải thiếu thư viện này làm cho sv shinichi không add được đồng và 1 số lỗi nhỏ khác ? tuy nhiên vẫn còn mâu thuẫn chứ ko phải chắc, vì nếu chắc thì mình khẳng định luôn chứ chẳng cần nghi vấn :P mâu thuẩn ở chổ ...
- Nếu thiếu thư viện SQL mà ko add được đồng thường thì đồng khóa và tiền add bằng thư viện nào >.< (có thể đồng thường có cơ chế add khác, hy vọng vậy >>> nếu vậy thì có thể fix được vụ đồng này)
- Có thể server của shinichi sử dụng thư viện SQL ở 1 nơi khác hoặc 1 cơ chế khác >>> nếu vậy có thể ko cần import SQL trên

Tuy vậy, mình vẫn muốn test thử, import thư viện SQL vào gameserver.exe của shinichi để chạy server. Nhưng thằng cha eXeScope của mình hình như chưa có KEY nên không cho import mà chỉ cho export, cũng có thể tại file exe đó ko cho import. AE nào có tools khác để thử không ? Resource hacker mình cũng thử rồi nhưng không được.

1 làn gió mới thổi đến mang theo hy vọng hoàn thiện server Shinichi, hy vọng AE cố gắng [-O<

Nguyên nhân kẹt acc:

Phiên làm việc 1:
Client: Anh ơi em vào game nhá
Server: Chesk in "À thằng này chưa thao tác gì và không có lỗi" => Vào đi em
Client: Anh ơi em làm những việc này có sao không ? ( đang phát sinh lỗi )
Server: Bỏ qua hết các lỗi => Được, cứ làm mái thoải đi em không sao đâu. :>
Client: Sau khi chơi chán chê..... Em off nhé anh (Server) hẹn gặp lại anh ;;);;)
Server: Save hết các thao tác + lỗi phát sinh lại.

Phiên làm việc 2:
Client: Login
Client: Đang lấy dữ liệu nhân vật ............
Server: Em ấy chuẩn bị vào chơi đây :x
Client: Đang vào game.........................
Server: Ặc sao nhiều lỗi trong dữ liệu nhân vật thế này ai mà hiểu được #-o. Bỏ qua, bỏ qua
Client: Mất kết nối máy chủ.
Server: Đã bỏ qua xong >:)

<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>
Không dùng sv danhkiem nên chỉ phân tích được thế thôi ~:>:">

Nếu muốn dùng SV danhkiem để chạy mà không kẹt map thì script + setting khi chạy ở gameserverd.exe phải không có lỗi nào => Lúc đó mới hết kẹt acc

VNGameZoneVN
17-03-12, 10:31 PM
Làm thế nào để impor vào đây, lay hoay hoài mà ko làm dc. chủ 2 pic impor dc không chỉ mọi người đi. thank nhiều