- 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)
|
int mob_randomwalk(struct mob_data *md,int tick)
|
||||||
{
|
{
|
||||||
const int retrycount=20;
|
const int retrycount=20;
|
||||||
|
int i,x,y,c,d;
|
||||||
int speed;
|
int speed;
|
||||||
|
|
||||||
nullpo_retr(0, md);
|
nullpo_retr(0, md);
|
||||||
|
|
||||||
if(DIFF_TICK(md->next_walktime,tick)<0 && unit_can_move(&md->bl)){
|
if(DIFF_TICK(md->next_walktime,tick)>0 || !unit_can_move(&md->bl))
|
||||||
int i,x,y,c,d=12-md->move_fail_count;
|
return 0;
|
||||||
speed=status_get_speed(&md->bl);
|
|
||||||
|
d =12-md->move_fail_count;
|
||||||
if(d<5) d=5;
|
if(d<5) d=5;
|
||||||
for(i=0;i<retrycount;i++){ // Search of a movable place
|
for(i=0;i<retrycount;i++){ // Search of a movable place
|
||||||
int r=rand();
|
int r=rand();
|
||||||
@ -998,10 +1000,10 @@ int mob_randomwalk(struct mob_data *md,int tick)
|
|||||||
y+=md->bl.y;
|
y+=md->bl.y;
|
||||||
|
|
||||||
if((map_getcell(md->bl.m,x,y,CELL_CHKPASS)) && unit_walktoxy(&md->bl,x,y,1)){
|
if((map_getcell(md->bl.m,x,y,CELL_CHKPASS)) && unit_walktoxy(&md->bl,x,y,1)){
|
||||||
md->move_fail_count=0;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(i+1>=retrycount){
|
}
|
||||||
|
if(i==retrycount){
|
||||||
md->move_fail_count++;
|
md->move_fail_count++;
|
||||||
if(md->move_fail_count>1000){
|
if(md->move_fail_count>1000){
|
||||||
if(battle_config.error_log)
|
if(battle_config.error_log)
|
||||||
@ -1009,20 +1011,20 @@ int mob_randomwalk(struct mob_data *md,int tick)
|
|||||||
md->move_fail_count=0;
|
md->move_fail_count=0;
|
||||||
mob_spawn(md);
|
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.
|
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)
|
if(md->ud.walkpath.path[i]&1)
|
||||||
c+=speed*14/10;
|
c+=speed*14/10;
|
||||||
else
|
else
|
||||||
c+=speed;
|
c+=speed;
|
||||||
}
|
}
|
||||||
md->next_walktime = tick+rand()%3000+3000+c;
|
|
||||||
md->state.skillstate=MSS_WALK;
|
md->state.skillstate=MSS_WALK;
|
||||||
|
md->move_fail_count=0;
|
||||||
|
md->next_walktime = tick+rand()%3000+3000+c;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*==========================================
|
/*==========================================
|
||||||
* AI of MOB whose is near a Player
|
* AI of MOB whose is near a Player
|
||||||
@ -1259,15 +1261,8 @@ static int mob_ai_sub_hard(struct block_list *bl,va_list ap)
|
|||||||
}
|
}
|
||||||
// Nothing else to do... except random walking.
|
// Nothing else to do... except random walking.
|
||||||
// Slaves do not random walk! [Skotlex]
|
// Slaves do not random walk! [Skotlex]
|
||||||
if (can_move && !md->master_id)
|
if (can_move && !md->master_id && DIFF_TICK(md->next_walktime, tick) <= 0)
|
||||||
{
|
mob_randomwalk(md,tick);
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user