- Some more cleanups that should prevent the double-login issue even further.
git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@10286 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
05db8f5df3
commit
2e8efbd2c2
@ -1672,11 +1672,15 @@ void map_deliddb(struct block_list *bl) {
|
||||
int map_quit(struct map_session_data *sd) {
|
||||
|
||||
if(!sd->state.auth) { //Removing a player that hasn't even finished loading
|
||||
TBL_PC *sd2 = map_id2sd(sd->status.account_id);
|
||||
if (sd->pd) unit_free(&sd->pd->bl,-1);
|
||||
if (sd->hd) unit_free(&sd->hd->bl,-1);
|
||||
//Double login, let original do the cleanups below.
|
||||
if (sd2 && sd2 != sd)
|
||||
return 0;
|
||||
idb_remove(id_db,sd->bl.id);
|
||||
idb_remove(pc_db,sd->status.account_id);
|
||||
idb_remove(charid_db,sd->status.char_id);
|
||||
idb_remove(id_db,sd->bl.id);
|
||||
return 0;
|
||||
}
|
||||
if(!sd->state.waitingdisconnect) {
|
||||
@ -1692,13 +1696,11 @@ int map_quit(struct map_session_data *sd) {
|
||||
chrif_save(sd,1);
|
||||
} else { //Try to free some data, without saving anything (this could be invoked on map server change. [Skotlex]
|
||||
if (sd->bl.prev != NULL)
|
||||
{ //Remove from map...
|
||||
unit_remove_map(&sd->bl, 0);
|
||||
if (sd->pd && sd->pd->bl.prev != NULL)
|
||||
unit_remove_map(&sd->pd->bl, 0);
|
||||
if (sd->hd && sd->hd->bl.prev != NULL)
|
||||
unit_remove_map(&sd->hd->bl, 0);
|
||||
}
|
||||
if (sd->pd && sd->pd->bl.prev != NULL)
|
||||
unit_remove_map(&sd->pd->bl, 0);
|
||||
if (sd->hd && sd->hd->bl.prev != NULL)
|
||||
unit_remove_map(&sd->hd->bl, 0);
|
||||
}
|
||||
|
||||
//Do we really need to remove the name?
|
||||
|
@ -580,8 +580,9 @@ int pc_authok(struct map_session_data *sd, int login_id2, time_t connect_until_t
|
||||
ShowDebug("pc_authok: Received auth ok for already authorized client (account id %d)!\n", sd->bl.id);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
sd->login_id2 = login_id2;
|
||||
memcpy(&sd->status, st, sizeof(*st));
|
||||
|
||||
if (st->sex != sd->status.sex) {
|
||||
clif_authfail_fd(sd->fd, 0);
|
||||
@ -598,7 +599,6 @@ int pc_authok(struct map_session_data *sd, int login_id2, time_t connect_until_t
|
||||
clif_authfail_fd(sd->fd, 8); // still recognizes last connection
|
||||
return 1;
|
||||
}
|
||||
memcpy(&sd->status, st, sizeof(*st));
|
||||
|
||||
//Set the map-server used job id. [Skotlex]
|
||||
i = pc_jobid2mapid(sd->status.class_);
|
||||
|
Loading…
x
Reference in New Issue
Block a user