diff options
Diffstat (limited to 'src/map/unit.c')
-rw-r--r-- | src/map/unit.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/map/unit.c b/src/map/unit.c index 015f755bb..d484056f9 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -96,6 +96,8 @@ static struct unit_data *unit_bl2ud(struct block_list *bl) return &BL_UCAST(BL_MER, bl)->ud; case BL_ELEM: return &BL_UCAST(BL_ELEM, bl)->ud; + case BL_SKILL: // No assertion to not spam the server console when attacking a skill type unit such as Ice Wall. + return NULL; default: Assert_retr(NULL, false); } @@ -128,6 +130,8 @@ static const struct unit_data *unit_cbl2ud(const struct block_list *bl) return &BL_UCCAST(BL_MER, bl)->ud; case BL_ELEM: return &BL_UCCAST(BL_ELEM, bl)->ud; + case BL_SKILL: // No assertion to not spam the server console when attacking a skill type unit such as Ice Wall. + return NULL; default: Assert_retr(NULL, false); } @@ -326,7 +330,7 @@ static int unit_warpto_master(struct block_list *master_bl, struct block_list *s static int unit_walk_toxy_timer(int tid, int64 tick, int id, intptr_t data) { struct block_list *bl = map->id2bl(id); - if (bl == NULL || bl->prev == NULL) // Stop moved because it is missing from the block_list + if (bl == NULL) return 1; struct unit_data *ud = unit->bl2ud(bl); if (ud == NULL) @@ -336,8 +340,12 @@ static int unit_walk_toxy_timer(int tid, int64 tick, int id, intptr_t data) ShowError("unit_walk_timer mismatch %d != %d\n",ud->walktimer,tid); return 1; } + ud->walktimer = INVALID_TIMER; + if (bl->prev == NULL) // Stop moved because it is missing from the block_list. + return 1; + if (ud->walkpath.path_pos >= ud->walkpath.path_len) return 1; |