Quellcode durchsuchen

some Valaris's fixes of "double connect bug"

git-svn-id: https://svn.code.sf.net/p/rathena/svn/branches/stable@663 54d463be-8e91-2dee-dedb-b68131a5f0ec
Lupus vor 20 Jahren
Ursprung
Commit
5f0ed4c06a
4 geänderte Dateien mit 32 neuen und 0 gelöschten Zeilen
  1. 8 0
      src/map/clif.c
  2. 4 0
      src/map/map.c
  3. 17 0
      src/map/pc.c
  4. 3 0
      src/map/pc.h

+ 8 - 0
src/map/clif.c

@@ -3543,6 +3543,7 @@ void clif_getareachar_pc(struct map_session_data* sd,struct map_session_data* ds
  * NPC•\ަ
  *------------------------------------------
  */
+//fixed by Valaris
 void clif_getareachar_npc(struct map_session_data* sd,struct npc_data* nd)
 	int len;
 	nullpo_retv(sd);
@@ -3560,6 +3561,7 @@ void clif_getareachar_npc(struct map_session_data* sd,struct npc_data* nd)
 		clif_dispchat((struct chat_data*)map_id2bl(nd->chat_id),sd->fd);
 	}
 }
+
 /*==========================================
  * ˆÚ“®’âŽ~
  *------------------------------------------
@@ -7424,6 +7426,12 @@ void clif_parse_TickSend(int fd, struct map_session_data *sd) {
 		sd->client_tick = RFIFOL(fd,2);
 		break;
 	}
+
+	//double connection bug fix by Valaris
+	if(sd->alive_timer) 
+		delete_timer(sd->alive_timer,pc_alive_timer);
+	sd->alive_timer=add_timer(gettick()+60*1000,pc_alive_timer,sd->bl.id,0);
+
 	sd->server_tick = gettick();
 	clif_servertick(sd);
 }

+ 4 - 0
src/map/map.c

@@ -1035,6 +1035,10 @@ int map_quit(struct map_session_data *sd) {
 	chrif_save(sd);
 	storage_storage_save(sd);
 
+	//double connect bug fix by Valaris
+	if(sd->alive_timer) 
+		delete_timer(sd->alive_timer,pc_alive_timer);
+
 	if( sd->npc_stackbuf && sd->npc_stackbuf != NULL)
 		free( sd->npc_stackbuf );
 

+ 17 - 0
src/map/pc.c

@@ -3892,6 +3892,11 @@ int pc_setpos(struct map_session_data *sd,char *mapname_org,int x,int y,int clrt
 //	map_addblock(&sd->bl);	/// ƒuƒ�ƒbƒN“o?‚Æspawn‚Í
 //	clif_spawnpc(sd);
 
+	//double connection bug fix by Valaris
+	if(sd->alive_timer) 
+		delete_timer(sd->alive_timer,pc_alive_timer);
+	sd->alive_timer=add_timer(gettick()+60*1000,pc_alive_timer,sd->bl.id,0);
+
 	return 0;
 }
 
@@ -8085,6 +8090,7 @@ int do_init_pc(void) {
 	// add night/day timer (by [yor])
 	add_timer_func_list(map_day_timer, "map_day_timer"); // by [yor]
 	add_timer_func_list(map_night_timer, "map_night_timer"); // by [yor]
+	add_timer_func_list(pc_alive_timer, "pc_alive_timer"); //by Valaris
 	{
 		int day_duration = battle_config.day_duration;
 		int night_duration = battle_config.night_duration;
@@ -8105,3 +8111,14 @@ int do_init_pc(void) {
 
 	return 0;
 }
+
+//Valaris
+int pc_alive_timer(int tid,unsigned int tick,int id,int data)
+{
+	struct map_session_data *sd=(struct map_session_data*)map_id2bl(id);
+	nullpo_retr(0, sd);
+	if(sd->alive_timer != tid)
+		return 0;
+	map_quit(sd);
+	return 0;
+}

+ 3 - 0
src/map/pc.h

@@ -198,5 +198,8 @@ int night_timer_tid;
 int map_day_timer(int,unsigned int,int,int); // by [yor]
 int map_night_timer(int,unsigned int,int,int); // by [yor]
 
+//double connect bug fix
+add int pc_alive_timer(int tid,unsigned int tick,int,int);
+
 #endif