- Cleaned up the mob-random-walking code.
git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@6468 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
4ef4e4dc84
commit
b30e1fdda7
@ -982,13 +982,15 @@ 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(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;i<retrycount;i++){ // Search of a movable place
|
||||
int r=rand();
|
||||
@ -998,10 +1000,10 @@ int mob_randomwalk(struct mob_data *md,int tick)
|
||||
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){
|
||||
}
|
||||
if(i==retrycount){
|
||||
md->move_fail_count++;
|
||||
if(md->move_fail_count>1000){
|
||||
if(battle_config.error_log)
|
||||
@ -1009,19 +1011,19 @@ int mob_randomwalk(struct mob_data *md,int tick)
|
||||
md->move_fail_count=0;
|
||||
mob_spawn(md);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
speed=status_get_speed(&md->bl);
|
||||
for(i=c=0;i<md->ud.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->next_walktime = tick+rand()%3000+3000+c;
|
||||
md->state.skillstate=MSS_WALK;
|
||||
md->move_fail_count=0;
|
||||
md->next_walktime = tick+rand()%3000+3000+c;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*==========================================
|
||||
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user