Hallo,
Deutsche Version:
einige kennen das Problem, das Spieler bei der Auswahl des Spielcharakters die Verbindung zum Server verlieren.
Das Problem besteht wegen dem Login-Success-Packet:
TSimplePlayer::lAddr ist die Adresse des Spielwelt-Server auf den sich der Spieler nach der Auswahl des Spielcharakters verbindet.
(TSimplePlayer::lAddr ist der selbe Wert wie g_szPublicIP). g_szPublicIP ist die Adresse(z.B. 192.168.0.1) der lokalen Schnittstelle der Netzwerkkarte.
Gemeint ist: Der Spieler bekommt diese Adresse vom Login-Success-Packet und verbindet sich mit dem Spielwelt-Server über diese Adresse. Der Spieler kann dann nach der Auswahl des Spielcharakters keine Verbindung zum Spielwelt-Server herstellen und verliert den Kontakt zum Server, da die lokale Adresse nicht im Internet erreichbar ist.
Wie beheben?
Patch(r2089M ~47 MB Version):
anschließend die Cores mit folgenden Argumenten starten:
./game -I <OEFFENTLICHE_IP_ADRESSE>
Wer es will kann noch den Port mit -p <PORT> angeben und wenn benötigt eine extra CONFIG angeben -n <TAG> ( Schema: CONFIG.{TAG} ).
Die Spieler müssen dann keine Sura-Binary verwenden um auf den Homeserver/DynDns-Server zu kommen, alle kompatiblen Clients können dann verwendet werden.
Das Problem besteht wegen dem Login-Success-Packet:
Code:
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 ist der selbe Wert wie g_szPublicIP). g_szPublicIP ist die Adresse(z.B. 192.168.0.1) der lokalen Schnittstelle der Netzwerkkarte.
Gemeint ist: Der Spieler bekommt diese Adresse vom Login-Success-Packet und verbindet sich mit dem Spielwelt-Server über diese Adresse. Der Spieler kann dann nach der Auswahl des Spielcharakters keine Verbindung zum Spielwelt-Server herstellen und verliert den Kontakt zum Server, da die lokale Adresse nicht im Internet erreichbar ist.
Wie beheben?
Patch(r2089M ~47 MB Version):
Code:
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
./game -I <OEFFENTLICHE_IP_ADRESSE>
Wer es will kann noch den Port mit -p <PORT> angeben und wenn benötigt eine extra CONFIG angeben -n <TAG> ( Schema: CONFIG.{TAG} ).
Die Spieler müssen dann keine Sura-Binary verwenden um auf den Homeserver/DynDns-Server zu kommen, alle kompatiblen Clients können dann verwendet werden.
English version:
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:
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):
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!
The reason why this problem is occurring is the login succes packet:
Code:
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;
How fix it?
Patch(r2089M ~47 MB Version):
Code:
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
./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!
With regards,
Anohros