diff options
| author | Mogadischu <cgnad@live.de> | 2015-02-13 18:31:50 +0000 |
|---|---|---|
| committer | Duarte Duarte <dnpd.dd@gmail.com> | 2015-02-13 18:32:36 +0000 |
| commit | bc0c0ae2a334ee87df726c25b833e38a0c874614 (patch) | |
| tree | 96bca61e912521a85ea64db5cfe3824ba86c93b1 /src/server/game | |
| parent | 69104cfa2a8d04af7738bf427d0c35063b3a3cb4 (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')
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, |
