diff options
Diffstat (limited to 'src/map/clif.c')
-rw-r--r-- | src/map/clif.c | 536 |
1 files changed, 501 insertions, 35 deletions
diff --git a/src/map/clif.c b/src/map/clif.c index 469bec8db..3533c7eff 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -261,6 +261,7 @@ uint16 clif_getport(void) return map_port; } +#if PACKETVER >= 20071106 static inline unsigned char clif_bl_type(struct block_list *bl) { switch (bl->type) { case BL_PC: return disguised(bl)?0x1:0x0; //PC_TYPE @@ -276,6 +277,7 @@ static inline unsigned char clif_bl_type(struct block_list *bl) { default: return 0x1; //NPC_TYPE } } +#endif /*========================================== * sub process of clif_send @@ -636,7 +638,11 @@ int clif_send(const uint8* buf, int len, struct block_list* bl, enum send_target /// 02eb <start time>.L <position>.3B <x size>.B <y size>.B <font>.W (ZC_ACCEPT_ENTER2) void clif_authok(struct map_session_data *sd) { +#if PACKETVER < 20080102 + const int cmd = 0x73; +#else const int cmd = 0x2eb; +#endif int fd = sd->fd; WFIFOHEAD(fd,packet_len(cmd)); @@ -645,7 +651,9 @@ void clif_authok(struct map_session_data *sd) WFIFOPOS(fd, 6, sd->bl.x, sd->bl.y, sd->ud.dir); WFIFOB(fd, 9) = 5; // ignored WFIFOB(fd,10) = 5; // ignored +#if PACKETVER >= 20080102 WFIFOW(fd,11) = sd->user_font; // FIXME: Font is currently not saved. +#endif WFIFOSET(fd,packet_len(cmd)); } @@ -822,9 +830,9 @@ void clif_clearunit_area(struct block_list* bl, clr_type type) WBUFL(buf,2) = -bl->id; clif_send(buf, packet_len(0x80), bl, SELF); } - } + /// Used to make monsters with player-sprites disappear after dying /// like normal monsters, because the client does not remove those /// automatically. @@ -851,6 +859,10 @@ void clif_get_weapon_view(struct map_session_data* sd, unsigned short *rhand, un return; } +#if PACKETVER < 4 + *rhand = sd->status.weapon; + *lhand = sd->status.shield; +#else if (sd->equip_index[EQI_HAND_R] >= 0 && sd->inventory_data[sd->equip_index[EQI_HAND_R]]) { @@ -873,6 +885,7 @@ void clif_get_weapon_view(struct map_session_data* sd, unsigned short *rhand, un *lhand = id->nameid; } else *lhand = 0; +#endif } //To make the assignation of the level based on limits clearer/easier. [Skotlex] @@ -918,12 +931,31 @@ static int clif_set_unit_idle(struct block_list* bl, unsigned char* buffer, bool struct status_change* sc = status_get_sc(bl); struct view_data* vd = status_get_viewdata(bl); unsigned char *buf = WBUFP(buffer,0); +#if PACKETVER < 20091103 + bool type = !pcdb_checkid(vd->class_); +#endif +#if PACKETVER >= 7 unsigned short offset = 0; - +#endif +#if PACKETVER >= 20091103 const char *name; +#endif sd = BL_CAST(BL_PC, bl); -#if PACKETVER < 20101124 +#if PACKETVER < 20091103 + if(type) + WBUFW(buf,0) = spawn?0x7c:0x78; + else +#endif +#if PACKETVER < 4 + WBUFW(buf,0) = spawn?0x79:0x78; +#elif PACKETVER < 7 + WBUFW(buf,0) = spawn?0x1d9:0x1d8; +#elif PACKETVER < 20080102 + WBUFW(buf,0) = spawn?0x22b:0x22a; +#elif PACKETVER < 20091103 + WBUFW(buf,0) = spawn?0x2ed:0x2ee; +#elif PACKETVER < 20101124 WBUFW(buf,0) = spawn?0x7f8:0x7f9; #else WBUFW(buf,0) = spawn?0x858:0x857; @@ -950,6 +982,16 @@ static int clif_set_unit_idle(struct block_list* bl, unsigned char* buffer, bool WBUFW(buf, 6) = status_get_speed(bl); WBUFW(buf, 8) = (sc)? sc->opt1 : 0; WBUFW(buf,10) = (sc)? sc->opt2 : 0; +#if PACKETVER < 20091103 + if (type&&spawn) { //uses an older and different packet structure + WBUFW(buf,12) = (sc)? sc->option : 0; + WBUFW(buf,14) = vd->hair_style; + WBUFW(buf,16) = vd->weapon; + WBUFW(buf,18) = vd->head_bottom; + WBUFW(buf,20) = vd->class_; //Pet armor (ignored by client) + WBUFW(buf,22) = vd->shield; + } else { +#endif #if PACKETVER >= 20091103 WBUFL(buf,12) = (sc)? sc->option : 0; offset+=2; @@ -967,10 +1009,18 @@ static int clif_set_unit_idle(struct block_list* bl, unsigned char* buffer, bool WBUFW(buf,14) = vd->class_; WBUFW(buf,16) = vd->hair_style; WBUFW(buf,18) = vd->weapon; +#if PACKETVER < 4 + WBUFW(buf,20) = vd->head_bottom; + WBUFW(buf,22) = vd->shield; +#else WBUFW(buf,20) = vd->shield; WBUFW(buf,22) = vd->head_bottom; - WBUFW(buf,24) = vd->head_top; - WBUFW(buf,26) = vd->head_mid; +#endif +#if PACKETVER < 20091103 + } +#endif + WBUFW(buf,24) = vd->head_top; + WBUFW(buf,26) = vd->head_mid; if( bl->type == BL_NPC && vd->class_ == FLAG_CLASS ) { //The hell, why flags work like this? @@ -982,7 +1032,16 @@ static int clif_set_unit_idle(struct block_list* bl, unsigned char* buffer, bool WBUFW(buf,28) = vd->hair_color; WBUFW(buf,30) = vd->cloth_color; WBUFW(buf,32) = (sd)? sd->head_dir : 0; - +#if PACKETVER < 20091103 + if (type&&spawn) { //End of packet 0x7c + WBUFB(buf,34) = (sd)?sd->status.karma:0; // karma + WBUFB(buf,35) = vd->sex; + WBUFPOS(buf,36,bl->x,bl->y,unit_getdir(bl)); + WBUFB(buf,39) = 0; + WBUFB(buf,40) = 0; + return packet_len(0x7c); + } +#endif #if PACKETVER >= 20110111 WBUFW(buf,34) = vd->robe; offset+= 2; @@ -1016,9 +1075,19 @@ static int clif_set_unit_idle(struct block_list* bl, unsigned char* buffer, bool buf = WBUFP(buffer,offset); } WBUFW(buf,51) = clif_setlevel(bl); +#if PACKETVER < 20091103 + if (type) //End for non-player packet + return packet_len(WBUFW(buffer,0)); +#endif +#if PACKETVER >= 20080102 WBUFW(buf,53) = sd?sd->user_font:0; +#endif +#if PACKETVER >= 20091103 memcpy((char*)WBUFP(buf,55), name, NAME_LENGTH); return WBUFW(buffer,2); +#else + return packet_len(WBUFW(buffer,0)); +#endif } /*========================================== @@ -1030,19 +1099,31 @@ static int clif_set_unit_walking(struct block_list* bl, struct unit_data* ud, un struct status_change* sc = status_get_sc(bl); struct view_data* vd = status_get_viewdata(bl); unsigned char* buf = WBUFP(buffer,0); +#if PACKETVER >= 7 unsigned short offset = 0; +#endif +#if PACKETVER >= 20091103 const char *name; +#endif sd = BL_CAST(BL_PC, bl); -#if PACKETVER < 20101124 +#if PACKETVER < 4 + WBUFW(buf, 0) = 0x7b; +#elif PACKETVER < 7 + WBUFW(buf, 0) = 0x1da; +#elif PACKETVER < 20080102 + WBUFW(buf, 0) = 0x22c; +#elif PACKETVER < 20091103 + WBUFW(buf, 0) = 0x2ec; +#elif PACKETVER < 20101124 WBUFW(buf, 0) = 0x7f7; #else WBUFW(buf, 0) = 0x856; #endif +#if PACKETVER >= 20091103 name = status_get_name(bl); - #if PACKETVER < 20110111 WBUFW(buf, 2) = 69+strlen(name); #else @@ -1050,22 +1131,35 @@ static int clif_set_unit_walking(struct block_list* bl, struct unit_data* ud, un #endif offset+=2; buf = WBUFP(buffer,offset); +#endif +#if PACKETVER >= 20071106 WBUFB(buf, 2) = clif_bl_type(bl); offset++; buf = WBUFP(buffer,offset); +#endif WBUFL(buf, 2) = bl->id; WBUFW(buf, 6) = status_get_speed(bl); WBUFW(buf, 8) = (sc)? sc->opt1 : 0; WBUFW(buf,10) = (sc)? sc->opt2 : 0; +#if PACKETVER < 7 + WBUFW(buf,12) = (sc)? sc->option : 0; +#else WBUFL(buf,12) = (sc)? sc->option : 0; offset+=2; //Shift the rest of elements by 2 bytes. buf = WBUFP(buffer,offset); +#endif WBUFW(buf,14) = vd->class_; WBUFW(buf,16) = vd->hair_style; WBUFW(buf,18) = vd->weapon; +#if PACKETVER < 4 + WBUFW(buf,20) = vd->head_bottom; + WBUFL(buf,22) = gettick(); + WBUFW(buf,26) = vd->shield; +#else WBUFW(buf,20) = vd->shield; WBUFW(buf,22) = vd->head_bottom; WBUFL(buf,24) = gettick(); +#endif WBUFW(buf,28) = vd->head_top; WBUFW(buf,30) = vd->head_mid; WBUFW(buf,32) = vd->hair_color; @@ -1079,27 +1173,43 @@ static int clif_set_unit_walking(struct block_list* bl, struct unit_data* ud, un WBUFL(buf,38) = status_get_guild_id(bl); WBUFW(buf,42) = status_get_emblem_id(bl); WBUFW(buf,44) = (sd)? sd->status.manner : 0; +#if PACKETVER < 7 + WBUFW(buf,46) = (sc)? sc->opt3 : 0; +#else WBUFL(buf,46) = (sc)? sc->opt3 : 0; offset+=2; //Shift the rest of elements by 2 bytes. buf = WBUFP(buffer,offset); +#endif WBUFB(buf,48) = (sd)? sd->status.karma : 0; WBUFB(buf,49) = vd->sex; WBUFPOS2(buf,50,bl->x,bl->y,ud->to_x,ud->to_y,8,8); WBUFB(buf,56) = (sd)? 5 : 0; WBUFB(buf,57) = (sd)? 5 : 0; WBUFW(buf,58) = clif_setlevel(bl); +#if PACKETVER >= 20080102 WBUFW(buf,60) = sd?sd->user_font:0; - +#endif +#if PACKETVER >= 20091103 memcpy((char*)WBUFP(buf,62), name, NAME_LENGTH); return WBUFW(buffer,2); +#else + return packet_len(WBUFW(buffer,0)); +#endif } //Modifies the buffer for disguise characters and sends it to self. //Used for spawn/walk packets, where the ID offset changes for packetver >=9 static void clif_setdisguise(struct block_list *bl, unsigned char *buf,int len) { +#if PACKETVER >= 20091103 WBUFB(buf,4)= pcdb_checkid(status_get_viewdata(bl)->class_) ? 0x0 : 0x5; //PC_TYPE : NPC_MOB_TYPE WBUFL(buf,5)=-bl->id; +#elif PACKETVER >= 20071106 + WBUFB(buf,2)= pcdb_checkid(status_get_viewdata(bl)->class_) ? 0x0 : 0x5; //PC_TYPE : NPC_MOB_TYPE + WBUFL(buf,3)=-bl->id; +#else + WBUFL(buf,2)=-bl->id; +#endif clif_send(buf, len, bl, SELF); } @@ -1776,8 +1886,10 @@ void clif_sendfakenpc(struct map_session_data *sd, int npcid) buf = WFIFOP(fd,0); memset(WBUFP(buf,0), 0, packet_len(0x78)); WBUFW(buf,0)=0x78; +#if PACKETVER >= 20071106 WBUFB(buf,2) = 0; // object type buf = WFIFOP(fd,1); +#endif WBUFL(buf,2)=npcid; WBUFW(buf,14)=111; WBUFPOS(buf,46,sd->bl.x,sd->bl.y,sd->ud.dir); @@ -1915,9 +2027,9 @@ void clif_viewpoint(struct map_session_data *sd, int npc_id, int type, int x, in WFIFOB(fd,18)=id; WFIFOL(fd,19)=color; WFIFOSET(fd,packet_len(0x144)); - } + /// Displays an illustration image. /// 0145 <image name>.16B <type>.B (ZC_SHOW_IMAGE) /// 01b3 <image name>.64B <type>.B (ZC_SHOW_IMAGE2) @@ -2003,7 +2115,13 @@ static void clif_addcards(unsigned char* buf, struct item* item) void clif_additem(struct map_session_data *sd, int n, int amount, int fail) { int fd; +#if PACKETVER < 20061218 + const int cmd = 0xa0; +#elif PACKETVER < 20071002 + const int cmd = 0x29a; +#else const int cmd = 0x2d4; +#endif nullpo_retv(sd); fd = sd->fd; @@ -2027,8 +2145,12 @@ void clif_additem(struct map_session_data *sd, int n, int amount, int fail) WFIFOW(fd,19)=0; WFIFOB(fd,21)=0; WFIFOB(fd,22)=fail; +#if PACKETVER >= 20061218 WFIFOL(fd,23)=0; +#endif +#if PACKETVER >= 20071002 WFIFOW(fd,27)=0; // unknown +#endif } else { @@ -2049,8 +2171,12 @@ void clif_additem(struct map_session_data *sd, int n, int amount, int fail) WFIFOW(fd,19)=pc_equippoint(sd,n); WFIFOB(fd,21)=itemtype(sd->inventory_data[n]->type); WFIFOB(fd,22)=fail; +#if PACKETVER >= 20061218 WFIFOL(fd,23)=sd->status.inventory[n].expire_time; +#endif +#if PACKETVER >= 20071002 WFIFOW(fd,27)=0; // unknown +#endif } WFIFOSET(fd,packet_len(cmd)); @@ -2087,6 +2213,9 @@ void clif_dropitem(struct map_session_data *sd,int n,int amount) /// 7 = Consumed by Four Spirit Analysis (SO_EL_ANALYSIS) skill void clif_delitem(struct map_session_data *sd,int n,int amount, short reason) { +#if PACKETVER < 20091117 + clif_dropitem(sd,n,amount); +#else int fd; nullpo_retv(sd); @@ -2099,9 +2228,10 @@ void clif_delitem(struct map_session_data *sd,int n,int amount, short reason) WFIFOW(fd,4)=n+2; WFIFOW(fd,6)=amount; WFIFOSET(fd,packet_len(0x7fa)); - +#endif } + // Simplifies inventory/cart/storage packets by handling the packet section relevant to items. [Skotlex] // Equip is >= 0 for equippable items (holds the equip-point, is 0 for pet // armor/egg) -1 for stackable items, -2 for stackable items where arrows must send in the equip-point. @@ -2134,9 +2264,17 @@ void clif_inventorylist(struct map_session_data *sd) int i,n,ne,arrow=-1; unsigned char *buf; unsigned char *bufe; + +#if PACKETVER < 5 + const int s = 10; //Entry size. +#elif PACKETVER < 20080102 + const int s = 18; +#else const int s = 22; - -#if PACKETVER < 20100629 +#endif +#if PACKETVER < 20071002 + const int se = 20; +#elif PACKETVER < 20100629 const int se = 26; #else const int se = 28; @@ -2155,8 +2293,10 @@ void clif_inventorylist(struct map_session_data *sd) WBUFW(bufe,ne*se+4)=i+2; clif_item_sub(bufe, ne*se+6, &sd->status.inventory[i], sd->inventory_data[i], pc_equippoint(sd,i)); clif_addcards(WBUFP(bufe, ne*se+16), &sd->status.inventory[i]); +#if PACKETVER >= 20071002 WBUFL(bufe,ne*se+24)=sd->status.inventory[i].expire_time; WBUFW(bufe,ne*se+28)=0; //Unknown +#endif #if PACKETVER >= 20100629 if (sd->inventory_data[i]->equip&EQP_VISIBLE) WBUFW(bufe,ne*se+30)= sd->inventory_data[i]->look; @@ -2171,14 +2311,24 @@ void clif_inventorylist(struct map_session_data *sd) clif_item_sub(buf, n*s+6, &sd->status.inventory[i], sd->inventory_data[i], -2); if( sd->inventory_data[i]->equip == EQP_AMMO && sd->status.inventory[i].equip ) arrow=i; - clif_addcards(WBUFP(buf, n*s+14), &sd->status.inventory[i]); - WBUFL(buf,n*s+22)=sd->status.inventory[i].expire_time; - n++; - } +#if PACKETVER >= 5 + clif_addcards(WBUFP(buf, n*s+14), &sd->status.inventory[i]); +#endif +#if PACKETVER >= 20080102 + WBUFL(buf,n*s+22)=sd->status.inventory[i].expire_time; +#endif + n++; } + } if( n ) { +#if PACKETVER < 5 + WBUFW(buf,0)=0xa3; +#elif PACKETVER < 20080102 + WBUFW(buf,0)=0x1ee; +#else WBUFW(buf,0)=0x2e8; +#endif WBUFW(buf,2)=4+n*s; clif_send(buf, WBUFW(buf,2), &sd->bl, SELF); } @@ -2187,7 +2337,11 @@ void clif_inventorylist(struct map_session_data *sd) if( ne ) { +#if PACKETVER < 20071002 + WBUFW(bufe,0)=0xa4; +#else WBUFW(bufe,0)=0x2d0; +#endif WBUFW(bufe,2)=4+ne*se; clif_send(bufe, WBUFW(bufe,2), &sd->bl, SELF); } @@ -2201,7 +2355,9 @@ void clif_equiplist(struct map_session_data *sd) { int i,n,fd = sd->fd; unsigned char *buf; -#if PACKETVER < 20100629 +#if PACKETVER < 20071002 + const int cmd = 20; +#elif PACKETVER < 20100629 const int cmd = 26; #else const int cmd = 28; @@ -2220,8 +2376,10 @@ void clif_equiplist(struct map_session_data *sd) WBUFW(buf,n*cmd+4)=i+2; clif_item_sub(buf, n*cmd+6, &sd->status.inventory[i], sd->inventory_data[i], pc_equippoint(sd,i)); clif_addcards(WBUFP(buf, n*cmd+16), &sd->status.inventory[i]); +#if PACKETVER >= 20071002 WBUFL(buf,n*cmd+24)=sd->status.inventory[i].expire_time; WBUFW(buf,n*cmd+28)=0; //Unknown +#endif #if PACKETVER >= 20100629 if (sd->inventory_data[i]->equip&EQP_VISIBLE) WBUFW(buf,n*cmd+30)= sd->inventory_data[i]->look; @@ -2231,7 +2389,11 @@ void clif_equiplist(struct map_session_data *sd) n++; } if (n) { +#if PACKETVER < 20071002 + WBUFW(buf,0)=0xa4; +#else WBUFW(buf,0)=0x2d0; +#endif WBUFW(buf,2)=4+n*cmd; WFIFOSET(fd,WFIFOW(fd,2)); } @@ -2243,8 +2405,16 @@ void clif_storagelist(struct map_session_data* sd, struct item* items, int items int i,n,ne; unsigned char *buf; unsigned char *bufe; +#if PACKETVER < 5 + const int s = 10; //Entry size. +#elif PACKETVER < 20080102 + const int s = 18; +#else const int s = 22; -#if PACKETVER < 20100629 +#endif +#if PACKETVER < 20071002 + const int cmd = 20; +#elif PACKETVER < 20100629 const int cmd = 26; #else const int cmd = 28; @@ -2263,28 +2433,44 @@ void clif_storagelist(struct map_session_data* sd, struct item* items, int items WBUFW(bufe,ne*cmd+4)=i+1; clif_item_sub(bufe, ne*cmd+6, &items[i], id, id->equip); clif_addcards(WBUFP(bufe, ne*cmd+16), &items[i]); +#if PACKETVER >= 20071002 WBUFL(bufe,ne*cmd+24)=items[i].expire_time; WBUFW(bufe,ne*cmd+28)=0; //Unknown +#endif ne++; } else { //Stackable WBUFW(buf,n*s+4)=i+1; clif_item_sub(buf, n*s+6, &items[i], id,-1); +#if PACKETVER >= 5 clif_addcards(WBUFP(buf,n*s+14), &items[i]); +#endif +#if PACKETVER >= 20080102 WBUFL(buf,n*s+22)=items[i].expire_time; +#endif n++; } } if( n ) { +#if PACKETVER < 5 + WBUFW(buf,0)=0xa5; +#elif PACKETVER < 20080102 + WBUFW(buf,0)=0x1f0; +#else WBUFW(buf,0)=0x2ea; +#endif WBUFW(buf,2)=4+n*s; clif_send(buf, WBUFW(buf,2), &sd->bl, SELF); } if( ne ) { +#if PACKETVER < 20071002 + WBUFW(bufe,0)=0xa6; +#else WBUFW(bufe,0)=0x2d1; +#endif WBUFW(bufe,2)=4+ne*cmd; clif_send(bufe, WBUFW(bufe,2), &sd->bl, SELF); } @@ -2299,8 +2485,16 @@ void clif_cartlist(struct map_session_data *sd) int i,n,ne; unsigned char *buf; unsigned char *bufe; +#if PACKETVER < 5 + const int s = 10; //Entry size. +#elif PACKETVER < 20080102 + const int s = 18; +#else const int s = 22; -#if PACKETVER < 20100629 +#endif +#if PACKETVER < 20071002 + const int cmd = 20; +#elif PACKETVER < 20100629 const int cmd = 26; #else const int cmd = 28; @@ -2319,28 +2513,44 @@ void clif_cartlist(struct map_session_data *sd) WBUFW(bufe,ne*cmd+4)=i+2; clif_item_sub(bufe, ne*cmd+6, &sd->status.cart[i], id, id->equip); clif_addcards(WBUFP(bufe, ne*cmd+16), &sd->status.cart[i]); +#if PACKETVER >= 20071002 WBUFL(bufe,ne*cmd+24)=sd->status.cart[i].expire_time; WBUFW(bufe,ne*cmd+28)=0; //Unknown +#endif ne++; } else { //Stackable WBUFW(buf,n*s+4)=i+2; clif_item_sub(buf, n*s+6, &sd->status.cart[i], id,-1); +#if PACKETVER >= 5 clif_addcards(WBUFP(buf,n*s+14), &sd->status.cart[i]); +#endif +#if PACKETVER >= 20080102 WBUFL(buf,n*s+22)=sd->status.cart[i].expire_time; +#endif n++; } } if( n ) { +#if PACKETVER < 5 + WBUFW(buf,0)=0x123; +#elif PACKETVER < 20080102 + WBUFW(buf,0)=0x1ef; +#else WBUFW(buf,0)=0x2e9; +#endif WBUFW(buf,2)=4+n*s; clif_send(buf, WBUFW(buf,2), &sd->bl, SELF); } if( ne ) { - WBUFW(bufe,0)=0x2d2; +#if PACKETVER < 20071002 + WBUFW(bufe,0)=0x122; +#else + WBUFW(bufe,0)=0x2d2; +#endif WBUFW(bufe,2)=4+ne*cmd; clif_send(bufe, WBUFW(bufe,2), &sd->bl, SELF); } @@ -2784,6 +2994,7 @@ void clif_changelook(struct block_list *bl,int type,int val) vd->cloth_color = val; break; case LOOK_SHOES: +#if PACKETVER > 3 if (sd) { int n; if((n = sd->equip_index[2]) >= 0 && sd->inventory_data[n]) { @@ -2794,6 +3005,7 @@ void clif_changelook(struct block_list *bl,int type,int val) } val = 0; } +#endif //Shoes? No packet uses this.... break; case LOOK_BODY: @@ -2813,6 +3025,13 @@ void clif_changelook(struct block_list *bl,int type,int val) if( sc && sc->option&OPTION_INVISIBLE ) target = SELF; +#if PACKETVER < 4 + WBUFW(buf,0)=0xc3; + WBUFL(buf,2)=bl->id; + WBUFB(buf,6)=type; + WBUFB(buf,7)=val; + clif_send(buf,packet_len(0xc3),bl,target); +#else WBUFW(buf,0)=0x1d7; WBUFL(buf,2)=bl->id; if(type == LOOK_WEAPON || type == LOOK_SHIELD) { @@ -2824,31 +3043,47 @@ void clif_changelook(struct block_list *bl,int type,int val) WBUFL(buf,7)=val; } clif_send(buf,packet_len(0x1d7),bl,target); +#endif } //Sends a change-base-look packet required for traps as they are triggered. void clif_changetraplook(struct block_list *bl,int val) { unsigned char buf[32]; +#if PACKETVER < 4 + WBUFW(buf,0)=0xc3; + WBUFL(buf,2)=bl->id; + WBUFB(buf,6)=LOOK_BASE; + WBUFB(buf,7)=val; + clif_send(buf,packet_len(0xc3),bl,AREA); +#else WBUFW(buf,0)=0x1d7; WBUFL(buf,2)=bl->id; WBUFB(buf,6)=LOOK_BASE; WBUFW(buf,7)=val; WBUFW(buf,9)=0; clif_send(buf,packet_len(0x1d7),bl,AREA); +#endif } //For the stupid cloth-dye bug. Resends the given view data to the area specified by bl. void clif_refreshlook(struct block_list *bl,int id,int type,int val,enum send_target target) { unsigned char buf[32]; +#if PACKETVER < 4 + WBUFW(buf,0)=0xc3; + WBUFL(buf,2)=id; + WBUFB(buf,6)=type; + WBUFB(buf,7)=val; + clif_send(buf,packet_len(0xc3),bl,target); +#else WBUFW(buf,0)=0x1d7; WBUFL(buf,2)=id; WBUFB(buf,6)=type; WBUFW(buf,7)=val; WBUFW(buf,9)=0; clif_send(buf,packet_len(0x1d7),bl,target); - return; +#endif } @@ -3104,6 +3339,7 @@ void clif_changeoption(struct block_list* bl) if (!sc) return; //How can an option change if there's no sc? sd = BL_CAST(BL_PC, bl); +#if PACKETVER >= 7 WBUFW(buf,0) = 0x229; WBUFL(buf,2) = bl->id; WBUFW(buf,6) = sc->opt1; @@ -3119,6 +3355,23 @@ void clif_changeoption(struct block_list* bl) clif_send(buf,packet_len(0x229),bl,SELF); } else clif_send(buf,packet_len(0x229),bl,AREA); +#else + WBUFW(buf,0) = 0x119; + WBUFL(buf,2) = bl->id; + WBUFW(buf,6) = sc->opt1; + WBUFW(buf,8) = sc->opt2; + WBUFW(buf,10) = sc->option; + WBUFB(buf,12) = (sd)? sd->status.karma : 0; + if(disguised(bl)) { + clif_send(buf,packet_len(0x119),bl,AREA_WOS); + WBUFL(buf,2) = -bl->id; + clif_send(buf,packet_len(0x119),bl,SELF); + WBUFL(buf,2) = bl->id; + WBUFW(buf,10) = OPTION_INVISIBLE; + clif_send(buf,packet_len(0x119),bl,SELF); + } else + clif_send(buf,packet_len(0x119),bl,AREA); +#endif } @@ -3166,7 +3419,15 @@ void clif_useitemack(struct map_session_data *sd,int index,int amount,bool ok) WFIFOSET(fd,packet_len(0xa8)); } else { - +#if PACKETVER < 3 + int fd=sd->fd; + WFIFOHEAD(fd,packet_len(0xa8)); + WFIFOW(fd,0)=0xa8; + WFIFOW(fd,2)=index+2; + WFIFOW(fd,4)=amount; + WFIFOB(fd,6)=ok; + WFIFOSET(fd,packet_len(0xa8)); +#else unsigned char buf[32]; WBUFW(buf,0)=0x1c8; @@ -3179,6 +3440,7 @@ void clif_useitemack(struct map_session_data *sd,int index,int amount,bool ok) WBUFW(buf,10)=amount; WBUFB(buf,12)=ok; clif_send(buf,packet_len(0x1c8),&sd->bl,AREA); +#endif } } @@ -3414,6 +3676,13 @@ void clif_leavechat(struct chat_data* cd, struct map_session_data* sd, bool flag void clif_traderequest(struct map_session_data* sd, const char* name) { int fd = sd->fd; + +#if PACKETVER < 6 + WFIFOHEAD(fd,packet_len(0xe5)); + WFIFOW(fd,0) = 0xe5; + safestrncpy((char*)WFIFOP(fd,2), name, NAME_LENGTH); + WFIFOSET(fd,packet_len(0xe5)); +#else struct map_session_data* tsd = map_id2sd(sd->trade_partner); if( !tsd ) return; @@ -3423,6 +3692,7 @@ void clif_traderequest(struct map_session_data* sd, const char* name) WFIFOL(fd,26) = tsd->status.char_id; WFIFOW(fd,30) = tsd->status.base_level; WFIFOSET(fd,packet_len(0x1f4)); +#endif } @@ -3440,7 +3710,7 @@ void clif_tradestart(struct map_session_data* sd, uint8 type) { int fd = sd->fd; struct map_session_data* tsd = map_id2sd(sd->trade_partner); - if (!tsd) { + if( PACKETVER < 6 || !tsd ) { WFIFOHEAD(fd,packet_len(0xe7)); WFIFOW(fd,0) = 0xe7; WFIFOB(fd,2) = type; @@ -3634,6 +3904,18 @@ void clif_storageitemadded(struct map_session_data* sd, struct item* i, int inde fd=sd->fd; view = itemdb_viewid(i->nameid); +#if PACKETVER < 5 + WFIFOHEAD(fd,packet_len(0xf4)); + WFIFOW(fd, 0) = 0xf4; // Storage item added + WFIFOW(fd, 2) = index+1; // index + WFIFOL(fd, 4) = amount; // amount + WFIFOW(fd, 8) = ( view > 0 ) ? view : i->nameid; // id + WFIFOB(fd,10) = i->identify; //identify flag + WFIFOB(fd,11) = i->attribute; // attribute + WFIFOB(fd,12) = i->refine; //refine + clif_addcards(WFIFOP(fd,13), i); + WFIFOSET(fd,packet_len(0xf4)); +#else WFIFOHEAD(fd,packet_len(0x1c4)); WFIFOW(fd, 0) = 0x1c4; // Storage item added WFIFOW(fd, 2) = index+1; // index @@ -3645,6 +3927,7 @@ void clif_storageitemadded(struct map_session_data* sd, struct item* i, int inde WFIFOB(fd,13) = i->refine; //refine clif_addcards(WFIFOP(fd,14), i); WFIFOSET(fd,packet_len(0x1c4)); +#endif } @@ -3838,7 +4121,11 @@ int clif_damage(struct block_list* src, struct block_list* dst, unsigned int tic { unsigned char buf[33]; struct status_change *sc; +#if PACKETVER < 20071113 + const int cmd = 0x8a; +#else const int cmd = 0x2e1; +#endif nullpo_ret(src); nullpo_ret(dst); @@ -3858,7 +4145,17 @@ int clif_damage(struct block_list* src, struct block_list* dst, unsigned int tic WBUFL(buf,10)=tick; WBUFL(buf,14)=sdelay; WBUFL(buf,18)=ddelay; - +#if PACKETVER < 20071113 + if (battle_config.hide_woe_damage && map_flag_gvg(src->m)) { + WBUFW(buf,22)=damage?div:0; + WBUFW(buf,27)=damage2?div:0; + } else { + WBUFW(buf,22)=min(damage, INT16_MAX); + WBUFW(buf,27)=damage2; + } + WBUFW(buf,24)=div; + WBUFB(buf,26)=type; +#else if (battle_config.hide_woe_damage && map_flag_gvg(src->m)) { WBUFL(buf,22)=damage?div:0; WBUFL(buf,29)=damage2?div:0; @@ -3868,6 +4165,7 @@ int clif_damage(struct block_list* src, struct block_list* dst, unsigned int tic } WBUFW(buf,26)=div; WBUFB(buf,28)=type; +#endif if(disguised(dst)) { clif_send(buf,packet_len(cmd),dst,AREA_WOS); WBUFL(buf,6) = -dst->id; @@ -3879,8 +4177,13 @@ int clif_damage(struct block_list* src, struct block_list* dst, unsigned int tic WBUFL(buf,2) = -src->id; if (disguised(dst)) WBUFL(buf,6) = dst->id; +#if PACKETVER < 20071113 + if(damage > 0) WBUFW(buf,22) = -1; + if(damage2 > 0) WBUFW(buf,27) = -1; +#else if(damage > 0) WBUFL(buf,22) = -1; if(damage2 > 0) WBUFL(buf,29) = -1; +#endif clif_send(buf,packet_len(cmd),src,SELF); } //Return adjusted can't walk delay for further processing. @@ -4009,6 +4312,7 @@ static void clif_getareachar_skillunit(struct map_session_data *sd, struct skill if( unit->group->state.guildaura ) return; +#if PACKETVER >= 3 if(unit->group->unit_id==UNT_GRAFFITI) { // Graffiti [Valaris] WFIFOHEAD(fd,packet_len(0x1c9)); WFIFOW(fd, 0)=0x1c9; @@ -4023,6 +4327,7 @@ static void clif_getareachar_skillunit(struct map_session_data *sd, struct skill WFIFOSET(fd,packet_len(0x1c9)); return; } +#endif WFIFOHEAD(fd,packet_len(0x11f)); WFIFOW(fd, 0)=0x11f; WFIFOL(fd, 2)=unit->bl.id; @@ -4294,6 +4599,7 @@ void clif_addskill(struct map_session_data *sd, int id) /// 0441 <skill id>.W void clif_deleteskill(struct map_session_data *sd, int id) { +#if PACKETVER >= 20081217 int fd; nullpo_retv(sd); @@ -4304,6 +4610,9 @@ void clif_deleteskill(struct map_session_data *sd, int id) WFIFOW(fd,0) = 0x441; WFIFOW(fd,2) = id; WFIFOSET(fd,packet_len(0x441)); +#else + clif_skillinfoblock(sd); +#endif } @@ -4365,7 +4674,11 @@ void clif_skillinfo(struct map_session_data *sd,int skill, int inf) /// 1 = no text void clif_skillcasting(struct block_list* bl, int src_id, int dst_id, int dst_x, int dst_y, int skill_num, int property, int casttime) { +#if PACKETVER < 20091124 + const int cmd = 0x13e; +#else const int cmd = 0x7fb; +#endif unsigned char buf[32]; WBUFW(buf,0) = cmd; @@ -4376,7 +4689,9 @@ void clif_skillcasting(struct block_list* bl, int src_id, int dst_id, int dst_x, WBUFW(buf,14) = skill_num; WBUFL(buf,16) = property<0?0:property; //Avoid sending negatives as element [Skotlex] WBUFL(buf,20) = casttime; +#if PACKETVER >= 20091124 WBUFB(buf,24) = 0; // isDisposable +#endif if (disguised(bl)) { clif_send(buf,packet_len(cmd), bl, AREA_WOS); @@ -4462,6 +4777,7 @@ void clif_skill_fail(struct map_session_data *sd,int skill_id,enum useskill_fail /// 043d <skill ID>.W <tick>.L void clif_skill_cooldown(struct map_session_data *sd, int skillid, unsigned int tick) { +#if PACKETVER>=20081112 int fd; nullpo_retv(sd); @@ -4472,6 +4788,7 @@ void clif_skill_cooldown(struct map_session_data *sd, int skillid, unsigned int WFIFOW(fd,2) = skillid; WFIFOL(fd,4) = tick; WFIFOSET(fd,packet_len(0x43d)); +#endif } @@ -4493,6 +4810,38 @@ int clif_skill_damage(struct block_list *src,struct block_list *dst,unsigned int damage = damage*(sc->data[SC_HALLUCINATION]->val2) + rnd()%100; } +#if PACKETVER < 3 + WBUFW(buf,0)=0x114; + WBUFW(buf,2)=skill_id; + WBUFL(buf,4)=src->id; + WBUFL(buf,8)=dst->id; + WBUFL(buf,12)=tick; + WBUFL(buf,16)=sdelay; + WBUFL(buf,20)=ddelay; + if (battle_config.hide_woe_damage && map_flag_gvg(src->m)) { + WBUFW(buf,24)=damage?div:0; + } else { + WBUFW(buf,24)=damage; + } + WBUFW(buf,26)=skill_lv; + WBUFW(buf,28)=div; + WBUFB(buf,30)=type; + if (disguised(dst)) { + clif_send(buf,packet_len(0x114),dst,AREA_WOS); + WBUFL(buf,8)=-dst->id; + clif_send(buf,packet_len(0x114),dst,SELF); + } else + clif_send(buf,packet_len(0x114),dst,AREA); + + if(disguised(src)) { + WBUFL(buf,4)=-src->id; + if (disguised(dst)) + WBUFL(buf,8)=dst->id; + if(damage > 0) + WBUFW(buf,24)=-1; + clif_send(buf,packet_len(0x114),src,SELF); + } +#else WBUFW(buf,0)=0x1de; WBUFW(buf,2)=skill_id; WBUFL(buf,4)=src->id; @@ -4523,6 +4872,7 @@ int clif_skill_damage(struct block_list *src,struct block_list *dst,unsigned int WBUFL(buf,24)=-1; clif_send(buf,packet_len(0x1de),src,SELF); } +#endif //Because the damage delay must be synced with the client, here is where the can-walk tick must be updated. [Skotlex] return clif_calc_walkdelay(dst,ddelay,type,damage,div); @@ -4658,6 +5008,7 @@ void clif_skill_setunit(struct skill_unit *unit) if( unit->group->state.guildaura ) return; +#if PACKETVER >= 3 if(unit->group->unit_id==UNT_GRAFFITI) { // Graffiti [Valaris] WBUFW(buf, 0)=0x1c9; WBUFL(buf, 2)=unit->bl.id; @@ -4671,6 +5022,7 @@ void clif_skill_setunit(struct skill_unit *unit) clif_send(buf,packet_len(0x1c9),&unit->bl,AREA); return; } +#endif WBUFW(buf, 0)=0x11f; WBUFL(buf, 2)=unit->bl.id; WBUFL(buf, 6)=unit->group->src_id; @@ -5197,6 +5549,14 @@ void clif_upgrademessage(int fd, int result, int item_id) /// 0097 <packet len>.W <nick>.24B <isAdmin>.L <message>.?B (PACKETVER >= 20091104) void clif_wis_message(int fd, const char* nick, const char* mes, int mes_len) { +#if PACKETVER < 20091104 + WFIFOHEAD(fd, mes_len + NAME_LENGTH + 4); + WFIFOW(fd,0) = 0x97; + WFIFOW(fd,2) = mes_len + NAME_LENGTH + 4; + safestrncpy((char*)WFIFOP(fd,4), nick, NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd,28), mes, mes_len); + WFIFOSET(fd,WFIFOW(fd,2)); +#else WFIFOHEAD(fd, mes_len + NAME_LENGTH + 8); WFIFOW(fd,0) = 0x97; WFIFOW(fd,2) = mes_len + NAME_LENGTH + 8; @@ -5205,6 +5565,7 @@ void clif_wis_message(int fd, const char* nick, const char* mes, int mes_len) // TODO: WFIFOL(fd,28) = pc_get_group_level(ssd); safestrncpy((char*)WFIFOP(fd,32), mes, mes_len); WFIFOSET(fd,WFIFOW(fd,2)); +#endif } @@ -5486,6 +5847,22 @@ void clif_cart_additem(struct map_session_data *sd,int n,int amount,int fail) if(n<0 || n>=MAX_CART || sd->status.cart[n].nameid<=0) return; +#if PACKETVER < 5 + WFIFOHEAD(fd,packet_len(0x124)); + buf=WFIFOP(fd,0); + WBUFW(buf,0)=0x124; + WBUFW(buf,2)=n+2; + WBUFL(buf,4)=amount; + if((view = itemdb_viewid(sd->status.cart[n].nameid)) > 0) + WBUFW(buf,8)=view; + else + WBUFW(buf,8)=sd->status.cart[n].nameid; + WBUFB(buf,10)=sd->status.cart[n].identify; + WBUFB(buf,11)=sd->status.cart[n].attribute; + WBUFB(buf,12)=sd->status.cart[n].refine; + clif_addcards(WBUFP(buf,13), &sd->status.cart[n]); + WFIFOSET(fd,packet_len(0x124)); +#else WFIFOHEAD(fd,packet_len(0x1c5)); buf=WFIFOP(fd,0); WBUFW(buf,0)=0x1c5; @@ -5501,6 +5878,7 @@ void clif_cart_additem(struct map_session_data *sd,int n,int amount,int fail) WBUFB(buf,13)=sd->status.cart[n].refine; clif_addcards(WBUFP(buf,14), &sd->status.cart[n]); WFIFOSET(fd,packet_len(0x1c5)); +#endif } @@ -5874,11 +6252,26 @@ void clif_party_inviteack(struct map_session_data* sd, const char* nick, int res nullpo_retv(sd); fd=sd->fd; +#if PACKETVER < 20070904 + if( result == 7 ) { + clif_displaymessage(fd, msg_txt(3)); + return; + } +#endif + +#if PACKETVER < 20070821 + WFIFOHEAD(fd,packet_len(0xfd)); + WFIFOW(fd,0) = 0xfd; + safestrncpy((char*)WFIFOP(fd,2),nick,NAME_LENGTH); + WFIFOB(fd,26) = result; + WFIFOSET(fd,packet_len(0xfd)); +#else WFIFOHEAD(fd,packet_len(0x2c5)); WFIFOW(fd,0) = 0x2c5; safestrncpy((char*)WFIFOP(fd,2),nick,NAME_LENGTH); WFIFOL(fd,26) = result; WFIFOSET(fd,packet_len(0x2c5)); +#endif } @@ -5896,7 +6289,11 @@ void clif_party_inviteack(struct map_session_data* sd, const char* nick, int res void clif_party_option(struct party_data *p,struct map_session_data *sd,int flag) { unsigned char buf[16]; +#if PACKETVER < 20090603 + const int cmd = 0x101; +#else const int cmd = 0x7d8; +#endif nullpo_retv(p); @@ -5909,8 +6306,10 @@ void clif_party_option(struct party_data *p,struct map_session_data *sd,int flag if(!sd) return; WBUFW(buf,0)=cmd; WBUFL(buf,2)=((flag&0x01)?2:p->party.exp); +#if PACKETVER >= 20090603 WBUFB(buf,6)=(p->party.item&1)?1:0; WBUFB(buf,7)=(p->party.item&2)?1:0; +#endif if(flag==0) clif_send(buf,packet_len(cmd),&sd->bl,PARTY); else @@ -6224,7 +6623,9 @@ void clif_send_petstatus(struct map_session_data *sd) WFIFOW(fd,29)=pet->hungry; WFIFOW(fd,31)=pet->intimate; WFIFOW(fd,33)=pet->equip; +#if PACKETVER >= 20081126 WFIFOW(fd,35)=pet->class_; +#endif WFIFOSET(fd,packet_len(0x1a2)); } @@ -8519,13 +8920,18 @@ void clif_parse_WantToConnection(int fd, TBL_PC* sd) pc_setnewpc(sd, account_id, char_id, login_id1, client_tick, sex, fd); +#if PACKETVER < 20070521 + WFIFOHEAD(fd,4); + WFIFOL(fd,0) = sd->bl.id; + WFIFOSET(fd,4); +#else WFIFOHEAD(fd,packet_len(0x283)); WFIFOW(fd,0) = 0x283; WFIFOL(fd,2) = sd->bl.id; WFIFOSET(fd,packet_len(0x283)); +#endif chrif_authreq(sd); - return; } @@ -8553,7 +8959,12 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) sd->state.warping = 0; // look +#if PACKETVER < 4 + clif_changelook(&sd->bl,LOOK_WEAPON,sd->status.weapon); + clif_changelook(&sd->bl,LOOK_SHIELD,sd->status.shield); +#else clif_changelook(&sd->bl,LOOK_WEAPON,0); +#endif if(sd->vd.cloth_color) clif_refreshlook(&sd->bl,sd->bl.id,LOOK_CLOTHES_COLOR,sd->vd.cloth_color,SELF); @@ -8745,8 +9156,10 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) if( sd->state.changemap ) {// restore information that gets lost on map-change +#if PACKETVER >= 20070918 clif_partyinvitationstate(sd); clif_equipcheckbox(sd); +#endif if( (battle_config.bg_flee_penalty != 100 || battle_config.gvg_flee_penalty != 100) && (map_flag_gvg(sd->state.pmap) || map_flag_gvg(sd->bl.m) || map[sd->state.pmap].flag.battleground || map[sd->bl.m].flag.battleground) ) status_calc_bl(&sd->bl, SCB_FLEE); //Refresh flee penalty @@ -8849,7 +9262,11 @@ void clif_hotkeys_send(struct map_session_data *sd) { #ifdef HOTKEY_SAVING const int fd = sd->fd; int i; - const int cmd = 0x07d9; +#if PACKETVER < 20090603 + const int cmd = 0x2b9; +#else + const int cmd = 0x7d9; +#endif if (!fd) return; WFIFOHEAD(fd, 2+MAX_HOTKEYS*7); WFIFOW(fd, 0) = cmd; @@ -12307,7 +12724,11 @@ void clif_parse_FriendsListReply(int fd, struct map_session_data *sd) account_id = RFIFOL(fd,2); char_id = RFIFOL(fd,6); +#if PACKETVER < 6 + reply = RFIFOB(fd,10); +#else reply = RFIFOL(fd,10); +#endif if( sd->bl.id == account_id ) {// adding oneself as friend @@ -13612,7 +14033,11 @@ void clif_parse_Auction_buysell(int fd, struct map_session_data* sd) void clif_cashshop_show(struct map_session_data *sd, struct npc_data *nd) { int fd,i; +#if PACKETVER < 20070711 + const int offset = 8; +#else const int offset = 12; +#endif nullpo_retv(sd); nullpo_retv(nd); @@ -13623,7 +14048,9 @@ void clif_cashshop_show(struct map_session_data *sd, struct npc_data *nd) WFIFOW(fd,0) = 0x287; WFIFOW(fd,2) = offset+nd->u.shop.count*11; WFIFOL(fd,4) = sd->cashPoints; // Cash Points +#if PACKETVER >= 20070711 WFIFOL(fd,8) = sd->kafraPoints; // Kafra Points +#endif for( i = 0; i < nd->u.shop.count; i++ ) { @@ -13657,8 +14084,12 @@ void clif_cashshop_ack(struct map_session_data* sd, int error) WFIFOHEAD(fd, packet_len(0x289)); WFIFOW(fd,0) = 0x289; WFIFOL(fd,2) = sd->cashPoints; +#if PACKETVER < 20070711 + WFIFOW(fd,6) = TOW(error); +#else WFIFOL(fd,6) = sd->kafraPoints; WFIFOW(fd,10) = TOW(error); +#endif WFIFOSET(fd, packet_len(0x289)); } @@ -14020,6 +14451,7 @@ void clif_quest_update_status(struct map_session_data * sd, int quest_id, bool a /// 3 = purple void clif_quest_show_event(struct map_session_data *sd, struct block_list *bl, short state, short color) { +#if PACKETVER >= 20090218 int fd = sd->fd; WFIFOHEAD(fd, packet_len(0x446)); @@ -14030,6 +14462,7 @@ void clif_quest_show_event(struct map_session_data *sd, struct block_list *bl, s WFIFOW(fd, 10) = state; WFIFOW(fd, 12) = color; WFIFOSET(fd, packet_len(0x446)); +#endif } @@ -14538,6 +14971,7 @@ void clif_instance_leave(int fd) /// 02b8 <account id>.L <name id>.W <identified>.B <damaged>.B <refine>.B <card1>.W <card2>.W <card3>.W <card4>.W <equip location>.W <item type>.B void clif_party_show_picker(struct map_session_data * sd, struct item * item_data) { +#if PACKETVER >= 20071002 unsigned char buf[22]; struct item_data* id = itemdb_search(item_data->nameid); @@ -14551,6 +14985,7 @@ void clif_party_show_picker(struct map_session_data * sd, struct item * item_dat WBUFW(buf,19) = id->equip; // equip location WBUFB(buf,21) = itemtype(id->type); // item type clif_send(buf, packet_len(0x2b8), &sd->bl, PARTY_SAMEMAP_WOS); +#endif } @@ -15587,8 +16022,20 @@ static int packetdb_readdb(void) //#0x0040 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +#if PACKETVER <= 20081217 + 0, 0, 0, 0, 55, 17, 3, 37, 46, -1, 23, -1, 3,110, 3, 2, +#else 0, 0, 0, 0, 55, 17, 3, 37, 46, -1, 23, -1, 3,114, 3, 2, +#endif +#if PACKETVER < 2 + 3, 28, 19, 11, 3, -1, 9, 5, 52, 51, 56, 58, 41, 2, 6, 6, +#elif PACKETVER < 20071106 // 78-7b 亀島以降 lv99エフェクト用 + 3, 28, 19, 11, 3, -1, 9, 5, 54, 53, 58, 60, 41, 2, 6, 6, +#elif PACKETVER <= 20081217 // change in 0x78 and 0x7c + 3, 28, 19, 11, 3, -1, 9, 5, 55, 53, 58, 60, 42, 2, 6, 6, +#else 3, 28, 19, 11, 3, -1, 9, 5, 55, 53, 58, 60, 44, 2, 6, 6, +#endif //#0x0080 7, 3, 2, 2, 2, 5, 16, 12, 10, 7, 29, 2, -1, -1, -1, 0, // 0x8b changed to 2 (was 23) 7, 22, 28, 2, 6, 30, -1, -1, 3, -1, -1, 5, 9, 17, 17, 6, @@ -15615,10 +16062,16 @@ static int packetdb_readdb(void) 14, 30, 10, 3, -1, 6,106, -1, 4, 5, 4, -1, 6, 7, -1, -1, //#0x0180 6, 3,106, 10, 10, 34, 0, 6, 8, 4, 4, 4, 29, -1, 10, 6, - // 196 comodo以降 状態表示アイコン用 +#if PACKETVER < 1 + 90, 86, 24, 6, 30,102, 8, 4, 8, 4, 14, 10, -1, 6, 2, 6, +#else // 196 comodo以降 状態表示アイコン用 90, 86, 24, 6, 30,102, 9, 4, 8, 4, 14, 10, -1, 6, 2, 6, - // 0x1a2 changed (35->37) +#endif +#if PACKETVER < 20081126 + 3, 3, 35, 5, 11, 26, -1, 4, 4, 6, 10, 12, 6, -1, 4, 4, +#else // 0x1a2 changed (35->37) 3, 3, 37, 5, 11, 26, -1, 4, 4, 6, 10, 12, 6, -1, 4, 4, +#endif 11, 7, -1, 67, 12, 18,114, 6, 3, 6, 26, 26, 26, 26, 2, 3, //#0x01C0, Set 0x1d5=-1 2, 14, 10, -1, 22, 22, 4, 2, 13, 97, 3, 9, 9, 30, 6, 28, @@ -15628,8 +16081,11 @@ static int packetdb_readdb(void) //#0x0200 26, -1, 26, 10, 18, 26, 11, 34, 14, 36, 10, 0, 0, -1, 32, 10, // 0x20c change to 0 (was 19) 22, 0, 26, 26, 42, 6, 6, 2, 2,282,282, 10, 10, -1, -1, 66, - // 0x22c changed +#if PACKETVER < 20071106 + 10, -1, -1, 8, 10, 2,282, 18, 18, 15, 58, 57, 64, 5, 71, 5, +#else // 0x22c changed 10, -1, -1, 8, 10, 2,282, 18, 18, 15, 58, 57, 65, 5, 71, 5, +#endif 12, 26, 9, 11, -1, -1, 10, 2,282, 11, 4, 36, 6, -1, 4, 2, //#0x0240 -1, -1, -1, -1, -1, 3, 4, 8, -1, 3, 70, 4, 8, 12, 4, 10, @@ -15637,9 +16093,13 @@ static int packetdb_readdb(void) 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //#0x0280 +#if PACKETVER < 20070711 + 0, 0, 0, 6, 14, 0, 0, -1, 6, 8, 18, 0, 0, 0, 0, 0, +#else 0, 0, 0, 6, 14, 0, 0, -1, 10, 12, 18, 0, 0, 0, 0, 0, // 0x288, 0x289 increase by 4 (kafra points) - 0, 4, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +#endif + 0, 4, 0, 70, 10, 0, 0, 0, 8, 6, 27, 80, 0, -1, 0, 0, + 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, -1, -1,107, 6, -1, 7, 7, 22,191, 0, 0, 0, 0, 0, 0, //#0x02C0 0, -1, 0, 0, 0, 30, 30, 0, 0, 3, 0, 65, 4, 71, 10, 0, @@ -15743,13 +16203,19 @@ static int packetdb_readdb(void) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //#0x07C0 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - // 0x7d9 changed +#if PACKETVER < 20090617 + 6, 2, -1, 4, 4, 4, 4, 8, 8,254, 6, 8, 6, 54, 30, 54, +#else // 0x7d9 changed 6, 2, -1, 4, 4, 4, 4, 8, 8,268, 6, 8, 6, 54, 30, 54, - 0, 15, 8, 6, -1, 8, 8, 32, -1, 5, 0, 0, 0, 0, 0, 0, +#endif + 0, 15, 8, 0, 0, 8, 8, 32, -1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, -1, -1, -1, 8, 25, 0, 0, 26, 0, //#0x0800 - // for Party booking ( PACKETVER >= 20091229 ) +#if PACKETVER < 20091229 + -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 20, +#else // for Party booking ( PACKETVER >= 20091229 ) -1, -1, 18, 4, 8, 6, 2, 4, 14, 50, 18, 6, 2, 3, 14, 20, +#endif 3, -1, 8, -1, 86, 2, 6, 6, -1, -1, 4, 10, 10, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 3, 2, 66, 5, 2, 12, 6, 0, 0, |