XtGem Forum catalog
Hôm nay, mình sẽ hướng dẫn mọi người cách mod speed game java. Cụ thể ở đây mình sẽ lấy game avatar làm ví dụ minh mong muốn ai cũng làm được.
+ Công cụ cần thiết:

- Download MJDecomplier.jar
(Tác dụng của phần mềm này là chuyển file class thành file java hay còn gọi là decompiler)
- Download BlueFTP v1.70_mod_X-plore.jar
(hoặc 1 phần mềm nào đó đọc được đuôi java, tùy bạn chọn)
- Download BytecodeEditor140.jar
(Phần mềm này có tác dụng sửa mã bytecode. Tạm thời bạn chưa cần biết bytecode là gì, chỉ cần hiểu là nó có thể sửa được file class).
+ Cách làm:

* Trước tiên ta cần hiểu các đoạn mã sau:

- Thread.sleep(a);
Tác dụng của đoạn mã này là gì vậy? Đơn giản là nó tạm dừng (ngủ) lệnh hiện tại trong khoảng thời gian là
a/1000 giây hay a Mili giây.
- repaint();
Hàm này dùng để gọi lại phương thức (method) paint, tức là vẽ lại chuyển động của nhân vật trong game đó.

- Chắc ai cũng đã từng xem hoạt hình và đều biết nhân vật chuyển động là nhờ ta chiếu các bức ảnh
khác nhau trong 1 thời gian. Cứ tưởng tượng mà xem, nếu thời gian chiếu các bức ảnh khoảng 1 phút 1 bức
thì bạn có thấy nó chuyển động ko? Trong 1 khoảng thời gian nếu ta chiếu với tốc độ càng nhanh thì càng
được nhiều bức ảnh tức là chuyển động của nhân vật càng nhanh. Như vậy, ta thấy nếu a càng nhỏ thì thời gian dừng lệnh càng ngắn, tức là khoảng thời gian thực hiện lệnh
repaint() cũng ngắn hơn hay nói gọn lại là ta thấy nhân vật di chuyển nhanh hơn.
Giờ thì chắc các bạn cũng đã hiểu được cốt lõi của việc mod speed.
* Tiếp theo là tìm đoạn mã đó trong file class:
- Ta giải nén game avatar ra 1 thư mục, tạm đặt là avatar. Dùng bytecode editor tìm đến thư mục avatar. Tuỳ chọn -> Search.
- Nhập từ khóa là repaint để tìm hàm repaint.
- Kết quả tìm kiếm: Ta được class cần tìm là g.class trong thư mục main. Nếu bạn để ý thì thấy trong game
avatar class cần tìm luôn nằm trong thư mục main.
Đối với 1 số game khác, ta phải linh hoạt với từ khóa chứ không nhất thiết phải là repaint. Có thể thay bằng
sleep chẳng hạn. Khi đó nếu có quá nhiều class được tìm thấy ta có thể dùng thêm 1 vài từ khóa nữa để loại
bớt đối tượng tìm kiếm đi. Có thể là currentTime hay gì đó, chủ yếu là kinh nghiệm của mình. Nếu vẫn không
lọc được hết thì ta đành dùng tới giải pháp là xem file java của các class đó.
- Trước tiên, ta decompiler class thành java bằng mjdecompiler hoặc classdigger. Ở đây, mình dùng
mjdecompiler. Tìm đến các file class còn lại, chọn lần lượt từng class và chờ nó decompiler thành java. Bao giờ thấy thế này là nó đã decompiler thành công.
- Chuyển thành file java rồi thì giờ tới xem thôi. Bạn thích dùng phần mềm nào thì tùy bạn còn ở đây mình
dùng blueftp. Dùng phần mềm này tìm đến các file java vừa tạo ra, tùy chọn mở kiểu văn bản.
- Ta thấy đoạn mã thread.sleep ở dòng thú 351 đến 354.
if (l2 < 50L)
Thread.sleep(50L - l2);
else
Thread.sleep(1L);
l2 là khoảng thời gian thực hiện 1 hàm paint(). Nếu thời gian lực hiện 1ần vẽ < 50L (50 Mili giây) thì cho khoảng thời gian giữa 2 lần vẽ là 50L - 12 còn ngược lại thì là 1L. Giờ ta sửa 50L-l2 thành 15L-l2 thì tốc độ sẽ
nhanh hơn (vì sao thì đã giải thích ở trên).
Class cần tìm chính là g.class trong thư mục main
* Cuối cùng là phần sửa class:
- Nhiều bạn decompiler từ class sang java nhưng lại không compiler lại được, đơn giản là vì class đó có thể
liên kết với class khác nên biến chưa được khai báo hoặc là 1 lỗi cú pháp hay gì gì đó nên không thể
compiler. Việc chỉnh sửa để compiler rất mất thời gian còn mà còn chưa chắc đã làm được. Vì vậy ở đây mình
sẽ dùng bytecode editor để edit mã bytecode, edit được mã bytecode sẽ edit được class. Việc này xem ra
đơn giản hơn nhiều.
- Bạn tìm đến g.class với đường dẫn avatar/main. Nhấn OK.
- Chọn Methods (phương thức).
- Chọn phương thức run, lúc này mình quên nói là đoạn mã thread.sleeep nằm trong public final void run.
- Ấn phím 8, điền từ khóa là 50. Vì đoãn mã lúc nãy có 50 mà, ko nhớ thì quay lên xem.
- Bạn đã thấy ldc2_w 50 chưa? Edit dòng thứ 393 ấy, ko phải 390 đâu vì 390 là 50 của l2 < 50L.
- Nhấn chọn trái sửa thành 15 chẳng hạn.
- Nhấn chọn phải để lưu lại.
- Nhấn tùy chọn -> save để lưu class.
- Nó báo thế này là lưu xong rồi, nén lại và chơi thử thôi. Nhớ xóa mấy file java tạo ra đấy. Có thể dùng
minicomander để chèn g.class sau khi đã chỉnh sửa vào avatar cũng được. Game khác thì phải biết tùy cơ
ứng biến nha.
Rất dễ phải không nào, chúc các bạn thành công.
>>TrangChu<<