Преглед изворни кода

- Now, when the login-char connection is cut, the char-server won't set everyone offline on reconnect, instead it will send the list of online accounts to the login server.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@7563 54d463be-8e91-2dee-dedb-b68131a5f0ec
skotlex пре 19 година
родитељ
комит
b643528e50
3 измењених фајлова са 25 додато и 4 уклоњено
  1. 3 0
      Changelog-Trunk.txt
  2. 11 2
      src/char/char.c
  3. 11 2
      src/char_sql/char.c

+ 3 - 0
Changelog-Trunk.txt

@@ -4,6 +4,9 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
 2006/07/07
+	* Now, when the login-char connection is cut, the char-server won't set
+	  everyone offline on reconnect, instead it will send the list of online
+	  accounts to the login server. [Skotlex]
 	* Modified the error on the char-sql server to set chars online when it
 	  receives a save packet from a character tagged as offline (until it can be
 	  figured out why this is happening) [Skotlex]

+ 11 - 2
src/char/char.c

@@ -1826,6 +1826,8 @@ static int char_delete(struct mmo_charstatus *cs) {
 	return 0;
 }
 
+int send_accounts_tologin(int tid, unsigned int tick, int id, int data);
+
 int parse_tologin(int fd) {
 	int i;
 	struct char_session_data *sd;
@@ -1862,8 +1864,15 @@ int parse_tologin(int fd) {
 				exit(1);
 			} else {
 				ShowStatus("Connected to login-server (connection #%d).\n", fd);
-				if (kick_on_disconnect)
-					set_all_offline();
+//				Don't set them offline as there's no packet to tell the map server
+//				to kick everyone out. Also, a disconnection from the login server is
+//				NOT something serious to the data integrity as a char-map disconnect
+//				is. [Skotlex]
+//				if (kick_on_disconnect)
+//					set_all_offline();
+//				However, on reconnect, DO send our connected accounts to login.
+				send_accounts_tologin(-1, gettick(), 0, 0);
+
 				// if no map-server already connected, display a message...
 				for(i = 0; i < MAX_MAP_SERVERS; i++)
 					if (server_fd[i] >= 0 && server[i].map[0]) // if map-server online and at least 1 map

+ 11 - 2
src/char_sql/char.c

@@ -1771,6 +1771,8 @@ int mmo_char_send006b(int fd, struct char_session_data *sd) {
 	return 0;
 }
 
+int send_accounts_tologin(int tid, unsigned int tick, int id, int data);
+
 int parse_tologin(int fd) {
 	int i;
 	struct char_session_data *sd;
@@ -1810,8 +1812,15 @@ int parse_tologin(int fd) {
 				//exit(1); //fixed for server shutdown.
 			}else {
 				ShowStatus("Connected to login-server (connection #%d).\n", fd);
-				if (kick_on_disconnect)
-					set_all_offline();
+//				Don't set them offline as there's no packet to tell the map server
+//				to kick everyone out. Also, a disconnection from the login server is
+//				NOT something serious to the data integrity as a char-map disconnect
+//				is. [Skotlex]
+//				if (kick_on_disconnect)
+//					set_all_offline();
+//				However, on reconnect, DO send our connected accounts to login.
+				send_accounts_tologin(-1, gettick(), 0, 0);
+			
 				// if no map-server already connected, display a message...
 				for(i = 0; i < MAX_MAP_SERVERS; i++)
 					if (server_fd[i] > 0 && server[i].map[0]) // if map-server online and at least 1 map