diff options
author | Haru <haru@dotalux.com> | 2017-05-15 01:17:03 +0200 |
---|---|---|
committer | Haru <haru@dotalux.com> | 2017-08-20 15:41:11 +0200 |
commit | 3f978c02ec2550714a60e6180ecb60e9e779b364 (patch) | |
tree | 74b971aab635ffb2280a429d0a1b6bca820c81b0 | |
parent | 2357990ccea2f622992bc1d424eda30cd77ef082 (diff) | |
download | hercules-3f978c02ec2550714a60e6180ecb60e9e779b364.tar.gz hercules-3f978c02ec2550714a60e6180ecb60e9e779b364.tar.bz2 hercules-3f978c02ec2550714a60e6180ecb60e9e779b364.tar.xz hercules-3f978c02ec2550714a60e6180ecb60e9e779b364.zip |
Ignore hidden units in the cell stack limit checks
- This improves the Dancer Quest experience as well as other cases of
hidden NPCs blocking off certain cells
- Fixes #1135
Signed-off-by: Haru <haru@dotalux.com>
-rw-r--r-- | src/map/map.c | 5 | ||||
-rw-r--r-- | src/map/mob.c | 2 | ||||
-rw-r--r-- | src/map/unit.c | 2 |
3 files changed, 7 insertions, 2 deletions
diff --git a/src/map/map.c b/src/map/map.c index f8aebcfa6..ff5c2aafd 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -447,6 +447,11 @@ int map_count_oncell(int16 m, int16 x, int16 y, int type, int flag) { struct status_change *sc = status->get_sc(bl); if (sc && (sc->option&OPTION_INVISIBLE)) continue; + if (bl->type == BL_NPC) { + const struct npc_data *nd = BL_UCCAST(BL_NPC, bl); + if (nd->class_ == FAKE_NPC || nd->class_ == HIDDEN_WARP_CLASS) + continue; + } } if (flag&0x1) { struct unit_data *ud = unit->bl2ud(bl); diff --git a/src/map/mob.c b/src/map/mob.c index 98f8865a9..1fb46283d 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -1354,7 +1354,7 @@ int mob_unlocktarget(struct mob_data *md, int64 tick) { md->ud.target_to = 0; unit->set_target(&md->ud, 0); } - if(battle_config.official_cell_stack_limit && map->count_oncell(md->bl.m, md->bl.x, md->bl.y, BL_CHAR|BL_NPC, 1) > battle_config.official_cell_stack_limit) { + if(battle_config.official_cell_stack_limit && map->count_oncell(md->bl.m, md->bl.x, md->bl.y, BL_CHAR|BL_NPC, 0x1 | 0x2) > battle_config.official_cell_stack_limit) { unit->walktoxy(&md->bl, md->bl.x, md->bl.y, 8); } diff --git a/src/map/unit.c b/src/map/unit.c index 00c78054b..0b5b21caf 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -474,7 +474,7 @@ int unit_walktoxy_timer(int tid, int64 tick, int id, intptr_t data) ud->to_x = bl->x; ud->to_y = bl->y; - if(battle_config.official_cell_stack_limit && map->count_oncell(bl->m, x, y, BL_CHAR|BL_NPC, 1) > battle_config.official_cell_stack_limit) { + if (battle_config.official_cell_stack_limit && map->count_oncell(bl->m, x, y, BL_CHAR|BL_NPC, 0x1 | 0x2) > battle_config.official_cell_stack_limit) { //Walked on occupied cell, call unit_walktoxy again if(ud->steptimer != INVALID_TIMER) { //Execute step timer on next step instead |