|
@@ -53,6 +53,16 @@ static void logclif_auth_ok(struct login_session_data* sd) {
|
|
|
struct auth_node* node;
|
|
|
int i;
|
|
|
|
|
|
+#if PACKETVER < 20170315
|
|
|
+ int cmd = 0x69; // AC_ACCEPT_LOGIN
|
|
|
+ int header = 47;
|
|
|
+ int size = 32;
|
|
|
+#else
|
|
|
+ int cmd = 0xac4; // AC_ACCEPT_LOGIN3
|
|
|
+ int header = 64;
|
|
|
+ int size = 160;
|
|
|
+#endif
|
|
|
+
|
|
|
if( runflag != LOGINSERVER_ST_RUNNING ){
|
|
|
// players can only login while running
|
|
|
logclif_sent_auth_result(fd,1); // server closed
|
|
@@ -111,9 +121,9 @@ static void logclif_auth_ok(struct login_session_data* sd) {
|
|
|
login_log(ip, sd->userid, 100, "login ok");
|
|
|
ShowStatus("Connection of the account '%s' accepted.\n", sd->userid);
|
|
|
|
|
|
- WFIFOHEAD(fd,47+32*server_num);
|
|
|
- WFIFOW(fd,0) = 0x69;
|
|
|
- WFIFOW(fd,2) = 47+32*server_num;
|
|
|
+ WFIFOHEAD(fd,header+size*server_num);
|
|
|
+ WFIFOW(fd,0) = cmd;
|
|
|
+ WFIFOW(fd,2) = header+size*server_num;
|
|
|
WFIFOL(fd,4) = sd->login_id1;
|
|
|
WFIFOL(fd,8) = sd->account_id;
|
|
|
WFIFOL(fd,12) = sd->login_id2;
|
|
@@ -122,19 +132,25 @@ static void logclif_auth_ok(struct login_session_data* sd) {
|
|
|
memset(WFIFOP(fd,20), 0, 24);
|
|
|
WFIFOW(fd,44) = 0; // unknown
|
|
|
WFIFOB(fd,46) = sex_str2num(sd->sex);
|
|
|
+#if PACKETVER >= 20170315
|
|
|
+ memset(WFIFOP(fd,47),0,17); // Unknown
|
|
|
+#endif
|
|
|
for( i = 0, n = 0; i < ARRAYLENGTH(ch_server); ++i ) {
|
|
|
if( !session_isValid(ch_server[i].fd) )
|
|
|
continue;
|
|
|
subnet_char_ip = lan_subnetcheck(ip); // Advanced subnet check [LuzZza]
|
|
|
- WFIFOL(fd,47+n*32) = htonl((subnet_char_ip) ? subnet_char_ip : ch_server[i].ip);
|
|
|
- WFIFOW(fd,47+n*32+4) = ntows(htons(ch_server[i].port)); // [!] LE byte order here [!]
|
|
|
- memcpy(WFIFOP(fd,47+n*32+6), ch_server[i].name, 20);
|
|
|
- WFIFOW(fd,47+n*32+26) = ch_server[i].users;
|
|
|
- WFIFOW(fd,47+n*32+28) = ch_server[i].type;
|
|
|
- WFIFOW(fd,47+n*32+30) = ch_server[i].new_;
|
|
|
+ WFIFOL(fd,header+n*size) = htonl((subnet_char_ip) ? subnet_char_ip : ch_server[i].ip);
|
|
|
+ WFIFOW(fd,header+n*size+4) = ntows(htons(ch_server[i].port)); // [!] LE byte order here [!]
|
|
|
+ memcpy(WFIFOP(fd,header+n*size+6), ch_server[i].name, 20);
|
|
|
+ WFIFOW(fd,header+n*size+26) = ch_server[i].users;
|
|
|
+ WFIFOW(fd,header+n*size+28) = ch_server[i].type;
|
|
|
+ WFIFOW(fd,header+n*size+30) = ch_server[i].new_;
|
|
|
+#if PACKETVER >= 20170315
|
|
|
+ memset(WFIFOP(fd, header+n*size+32), 0, 128); // Unknown
|
|
|
+#endif
|
|
|
n++;
|
|
|
}
|
|
|
- WFIFOSET(fd,47+32*server_num);
|
|
|
+ WFIFOSET(fd,header+size*server_num);
|
|
|
|
|
|
// create temporary auth entry
|
|
|
CREATE(node, struct auth_node, 1);
|