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 avatar156 làm ví dụ.
Công cụ cần thiết: - Download MJDecomplier.jar hoặc Download ClassDiggerv01.jar (Tác dụng của 2 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 bytecodelà 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. và 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 ở đây 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 đượcclass 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ạtvớ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 javabằ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ếuthời gian lực hiện 1ần vẽ< 50L (50 Mili giây) thì chokhoảng thời gian giữa 2 lầnvẽ 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ếnchư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ạntì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ành15 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.