Fixed an issue with guild storage log (#5138)

Fixes #5115

Thanks to @Angelic234 and all others
This commit is contained in:
Lemongrass3110
2020-06-24 22:36:55 +02:00
committed by GitHub
parent 00d6014c8c
commit 5ef29be68e
3 changed files with 26 additions and 23 deletions

View File

@@ -21016,23 +21016,26 @@ void clif_guild_storage_log( struct map_session_data* sd, std::vector<struct gui
#if PACKETVER >= 20140205
nullpo_retv( sd );
static struct PACKET_ZC_ACK_GUILDSTORAGE_LOG guild_storage_log;
int size = sizeof( struct PACKET_ZC_ACK_GUILDSTORAGE_LOG );
int fd = sd->fd;
int16 size = sizeof( struct PACKET_ZC_ACK_GUILDSTORAGE_LOG );
if( result == GUILDSTORAGE_LOG_FINAL_SUCCESS ){
size = log.size() * sizeof( struct PACKET_ZC_ACK_GUILDSTORAGE_LOG_sub );
size += log.size() * sizeof( struct PACKET_ZC_ACK_GUILDSTORAGE_LOG_sub );
}else{
log.clear();
}
guild_storage_log.packetType = HEADER_ZC_ACK_GUILDSTORAGE_LOG;
guild_storage_log.PacketLength = size;
guild_storage_log.result = result;
guild_storage_log.amount = (uint16)log.size();
WFIFOHEAD( fd, size );
struct PACKET_ZC_ACK_GUILDSTORAGE_LOG *p = (struct PACKET_ZC_ACK_GUILDSTORAGE_LOG*)WFIFOP( fd, 0 );
p->packetType = HEADER_ZC_ACK_GUILDSTORAGE_LOG;
p->PacketLength = size;
p->result = result;
p->amount = (uint16)log.size();
if( result == GUILDSTORAGE_LOG_FINAL_SUCCESS ){
for( int i = 0; i < log.size(); i++ ){
struct PACKET_ZC_ACK_GUILDSTORAGE_LOG_sub* item = &guild_storage_log.items[i];
struct PACKET_ZC_ACK_GUILDSTORAGE_LOG_sub* item = &p->items[i];
struct guild_log_entry& entry = log[i];
item->id = entry.id;
@@ -21050,7 +21053,7 @@ void clif_guild_storage_log( struct map_session_data* sd, std::vector<struct gui
}
}
clif_send( &guild_storage_log, guild_storage_log.PacketLength, &sd->bl, SELF );
WFIFOSET( fd, p->PacketLength );
#endif
}

View File

@@ -26,18 +26,6 @@
#include "packets_struct.hpp"
const int16 MAX_INVENTORY_ITEM_PACKET_NORMAL = ( ( INT16_MAX - ( sizeof( struct packet_itemlist_normal ) - ( sizeof( struct NORMALITEM_INFO ) * MAX_ITEMLIST) ) ) / sizeof( struct NORMALITEM_INFO ) );
const int16 MAX_INVENTORY_ITEM_PACKET_EQUIP = ( ( INT16_MAX - ( sizeof( struct packet_itemlist_equip ) - ( sizeof( struct EQUIPITEM_INFO ) * MAX_ITEMLIST ) ) ) / sizeof( struct EQUIPITEM_INFO ) );
const int16 MAX_STORAGE_ITEM_PACKET_NORMAL = ( ( INT16_MAX - ( sizeof( struct ZC_STORE_ITEMLIST_NORMAL ) - ( sizeof( struct NORMALITEM_INFO ) * MAX_ITEMLIST) ) ) / sizeof( struct NORMALITEM_INFO ) );
const int16 MAX_STORAGE_ITEM_PACKET_EQUIP = ( ( INT16_MAX - ( sizeof( struct ZC_STORE_ITEMLIST_EQUIP ) - ( sizeof( struct EQUIPITEM_INFO ) * MAX_ITEMLIST ) ) ) / sizeof( struct EQUIPITEM_INFO ) );
#undef MAX_ITEM_OPTIONS
#undef UNAVAILABLE_STRUCT
#undef MAX_ITEMLIST
#undef MAX_ACHIEVEMENT_DB
#undef MAX_PACKET_POS
// NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
#if !defined( sun ) && ( !defined( __NETBSD__ ) || __NetBSD_Version__ >= 600000000 )
#pragma pack( push, 1 )
@@ -190,6 +178,19 @@ DEFINE_PACKET_HEADER(ZC_ACK_COUNT_BARGAIN_SALE_ITEM, 0x9c4)
DEFINE_PACKET_HEADER(ZC_ACK_GUILDSTORAGE_LOG, 0x9da)
DEFINE_PACKET_HEADER(CZ_REQ_APPLY_BARGAIN_SALE_ITEM2, 0xa3d)
const int16 MAX_INVENTORY_ITEM_PACKET_NORMAL = ( ( INT16_MAX - ( sizeof( struct packet_itemlist_normal ) - ( sizeof( struct NORMALITEM_INFO ) * MAX_ITEMLIST) ) ) / sizeof( struct NORMALITEM_INFO ) );
const int16 MAX_INVENTORY_ITEM_PACKET_EQUIP = ( ( INT16_MAX - ( sizeof( struct packet_itemlist_equip ) - ( sizeof( struct EQUIPITEM_INFO ) * MAX_ITEMLIST ) ) ) / sizeof( struct EQUIPITEM_INFO ) );
const int16 MAX_STORAGE_ITEM_PACKET_NORMAL = ( ( INT16_MAX - ( sizeof( struct ZC_STORE_ITEMLIST_NORMAL ) - ( sizeof( struct NORMALITEM_INFO ) * MAX_ITEMLIST) ) ) / sizeof( struct NORMALITEM_INFO ) );
const int16 MAX_STORAGE_ITEM_PACKET_EQUIP = ( ( INT16_MAX - ( sizeof( struct ZC_STORE_ITEMLIST_EQUIP ) - ( sizeof( struct EQUIPITEM_INFO ) * MAX_ITEMLIST ) ) ) / sizeof( struct EQUIPITEM_INFO ) );
const int16 MAX_GUILD_STORAGE_LOG_PACKET = ( ( INT16_MAX - sizeof( struct PACKET_ZC_ACK_GUILDSTORAGE_LOG ) ) / sizeof( struct PACKET_ZC_ACK_GUILDSTORAGE_LOG_sub ) );
#undef MAX_ITEM_OPTIONS
#undef UNAVAILABLE_STRUCT
#undef MAX_ITEMLIST
#undef MAX_ACHIEVEMENT_DB
#undef MAX_PACKET_POS
#undef DEFINE_PACKET_HEADER
#pragma warning( pop )

View File

@@ -742,8 +742,7 @@ enum e_guild_storage_log storage_guild_log_read_sub( struct map_session_data* sd
enum e_guild_storage_log storage_guild_log_read( struct map_session_data* sd ){
std::vector<struct guild_log_entry> log;
// ( maximum packet size - header size ) / entry size ) - 1 (for safety)
enum e_guild_storage_log ret = storage_guild_log_read_sub( sd, log, ( ( UINT16_MAX - sizeof( struct PACKET_ZC_ACK_GUILDSTORAGE_LOG ) ) / sizeof( struct PACKET_ZC_ACK_GUILDSTORAGE_LOG_sub ) ) - 1 );
enum e_guild_storage_log ret = storage_guild_log_read_sub( sd, log, MAX_GUILD_STORAGE_LOG_PACKET );
clif_guild_storage_log( sd, log, ret );