Cleaned up ZC_INVENTORY_TAB (#8217)

Co-authored-by: Atemo <Atemo@users.noreply.github.com>
This commit is contained in:
Lemongrass3110 2024-04-04 08:42:19 +02:00 committed by GitHub
parent 4f82aff8fd
commit 8745391ad4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 44 additions and 30 deletions

View File

@ -86,6 +86,7 @@ unsigned long color_table[COLOR_MAX];
#include "clif_obfuscation.hpp"
static bool clif_session_isValid(map_session_data *sd);
static void clif_loadConfirm( map_session_data *sd );
static void clif_favorite_item( map_session_data& sd, uint16 index );
#if PACKETVER >= 20150513
enum mail_type {
@ -3007,7 +3008,6 @@ static void clif_inventoryEnd( map_session_data *sd, e_inventory_type type ){
#endif
}
void clif_favorite_item(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( map_session_data *sd ){
nullpo_retv( sd );
@ -3093,7 +3093,7 @@ void clif_inventorylist( map_session_data *sd ){
continue;
if ( sd->inventory.u.items_inventory[i].favorite )
clif_favorite_item(sd, i);
clif_favorite_item( *sd, i );
}
#endif
}
@ -19730,49 +19730,52 @@ void clif_spiritcharm(map_session_data *sd) {
}
/// Move Item from or to Personal Tab (CZ_WHATSOEVER) [FE]
/// 0907 <index>.W
///
/// R 0908 <index>.w <type>.b
/// Move Item from or to Personal Tab
/// 0907 <index>.W <type>.B (CZ_INVENTORY_TAB)
/// type:
/// 0 = move item to personal tab
/// 1 = move item to normal tab
void clif_parse_MoveItem(int fd, map_session_data *sd) {
#if PACKETVER >= 20111122
struct s_packet_db* info = &packet_db[RFIFOW(fd,0)];
int index = RFIFOW(fd,info->pos[0]) - 2;
int type = RFIFOB(fd, info->pos[1]);
void clif_parse_MoveItem( int fd, map_session_data* sd ){
// TODO: Check for correct packet version
#if PACKETVER >= 20120410
/* can't move while dead. */
if(pc_isdead(sd)) {
return;
}
if (index < 0 || index >= MAX_INVENTORY)
return;
PACKET_CZ_INVENTORY_TAB* p = (PACKET_CZ_INVENTORY_TAB*)RFIFOP( fd, 0 );
if ( sd->inventory.u.items_inventory[index].favorite && type == 1 )
uint16 index = server_index( p->index );
if( index >= MAX_INVENTORY ){
return;
}
if ( sd->inventory.u.items_inventory[index].favorite && p->favorite == true )
sd->inventory.u.items_inventory[index].favorite = 0;
else if( type == 0 )
else if( p->favorite == false )
sd->inventory.u.items_inventory[index].favorite = 1;
else
return;/* nothing to do. */
clif_favorite_item(sd, index);
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(map_session_data* sd, unsigned short index) {
int fd = sd->fd;
/// Items that are in favorite tab of inventory.
/// 0908 <index>.W <favorite>.B (ZC_INVENTORY_TAB)
static void clif_favorite_item( map_session_data& sd, uint16 index ){
// TODO: Check for correct packet version
#if PACKETVER >= 20111122
PACKET_ZC_INVENTORY_TAB p = {};
WFIFOHEAD(fd,packet_len(0x908));
WFIFOW(fd,0) = 0x908;
WFIFOW(fd,2) = index+2;
WFIFOL(fd,4) = (sd->inventory.u.items_inventory[index].favorite == 1) ? 0 : 1;
WFIFOSET(fd,packet_len(0x908));
p.packetType = HEADER_ZC_INVENTORY_TAB;
p.index = client_index( index );
p.favorite = ( sd.inventory.u.items_inventory[index].favorite == true ) ? false : true;
clif_send( &p, sizeof( p ), &sd.bl, SELF );
#endif
}

View File

@ -1896,8 +1896,7 @@
packet(0x08f9,6);
packet(0x08fa,6);
parseable_packet(0x08fb,6,NULL,2);
parseable_packet(0x0907,5,clif_parse_MoveItem,2,4);
packet(0x0908,5);
parseable_packet( HEADER_CZ_INVENTORY_TAB, sizeof( PACKET_CZ_INVENTORY_TAB ), clif_parse_MoveItem, 0 );
parseable_packet(0x08D7,28,clif_parse_bg_queue_apply_request,2,4);
packet(0x08D8,27);
packet(0x08D9,30);
@ -2005,8 +2004,6 @@
parseable_packet(0x08c9,2,clif_parse_cashshop_list_request,0);
packet(0x08cf,10); //Amulet spirits
packet(0x08d2,10);
parseable_packet(0x0907,5,clif_parse_MoveItem,2,4);
packet(0x0908,5);
parseable_packet(0x0922,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
//parseable_packet(0x092e,2,clif_parse_SearchStoreInfoNextPage,0);
parseable_packet(0x0933,6,clif_parse_TakeItem,2);

View File

@ -415,6 +415,18 @@ struct PACKET_ZC_BOSS_INFO{
char name[51];
} __attribute__((packed));
struct PACKET_CZ_INVENTORY_TAB{
int16 packetType;
int16 index;
bool favorite;
} __attribute__((packed));
struct PACKET_ZC_INVENTORY_TAB{
int16 packetType;
int16 index;
bool favorite;
} __attribute__((packed));
// NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
#if !defined( sun ) && ( !defined( __NETBSD__ ) || __NetBSD_Version__ >= 600000000 )
#pragma pack( pop )
@ -452,6 +464,8 @@ DEFINE_PACKET_HEADER(CZ_REQ_SE_CASH_TAB_CODE, 0x846)
DEFINE_PACKET_HEADER(ZC_ACK_SE_CASH_ITEM_LIST2, 0x8c0)
DEFINE_PACKET_HEADER(ZC_ACK_SCHEDULER_CASHITEM, 0x8ca)
DEFINE_PACKET_HEADER(ZC_CLEAR_DIALOG, 0x8d6)
DEFINE_PACKET_HEADER(CZ_INVENTORY_TAB, 0x907)
DEFINE_PACKET_HEADER(ZC_INVENTORY_TAB, 0x908)
DEFINE_PACKET_HEADER(ZC_ENTRY_QUEUE_INIT, 0x90e)
DEFINE_PACKET_HEADER(CZ_REQ_MERGE_ITEM, 0x96e)
DEFINE_PACKET_HEADER(ZC_BANKING_CHECK, 0x9a6)