diff options
Diffstat (limited to 'src/map/map.c')
-rw-r--r-- | src/map/map.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/map/map.c b/src/map/map.c index 073901204..3831f7e98 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -1663,8 +1663,9 @@ void map_deliddb(struct block_list *bl) /*========================================== * Standard call when a player connection is closed. *------------------------------------------*/ -int map_quit(struct map_session_data *sd) -{ +int map_quit(struct map_session_data *sd) { + int i; + if(!sd->state.active) { //Removing a player that is not active. struct auth_node *node = chrif_search(sd->status.account_id); if (node && node->char_id == sd->status.char_id && @@ -1722,8 +1723,7 @@ int map_quit(struct map_session_data *sd) status_change_end(&sd->bl, SC_SLOWCAST, INVALID_TIMER); status_change_end(&sd->bl, SC_CRITICALWOUND, INVALID_TIMER); } - if (battle_config.debuff_on_logout&2) - { + if (battle_config.debuff_on_logout&2) { status_change_end(&sd->bl, SC_MAXIMIZEPOWER, INVALID_TIMER); status_change_end(&sd->bl, SC_MAXOVERTHRUST, INVALID_TIMER); status_change_end(&sd->bl, SC_STEELBODY, INVALID_TIMER); @@ -1733,6 +1733,12 @@ int map_quit(struct map_session_data *sd) } } + for( i = 0; i < EQI_MAX; i++ ) { + if( sd->equip_index[ i ] >= 0 ) + if( !pc_isequip( sd , sd->equip_index[ i ] ) ) + pc_unequipitem( sd , sd->equip_index[ i ] , 2 ); + } + // Return loot to owner if( sd->pd ) pet_lootitem_drop(sd->pd, sd); |