|
@@ -309,14 +309,17 @@ void set_char_offline(int char_id, int account_id)
|
|
|
character->waiting_disconnect = -1;
|
|
|
}
|
|
|
|
|
|
- //If user is NOT at char screen, delete entry [Kevin]
|
|
|
- if(character->char_id != -1)
|
|
|
+ if(character->char_id == char_id)
|
|
|
{
|
|
|
- idb_remove(online_char_db, account_id);
|
|
|
+ character->char_id = -1;
|
|
|
+ character->server = -1;
|
|
|
}
|
|
|
+
|
|
|
+ //FIXME? Why Kevin free'd the online information when the char was effectively in the map-server?
|
|
|
}
|
|
|
-
|
|
|
- if (login_fd > 0 && !session[login_fd]->flag.eof && (char_id == -1 || character == NULL || character->char_id != -1))
|
|
|
+
|
|
|
+ //Remove char if 1- Set all offline, or 2- character is no longer connected to char-server.
|
|
|
+ if (login_fd > 0 && !session[login_fd]->flag.eof && (char_id == -1 || character == NULL || character->fd == -1))
|
|
|
{
|
|
|
WFIFOHEAD(login_fd,6);
|
|
|
WFIFOW(login_fd,0) = 0x272c;
|
|
@@ -2870,10 +2873,10 @@ int parse_char(int fd)
|
|
|
if( sd != NULL && sd->auth )
|
|
|
{ // already authed client
|
|
|
struct online_char_data* data = (struct online_char_data*)idb_get(online_char_db, sd->account_id);
|
|
|
- if( data == NULL || data->server == -1) //If it is not in any server, send it offline. [Skotlex]
|
|
|
- set_char_offline(-1,sd->account_id);
|
|
|
if( data != NULL && data->fd == fd)
|
|
|
data->fd = -1;
|
|
|
+ if( data == NULL || data->server == -1) //If it is not in any server, send it offline. [Skotlex]
|
|
|
+ set_char_offline(-1,sd->account_id);
|
|
|
}
|
|
|
do_close(fd);
|
|
|
return 0;
|