Jump to content

Homeroot/DynDns - Characterkick (bypass?)


Recommended Posts

Hey budys.
I have a very important question - and i think the other players wanted also to know!

@First my Settup:
i have an HP-ProLiant DL380 G6 Server @ home - which has Windows Server 2012 R2 installed.
i created a virtual machine with FreeBSD 9.3 under Hyper-V - there are my MT2-Files running.

To my Files:
- i use Martysama Source
- Client (Python) Offical Webzen 03.2018 (cleaned & incl. my changes) -> works flawlessly (locally)

But i want to create a DDNS Server, because i want to save costs and i dont want to hire a root!

short explain:
my server runs 24/7 because there are other server on, so i dont need to hire a root.
i usually wants to use this mt2 server on my HP-Server as a test-server for my teammates (not root server for other players).

i know, there are many other topics, but i didnt found any solution to fix that problem!
So i wanted to create an topic, maybe we find together a solution.

My Problem: i can connect with the ddns address in serverinfo.py and im able to choose the character, but if i choose one, i get kicked.

My configuration:
- Serverip: 192.168.0.100

- IP (bsdconfig):
ipv4: 192.168.0.150
netmask: 255.255.255.0
router: 192.168.0.1
nameserver: 192.168.0.1 / 8.8.8.8 / 8.8.4.4
hostname: xxx.ddns.net
- Ports are all released in the router / nat (really all!) -> Based on the VM.


Now for the really interesting part of the whole thing:

some years ago, i startet with mt2 with normal files (without Source) i thing it was (r2089M).
other guys had the same problem like me => homeroot with ddns but kick after choosing character.
So there was only 1 method to connect: "Surakopf.exe"
Then i found an tutorial on ePvpers it called: "[RELEASE]Packet bypass for Homeservers/DynDns"

Spoiler

some of us are familiar with the problem that the players disconnected from our homeserver when they have selected the character if the server runs on a local machine.

The reason why this problem is occurring is the login succes packet:

 


struct SSimplePlayer {
	unsigned long dwID;
	unsigned char szName[25];
	unsigned char byJob;
	unsigned char byLevel;
	unsigned long dwPlayMinutes;
	unsigned char byST;
	unsigned char byHT;
	unsigned char byDX;
	unsigned char byIQ;
	unsigned short wMainPart;
	bool bChangeName;
	unsigned short wHairPart;
	unsigned char bDummy[4];
	long int x;
	long int y;
	unsigned long int lAddr;
	unsigned short wPort;
	unsigned char skill_group;
};

typedef SSimplePlayer TSimplePlayer;

struct packet_login_success
{
	unsigned char bHeader;
	TSimplePlayer players[4];
	unsigned long guild_id[4];
	unsigned char guild_name[4][13];
	unsigned long handle;
	unsigned long random_key;
};

typedef packet_login_success TPacketGCLoginSuccess;

TSimplePlayer::lAddr is the target address for the world server (lAddr equivalent to g_szPublicIP). g_szPublicIP is the address of the local network card interface e.g. 192.168.0.1. The meaning of this is that the player get this local address by the login success packet and connect to the world server on these address... So when the player selected the character, the player gets a disconnection, because the local address is not available in internet.

How fix it?
Patch(r2089M ~47 MB Version):


000916C4: F0 00
000916C5: 62 63
000916DD: F0 00
000916DE: 62 63
00091769: F0 00
0009176A: 62 63
001AB8E5: F0 00
001AB8E6: 62 63
001AB916: F0 00
001AB917: 62 63
001AB93B: F0 00
001AB93C: 62 63

And start the cores with the these arguments:
./game -I <PUBLIC_ADDRESS>

If you want, you can set the port with -p <PORT> and if you like you can specify the config file with -n <TAG> ( Schema: CONFIG.{TAG} ).

So then the players do not require a extra sura binary for homeservers and multiple servers/channels possible!

Credits: Anohros (epvpers)

 

I patched my Core and changed the server_start.sh and other players could connect to my server, without problems.

So my Question:
Is it maybe possible to rework something in source, or change something, that players are able to connect to an DDNS Homeroot without characterkick?
Like this tutorial (bypass).

Or something to change @config.cpp -> ( g_szPublicIP) ???

This would be great if it would work! - because i found so many Threads about, and no one have a solution for this problem - and still many people looking for this.

Sorry for my bad english...


Best regards.

Link to comment
Share on other sites

  • Replies 4
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

Announcements



×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.