diff options
-rw-r--r-- | src/map/clif.c | 1 | ||||
-rw-r--r-- | src/map/pc.h | 1 | ||||
-rw-r--r-- | src/map/unit.c | 11 |
3 files changed, 13 insertions, 0 deletions
diff --git a/src/map/clif.c b/src/map/clif.c index 553675939..ea2270024 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -7813,6 +7813,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) if (map[sd->bl.m].users++ == 0 && battle_config.dynamic_mobs) //Skotlex map_spawnmobs(sd->bl.m); + sd->state.debug_remove_map = 0; // temporary state to track double remove_map's [FlavioJS] map_addblock(&sd->bl); clif_spawn(&sd->bl); diff --git a/src/map/pc.h b/src/map/pc.h index c55e7f2cc..a7d30d1ce 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -88,6 +88,7 @@ struct map_session_data { unsigned killable : 1; unsigned doridori : 1; unsigned ignoreAll : 1; + unsigned debug_remove_map : 1; // temporary state to track double remove_map's [FlavioJS] unsigned short autoloot; unsigned short autolootid; // [Zephyrus] unsigned noks : 3; // [Zeph Kill Steal Protection] diff --git a/src/map/unit.c b/src/map/unit.c index 5bdccd83d..afcd999b8 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -1689,8 +1689,19 @@ int unit_remove_map(struct block_list *bl, int clrtype) party_send_dot_remove(sd);//minimap dot fix [Kevin] guild_send_dot_remove(sd); + if( map[bl->m].users <= 0 || sd->state.debug_remove_map ) + {// this is only place where map users is decreased, if the mobs were removed too soon then this function was executed too many times [FlavioJS] + ShowDebug("unit_remove_map: unexpected state when removing player AID/CID:%d/%d" + " (active=%d connect_new=%d rewarp=%d changemap=%d debug_remove_map=%d)" + " from map=%s (users=%d). Please report this!!!\n", + sd->status.account_id, sd->status.char_id, + sd->state.active, sd->state.connect_new, sd->state.rewarp, sd->state.changemap, sd->state.debug_remove_map, + map[bl->m].name, map[bl->m].users); + } + else if (--map[bl->m].users == 0 && battle_config.dynamic_mobs) //[Skotlex] map_removemobs(bl->m); + sd->state.debug_remove_map = 1; // temporary state to track double remove_map's [FlavioJS] break; } |