Fixed an issue with guild storage log (#5138)
Fixes #5115 Thanks to @Angelic234 and all others
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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 )
|
||||
|
||||
@@ -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 );
|
||||
|
||||
|
||||
Reference in New Issue
Block a user