Wednesday, February 22, 2017

Metahook Plus Coding - M1

Metahook Plus Coding - M1



Thấy nhiều bạn vẫn còn mặn mà với Counter-Strike 1.6 nên hôm nay mình sẽ viết hướng dẫn các bạn làm quen với Metahook Plus. 


Metahook Plus là một chương trình can thiệp vào phần renderer của Half-Life. Có chỉ có tác dụng đối với tất cả những gì hiển thị trên Half-Life, bao gồm UI và ingame. Nếu các bạn muốn làm những thứ như thêm vũ khí hay chỉnh sửa súng mặc định này nọ thì phải dùng cách khác phức tạp hơn nhiều. Hôm nào mình sẽ viết một bài cơ bản về cái đó. 

Quay lại Metahook Plus. Việc đầu tiên là các bạn phải tải Metahook Plus về và giải nén nó ra ở đâu đó. Link tải về tại đây: https://github.com/nagist/metahook . Tải về mở lên và biên dịch nó ra exe hoặc dll chạy thử nhé. 

Mình yêu cầu các bạn phải biết C/C++ và cơ bản về OpenGL Legacy để có thể hiểu được code nhé, nếu không thì sẽ giống như cữi ngựa xem hoa thôi. 

Trong file các bạn vừa tải về có các ví dụ cơ bản. Các bạn có thể xem trong đó nhưng mình chắc chắn sẽ chẳng hiểu gì cả đâu =)) Cần sự kiên nhẫn mới có thể làm nên đại sự. Các bạn nhớ nhé. =)) 

Oke. Ở đây mình dùng Visual Studio 2015 nhưng các bạn có thể dùng phiên bản thấp hơn cũng được. 

Đầu tiên là mở VS lên và tạo một project trong thư mục metahook-master/Plugin/





Tiếp theo là đặt tên cho Project. Ở đây mình đặt là HelloWorld. 


Tiếp theo ở đây các bạn chọn vào DLL và Empty Project nhé.




Nhấp vào Finish vậy là bước đầu tiên đã hoàn thành rồi. Bước tiếp theo là thiết lập đường dẫn đến các file header của HL SDK cũng như của metahook API.  Nhấn Alt + F7 Vào mục C/C++  > General > Additional Include Directories và dán đoạn code này vào. https://bugs.vn/5654 và nhấn Oke. 




Tiếp theo các bạn tải file này về và copy vào project các bạn đang làm. 
https://drive.google.com/open?id=0B14MKoNvaz1TdVMwR1JYbVVIS3c

Chuột phải vào projtect chọn Add > New existing item để thêm các file vào VS.
Cũng thao tác đó thêm file interfaces.cpp ở trong thư mục metahook/HLSDK/common/


Mình sẽ giải thích ý nghĩa của chúng như sau. Đầu tiên là file plugins.cpp
Đây là file mà metahook sẽ load để nạp DLL của chúng ta vào game. Cụ thể một số thứ như sau. 

  • cl_exportfuncs_t gExportfuncs; là một struct chứa con trỏ hàm tới các hàm trong game. Đây sẽ là nơi can thiệp đầu tien vào game. 
  • mh_interface_t *g_pInterface; Metahook API các bạn không cần quan tâm đến nó hiện giờ
  • metahook_api_t *g_pMetaHookAPI; Metahook API các bạn không cần quan tâm đến nó hiện giờ
  • mh_enginesave_t *g_pMetaSave;Metahook API các bạn không cần quan tâm đến nó hiện giờ


IPlugin là class mà metahook sẽ load khi vào game.  Đoạn code trên bạn không cần quan tâm lắm. Tiếp theo là phần quan trọng.

3 Hàm đầu tiên mà ta sẽ can thiệp mà Initialize, HUD_Init, HUD_Redraw.

  • Initialize hàm này sẽ được gọi khi bạn vừa mở game lên.
  • HUD_Init Hàm này sẽ được gọi lên ngay sau đó.
  • HUD_Redraw Hàm sẽ sẽ được gọi lên tục ngay khi game bắt đầu. Mọi thứ chúng ta làm đều ở trong này. 
Tiếp theo là file interfaces.cpp File này chứa các hàm xuất ra cho metahook. Bạn không cần quan tâm lắm.

Tiếp theo là file exportfunc.cpp. Đây là file quan trọng chứa cài đặt của 3 hàm Initialize, HUD_Init, HUD_Redraw mà chúng ta đã can thiệp ở trên.


cl_enginefunc_t gEngfuncs; là một struct chứa các API mà ta có thể dùng để làm những điều kỳ diệu như CSBTE hay CK. =))

Ở hàm Initialize() này công việc chỉ đơn giản là sao chép dữ liệu vào gEngfuncs mà dll cung cấp cho chúng ta để dùng sau này.

Tiếp theo là HUD_Init()  ở đây không có gì đăt biệt nên chúng vẫn còn trống.
Tiếp theo là HUD_Redraw() như mình đã nói ở trên thì hàm này được gọi lên tục khi game bắt đầu. Trong game này có một ví du có sẵn đó là có một biến đếm count dùng để đếm số lần in ra màn hình. 
gEngfuncs.Con_Printf() có tác dụng là in ra Console nhé. 

Lưu ý là sau mỗi hàm mà chúng ta can thiệp thì phải có lời gọi từ gExportfuncs đến hàm tương ứng để game tiếp tục chạy nếu không thì game sẽ đứng nha các bạn.

