diff options
Diffstat (limited to 'src/map')
-rw-r--r-- | src/map/atcommand.c | 1 | ||||
-rw-r--r-- | src/map/clif.c | 45 | ||||
-rw-r--r-- | src/map/map.h | 1 | ||||
-rw-r--r-- | src/map/status.c | 2 |
4 files changed, 48 insertions, 1 deletions
diff --git a/src/map/atcommand.c b/src/map/atcommand.c index df10655f7..12c6e5ff3 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -1879,6 +1879,7 @@ int atcommand_whogm(const int fd, struct map_session_data* sd, const char* comma if (pl_GM_level > GM_level) { sprintf(atcmd_output, "Name: %s (GM)", pl_sd->status.name); clif_displaymessage(fd, atcmd_output); + count++; continue; } diff --git a/src/map/clif.c b/src/map/clif.c index a4ba467ed..09b2d4623 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -1519,6 +1519,43 @@ int clif_walkok(struct map_session_data *sd) return 0; } +static void clif_move2(struct block_list *bl, struct view_data *vd, struct unit_data *ud) { + unsigned char buf[256]; + int len; + + len = clif_set007b(bl,vd,ud,buf); + clif_send(buf,len,bl,AREA_WOS); + if (disguised(bl)) + clif_setdisguise((TBL_PC*)bl, buf, len, 0); + + if(vd->cloth_color) + clif_refreshlook(bl,bl->id,LOOK_CLOTHES_COLOR,vd->cloth_color,AREA_WOS); + + switch(bl->type) + { + case BL_PC: + { + TBL_PC *sd = ((TBL_PC*)bl); +// clif_movepc(sd); + if(sd->state.size==2) // tiny/big players [Valaris] + clif_specialeffect(&sd->bl,423,AREA); + else if(sd->state.size==1) + clif_specialeffect(&sd->bl,421,AREA); + } + break; + case BL_MOB: + { + TBL_MOB *md = ((TBL_MOB*)bl); + if(md->special_state.size==2) // tiny/big mobs [Valaris] + clif_specialeffect(&md->bl,423,AREA); + else if(md->special_state.size==1) + clif_specialeffect(&md->bl,421,AREA); + } + break; + } + return; +} + /// Move the unit (does nothing if the client has no info about the unit) /// Note: unit must not be self void clif_move(struct unit_data *ud) @@ -1530,6 +1567,14 @@ void clif_move(struct unit_data *ud) if (!vd || vd->class_ == INVISIBLE_CLASS) return; //This performance check is needed to keep GM-hidden objects from being notified to bots. + if (ud->state.speed_changed) { + // Since we don't know how to update the speed of other objects, + // use the old walk packet to update the data. + ud->state.speed_changed = 0; + clif_move2(bl, vd, ud); + return; + } + WBUFW(buf,0)=0x86; WBUFL(buf,2)=bl->id; WBUFPOS2(buf,6,bl->x,bl->y,ud->to_x,ud->to_y,8,8); diff --git a/src/map/map.h b/src/map/map.h index bf748df3b..bfdddcbbd 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -332,6 +332,7 @@ struct unit_data { unsigned attack_continue : 1 ; unsigned walk_easy : 1 ; unsigned running : 1; + unsigned speed_changed : 1; } state; }; diff --git a/src/map/status.c b/src/map/status.c index 238621063..27faecd05 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -3004,7 +3004,7 @@ void status_calc_bl(struct block_list *bl, unsigned long flag) //because if you step on something while walking, the moment this //piece of code triggers the walk-timer is set on -1) [Skotlex] if (ud) - ud->state.change_walk_target = 1; + ud->state.change_walk_target = ud->state.speed_changed = 1; } if(flag&SCB_CRI && b_status->cri) { |