summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/char/char.c12
-rw-r--r--src/char_sql/char.c8
-rw-r--r--src/map/clif.c2
-rw-r--r--src/map/pc.c4
4 files changed, 14 insertions, 12 deletions
diff --git a/src/char/char.c b/src/char/char.c
index 9a1a87bee..76312ac0d 100644
--- a/src/char/char.c
+++ b/src/char/char.c
@@ -241,15 +241,19 @@ void set_char_offline(int char_id, int account_id)
if( character->server > -1 )
server[character->server].users--;
- character->char_id = -1;
- character->server = -1;
if(character->waiting_disconnect != -1){
delete_timer(character->waiting_disconnect, chardb_waiting_disconnect);
character->waiting_disconnect = -1;
}
+
+ //If user is NOT at char screen, delete entry [Kevin]
+ if(character->char_id != -1)
+ {
+ idb_remove(online_char_db, account_id);
+ }
}
- if (login_fd > 0 && !session[login_fd]->flag.eof)
+ if (login_fd > 0 && !session[login_fd]->flag.eof && (char_id == -1 || character == NULL || character->char_id != -1))
{
WFIFOHEAD(login_fd,6);
WFIFOW(login_fd,0) = 0x272c;
@@ -2335,7 +2339,7 @@ int parse_fromlogin(int fd)
set_eof(i);
}
else //Shouldn't happen, but just in case.
- set_char_offline(99, aid);
+ set_char_offline(-1, aid);
}
}
}
diff --git a/src/char_sql/char.c b/src/char_sql/char.c
index 992e7892a..d3839ca2f 100644
--- a/src/char_sql/char.c
+++ b/src/char_sql/char.c
@@ -263,8 +263,7 @@ void set_char_offline(int char_id, int account_id)
{
struct online_char_data* character;
- //FIXME: usage of 'magic constant'; this needs to go! [ultramage]
- if ( char_id == 99 )
+ if ( char_id == -1 )
{
if( SQL_ERROR == Sql_Query(sql_handle, "UPDATE `%s` SET `online`='0' WHERE `account_id`='%d'", char_db, account_id) )
Sql_ShowDebug(sql_handle);
@@ -297,7 +296,7 @@ void set_char_offline(int char_id, int account_id)
}
}
- if (login_fd > 0 && !session[login_fd]->flag.eof && (character == NULL || character->char_id != -1))
+ if (login_fd > 0 && !session[login_fd]->flag.eof && (char_id == -1 || character == NULL || character->char_id != -1))
{
WFIFOHEAD(login_fd,6);
WFIFOW(login_fd,0) = 0x272c;
@@ -1930,7 +1929,7 @@ int parse_fromlogin(int fd)
set_eof(i);
}
else //Shouldn't happen, but just in case.
- set_char_offline(99, aid);
+ set_char_offline(-1, aid);
}
}
}
@@ -2917,7 +2916,6 @@ int parse_char(int fd)
{ // 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]
- //send -1 as char id (99 means at char select) [Kevin]
set_char_offline(-1,sd->account_id);
if( data != NULL && data->fd == fd)
data->fd = -1;
diff --git a/src/map/clif.c b/src/map/clif.c
index ea2a10b4c..4c6d0f833 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -7952,7 +7952,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
}
#ifndef TXT_ONLY
- mail_clear(sd);
+ mail_clear(sd);
#endif
quest_pc_login(sd);
diff --git a/src/map/pc.c b/src/map/pc.c
index 400799e61..27336c05b 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -962,11 +962,11 @@ int pc_reg_received(struct map_session_data *sd)
status_calc_pc(sd,1);
chrif_scdata_request(sd->status.account_id, sd->status.char_id);
+
#ifndef TXT_ONLY
intif_Mail_requestinbox(sd->status.char_id, 0); // MAIL SYSTEM - Request Mail Inbox
-#endif
-
intif_request_questlog(sd);
+#endif
if (!sd->state.connect_new && sd->fd)
{ //Character already loaded map! Gotta trigger LoadEndAck manually.