From aef1bed593cd6ac2b6a75bbfadfa1f338b35c754 Mon Sep 17 00:00:00 2001 From: Nefertumm Date: Thu, 17 Feb 2022 21:22:28 -0300 Subject: [PATCH] fix(Core/Guild): Guild bank handling issues (#10724) * fix(Core/Guild): Guild bank right issues * and slots too --- src/server/game/Guilds/Guild.h | 6 +++--- src/server/game/Handlers/GuildHandler.cpp | 12 ++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h index d38f5c3b9..df5c288e0 100644 --- a/src/server/game/Guilds/Guild.h +++ b/src/server/game/Guilds/Guild.h @@ -279,9 +279,9 @@ public: void SetSlots(uint32 _slots) { slots = _slots; } void SetRights(uint8 _rights) { rights = _rights; } - int8 GetTabId() const { return tabId; } - int32 GetSlots() const { return slots; } - int8 GetRights() const { return rights; } + uint8 GetTabId() const { return tabId; } + uint32 GetSlots() const { return slots; } + uint8 GetRights() const { return rights; } private: uint8 tabId; diff --git a/src/server/game/Handlers/GuildHandler.cpp b/src/server/game/Handlers/GuildHandler.cpp index 3006ac64a..a3049eaa0 100644 --- a/src/server/game/Handlers/GuildHandler.cpp +++ b/src/server/game/Handlers/GuildHandler.cpp @@ -180,11 +180,23 @@ void WorldSession::HandleGuildRankOpcode(WorldPackets::Guild::GuildSetRankPermis for (uint8 tabId = 0; tabId < GUILD_BANK_MAX_TABS; ++tabId) { + // For some reason the client is sending - 1 for guildmaster tab withdraw item limit, that's ilegal for us because we expect unsigned int. + // Probably core handling for this should be changed. + if (packet.TabWithdrawItemLimit[tabId] <= 0) + { + packet.TabWithdrawItemLimit[tabId] = uint32(GUILD_WITHDRAW_SLOT_UNLIMITED); + } rightsAndSlots[tabId] = GuildBankRightsAndSlots(tabId, uint8(packet.TabFlags[tabId]), packet.TabWithdrawItemLimit[tabId]); } LOG_DEBUG("guild", "CMSG_GUILD_RANK [{}]: Rank: {} ({})", GetPlayerInfo(), packet.RankName, packet.RankID); + // Same as the issue above but this time with rights. + if (packet.Flags <= 0) + { + packet.Flags = GUILD_BANK_RIGHT_FULL; + } + guild->HandleSetRankInfo(this, packet.RankID, packet.RankName, packet.Flags, packet.WithdrawGoldLimit, rightsAndSlots); }