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

integrating anti freeze system to server status update, should cure dropping server connections [Shinomori]

git-svn-id: https://svn.code.sf.net/p/rathena/svn/branches/stable@1389 54d463be-8e91-2dee-dedb-b68131a5f0ec
shinomori пре 20 година
родитељ
комит
1a6dea5fe5
5 измењених фајлова са 27 додато и 9 уклоњено
  1. 1 0
      Changelog-SVN.txt
  2. 5 0
      src/login/login.c
  3. 14 6
      src/login_sql/login.c
  4. 1 1
      src/map/chrif.c
  5. 6 2
      src/map/map.c

+ 1 - 0
Changelog-SVN.txt

@@ -2,6 +2,7 @@
 Date	Added
 
 04/03
+	* integrating anti freeze system to status update [Shinomori]
 	* Fixed impossible drops at 0.01% chance [Lupus]
 	* Fixed some variable declarations in SQL login.c causing compilation errors [veider]
 	* Added NetBSD support into Makefile (Still lots of warrnings during compilation [veider]

+ 5 - 0
src/login/login.c

@@ -1394,6 +1394,11 @@ int parse_fromchar(int fd) {
 			server[id].users = RFIFOL(fd,2);
 			if(anti_freeze_enable)
 				server_freezeflag[id] = 5; // Char anti-freeze system. Counter. 5 ok, 4...0 freezed
+
+			// send some answer
+			WFIFOW(fd,0) = 0x2718;
+			WFIFOSET(fd,2);
+
 			RFIFOSKIP(fd,6);
 			break;
 

+ 14 - 6
src/login_sql/login.c

@@ -789,16 +789,24 @@ int parse_fromchar(int fd){
 				return 0;
 			// how many users on world? (update)
 			if (server[id].users != RFIFOL(fd,2))
+			{
 				printf("set users %s : %d\n", server[id].name, RFIFOL(fd,2));
-			server[id].users = RFIFOL(fd,2);
+
+				server[id].users = RFIFOL(fd,2);
+				sprintf(tmpsql,"UPDATE `sstatus` SET `user` = '%d' WHERE `index` = '%d'", server[id].users, id);
+				// query
+				if (mysql_query(&mysql_handle, tmpsql)) {
+					printf("DB server Error - %s\n", mysql_error(&mysql_handle));
+				}
+			}
+
 			if(anti_freeze_enable)
 				server_freezeflag[id] = 5; // Char anti-freeze system. Counter. 5 ok, 4...0 freezed
 
-			sprintf(tmpsql,"UPDATE `sstatus` SET `user` = '%d' WHERE `index` = '%d'", server[id].users, id);
-			// query
-			if (mysql_query(&mysql_handle, tmpsql)) {
-				printf("DB server Error - %s\n", mysql_error(&mysql_handle));
-			}
+			// send some answer
+			WFIFOW(fd,0) = 0x2718;
+			WFIFOSET(fd,2);
+
 			RFIFOSKIP(fd,6);
 			break;
 

+ 1 - 1
src/map/chrif.c

@@ -1071,7 +1071,7 @@ int chrif_parse(int fd)
 		case 0x2afb: chrif_sendmapack(fd); break;
 		case 0x2afd: pc_authok(RFIFOL(fd,4), RFIFOL(fd,8), (time_t)RFIFOL(fd,12), (struct mmo_charstatus*)RFIFOP(fd,16)); break;
 		case 0x2afe: pc_authfail(RFIFOL(fd,2)); break;
-		case 0x2b00: map_setusers(RFIFOL(fd,2)); break;
+		case 0x2b00: map_setusers(fd); break;
 		case 0x2b03: clif_charselectok(RFIFOL(fd,2)); break;
 		case 0x2b04: chrif_recvmap(fd); break;
 		case 0x2b06: chrif_changemapserverack(fd); break;

+ 6 - 2
src/map/map.c

@@ -180,8 +180,12 @@ int console = 0;
  * (charŽI‚©‚ç‘—‚ç‚ê‚Ä‚­‚é)
  *------------------------------------------
  */
-void map_setusers(int n) {
-	users = n;
+void map_setusers(int fd) 
+{
+	users = RFIFOL(fd,2);
+	// send some anser
+	WFIFOW(fd,0) = 0x2718;
+	WFIFOSET(fd,2);
 }
 
 /*==========================================