From 11c193241c6b1b45814ac8c4fb44842da9a42e46 Mon Sep 17 00:00:00 2001 From: skotlex Date: Thu, 4 May 2006 16:44:15 +0000 Subject: - Cleaned up the mob-random-walking code. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@6468 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/mob.c | 79 ++++++++++++++++++++++++++++------------------------------- 1 file changed, 37 insertions(+), 42 deletions(-) diff --git a/src/map/mob.c b/src/map/mob.c index e56163ce9..e05d8e2b6 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -982,46 +982,48 @@ int mob_unlocktarget(struct mob_data *md,int tick) int mob_randomwalk(struct mob_data *md,int tick) { const int retrycount=20; + int i,x,y,c,d; int speed; nullpo_retr(0, md); - if(DIFF_TICK(md->next_walktime,tick)<0 && unit_can_move(&md->bl)){ - int i,x,y,c,d=12-md->move_fail_count; - speed=status_get_speed(&md->bl); - if(d<5) d=5; - for(i=0;ibl.x; - y+=md->bl.y; - - if((map_getcell(md->bl.m,x,y,CELL_CHKPASS)) && unit_walktoxy(&md->bl,x,y,1)){ - md->move_fail_count=0; - break; - } - if(i+1>=retrycount){ - md->move_fail_count++; - if(md->move_fail_count>1000){ - if(battle_config.error_log) - ShowWarning("MOB cant move. random spawn %d, class = %d\n",md->bl.id,md->class_); - md->move_fail_count=0; - mob_spawn(md); - } - } + if(DIFF_TICK(md->next_walktime,tick)>0 || !unit_can_move(&md->bl)) + return 0; + + d =12-md->move_fail_count; + if(d<5) d=5; + for(i=0;ibl.x; + y+=md->bl.y; + + if((map_getcell(md->bl.m,x,y,CELL_CHKPASS)) && unit_walktoxy(&md->bl,x,y,1)){ + break; } - for(i=c=0;iud.walkpath.path_len;i++){ // The next walk start time is calculated. - if(md->ud.walkpath.path[i]&1) - c+=speed*14/10; - else - c+=speed; + } + if(i==retrycount){ + md->move_fail_count++; + if(md->move_fail_count>1000){ + if(battle_config.error_log) + ShowWarning("MOB cant move. random spawn %d, class = %d\n",md->bl.id,md->class_); + md->move_fail_count=0; + mob_spawn(md); } - md->next_walktime = tick+rand()%3000+3000+c; - md->state.skillstate=MSS_WALK; - return 1; + return 0; } - return 0; + speed=status_get_speed(&md->bl); + for(i=c=0;iud.walkpath.path_len;i++){ // The next walk start time is calculated. + if(md->ud.walkpath.path[i]&1) + c+=speed*14/10; + else + c+=speed; + } + md->state.skillstate=MSS_WALK; + md->move_fail_count=0; + md->next_walktime = tick+rand()%3000+3000+c; + return 1; } /*========================================== @@ -1259,15 +1261,8 @@ static int mob_ai_sub_hard(struct block_list *bl,va_list ap) } // Nothing else to do... except random walking. // Slaves do not random walk! [Skotlex] - if (can_move && !md->master_id) - { - if (DIFF_TICK(md->next_walktime, tick) > 7000 && - (md->ud.walkpath.path_len == 0 || md->ud.walkpath.path_pos >= md->ud.walkpath.path_len)) - md->next_walktime = tick + 3000 + rand() % 2000; - // Random movement - if (mob_randomwalk(md,tick)) - return 0; - } + if (can_move && !md->master_id && DIFF_TICK(md->next_walktime, tick) <= 0) + mob_randomwalk(md,tick); return 0; } -- cgit v1.2.3-70-g09d2