summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2007-04-10 18:37:18 +0000
committerskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2007-04-10 18:37:18 +0000
commit8e61279b161a6603d494275ee0b07746a585deb8 (patch)
tree7de4956c09c83fdb9b3a0fb9804ccb30a84f1210 /src
parentf29db4aa23c04c611f353a2ac004dc8c7a57be60 (diff)
downloadhercules-8e61279b161a6603d494275ee0b07746a585deb8.tar.gz
hercules-8e61279b161a6603d494275ee0b07746a585deb8.tar.bz2
hercules-8e61279b161a6603d494275ee0b07746a585deb8.tar.xz
hercules-8e61279b161a6603d494275ee0b07746a585deb8.zip
- Updated a bit the pet_db.txt, added info for Xmas Goblin and Rice Cake. Since little is known about them, most of the info is custom!
- Fixed @whogm not updating count for GMs which you can only see their name. - Added unit_data.state.speed_changed, now when an object changes speed, the old move-packet will be used on the next movement, which should update the object's speed from that point and on-wards. This is done since there appears to be no way to tell the client a given object's speed has changed. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@10209 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src')
-rw-r--r--src/map/atcommand.c1
-rw-r--r--src/map/clif.c45
-rw-r--r--src/map/map.h1
-rw-r--r--src/map/status.c2
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) {