Server Emulator for the Online Game Monster Hunter Frontier Z.
Please read through the whole file before asking questions.
The project is intended for educational purpose only.
This server requires that you own a copy of the game and assets.
These assets are not included in this repository to comply with copyrights.
In order to run this server you are required to provide a wwww
folder.
At the moment no alternative as been developed, as soon as this happened this repository will be updated.
git clone https://github.com/sebastian-heinz/mhf-server.git
https://dotnet.microsoft.com/download
Minimum version of "Visual Studio 2019 v16.3" or later.
Open the MonsterHunterFrontierZ.sln
-file
Download IDE: https://code.visualstudio.com/download
C# Plugin: https://marketplace.visualstudio.com/items?itemName=ms-vscode.csharp
Open the Project Folder:
\mhf-server
https://www.jetbrains.com/rider/
Open the MonsterHunterFrontierZ.sln
-file
Run the Mhf.Cli
-Project
Add following entries to your hosts file to force the client to connect to the local instance.
127.0.0.1 cog-members.mhf-z.jp # MHF Launcher (web)
127.0.0.1 capcom-onlinegames.jp # MHF Authentication (web)
127.0.0.1 www.capcom-onlinegames.jp # MHF Authentication (web)
127.0.0.1 sign-mhf.capcom-networks.jp # MHF Authentication (auth/server)
127.0.0.1 srv-mhf.capcom-networks.jp # MHF ServerList (web)
127.0.0.1 l0.mhf-g.jp # MHF File Checksum (web)
127.0.0.1 u0.mhf-g.jp # MHF File Host (web)
With default configuration the server will listen on following ports:
80 - http/launcher gui
433 - https/authentication
53312 - tcp/authentication
53310 - tcp/lobby
ensure that no other local services run on these.request
Following modifications are recommended when trying to use this server:
mhf.exe, mhl.dll, mhfo.dll and mhfo-hd.dll are protected with AsProtect.
A tool called AsDecom
can unpack these files, but it must run on WindowsXP.
To disable GameGuard please delete or rename gameguard.des
-file.
Additionally in mhl.dll
the following byte need to be patched 000053C3:74->77
mhl.dll
-file contains a bug when performing HTTP requests.
00356352 48 54 54 50 2F 31 2E 31 0A 43 HTTP/1.1.C
00356368 61 63 68 65 2D 43 6F 6E 74 72 6F 6C 3A 20 6E 6F ache-Control: no
00356384 2D 63 61 63 68 65 0A -cache.
It only uses a single LF 0x0A
whereas the spec requires CR LF 0x0D 0x0A
In order to obtain enough bytes we can change cache-control
-header to Expires
-headers like so:
Offset(d) 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
00356352 48 54 54 50 2F 31 2E 31 0D 0A HTTP/1.1..
00356368 45 78 70 69 72 65 73 3A 20 30 0D 0A Expires: 0..
without this patch the C# web server will not process the request, and maybe other servers as well.
The work on this project should happen via feature-branches
Feature branches (or sometimes called topic branches) are used to develop new features for the upcoming or a distant future release. When starting development of a feature, the target release in which this feature will be incorporated may well be unknown at that point. The essence of a feature branch is that it exists as long as the feature is in development, but will eventually be merged back into develop (to definitely add the new feature to the upcoming release) or discarded (in case of a disappointing experiment).
- Create a new
feature/feature-name
orfix/bug-fix-name
branch from master - Push all your changes to that branch
- Create a Pull Request to merge that branch into
master
- Do not use Console.WriteLine etc, use the specially designed logger.
- Own the Code: extract solutions, discard libraries.
- Annotate functions with documentation comments (https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/documentation-comments).
Object Name | Notation | Char Mask | Underscores |
---|---|---|---|
Class name | PascalCase | [A-z][0-9] | No |
Constructor name | PascalCase | [A-z][0-9] | No |
Method name | PascalCase | [A-z][0-9] | No |
Method arguments | camelCase | [A-z][0-9] | No |
Local variables | camelCase | [A-z][0-9] | No |
Constants name | PascalCase | [A-z][0-9] | No |
Field name | _camelCase | [A-z][0-9] | Yes |
Properties name | PascalCase | [A-z][0-9] | No |
Delegate name | PascalCase | [A-z] | No |
Enum type name | PascalCase | [A-z] | No |
- Nothilvien @sebastian-heinz
- System.Data.SQLite (https://system.data.sqlite.org/)
- MySqlConnector (https://www.nuget.org/packages/MySqlConnector)
- bcrypt.net (https://github.com/BcryptNet/bcrypt.net)
- AspNetCore (https://github.com/aspnet/AspNetCore)
- .NET Standard (https://github.com/dotnet/standard)
- Arrowgene.Services (https://github.com/Arrowgene/Arrowgene.Services)
- CRC32 Implementation by Damien Guard (https://github.com/damieng/DamienGKit/blob/master/CSharp/DamienG.Library/Security/Cryptography/Crc32.cs)