summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaru <haru@dotalux.com>2019-10-20 20:14:01 +0200
committerGitHub <noreply@github.com>2019-10-20 20:14:01 +0200
commit436ae38fbd595cd49c047166e55899696cd72a4d (patch)
treed6c57e5421306ba3de94f2a9c793f83f1ab7c62e
parent275edef51c858e9e55934ec3af92ec19db74f3d3 (diff)
parent4f9cafbc0ecee81ff46a126cff1d789a9934cda4 (diff)
downloadhercules-436ae38fbd595cd49c047166e55899696cd72a4d.tar.gz
hercules-436ae38fbd595cd49c047166e55899696cd72a4d.tar.bz2
hercules-436ae38fbd595cd49c047166e55899696cd72a4d.tar.xz
hercules-436ae38fbd595cd49c047166e55899696cd72a4d.zip
Merge pull request #2550 from skyleo/cliff_aggro_ranged_no_attack_fix
Fix aggressive ranged mobs not attacking from above a cliff
-rw-r--r--src/map/mob.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/map/mob.c b/src/map/mob.c
index 56d07da92..2ea189c23 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -1173,13 +1173,15 @@ static int mob_ai_sub_hard_activesearch(struct block_list *bl, va_list ap)
battle->check_range(&md->bl,bl,md->db->range2)
) { //Pick closest target?
#ifdef ACTIVEPATHSEARCH
- struct walkpath_data wpd;
- if (!path->search(&wpd, &md->bl, md->bl.m, md->bl.x, md->bl.y, bl->x, bl->y, 0, CELL_CHKNOPASS)) // Count walk path cells
- return 0;
- //Standing monsters use range2, walking monsters use range3
- if ((md->ud.walktimer == INVALID_TIMER && wpd.path_len > md->db->range2)
- || (md->ud.walktimer != INVALID_TIMER && wpd.path_len > md->db->range3))
- return 0;
+ struct walkpath_data wpd;
+ bool is_standing = (md->ud.walktimer == INVALID_TIMER);
+ if (!path->search(&wpd, &md->bl, md->bl.m, md->bl.x, md->bl.y, bl->x, bl->y, 0, CELL_CHKNOPASS) // Count walk path cells
+ || (is_standing && wpd.path_len > md->db->range2) //Standing monsters use range2, walking monsters use range3
+ || (!is_standing && wpd.path_len > md->db->range3)) {
+ if (!check_distance_bl(&md->bl, bl, md->status.rhw.range)
+ || !path->search_long(NULL, &md->bl, md->bl.m, md->bl.x, md->bl.y, bl->x, bl->y, CELL_CHKWALL))
+ return 0;
+ }
#endif
(*target) = bl;
md->target_id=bl->id;