Tiếp theo các bạn tải file này về: 
https://drive.google.com/open?id=0B14MKoNvaz1TY2REQjh4MXhNQVU

Sau đó giải nén vào thư mục cstrike
Trong thư mục này gồm có 2 thư mục đó là plugins chứa các DLL mà chúng ta làm. trong thư mục này đã có sẵn file HelloWorld.dll của mình. Thư mục thứ 2 là config, trong thư mục này có file plugins.lst chứa tên các DLL để nạp vào game. 

Biên dịch project của bạn và copy dll vào để chạy thử nhé. 

Nếu thành công thì vào game mở Console lên thì các bạn có thể thấy kết quả đấy. +D 


Học cái này thật sự khó. Nếu có vấn đề gì thì các bạn có thể hỏi ở đây mình sẽ trả lời khi có thời gian.
Đây là file source project của mình. https://drive.google.com/open?id=0B14MKoNvaz1TNVRCNmt5SUptaGc


Nếu các bạn ủng hộ mình viết tiếp thì bài sau chúng ta sẽ làm thứ gì đó thú vị hơn :D 

1 comment:

  1. Bài viết thật tuyệt vời. Mình cũng muốn giới thiệu về một Công ty dịch thuật uy tín - Công ty dịch thuật miền trung - MIDtrans trụ sở chính chính tại địa chỉ 02 Hoàng Diệu, TP Đồng Hới, tỉnh Quảng Bình có Giấy phép kinh doanh số 3101023866 cấp ngày 9/12/2016 là đơn vị chuyên cung cấp dịch vụ dịch thuật, phiên dịch dành các cá nhân. Hệ thống thương hiệu và các Công ty dịch thuật con trực thuộc: dịch thuật bình dương - dịch thuật miền trung tại địa 123 Lê Trọng Tấn, Dĩ An là địa chỉ chuyên cung cấp dịch vụ dịch thuật chuyên nghiệp tại Bình Dương ; dịch thuật tiếng anh tại sài gòn địa chỉ 47 Điện Biên Phủ, Phường Đakao, Quận 1 TP HCM, dịch thuật phủ lý, hà nam : địa 101 Trần Hưng Đạo, TP Phủ Lý, Hà Nam là nhà cung ứng dịch vụ dịch thuật uy tín hàng đầu tại Hà Nam; Công ty dịch thuật Viettrans và dịc vụ french to vietnamese translation: dịch vụ dịch thuật tiếng Pháp cho người nước ngoài có nhu cầu, giao diện tiếng Anh dễ sử dụng; dịch thuật công chứng cần giờ: nhà cung ứng dịch vụ dịch vụ dịch thuật phiên dịch hàng đầu tại Quận Cần Giờ, TP Hồ Chí Minh; Công ty dịch thuật Đà Nẵng MIDtrans cung cấp dịch vụ công ty dịch thuật đà nẵng midtrans : Địa chỉ 54 Đinh Tiên Hoàng, Quận Hải Châu, TP Đà Nẵng chuyên cung cấp dịch vụ dịch thuật công chứng, dịch thuật đa ngôn ngữ, đa chuyên ngành tại Đà Nẵng; Viettrans : chuyên cung cấp dịch vụ dịch thuật đa chuyên ngành toàn quốc; Công ty dịch thuật Hà Nội MIDtrans chuyên cung cấp dịch vụ dịch thuật tiếng pháp tại hà nội : địa chỉ 101 Láng Hạ, Đống Đa, Hà Nội là nhà cung ứng dịch vụ biên dịch, phiên dịch chuyên nghiệp tại địa bàn Hà Nội. Ngoài ra, Chúng tôi cũng cung cấp các dịch vụ biên dịch và phiên dịch, dịch thuật công chứng chất lượng cao hơn 50 ngôn ngữ khác nhau như tiếng Anh, Nhật, Hàn, Trung, Pháp, Đức, Nga, .vv... Dịch thuật MIDtrans tự hào với đội ngũ lãnh đạo với niềm đam mê, khát khao vươn tầm cao trong lĩnh vực dịch thuật, đội ngũ nhân sự cống hiến và luôn sẵn sàng cháy hết mình. Chúng tôi phục vụ từ sự tậm tâm và cố gắng từ trái tim những người dịch giả.Tự hào là công ty cung cấp dịch thuật chuyên ngành hàng đầu với các đối tác lớn tại Việt nam trong các chuyên ngành hẹp như: Viettravel - vietnam tourist information and travel tips chuyên trang về thông tin du lịch và các tour đặc sắc tại Việt Nam, y dược (bao gồm bệnh lý), xây dựng (kiến trúc), hóa chất, thủy nhiệt điện, ngân hàng, tài chính, kế toán. Các dự án đã triển khai của Công ty dịch thuật chuyên nghiệp MIDtrans đều được Khách hàng đánh giá cao và đạt được sự tín nhiệm về chất lượng biên phiên dịch. Đó là kết quả của một hệ thống quản lý chất lượng dịch thuật chuyên nghiệp, những tâm huyết và kinh nghiệm biên phiên dịch nhiều năm của đội ngũ dịch giả của chúng tôi. Hotline: 0947688883. email: info@dichthuatmientrung.com.vn . Các bạn ghé thăm site ủng hộ nhé. Cám ơn nhiều

    ReplyDelete