From b13f3cda4adac06aa03f6f9743e8b2ff98fed621 Mon Sep 17 00:00:00 2001
From: Jared Adams <jaxad0127@gmail.com>
Date: Mon, 4 May 2009 00:13:31 -0600
Subject: Send server list forwards if the client says to

---
 src/login/login.c | 43 ++++++++++++++++++++++++++++++-------------
 1 file changed, 30 insertions(+), 13 deletions(-)

diff --git a/src/login/login.c b/src/login/login.c
index c0b13bc..21fb9ee 100644
--- a/src/login/login.c
+++ b/src/login/login.c
@@ -132,6 +132,7 @@ int level_new_gm = 60;
 static struct dbt *gm_account_db;
 
 #define VERSION_2_UPDATEHOST 0x01	// client supports updatehost
+#define VERSION_2_SERVERORDER 0x02	// send servers in forward order
 //------------------------------
 // Writing function of logs file
 //------------------------------
@@ -2819,20 +2820,36 @@ int parse_login(int fd) {
 
 					// Load list of char servers into outbound packet
 					server_num = 0;
-					for(i = MAX_SERVERS - 1; i >= 0; i--) { // Send them in reverse, as the client defaults to the last one
-						if (server_fd[i] >= 0) {
-							if (lan_ip_check(p))
-								WFIFOL(fd,47+server_num*32) = inet_addr(lan_char_ip);
-							else
-								WFIFOL(fd,47+server_num*32) = server[i].ip;
-							WFIFOW(fd,47+server_num*32+4) = server[i].port;
-							memcpy(WFIFOP(fd,47+server_num*32+6), server[i].name, 20);
-							WFIFOW(fd,47+server_num*32+26) = server[i].users;
-							WFIFOW(fd,47+server_num*32+28) = server[i].maintenance;
-							WFIFOW(fd,47+server_num*32+30) = server[i].new;
-							server_num++;
+					if (version_2 && VERSION_2_SERVERORDER)
+						for(i = 0; i < MAX_SERVERS; i++) {
+							if (server_fd[i] >= 0) {
+								if (lan_ip_check(p))
+									WFIFOL(fd,47+server_num*32) = inet_addr(lan_char_ip);
+								else
+									WFIFOL(fd,47+server_num*32) = server[i].ip;
+								WFIFOW(fd,47+server_num*32+4) = server[i].port;
+								memcpy(WFIFOP(fd,47+server_num*32+6), server[i].name, 20);
+								WFIFOW(fd,47+server_num*32+26) = server[i].users;
+								WFIFOW(fd,47+server_num*32+28) = server[i].maintenance;
+								WFIFOW(fd,47+server_num*32+30) = server[i].new;
+								server_num++;
+							}
+						}
+					else // Send them in reverse, as the client defaults to the second (!) one
+						for(i = MAX_SERVERS - 1; i >= 0; i--) {
+							if (server_fd[i] >= 0) {
+								if (lan_ip_check(p))
+									WFIFOL(fd,47+server_num*32) = inet_addr(lan_char_ip);
+								else
+									WFIFOL(fd,47+server_num*32) = server[i].ip;
+								WFIFOW(fd,47+server_num*32+4) = server[i].port;
+								memcpy(WFIFOP(fd,47+server_num*32+6), server[i].name, 20);
+								WFIFOW(fd,47+server_num*32+26) = server[i].users;
+								WFIFOW(fd,47+server_num*32+28) = server[i].maintenance;
+								WFIFOW(fd,47+server_num*32+30) = server[i].new;
+								server_num++;
+							}
 						}
-					}
 					// if at least 1 char-server
 					if (server_num > 0) {
 						WFIFOW(fd,0) = 0x69;
-- 
cgit v1.2.3-70-g09d2