diff options
-rw-r--r-- | Changelog.txt | 5 | ||||
-rw-r--r-- | src/map/clif.c | 24 | ||||
-rw-r--r-- | src/map/clif.h | 1 | ||||
-rw-r--r-- | src/map/pc.c | 4 |
4 files changed, 31 insertions, 3 deletions
diff --git a/Changelog.txt b/Changelog.txt index 75498a36b..38b0506f9 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,5 +1,9 @@ Date Added 12/24 + * Added suggested fix when client disconnected [celest] + - send "disconnected due to time gap" and close session when timed out + - send "server still recognises last login" message and close existing + session when client reconnects * Upped windwalk to lv 10 in skill_tree [MouseJstr] * Fixed a scripting crash (SVN: 781) [MouseJstr] * removed @changesex and @charchangesex until we can @@ -18,6 +22,7 @@ Date Added Note: mes = otput into client's NPC window debugmes = output into map-server window logmes = output into lognpc log DB. + 12/23 * Fixed some bugs in the clif.c changes (SVN 766 to SVN 767) [MouseJstr] * Added ayo monsters to @disguise diff --git a/src/map/clif.c b/src/map/clif.c index 75f791589..386cceb44 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -7104,6 +7104,25 @@ int clif_GM_kick(struct map_session_data *sd,struct map_session_data *tsd,int ty return 0; } + +/*========================================== + * + *------------------------------------------ + */ + +int clif_timedout(struct map_session_data *sd) +{ + nullpo_retr(0, sd); + + sprintf(tmp_output,"%sCharacter with Account ID '"CL_WHITE"%d"CL_RESET"' timed out.\n", (pc_isGM(sd))?"GM ":"", sd->bl.id); + ShowInfo(tmp_output); + map_quit(sd); + clif_authfail_fd(sd->fd,3); // Even if player is not on we still send anyway + clif_setwaitclose(sd->fd); // Set session to EOF + + return 0; +} + /*========================================== * WisΫΒ *------------------------------------------ @@ -7251,8 +7270,9 @@ void clif_parse_WantToConnection(int fd, struct map_session_data *sd) // if same account already connected, we disconnect the 2 sessions if ((old_sd = map_id2sd(account_id)) != NULL) { - clif_authfail_fd(fd, 2); // same id + clif_authfail_fd(fd, 8); // still recognizes last connection clif_authfail_fd(old_sd->fd, 2); // same id + clif_setwaitclose(sd->fd); // Set session to EOF } else { sd = session[fd]->session_data = (struct map_session_data*)aCalloc(1, sizeof(struct map_session_data)); sd->fd = fd; @@ -10234,7 +10254,7 @@ static int clif_parse(int fd) { if (RFIFOREST(fd) < 2) return 0; - //printf("clif_parse: connection #%d, packet: 0x%x (with being read: %d bytes).\n", fd, RFIFOW(fd,0), RFIFOREST(fd)); +// printf("clif_parse: connection #%d, packet: 0x%x (with being read: %d bytes).\n", fd, RFIFOW(fd,0), RFIFOREST(fd)); cmd = RFIFOW(fd,0); diff --git a/src/map/clif.h b/src/map/clif.h index 0a61ea052..a51aaddfc 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -280,6 +280,7 @@ int clif_message(struct block_list *bl, char* msg); // messages (from mobs/npcs) int clif_GM_kickack(struct map_session_data *sd,int id); int clif_GM_kick(struct map_session_data *sd,struct map_session_data *tsd,int type); +int clif_timedout(struct map_session_data *sd); int clif_foreachclient(int (*)(struct map_session_data*,va_list),...); diff --git a/src/map/pc.c b/src/map/pc.c index 897b96861..fda290532 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -7853,7 +7853,9 @@ int pc_alive_timer(int tid,unsigned int tick,int id,int data) nullpo_retr(0, sd); if(sd->alive_timer != tid) return 0; - map_quit(sd); +// map_quit(sd); + clif_timedout (sd); + return 0; } |