aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
diff options
context:
space:
mode:
authorMogadischu <cgnad@live.de>2015-02-13 18:31:50 +0000
committerDuarte Duarte <dnpd.dd@gmail.com>2015-02-13 18:32:36 +0000
commitbc0c0ae2a334ee87df726c25b833e38a0c874614 (patch)
tree96bca61e912521a85ea64db5cfe3824ba86c93b1 /src/server/game
parent69104cfa2a8d04af7738bf427d0c35063b3a3cb4 (diff)
Core/Guild: Updated and enabled most previously implemented guild and petition related packets
Merged from https://github.com/Mogadischu/TrinityCore/commits/guild Signed-off-by: Duarte Duarte <dnpd.dd@gmail.com>
Diffstat (limited to 'src/server/game')
-rw-r--r--src/server/game/Achievements/AchievementMgr.cpp4
-rw-r--r--src/server/game/Battlegrounds/ArenaTeam.cpp2
-rw-r--r--src/server/game/Entities/Player/Player.cpp65
-rw-r--r--src/server/game/Entities/Player/Player.h2
-rw-r--r--src/server/game/Guilds/Guild.cpp1268
-rw-r--r--src/server/game/Guilds/Guild.h172
-rw-r--r--src/server/game/Guilds/GuildMgr.cpp114
-rw-r--r--src/server/game/Guilds/GuildMgr.h3
-rw-r--r--src/server/game/Handlers/GuildHandler.cpp662
-rw-r--r--src/server/game/Handlers/MailHandler.cpp2
-rw-r--r--src/server/game/Handlers/NPCHandler.cpp17
-rw-r--r--src/server/game/Handlers/PetitionsHandler.cpp791
-rw-r--r--src/server/game/Server/Packets/GuildPackets.cpp752
-rw-r--r--src/server/game/Server/Packets/GuildPackets.h933
-rw-r--r--src/server/game/Server/Packets/MailPackets.h4
-rw-r--r--src/server/game/Server/Packets/MiscPackets.h2
-rw-r--r--src/server/game/Server/Packets/NPCPackets.cpp6
-rw-r--r--src/server/game/Server/Packets/NPCPackets.h10
-rw-r--r--src/server/game/Server/Packets/PetitionPackets.cpp192
-rw-r--r--src/server/game/Server/Packets/PetitionPackets.h246
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp204
-rw-r--r--src/server/game/Server/Protocol/Opcodes.h53
-rw-r--r--src/server/game/Server/WorldSession.cpp18
-rw-r--r--src/server/game/Server/WorldSession.h151
-rw-r--r--src/server/game/World/World.cpp16
-rw-r--r--src/server/game/World/World.h4
26 files changed, 3331 insertions, 2362 deletions
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp
index 5f9f63e34d1..e9d52a5539d 100644
--- a/src/server/game/Achievements/AchievementMgr.cpp
+++ b/src/server/game/Achievements/AchievementMgr.cpp
@@ -997,8 +997,8 @@ void AchievementMgr<T>::UpdateAchievementCriteria(AchievementCriteriaTypes type,
, GetOwner()->GetGUID().ToString().c_str(), AchievementGlobalMgr::GetCriteriaTypeString(type), type, miscValue1, miscValue2, miscValue3);
// Lua_GetGuildLevelEnabled() is checked in achievement UI to display guild tab
- if (IsGuild<T>() && !sWorld->getBoolConfig(CONFIG_GUILD_LEVELING_ENABLED))
- return;
+ //if (IsGuild<T>() && !sWorld->getBoolConfig(CONFIG_GUILD_LEVELING_ENABLED))
+ // return;
AchievementCriteriaList const& achievementCriteriaList = sAchievementMgr->GetAchievementCriteriaByType(type, IsGuild<T>());
for (AchievementCriteria const* achievementCriteria : achievementCriteriaList)
diff --git a/src/server/game/Battlegrounds/ArenaTeam.cpp b/src/server/game/Battlegrounds/ArenaTeam.cpp
index 380ce22c1bb..77aa29536e4 100644
--- a/src/server/game/Battlegrounds/ArenaTeam.cpp
+++ b/src/server/game/Battlegrounds/ArenaTeam.cpp
@@ -139,7 +139,7 @@ bool ArenaTeam::AddMember(ObjectGuid playerGuid)
// Remove all player signatures from other petitions
// This will prevent player from joining too many arena teams and corrupt arena team data integrity
- Player::RemovePetitionsAndSigns(playerGuid, GetType());
+ //Player::RemovePetitionsAndSigns(playerGuid, GetType()); /// @todo arena teams removed in 5.4
// Feed data to the struct
ArenaTeamMember newMember;
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index ee6a407fbbe..7c5b8c6dca1 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -4389,7 +4389,7 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe
RemoveFromGroup(group, playerguid);
// Remove signs from petitions (also remove petitions if owner);
- RemovePetitionsAndSigns(playerguid, 10);
+ RemovePetitionsAndSigns(playerguid);
switch (charDeleteMethod)
{
@@ -7287,7 +7287,7 @@ void Player::SetInGuild(ObjectGuid::LowType guildId)
else
SetGuidValue(OBJECT_FIELD_DATA, ObjectGuid::Empty);
- ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_GUILD_LEVEL_ENABLED, guildId != 0 && sWorld->getBoolConfig(CONFIG_GUILD_LEVELING_ENABLED));
+ ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_GUILD_LEVEL_ENABLED, guildId != 0);
SetUInt16Value(OBJECT_FIELD_TYPE, 1, guildId != 0);
}
@@ -14748,9 +14748,6 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
else
moneyRew = int32(quest->GetRewMoneyMaxLevel() * sWorld->getRate(RATE_DROP_MONEY));
- if (Guild* guild = sGuildMgr->GetGuildById(GetGuildId()))
- guild->GiveXP(uint32(quest->XPValue(getLevel()) * sWorld->getRate(RATE_XP_QUEST) * sWorld->getRate(RATE_XP_GUILD_MODIFIER)), this);
-
moneyRew += quest->GetRewMoney();
if (moneyRew)
@@ -20815,18 +20812,9 @@ void Player::SendProficiency(ItemClass itemClass, uint32 itemSubclassMask)
SendDirectMessage(packet.Write());
}
-void Player::RemovePetitionsAndSigns(ObjectGuid guid, uint32 type)
+void Player::RemovePetitionsAndSigns(ObjectGuid guid)
{
- PreparedStatement* stmt;
-
- if (type == 10)
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_SIG_BY_GUID);
- else
- {
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_SIG_BY_GUID_TYPE);
- stmt->setUInt8(1, uint8(type));
- }
-
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_SIG_BY_GUID);
stmt->setUInt64(0, guid.GetCounter());
PreparedQueryResult result = CharacterDatabase.Query(stmt);
@@ -20844,48 +20832,23 @@ void Player::RemovePetitionsAndSigns(ObjectGuid guid, uint32 type)
owner->GetSession()->SendPetitionQueryOpcode(petitionguid);
} while (result->NextRow());
- if (type == 10)
- {
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ALL_PETITION_SIGNATURES);
-
- stmt->setUInt64(0, guid.GetCounter());
-
- CharacterDatabase.Execute(stmt);
- }
- else
- {
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PETITION_SIGNATURE);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ALL_PETITION_SIGNATURES);
- stmt->setUInt64(0, guid.GetCounter());
- stmt->setUInt8(1, uint8(type));
+ stmt->setUInt64(0, guid.GetCounter());
- CharacterDatabase.Execute(stmt);
- }
+ CharacterDatabase.Execute(stmt);
}
SQLTransaction trans = CharacterDatabase.BeginTransaction();
- if (type == 10)
- {
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PETITION_BY_OWNER);
- stmt->setUInt64(0, guid.GetCounter());
- trans->Append(stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PETITION_SIGNATURE_BY_OWNER);
- stmt->setUInt64(0, guid.GetCounter());
- trans->Append(stmt);
- }
- else
- {
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PETITION_BY_OWNER_AND_TYPE);
- stmt->setUInt64(0, guid.GetCounter());
- stmt->setUInt8(1, uint8(type));
- trans->Append(stmt);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PETITION_BY_OWNER);
+ stmt->setUInt64(0, guid.GetCounter());
+ trans->Append(stmt);
+
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PETITION_SIGNATURE_BY_OWNER);
+ stmt->setUInt64(0, guid.GetCounter());
+ trans->Append(stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PETITION_SIGNATURE_BY_OWNER_AND_TYPE);
- stmt->setUInt64(0, guid.GetCounter());
- stmt->setUInt8(1, uint8(type));
- trans->Append(stmt);
- }
CharacterDatabase.CommitTransaction(trans);
}
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 275a985585a..b0a7b48ca84 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -2045,7 +2045,7 @@ class Player : public Unit, public GridObject<Player>
static ObjectGuid::LowType GetGuildIdFromDB(ObjectGuid guid);
static uint8 GetRankFromDB(ObjectGuid guid);
ObjectGuid::LowType GetGuildIdInvited() { return m_GuildIdInvited; }
- static void RemovePetitionsAndSigns(ObjectGuid guid, uint32 type);
+ static void RemovePetitionsAndSigns(ObjectGuid guid);
// Arena Team
void SetInArenaTeam(uint32 ArenaTeamId, uint8 slot, uint8 type);
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index 444aa00a8e6..955b1b6edac 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -35,56 +35,6 @@
#define MAX_GUILD_BANK_TAB_TEXT_LEN 500
#define EMBLEM_PRICE 10 * GOLD
-std::string _GetGuildEventString(GuildEvents event)
-{
- switch (event)
- {
- case GE_PROMOTION:
- return "Member promotion";
- case GE_DEMOTION:
- return "Member demotion";
- case GE_MOTD:
- return "Guild MOTD";
- case GE_JOINED:
- return "Member joined";
- case GE_LEFT:
- return "Member left";
- case GE_REMOVED:
- return "Member removed";
- case GE_LEADER_IS:
- return "Leader is";
- case GE_LEADER_CHANGED:
- return "Leader changed";
- case GE_DISBANDED:
- return "Guild disbanded";
- case GE_TABARDCHANGE:
- return "Tabard change";
- case GE_RANK_UPDATED:
- return "Rank updated";
- case GE_RANK_DELETED:
- return "Rank deleted";
- case GE_SIGNED_ON:
- return "Member signed on";
- case GE_SIGNED_OFF:
- return "Member signed off";
- case GE_GUILDBANKBAGSLOTS_CHANGED:
- return "Bank bag slots changed";
- case GE_BANK_TAB_PURCHASED:
- return "Bank tab purchased";
- case GE_BANK_TAB_UPDATED:
- return "Bank tab updated";
- case GE_BANK_MONEY_SET:
- return "Bank money set";
- case GE_BANK_TAB_AND_MONEY_UPDATED:
- return "Bank money changed";
- case GE_BANK_TEXT_CHANGED:
- return "Bank tab text changed";
- default:
- break;
- }
- return "<None>";
-}
-
inline uint32 _GetGuildBankTabPrice(uint8 tabId)
{
switch (tabId)
@@ -101,14 +51,11 @@ inline uint32 _GetGuildBankTabPrice(uint8 tabId)
void Guild::SendCommandResult(WorldSession* session, GuildCommandType type, GuildCommandError errCode, std::string const& param)
{
- // Note: SMSG_GUILD_COMMAND_RESULT and SMSG_GUILD_COMMAND_RESULT_2 do exactly the same in the client, they just have different structures.
- // There's no particular reason why we use SMSG_GUILD_COMMAND_RESULT_2, this one is processed inmediately as it is read from the client.
- // SMSG_GUILD_COMMAND_RESULT is a JAM opcode
- WorldPacket data(SMSG_GUILD_COMMAND_RESULT_2, 8 + param.size() + 1);
- data << uint32(type);
- data << param;
- data << uint32(errCode);
- session->SendPacket(&data);
+ WorldPackets::Guild::GuildCommandResult resultPacket;
+ resultPacket.Command = type;
+ resultPacket.Result = errCode;
+ resultPacket.Name = param;
+ session->SendPacket(resultPacket.Write());
TC_LOG_DEBUG("guild", "SMSG_GUILD_COMMAND_RESULT [%s]: Type: %u, code: %u, param: %s"
, session->GetPlayerInfo().c_str(), type, errCode, param.c_str());
@@ -116,11 +63,11 @@ void Guild::SendCommandResult(WorldSession* session, GuildCommandType type, Guil
void Guild::SendSaveEmblemResult(WorldSession* session, GuildEmblemError errCode)
{
- WorldPacket data(SMSG_SAVE_GUILD_EMBLEM, 4);
- data << uint32(errCode);
- session->SendPacket(&data);
+ WorldPackets::Guild::PlayerSaveGuildEmblem saveResponse;
+ saveResponse.Error = int32(errCode);
+ session->SendPacket(saveResponse.Write());
- TC_LOG_DEBUG("guild", "SMSG_SAVE_GUILD_EMBLEM [%s] Code: %u", session->GetPlayerInfo().c_str(), errCode);
+ TC_LOG_DEBUG("guild", "Sent SMSG_SAVE_GUILD_EMBLEM [%s] Code: %u", session->GetPlayerInfo().c_str(), errCode);
}
// LogHolder
@@ -156,18 +103,6 @@ inline void Guild::LogHolder::AddEvent(SQLTransaction& trans, LogEntry* entry)
entry->SaveToDB(trans);
}
-// Writes information about all events into packet.
-inline void Guild::LogHolder::WritePacket(WorldPacket& data) const
-{
- ByteBuffer buffer;
- data.WriteBits(m_log.size(), 23);
- for (GuildLog::const_iterator itr = m_log.begin(); itr != m_log.end(); ++itr)
- (*itr)->WritePacket(data, buffer);
-
- data.FlushBits();
- data.append(buffer);
-}
-
inline uint32 Guild::LogHolder::GetNextGUID()
{
// Next guid was not initialized. It means there are no records for this holder in DB yet.
@@ -199,56 +134,18 @@ void Guild::EventLogEntry::SaveToDB(SQLTransaction& trans) const
CharacterDatabase.ExecuteOrAppend(trans, stmt);
}
-void Guild::EventLogEntry::WritePacket(WorldPacket& data, ByteBuffer& content) const
+void Guild::EventLogEntry::WritePacket(WorldPackets::Guild::GuildEventLogQueryResults& packet) const
{
- ObjectGuid guid1 = ObjectGuid::Create<HighGuid::Player>(m_playerGuid1);
- ObjectGuid guid2 = ObjectGuid::Create<HighGuid::Player>(m_playerGuid2);
+ ObjectGuid playerGUID = ObjectGuid::Create<HighGuid::Player>(m_playerGuid1);
+ ObjectGuid otherGUID = ObjectGuid::Create<HighGuid::Player>(m_playerGuid2);
- data.WriteBit(guid1[2]);
- data.WriteBit(guid1[4]);
- data.WriteBit(guid2[7]);
- data.WriteBit(guid2[6]);
- data.WriteBit(guid1[3]);
- data.WriteBit(guid2[3]);
- data.WriteBit(guid2[5]);
- data.WriteBit(guid1[7]);
- data.WriteBit(guid1[5]);
- data.WriteBit(guid1[0]);
- data.WriteBit(guid2[4]);
- data.WriteBit(guid2[2]);
- data.WriteBit(guid2[0]);
- data.WriteBit(guid2[1]);
- data.WriteBit(guid1[1]);
- data.WriteBit(guid1[6]);
-
- content.WriteByteSeq(guid2[3]);
- content.WriteByteSeq(guid2[2]);
- content.WriteByteSeq(guid2[5]);
-
- // New Rank
- content << uint8(m_newRank);
-
- content.WriteByteSeq(guid2[4]);
- content.WriteByteSeq(guid1[0]);
- content.WriteByteSeq(guid1[4]);
-
- // Event timestamp
- content << uint32(::time(NULL) - m_timestamp);
-
- content.WriteByteSeq(guid1[7]);
- content.WriteByteSeq(guid1[3]);
- content.WriteByteSeq(guid2[0]);
- content.WriteByteSeq(guid2[6]);
- content.WriteByteSeq(guid2[7]);
- content.WriteByteSeq(guid1[5]);
-
- // Event type
- content << uint8(m_eventType);
-
- content.WriteByteSeq(guid2[1]);
- content.WriteByteSeq(guid1[2]);
- content.WriteByteSeq(guid1[6]);
- content.WriteByteSeq(guid1[1]);
+ WorldPackets::Guild::GuildEventEntry eventEntry;
+ eventEntry.PlayerGUID = playerGUID;
+ eventEntry.OtherGUID = otherGUID;
+ eventEntry.TransactionType = uint8(m_eventType);
+ eventEntry.TransactionDate = uint32(::time(NULL) - m_timestamp);
+ eventEntry.RankID = uint8(m_newRank);
+ packet.Entry.push_back(eventEntry);
}
// BankEventLogEntry
@@ -276,7 +173,7 @@ void Guild::BankEventLogEntry::SaveToDB(SQLTransaction& trans) const
CharacterDatabase.ExecuteOrAppend(trans, stmt);
}
-void Guild::BankEventLogEntry::WritePacket(WorldPacket& data, ByteBuffer& content) const
+void Guild::BankEventLogEntry::WritePacket(WorldPackets::Guild:: GuildBankLogQueryResults& packet) const
{
ObjectGuid logGuid = ObjectGuid::Create<HighGuid::Player>(m_playerGuid);
@@ -287,41 +184,24 @@ void Guild::BankEventLogEntry::WritePacket(WorldPacket& data, ByteBuffer& conten
bool hasStack = (hasItem && m_itemStackCount > 1) || itemMoved;
- data.WriteBit(IsMoneyEvent());
- data.WriteBit(logGuid[4]);
- data.WriteBit(logGuid[1]);
- data.WriteBit(hasItem);
- data.WriteBit(hasStack);
- data.WriteBit(logGuid[2]);
- data.WriteBit(logGuid[5]);
- data.WriteBit(logGuid[3]);
- data.WriteBit(logGuid[6]);
- data.WriteBit(logGuid[0]);
- data.WriteBit(itemMoved);
- data.WriteBit(logGuid[7]);
-
- content.WriteByteSeq(logGuid[6]);
- content.WriteByteSeq(logGuid[1]);
- content.WriteByteSeq(logGuid[5]);
- if (hasStack)
- content << uint32(m_itemStackCount);
-
- content << uint8(m_eventType);
- content.WriteByteSeq(logGuid[2]);
- content.WriteByteSeq(logGuid[4]);
- content.WriteByteSeq(logGuid[0]);
- content.WriteByteSeq(logGuid[7]);
- content.WriteByteSeq(logGuid[3]);
- if (hasItem)
- content << uint32(m_itemOrMoney);
+ WorldPackets::Guild::GuildBankLogEntry bankLogEntry;
+ bankLogEntry.PlayerGUID = logGuid;
+ bankLogEntry.TimeOffset = int32(time(NULL) - m_timestamp);
+ bankLogEntry.EntryType = int8(m_eventType);
- content << uint32(time(NULL) - m_timestamp);
+ if (hasStack)
+ bankLogEntry.Count.Set(int32(m_itemStackCount));
if (IsMoneyEvent())
- content << uint64(m_itemOrMoney);
+ bankLogEntry.Money.Set(uint64(m_itemOrMoney));
+
+ if (hasItem)
+ bankLogEntry.ItemID.Set(int32(m_itemOrMoney));
if (itemMoved)
- content << uint8(m_destTabId);
+ bankLogEntry.OtherTab.Set(int8(m_destTabId));
+
+ packet.Entry.push_back(bankLogEntry);
}
void Guild::NewsLogEntry::SaveToDB(SQLTransaction& trans) const
@@ -338,39 +218,28 @@ void Guild::NewsLogEntry::SaveToDB(SQLTransaction& trans) const
CharacterDatabase.ExecuteOrAppend(trans, stmt);
}
-void Guild::NewsLogEntry::WritePacket(WorldPacket& data, ByteBuffer& /*content*/) const
+void Guild::NewsLogEntry::WritePacket(WorldPackets::Guild::GuildNews& newsPacket) const
{
- data.WriteBits(0, 26); // Not yet implemented used for guild achievements
- ObjectGuid guid = GetPlayerGuid();
-
- data.WriteBit(guid[7]);
- data.WriteBit(guid[0]);
- data.WriteBit(guid[6]);
- data.WriteBit(guid[5]);
- data.WriteBit(guid[4]);
- data.WriteBit(guid[3]);
- data.WriteBit(guid[1]);
- data.WriteBit(guid[2]);
+ WorldPackets::Guild::GuildNewsEvent newsEvent;
+ newsEvent.Id = int32(GetGUID());
+ newsEvent.MemberGuid = GetPlayerGuid();
+ newsEvent.CompletedDate = uint32(GetTimestamp());
+ newsEvent.Flags = int32(GetFlags());
+ newsEvent.Type = int32(GetType());
- data.FlushBits();
-
- data.WriteByteSeq(guid[5]);
+ //for (uint8 i = 0; i < 2; i++)
+ // newsEvent.Data[i] =
- data << uint32(GetFlags()); // 1 sticky
- data << uint32(GetValue());
- data << uint32(0); // always 0
+ //newsEvent.MemberList.push_back(MemberGuid);
- data.WriteByteSeq(guid[7]);
- data.WriteByteSeq(guid[6]);
- data.WriteByteSeq(guid[2]);
- data.WriteByteSeq(guid[3]);
- data.WriteByteSeq(guid[0]);
- data.WriteByteSeq(guid[4]);
- data.WriteByteSeq(guid[1]);
+ if (GetType() == GUILD_NEWS_ITEM_LOOTED || GetType() == GUILD_NEWS_ITEM_CRAFTED || GetType() == GUILD_NEWS_ITEM_PURCHASED)
+ {
+ WorldPackets::Item::ItemInstance itemInstance;
+ itemInstance.ItemID = GetValue();
+ newsEvent.Item.Set(itemInstance);
+ }
- data << uint32(GetGUID());
- data << uint32(GetType());
- data.AppendPackedTime(GetTimestamp());
+ newsPacket.NewsEvents.push_back(newsEvent);
}
// RankInfo
@@ -414,8 +283,8 @@ void Guild::RankInfo::CreateMissingTabsIfNeeded(uint8 tabs, SQLTransaction& tran
stmt->setUInt64(0, m_guildId);
stmt->setUInt8(1, i);
stmt->setUInt8(2, m_rankId);
- stmt->setUInt8(3, rightsAndSlots.GetRights());
- stmt->setUInt32(4, rightsAndSlots.GetSlots());
+ stmt->setInt8(3, rightsAndSlots.GetRights());
+ stmt->setInt32(4, rightsAndSlots.GetSlots());
trans->Append(stmt);
}
}
@@ -482,8 +351,8 @@ void Guild::RankInfo::SetBankTabSlotsAndRights(GuildBankRightsAndSlots rightsAnd
stmt->setUInt64(0, m_guildId);
stmt->setUInt8 (1, guildBR.GetTabId());
stmt->setUInt8 (2, m_rankId);
- stmt->setUInt8 (3, guildBR.GetRights());
- stmt->setUInt32(4, guildBR.GetSlots());
+ stmt->setInt8 (3, guildBR.GetRights());
+ stmt->setInt32 (4, guildBR.GetSlots());
CharacterDatabase.Execute(stmt);
}
}
@@ -613,21 +482,20 @@ bool Guild::BankTab::SetItem(SQLTransaction& trans, uint8 slotId, Item* item)
void Guild::BankTab::SendText(Guild const* guild, WorldSession* session) const
{
- WorldPacket data(SMSG_GUILD_BANK_QUERY_TEXT_RESULT, 1 + m_text.size() + 1);
- data.WriteBits(m_text.length(), 14);
- data << uint32(m_tabId);
- data.WriteString(m_text);
+ WorldPackets::Guild::GuildBankTextQueryResult textQuery;
+ textQuery.Tab = m_tabId;
+ textQuery.Text = m_text;
if (session)
{
TC_LOG_DEBUG("guild", "SMSG_GUILD_BANK_QUERY_TEXT_RESULT [%s]: Tabid: %u, Text: %s"
, session->GetPlayerInfo().c_str(), m_tabId, m_text.c_str());
- session->SendPacket(&data);
+ session->SendPacket(textQuery.Write());
}
else
{
TC_LOG_DEBUG("guild", "SMSG_GUILD_BANK_QUERY_TEXT_RESULT [Broadcast]: Tabid: %u, Text: %s", m_tabId, m_text.c_str());
- guild->BroadcastPacket(&data);
+ guild->BroadcastPacket(textQuery.Write());
}
}
@@ -637,16 +505,18 @@ void Guild::Member::SetStats(Player* player)
m_name = player->GetName();
m_level = player->getLevel();
m_class = player->getClass();
+ _gender = player->getGender();
m_zoneId = player->GetZoneId();
m_accountId = player->GetSession()->GetAccountId();
m_achievementPoints = player->GetAchievementPoints();
}
-void Guild::Member::SetStats(std::string const& name, uint8 level, uint8 _class, uint32 zoneId, uint32 accountId, uint32 reputation)
+void Guild::Member::SetStats(std::string const& name, uint8 level, uint8 _class, uint8 gender, uint32 zoneId, uint32 accountId, uint32 reputation)
{
m_name = name;
m_level = level;
m_class = _class;
+ _gender = gender;
m_zoneId = zoneId;
m_accountId = accountId;
m_totalReputation = reputation;
@@ -717,10 +587,11 @@ bool Guild::Member::LoadFromDB(Field* fields)
SetStats(fields[14].GetString(),
fields[15].GetUInt8(), // characters.level
fields[16].GetUInt8(), // characters.class
- fields[17].GetUInt16(), // characters.zone
- fields[18].GetUInt32(), // characters.account
+ fields[17].GetUInt8(), // characters.gender
+ fields[18].GetUInt16(), // characters.zone
+ fields[19].GetUInt32(), // characters.account
0);
- m_logoutTime = fields[19].GetUInt32(); // characters.logout_time
+ m_logoutTime = fields[20].GetUInt32(); // characters.logout_time
m_totalActivity = 0;
m_weekActivity = 0;
m_weekReputation = 0;
@@ -798,9 +669,13 @@ int32 Guild::Member::GetBankWithdrawValue(uint8 tabId) const
}
// EmblemInfo
-void EmblemInfo::ReadPacket(WorldPacket& recv)
+void EmblemInfo::ReadPacket(WorldPackets::Guild::SaveGuildEmblem& packet)
{
- recv >> m_style >> m_color >> m_borderStyle >> m_borderColor >> m_backgroundColor;
+ m_style = packet.EStyle;
+ m_color = packet.EColor;
+ m_borderStyle = packet.BStyle;
+ m_borderColor = packet.BColor;
+ m_backgroundColor = packet.Bg;
}
void EmblemInfo::LoadFromDB(Field* fields)
@@ -1159,9 +1034,7 @@ Guild::Guild():
m_eventLog(NULL),
m_newsLog(NULL),
m_achievementMgr(this),
- _level(1),
- _experience(0),
- _todayExperience(0)
+ _level(1)
{
memset(&m_bankEventLog, 0, (GUILD_BANK_MAX_TABS + 1) * sizeof(LogHolder*));
}
@@ -1209,8 +1082,6 @@ bool Guild::Create(Player* pLeader, std::string const& name)
m_bankMoney = 0;
m_createdDate = ::time(NULL);
_level = 1;
- _experience = 0;
- _todayExperience = 0;
_CreateLogHolders();
TC_LOG_DEBUG("guild", "GUILD: creating guild [%s] for leader %s (%s)",
@@ -1244,7 +1115,10 @@ bool Guild::Create(Player* pLeader, std::string const& name)
if (ret)
{
- _BroadcastEvent(GE_FOUNDER, ObjectGuid::Empty);
+ Member* leader = GetMember(m_leaderGuid);
+ if (leader)
+ SendEventNewLeader(leader, NULL);
+
sScriptMgr->OnGuildCreate(this, pLeader, name);
}
@@ -1257,7 +1131,9 @@ void Guild::Disband()
// Call scripts before guild data removed from database
sScriptMgr->OnGuildDisband(this);
- _BroadcastEvent(GE_DISBANDED, ObjectGuid::Empty);
+ WorldPackets::Guild::GuildEventDisbanded packet;
+ BroadcastPacket(packet.Write());
+
// Remove all members
while (!m_members.empty())
{
@@ -1309,13 +1185,6 @@ void Guild::SaveToDB()
{
SQLTransaction trans = CharacterDatabase.BeginTransaction();
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_EXPERIENCE);
- stmt->setUInt32(0, GetLevel());
- stmt->setUInt64(1, GetExperience());
- stmt->setUInt64(2, GetTodayExperience());
- stmt->setUInt64(3, GetId());
- trans->Append(stmt);
-
m_achievementMgr.SaveToDB(trans);
CharacterDatabase.CommitTransaction(trans);
@@ -1365,6 +1234,7 @@ bool Guild::SetName(std::string const& name)
stmt->setUInt64(1, GetId());
CharacterDatabase.Execute(stmt);
+ /* TODO 6.x update me
ObjectGuid guid = GetGUID();
WorldPacket data(SMSG_GUILD_NAME_CHANGED, 24 + 8 + 1);
data.WriteBit(guid[5]);
@@ -1387,93 +1257,56 @@ bool Guild::SetName(std::string const& name)
data.WriteByteSeq(guid[4]);
data.WriteByteSeq(guid[5]);
- BroadcastPacket(&data);
+ BroadcastPacket(&data); */
return true;
}
void Guild::HandleRoster(WorldSession* session)
{
- ByteBuffer memberData(100);
- // Guess size
- WorldPacket data(SMSG_GUILD_ROSTER, 100);
- data.WriteBits(m_motd.length(), 11);
- data.WriteBits(m_members.size(), 18);
+ WorldPackets::Guild::GuildRoster roster;
- for (Members::const_iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
+ roster.NumAccounts = int32(m_accountsNumber);
+ roster.CreateDate = uint32(m_createdDate);
+ roster.GuildFlags = 0;
+
+ roster.MemberData.reserve(m_members.size());
+
+ for (auto itr : m_members)
{
- Member* member = itr->second;
- size_t pubNoteLength = member->GetPublicNote().length();
- size_t offNoteLength = member->GetOfficerNote().length();
-
- ObjectGuid guid = member->GetGUID();
- data.WriteBit(guid[3]);
- data.WriteBit(guid[4]);
- data.WriteBit(0); // Has Authenticator
- data.WriteBit(0); // Can Scroll of Ressurect
- data.WriteBits(pubNoteLength, 8);
- data.WriteBits(offNoteLength, 8);
- data.WriteBit(guid[0]);
- data.WriteBits(member->GetName().length(), 7);
- data.WriteBit(guid[1]);
- data.WriteBit(guid[2]);
- data.WriteBit(guid[6]);
- data.WriteBit(guid[5]);
- data.WriteBit(guid[7]);
-
- memberData << uint8(member->GetClass());
- memberData << uint32(member->GetTotalReputation());
- memberData.WriteByteSeq(guid[0]);
- memberData << uint64(member->GetWeekActivity());
- memberData << uint32(member->GetRankId());
- memberData << uint32(member->GetAchievementPoints());
-
- // for (2 professions)
- memberData << uint32(0) << uint32(0) << uint32(0);
- memberData << uint32(0) << uint32(0) << uint32(0);
-
- memberData.WriteByteSeq(guid[2]);
- memberData << uint8(member->GetFlags());
- memberData << uint32(member->GetZoneId());
- memberData << uint64(member->GetTotalActivity());
- memberData.WriteByteSeq(guid[7]);
- memberData << uint32(sWorld->getIntConfig(CONFIG_GUILD_WEEKLY_REP_CAP) - member->GetWeekReputation());
-
- if (pubNoteLength)
- memberData.WriteString(member->GetPublicNote());
-
- memberData.WriteByteSeq(guid[3]);
- memberData << uint8(member->GetLevel());
- memberData << int32(0); // unk
- memberData.WriteByteSeq(guid[5]);
- memberData.WriteByteSeq(guid[4]);
- memberData << uint8(0); // unk
- memberData.WriteByteSeq(guid[1]);
- memberData << float(member->IsOnline() ? 0.0f : float(::time(NULL) - member->GetLogoutTime()) / DAY);
-
- if (offNoteLength)
- memberData.WriteString(member->GetOfficerNote());
-
- memberData.WriteByteSeq(guid[6]);
- memberData.WriteString(member->GetName());
- }
-
- size_t infoLength = m_info.length();
- data.WriteBits(infoLength, 12);
-
- data.FlushBits();
- data.append(memberData);
-
- if (infoLength)
- data.WriteString(m_info);
-
- data.WriteString(m_motd);
- data << uint32(m_accountsNumber);
- data << uint32(sWorld->getIntConfig(CONFIG_GUILD_WEEKLY_REP_CAP));
- data.AppendPackedTime(m_createdDate);
- data << uint32(0);
+ Member* member = itr.second;
+
+ WorldPackets::Guild::GuildRosterMemberData memberData;
+
+ memberData.Guid = member->GetGUID();
+ memberData.RankID = int32(member->GetRankId());
+ memberData.AreaID = int32(member->GetZoneId());
+ memberData.PersonalAchievementPoints = int32(member->GetAchievementPoints());
+ memberData.GuildReputation = int32(member->GetTotalReputation());
+ memberData.LastSave = float(member->IsOnline() ? 0.0f : float(::time(NULL) - member->GetLogoutTime()) / DAY);
+
+ //GuildRosterProfessionData
+
+ memberData.VirtualRealmAddress = GetVirtualRealmAddress();
+ memberData.Status = member->GetFlags();
+ memberData.Level = member->GetLevel();
+ memberData.ClassID = member->GetClass();
+ memberData.Gender = member->GetGender();
+
+ memberData.Authenticated = false;
+ memberData.SorEligible = false;
+
+ memberData.Name = member->GetName();
+ memberData.Note = member->GetPublicNote();
+ memberData.OfficerNote = member->GetOfficerNote();
+
+ roster.MemberData.push_back(memberData);
+ }
+
+ roster.WelcomeText = m_motd;
+ roster.InfoText = m_info;
TC_LOG_DEBUG("guild", "SMSG_GUILD_ROSTER [%s]", session->GetPlayerInfo().c_str());
- session->SendPacket(&data);
+ session->SendPacket(roster.Write());
}
void Guild::SendQueryResponse(WorldSession* session)
@@ -1506,10 +1339,9 @@ void Guild::SendQueryResponse(WorldSession* session)
void Guild::SendGuildRankInfo(WorldSession* session) const
{
- ByteBuffer rankData(100);
- WorldPacket data(SMSG_GUILD_RANKS, 100);
+ WorldPackets::Guild::GuildRanks ranks;
- data.WriteBits(_GetRanksSize(), 18);
+ ranks.Ranks.reserve(_GetRanksSize());
for (uint8 i = 0; i < _GetRanksSize(); i++)
{
@@ -1517,28 +1349,24 @@ void Guild::SendGuildRankInfo(WorldSession* session) const
if (!rankInfo)
continue;
- data.WriteBits(rankInfo->GetName().length(), 7);
+ WorldPackets::Guild::GuildRankData rankData;
- rankData << uint32(rankInfo->GetId());
+ rankData.RankID = uint32(rankInfo->GetId());
+ rankData.RankOrder = uint32(i);
+ rankData.Flags = rankInfo->GetRights();
+ rankData.WithdrawGoldLimit = uint32(rankInfo->GetBankMoneyPerDay());
+ rankData.RankName = rankInfo->GetName();
for (uint8 j = 0; j < GUILD_BANK_MAX_TABS; ++j)
{
- rankData << uint32(rankInfo->GetBankTabSlotsPerDay(j));
- rankData << uint32(rankInfo->GetBankTabRights(j));
+ rankData.TabFlags[j] = uint32(rankInfo->GetBankTabRights(j));
+ rankData.TabWithdrawItemLimit[j] = uint32(rankInfo->GetBankTabSlotsPerDay(j));
}
- rankData << uint32(rankInfo->GetBankMoneyPerDay());
- rankData << uint32(rankInfo->GetRights());
-
- if (rankInfo->GetName().length())
- rankData.WriteString(rankInfo->GetName());
-
- rankData << uint32(i);
+ ranks.Ranks.push_back(rankData);
}
- data.FlushBits();
- data.append(rankData);
- session->SendPacket(&data);
+ session->SendPacket(ranks.Write());
TC_LOG_DEBUG("guild", "SMSG_GUILD_RANK [%s]", session->GetPlayerInfo().c_str());
}
@@ -1589,7 +1417,7 @@ void Guild::HandleSetMOTD(WorldSession* session, std::string const& motd)
stmt->setUInt64(1, m_id);
CharacterDatabase.Execute(stmt);
- _BroadcastEvent(GE_MOTD, ObjectGuid::Empty, motd.c_str());
+ SendEventMOTD(session, true);
}
}
@@ -1646,7 +1474,8 @@ void Guild::HandleSetNewGuildMaster(WorldSession* session, std::string const& na
{
_SetLeaderGUID(newGuildMaster);
oldGuildMaster->ChangeRank(GR_INITIATE);
- _BroadcastEvent(GE_LEADER_CHANGED, ObjectGuid::Empty, player->GetName().c_str(), name.c_str());
+
+ SendEventNewLeader(newGuildMaster, oldGuildMaster);
}
}
}
@@ -1661,18 +1490,20 @@ void Guild::HandleSetBankTabInfo(WorldSession* session, uint8 tabId, std::string
return;
}
- char aux[2];
- sprintf(aux, "%u", tabId);
-
tab->SetInfo(name, icon);
- _BroadcastEvent(GE_BANK_TAB_UPDATED, ObjectGuid::Empty, aux, name.c_str(), icon.c_str());
+
+ WorldPackets::Guild::GuildEventTabModified packet;
+ packet.Tab = tabId;
+ packet.Name = name;
+ packet.Icon = icon;
+ BroadcastPacket(packet.Write());
}
void Guild::HandleSetMemberNote(WorldSession* session, std::string const& note, ObjectGuid guid, bool isPublic)
{
// Player must have rights to set public/officer note
- if (!_HasRankRight(session->GetPlayer(), isPublic ? GR_RIGHT_EPNOTE : GR_RIGHT_EOFFNOTE))
- SendCommandResult(session, GUILD_COMMAND_PUBLIC_NOTE, ERR_GUILD_PERMISSIONS);
+ if (!_HasRankRight(session->GetPlayer(), isPublic ? GR_RIGHT_EDIT_PUBLIC_NOTE : GR_RIGHT_EOFFNOTE))
+ SendCommandResult(session, GUILD_COMMAND_EDIT_PUBLIC_NOTE, ERR_GUILD_PERMISSIONS);
else if (Member* member = GetMember(guid))
{
if (isPublic)
@@ -1681,6 +1512,12 @@ void Guild::HandleSetMemberNote(WorldSession* session, std::string const& note,
member->SetOfficerNote(note);
HandleRoster(session); // FIXME - We should send SMSG_GUILD_MEMBER_UPDATE_NOTE
+
+ WorldPackets::Guild::GuildMemberUpdateNote updateNote;
+ updateNote.Member = guid;
+ updateNote.IsPublic = isPublic;
+ updateNote.Note = note;
+ session->SendPacket(updateNote.Write()); // @todo - Verify receiver of this packet...
}
}
@@ -1700,9 +1537,9 @@ void Guild::HandleSetRankInfo(WorldSession* session, uint8 rankId, std::string c
for (GuildBankRightsAndSlotsVec::const_iterator itr = rightsAndSlots.begin(); itr != rightsAndSlots.end(); ++itr)
_SetRankBankTabRightsAndSlots(rankId, *itr);
- char aux[2];
- sprintf(aux, "%u", rankId);
- _BroadcastEvent(GE_RANK_UPDATED, ObjectGuid::Empty, aux);
+ WorldPackets::Guild::GuildEventRankChanged packet;
+ packet.RankID = rankId;
+ BroadcastPacket(packet.Write());
}
}
@@ -1737,7 +1574,10 @@ void Guild::HandleBuyBankTab(WorldSession* session, uint8 tabId)
}
_CreateNewBankTab();
- _BroadcastEvent(GE_BANK_TAB_PURCHASED, ObjectGuid::Empty);
+
+ WorldPackets::Guild::GuildEventTabAdded packet;
+ BroadcastPacket(packet.Write());
+
SendPermissions(session); /// Hack to force client to update permissions
}
@@ -1746,7 +1586,7 @@ void Guild::HandleInviteMember(WorldSession* session, std::string const& name)
Player* pInvitee = ObjectAccessor::FindPlayerByName(name);
if (!pInvitee)
{
- SendCommandResult(session, GUILD_COMMAND_INVITE, ERR_GUILD_PLAYER_NOT_FOUND_S, name);
+ SendCommandResult(session, GUILD_COMMAND_INVITE_PLAYER, ERR_GUILD_PLAYER_NOT_FOUND_S, name);
return;
}
@@ -1757,100 +1597,62 @@ void Guild::HandleInviteMember(WorldSession* session, std::string const& name)
if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && pInvitee->GetTeam() != player->GetTeam())
{
- SendCommandResult(session, GUILD_COMMAND_INVITE, ERR_GUILD_NOT_ALLIED, name);
+ SendCommandResult(session, GUILD_COMMAND_INVITE_PLAYER, ERR_GUILD_NOT_ALLIED, name);
return;
}
// Invited player cannot be in another guild
/*if (pInvitee->GetGuildId())
{
- SendCommandResult(session, GUILD_COMMAND_INVITE, ERR_ALREADY_IN_GUILD_S, name);
+ SendCommandResult(session, GUILD_COMMAND_INVITE_PLAYER, ERR_ALREADY_IN_GUILD_S, name);
return;
}*/
// Invited player cannot be invited
if (pInvitee->GetGuildIdInvited())
{
- SendCommandResult(session, GUILD_COMMAND_INVITE, ERR_ALREADY_INVITED_TO_GUILD_S, name);
+ SendCommandResult(session, GUILD_COMMAND_INVITE_PLAYER, ERR_ALREADY_INVITED_TO_GUILD_S, name);
return;
}
+
// Inviting player must have rights to invite
if (!_HasRankRight(player, GR_RIGHT_INVITE))
{
- SendCommandResult(session, GUILD_COMMAND_INVITE, ERR_GUILD_PERMISSIONS);
+ SendCommandResult(session, GUILD_COMMAND_INVITE_PLAYER, ERR_GUILD_PERMISSIONS);
return;
}
- SendCommandResult(session, GUILD_COMMAND_INVITE, ERR_GUILD_COMMAND_SUCCESS, name);
+ SendCommandResult(session, GUILD_COMMAND_INVITE_PLAYER, ERR_GUILD_COMMAND_SUCCESS, name);
TC_LOG_DEBUG("guild", "Player %s invited %s to join his Guild", player->GetName().c_str(), name.c_str());
pInvitee->SetGuildIdInvited(m_id);
_LogEvent(GUILD_EVENT_LOG_INVITE_PLAYER, player->GetGUID().GetCounter(), pInvitee->GetGUID().GetCounter());
- WorldPacket data(SMSG_GUILD_INVITE, 100);
- data << uint32(GetLevel());
- data << uint32(m_emblemInfo.GetBorderStyle());
- data << uint32(m_emblemInfo.GetBorderColor());
- data << uint32(m_emblemInfo.GetStyle());
- data << uint32(m_emblemInfo.GetBackgroundColor());
- data << uint32(m_emblemInfo.GetColor());
-
- ObjectGuid oldGuildGuid;
- if (ObjectGuid::LowType oldId = pInvitee->GetGuildId())
- oldGuildGuid = ObjectGuid::Create<HighGuid::Guild>(oldId);
-
- ObjectGuid newGuildGuid = GetGUID();
-
- data.WriteBit(newGuildGuid[3]);
- data.WriteBit(newGuildGuid[2]);
- data.WriteBits(pInvitee->GetGuildName().length(), 8);
- data.WriteBit(newGuildGuid[1]);
- data.WriteBit(oldGuildGuid[6]);
- data.WriteBit(oldGuildGuid[4]);
- data.WriteBit(oldGuildGuid[1]);
- data.WriteBit(oldGuildGuid[5]);
- data.WriteBit(oldGuildGuid[7]);
- data.WriteBit(oldGuildGuid[2]);
- data.WriteBit(newGuildGuid[7]);
- data.WriteBit(newGuildGuid[0]);
- data.WriteBit(newGuildGuid[6]);
- data.WriteBits(m_name.length(), 8);
- data.WriteBit(oldGuildGuid[3]);
- data.WriteBit(oldGuildGuid[0]);
- data.WriteBit(newGuildGuid[5]);
- data.WriteBits(player->GetName().size(), 7);
- data.WriteBit(newGuildGuid[4]);
-
- data.FlushBits();
-
- data.WriteByteSeq(newGuildGuid[1]);
- data.WriteByteSeq(oldGuildGuid[3]);
- data.WriteByteSeq(newGuildGuid[6]);
- data.WriteByteSeq(oldGuildGuid[2]);
- data.WriteByteSeq(oldGuildGuid[1]);
- data.WriteByteSeq(newGuildGuid[0]);
-
- if (!pInvitee->GetGuildName().empty())
- data.WriteString(pInvitee->GetGuildName());
-
- data.WriteByteSeq(newGuildGuid[7]);
- data.WriteByteSeq(newGuildGuid[2]);
-
- data.WriteString(player->GetName());
-
- data.WriteByteSeq(oldGuildGuid[7]);
- data.WriteByteSeq(oldGuildGuid[6]);
- data.WriteByteSeq(oldGuildGuid[5]);
- data.WriteByteSeq(oldGuildGuid[0]);
- data.WriteByteSeq(newGuildGuid[4]);
-
- data.WriteString(m_name);
-
- data.WriteByteSeq(newGuildGuid[5]);
- data.WriteByteSeq(newGuildGuid[3]);
- data.WriteByteSeq(oldGuildGuid[4]);
- pInvitee->GetSession()->SendPacket(&data);
+ WorldPackets::Guild::GuildInvite invite;
+
+ invite.InviterVirtualRealmAddress = GetVirtualRealmAddress();
+ invite.GuildVirtualRealmAddress = GetVirtualRealmAddress();
+ invite.GuildGUID = GetGUID();
+
+ invite.EmblemStyle = uint32(m_emblemInfo.GetStyle());
+ invite.EmblemColor = uint32(m_emblemInfo.GetColor());
+ invite.BorderStyle = uint32(m_emblemInfo.GetBorderStyle());
+ invite.BorderColor = uint32(m_emblemInfo.GetBorderColor());
+ invite.Background = uint32(m_emblemInfo.GetBackgroundColor());
+ invite.Level = int32(GetLevel());
+
+ invite.InviterName = player->GetName();
+ invite.GuildName = GetName();
+
+ if (Guild* oldGuild = pInvitee->GetGuild())
+ {
+ invite.OldGuildGUID = oldGuild->GetGUID();
+ invite.OldGuildName = oldGuild->GetName();
+ invite.OldGuildVirtualRealmAddress = GetVirtualRealmAddress();
+ }
+
+ pInvitee->GetSession()->SendPacket(invite.Write());
TC_LOG_DEBUG("guild", "SMSG_GUILD_INVITE [%s]", pInvitee->GetName().c_str());
}
@@ -1874,9 +1676,9 @@ void Guild::HandleLeaveMember(WorldSession* session)
{
if (m_members.size() > 1)
// Leader cannot leave if he is not the last member
- SendCommandResult(session, GUILD_COMMAND_QUIT, ERR_GUILD_LEADER_LEAVE);
+ SendCommandResult(session, GUILD_COMMAND_LEAVE_GUILD, ERR_GUILD_LEADER_LEAVE);
else if (GetLevel() >= sWorld->getIntConfig(CONFIG_GUILD_UNDELETABLE_LEVEL))
- SendCommandResult(session, GUILD_COMMAND_QUIT, ERR_GUILD_UNDELETABLE_DUE_TO_LEVEL);
+ SendCommandResult(session, GUILD_COMMAND_LEAVE_GUILD, ERR_GUILD_UNDELETABLE_DUE_TO_LEVEL);
else
{
// Guild is disbanded if leader leaves.
@@ -1889,9 +1691,9 @@ void Guild::HandleLeaveMember(WorldSession* session)
DeleteMember(player->GetGUID(), false, false);
_LogEvent(GUILD_EVENT_LOG_LEAVE_GUILD, player->GetGUID().GetCounter());
- _BroadcastEvent(GE_LEFT, player->GetGUID(), player->GetName().c_str());
+ SendEventPlayerLeft(player);
- SendCommandResult(session, GUILD_COMMAND_QUIT, ERR_GUILD_COMMAND_SUCCESS, m_name);
+ SendCommandResult(session, GUILD_COMMAND_LEAVE_GUILD, ERR_GUILD_COMMAND_SUCCESS, m_name);
}
sCalendarMgr->RemovePlayerGuildEventsAndSignups(player->GetGUID(), GetId());
@@ -1906,27 +1708,30 @@ void Guild::HandleRemoveMember(WorldSession* session, ObjectGuid guid)
// Player must have rights to remove members
if (!_HasRankRight(player, GR_RIGHT_REMOVE))
- SendCommandResult(session, GUILD_COMMAND_REMOVE, ERR_GUILD_PERMISSIONS);
+ SendCommandResult(session, GUILD_COMMAND_REMOVE_PLAYER, ERR_GUILD_PERMISSIONS);
else if (Member* member = GetMember(guid))
{
std::string name = member->GetName();
// Guild masters cannot be removed
if (member->IsRank(GR_GUILDMASTER))
- SendCommandResult(session, GUILD_COMMAND_REMOVE, ERR_GUILD_LEADER_LEAVE);
+ SendCommandResult(session, GUILD_COMMAND_REMOVE_PLAYER, ERR_GUILD_LEADER_LEAVE);
// Do not allow to remove player with the same rank or higher
else
{
- Member const* memberMe = GetMember(player->GetGUID());
+ Member* memberMe = GetMember(player->GetGUID());
if (!memberMe || member->IsRankNotLower(memberMe->GetRankId()))
- SendCommandResult(session, GUILD_COMMAND_REMOVE, ERR_GUILD_RANK_TOO_HIGH_S, name);
+ SendCommandResult(session, GUILD_COMMAND_REMOVE_PLAYER, ERR_GUILD_RANK_TOO_HIGH_S, name);
else
{
// After call to DeleteMember pointer to member becomes invalid
DeleteMember(guid, false, true);
_LogEvent(GUILD_EVENT_LOG_UNINVITE_PLAYER, player->GetGUID().GetCounter(), guid.GetCounter());
- _BroadcastEvent(GE_REMOVED, ObjectGuid::Empty, name.c_str(), player->GetName().c_str());
- SendCommandResult(session, GUILD_COMMAND_REMOVE, ERR_GUILD_COMMAND_SUCCESS, name);
+
+ Player* pMember = ObjectAccessor::FindConnectedPlayer(guid);
+ SendEventPlayerLeft(pMember, player, true);
+
+ SendCommandResult(session, GUILD_COMMAND_REMOVE_PLAYER, ERR_GUILD_COMMAND_SUCCESS, name);
}
}
}
@@ -1935,7 +1740,7 @@ void Guild::HandleRemoveMember(WorldSession* session, ObjectGuid guid)
void Guild::HandleUpdateMemberRank(WorldSession* session, ObjectGuid guid, bool demote)
{
Player* player = session->GetPlayer();
- GuildCommandType type = demote ? GUILD_COMMAND_DEMOTE : GUILD_COMMAND_PROMOTE;
+ GuildCommandType type = demote ? GUILD_COMMAND_DEMOTE_PLAYER : GUILD_COMMAND_PROMOTE_PLAYER;
// Player must have rights to promote
if (!_HasRankRight(player, demote ? GR_RIGHT_DEMOTE : GR_RIGHT_PROMOTE))
SendCommandResult(session, type, ERR_GUILD_PERMISSIONS);
@@ -1982,7 +1787,7 @@ void Guild::HandleUpdateMemberRank(WorldSession* session, ObjectGuid guid, bool
uint32 newRankId = member->GetRankId() + (demote ? 1 : -1);
member->ChangeRank(newRankId);
_LogEvent(demote ? GUILD_EVENT_LOG_DEMOTE_PLAYER : GUILD_EVENT_LOG_PROMOTE_PLAYER, player->GetGUID().GetCounter(), member->GetGUID().GetCounter(), newRankId);
- _BroadcastEvent(demote ? GE_DEMOTION : GE_PROMOTION, ObjectGuid::Empty, player->GetName().c_str(), name.c_str(), _GetRankName(newRankId).c_str());
+ //_BroadcastEvent(demote ? GE_DEMOTION : GE_PROMOTION, ObjectGuid::Empty, player->GetName().c_str(), name.c_str(), _GetRankName(newRankId).c_str());
}
}
@@ -1993,12 +1798,12 @@ void Guild::HandleSetMemberRank(WorldSession* session, ObjectGuid targetGuid, Ob
if (!member)
return;
GuildRankRights rights = GR_RIGHT_PROMOTE;
- GuildCommandType type = GUILD_COMMAND_PROMOTE;
+ GuildCommandType type = GUILD_COMMAND_PROMOTE_PLAYER;
if (rank > member->GetRankId())
{
rights = GR_RIGHT_DEMOTE;
- type = GUILD_COMMAND_DEMOTE;
+ type = GUILD_COMMAND_DEMOTE_PLAYER;
}
// Promoted player must be a member of guild
@@ -2026,8 +1831,13 @@ void Guild::HandleAddNewRank(WorldSession* session, std::string const& name)
// Only leader can add new rank
if (_IsLeader(session->GetPlayer()))
+ {
if (_CreateRank(name, GR_RIGHT_GCHATLISTEN | GR_RIGHT_GCHATSPEAK))
- _BroadcastEvent(GE_RANK_CREATED, ObjectGuid::Empty);
+ {
+ WorldPackets::Guild::GuildEventRanksUpdated eventPacket;
+ BroadcastPacket(eventPacket.Write());
+ }
+ }
}
void Guild::HandleRemoveRank(WorldSession* session, uint8 rankId)
@@ -2041,6 +1851,7 @@ void Guild::HandleRemoveRank(WorldSession* session, uint8 rankId)
stmt->setUInt64(0, m_id);
stmt->setUInt8(1, rankId);
CharacterDatabase.Execute(stmt);
+
// Delete rank
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GUILD_RANK);
stmt->setUInt64(0, m_id);
@@ -2049,7 +1860,8 @@ void Guild::HandleRemoveRank(WorldSession* session, uint8 rankId)
m_ranks.erase(m_ranks.begin() + rankId);
- _BroadcastEvent(GE_RANK_DELETED, ObjectGuid::Empty, std::to_string(rankId).c_str());
+ WorldPackets::Guild::GuildEventRanksUpdated eventPacket;
+ BroadcastPacket(eventPacket.Write());
}
void Guild::HandleMemberDepositMoney(WorldSession* session, uint64 amount, bool cashFlow /*=false*/)
@@ -2070,8 +1882,7 @@ void Guild::HandleMemberDepositMoney(WorldSession* session, uint64 amount, bool
_LogBankEvent(trans, cashFlow ? GUILD_BANK_LOG_CASH_FLOW_DEPOSIT : GUILD_BANK_LOG_DEPOSIT_MONEY, uint8(0), player->GetGUID().GetCounter(), amount);
CharacterDatabase.CommitTransaction(trans);
- std::string aux = ByteArrayToHexStr(reinterpret_cast<uint8*>(&m_bankMoney), 8, true);
- _BroadcastEvent(GE_BANK_MONEY_SET, ObjectGuid::Empty, aux.c_str());
+ SendEventBankMoneyChanged();
if (player->GetSession()->HasPermission(rbac::RBAC_PERM_LOG_GM_TRADE))
{
@@ -2120,8 +1931,7 @@ bool Guild::HandleMemberWithdrawMoney(WorldSession* session, uint64 amount, bool
_LogBankEvent(trans, repair ? GUILD_BANK_LOG_REPAIR_MONEY : GUILD_BANK_LOG_WITHDRAW_MONEY, uint8(0), player->GetGUID().GetCounter(), amount);
CharacterDatabase.CommitTransaction(trans);
- std::string aux = ByteArrayToHexStr(reinterpret_cast<uint8*>(&m_bankMoney), 8, true);
- _BroadcastEvent(GE_BANK_MONEY_SET, ObjectGuid::Empty, aux.c_str());
+ SendEventBankMoneyChanged();
return true;
}
@@ -2134,18 +1944,18 @@ void Guild::HandleMemberLogout(WorldSession* session)
member->UpdateLogoutTime();
member->ResetFlags();
}
- _BroadcastEvent(GE_SIGNED_OFF, player->GetGUID(), player->GetName().c_str());
+ SendEventPresenceChanged(session, false, true);
SaveToDB();
}
-void Guild::HandleDisband(WorldSession* session)
+void Guild::HandleDelete(WorldSession* session)
{
// Only leader can disband guild
if (_IsLeader(session->GetPlayer()))
{
Disband();
- TC_LOG_DEBUG("guild", "Guild Successfully Disbanded");
+ TC_LOG_DEBUG("guild", "%s successfully deleted", GetGUID().ToString().c_str());
delete this;
}
}
@@ -2159,99 +1969,74 @@ void Guild::HandleGuildPartyRequest(WorldSession* session)
if (!IsMember(player->GetGUID()) || !group)
return;
- WorldPacket data(SMSG_GUILD_PARTY_STATE_RESPONSE, 13);
- data.WriteBit(player->GetMap()->GetOwnerGuildId(player->GetTeam()) == GetId()); // Is guild group
- data.FlushBits();
- data << float(0.f); // Guild XP multiplier
- data << uint32(0); // Current guild members
- data << uint32(0); // Needed guild members
+ WorldPackets::Guild::GuildPartyState partyStateResponse;
+ partyStateResponse.InGuildParty = (player->GetMap()->GetOwnerGuildId(player->GetTeam()) == GetId());
+ partyStateResponse.NumMembers = 0;
+ partyStateResponse.NumRequired = 0;
+ partyStateResponse.GuildXPEarnedMult = 0.0f;
+ session->SendPacket(partyStateResponse.Write());
- session->SendPacket(&data);
TC_LOG_DEBUG("guild", "SMSG_GUILD_PARTY_STATE_RESPONSE [%s]", session->GetPlayerInfo().c_str());
}
void Guild::HandleGuildRequestChallengeUpdate(WorldSession* session)
{
- WorldPacket data(SMSG_GUILD_CHALLENGE_UPDATED, 4 * GUILD_CHALLENGES_TYPES * 5);
-
- for (int i = 0; i < GUILD_CHALLENGES_TYPES; ++i)
- data << uint32(GuildChallengeXPReward[i]);
+ WorldPackets::Guild::GuildChallengeUpdate updatePacket;
for (int i = 0; i < GUILD_CHALLENGES_TYPES; ++i)
- data << uint32(GuildChallengeGoldReward[i]);
+ updatePacket.CurrentCount[i] = int32(0); /// @todo current count
for (int i = 0; i < GUILD_CHALLENGES_TYPES; ++i)
- data << uint32(GuildChallengesPerWeek[i]);
+ updatePacket.MaxCount[i] = int32(GuildChallengesMaxCount[i]);
for (int i = 0; i < GUILD_CHALLENGES_TYPES; ++i)
- data << uint32(GuildChallengeMaxLevelGoldReward[i]);
+ updatePacket.MaxLevelGold[i] = int32(GuildChallengeMaxLevelGoldReward[i]);
for (int i = 0; i < GUILD_CHALLENGES_TYPES; ++i)
- data << uint32(0); /// @todo current count
+ updatePacket.Gold[i] = int32(GuildChallengeGoldReward[i]);
- session->SendPacket(&data);
+ session->SendPacket(updatePacket.Write());
}
void Guild::SendEventLog(WorldSession* session) const
{
- WorldPacket data(SMSG_GUILD_EVENT_LOG_QUERY_RESULTS, 1 + m_eventLog->GetSize() * (1 + 8 + 4));
- m_eventLog->WritePacket(data);
- session->SendPacket(&data);
+ GuildLog* logs = m_eventLog->GetGuildLog();
+
+ if (!logs)
+ return;
+
+ WorldPackets::Guild::GuildEventLogQueryResults packet;
+ packet.Entry.reserve(m_eventLog->GetSize());
+
+ for (GuildLog::const_iterator itr = logs->begin(); itr != logs->end(); ++itr)
+ {
+ EventLogEntry* eventLog = (EventLogEntry*)(*itr);
+ eventLog->WritePacket(packet);
+ }
+
+ session->SendPacket(packet.Write());
+
TC_LOG_DEBUG("guild", "SMSG_GUILD_EVENT_LOG_QUERY_RESULT [%s]", session->GetPlayerInfo().c_str());
}
void Guild::SendNewsUpdate(WorldSession* session)
{
- uint32 size = m_newsLog->GetSize();
GuildLog* logs = m_newsLog->GetGuildLog();
if (!logs)
return;
- WorldPacket data(SMSG_GUILD_NEWS_UPDATE, (21 + size * (26 + 8)) / 8 + (8 + 6 * 4) * size);
- data.WriteBits(size, 21);
+ WorldPackets::Guild::GuildNews packet;
+ packet.NewsEvents.reserve(m_newsLog->GetSize());
for (GuildLog::const_iterator itr = logs->begin(); itr != logs->end(); ++itr)
{
- data.WriteBits(0, 26); // Not yet implemented used for guild achievements
- ObjectGuid guid = ((NewsLogEntry*)(*itr))->GetPlayerGuid();
-
- data.WriteBit(guid[7]);
- data.WriteBit(guid[0]);
- data.WriteBit(guid[6]);
- data.WriteBit(guid[5]);
- data.WriteBit(guid[4]);
- data.WriteBit(guid[3]);
- data.WriteBit(guid[1]);
- data.WriteBit(guid[2]);
+ NewsLogEntry* eventLog = (NewsLogEntry*)(*itr);
+ eventLog->WritePacket(packet);
}
- data.FlushBits();
-
- for (GuildLog::const_iterator itr = logs->begin(); itr != logs->end(); ++itr)
- {
- NewsLogEntry* news = (NewsLogEntry*)(*itr);
- ObjectGuid guid = news->GetPlayerGuid();
- data.WriteByteSeq(guid[5]);
-
- data << uint32(news->GetFlags()); // 1 sticky
- data << uint32(news->GetValue());
- data << uint32(0);
-
- data.WriteByteSeq(guid[7]);
- data.WriteByteSeq(guid[6]);
- data.WriteByteSeq(guid[2]);
- data.WriteByteSeq(guid[3]);
- data.WriteByteSeq(guid[0]);
- data.WriteByteSeq(guid[4]);
- data.WriteByteSeq(guid[1]);
-
- data << uint32(news->GetGUID());
- data << uint32(news->GetType());
- data.AppendPackedTime(news->GetTimestamp());
- }
+ session->SendPacket(packet.Write());
- session->SendPacket(&data);
TC_LOG_DEBUG("guild", "SMSG_GUILD_NEWS_UPDATE [%s]", session->GetPlayerInfo().c_str());
}
@@ -2260,14 +2045,26 @@ void Guild::SendBankLog(WorldSession* session, uint8 tabId) const
// GUILD_BANK_MAX_TABS send by client for money log
if (tabId < _GetPurchasedTabsSize() || tabId == GUILD_BANK_MAX_TABS)
{
- LogHolder const* log = m_bankEventLog[tabId];
- WorldPacket data(SMSG_GUILD_BANK_LOG_QUERY_RESULT, log->GetSize() * (4 * 4 + 1) + 1 + 1);
- data.WriteBit(GetLevel() >= 5 && tabId == GUILD_BANK_MAX_TABS); // has Cash Flow perk
- log->WritePacket(data);
- data << uint32(tabId);
+ GuildLog* logs = m_bankEventLog[tabId]->GetGuildLog();
+
+ if (!logs)
+ return;
+
+ WorldPackets::Guild::GuildBankLogQueryResults packet;
+ packet.Tab = int32(tabId);
+
//if (tabId == GUILD_BANK_MAX_TABS && hasCashFlow)
- // data << uint64(cashFlowContribution);
- session->SendPacket(&data);
+ // packet.WeeklyBonusMoney.Set(uint64(weeklyBonusMoney));
+
+ packet.Entry.reserve(m_bankEventLog[tabId]->GetSize());
+ for (GuildLog::const_iterator itr = logs->begin(); itr != logs->end(); ++itr)
+ {
+ BankEventLogEntry* bankEventLog = (BankEventLogEntry*)(*itr);
+ bankEventLog->WritePacket(packet);
+ }
+
+ session->SendPacket(packet.Write());
+
TC_LOG_DEBUG("guild", "SMSG_GUILD_BANK_LOG_QUERY_RESULT [%s] TabId: %u", session->GetPlayerInfo().c_str(), tabId);
}
}
@@ -2286,19 +2083,22 @@ void Guild::SendPermissions(WorldSession* session) const
uint8 rankId = member->GetRankId();
- WorldPacket data(SMSG_GUILD_PERMISSIONS_QUERY_RESULTS, 4 * 15 + 1);
- data << uint32(rankId);
- data << uint32(_GetPurchasedTabsSize());
- data << uint32(_GetRankRights(rankId));
- data << uint32(_GetMemberRemainingMoney(member));
- data.WriteBits(GUILD_BANK_MAX_TABS, 23);
+ WorldPackets::Guild::GuildPermissionsQueryResults queryResult;
+ queryResult.RankID = rankId;
+ queryResult.WithdrawGoldLimit = _GetMemberRemainingMoney(member);
+ queryResult.Flags = _GetRankRights(rankId);
+ queryResult.NumTabs = _GetPurchasedTabsSize();
+ queryResult.Tab.reserve(GUILD_BANK_MAX_TABS);
+
for (uint8 tabId = 0; tabId < GUILD_BANK_MAX_TABS; ++tabId)
{
- data << uint32(_GetRankBankTabRights(rankId, tabId));
- data << uint32(_GetMemberRemainingSlots(member, tabId));
+ WorldPackets::Guild::GuildPermissionsQueryResults::GuildRankTabPermissions tabPerm;
+ tabPerm.Flags = _GetRankBankTabRights(rankId, tabId);
+ tabPerm.WithdrawItemLimit = _GetMemberRemainingSlots(member, tabId);
+ queryResult.Tab.push_back(tabPerm);
}
- session->SendPacket(&data);
+ session->SendPacket(queryResult.Write());
TC_LOG_DEBUG("guild", "SMSG_GUILD_PERMISSIONS_QUERY_RESULTS [%s] Rank: %u", session->GetPlayerInfo().c_str(), rankId);
}
@@ -2309,9 +2109,11 @@ void Guild::SendMoneyInfo(WorldSession* session) const
return;
int32 amount = _GetMemberRemainingMoney(member);
- WorldPacket data(SMSG_GUILD_BANK_MONEY_WITHDRAWN, 8);
- data << int64(amount);
- session->SendPacket(&data);
+
+ WorldPackets::Guild::GuildBankRemainingWithdrawMoney packet;
+ packet.RemainingWithdrawMoney = int64(amount);
+ session->SendPacket(packet.Write());
+
TC_LOG_DEBUG("guild", "SMSG_GUILD_BANK_MONEY_WITHDRAWN [%s] Money: %u", session->GetPlayerInfo().c_str(), amount);
}
@@ -2324,53 +2126,111 @@ void Guild::SendLoginInfo(WorldSession* session)
/*
Login sequence:
- SMSG_GUILD_EVENT - GE_MOTD
+ SMSG_GUILD_EVENT_MOTD
SMSG_GUILD_RANK
- SMSG_GUILD_EVENT - GE_SIGNED_ON
+ SMSG_GUILD_EVENT_PRESENCE_CHANGE - LoggedOn: True
-- learn perks
- SMSG_GUILD_REPUTATION_WEEKLY_CAP
- SMSG_GUILD_ACHIEVEMENT_DATA
+ SMSG_ALL_GUILD_ACHIEVEMENTS
SMSG_GUILD_MEMBER_DAILY_RESET // bank withdrawal reset
*/
- WorldPacket data(SMSG_GUILD_EVENT, 1 + 1 + m_motd.size() + 1);
- data << uint8(GE_MOTD);
- data << uint8(1);
- data << m_motd;
- session->SendPacket(&data);
-
- TC_LOG_DEBUG("guild", "SMSG_GUILD_EVENT [%s] MOTD", session->GetPlayerInfo().c_str());
-
+ SendEventMOTD(session);
SendGuildRankInfo(session);
- _BroadcastEvent(GE_SIGNED_ON, player->GetGUID(), player->GetName().c_str());
+ SendEventPresenceChanged(session, true, true); // Broadcast
// Send to self separately, player is not in world yet and is not found by _BroadcastEvent
- data.Initialize(SMSG_GUILD_EVENT, 1 + 1 + player->GetName().size() + 8);
- data << uint8(GE_SIGNED_ON);
- data << uint8(1);
- data << player->GetName();
- data << player->GetGUID();
- session->SendPacket(&data);
+ SendEventPresenceChanged(session, true);
- data.Initialize(SMSG_GUILD_MEMBER_DAILY_RESET, 0); // tells the client to request bank withdrawal limit
- session->SendPacket(&data);
-
- if (!sWorld->getBoolConfig(CONFIG_GUILD_LEVELING_ENABLED))
- return;
+ if (member->GetGUID() == GetLeaderGUID())
+ {
+ WorldPackets::Guild::GuildFlaggedForRename renameFlag;
+ renameFlag.FlagSet = false;
+ player->GetSession()->SendPacket(renameFlag.Write());
+ }
for (uint32 i = 0; i < sGuildPerkSpellsStore.GetNumRows(); ++i)
if (GuildPerkSpellsEntry const* entry = sGuildPerkSpellsStore.LookupEntry(i))
if (entry->GuildLevel <= GetLevel())
player->LearnSpell(entry->SpellID, true);
- SendGuildReputationWeeklyCap(session, member->GetWeekReputation());
-
m_achievementMgr.SendAllAchievementData(player);
+ WorldPackets::Guild::GuildMemberDailyReset packet; // tells the client to request bank withdrawal limit
+ player->GetSession()->SendPacket(packet.Write());
+
member->SetStats(player);
member->AddFlag(GUILDMEMBER_STATUS_ONLINE);
}
+void Guild::SendEventBankMoneyChanged()
+{
+ WorldPackets::Guild::GuildEventBankMoneyChanged eventPacket;
+ eventPacket.Money = GetBankMoney();
+ BroadcastPacket(eventPacket.Write());
+}
+
+void Guild::SendEventMOTD(WorldSession* session, bool broadcast)
+{
+ WorldPackets::Guild::GuildEventMotd eventPacket;
+ eventPacket.MotdText = GetMOTD();
+
+ if (broadcast)
+ BroadcastPacket(eventPacket.Write());
+ else
+ {
+ session->SendPacket(eventPacket.Write());
+ TC_LOG_DEBUG("guild", "SMSG_GUILD_EVENT_MOTD [%s] ", session->GetPlayerInfo().c_str());
+ }
+}
+
+void Guild::SendEventNewLeader(Member* newLeader, Member* oldLeader, bool isSelfPromoted)
+{
+ WorldPackets::Guild::GuildEventNewLeader eventPacket;
+ eventPacket.SelfPromoted = isSelfPromoted;
+ eventPacket.NewLeaderGUID = newLeader->GetGUID();
+ eventPacket.NewLeaderName = newLeader->GetName();
+ eventPacket.NewLeaderVirtualRealmAddress = GetVirtualRealmAddress();
+ eventPacket.OldLeaderGUID = oldLeader->GetGUID();
+ eventPacket.OldLeaderName = oldLeader->GetName();
+ eventPacket.OldLeaderVirtualRealmAddress = GetVirtualRealmAddress();
+ BroadcastPacket(eventPacket.Write());
+}
+
+void Guild::SendEventPlayerLeft(Player* leaver, Player* remover, bool isRemoved)
+{
+ WorldPackets::Guild::GuildEventPlayerLeft eventPacket;
+ eventPacket.Removed = isRemoved;
+ eventPacket.LeaverGUID = leaver->GetGUID();
+ eventPacket.LeaverName = leaver->GetName();
+ eventPacket.LeaverVirtualRealmAddress = GetVirtualRealmAddress();
+
+ if (isRemoved)
+ {
+ eventPacket.RemoverGUID = remover->GetGUID();
+ eventPacket.RemoverName = remover->GetName();
+ eventPacket.RemoverVirtualRealmAddress = GetVirtualRealmAddress();
+ }
+
+ BroadcastPacket(eventPacket.Write());
+}
+
+void Guild::SendEventPresenceChanged(WorldSession* session, bool loggedOn, bool broadcast)
+{
+ Player* player = session->GetPlayer();
+
+ WorldPackets::Guild::GuildEventPresenceChange eventPacket;
+ eventPacket.Guid = player->GetGUID();
+ eventPacket.Name = player->GetName();
+ eventPacket.VirtualRealmAddress = GetVirtualRealmAddress();
+ eventPacket.LoggedOn = loggedOn;
+ eventPacket.Mobile = false;
+
+ if (broadcast)
+ BroadcastPacket(eventPacket.Write());
+ else
+ session->SendPacket(eventPacket.Write());
+}
+
// Loading methods
bool Guild::LoadFromDB(Field* fields)
{
@@ -2383,10 +2243,8 @@ bool Guild::LoadFromDB(Field* fields)
m_createdDate = time_t(fields[10].GetUInt32());
m_bankMoney = fields[11].GetUInt64();
_level = fields[12].GetUInt32();
- _experience = fields[13].GetUInt64();
- _todayExperience = fields[14].GetUInt64();
- uint8 purchasedTabs = uint8(fields[15].GetUInt64());
+ uint8 purchasedTabs = uint8(fields[13].GetUInt64());
if (purchasedTabs > GUILD_BANK_MAX_TABS)
purchasedTabs = GUILD_BANK_MAX_TABS;
@@ -2424,8 +2282,8 @@ bool Guild::LoadMemberFromDB(Field* fields)
void Guild::LoadBankRightFromDB(Field* fields)
{
- // tabId rights slots
- GuildBankRightsAndSlots rightsAndSlots(fields[1].GetUInt8(), fields[3].GetUInt8(), fields[4].GetUInt32());
+ // tabId rights slots
+ GuildBankRightsAndSlots rightsAndSlots(fields[1].GetUInt8(), fields[3].GetInt8(), fields[4].GetInt32());
// rankId
_SetRankBankTabRightsAndSlots(fields[2].GetUInt8(), rightsAndSlots, false);
}
@@ -2698,7 +2556,7 @@ bool Guild::AddMember(ObjectGuid guid, uint8 rankId)
// Remove all player signs from another petitions
// This will be prevent attempt to join many guilds and corrupt guild data integrity
- Player::RemovePetitionsAndSigns(guid, GUILD_CHARTER_TYPE);
+ Player::RemovePetitionsAndSigns(guid);
ObjectGuid::LowType lowguid = guid.GetCounter();
@@ -2734,8 +2592,9 @@ bool Guild::AddMember(ObjectGuid guid, uint8 rankId)
name,
fields[1].GetUInt8(),
fields[2].GetUInt8(),
- fields[3].GetUInt16(),
- fields[4].GetUInt32(),
+ fields[3].GetUInt8(),
+ fields[4].GetUInt16(),
+ fields[5].GetUInt32(),
0);
ok = member->CheckStats();
@@ -2754,7 +2613,13 @@ bool Guild::AddMember(ObjectGuid guid, uint8 rankId)
_UpdateAccountsNumber();
_LogEvent(GUILD_EVENT_LOG_JOIN_GUILD, lowguid);
- _BroadcastEvent(GE_JOINED, guid, name.c_str());
+
+ WorldPackets::Guild::GuildEventPlayerJoined joinNotificationPacket;
+ joinNotificationPacket.Guid = guid;
+ joinNotificationPacket.Name = name;
+ joinNotificationPacket.VirtualRealmAddress = GetVirtualRealmAddress();
+ BroadcastPacket(joinNotificationPacket.Write());
+
sGuildFinderMgr->RemoveAllMembershipRequestsFromPlayer(guid);
// Call scripts if member was succesfully added (and stored to database)
@@ -2798,8 +2663,8 @@ void Guild::DeleteMember(ObjectGuid guid, bool isDisbanding, bool isKicked, bool
// If leader does not exist (at guild loading with deleted leader) do not send broadcasts
if (oldLeader)
{
- _BroadcastEvent(GE_LEADER_CHANGED, ObjectGuid::Empty, oldLeader->GetName().c_str(), newLeader->GetName().c_str());
- _BroadcastEvent(GE_LEFT, guid, oldLeader->GetName().c_str());
+ SendEventNewLeader(newLeader, oldLeader, true);
+ SendEventPlayerLeft(player);
}
}
// Call script on remove before member is actually removed from guild (and database)
@@ -2879,6 +2744,10 @@ void Guild::SetBankTabText(uint8 tabId, std::string const& text)
{
pTab->SetText(text);
pTab->SendText(this, NULL);
+
+ WorldPackets::Guild::GuildEventTabTextChanged eventPacket;
+ eventPacket.Tab = tabId;
+ BroadcastPacket(eventPacket.Write());
}
}
@@ -3115,7 +2984,7 @@ inline void Guild::_UpdateMemberWithdrawSlots(SQLTransaction& trans, ObjectGuid
}
}
-inline bool Guild::_MemberHasTabRights(ObjectGuid guid, uint8 tabId, uint32 rights) const
+inline bool Guild::_MemberHasTabRights(ObjectGuid guid, uint8 tabId, int32 rights) const
{
if (const Member* member = GetMember(guid))
{
@@ -3313,111 +3182,98 @@ void Guild::_SendBankContentUpdate(uint8 tabId, SlotIds slots) const
{
if (BankTab const* tab = GetBankTab(tabId))
{
- ByteBuffer tabData;
- WorldPacket data(SMSG_GUILD_BANK_LIST, 1200);
- data.WriteBit(0);
- data.WriteBits(slots.size(), 20); // Item count
- data.WriteBits(0, 22); // Tab count
+ WorldPackets::Guild::GuildBankQueryResults packet;
+ packet.FullUpdate = true; // @todo
+ packet.Tab = int32(tabId);
+ packet.Money = m_bankMoney;
for (SlotIds::const_iterator itr = slots.begin(); itr != slots.end(); ++itr)
{
- data.WriteBit(0);
-
Item const* tabItem = tab->GetItem(*itr);
- uint32 enchantCount = 0;
+
+ WorldPackets::Guild::GuildBankItemInfo itemInfo;
+
+ itemInfo.Slot = int32(*itr);
+ itemInfo.Item.ItemID = int32(tabItem ? tabItem->GetEntry() : 0);
+ itemInfo.Count = int32(tabItem ? tabItem->GetCount() : 0);
+ itemInfo.Charges = int32(tabItem ? abs(tabItem->GetSpellCharges()) : 0);
+ itemInfo.OnUseEnchantmentID = 0/*int32(tabItem->GetItemSuffixFactor())*/;
+ itemInfo.Flags = 0;
+ itemInfo.Locked = false;
+
if (tabItem)
{
- for (uint32 enchSlot = 0; enchSlot < MAX_ENCHANTMENT_SLOT; ++enchSlot)
+ uint32 enchants = 0;
+ for (uint32 ench = 0; ench < MAX_ENCHANTMENT_SLOT; ++ench)
+ if (uint32 enchantId = tabItem->GetEnchantmentId(EnchantmentSlot(ench)))
+ ++enchants;
+
+ itemInfo.SocketEnchant.reserve(enchants);
+ for (uint32 ench = 0; ench < MAX_ENCHANTMENT_SLOT; ++ench)
{
- if (uint32 enchantId = tabItem->GetEnchantmentId(EnchantmentSlot(enchSlot)))
+ if (uint32 enchantId = tabItem->GetEnchantmentId(EnchantmentSlot(ench)))
{
- tabData << uint32(enchantId);
- tabData << uint32(enchSlot);
- ++enchantCount;
+ WorldPackets::Guild::GuildBankItemInfo::GuildBankSocketEnchant socketEnchant;
+ socketEnchant.SocketEnchantID = int32(enchantId);
+ socketEnchant.SocketIndex = int32(ench);
+ itemInfo.SocketEnchant.push_back(socketEnchant);
}
}
}
- data.WriteBits(enchantCount, 23); // enchantment count
-
- tabData << uint32(0);
- tabData << uint32(0);
- tabData << uint32(0);
- tabData << uint32(tabItem ? tabItem->GetCount() : 0); // ITEM_FIELD_STACK_COUNT
- tabData << uint32(*itr);
- tabData << uint32(0);
- tabData << uint32(tabItem ? tabItem->GetEntry() : 0);
- tabData << uint32(tabItem ? tabItem->GetItemRandomPropertyId() : 0);
- tabData << uint32(tabItem ? abs(tabItem->GetSpellCharges()) : 0); // Spell charges
- tabData << uint32(tabItem ? tabItem->GetItemSuffixFactor() : 0); // SuffixFactor
+ packet.ItemInfo.push_back(itemInfo);
}
- data.FlushBits();
-
- data << uint64(m_bankMoney);
- if (!tabData.empty())
- data.append(tabData);
-
- data << uint32(tabId);
-
- size_t rempos = data.wpos();
- data << uint32(0); // Item withdraw amount, will be filled later
-
for (Members::const_iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
if (_MemberHasTabRights(itr->second->GetGUID(), tabId, GUILD_BANK_RIGHT_VIEW_TAB))
if (Player* player = itr->second->FindPlayer())
{
- data.put<uint32>(rempos, uint32(_GetMemberRemainingSlots(itr->second, tabId)));
- player->GetSession()->SendPacket(&data);
+ packet.WithdrawalsRemaining = int32(_GetMemberRemainingSlots(itr->second, tabId));
+ player->GetSession()->SendPacket(packet.Write());
}
- TC_LOG_DEBUG("guild", "WORLD: Sent (SMSG_GUILD_BANK_LIST)");
+ TC_LOG_DEBUG("guild", "WORLD: Sent SMSG_GUILD_BANK_QUERY_RESULTS");
}
}
-void Guild::_BroadcastEvent(GuildEvents guildEvent, ObjectGuid guid, const char* param1, const char* param2, const char* param3) const
-{
- uint8 count = !param3 ? (!param2 ? (!param1 ? 0 : 1) : 2) : 3;
-
- WorldPacket data(SMSG_GUILD_EVENT, 1 + 1 + count + 8);
- data << uint8(guildEvent);
- data << uint8(count);
-
- if (param3)
- data << param1 << param2 << param3;
- else if (param2)
- data << param1 << param2;
- else if (param1)
- data << param1;
-
- if (!guid.IsEmpty())
- data << guid;
-
- BroadcastPacket(&data);
-
- if (sLog->ShouldLog("guild", LOG_LEVEL_DEBUG))
- TC_LOG_DEBUG("guild", "SMSG_GUILD_EVENT [Broadcast] Event: %s (%u)", _GetGuildEventString(guildEvent).c_str(), guildEvent);
-}
-
-void Guild::SendBankList(WorldSession* session, uint8 tabId, bool withContent, bool withTabInfo) const
+void Guild::SendBankList(WorldSession* session, uint8 tabId, bool fullUpdate) const
{
Member const* member = GetMember(session->GetPlayer()->GetGUID());
if (!member) // Shouldn't happen, just in case
return;
- ByteBuffer tabData;
- WorldPacket data(SMSG_GUILD_BANK_LIST, 500);
- data.WriteBit(0);
+ WorldPackets::Guild::GuildBankQueryResults packet;
+
+ packet.Money = uint64(m_bankMoney);
+ packet.WithdrawalsRemaining = int32(_GetMemberRemainingSlots(member, tabId));
+ packet.Tab = int32(tabId);
+ packet.FullUpdate = fullUpdate;
+
+ // TabInfo
+ if (fullUpdate)
+ {
+ packet.TabInfo.reserve(_GetPurchasedTabsSize());
+ for (uint8 i = 0; i < _GetPurchasedTabsSize(); ++i)
+ {
+ WorldPackets::Guild::GuildBankTabInfo tabInfo;
+ tabInfo.TabIndex = i;
+ tabInfo.Name = m_bankTabs[i]->GetName();
+ tabInfo.Icon = m_bankTabs[i]->GetIcon();
+ packet.TabInfo.push_back(tabInfo);
+ }
+ }
+
+ // ItemInfo
uint32 itemCount = 0;
- if (withContent && _MemberHasTabRights(session->GetPlayer()->GetGUID(), tabId, GUILD_BANK_RIGHT_VIEW_TAB))
+ if (fullUpdate && _MemberHasTabRights(session->GetPlayer()->GetGUID(), tabId, GUILD_BANK_RIGHT_VIEW_TAB))
if (BankTab const* tab = GetBankTab(tabId))
for (uint8 slotId = 0; slotId < GUILD_BANK_MAX_SLOTS; ++slotId)
if (tab->GetItem(slotId))
++itemCount;
- data.WriteBits(itemCount, 20);
- data.WriteBits(withTabInfo ? _GetPurchasedTabsSize() : 0, 22);
- if (withContent && _MemberHasTabRights(session->GetPlayer()->GetGUID(), tabId, GUILD_BANK_RIGHT_VIEW_TAB))
+ packet.ItemInfo.reserve(itemCount);
+
+ if (fullUpdate && _MemberHasTabRights(session->GetPlayer()->GetGUID(), tabId, GUILD_BANK_RIGHT_VIEW_TAB))
{
if (BankTab const* tab = GetBankTab(tabId))
{
@@ -3425,67 +3281,44 @@ void Guild::SendBankList(WorldSession* session, uint8 tabId, bool withContent, b
{
if (Item* tabItem = tab->GetItem(slotId))
{
- data.WriteBit(0);
+ WorldPackets::Guild::GuildBankItemInfo itemInfo;
+
+ itemInfo.Slot = int32(slotId);
+ itemInfo.Item.ItemID = tabItem->GetEntry();
+ itemInfo.Count = int32(tabItem->GetCount());
+ itemInfo.Charges = int32(abs(tabItem->GetSpellCharges()));
+ itemInfo.EnchantmentID = int32(tabItem->GetItemRandomPropertyId()); // verify that...
+ itemInfo.OnUseEnchantmentID = 0/*int32(tabItem->GetItemSuffixFactor())*/;
+ itemInfo.Flags = 0;
uint32 enchants = 0;
for (uint32 ench = 0; ench < MAX_ENCHANTMENT_SLOT; ++ench)
+ if (uint32 enchantId = tabItem->GetEnchantmentId(EnchantmentSlot(ench)))
+ ++enchants;
+
+ itemInfo.SocketEnchant.reserve(enchants);
+ for (uint32 ench = 0; ench < MAX_ENCHANTMENT_SLOT; ++ench)
{
if (uint32 enchantId = tabItem->GetEnchantmentId(EnchantmentSlot(ench)))
{
- tabData << uint32(enchantId);
- tabData << uint32(ench);
- ++enchants;
+ WorldPackets::Guild::GuildBankItemInfo::GuildBankSocketEnchant socketEnchant;
+ socketEnchant.SocketEnchantID = int32(enchantId);
+ socketEnchant.SocketIndex = int32(ench);
+ itemInfo.SocketEnchant.push_back(socketEnchant);
}
}
- data.WriteBits(enchants, 23);
-
- tabData << uint32(0);
- tabData << uint32(0);
- tabData << uint32(0);
- tabData << uint32(tabItem->GetCount()); // ITEM_FIELD_STACK_COUNT
- tabData << uint32(slotId);
- tabData << uint32(0);
- tabData << uint32(tabItem->GetEntry());
- tabData << uint32(tabItem->GetItemRandomPropertyId());
- tabData << uint32(abs(tabItem->GetSpellCharges())); // Spell charges
- tabData << uint32(tabItem->GetItemSuffixFactor()); // SuffixFactor
+ itemInfo.Locked = false;
+
+ packet.ItemInfo.push_back(itemInfo);
}
}
}
}
- if (withTabInfo)
- {
- for (uint8 i = 0; i < _GetPurchasedTabsSize(); ++i)
- {
- data.WriteBits(m_bankTabs[i]->GetIcon().length(), 9);
- data.WriteBits(m_bankTabs[i]->GetName().length(), 7);
- }
- }
-
- data.FlushBits();
+ session->SendPacket(packet.Write());
- if (withTabInfo)
- {
- for (uint8 i = 0; i < _GetPurchasedTabsSize(); ++i)
- {
- data.WriteString(m_bankTabs[i]->GetIcon());
- data << uint32(i);
- data.WriteString(m_bankTabs[i]->GetName());
- }
- }
-
- data << uint64(m_bankMoney);
- if (!tabData.empty())
- data.append(tabData);
-
- data << uint32(tabId);
- data << uint32(_GetMemberRemainingSlots(member, tabId));
-
- session->SendPacket(&data);
-
- TC_LOG_DEBUG("guild", "WORLD: Sent (SMSG_GUILD_BANK_LIST)");
+ TC_LOG_DEBUG("guild", "WORLD: Sent SMSG_GUILD_BANK_QUERY_RESULTS");
}
void Guild::SendGuildRanksUpdate(ObjectGuid setterGuid, ObjectGuid targetGuid, uint32 rank)
@@ -3493,45 +3326,12 @@ void Guild::SendGuildRanksUpdate(ObjectGuid setterGuid, ObjectGuid targetGuid, u
Member* member = GetMember(targetGuid);
ASSERT(member);
- WorldPacket data(SMSG_GUILD_SEND_RANK_CHANGE, 100);
- data.WriteBit(setterGuid[7]);
- data.WriteBit(setterGuid[2]);
- data.WriteBit(targetGuid[2]);
- data.WriteBit(setterGuid[1]);
- data.WriteBit(targetGuid[1]);
- data.WriteBit(targetGuid[7]);
- data.WriteBit(targetGuid[0]);
- data.WriteBit(targetGuid[5]);
- data.WriteBit(targetGuid[4]);
- data.WriteBit(rank < member->GetRankId()); // 1 == higher, 0 = lower?
- data.WriteBit(setterGuid[5]);
- data.WriteBit(setterGuid[0]);
- data.WriteBit(targetGuid[6]);
- data.WriteBit(setterGuid[3]);
- data.WriteBit(setterGuid[6]);
- data.WriteBit(targetGuid[3]);
- data.WriteBit(setterGuid[4]);
-
- data.FlushBits();
-
- data << uint32(rank);
- data.WriteByteSeq(setterGuid[3]);
- data.WriteByteSeq(targetGuid[7]);
- data.WriteByteSeq(setterGuid[6]);
- data.WriteByteSeq(setterGuid[2]);
- data.WriteByteSeq(targetGuid[5]);
- data.WriteByteSeq(targetGuid[0]);
- data.WriteByteSeq(setterGuid[7]);
- data.WriteByteSeq(setterGuid[5]);
- data.WriteByteSeq(targetGuid[2]);
- data.WriteByteSeq(targetGuid[1]);
- data.WriteByteSeq(setterGuid[0]);
- data.WriteByteSeq(setterGuid[4]);
- data.WriteByteSeq(setterGuid[1]);
- data.WriteByteSeq(targetGuid[3]);
- data.WriteByteSeq(targetGuid[6]);
- data.WriteByteSeq(targetGuid[4]);
- BroadcastPacket(&data);
+ WorldPackets::Guild::GuildSendRankChange rankChange;
+ rankChange.Officer = setterGuid;
+ rankChange.Other = targetGuid;
+ rankChange.RankID = rank;
+ rankChange.Promote = (rank < member->GetRankId());
+ BroadcastPacket(rankChange.Write());
member->ChangeRank(rank);
@@ -3539,96 +3339,15 @@ void Guild::SendGuildRanksUpdate(ObjectGuid setterGuid, ObjectGuid targetGuid, u
targetGuid.ToString().c_str(), setterGuid.ToString().c_str(), rank);
}
-void Guild::GiveXP(uint32 xp, Player* source)
-{
- if (!sWorld->getBoolConfig(CONFIG_GUILD_LEVELING_ENABLED))
- return;
-
- /// @todo: Award reputation and count activity for player
-
- if (GetLevel() >= sWorld->getIntConfig(CONFIG_GUILD_MAX_LEVEL))
- xp = 0; // SMSG_GUILD_XP_GAIN is always sent, even for no gains
-
- if (GetLevel() < GUILD_EXPERIENCE_UNCAPPED_LEVEL)
- xp = std::min(xp, sWorld->getIntConfig(CONFIG_GUILD_DAILY_XP_CAP) - uint32(_todayExperience));
-
- WorldPacket data(SMSG_GUILD_XP_GAIN, 8);
- data << uint64(xp);
- source->GetSession()->SendPacket(&data);
-
- _experience += xp;
- _todayExperience += xp;
-
- if (!xp)
- return;
-
- uint32 oldLevel = GetLevel();
-
- // Ding, mon!
- while (GetExperience() >= sGuildMgr->GetXPForGuildLevel(GetLevel()) && GetLevel() < sWorld->getIntConfig(CONFIG_GUILD_MAX_LEVEL))
- {
- _experience -= sGuildMgr->GetXPForGuildLevel(GetLevel());
- ++_level;
-
- // Find all guild perks to learn
- std::vector<uint32> perksToLearn;
- for (uint32 i = 0; i < sGuildPerkSpellsStore.GetNumRows(); ++i)
- if (GuildPerkSpellsEntry const* entry = sGuildPerkSpellsStore.LookupEntry(i))
- if (entry->GuildLevel > oldLevel && entry->GuildLevel <= GetLevel())
- perksToLearn.push_back(entry->SpellID);
-
- // Notify all online players that guild level changed and learn perks
- for (Members::const_iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
- {
- if (Player* player = itr->second->FindPlayer())
- {
- player->SetGuildLevel(GetLevel());
- for (size_t i = 0; i < perksToLearn.size(); ++i)
- player->LearnSpell(perksToLearn[i], true);
- }
- }
-
- AddGuildNews(GUILD_NEWS_LEVEL_UP, ObjectGuid::Empty, 0, _level);
- UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_GUILD_LEVEL, GetLevel(), 0, 0, NULL, source);
-
- ++oldLevel;
- }
-}
-
-void Guild::SendGuildXP(WorldSession* session /* = NULL */) const
-{
- //Member const* member = GetMember(session->GetGuidLow());
-
- WorldPacket data(SMSG_GUILD_XP, 40);
- data << uint64(/*member ? member->GetTotalActivity() :*/ 0);
- data << uint64(sGuildMgr->GetXPForGuildLevel(GetLevel()) - GetExperience()); // XP missing for next level
- data << uint64(GetTodayExperience());
- data << uint64(/*member ? member->GetWeeklyActivity() :*/ 0);
- data << uint64(GetExperience());
- session->SendPacket(&data);
-}
-
-void Guild::SendGuildReputationWeeklyCap(WorldSession* session, uint32 reputation) const
-{
- uint32 cap = sWorld->getIntConfig(CONFIG_GUILD_WEEKLY_REP_CAP) - reputation;
- WorldPacket data(SMSG_GUILD_REPUTATION_WEEKLY_CAP, 4);
- data << uint32(cap);
- session->SendPacket(&data);
- TC_LOG_DEBUG("guild", "SMSG_GUILD_REPUTATION_WEEKLY_CAP [%s]: Left: %u",
- session->GetPlayerInfo().c_str(), cap);
-}
-
void Guild::ResetTimes(bool weekly)
{
- _todayExperience = 0;
for (Members::const_iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
{
itr->second->ResetValues(weekly);
if (Player* player = itr->second->FindPlayer())
{
- //SendGuildXP(player->GetSession());
- WorldPacket data(SMSG_GUILD_MEMBER_DAILY_RESET, 0); // tells the client to request bank withdrawal limit
- player->GetSession()->SendPacket(&data);
+ WorldPackets::Guild::GuildMemberDailyReset packet; // tells the client to request bank withdrawal limit
+ player->GetSession()->SendPacket(packet.Write());
}
}
}
@@ -3641,12 +3360,10 @@ void Guild::AddGuildNews(uint8 type, ObjectGuid guid, uint32 flags, uint32 value
m_newsLog->AddEvent(trans, news);
CharacterDatabase.CommitTransaction(trans);
- WorldPacket data(SMSG_GUILD_NEWS_UPDATE, 7 + 32);
- data.WriteBits(1, 21); // size, we are only sending 1 news here
- ByteBuffer buffer;
- news->WritePacket(data, buffer);
-
- BroadcastPacket(&data);
+ WorldPackets::Guild::GuildNews newsPacket;
+ newsPacket.NewsEvents.reserve(1);
+ news->WritePacket(newsPacket);
+ BroadcastPacket(newsPacket.Write());
}
bool Guild::HasAchieved(uint32 achievementId) const
@@ -3676,12 +3393,11 @@ void Guild::HandleNewsSetSticky(WorldSession* session, uint32 newsId, bool stick
NewsLogEntry* news = (NewsLogEntry*)(*itr);
news->SetSticky(sticky);
- TC_LOG_DEBUG("guild", "HandleNewsSetSticky: [%s] chenged newsId %u sticky to %u",
+ TC_LOG_DEBUG("guild", "HandleNewsSetSticky: [%s] changed newsId %u sticky to %u",
session->GetPlayerInfo().c_str(), newsId, sticky);
- WorldPacket data(SMSG_GUILD_NEWS_UPDATE, 7 + 32);
- data.WriteBits(1, 21);
- ByteBuffer buffer;
- news->WritePacket(data, buffer);
- session->SendPacket(&data);
+ WorldPackets::Guild::GuildNews newsPacket;
+ newsPacket.NewsEvents.reserve(1);
+ news->WritePacket(newsPacket);
+ session->SendPacket(newsPacket.Write());
}
diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h
index c20146d7bd1..55b740eb8ed 100644
--- a/src/server/game/Guilds/Guild.h
+++ b/src/server/game/Guilds/Guild.h
@@ -29,6 +29,16 @@
class Item;
+namespace WorldPackets
+{
+ namespace Guild
+ {
+ class GuildBankLogQueryResults;
+ class GuildEventLogQueryResults;
+ class GuildNews;
+ }
+}
+
enum GuildMisc
{
GUILD_BANK_MAX_TABS = 8, // send by client for money log also
@@ -40,7 +50,6 @@ enum GuildMisc
GUILD_WITHDRAW_MONEY_UNLIMITED = 0xFFFFFFFF,
GUILD_WITHDRAW_SLOT_UNLIMITED = 0xFFFFFFFF,
GUILD_EVENT_LOG_GUID_UNDEFINED = 0xFFFFFFFF,
- GUILD_EXPERIENCE_UNCAPPED_LEVEL = 20, ///> Hardcoded in client, starting from this level, guild daily experience gain is unlimited.
TAB_UNDEFINED = 0xFF,
};
@@ -65,20 +74,24 @@ enum GuildDefaultRanks
enum GuildRankRights
{
- GR_RIGHT_EMPTY = 0x00000040,
- GR_RIGHT_GCHATLISTEN = GR_RIGHT_EMPTY | 0x00000001,
- GR_RIGHT_GCHATSPEAK = GR_RIGHT_EMPTY | 0x00000002,
- GR_RIGHT_OFFCHATLISTEN = GR_RIGHT_EMPTY | 0x00000004,
- GR_RIGHT_OFFCHATSPEAK = GR_RIGHT_EMPTY | 0x00000008,
- GR_RIGHT_INVITE = GR_RIGHT_EMPTY | 0x00000010,
- GR_RIGHT_REMOVE = GR_RIGHT_EMPTY | 0x00000020,
- GR_RIGHT_PROMOTE = GR_RIGHT_EMPTY | 0x00000080,
- GR_RIGHT_DEMOTE = GR_RIGHT_EMPTY | 0x00000100,
- GR_RIGHT_SETMOTD = GR_RIGHT_EMPTY | 0x00001000,
- GR_RIGHT_EPNOTE = GR_RIGHT_EMPTY | 0x00002000,
- GR_RIGHT_VIEWOFFNOTE = GR_RIGHT_EMPTY | 0x00004000,
- GR_RIGHT_EOFFNOTE = GR_RIGHT_EMPTY | 0x00008000,
- GR_RIGHT_MODIFY_GUILD_INFO = GR_RIGHT_EMPTY | 0x00010000,
+ GR_RIGHT_NONE = 0x00000000,
+ GR_RIGHT_GCHATLISTEN = 0x00000001,
+ GR_RIGHT_GCHATSPEAK = 0x00000002,
+ GR_RIGHT_OFFCHATLISTEN = 0x00000004,
+ GR_RIGHT_OFFCHATSPEAK = 0x00000008,
+ GR_RIGHT_INVITE = 0x00000010,
+ GR_RIGHT_REMOVE = 0x00000020,
+ GR_RIGHT_ROSTER = 0x00000040,
+ GR_RIGHT_PROMOTE = 0x00000080,
+ GR_RIGHT_DEMOTE = 0x00000100,
+ GR_RIGHT_UNK_200 = 0x00000200,
+ GR_RIGHT_UNK_400 = 0x00000400,
+ GR_RIGHT_UNK_800 = 0x00000800,
+ GR_RIGHT_SETMOTD = 0x00001000,
+ GR_RIGHT_EDIT_PUBLIC_NOTE = 0x00002000,
+ GR_RIGHT_VIEWOFFNOTE = 0x00004000,
+ GR_RIGHT_EOFFNOTE = 0x00008000,
+ GR_RIGHT_MODIFY_GUILD_INFO = 0x00010000,
GR_RIGHT_WITHDRAW_GOLD_LOCK = 0x00020000, // remove money withdraw capacity
GR_RIGHT_WITHDRAW_REPAIR = 0x00040000, // withdraw for repair
GR_RIGHT_WITHDRAW_GOLD = 0x00080000, // withdraw gold
@@ -88,19 +101,19 @@ enum GuildRankRights
enum GuildCommandType
{
- GUILD_COMMAND_CREATE = 0,
- GUILD_COMMAND_INVITE = 1,
- GUILD_COMMAND_QUIT = 3,
- GUILD_COMMAND_ROSTER = 5,
- GUILD_COMMAND_PROMOTE = 6,
- GUILD_COMMAND_DEMOTE = 7,
- GUILD_COMMAND_REMOVE = 8,
+ GUILD_COMMAND_CREATE_GUILD = 0,
+ GUILD_COMMAND_INVITE_PLAYER = 1,
+ GUILD_COMMAND_LEAVE_GUILD = 3,
+ GUILD_COMMAND_GET_ROSTER = 5,
+ GUILD_COMMAND_PROMOTE_PLAYER = 6,
+ GUILD_COMMAND_DEMOTE_PLAYER = 7,
+ GUILD_COMMAND_REMOVE_PLAYER = 8,
GUILD_COMMAND_CHANGE_LEADER = 10,
GUILD_COMMAND_EDIT_MOTD = 11,
GUILD_COMMAND_GUILD_CHAT = 13,
GUILD_COMMAND_FOUNDER = 14,
GUILD_COMMAND_CHANGE_RANK = 16,
- GUILD_COMMAND_PUBLIC_NOTE = 19,
+ GUILD_COMMAND_EDIT_PUBLIC_NOTE = 19,
GUILD_COMMAND_VIEW_TAB = 21,
GUILD_COMMAND_MOVE_ITEM = 22,
GUILD_COMMAND_REPAIR = 25,
@@ -142,36 +155,6 @@ enum GuildCommandError
ERR_GUILD_REP_TOO_LOW = 39
};
-enum GuildEvents
-{
- GE_PROMOTION = 1,
- GE_DEMOTION = 2,
- GE_MOTD = 3,
- GE_JOINED = 4,
- GE_LEFT = 5,
- GE_REMOVED = 6,
- GE_LEADER_IS = 7,
- GE_LEADER_CHANGED = 8,
- GE_DISBANDED = 9,
- GE_TABARDCHANGE = 10,
- GE_RANK_UPDATED = 11,
- GE_RANK_CREATED = 12,
- GE_RANK_DELETED = 13,
- GE_RANK_ORDER_CHANGED = 14,
- GE_FOUNDER = 15,
- GE_SIGNED_ON = 16,
- GE_SIGNED_OFF = 17,
- GE_GUILDBANKBAGSLOTS_CHANGED = 18,
- GE_BANK_TAB_PURCHASED = 19,
- GE_BANK_TAB_UPDATED = 20,
- GE_BANK_MONEY_SET = 21,
- GE_BANK_TAB_AND_MONEY_UPDATED = 22,
- GE_BANK_TEXT_CHANGED = 23,
- // 24 - error 795
- GE_SIGNED_ON_MOBILE = 25,
- GE_SIGNED_Off_MOBILE = 26,
-};
-
enum PetitionTurns
{
PETITION_TURN_OK = 0,
@@ -200,7 +183,7 @@ enum GuildBankRights
GUILD_BANK_RIGHT_UPDATE_TEXT = 0x04,
GUILD_BANK_RIGHT_DEPOSIT_ITEM = GUILD_BANK_RIGHT_VIEW_TAB | GUILD_BANK_RIGHT_PUT_ITEM,
- GUILD_BANK_RIGHT_FULL = 0xFF
+ GUILD_BANK_RIGHT_FULL = -1
};
enum GuildBankEventLogTypes
@@ -255,26 +238,27 @@ enum GuildNews
GUILD_NEWS_ITEM_CRAFTED = 4,
GUILD_NEWS_ITEM_PURCHASED = 5,
GUILD_NEWS_LEVEL_UP = 6,
+ GUILD_NEWS_CREATE = 7, // @todo Implement
+ GUILD_NEWS_EVENT = 8 // @todo Implement
};
struct GuildReward
{
- uint32 Entry;
- int32 Racemask;
- uint64 Price;
- uint32 AchievementId;
- uint8 Standing;
+ uint32 ItemID;
+ uint8 MinGuildRep;
+ int32 RaceMask;
+ uint64 Cost;
+ std::vector<uint32> AchievementsRequired;
};
uint32 const MinNewsItemLevel[MAX_CONTENT] = { 61, 90, 200, 353 };
// Guild Challenge
-#define GUILD_CHALLENGES_TYPES 4
+#define GUILD_CHALLENGES_TYPES 6
-const uint32 GuildChallengeGoldReward[GUILD_CHALLENGES_TYPES] = { 0, 250, 1000, 500 };
-const uint32 GuildChallengeMaxLevelGoldReward[GUILD_CHALLENGES_TYPES] = { 0, 125, 500, 250 };
-const uint32 GuildChallengeXPReward[GUILD_CHALLENGES_TYPES] = { 0, 300000, 3000000, 1500000 };
-const uint32 GuildChallengesPerWeek[GUILD_CHALLENGES_TYPES] = { 0, 7, 1, 3 };
+const uint32 GuildChallengeGoldReward[GUILD_CHALLENGES_TYPES] = { 0, 250, 1000, 500, 250, 500 };
+const uint32 GuildChallengeMaxLevelGoldReward[GUILD_CHALLENGES_TYPES] = { 0, 125, 500, 250, 125, 250 };
+const uint32 GuildChallengesMaxCount[GUILD_CHALLENGES_TYPES] = { 0, 7, 1, 3, 0, 3 };
// Emblem info
class EmblemInfo
@@ -284,7 +268,7 @@ public:
void LoadFromDB(Field* fields);
void SaveToDB(ObjectGuid::LowType guildId) const;
- void ReadPacket(WorldPacket& recv);
+ void ReadPacket(WorldPackets::Guild::SaveGuildEmblem& packet);
uint32 GetStyle() const { return m_style; }
uint32 GetColor() const { return m_color; }
@@ -306,26 +290,26 @@ class GuildBankRightsAndSlots
public:
GuildBankRightsAndSlots() : tabId(TAB_UNDEFINED), rights(0), slots(0) { }
GuildBankRightsAndSlots(uint8 _tabId) : tabId(_tabId), rights(0), slots(0) { }
- GuildBankRightsAndSlots(uint8 _tabId, uint8 _rights, uint32 _slots) : tabId(_tabId), rights(_rights), slots(_slots) { }
+ GuildBankRightsAndSlots(uint8 _tabId, int8 _rights, int32 _slots) : tabId(_tabId), rights(_rights), slots(_slots) { }
void SetGuildMasterValues()
{
rights = GUILD_BANK_RIGHT_FULL;
- slots = uint32(GUILD_WITHDRAW_SLOT_UNLIMITED);
+ slots = int32(GUILD_WITHDRAW_SLOT_UNLIMITED);
}
void SetTabId(uint8 _tabId) { tabId = _tabId; }
- void SetSlots(uint32 _slots) { slots = _slots; }
- void SetRights(uint8 _rights) { rights = _rights; }
+ void SetSlots(int32 _slots) { slots = _slots; }
+ void SetRights(int8 _rights) { rights = _rights; }
int8 GetTabId() const { return tabId; }
int32 GetSlots() const { return slots; }
int8 GetRights() const { return rights; }
private:
- uint8 tabId;
- uint8 rights;
- uint32 slots;
+ uint8 tabId;
+ int8 rights;
+ int32 slots;
};
typedef std::vector <GuildBankRightsAndSlots> GuildBankRightsAndSlotsVec;
@@ -345,6 +329,7 @@ private:
m_zoneId(0),
m_level(0),
m_class(0),
+ _gender(0),
m_flags(GUILDMEMBER_STATUS_NONE),
m_logoutTime(::time(NULL)),
m_accountId(0),
@@ -359,7 +344,7 @@ private:
}
void SetStats(Player* player);
- void SetStats(std::string const& name, uint8 level, uint8 _class, uint32 zoneId, uint32 accountId, uint32 reputation);
+ void SetStats(std::string const& name, uint8 level, uint8 _class, uint8 gender, uint32 zoneId, uint32 accountId, uint32 reputation);
bool CheckStats() const;
void SetPublicNote(std::string const& publicNote);
@@ -385,6 +370,7 @@ private:
std::string GetPublicNote() const { return m_publicNote; }
std::string GetOfficerNote() const { return m_officerNote; }
uint8 GetClass() const { return m_class; }
+ uint8 GetGender() const { return _gender; }
uint8 GetLevel() const { return m_level; }
uint8 GetFlags() const { return m_flags; }
uint32 GetZoneId() const { return m_zoneId; }
@@ -422,6 +408,7 @@ private:
uint32 m_zoneId;
uint8 m_level;
uint8 m_class;
+ uint8 _gender;
uint8 m_flags;
uint64 m_logoutTime;
uint32 m_accountId;
@@ -452,7 +439,6 @@ private:
uint64 GetTimestamp() const { return m_timestamp; }
virtual void SaveToDB(SQLTransaction& trans) const = 0;
- virtual void WritePacket(WorldPacket& data, ByteBuffer& content) const = 0;
protected:
ObjectGuid::LowType m_guildId;
@@ -473,7 +459,7 @@ private:
~EventLogEntry() { }
void SaveToDB(SQLTransaction& trans) const override;
- void WritePacket(WorldPacket& data, ByteBuffer& content) const override;
+ void WritePacket(WorldPackets::Guild::GuildEventLogQueryResults& packet) const;
private:
GuildEventLogTypes m_eventType;
@@ -511,7 +497,7 @@ private:
~BankEventLogEntry() { }
void SaveToDB(SQLTransaction& trans) const override;
- void WritePacket(WorldPacket& data, ByteBuffer& content) const override;
+ void WritePacket(WorldPackets::Guild::GuildBankLogQueryResults& packet) const;
private:
GuildBankEventLogTypes m_eventType;
@@ -547,7 +533,7 @@ private:
}
void SaveToDB(SQLTransaction& trans) const;
- void WritePacket(WorldPacket& data, ByteBuffer& content) const;
+ void WritePacket(WorldPackets::Guild::GuildNews& newsPacket) const;
private:
GuildNews m_type;
@@ -572,10 +558,8 @@ private:
void LoadEvent(LogEntry* entry);
// Adds new event to collection and saves it to DB
void AddEvent(SQLTransaction& trans, LogEntry* entry);
- // Writes information about all events to packet
- void WritePacket(WorldPacket& data) const;
uint32 GetNextGUID();
- GuildLog* GetGuildLog() { return &m_log; } // Hack needed for news as WritePacket can't be used
+ GuildLog* GetGuildLog() { return &m_log; }
private:
GuildLog m_log;
@@ -587,8 +571,8 @@ private:
class RankInfo
{
public:
- RankInfo(): m_guildId(UI64LIT(0)), m_rankId(GUILD_RANK_NONE), m_rights(GR_RIGHT_EMPTY), m_bankMoneyPerDay(0) { }
- RankInfo(ObjectGuid::LowType guildId) : m_guildId(guildId), m_rankId(GUILD_RANK_NONE), m_rights(GR_RIGHT_EMPTY), m_bankMoneyPerDay(0) { }
+ RankInfo(): m_guildId(UI64LIT(0)), m_rankId(GUILD_RANK_NONE), m_rights(GR_RIGHT_NONE), m_bankMoneyPerDay(0) { }
+ RankInfo(ObjectGuid::LowType guildId) : m_guildId(guildId), m_rankId(GUILD_RANK_NONE), m_rights(GR_RIGHT_NONE), m_bankMoneyPerDay(0) { }
RankInfo(ObjectGuid::LowType guildId, uint8 rankId, std::string const& 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) { }
@@ -810,7 +794,7 @@ public:
void HandleMemberDepositMoney(WorldSession* session, uint64 amount, bool cashFlow = false);
bool HandleMemberWithdrawMoney(WorldSession* session, uint64 amount, bool repair = false);
void HandleMemberLogout(WorldSession* session);
- void HandleDisband(WorldSession* session);
+ void HandleDelete(WorldSession* session);
void HandleGuildPartyRequest(WorldSession* session);
void HandleNewsSetSticky(WorldSession* session, uint32 newsId, bool sticky);
void HandleGuildRequestChallengeUpdate(WorldSession* session);
@@ -822,14 +806,20 @@ public:
void SendGuildRankInfo(WorldSession* session) const;
void SendEventLog(WorldSession* session) const;
void SendBankLog(WorldSession* session, uint8 tabId) const;
- void SendBankList(WorldSession* session, uint8 tabId, bool withContent, bool withTabInfo) const;
- void SendGuildXP(WorldSession* session = NULL) const;
+ void SendBankList(WorldSession* session, uint8 tabId, bool fullUpdate) const;
void SendBankTabText(WorldSession* session, uint8 tabId) const;
void SendPermissions(WorldSession* session) const;
void SendMoneyInfo(WorldSession* session) const;
void SendLoginInfo(WorldSession* session);
void SendNewsUpdate(WorldSession* session);
+ // Send events
+ void SendEventBankMoneyChanged();
+ void SendEventMOTD(WorldSession* session, bool broadcast = false);
+ void SendEventNewLeader(Member* newLeader, Member* oldLeader, bool isSelfPromoted = false);
+ void SendEventPlayerLeft(Player* leaver, Player* remover = nullptr, bool isRemoved = false);
+ void SendEventPresenceChanged(WorldSession* session, bool loggedOn, bool broadcast = false);
+
// Load from DB
bool LoadFromDB(Field* fields);
void LoadGuildNewsLogFromDB(Field* fields);
@@ -880,9 +870,6 @@ public:
// Guild leveling
uint8 GetLevel() const { return _level; }
- void GiveXP(uint32 xp, Player* source);
- uint64 GetExperience() const { return _experience; }
- uint64 GetTodayExperience() const { return _todayExperience; }
void AddGuildNews(uint8 type, ObjectGuid guid, uint32 flags, uint32 value);
@@ -915,8 +902,6 @@ protected:
AchievementMgr<Guild> m_achievementMgr;
uint8 _level;
- uint64 _experience;
- uint64 _todayExperience;
private:
inline uint8 _GetRanksSize() const { return uint8(m_ranks.size()); }
@@ -926,7 +911,7 @@ private:
{
if (player)
if (Member const* member = GetMember(player->GetGUID()))
- return (_GetRankRights(member->GetRankId()) & right) != GR_RIGHT_EMPTY;
+ return (_GetRankRights(member->GetRankId()) & right) != GR_RIGHT_NONE;
return false;
}
@@ -990,7 +975,7 @@ private:
int32 _GetMemberRemainingSlots(Member const* member, uint8 tabId) const;
int32 _GetMemberRemainingMoney(Member const* member) const;
void _UpdateMemberWithdrawSlots(SQLTransaction& trans, ObjectGuid guid, uint8 tabId);
- bool _MemberHasTabRights(ObjectGuid guid, uint8 tabId, uint32 rights) const;
+ bool _MemberHasTabRights(ObjectGuid guid, uint8 tabId, int32 rights) const;
void _LogEvent(GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2 = UI64LIT(0), uint8 newRank = 0);
void _LogBankEvent(SQLTransaction& trans, GuildBankEventLogTypes eventType, uint8 tabId, ObjectGuid::LowType playerGuid, uint64 itemOrMoney, uint16 itemStackCount = 0, uint8 destTabId = 0);
@@ -1002,9 +987,6 @@ private:
void _SendBankContentUpdate(MoveItemData* pSrc, MoveItemData* pDest) const;
void _SendBankContentUpdate(uint8 tabId, SlotIds slots) const;
- void SendGuildReputationWeeklyCap(WorldSession* session, uint32 reputation) const;
void SendGuildRanksUpdate(ObjectGuid setterGuid, ObjectGuid targetGuid, uint32 rank);
-
- void _BroadcastEvent(GuildEvents guildEvent, ObjectGuid guid, const char* param1 = NULL, const char* param2 = NULL, const char* param3 = NULL) const;
};
#endif
diff --git a/src/server/game/Guilds/GuildMgr.cpp b/src/server/game/Guilds/GuildMgr.cpp
index f207cae7456..8f90b0268aa 100644
--- a/src/server/game/Guilds/GuildMgr.cpp
+++ b/src/server/game/Guilds/GuildMgr.cpp
@@ -105,13 +105,6 @@ Guild* GuildMgr::GetGuildByLeader(ObjectGuid guid) const
return NULL;
}
-uint64 GuildMgr::GetXPForGuildLevel(uint8 level) const
-{
- if (level < GuildXPperLevel.size())
- return GuildXPperLevel[level];
- return 0;
-}
-
void GuildMgr::LoadGuilds()
{
// 1. Load all guilds
@@ -119,11 +112,11 @@ void GuildMgr::LoadGuilds()
{
uint32 oldMSTime = getMSTime();
- // 0 1 2 3 4 5 6
+ // 0 1 2 3 4 5 6
QueryResult result = CharacterDatabase.Query("SELECT g.guildid, g.name, g.leaderguid, g.EmblemStyle, g.EmblemColor, g.BorderStyle, g.BorderColor, "
- // 7 8 9 10 11 12 13 14 15
- "g.BackgroundColor, g.info, g.motd, g.createdate, g.BankMoney, g.level, g.experience, g.todayExperience, COUNT(gbt.guildid) "
- "FROM guild g LEFT JOIN guild_bank_tab gbt ON g.guildid = gbt.guildid GROUP BY g.guildid ORDER BY g.guildid ASC");
+ // 7 8 9 10 11 12 13
+ "g.BackgroundColor, g.info, g.motd, g.createdate, g.BankMoney, g.level, COUNT(gbt.guildid) "
+ "FROM guild g LEFT JOIN guild_bank_tab gbt ON g.guildid = gbt.guildid GROUP BY g.guildid ORDER BY g.guildid ASC");
if (!result)
{
@@ -199,8 +192,8 @@ void GuildMgr::LoadGuilds()
// 0 1 2 3 4 5 6 7 8 9 10
QueryResult result = CharacterDatabase.Query("SELECT gm.guildid, gm.guid, rank, pnote, offnote, w.tab0, w.tab1, w.tab2, w.tab3, w.tab4, w.tab5, "
- // 11 12 13 14 15 16 17 18 19
- "w.tab6, w.tab7, w.money, c.name, c.level, c.class, c.zone, c.account, c.logout_time "
+ // 11 12 13 14 15 16 17 18 19 20
+ "w.tab6, w.tab7, w.money, c.name, c.level, c.class, c.gender, c.zone, c.account, c.logout_time "
"FROM guild_member gm "
"LEFT JOIN guild_member_withdraw w ON gm.guid = w.guid "
"LEFT JOIN characters c ON c.guid = gm.guid ORDER BY gm.guildid ASC");
@@ -404,7 +397,7 @@ void GuildMgr::LoadGuilds()
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
// SELECT guid, itemEntry, creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text, transmogrification, upgradeId, enchantIllusion, bonusListIDs,
- // 17 18 19
+ // 17 18 19
// guildid, TabId, SlotId FROM guild_bank_item gbi INNER JOIN item_instance ii ON gbi.item_guid = ii.guid
PreparedQueryResult result = CharacterDatabase.Query(CharacterDatabase.GetPreparedStatement(CHAR_SEL_GUILD_BANK_ITEMS));
@@ -465,62 +458,12 @@ void GuildMgr::LoadGuilds()
}
}
-void GuildMgr::LoadGuildXpForLevel()
-{
- uint32 oldMSTime = getMSTime();
-
- GuildXPperLevel.resize(sWorld->getIntConfig(CONFIG_GUILD_MAX_LEVEL));
- for (uint8 level = 0; level < sWorld->getIntConfig(CONFIG_GUILD_MAX_LEVEL); ++level)
- GuildXPperLevel[level] = 0;
-
- // 0 1
- QueryResult result = WorldDatabase.Query("SELECT lvl, xp_for_next_level FROM guild_xp_for_level");
-
- if (!result)
- {
- TC_LOG_ERROR("server.loading", ">> Loaded 0 xp for guild level definitions. DB table `guild_xp_for_level` is empty.");
- return;
- }
-
- uint32 count = 0;
-
- do
- {
- Field* fields = result->Fetch();
-
- uint32 level = fields[0].GetUInt8();
- uint32 requiredXP = fields[1].GetUInt32();
-
- if (level >= sWorld->getIntConfig(CONFIG_GUILD_MAX_LEVEL))
- {
- TC_LOG_INFO("misc", "Unused (> Guild.MaxLevel in worldserver.conf) level %u in `guild_xp_for_level` table, ignoring.", uint32(level));
- continue;
- }
-
- GuildXPperLevel[level] = requiredXP;
- ++count;
-
- } while (result->NextRow());
-
- // fill level gaps
- for (uint8 level = 1; level < sWorld->getIntConfig(CONFIG_GUILD_MAX_LEVEL); ++level)
- {
- if (!GuildXPperLevel[level])
- {
- TC_LOG_ERROR("sql.sql", "Level %i does not have XP for guild level data. Using data of level [%i] + 1660000.", level+1, level);
- GuildXPperLevel[level] = GuildXPperLevel[level - 1] + 1660000;
- }
- }
-
- TC_LOG_INFO("server.loading", ">> Loaded %u xp for guild level definitions in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
-}
-
void GuildMgr::LoadGuildRewards()
{
uint32 oldMSTime = getMSTime();
- // 0 1 2 3 4
- QueryResult result = WorldDatabase.Query("SELECT entry, standing, racemask, price, achievement FROM guild_rewards");
+ // 0 1 2 3
+ QueryResult result = WorldDatabase.Query("SELECT ItemID, MinGuildRep, RaceMask, Cost FROM guild_rewards");
if (!result)
{
@@ -534,28 +477,42 @@ void GuildMgr::LoadGuildRewards()
{
GuildReward reward;
Field* fields = result->Fetch();
- reward.Entry = fields[0].GetUInt32();
- reward.Standing = fields[1].GetUInt8();
- reward.Racemask = fields[2].GetInt32();
- reward.Price = fields[3].GetUInt64();
- reward.AchievementId = fields[4].GetUInt32();
+ reward.ItemID = fields[0].GetUInt32();
+ reward.MinGuildRep = fields[1].GetUInt8();
+ reward.RaceMask = fields[2].GetInt32();
+ reward.Cost = fields[3].GetUInt64();
- if (!sObjectMgr->GetItemTemplate(reward.Entry))
+ if (!sObjectMgr->GetItemTemplate(reward.ItemID))
{
- TC_LOG_ERROR("server.loading", "Guild rewards constains not existing item entry %u", reward.Entry);
+ TC_LOG_ERROR("server.loading", "Guild rewards constains not existing item entry %u", reward.ItemID);
continue;
}
- if (reward.AchievementId != 0 && (!sAchievementMgr->GetAchievement(reward.AchievementId)))
+ if (reward.MinGuildRep >= MAX_REPUTATION_RANK)
{
- TC_LOG_ERROR("server.loading", "Guild rewards constains not existing achievement entry %u", reward.AchievementId);
+ TC_LOG_ERROR("server.loading", "Guild rewards contains wrong reputation standing %u, max is %u", uint32(reward.MinGuildRep), MAX_REPUTATION_RANK - 1);
continue;
}
- if (reward.Standing >= MAX_REPUTATION_RANK)
+ PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_GUILD_REWARDS_REQ_ACHIEVEMENTS);
+ stmt->setUInt32(0, reward.ItemID);
+ PreparedQueryResult reqAchievementResult = WorldDatabase.Query(stmt);
+ if (reqAchievementResult)
{
- TC_LOG_ERROR("server.loading", "Guild rewards contains wrong reputation standing %u, max is %u", uint32(reward.Standing), MAX_REPUTATION_RANK - 1);
- continue;
+ do
+ {
+ Field* fields = reqAchievementResult->Fetch();
+
+ uint32 requiredAchievementId = fields[0].GetUInt32();
+
+ if (!sAchievementMgr->GetAchievement(requiredAchievementId))
+ {
+ TC_LOG_ERROR("server.loading", "Guild rewards constains not existing achievement entry %u", requiredAchievementId);
+ continue;
+ }
+
+ reward.AchievementsRequired.push_back(requiredAchievementId);
+ } while (reqAchievementResult->NextRow());
}
GuildRewards.push_back(reward);
@@ -567,7 +524,6 @@ void GuildMgr::LoadGuildRewards()
void GuildMgr::ResetTimes(bool week)
{
- CharacterDatabase.Execute(CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_RESET_TODAY_EXPERIENCE));
CharacterDatabase.Execute(CharacterDatabase.GetPreparedStatement(CHAR_DEL_GUILD_MEMBER_WITHDRAW));
for (GuildContainer::const_iterator itr = GuildStore.begin(); itr != GuildStore.end(); ++itr)
diff --git a/src/server/game/Guilds/GuildMgr.h b/src/server/game/Guilds/GuildMgr.h
index 4753194546c..c5f1dbf49a6 100644
--- a/src/server/game/Guilds/GuildMgr.h
+++ b/src/server/game/Guilds/GuildMgr.h
@@ -39,7 +39,6 @@ public:
Guild* GetGuildByName(std::string const& guildName) const;
std::string GetGuildNameById(ObjectGuid::LowType guildId) const;
- void LoadGuildXpForLevel();
void LoadGuildRewards();
void LoadGuilds();
@@ -53,7 +52,6 @@ public:
ObjectGuid::LowType GenerateGuildId();
void SetNextGuildId(ObjectGuid::LowType Id) { NextGuildId = Id; }
- uint64 GetXPForGuildLevel(uint8 level) const;
std::vector<GuildReward> const& GetGuildRewards() const { return GuildRewards; }
void ResetTimes(bool week);
@@ -61,7 +59,6 @@ protected:
typedef std::unordered_map<ObjectGuid::LowType, Guild*> GuildContainer;
ObjectGuid::LowType NextGuildId;
GuildContainer GuildStore;
- std::vector<uint64> GuildXPperLevel;
std::vector<GuildReward> GuildRewards;
};
diff --git a/src/server/game/Handlers/GuildHandler.cpp b/src/server/game/Handlers/GuildHandler.cpp
index 103334db568..2f5c1602a9f 100644
--- a/src/server/game/Handlers/GuildHandler.cpp
+++ b/src/server/game/Handlers/GuildHandler.cpp
@@ -48,179 +48,77 @@ void WorldSession::HandleGuildQueryOpcode(WorldPackets::Guild::QueryGuildInfo& q
TC_LOG_DEBUG("guild", "SMSG_GUILD_QUERY_RESPONSE [%s]", GetPlayerInfo().c_str());
}
-void WorldSession::HandleGuildInviteOpcode(WorldPacket& recvPacket)
+void WorldSession::HandleGuildInviteByName(WorldPackets::Guild::GuildInviteByName& packet)
{
- uint32 nameLength = recvPacket.ReadBits(7);
- std::string invitedName = recvPacket.ReadString(nameLength);
-
- TC_LOG_DEBUG("guild", "CMSG_GUILD_INVITE [%s]: Invited: %s", GetPlayerInfo().c_str(), invitedName.c_str());
- if (normalizePlayerName(invitedName))
+ TC_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::HandleGuildOfficerRemoveMemberOpcode(WorldPacket& recvPacket)
+void WorldSession::HandleGuildOfficerRemoveMember(WorldPackets::Guild::GuildOfficerRemoveMember& packet)
{
- ObjectGuid playerGuid;
-
- playerGuid[6] = recvPacket.ReadBit();
- playerGuid[5] = recvPacket.ReadBit();
- playerGuid[4] = recvPacket.ReadBit();
- playerGuid[0] = recvPacket.ReadBit();
- playerGuid[1] = recvPacket.ReadBit();
- playerGuid[3] = recvPacket.ReadBit();
- playerGuid[7] = recvPacket.ReadBit();
- playerGuid[2] = recvPacket.ReadBit();
-
- recvPacket.ReadByteSeq(playerGuid[2]);
- recvPacket.ReadByteSeq(playerGuid[6]);
- recvPacket.ReadByteSeq(playerGuid[5]);
- recvPacket.ReadByteSeq(playerGuid[7]);
- recvPacket.ReadByteSeq(playerGuid[1]);
- recvPacket.ReadByteSeq(playerGuid[4]);
- recvPacket.ReadByteSeq(playerGuid[3]);
- recvPacket.ReadByteSeq(playerGuid[0]);
-
- TC_LOG_DEBUG("guild", "CMSG_GUILD_OFFICER_REMOVE_MEMBER [%s]: Target: %s", GetPlayerInfo().c_str(), playerGuid.ToString().c_str());
+ TC_LOG_DEBUG("guild", "CMSG_GUILD_REMOVE [%s]: Target: %s", GetPlayerInfo().c_str(), packet.Removee.ToString().c_str());
if (Guild* guild = GetPlayer()->GetGuild())
- guild->HandleRemoveMember(this, playerGuid);
+ guild->HandleRemoveMember(this, packet.Removee);
}
-void WorldSession::HandleGuildAcceptOpcode(WorldPacket& /*recvPacket*/)
+void WorldSession::HandleGuildAcceptInvite(WorldPackets::Guild::AcceptGuildInvite& /*invite*/)
{
- TC_LOG_DEBUG("guild", "CMSG_GUILD_ACCEPT [%s]", GetPlayerInfo().c_str());
+ TC_LOG_DEBUG("guild", "CMSG_ACCEPT_GUILD_INVITE [%s]", GetPlayerInfo().c_str());
if (!GetPlayer()->GetGuildId())
if (Guild* guild = sGuildMgr->GetGuildById(GetPlayer()->GetGuildIdInvited()))
guild->HandleAcceptMember(this);
}
-void WorldSession::HandleGuildDeclineOpcode(WorldPacket& /*recvPacket*/)
+void WorldSession::HandleGuildDeclineInvitation(WorldPackets::Guild::GuildDeclineInvitation& /*decline*/)
{
- TC_LOG_DEBUG("guild", "CMSG_GUILD_DECLINE [%s]", GetPlayerInfo().c_str());
+ TC_LOG_DEBUG("guild", "CMSG_GUILD_DECLINE_INVITATION [%s]", GetPlayerInfo().c_str());
GetPlayer()->SetGuildIdInvited(UI64LIT(0));
GetPlayer()->SetInGuild(UI64LIT(0));
}
-void WorldSession::HandleGuildRosterOpcode(WorldPacket& recvPacket)
+void WorldSession::HandleGuildGetRoster(WorldPackets::Guild::GuildGetRoster& /*packet*/)
{
TC_LOG_DEBUG("guild", "CMSG_GUILD_ROSTER [%s]", GetPlayerInfo().c_str());
- recvPacket.rfinish();
if (Guild* guild = GetPlayer()->GetGuild())
guild->HandleRoster(this);
else
- Guild::SendCommandResult(this, GUILD_COMMAND_ROSTER, ERR_GUILD_PLAYER_NOT_IN_GUILD);
+ Guild::SendCommandResult(this, GUILD_COMMAND_GET_ROSTER, ERR_GUILD_PLAYER_NOT_IN_GUILD);
}
-void WorldSession::HandleGuildPromoteOpcode(WorldPacket& recvPacket)
+void WorldSession::HandleGuildPromoteMember(WorldPackets::Guild::GuildPromoteMember& promote)
{
- ObjectGuid targetGuid;
-
- targetGuid[7] = recvPacket.ReadBit();
- targetGuid[2] = recvPacket.ReadBit();
- targetGuid[5] = recvPacket.ReadBit();
- targetGuid[6] = recvPacket.ReadBit();
- targetGuid[1] = recvPacket.ReadBit();
- targetGuid[0] = recvPacket.ReadBit();
- targetGuid[3] = recvPacket.ReadBit();
- targetGuid[4] = recvPacket.ReadBit();
-
- recvPacket.ReadByteSeq(targetGuid[0]);
- recvPacket.ReadByteSeq(targetGuid[5]);
- recvPacket.ReadByteSeq(targetGuid[2]);
- recvPacket.ReadByteSeq(targetGuid[3]);
- recvPacket.ReadByteSeq(targetGuid[6]);
- recvPacket.ReadByteSeq(targetGuid[4]);
- recvPacket.ReadByteSeq(targetGuid[1]);
- recvPacket.ReadByteSeq(targetGuid[7]);
-
- TC_LOG_DEBUG("guild", "CMSG_GUILD_PROMOTE [%s]: Target: %s", GetPlayerInfo().c_str(), targetGuid.ToString().c_str());
+ TC_LOG_DEBUG("guild", "CMSG_GUILD_PROMOTE [%s]: Target: %s", GetPlayerInfo().c_str(), promote.Promotee.ToString().c_str());
if (Guild* guild = GetPlayer()->GetGuild())
- guild->HandleUpdateMemberRank(this, targetGuid, false);
+ guild->HandleUpdateMemberRank(this, promote.Promotee, false);
}
-void WorldSession::HandleGuildDemoteOpcode(WorldPacket& recvPacket)
+void WorldSession::HandleGuildDemoteMember(WorldPackets::Guild::GuildDemoteMember& demote)
{
- ObjectGuid targetGuid;
-
- targetGuid[7] = recvPacket.ReadBit();
- targetGuid[1] = recvPacket.ReadBit();
- targetGuid[5] = recvPacket.ReadBit();
- targetGuid[6] = recvPacket.ReadBit();
- targetGuid[2] = recvPacket.ReadBit();
- targetGuid[3] = recvPacket.ReadBit();
- targetGuid[0] = recvPacket.ReadBit();
- targetGuid[4] = recvPacket.ReadBit();
-
- recvPacket.ReadByteSeq(targetGuid[1]);
- recvPacket.ReadByteSeq(targetGuid[2]);
- recvPacket.ReadByteSeq(targetGuid[7]);
- recvPacket.ReadByteSeq(targetGuid[5]);
- recvPacket.ReadByteSeq(targetGuid[6]);
- recvPacket.ReadByteSeq(targetGuid[0]);
- recvPacket.ReadByteSeq(targetGuid[4]);
- recvPacket.ReadByteSeq(targetGuid[3]);
-
- TC_LOG_DEBUG("guild", "CMSG_GUILD_DEMOTE [%s]: Target: %s", GetPlayerInfo().c_str(), targetGuid.ToString().c_str());
+ TC_LOG_DEBUG("guild", "CMSG_GUILD_DEMOTE [%s]: Target: %s", GetPlayerInfo().c_str(), demote.Demotee.ToString().c_str());
if (Guild* guild = GetPlayer()->GetGuild())
- guild->HandleUpdateMemberRank(this, targetGuid, true);
-}
-
-void WorldSession::HandleGuildAssignRankOpcode(WorldPacket& recvPacket)
-{
- ObjectGuid targetGuid;
- ObjectGuid setterGuid;
-
- uint32 rankId;
- recvPacket >> rankId;
-
- targetGuid[1] = recvPacket.ReadBit();
- targetGuid[7] = recvPacket.ReadBit();
- setterGuid[4] = recvPacket.ReadBit();
- setterGuid[2] = recvPacket.ReadBit();
- targetGuid[4] = recvPacket.ReadBit();
- targetGuid[5] = recvPacket.ReadBit();
- targetGuid[6] = recvPacket.ReadBit();
- setterGuid[1] = recvPacket.ReadBit();
- setterGuid[7] = recvPacket.ReadBit();
- targetGuid[2] = recvPacket.ReadBit();
- targetGuid[3] = recvPacket.ReadBit();
- targetGuid[0] = recvPacket.ReadBit();
- setterGuid[6] = recvPacket.ReadBit();
- setterGuid[3] = recvPacket.ReadBit();
- setterGuid[0] = recvPacket.ReadBit();
- setterGuid[5] = recvPacket.ReadBit();
-
- recvPacket.ReadByteSeq(targetGuid[0]);
- recvPacket.ReadByteSeq(setterGuid[1]);
- recvPacket.ReadByteSeq(setterGuid[3]);
- recvPacket.ReadByteSeq(setterGuid[5]);
- recvPacket.ReadByteSeq(targetGuid[7]);
- recvPacket.ReadByteSeq(targetGuid[3]);
- recvPacket.ReadByteSeq(setterGuid[0]);
- recvPacket.ReadByteSeq(targetGuid[1]);
- recvPacket.ReadByteSeq(setterGuid[6]);
- recvPacket.ReadByteSeq(targetGuid[2]);
- recvPacket.ReadByteSeq(targetGuid[5]);
- recvPacket.ReadByteSeq(targetGuid[4]);
- recvPacket.ReadByteSeq(setterGuid[2]);
- recvPacket.ReadByteSeq(setterGuid[4]);
- recvPacket.ReadByteSeq(targetGuid[6]);
- recvPacket.ReadByteSeq(setterGuid[7]);
+ guild->HandleUpdateMemberRank(this, demote.Demotee, true);
+}
+
+void WorldSession::HandleGuildAssignRank(WorldPackets::Guild::GuildAssignMemberRank& packet)
+{
+ ObjectGuid setterGuid = GetPlayer()->GetGUID();
TC_LOG_DEBUG("guild", "CMSG_GUILD_ASSIGN_MEMBER_RANK [%s]: Target: %s Rank: %u, Issuer: %s",
- GetPlayerInfo().c_str(), targetGuid.ToString().c_str(), rankId, setterGuid.ToString().c_str());
+ GetPlayerInfo().c_str(), packet.Member.ToString().c_str(), packet.RankOrder, setterGuid.ToString().c_str());
if (Guild* guild = GetPlayer()->GetGuild())
- guild->HandleSetMemberRank(this, targetGuid, setterGuid, rankId);
+ guild->HandleSetMemberRank(this, packet.Member, setterGuid, packet.RankOrder);
}
-void WorldSession::HandleGuildLeaveOpcode(WorldPacket& /*recvPacket*/)
+void WorldSession::HandleGuildLeave(WorldPackets::Guild::GuildLeave& /*leave*/)
{
TC_LOG_DEBUG("guild", "CMSG_GUILD_LEAVE [%s]", GetPlayerInfo().c_str());
@@ -228,136 +126,76 @@ void WorldSession::HandleGuildLeaveOpcode(WorldPacket& /*recvPacket*/)
guild->HandleLeaveMember(this);
}
-void WorldSession::HandleGuildDisbandOpcode(WorldPacket& /*recvPacket*/)
+void WorldSession::HandleGuildDelete(WorldPackets::Guild::GuildDelete& /*packet*/)
{
- TC_LOG_DEBUG("guild", "CMSG_GUILD_DISBAND [%s]", GetPlayerInfo().c_str());
+ TC_LOG_DEBUG("guild", "CMSG_GUILD_DELETE [%s]", GetPlayerInfo().c_str());
if (Guild* guild = GetPlayer()->GetGuild())
- guild->HandleDisband(this);
+ guild->HandleDelete(this);
}
-void WorldSession::HandleGuildMOTDOpcode(WorldPacket& recvPacket)
+void WorldSession::HandleGuildUpdateMotdText(WorldPackets::Guild::GuildUpdateMotdText& packet)
{
- uint32 motdLength = recvPacket.ReadBits(11);
- std::string motd = recvPacket.ReadString(motdLength);
- TC_LOG_DEBUG("guild", "CMSG_GUILD_MOTD [%s]: MOTD: %s", GetPlayerInfo().c_str(), motd.c_str());
+ TC_LOG_DEBUG("guild", "CMSG_GUILD_UPDATE_MOTD_TEXT [%s]: MOTD: %s", GetPlayerInfo().c_str(), packet.MotdText.c_str());
if (Guild* guild = GetPlayer()->GetGuild())
- guild->HandleSetMOTD(this, motd);
-}
-
-void WorldSession::HandleGuildSetNoteOpcode(WorldPacket& recvPacket)
-{
- ObjectGuid playerGuid;
-
- playerGuid[1] = recvPacket.ReadBit();
- playerGuid[4] = recvPacket.ReadBit();
- playerGuid[5] = recvPacket.ReadBit();
- playerGuid[3] = recvPacket.ReadBit();
- playerGuid[0] = recvPacket.ReadBit();
- playerGuid[7] = recvPacket.ReadBit();
- bool ispublic = recvPacket.ReadBit(); // 0 == Officer, 1 == Public
- playerGuid[6] = recvPacket.ReadBit();
- uint32 noteLength = recvPacket.ReadBits(8);
- playerGuid[2] = recvPacket.ReadBit();
-
- recvPacket.ReadByteSeq(playerGuid[4]);
- recvPacket.ReadByteSeq(playerGuid[5]);
- recvPacket.ReadByteSeq(playerGuid[0]);
- recvPacket.ReadByteSeq(playerGuid[3]);
- recvPacket.ReadByteSeq(playerGuid[1]);
- recvPacket.ReadByteSeq(playerGuid[6]);
- recvPacket.ReadByteSeq(playerGuid[7]);
- std::string note = recvPacket.ReadString(noteLength);
- recvPacket.ReadByteSeq(playerGuid[2]);
+ guild->HandleSetMOTD(this, packet.MotdText);
+}
+void WorldSession::HandleGuildSetMemberNote(WorldPackets::Guild::GuildSetMemberNote& packet)
+{
TC_LOG_DEBUG("guild", "CMSG_GUILD_SET_NOTE [%s]: Target: %s, Note: %s, Public: %u",
- GetPlayerInfo().c_str(), playerGuid.ToString().c_str(), note.c_str(), ispublic);
+ GetPlayerInfo().c_str(), packet.NoteeGUID.ToString().c_str(), packet.Note.c_str(), packet.IsPublic);
if (Guild* guild = GetPlayer()->GetGuild())
- guild->HandleSetMemberNote(this, note, playerGuid, ispublic);
+ guild->HandleSetMemberNote(this, packet.Note, packet.NoteeGUID, packet.IsPublic);
}
-void WorldSession::HandleGuildGetRanksOpcode(WorldPacket& recvPacket)
+void WorldSession::HandleGuildGetRanks(WorldPackets::Guild::GuildGetRanks& packet)
{
- ObjectGuid guildGuid;
-
- guildGuid[2] = recvPacket.ReadBit();
- guildGuid[3] = recvPacket.ReadBit();
- guildGuid[0] = recvPacket.ReadBit();
- guildGuid[6] = recvPacket.ReadBit();
- guildGuid[4] = recvPacket.ReadBit();
- guildGuid[7] = recvPacket.ReadBit();
- guildGuid[5] = recvPacket.ReadBit();
- guildGuid[1] = recvPacket.ReadBit();
-
- recvPacket.ReadByteSeq(guildGuid[3]);
- recvPacket.ReadByteSeq(guildGuid[4]);
- recvPacket.ReadByteSeq(guildGuid[5]);
- recvPacket.ReadByteSeq(guildGuid[7]);
- recvPacket.ReadByteSeq(guildGuid[1]);
- recvPacket.ReadByteSeq(guildGuid[0]);
- recvPacket.ReadByteSeq(guildGuid[6]);
- recvPacket.ReadByteSeq(guildGuid[2]);
-
TC_LOG_DEBUG("guild", "CMSG_GUILD_GET_RANKS [%s]: Guild: %s",
- GetPlayerInfo().c_str(), guildGuid.ToString().c_str());
+ GetPlayerInfo().c_str(), packet.GuildGUID.ToString().c_str());
- if (Guild* guild = sGuildMgr->GetGuildByGuid(guildGuid))
+ if (Guild* guild = sGuildMgr->GetGuildByGuid(packet.GuildGUID))
if (guild->IsMember(_player->GetGUID()))
guild->SendGuildRankInfo(this);
}
-void WorldSession::HandleGuildAddRankOpcode(WorldPacket& recvPacket)
+void WorldSession::HandleGuildAddRank(WorldPackets::Guild::GuildAddRank& packet)
{
- uint32 rankId;
- recvPacket >> rankId;
-
- uint32 length = recvPacket.ReadBits(7);
- std::string rankName = recvPacket.ReadString(length);
-
- TC_LOG_DEBUG("guild", "CMSG_GUILD_ADD_RANK [%s]: Rank: %s", GetPlayerInfo().c_str(), rankName.c_str());
+ TC_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::HandleGuildDeleteRankOpcode(WorldPacket& recvPacket)
+void WorldSession::HandleGuildDeleteRank(WorldPackets::Guild::GuildDeleteRank& packet)
{
- uint32 rankId;
- recvPacket >> rankId;
-
- TC_LOG_DEBUG("guild", "CMSG_GUILD_DELETE_RANK [%s]: Rank: %u", GetPlayerInfo().c_str(), rankId);
+ TC_LOG_DEBUG("guild", "CMSG_GUILD_DELETE_RANK [%s]: Rank: %u", GetPlayerInfo().c_str(), packet.RankOrder);
if (Guild* guild = GetPlayer()->GetGuild())
- guild->HandleRemoveRank(this, rankId);
+ guild->HandleRemoveRank(this, packet.RankOrder);
}
-void WorldSession::HandleGuildChangeInfoTextOpcode(WorldPacket& recvPacket)
+void WorldSession::HandleGuildUpdateInfoText(WorldPackets::Guild::GuildUpdateInfoText& packet)
{
- uint32 length = recvPacket.ReadBits(12);
- std::string info = recvPacket.ReadString(length);
-
- TC_LOG_DEBUG("guild", "CMSG_GUILD_INFO_TEXT [%s]: %s", GetPlayerInfo().c_str(), info.c_str());
+ TC_LOG_DEBUG("guild", "CMSG_GUILD_UPDATE_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::HandleSaveGuildEmblem(WorldPackets::Guild::SaveGuildEmblem& packet)
{
- ObjectGuid vendorGuid;
- recvPacket >> vendorGuid;
-
EmblemInfo emblemInfo;
- emblemInfo.ReadPacket(recvPacket);
+ emblemInfo.ReadPacket(packet);
TC_LOG_DEBUG("guild", "CMSG_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))
@@ -372,7 +210,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::HandleGuildEventLogQuery(WorldPackets::Guild::GuildEventLogQuery& /*packet*/)
{
TC_LOG_DEBUG("guild", "MSG_GUILD_EVENT_LOG_QUERY [%s]", GetPlayerInfo().c_str());
@@ -380,7 +218,7 @@ void WorldSession::HandleGuildEventLogQueryOpcode(WorldPacket& /* recvPacket */)
guild->SendEventLog(this);
}
-void WorldSession::HandleGuildBankMoneyWithdrawn(WorldPacket& /* recvPacket */)
+void WorldSession::HandleGuildBankMoneyWithdrawn(WorldPackets::Guild::GuildBankRemainingWithdrawMoneyQuery& /*packet*/)
{
TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_MONEY_WITHDRAWN [%s]", GetPlayerInfo().c_str());
@@ -388,25 +226,21 @@ void WorldSession::HandleGuildBankMoneyWithdrawn(WorldPacket& /* recvPacket */)
guild->SendMoneyInfo(this);
}
-void WorldSession::HandleGuildPermissions(WorldPacket& /* recvPacket */)
+void WorldSession::HandleGuildPermissionsQuery(WorldPackets::Guild::GuildPermissionsQuery& /* packet */)
{
- TC_LOG_DEBUG("guild", "CMSG_GUILD_PERMISSIONS [%s]", GetPlayerInfo().c_str());
+ TC_LOG_DEBUG("guild", "CMSG_GUILD_PERMISSIONS_QUERY [%s]", GetPlayerInfo().c_str());
if (Guild* guild = GetPlayer()->GetGuild())
guild->SendPermissions(this);
}
// Called when clicking on Guild bank gameobject
-void WorldSession::HandleGuildBankerActivate(WorldPacket& recvPacket)
+void WorldSession::HandleGuildBankActivate(WorldPackets::Guild::GuildBankActivate& packet)
{
- ObjectGuid guid;
- bool sendAllSlots;
- recvPacket >> guid >> sendAllSlots;
-
- TC_LOG_DEBUG("guild", "CMSG_GUILD_BANKER_ACTIVATE [%s]: [%s] AllSlots: %u"
- , GetPlayerInfo().c_str(), guid.ToString().c_str(), sendAllSlots);
+ TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_ACTIVATE [%s]: [%s] AllSlots: %u"
+ , GetPlayerInfo().c_str(), packet.Banker.ToString().c_str(), packet.FullUpdate);
- GameObject const* const go = GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_GUILD_BANK);
+ GameObject const* const go = GetPlayer()->GetGameObjectIfCanInteractWith(packet.Banker, GAMEOBJECT_TYPE_GUILD_BANK);
if (!go)
return;
@@ -417,423 +251,189 @@ void WorldSession::HandleGuildBankerActivate(WorldPacket& recvPacket)
return;
}
- guild->SendBankList(this, 0, true, true);
+ guild->SendBankList(this, 0, packet.FullUpdate);
}
// Called when opening guild bank tab only (first one)
-void WorldSession::HandleGuildBankQueryTab(WorldPacket& recvPacket)
+void WorldSession::HandleGuildBankQueryTab(WorldPackets::Guild::GuildBankQueryTab& packet)
{
- ObjectGuid guid;
- uint8 tabId;
- bool full;
-
- recvPacket >> guid >> tabId >> full;
-
TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_QUERY_TAB [%s]: %s, TabId: %u, ShowTabs: %u"
- , GetPlayerInfo().c_str(), guid.ToString().c_str(), tabId, full);
+ , GetPlayerInfo().c_str(), packet.Banker.ToString().c_str(), packet.Tab, packet.FullUpdate);
- if (GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_GUILD_BANK))
+ if (GetPlayer()->GetGameObjectIfCanInteractWith(packet.Banker, GAMEOBJECT_TYPE_GUILD_BANK))
if (Guild* guild = GetPlayer()->GetGuild())
- guild->SendBankList(this, tabId, true, false);
+ guild->SendBankList(this, packet.Tab, packet.FullUpdate);
}
-void WorldSession::HandleGuildBankDepositMoney(WorldPacket& recvPacket)
+void WorldSession::HandleGuildBankDepositMoney(WorldPackets::Guild::GuildBankDepositMoney& packet)
{
- ObjectGuid guid;
- uint64 money;
- recvPacket >> guid >> money;
-
TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_DEPOSIT_MONEY [%s]: [%s], money: " UI64FMTD,
- GetPlayerInfo().c_str(), guid.ToString().c_str(), money);
+ GetPlayerInfo().c_str(), packet.Banker.ToString().c_str(), packet.Money);
- if (GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_GUILD_BANK))
- if (money && GetPlayer()->HasEnoughMoney(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& recvPacket)
+void WorldSession::HandleGuildBankWithdrawMoney(WorldPackets::Guild::GuildBankWithdrawMoney& packet)
{
- ObjectGuid guid;
- uint64 money;
- recvPacket >> guid >> money;
-
TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_WITHDRAW_MONEY [%s]: [%s], money: " UI64FMTD,
- GetPlayerInfo().c_str(), guid.ToString().c_str(), money);
+ GetPlayerInfo().c_str(), packet.Banker.ToString().c_str(), packet.Money);
- if (money && GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_GUILD_BANK))
+ 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& recvPacket)
+void WorldSession::HandleGuildBankSwapItems(WorldPackets::Guild::GuildBankSwapItems& packet)
{
TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_SWAP_ITEMS [%s]", GetPlayerInfo().c_str());
- ObjectGuid GoGuid;
- recvPacket >> GoGuid;
-
- if (!GetPlayer()->GetGameObjectIfCanInteractWith(GoGuid, GAMEOBJECT_TYPE_GUILD_BANK))
- {
- recvPacket.rfinish(); // Prevent additional spam at rejected packet
+ if (!GetPlayer()->GetGameObjectIfCanInteractWith(packet.Banker, GAMEOBJECT_TYPE_GUILD_BANK))
return;
- }
Guild* guild = GetPlayer()->GetGuild();
if (!guild)
- {
- recvPacket.rfinish(); // Prevent additional spam at rejected packet
return;
- }
- uint8 bankToBank;
- recvPacket >> bankToBank;
-
- uint8 tabId;
- uint8 slotId;
- uint32 itemEntry;
- uint32 splitedAmount = 0;
-
- if (bankToBank)
+ if (packet.BankOnly)
{
- uint8 destTabId;
- recvPacket >> destTabId;
-
- uint8 destSlotId;
- recvPacket >> destSlotId;
-
- uint32 destItemEntry;
- recvPacket >> destItemEntry;
-
- recvPacket >> tabId;
- recvPacket >> slotId;
- recvPacket >> itemEntry;
- recvPacket.read_skip<uint8>(); // Always 0
- recvPacket >> splitedAmount;
-
- guild->SwapItems(GetPlayer(), tabId, slotId, destTabId, destSlotId, splitedAmount);
+ guild->SwapItems(GetPlayer(), packet.BankTab1, packet.BankSlot1, packet.BankTab, packet.BankSlot, packet.StackCount);
}
else
{
- uint8 playerBag = NULL_BAG;
- uint8 playerSlotId = NULL_SLOT;
- uint8 toChar = 1;
-
- recvPacket >> tabId;
- recvPacket >> slotId;
- recvPacket >> itemEntry;
-
- uint8 autoStore;
- recvPacket >> autoStore;
- if (autoStore)
- {
- recvPacket.read_skip<uint32>(); // autoStoreCount
- recvPacket.read_skip<uint8>(); // ToChar (?), always and expected to be 1 (autostore only triggered in Bank -> Char)
- recvPacket.read_skip<uint32>(); // Always 0
- }
- else
- {
- recvPacket >> playerBag;
- recvPacket >> playerSlotId;
- recvPacket >> toChar;
- recvPacket >> splitedAmount;
- }
-
// Player <-> Bank
// Allow to work with inventory only
- if (!Player::IsInventoryPos(playerBag, playerSlotId) && !(playerBag == NULL_BAG && playerSlotId == NULL_SLOT))
+ if (!Player::IsInventoryPos(packet.ContainerSlot, packet.ContainerItemSlot) && !packet.AutoStore)
GetPlayer()->SendEquipError(EQUIP_ERR_INTERNAL_BAG_ERROR, NULL);
else
- guild->SwapItemsWithInventory(GetPlayer(), toChar != 0, tabId, slotId, playerBag, playerSlotId, splitedAmount);
+ guild->SwapItemsWithInventory(GetPlayer(), packet.ToSlot != 0, packet.BankTab, packet.BankSlot, packet.ContainerSlot, packet.ContainerItemSlot, packet.StackCount);
}
}
-void WorldSession::HandleGuildBankBuyTab(WorldPacket& recvPacket)
+void WorldSession::HandleGuildBankBuyTab(WorldPackets::Guild::GuildBankBuyTab& packet)
{
- ObjectGuid guid;
- recvPacket >> guid;
+ TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_BUY_TAB [%s]: [%s[, TabId: %u", GetPlayerInfo().c_str(), packet.Banker.ToString().c_str(), packet.BankTab);
- uint8 tabId;
- recvPacket >> tabId;
-
- TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_BUY_TAB [%s]: [%s[, TabId: %u", GetPlayerInfo().c_str(), guid.ToString().c_str(), tabId);
-
- if (!guid || GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_GUILD_BANK))
+ if (!packet.Banker || 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& recvPacket)
+void WorldSession::HandleGuildBankUpdateTab(WorldPackets::Guild::GuildBankUpdateTab& packet)
{
- ObjectGuid guid;
- uint8 tabId;
- std::string name, icon;
-
- recvPacket >> guid >> tabId >> name >> icon;
-
TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_UPDATE_TAB [%s]: [%s], TabId: %u, Name: %s, Icon: %s"
- , GetPlayerInfo().c_str(), guid.ToString().c_str(), tabId, name.c_str(), icon.c_str());
- if (!name.empty() && !icon.empty())
- if (GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_GUILD_BANK))
+ , GetPlayerInfo().c_str(), packet.Banker.ToString().c_str(), packet.BankTab, packet.Name.c_str(), packet.Icon.c_str());
+
+ 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& recvPacket)
+void WorldSession::HandleGuildBankLogQuery(WorldPackets::Guild::GuildBankLogQuery& packet)
{
- uint32 tabId;
- recvPacket >> tabId;
-
- TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_LOG_QUERY [%s]: TabId: %u", GetPlayerInfo().c_str(), tabId);
+ TC_LOG_DEBUG("guild", "CMSG_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 &recvPacket)
+void WorldSession::HandleGuildBankTextQuery(WorldPackets::Guild::GuildBankTextQuery& packet)
{
- uint8 tabId;
- recvPacket >> tabId;
-
- TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_QUERY_TEXT [%s]: TabId: %u", GetPlayerInfo().c_str(), tabId);
+ TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_QUERY_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& recvPacket)
+void WorldSession::HandleGuildBankSetTabText(WorldPackets::Guild::GuildBankSetTabText& packet)
{
- uint32 tabId;
- recvPacket >> tabId;
-
- uint32 textLen = recvPacket.ReadBits(14);
- std::string text = recvPacket.ReadString(textLen);
-
- TC_LOG_DEBUG("guild", "CMSG_SET_GUILD_BANK_TEXT [%s]: TabId: %u, Text: %s", GetPlayerInfo().c_str(), tabId, text.c_str());
+ TC_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);
}
-void WorldSession::HandleGuildQueryXPOpcode(WorldPacket& recvPacket)
-{
- TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUERY_GUILD_XP");
-
- ObjectGuid guildGuid;
-
- guildGuid[2] = recvPacket.ReadBit();
- guildGuid[1] = recvPacket.ReadBit();
- guildGuid[0] = recvPacket.ReadBit();
- guildGuid[5] = recvPacket.ReadBit();
- guildGuid[4] = recvPacket.ReadBit();
- guildGuid[7] = recvPacket.ReadBit();
- guildGuid[6] = recvPacket.ReadBit();
- guildGuid[3] = recvPacket.ReadBit();
-
- recvPacket.ReadByteSeq(guildGuid[7]);
- recvPacket.ReadByteSeq(guildGuid[2]);
- recvPacket.ReadByteSeq(guildGuid[3]);
- recvPacket.ReadByteSeq(guildGuid[6]);
- recvPacket.ReadByteSeq(guildGuid[1]);
- recvPacket.ReadByteSeq(guildGuid[5]);
- recvPacket.ReadByteSeq(guildGuid[0]);
- recvPacket.ReadByteSeq(guildGuid[4]);
-
- TC_LOG_DEBUG("guild", "CMSG_QUERY_GUILD_XP [%s]: Guild: %s", GetPlayerInfo().c_str(), guildGuid.ToString().c_str());
-
- if (Guild* guild = sGuildMgr->GetGuildByGuid(guildGuid))
- if (guild->IsMember(_player->GetGUID()))
- guild->SendGuildXP(this);
-}
-
-void WorldSession::HandleGuildSetRankPermissionsOpcode(WorldPacket& recvPacket)
+void WorldSession::HandleGuildSetRankPermissions(WorldPackets::Guild::GuildSetRankPermissions& packet)
{
Guild* guild = GetPlayer()->GetGuild();
if (!guild)
- {
- recvPacket.rfinish();
return;
- }
-
- uint32 oldRankId;
- uint32 newRankId;
- uint32 oldRights;
- uint32 newRights;
- uint32 moneyPerDay;
-
- recvPacket >> oldRankId;
- recvPacket >> oldRights;
- recvPacket >> newRights;
GuildBankRightsAndSlotsVec rightsAndSlots(GUILD_BANK_MAX_TABS);
for (uint8 tabId = 0; tabId < GUILD_BANK_MAX_TABS; ++tabId)
- {
- uint32 bankRights;
- uint32 slots;
-
- recvPacket >> bankRights;
- recvPacket >> slots;
+ rightsAndSlots[tabId] = GuildBankRightsAndSlots(tabId, uint8(packet.TabFlags[tabId]), uint32(packet.TabWithdrawItemLimit[tabId]));
- rightsAndSlots[tabId] = GuildBankRightsAndSlots(tabId, uint8(bankRights), slots);
- }
+ TC_LOG_DEBUG("guild", "CMSG_GUILD_SET_RANK_PERMISSIONS [%s]: Rank: %s (%u)", GetPlayerInfo().c_str(), packet.RankName.c_str(), packet.RankOrder);
- recvPacket >> moneyPerDay;
- recvPacket >> newRankId;
- uint32 nameLength = recvPacket.ReadBits(7);
- std::string rankName = recvPacket.ReadString(nameLength);
-
- TC_LOG_DEBUG("guild", "CMSG_GUILD_SET_RANK_PERMISSIONS [%s]: Rank: %s (%u)", GetPlayerInfo().c_str(), rankName.c_str(), newRankId);
-
- guild->HandleSetRankInfo(this, newRankId, rankName, newRights, moneyPerDay, rightsAndSlots);
+ guild->HandleSetRankInfo(this, packet.RankOrder, packet.RankName, packet.Flags, packet.WithdrawGoldLimit, rightsAndSlots);
}
-void WorldSession::HandleGuildRequestPartyState(WorldPacket& recvPacket)
+void WorldSession::HandleGuildRequestPartyState(WorldPackets::Guild::RequestGuildPartyState& packet)
{
TC_LOG_DEBUG("network", "WORLD: Received CMSG_GUILD_REQUEST_PARTY_STATE");
- ObjectGuid guildGuid;
-
- guildGuid[0] = recvPacket.ReadBit();
- guildGuid[6] = recvPacket.ReadBit();
- guildGuid[7] = recvPacket.ReadBit();
- guildGuid[3] = recvPacket.ReadBit();
- guildGuid[5] = recvPacket.ReadBit();
- guildGuid[1] = recvPacket.ReadBit();
- guildGuid[2] = recvPacket.ReadBit();
- guildGuid[4] = recvPacket.ReadBit();
-
- recvPacket.ReadByteSeq(guildGuid[6]);
- recvPacket.ReadByteSeq(guildGuid[3]);
- recvPacket.ReadByteSeq(guildGuid[2]);
- recvPacket.ReadByteSeq(guildGuid[1]);
- recvPacket.ReadByteSeq(guildGuid[5]);
- recvPacket.ReadByteSeq(guildGuid[0]);
- recvPacket.ReadByteSeq(guildGuid[7]);
- recvPacket.ReadByteSeq(guildGuid[4]);
-
- if (Guild* guild = sGuildMgr->GetGuildByGuid(guildGuid))
+ if (Guild* guild = sGuildMgr->GetGuildByGuid(packet.GuildGUID))
guild->HandleGuildPartyRequest(this);
}
-void WorldSession::HandleGuildRequestChallengeUpdate(WorldPacket& /*recvPacket*/)
+void WorldSession::HandleGuildChallengeUpdateRequest(WorldPackets::Guild::GuildChallengeUpdateRequest& /*packet*/)
{
if (Guild* guild = _player->GetGuild())
guild->HandleGuildRequestChallengeUpdate(this);
}
-void WorldSession::HandleGuildRequestMaxDailyXP(WorldPacket& recvPacket)
-{
- ObjectGuid guid;
- guid[0] = recvPacket.ReadBit();
- guid[3] = recvPacket.ReadBit();
- guid[5] = recvPacket.ReadBit();
- guid[1] = recvPacket.ReadBit();
- guid[4] = recvPacket.ReadBit();
- guid[6] = recvPacket.ReadBit();
- guid[7] = recvPacket.ReadBit();
- guid[2] = recvPacket.ReadBit();
-
- recvPacket.ReadByteSeq(guid[7]);
- recvPacket.ReadByteSeq(guid[4]);
- recvPacket.ReadByteSeq(guid[3]);
- recvPacket.ReadByteSeq(guid[5]);
- recvPacket.ReadByteSeq(guid[1]);
- recvPacket.ReadByteSeq(guid[2]);
- recvPacket.ReadByteSeq(guid[6]);
- recvPacket.ReadByteSeq(guid[0]);
-
- if (Guild* guild = sGuildMgr->GetGuildByGuid(guid))
- {
- if (guild->IsMember(_player->GetGUID()))
- {
- WorldPacket data(SMSG_GUILD_MAX_DAILY_XP, 8);
- data << uint64(sWorld->getIntConfig(CONFIG_GUILD_DAILY_XP_CAP));
- SendPacket(&data);
- }
- }
-}
-
-void WorldSession::HandleAutoDeclineGuildInvites(WorldPacket& recvPacket)
+void WorldSession::HandleDeclineGuildInvites(WorldPackets::Guild::DeclineGuildInvites& packet)
{
- uint8 enable;
- recvPacket >> enable;
-
- GetPlayer()->ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_AUTO_DECLINE_GUILD, enable != 0);
+ GetPlayer()->ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_AUTO_DECLINE_GUILD, packet.Allow);
}
-void WorldSession::HandleGuildRewardsQueryOpcode(WorldPacket& recvPacket)
+void WorldSession::HandleRequestGuildRewardsList(WorldPackets::Guild::RequestGuildRewardsList& packet)
{
- recvPacket.read_skip<uint32>(); // Unk
-
if (sGuildMgr->GetGuildById(_player->GetGuildId()))
{
std::vector<GuildReward> const& rewards = sGuildMgr->GetGuildRewards();
- WorldPacket data(SMSG_GUILD_REWARDS_LIST, 3 + rewards.size() * (4 + 4 + 4 + 8 + 4 + 4));
- data.WriteBits(rewards.size(), 21);
- data.FlushBits();
+ WorldPackets::Guild::GuildRewardList rewardList;
+ rewardList.Version = uint32(time(NULL));
+ rewardList.RewardItems.reserve(rewards.size());
for (uint32 i = 0; i < rewards.size(); i++)
{
- data << uint32(rewards[i].Standing);
- data << int32(rewards[i].Racemask);
- data << uint32(rewards[i].Entry);
- data << uint64(rewards[i].Price);
- data << uint32(0); // Unused
- data << uint32(rewards[i].AchievementId);
+ WorldPackets::Guild::GuildRewardItem rewardItem;
+ rewardItem.ItemID = rewards[i].ItemID;
+ rewardItem.RaceMask = rewards[i].RaceMask;
+ rewardItem.MinGuildLevel = 0;
+ rewardItem.MinGuildRep = rewards[i].MinGuildRep;
+ rewardItem.AchievementsRequired = rewards[i].AchievementsRequired;
+ rewardItem.Cost = rewards[i].Cost;
+ rewardList.RewardItems.push_back(rewardItem);
}
- data << uint32(time(NULL));
- SendPacket(&data);
+
+ SendPacket(rewardList.Write());
}
}
-void WorldSession::HandleGuildQueryNewsOpcode(WorldPacket& recvPacket)
+void WorldSession::HandleGuildQueryNews(WorldPackets::Guild::GuildQueryNews& newsQuery)
{
- recvPacket.read_skip<uint32>();
TC_LOG_DEBUG("guild", "CMSG_GUILD_QUERY_NEWS [%s]", GetPlayerInfo().c_str());
if (Guild* guild = GetPlayer()->GetGuild())
- guild->SendNewsUpdate(this);
+ if (guild->GetGUID() == newsQuery.GuildGUID)
+ guild->SendNewsUpdate(this);
}
-void WorldSession::HandleGuildNewsUpdateStickyOpcode(WorldPacket& recvPacket)
+void WorldSession::HandleGuildNewsUpdateSticky(WorldPackets::Guild::GuildNewsUpdateSticky& packet)
{
- uint32 newsId;
- bool sticky;
- ObjectGuid guid;
-
- recvPacket >> newsId;
-
- guid[2] = recvPacket.ReadBit();
- guid[4] = recvPacket.ReadBit();
- guid[3] = recvPacket.ReadBit();
- guid[0] = recvPacket.ReadBit();
- sticky = recvPacket.ReadBit();
- guid[6] = recvPacket.ReadBit();
- guid[7] = recvPacket.ReadBit();
- guid[1] = recvPacket.ReadBit();
- guid[5] = recvPacket.ReadBit();
-
- recvPacket.ReadByteSeq(guid[6]);
- recvPacket.ReadByteSeq(guid[2]);
- recvPacket.ReadByteSeq(guid[1]);
- recvPacket.ReadByteSeq(guid[0]);
- recvPacket.ReadByteSeq(guid[5]);
- recvPacket.ReadByteSeq(guid[3]);
- recvPacket.ReadByteSeq(guid[7]);
- recvPacket.ReadByteSeq(guid[4]);
-
if (Guild* guild = GetPlayer()->GetGuild())
- guild->HandleNewsSetSticky(this, newsId, sticky);
+ guild->HandleNewsSetSticky(this, packet.NewsID, packet.Sticky);
}
-void WorldSession::HandleGuildSetGuildMaster(WorldPacket& recvPacket)
+void WorldSession::HandleGuildSetGuildMaster(WorldPackets::Guild::GuildSetGuildMaster& packet)
{
- uint8 nameLength = recvPacket.ReadBits(7);
- // This is related to guild master inactivity.
- /*bool isDethrone = */recvPacket.ReadBit();
- std::string playerName = recvPacket.ReadString(nameLength);
if (Guild* guild = GetPlayer()->GetGuild())
- guild->HandleSetNewGuildMaster(this, playerName);
+ guild->HandleSetNewGuildMaster(this, packet.NewMasterName);
}
void WorldSession::HandleGuildSetAchievementTracking(WorldPacket& recvPacket)
diff --git a/src/server/game/Handlers/MailHandler.cpp b/src/server/game/Handlers/MailHandler.cpp
index 136f998b308..b8407c35be4 100644
--- a/src/server/game/Handlers/MailHandler.cpp
+++ b/src/server/game/Handlers/MailHandler.cpp
@@ -578,7 +578,7 @@ void WorldSession::HandleGetMailList(WorldPackets::Mail::MailGetList& packet)
response.TotalNumRecords = player->GetMailSize();
time_t cur_time = time(nullptr);
-
+
for (Mail* m : player->GetMails())
{
// skip deleted or not delivered (deliver delay not expired) mails
diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp
index 154b3428022..80a2284aa7d 100644
--- a/src/server/game/Handlers/NPCHandler.cpp
+++ b/src/server/game/Handlers/NPCHandler.cpp
@@ -50,15 +50,12 @@ enum StableResultCode
STABLE_ERR_STABLE = 0x0C, // "Internal pet error"
};
-void WorldSession::HandleTabardVendorActivateOpcode(WorldPacket& recvData)
+void WorldSession::HandleTabardVendorActivateOpcode(WorldPackets::NPC::Hello& packet)
{
- ObjectGuid guid;
- recvData >> guid;
-
- Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_TABARDDESIGNER);
+ Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_TABARDDESIGNER);
if (!unit)
{
- TC_LOG_DEBUG("network", "WORLD: HandleTabardVendorActivateOpcode - %s not found or you can not interact with him.", guid.ToString().c_str());
+ TC_LOG_DEBUG("network", "WORLD: HandleTabardVendorActivateOpcode - %s not found or you can not interact with him.", packet.Unit.ToString().c_str());
return;
}
@@ -66,14 +63,14 @@ void WorldSession::HandleTabardVendorActivateOpcode(WorldPacket& recvData)
if (GetPlayer()->HasUnitState(UNIT_STATE_DIED))
GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH);
- SendTabardVendorActivate(guid);
+ SendTabardVendorActivate(packet.Unit);
}
void WorldSession::SendTabardVendorActivate(ObjectGuid guid)
{
- WorldPacket data(SMSG_TABARD_VENDOR_ACTIVATE, 18);
- data << guid;
- SendPacket(&data);
+ WorldPackets::NPC::PlayerTabardVendorActivate packet;
+ packet.Vendor = guid;
+ SendPacket(packet.Write());
}
void WorldSession::HandleBankerActivateOpcode(WorldPackets::NPC::Hello& packet)
diff --git a/src/server/game/Handlers/PetitionsHandler.cpp b/src/server/game/Handlers/PetitionsHandler.cpp
index 45f8b6dea1d..bb658612f25 100644
--- a/src/server/game/Handlers/PetitionsHandler.cpp
+++ b/src/server/game/Handlers/PetitionsHandler.cpp
@@ -22,64 +22,28 @@
#include "WorldSession.h"
#include "World.h"
#include "ObjectMgr.h"
-#include "ArenaTeamMgr.h"
#include "GuildMgr.h"
#include "Log.h"
#include "Opcodes.h"
#include "Guild.h"
-#include "ArenaTeam.h"
#include "GossipDef.h"
#include "SocialMgr.h"
+#include "PetitionPackets.h"
#define CHARTER_DISPLAY_ID 16161
+#define GUILD_CHARTER_ITEM_ID 5863
-// Charters ID in item_template
-enum CharterItemIDs
+void WorldSession::HandlePetitionBuy(WorldPackets::Petition::PetitionBuy& packet)
{
- GUILD_CHARTER = 5863,
- ARENA_TEAM_CHARTER_2v2 = 23560,
- ARENA_TEAM_CHARTER_3v3 = 23561,
- ARENA_TEAM_CHARTER_5v5 = 23562
-};
+ TC_LOG_DEBUG("network", "Received CMSG_PETITION_BUY");
-void WorldSession::HandlePetitionBuyOpcode(WorldPacket& recvData)
-{
- TC_LOG_DEBUG("network", "Received opcode CMSG_PETITION_BUY");
-
- ObjectGuid guidNPC;
- uint32 clientIndex; // 1 for guild and arenaslot+1 for arenas in client
- std::string name;
-
- recvData >> guidNPC; // NPC GUID
- recvData.read_skip<uint32>(); // 0
- recvData.read_skip<uint64>(); // 0
- recvData >> name; // name
- recvData.read_skip<std::string>(); // some string
- recvData.read_skip<uint32>(); // 0
- recvData.read_skip<uint32>(); // 0
- recvData.read_skip<uint32>(); // 0
- recvData.read_skip<uint32>(); // 0
- recvData.read_skip<uint32>(); // 0
- recvData.read_skip<uint32>(); // 0
- recvData.read_skip<uint32>(); // 0
- recvData.read_skip<uint16>(); // 0
- recvData.read_skip<uint32>(); // 0
- recvData.read_skip<uint32>(); // 0
- recvData.read_skip<uint32>(); // 0
-
- for (int i = 0; i < 10; ++i)
- recvData.read_skip<std::string>();
-
- recvData >> clientIndex; // index
- recvData.read_skip<uint32>(); // 0
-
- TC_LOG_DEBUG("network", "Petitioner %s tried sell petition: name %s", guidNPC.ToString().c_str(), name.c_str());
+ TC_LOG_DEBUG("network", "Petitioner %s tried sell petition: title %s", packet.Unit.ToString().c_str(), packet.Title.c_str());
// prevent cheating
- Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(guidNPC, UNIT_NPC_FLAG_PETITIONER);
+ Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_PETITIONER);
if (!creature)
{
- TC_LOG_DEBUG("network", "WORLD: HandlePetitionBuyOpcode - %s not found or you can't interact with him.", guidNPC.ToString().c_str());
+ TC_LOG_DEBUG("network", "WORLD: HandlePetitionBuyOpcode - %s not found or you can't interact with him.", packet.Unit.ToString().c_str());
return;
}
@@ -87,109 +51,48 @@ void WorldSession::HandlePetitionBuyOpcode(WorldPacket& recvData)
if (GetPlayer()->HasUnitState(UNIT_STATE_DIED))
GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH);
- uint32 charterid = 0;
- uint32 cost = 0;
- uint32 type = 0;
- if (creature->IsTabardDesigner())
- {
- // if tabard designer, then trying to buy a guild charter.
- // do not let if already in guild.
- if (_player->GetGuildId())
- return;
-
- charterid = GUILD_CHARTER;
- cost = sWorld->getIntConfig(CONFIG_CHARTER_COST_GUILD);
- type = GUILD_CHARTER_TYPE;
- }
- else
- {
- /// @todo find correct opcode
- if (_player->getLevel() < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
- {
- SendNotification(LANG_ARENA_ONE_TOOLOW, sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL));
- return;
- }
+ uint32 charterItemID = GUILD_CHARTER_ITEM_ID;
+ uint32 cost = sWorld->getIntConfig(CONFIG_CHARTER_COST_GUILD);
- switch (clientIndex) // arenaSlot+1 as received from client (1 from 3 case)
- {
- case 1:
- charterid = ARENA_TEAM_CHARTER_2v2;
- cost = sWorld->getIntConfig(CONFIG_CHARTER_COST_ARENA_2v2);
- type = ARENA_TEAM_CHARTER_2v2_TYPE;
- break;
- case 2:
- charterid = ARENA_TEAM_CHARTER_3v3;
- cost = sWorld->getIntConfig(CONFIG_CHARTER_COST_ARENA_3v3);
- type = ARENA_TEAM_CHARTER_3v3_TYPE;
- break;
- case 3:
- charterid = ARENA_TEAM_CHARTER_5v5;
- cost = sWorld->getIntConfig(CONFIG_CHARTER_COST_ARENA_5v5);
- type = ARENA_TEAM_CHARTER_5v5_TYPE;
- break;
- default:
- TC_LOG_DEBUG("network", "unknown selection at buy arena petition: %u", clientIndex);
- return;
- }
-
- if (_player->GetArenaTeamId(clientIndex - 1)) // arenaSlot+1 as received from client
- {
- SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, name, "", ERR_ALREADY_IN_ARENA_TEAM);
- return;
- }
- }
+ // do not let if already in guild.
+ if (_player->GetGuildId())
+ return;
- if (type == GUILD_CHARTER_TYPE)
+ if (sGuildMgr->GetGuildByName(packet.Title))
{
- if (sGuildMgr->GetGuildByName(name))
- {
- Guild::SendCommandResult(this, GUILD_COMMAND_CREATE, ERR_GUILD_NAME_EXISTS_S, name);
- return;
- }
-
- if (sObjectMgr->IsReservedName(name) || !ObjectMgr::IsValidCharterName(name))
- {
- Guild::SendCommandResult(this, GUILD_COMMAND_CREATE, ERR_GUILD_NAME_INVALID, name);
- return;
- }
+ Guild::SendCommandResult(this, GUILD_COMMAND_CREATE_GUILD, ERR_GUILD_NAME_EXISTS_S, packet.Title);
+ return;
}
- else
+
+ if (sObjectMgr->IsReservedName(packet.Title) || !ObjectMgr::IsValidCharterName(packet.Title))
{
- if (sArenaTeamMgr->GetArenaTeamByName(name))
- {
- SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, name, "", ERR_ARENA_TEAM_NAME_EXISTS_S);
- return;
- }
- if (sObjectMgr->IsReservedName(name) || !ObjectMgr::IsValidCharterName(name))
- {
- SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, name, "", ERR_ARENA_TEAM_NAME_INVALID);
- return;
- }
+ Guild::SendCommandResult(this, GUILD_COMMAND_CREATE_GUILD, ERR_GUILD_NAME_INVALID, packet.Title);
+ return;
}
- ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(charterid);
+ ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(charterItemID);
if (!pProto)
{
- _player->SendBuyError(BUY_ERR_CANT_FIND_ITEM, NULL, charterid, 0);
+ _player->SendBuyError(BUY_ERR_CANT_FIND_ITEM, NULL, charterItemID, 0);
return;
}
if (!_player->HasEnoughMoney(uint64(cost)))
- { //player hasn't got enough money
- _player->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, creature, charterid, 0);
+ {
+ _player->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, creature, charterItemID, 0);
return;
}
ItemPosCountVec dest;
- InventoryResult msg = _player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, charterid, pProto->GetBuyCount());
+ InventoryResult msg = _player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, charterItemID, pProto->GetBuyCount());
if (msg != EQUIP_ERR_OK)
{
- _player->SendEquipError(msg, NULL, NULL, charterid);
+ _player->SendEquipError(msg, NULL, NULL, charterItemID);
return;
}
- _player->ModifyMoney(-(int32)cost);
- Item* charter = _player->StoreNewItem(dest, charterid, true);
+ _player->ModifyMoney(-int32(cost));
+ Item* charter = _player->StoreNewItem(dest, charterItemID, true);
if (!charter)
return;
@@ -204,7 +107,6 @@ void WorldSession::HandlePetitionBuyOpcode(WorldPacket& recvData)
// datacorruption
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_BY_OWNER);
stmt->setUInt64(0, _player->GetGUID().GetCounter());
- stmt->setUInt8(1, type);
PreparedQueryResult result = CharacterDatabase.Query(stmt);
std::ostringstream ssInvalidPetitionGUIDs;
@@ -222,7 +124,7 @@ void WorldSession::HandlePetitionBuyOpcode(WorldPacket& recvData)
ssInvalidPetitionGUIDs << '\'' << charter->GetGUID().GetCounter() << '\'';
TC_LOG_DEBUG("network", "Invalid petition GUIDs: %s", ssInvalidPetitionGUIDs.str().c_str());
- CharacterDatabase.EscapeString(name);
+ CharacterDatabase.EscapeString(packet.Title);
SQLTransaction trans = CharacterDatabase.BeginTransaction();
trans->PAppend("DELETE FROM petition WHERE petitionguid IN (%s)", ssInvalidPetitionGUIDs.str().c_str());
trans->PAppend("DELETE FROM petition_sign WHERE petitionguid IN (%s)", ssInvalidPetitionGUIDs.str().c_str());
@@ -230,244 +132,165 @@ void WorldSession::HandlePetitionBuyOpcode(WorldPacket& recvData)
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PETITION);
stmt->setUInt64(0, _player->GetGUID().GetCounter());
stmt->setUInt64(1, charter->GetGUID().GetCounter());
- stmt->setString(2, name);
- stmt->setUInt8(3, uint8(type));
+ stmt->setString(2, packet.Title);
trans->Append(stmt);
CharacterDatabase.CommitTransaction(trans);
}
-void WorldSession::HandlePetitionShowSignOpcode(WorldPacket& recvData)
+void WorldSession::HandlePetitionShowSignatures(WorldPackets::Petition::PetitionShowSignatures& packet)
{
TC_LOG_DEBUG("network", "Received opcode CMSG_PETITION_SHOW_SIGNATURES");
uint8 signs = 0;
- ObjectGuid petitionguid;
- recvData >> petitionguid; // petition guid
-
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_TYPE);
-
- stmt->setUInt64(0, petitionguid.GetCounter());
-
- PreparedQueryResult result = CharacterDatabase.Query(stmt);
-
- if (!result)
- {
- TC_LOG_DEBUG("entities.player.items", "Petition %s is not found for %s %s", petitionguid.ToString().c_str(), GetPlayer()->GetGUID().ToString().c_str(), GetPlayer()->GetName().c_str());
- return;
- }
- Field* fields = result->Fetch();
- uint32 type = fields[0].GetUInt8();
- // if guild petition and has guild => error, return;
- if (type == GUILD_CHARTER_TYPE && _player->GetGuildId())
+ // if has guild => error, return;
+ if (_player->GetGuildId())
return;
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_SIGNATURE);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_SIGNATURE);
- stmt->setUInt64(0, petitionguid.GetCounter());
+ stmt->setUInt64(0, packet.Item.GetCounter());
- result = CharacterDatabase.Query(stmt);
+ PreparedQueryResult result = CharacterDatabase.Query(stmt);
// result == NULL also correct in case no sign yet
if (result)
signs = uint8(result->GetRowCount());
- TC_LOG_DEBUG("network", "CMSG_PETITION_SHOW_SIGNATURES %s", petitionguid.ToString().c_str());
+ TC_LOG_DEBUG("network", "CMSG_PETITION_SHOW_SIGNATURES %s", packet.Item.ToString().c_str());
- WorldPacket data(SMSG_PETITION_SHOW_SIGNATURES, (8+8+4+1+signs*12));
- data << petitionguid; // petition guid
- data << _player->GetGUID(); // owner guid
- data << uint32(petitionguid.GetCounter()); // guild guid
- data << uint8(signs); // sign's count
+ WorldPackets::Petition::ServerPetitionShowSignatures signaturesPacket;
+ signaturesPacket.Item = packet.Item;
+ signaturesPacket.Owner = _player->GetGUID();
+ signaturesPacket.OwnerAccountID = ObjectGuid::Create<HighGuid::WowAccount>(ObjectMgr::GetPlayerAccountIdByGUID(_player->GetGUID()));
+ signaturesPacket.PetitionID = int32(packet.Item.GetCounter()); // @todo verify that...
+ signaturesPacket.Signatures.reserve(signs);
for (uint8 i = 1; i <= signs; ++i)
{
Field* fields2 = result->Fetch();
- data << ObjectGuid::Create<HighGuid::Player>(fields2[0].GetUInt64()); // Player GUID
- data << uint32(0); // there 0 ...
+ ObjectGuid signerGUID = ObjectGuid::Create<HighGuid::Player>(fields2[0].GetUInt64());
+
+ WorldPackets::Petition::ServerPetitionShowSignatures::PetitionSignature signature;
+ signature.Signer = signerGUID;
+ signature.Choice = 0;
+ signaturesPacket.Signatures.push_back(signature);
result->NextRow();
}
- SendPacket(&data);
+
+ SendPacket(signaturesPacket.Write());
}
-void WorldSession::HandlePetitionQueryOpcode(WorldPacket& recvData)
+void WorldSession::HandleQueryPetition(WorldPackets::Petition::QueryPetition& packet)
{
- TC_LOG_DEBUG("network", "Received opcode CMSG_PETITION_QUERY"); // ok
+ TC_LOG_DEBUG("network", "Received CMSG_QUERY_PETITION Petition %s PetitionID %u", packet.ItemGUID.ToString().c_str(), packet.PetitionID);
- uint32 guildguid;
- ObjectGuid petitionguid;
- recvData >> guildguid; // in Trinity always same as GUID_LOPART(petitionguid)
- recvData >> petitionguid; // petition guid
- TC_LOG_DEBUG("network", "CMSG_PETITION_QUERY Petition %s Guild GUID %u", petitionguid.ToString().c_str(), guildguid);
-
- SendPetitionQueryOpcode(petitionguid);
+ SendPetitionQueryOpcode(packet.ItemGUID);
}
-void WorldSession::SendPetitionQueryOpcode(ObjectGuid petitionguid)
+void WorldSession::SendPetitionQueryOpcode(ObjectGuid petitionGUID)
{
- ObjectGuid ownerguid;
- uint32 type;
- std::string name = "NO_NAME_FOR_GUID";
+ ObjectGuid ownerGUID;
+ std::string title = "NO_NAME_FOR_GUID";
+
+ WorldPackets::Petition::QueryPetitionResponse responsePacket;
+ responsePacket.PetitionID = uint32(petitionGUID.GetCounter()); // PetitionID (in Trinity always same as GUID_LOPART(petition guid))
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION);
- stmt->setUInt64(0, petitionguid.GetCounter());
+ stmt->setUInt64(0, petitionGUID.GetCounter());
PreparedQueryResult result = CharacterDatabase.Query(stmt);
if (result)
{
Field* fields = result->Fetch();
- ownerguid = ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64());
- name = fields[1].GetString();
- type = fields[2].GetUInt8();
+ ownerGUID = ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64());
+ title = fields[1].GetString();
}
else
{
- TC_LOG_DEBUG("network", "CMSG_PETITION_QUERY failed for petition (%s)", petitionguid.ToString().c_str());
- return;
- }
+ responsePacket.Allow = false;
+ SendPacket(responsePacket.Write());
- WorldPacket data(SMSG_QUERY_PETITION_RESPONSE, (4+8+name.size()+1+1+4*12+2+10));
- data << uint32(petitionguid.GetCounter()); // guild/team guid (in Trinity always same as GUID_LOPART(petition guid)
- data << ownerguid; // charter owner guid
- data << name; // name (guild/arena team)
- data << uint8(0); // some string
- if (type == GUILD_CHARTER_TYPE)
- {
- uint32 needed = sWorld->getIntConfig(CONFIG_MIN_PETITION_SIGNS);
- data << uint32(needed);
- data << uint32(needed);
- data << uint32(0); // bypass client - side limitation, a different value is needed here for each petition
- }
- else
- {
- data << uint32(type-1);
- data << uint32(type-1);
- data << uint32(type); // bypass client - side limitation, a different value is needed here for each petition
+ TC_LOG_DEBUG("network", "CMSG_PETITION_QUERY failed for petition (%s)", petitionGUID.ToString().c_str());
+ return;
}
- data << uint32(0); // 5
- data << uint32(0); // 6
- data << uint32(0); // 7
- data << uint32(0); // 8
- data << uint16(0); // 9 2 bytes field
- data << uint32(0); // 10
- data << uint32(0); // 11
- data << uint32(0); // 13 count of next strings?
- for (int i = 0; i < 10; ++i)
- data << uint8(0); // some string
+ int32 reqSignatures = sWorld->getIntConfig(CONFIG_MIN_PETITION_SIGNS);
- data << uint32(0); // 14
+ WorldPackets::Petition::PetitionInfo petitionInfo;
+ petitionInfo.PetitionID = int32(petitionGUID.GetCounter());
+ petitionInfo.Petitioner = ownerGUID;
+ petitionInfo.MinSignatures = reqSignatures;
+ petitionInfo.MaxSignatures = reqSignatures;
+ petitionInfo.Title = title;
- data << uint32(type != GUILD_CHARTER_TYPE); // 15 0 - guild, 1 - arena team
+ responsePacket.Allow = true;
+ responsePacket.Info = petitionInfo;
- SendPacket(&data);
+ SendPacket(responsePacket.Write());
}
-void WorldSession::HandlePetitionRenameGuildOpcode(WorldPacket& recvData)
+void WorldSession::HandlePetitionRenameGuild(WorldPackets::Petition::PetitionRenameGuild& packet)
{
- /// @todo: drop arena team code
+ TC_LOG_DEBUG("network", "Received CMSG_PETITION_RENAME_GUILD");
TC_LOG_DEBUG("network", "Received opcode CMSG_PETITION_RENAME_GUILD");
- ObjectGuid petitionGuid;
- uint32 type;
- std::string newName;
-
- recvData >> petitionGuid; // guid
- recvData >> newName; // new name
-
- Item* item = _player->GetItemByGuid(petitionGuid);
+ uint8 type = 0;
+ Item* item = _player->GetItemByGuid(packet.PetitionGuid);
if (!item)
return;
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_TYPE);
-
- stmt->setUInt64(0, petitionGuid.GetCounter());
-
- PreparedQueryResult result = CharacterDatabase.Query(stmt);
-
- if (result)
- {
- Field* fields = result->Fetch();
- type = fields[0].GetUInt8();
- }
- else
+ if (sGuildMgr->GetGuildByName(packet.NewGuildName))
{
- TC_LOG_DEBUG("network", "CMSG_PETITION_QUERY failed for petition %s", petitionGuid.ToString().c_str());
+ Guild::SendCommandResult(this, GUILD_COMMAND_CREATE_GUILD, ERR_GUILD_NAME_EXISTS_S, packet.NewGuildName);
return;
}
- if (type == GUILD_CHARTER_TYPE)
+ if (sObjectMgr->IsReservedName(packet.NewGuildName) || !ObjectMgr::IsValidCharterName(packet.NewGuildName))
{
- if (sGuildMgr->GetGuildByName(newName))
- {
- Guild::SendCommandResult(this, GUILD_COMMAND_CREATE, ERR_GUILD_NAME_EXISTS_S, newName);
- return;
- }
- if (sObjectMgr->IsReservedName(newName) || !ObjectMgr::IsValidCharterName(newName))
- {
- Guild::SendCommandResult(this, GUILD_COMMAND_CREATE, ERR_GUILD_NAME_INVALID, newName);
- return;
- }
- }
- else
- {
- if (sArenaTeamMgr->GetArenaTeamByName(newName))
- {
- SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, newName, "", ERR_ARENA_TEAM_NAME_EXISTS_S);
- return;
- }
- if (sObjectMgr->IsReservedName(newName) || !ObjectMgr::IsValidCharterName(newName))
- {
- SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, newName, "", ERR_ARENA_TEAM_NAME_INVALID);
- return;
- }
+ Guild::SendCommandResult(this, GUILD_COMMAND_CREATE_GUILD, ERR_GUILD_NAME_INVALID, packet.NewGuildName);
+ return;
}
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_PETITION_NAME);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_PETITION_NAME);
- stmt->setString(0, newName);
- stmt->setUInt64(1, petitionGuid.GetCounter());
+ stmt->setString(0, packet.NewGuildName);
+ stmt->setUInt64(1, packet.PetitionGuid.GetCounter());
CharacterDatabase.Execute(stmt);
- TC_LOG_DEBUG("network", "Petition %s renamed to '%s'", petitionGuid.ToString().c_str(), newName.c_str());
- WorldPacket data(SMSG_PETITION_RENAME_GUILD_RESPONSE, (8 + newName.size() + 1));
- data << petitionGuid;
- data << newName;
- SendPacket(&data);
+ WorldPackets::Petition::PetitionRenameGuildResponse renameResponse;
+ renameResponse.PetitionGuid = packet.PetitionGuid;
+ renameResponse.NewGuildName = packet.NewGuildName;
+ SendPacket(renameResponse.Write());
+
+ TC_LOG_DEBUG("network", "Petition %s renamed to '%s'", packet.PetitionGuid.ToString().c_str(), packet.NewGuildName.c_str());
}
-void WorldSession::HandlePetitionSignOpcode(WorldPacket& recvData)
+void WorldSession::HandleSignPetition(WorldPackets::Petition::SignPetition& packet)
{
- TC_LOG_DEBUG("network", "Received opcode CMSG_PETITION_SIGN"); // ok
-
- Field* fields;
- ObjectGuid petitionGuid;
- uint8 unk;
- recvData >> petitionGuid; // petition guid
- recvData >> unk;
+ TC_LOG_DEBUG("network", "Received CMSG_SIGN_PETITION");
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_SIGNATURES);
- stmt->setUInt64(0, petitionGuid.GetCounter());
- stmt->setUInt64(1, petitionGuid.GetCounter());
+ stmt->setUInt64(0, packet.PetitionGUID.GetCounter());
+ stmt->setUInt64(1, packet.PetitionGUID.GetCounter());
PreparedQueryResult result = CharacterDatabase.Query(stmt);
if (!result)
{
- TC_LOG_ERROR("network", "Petition %s is not found for %s %s", petitionGuid.ToString().c_str(), GetPlayer()->GetGUID().ToString().c_str(), GetPlayer()->GetName().c_str());
+ TC_LOG_ERROR("network", "Petition %s is not found for %s %s", packet.PetitionGUID.ToString().c_str(), GetPlayer()->GetGUID().ToString().c_str(), GetPlayer()->GetName().c_str());
return;
}
- fields = result->Fetch();
+ Field* fields = result->Fetch();
ObjectGuid ownerGuid = ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64());
uint64 signs = fields[1].GetUInt64();
- uint8 type = fields[2].GetUInt8();
if (ownerGuid == _player->GetGUID())
return;
@@ -475,93 +298,62 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket& recvData)
// not let enemies sign guild charter
if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && GetPlayer()->GetTeam() != ObjectMgr::GetPlayerTeamByGUID(ownerGuid))
{
- if (type != GUILD_CHARTER_TYPE)
- SendArenaTeamCommandResult(ERR_ARENA_TEAM_INVITE_SS, "", "", ERR_ARENA_TEAM_NOT_ALLIED);
- else
- Guild::SendCommandResult(this, GUILD_COMMAND_CREATE, ERR_GUILD_NOT_ALLIED);
+ Guild::SendCommandResult(this, GUILD_COMMAND_CREATE_GUILD, ERR_GUILD_NOT_ALLIED);
return;
}
- if (type != GUILD_CHARTER_TYPE)
+ if (_player->GetGuildId())
{
- if (_player->getLevel() < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
- {
- SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", _player->GetName().c_str(), ERR_ARENA_TEAM_TARGET_TOO_LOW_S);
- return;
- }
-
- uint8 slot = ArenaTeam::GetSlotByType(type);
- if (slot >= MAX_ARENA_SLOT)
- return;
-
- if (_player->GetArenaTeamId(slot))
- {
- SendArenaTeamCommandResult(ERR_ARENA_TEAM_INVITE_SS, "", _player->GetName().c_str(), ERR_ALREADY_IN_ARENA_TEAM_S);
- return;
- }
-
- if (_player->GetArenaTeamIdInvited())
- {
- SendArenaTeamCommandResult(ERR_ARENA_TEAM_INVITE_SS, "", _player->GetName().c_str(), ERR_ALREADY_INVITED_TO_ARENA_TEAM_S);
- return;
- }
+ Guild::SendCommandResult(this, GUILD_COMMAND_INVITE_PLAYER, ERR_ALREADY_IN_GUILD_S, _player->GetName());
+ return;
}
- else
+
+ if (_player->GetGuildIdInvited())
{
- if (_player->GetGuildId())
- {
- Guild::SendCommandResult(this, GUILD_COMMAND_INVITE, ERR_ALREADY_IN_GUILD_S, _player->GetName());
- return;
- }
- if (_player->GetGuildIdInvited())
- {
- Guild::SendCommandResult(this, GUILD_COMMAND_INVITE, ERR_ALREADY_INVITED_TO_GUILD_S, _player->GetName());
- return;
- }
+ Guild::SendCommandResult(this, GUILD_COMMAND_INVITE_PLAYER, ERR_ALREADY_INVITED_TO_GUILD_S, _player->GetName());
+ return;
}
- if (++signs > type) // client signs maximum
- return;
+ //if (++signs > type) // client signs maximum
+ // return;
// Client doesn't allow to sign petition two times by one character, but not check sign by another character from same account
// not allow sign another player from already sign player account
stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_SIG_BY_ACCOUNT);
stmt->setUInt32(0, GetAccountId());
- stmt->setUInt64(1, petitionGuid.GetCounter());
+ stmt->setUInt64(1, packet.PetitionGUID.GetCounter());
result = CharacterDatabase.Query(stmt);
+ WorldPackets::Petition::PetitionSignResults signResult;
+ signResult.Player = _player->GetGUID();
+ signResult.Item = packet.PetitionGUID;
+
if (result)
{
- WorldPacket data(SMSG_PETITION_SIGN_RESULTS, (8+8+4));
- data << petitionGuid;
- data << _player->GetGUID();
- data << uint32(PETITION_SIGN_ALREADY_SIGNED);
+ signResult.Error = int32(PETITION_SIGN_ALREADY_SIGNED);
// close at signer side
- SendPacket(&data);
+ SendPacket(signResult.Write());
return;
}
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PETITION_SIGNATURE);
stmt->setUInt64(0, ownerGuid.GetCounter());
- stmt->setUInt64(1, petitionGuid.GetCounter());
+ stmt->setUInt64(1, packet.PetitionGUID.GetCounter());
stmt->setUInt64(2, _player->GetGUID().GetCounter());
stmt->setUInt32(3, GetAccountId());
CharacterDatabase.Execute(stmt);
- TC_LOG_DEBUG("network", "PETITION SIGN: %s by player: %s (%s Account: %u)", petitionGuid.ToString().c_str(), _player->GetName().c_str(), _player->GetGUID().ToString().c_str(), GetAccountId());
+ TC_LOG_DEBUG("network", "PETITION SIGN: %s by player: %s (%s Account: %u)", packet.PetitionGUID.ToString().c_str(), _player->GetName().c_str(), _player->GetGUID().ToString().c_str(), GetAccountId());
- WorldPacket data(SMSG_PETITION_SIGN_RESULTS, (8+8+4));
- data << petitionGuid;
- data << _player->GetGUID();
- data << uint32(PETITION_SIGN_OK);
+ signResult.Error = int32(PETITION_SIGN_OK);
// close at signer side
- SendPacket(&data);
+ SendPacket(signResult.Write());
// update signs count on charter, required testing...
//Item* item = _player->GetItemByGuid(petitionguid));
@@ -570,21 +362,17 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket& recvData)
// update for owner if online
if (Player* owner = ObjectAccessor::FindConnectedPlayer(ownerGuid))
- owner->GetSession()->SendPacket(&data);
+ owner->GetSession()->SendPacket(signResult.Write());
}
-void WorldSession::HandlePetitionDeclineOpcode(WorldPacket& recvData)
+void WorldSession::HandleDeclinePetition(WorldPackets::Petition::DeclinePetition& packet)
{
- TC_LOG_DEBUG("network", "Received opcode MSG_PETITION_DECLINE"); // ok
+ TC_LOG_DEBUG("network", "Received CMSG_DECLINE_PETITION");
- ObjectGuid petitionguid;
- recvData >> petitionguid; // petition guid
- TC_LOG_DEBUG("network", "Petition %s declined by %s", petitionguid.ToString().c_str(), _player->GetGUID().ToString().c_str());
+ TC_LOG_DEBUG("network", "Petition %s declined by %s", packet.PetitionGUID.ToString().c_str(), _player->GetGUID().ToString().c_str());
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_OWNER_BY_GUID);
-
- stmt->setUInt64(0, petitionguid.GetCounter());
-
+ stmt->setUInt64(0, packet.PetitionGUID.GetCounter());
PreparedQueryResult result = CharacterDatabase.Query(stmt);
if (!result)
@@ -596,147 +384,92 @@ void WorldSession::HandlePetitionDeclineOpcode(WorldPacket& recvData)
Player* owner = ObjectAccessor::FindConnectedPlayer(ownerguid);
if (owner) // petition owner online
{
+ // Disabled because packet isn't handled by the client in any way
/*
- WorldPacket data(SMSG_DECLINE_PETITION, 18);
- data << _player->GetGUID();
- owner->GetSession()->SendPacket(&data);
+ WorldPackets::Petition::PetitionDeclined packet;
+ packet.Decliner = _player->GetGUID();
+ owner->GetSession()->SendPacket(packet.Write());
*/
}
}
-void WorldSession::HandleOfferPetitionOpcode(WorldPacket& recvData)
+void WorldSession::HandleOfferPetition(WorldPackets::Petition::OfferPetition& packet)
{
- TC_LOG_DEBUG("network", "Received opcode CMSG_OFFER_PETITION"); // ok
+ TC_LOG_DEBUG("network", "Received opcode CMSG_OFFER_PETITION");
- uint8 signs = 0;
- ObjectGuid petitionguid, plguid;
- uint32 type, junk;
- Player* player;
- recvData >> junk; // this is not petition type!
- recvData >> petitionguid; // petition guid
- recvData >> plguid; // player guid
-
- player = ObjectAccessor::FindConnectedPlayer(plguid);
+ Player* player = ObjectAccessor::FindConnectedPlayer(packet.TargetPlayer);
if (!player)
return;
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_TYPE);
-
- stmt->setUInt64(0, petitionguid.GetCounter());
-
- PreparedQueryResult result = CharacterDatabase.Query(stmt);
-
- if (!result)
- return;
-
- Field* fields = result->Fetch();
- type = fields[0].GetUInt8();
-
- TC_LOG_DEBUG("network", "OFFER PETITION: type %u, %s, to %s", type, petitionguid.ToString().c_str(), plguid.ToString().c_str());
+ TC_LOG_DEBUG("network", "OFFER PETITION: %s, to %s", packet.ItemGUID.ToString().c_str(), packet.TargetPlayer.ToString().c_str());
if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && GetPlayer()->GetTeam() != player->GetTeam())
{
- if (type != GUILD_CHARTER_TYPE)
- SendArenaTeamCommandResult(ERR_ARENA_TEAM_INVITE_SS, "", "", ERR_ARENA_TEAM_NOT_ALLIED);
- else
- Guild::SendCommandResult(this, GUILD_COMMAND_CREATE, ERR_GUILD_NOT_ALLIED);
+ Guild::SendCommandResult(this, GUILD_COMMAND_CREATE_GUILD, ERR_GUILD_NOT_ALLIED);
return;
}
- if (type != GUILD_CHARTER_TYPE)
+ if (player->GetGuildId())
{
- if (player->getLevel() < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
- {
- // player is too low level to join an arena team
- SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, player->GetName().c_str(), "", ERR_ARENA_TEAM_TARGET_TOO_LOW_S);
- return;
- }
-
- uint8 slot = ArenaTeam::GetSlotByType(type);
- if (slot >= MAX_ARENA_SLOT)
- return;
-
- if (player->GetArenaTeamId(slot))
- {
- // player is already in an arena team
- SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, player->GetName().c_str(), "", ERR_ALREADY_IN_ARENA_TEAM_S);
- return;
- }
-
- if (player->GetArenaTeamIdInvited())
- {
- SendArenaTeamCommandResult(ERR_ARENA_TEAM_INVITE_SS, "", _player->GetName().c_str(), ERR_ALREADY_INVITED_TO_ARENA_TEAM_S);
- return;
- }
+ Guild::SendCommandResult(this, GUILD_COMMAND_INVITE_PLAYER, ERR_ALREADY_IN_GUILD_S, _player->GetName());
+ return;
}
- else
- {
- if (player->GetGuildId())
- {
- Guild::SendCommandResult(this, GUILD_COMMAND_INVITE, ERR_ALREADY_IN_GUILD_S, _player->GetName());
- return;
- }
- if (player->GetGuildIdInvited())
- {
- Guild::SendCommandResult(this, GUILD_COMMAND_INVITE, ERR_ALREADY_INVITED_TO_GUILD_S, _player->GetName());
- return;
- }
+ if (player->GetGuildIdInvited())
+ {
+ Guild::SendCommandResult(this, GUILD_COMMAND_INVITE_PLAYER, ERR_ALREADY_INVITED_TO_GUILD_S, _player->GetName());
+ return;
}
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_SIGNATURE);
+ stmt->setUInt64(0, packet.ItemGUID.GetCounter());
+ PreparedQueryResult result = CharacterDatabase.Query(stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_SIGNATURE);
-
- stmt->setUInt64(0, petitionguid.GetCounter());
-
- result = CharacterDatabase.Query(stmt);
-
+ uint8 signs = 0;
// result == NULL also correct charter without signs
if (result)
signs = uint8(result->GetRowCount());
- WorldPacket data(SMSG_PETITION_SHOW_SIGNATURES, (8+8+4+signs+signs*12));
- data << petitionguid; // petition guid
- data << _player->GetGUID(); // owner guid
- data << uint32(petitionguid.GetCounter()); // guild guid
- data << uint8(signs); // sign's count
+ WorldPackets::Petition::ServerPetitionShowSignatures signaturesPacket;
+ signaturesPacket.Item = packet.ItemGUID;
+ signaturesPacket.Owner = _player->GetGUID();
+ signaturesPacket.OwnerAccountID = ObjectGuid::Create<HighGuid::WowAccount>(player->GetSession()->GetAccountId());
+ signaturesPacket.PetitionID = int32(packet.ItemGUID.GetCounter()); // @todo verify that...
- for (uint8 i = 1; i <= signs; ++i)
+ signaturesPacket.Signatures.reserve(signs);
+ for (uint8 i = 0; i < signs; ++i)
{
Field* fields2 = result->Fetch();
- data << ObjectGuid::Create<HighGuid::Player>(fields2[0].GetUInt64()); // Player GUID
- data << uint32(0); // there 0 ...
+ ObjectGuid signerGUID = ObjectGuid::Create<HighGuid::Player>(fields2[0].GetUInt64());
+
+ WorldPackets::Petition::ServerPetitionShowSignatures::PetitionSignature signature;
+ signature.Signer = signerGUID;
+ signature.Choice = 0;
+ signaturesPacket.Signatures.push_back(signature);
result->NextRow();
}
- player->GetSession()->SendPacket(&data);
+ player->GetSession()->SendPacket(signaturesPacket.Write());
}
-void WorldSession::HandleTurnInPetitionOpcode(WorldPacket& recvData)
+void WorldSession::HandleTurnInPetition(WorldPackets::Petition::TurnInPetition& packet)
{
- TC_LOG_DEBUG("network", "Received opcode CMSG_TURN_IN_PETITION");
-
- // Get petition guid from packet
- WorldPacket data;
- ObjectGuid petitionGuid;
-
- recvData >> petitionGuid;
+ TC_LOG_DEBUG("network", "Received CMSG_TURN_IN_PETITION");
// Check if player really has the required petition charter
- Item* item = _player->GetItemByGuid(petitionGuid);
+ Item* item = _player->GetItemByGuid(packet.Item);
if (!item)
return;
- TC_LOG_DEBUG("network", "Petition %s turned in by %s", petitionGuid.ToString().c_str(), _player->GetGUID().ToString().c_str());
+ TC_LOG_DEBUG("network", "Petition %s turned in by %s", packet.Item.ToString().c_str(), _player->GetGUID().ToString().c_str());
// Get petition data from db
ObjectGuid ownerguid;
- uint32 type;
std::string name;
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION);
- stmt->setUInt64(0, petitionGuid.GetCounter());
+ stmt->setUInt64(0, packet.Item.GetCounter());
PreparedQueryResult result = CharacterDatabase.Query(stmt);
if (result)
@@ -744,11 +477,10 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket& recvData)
Field* fields = result->Fetch();
ownerguid = ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64());
name = fields[1].GetString();
- type = fields[2].GetUInt8();
}
else
{
- TC_LOG_ERROR("network", "Player %s (%s) tried to turn in petition (%s) that is not present in the database", _player->GetName().c_str(), _player->GetGUID().ToString().c_str(), petitionGuid.ToString().c_str());
+ TC_LOG_ERROR("network", "Player %s (%s) tried to turn in petition (%s) that is not present in the database", _player->GetName().c_str(), _player->GetGUID().ToString().c_str(), packet.Item.ToString().c_str());
return;
}
@@ -756,52 +488,27 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket& recvData)
if (_player->GetGUID() != ownerguid)
return;
- // Petition type (guild/arena) specific checks
- if (type == GUILD_CHARTER_TYPE)
+ // Check if player is already in a guild
+ if (_player->GetGuildId())
{
- // Check if player is already in a guild
- if (_player->GetGuildId())
- {
- data.Initialize(SMSG_TURN_IN_PETITION_RESULTS, 4);
- data << uint32(PETITION_TURN_ALREADY_IN_GUILD);
- _player->GetSession()->SendPacket(&data);
- return;
- }
-
- // Check if guild name is already taken
- if (sGuildMgr->GetGuildByName(name))
- {
- Guild::SendCommandResult(this, GUILD_COMMAND_CREATE, ERR_GUILD_NAME_EXISTS_S, name);
- return;
- }
+ WorldPackets::Petition::TurnInPetitionResult resultPacket;
+ resultPacket.Result = int32(PETITION_TURN_ALREADY_IN_GUILD);
+ _player->GetSession()->SendPacket(resultPacket.Write());
+ return;
}
- else
- {
- // Check for valid arena bracket (2v2, 3v3, 5v5)
- uint8 slot = ArenaTeam::GetSlotByType(type);
- if (slot >= MAX_ARENA_SLOT)
- return;
-
- // Check if player is already in an arena team
- if (_player->GetArenaTeamId(slot))
- {
- SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, name, "", ERR_ALREADY_IN_ARENA_TEAM);
- return;
- }
- // Check if arena team name is already taken
- if (sArenaTeamMgr->GetArenaTeamByName(name))
- {
- SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, name, "", ERR_ARENA_TEAM_NAME_EXISTS_S);
- return;
- }
+ // Check if guild name is already taken
+ if (sGuildMgr->GetGuildByName(name))
+ {
+ Guild::SendCommandResult(this, GUILD_COMMAND_CREATE_GUILD, ERR_GUILD_NAME_EXISTS_S, name);
+ return;
}
// Get petition signatures from db
uint8 signatures;
stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_SIGNATURE);
- stmt->setUInt64(0, petitionGuid.GetCounter());
+ stmt->setUInt64(0, packet.Item.GetCounter());
result = CharacterDatabase.Query(stmt);
if (result)
@@ -809,108 +516,69 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket& recvData)
else
signatures = 0;
- uint32 requiredSignatures;
- if (type == GUILD_CHARTER_TYPE)
- requiredSignatures = sWorld->getIntConfig(CONFIG_MIN_PETITION_SIGNS);
- else
- requiredSignatures = type-1;
+ uint32 requiredSignatures = sWorld->getIntConfig(CONFIG_MIN_PETITION_SIGNS);
// Notify player if signatures are missing
if (signatures < requiredSignatures)
{
- data.Initialize(SMSG_TURN_IN_PETITION_RESULTS, 4);
- data << (uint32)PETITION_TURN_NEED_MORE_SIGNATURES;
- SendPacket(&data);
+ WorldPackets::Petition::TurnInPetitionResult resultPacket;
+ resultPacket.Result = int32(PETITION_TURN_NEED_MORE_SIGNATURES);
+ SendPacket(resultPacket.Write());
return;
}
- // Proceed with guild/arena team creation
+ // Proceed with guild creation
// Delete charter item
_player->DestroyItem(item->GetBagSlot(), item->GetSlot(), true);
- if (type == GUILD_CHARTER_TYPE)
- {
- // Create guild
- Guild* guild = new Guild;
-
- if (!guild->Create(_player, name))
- {
- delete guild;
- return;
- }
-
- // Register guild and add guild master
- sGuildMgr->AddGuild(guild);
+ // Create guild
+ Guild* guild = new Guild;
- Guild::SendCommandResult(this, GUILD_COMMAND_CREATE, ERR_GUILD_COMMAND_SUCCESS, name);
-
- // Add members from signatures
- for (uint8 i = 0; i < signatures; ++i)
- {
- Field* fields = result->Fetch();
- guild->AddMember(ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64()));
- result->NextRow();
- }
- }
- else
+ if (!guild->Create(_player, name))
{
- // Receive the rest of the packet in arena team creation case
- uint32 background, icon, iconcolor, border, bordercolor;
- recvData >> background >> icon >> iconcolor >> border >> bordercolor;
-
- // Create arena team
- ArenaTeam* arenaTeam = new ArenaTeam();
+ delete guild;
+ return;
+ }
- if (!arenaTeam->Create(_player->GetGUID(), type, name, background, icon, iconcolor, border, bordercolor))
- {
- delete arenaTeam;
- return;
- }
+ // Register guild and add guild master
+ sGuildMgr->AddGuild(guild);
- // Register arena team
- sArenaTeamMgr->AddArenaTeam(arenaTeam);
- TC_LOG_DEBUG("network", "PetitonsHandler: Arena team (guid: %u) added to ObjectMgr", arenaTeam->GetId());
+ Guild::SendCommandResult(this, GUILD_COMMAND_CREATE_GUILD, ERR_GUILD_COMMAND_SUCCESS, name);
- // Add members
- for (uint8 i = 0; i < signatures; ++i)
- {
- Field* fields = result->Fetch();
- ObjectGuid memberGUID = ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64());
- TC_LOG_DEBUG("network", "PetitionsHandler: Adding arena team (guid: %u) member %s", arenaTeam->GetId(), memberGUID.ToString().c_str());
- arenaTeam->AddMember(memberGUID);
- result->NextRow();
- }
+ // Add members from signatures
+ for (uint8 i = 0; i < signatures; ++i)
+ {
+ Field* fields = result->Fetch();
+ guild->AddMember(ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64()));
+ result->NextRow();
}
SQLTransaction trans = CharacterDatabase.BeginTransaction();
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PETITION_BY_GUID);
- stmt->setUInt64(0, petitionGuid.GetCounter());
+ stmt->setUInt64(0, packet.Item.GetCounter());
trans->Append(stmt);
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PETITION_SIGNATURE_BY_GUID);
- stmt->setUInt64(0, petitionGuid.GetCounter());
+ stmt->setUInt64(0, packet.Item.GetCounter());
trans->Append(stmt);
CharacterDatabase.CommitTransaction(trans);
// created
- TC_LOG_DEBUG("network", "Player %s (%s) turning in petition %s", _player->GetName().c_str(), _player->GetGUID().ToString().c_str(), petitionGuid.ToString().c_str());
+ TC_LOG_DEBUG("network", "Player %s (%s) turning in petition %s", _player->GetName().c_str(), _player->GetGUID().ToString().c_str(), packet.Item.ToString().c_str());
- data.Initialize(SMSG_TURN_IN_PETITION_RESULTS, 4);
- data << (uint32)PETITION_TURN_OK;
- SendPacket(&data);
+ WorldPackets::Petition::TurnInPetitionResult resultPacket;
+ resultPacket.Result = int32(PETITION_TURN_OK);
+ SendPacket(resultPacket.Write());
}
-void WorldSession::HandlePetitionShowListOpcode(WorldPacket& recvData)
+void WorldSession::HandlePetitionShowList(WorldPackets::Petition::PetitionShowList& packet)
{
- TC_LOG_DEBUG("network", "Received CMSG_PETITION_SHOWLIST");
-
- ObjectGuid guid;
- recvData >> guid;
+ TC_LOG_DEBUG("network", "Received CMSG_PETITION_SHOW_LIST");
- SendPetitionShowList(guid);
+ SendPetitionShowList(packet.PetitionUnit);
}
void WorldSession::SendPetitionShowList(ObjectGuid guid)
@@ -922,45 +590,10 @@ void WorldSession::SendPetitionShowList(ObjectGuid guid)
return;
}
- WorldPacket data(SMSG_PETITION_SHOW_LIST, 8+1+4*6);
- data << guid; // npc guid
-
- if (creature->IsTabardDesigner())
- {
- data << uint8(1); // count
- data << uint32(1); // index
- data << uint32(GUILD_CHARTER); // charter entry
- data << uint32(CHARTER_DISPLAY_ID); // charter display id
- data << uint32(sWorld->getIntConfig(CONFIG_CHARTER_COST_GUILD)); // charter cost
- data << uint32(0); // unknown
- data << uint32(sWorld->getIntConfig(CONFIG_MIN_PETITION_SIGNS)); // required signs
- }
- else
- {
- data << uint8(3); // count
- // 2v2
- data << uint32(1); // index
- data << uint32(ARENA_TEAM_CHARTER_2v2); // charter entry
- data << uint32(CHARTER_DISPLAY_ID); // charter display id
- data << uint32(sWorld->getIntConfig(CONFIG_CHARTER_COST_ARENA_2v2)); // charter cost
- data << uint32(2); // unknown
- data << uint32(2); // required signs?
- // 3v3
- data << uint32(2); // index
- data << uint32(ARENA_TEAM_CHARTER_3v3); // charter entry
- data << uint32(CHARTER_DISPLAY_ID); // charter display id
- data << uint32(sWorld->getIntConfig(CONFIG_CHARTER_COST_ARENA_3v3)); // charter cost
- data << uint32(3); // unknown
- data << uint32(3); // required signs?
- // 5v5
- data << uint32(3); // index
- data << uint32(ARENA_TEAM_CHARTER_5v5); // charter entry
- data << uint32(CHARTER_DISPLAY_ID); // charter display id
- data << uint32(sWorld->getIntConfig(CONFIG_CHARTER_COST_ARENA_5v5)); // charter cost
- data << uint32(5); // unknown
- data << uint32(5); // required signs?
- }
+ WorldPackets::Petition::ServerPetitionShowList packet;
+ packet.Unit = guid;
+ packet.Price = uint32(sWorld->getIntConfig(CONFIG_CHARTER_COST_GUILD));
+ SendPacket(packet.Write());
- SendPacket(&data);
- TC_LOG_DEBUG("network", "Sent SMSG_PETITION_SHOWLIST");
+ TC_LOG_DEBUG("network", "Sent SMSG_PETITION_SHOW_LIST");
}
diff --git a/src/server/game/Server/Packets/GuildPackets.cpp b/src/server/game/Server/Packets/GuildPackets.cpp
index 5ad6d9729c2..ef0c01c5cb7 100644
--- a/src/server/game/Server/Packets/GuildPackets.cpp
+++ b/src/server/game/Server/Packets/GuildPackets.cpp
@@ -58,3 +58,755 @@ WorldPacket const* WorldPackets::Guild::QueryGuildInfoResponse::Write()
return &_worldPacket;
}
+
+WorldPacket const* WorldPackets::Guild::GuildRoster::Write()
+{
+ _worldPacket << NumAccounts;
+ _worldPacket.AppendPackedTime(CreateDate);
+ _worldPacket << GuildFlags;
+ _worldPacket << uint32(MemberData.size());
+
+ for (GuildRosterMemberData const& member : MemberData)
+ _worldPacket << member;
+
+ _worldPacket.ResetBitPos();
+ _worldPacket.WriteBits(WelcomeText.length(), 10);
+ _worldPacket.WriteBits(InfoText.length(), 10);
+ _worldPacket.FlushBits();
+
+ _worldPacket.WriteString(WelcomeText);
+ _worldPacket.WriteString(InfoText);
+
+ return &_worldPacket;
+}
+
+WorldPacket const* WorldPackets::Guild::GuildRosterUpdate::Write()
+{
+ _worldPacket << uint32(MemberData.size());
+
+ for (GuildRosterMemberData const& member : MemberData)
+ _worldPacket << member;
+
+ return &_worldPacket;
+}
+
+void WorldPackets::Guild::GuildUpdateMotdText::Read()
+{
+ uint32 textLen = _worldPacket.ReadBits(10);
+ MotdText = _worldPacket.ReadString(textLen);
+}
+
+WorldPacket const* WorldPackets::Guild::GuildCommandResult::Write()
+{
+ _worldPacket << Result;
+ _worldPacket << Command;
+
+ _worldPacket.WriteBits(Name.length(), 8);
+ _worldPacket.FlushBits();
+
+ _worldPacket.WriteString(Name);
+
+ return &_worldPacket;
+}
+
+void WorldPackets::Guild::DeclineGuildInvites::Read()
+{
+ Allow = _worldPacket.ReadBit();
+}
+
+void WorldPackets::Guild::GuildInviteByName::Read()
+{
+ uint32 nameLen = _worldPacket.ReadBits(9);
+ Name = _worldPacket.ReadString(nameLen);
+}
+
+WorldPacket const* WorldPackets::Guild::GuildInvite::Write()
+{
+ _worldPacket.WriteBits(InviterName.length(), 6);
+ _worldPacket.WriteBits(GuildName.length(), 7);
+ _worldPacket.WriteBits(OldGuildName.length(), 7);
+ _worldPacket.FlushBits();
+
+ _worldPacket << InviterVirtualRealmAddress;
+ _worldPacket << GuildVirtualRealmAddress;
+ _worldPacket << GuildGUID;
+ _worldPacket << OldGuildVirtualRealmAddress;
+ _worldPacket << OldGuildGUID;
+ _worldPacket << EmblemStyle;
+ _worldPacket << EmblemColor;
+ _worldPacket << BorderStyle;
+ _worldPacket << BorderColor;
+ _worldPacket << Background;
+ _worldPacket << Level;
+
+ _worldPacket.WriteString(InviterName);
+ _worldPacket.WriteString(GuildName);
+ _worldPacket.WriteString(OldGuildName);
+
+ return &_worldPacket;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRosterProfessionData const& rosterProfessionData)
+{
+ data << rosterProfessionData.DbID;
+ data << rosterProfessionData.Rank;
+ data << rosterProfessionData.Step;
+
+ return data;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRosterMemberData const& rosterMemberData)
+{
+ data << rosterMemberData.Guid;
+ data << rosterMemberData.RankID;
+ data << rosterMemberData.AreaID;
+ data << rosterMemberData.PersonalAchievementPoints;
+ data << rosterMemberData.GuildReputation;
+ data << rosterMemberData.LastSave;
+
+ for (uint8 i = 0; i < 2; i++)
+ data << rosterMemberData.Profession[i];
+
+ data << rosterMemberData.VirtualRealmAddress;
+ data << rosterMemberData.Status;
+ data << rosterMemberData.Level;
+ data << rosterMemberData.ClassID;
+ data << rosterMemberData.Gender;
+
+ data.WriteBits(rosterMemberData.Name.length(), 6);
+ data.WriteBits(rosterMemberData.Note.length(), 8);
+ data.WriteBits(rosterMemberData.OfficerNote.length(), 8);
+ data.WriteBit(rosterMemberData.Authenticated);
+ data.WriteBit(rosterMemberData.SorEligible);
+ data.FlushBits();
+
+ data.WriteString(rosterMemberData.Name);
+ data.WriteString(rosterMemberData.Note);
+ data.WriteString(rosterMemberData.OfficerNote);
+
+ return data;
+}
+
+WorldPacket const* WorldPackets::Guild::GuildEventPresenceChange::Write()
+{
+ _worldPacket << Guid;
+ _worldPacket << VirtualRealmAddress;
+
+ _worldPacket.WriteBits(Name.length(), 6);
+ _worldPacket.WriteBit(LoggedOn);
+ _worldPacket.WriteBit(Mobile);
+ _worldPacket.FlushBits();
+
+ _worldPacket.WriteString(Name);
+
+ return &_worldPacket;
+}
+
+WorldPacket const* WorldPackets::Guild::GuildEventMotd::Write()
+{
+ _worldPacket.WriteBits(MotdText.length(), 10);
+ _worldPacket.FlushBits();
+
+ _worldPacket.WriteString(MotdText);
+
+ return &_worldPacket;
+}
+
+WorldPacket const* WorldPackets::Guild::GuildEventPlayerJoined::Write()
+{
+ _worldPacket << Guid;
+ _worldPacket << VirtualRealmAddress;
+
+ _worldPacket.WriteBits(Name.length(), 6);
+ _worldPacket.FlushBits();
+
+ _worldPacket.WriteString(Name);
+
+ return &_worldPacket;
+}
+
+WorldPacket const* WorldPackets::Guild::GuildEventRankChanged::Write()
+{
+ _worldPacket << RankID;
+
+ return &_worldPacket;
+}
+
+WorldPacket const* WorldPackets::Guild::GuildEventBankMoneyChanged::Write()
+{
+ _worldPacket << Money;
+
+ return &_worldPacket;
+}
+
+WorldPacket const* WorldPackets::Guild::GuildEventLogQueryResults::Write()
+{
+ _worldPacket.reserve(4 + Entry.size() * 38);
+
+ _worldPacket << uint32(Entry.size());
+
+ for (GuildEventEntry const& entry : Entry)
+ {
+ _worldPacket << entry.PlayerGUID;
+ _worldPacket << entry.OtherGUID;
+ _worldPacket << entry.TransactionType;
+ _worldPacket << entry.RankID;
+ _worldPacket << entry.TransactionDate;
+ }
+
+ return &_worldPacket;
+}
+
+WorldPacket const* WorldPackets::Guild::GuildEventPlayerLeft::Write()
+{
+ _worldPacket.WriteBit(Removed);
+ _worldPacket.WriteBits(LeaverName.length(), 6);
+ _worldPacket.FlushBits();
+
+ if (Removed)
+ {
+ _worldPacket.WriteBits(RemoverName.length(), 6);
+ _worldPacket.FlushBits();
+
+ _worldPacket << RemoverGUID;
+ _worldPacket << RemoverVirtualRealmAddress;
+ _worldPacket.WriteString(RemoverName);
+ }
+
+ _worldPacket << LeaverGUID;
+ _worldPacket << LeaverVirtualRealmAddress;
+ _worldPacket.WriteString(LeaverName);
+
+ return &_worldPacket;
+}
+
+WorldPacket const* WorldPackets::Guild::GuildPermissionsQueryResults::Write()
+{
+ _worldPacket << RankID;
+ _worldPacket << WithdrawGoldLimit;
+ _worldPacket << Flags;
+ _worldPacket << NumTabs;
+ _worldPacket << uint32(Tab.size());
+
+ for (GuildRankTabPermissions const& tab : Tab)
+ {
+ _worldPacket << tab.Flags;
+ _worldPacket << tab.WithdrawItemLimit;
+ }
+
+ return &_worldPacket;
+}
+
+void WorldPackets::Guild::GuildSetRankPermissions::Read()
+{
+ _worldPacket >> RankID;
+ _worldPacket >> RankOrder;
+ _worldPacket >> Flags;
+ _worldPacket >> OldFlags;
+ _worldPacket >> WithdrawGoldLimit;
+
+ for (uint8 i = 0; i < GUILD_BANK_MAX_TABS; i++)
+ {
+ _worldPacket >> TabFlags[i];
+ _worldPacket >> TabWithdrawItemLimit[i];
+ }
+
+ _worldPacket.ResetBitPos();
+ uint32 rankNameLen = _worldPacket.ReadBits(7);
+
+ RankName = _worldPacket.ReadString(rankNameLen);
+}
+
+WorldPacket const* WorldPackets::Guild::GuildEventNewLeader::Write()
+{
+ _worldPacket.WriteBit(SelfPromoted);
+ _worldPacket.WriteBits(NewLeaderName.length(), 6);
+ _worldPacket.WriteBits(OldLeaderName.length(), 6);
+ _worldPacket.FlushBits();
+
+ _worldPacket << OldLeaderGUID;
+ _worldPacket << OldLeaderVirtualRealmAddress;
+ _worldPacket << NewLeaderGUID;
+ _worldPacket << NewLeaderVirtualRealmAddress;
+
+ _worldPacket.WriteString(NewLeaderName);
+ _worldPacket.WriteString(OldLeaderName);
+
+ return &_worldPacket;
+}
+
+WorldPacket const* WorldPackets::Guild::GuildEventTabModified::Write()
+{
+ _worldPacket << Tab;
+
+ _worldPacket.WriteBits(Name.length(), 7);
+ _worldPacket.WriteBits(Icon.length(), 9);
+ _worldPacket.FlushBits();
+
+ _worldPacket.WriteString(Name);
+ _worldPacket.WriteString(Icon);
+
+ return &_worldPacket;
+}
+
+WorldPacket const* WorldPackets::Guild::GuildEventTabTextChanged::Write()
+{
+ _worldPacket << Tab;
+
+ return &_worldPacket;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRankData const& rankData)
+{
+ data << rankData.RankID;
+ data << rankData.RankOrder;
+ data << rankData.Flags;
+ data << rankData.WithdrawGoldLimit;
+
+ for (uint8 i = 0; i < GUILD_BANK_MAX_TABS; i++)
+ {
+ data << rankData.TabFlags[i];
+ data << rankData.TabWithdrawItemLimit[i];
+ }
+
+ data.WriteBits(rankData.RankName.length(), 7);
+ data.FlushBits();
+
+ data.WriteString(rankData.RankName);
+
+ return data;
+}
+
+void WorldPackets::Guild::GuildAddRank::Read()
+{
+ _worldPacket.WriteBits(Name.length(), 7);
+ _worldPacket.FlushBits();
+
+ _worldPacket >> RankOrder;
+ _worldPacket.WriteString(Name);
+}
+
+void WorldPackets::Guild::GuildAssignMemberRank::Read()
+{
+ _worldPacket >> Member;
+ _worldPacket >> RankOrder;
+}
+
+void WorldPackets::Guild::GuildDeleteRank::Read()
+{
+ _worldPacket >> RankOrder;
+}
+
+void WorldPackets::Guild::GuildGetRanks::Read()
+{
+ _worldPacket >> GuildGUID;
+}
+
+WorldPacket const* WorldPackets::Guild::GuildRanks::Write()
+{
+ _worldPacket << uint32(Ranks.size());
+
+ for (GuildRankData const& rank : Ranks)
+ _worldPacket << rank;
+
+ return &_worldPacket;
+}
+
+WorldPacket const* WorldPackets::Guild::GuildSendRankChange::Write()
+{
+ _worldPacket << Officer;
+ _worldPacket << Other;
+ _worldPacket << RankID;
+
+ _worldPacket.WriteBit(Promote);
+ _worldPacket.FlushBits();
+
+ return &_worldPacket;
+}
+
+void WorldPackets::Guild::GuildShiftRank::Read()
+{
+ _worldPacket >> RankOrder;
+ ShiftUp = _worldPacket.ReadBit();
+}
+
+void WorldPackets::Guild::GuildUpdateInfoText::Read()
+{
+ uint32 textLen = _worldPacket.ReadBits(11);
+ InfoText = _worldPacket.ReadString(textLen);
+}
+
+void WorldPackets::Guild::GuildSetMemberNote::Read()
+{
+ _worldPacket >> NoteeGUID;
+
+ uint32 noteLen = _worldPacket.ReadBits(8);
+ IsPublic = _worldPacket.ReadBit();
+
+ Note = _worldPacket.ReadString(noteLen);
+}
+
+WorldPacket const* WorldPackets::Guild::GuildMemberUpdateNote::Write()
+{
+ _worldPacket.reserve(16 + 2 + Note.size());
+
+ _worldPacket << Member;
+
+ _worldPacket.WriteBits(Note.length(), 8);
+ _worldPacket.WriteBit(IsPublic);
+ _worldPacket.FlushBits();
+
+ _worldPacket.WriteString(Note);
+
+ return &_worldPacket;
+}
+
+void WorldPackets::Guild::GuildDemoteMember::Read()
+{
+ _worldPacket >> Demotee;
+}
+
+void WorldPackets::Guild::GuildPromoteMember::Read()
+{
+ _worldPacket >> Promotee;
+}
+
+void WorldPackets::Guild::GuildOfficerRemoveMember::Read()
+{
+ _worldPacket >> Removee;
+}
+
+void WorldPackets::Guild::GuildChangeNameRequest::Read()
+{
+ uint32 nameLen = _worldPacket.ReadBits(7);
+ NewName = _worldPacket.ReadString(nameLen);
+}
+
+WorldPacket const* WorldPackets::Guild::GuildFlaggedForRename::Write()
+{
+ _worldPacket.WriteBit(FlagSet);
+
+ return &_worldPacket;
+}
+
+void WorldPackets::Guild::RequestGuildPartyState::Read()
+{
+ _worldPacket >> GuildGUID;
+}
+
+WorldPacket const* WorldPackets::Guild::GuildPartyState::Write()
+{
+ _worldPacket.WriteBit(InGuildParty);
+ _worldPacket.FlushBits();
+
+ _worldPacket << NumMembers;
+ _worldPacket << NumRequired;
+ _worldPacket << GuildXPEarnedMult;
+
+ return &_worldPacket;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRewardItem const& rewardItem)
+{
+ data << rewardItem.ItemID;
+ data << uint32(rewardItem.AchievementsRequired.size());
+ data << rewardItem.RaceMask;
+ data << rewardItem.MinGuildLevel;
+ data << rewardItem.MinGuildRep;
+ data << rewardItem.Cost;
+
+ for (uint8 i = 0; i < rewardItem.AchievementsRequired.size(); i++)
+ data << rewardItem.AchievementsRequired[i];
+
+ return data;
+}
+
+void WorldPackets::Guild::RequestGuildRewardsList::Read()
+{
+ _worldPacket >> CurrentVersion;
+}
+
+WorldPacket const* WorldPackets::Guild::GuildRewardList::Write()
+{
+ _worldPacket << Version;
+ _worldPacket << uint32(RewardItems.size());
+
+ for (GuildRewardItem const& item : RewardItems)
+ _worldPacket << item;
+
+ return &_worldPacket;
+}
+
+void WorldPackets::Guild::GuildBankActivate::Read()
+{
+ _worldPacket >> Banker;
+ FullUpdate = _worldPacket.ReadBit();
+}
+
+void WorldPackets::Guild::GuildBankBuyTab::Read()
+{
+ _worldPacket >> Banker;
+ _worldPacket >> BankTab;
+}
+
+void WorldPackets::Guild::GuildBankUpdateTab::Read()
+{
+ _worldPacket >> Banker;
+ _worldPacket >> BankTab;
+
+ _worldPacket.ResetBitPos();
+ uint32 nameLen = _worldPacket.ReadBits(7);
+ uint32 iconLen = _worldPacket.ReadBits(9);
+
+ Name = _worldPacket.ReadString(nameLen);
+ Icon = _worldPacket.ReadString(iconLen);
+}
+
+void WorldPackets::Guild::GuildBankDepositMoney::Read()
+{
+ _worldPacket >> Banker;
+ _worldPacket >> Money;
+}
+
+void WorldPackets::Guild::GuildBankQueryTab::Read()
+{
+ _worldPacket >> Banker;
+ _worldPacket >> Tab;
+
+ FullUpdate = _worldPacket.ReadBit();
+}
+
+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 << Money;
+ _worldPacket << Tab;
+ _worldPacket << WithdrawalsRemaining;
+ _worldPacket << uint32(TabInfo.size());
+ _worldPacket << uint32(ItemInfo.size());
+
+ for (GuildBankTabInfo const& tab : TabInfo)
+ {
+ _worldPacket << tab.TabIndex;
+ _worldPacket.WriteBits(tab.Name.length(), 7);
+ _worldPacket.WriteBits(tab.Icon.length(), 9);
+ _worldPacket.FlushBits();
+
+ _worldPacket.WriteString(tab.Name);
+ _worldPacket.WriteString(tab.Icon);
+ }
+
+ for (GuildBankItemInfo const& item : ItemInfo)
+ {
+ _worldPacket << item.Slot;
+ _worldPacket << item.Item;
+ _worldPacket << item.Count;
+ _worldPacket << item.EnchantmentID;
+ _worldPacket << item.Charges;
+ _worldPacket << item.OnUseEnchantmentID;
+ _worldPacket << uint32(item.SocketEnchant.size());
+ _worldPacket << item.Flags;
+
+ for (GuildBankItemInfo::GuildBankSocketEnchant const& socketEnchant : item.SocketEnchant)
+ {
+ _worldPacket << socketEnchant.SocketIndex;
+ _worldPacket << socketEnchant.SocketEnchantID;
+ }
+
+ _worldPacket.WriteBit(item.Locked);
+ _worldPacket.FlushBits();
+ }
+
+ _worldPacket.WriteBit(FullUpdate);
+ _worldPacket.FlushBits();
+
+ return &_worldPacket;
+}
+
+void WorldPackets::Guild::GuildBankSwapItems::Read()
+{
+ _worldPacket >> Banker;
+ _worldPacket >> BankTab;
+ _worldPacket >> BankSlot;
+ _worldPacket >> ItemID;
+ _worldPacket >> BankTab1;
+ _worldPacket >> BankSlot1;
+ _worldPacket >> ItemID1;
+ _worldPacket >> BankItemCount;
+ _worldPacket >> ContainerSlot;
+ _worldPacket >> ContainerItemSlot;
+ _worldPacket >> ToSlot;
+ _worldPacket >> StackCount;
+
+ _worldPacket.ResetBitPos();
+ BankOnly = _worldPacket.ReadBit();
+ AutoStore = _worldPacket.ReadBit();
+}
+
+void WorldPackets::Guild::GuildBankLogQuery::Read()
+{
+ _worldPacket >> Tab;
+}
+
+WorldPacket const* WorldPackets::Guild::GuildBankLogQueryResults::Write()
+{
+ _worldPacket << Tab;
+ _worldPacket << uint32(Entry.size());
+
+ for (GuildBankLogEntry const& logEntry : Entry)
+ {
+ _worldPacket << logEntry.PlayerGUID;
+ _worldPacket << logEntry.TimeOffset;
+ _worldPacket << logEntry.EntryType;
+
+ _worldPacket.WriteBit(logEntry.Money.HasValue);
+ _worldPacket.WriteBit(logEntry.ItemID.HasValue);
+ _worldPacket.WriteBit(logEntry.Count.HasValue);
+ _worldPacket.WriteBit(logEntry.OtherTab.HasValue);
+ _worldPacket.FlushBits();
+
+ if (logEntry.Money.HasValue)
+ _worldPacket << logEntry.Money.Value;
+
+ if (logEntry.ItemID.HasValue)
+ _worldPacket << logEntry.ItemID.Value;
+
+ if (logEntry.Count.HasValue)
+ _worldPacket << logEntry.Count.Value;
+
+ if (logEntry.OtherTab.HasValue)
+ _worldPacket << logEntry.OtherTab.Value;
+ }
+
+ _worldPacket.WriteBit(WeeklyBonusMoney.HasValue);
+ _worldPacket.FlushBits();
+
+ if (WeeklyBonusMoney.HasValue)
+ _worldPacket << WeeklyBonusMoney.Value;
+
+ return &_worldPacket;
+}
+
+void WorldPackets::Guild::GuildBankTextQuery::Read()
+{
+ _worldPacket >> Tab;
+}
+
+WorldPacket const* WorldPackets::Guild::GuildBankTextQueryResult::Write()
+{
+ _worldPacket << Tab;
+
+ _worldPacket.WriteBits(Text.length(), 14);
+ _worldPacket.FlushBits();
+
+ _worldPacket.WriteString(Text);
+
+ return &_worldPacket;
+}
+
+void WorldPackets::Guild::GuildBankSetTabText::Read()
+{
+ _worldPacket >> Tab;
+
+ _worldPacket.ResetBitPos();
+ uint32 tabTextLen = _worldPacket.ReadBits(14);
+
+ TabText = _worldPacket.ReadString(tabTextLen);
+}
+
+void WorldPackets::Guild::GuildQueryNews::Read()
+{
+ _worldPacket >> GuildGUID;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildNewsEvent const& newsEvent)
+{
+ data << newsEvent.Id;
+ data.AppendPackedTime(newsEvent.CompletedDate);
+ data << newsEvent.Type;
+ data << newsEvent.Flags;
+
+ for (uint8 i = 0; i < 2; i++)
+ data << newsEvent.Data[i];
+
+ data << newsEvent.MemberGuid;
+ data << uint32(newsEvent.MemberList.size());
+
+ for (ObjectGuid memberGuid : newsEvent.MemberList)
+ data << memberGuid;
+
+ data.WriteBit(newsEvent.Item.HasValue);
+ data.FlushBits();
+
+ if (newsEvent.Item.HasValue)
+ data << newsEvent.Item.Value; // WorldPackets::Item::ItemInstance
+
+ return data;
+}
+
+WorldPacket const* WorldPackets::Guild::GuildNews::Write()
+{
+ _worldPacket << NewsEvents;
+
+ return &_worldPacket;
+}
+
+void WorldPackets::Guild::GuildNewsUpdateSticky::Read()
+{
+ _worldPacket >> GuildGUID;
+ _worldPacket >> NewsID;
+
+ NewsID = _worldPacket.ReadBit();
+}
+
+void WorldPackets::Guild::GuildSetGuildMaster::Read()
+{
+ uint32 nameLen = _worldPacket.ReadBits(9);
+ NewMasterName = _worldPacket.ReadString(nameLen);
+}
+
+WorldPacket const* WorldPackets::Guild::GuildChallengeUpdate::Write()
+{
+ for (int i = 0; i < GUILD_CHALLENGES_TYPES; ++i)
+ _worldPacket << int32(CurrentCount[i]);
+
+ for (int i = 0; i < GUILD_CHALLENGES_TYPES; ++i)
+ _worldPacket << int32(MaxCount[i]);
+
+ for (int i = 0; i < GUILD_CHALLENGES_TYPES; ++i)
+ _worldPacket << int32(MaxLevelGold[i]);
+
+ for (int i = 0; i < GUILD_CHALLENGES_TYPES; ++i)
+ _worldPacket << int32(Gold[i]);
+
+ return &_worldPacket;
+}
+
+void WorldPackets::Guild::SaveGuildEmblem::Read()
+{
+ _worldPacket >> Vendor;
+ _worldPacket >> BStyle;
+ _worldPacket >> EStyle;
+ _worldPacket >> BColor;
+ _worldPacket >> EColor;
+ _worldPacket >> Bg;
+}
+
+WorldPacket const* WorldPackets::Guild::PlayerSaveGuildEmblem::Write()
+{
+ _worldPacket << int32(Error);
+
+ return &_worldPacket;
+}
diff --git a/src/server/game/Server/Packets/GuildPackets.h b/src/server/game/Server/Packets/GuildPackets.h
index d4b1e9f12bd..d117fc71f2b 100644
--- a/src/server/game/Server/Packets/GuildPackets.h
+++ b/src/server/game/Server/Packets/GuildPackets.h
@@ -20,6 +20,8 @@
#include "Packet.h"
#include "ObjectGuid.h"
+#include "Guild.h"
+#include "ItemPackets.h"
namespace WorldPackets
{
@@ -78,7 +80,938 @@ namespace WorldPackets
ObjectGuid GuildGuid;
Optional<GuildInfo> Info;
};
+
+ class GuildGetRoster final : public ClientPacket
+ {
+ public:
+ GuildGetRoster(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_GET_ROSTER, std::move(packet)) { }
+
+ void Read() override { }
+ };
+
+ struct GuildRosterProfessionData
+ {
+ int32 DbID = 0;
+ int32 Rank = 0;
+ int32 Step = 0;
+ };
+
+ struct GuildRosterMemberData
+ {
+ ObjectGuid Guid;
+ int64 WeeklyXP = 0;
+ int64 TotalXP = 0;
+ int32 RankID = 0;
+ int32 AreaID = 0;
+ int32 PersonalAchievementPoints = 0;
+ int32 GuildReputation = 0;
+ int32 GuildRepToCap = 0;
+ float LastSave = 0.0f;
+ std::string Name;
+ uint32 VirtualRealmAddress = 0;
+ std::string Note;
+ std::string OfficerNote;
+ uint8 Status = 0;
+ uint8 Level = 0;
+ uint8 ClassID = 0;
+ uint8 Gender = 0;
+ bool Authenticated = false;
+ bool SorEligible = false;
+ GuildRosterProfessionData Profession[2];
+ };
+
+ class GuildRoster final : public ServerPacket
+ {
+ public:
+ GuildRoster() : ServerPacket(SMSG_GUILD_ROSTER, 4 + 4 + 4 + 4) { }
+
+ WorldPacket const* Write() override;
+
+ std::vector<GuildRosterMemberData> MemberData;
+ std::string WelcomeText;
+ std::string InfoText;
+ uint32 CreateDate = 0;
+ int32 NumAccounts = 0;
+ int32 GuildFlags = 0;
+ };
+
+ class GuildRosterUpdate final : public ServerPacket
+ {
+ public:
+ GuildRosterUpdate() : ServerPacket(SMSG_GUILD_ROSTER_UPDATE, 4) { }
+
+ WorldPacket const* Write() override;
+
+ std::vector<GuildRosterMemberData> MemberData;
+ };
+
+ class GuildUpdateMotdText final : public ClientPacket
+ {
+ public:
+ GuildUpdateMotdText(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_UPDATE_MOTD_TEXT, std::move(packet)) { }
+
+ void Read() override;
+
+ std::string 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_ACCEPT_GUILD_INVITE, std::move(packet)) { }
+
+ void Read() override { }
+ };
+
+ class GuildDeclineInvitation final : public ClientPacket
+ {
+ public:
+ GuildDeclineInvitation(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_DECLINE_INVITATION, std::move(packet)) { }
+
+ void Read() override { }
+ };
+
+ class DeclineGuildInvites final : public ClientPacket
+ {
+ public:
+ DeclineGuildInvites(WorldPacket&& packet) : ClientPacket(CMSG_DECLINE_GUILD_INVITES, std::move(packet)) { }
+
+ void Read() override;
+
+ bool Allow = false;
+ };
+
+ class GuildInviteByName final : public ClientPacket
+ {
+ public:
+ GuildInviteByName(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_INVITE_BY_NAME, std::move(packet)) { }
+
+ void Read() override;
+
+ std::string Name;
+ };
+
+ class GuildInvite final : public ServerPacket
+ {
+ public:
+ GuildInvite() : ServerPacket(SMSG_GUILD_INVITE, 68) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid GuildGUID;
+ ObjectGuid OldGuildGUID;
+ int32 Level = 0;
+ uint32 EmblemColor = 0;
+ uint32 EmblemStyle = 0;
+ uint32 BorderStyle = 0;
+ uint32 BorderColor = 0;
+ uint32 Background = 0;
+ uint32 GuildVirtualRealmAddress = 0;
+ uint32 OldGuildVirtualRealmAddress = 0;
+ uint32 InviterVirtualRealmAddress = 0;
+ std::string InviterName;
+ std::string GuildName;
+ std::string OldGuildName;
+ };
+
+ class GuildEventPresenceChange final : public ServerPacket
+ {
+ public:
+ GuildEventPresenceChange() : ServerPacket(SMSG_GUILD_EVENT_PRESENCE_CHANGE, 16 + 4 + 1 + 1) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid Guid;
+ uint32 VirtualRealmAddress = 0;
+ std::string Name;
+ bool Mobile = false;
+ bool LoggedOn = false;
+ };
+
+ class GuildEventMotd final : public ServerPacket
+ {
+ public:
+ GuildEventMotd() : ServerPacket(SMSG_GUILD_EVENT_MOTD, 1) { }
+
+ WorldPacket const* Write() override;
+
+ std::string MotdText;
+ };
+
+ class GuildEventPlayerJoined final : public ServerPacket
+ {
+ public:
+ GuildEventPlayerJoined() : ServerPacket(SMSG_GUILD_EVENT_PLAYER_JOINED, 21) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid Guid;
+ std::string Name;
+ uint32 VirtualRealmAddress = 0;
+ };
+
+ class GuildEventRankChanged final : public ServerPacket
+ {
+ public:
+ GuildEventRankChanged() : ServerPacket(SMSG_GUILD_EVENT_RANK_CHANGED, 4) { }
+
+ WorldPacket const* Write() override;
+
+ int32 RankID = 0;
+ };
+
+ class GuildEventRanksUpdated final : public ServerPacket
+ {
+ public:
+ GuildEventRanksUpdated() : ServerPacket(SMSG_GUILD_EVENT_RANKS_UPDATED, 0) { }
+
+ WorldPacket const* Write() override { return &_worldPacket; }
+ };
+
+ class GuildEventBankMoneyChanged final : public ServerPacket
+ {
+ public:
+ GuildEventBankMoneyChanged() : ServerPacket(SMSG_GUILD_EVENT_BANK_MONEY_CHANGED, 8) { }
+
+ WorldPacket const* Write() override;
+
+ uint64 Money = 0;
+ };
+
+ class GuildEventDisbanded final : public ServerPacket
+ {
+ public:
+ GuildEventDisbanded() : ServerPacket(SMSG_GUILD_EVENT_DISBANDED, 0) { }
+
+ WorldPacket const* Write() override { return &_worldPacket; }
+ };
+
+ 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(CMSG_GUILD_EVENT_LOG_QUERY, std::move(packet)) { }
+
+ void Read() override { }
+ };
+
+ class GuildEventLogQueryResults final : public ServerPacket
+ {
+ public:
+ GuildEventLogQueryResults() : ServerPacket(SMSG_GUILD_EVENT_LOG_QUERY_RESULT, 4) { }
+
+ WorldPacket const* Write() override;
+
+ std::vector<GuildEventEntry> Entry;
+ };
+
+ class GuildEventPlayerLeft final : public ServerPacket
+ {
+ public:
+ GuildEventPlayerLeft() : ServerPacket(SMSG_GUILD_EVENT_PLAYER_LEFT, 43) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid LeaverGUID;
+ std::string LeaverName;
+ uint32 LeaverVirtualRealmAddress = 0;
+ ObjectGuid RemoverGUID;
+ std::string RemoverName;
+ uint32 RemoverVirtualRealmAddress = 0;
+ bool Removed = false;
+ };
+
+ class GuildEventNewLeader final : public ServerPacket
+ {
+ public:
+ GuildEventNewLeader() : ServerPacket(SMSG_GUILD_EVENT_NEW_LEADER, 43) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid NewLeaderGUID;
+ std::string NewLeaderName;
+ uint32 NewLeaderVirtualRealmAddress = 0;
+ ObjectGuid OldLeaderGUID;
+ std::string OldLeaderName;
+ uint32 OldLeaderVirtualRealmAddress = 0;
+ bool SelfPromoted = false;
+ };
+
+ class GuildEventTabAdded final : public ServerPacket
+ {
+ public:
+ GuildEventTabAdded() : ServerPacket(SMSG_GUILD_EVENT_TAB_ADDED, 0) { }
+
+ WorldPacket const* Write() override { return &_worldPacket; }
+ };
+
+ class GuildEventTabModified final : public ServerPacket
+ {
+ public:
+ GuildEventTabModified() : ServerPacket(SMSG_GUILD_EVENT_TAB_MODIFIED, 6) { }
+
+ WorldPacket const* Write() override;
+
+ std::string Icon;
+ std::string Name;
+ int32 Tab = 0;
+ };
+
+ class GuildEventTabTextChanged final : public ServerPacket
+ {
+ public:
+ GuildEventTabTextChanged() : ServerPacket(SMSG_GUILD_EVENT_TAB_TEXT_CHANGED, 4) { }
+
+ WorldPacket const* Write() override;
+
+ int32 Tab = 0;
+ };
+
+ class GuildEventBankContentsChanged final : public ServerPacket
+ {
+ public:
+ GuildEventBankContentsChanged() : ServerPacket(SMSG_GUILD_EVENT_BANK_CONTENTS_CHANGED, 0) { }
+
+ WorldPacket const* Write() override { return &_worldPacket; }
+ };
+
+ class GuildPermissionsQuery final : public ClientPacket
+ {
+ public:
+ GuildPermissionsQuery(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_PERMISSIONS_QUERY, std::move(packet)) { }
+
+ void Read() override { }
+ };
+
+ class GuildPermissionsQueryResults final : public ServerPacket
+ {
+ public:
+ struct GuildRankTabPermissions
+ {
+ int32 Flags = 0;
+ int32 WithdrawItemLimit = 0;
+ };
+
+ GuildPermissionsQueryResults() : ServerPacket(SMSG_GUILD_PERMISSIONS_QUERY_RESULTS, 20) { }
+
+ WorldPacket const* Write() override;
+
+ int32 NumTabs = 0;
+ int32 WithdrawGoldLimit = 0;
+ int32 Flags = 0;
+ uint32 RankID = 0;
+ std::vector<GuildRankTabPermissions> Tab;
+ };
+
+ class GuildSetRankPermissions final : public ClientPacket
+ {
+ public:
+ GuildSetRankPermissions(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_SET_RANK_PERMISSIONS, std::move(packet)) { }
+
+ void Read() override;
+
+ int32 RankID = 0;
+ int32 RankOrder = 0;
+ int32 WithdrawGoldLimit = 0;
+ uint32 Flags = 0;
+ uint32 OldFlags = 0;
+ int32 TabFlags[GUILD_BANK_MAX_TABS];
+ int32 TabWithdrawItemLimit[GUILD_BANK_MAX_TABS];
+ std::string RankName;
+ };
+
+ class GuildAddRank final : public ClientPacket
+ {
+ public:
+ GuildAddRank(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_ADD_RANK, std::move(packet)) { }
+
+ void Read() override;
+
+ std::string Name;
+ int32 RankOrder = 0;
+ };
+
+ class GuildAssignMemberRank final : public ClientPacket
+ {
+ public:
+ GuildAssignMemberRank(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_ASSIGN_MEMBER_RANK, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid Member;
+ int32 RankOrder = 0;
+ };
+
+ class GuildDeleteRank final : public ClientPacket
+ {
+ public:
+ GuildDeleteRank(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_DELETE_RANK, std::move(packet)) { }
+
+ void Read() override;
+
+ int32 RankOrder = 0;
+ };
+
+ class GuildGetRanks final : public ClientPacket
+ {
+ public:
+ GuildGetRanks(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_GET_RANKS, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid GuildGUID;
+ };
+
+ struct GuildRankData
+ {
+ uint32 RankID = 0;
+ uint32 RankOrder = 0;
+ uint32 Flags = 0;
+ uint32 WithdrawGoldLimit = 0;
+ std::string RankName;
+ uint32 TabFlags[GUILD_BANK_MAX_TABS];
+ uint32 TabWithdrawItemLimit[GUILD_BANK_MAX_TABS];
+ };
+
+ class GuildRanks final : public ServerPacket
+ {
+ public:
+ GuildRanks() : ServerPacket(SMSG_GUILD_RANKS, 4) { }
+
+ WorldPacket const* Write() override;
+
+ std::vector<GuildRankData> Ranks;
+ };
+
+ class GuildSendRankChange final : public ServerPacket
+ {
+ public:
+ GuildSendRankChange() : ServerPacket(SMSG_GUILD_SEND_RANK_CHANGE, 43) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid Other;
+ ObjectGuid Officer;
+ bool Promote = false;
+ uint32 RankID = 0;
+ };
+
+ class GuildShiftRank final : public ClientPacket
+ {
+ public:
+ GuildShiftRank(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_SHIFT_RANK, std::move(packet)) { }
+
+ void Read() override;
+
+ bool ShiftUp = false;
+ int32 RankOrder = 0;
+ };
+
+ class GuildUpdateInfoText final : public ClientPacket
+ {
+ public:
+ GuildUpdateInfoText(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_UPDATE_INFO_TEXT, std::move(packet)) { }
+
+ void Read() override;
+
+ std::string InfoText;
+ };
+
+ class GuildSetMemberNote final : public ClientPacket
+ {
+ public:
+ GuildSetMemberNote(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_SET_MEMBER_NOTE, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid NoteeGUID;
+ bool IsPublic = false; ///< 0 == Officer, 1 == Public
+ std::string Note;
+ };
+
+ class GuildMemberUpdateNote final : public ServerPacket
+ {
+ public:
+ GuildMemberUpdateNote() : ServerPacket(SMSG_GUILD_MEMBER_UPDATE_NOTE, 21) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid Member;
+ bool IsPublic = false; ///< 0 == Officer, 1 == Public
+ std::string Note;
+ };
+
+ class GuildMemberDailyReset final : public ServerPacket
+ {
+ public:
+ GuildMemberDailyReset() : ServerPacket(SMSG_GUILD_MEMBER_DAILY_RESET, 0) { }
+
+ WorldPacket const* Write() override { return &_worldPacket; }
+ };
+
+ class GuildDelete final : public ClientPacket
+ {
+ public:
+ GuildDelete(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_DELETE, std::move(packet)) { }
+
+ void Read() override { }
+ };
+
+ class GuildDemoteMember final : public ClientPacket
+ {
+ public:
+ GuildDemoteMember(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_DEMOTE_MEMBER, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid Demotee;
+ };
+
+ class GuildPromoteMember final : public ClientPacket
+ {
+ public:
+ GuildPromoteMember(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_PROMOTE_MEMBER, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid Promotee;
+ };
+
+ class GuildOfficerRemoveMember : public ClientPacket
+ {
+ public:
+ GuildOfficerRemoveMember(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_OFFICER_REMOVE_MEMBER, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid Removee;
+ };
+
+ class GuildLeave final : public ClientPacket
+ {
+ public:
+ GuildLeave(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_LEAVE, std::move(packet)) { }
+
+ void Read() override { }
+ };
+
+ class GuildChangeNameRequest final : public ClientPacket
+ {
+ public:
+ GuildChangeNameRequest(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_CHANGE_NAME_REQUEST, std::move(packet)) { }
+
+ void Read() override;
+
+ std::string NewName;
+ };
+
+ class GuildFlaggedForRename final : public ServerPacket
+ {
+ public:
+ GuildFlaggedForRename() : ServerPacket(SMSG_GUILD_FLAGGED_FOR_RENAME, 1) { }
+
+ WorldPacket const* Write() override;
+
+ bool FlagSet = false;
+ };
+
+ class RequestGuildPartyState final : public ClientPacket
+ {
+ public:
+ RequestGuildPartyState(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_REQUEST_PARTY_STATE, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid GuildGUID;
+ };
+
+ class GuildPartyState final : public ServerPacket
+ {
+ public:
+ GuildPartyState() : ServerPacket(SMSG_GUILD_PARTY_STATE_RESPONSE, 15) { }
+
+ WorldPacket const* Write() override;
+
+ float GuildXPEarnedMult = 0.0f;
+ int32 NumMembers = 0;
+ int32 NumRequired = 0;
+ bool InGuildParty = false;
+ };
+
+ class RequestGuildRewardsList final : public ClientPacket
+ {
+ public:
+ RequestGuildRewardsList(WorldPacket&& packet) : ClientPacket(CMSG_REQUEST_GUILD_REWARDS_LIST, std::move(packet)) { }
+
+ void Read() override;
+
+ uint32 CurrentVersion = 0;
+ };
+
+ struct GuildRewardItem
+ {
+ uint32 ItemID = 0;
+ std::vector<uint32> AchievementsRequired;
+ uint32 RaceMask = 0;
+ int32 MinGuildLevel = 0;
+ int32 MinGuildRep = 0;
+ uint64 Cost = 0;
+ };
+
+ class GuildRewardList final : public ServerPacket
+ {
+ public:
+ GuildRewardList() : ServerPacket(SMSG_GUILD_REWARDS_LIST, 8) { }
+
+ WorldPacket const* Write() override;
+
+ std::vector<GuildRewardItem> RewardItems;
+ uint32 Version = 0;
+ };
+
+ class GuildBankActivate final : public ClientPacket
+ {
+ public:
+ GuildBankActivate(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_BANK_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;
+ std::string Name;
+ std::string Icon;
+ };
+
+ class GuildBankDepositMoney final : public ClientPacket
+ {
+ public:
+ GuildBankDepositMoney(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_BANK_DEPOSIT_MONEY, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid Banker;
+ uint64 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(CMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY_QUERY, std::move(packet)) { }
+
+ void Read() override { }
+ };
+
+ class GuildBankRemainingWithdrawMoney final : public ServerPacket
+ {
+ public:
+ GuildBankRemainingWithdrawMoney() : ServerPacket(SMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY, 8) { }
+
+ WorldPacket const* Write() override;
+
+ int64 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;
+ uint64 Money = 0;
+ };
+
+ struct GuildBankItemInfo
+ {
+ struct GuildBankSocketEnchant
+ {
+ int32 SocketIndex = 0;
+ int32 SocketEnchantID = 0;
+ };
+
+ WorldPackets::Item::ItemInstance Item;
+ int32 Slot = 0;
+ int32 Count = 0;
+ int32 EnchantmentID = 0;
+ int32 Charges = 0;
+ int32 OnUseEnchantmentID = 0;
+ int32 Flags = 0;
+ bool Locked = false;
+ std::vector<GuildBankSocketEnchant> SocketEnchant;
+ };
+
+ struct GuildBankTabInfo
+ {
+ int32 TabIndex = 0;
+ std::string Name;
+ std::string Icon;
+ };
+
+ class GuildBankQueryResults final : public ServerPacket
+ {
+ public:
+ GuildBankQueryResults() : ServerPacket(SMSG_GUILD_BANK_QUERY_RESULTS, 25) { }
+
+ WorldPacket const* Write() override;
+
+ std::vector<GuildBankItemInfo> ItemInfo;
+ std::vector<GuildBankTabInfo> TabInfo;
+ int32 WithdrawalsRemaining = 0;
+ int32 Tab = 0;
+ uint64 Money = 0;
+ bool FullUpdate = false;
+ };
+
+ 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(CMSG_GUILD_BANK_LOG_QUERY, std::move(packet)) { }
+
+ void Read() override;
+
+ int32 Tab = 0;
+ };
+
+ struct GuildBankLogEntry
+ {
+ ObjectGuid PlayerGUID;
+ uint32 TimeOffset = 0;
+ int8 EntryType = 0;
+ Optional<uint64> Money;
+ Optional<int32> ItemID;
+ Optional<int32> Count;
+ Optional<int8> OtherTab;
+ };
+
+ class GuildBankLogQueryResults final : public ServerPacket
+ {
+ public:
+ GuildBankLogQueryResults() : ServerPacket(SMSG_GUILD_BANK_LOG_QUERY_RESULT, 25) { }
+
+ WorldPacket const* Write() override;
+
+ int32 Tab = 0;
+ std::vector<GuildBankLogEntry> Entry;
+ Optional<uint64> WeeklyBonusMoney;
+ };
+
+ class GuildBankTextQuery final : public ClientPacket
+ {
+ public:
+ GuildBankTextQuery(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_BANK_TEXT_QUERY, std::move(packet)) { }
+
+ void Read() override;
+
+ int32 Tab = 0;
+ };
+
+ class GuildBankTextQueryResult : public ServerPacket
+ {
+ public:
+ GuildBankTextQueryResult() : ServerPacket(SMSG_GUILD_BANK_TEXT_QUERY_RESULT, 5) { }
+
+ WorldPacket const* Write() override;
+
+ int32 Tab = 0;
+ std::string Text;
+ };
+
+ class GuildBankSetTabText final : public ClientPacket
+ {
+ public:
+ GuildBankSetTabText(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_BANK_SET_TAB_TEXT, std::move(packet)) { }
+
+ void Read() override;
+
+ int32 Tab = 0;
+ std::string TabText;
+ };
+
+ class GuildQueryNews final : public ClientPacket
+ {
+ public:
+ GuildQueryNews(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_QUERY_NEWS, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid GuildGUID;
+ };
+
+ struct GuildNewsEvent
+ {
+ int32 Id = 0;
+ uint32 CompletedDate = 0;
+ int32 Type = 0;
+ int32 Flags = 0;
+ int32 Data[2];
+ ObjectGuid MemberGuid;
+ GuidList MemberList;
+ Optional<Item::ItemInstance> Item;
+ };
+
+ class GuildNews final : public ServerPacket
+ {
+ public:
+ GuildNews() : ServerPacket(SMSG_GUILD_NEWS, 25) { }
+
+ WorldPacket const* Write() override;
+
+ std::vector<GuildNewsEvent> NewsEvents;
+ };
+
+ class GuildNewsUpdateSticky final : public ClientPacket
+ {
+ public:
+ GuildNewsUpdateSticky(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_NEWS_UPDATE_STICKY, std::move(packet)) { }
+
+ void Read() override;
+
+ int32 NewsID = 0;
+ ObjectGuid GuildGUID;
+ bool Sticky = false;
+ };
+
+ class GuildSetGuildMaster final : public ClientPacket
+ {
+ public:
+ GuildSetGuildMaster(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_SET_GUILD_MASTER, std::move(packet)) { }
+
+ void Read() override;
+
+ std::string NewMasterName;
+ };
+
+ class GuildChallengeUpdateRequest final : public ClientPacket
+ {
+ public:
+ GuildChallengeUpdateRequest(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_CHALLENGE_UPDATE_REQUEST, std::move(packet)) { }
+
+ void Read() override { }
+ };
+
+ class GuildChallengeUpdate final : public ServerPacket
+ {
+ public:
+ GuildChallengeUpdate() : ServerPacket(SMSG_GUILD_CHALLENGE_UPDATE, 120) { }
+
+ WorldPacket const* Write() override;
+
+ int32 CurrentCount[GUILD_CHALLENGES_TYPES];
+ int32 MaxCount[GUILD_CHALLENGES_TYPES];
+ int32 Gold[GUILD_CHALLENGES_TYPES];
+ int32 MaxLevelGold[GUILD_CHALLENGES_TYPES];
+ };
+
+ class SaveGuildEmblem final : public ClientPacket
+ {
+ public:
+ SaveGuildEmblem(WorldPacket&& packet) : ClientPacket(CMSG_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(SMSG_SAVE_GUILD_EMBLEM, 4) { }
+
+ WorldPacket const* Write() override;
+
+ int32 Error = 0;
+ };
}
}
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRosterProfessionData const& rosterProfessionData);
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRosterMemberData const& rosterMemberData);
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRankData const& rankData);
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRewardItem const& rewardItem);
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildNewsEvent const& newsEvent);
+
#endif // GuildPackets_h__
diff --git a/src/server/game/Server/Packets/MailPackets.h b/src/server/game/Server/Packets/MailPackets.h
index 8019c274191..281a48b7248 100644
--- a/src/server/game/Server/Packets/MailPackets.h
+++ b/src/server/game/Server/Packets/MailPackets.h
@@ -38,7 +38,7 @@ namespace WorldPackets
struct MailAttachedItem
{
- MailAttachedItem(::Item const* item, uint8 pos);
+ MailAttachedItem(::Item const* item, uint8 pos);
uint8 Position = 0;
int32 AttachID = 0;
@@ -126,7 +126,7 @@ namespace WorldPackets
std::string Body;
std::vector<MailAttachment> Attachments;
};
-
+
SendMail(WorldPacket&& packet) : ClientPacket(CMSG_SEND_MAIL, std::move(packet)) { }
void Read() override;
diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h
index 53fd7ce8796..9dd39e4c3d9 100644
--- a/src/server/game/Server/Packets/MiscPackets.h
+++ b/src/server/game/Server/Packets/MiscPackets.h
@@ -53,7 +53,7 @@ namespace WorldPackets
ObjectGuid BinderID;
uint32 AreaID = 0;
};
-
+
class BinderConfirm final : public ServerPacket
{
public:
diff --git a/src/server/game/Server/Packets/NPCPackets.cpp b/src/server/game/Server/Packets/NPCPackets.cpp
index 1b1ef3ce613..4dc3d66a852 100644
--- a/src/server/game/Server/Packets/NPCPackets.cpp
+++ b/src/server/game/Server/Packets/NPCPackets.cpp
@@ -135,3 +135,9 @@ void WorldPackets::NPC::GossipSelectOption::Read()
uint32 length = _worldPacket.ReadBits(8);
PromotionCode = _worldPacket.ReadString(length);
}
+WorldPacket const* WorldPackets::NPC::PlayerTabardVendorActivate::Write()
+{
+ _worldPacket << Vendor;
+
+ return &_worldPacket;
+}
diff --git a/src/server/game/Server/Packets/NPCPackets.h b/src/server/game/Server/Packets/NPCPackets.h
index 50c174539b5..bce5dbbd074 100644
--- a/src/server/game/Server/Packets/NPCPackets.h
+++ b/src/server/game/Server/Packets/NPCPackets.h
@@ -158,6 +158,16 @@ namespace WorldPackets
ObjectGuid Guid;
};
+
+ class PlayerTabardVendorActivate final : public ServerPacket
+ {
+ public:
+ PlayerTabardVendorActivate() : ServerPacket(SMSG_TABARD_VENDOR_ACTIVATE, 16) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid Vendor;
+ };
}
}
diff --git a/src/server/game/Server/Packets/PetitionPackets.cpp b/src/server/game/Server/Packets/PetitionPackets.cpp
new file mode 100644
index 00000000000..936dea3d3a4
--- /dev/null
+++ b/src/server/game/Server/Packets/PetitionPackets.cpp
@@ -0,0 +1,192 @@
+/*
+* Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/>
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of the GNU General Public License as published by the
+* Free Software Foundation; either version 2 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 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 "PetitionPackets.h"
+
+void WorldPackets::Petition::QueryPetition::Read()
+{
+ _worldPacket >> PetitionID;
+ _worldPacket >> ItemGUID;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Petition::PetitionInfo const& petitionInfo)
+{
+ data << petitionInfo.PetitionID;
+ data << petitionInfo.Petitioner;
+
+ data << petitionInfo.MinSignatures;
+ data << petitionInfo.MaxSignatures;
+ data << petitionInfo.DeadLine;
+ data << petitionInfo.IssueDate;
+ data << petitionInfo.AllowedGuildID;
+ data << petitionInfo.AllowedClasses;
+ data << petitionInfo.AllowedRaces;
+ data << petitionInfo.AllowedGender;
+ data << petitionInfo.AllowedMinLevel;
+ data << petitionInfo.AllowedMaxLevel;
+ data << petitionInfo.NumChoices;
+ data << petitionInfo.StaticType;
+ data << petitionInfo.Muid;
+
+ data.WriteBits(petitionInfo.Title.length(), 7);
+ data.WriteBits(petitionInfo.BodyText.length(), 12);
+
+ for (uint8 i = 0; i < 10; i++)
+ data.WriteBits(petitionInfo.Choicetext[i].length(), 6);
+
+ data.FlushBits();
+
+ for (uint8 i = 0; i < 10; i++)
+ data.WriteString(petitionInfo.Choicetext[i]);
+
+ data.WriteString(petitionInfo.Title);
+ data.WriteString(petitionInfo.BodyText);
+
+ return data;
+}
+
+WorldPacket const* WorldPackets::Petition::QueryPetitionResponse::Write()
+{
+ _worldPacket << PetitionID;
+ _worldPacket.WriteBit(Allow);
+ _worldPacket.FlushBits();
+
+ if (Allow)
+ _worldPacket << Info;
+
+ return &_worldPacket;
+}
+
+void WorldPackets::Petition::PetitionShowList::Read()
+{
+ _worldPacket >> PetitionUnit;
+}
+
+WorldPacket const* WorldPackets::Petition::ServerPetitionShowList::Write()
+{
+ _worldPacket << Unit;
+ _worldPacket << Price;
+
+ return &_worldPacket;
+}
+
+void WorldPackets::Petition::PetitionBuy::Read()
+{
+ uint32 titleLen = _worldPacket.ReadBits(7);
+
+ _worldPacket >> Unit;
+ Title = _worldPacket.ReadString(titleLen);
+}
+
+void WorldPackets::Petition::PetitionShowSignatures::Read()
+{
+ _worldPacket >> Item;
+}
+
+WorldPacket const* WorldPackets::Petition::ServerPetitionShowSignatures::Write()
+{
+ _worldPacket << Item;
+ _worldPacket << Owner;
+ _worldPacket << OwnerAccountID;
+ _worldPacket << PetitionID;
+
+ _worldPacket << uint32(Signatures.size());
+ for (PetitionSignature signature : Signatures)
+ {
+ _worldPacket << signature.Signer;
+ _worldPacket << signature.Choice;
+ }
+
+ return &_worldPacket;
+}
+
+void WorldPackets::Petition::SignPetition::Read()
+{
+ _worldPacket >> PetitionGUID;
+ _worldPacket >> Choice;
+}
+
+WorldPacket const* WorldPackets::Petition::PetitionSignResults::Write()
+{
+ _worldPacket << Item;
+ _worldPacket << Player;
+
+ _worldPacket.WriteBits(Error, 4);
+ _worldPacket.FlushBits();
+
+ return &_worldPacket;
+}
+
+WorldPacket const* WorldPackets::Petition::PetitionAlreadySigned::Write()
+{
+ _worldPacket << SignerGUID;
+
+ return &_worldPacket;
+}
+
+void WorldPackets::Petition::DeclinePetition::Read()
+{
+ _worldPacket >> PetitionGUID;
+}
+
+void WorldPackets::Petition::TurnInPetition::Read()
+{
+ _worldPacket >> Item;
+}
+
+WorldPacket const* WorldPackets::Petition::TurnInPetitionResult::Write()
+{
+ _worldPacket.WriteBits(Result, 4);
+ _worldPacket.FlushBits();
+
+ return &_worldPacket;
+}
+
+void WorldPackets::Petition::OfferPetition::Read()
+{
+ _worldPacket >> ItemGUID;
+ _worldPacket >> TargetPlayer;
+}
+
+WorldPacket const* WorldPackets::Petition::OfferPetitionError::Write()
+{
+ _worldPacket << PlayerGUID;
+
+ return &_worldPacket;
+}
+
+void WorldPackets::Petition::PetitionRenameGuild::Read()
+{
+ _worldPacket >> PetitionGuid;
+
+ _worldPacket.ResetBitPos();
+ uint32 nameLen = _worldPacket.ReadBits(7);
+
+ NewGuildName = _worldPacket.ReadString(nameLen);
+}
+
+WorldPacket const* WorldPackets::Petition::PetitionRenameGuildResponse::Write()
+{
+ _worldPacket << PetitionGuid;
+
+ _worldPacket.WriteBits(NewGuildName.length(), 7);
+ _worldPacket.FlushBits();
+
+ _worldPacket.WriteString(NewGuildName);
+
+ return &_worldPacket;
+}
diff --git a/src/server/game/Server/Packets/PetitionPackets.h b/src/server/game/Server/Packets/PetitionPackets.h
new file mode 100644
index 00000000000..fe136508547
--- /dev/null
+++ b/src/server/game/Server/Packets/PetitionPackets.h
@@ -0,0 +1,246 @@
+/*
+* Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/>
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of the GNU General Public License as published by the
+* Free Software Foundation; either version 2 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 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 PetitionPackets_h__
+#define PetitionPackets_h__
+
+#include "Packet.h"
+#include "ObjectGuid.h"
+#include "WorldSession.h"
+
+namespace WorldPackets
+{
+ namespace Petition
+ {
+ class QueryPetition final : public ClientPacket
+ {
+ public:
+ QueryPetition(WorldPacket&& packet) : ClientPacket(CMSG_QUERY_PETITION, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid ItemGUID;
+ uint32 PetitionID = 0;
+ };
+
+ struct PetitionInfo
+ {
+ int32 PetitionID = 0;
+ ObjectGuid Petitioner;
+ std::string Title;
+ std::string BodyText;
+ int32 MinSignatures = 0;
+ int32 MaxSignatures = 0;
+ int32 DeadLine = 0;
+ int32 IssueDate = 0;
+ int32 AllowedGuildID = 0;
+ int32 AllowedClasses = 0;
+ int32 AllowedRaces = 0;
+ int16 AllowedGender = 0;
+ int32 AllowedMinLevel = 0;
+ int32 AllowedMaxLevel = 0;
+ int32 NumChoices = 0;
+ int32 StaticType = 0;
+ uint32 Muid = 0;
+ std::string Choicetext[10];
+ };
+
+ class QueryPetitionResponse final : public ServerPacket
+ {
+ public:
+ QueryPetitionResponse() : ServerPacket(SMSG_QUERY_PETITION_RESPONSE, 75) { }
+
+ WorldPacket const* Write() override;
+
+ uint32 PetitionID = 0;
+ bool Allow = false;
+ PetitionInfo Info;
+ };
+
+ class PetitionShowList final : public ClientPacket
+ {
+ public:
+ PetitionShowList(WorldPacket&& packet) : ClientPacket(CMSG_PETITION_SHOW_LIST, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid PetitionUnit;
+ };
+
+ class ServerPetitionShowList final : public ServerPacket
+ {
+ public:
+ ServerPetitionShowList() : ServerPacket(SMSG_PETITION_SHOW_LIST, 20) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid Unit;
+ uint32 Price = 0;
+ };
+
+ class PetitionBuy final : public ClientPacket
+ {
+ public:
+ PetitionBuy(WorldPacket&& packet) : ClientPacket(CMSG_PETITION_BUY, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid Unit;
+ std::string Title;
+ };
+
+ class PetitionShowSignatures final : public ClientPacket
+ {
+ public:
+ PetitionShowSignatures(WorldPacket&& packet) : ClientPacket(CMSG_PETITION_SHOW_SIGNATURES, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid Item;
+ };
+
+ class ServerPetitionShowSignatures final : public ServerPacket
+ {
+ public:
+ struct PetitionSignature
+ {
+ ObjectGuid Signer;
+ int32 Choice = 0;
+ };
+
+ ServerPetitionShowSignatures() : ServerPacket(SMSG_PETITION_SHOW_SIGNATURES, 40) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid Item;
+ ObjectGuid Owner;
+ ObjectGuid OwnerAccountID;
+ int32 PetitionID = 0;
+ std::vector<PetitionSignature> Signatures;
+ };
+
+ class SignPetition final : public ClientPacket
+ {
+ public:
+ SignPetition(WorldPacket&& packet) : ClientPacket(CMSG_SIGN_PETITION, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid PetitionGUID;
+ uint8 Choice = 0;
+ };
+
+ class PetitionSignResults final : public ServerPacket
+ {
+ public:
+ PetitionSignResults() : ServerPacket(SMSG_PETITION_SIGN_RESULTS, 33) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid Item;
+ ObjectGuid Player;
+ int32 Error = 0; // PetitionError
+ };
+
+ class PetitionAlreadySigned final : public ServerPacket
+ {
+ public:
+ PetitionAlreadySigned() : ServerPacket(SMSG_PETITION_ALREADY_SIGNED, 16) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid SignerGUID;
+ };
+
+ class DeclinePetition final : public ClientPacket
+ {
+ public:
+ DeclinePetition(WorldPacket&& packet) : ClientPacket(CMSG_DECLINE_PETITION, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid PetitionGUID;
+ };
+
+ class TurnInPetition final : public ClientPacket
+ {
+ public:
+ TurnInPetition(WorldPacket&& packet) : ClientPacket(CMSG_TURN_IN_PETITION, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid Item;
+ };
+
+ class TurnInPetitionResult final : public ServerPacket
+ {
+ public:
+ TurnInPetitionResult() : ServerPacket(SMSG_TURN_IN_PETITION_RESULTS, 4) { }
+
+ WorldPacket const* Write() override;
+
+ int32 Result = 0; // PetitionError
+ };
+
+ class OfferPetition final : public ClientPacket
+ {
+ public:
+ OfferPetition(WorldPacket&& packet) : ClientPacket(CMSG_OFFER_PETITION, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid TargetPlayer;
+ ObjectGuid ItemGUID;
+ };
+
+ class OfferPetitionError final : public ServerPacket
+ {
+ public:
+ OfferPetitionError() : ServerPacket(SMSG_OFFER_PETITION_ERROR, 16) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid PlayerGUID;
+ };
+
+ class PetitionRenameGuild final : public ClientPacket
+ {
+ public:
+ PetitionRenameGuild(WorldPacket&& packet) : ClientPacket(CMSG_PETITION_RENAME_GUILD, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid PetitionGuid;
+ std::string NewGuildName;
+ };
+
+ class PetitionRenameGuildResponse final : public ServerPacket
+ {
+ public:
+ PetitionRenameGuildResponse() : ServerPacket(SMSG_PETITION_RENAME_GUILD_RESPONSE, 20) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid PetitionGuid;
+ std::string NewGuildName;
+ };
+ }
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Petition::PetitionInfo const& petitionInfo);
+
+#endif // PetitionPackets_h__
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index e29624e90e6..b2c31859d39 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -37,6 +37,7 @@
#include "Packets/MiscPackets.h"
#include "Packets/MovementPackets.h"
#include "Packets/NPCPackets.h"
+#include "Packets/PetitionPackets.h"
#include "Packets/QueryPackets.h"
#include "Packets/QuestPackets.h"
#include "Packets/SocialPackets.h"
@@ -141,7 +142,7 @@ void OpcodeTable::Initialize()
#define DEFINE_HANDLER(opcode, status, processing, packetclass, handler) \
ValidateAndSetClientOpcode<packetclass, handler>(opcode, #opcode, status, processing);
- DEFINE_OPCODE_HANDLER_OLD(CMSG_ACCEPT_GUILD_INVITE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
+ DEFINE_HANDLER(CMSG_ACCEPT_GUILD_INVITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::AcceptGuildInvite, &WorldSession::HandleGuildAcceptInvite);
DEFINE_OPCODE_HANDLER_OLD(CMSG_ACCEPT_LEVEL_GRANT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleAcceptGrantLevel );
DEFINE_OPCODE_HANDLER_OLD(CMSG_ACCEPT_TRADE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleAcceptTradeOpcode );
DEFINE_OPCODE_HANDLER_OLD(CMSG_ACCEPT_WARGAME_INVITE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
@@ -185,7 +186,6 @@ void OpcodeTable::Initialize()
DEFINE_OPCODE_HANDLER_OLD(CMSG_AUTOSTORE_BANK_ITEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoStoreBankItemOpcode );
DEFINE_OPCODE_HANDLER_OLD(CMSG_AUTOSTORE_GROUND_ITEM, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_HANDLER(CMSG_AUTOSTORE_LOOT_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Loot::AutoStoreLootItem, &WorldSession::HandleAutostoreLootItemOpcode);
- DEFINE_OPCODE_HANDLER_OLD(CMSG_AUTO_DECLINE_GUILD_INVITES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoDeclineGuildInvites );
DEFINE_HANDLER(CMSG_BANKER_ACTIVATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::NPC::Hello, &WorldSession::HandleBankerActivateOpcode);
DEFINE_OPCODE_HANDLER_OLD(CMSG_BATTLEFIELD_JOIN, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_BATTLEFIELD_LEAVE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::HandleBattlefieldLeaveOpcode );
@@ -325,8 +325,8 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_CREATURE_QUERY, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Query::QueryCreature, &WorldSession::HandleCreatureQuery);
DEFINE_OPCODE_HANDLER_OLD(CMSG_DANCE_QUERY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_HANDLER(CMSG_DB_QUERY_BULK, STATUS_AUTHED, PROCESS_INPLACE, WorldPackets::Query::DBQueryBulk, &WorldSession::HandleDBQueryBulk);
- DEFINE_OPCODE_HANDLER_OLD(CMSG_DECLINE_GUILD_INVITES, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_DECLINE_PETITION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandlePetitionDeclineOpcode );
+ DEFINE_HANDLER(CMSG_DECLINE_GUILD_INVITES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::DeclineGuildInvites, &WorldSession::HandleDeclineGuildInvites);
+ DEFINE_HANDLER(CMSG_DECLINE_PETITION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Petition::DeclinePetition, &WorldSession::HandleDeclinePetition);
DEFINE_OPCODE_HANDLER_OLD(CMSG_DELETE_EQUIPMENT_SET, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleEquipmentSetDelete );
DEFINE_HANDLER(CMSG_DEL_FRIEND, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Social::DelFriend, &WorldSession::HandleDelFriendOpcode);
DEFINE_HANDLER(CMSG_DEL_IGNORE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Social::DelIgnore, &WorldSession::HandleDelIgnoreOpcode);
@@ -408,60 +408,52 @@ void OpcodeTable::Initialize()
DEFINE_OPCODE_HANDLER_OLD(CMSG_GROUP_SET_LEADER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGroupSetLeaderOpcode );
DEFINE_OPCODE_HANDLER_OLD(CMSG_GROUP_SET_ROLES, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::HandleGroupSetRolesOpcode );
DEFINE_OPCODE_HANDLER_OLD(CMSG_GROUP_SWAP_SUB_GROUP, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGroupSwapSubGroupOpcode );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_ACCEPT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildAcceptOpcode );
DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_ADD_BATTLENET_FRIEND, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_ADD_RANK, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildAddRankOpcode );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_ASSIGN_MEMBER_RANK, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildAssignRankOpcode );
+ DEFINE_HANDLER(CMSG_GUILD_ADD_RANK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildAddRank, &WorldSession::HandleGuildAddRank);
+ DEFINE_HANDLER(CMSG_GUILD_ASSIGN_MEMBER_RANK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildAssignMemberRank, &WorldSession::HandleGuildAssignRank);
DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_AUTO_DECLINE_INVITATION, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_BANKER_ACTIVATE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankerActivate );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_BANK_BUY_TAB, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankBuyTab );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_BANK_DEPOSIT_MONEY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankDepositMoney );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_BANK_LOG_QUERY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankLogQuery );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_BANK_MONEY_WITHDRAWN_QUERY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankMoneyWithdrawn );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_BANK_NOTE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_BANK_QUERY_TAB, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankQueryTab );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_BANK_QUERY_TEXT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleQueryGuildBankTabText );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY_QUERY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_BANK_SET_TAB_TEXT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_BANK_SWAP_ITEMS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankSwapItems );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_BANK_UPDATE_TAB, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankUpdateTab );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_BANK_WITHDRAW_MONEY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankWithdrawMoney );
+ DEFINE_HANDLER(CMSG_GUILD_BANK_ACTIVATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildBankActivate, &WorldSession::HandleGuildBankActivate);
+ DEFINE_HANDLER(CMSG_GUILD_BANK_BUY_TAB, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildBankBuyTab, &WorldSession::HandleGuildBankBuyTab);
+ DEFINE_HANDLER(CMSG_GUILD_BANK_DEPOSIT_MONEY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildBankDepositMoney, &WorldSession::HandleGuildBankDepositMoney);
+ DEFINE_HANDLER(CMSG_GUILD_BANK_LOG_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildBankLogQuery, &WorldSession::HandleGuildBankLogQuery);
+ DEFINE_HANDLER(CMSG_GUILD_BANK_QUERY_TAB, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildBankQueryTab, &WorldSession::HandleGuildBankQueryTab);
+ DEFINE_HANDLER(CMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildBankRemainingWithdrawMoneyQuery, &WorldSession::HandleGuildBankMoneyWithdrawn);
+ DEFINE_HANDLER(CMSG_GUILD_BANK_SET_TAB_TEXT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildBankSetTabText, &WorldSession::HandleGuildBankSetTabText);
+ DEFINE_HANDLER(CMSG_GUILD_BANK_SWAP_ITEMS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildBankSwapItems, &WorldSession::HandleGuildBankSwapItems);
+ DEFINE_HANDLER(CMSG_GUILD_BANK_TEXT_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildBankTextQuery, &WorldSession::HandleGuildBankTextQuery);
+ DEFINE_HANDLER(CMSG_GUILD_BANK_UPDATE_TAB, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildBankUpdateTab, &WorldSession::HandleGuildBankUpdateTab);
+ DEFINE_HANDLER(CMSG_GUILD_BANK_WITHDRAW_MONEY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildBankWithdrawMoney, &WorldSession::HandleGuildBankWithdrawMoney);
+ DEFINE_HANDLER(CMSG_GUILD_CHALLENGE_UPDATE_REQUEST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildChallengeUpdateRequest, &WorldSession::HandleGuildChallengeUpdateRequest);
DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_CHANGE_NAME_REQUEST, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_DECLINE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildDeclineOpcode );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_DELETE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_DELETE_RANK, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildDeleteRankOpcode );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_DEMOTE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildDemoteOpcode );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_DISBAND, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildDisbandOpcode );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_EVENT_LOG_QUERY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildEventLogQueryOpcode );
+ DEFINE_HANDLER(CMSG_GUILD_DECLINE_INVITATION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildDeclineInvitation, &WorldSession::HandleGuildDeclineInvitation);
+ DEFINE_HANDLER(CMSG_GUILD_DELETE_RANK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildDeleteRank, &WorldSession::HandleGuildDeleteRank);
+ DEFINE_HANDLER(CMSG_GUILD_DEMOTE_MEMBER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildDemoteMember, &WorldSession::HandleGuildDemoteMember);
+ DEFINE_HANDLER(CMSG_GUILD_DELETE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildDelete, &WorldSession::HandleGuildDelete);
+ DEFINE_HANDLER(CMSG_GUILD_EVENT_LOG_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildEventLogQuery, &WorldSession::HandleGuildEventLogQuery);
DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_GET_ACHIEVEMENT_MEMBERS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_GET_RANKS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildGetRanksOpcode );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_GET_ROSTER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildRosterOpcode );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_INVITE_BY_NAME, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildInviteOpcode );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_LEAVE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildLeaveOpcode );
+ DEFINE_HANDLER(CMSG_GUILD_GET_RANKS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildGetRanks, &WorldSession::HandleGuildGetRanks);
+ DEFINE_HANDLER(CMSG_GUILD_GET_ROSTER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildGetRoster, &WorldSession::HandleGuildGetRoster);
+ DEFINE_HANDLER(CMSG_GUILD_INVITE_BY_NAME, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildInviteByName, &WorldSession::HandleGuildInviteByName);
+ DEFINE_HANDLER(CMSG_GUILD_LEAVE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildLeave, &WorldSession::HandleGuildLeave);
DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_MEMBER_SEND_SOR_REQUEST, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_NEWS_UPDATE_STICKY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::HandleGuildNewsUpdateStickyOpcode);
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_OFFICER_REMOVE_MEMBER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildOfficerRemoveMemberOpcode);
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_PERMISSIONS_QUERY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildPermissions );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_PROMOTE_MEMBER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildPromoteOpcode );
+ DEFINE_HANDLER(CMSG_GUILD_NEWS_UPDATE_STICKY, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Guild::GuildNewsUpdateSticky, &WorldSession::HandleGuildNewsUpdateSticky);
+ DEFINE_HANDLER(CMSG_GUILD_OFFICER_REMOVE_MEMBER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildOfficerRemoveMember, &WorldSession::HandleGuildOfficerRemoveMember);
+ DEFINE_HANDLER(CMSG_GUILD_PERMISSIONS_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildPermissionsQuery, &WorldSession::HandleGuildPermissionsQuery);
+ DEFINE_HANDLER(CMSG_GUILD_PROMOTE_MEMBER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildPromoteMember, &WorldSession::HandleGuildPromoteMember);
DEFINE_HANDLER(CMSG_GUILD_QUERY, STATUS_AUTHED, PROCESS_THREADUNSAFE, WorldPackets::Guild::QueryGuildInfo, &WorldSession::HandleGuildQueryOpcode);
DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_QUERY_MEMBERS_FOR_RECIPE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_QUERY_MEMBER_RECIPES, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_QUERY_NEWS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::HandleGuildQueryNewsOpcode );
+ DEFINE_HANDLER(CMSG_GUILD_QUERY_NEWS, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Guild::GuildQueryNews, &WorldSession::HandleGuildQueryNews);
DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_QUERY_RECIPES, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_REPLACE_GUILD_MASTER, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_REQUEST_CHALLENGE_INFO, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_REQUEST_CHALLENGE_UPDATE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildRequestChallengeUpdate);
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_REQUEST_MAX_DAILY_XP, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildRequestMaxDailyXP );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_REQUEST_PARTY_STATE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildRequestPartyState );
+ DEFINE_HANDLER(CMSG_GUILD_REQUEST_PARTY_STATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::RequestGuildPartyState, &WorldSession::HandleGuildRequestPartyState);
DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_SET_ACHIEVEMENT_TRACKING, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildSetAchievementTracking);
- DEFINE_HANDLER(CMSG_GUILD_SET_FOCUSED_ACHIEVEMENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Achievement::GuildSetFocusedAchievement, &WorldSession::HandleGuildSetFocusedAchievement);
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_SET_GUILD_MASTER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildSetGuildMaster );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_SET_MEMBER_NOTE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_SET_NOTE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildSetNoteOpcode );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_SET_RANK_PERMISSIONS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildSetRankPermissionsOpcode);
+ DEFINE_HANDLER(CMSG_GUILD_SET_GUILD_MASTER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildSetGuildMaster, &WorldSession::HandleGuildSetGuildMaster);
+ DEFINE_HANDLER(CMSG_GUILD_SET_MEMBER_NOTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildSetMemberNote, &WorldSession::HandleGuildSetMemberNote);
+ DEFINE_HANDLER(CMSG_GUILD_SET_RANK_PERMISSIONS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildSetRankPermissions, &WorldSession::HandleGuildSetRankPermissions);
DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_SHIFT_RANK, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_UPDATE_INFO_TEXT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildChangeInfoTextOpcode );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_UPDATE_MOTD_TEXT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildMOTDOpcode );
+ DEFINE_HANDLER(CMSG_GUILD_UPDATE_INFO_TEXT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildUpdateInfoText, &WorldSession::HandleGuildUpdateInfoText);
+ DEFINE_HANDLER(CMSG_GUILD_UPDATE_MOTD_TEXT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildUpdateMotdText, &WorldSession::HandleGuildUpdateMotdText);
DEFINE_OPCODE_HANDLER_OLD(CMSG_HEARTH_AND_RESURRECT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleHearthAndResurrect );
DEFINE_OPCODE_HANDLER_OLD(CMSG_IGNORE_TRADE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleIgnoreTradeOpcode );
DEFINE_OPCODE_HANDLER_OLD(CMSG_INCREASE_CAST_TIME_FOR_SPELL, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
@@ -507,9 +499,8 @@ void OpcodeTable::Initialize()
DEFINE_OPCODE_HANDLER_OLD(CMSG_LF_GUILD_BROWSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildFinderBrowse );
DEFINE_OPCODE_HANDLER_OLD(CMSG_LF_GUILD_DECLINE_RECRUIT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildFinderDeclineRecruit );
DEFINE_OPCODE_HANDLER_OLD(CMSG_LF_GUILD_GET_APPLICATIONS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildFinderGetApplications);
- DEFINE_OPCODE_HANDLER_OLD(CMSG_LF_GUILD_GET_GUILD_POST, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
+ DEFINE_OPCODE_HANDLER_OLD(CMSG_LF_GUILD_GET_GUILD_POST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildFinderPostRequest );
DEFINE_OPCODE_HANDLER_OLD(CMSG_LF_GUILD_GET_RECRUITS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildFinderGetRecruits );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_LF_GUILD_POST_REQUEST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildFinderPostRequest );
DEFINE_OPCODE_HANDLER_OLD(CMSG_LF_GUILD_REMOVE_RECRUIT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildFinderRemoveRecruit );
DEFINE_OPCODE_HANDLER_OLD(CMSG_LF_GUILD_SET_GUILD_POST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildFinderSetGuildPost );
DEFINE_HANDLER(CMSG_LIST_INVENTORY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::NPC::Hello, &WorldSession::HandleListInventoryOpcode);
@@ -635,7 +626,7 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_NPC_TEXT_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Query::QueryNPCText, &WorldSession::HandleNpcTextQueryOpcode);
DEFINE_OPCODE_HANDLER_OLD(CMSG_OBJECT_UPDATE_FAILED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::HandleObjectUpdateFailedOpcode );
DEFINE_OPCODE_HANDLER_OLD(CMSG_OBJECT_UPDATE_RESCUED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_OFFER_PETITION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleOfferPetitionOpcode );
+ DEFINE_HANDLER(CMSG_OFFER_PETITION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Petition::OfferPetition, &WorldSession::HandleOfferPetition);
DEFINE_OPCODE_HANDLER_OLD(CMSG_OPENING_CINEMATIC, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleOpeningCinematic );
DEFINE_OPCODE_HANDLER_OLD(CMSG_OPEN_GARRISON_MISSION_NPC, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_OPEN_ITEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleOpenItemOpcode );
@@ -648,12 +639,10 @@ void OpcodeTable::Initialize()
DEFINE_OPCODE_HANDLER_OLD(CMSG_PARTY_SILENCE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_PARTY_UNINVITE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGroupUninviteOpcode );
DEFINE_OPCODE_HANDLER_OLD(CMSG_PARTY_UNSILENCE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_PETITION_BUY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandlePetitionBuyOpcode );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_PETITION_QUERY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandlePetitionQueryOpcode );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_PETITION_RENAME_GUILD, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandlePetitionRenameGuildOpcode );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_PETITION_SHOW_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandlePetitionShowListOpcode );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_PETITION_SHOW_SIGNATURES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandlePetitionShowSignOpcode );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_PETITION_SIGN, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandlePetitionSignOpcode );
+ DEFINE_HANDLER(CMSG_PETITION_BUY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Petition::PetitionBuy, &WorldSession::HandlePetitionBuy);
+ DEFINE_HANDLER(CMSG_PETITION_RENAME_GUILD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Petition::PetitionRenameGuild, &WorldSession::HandlePetitionRenameGuild);
+ DEFINE_HANDLER(CMSG_PETITION_SHOW_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Petition::PetitionShowList, &WorldSession::HandlePetitionShowList);
+ DEFINE_HANDLER(CMSG_PETITION_SHOW_SIGNATURES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Petition::PetitionShowSignatures, &WorldSession::HandlePetitionShowSignatures);
DEFINE_OPCODE_HANDLER_OLD(CMSG_PET_ABANDON, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandlePetAbandon );
DEFINE_OPCODE_HANDLER_OLD(CMSG_PET_ACTION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandlePetAction );
DEFINE_OPCODE_HANDLER_OLD(CMSG_PET_BATTLE_FINAL_NOTIF, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
@@ -686,10 +675,7 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Query::QueryCorpseLocationFromClient, &WorldSession::HandleQueryCorpseLocation);
DEFINE_HANDLER(CMSG_QUERY_CORPSE_TRANSPORT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Query::QueryCorpseTransport, &WorldSession::HandleQueryCorpseTransport);
DEFINE_OPCODE_HANDLER_OLD(CMSG_QUERY_COUNTDOWN_TIMER, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_QUERY_GUILD_XP, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildQueryXPOpcode );
- DEFINE_HANDLER(CMSG_QUERY_INSPECT_ACHIEVEMENTS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Inspect::QueryInspectAchievements, &WorldSession::HandleQueryInspectAchievements);
- DEFINE_HANDLER(CMSG_QUERY_NEXT_MAIL_TIME, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Mail::MailQueryNextMailTime, &WorldSession::HandleQueryNextMailTime);
- DEFINE_OPCODE_HANDLER_OLD(CMSG_QUERY_PETITION, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
+ DEFINE_HANDLER(CMSG_QUERY_PETITION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Petition::QueryPetition, &WorldSession::HandleQueryPetition);
DEFINE_OPCODE_HANDLER_OLD(CMSG_QUERY_SCENARIO_POI, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_HANDLER(CMSG_QUERY_TIME, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Query::QueryTime, &WorldSession::HandleQueryTimeOpcode);
DEFINE_OPCODE_HANDLER_OLD(CMSG_QUESTGIVER_ACCEPT_QUEST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestgiverAcceptQuestOpcode);
@@ -732,7 +718,7 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_REQUEST_CEMETERY_LIST, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Misc::RequestCemeteryList, &WorldSession::HandleRequestCemeteryList);
DEFINE_OPCODE_HANDLER_OLD(CMSG_REQUEST_CONQUEST_FORMULA_CONSTANTS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_REQUEST_FORCED_REACTIONS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_REQUEST_GUILD_REWARDS_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildRewardsQueryOpcode );
+ DEFINE_HANDLER(CMSG_REQUEST_GUILD_REWARDS_LIST, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Guild::RequestGuildRewardsList, &WorldSession::HandleRequestGuildRewardsList);
DEFINE_HANDLER(CMSG_REQUEST_HONOR_STATS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Inspect::RequestHonorStats, &WorldSession::HandleRequestHonorStatsOpcode);
DEFINE_OPCODE_HANDLER_OLD(CMSG_REQUEST_LFG_LIST_BLACKLIST, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_REQUEST_PARTY_JOIN_UPDATES, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
@@ -758,7 +744,7 @@ void OpcodeTable::Initialize()
DEFINE_OPCODE_HANDLER_OLD(CMSG_ROLE_POLL_BEGIN, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleRolePollBeginOpcode );
DEFINE_OPCODE_HANDLER_OLD(CMSG_ROUTER_CLIENT_LOG_STREAMING_ERROR, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_SAVE_CUF_PROFILES, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::HandleSaveCUFProfiles );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_SAVE_GUILD_EMBLEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSaveGuildEmblemOpcode );
+ DEFINE_HANDLER(CMSG_SAVE_GUILD_EMBLEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Guild::SaveGuildEmblem, &WorldSession::HandleSaveGuildEmblem);
DEFINE_OPCODE_HANDLER_OLD(CMSG_SAVE_PLAYER, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_SCENE_PLAYBACK_CANCELED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_SCENE_PLAYBACK_COMPLETE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
@@ -789,7 +775,6 @@ void OpcodeTable::Initialize()
DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_FACTION_CHEAT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_FACTION_INACTIVE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSetFactionInactiveOpcode );
DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_FACTION_NOT_AT_WAR, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_GUILD_BANK_TEXT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSetGuildBankTabText );
DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_LFG_BONUS_FACTION_ID, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_LFG_COMMENT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
@@ -819,7 +804,7 @@ void OpcodeTable::Initialize()
DEFINE_OPCODE_HANDLER_OLD(CMSG_SHOWING_CLOAK, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleShowingCloakOpcode );
DEFINE_OPCODE_HANDLER_OLD(CMSG_SHOWING_HELM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleShowingHelmOpcode );
DEFINE_OPCODE_HANDLER_OLD(CMSG_SHOW_TRADE_SKILL, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_SIGN_PETITION, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
+ DEFINE_HANDLER(CMSG_SIGN_PETITION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Petition::SignPetition, &WorldSession::HandleSignPetition);
DEFINE_OPCODE_HANDLER_OLD(CMSG_SILENCE_PARTY_TALKER, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_SOCKET_GEMS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSocketOpcode );
DEFINE_OPCODE_HANDLER_OLD(CMSG_SORT_BAGS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
@@ -847,7 +832,7 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_SWAP_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Item::SwapItem, &WorldSession::HandleSwapItem);
DEFINE_OPCODE_HANDLER_OLD(CMSG_SWAP_SUB_GROUPS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_SYNC_DANCE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_TABARD_VENDOR_ACTIVATE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleTabardVendorActivateOpcode);
+ DEFINE_HANDLER(CMSG_TABARD_VENDOR_ACTIVATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::NPC::Hello, &WorldSession::HandleTabardVendorActivateOpcode);
DEFINE_OPCODE_HANDLER_OLD(CMSG_TAXICLEARALLNODES, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_TAXIENABLEALLNODES, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_TAXISHOWNODES, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
@@ -868,7 +853,7 @@ void OpcodeTable::Initialize()
DEFINE_OPCODE_HANDLER_OLD(CMSG_TRANSMOGRIFY_ITEMS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleTransmogrifyItems );
DEFINE_OPCODE_HANDLER_OLD(CMSG_TRIGGER_CINEMATIC_CHEAT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_TROPHY_MONUMENT_LOAD_SELECTED_TROPHY_ID, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_TURN_IN_PETITION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleTurnInPetitionOpcode );
+ DEFINE_HANDLER(CMSG_TURN_IN_PETITION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Petition::TurnInPetition, &WorldSession::HandleTurnInPetition);
DEFINE_HANDLER(CMSG_TUTORIAL_FLAG, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Misc::TutorialSetFlag, &WorldSession::HandleTutorialFlag);
DEFINE_HANDLER(CMSG_UI_TIME_REQUEST, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Misc::UITimeRequest, &WorldSession::HandleUITimeRequest);
DEFINE_OPCODE_HANDLER_OLD(CMSG_UNACCEPT_TRADE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleUnacceptTradeOpcode );
@@ -1300,69 +1285,58 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ACHIEVEMENT_DELETED, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ACHIEVEMENT_EARNED, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ACHIEVEMENT_MEMBERS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_BANK_LIST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_BANK_LOG_QUERY_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_BANK_MONEY_WITHDRAWN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_BANK_QUERY_TEXT_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_BANK_LOG_QUERY_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_BANK_QUERY_RESULTS, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_BANK_TEXT_QUERY_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_CANCEL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_CHALLENGE_COMPLETED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_CHALLENGE_UPDATED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_CHALLENGE_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_CHANGE_NAME_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_COMMAND_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_COMMAND_RESULT_2, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_COMMAND_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_CRITERIA_DELETED, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_CRITERIA_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_DECLINE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_BANK_CONTENTS_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_BANK_MONEY_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_DISBANDED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_LOG_QUERY_RESULTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_MOTD, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_NEW_LEADER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_PLAYER_JOINED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_PLAYER_LEFT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_PRESENCE_CHANGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_RANKS_UPDATED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_RANK_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_TAB_ADDED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_BANK_MONEY_CHANGED, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_DISBANDED, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_LOG_QUERY_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_MOTD, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_NEW_LEADER, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_PLAYER_JOINED, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_PLAYER_LEFT, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_PRESENCE_CHANGE, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_RANK_CHANGED, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_RANKS_UPDATED, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_TAB_ADDED, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_TAB_DELETED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_TAB_MODIFIED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_TAB_TEXT_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_FLAGGED_FOR_RENAME, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_INVITE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_TAB_MODIFIED, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_TAB_TEXT_CHANGED, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_FLAGGED_FOR_RENAME, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_INVITE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_INVITE_CANCEL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_INVITE_DECLINED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_INVITE_EXPIRED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_KNOWN_RECIPES, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_MAX_DAILY_XP, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_MEMBERS_WITH_RECIPE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_MEMBER_DAILY_RESET, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_MEMBER_DAILY_RESET, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_MEMBER_RECIPES, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_MEMBER_UPDATE_NOTE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_MEMBER_UPDATE_NOTE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_MOVED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_MOVE_COMPLETE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_MOVE_STARTING, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_NAME_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_NEWS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_NEWS, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_NEWS_DELETED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_NEWS_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_PARTY_STATE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_PERMISSIONS_QUERY_RESULTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_PARTY_STATE_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_PERMISSIONS_QUERY_RESULTS, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_QUERY_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_RANKS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_RANKS, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_SEND_RANK_CHANGE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_REPUTATION_REACTION_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_REPUTATION_WEEKLY_CAP, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_RESET, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_REWARDS_LIST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ROSTER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ROSTER_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_REWARDS_LIST, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ROSTER, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ROSTER_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_SEND_RANK_CHANGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_SET_NOTE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_TRADESKILL_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_XP, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_XP_GAIN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_XP_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HEALTH_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HIGHEST_THREAT_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOTFIX_NOTIFY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1616,10 +1590,9 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PERIODICAURALOG, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PETGODMODE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PETITION_ALREADY_SIGNED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_PETITION_DECLINED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_PETITION_RENAME_GUILD_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_PETITION_SHOW_LIST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_PETITION_SHOW_SIGNATURES, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_PETITION_RENAME_GUILD_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_PETITION_SHOW_LIST, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_PETITION_SHOW_SIGNATURES, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PETITION_SIGN_RESULTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PET_ACTION_FEEDBACK, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PET_ACTION_SOUND, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1683,8 +1656,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_LOG_DATA, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_OPTIONS_ENABLED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_SEASON, STATUS_NEVER, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_BATTLE_PET_NAME_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_PETITION_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_PETITION_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_TIME_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTGIVER_INVALID_QUEST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUESTGIVER_OFFER_REWARD, STATUS_NEVER, CONNECTION_TYPE_REALM);
@@ -1761,7 +1733,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ROLE_POLL_BEGIN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ROLE_POLL_INFORM, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RUNE_REGEN_DEBUG, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_SAVE_GUILD_EMBLEM, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_SAVE_GUILD_EMBLEM, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SCENARIO_BOOT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SCENARIO_COMPLETED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SCENARIO_OUT_OF_BOUNDS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1874,7 +1846,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUPPRESS_NPC_GREETINGS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUSPEND_COMMS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUSPEND_TOKEN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_TABARD_VENDOR_ACTIVATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_TABARD_VENDOR_ACTIVATE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TALENTS_ERROR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TALENTS_INFO, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TALENTS_INVOLUNTARILY_RESET, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1900,7 +1872,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRANSFER_PENDING, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRIGGER_CINEMATIC, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRIGGER_MOVIE, STATUS_NEVER, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_TURN_IN_PETITION_RESULTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_TURN_IN_PETITION_RESULTS, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TUTORIAL_FLAGS, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UI_TIME, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UNDELETE_CHARACTER_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
index 6666b38bfc2..eff8ab83551 100644
--- a/src/server/game/Server/Protocol/Opcodes.h
+++ b/src/server/game/Server/Protocol/Opcodes.h
@@ -90,7 +90,6 @@ enum OpcodeClient : uint32
CMSG_AUTOSTORE_BANK_ITEM = 0x0732,
CMSG_AUTOSTORE_GROUND_ITEM = 0xBADD,
CMSG_AUTOSTORE_LOOT_ITEM = 0x0609,
- CMSG_AUTO_DECLINE_GUILD_INVITES = 0xBADD,
CMSG_BANKER_ACTIVATE = 0x1B24,
CMSG_BATTLEFIELD_JOIN = 0xBADD,
CMSG_BATTLEFIELD_LEAVE = 0x06F1,
@@ -311,34 +310,33 @@ enum OpcodeClient : uint32
CMSG_GROUP_SET_LEADER = 0xBADD,
CMSG_GROUP_SET_ROLES = 0xBADD,
CMSG_GROUP_SWAP_SUB_GROUP = 0xBADD,
- CMSG_GUILD_ACCEPT = 0xBADD,
CMSG_GUILD_ADD_BATTLENET_FRIEND = 0x1437,
CMSG_GUILD_ADD_RANK = 0x1630,
CMSG_GUILD_ASSIGN_MEMBER_RANK = 0x0436,
CMSG_GUILD_AUTO_DECLINE_INVITATION = 0x062F,
- CMSG_GUILD_BANKER_ACTIVATE = 0x19E3,
+ CMSG_GUILD_BANK_ACTIVATE = 0x19E3,
CMSG_GUILD_BANK_BUY_TAB = 0x1BC3,
CMSG_GUILD_BANK_DEPOSIT_MONEY = 0x1B11,
CMSG_GUILD_BANK_LOG_QUERY = 0x0428,
- CMSG_GUILD_BANK_MONEY_WITHDRAWN_QUERY = 0x020D,
+ CMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY_QUERY = 0x063D,
CMSG_GUILD_BANK_NOTE = 0xBADD,
CMSG_GUILD_BANK_QUERY_TAB = 0x1139,
- CMSG_GUILD_BANK_QUERY_TEXT = 0x062D,
- CMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY_QUERY = 0x063D,
+ CMSG_GUILD_BANK_TEXT_QUERY = 0x062D,
CMSG_GUILD_BANK_SET_TAB_TEXT = 0x0E30,
CMSG_GUILD_BANK_SWAP_ITEMS = 0x1131,
CMSG_GUILD_BANK_UPDATE_TAB = 0x13C1,
- CMSG_GUILD_BANK_WITHDRAW_MONEY = 0xBADD,
+ CMSG_GUILD_BANK_WITHDRAW_MONEY = 0x020D,
+ CMSG_GUILD_CHALLENGE_UPDATE_REQUEST = 0x166E,
CMSG_GUILD_CHANGE_NAME_REQUEST = 0x043E,
- CMSG_GUILD_DECLINE = 0x0667,
+ CMSG_GUILD_DECLINE_INVITATION = 0x0667,
CMSG_GUILD_DELETE = 0x1427,
CMSG_GUILD_DELETE_RANK = 0x0C28,
- CMSG_GUILD_DEMOTE = 0x142F,
- CMSG_GUILD_DISBAND = 0xBADD,
+ CMSG_GUILD_DEMOTE_MEMBER = 0x142F,
CMSG_GUILD_EVENT_LOG_QUERY = 0x0E37,
CMSG_GUILD_GET_ACHIEVEMENT_MEMBERS = 0x0C40,
CMSG_GUILD_GET_RANKS = 0x0C37,
CMSG_GUILD_GET_ROSTER = 0x0638,
+ CMSG_GUILD_INFO = 0xBADD,
CMSG_GUILD_INVITE_BY_NAME = 0x19A4,
CMSG_GUILD_LEAVE = 0x0476,
CMSG_GUILD_MEMBER_SEND_SOR_REQUEST = 0x0666,
@@ -352,15 +350,11 @@ enum OpcodeClient : uint32
CMSG_GUILD_QUERY_NEWS = 0x0676,
CMSG_GUILD_QUERY_RECIPES = 0x1438,
CMSG_GUILD_REPLACE_GUILD_MASTER = 0x163E,
- CMSG_GUILD_REQUEST_CHALLENGE_INFO = 0x166E,
- CMSG_GUILD_REQUEST_CHALLENGE_UPDATE = 0xBADD,
- CMSG_GUILD_REQUEST_MAX_DAILY_XP = 0xBADD,
CMSG_GUILD_REQUEST_PARTY_STATE = 0x0A8E,
CMSG_GUILD_SET_ACHIEVEMENT_TRACKING = 0x1640,
CMSG_GUILD_SET_FOCUSED_ACHIEVEMENT = 0x0C7E,
CMSG_GUILD_SET_GUILD_MASTER = 0x1184,
CMSG_GUILD_SET_MEMBER_NOTE = 0x1C27,
- CMSG_GUILD_SET_NOTE = 0xBADD,
CMSG_GUILD_SET_RANK_PERMISSIONS = 0x0E38,
CMSG_GUILD_SHIFT_RANK = 0x0627,
CMSG_GUILD_UPDATE_INFO_TEXT = 0x0C75,
@@ -412,7 +406,6 @@ enum OpcodeClient : uint32
CMSG_LF_GUILD_GET_APPLICATIONS = 0x043F,
CMSG_LF_GUILD_GET_GUILD_POST = 0x0E68,
CMSG_LF_GUILD_GET_RECRUITS = 0x0430,
- CMSG_LF_GUILD_POST_REQUEST = 0xBADD,
CMSG_LF_GUILD_REMOVE_RECRUIT = 0x0680,
CMSG_LF_GUILD_SET_GUILD_POST = 0x0B3D,
CMSG_LIST_INVENTORY = 0x0B39,
@@ -552,11 +545,9 @@ enum OpcodeClient : uint32
CMSG_PARTY_UNINVITE = 0x1982,
CMSG_PARTY_UNSILENCE = 0xBADD,
CMSG_PETITION_BUY = 0x0010,
- CMSG_PETITION_QUERY = 0xBADD,
CMSG_PETITION_RENAME_GUILD = 0x0920,
CMSG_PETITION_SHOW_LIST = 0x000F,
CMSG_PETITION_SHOW_SIGNATURES = 0x0BC4,
- CMSG_PETITION_SIGN = 0xBADD,
CMSG_PET_ABANDON = 0x0005,
CMSG_PET_ACTION = 0x133A,
CMSG_PET_BATTLE_FINAL_NOTIF = 0x0565,
@@ -589,7 +580,6 @@ enum OpcodeClient : uint32
CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT = 0x128A,
CMSG_QUERY_CORPSE_TRANSPORT = 0x0908,
CMSG_QUERY_COUNTDOWN_TIMER = 0x09DE,
- CMSG_QUERY_GUILD_XP = 0xBADD,
CMSG_QUERY_INSPECT_ACHIEVEMENTS = 0x0A07,
CMSG_QUERY_NEXT_MAIL_TIME = 0x0B31,
CMSG_QUERY_PETITION = 0x048B,
@@ -692,7 +682,6 @@ enum OpcodeClient : uint32
CMSG_SET_FACTION_CHEAT = 0xBADD,
CMSG_SET_FACTION_INACTIVE = 0x09E2,
CMSG_SET_FACTION_NOT_AT_WAR = 0x0A06,
- CMSG_SET_GUILD_BANK_TEXT = 0xBADD,
CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x02C4,
CMSG_SET_LFG_BONUS_FACTION_ID = 0x009D,
CMSG_SET_LFG_COMMENT = 0xBADD,
@@ -1201,31 +1190,29 @@ enum OpcodeServer : uint32
SMSG_GUILD_ACHIEVEMENT_DELETED = 0x1058,
SMSG_GUILD_ACHIEVEMENT_EARNED = 0x1048,
SMSG_GUILD_ACHIEVEMENT_MEMBERS = 0x1826,
- SMSG_GUILD_BANK_LIST = 0x1245,
SMSG_GUILD_BANK_LOG_QUERY_RESULT = 0x1237,
- SMSG_GUILD_BANK_MONEY_WITHDRAWN = 0x1047,
- SMSG_GUILD_BANK_QUERY_TEXT_RESULT = 0x1875,
+ SMSG_GUILD_BANK_QUERY_RESULTS = 0x1245,
+ SMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY = 0x1047,
+ SMSG_GUILD_BANK_TEXT_QUERY_RESULT = 0x1875,
SMSG_GUILD_CANCEL = 0xBADD,
SMSG_GUILD_CHALLENGE_COMPLETED = 0x1836,
- SMSG_GUILD_CHALLENGE_UPDATED = 0x1A06,
+ SMSG_GUILD_CHALLENGE_UPDATE = 0x1A06,
SMSG_GUILD_CHANGE_NAME_RESULT = 0x1006,
SMSG_GUILD_COMMAND_RESULT = 0x1205,
- SMSG_GUILD_COMMAND_RESULT_2 = 0xBADD,
SMSG_GUILD_CRITERIA_DELETED = 0x1805,
SMSG_GUILD_CRITERIA_UPDATE = 0x1208,
SMSG_GUILD_DECLINE = 0xBADD,
- SMSG_GUILD_EVENT = 0xBADD,
SMSG_GUILD_EVENT_BANK_CONTENTS_CHANGED = 0x1045,
SMSG_GUILD_EVENT_BANK_MONEY_CHANGED = 0x1077,
SMSG_GUILD_EVENT_DISBANDED = 0x1A08,
- SMSG_GUILD_EVENT_LOG_QUERY_RESULTS = 0x1075,
+ SMSG_GUILD_EVENT_LOG_QUERY_RESULT = 0x1075,
SMSG_GUILD_EVENT_MOTD = 0x1825,
SMSG_GUILD_EVENT_NEW_LEADER = 0x1005,
SMSG_GUILD_EVENT_PLAYER_JOINED = 0x1257,
SMSG_GUILD_EVENT_PLAYER_LEFT = 0x1206,
SMSG_GUILD_EVENT_PRESENCE_CHANGE = 0x1228,
- SMSG_GUILD_EVENT_RANKS_UPDATED = 0x1018,
SMSG_GUILD_EVENT_RANK_CHANGED = 0x1276,
+ SMSG_GUILD_EVENT_RANKS_UPDATED = 0x1018,
SMSG_GUILD_EVENT_TAB_ADDED = 0x1868,
SMSG_GUILD_EVENT_TAB_DELETED = 0x1808,
SMSG_GUILD_EVENT_TAB_MODIFIED = 0x1035,
@@ -1236,34 +1223,25 @@ enum OpcodeServer : uint32
SMSG_GUILD_INVITE_DECLINED = 0x1226,
SMSG_GUILD_INVITE_EXPIRED = 0x1246,
SMSG_GUILD_KNOWN_RECIPES = 0x1078,
- SMSG_GUILD_MAX_DAILY_XP = 0xBADD,
SMSG_GUILD_MEMBERS_WITH_RECIPE = 0x1277,
SMSG_GUILD_MEMBER_DAILY_RESET = 0x1015,
SMSG_GUILD_MEMBER_RECIPES = 0x1036,
SMSG_GUILD_MEMBER_UPDATE_NOTE = 0x1846,
SMSG_GUILD_MOVED = 0x1838,
- SMSG_GUILD_MOVE_COMPLETE = 0xBADD,
SMSG_GUILD_MOVE_STARTING = 0x1877,
- SMSG_GUILD_NAME_CHANGED = 0x1A07,
SMSG_GUILD_NEWS = 0x1027,
SMSG_GUILD_NEWS_DELETED = 0x1007,
- SMSG_GUILD_NEWS_UPDATE = 0xBADD,
SMSG_GUILD_PARTY_STATE_RESPONSE = 0x1225,
SMSG_GUILD_PERMISSIONS_QUERY_RESULTS = 0x1827,
SMSG_GUILD_QUERY_RESPONSE = 0x1046,
SMSG_GUILD_RANKS = 0x1218,
+ SMSG_GUILD_RECIPES = 0xBADD,
SMSG_GUILD_REPUTATION_REACTION_CHANGED = 0x1068,
- SMSG_GUILD_REPUTATION_WEEKLY_CAP = 0xBADD,
SMSG_GUILD_RESET = 0x1258,
SMSG_GUILD_REWARDS_LIST = 0x1818,
SMSG_GUILD_ROSTER = 0x1026,
SMSG_GUILD_ROSTER_UPDATE = 0x1265,
SMSG_GUILD_SEND_RANK_CHANGE = 0x1207,
- SMSG_GUILD_SET_NOTE = 0xBADD,
- SMSG_GUILD_TRADESKILL_UPDATE = 0xBADD,
- SMSG_GUILD_XP = 0xBADD,
- SMSG_GUILD_XP_GAIN = 0xBADD,
- SMSG_GUILD_XP_UPDATE = 0xBADD,
SMSG_HEALTH_UPDATE = 0x0BE1,
SMSG_HIGHEST_THREAT_UPDATE = 0x059A,
SMSG_HOTFIX_NOTIFY = 0x1304,
@@ -1517,7 +1495,6 @@ enum OpcodeServer : uint32
SMSG_PERIODICAURALOG = 0x0B1B,
SMSG_PETGODMODE = 0xBADD,
SMSG_PETITION_ALREADY_SIGNED = 0x0D8E,
- SMSG_PETITION_DECLINED = 0x1B32,
SMSG_PETITION_RENAME_GUILD_RESPONSE = 0x1055,
SMSG_PETITION_SHOW_LIST = 0x0915,
SMSG_PETITION_SHOW_SIGNATURES = 0x0830,
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index 114b303e7f4..20a72640d49 100644
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -1385,23 +1385,23 @@ uint32 WorldSession::DosProtection::GetMaxPacketCounterAllowed(uint16 opcode) co
//case CMSG_ARENA_TEAM_REMOVE: // not profiled
//case CMSG_ARENA_TEAM_LEADER: // not profiled
case CMSG_LOOT_METHOD: // not profiled
- case CMSG_GUILD_INVITE_BY_NAME: // not profiled
- //case CMSG_GUILD_ACCEPT: // not profiled
- case CMSG_GUILD_DECLINE: // not profiled
+ case CMSG_GUILD_INVITE_BY_NAME: // not profiled
+ case CMSG_ACCEPT_GUILD_INVITE: // not profiled
+ case CMSG_GUILD_DECLINE_INVITATION: // not profiled
case CMSG_GUILD_LEAVE: // not profiled
- case CMSG_GUILD_DISBAND: // not profiled
+ case CMSG_GUILD_DELETE: // not profiled
case CMSG_GUILD_SET_GUILD_MASTER: // not profiled
- //case CMSG_GUILD_MOTD: // not profiled
+ case CMSG_GUILD_UPDATE_MOTD_TEXT: // not profiled
case CMSG_GUILD_SET_RANK_PERMISSIONS: // not profiled
case CMSG_GUILD_ADD_RANK: // not profiled
case CMSG_GUILD_DELETE_RANK: // not profiled
- case CMSG_GUILD_UPDATE_INFO_TEXT: // not profiled
+ case CMSG_GUILD_UPDATE_INFO_TEXT: // not profiled
case CMSG_GUILD_BANK_DEPOSIT_MONEY: // not profiled
- //case CMSG_GUILD_BANK_WITHDRAW_MONEY: // not profiled
+ case CMSG_GUILD_BANK_WITHDRAW_MONEY: // not profiled
case CMSG_GUILD_BANK_BUY_TAB: // not profiled
- //case CMSG_GUILD_BANK_UPDATE_TAB: // not profiled
+ case CMSG_GUILD_BANK_UPDATE_TAB: // not profiled
//case CMSG_SET_GUILD_BANK_TEXT: // not profiled
- //case CMSG_SAVE_GUILD_EMBLEM: // not profiled
+ case CMSG_SAVE_GUILD_EMBLEM: // not profiled
//case MSG_PETITION_RENAME: // not profiled
//case MSG_TALENT_WIPE_CONFIRM: // not profiled
case CMSG_SET_DUNGEON_DIFFICULTY: // not profiled
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index fe221d38a9e..4ad9e35c01e 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -166,6 +166,44 @@ namespace WorldPackets
namespace Guild
{
class QueryGuildInfo;
+ class GuildInviteByName;
+ class AcceptGuildInvite;
+ class DeclineGuildInvites;
+ class GuildDeclineInvitation;
+ class GuildGetRoster;
+ class GuildPromoteMember;
+ class GuildDemoteMember;
+ class GuildOfficerRemoveMember;
+ class GuildAssignMemberRank;
+ class GuildLeave;
+ class GuildDelete;
+ class GuildUpdateMotdText;
+ class GuildGetRanks;
+ 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 RequestGuildPartyState;
+ class RequestGuildRewardsList;
+ class GuildQueryNews;
+ class GuildNewsUpdateSticky;
+ class GuildSetGuildMaster;
+ class GuildChallengeUpdateRequest;
+ class SaveGuildEmblem;
}
namespace Inspect
@@ -243,6 +281,19 @@ namespace WorldPackets
class GossipSelectOption;
}
+ namespace Petition
+ {
+ class DeclinePetition;
+ class OfferPetition;
+ class PetitionBuy;
+ class PetitionRenameGuild;
+ class PetitionShowList;
+ class PetitionShowSignatures;
+ class QueryPetition;
+ class SignPetition;
+ class TurnInPetition;
+ }
+
namespace Query
{
class QueryCreature;
@@ -862,44 +913,43 @@ class WorldSession
void HandlePartyAssignmentOpcode(WorldPacket& recvData);
void HandleRolePollBeginOpcode(WorldPacket& recvData);
- void HandlePetitionBuyOpcode(WorldPacket& recvData);
- void HandlePetitionShowSignOpcode(WorldPacket& recvData);
- void HandlePetitionQueryOpcode(WorldPacket& recvData);
- void HandlePetitionRenameGuildOpcode(WorldPacket& recvData);
- void HandlePetitionSignOpcode(WorldPacket& recvData);
- void HandlePetitionDeclineOpcode(WorldPacket& recvData);
- void HandleOfferPetitionOpcode(WorldPacket& recvData);
- void HandleTurnInPetitionOpcode(WorldPacket& recvData);
+ void HandleDeclinePetition(WorldPackets::Petition::DeclinePetition& packet);
+ void HandleOfferPetition(WorldPackets::Petition::OfferPetition& packet);
+ void HandlePetitionBuy(WorldPackets::Petition::PetitionBuy& packet);
+ void HandlePetitionShowSignatures(WorldPackets::Petition::PetitionShowSignatures& packet);
+ void HandleQueryPetition(WorldPackets::Petition::QueryPetition& packet);
+ void HandlePetitionRenameGuild(WorldPackets::Petition::PetitionRenameGuild& packet);
+ void HandleSignPetition(WorldPackets::Petition::SignPetition& packet);
+ void HandleTurnInPetition(WorldPackets::Petition::TurnInPetition& packet);
void HandleGuildQueryOpcode(WorldPackets::Guild::QueryGuildInfo& query);
- void HandleGuildInviteOpcode(WorldPacket& recvPacket);
- void HandleGuildOfficerRemoveMemberOpcode(WorldPacket& recvPacket);
- void HandleGuildAcceptOpcode(WorldPacket& recvPacket);
- void HandleGuildDeclineOpcode(WorldPacket& recvPacket);
- void HandleGuildEventLogQueryOpcode(WorldPacket& recvPacket);
- void HandleGuildRosterOpcode(WorldPacket& recvPacket);
- void HandleGuildRewardsQueryOpcode(WorldPacket& recvPacket);
- void HandleGuildPromoteOpcode(WorldPacket& recvPacket);
- void HandleGuildDemoteOpcode(WorldPacket& recvPacket);
- void HandleGuildAssignRankOpcode(WorldPacket& recvPacket);
- void HandleGuildLeaveOpcode(WorldPacket& recvPacket);
- void HandleGuildDisbandOpcode(WorldPacket& recvPacket);
+ void HandleGuildInviteByName(WorldPackets::Guild::GuildInviteByName& packet);
+ void HandleGuildOfficerRemoveMember(WorldPackets::Guild::GuildOfficerRemoveMember& packet);
+ void HandleGuildAcceptInvite(WorldPackets::Guild::AcceptGuildInvite& invite);
+ void HandleGuildDeclineInvitation(WorldPackets::Guild::GuildDeclineInvitation& decline);
+ void HandleGuildEventLogQuery(WorldPackets::Guild::GuildEventLogQuery& packet);
+ void HandleGuildGetRoster(WorldPackets::Guild::GuildGetRoster& packet);
+ void HandleRequestGuildRewardsList(WorldPackets::Guild::RequestGuildRewardsList& packet);
+ void HandleGuildPromoteMember(WorldPackets::Guild::GuildPromoteMember& promote);
+ void HandleGuildDemoteMember(WorldPackets::Guild::GuildDemoteMember& demote);
+ void HandleGuildAssignRank(WorldPackets::Guild::GuildAssignMemberRank& packet);
+ void HandleGuildLeave(WorldPackets::Guild::GuildLeave& leave);
+ void HandleGuildDelete(WorldPackets::Guild::GuildDelete& packet);
void HandleGuildSetAchievementTracking(WorldPacket& recvPacket);
- void HandleGuildSetGuildMaster(WorldPacket& recvPacket);
- void HandleGuildMOTDOpcode(WorldPacket& recvPacket);
- void HandleGuildNewsUpdateStickyOpcode(WorldPacket& recvPacket);
- void HandleGuildSetNoteOpcode(WorldPacket& recvPacket);
- void HandleGuildGetRanksOpcode(WorldPacket& recvPacket);
- void HandleGuildQueryNewsOpcode(WorldPacket& recvPacket);
- void HandleGuildSetRankPermissionsOpcode(WorldPacket& recvPacket);
- void HandleGuildAddRankOpcode(WorldPacket& recvPacket);
- void HandleGuildDeleteRankOpcode(WorldPacket& recvPacket);
- void HandleGuildChangeInfoTextOpcode(WorldPacket& recvPacket);
- void HandleSaveGuildEmblemOpcode(WorldPacket& recvPacket);
- void HandleGuildRequestPartyState(WorldPacket& recvPacket);
- void HandleGuildRequestChallengeUpdate(WorldPacket& recvPacket);
- void HandleGuildRequestMaxDailyXP(WorldPacket& recvPacket);
- void HandleAutoDeclineGuildInvites(WorldPacket& recvPacket);
+ void HandleGuildSetGuildMaster(WorldPackets::Guild::GuildSetGuildMaster& packet);
+ void HandleGuildUpdateMotdText(WorldPackets::Guild::GuildUpdateMotdText& packet);
+ void HandleGuildNewsUpdateSticky(WorldPackets::Guild::GuildNewsUpdateSticky& packet);
+ void HandleGuildSetMemberNote(WorldPackets::Guild::GuildSetMemberNote& packet);
+ void HandleGuildGetRanks(WorldPackets::Guild::GuildGetRanks& packet);
+ void HandleGuildQueryNews(WorldPackets::Guild::GuildQueryNews& newsQuery);
+ void HandleGuildSetRankPermissions(WorldPackets::Guild::GuildSetRankPermissions& packet);
+ void HandleGuildAddRank(WorldPackets::Guild::GuildAddRank& packet);
+ void HandleGuildDeleteRank(WorldPackets::Guild::GuildDeleteRank& packet);
+ void HandleGuildUpdateInfoText(WorldPackets::Guild::GuildUpdateInfoText& packet);
+ void HandleSaveGuildEmblem(WorldPackets::Guild::SaveGuildEmblem& packet);
+ void HandleGuildRequestPartyState(WorldPackets::Guild::RequestGuildPartyState& packet);
+ void HandleGuildChallengeUpdateRequest(WorldPackets::Guild::GuildChallengeUpdateRequest& packet);
+ void HandleDeclineGuildInvites(WorldPackets::Guild::DeclineGuildInvites& packet);
void HandleGuildFinderAddRecruit(WorldPacket& recvPacket);
void HandleGuildFinderBrowse(WorldPacket& recvPacket);
@@ -917,12 +967,12 @@ class WorldSession
void HandleMoveSplineDoneOpcode(WorldPacket& recvPacket);
void SendActivateTaxiReply(ActivateTaxiReply reply);
- void HandleTabardVendorActivateOpcode(WorldPacket& recvPacket);
+ void HandleTabardVendorActivateOpcode(WorldPackets::NPC::Hello& packet);
void HandleBankerActivateOpcode(WorldPackets::NPC::Hello& packet);
void HandleBuyBankSlotOpcode(WorldPacket& recvPacket);
void HandleTrainerListOpcode(WorldPackets::NPC::Hello& packet);
void HandleTrainerBuySpellOpcode(WorldPacket& recvPacket);
- void HandlePetitionShowListOpcode(WorldPacket& recvPacket);
+ void HandlePetitionShowList(WorldPackets::Petition::PetitionShowList& packet);
void HandleGossipHelloOpcode(WorldPackets::NPC::Hello& packet);
void HandleGossipSelectOptionOpcode(WorldPackets::NPC::GossipSelectOption& packet);
void HandleSpiritHealerActivateOpcode(WorldPacket& recvPacket);
@@ -1193,20 +1243,19 @@ class WorldSession
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 HandleGuildBankUpdateTab(WorldPacket& recvData);
- void HandleGuildBankBuyTab(WorldPacket& recvData);
- void HandleQueryGuildBankTabText(WorldPacket& recvData);
- void HandleSetGuildBankTabText(WorldPacket& recvData);
- void HandleGuildQueryXPOpcode(WorldPacket& recvData);
+ void HandleGuildPermissionsQuery(WorldPackets::Guild::GuildPermissionsQuery& packet);
+ void HandleGuildBankMoneyWithdrawn(WorldPackets::Guild::GuildBankRemainingWithdrawMoneyQuery& packet);
+ void HandleGuildBankActivate(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(WorldPackets::Guild::GuildBankUpdateTab& packet);
+ void HandleGuildBankBuyTab(WorldPackets::Guild::GuildBankBuyTab& packet);
+ void HandleGuildBankTextQuery(WorldPackets::Guild::GuildBankTextQuery& packet);
+ void HandleGuildBankSetTabText(WorldPackets::Guild::GuildBankSetTabText& packet);
// Refer-a-Friend
void HandleGrantLevel(WorldPacket& recvData);
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index c2f482570a1..fff5263bdde 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -925,11 +925,11 @@ void World::LoadConfigSettings(bool reload)
m_int_configs[CONFIG_INSTANCE_UNLOAD_DELAY] = sConfigMgr->GetIntDefault("Instance.UnloadDelay", 30 * MINUTE * IN_MILLISECONDS);
m_int_configs[CONFIG_MAX_PRIMARY_TRADE_SKILL] = sConfigMgr->GetIntDefault("MaxPrimaryTradeSkill", 2);
- m_int_configs[CONFIG_MIN_PETITION_SIGNS] = sConfigMgr->GetIntDefault("MinPetitionSigns", 9);
- if (m_int_configs[CONFIG_MIN_PETITION_SIGNS] > 9)
+ m_int_configs[CONFIG_MIN_PETITION_SIGNS] = sConfigMgr->GetIntDefault("MinPetitionSigns", 4);
+ if (m_int_configs[CONFIG_MIN_PETITION_SIGNS] > 4)
{
- TC_LOG_ERROR("server.loading", "MinPetitionSigns (%i) must be in range 0..9. Set to 9.", m_int_configs[CONFIG_MIN_PETITION_SIGNS]);
- m_int_configs[CONFIG_MIN_PETITION_SIGNS] = 9;
+ TC_LOG_ERROR("server.loading", "MinPetitionSigns (%i) must be in range 0..4. Set to 4.", m_int_configs[CONFIG_MIN_PETITION_SIGNS]);
+ m_int_configs[CONFIG_MIN_PETITION_SIGNS] = 4;
}
m_int_configs[CONFIG_GM_LOGIN_STATE] = sConfigMgr->GetIntDefault("GM.LoginState", 2);
@@ -1329,13 +1329,8 @@ void World::LoadConfigSettings(bool reload)
m_int_configs[CONFIG_DB_PING_INTERVAL] = sConfigMgr->GetIntDefault("MaxPingTime", 30);
// Guild save interval
- m_bool_configs[CONFIG_GUILD_LEVELING_ENABLED] = sConfigMgr->GetBoolDefault("Guild.LevelingEnabled", true);
m_int_configs[CONFIG_GUILD_SAVE_INTERVAL] = sConfigMgr->GetIntDefault("Guild.SaveInterval", 15);
- m_int_configs[CONFIG_GUILD_MAX_LEVEL] = sConfigMgr->GetIntDefault("Guild.MaxLevel", 25);
m_int_configs[CONFIG_GUILD_UNDELETABLE_LEVEL] = sConfigMgr->GetIntDefault("Guild.UndeletableLevel", 4);
- rate_values[RATE_XP_GUILD_MODIFIER] = sConfigMgr->GetFloatDefault("Guild.XPModifier", 0.25f);
- m_int_configs[CONFIG_GUILD_DAILY_XP_CAP] = sConfigMgr->GetIntDefault("Guild.DailyXPCap", 7807500);
- m_int_configs[CONFIG_GUILD_WEEKLY_REP_CAP] = sConfigMgr->GetIntDefault("Guild.WeeklyReputationCap", 4375);
// misc
m_bool_configs[CONFIG_PDUMP_NO_PATHS] = sConfigMgr->GetBoolDefault("PlayerDump.DisallowPaths", true);
@@ -1736,9 +1731,6 @@ void World::SetInitialWorldSettings()
TC_LOG_INFO("server.loading", "Loading Auctions...");
sAuctionMgr->LoadAuctions();
- TC_LOG_INFO("server.loading", "Loading Guild XP for level...");
- sGuildMgr->LoadGuildXpForLevel();
-
TC_LOG_INFO("server.loading", "Loading Guild rewards...");
sGuildMgr->LoadGuildRewards();
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index c30d4f6ca35..120c96b2073 100644
--- a/src/server/game/World/World.h
+++ b/src/server/game/World/World.h
@@ -164,7 +164,6 @@ enum WorldBoolConfigs
CONFIG_WARDEN_ENABLED,
CONFIG_ENABLE_MMAPS,
CONFIG_WINTERGRASP_ENABLE,
- CONFIG_GUILD_LEVELING_ENABLED,
CONFIG_UI_QUESTLEVELS_IN_DIALOGS, // Should we add quest levels to the title in the NPC dialogs?
CONFIG_EVENT_ANNOUNCE,
CONFIG_STATS_LIMITS_ENABLE,
@@ -350,10 +349,7 @@ enum WorldIntConfigs
CONFIG_WINTERGRASP_NOBATTLETIME,
CONFIG_WINTERGRASP_RESTART_AFTER_CRASH,
CONFIG_GUILD_SAVE_INTERVAL,
- CONFIG_GUILD_MAX_LEVEL,
CONFIG_GUILD_UNDELETABLE_LEVEL,
- CONFIG_GUILD_DAILY_XP_CAP,
- CONFIG_GUILD_WEEKLY_REP_CAP,
CONFIG_PACKET_SPOOF_POLICY,
CONFIG_PACKET_SPOOF_BANMODE,
CONFIG_PACKET_SPOOF_BANDURATION,