mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-26 15:16:24 +00:00
committed by
GitHub
parent
fad214efe0
commit
3591f69662
@@ -5524,7 +5524,7 @@ void Player::SendMessageToSetInRange_OwnTeam(WorldPacket* data, float dist, bool
|
||||
Cell::VisitWorldObjects(this, notifier, dist);
|
||||
}
|
||||
|
||||
void Player::SendDirectMessage(WorldPacket* data)
|
||||
void Player::SendDirectMessage(WorldPacket const* data) const
|
||||
{
|
||||
m_session->SendPacket(data);
|
||||
}
|
||||
|
||||
@@ -2175,7 +2175,7 @@ public:
|
||||
|
||||
void SendInitWorldStates(uint32 zone, uint32 area);
|
||||
void SendUpdateWorldState(uint32 Field, uint32 Value);
|
||||
void SendDirectMessage(WorldPacket* data);
|
||||
void SendDirectMessage(WorldPacket const* data) const;
|
||||
void SendBGWeekendWorldStates();
|
||||
void SendBattlefieldWorldStates();
|
||||
|
||||
|
||||
@@ -7649,7 +7649,7 @@ void ObjectMgr::LoadReservedPlayersNames()
|
||||
LOG_INFO("server.loading", " ");
|
||||
}
|
||||
|
||||
bool ObjectMgr::IsReservedName(const std::string& name) const
|
||||
bool ObjectMgr::IsReservedName(std::string_view name) const
|
||||
{
|
||||
// pussywizard
|
||||
if (name.size() >= 2 && (name[name.size() - 2] == 'G' || name[name.size() - 2] == 'g') && (name[name.size() - 1] == 'M' || name[name.size() - 1] == 'm'))
|
||||
@@ -7757,7 +7757,7 @@ bool isValidString(std::wstring wstr, uint32 strictMask, bool numericOrSpace, bo
|
||||
return false;
|
||||
}
|
||||
|
||||
uint8 ObjectMgr::CheckPlayerName(const std::string& name, bool create)
|
||||
uint8 ObjectMgr::CheckPlayerName(std::string_view name, bool create)
|
||||
{
|
||||
std::wstring wname;
|
||||
if (!Utf8toWStr(name, wname))
|
||||
@@ -7782,7 +7782,7 @@ uint8 ObjectMgr::CheckPlayerName(const std::string& name, bool create)
|
||||
return CHAR_NAME_SUCCESS;
|
||||
}
|
||||
|
||||
bool ObjectMgr::IsValidCharterName(const std::string& name)
|
||||
bool ObjectMgr::IsValidCharterName(std::string_view name)
|
||||
{
|
||||
std::wstring wname;
|
||||
if (!Utf8toWStr(name, wname))
|
||||
@@ -7814,7 +7814,7 @@ bool ObjectMgr::IsValidChannelName(const std::string& name)
|
||||
return isValidString(wname, strictMask, true);
|
||||
}
|
||||
|
||||
PetNameInvalidReason ObjectMgr::CheckPetName(const std::string& name)
|
||||
PetNameInvalidReason ObjectMgr::CheckPetName(std::string_view name)
|
||||
{
|
||||
std::wstring wname;
|
||||
if (!Utf8toWStr(name, wname))
|
||||
|
||||
@@ -1266,13 +1266,13 @@ public:
|
||||
|
||||
// reserved names
|
||||
void LoadReservedPlayersNames();
|
||||
[[nodiscard]] bool IsReservedName(std::string const& name) const;
|
||||
[[nodiscard]] bool IsReservedName(std::string_view name) const;
|
||||
void AddReservedPlayerName(std::string const& name);
|
||||
|
||||
// name with valid structure and symbols
|
||||
static uint8 CheckPlayerName(std::string const& name, bool create = false);
|
||||
static PetNameInvalidReason CheckPetName(std::string const& name);
|
||||
static bool IsValidCharterName(std::string const& name);
|
||||
static uint8 CheckPlayerName(std::string_view name, bool create = false);
|
||||
static PetNameInvalidReason CheckPetName(std::string_view name);
|
||||
static bool IsValidCharterName(std::string_view name);
|
||||
static bool IsValidChannelName(std::string const& name);
|
||||
|
||||
static bool CheckDeclinedNames(std::wstring w_ownname, DeclinedName const& names);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -21,11 +21,25 @@
|
||||
#include "Item.h"
|
||||
#include "ObjectMgr.h"
|
||||
#include "Player.h"
|
||||
#include "Optional.h"
|
||||
#include "World.h"
|
||||
#include "WorldPacket.h"
|
||||
#include <set>
|
||||
#include <unordered_map>
|
||||
#include <unordered_set>
|
||||
|
||||
class Item;
|
||||
|
||||
namespace WorldPackets
|
||||
{
|
||||
namespace Guild
|
||||
{
|
||||
class GuildBankLogQueryResults;
|
||||
class GuildEventLogQueryResults;
|
||||
class SaveGuildEmblem;
|
||||
}
|
||||
}
|
||||
|
||||
enum GuildMisc
|
||||
{
|
||||
GUILD_BANK_MAX_TABS = 6, // send by client for money log also
|
||||
@@ -229,8 +243,7 @@ public:
|
||||
|
||||
void LoadFromDB(Field* fields);
|
||||
void SaveToDB(uint32 guildId) const;
|
||||
void ReadPacket(WorldPacket& recv);
|
||||
void WritePacket(WorldPacket& data) const;
|
||||
void ReadPacket(WorldPackets::Guild::SaveGuildEmblem& packet);
|
||||
|
||||
uint32 GetStyle() const { return m_style; }
|
||||
uint32 GetColor() const { return m_color; }
|
||||
@@ -274,9 +287,7 @@ private:
|
||||
uint32 slots;
|
||||
};
|
||||
|
||||
typedef std::vector <GuildBankRightsAndSlots> GuildBankRightsAndSlotsVec;
|
||||
|
||||
typedef std::set <uint8> SlotIds;
|
||||
using SlotIds = std::set<uint8>;
|
||||
|
||||
class Guild
|
||||
{
|
||||
@@ -296,15 +307,14 @@ public: // pussywizard: public class Member
|
||||
m_accountId(0),
|
||||
m_rankId(rankId)
|
||||
{
|
||||
memset(m_bankWithdraw, 0, (GUILD_BANK_MAX_TABS + 1) * sizeof(int32));
|
||||
}
|
||||
|
||||
void SetStats(Player* player);
|
||||
void SetStats(std::string const& name, uint8 level, uint8 _class, uint8 gender, uint32 zoneId, uint32 accountId);
|
||||
void SetStats(std::string_view name, uint8 level, uint8 _class, uint8 gender, uint32 zoneId, uint32 accountId);
|
||||
bool CheckStats() const;
|
||||
|
||||
void SetPublicNote(std::string const& publicNote);
|
||||
void SetOfficerNote(std::string const& officerNote);
|
||||
void SetPublicNote(std::string_view publicNote);
|
||||
void SetOfficerNote(std::string_view officerNote);
|
||||
void SetZoneID(uint32 id) { m_zoneId = id; }
|
||||
void SetLevel(uint8 var) { m_level = var; }
|
||||
|
||||
@@ -314,7 +324,6 @@ public: // pussywizard: public class Member
|
||||
|
||||
bool LoadFromDB(Field* fields);
|
||||
void SaveToDB(CharacterDatabaseTransaction trans) const;
|
||||
void WritePacket(WorldPacket& data, bool sendOfficerNote) const;
|
||||
|
||||
ObjectGuid GetGUID() const { return m_guid; }
|
||||
std::string const& GetName() const { return m_name; }
|
||||
@@ -360,25 +369,25 @@ public: // pussywizard: public class Member
|
||||
std::string m_publicNote;
|
||||
std::string m_officerNote;
|
||||
|
||||
int32 m_bankWithdraw[GUILD_BANK_MAX_TABS + 1];
|
||||
std::array<int32, GUILD_BANK_MAX_TABS + 1> m_bankWithdraw = {};
|
||||
};
|
||||
|
||||
// pussywizard: public GetMember
|
||||
inline const Member* GetMember(ObjectGuid guid) const
|
||||
{
|
||||
Members::const_iterator itr = m_members.find(guid);
|
||||
return itr != m_members.end() ? itr->second : nullptr;
|
||||
auto itr = m_members.find(guid.GetCounter());
|
||||
return (itr != m_members.end()) ? &itr->second : nullptr;
|
||||
}
|
||||
inline Member* GetMember(ObjectGuid guid)
|
||||
{
|
||||
Members::iterator itr = m_members.find(guid);
|
||||
return itr != m_members.end() ? itr->second : nullptr;
|
||||
auto itr = m_members.find(guid.GetCounter());
|
||||
return (itr != m_members.end()) ? &itr->second : nullptr;
|
||||
}
|
||||
inline Member* GetMember(std::string const& name)
|
||||
inline Member* GetMember(std::string_view name)
|
||||
{
|
||||
for (Members::iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
|
||||
if (itr->second->GetName() == name)
|
||||
return itr->second;
|
||||
for (auto & m_member : m_members)
|
||||
if (m_member.second.GetName() == name)
|
||||
return &m_member.second;
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
@@ -396,7 +405,6 @@ private:
|
||||
uint64 GetTimestamp() const { return m_timestamp; }
|
||||
|
||||
virtual void SaveToDB(CharacterDatabaseTransaction trans) const = 0;
|
||||
virtual void WritePacket(WorldPacket& data) const = 0;
|
||||
|
||||
protected:
|
||||
uint32 m_guildId;
|
||||
@@ -417,7 +425,7 @@ private:
|
||||
~EventLogEntry() override { }
|
||||
|
||||
void SaveToDB(CharacterDatabaseTransaction trans) const override;
|
||||
void WritePacket(WorldPacket& data) const override;
|
||||
void WritePacket(WorldPackets::Guild::GuildEventLogQueryResults& packet) const;
|
||||
|
||||
private:
|
||||
GuildEventLogTypes m_eventType;
|
||||
@@ -438,6 +446,11 @@ private:
|
||||
eventType == GUILD_BANK_LOG_REPAIR_MONEY;
|
||||
}
|
||||
|
||||
bool IsMoneyEvent() const
|
||||
{
|
||||
return IsMoneyEvent(m_eventType);
|
||||
}
|
||||
|
||||
BankEventLogEntry(uint32 guildId, ObjectGuid::LowType guid, GuildBankEventLogTypes eventType, uint8 tabId, ObjectGuid playerGuid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId) :
|
||||
LogEntry(guildId, guid), m_eventType(eventType), m_bankTabId(tabId), m_playerGuid(playerGuid),
|
||||
m_itemOrMoney(itemOrMoney), m_itemStackCount(itemStackCount), m_destTabId(destTabId) { }
|
||||
@@ -449,7 +462,7 @@ private:
|
||||
~BankEventLogEntry() override { }
|
||||
|
||||
void SaveToDB(CharacterDatabaseTransaction trans) const override;
|
||||
void WritePacket(WorldPacket& data) const override;
|
||||
void WritePacket(WorldPackets::Guild::GuildBankLogQueryResults& packet) const;
|
||||
|
||||
private:
|
||||
GuildBankEventLogTypes m_eventType;
|
||||
@@ -461,30 +474,29 @@ private:
|
||||
};
|
||||
|
||||
// Class encapsulating work with events collection
|
||||
typedef std::list<LogEntry*> GuildLog;
|
||||
|
||||
template <typename Entry>
|
||||
class LogHolder
|
||||
{
|
||||
public:
|
||||
LogHolder(uint32 guildId, uint32 maxRecords) : m_guildId(guildId), m_maxRecords(maxRecords), m_nextGUID(uint32(GUILD_EVENT_LOG_GUID_UNDEFINED)) { }
|
||||
~LogHolder();
|
||||
LogHolder();
|
||||
|
||||
uint8 GetSize() const { return uint8(m_log.size()); }
|
||||
uint32 GetGuildId() const { return m_guildId; }
|
||||
// Checks if new log entry can be added to holder when loading from DB
|
||||
inline bool CanInsert() const { return m_log.size() < m_maxRecords; }
|
||||
// Checks if new log entry can be added to holder
|
||||
bool CanInsert() const { return m_log.size() < m_maxRecords; }
|
||||
// Adds event from DB to collection
|
||||
void LoadEvent(LogEntry* entry);
|
||||
template <typename... Ts>
|
||||
void LoadEvent(Ts&&... args);
|
||||
// Adds new event to collection and saves it to DB
|
||||
void AddEvent(CharacterDatabaseTransaction trans, LogEntry* entry);
|
||||
// Writes information about all events to packet
|
||||
void WritePacket(WorldPacket& data) const;
|
||||
template <typename... Ts>
|
||||
void AddEvent(CharacterDatabaseTransaction trans, Ts&&... args);
|
||||
uint32 GetNextGUID();
|
||||
std::list<Entry>& GetGuildLog() { return m_log; }
|
||||
std::list<Entry> const& GetGuildLog() const { return m_log; }
|
||||
|
||||
private:
|
||||
GuildLog m_log;
|
||||
uint32 m_guildId;
|
||||
uint32 m_maxRecords;
|
||||
std::list<Entry> m_log;
|
||||
uint32 const m_maxRecords;
|
||||
uint32 m_nextGUID;
|
||||
};
|
||||
|
||||
@@ -494,18 +506,17 @@ private:
|
||||
public:
|
||||
RankInfo(): m_guildId(0), m_rankId(GUILD_RANK_NONE), m_rights(GR_RIGHT_EMPTY), m_bankMoneyPerDay(0) { }
|
||||
RankInfo(uint32 guildId) : m_guildId(guildId), m_rankId(GUILD_RANK_NONE), m_rights(GR_RIGHT_EMPTY), m_bankMoneyPerDay(0) { }
|
||||
RankInfo(uint32 guildId, uint8 rankId, std::string const& name, uint32 rights, uint32 money) :
|
||||
RankInfo(uint32 guildId, uint8 rankId, std::string_view name, uint32 rights, uint32 money) :
|
||||
m_guildId(guildId), m_rankId(rankId), m_name(name), m_rights(rights),
|
||||
m_bankMoneyPerDay(rankId != GR_GUILDMASTER ? money : GUILD_WITHDRAW_MONEY_UNLIMITED) { }
|
||||
|
||||
void LoadFromDB(Field* fields);
|
||||
void SaveToDB(CharacterDatabaseTransaction trans) const;
|
||||
void WritePacket(WorldPacket& data) const;
|
||||
|
||||
uint8 GetId() const { return m_rankId; }
|
||||
|
||||
std::string const& GetName() const { return m_name; }
|
||||
void SetName(std::string const& name);
|
||||
void SetName(std::string_view name);
|
||||
|
||||
uint32 GetRights() const { return m_rights; }
|
||||
void SetRights(uint32 rights);
|
||||
@@ -534,7 +545,7 @@ private:
|
||||
std::string m_name;
|
||||
uint32 m_rights;
|
||||
uint32 m_bankMoneyPerDay;
|
||||
GuildBankRightsAndSlots m_bankTabRightsAndSlots[GUILD_BANK_MAX_TABS];
|
||||
std::array<GuildBankRightsAndSlots, GUILD_BANK_MAX_TABS> m_bankTabRightsAndSlots = {};
|
||||
};
|
||||
|
||||
class BankTab
|
||||
@@ -542,25 +553,20 @@ private:
|
||||
public:
|
||||
BankTab(uint32 guildId, uint8 tabId) : m_guildId(guildId), m_tabId(tabId)
|
||||
{
|
||||
memset(m_items, 0, GUILD_BANK_MAX_SLOTS * sizeof(Item*));
|
||||
}
|
||||
|
||||
void LoadFromDB(Field* fields);
|
||||
bool LoadItemFromDB(Field* fields);
|
||||
void Delete(CharacterDatabaseTransaction trans, bool removeItemsFromDB = false);
|
||||
|
||||
void WritePacket(WorldPacket& data) const;
|
||||
bool WriteSlotPacket(WorldPacket& data, uint8 slotId, bool ignoreEmpty = true) const;
|
||||
void WriteInfoPacket(WorldPacket& data) const
|
||||
{
|
||||
data << m_name;
|
||||
data << m_icon;
|
||||
}
|
||||
|
||||
void SetInfo(std::string const& name, std::string const& icon);
|
||||
void SetText(std::string const& text);
|
||||
void SetInfo(std::string_view name, std::string_view icon);
|
||||
void SetText(std::string_view text);
|
||||
void SendText(const Guild* guild, WorldSession* session) const;
|
||||
|
||||
std::string const& GetName() const { return m_name; }
|
||||
std::string const& GetIcon() const { return m_icon; }
|
||||
std::string const& GetText() const { return m_text; }
|
||||
|
||||
inline Item* GetItem(uint8 slotId) const { return slotId < GUILD_BANK_MAX_SLOTS ? m_items[slotId] : nullptr; }
|
||||
bool SetItem(CharacterDatabaseTransaction trans, uint8 slotId, Item* pItem);
|
||||
|
||||
@@ -568,7 +574,7 @@ private:
|
||||
uint32 m_guildId;
|
||||
uint8 m_tabId;
|
||||
|
||||
Item* m_items[GUILD_BANK_MAX_SLOTS];
|
||||
std::array<Item*, GUILD_BANK_MAX_SLOTS> m_items = {};
|
||||
std::string m_name;
|
||||
std::string m_icon;
|
||||
std::string m_text;
|
||||
@@ -661,18 +667,14 @@ private:
|
||||
void CanStoreItemInTab(Item* pItem, uint8 skipSlotId, bool merge, uint32& count);
|
||||
};
|
||||
|
||||
typedef std::unordered_map<ObjectGuid, Member*> Members;
|
||||
typedef std::vector<RankInfo> Ranks;
|
||||
typedef std::vector<BankTab*> BankTabs;
|
||||
|
||||
public:
|
||||
static void SendCommandResult(WorldSession* session, GuildCommandType type, GuildCommandError errCode, std::string const& param = "");
|
||||
static void SendCommandResult(WorldSession* session, GuildCommandType type, GuildCommandError errCode, std::string_view param = {});
|
||||
static void SendSaveEmblemResult(WorldSession* session, GuildEmblemError errCode);
|
||||
|
||||
Guild();
|
||||
~Guild();
|
||||
|
||||
bool Create(Player* pLeader, std::string const& name);
|
||||
bool Create(Player* pLeader, std::string_view name);
|
||||
void Disband();
|
||||
|
||||
// Getters
|
||||
@@ -685,20 +687,20 @@ public:
|
||||
// Handle client commands
|
||||
void HandleRoster(WorldSession* session);
|
||||
void HandleQuery(WorldSession* session);
|
||||
void HandleSetMOTD(WorldSession* session, std::string const& motd);
|
||||
void HandleSetInfo(WorldSession* session, std::string const& info);
|
||||
void HandleSetMOTD(WorldSession* session, std::string_view motd);
|
||||
void HandleSetInfo(WorldSession* session, std::string_view info);
|
||||
void HandleSetEmblem(WorldSession* session, const EmblemInfo& emblemInfo);
|
||||
void HandleSetLeader(WorldSession* session, std::string const& name);
|
||||
void HandleSetBankTabInfo(WorldSession* session, uint8 tabId, std::string const& name, std::string const& icon);
|
||||
void HandleSetMemberNote(WorldSession* session, std::string const& name, std::string const& note, bool officer);
|
||||
void HandleSetRankInfo(WorldSession* session, uint8 rankId, std::string const& name, uint32 rights, uint32 moneyPerDay, GuildBankRightsAndSlotsVec rightsAndSlots);
|
||||
void HandleSetLeader(WorldSession* session, std::string_view name);
|
||||
void HandleSetBankTabInfo(WorldSession* session, uint8 tabId, std::string_view name, std::string_view icon);
|
||||
void HandleSetMemberNote(WorldSession* session, std::string_view name, std::string_view note, bool officer);
|
||||
void HandleSetRankInfo(WorldSession* session, uint8 rankId, std::string_view name, uint32 rights, uint32 moneyPerDay, std::array<GuildBankRightsAndSlots, GUILD_BANK_MAX_TABS> const& rightsAndSlots);
|
||||
void HandleBuyBankTab(WorldSession* session, uint8 tabId);
|
||||
void HandleInviteMember(WorldSession* session, std::string const& name);
|
||||
void HandleAcceptMember(WorldSession* session);
|
||||
void HandleLeaveMember(WorldSession* session);
|
||||
void HandleRemoveMember(WorldSession* session, std::string const& name);
|
||||
void HandleUpdateMemberRank(WorldSession* session, std::string const& name, bool demote);
|
||||
void HandleAddNewRank(WorldSession* session, std::string const& name);
|
||||
void HandleRemoveMember(WorldSession* session, std::string_view name);
|
||||
void HandleUpdateMemberRank(WorldSession* session, std::string_view name, bool demote);
|
||||
void HandleAddNewRank(WorldSession* session, std::string_view name);
|
||||
void HandleRemoveRank(WorldSession* session, uint8 rankId);
|
||||
void HandleRemoveLowestRank(WorldSession* session);
|
||||
void HandleMemberDepositMoney(WorldSession* session, uint32 amount);
|
||||
@@ -714,7 +716,7 @@ public:
|
||||
void SendEventLog(WorldSession* session) const;
|
||||
void SendBankLog(WorldSession* session, uint8 tabId) const;
|
||||
void SendBankTabsInfo(WorldSession* session, bool showTabs = false) const;
|
||||
void SendBankTabData(WorldSession* session, uint8 tabId) const;
|
||||
void SendBankTabData(WorldSession* session, uint8 tabId, bool sendAllSlots) const;
|
||||
void SendBankTabText(WorldSession* session, uint8 tabId) const;
|
||||
void SendPermissions(WorldSession* session) const;
|
||||
void SendMoneyInfo(WorldSession* session) const;
|
||||
@@ -732,17 +734,17 @@ public:
|
||||
bool Validate();
|
||||
|
||||
// Broadcasts
|
||||
void BroadcastToGuild(WorldSession* session, bool officerOnly, std::string const& msg, uint32 language = LANG_UNIVERSAL) const;
|
||||
void BroadcastPacketToRank(WorldPacket* packet, uint8 rankId) const;
|
||||
void BroadcastPacket(WorldPacket* packet) const;
|
||||
void BroadcastToGuild(WorldSession* session, bool officerOnly, std::string_view msg, uint32 language = LANG_UNIVERSAL) const;
|
||||
void BroadcastPacketToRank(WorldPacket const* packet, uint8 rankId) const;
|
||||
void BroadcastPacket(WorldPacket const* packet) const;
|
||||
|
||||
void MassInviteToEvent(WorldSession* session, uint32 minLevel, uint32 maxLevel, uint32 minRank);
|
||||
|
||||
template<class Do>
|
||||
void BroadcastWorker(Do& _do, Player* except = nullptr)
|
||||
{
|
||||
for (Members::iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
|
||||
if (Player* player = itr->second->FindPlayer())
|
||||
for (auto const& m_member : m_members)
|
||||
if (Player* player = m_member.second.FindPlayer())
|
||||
if (player != except)
|
||||
_do(player);
|
||||
}
|
||||
@@ -763,7 +765,7 @@ public:
|
||||
time_t GetCreatedDate() const { return m_createdDate; }
|
||||
|
||||
// Bank tabs
|
||||
void SetBankTabText(uint8 tabId, std::string const& text);
|
||||
void SetBankTabText(uint8 tabId, std::string_view text);
|
||||
|
||||
void ResetTimes();
|
||||
|
||||
@@ -782,13 +784,13 @@ protected:
|
||||
uint32 m_accountsNumber;
|
||||
uint64 m_bankMoney;
|
||||
|
||||
Ranks m_ranks;
|
||||
Members m_members;
|
||||
BankTabs m_bankTabs;
|
||||
std::vector<RankInfo> m_ranks;
|
||||
std::unordered_map<uint32, Member> m_members;
|
||||
std::vector<BankTab> m_bankTabs;
|
||||
|
||||
// These are actually ordered lists. The first element is the oldest entry.
|
||||
LogHolder* m_eventLog;
|
||||
LogHolder* m_bankEventLog[GUILD_BANK_MAX_TABS + 1];
|
||||
LogHolder<EventLogEntry> m_eventLog;
|
||||
std::array<LogHolder<BankEventLogEntry>, GUILD_BANK_MAX_TABS + 1> m_bankEventLog = {};
|
||||
|
||||
private:
|
||||
inline uint8 _GetRanksSize() const { return uint8(m_ranks.size()); }
|
||||
@@ -805,8 +807,8 @@ private:
|
||||
inline uint8 _GetLowestRankId() const { return uint8(m_ranks.size() - 1); }
|
||||
|
||||
inline uint8 _GetPurchasedTabsSize() const { return uint8(m_bankTabs.size()); }
|
||||
inline BankTab* GetBankTab(uint8 tabId) { return tabId < m_bankTabs.size() ? m_bankTabs[tabId] : nullptr; }
|
||||
inline const BankTab* GetBankTab(uint8 tabId) const { return tabId < m_bankTabs.size() ? m_bankTabs[tabId] : nullptr; }
|
||||
inline BankTab* GetBankTab(uint8 tabId) { return tabId < m_bankTabs.size() ? &m_bankTabs[tabId] : nullptr; }
|
||||
inline BankTab const* GetBankTab(uint8 tabId) const { return tabId < m_bankTabs.size() ? &m_bankTabs[tabId] : nullptr; }
|
||||
|
||||
inline void _DeleteMemberFromDB(ObjectGuid::LowType lowguid) const
|
||||
{
|
||||
@@ -815,20 +817,18 @@ private:
|
||||
CharacterDatabase.Execute(stmt);
|
||||
}
|
||||
|
||||
// Creates log holders (either when loading or when creating guild)
|
||||
void _CreateLogHolders();
|
||||
// Tries to create new bank tab
|
||||
void _CreateNewBankTab();
|
||||
// Creates default guild ranks with names in given locale
|
||||
void _CreateDefaultGuildRanks(LocaleConstant loc);
|
||||
// Creates new rank
|
||||
bool _CreateRank(std::string const& name, uint32 rights);
|
||||
bool _CreateRank(std::string_view name, uint32 rights);
|
||||
// Update account number when member added/removed from guild
|
||||
void _UpdateAccountsNumber();
|
||||
bool _IsLeader(Player* player) const;
|
||||
void _DeleteBankItems(CharacterDatabaseTransaction trans, bool removeItemsFromDB = false);
|
||||
bool _ModifyBankMoney(CharacterDatabaseTransaction trans, uint64 amount, bool add);
|
||||
void _SetLeaderGUID(Member* pLeader);
|
||||
void _SetLeaderGUID(Member& pLeader);
|
||||
|
||||
void _SetRankBankMoneyPerDay(uint8 rankId, uint32 moneyPerDay);
|
||||
void _SetRankBankTabRightsAndSlots(uint8 rankId, GuildBankRightsAndSlots rightsAndSlots, bool saveToDB = true);
|
||||
@@ -838,8 +838,8 @@ private:
|
||||
int32 _GetRankBankTabSlotsPerDay(uint8 rankId, uint8 tabId) const;
|
||||
std::string _GetRankName(uint8 rankId) const;
|
||||
|
||||
int32 _GetMemberRemainingSlots(Member const* member, uint8 tabId) const;
|
||||
int32 _GetMemberRemainingMoney(Member const* member) const;
|
||||
int32 _GetMemberRemainingSlots(Member const& member, uint8 tabId) const;
|
||||
int32 _GetMemberRemainingMoney(Member const& member) const;
|
||||
void _UpdateMemberWithdrawSlots(CharacterDatabaseTransaction trans, ObjectGuid guid, uint8 tabId);
|
||||
bool _MemberHasTabRights(ObjectGuid guid, uint8 tabId, uint32 rights) const;
|
||||
|
||||
@@ -851,12 +851,12 @@ private:
|
||||
void _MoveItems(MoveItemData* pSrc, MoveItemData* pDest, uint32 splitedAmount);
|
||||
bool _DoItemsMove(MoveItemData* pSrc, MoveItemData* pDest, bool sendError, uint32 splitedAmount = 0);
|
||||
|
||||
void _SendBankContent(WorldSession* session, uint8 tabId) const;
|
||||
void _SendBankContent(WorldSession* session, uint8 tabId, bool sendAllSlots) const;
|
||||
void _SendBankMoneyUpdate(WorldSession* session) const;
|
||||
void _SendBankContentUpdate(MoveItemData* pSrc, MoveItemData* pDest) const;
|
||||
void _SendBankContentUpdate(uint8 tabId, SlotIds slots) const;
|
||||
void _SendBankList(WorldSession* session = nullptr, uint8 tabId = 0, bool sendFullSlots = false, SlotIds* slots = nullptr) const;
|
||||
|
||||
void _BroadcastEvent(GuildEvents guildEvent, ObjectGuid guid = ObjectGuid::Empty, const char* param1 = nullptr, const char* param2 = nullptr, const char* param3 = nullptr) const;
|
||||
void _BroadcastEvent(GuildEvents guildEvent, ObjectGuid guid = ObjectGuid::Empty, Optional<std::string_view> param1 = {}, Optional<std::string_view> param2 = {}, Optional<std::string_view> param3 = {}) const;
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -63,17 +63,12 @@ Guild* GuildMgr::GetGuildById(uint32 guildId) const
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Guild* GuildMgr::GetGuildByName(const std::string& guildName) const
|
||||
Guild* GuildMgr::GetGuildByName(std::string_view guildName) const
|
||||
{
|
||||
std::string search = guildName;
|
||||
std::transform(search.begin(), search.end(), search.begin(), ::toupper);
|
||||
for (GuildContainer::const_iterator itr = GuildStore.begin(); itr != GuildStore.end(); ++itr)
|
||||
{
|
||||
std::string gname = itr->second->GetName();
|
||||
std::transform(gname.begin(), gname.end(), gname.begin(), ::toupper);
|
||||
if (search == gname)
|
||||
return itr->second;
|
||||
}
|
||||
for (auto const& [id, guild] : GuildStore)
|
||||
if (StringEqualI(guild->GetName(), guildName))
|
||||
return guild;
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ public:
|
||||
|
||||
Guild* GetGuildByLeader(ObjectGuid guid) const;
|
||||
Guild* GetGuildById(uint32 guildId) const;
|
||||
Guild* GetGuildByName(std::string const& guildName) const;
|
||||
Guild* GetGuildByName(std::string_view guildName) const;
|
||||
std::string GetGuildNameById(uint32 guildId) const;
|
||||
|
||||
void LoadGuilds();
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
|
||||
#include "Guild.h"
|
||||
#include "GuildMgr.h"
|
||||
#include "GuildPackets.h"
|
||||
#include "Log.h"
|
||||
#include "ObjectMgr.h"
|
||||
#include "Opcodes.h"
|
||||
@@ -31,51 +32,39 @@ void cleanStr(std::string& str)
|
||||
str.erase(remove(str.begin(), str.end(), '|'), str.end());
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildQueryOpcode(WorldPacket& recvPacket)
|
||||
void WorldSession::HandleGuildQueryOpcode(WorldPackets::Guild::QueryGuildInfo& query)
|
||||
{
|
||||
uint32 guildId;
|
||||
recvPacket >> guildId;
|
||||
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_QUERY [%s]: Guild: %u", GetPlayerInfo().c_str(), guildId);
|
||||
if (!guildId)
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_QUERY [%s]: Guild: %u", GetPlayerInfo().c_str(), query.GuildId);
|
||||
if (!query.GuildId)
|
||||
return;
|
||||
|
||||
if (Guild* guild = sGuildMgr->GetGuildById(guildId))
|
||||
if (Guild* guild = sGuildMgr->GetGuildById(query.GuildId))
|
||||
guild->HandleQuery(this);
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildCreateOpcode(WorldPacket& recvPacket)
|
||||
void WorldSession::HandleGuildCreateOpcode(WorldPackets::Guild::GuildCreate& packet)
|
||||
{
|
||||
std::string name;
|
||||
recvPacket >> name;
|
||||
|
||||
LOG_ERROR("network.opcode", "CMSG_GUILD_CREATE: Possible hacking-attempt: %s tried to create a guild [Name: %s] using cheats", GetPlayerInfo().c_str(), name.c_str());
|
||||
LOG_ERROR("network.opcode", "CMSG_GUILD_CREATE: Possible hacking-attempt: %s tried to create a guild [Name: %s] using cheats", GetPlayerInfo().c_str(), packet.GuildName.c_str());
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildInviteOpcode(WorldPacket& recvPacket)
|
||||
void WorldSession::HandleGuildInviteOpcode(WorldPackets::Guild::GuildInviteByName& packet)
|
||||
{
|
||||
std::string invitedName;
|
||||
recvPacket >> invitedName;
|
||||
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_INVITE [%s]: Invited: %s", GetPlayerInfo().c_str(), invitedName.c_str());
|
||||
if (normalizePlayerName(invitedName))
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_INVITE [%s]: Invited: %s", GetPlayerInfo().c_str(), packet.Name.c_str());
|
||||
if (normalizePlayerName(packet.Name))
|
||||
if (Guild* guild = GetPlayer()->GetGuild())
|
||||
guild->HandleInviteMember(this, invitedName);
|
||||
guild->HandleInviteMember(this, packet.Name);
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket)
|
||||
void WorldSession::HandleGuildRemoveOpcode(WorldPackets::Guild::GuildOfficerRemoveMember& packet)
|
||||
{
|
||||
std::string playerName;
|
||||
recvPacket >> playerName;
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_REMOVE [%s]: Target: %s", GetPlayerInfo().c_str(), packet.Removee.c_str());
|
||||
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_REMOVE [%s]: Target: %s", GetPlayerInfo().c_str(), playerName.c_str());
|
||||
|
||||
if (normalizePlayerName(playerName))
|
||||
if (normalizePlayerName(packet.Removee))
|
||||
if (Guild* guild = GetPlayer()->GetGuild())
|
||||
guild->HandleRemoveMember(this, playerName);
|
||||
guild->HandleRemoveMember(this, packet.Removee);
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildAcceptOpcode(WorldPacket& /*recvPacket*/)
|
||||
void WorldSession::HandleGuildAcceptOpcode(WorldPackets::Guild::AcceptGuildInvite& /*invite*/)
|
||||
{
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_ACCEPT [%s]", GetPlayer()->GetName().c_str());
|
||||
|
||||
@@ -84,7 +73,7 @@ void WorldSession::HandleGuildAcceptOpcode(WorldPacket& /*recvPacket*/)
|
||||
guild->HandleAcceptMember(this);
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildDeclineOpcode(WorldPacket& /*recvPacket*/)
|
||||
void WorldSession::HandleGuildDeclineOpcode(WorldPackets::Guild::GuildDeclineInvitation& /*decline*/)
|
||||
{
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_DECLINE [%s]", GetPlayerInfo().c_str());
|
||||
|
||||
@@ -97,7 +86,7 @@ void WorldSession::HandleGuildDeclineOpcode(WorldPacket& /*recvPacket*/)
|
||||
GetPlayer()->SetInGuild(0);
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildInfoOpcode(WorldPacket& /*recvPacket*/)
|
||||
void WorldSession::HandleGuildInfoOpcode(WorldPackets::Guild::GuildGetInfo& /*packet*/)
|
||||
{
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_INFO [%s]", GetPlayerInfo().c_str());
|
||||
|
||||
@@ -105,7 +94,7 @@ void WorldSession::HandleGuildInfoOpcode(WorldPacket& /*recvPacket*/)
|
||||
guild->SendInfo(this);
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildRosterOpcode(WorldPacket& /*recvPacket*/)
|
||||
void WorldSession::HandleGuildRosterOpcode(WorldPackets::Guild::GuildGetRoster& /*packet*/)
|
||||
{
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_ROSTER [%s]", GetPlayerInfo().c_str());
|
||||
|
||||
@@ -115,31 +104,25 @@ void WorldSession::HandleGuildRosterOpcode(WorldPacket& /*recvPacket*/)
|
||||
Guild::SendCommandResult(this, GUILD_COMMAND_ROSTER, ERR_GUILD_PLAYER_NOT_IN_GUILD);
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildPromoteOpcode(WorldPacket& recvPacket)
|
||||
void WorldSession::HandleGuildPromoteOpcode(WorldPackets::Guild::GuildPromoteMember& promote)
|
||||
{
|
||||
std::string playerName;
|
||||
recvPacket >> playerName;
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_PROMOTE [%s]: Target: %s", GetPlayerInfo().c_str(), promote.Promotee.c_str());
|
||||
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_PROMOTE [%s]: Target: %s", GetPlayerInfo().c_str(), playerName.c_str());
|
||||
|
||||
if (normalizePlayerName(playerName))
|
||||
if (normalizePlayerName(promote.Promotee))
|
||||
if (Guild* guild = GetPlayer()->GetGuild())
|
||||
guild->HandleUpdateMemberRank(this, playerName, false);
|
||||
guild->HandleUpdateMemberRank(this, promote.Promotee, false);
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildDemoteOpcode(WorldPacket& recvPacket)
|
||||
void WorldSession::HandleGuildDemoteOpcode(WorldPackets::Guild::GuildDemoteMember& demote)
|
||||
{
|
||||
std::string playerName;
|
||||
recvPacket >> playerName;
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_DEMOTE [%s]: Target: %s", GetPlayerInfo().c_str(), demote.Demotee.c_str());
|
||||
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_DEMOTE [%s]: Target: %s", GetPlayerInfo().c_str(), playerName.c_str());
|
||||
|
||||
if (normalizePlayerName(playerName))
|
||||
if (normalizePlayerName(demote.Demotee))
|
||||
if (Guild* guild = GetPlayer()->GetGuild())
|
||||
guild->HandleUpdateMemberRank(this, playerName, true);
|
||||
guild->HandleUpdateMemberRank(this, demote.Demotee, true);
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildLeaveOpcode(WorldPacket& /*recvPacket*/)
|
||||
void WorldSession::HandleGuildLeaveOpcode(WorldPackets::Guild::GuildLeave& /*leave*/)
|
||||
{
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_LEAVE [%s]", GetPlayerInfo().c_str());
|
||||
|
||||
@@ -147,7 +130,7 @@ void WorldSession::HandleGuildLeaveOpcode(WorldPacket& /*recvPacket*/)
|
||||
guild->HandleLeaveMember(this);
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildDisbandOpcode(WorldPacket& /*recvPacket*/)
|
||||
void WorldSession::HandleGuildDisbandOpcode(WorldPackets::Guild::GuildDelete& /*packet*/)
|
||||
{
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_DISBAND [%s]", GetPlayerInfo().c_str());
|
||||
|
||||
@@ -155,142 +138,71 @@ void WorldSession::HandleGuildDisbandOpcode(WorldPacket& /*recvPacket*/)
|
||||
guild->HandleDisband(this);
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildLeaderOpcode(WorldPacket& recvPacket)
|
||||
void WorldSession::HandleGuildLeaderOpcode(WorldPackets::Guild::GuildSetGuildMaster& packet)
|
||||
{
|
||||
std::string name;
|
||||
recvPacket >> name;
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_LEADER [%s]: Target: %s", GetPlayerInfo().c_str(), packet.NewMasterName.c_str());
|
||||
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_LEADER [%s]: Target: %s", GetPlayerInfo().c_str(), name.c_str());
|
||||
|
||||
if (normalizePlayerName(name))
|
||||
if (normalizePlayerName(packet.NewMasterName))
|
||||
if (Guild* guild = GetPlayer()->GetGuild())
|
||||
guild->HandleSetLeader(this, name);
|
||||
guild->HandleSetLeader(this, packet.NewMasterName);
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildMOTDOpcode(WorldPacket& recvPacket)
|
||||
void WorldSession::HandleGuildMOTDOpcode(WorldPackets::Guild::GuildUpdateMotdText& packet)
|
||||
{
|
||||
std::string motd;
|
||||
recvPacket >> motd;
|
||||
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_MOTD [%s]: MOTD: %s", GetPlayerInfo().c_str(), motd.c_str());
|
||||
|
||||
// Check for overflow
|
||||
if (motd.length() > 128)
|
||||
return;
|
||||
|
||||
// Cleanup bad characters
|
||||
cleanStr(motd);
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_MOTD [%s]: MOTD: %s", GetPlayerInfo().c_str(), packet.MotdText.c_str());
|
||||
|
||||
if (Guild* guild = GetPlayer()->GetGuild())
|
||||
guild->HandleSetMOTD(this, motd);
|
||||
guild->HandleSetMOTD(this, packet.MotdText);
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket)
|
||||
void WorldSession::HandleGuildSetPublicNoteOpcode(WorldPackets::Guild::GuildSetMemberNote& packet)
|
||||
{
|
||||
std::string playerName;
|
||||
std::string note;
|
||||
recvPacket >> playerName >> note;
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_SET_PUBLIC_NOTE [%s]: Target: %s, Note: %s", GetPlayerInfo().c_str(), packet.NoteeName.c_str(), packet.Note.c_str());
|
||||
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_SET_PUBLIC_NOTE [%s]: Target: %s, Note: %s", GetPlayerInfo().c_str(), playerName.c_str(), note.c_str());
|
||||
|
||||
// Check for overflow
|
||||
if (note.length() > 31)
|
||||
return;
|
||||
|
||||
// Cleanup bad characters
|
||||
cleanStr(note);
|
||||
|
||||
if (normalizePlayerName(playerName))
|
||||
if (normalizePlayerName(packet.NoteeName))
|
||||
if (Guild* guild = GetPlayer()->GetGuild())
|
||||
guild->HandleSetMemberNote(this, playerName, note, true);
|
||||
guild->HandleSetMemberNote(this, packet.NoteeName, packet.Note, true);
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket)
|
||||
void WorldSession::HandleGuildSetOfficerNoteOpcode(WorldPackets::Guild::GuildSetMemberNote& packet)
|
||||
{
|
||||
std::string playerName;
|
||||
std::string note;
|
||||
recvPacket >> playerName >> note;
|
||||
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_SET_OFFICER_NOTE [%s]: Target: %s, Note: %s",
|
||||
GetPlayerInfo().c_str(), playerName.c_str(), note.c_str());
|
||||
GetPlayerInfo().c_str(), packet.NoteeName.c_str(), packet.Note.c_str());
|
||||
|
||||
// Check for overflow
|
||||
if (note.length() > 31)
|
||||
return;
|
||||
|
||||
// Cleanup bad characters
|
||||
cleanStr(note);
|
||||
|
||||
if (normalizePlayerName(playerName))
|
||||
if (normalizePlayerName(packet.NoteeName))
|
||||
if (Guild* guild = GetPlayer()->GetGuild())
|
||||
guild->HandleSetMemberNote(this, playerName, note, false);
|
||||
guild->HandleSetMemberNote(this, packet.NoteeName, packet.Note, false);
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildRankOpcode(WorldPacket& recvPacket)
|
||||
void WorldSession::HandleGuildRankOpcode(WorldPackets::Guild::GuildSetRankPermissions& packet)
|
||||
{
|
||||
uint32 rankId;
|
||||
recvPacket >> rankId;
|
||||
|
||||
uint32 rights;
|
||||
recvPacket >> rights;
|
||||
|
||||
std::string rankName;
|
||||
recvPacket >> rankName;
|
||||
|
||||
uint32 money;
|
||||
recvPacket >> money;
|
||||
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_RANK [%s]: Rank: %s (%u)", GetPlayerInfo().c_str(), rankName.c_str(), rankId);
|
||||
|
||||
Guild* guild = GetPlayer()->GetGuild();
|
||||
if (!guild)
|
||||
{
|
||||
recvPacket.rpos(recvPacket.wpos());
|
||||
return;
|
||||
}
|
||||
|
||||
// Check for overflow
|
||||
if (rankName.length() > 15)
|
||||
return;
|
||||
|
||||
// Cleanup bad characters
|
||||
cleanStr(rankName);
|
||||
|
||||
GuildBankRightsAndSlotsVec rightsAndSlots(GUILD_BANK_MAX_TABS);
|
||||
std::array<GuildBankRightsAndSlots, GUILD_BANK_MAX_TABS> rightsAndSlots;
|
||||
|
||||
for (uint8 tabId = 0; tabId < GUILD_BANK_MAX_TABS; ++tabId)
|
||||
{
|
||||
uint32 bankRights;
|
||||
uint32 slots;
|
||||
|
||||
recvPacket >> bankRights;
|
||||
recvPacket >> slots;
|
||||
|
||||
rightsAndSlots[tabId] = GuildBankRightsAndSlots(tabId, bankRights, slots);
|
||||
rightsAndSlots[tabId] = GuildBankRightsAndSlots(tabId, uint8(packet.TabFlags[tabId]), uint8(packet.TabWithdrawItemLimit[tabId]));
|
||||
}
|
||||
|
||||
guild->HandleSetRankInfo(this, rankId, rankName, rights, money, rightsAndSlots);
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_RANK [%s]: Rank: %s (%u)", GetPlayerInfo().c_str(), packet.RankName.c_str(), packet.RankID);
|
||||
|
||||
guild->HandleSetRankInfo(this, packet.RankID, packet.RankName, packet.Flags, packet.WithdrawGoldLimit, rightsAndSlots);
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildAddRankOpcode(WorldPacket& recvPacket)
|
||||
void WorldSession::HandleGuildAddRankOpcode(WorldPackets::Guild::GuildAddRank& packet)
|
||||
{
|
||||
std::string rankName;
|
||||
recvPacket >> rankName;
|
||||
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_ADD_RANK [%s]: Rank: %s", GetPlayerInfo().c_str(), rankName.c_str());
|
||||
|
||||
// Check for overflow
|
||||
if (rankName.length() > 15)
|
||||
return;
|
||||
|
||||
// Cleanup bad characters
|
||||
cleanStr(rankName);
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_ADD_RANK [%s]: Rank: %s", GetPlayerInfo().c_str(), packet.Name.c_str());
|
||||
|
||||
if (Guild* guild = GetPlayer()->GetGuild())
|
||||
guild->HandleAddNewRank(this, rankName);
|
||||
guild->HandleAddNewRank(this, packet.Name);
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildDelRankOpcode(WorldPacket& /*recvPacket*/)
|
||||
void WorldSession::HandleGuildDelRankOpcode(WorldPackets::Guild::GuildDeleteRank& /*packet*/)
|
||||
{
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_DEL_RANK [%s]", GetPlayerInfo().c_str());
|
||||
|
||||
@@ -298,37 +210,24 @@ void WorldSession::HandleGuildDelRankOpcode(WorldPacket& /*recvPacket*/)
|
||||
guild->HandleRemoveLowestRank(this);
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildChangeInfoTextOpcode(WorldPacket& recvPacket)
|
||||
void WorldSession::HandleGuildChangeInfoTextOpcode(WorldPackets::Guild::GuildUpdateInfoText& packet)
|
||||
{
|
||||
std::string info;
|
||||
recvPacket >> info;
|
||||
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_INFO_TEXT [%s]: %s", GetPlayerInfo().c_str(), info.c_str());
|
||||
|
||||
// Check for overflow
|
||||
if (info.length() > 500)
|
||||
return;
|
||||
|
||||
// Cleanup bad characters
|
||||
cleanStr(info);
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_INFO_TEXT [%s]: %s", GetPlayerInfo().c_str(), packet.InfoText.c_str());
|
||||
|
||||
if (Guild* guild = GetPlayer()->GetGuild())
|
||||
guild->HandleSetInfo(this, info);
|
||||
guild->HandleSetInfo(this, packet.InfoText);
|
||||
}
|
||||
|
||||
void WorldSession::HandleSaveGuildEmblemOpcode(WorldPacket& recvPacket)
|
||||
void WorldSession::HandleSaveGuildEmblemOpcode(WorldPackets::Guild::SaveGuildEmblem& packet)
|
||||
{
|
||||
ObjectGuid vendorGuid;
|
||||
recvPacket >> vendorGuid;
|
||||
|
||||
EmblemInfo emblemInfo;
|
||||
emblemInfo.ReadPacket(recvPacket);
|
||||
emblemInfo.ReadPacket(packet);
|
||||
|
||||
LOG_DEBUG("guild", "MSG_SAVE_GUILD_EMBLEM [%s]: Guid: [%s] Style: %d, Color: %d, BorderStyle: %d, BorderColor: %d, BackgroundColor: %d"
|
||||
, GetPlayerInfo().c_str(), vendorGuid.ToString().c_str(), emblemInfo.GetStyle()
|
||||
, GetPlayerInfo().c_str(), packet.Vendor.ToString().c_str(), emblemInfo.GetStyle()
|
||||
, emblemInfo.GetColor(), emblemInfo.GetBorderStyle()
|
||||
, emblemInfo.GetBorderColor(), emblemInfo.GetBackgroundColor());
|
||||
if (GetPlayer()->GetNPCIfCanInteractWith(vendorGuid, UNIT_NPC_FLAG_TABARDDESIGNER))
|
||||
if (GetPlayer()->GetNPCIfCanInteractWith(packet.Vendor, UNIT_NPC_FLAG_TABARDDESIGNER))
|
||||
{
|
||||
// Remove fake death
|
||||
if (GetPlayer()->HasUnitState(UNIT_STATE_DIED))
|
||||
@@ -343,7 +242,7 @@ void WorldSession::HandleSaveGuildEmblemOpcode(WorldPacket& recvPacket)
|
||||
Guild::SendSaveEmblemResult(this, ERR_GUILDEMBLEM_INVALIDVENDOR); // "That's not an emblem vendor!"
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildEventLogQueryOpcode(WorldPacket& /* recvPacket */)
|
||||
void WorldSession::HandleGuildEventLogQueryOpcode(WorldPackets::Guild::GuildEventLogQuery& /*packet*/)
|
||||
{
|
||||
LOG_DEBUG("guild", "MSG_GUILD_EVENT_LOG_QUERY [%s]", GetPlayerInfo().c_str());
|
||||
|
||||
@@ -351,7 +250,7 @@ void WorldSession::HandleGuildEventLogQueryOpcode(WorldPacket& /* recvPacket */)
|
||||
guild->SendEventLog(this);
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildBankMoneyWithdrawn(WorldPacket& /* recvData */)
|
||||
void WorldSession::HandleGuildBankMoneyWithdrawn(WorldPackets::Guild::GuildBankRemainingWithdrawMoneyQuery& /*packet*/)
|
||||
{
|
||||
LOG_DEBUG("guild", "MSG_GUILD_BANK_MONEY_WITHDRAWN [%s]", GetPlayerInfo().c_str());
|
||||
|
||||
@@ -359,23 +258,22 @@ void WorldSession::HandleGuildBankMoneyWithdrawn(WorldPacket& /* recvData */)
|
||||
guild->SendMoneyInfo(this);
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildPermissions(WorldPacket& /* recvData */)
|
||||
void WorldSession::HandleGuildPermissions(WorldPackets::Guild::GuildPermissionsQuery& /* packet */)
|
||||
{
|
||||
LOG_DEBUG("guild", "MSG_GUILD_PERMISSIONS [%s]", GetPlayerInfo().c_str());
|
||||
|
||||
if (Guild* guild = GetPlayer()->GetGuild())
|
||||
guild->SendPermissions(this);
|
||||
}
|
||||
|
||||
// Called when clicking on Guild bank gameobject
|
||||
void WorldSession::HandleGuildBankerActivate(WorldPacket& recvData)
|
||||
void WorldSession::HandleGuildBankerActivate(WorldPackets::Guild::GuildBankActivate& packet)
|
||||
{
|
||||
ObjectGuid guid;
|
||||
bool sendAllSlots;
|
||||
recvData >> guid >> sendAllSlots;
|
||||
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_BANKER_ACTIVATE [%s]: Go: [%s] AllSlots: %u"
|
||||
, GetPlayerInfo().c_str(), guid.ToString().c_str(), sendAllSlots);
|
||||
, GetPlayerInfo().c_str(), packet.Banker.ToString().c_str(), packet.FullUpdate);
|
||||
|
||||
GameObject const* const go = GetPlayer()->GetGameObjectIfCanInteractWith(packet.Banker, GAMEOBJECT_TYPE_GUILD_BANK);
|
||||
if (!go)
|
||||
return;
|
||||
|
||||
Guild* const guild = GetPlayer()->GetGuild();
|
||||
if (!guild)
|
||||
{
|
||||
@@ -383,122 +281,68 @@ void WorldSession::HandleGuildBankerActivate(WorldPacket& recvData)
|
||||
return;
|
||||
}
|
||||
|
||||
guild->SendBankTabsInfo(this, sendAllSlots);
|
||||
guild->SendBankTabsInfo(this, packet.FullUpdate);
|
||||
}
|
||||
|
||||
// Called when opening guild bank tab only (first one)
|
||||
void WorldSession::HandleGuildBankQueryTab(WorldPacket& recvData)
|
||||
void WorldSession::HandleGuildBankQueryTab(WorldPackets::Guild::GuildBankQueryTab& packet)
|
||||
{
|
||||
ObjectGuid guid;
|
||||
uint8 tabId;
|
||||
bool full;
|
||||
|
||||
recvData >> guid >> tabId >> full;
|
||||
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_BANK_QUERY_TAB [%s]: Go: [%s], TabId: %u, ShowTabs: %u"
|
||||
, GetPlayerInfo().c_str(), guid.ToString().c_str(), tabId, full);
|
||||
if (GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_GUILD_BANK))
|
||||
, GetPlayerInfo().c_str(), packet.Banker.ToString().c_str(), packet.Tab, packet.FullUpdate);
|
||||
|
||||
if (GetPlayer()->GetGameObjectIfCanInteractWith(packet.Banker, GAMEOBJECT_TYPE_GUILD_BANK))
|
||||
if (Guild* guild = GetPlayer()->GetGuild())
|
||||
guild->SendBankTabData(this, tabId);
|
||||
guild->SendBankTabData(this, packet.Tab, packet.FullUpdate);
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildBankDepositMoney(WorldPacket& recvData)
|
||||
void WorldSession::HandleGuildBankDepositMoney(WorldPackets::Guild::GuildBankDepositMoney& packet)
|
||||
{
|
||||
ObjectGuid guid;
|
||||
uint32 money;
|
||||
recvData >> guid >> money;
|
||||
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_BANK_DEPOSIT_MONEY [%s]: Go: [%s], money: %u",
|
||||
GetPlayerInfo().c_str(), guid.ToString().c_str(), money);
|
||||
if (GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_GUILD_BANK))
|
||||
if (money && GetPlayer()->HasEnoughMoney(money))
|
||||
GetPlayerInfo().c_str(), packet.Banker.ToString().c_str(), packet.Money);
|
||||
|
||||
if (GetPlayer()->GetGameObjectIfCanInteractWith(packet.Banker, GAMEOBJECT_TYPE_GUILD_BANK))
|
||||
if (packet.Money && GetPlayer()->HasEnoughMoney(packet.Money))
|
||||
if (Guild* guild = GetPlayer()->GetGuild())
|
||||
guild->HandleMemberDepositMoney(this, money);
|
||||
guild->HandleMemberDepositMoney(this, packet.Money);
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildBankWithdrawMoney(WorldPacket& recvData)
|
||||
void WorldSession::HandleGuildBankWithdrawMoney(WorldPackets::Guild::GuildBankWithdrawMoney& packet)
|
||||
{
|
||||
ObjectGuid guid;
|
||||
uint32 money;
|
||||
recvData >> guid >> money;
|
||||
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_BANK_WITHDRAW_MONEY [%s]: Go: [%s], money: %u",
|
||||
GetPlayerInfo().c_str(), guid.ToString().c_str(), money);
|
||||
if (money && GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_GUILD_BANK))
|
||||
GetPlayerInfo().c_str(), packet.Banker.ToString().c_str(), packet.Money);
|
||||
if (packet.Money && GetPlayer()->GetGameObjectIfCanInteractWith(packet.Banker, GAMEOBJECT_TYPE_GUILD_BANK))
|
||||
if (Guild* guild = GetPlayer()->GetGuild())
|
||||
guild->HandleMemberWithdrawMoney(this, money);
|
||||
guild->HandleMemberWithdrawMoney(this, packet.Money);
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildBankSwapItems(WorldPacket& recvData)
|
||||
void WorldSession::HandleGuildBankSwapItems(WorldPackets::Guild::GuildBankSwapItems& packet)
|
||||
{
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_BANK_SWAP_ITEMS [%s]", GetPlayerInfo().c_str());
|
||||
|
||||
ObjectGuid GoGuid;
|
||||
recvData >> GoGuid;
|
||||
|
||||
if (!GetPlayer()->GetGameObjectIfCanInteractWith(GoGuid, GAMEOBJECT_TYPE_GUILD_BANK))
|
||||
if (!GetPlayer()->GetGameObjectIfCanInteractWith(packet.Banker, GAMEOBJECT_TYPE_GUILD_BANK))
|
||||
{
|
||||
recvData.rfinish(); // Prevent additional spam at rejected packet
|
||||
return;
|
||||
}
|
||||
|
||||
Guild* guild = GetPlayer()->GetGuild();
|
||||
if (!guild)
|
||||
{
|
||||
recvData.rfinish(); // Prevent additional spam at rejected packet
|
||||
return;
|
||||
}
|
||||
|
||||
uint8 bankToBank;
|
||||
recvData >> bankToBank;
|
||||
|
||||
uint8 tabId;
|
||||
uint8 slotId;
|
||||
uint32 itemEntry;
|
||||
uint32 splitedAmount = 0;
|
||||
|
||||
if (bankToBank)
|
||||
{
|
||||
uint8 destTabId;
|
||||
recvData >> destTabId;
|
||||
|
||||
uint8 destSlotId;
|
||||
recvData >> destSlotId;
|
||||
recvData.read_skip<uint32>(); // Always 0
|
||||
|
||||
recvData >> tabId;
|
||||
recvData >> slotId;
|
||||
recvData >> itemEntry;
|
||||
recvData.read_skip<uint8>(); // Always 0
|
||||
|
||||
recvData >> splitedAmount;
|
||||
|
||||
guild->SwapItems(GetPlayer(), tabId, slotId, destTabId, destSlotId, splitedAmount);
|
||||
}
|
||||
if (packet.BankOnly)
|
||||
guild->SwapItems(GetPlayer(), packet.BankTab1, packet.BankSlot1, packet.BankTab, packet.BankSlot, packet.BankItemCount);
|
||||
else
|
||||
{
|
||||
uint8 playerBag = NULL_BAG;
|
||||
uint8 playerSlotId = NULL_SLOT;
|
||||
uint8 toChar = 1;
|
||||
uint32 splitedAmount = 0;
|
||||
|
||||
recvData >> tabId;
|
||||
recvData >> slotId;
|
||||
recvData >> itemEntry;
|
||||
|
||||
uint8 autoStore;
|
||||
recvData >> autoStore;
|
||||
if (autoStore)
|
||||
if (!packet.AutoStore)
|
||||
{
|
||||
recvData.read_skip<uint32>(); // autoStoreCount
|
||||
recvData.read_skip<uint8>(); // ToChar (?), always and expected to be 1 (autostore only triggered in Bank -> Char)
|
||||
recvData.read_skip<uint32>(); // Always 0
|
||||
}
|
||||
else
|
||||
{
|
||||
recvData >> playerBag;
|
||||
recvData >> playerSlotId;
|
||||
recvData >> toChar;
|
||||
recvData >> splitedAmount;
|
||||
playerBag = packet.ContainerSlot;
|
||||
playerSlotId = packet.ContainerItemSlot;
|
||||
toChar = packet.ToSlot;
|
||||
splitedAmount = packet.StackCount;
|
||||
}
|
||||
|
||||
// Player <-> Bank
|
||||
@@ -506,85 +350,50 @@ void WorldSession::HandleGuildBankSwapItems(WorldPacket& recvData)
|
||||
if (!Player::IsInventoryPos(playerBag, playerSlotId) && !(playerBag == NULL_BAG && playerSlotId == NULL_SLOT))
|
||||
GetPlayer()->SendEquipError(EQUIP_ERR_NONE, nullptr);
|
||||
else
|
||||
guild->SwapItemsWithInventory(GetPlayer(), toChar, tabId, slotId, playerBag, playerSlotId, splitedAmount);
|
||||
guild->SwapItemsWithInventory(GetPlayer(), toChar != 0, packet.BankTab, packet.BankSlot, playerBag, playerSlotId, splitedAmount);
|
||||
}
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildBankBuyTab(WorldPacket& recvData)
|
||||
void WorldSession::HandleGuildBankBuyTab(WorldPackets::Guild::GuildBankBuyTab& packet)
|
||||
{
|
||||
ObjectGuid guid;
|
||||
uint8 tabId;
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_BANK_BUY_TAB [%s]: [%s[, TabId: %u", GetPlayerInfo().c_str(), packet.Banker .ToString().c_str(), packet.BankTab);
|
||||
|
||||
recvData >> guid >> tabId;
|
||||
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_BANK_BUY_TAB [%s]: Go: [%s], TabId: %u", GetPlayerInfo().c_str(), guid.ToString().c_str(), tabId);
|
||||
|
||||
if (GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_GUILD_BANK))
|
||||
if (GetPlayer()->GetGameObjectIfCanInteractWith(packet.Banker, GAMEOBJECT_TYPE_GUILD_BANK))
|
||||
if (Guild* guild = GetPlayer()->GetGuild())
|
||||
guild->HandleBuyBankTab(this, tabId);
|
||||
guild->HandleBuyBankTab(this, packet.BankTab);
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildBankUpdateTab(WorldPacket& recvData)
|
||||
void WorldSession::HandleGuildBankUpdateTab(WorldPackets::Guild::GuildBankUpdateTab& packet)
|
||||
{
|
||||
ObjectGuid guid;
|
||||
uint8 tabId;
|
||||
std::string name, icon;
|
||||
|
||||
recvData >> guid >> tabId >> name >> icon;
|
||||
|
||||
LOG_DEBUG("guild", "CMSG_GUILD_BANK_UPDATE_TAB [%s]: Go: [%s], TabId: %u, Name: %s, Icon: %s"
|
||||
, GetPlayerInfo().c_str(), guid.ToString().c_str(), tabId, name.c_str(), icon.c_str());
|
||||
, GetPlayerInfo().c_str(), packet.Banker.ToString().c_str(), packet.BankTab, packet.Name.c_str(), packet.Icon.c_str());
|
||||
|
||||
// Check for overflow
|
||||
if (name.length() > 16 || icon.length() > 128)
|
||||
return;
|
||||
|
||||
// Cleanup bad characters
|
||||
cleanStr(name);
|
||||
|
||||
if (!name.empty() && !icon.empty())
|
||||
if (GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_GUILD_BANK))
|
||||
if (!packet.Name.empty() && !packet.Icon.empty())
|
||||
if (GetPlayer()->GetGameObjectIfCanInteractWith(packet.Banker, GAMEOBJECT_TYPE_GUILD_BANK))
|
||||
if (Guild* guild = GetPlayer()->GetGuild())
|
||||
guild->HandleSetBankTabInfo(this, tabId, name, icon);
|
||||
guild->HandleSetBankTabInfo(this, packet.BankTab, packet.Name, packet.Icon);
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildBankLogQuery(WorldPacket& recvData)
|
||||
void WorldSession::HandleGuildBankLogQuery(WorldPackets::Guild::GuildBankLogQuery& packet)
|
||||
{
|
||||
uint8 tabId;
|
||||
recvData >> tabId;
|
||||
|
||||
LOG_DEBUG("guild", "MSG_GUILD_BANK_LOG_QUERY [%s]: TabId: %u", GetPlayerInfo().c_str(), tabId);
|
||||
LOG_DEBUG("guild", "MSG_GUILD_BANK_LOG_QUERY [%s]: TabId: %u", GetPlayerInfo().c_str(), packet.Tab);
|
||||
|
||||
if (Guild* guild = GetPlayer()->GetGuild())
|
||||
guild->SendBankLog(this, tabId);
|
||||
guild->SendBankLog(this, packet.Tab);
|
||||
}
|
||||
|
||||
void WorldSession::HandleQueryGuildBankTabText(WorldPacket& recvData)
|
||||
void WorldSession::HandleQueryGuildBankTabText(WorldPackets::Guild::GuildBankTextQuery& packet)
|
||||
{
|
||||
uint8 tabId;
|
||||
recvData >> tabId;
|
||||
|
||||
LOG_DEBUG("guild", "MSG_QUERY_GUILD_BANK_TEXT [%s]: TabId: %u", GetPlayerInfo().c_str(), tabId);
|
||||
LOG_DEBUG("guild", "MSG_QUERY_GUILD_BANK_TEXT [%s]: TabId: %u", GetPlayerInfo().c_str(), packet.Tab);
|
||||
|
||||
if (Guild* guild = GetPlayer()->GetGuild())
|
||||
guild->SendBankTabText(this, tabId);
|
||||
guild->SendBankTabText(this, packet.Tab);
|
||||
}
|
||||
|
||||
void WorldSession::HandleSetGuildBankTabText(WorldPacket& recvData)
|
||||
void WorldSession::HandleSetGuildBankTabText(WorldPackets::Guild::GuildBankSetTabText& packet)
|
||||
{
|
||||
uint8 tabId;
|
||||
std::string text;
|
||||
recvData >> tabId >> text;
|
||||
|
||||
LOG_DEBUG("guild", "CMSG_SET_GUILD_BANK_TEXT [%s]: TabId: %u, Text: %s", GetPlayerInfo().c_str(), tabId, text.c_str());
|
||||
|
||||
// Check for overflow
|
||||
if (text.length() > 500)
|
||||
return;
|
||||
|
||||
// Cleanup bad characters
|
||||
cleanStr(text);
|
||||
LOG_DEBUG("guild", "CMSG_SET_GUILD_BANK_TEXT [%s]: TabId: %u, Text: %s", GetPlayerInfo().c_str(), packet.Tab, packet.TabText.c_str());
|
||||
|
||||
if (Guild* guild = GetPlayer()->GetGuild())
|
||||
guild->SetBankTabText(tabId, text);
|
||||
guild->SetBankTabText(packet.Tab, packet.TabText);
|
||||
}
|
||||
|
||||
@@ -18,4 +18,6 @@
|
||||
#ifndef AllPackets_h__
|
||||
#define AllPackets_h__
|
||||
|
||||
#include "GuildPackets.h"
|
||||
|
||||
#endif // AllPackets_h__
|
||||
|
||||
458
src/server/game/Server/Packets/GuildPackets.cpp
Normal file
458
src/server/game/Server/Packets/GuildPackets.cpp
Normal file
@@ -0,0 +1,458 @@
|
||||
/*
|
||||
* This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Affero General Public License as published by the
|
||||
* Free Software Foundation; either version 3 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "GuildPackets.h"
|
||||
|
||||
void WorldPackets::Guild::QueryGuildInfo::Read()
|
||||
{
|
||||
_worldPacket >> GuildId;
|
||||
}
|
||||
|
||||
WorldPackets::Guild::QueryGuildInfoResponse::QueryGuildInfoResponse()
|
||||
: ServerPacket(SMSG_GUILD_QUERY_RESPONSE) { }
|
||||
|
||||
WorldPacket const* WorldPackets::Guild::QueryGuildInfoResponse::Write()
|
||||
{
|
||||
_worldPacket << GuildId;
|
||||
_worldPacket << Info.GuildName;
|
||||
for (std::string const& rankName : Info.Ranks)
|
||||
_worldPacket << rankName;
|
||||
|
||||
_worldPacket << uint32(Info.EmblemStyle);
|
||||
_worldPacket << uint32(Info.EmblemColor);
|
||||
_worldPacket << uint32(Info.BorderStyle);
|
||||
_worldPacket << uint32(Info.BorderColor);
|
||||
_worldPacket << uint32(Info.BackgroundColor);
|
||||
_worldPacket << uint32(Info.RankCount);
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Guild::GuildCreate::Read()
|
||||
{
|
||||
_worldPacket >> GuildName;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Guild::GuildInfoResponse::Write()
|
||||
{
|
||||
_worldPacket << GuildName;
|
||||
_worldPacket.AppendPackedTime(CreateDate);
|
||||
_worldPacket << int32(NumMembers);
|
||||
_worldPacket << int32(NumAccounts);
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Guild::GuildRoster::Write()
|
||||
{
|
||||
_worldPacket << uint32(MemberData.size());
|
||||
_worldPacket << WelcomeText;
|
||||
_worldPacket << InfoText;
|
||||
_worldPacket << uint32(RankData.size());
|
||||
|
||||
for (GuildRankData const& rank : RankData)
|
||||
_worldPacket << rank;
|
||||
|
||||
for (GuildRosterMemberData const& member : MemberData)
|
||||
_worldPacket << member;
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Guild::GuildUpdateMotdText::Read()
|
||||
{
|
||||
_worldPacket >> MotdText;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Guild::GuildCommandResult::Write()
|
||||
{
|
||||
_worldPacket << int32(Command);
|
||||
_worldPacket << Name;
|
||||
_worldPacket << int32(Result);
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Guild::GuildInviteByName::Read()
|
||||
{
|
||||
_worldPacket >> Name;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Guild::GuildInvite::Write()
|
||||
{
|
||||
_worldPacket << InviterName;
|
||||
_worldPacket << GuildName;
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRosterMemberData const& rosterMemberData)
|
||||
{
|
||||
data << rosterMemberData.Guid;
|
||||
data << uint8(rosterMemberData.Status);
|
||||
data << rosterMemberData.Name;
|
||||
data << int32(rosterMemberData.RankID);
|
||||
data << uint8(rosterMemberData.Level);
|
||||
data << uint8(rosterMemberData.ClassID);
|
||||
data << uint8(rosterMemberData.Gender);
|
||||
data << int32(rosterMemberData.AreaID);
|
||||
if (!rosterMemberData.Status)
|
||||
data << float(rosterMemberData.LastSave);
|
||||
|
||||
data << rosterMemberData.Note;
|
||||
data << rosterMemberData.OfficerNote;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Guild::GuildEvent::Write()
|
||||
{
|
||||
_worldPacket << uint8(Type);
|
||||
_worldPacket << uint8(Params.size());
|
||||
for (std::string_view param : Params)
|
||||
_worldPacket << param;
|
||||
|
||||
switch (Type)
|
||||
{
|
||||
case GE_JOINED:
|
||||
case GE_LEFT:
|
||||
case GE_SIGNED_ON:
|
||||
case GE_SIGNED_OFF:
|
||||
_worldPacket << Guid;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Guild::GuildEventLogQueryResults::Write()
|
||||
{
|
||||
_worldPacket.reserve(1 + Entry.size() * sizeof(GuildEventEntry));
|
||||
|
||||
_worldPacket << uint8(Entry.size());
|
||||
|
||||
for (GuildEventEntry const& entry : Entry)
|
||||
{
|
||||
_worldPacket << uint8(entry.TransactionType);
|
||||
_worldPacket << entry.PlayerGUID;
|
||||
if (entry.TransactionType != GUILD_EVENT_LOG_JOIN_GUILD && entry.TransactionType != GUILD_EVENT_LOG_LEAVE_GUILD)
|
||||
_worldPacket << entry.OtherGUID;
|
||||
if (entry.TransactionType == GUILD_EVENT_LOG_PROMOTE_PLAYER || entry.TransactionType == GUILD_EVENT_LOG_DEMOTE_PLAYER)
|
||||
_worldPacket << uint8(entry.RankID);
|
||||
_worldPacket << uint32(entry.TransactionDate);
|
||||
}
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Guild::GuildPermissionsQueryResults::Write()
|
||||
{
|
||||
_worldPacket << uint32(RankID);
|
||||
_worldPacket << int32(Flags);
|
||||
_worldPacket << int32(WithdrawGoldLimit);
|
||||
_worldPacket << int8(NumTabs);
|
||||
|
||||
for (GuildRankTabPermissions const& tab : Tab)
|
||||
{
|
||||
_worldPacket << int32(tab.Flags);
|
||||
_worldPacket << int32(tab.WithdrawItemLimit);
|
||||
}
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Guild::GuildSetRankPermissions::Read()
|
||||
{
|
||||
_worldPacket >> RankID;
|
||||
_worldPacket >> Flags;
|
||||
_worldPacket >> RankName;
|
||||
_worldPacket >> WithdrawGoldLimit;
|
||||
|
||||
for (uint8 i = 0; i < GUILD_BANK_MAX_TABS; i++)
|
||||
{
|
||||
_worldPacket >> TabFlags[i];
|
||||
_worldPacket >> TabWithdrawItemLimit[i];
|
||||
}
|
||||
}
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRankData const& rankData)
|
||||
{
|
||||
data << uint32(rankData.Flags);
|
||||
data << uint32(rankData.WithdrawGoldLimit);
|
||||
|
||||
for (uint8 i = 0; i < GUILD_BANK_MAX_TABS; i++)
|
||||
{
|
||||
data << uint32(rankData.TabFlags[i]);
|
||||
data << uint32(rankData.TabWithdrawItemLimit[i]);
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
void WorldPackets::Guild::GuildAddRank::Read()
|
||||
{
|
||||
_worldPacket >> Name;
|
||||
}
|
||||
|
||||
void WorldPackets::Guild::GuildUpdateInfoText::Read()
|
||||
{
|
||||
_worldPacket >> InfoText;
|
||||
}
|
||||
|
||||
void WorldPackets::Guild::GuildSetMemberNote::Read()
|
||||
{
|
||||
_worldPacket >> NoteeName;
|
||||
_worldPacket >> Note;
|
||||
}
|
||||
|
||||
void WorldPackets::Guild::GuildDemoteMember::Read()
|
||||
{
|
||||
_worldPacket >> Demotee;
|
||||
}
|
||||
|
||||
void WorldPackets::Guild::GuildPromoteMember::Read()
|
||||
{
|
||||
_worldPacket >> Promotee;
|
||||
}
|
||||
|
||||
void WorldPackets::Guild::GuildOfficerRemoveMember::Read()
|
||||
{
|
||||
_worldPacket >> Removee;
|
||||
}
|
||||
|
||||
void WorldPackets::Guild::GuildBankActivate::Read()
|
||||
{
|
||||
_worldPacket >> Banker;
|
||||
_worldPacket >> FullUpdate;
|
||||
}
|
||||
|
||||
void WorldPackets::Guild::GuildBankBuyTab::Read()
|
||||
{
|
||||
_worldPacket >> Banker;
|
||||
_worldPacket >> BankTab;
|
||||
}
|
||||
|
||||
void WorldPackets::Guild::GuildBankUpdateTab::Read()
|
||||
{
|
||||
_worldPacket >> Banker;
|
||||
_worldPacket >> BankTab;
|
||||
_worldPacket >> Name;
|
||||
_worldPacket >> Icon;
|
||||
}
|
||||
|
||||
void WorldPackets::Guild::GuildBankDepositMoney::Read()
|
||||
{
|
||||
_worldPacket >> Banker;
|
||||
_worldPacket >> Money;
|
||||
}
|
||||
|
||||
void WorldPackets::Guild::GuildBankQueryTab::Read()
|
||||
{
|
||||
_worldPacket >> Banker;
|
||||
_worldPacket >> Tab;
|
||||
_worldPacket >> FullUpdate;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Guild::GuildBankRemainingWithdrawMoney::Write()
|
||||
{
|
||||
_worldPacket << RemainingWithdrawMoney;
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Guild::GuildBankWithdrawMoney::Read()
|
||||
{
|
||||
_worldPacket >> Banker;
|
||||
_worldPacket >> Money;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Guild::GuildBankQueryResults::Write()
|
||||
{
|
||||
_worldPacket << uint64(Money);
|
||||
_worldPacket << uint8(Tab);
|
||||
_withdrawalsRemainingPos = _worldPacket.wpos();
|
||||
_worldPacket << int32(WithdrawalsRemaining);
|
||||
_worldPacket << uint8(FullUpdate);
|
||||
|
||||
if (!Tab && FullUpdate)
|
||||
{
|
||||
_worldPacket << uint8(TabInfo.size());
|
||||
for (GuildBankTabInfo const& tab : TabInfo)
|
||||
{
|
||||
_worldPacket << tab.Name;
|
||||
_worldPacket << tab.Icon;
|
||||
}
|
||||
}
|
||||
|
||||
_worldPacket << uint8(ItemInfo.size());
|
||||
for (GuildBankItemInfo const& item : ItemInfo)
|
||||
{
|
||||
_worldPacket << uint8(item.Slot);
|
||||
_worldPacket << uint32(item.ItemID);
|
||||
if (item.ItemID)
|
||||
{
|
||||
_worldPacket << int32(item.Flags);
|
||||
_worldPacket << int32(item.RandomPropertiesID);
|
||||
if (item.RandomPropertiesID)
|
||||
_worldPacket << int32(item.RandomPropertiesSeed);
|
||||
|
||||
_worldPacket << int32(item.Count);
|
||||
_worldPacket << int32(item.EnchantmentID);
|
||||
_worldPacket << uint8(item.Charges);
|
||||
_worldPacket << uint8(item.SocketEnchant.size());
|
||||
|
||||
for (GuildBankSocketEnchant const& socketEnchant : item.SocketEnchant)
|
||||
{
|
||||
_worldPacket << uint8(socketEnchant.SocketIndex);
|
||||
_worldPacket << int32(socketEnchant.SocketEnchantID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Guild::GuildBankQueryResults::SetWithdrawalsRemaining(int32 withdrawalsRemaining)
|
||||
{
|
||||
WithdrawalsRemaining = withdrawalsRemaining;
|
||||
_worldPacket.put<int32>(_withdrawalsRemainingPos, withdrawalsRemaining);
|
||||
}
|
||||
|
||||
void WorldPackets::Guild::GuildBankSwapItems::Read()
|
||||
{
|
||||
_worldPacket >> Banker;
|
||||
_worldPacket >> BankOnly;
|
||||
|
||||
if (BankOnly)
|
||||
{
|
||||
// dest
|
||||
_worldPacket >> BankTab;
|
||||
_worldPacket >> BankSlot;
|
||||
_worldPacket >> ItemID;
|
||||
|
||||
// src
|
||||
_worldPacket >> BankTab1;
|
||||
_worldPacket >> BankSlot1;
|
||||
_worldPacket >> ItemID1;
|
||||
|
||||
_worldPacket >> AutoStore;
|
||||
_worldPacket >> BankItemCount;
|
||||
}
|
||||
else
|
||||
{
|
||||
_worldPacket >> BankTab;
|
||||
_worldPacket >> BankSlot;
|
||||
_worldPacket >> ItemID;
|
||||
|
||||
_worldPacket >> AutoStore;
|
||||
if (AutoStore)
|
||||
{
|
||||
_worldPacket >> BankItemCount;
|
||||
_worldPacket >> ToSlot;
|
||||
_worldPacket >> StackCount;
|
||||
}
|
||||
else
|
||||
{
|
||||
_worldPacket >> ContainerSlot;
|
||||
_worldPacket >> ContainerItemSlot;
|
||||
_worldPacket >> ToSlot;
|
||||
_worldPacket >> StackCount;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void WorldPackets::Guild::GuildBankLogQuery::Read()
|
||||
{
|
||||
_worldPacket >> Tab;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Guild::GuildBankLogQueryResults::Write()
|
||||
{
|
||||
_worldPacket << uint8(Tab);
|
||||
_worldPacket << uint8(Entry.size());
|
||||
|
||||
for (GuildBankLogEntry const& logEntry : Entry)
|
||||
{
|
||||
_worldPacket << int8(logEntry.EntryType);
|
||||
_worldPacket << logEntry.PlayerGUID;
|
||||
|
||||
switch (logEntry.EntryType)
|
||||
{
|
||||
case GUILD_BANK_LOG_DEPOSIT_ITEM:
|
||||
case GUILD_BANK_LOG_WITHDRAW_ITEM:
|
||||
_worldPacket << uint32(logEntry.ItemID);
|
||||
_worldPacket << uint32(logEntry.Count);
|
||||
break;
|
||||
case GUILD_BANK_LOG_MOVE_ITEM:
|
||||
case GUILD_BANK_LOG_MOVE_ITEM2:
|
||||
_worldPacket << uint32(logEntry.ItemID);
|
||||
_worldPacket << uint32(logEntry.Count);
|
||||
_worldPacket << uint8(logEntry.OtherTab);
|
||||
break;
|
||||
default:
|
||||
_worldPacket << uint32(logEntry.Money);
|
||||
break;
|
||||
}
|
||||
|
||||
_worldPacket << uint32(logEntry.TimeOffset);
|
||||
}
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Guild::GuildBankTextQuery::Read()
|
||||
{
|
||||
_worldPacket >> Tab;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Guild::GuildBankTextQueryResult::Write()
|
||||
{
|
||||
_worldPacket << uint8(Tab);
|
||||
_worldPacket << Text;
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Guild::GuildBankSetTabText::Read()
|
||||
{
|
||||
_worldPacket >> Tab;
|
||||
_worldPacket >> TabText;
|
||||
}
|
||||
|
||||
void WorldPackets::Guild::GuildSetGuildMaster::Read()
|
||||
{
|
||||
_worldPacket >> NewMasterName;
|
||||
}
|
||||
|
||||
void WorldPackets::Guild::SaveGuildEmblem::Read()
|
||||
{
|
||||
_worldPacket >> Vendor;
|
||||
_worldPacket >> EStyle;
|
||||
_worldPacket >> EColor;
|
||||
_worldPacket >> BStyle;
|
||||
_worldPacket >> BColor;
|
||||
_worldPacket >> Bg;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Guild::PlayerSaveGuildEmblem::Write()
|
||||
{
|
||||
_worldPacket << int32(Error);
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
628
src/server/game/Server/Packets/GuildPackets.h
Normal file
628
src/server/game/Server/Packets/GuildPackets.h
Normal file
@@ -0,0 +1,628 @@
|
||||
/*
|
||||
* This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Affero General Public License as published by the
|
||||
* Free Software Foundation; either version 3 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef GuildPackets_h__
|
||||
#define GuildPackets_h__
|
||||
|
||||
#include "Packet.h"
|
||||
#include "Guild.h"
|
||||
#include "ObjectGuid.h"
|
||||
#include "PacketUtilities.h"
|
||||
#include <boost/container/static_vector.hpp>
|
||||
#include <array>
|
||||
|
||||
namespace WorldPackets
|
||||
{
|
||||
namespace Guild
|
||||
{
|
||||
class QueryGuildInfo final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
QueryGuildInfo(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_QUERY, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
uint32 GuildId = 0;
|
||||
};
|
||||
|
||||
struct GuildInfo
|
||||
{
|
||||
std::string GuildName;
|
||||
|
||||
std::array<std::string, GUILD_RANKS_MAX_COUNT> Ranks;
|
||||
uint32 RankCount = 0;
|
||||
|
||||
uint32 EmblemStyle = 0;
|
||||
uint32 EmblemColor = 0;
|
||||
uint32 BorderStyle = 0;
|
||||
uint32 BorderColor = 0;
|
||||
uint32 BackgroundColor = 0;
|
||||
};
|
||||
|
||||
class QueryGuildInfoResponse final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
QueryGuildInfoResponse();
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
uint32 GuildId = 0;
|
||||
GuildInfo Info;
|
||||
};
|
||||
|
||||
class GuildCreate final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildCreate(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_CREATE, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
std::string GuildName;
|
||||
};
|
||||
|
||||
class GuildGetInfo final : ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildGetInfo(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_INFO, std::move(packet)) { }
|
||||
|
||||
void Read() override { }
|
||||
};
|
||||
|
||||
class GuildInfoResponse final : ServerPacket
|
||||
{
|
||||
public:
|
||||
GuildInfoResponse() : ServerPacket(SMSG_GUILD_INFO, 123) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
std::string GuildName;
|
||||
time_t CreateDate = time_t(0);
|
||||
int32 NumMembers = 0;
|
||||
int32 NumAccounts = 0;
|
||||
};
|
||||
|
||||
class GuildGetRoster final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildGetRoster(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_ROSTER, std::move(packet)) { }
|
||||
|
||||
void Read() override { }
|
||||
};
|
||||
|
||||
struct GuildRosterMemberData
|
||||
{
|
||||
ObjectGuid Guid;
|
||||
int64 WeeklyXP = 0;
|
||||
int64 TotalXP = 0;
|
||||
int32 RankID = 0;
|
||||
int32 AreaID = 0;
|
||||
float LastSave = 0.0f;
|
||||
std::string Name;
|
||||
std::string Note;
|
||||
std::string OfficerNote;
|
||||
uint8 Status = 0;
|
||||
uint8 Level = 0;
|
||||
uint8 ClassID = 0;
|
||||
uint8 Gender = 0;
|
||||
};
|
||||
|
||||
struct GuildRankData
|
||||
{
|
||||
uint32 Flags = 0;
|
||||
uint32 WithdrawGoldLimit = 0;
|
||||
uint32 TabFlags[GUILD_BANK_MAX_TABS];
|
||||
uint32 TabWithdrawItemLimit[GUILD_BANK_MAX_TABS];
|
||||
};
|
||||
|
||||
class GuildRoster final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
GuildRoster() : ServerPacket(SMSG_GUILD_ROSTER, 4 + 4 + 4 + 4) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
std::vector<GuildRosterMemberData> MemberData;
|
||||
std::vector<GuildRankData> RankData;
|
||||
std::string WelcomeText;
|
||||
std::string InfoText;
|
||||
};
|
||||
|
||||
class GuildUpdateMotdText final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildUpdateMotdText(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_MOTD, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
String<128, Strings::NoHyperlinks> MotdText;
|
||||
};
|
||||
|
||||
class GuildCommandResult final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
GuildCommandResult() : ServerPacket(SMSG_GUILD_COMMAND_RESULT, 9) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
std::string Name;
|
||||
int32 Result = 0;
|
||||
int32 Command = 0;
|
||||
};
|
||||
|
||||
class AcceptGuildInvite final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
AcceptGuildInvite(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_ACCEPT, std::move(packet)) { }
|
||||
|
||||
void Read() override { }
|
||||
};
|
||||
|
||||
class GuildDeclineInvitation final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildDeclineInvitation(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_DECLINE, std::move(packet)) { }
|
||||
|
||||
void Read() override { }
|
||||
};
|
||||
|
||||
class GuildInviteByName final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildInviteByName(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_INVITE, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
String<48> Name;
|
||||
};
|
||||
|
||||
class GuildInvite final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
GuildInvite() : ServerPacket(SMSG_GUILD_INVITE, 144) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
std::string InviterName;
|
||||
std::string GuildName;
|
||||
};
|
||||
|
||||
class GuildEvent final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
GuildEvent() : ServerPacket(SMSG_GUILD_EVENT) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
uint8 Type = 0;
|
||||
boost::container::static_vector<std::string_view, 3> Params;
|
||||
ObjectGuid Guid;
|
||||
};
|
||||
|
||||
struct GuildEventEntry
|
||||
{
|
||||
ObjectGuid PlayerGUID;
|
||||
ObjectGuid OtherGUID;
|
||||
uint8 TransactionType = 0;
|
||||
uint8 RankID = 0;
|
||||
uint32 TransactionDate = 0;
|
||||
};
|
||||
|
||||
class GuildEventLogQuery final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildEventLogQuery(WorldPacket&& packet) : ClientPacket(MSG_GUILD_EVENT_LOG_QUERY, std::move(packet)) { }
|
||||
|
||||
void Read() override { }
|
||||
};
|
||||
|
||||
class GuildEventLogQueryResults final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
GuildEventLogQueryResults() : ServerPacket(MSG_GUILD_EVENT_LOG_QUERY, 4) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
std::vector<GuildEventEntry> Entry;
|
||||
};
|
||||
|
||||
class GuildPermissionsQuery final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildPermissionsQuery(WorldPacket&& packet) : ClientPacket(MSG_GUILD_PERMISSIONS, std::move(packet)) { }
|
||||
|
||||
void Read() override { }
|
||||
};
|
||||
|
||||
class GuildPermissionsQueryResults final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
struct GuildRankTabPermissions
|
||||
{
|
||||
int32 Flags = 0;
|
||||
int32 WithdrawItemLimit = 0;
|
||||
};
|
||||
|
||||
GuildPermissionsQueryResults() : ServerPacket(MSG_GUILD_PERMISSIONS, 20) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
int8 NumTabs = 0;
|
||||
int32 WithdrawGoldLimit = 0;
|
||||
int32 Flags = 0;
|
||||
uint32 RankID = 0;
|
||||
std::array<GuildRankTabPermissions, GUILD_BANK_MAX_TABS> Tab;
|
||||
};
|
||||
|
||||
class GuildSetRankPermissions final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildSetRankPermissions(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_RANK, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
uint32 RankID = 0;
|
||||
uint32 WithdrawGoldLimit = 0;
|
||||
uint32 Flags = 0;
|
||||
uint32 TabFlags[GUILD_BANK_MAX_TABS];
|
||||
uint32 TabWithdrawItemLimit[GUILD_BANK_MAX_TABS];
|
||||
String<15, Strings::NoHyperlinks> RankName;
|
||||
};
|
||||
|
||||
class GuildAddRank final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildAddRank(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_ADD_RANK, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
String<15, Strings::NoHyperlinks> Name;
|
||||
};
|
||||
|
||||
class GuildDeleteRank final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildDeleteRank(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_DEL_RANK, std::move(packet)) { }
|
||||
|
||||
void Read() override { }
|
||||
};
|
||||
|
||||
class GuildUpdateInfoText final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildUpdateInfoText(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_INFO_TEXT, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
String<500, Strings::NoHyperlinks> InfoText;
|
||||
};
|
||||
|
||||
class GuildSetMemberNote final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildSetMemberNote(WorldPacket&& packet) : ClientPacket(std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
std::string NoteeName;
|
||||
String<31, Strings::NoHyperlinks> Note;
|
||||
};
|
||||
|
||||
class GuildDelete final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildDelete(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_DISBAND, std::move(packet)) { }
|
||||
|
||||
void Read() override { }
|
||||
};
|
||||
|
||||
class GuildDemoteMember final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildDemoteMember(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_DEMOTE, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
std::string Demotee;
|
||||
};
|
||||
|
||||
class GuildPromoteMember final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildPromoteMember(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_PROMOTE, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
std::string Promotee;
|
||||
};
|
||||
|
||||
class GuildOfficerRemoveMember : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildOfficerRemoveMember(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_REMOVE, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
std::string Removee;
|
||||
};
|
||||
|
||||
class GuildLeave final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildLeave(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_LEAVE, std::move(packet)) { }
|
||||
|
||||
void Read() override { }
|
||||
};
|
||||
|
||||
class GuildBankActivate final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildBankActivate(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_BANKER_ACTIVATE, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
ObjectGuid Banker;
|
||||
bool FullUpdate = false;
|
||||
};
|
||||
|
||||
class GuildBankBuyTab final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildBankBuyTab(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_BANK_BUY_TAB, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
ObjectGuid Banker;
|
||||
uint8 BankTab = 0;
|
||||
};
|
||||
|
||||
class GuildBankUpdateTab final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildBankUpdateTab(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_BANK_UPDATE_TAB, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
ObjectGuid Banker;
|
||||
uint8 BankTab = 0;
|
||||
String<16, Strings::NoHyperlinks> Name;
|
||||
String<100> Icon;
|
||||
};
|
||||
|
||||
class GuildBankDepositMoney final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildBankDepositMoney(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_BANK_DEPOSIT_MONEY, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
ObjectGuid Banker;
|
||||
uint32 Money = 0;
|
||||
};
|
||||
|
||||
class GuildBankQueryTab final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildBankQueryTab(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_BANK_QUERY_TAB, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
ObjectGuid Banker;
|
||||
uint8 Tab = 0;
|
||||
bool FullUpdate = false;
|
||||
};
|
||||
|
||||
class GuildBankRemainingWithdrawMoneyQuery final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildBankRemainingWithdrawMoneyQuery(WorldPacket&& packet) : ClientPacket(MSG_GUILD_BANK_MONEY_WITHDRAWN, std::move(packet)) { }
|
||||
|
||||
void Read() override { }
|
||||
};
|
||||
|
||||
class GuildBankRemainingWithdrawMoney final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
GuildBankRemainingWithdrawMoney() : ServerPacket(MSG_GUILD_BANK_MONEY_WITHDRAWN, 8) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
int32 RemainingWithdrawMoney = 0;
|
||||
};
|
||||
|
||||
class GuildBankWithdrawMoney final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildBankWithdrawMoney(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_BANK_WITHDRAW_MONEY, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
ObjectGuid Banker;
|
||||
uint32 Money = 0;
|
||||
};
|
||||
|
||||
struct GuildBankSocketEnchant
|
||||
{
|
||||
uint8 SocketIndex = 0;
|
||||
int32 SocketEnchantID = 0;
|
||||
};
|
||||
|
||||
struct GuildBankItemInfo
|
||||
{
|
||||
uint32 ItemID = 0;
|
||||
int32 RandomPropertiesSeed = 0;
|
||||
int32 RandomPropertiesID = 0;
|
||||
uint8 Slot = 0;
|
||||
int32 Count = 0;
|
||||
int32 EnchantmentID = 0;
|
||||
int32 Charges = 0;
|
||||
int32 Flags = 0;
|
||||
std::vector<GuildBankSocketEnchant> SocketEnchant;
|
||||
};
|
||||
|
||||
struct GuildBankTabInfo
|
||||
{
|
||||
std::string Name;
|
||||
std::string Icon;
|
||||
};
|
||||
|
||||
class GuildBankQueryResults final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
GuildBankQueryResults() : ServerPacket(SMSG_GUILD_BANK_LIST, 25) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
std::vector<GuildBankItemInfo> ItemInfo;
|
||||
std::vector<GuildBankTabInfo> TabInfo;
|
||||
int32 WithdrawalsRemaining = 0;
|
||||
uint8 Tab = 0;
|
||||
uint64 Money = 0;
|
||||
bool FullUpdate = false;
|
||||
|
||||
void SetWithdrawalsRemaining(int32 withdrawalsRemaining);
|
||||
|
||||
private:
|
||||
std::size_t _withdrawalsRemainingPos = 0;
|
||||
};
|
||||
|
||||
class GuildBankSwapItems final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildBankSwapItems(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_BANK_SWAP_ITEMS, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
ObjectGuid Banker;
|
||||
int32 StackCount = 0;
|
||||
int32 BankItemCount = 0;
|
||||
uint32 ItemID = 0;
|
||||
uint32 ItemID1 = 0;
|
||||
uint8 ToSlot = 0;
|
||||
uint8 BankSlot = 0;
|
||||
uint8 BankSlot1 = 0;
|
||||
uint8 BankTab = 0;
|
||||
uint8 BankTab1 = 0;
|
||||
uint8 ContainerSlot = 0;
|
||||
uint8 ContainerItemSlot = 0;
|
||||
bool AutoStore = false;
|
||||
bool BankOnly = false;
|
||||
};
|
||||
|
||||
class GuildBankLogQuery final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildBankLogQuery(WorldPacket&& packet) : ClientPacket(MSG_GUILD_BANK_LOG_QUERY, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
uint8 Tab = 0;
|
||||
};
|
||||
|
||||
struct GuildBankLogEntry
|
||||
{
|
||||
ObjectGuid PlayerGUID;
|
||||
uint32 TimeOffset = 0;
|
||||
int8 EntryType = 0;
|
||||
uint32 Money = 0;
|
||||
int32 ItemID = 0;
|
||||
int32 Count = 0;
|
||||
int8 OtherTab = 0;
|
||||
};
|
||||
|
||||
class GuildBankLogQueryResults final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
GuildBankLogQueryResults() : ServerPacket(MSG_GUILD_BANK_LOG_QUERY, 25) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
uint8 Tab = 0;
|
||||
std::vector<GuildBankLogEntry> Entry;
|
||||
};
|
||||
|
||||
class GuildBankTextQuery final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildBankTextQuery(WorldPacket&& packet) : ClientPacket(MSG_QUERY_GUILD_BANK_TEXT, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
uint8 Tab = 0;
|
||||
};
|
||||
|
||||
class GuildBankTextQueryResult : public ServerPacket
|
||||
{
|
||||
public:
|
||||
GuildBankTextQueryResult() : ServerPacket(MSG_QUERY_GUILD_BANK_TEXT, 4 + 2) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
uint8 Tab = 0;
|
||||
std::string Text;
|
||||
};
|
||||
|
||||
class GuildBankSetTabText final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildBankSetTabText(WorldPacket&& packet) : ClientPacket(CMSG_SET_GUILD_BANK_TEXT, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
uint8 Tab = 0;
|
||||
String<500, Strings::NoHyperlinks> TabText;
|
||||
};
|
||||
|
||||
class GuildSetGuildMaster final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GuildSetGuildMaster(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_LEADER, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
std::string NewMasterName;
|
||||
};
|
||||
|
||||
class SaveGuildEmblem final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
SaveGuildEmblem(WorldPacket&& packet) : ClientPacket(MSG_SAVE_GUILD_EMBLEM, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
ObjectGuid Vendor;
|
||||
int32 BStyle = 0;
|
||||
int32 EStyle = 0;
|
||||
int32 BColor = 0;
|
||||
int32 EColor = 0;
|
||||
int32 Bg = 0;
|
||||
};
|
||||
|
||||
class PlayerSaveGuildEmblem final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
PlayerSaveGuildEmblem() : ServerPacket(MSG_SAVE_GUILD_EMBLEM, 4) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
int32 Error = 0;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRosterMemberData const& rosterMemberData);
|
||||
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRankData const& rankData);
|
||||
|
||||
#endif // GuildPackets_h__
|
||||
@@ -20,7 +20,7 @@
|
||||
#include "WorldSession.h"
|
||||
#include <iomanip>
|
||||
#include <sstream>
|
||||
//#include "Packets/AllPackets.h"
|
||||
#include "Packets/AllPackets.h"
|
||||
|
||||
template<class PacketClass, void(WorldSession::* HandlerFunction)(PacketClass&)>
|
||||
class PacketHandler : public ClientOpcodeHandler
|
||||
|
||||
@@ -71,6 +71,42 @@ namespace lfg
|
||||
|
||||
namespace WorldPackets
|
||||
{
|
||||
namespace Guild
|
||||
{
|
||||
class QueryGuildInfo;
|
||||
class GuildCreate;
|
||||
class GuildInviteByName;
|
||||
class AcceptGuildInvite;
|
||||
class GuildDeclineInvitation;
|
||||
class GuildGetInfo;
|
||||
class GuildGetRoster;
|
||||
class GuildPromoteMember;
|
||||
class GuildDemoteMember;
|
||||
class GuildOfficerRemoveMember;
|
||||
class GuildLeave;
|
||||
class GuildDelete;
|
||||
class GuildUpdateMotdText;
|
||||
class GuildAddRank;
|
||||
class GuildDeleteRank;
|
||||
class GuildUpdateInfoText;
|
||||
class GuildSetMemberNote;
|
||||
class GuildEventLogQuery;
|
||||
class GuildBankRemainingWithdrawMoneyQuery;
|
||||
class GuildPermissionsQuery;
|
||||
class GuildSetRankPermissions;
|
||||
class GuildBankActivate;
|
||||
class GuildBankQueryTab;
|
||||
class GuildBankDepositMoney;
|
||||
class GuildBankWithdrawMoney;
|
||||
class GuildBankSwapItems;
|
||||
class GuildBankBuyTab;
|
||||
class GuildBankUpdateTab;
|
||||
class GuildBankLogQuery;
|
||||
class GuildBankTextQuery;
|
||||
class GuildBankSetTabText;
|
||||
class GuildSetGuildMaster;
|
||||
class SaveGuildEmblem;
|
||||
}
|
||||
}
|
||||
|
||||
enum AccountDataType
|
||||
@@ -602,28 +638,28 @@ public: // opcodes handlers
|
||||
void HandleOfferPetitionOpcode(WorldPacket& recvData);
|
||||
void HandleTurnInPetitionOpcode(WorldPacket& recvData);
|
||||
|
||||
void HandleGuildQueryOpcode(WorldPacket& recvPacket);
|
||||
void HandleGuildCreateOpcode(WorldPacket& recvPacket);
|
||||
void HandleGuildInviteOpcode(WorldPacket& recvPacket);
|
||||
void HandleGuildRemoveOpcode(WorldPacket& recvPacket);
|
||||
void HandleGuildAcceptOpcode(WorldPacket& recvPacket);
|
||||
void HandleGuildDeclineOpcode(WorldPacket& recvPacket);
|
||||
void HandleGuildInfoOpcode(WorldPacket& recvPacket);
|
||||
void HandleGuildEventLogQueryOpcode(WorldPacket& recvPacket);
|
||||
void HandleGuildRosterOpcode(WorldPacket& recvPacket);
|
||||
void HandleGuildPromoteOpcode(WorldPacket& recvPacket);
|
||||
void HandleGuildDemoteOpcode(WorldPacket& recvPacket);
|
||||
void HandleGuildLeaveOpcode(WorldPacket& recvPacket);
|
||||
void HandleGuildDisbandOpcode(WorldPacket& recvPacket);
|
||||
void HandleGuildLeaderOpcode(WorldPacket& recvPacket);
|
||||
void HandleGuildMOTDOpcode(WorldPacket& recvPacket);
|
||||
void HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket);
|
||||
void HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket);
|
||||
void HandleGuildRankOpcode(WorldPacket& recvPacket);
|
||||
void HandleGuildAddRankOpcode(WorldPacket& recvPacket);
|
||||
void HandleGuildDelRankOpcode(WorldPacket& recvPacket);
|
||||
void HandleGuildChangeInfoTextOpcode(WorldPacket& recvPacket);
|
||||
void HandleSaveGuildEmblemOpcode(WorldPacket& recvPacket);
|
||||
void HandleGuildQueryOpcode(WorldPackets::Guild::QueryGuildInfo& query);
|
||||
void HandleGuildCreateOpcode(WorldPackets::Guild::GuildCreate& packet);
|
||||
void HandleGuildInviteOpcode(WorldPackets::Guild::GuildInviteByName& packet);
|
||||
void HandleGuildRemoveOpcode(WorldPackets::Guild::GuildOfficerRemoveMember& packet);
|
||||
void HandleGuildAcceptOpcode(WorldPackets::Guild::AcceptGuildInvite& invite);
|
||||
void HandleGuildDeclineOpcode(WorldPackets::Guild::GuildDeclineInvitation& decline);
|
||||
void HandleGuildInfoOpcode(WorldPackets::Guild::GuildGetInfo& packet);
|
||||
void HandleGuildEventLogQueryOpcode(WorldPackets::Guild::GuildEventLogQuery& packet);
|
||||
void HandleGuildRosterOpcode(WorldPackets::Guild::GuildGetRoster& packet);
|
||||
void HandleGuildPromoteOpcode(WorldPackets::Guild::GuildPromoteMember& promote);
|
||||
void HandleGuildDemoteOpcode(WorldPackets::Guild::GuildDemoteMember& demote);
|
||||
void HandleGuildLeaveOpcode(WorldPackets::Guild::GuildLeave& leave);
|
||||
void HandleGuildDisbandOpcode(WorldPackets::Guild::GuildDelete& packet);
|
||||
void HandleGuildLeaderOpcode(WorldPackets::Guild::GuildSetGuildMaster& packet);
|
||||
void HandleGuildMOTDOpcode(WorldPackets::Guild::GuildUpdateMotdText& packet);
|
||||
void HandleGuildSetPublicNoteOpcode(WorldPackets::Guild::GuildSetMemberNote& packet);
|
||||
void HandleGuildSetOfficerNoteOpcode(WorldPackets::Guild::GuildSetMemberNote& packet);
|
||||
void HandleGuildRankOpcode(WorldPackets::Guild::GuildSetRankPermissions& packet);
|
||||
void HandleGuildAddRankOpcode(WorldPackets::Guild::GuildAddRank& packet);
|
||||
void HandleGuildDelRankOpcode(WorldPackets::Guild::GuildDeleteRank& packet);
|
||||
void HandleGuildChangeInfoTextOpcode(WorldPackets::Guild::GuildUpdateInfoText& packet);
|
||||
void HandleSaveGuildEmblemOpcode(WorldPackets::Guild::SaveGuildEmblem& packet);
|
||||
|
||||
void HandleTaxiNodeStatusQueryOpcode(WorldPacket& recvPacket);
|
||||
void HandleTaxiQueryAvailableNodes(WorldPacket& recvPacket);
|
||||
@@ -913,19 +949,19 @@ public: // opcodes handlers
|
||||
void HandleSetTaxiBenchmarkOpcode(WorldPacket& recvData);
|
||||
|
||||
// Guild Bank
|
||||
void HandleGuildPermissions(WorldPacket& recvData);
|
||||
void HandleGuildBankMoneyWithdrawn(WorldPacket& recvData);
|
||||
void HandleGuildBankerActivate(WorldPacket& recvData);
|
||||
void HandleGuildBankQueryTab(WorldPacket& recvData);
|
||||
void HandleGuildBankLogQuery(WorldPacket& recvData);
|
||||
void HandleGuildBankDepositMoney(WorldPacket& recvData);
|
||||
void HandleGuildBankWithdrawMoney(WorldPacket& recvData);
|
||||
void HandleGuildBankSwapItems(WorldPacket& recvData);
|
||||
void HandleGuildPermissions(WorldPackets::Guild::GuildPermissionsQuery& packet);
|
||||
void HandleGuildBankMoneyWithdrawn(WorldPackets::Guild::GuildBankRemainingWithdrawMoneyQuery& packet);
|
||||
void HandleGuildBankerActivate(WorldPackets::Guild::GuildBankActivate& packet);
|
||||
void HandleGuildBankQueryTab(WorldPackets::Guild::GuildBankQueryTab& packet);
|
||||
void HandleGuildBankLogQuery(WorldPackets::Guild::GuildBankLogQuery& packet);
|
||||
void HandleGuildBankDepositMoney(WorldPackets::Guild::GuildBankDepositMoney& packet);
|
||||
void HandleGuildBankWithdrawMoney(WorldPackets::Guild::GuildBankWithdrawMoney& packet);
|
||||
void HandleGuildBankSwapItems(WorldPackets::Guild::GuildBankSwapItems& packet);
|
||||
|
||||
void HandleGuildBankUpdateTab(WorldPacket& recvData);
|
||||
void HandleGuildBankBuyTab(WorldPacket& recvData);
|
||||
void HandleQueryGuildBankTabText(WorldPacket& recvData);
|
||||
void HandleSetGuildBankTabText(WorldPacket& recvData);
|
||||
void HandleGuildBankUpdateTab(WorldPackets::Guild::GuildBankUpdateTab& packet);
|
||||
void HandleGuildBankBuyTab(WorldPackets::Guild::GuildBankBuyTab& packet);
|
||||
void HandleQueryGuildBankTabText(WorldPackets::Guild::GuildBankTextQuery& packet);
|
||||
void HandleSetGuildBankTabText(WorldPackets::Guild::GuildBankSetTabText& packet);
|
||||
|
||||
// Refer-a-Friend
|
||||
void HandleGrantLevel(WorldPacket& recvData);
|
||||
|
||||
Reference in New Issue
Block a user