diff options
author | shennetsind <shennetsind@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2012-07-28 03:22:47 +0000 |
---|---|---|
committer | shennetsind <shennetsind@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2012-07-28 03:22:47 +0000 |
commit | 95a4d6754449522d3eceacce0f602e206a38b511 (patch) | |
tree | 1220c1ae06e770eef9451009bb08876ba18e5b4e /src/map/clif.c | |
parent | 8dc6db3cd509c8f3e9a14f109afb3d0e95331a5d (diff) | |
download | hercules-95a4d6754449522d3eceacce0f602e206a38b511.tar.gz hercules-95a4d6754449522d3eceacce0f602e206a38b511.tar.bz2 hercules-95a4d6754449522d3eceacce0f602e206a38b511.tar.xz hercules-95a4d6754449522d3eceacce0f602e206a38b511.zip |
Added support for the "favorite item tab" feature. super-mega-thanks to Judas, credits to Fatal Error.
Be aware this update requires a new column in the inventory db, run upgrade_svn16517.sql in your database.
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@16518 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map/clif.c')
-rw-r--r-- | src/map/clif.c | 54 |
1 files changed, 52 insertions, 2 deletions
diff --git a/src/map/clif.c b/src/map/clif.c index 0bbeb9361..25b53686a 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -2279,7 +2279,7 @@ void clif_item_sub(unsigned char *buf, int n, struct item *i, struct item_data * } } - +void clif_favorite_item(struct map_session_data* sd, unsigned short index); //Unified inventory function which sends all of the inventory (requires two packets, one for equipable items and one for stackable ones. [Skotlex] void clif_inventorylist(struct map_session_data *sd) { @@ -2367,7 +2367,16 @@ void clif_inventorylist(struct map_session_data *sd) WBUFW(bufe,2)=4+ne*se; clif_send(bufe, WBUFW(bufe,2), &sd->bl, SELF); } - +#if PACKETVER >= 20111122 + for( i = 0; i < MAX_INVENTORY; i++ ) { + if( sd->status.inventory[i].nameid <= 0 || sd->inventory_data[i] == NULL ) + continue; + + if ( sd->status.inventory[i].favorite ) + clif_favorite_item(sd, i); + } +#endif + if( buf ) aFree(buf); if( bufe ) aFree(bufe); } @@ -16115,6 +16124,45 @@ void clif_parse_SkillSelectMenu(int fd, struct map_session_data *sd) { clif_menuskill_clear(sd); } +/// Move Item from or to Personal Tab (CZ_WHATSOEVER) [FE] +/// 0907 <index>.W +/// +/// R 0908 <index>.w <type>.b +/// type: +/// 0 = move item to personal tab +/// 1 = move item to normal tab +void clif_parse_MoveItem(int fd, struct map_session_data *sd) { +#if PACKETVER >= 20111122 + int index; + + if(pc_isdead(sd)) { + return; + } + index = RFIFOW(fd,2)-2; + if (index < 0 || index >= MAX_INVENTORY) + return; + if (sd->status.inventory[index].favorite && sd->status.inventory[index].favorite == 1) + sd->status.inventory[index].favorite = 0; + else + sd->status.inventory[index].favorite = 1; + + clif_favorite_item(sd, index); +#endif +} + + +/// Items that are in favorite tab of inventory (ZC_ITEM_FAVORITE). +/// 0900 <index>.W <favorite>.B +void clif_favorite_item(struct map_session_data* sd, unsigned short index) { + int fd = sd->fd; + + WFIFOHEAD(fd,packet_len(0x908)); + WFIFOW(fd,0) = 0x908; + WFIFOW(fd,2) = index+2; + WFIFOL(fd,4) = (sd->status.inventory[index].favorite == 1) ? 0 : 1; + WFIFOSET(fd,packet_len(0x908)); +} + /*========================================== * Main client packet processing function *------------------------------------------*/ @@ -16711,6 +16759,8 @@ static int packetdb_readdb(void) {clif_parse_SearchStoreInfoNextPage,"searchstoreinfonextpage"}, {clif_parse_CloseSearchStoreInfo,"closesearchstoreinfo"}, {clif_parse_SearchStoreInfoListItemClick,"searchstoreinfolistitemclick"}, + /* */ + { clif_parse_MoveItem , "moveitem" }, {NULL,NULL} }; |