diff options
author | Shauren <shauren.trinity@gmail.com> | 2024-03-21 21:07:23 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2024-03-21 21:07:23 +0100 |
commit | ac5aee6a98be6434e1f93bf5c973701e41a4540a (patch) | |
tree | 0cb621804e753e0afd81b5230b04a41f04220a5f /src | |
parent | e99482ce9bb7918e23a104fe28305c60d28ed598 (diff) |
Core: Updated to 10.2.6.53840
Diffstat (limited to 'src')
37 files changed, 1594 insertions, 1279 deletions
diff --git a/src/common/DataStores/DB2FileLoader.cpp b/src/common/DataStores/DB2FileLoader.cpp index 57ec7df6e3f..7a586178794 100644 --- a/src/common/DataStores/DB2FileLoader.cpp +++ b/src/common/DataStores/DB2FileLoader.cpp @@ -2076,19 +2076,23 @@ void DB2FileLoader::Load(DB2FileSource* source, DB2FileLoadInfo const* loadInfo) if (loadInfo) { uint32 fieldIndex = 0; + std::string signValidationResult; if (!loadInfo->Meta->HasIndexFieldInData()) { - ASSERT(!loadInfo->Fields[0].IsSigned, "ID must be unsigned in %s", source->GetFileName()); + if (loadInfo->Fields[0].IsSigned) + signValidationResult += Trinity::StringFormat("ID must be unsigned in {}", source->GetFileName()); ++fieldIndex; } for (uint32 f = 0; f < loadInfo->Meta->FieldCount; ++f) { - ASSERT(loadInfo->Fields[fieldIndex].IsSigned == _impl->IsSignedField(f), - "Field %s in %s must be %s%s", loadInfo->Fields[fieldIndex].Name, source->GetFileName(), _impl->IsSignedField(f) ? "signed" : "unsigned", - _impl->GetExpectedSignMismatchReason(f)); + if (loadInfo->Fields[fieldIndex].IsSigned != _impl->IsSignedField(f)) + signValidationResult += Trinity::StringFormat("Field {} in {} must be {}{}", loadInfo->Fields[fieldIndex].Name, + source->GetFileName(), _impl->IsSignedField(f) ? "signed" : "unsigned", _impl->GetExpectedSignMismatchReason(f)); fieldIndex += loadInfo->Meta->Fields[f].ArraySize; } + if (!signValidationResult.empty()) + throw DB2FileLoadException(std::move(signValidationResult)); } } diff --git a/src/server/bnetserver/REST/LoginHttpSession.cpp b/src/server/bnetserver/REST/LoginHttpSession.cpp index 95112cb8836..aff579de7f9 100644 --- a/src/server/bnetserver/REST/LoginHttpSession.cpp +++ b/src/server/bnetserver/REST/LoginHttpSession.cpp @@ -23,17 +23,20 @@ namespace Battlenet { -LoginHttpSession::LoginHttpSession(boost::asio::ip::tcp::socket&& socket) - : SslSocket(std::move(socket), SslContext::instance()) +template<template<typename> typename SocketImpl> +LoginHttpSession<SocketImpl>::LoginHttpSession(boost::asio::ip::tcp::socket&& socket, LoginHttpSessionWrapper& owner) + : BaseSocket(std::move(socket), SslContext::instance()), _owner(owner) { } -LoginHttpSession::~LoginHttpSession() = default; +template<template<typename> typename SocketImpl> +LoginHttpSession<SocketImpl>::~LoginHttpSession() = default; -void LoginHttpSession::Start() +template<template<typename> typename SocketImpl> +void LoginHttpSession<SocketImpl>::Start() { - std::string ip_address = GetRemoteIpAddress().to_string(); - TC_LOG_TRACE("server.http.session", "{} Accepted connection", GetClientInfo()); + std::string ip_address = this->GetRemoteIpAddress().to_string(); + TC_LOG_TRACE("server.http.session", "{} Accepted connection", this->GetClientInfo()); // Verify that this IP is not in the ip_banned table LoginDatabase.Execute(LoginDatabase.GetPreparedStatement(LOGIN_DEL_EXPIRED_IP_BANS)); @@ -41,11 +44,12 @@ void LoginHttpSession::Start() LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_IP_INFO); stmt->setString(0, ip_address); - _queryProcessor.AddCallback(LoginDatabase.AsyncQuery(stmt) - .WithPreparedCallback([sess = shared_from_this()](PreparedQueryResult result) { sess->CheckIpCallback(std::move(result)); })); + this->_queryProcessor.AddCallback(LoginDatabase.AsyncQuery(stmt) + .WithPreparedCallback([sess = this->shared_from_this()](PreparedQueryResult result) { sess->CheckIpCallback(std::move(result)); })); } -void LoginHttpSession::CheckIpCallback(PreparedQueryResult result) +template<template<typename> typename SocketImpl> +void LoginHttpSession<SocketImpl>::CheckIpCallback(PreparedQueryResult result) { if (result) { @@ -60,21 +64,30 @@ void LoginHttpSession::CheckIpCallback(PreparedQueryResult result) if (banned) { - TC_LOG_DEBUG("server.http.session", "{} tries to log in using banned IP!", GetClientInfo()); - CloseSocket(); + TC_LOG_DEBUG("server.http.session", "{} tries to log in using banned IP!", this->GetClientInfo()); + this->CloseSocket(); return; } } - AsyncHandshake(); + if constexpr (std::is_same_v<BaseSocket, Trinity::Net::Http::SslSocket<LoginHttpSession<Trinity::Net::Http::SslSocket>>>) + { + this->AsyncHandshake(); + } + else + { + this->ResetHttpParser(); + this->AsyncRead(); + } } -Trinity::Net::Http::RequestHandlerResult LoginHttpSession::RequestHandler(Trinity::Net::Http::RequestContext& context) +template<template<typename> typename SocketImpl> +Trinity::Net::Http::RequestHandlerResult LoginHttpSession<SocketImpl>::RequestHandler(Trinity::Net::Http::RequestContext& context) { - return sLoginService.HandleRequest(shared_from_this(), context); + return sLoginService.HandleRequest(_owner.shared_from_this(), context); } -std::shared_ptr<Trinity::Net::Http::SessionState> LoginHttpSession::ObtainSessionState(Trinity::Net::Http::RequestContext& context) const +std::shared_ptr<Trinity::Net::Http::SessionState> ObtainSessionState(Trinity::Net::Http::RequestContext& context, boost::asio::ip::address const& remoteAddress) { using namespace std::string_literals; @@ -92,27 +105,38 @@ std::shared_ptr<Trinity::Net::Http::SessionState> LoginHttpSession::ObtainSessio if (eq != std::string_view::npos) name = cookie.substr(0, eq); - return name == SESSION_ID_COOKIE; + return name == LoginHttpSessionWrapper::SESSION_ID_COOKIE; }); if (sessionIdItr != cookies.end()) { std::string_view value = sessionIdItr->substr(eq + 1); - state = sLoginService.FindAndRefreshSessionState(value, GetRemoteIpAddress()); + state = sLoginService.FindAndRefreshSessionState(value, remoteAddress); } } if (!state) { - state = sLoginService.CreateNewSessionState(GetRemoteIpAddress()); + state = sLoginService.CreateNewSessionState(remoteAddress); std::string_view host = Trinity::Net::Http::ToStdStringView(context.request[boost::beast::http::field::host]); if (std::size_t port = host.find(':'); port != std::string_view::npos) host.remove_suffix(host.length() - port); context.response.insert(boost::beast::http::field::set_cookie, Trinity::StringFormat("{}={}; Path=/bnetserver; Domain={}; Secure; HttpOnly; SameSite=None", - SESSION_ID_COOKIE, boost::uuids::to_string(state->Id), host)); + LoginHttpSessionWrapper::SESSION_ID_COOKIE, boost::uuids::to_string(state->Id), host)); } return state; } + +template class LoginHttpSession<Trinity::Net::Http::SslSocket>; +template class LoginHttpSession<Trinity::Net::Http::Socket>; + +LoginHttpSessionWrapper::LoginHttpSessionWrapper(boost::asio::ip::tcp::socket&& socket) +{ + if (!SslContext::UsesDevWildcardCertificate()) + _socket = std::make_shared<LoginHttpSession<Trinity::Net::Http::SslSocket>>(std::move(socket), *this); + else + _socket = std::make_shared<LoginHttpSession<Trinity::Net::Http::Socket>>(std::move(socket), *this); +} } diff --git a/src/server/bnetserver/REST/LoginHttpSession.h b/src/server/bnetserver/REST/LoginHttpSession.h index 2ee70d5afa5..6bd1ec113d0 100644 --- a/src/server/bnetserver/REST/LoginHttpSession.h +++ b/src/server/bnetserver/REST/LoginHttpSession.h @@ -18,8 +18,10 @@ #ifndef TRINITYCORE_LOGIN_HTTP_SESSION_H #define TRINITYCORE_LOGIN_HTTP_SESSION_H +#include "HttpSocket.h" #include "HttpSslSocket.h" #include "SRP6.h" +#include <variant> namespace Battlenet { @@ -28,12 +30,16 @@ struct LoginSessionState : public Trinity::Net::Http::SessionState std::unique_ptr<Trinity::Crypto::SRP::BnetSRP6Base> Srp; }; -class LoginHttpSession : public Trinity::Net::Http::SslSocket<LoginHttpSession> +class LoginHttpSessionWrapper; +std::shared_ptr<Trinity::Net::Http::SessionState> ObtainSessionState(Trinity::Net::Http::RequestContext& context, boost::asio::ip::address const& remoteAddress); + +template<template<typename> typename SocketImpl> +class LoginHttpSession : public SocketImpl<LoginHttpSession<SocketImpl>> { -public: - static constexpr std::string_view SESSION_ID_COOKIE = "JSESSIONID"; + using BaseSocket = SocketImpl<LoginHttpSession<SocketImpl>>; - explicit LoginHttpSession(boost::asio::ip::tcp::socket&& socket); +public: + explicit LoginHttpSession(boost::asio::ip::tcp::socket&& socket, LoginHttpSessionWrapper& owner); ~LoginHttpSession(); void Start() override; @@ -42,10 +48,41 @@ public: Trinity::Net::Http::RequestHandlerResult RequestHandler(Trinity::Net::Http::RequestContext& context) override; - LoginSessionState* GetSessionState() const { return static_cast<LoginSessionState*>(_state.get()); } + LoginSessionState* GetSessionState() const { return static_cast<LoginSessionState*>(this->_state.get()); } protected: - std::shared_ptr<Trinity::Net::Http::SessionState> ObtainSessionState(Trinity::Net::Http::RequestContext& context) const override; + std::shared_ptr<Trinity::Net::Http::SessionState> ObtainSessionState(Trinity::Net::Http::RequestContext& context) const override + { + return Battlenet::ObtainSessionState(context, this->GetRemoteIpAddress()); + } + + LoginHttpSessionWrapper& _owner; +}; + +class LoginHttpSessionWrapper : public Trinity::Net::Http::AbstractSocket, public std::enable_shared_from_this<LoginHttpSessionWrapper> +{ +public: + static constexpr std::string_view SESSION_ID_COOKIE = "JSESSIONID"; + + explicit LoginHttpSessionWrapper(boost::asio::ip::tcp::socket&& socket); + + void Start() { return std::visit([&](auto&& socket) { return socket->Start(); }, _socket); } + bool Update() { return std::visit([&](auto&& socket) { return socket->Update(); }, _socket); } + boost::asio::ip::address GetRemoteIpAddress() const { return std::visit([&](auto&& socket) { return socket->GetRemoteIpAddress(); }, _socket); } + bool IsOpen() const { return std::visit([&](auto&& socket) { return socket->IsOpen(); }, _socket); } + void CloseSocket() { return std::visit([&](auto&& socket) { return socket->CloseSocket(); }, _socket); } + + void SendResponse(Trinity::Net::Http::RequestContext& context) override { return std::visit([&](auto&& socket) { return socket->SendResponse(context); }, _socket); } + void QueueQuery(QueryCallback&& queryCallback) override { return std::visit([&](auto&& socket) { return socket->QueueQuery(std::move(queryCallback)); }, _socket); } + std::string GetClientInfo() const override { return std::visit([&](auto&& socket) { return socket->GetClientInfo(); }, _socket); } + Optional<boost::uuids::uuid> GetSessionId() const override { return std::visit([&](auto&& socket) { return socket->GetSessionId(); }, _socket); } + LoginSessionState* GetSessionState() const { return std::visit([&](auto&& socket) { return socket->GetSessionState(); }, _socket); } + +private: + std::variant< + std::shared_ptr<LoginHttpSession<Trinity::Net::Http::SslSocket>>, + std::shared_ptr<LoginHttpSession<Trinity::Net::Http::Socket>> + > _socket; }; } #endif // TRINITYCORE_LOGIN_HTTP_SESSION_H diff --git a/src/server/bnetserver/REST/LoginRESTService.cpp b/src/server/bnetserver/REST/LoginRESTService.cpp index 7587510bafc..c9aabb248a3 100644 --- a/src/server/bnetserver/REST/LoginRESTService.cpp +++ b/src/server/bnetserver/REST/LoginRESTService.cpp @@ -25,6 +25,7 @@ #include "IteratorPair.h" #include "ProtobufJSON.h" #include "Resolver.h" +#include "SslContext.h" #include "Timer.h" #include "Util.h" @@ -43,32 +44,32 @@ bool LoginRESTService::StartNetwork(Trinity::Asio::IoContext& ioContext, std::st using Trinity::Net::Http::RequestHandlerFlag; - RegisterHandler(boost::beast::http::verb::get, "/bnetserver/login/", [this](std::shared_ptr<LoginHttpSession> session, HttpRequestContext& context) + RegisterHandler(boost::beast::http::verb::get, "/bnetserver/login/", [this](std::shared_ptr<LoginHttpSessionWrapper> session, HttpRequestContext& context) { return HandleGetForm(std::move(session), context); }); - RegisterHandler(boost::beast::http::verb::get, "/bnetserver/gameAccounts/", [](std::shared_ptr<LoginHttpSession> session, HttpRequestContext& context) + RegisterHandler(boost::beast::http::verb::get, "/bnetserver/gameAccounts/", [](std::shared_ptr<LoginHttpSessionWrapper> session, HttpRequestContext& context) { return HandleGetGameAccounts(std::move(session), context); }); - RegisterHandler(boost::beast::http::verb::get, "/bnetserver/portal/", [this](std::shared_ptr<LoginHttpSession> session, HttpRequestContext& context) + RegisterHandler(boost::beast::http::verb::get, "/bnetserver/portal/", [this](std::shared_ptr<LoginHttpSessionWrapper> session, HttpRequestContext& context) { return HandleGetPortal(std::move(session), context); }); - RegisterHandler(boost::beast::http::verb::post, "/bnetserver/login/", [this](std::shared_ptr<LoginHttpSession> session, HttpRequestContext& context) + RegisterHandler(boost::beast::http::verb::post, "/bnetserver/login/", [this](std::shared_ptr<LoginHttpSessionWrapper> session, HttpRequestContext& context) { return HandlePostLogin(std::move(session), context); }, RequestHandlerFlag::DoNotLogRequestContent); - RegisterHandler(boost::beast::http::verb::post, "/bnetserver/login/srp/", [](std::shared_ptr<LoginHttpSession> session, HttpRequestContext& context) + RegisterHandler(boost::beast::http::verb::post, "/bnetserver/login/srp/", [](std::shared_ptr<LoginHttpSessionWrapper> session, HttpRequestContext& context) { return HandlePostLoginSrpChallenge(std::move(session), context); }); - RegisterHandler(boost::beast::http::verb::post, "/bnetserver/refreshLoginTicket/", [this](std::shared_ptr<LoginHttpSession> session, HttpRequestContext& context) + RegisterHandler(boost::beast::http::verb::post, "/bnetserver/refreshLoginTicket/", [this](std::shared_ptr<LoginHttpSessionWrapper> session, HttpRequestContext& context) { return HandlePostRefreshLoginTicket(std::move(session), context); }); @@ -165,17 +166,18 @@ std::string LoginRESTService::ExtractAuthorization(HttpRequest const& request) return ticket; } -LoginRESTService::RequestHandlerResult LoginRESTService::HandleGetForm(std::shared_ptr<LoginHttpSession> session, HttpRequestContext& context) const +LoginRESTService::RequestHandlerResult LoginRESTService::HandleGetForm(std::shared_ptr<LoginHttpSessionWrapper> session, HttpRequestContext& context) const { JSON::Login::FormInputs form = _formInputs; - form.set_srp_url(Trinity::StringFormat("https://{}:{}/bnetserver/login/srp/", GetHostnameForClient(session->GetRemoteIpAddress()), _port)); + form.set_srp_url(Trinity::StringFormat("http{}://{}:{}/bnetserver/login/srp/", !SslContext::UsesDevWildcardCertificate() ? "s" : "", + GetHostnameForClient(session->GetRemoteIpAddress()), _port)); context.response.set(boost::beast::http::field::content_type, "application/json;charset=utf-8"); context.response.body() = ::JSON::Serialize(form); return RequestHandlerResult::Handled; } -LoginRESTService::RequestHandlerResult LoginRESTService::HandleGetGameAccounts(std::shared_ptr<LoginHttpSession> session, HttpRequestContext& context) +LoginRESTService::RequestHandlerResult LoginRESTService::HandleGetGameAccounts(std::shared_ptr<LoginHttpSessionWrapper> session, HttpRequestContext& context) { std::string ticket = ExtractAuthorization(context.request); if (ticket.empty()) @@ -224,14 +226,14 @@ LoginRESTService::RequestHandlerResult LoginRESTService::HandleGetGameAccounts(s return RequestHandlerResult::Async; } -LoginRESTService::RequestHandlerResult LoginRESTService::HandleGetPortal(std::shared_ptr<LoginHttpSession> session, HttpRequestContext& context) const +LoginRESTService::RequestHandlerResult LoginRESTService::HandleGetPortal(std::shared_ptr<LoginHttpSessionWrapper> session, HttpRequestContext& context) const { context.response.set(boost::beast::http::field::content_type, "text/plain"); context.response.body() = Trinity::StringFormat("{}:{}", GetHostnameForClient(session->GetRemoteIpAddress()), sConfigMgr->GetIntDefault("BattlenetPort", 1119)); return RequestHandlerResult::Handled; } -LoginRESTService::RequestHandlerResult LoginRESTService::HandlePostLogin(std::shared_ptr<LoginHttpSession> session, HttpRequestContext& context) const +LoginRESTService::RequestHandlerResult LoginRESTService::HandlePostLogin(std::shared_ptr<LoginHttpSessionWrapper> session, HttpRequestContext& context) const { std::shared_ptr<JSON::Login::LoginForm> loginForm = std::make_shared<JSON::Login::LoginForm>(); if (!::JSON::Deserialize(context.request.body(), loginForm.get())) @@ -395,7 +397,7 @@ LoginRESTService::RequestHandlerResult LoginRESTService::HandlePostLogin(std::sh return RequestHandlerResult::Async; } -LoginRESTService::RequestHandlerResult LoginRESTService::HandlePostLoginSrpChallenge(std::shared_ptr<LoginHttpSession> session, HttpRequestContext& context) +LoginRESTService::RequestHandlerResult LoginRESTService::HandlePostLoginSrpChallenge(std::shared_ptr<LoginHttpSessionWrapper> session, HttpRequestContext& context) { JSON::Login::LoginForm loginForm; if (!::JSON::Deserialize(context.request.body(), &loginForm)) @@ -482,7 +484,7 @@ LoginRESTService::RequestHandlerResult LoginRESTService::HandlePostLoginSrpChall return RequestHandlerResult::Async; } -LoginRESTService::RequestHandlerResult LoginRESTService::HandlePostRefreshLoginTicket(std::shared_ptr<LoginHttpSession> session, HttpRequestContext& context) const +LoginRESTService::RequestHandlerResult LoginRESTService::HandlePostRefreshLoginTicket(std::shared_ptr<LoginHttpSessionWrapper> session, HttpRequestContext& context) const { std::string ticket = ExtractAuthorization(context.request); if (ticket.empty()) diff --git a/src/server/bnetserver/REST/LoginRESTService.h b/src/server/bnetserver/REST/LoginRESTService.h index 5683c262590..bcc99808505 100644 --- a/src/server/bnetserver/REST/LoginRESTService.h +++ b/src/server/bnetserver/REST/LoginRESTService.h @@ -42,7 +42,7 @@ enum class BanMode BAN_ACCOUNT = 1 }; -class LoginRESTService : public Trinity::Net::Http::HttpService<LoginHttpSession> +class LoginRESTService : public Trinity::Net::Http::HttpService<LoginHttpSessionWrapper> { public: using RequestHandlerResult = Trinity::Net::Http::RequestHandlerResult; @@ -67,13 +67,13 @@ private: static std::string ExtractAuthorization(HttpRequest const& request); - RequestHandlerResult HandleGetForm(std::shared_ptr<LoginHttpSession> session, HttpRequestContext& context) const; - static RequestHandlerResult HandleGetGameAccounts(std::shared_ptr<LoginHttpSession> session, HttpRequestContext& context); - RequestHandlerResult HandleGetPortal(std::shared_ptr<LoginHttpSession> session, HttpRequestContext& context) const; + RequestHandlerResult HandleGetForm(std::shared_ptr<LoginHttpSessionWrapper> session, HttpRequestContext& context) const; + static RequestHandlerResult HandleGetGameAccounts(std::shared_ptr<LoginHttpSessionWrapper> session, HttpRequestContext& context); + RequestHandlerResult HandleGetPortal(std::shared_ptr<LoginHttpSessionWrapper> session, HttpRequestContext& context) const; - RequestHandlerResult HandlePostLogin(std::shared_ptr<LoginHttpSession> session, HttpRequestContext& context) const; - static RequestHandlerResult HandlePostLoginSrpChallenge(std::shared_ptr<LoginHttpSession> session, HttpRequestContext& context); - RequestHandlerResult HandlePostRefreshLoginTicket(std::shared_ptr<LoginHttpSession> session, HttpRequestContext& context) const; + RequestHandlerResult HandlePostLogin(std::shared_ptr<LoginHttpSessionWrapper> session, HttpRequestContext& context) const; + static RequestHandlerResult HandlePostLoginSrpChallenge(std::shared_ptr<LoginHttpSessionWrapper> session, HttpRequestContext& context); + RequestHandlerResult HandlePostRefreshLoginTicket(std::shared_ptr<LoginHttpSessionWrapper> session, HttpRequestContext& context) const; static std::unique_ptr<Trinity::Crypto::SRP::BnetSRP6Base> CreateSrpImplementation(SrpVersion version, SrpHashFunction hashFunction, std::string const& username, Trinity::Crypto::SRP::Salt const& salt, Trinity::Crypto::SRP::Verifier const& verifier); diff --git a/src/server/bnetserver/Server/Session.cpp b/src/server/bnetserver/Server/Session.cpp index b450df14e1d..c94ee6e3e56 100644 --- a/src/server/bnetserver/Server/Session.cpp +++ b/src/server/bnetserver/Server/Session.cpp @@ -260,7 +260,8 @@ uint32 Battlenet::Session::HandleLogon(authentication::v1::LogonRequest const* l challenge::v1::ChallengeExternalRequest externalChallenge; externalChallenge.set_payload_type("web_auth_url"); - externalChallenge.set_payload(Trinity::StringFormat("https://{}:{}/bnetserver/login/", sLoginService.GetHostnameForClient(GetRemoteIpAddress()), sLoginService.GetPort())); + externalChallenge.set_payload(Trinity::StringFormat("http{}://{}:{}/bnetserver/login/", !SslContext::UsesDevWildcardCertificate() ? "s" : "", + sLoginService.GetHostnameForClient(GetRemoteIpAddress()), sLoginService.GetPort())); Service<challenge::v1::ChallengeListener>(this).OnExternalChallenge(&externalChallenge); return ERROR_OK; } diff --git a/src/server/bnetserver/Server/SslContext.cpp b/src/server/bnetserver/Server/SslContext.cpp index 92d95f24cc5..52daff1645d 100644 --- a/src/server/bnetserver/Server/SslContext.cpp +++ b/src/server/bnetserver/Server/SslContext.cpp @@ -24,6 +24,8 @@ #include <openssl/store.h> #include <openssl/ui.h> +bool Battlenet::SslContext::_usesDevWildcardCertificate = false; + namespace { auto CreatePasswordUiMethodFromPemCallback(::pem_password_cb* callback) @@ -114,6 +116,37 @@ bool Battlenet::SslContext::Initialize() if (sk_X509_num(certs) > 0) { X509* cert = sk_X509_shift(certs); + + _usesDevWildcardCertificate = [&] + { + X509_NAME const* nm = X509_get_subject_name(cert); + int32 lastpos = -1; + while (true) + { + lastpos = X509_NAME_get_index_by_NID(nm, NID_commonName, lastpos); + if (lastpos == -1) + break; + + X509_NAME_ENTRY* e = X509_NAME_get_entry(nm, lastpos); + if (!e) + continue; + + ASN1_STRING* text = X509_NAME_ENTRY_get_data(e); + if (!text) + continue; + + unsigned char* utf8TextRaw = nullptr; + if (int utf8Length = ASN1_STRING_to_UTF8(&utf8TextRaw, text); utf8Length >= 0) + { + auto utf8Text = Trinity::make_unique_ptr_with_deleter(utf8TextRaw, [](unsigned char* ptr) { ::OPENSSL_free(ptr); }); + if (std::string_view(reinterpret_cast<char const*>(utf8Text.get()), utf8Length) == "*.*") + return true; + } + } + + return false; + }(); + SSL_CTX_use_cert_and_key(nativeContext, cert, key, certs, 1); } diff --git a/src/server/bnetserver/Server/SslContext.h b/src/server/bnetserver/Server/SslContext.h index 470deffd97e..330c0db221b 100644 --- a/src/server/bnetserver/Server/SslContext.h +++ b/src/server/bnetserver/Server/SslContext.h @@ -28,6 +28,11 @@ namespace Battlenet static bool Initialize(); static boost::asio::ssl::context& instance(); + + static bool UsesDevWildcardCertificate() { return _usesDevWildcardCertificate; } + + private: + static bool _usesDevWildcardCertificate; }; } diff --git a/src/server/database/Database/Implementation/HotfixDatabase.cpp b/src/server/database/Database/Implementation/HotfixDatabase.cpp index 55281c309ea..2c33390af10 100644 --- a/src/server/database/Database/Implementation/HotfixDatabase.cpp +++ b/src/server/database/Database/Implementation/HotfixDatabase.cpp @@ -38,7 +38,8 @@ void HotfixDatabaseConnection::DoPrepareStatements() // Achievement.db2 PrepareStatement(HOTFIX_SEL_ACHIEVEMENT, "SELECT Description, Title, Reward, ID, InstanceID, Faction, Supercedes, Category, MinimumCriteria, " - "Points, Flags, UiOrder, IconFileID, RewardItemID, CriteriaTree, SharesCriteria, CovenantID FROM achievement WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + "Points, Flags, UiOrder, IconFileID, RewardItemID, CriteriaTree, SharesCriteria, CovenantID, HiddenBeforeDisplaySeason, LegacyAfterTimeEvent" + " FROM achievement WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_ACHIEVEMENT, "SELECT MAX(ID) + 1 FROM achievement", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_ACHIEVEMENT, "SELECT ID, Description_lang, Title_lang, Reward_lang FROM achievement_locale" " WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH); @@ -51,9 +52,9 @@ void HotfixDatabaseConnection::DoPrepareStatements() // AdventureJournal.db2 PrepareStatement(HOTFIX_SEL_ADVENTURE_JOURNAL, "SELECT ID, Name, Description, ButtonText, RewardDescription, ContinueDescription, Type, " - "PlayerConditionID, Flags, ButtonActionType, TextureFileDataID, LfgDungeonID, QuestID, BattleMasterListID, PriorityMin, PriorityMax, ItemID, " - "ItemQuantity, CurrencyType, CurrencyQuantity, UiMapID, BonusPlayerConditionID1, BonusPlayerConditionID2, BonusValue1, BonusValue2" - " FROM adventure_journal WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + "PlayerConditionID, Flags, ButtonActionType, TextureFileDataID, LfgDungeonID, QuestID, BattleMasterListID, PriorityMin, PriorityMax, " + "CurrencyType, CurrencyQuantity, UiMapID, BonusPlayerConditionID1, BonusPlayerConditionID2, BonusValue1, BonusValue2 FROM adventure_journal" + " WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_ADVENTURE_JOURNAL, "SELECT MAX(ID) + 1 FROM adventure_journal", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_ADVENTURE_JOURNAL, "SELECT ID, Name_lang, Description_lang, ButtonText_lang, RewardDescription_lang, " "ContinueDescription_lang FROM adventure_journal_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH); diff --git a/src/server/game/DataStores/DB2LoadInfo.h b/src/server/game/DataStores/DB2LoadInfo.h index 843d3256632..7f52e54274c 100644 --- a/src/server/game/DataStores/DB2LoadInfo.h +++ b/src/server/game/DataStores/DB2LoadInfo.h @@ -26,7 +26,7 @@ struct AchievementLoadInfo { - static constexpr DB2FieldMeta Fields[17] = + static constexpr DB2FieldMeta Fields[19] = { { false, FT_STRING, "Description" }, { false, FT_STRING, "Title" }, @@ -45,9 +45,11 @@ struct AchievementLoadInfo { false, FT_INT, "CriteriaTree" }, { true, FT_SHORT, "SharesCriteria" }, { true, FT_INT, "CovenantID" }, + { true, FT_INT, "HiddenBeforeDisplaySeason" }, + { true, FT_INT, "LegacyAfterTimeEvent" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 17, &AchievementMeta::Instance, HOTFIX_SEL_ACHIEVEMENT }; + static constexpr DB2LoadInfo Instance{ Fields, 19, &AchievementMeta::Instance, HOTFIX_SEL_ACHIEVEMENT }; }; struct AchievementCategoryLoadInfo @@ -65,7 +67,7 @@ struct AchievementCategoryLoadInfo struct AdventureJournalLoadInfo { - static constexpr DB2FieldMeta Fields[25] = + static constexpr DB2FieldMeta Fields[23] = { { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, @@ -83,8 +85,6 @@ struct AdventureJournalLoadInfo { false, FT_SHORT, "BattleMasterListID" }, { false, FT_BYTE, "PriorityMin" }, { false, FT_BYTE, "PriorityMax" }, - { true, FT_INT, "ItemID" }, - { false, FT_INT, "ItemQuantity" }, { false, FT_SHORT, "CurrencyType" }, { false, FT_INT, "CurrencyQuantity" }, { false, FT_SHORT, "UiMapID" }, @@ -94,7 +94,7 @@ struct AdventureJournalLoadInfo { false, FT_BYTE, "BonusValue2" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 25, &AdventureJournalMeta::Instance, HOTFIX_SEL_ADVENTURE_JOURNAL }; + static constexpr DB2LoadInfo Instance{ Fields, 23, &AdventureJournalMeta::Instance, HOTFIX_SEL_ADVENTURE_JOURNAL }; }; struct AdventureMapPoiLoadInfo diff --git a/src/server/game/DataStores/DB2Metadata.h b/src/server/game/DataStores/DB2Metadata.h index cdfea34a87d..37da92ed3bb 100644 --- a/src/server/game/DataStores/DB2Metadata.h +++ b/src/server/game/DataStores/DB2Metadata.h @@ -22,7 +22,7 @@ struct AchievementMeta { - static constexpr DB2MetaField Fields[17] = + static constexpr DB2MetaField Fields[19] = { { FT_STRING, 1, true }, { FT_STRING, 1, true }, @@ -41,9 +41,11 @@ struct AchievementMeta { FT_INT, 1, false }, { FT_SHORT, 1, true }, { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, }; - static constexpr DB2Meta Instance{ 1260179, 3, 17, 17, 0xFA2C0B62, Fields, 11 }; + static constexpr DB2Meta Instance{ 1260179, 3, 19, 19, 0x920E09CB, Fields, 11 }; }; struct Achievement_CategoryMeta @@ -85,7 +87,7 @@ struct ActionBarGroupEntryMeta struct AdventureJournalMeta { - static constexpr DB2MetaField Fields[22] = + static constexpr DB2MetaField Fields[20] = { { FT_STRING, 1, true }, { FT_STRING, 1, true }, @@ -102,8 +104,6 @@ struct AdventureJournalMeta { FT_SHORT, 1, false }, { FT_BYTE, 1, false }, { FT_BYTE, 1, false }, - { FT_INT, 1, true }, - { FT_INT, 1, false }, { FT_SHORT, 1, false }, { FT_INT, 1, false }, { FT_SHORT, 1, false }, @@ -111,7 +111,21 @@ struct AdventureJournalMeta { FT_BYTE, 2, false }, }; - static constexpr DB2Meta Instance{ 1115949, -1, 22, 22, 0xC165B3AF, Fields, -1 }; + static constexpr DB2Meta Instance{ 1115949, -1, 20, 20, 0x872F8E30, Fields, -1 }; +}; + +struct AdventureJournalItemMeta +{ + static constexpr DB2MetaField Fields[5] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 5599873, -1, 5, 4, 0x7C64B965, Fields, 4 }; }; struct AdventureMapPOIMeta @@ -519,6 +533,18 @@ struct AreaPOIStateMeta static constexpr DB2Meta Instance{ 1000631, -1, 5, 4, 0xC236B11E, Fields, 4 }; }; +struct AreaPOIUiWidgetSetMeta +{ + static constexpr DB2MetaField Fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + }; + + static constexpr DB2Meta Instance{ 5634691, -1, 3, 3, 0x457F53FD, Fields, -1 }; +}; + struct AreaTableMeta { static constexpr DB2MetaField Fields[23] = @@ -1323,6 +1349,23 @@ struct BattlemasterListMeta static constexpr DB2Meta Instance{ 1360265, -1, 17, 17, 0x145B6F18, Fields, -1 }; }; +struct BattlepayCurrencyMeta +{ + static constexpr DB2MetaField Fields[8] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 5549327, 4, 8, 8, 0x6B8D71CD, Fields, -1 }; +}; + struct BeamEffectMeta { static constexpr DB2MetaField Fields[10] = @@ -7100,7 +7143,7 @@ struct JournalEncounterCreatureMeta struct JournalEncounterItemMeta { - static constexpr DB2MetaField Fields[6] = + static constexpr DB2MetaField Fields[7] = { { FT_INT, 1, false }, { FT_SHORT, 1, false }, @@ -7108,9 +7151,10 @@ struct JournalEncounterItemMeta { FT_BYTE, 1, true }, { FT_INT, 1, true }, { FT_BYTE, 1, true }, + { FT_INT, 1, true }, }; - static constexpr DB2Meta Instance{ 1344467, 0, 6, 6, 0xDAC92896, Fields, 1 }; + static constexpr DB2Meta Instance{ 1344467, 0, 7, 7, 0x2F00E0F6, Fields, 1 }; }; struct JournalEncounterSectionMeta @@ -9964,13 +10008,14 @@ struct QuestXUIQuestDetailsThemeMeta struct QuestXUiWidgetSetMeta { - static constexpr DB2MetaField Fields[2] = + static constexpr DB2MetaField Fields[3] = { { FT_INT, 1, true }, { FT_INT, 1, true }, + { FT_BYTE, 1, false }, }; - static constexpr DB2Meta Instance{ 3923421, -1, 2, 2, 0x2B4CA6A1, Fields, -1 }; + static constexpr DB2Meta Instance{ 3923421, -1, 3, 3, 0x5FABCD9E, Fields, -1 }; }; struct RTPCMeta @@ -10100,6 +10145,22 @@ struct RenownRewardsMeta static constexpr DB2Meta Instance{ 3743117, -1, 18, 18, 0xB1FF79CA, Fields, 3 }; }; +struct RenownRewardsPlunderstormMeta +{ + static constexpr DB2MetaField Fields[7] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 5662591, -1, 7, 7, 0xD63E74F4, Fields, 2 }; +}; + struct ResearchBranchMeta { static constexpr DB2MetaField Fields[6] = @@ -13721,9 +13782,10 @@ struct UiModelSceneCameraMeta struct UiPartyPoseMeta { - static constexpr DB2MetaField Fields[10] = + static constexpr DB2MetaField Fields[11] = { { FT_STRING, 1, true }, + { FT_STRING, 1, true }, { FT_INT, 1, false }, { FT_INT, 1, true }, { FT_INT, 1, true }, @@ -13735,7 +13797,7 @@ struct UiPartyPoseMeta { FT_INT, 1, true }, }; - static constexpr DB2Meta Instance{ 1993323, 1, 10, 9, 0xF02E09B6, Fields, 9 }; + static constexpr DB2Meta Instance{ 1993323, 2, 11, 10, 0x4F7568D2, Fields, 10 }; }; struct UiQuestDetailsThemeMeta @@ -14174,6 +14236,18 @@ struct VignetteMeta static constexpr DB2Meta Instance{ 892861, -1, 10, 10, 0xEC171292, Fields, -1 }; }; +struct VignetteUiWidgetSetMeta +{ + static constexpr DB2MetaField Fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + }; + + static constexpr DB2Meta Instance{ 5634692, -1, 3, 3, 0xB3CE04F0, Fields, -1 }; +}; + struct VirtualAttachmentMeta { static constexpr DB2MetaField Fields[2] = diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h index 5a6d8144dfe..2b1243dbb8f 100644 --- a/src/server/game/DataStores/DB2Structure.h +++ b/src/server/game/DataStores/DB2Structure.h @@ -44,6 +44,8 @@ struct AchievementEntry uint32 CriteriaTree; int16 SharesCriteria; // referenced achievement (counting of all completed criterias) int32 CovenantID; + int32 HiddenBeforeDisplaySeason; // hidden in UI before this DisplaySeason is active + int32 LegacyAfterTimeEvent; // category changes clientside to Legacy after this TimeEvent is passed }; struct Achievement_CategoryEntry @@ -72,8 +74,6 @@ struct AdventureJournalEntry uint16 BattleMasterListID; uint8 PriorityMin; uint8 PriorityMax; - int32 ItemID; - uint32 ItemQuantity; uint16 CurrencyType; uint32 CurrencyQuantity; uint16 UiMapID; diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 149ed7b1742..1748dfa587f 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -468,13 +468,14 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe bool hasMoveCurveID = createProperties && createProperties->MoveCurveId != 0; bool hasAreaTriggerSphere = shape.IsSphere(); bool hasAreaTriggerBox = shape.IsBox(); - bool hasAreaTriggerPolygon = createProperties && shape.IsPolygon(); + bool hasAreaTriggerPolygon = shape.IsPolygon(); bool hasAreaTriggerCylinder = shape.IsCylinder(); bool hasDisk = shape.IsDisk(); bool hasBoundedPlane = shape.IsBoundedPlane(); bool hasAreaTriggerSpline = areaTrigger->HasSplines(); bool hasOrbit = areaTrigger->HasOrbit(); bool hasMovementScript = false; + bool hasPositionalSoundKitID= false; data->WriteBit(hasAbsoluteOrientation); data->WriteBit(hasDynamicShape); @@ -488,6 +489,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe data->WriteBit(hasMorphCurveID); data->WriteBit(hasFacingCurveID); data->WriteBit(hasMoveCurveID); + data->WriteBit(hasPositionalSoundKitID); data->WriteBit(hasAreaTriggerSphere); data->WriteBit(hasAreaTriggerBox); data->WriteBit(hasAreaTriggerPolygon); @@ -523,6 +525,9 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe if (hasMoveCurveID) *data << uint32(createProperties->MoveCurveId); + if (hasPositionalSoundKitID) + *data << uint32(0); + if (hasAreaTriggerSphere) { *data << float(shape.SphereDatas.Radius); diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp index 2e012897754..de4b2123202 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp @@ -2282,12 +2282,14 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi data << int32(HonorLevel); data << int64(LogoutTime); data << uint32(ArenaCooldowns.size()); - data << int32(Field_B0); - data << int32(Field_B4); + data << int32(Field_1AC); + data << int32(Field_1B0); data << int32(CurrentBattlePetSpeciesID); CtrOptions->WriteCreate(data, owner, receiver); data << int32(CovenantID); data << int32(SoulbindID); + data << Field_1F0; + data << int32(Field_200); data << uint32(VisualItemReplacements.size()); for (uint32 i = 0; i < 19; ++i) { @@ -2327,6 +2329,10 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi data.WriteBits(DeclinedNames.has_value(), 1); data << DungeonScore; data.WriteString(Name); + for (uint32 i = 0; i < 16; ++i) + { + data << VisibleEquipableSpells[i]; + } if (DeclinedNames.has_value()) { DeclinedNames->WriteCreate(data, owner, receiver); @@ -2336,7 +2342,7 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const { - Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x00003FFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xC0000000u, 0xFFFFFFFFu, 0x00001FFFu }); + Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x0000FFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFFFu, 0xFFFFFFFFu }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } @@ -2344,12 +2350,12 @@ void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi void PlayerData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember)) - allowedMaskForTarget |= { 0x00000022u, 0xFFFFC000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x3FFFFFFFu, 0x00000000u, 0x00000000u }; + allowedMaskForTarget |= { 0x00000022u, 0xFFFF0000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000000u, 0x00000000u }; } void PlayerData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { - Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x00003FFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xC0000000u, 0xFFFFFFFFu, 0x00001FFFu }); + Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x0000FFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFFFu, 0xFFFFFFFFu }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); changesMask &= allowedMaskForTarget; } @@ -2565,11 +2571,11 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign { if (changesMask[34]) { - data << int32(Field_B0); + data << int32(Field_1AC); } if (changesMask[35]) { - data << int32(Field_B4); + data << int32(Field_1B0); } if (changesMask[36]) { @@ -2587,17 +2593,25 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign { data << int32(SoulbindID); } - if (changesMask[42]) + if (changesMask[40]) + { + data << Field_1F0; + } + if (changesMask[41]) + { + data << int32(Field_200); + } + if (changesMask[44]) { PersonalTabard->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } if (changesMask[33]) { - data.WriteBits(Name->size(), 32); + data.WriteBits(Name->size(), 6); } data.WriteBits(DeclinedNames.has_value(), 1); data.FlushBits(); - if (changesMask[40]) + if (changesMask[42]) { data << DungeonScore; } @@ -2605,7 +2619,7 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign { data.WriteString(Name); } - if (changesMask[41]) + if (changesMask[43]) { if (DeclinedNames.has_value()) { @@ -2613,21 +2627,21 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign } } } - if (changesMask[43]) + if (changesMask[45]) { for (uint32 i = 0; i < 2; ++i) { - if (changesMask[44 + i]) + if (changesMask[46 + i]) { data << uint8(PartyType[i]); } } } - if (changesMask[46]) + if (changesMask[48]) { for (uint32 i = 0; i < 175; ++i) { - if (changesMask[47 + i]) + if (changesMask[49 + i]) { if (noQuestLogChangesMask) QuestLog[i].WriteCreate(data, owner, receiver); @@ -2636,36 +2650,46 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign } } } - if (changesMask[222]) + if (changesMask[224]) { for (uint32 i = 0; i < 19; ++i) { - if (changesMask[223 + i]) + if (changesMask[225 + i]) { VisibleItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[242]) + if (changesMask[244]) { for (uint32 i = 0; i < 6; ++i) { - if (changesMask[243 + i]) + if (changesMask[245 + i]) { data << float(AvgItemLevel[i]); } } } - if (changesMask[249]) + if (changesMask[268]) { for (uint32 i = 0; i < 19; ++i) { - if (changesMask[250 + i]) + if (changesMask[269 + i]) { data << uint32(Field_3120[i]); } } } + if (changesMask[251]) + { + for (uint32 i = 0; i < 16; ++i) + { + if (changesMask[252 + i]) + { + data << VisibleEquipableSpells[i]; + } + } + } data.FlushBits(); } @@ -2703,12 +2727,14 @@ void PlayerData::ClearChangesMask() Base::ClearChangesMask(HonorLevel); Base::ClearChangesMask(LogoutTime); Base::ClearChangesMask(Name); - Base::ClearChangesMask(Field_B0); - Base::ClearChangesMask(Field_B4); + Base::ClearChangesMask(Field_1AC); + Base::ClearChangesMask(Field_1B0); Base::ClearChangesMask(CurrentBattlePetSpeciesID); Base::ClearChangesMask(CtrOptions); Base::ClearChangesMask(CovenantID); Base::ClearChangesMask(SoulbindID); + Base::ClearChangesMask(Field_1F0); + Base::ClearChangesMask(Field_200); Base::ClearChangesMask(DungeonScore); Base::ClearChangesMask(DeclinedNames); Base::ClearChangesMask(PersonalTabard); @@ -2716,6 +2742,7 @@ void PlayerData::ClearChangesMask() Base::ClearChangesMask(QuestLog); Base::ClearChangesMask(VisibleItems); Base::ClearChangesMask(AvgItemLevel); + Base::ClearChangesMask(VisibleEquipableSpells); Base::ClearChangesMask(Field_3120); _changesMask.ResetAll(); } diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index 078f0e5738c..7440d41d65b 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -486,7 +486,7 @@ struct CustomTabardInfo : public IsUpdateFieldStructureTag, public HasChangesMas void ClearChangesMask(); }; -struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<269> +struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<288> { UpdateField<bool, 0, 1> HasQuestSession; UpdateField<bool, 0, 2> HasLevelLink; @@ -520,20 +520,23 @@ struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<269> UpdateField<int32, 0, 30> HonorLevel; UpdateField<int64, 0, 31> LogoutTime; UpdateField<std::string, 32, 33> Name; - UpdateField<int32, 32, 34> Field_B0; - UpdateField<int32, 32, 35> Field_B4; + UpdateField<int32, 32, 34> Field_1AC; + UpdateField<int32, 32, 35> Field_1B0; UpdateField<int32, 32, 36> CurrentBattlePetSpeciesID; UpdateField<UF::CTROptions, 32, 37> CtrOptions; UpdateField<int32, 32, 38> CovenantID; UpdateField<int32, 32, 39> SoulbindID; - UpdateField<WorldPackets::MythicPlus::DungeonScoreSummary, 32, 40> DungeonScore; - OptionalUpdateField<UF::DeclinedNames, 32, 41> DeclinedNames; - UpdateField<UF::CustomTabardInfo, 32, 42> PersonalTabard; - UpdateFieldArray<uint8, 2, 43, 44> PartyType; - UpdateFieldArray<UF::QuestLog, 175, 46, 47> QuestLog; - UpdateFieldArray<UF::VisibleItem, 19, 222, 223> VisibleItems; - UpdateFieldArray<float, 6, 242, 243> AvgItemLevel; - UpdateFieldArray<uint32, 19, 249, 250> Field_3120; + UpdateField<ObjectGuid, 32, 40> Field_1F0; + UpdateField<int32, 32, 41> Field_200; + UpdateField<WorldPackets::MythicPlus::DungeonScoreSummary, 32, 42> DungeonScore; + OptionalUpdateField<UF::DeclinedNames, 32, 43> DeclinedNames; + UpdateField<UF::CustomTabardInfo, 32, 44> PersonalTabard; + UpdateFieldArray<uint8, 2, 45, 46> PartyType; + UpdateFieldArray<UF::QuestLog, 175, 48, 49> QuestLog; + UpdateFieldArray<UF::VisibleItem, 19, 224, 225> VisibleItems; + UpdateFieldArray<float, 6, 244, 245> AvgItemLevel; + UpdateFieldArray<WorldPackets::Item::ItemInstance, 16, 251, 252> VisibleEquipableSpells; + UpdateFieldArray<uint32, 19, 268, 269> Field_3120; void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 3aeeecf0a3b..b6683045d96 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -15771,7 +15771,7 @@ bool Player::SatisfyQuestRace(Quest const* qInfo, bool msg) const return true; } -bool Player::SatisfyQuestReputation(Quest const* qInfo, bool msg) const +bool Player::SatisfyQuestMinReputation(Quest const* qInfo, bool msg) const { uint32 fIdMin = qInfo->GetRequiredMinRepFaction(); //Min required rep if (fIdMin && GetReputationMgr().GetReputation(fIdMin) < qInfo->GetRequiredMinRepValue()) @@ -15785,6 +15785,11 @@ bool Player::SatisfyQuestReputation(Quest const* qInfo, bool msg) const return false; } + return true; +} + +bool Player::SatisfyQuestMaxReputation(Quest const* qInfo, bool msg) const +{ uint32 fIdMax = qInfo->GetRequiredMaxRepFaction(); //Max required rep if (fIdMax && GetReputationMgr().GetReputation(fIdMax) >= qInfo->GetRequiredMaxRepValue()) { @@ -15800,6 +15805,11 @@ bool Player::SatisfyQuestReputation(Quest const* qInfo, bool msg) const return true; } +bool Player::SatisfyQuestReputation(Quest const* qInfo, bool msg) const +{ + return SatisfyQuestMinReputation(qInfo, msg) && SatisfyQuestMaxReputation(qInfo, msg); +} + bool Player::SatisfyQuestStatus(Quest const* qInfo, bool msg) const { if (GetQuestStatus(qInfo->GetQuestId()) == QUEST_STATUS_REWARDED) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 4c33e4dae77..02e6fb8e145 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -719,7 +719,6 @@ enum ChildEquipmentSlots CHILD_EQUIPMENT_SLOT_END = 211, }; -// slots past 214 are guessed (unused in client) enum EquipableSpellSlots { EQUIPABLE_SPELL_OFFENSIVE_SLOT1 = 211, @@ -1577,6 +1576,8 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player> bool SatisfyQuestDependentBreadcrumbQuests(Quest const* qInfo, bool msg) const; bool SatisfyQuestClass(Quest const* qInfo, bool msg) const; bool SatisfyQuestRace(Quest const* qInfo, bool msg) const; + bool SatisfyQuestMinReputation(Quest const* qInfo, bool msg) const; + bool SatisfyQuestMaxReputation(Quest const* qInfo, bool msg) const; bool SatisfyQuestReputation(Quest const* qInfo, bool msg) const; bool SatisfyQuestStatus(Quest const* qInfo, bool msg) const; bool SatisfyQuestConditions(Quest const* qInfo, bool msg) const; diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index 04b6792ba7f..db244e2f877 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -690,13 +690,20 @@ void WorldSession::HandlePushQuestToParty(WorldPackets::Quest::PushQuestToParty& continue; } - if (!receiver->SatisfyQuestReputation(quest, false)) + if (!receiver->SatisfyQuestMinReputation(quest, false)) { sender->SendPushToPartyResponse(receiver, QuestPushReason::LowFaction); receiver->SendPushToPartyResponse(sender, QuestPushReason::LowFactionToRecipient, quest); continue; } + if (!receiver->SatisfyQuestMaxReputation(quest, false)) + { + sender->SendPushToPartyResponse(receiver, QuestPushReason::HighFaction); + receiver->SendPushToPartyResponse(sender, QuestPushReason::HighFactionToRecipient, quest); + continue; + } + if (!receiver->SatisfyQuestDependentQuests(quest, false)) { sender->SendPushToPartyResponse(receiver, QuestPushReason::Prerequisite); diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 7fdc1b74eac..81038f1729a 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -7439,641 +7439,649 @@ enum class GameError : uint32 ERR_QUEST_PUSH_RACE_TO_RECIPIENT_S = 491, ERR_QUEST_PUSH_LOW_FACTION_S = 492, ERR_QUEST_PUSH_LOW_FACTION_TO_RECIPIENT_S = 493, - ERR_QUEST_PUSH_EXPANSION_S = 494, - ERR_QUEST_PUSH_EXPANSION_TO_RECIPIENT_S = 495, - ERR_QUEST_PUSH_NOT_GARRISON_OWNER_S = 496, - ERR_QUEST_PUSH_NOT_GARRISON_OWNER_TO_RECIPIENT_S = 497, - ERR_QUEST_PUSH_WRONG_COVENANT_S = 498, - ERR_QUEST_PUSH_WRONG_COVENANT_TO_RECIPIENT_S = 499, - ERR_QUEST_PUSH_NEW_PLAYER_EXPERIENCE_S = 500, - ERR_QUEST_PUSH_NEW_PLAYER_EXPERIENCE_TO_RECIPIENT_S = 501, - ERR_QUEST_PUSH_WRONG_FACTION_S = 502, - ERR_QUEST_PUSH_WRONG_FACTION_TO_RECIPIENT_S = 503, - ERR_QUEST_PUSH_CROSS_FACTION_RESTRICTED_S = 504, - ERR_RAID_GROUP_LOWLEVEL = 505, - ERR_RAID_GROUP_ONLY = 506, - ERR_RAID_GROUP_FULL = 507, - ERR_RAID_GROUP_REQUIREMENTS_UNMATCH = 508, - ERR_CORPSE_IS_NOT_IN_INSTANCE = 509, - ERR_PVP_KILL_HONORABLE = 510, - ERR_PVP_KILL_DISHONORABLE = 511, - ERR_SPELL_FAILED_ALREADY_AT_FULL_HEALTH = 512, - ERR_SPELL_FAILED_ALREADY_AT_FULL_MANA = 513, - ERR_SPELL_FAILED_ALREADY_AT_FULL_POWER_S = 514, - ERR_AUTOLOOT_MONEY_S = 515, - ERR_GENERIC_STUNNED = 516, - ERR_GENERIC_THROTTLE = 517, - ERR_CLUB_FINDER_SEARCHING_TOO_FAST = 518, - ERR_TARGET_STUNNED = 519, - ERR_MUST_REPAIR_DURABILITY = 520, - ERR_RAID_YOU_JOINED = 521, - ERR_RAID_YOU_LEFT = 522, - ERR_INSTANCE_GROUP_JOINED_WITH_PARTY = 523, - ERR_INSTANCE_GROUP_JOINED_WITH_RAID = 524, - ERR_RAID_MEMBER_ADDED_S = 525, - ERR_RAID_MEMBER_REMOVED_S = 526, - ERR_INSTANCE_GROUP_ADDED_S = 527, - ERR_INSTANCE_GROUP_REMOVED_S = 528, - ERR_CLICK_ON_ITEM_TO_FEED = 529, - ERR_TOO_MANY_CHAT_CHANNELS = 530, - ERR_LOOT_ROLL_PENDING = 531, - ERR_LOOT_PLAYER_NOT_FOUND = 532, - ERR_NOT_IN_RAID = 533, - ERR_LOGGING_OUT = 534, - ERR_TARGET_LOGGING_OUT = 535, - ERR_NOT_WHILE_MOUNTED = 536, - ERR_NOT_WHILE_SHAPESHIFTED = 537, - ERR_NOT_IN_COMBAT = 538, - ERR_NOT_WHILE_DISARMED = 539, - ERR_PET_BROKEN = 540, - ERR_TALENT_WIPE_ERROR = 541, - ERR_SPEC_WIPE_ERROR = 542, - ERR_GLYPH_WIPE_ERROR = 543, - ERR_PET_SPEC_WIPE_ERROR = 544, - ERR_FEIGN_DEATH_RESISTED = 545, - ERR_MEETING_STONE_IN_QUEUE_S = 546, - ERR_MEETING_STONE_LEFT_QUEUE_S = 547, - ERR_MEETING_STONE_OTHER_MEMBER_LEFT = 548, - ERR_MEETING_STONE_PARTY_KICKED_FROM_QUEUE = 549, - ERR_MEETING_STONE_MEMBER_STILL_IN_QUEUE = 550, - ERR_MEETING_STONE_SUCCESS = 551, - ERR_MEETING_STONE_IN_PROGRESS = 552, - ERR_MEETING_STONE_MEMBER_ADDED_S = 553, - ERR_MEETING_STONE_GROUP_FULL = 554, - ERR_MEETING_STONE_NOT_LEADER = 555, - ERR_MEETING_STONE_INVALID_LEVEL = 556, - ERR_MEETING_STONE_TARGET_NOT_IN_PARTY = 557, - ERR_MEETING_STONE_TARGET_INVALID_LEVEL = 558, - ERR_MEETING_STONE_MUST_BE_LEADER = 559, - ERR_MEETING_STONE_NO_RAID_GROUP = 560, - ERR_MEETING_STONE_NEED_PARTY = 561, - ERR_MEETING_STONE_NOT_FOUND = 562, - ERR_MEETING_STONE_TARGET_IN_VEHICLE = 563, - ERR_GUILDEMBLEM_SAME = 564, - ERR_EQUIP_TRADE_ITEM = 565, - ERR_PVP_TOGGLE_ON = 566, - ERR_PVP_TOGGLE_OFF = 567, - ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS = 568, - ERR_GROUP_JOIN_BATTLEGROUND_DEAD = 569, - ERR_GROUP_JOIN_BATTLEGROUND_S = 570, - ERR_GROUP_JOIN_BATTLEGROUND_FAIL = 571, - ERR_GROUP_JOIN_BATTLEGROUND_TOO_MANY = 572, - ERR_SOLO_JOIN_BATTLEGROUND_S = 573, - ERR_JOIN_SINGLE_SCENARIO_S = 574, - ERR_BATTLEGROUND_TOO_MANY_QUEUES = 575, - ERR_BATTLEGROUND_CANNOT_QUEUE_FOR_RATED = 576, - ERR_BATTLEDGROUND_QUEUED_FOR_RATED = 577, - ERR_BATTLEGROUND_TEAM_LEFT_QUEUE = 578, - ERR_BATTLEGROUND_NOT_IN_BATTLEGROUND = 579, - ERR_ALREADY_IN_ARENA_TEAM_S = 580, - ERR_INVALID_PROMOTION_CODE = 581, - ERR_BG_PLAYER_JOINED_SS = 582, - ERR_BG_PLAYER_LEFT_S = 583, - ERR_RESTRICTED_ACCOUNT = 584, - ERR_RESTRICTED_ACCOUNT_TRIAL = 585, - ERR_PLAY_TIME_EXCEEDED = 586, - ERR_APPROACHING_PARTIAL_PLAY_TIME = 587, - ERR_APPROACHING_PARTIAL_PLAY_TIME_2 = 588, - ERR_APPROACHING_NO_PLAY_TIME = 589, - ERR_APPROACHING_NO_PLAY_TIME_2 = 590, - ERR_UNHEALTHY_TIME = 591, - ERR_CHAT_RESTRICTED_TRIAL = 592, - ERR_CHAT_THROTTLED = 593, - ERR_MAIL_REACHED_CAP = 594, - ERR_INVALID_RAID_TARGET = 595, - ERR_RAID_LEADER_READY_CHECK_START_S = 596, - ERR_READY_CHECK_IN_PROGRESS = 597, - ERR_READY_CHECK_THROTTLED = 598, - ERR_DUNGEON_DIFFICULTY_FAILED = 599, - ERR_DUNGEON_DIFFICULTY_CHANGED_S = 600, - ERR_TRADE_WRONG_REALM = 601, - ERR_TRADE_NOT_ON_TAPLIST = 602, - ERR_CHAT_PLAYER_AMBIGUOUS_S = 603, - ERR_LOOT_CANT_LOOT_THAT_NOW = 604, - ERR_LOOT_MASTER_INV_FULL = 605, - ERR_LOOT_MASTER_UNIQUE_ITEM = 606, - ERR_LOOT_MASTER_OTHER = 607, - ERR_FILTERING_YOU_S = 608, - ERR_USE_PREVENTED_BY_MECHANIC_S = 609, - ERR_ITEM_UNIQUE_EQUIPPABLE = 610, - ERR_LFG_LEADER_IS_LFM_S = 611, - ERR_LFG_PENDING = 612, - ERR_CANT_SPEAK_LANGAGE = 613, - ERR_VENDOR_MISSING_TURNINS = 614, - ERR_BATTLEGROUND_NOT_IN_TEAM = 615, - ERR_NOT_IN_BATTLEGROUND = 616, - ERR_NOT_ENOUGH_HONOR_POINTS = 617, - ERR_NOT_ENOUGH_ARENA_POINTS = 618, - ERR_SOCKETING_REQUIRES_META_GEM = 619, - ERR_SOCKETING_META_GEM_ONLY_IN_METASLOT = 620, - ERR_SOCKETING_REQUIRES_HYDRAULIC_GEM = 621, - ERR_SOCKETING_HYDRAULIC_GEM_ONLY_IN_HYDRAULICSLOT = 622, - ERR_SOCKETING_REQUIRES_COGWHEEL_GEM = 623, - ERR_SOCKETING_COGWHEEL_GEM_ONLY_IN_COGWHEELSLOT = 624, - ERR_SOCKETING_ITEM_TOO_LOW_LEVEL = 625, - ERR_ITEM_MAX_COUNT_SOCKETED = 626, - ERR_SYSTEM_DISABLED = 627, - ERR_QUEST_FAILED_TOO_MANY_DAILY_QUESTS_I = 628, - ERR_ITEM_MAX_COUNT_EQUIPPED_SOCKETED = 629, - ERR_ITEM_UNIQUE_EQUIPPABLE_SOCKETED = 630, - ERR_USER_SQUELCHED = 631, - ERR_ACCOUNT_SILENCED = 632, - ERR_PARTY_MEMBER_SILENCED = 633, - ERR_PARTY_MEMBER_SILENCED_LFG_DELIST = 634, - ERR_TOO_MUCH_GOLD = 635, - ERR_NOT_BARBER_SITTING = 636, - ERR_QUEST_FAILED_CAIS = 637, - ERR_INVITE_RESTRICTED_TRIAL = 638, - ERR_VOICE_IGNORE_FULL = 639, - ERR_VOICE_IGNORE_SELF = 640, - ERR_VOICE_IGNORE_NOT_FOUND = 641, - ERR_VOICE_IGNORE_ALREADY_S = 642, - ERR_VOICE_IGNORE_ADDED_S = 643, - ERR_VOICE_IGNORE_REMOVED_S = 644, - ERR_VOICE_IGNORE_AMBIGUOUS = 645, - ERR_VOICE_IGNORE_DELETED = 646, - ERR_UNKNOWN_MACRO_OPTION_S = 647, - ERR_NOT_DURING_ARENA_MATCH = 648, - ERR_NOT_IN_RATED_BATTLEGROUND = 649, - ERR_PLAYER_SILENCED = 650, - ERR_PLAYER_UNSILENCED = 651, - ERR_COMSAT_DISCONNECT = 652, - ERR_COMSAT_RECONNECT_ATTEMPT = 653, - ERR_COMSAT_CONNECT_FAIL = 654, - ERR_MAIL_INVALID_ATTACHMENT_SLOT = 655, - ERR_MAIL_TOO_MANY_ATTACHMENTS = 656, - ERR_MAIL_INVALID_ATTACHMENT = 657, - ERR_MAIL_ATTACHMENT_EXPIRED = 658, - ERR_VOICE_CHAT_PARENTAL_DISABLE_MIC = 659, - ERR_PROFANE_CHAT_NAME = 660, - ERR_PLAYER_SILENCED_ECHO = 661, - ERR_PLAYER_UNSILENCED_ECHO = 662, - ERR_LOOT_CANT_LOOT_THAT = 663, - ERR_ARENA_EXPIRED_CAIS = 664, - ERR_GROUP_ACTION_THROTTLED = 665, - ERR_ALREADY_PICKPOCKETED = 666, - ERR_NAME_INVALID = 667, - ERR_NAME_NO_NAME = 668, - ERR_NAME_TOO_SHORT = 669, - ERR_NAME_TOO_LONG = 670, - ERR_NAME_MIXED_LANGUAGES = 671, - ERR_NAME_PROFANE = 672, - ERR_NAME_RESERVED = 673, - ERR_NAME_THREE_CONSECUTIVE = 674, - ERR_NAME_INVALID_SPACE = 675, - ERR_NAME_CONSECUTIVE_SPACES = 676, - ERR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS = 677, - ERR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END = 678, - ERR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME = 679, - ERR_RECRUIT_A_FRIEND_NOT_LINKED = 680, - ERR_RECRUIT_A_FRIEND_NOT_NOW = 681, - ERR_RECRUIT_A_FRIEND_SUMMON_LEVEL_MAX = 682, - ERR_RECRUIT_A_FRIEND_SUMMON_COOLDOWN = 683, - ERR_RECRUIT_A_FRIEND_SUMMON_OFFLINE = 684, - ERR_RECRUIT_A_FRIEND_INSUF_EXPAN_LVL = 685, - ERR_RECRUIT_A_FRIEND_MAP_INCOMING_TRANSFER_NOT_ALLOWED = 686, - ERR_NOT_SAME_ACCOUNT = 687, - ERR_BAD_ON_USE_ENCHANT = 688, - ERR_TRADE_SELF = 689, - ERR_TOO_MANY_SOCKETS = 690, - ERR_ITEM_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 691, - ERR_TRADE_TARGET_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 692, - ERR_ITEM_MAX_LIMIT_CATEGORY_SOCKETED_EXCEEDED_IS = 693, - ERR_ITEM_MAX_LIMIT_CATEGORY_EQUIPPED_EXCEEDED_IS = 694, - ERR_SHAPESHIFT_FORM_CANNOT_EQUIP = 695, - ERR_ITEM_INVENTORY_FULL_SATCHEL = 696, - ERR_SCALING_STAT_ITEM_LEVEL_EXCEEDED = 697, - ERR_SCALING_STAT_ITEM_LEVEL_TOO_LOW = 698, - ERR_PURCHASE_LEVEL_TOO_LOW = 699, - ERR_GROUP_SWAP_FAILED = 700, - ERR_INVITE_IN_COMBAT = 701, - ERR_INVALID_GLYPH_SLOT = 702, - ERR_GENERIC_NO_VALID_TARGETS = 703, - ERR_CALENDAR_EVENT_ALERT_S = 704, - ERR_PET_LEARN_SPELL_S = 705, - ERR_PET_LEARN_ABILITY_S = 706, - ERR_PET_SPELL_UNLEARNED_S = 707, - ERR_INVITE_UNKNOWN_REALM = 708, - ERR_INVITE_NO_PARTY_SERVER = 709, - ERR_INVITE_PARTY_BUSY = 710, - ERR_INVITE_PARTY_BUSY_PENDING_REQUEST = 711, - ERR_INVITE_PARTY_BUSY_PENDING_SUGGEST = 712, - ERR_PARTY_TARGET_AMBIGUOUS = 713, - ERR_PARTY_LFG_INVITE_RAID_LOCKED = 714, - ERR_PARTY_LFG_BOOT_LIMIT = 715, - ERR_PARTY_LFG_BOOT_COOLDOWN_S = 716, - ERR_PARTY_LFG_BOOT_NOT_ELIGIBLE_S = 717, - ERR_PARTY_LFG_BOOT_INPATIENT_TIMER_S = 718, - ERR_PARTY_LFG_BOOT_IN_PROGRESS = 719, - ERR_PARTY_LFG_BOOT_TOO_FEW_PLAYERS = 720, - ERR_PARTY_LFG_BOOT_VOTE_SUCCEEDED = 721, - ERR_PARTY_LFG_BOOT_VOTE_FAILED = 722, - ERR_PARTY_LFG_BOOT_IN_COMBAT = 723, - ERR_PARTY_LFG_BOOT_DUNGEON_COMPLETE = 724, - ERR_PARTY_LFG_BOOT_LOOT_ROLLS = 725, - ERR_PARTY_LFG_BOOT_VOTE_REGISTERED = 726, - ERR_PARTY_PRIVATE_GROUP_ONLY = 727, - ERR_PARTY_LFG_TELEPORT_IN_COMBAT = 728, - ERR_RAID_DISALLOWED_BY_LEVEL = 729, - ERR_RAID_DISALLOWED_BY_CROSS_REALM = 730, - ERR_PARTY_ROLE_NOT_AVAILABLE = 731, - ERR_JOIN_LFG_OBJECT_FAILED = 732, - ERR_LFG_REMOVED_LEVELUP = 733, - ERR_LFG_REMOVED_XP_TOGGLE = 734, - ERR_LFG_REMOVED_FACTION_CHANGE = 735, - ERR_BATTLEGROUND_INFO_THROTTLED = 736, - ERR_BATTLEGROUND_ALREADY_IN = 737, - ERR_ARENA_TEAM_CHANGE_FAILED_QUEUED = 738, - ERR_ARENA_TEAM_PERMISSIONS = 739, - ERR_NOT_WHILE_FALLING = 740, - ERR_NOT_WHILE_MOVING = 741, - ERR_NOT_WHILE_FATIGUED = 742, - ERR_MAX_SOCKETS = 743, - ERR_MULTI_CAST_ACTION_TOTEM_S = 744, - ERR_BATTLEGROUND_JOIN_LEVELUP = 745, - ERR_REMOVE_FROM_PVP_QUEUE_XP_GAIN = 746, - ERR_BATTLEGROUND_JOIN_XP_GAIN = 747, - ERR_BATTLEGROUND_JOIN_MERCENARY = 748, - ERR_BATTLEGROUND_JOIN_TOO_MANY_HEALERS = 749, - ERR_BATTLEGROUND_JOIN_RATED_TOO_MANY_HEALERS = 750, - ERR_BATTLEGROUND_JOIN_TOO_MANY_TANKS = 751, - ERR_BATTLEGROUND_JOIN_TOO_MANY_DAMAGE = 752, - ERR_RAID_DIFFICULTY_FAILED = 753, - ERR_RAID_DIFFICULTY_CHANGED_S = 754, - ERR_LEGACY_RAID_DIFFICULTY_CHANGED_S = 755, - ERR_RAID_LOCKOUT_CHANGED_S = 756, - ERR_RAID_CONVERTED_TO_PARTY = 757, - ERR_PARTY_CONVERTED_TO_RAID = 758, - ERR_PLAYER_DIFFICULTY_CHANGED_S = 759, - ERR_GMRESPONSE_DB_ERROR = 760, - ERR_BATTLEGROUND_JOIN_RANGE_INDEX = 761, - ERR_ARENA_JOIN_RANGE_INDEX = 762, - ERR_REMOVE_FROM_PVP_QUEUE_FACTION_CHANGE = 763, - ERR_BATTLEGROUND_JOIN_FAILED = 764, - ERR_BATTLEGROUND_JOIN_NO_VALID_SPEC_FOR_ROLE = 765, - ERR_BATTLEGROUND_JOIN_RESPEC = 766, - ERR_BATTLEGROUND_INVITATION_DECLINED = 767, - ERR_BATTLEGROUND_INVITATION_DECLINED_BY = 768, - ERR_BATTLEGROUND_JOIN_TIMED_OUT = 769, - ERR_BATTLEGROUND_DUPE_QUEUE = 770, - ERR_BATTLEGROUND_JOIN_MUST_COMPLETE_QUEST = 771, - ERR_IN_BATTLEGROUND_RESPEC = 772, - ERR_MAIL_LIMITED_DURATION_ITEM = 773, - ERR_YELL_RESTRICTED_TRIAL = 774, - ERR_CHAT_RAID_RESTRICTED_TRIAL = 775, - ERR_LFG_ROLE_CHECK_FAILED = 776, - ERR_LFG_ROLE_CHECK_FAILED_TIMEOUT = 777, - ERR_LFG_ROLE_CHECK_FAILED_NOT_VIABLE = 778, - ERR_LFG_READY_CHECK_FAILED = 779, - ERR_LFG_READY_CHECK_FAILED_TIMEOUT = 780, - ERR_LFG_GROUP_FULL = 781, - ERR_LFG_NO_LFG_OBJECT = 782, - ERR_LFG_NO_SLOTS_PLAYER = 783, - ERR_LFG_NO_SLOTS_PARTY = 784, - ERR_LFG_NO_SPEC = 785, - ERR_LFG_MISMATCHED_SLOTS = 786, - ERR_LFG_MISMATCHED_SLOTS_LOCAL_XREALM = 787, - ERR_LFG_PARTY_PLAYERS_FROM_DIFFERENT_REALMS = 788, - ERR_LFG_MEMBERS_NOT_PRESENT = 789, - ERR_LFG_GET_INFO_TIMEOUT = 790, - ERR_LFG_INVALID_SLOT = 791, - ERR_LFG_DESERTER_PLAYER = 792, - ERR_LFG_DESERTER_PARTY = 793, - ERR_LFG_DEAD = 794, - ERR_LFG_RANDOM_COOLDOWN_PLAYER = 795, - ERR_LFG_RANDOM_COOLDOWN_PARTY = 796, - ERR_LFG_TOO_MANY_MEMBERS = 797, - ERR_LFG_TOO_FEW_MEMBERS = 798, - ERR_LFG_PROPOSAL_FAILED = 799, - ERR_LFG_PROPOSAL_DECLINED_SELF = 800, - ERR_LFG_PROPOSAL_DECLINED_PARTY = 801, - ERR_LFG_NO_SLOTS_SELECTED = 802, - ERR_LFG_NO_ROLES_SELECTED = 803, - ERR_LFG_ROLE_CHECK_INITIATED = 804, - ERR_LFG_READY_CHECK_INITIATED = 805, - ERR_LFG_PLAYER_DECLINED_ROLE_CHECK = 806, - ERR_LFG_PLAYER_DECLINED_READY_CHECK = 807, - ERR_LFG_JOINED_QUEUE = 808, - ERR_LFG_JOINED_FLEX_QUEUE = 809, - ERR_LFG_JOINED_RF_QUEUE = 810, - ERR_LFG_JOINED_SCENARIO_QUEUE = 811, - ERR_LFG_JOINED_WORLD_PVP_QUEUE = 812, - ERR_LFG_JOINED_BATTLEFIELD_QUEUE = 813, - ERR_LFG_JOINED_LIST = 814, - ERR_LFG_LEFT_QUEUE = 815, - ERR_LFG_LEFT_LIST = 816, - ERR_LFG_ROLE_CHECK_ABORTED = 817, - ERR_LFG_READY_CHECK_ABORTED = 818, - ERR_LFG_CANT_USE_BATTLEGROUND = 819, - ERR_LFG_CANT_USE_DUNGEONS = 820, - ERR_LFG_REASON_TOO_MANY_LFG = 821, - ERR_LFG_FARM_LIMIT = 822, - ERR_LFG_NO_CROSS_FACTION_PARTIES = 823, - ERR_INVALID_TELEPORT_LOCATION = 824, - ERR_TOO_FAR_TO_INTERACT = 825, - ERR_BATTLEGROUND_PLAYERS_FROM_DIFFERENT_REALMS = 826, - ERR_DIFFICULTY_CHANGE_COOLDOWN_S = 827, - ERR_DIFFICULTY_CHANGE_COMBAT_COOLDOWN_S = 828, - ERR_DIFFICULTY_CHANGE_WORLDSTATE = 829, - ERR_DIFFICULTY_CHANGE_ENCOUNTER = 830, - ERR_DIFFICULTY_CHANGE_COMBAT = 831, - ERR_DIFFICULTY_CHANGE_PLAYER_BUSY = 832, - ERR_DIFFICULTY_CHANGE_PLAYER_ON_VEHICLE = 833, - ERR_DIFFICULTY_CHANGE_ALREADY_STARTED = 834, - ERR_DIFFICULTY_CHANGE_OTHER_HEROIC_S = 835, - ERR_DIFFICULTY_CHANGE_HEROIC_INSTANCE_ALREADY_RUNNING = 836, - ERR_ARENA_TEAM_PARTY_SIZE = 837, - ERR_SOLO_SHUFFLE_WARGAME_GROUP_SIZE = 838, - ERR_SOLO_SHUFFLE_WARGAME_GROUP_COMP = 839, - ERR_SOLO_MIN_ITEM_LEVEL = 840, - ERR_PVP_PLAYER_ABANDONED = 841, - ERR_BATTLEGROUND_JOIN_GROUP_QUEUE_WITHOUT_HEALER = 842, - ERR_QUEST_FORCE_REMOVED_S = 843, - ERR_ATTACK_NO_ACTIONS = 844, - ERR_IN_RANDOM_BG = 845, - ERR_IN_NON_RANDOM_BG = 846, - ERR_BN_FRIEND_SELF = 847, - ERR_BN_FRIEND_ALREADY = 848, - ERR_BN_FRIEND_BLOCKED = 849, - ERR_BN_FRIEND_LIST_FULL = 850, - ERR_BN_FRIEND_REQUEST_SENT = 851, - ERR_BN_BROADCAST_THROTTLE = 852, - ERR_BG_DEVELOPER_ONLY = 853, - ERR_CURRENCY_SPELL_SLOT_MISMATCH = 854, - ERR_CURRENCY_NOT_TRADABLE = 855, - ERR_REQUIRES_EXPANSION_S = 856, - ERR_QUEST_FAILED_SPELL = 857, - ERR_TALENT_FAILED_UNSPENT_TALENT_POINTS = 858, - ERR_TALENT_FAILED_NOT_ENOUGH_TALENTS_IN_PRIMARY_TREE = 859, - ERR_TALENT_FAILED_NO_PRIMARY_TREE_SELECTED = 860, - ERR_TALENT_FAILED_CANT_REMOVE_TALENT = 861, - ERR_TALENT_FAILED_UNKNOWN = 862, - ERR_TALENT_FAILED_IN_COMBAT = 863, - ERR_TALENT_FAILED_IN_PVP_MATCH = 864, - ERR_TALENT_FAILED_IN_MYTHIC_PLUS = 865, - ERR_WARGAME_REQUEST_FAILURE = 866, - ERR_RANK_REQUIRES_AUTHENTICATOR = 867, - ERR_GUILD_BANK_VOUCHER_FAILED = 868, - ERR_WARGAME_REQUEST_SENT = 869, - ERR_REQUIRES_ACHIEVEMENT_I = 870, - ERR_REFUND_RESULT_EXCEED_MAX_CURRENCY = 871, - ERR_CANT_BUY_QUANTITY = 872, - ERR_ITEM_IS_BATTLE_PAY_LOCKED = 873, - ERR_PARTY_ALREADY_IN_BATTLEGROUND_QUEUE = 874, - ERR_PARTY_CONFIRMING_BATTLEGROUND_QUEUE = 875, - ERR_BATTLEFIELD_TEAM_PARTY_SIZE = 876, - ERR_INSUFF_TRACKED_CURRENCY_IS = 877, - ERR_NOT_ON_TOURNAMENT_REALM = 878, - ERR_GUILD_TRIAL_ACCOUNT_TRIAL = 879, - ERR_GUILD_TRIAL_ACCOUNT_VETERAN = 880, - ERR_GUILD_UNDELETABLE_DUE_TO_LEVEL = 881, - ERR_CANT_DO_THAT_IN_A_GROUP = 882, - ERR_GUILD_LEADER_REPLACED = 883, - ERR_TRANSMOGRIFY_CANT_EQUIP = 884, - ERR_TRANSMOGRIFY_INVALID_ITEM_TYPE = 885, - ERR_TRANSMOGRIFY_NOT_SOULBOUND = 886, - ERR_TRANSMOGRIFY_INVALID_SOURCE = 887, - ERR_TRANSMOGRIFY_INVALID_DESTINATION = 888, - ERR_TRANSMOGRIFY_MISMATCH = 889, - ERR_TRANSMOGRIFY_LEGENDARY = 890, - ERR_TRANSMOGRIFY_SAME_ITEM = 891, - ERR_TRANSMOGRIFY_SAME_APPEARANCE = 892, - ERR_TRANSMOGRIFY_NOT_EQUIPPED = 893, - ERR_VOID_DEPOSIT_FULL = 894, - ERR_VOID_WITHDRAW_FULL = 895, - ERR_VOID_STORAGE_WRAPPED = 896, - ERR_VOID_STORAGE_STACKABLE = 897, - ERR_VOID_STORAGE_UNBOUND = 898, - ERR_VOID_STORAGE_REPAIR = 899, - ERR_VOID_STORAGE_CHARGES = 900, - ERR_VOID_STORAGE_QUEST = 901, - ERR_VOID_STORAGE_CONJURED = 902, - ERR_VOID_STORAGE_MAIL = 903, - ERR_VOID_STORAGE_BAG = 904, - ERR_VOID_TRANSFER_STORAGE_FULL = 905, - ERR_VOID_TRANSFER_INV_FULL = 906, - ERR_VOID_TRANSFER_INTERNAL_ERROR = 907, - ERR_VOID_TRANSFER_ITEM_INVALID = 908, - ERR_DIFFICULTY_DISABLED_IN_LFG = 909, - ERR_VOID_STORAGE_UNIQUE = 910, - ERR_VOID_STORAGE_LOOT = 911, - ERR_VOID_STORAGE_HOLIDAY = 912, - ERR_VOID_STORAGE_DURATION = 913, - ERR_VOID_STORAGE_LOAD_FAILED = 914, - ERR_VOID_STORAGE_INVALID_ITEM = 915, - ERR_PARENTAL_CONTROLS_CHAT_MUTED = 916, - ERR_SOR_START_EXPERIENCE_INCOMPLETE = 917, - ERR_SOR_INVALID_EMAIL = 918, - ERR_SOR_INVALID_COMMENT = 919, - ERR_CHALLENGE_MODE_RESET_COOLDOWN_S = 920, - ERR_CHALLENGE_MODE_RESET_KEYSTONE = 921, - ERR_PET_JOURNAL_ALREADY_IN_LOADOUT = 922, - ERR_REPORT_SUBMITTED_SUCCESSFULLY = 923, - ERR_REPORT_SUBMISSION_FAILED = 924, - ERR_SUGGESTION_SUBMITTED_SUCCESSFULLY = 925, - ERR_BUG_SUBMITTED_SUCCESSFULLY = 926, - ERR_CHALLENGE_MODE_ENABLED = 927, - ERR_CHALLENGE_MODE_DISABLED = 928, - ERR_PETBATTLE_CREATE_FAILED = 929, - ERR_PETBATTLE_NOT_HERE = 930, - ERR_PETBATTLE_NOT_HERE_ON_TRANSPORT = 931, - ERR_PETBATTLE_NOT_HERE_UNEVEN_GROUND = 932, - ERR_PETBATTLE_NOT_HERE_OBSTRUCTED = 933, - ERR_PETBATTLE_NOT_WHILE_IN_COMBAT = 934, - ERR_PETBATTLE_NOT_WHILE_DEAD = 935, - ERR_PETBATTLE_NOT_WHILE_FLYING = 936, - ERR_PETBATTLE_TARGET_INVALID = 937, - ERR_PETBATTLE_TARGET_OUT_OF_RANGE = 938, - ERR_PETBATTLE_TARGET_NOT_CAPTURABLE = 939, - ERR_PETBATTLE_NOT_A_TRAINER = 940, - ERR_PETBATTLE_DECLINED = 941, - ERR_PETBATTLE_IN_BATTLE = 942, - ERR_PETBATTLE_INVALID_LOADOUT = 943, - ERR_PETBATTLE_ALL_PETS_DEAD = 944, - ERR_PETBATTLE_NO_PETS_IN_SLOTS = 945, - ERR_PETBATTLE_NO_ACCOUNT_LOCK = 946, - ERR_PETBATTLE_WILD_PET_TAPPED = 947, - ERR_PETBATTLE_RESTRICTED_ACCOUNT = 948, - ERR_PETBATTLE_OPPONENT_NOT_AVAILABLE = 949, - ERR_PETBATTLE_NOT_WHILE_IN_MATCHED_BATTLE = 950, - ERR_CANT_HAVE_MORE_PETS_OF_THAT_TYPE = 951, - ERR_CANT_HAVE_MORE_PETS = 952, - ERR_PVP_MAP_NOT_FOUND = 953, - ERR_PVP_MAP_NOT_SET = 954, - ERR_PETBATTLE_QUEUE_QUEUED = 955, - ERR_PETBATTLE_QUEUE_ALREADY_QUEUED = 956, - ERR_PETBATTLE_QUEUE_JOIN_FAILED = 957, - ERR_PETBATTLE_QUEUE_JOURNAL_LOCK = 958, - ERR_PETBATTLE_QUEUE_REMOVED = 959, - ERR_PETBATTLE_QUEUE_PROPOSAL_DECLINED = 960, - ERR_PETBATTLE_QUEUE_PROPOSAL_TIMEOUT = 961, - ERR_PETBATTLE_QUEUE_OPPONENT_DECLINED = 962, - ERR_PETBATTLE_QUEUE_REQUEUED_INTERNAL = 963, - ERR_PETBATTLE_QUEUE_REQUEUED_REMOVED = 964, - ERR_PETBATTLE_QUEUE_SLOT_LOCKED = 965, - ERR_PETBATTLE_QUEUE_SLOT_EMPTY = 966, - ERR_PETBATTLE_QUEUE_SLOT_NO_TRACKER = 967, - ERR_PETBATTLE_QUEUE_SLOT_NO_SPECIES = 968, - ERR_PETBATTLE_QUEUE_SLOT_CANT_BATTLE = 969, - ERR_PETBATTLE_QUEUE_SLOT_REVOKED = 970, - ERR_PETBATTLE_QUEUE_SLOT_DEAD = 971, - ERR_PETBATTLE_QUEUE_SLOT_NO_PET = 972, - ERR_PETBATTLE_QUEUE_NOT_WHILE_NEUTRAL = 973, - ERR_PETBATTLE_GAME_TIME_LIMIT_WARNING = 974, - ERR_PETBATTLE_GAME_ROUNDS_LIMIT_WARNING = 975, - ERR_HAS_RESTRICTION = 976, - ERR_ITEM_UPGRADE_ITEM_TOO_LOW_LEVEL = 977, - ERR_ITEM_UPGRADE_NO_PATH = 978, - ERR_ITEM_UPGRADE_NO_MORE_UPGRADES = 979, - ERR_BONUS_ROLL_EMPTY = 980, - ERR_CHALLENGE_MODE_FULL = 981, - ERR_CHALLENGE_MODE_IN_PROGRESS = 982, - ERR_CHALLENGE_MODE_INCORRECT_KEYSTONE = 983, - ERR_BATTLETAG_FRIEND_NOT_FOUND = 984, - ERR_BATTLETAG_FRIEND_NOT_VALID = 985, - ERR_BATTLETAG_FRIEND_NOT_ALLOWED = 986, - ERR_BATTLETAG_FRIEND_THROTTLED = 987, - ERR_BATTLETAG_FRIEND_SUCCESS = 988, - ERR_PET_TOO_HIGH_LEVEL_TO_UNCAGE = 989, - ERR_PETBATTLE_INTERNAL = 990, - ERR_CANT_CAGE_PET_YET = 991, - ERR_NO_LOOT_IN_CHALLENGE_MODE = 992, - ERR_QUEST_PET_BATTLE_VICTORIES_PVP_II = 993, - ERR_ROLE_CHECK_ALREADY_IN_PROGRESS = 994, - ERR_RECRUIT_A_FRIEND_ACCOUNT_LIMIT = 995, - ERR_RECRUIT_A_FRIEND_FAILED = 996, - ERR_SET_LOOT_PERSONAL = 997, - ERR_SET_LOOT_METHOD_FAILED_COMBAT = 998, - ERR_REAGENT_BANK_FULL = 999, - ERR_REAGENT_BANK_LOCKED = 1000, - ERR_GARRISON_BUILDING_EXISTS = 1001, - ERR_GARRISON_INVALID_PLOT = 1002, - ERR_GARRISON_INVALID_BUILDINGID = 1003, - ERR_GARRISON_INVALID_PLOT_BUILDING = 1004, - ERR_GARRISON_REQUIRES_BLUEPRINT = 1005, - ERR_GARRISON_NOT_ENOUGH_CURRENCY = 1006, - ERR_GARRISON_NOT_ENOUGH_GOLD = 1007, - ERR_GARRISON_COMPLETE_MISSION_WRONG_FOLLOWER_TYPE = 1008, - ERR_ALREADY_USING_LFG_LIST = 1009, - ERR_RESTRICTED_ACCOUNT_LFG_LIST_TRIAL = 1010, - ERR_TOY_USE_LIMIT_REACHED = 1011, - ERR_TOY_ALREADY_KNOWN = 1012, - ERR_TRANSMOG_SET_ALREADY_KNOWN = 1013, - ERR_NOT_ENOUGH_CURRENCY = 1014, - ERR_SPEC_IS_DISABLED = 1015, - ERR_FEATURE_RESTRICTED_TRIAL = 1016, - ERR_CANT_BE_OBLITERATED = 1017, - ERR_CANT_BE_SCRAPPED = 1018, - ERR_CANT_BE_RECRAFTED = 1019, - ERR_ARTIFACT_RELIC_DOES_NOT_MATCH_ARTIFACT = 1020, - ERR_MUST_EQUIP_ARTIFACT = 1021, - ERR_CANT_DO_THAT_RIGHT_NOW = 1022, - ERR_AFFECTING_COMBAT = 1023, - ERR_EQUIPMENT_MANAGER_COMBAT_SWAP_S = 1024, - ERR_EQUIPMENT_MANAGER_BAGS_FULL = 1025, - ERR_EQUIPMENT_MANAGER_MISSING_ITEM_S = 1026, - ERR_MOVIE_RECORDING_WARNING_PERF = 1027, - ERR_MOVIE_RECORDING_WARNING_DISK_FULL = 1028, - ERR_MOVIE_RECORDING_WARNING_NO_MOVIE = 1029, - ERR_MOVIE_RECORDING_WARNING_REQUIREMENTS = 1030, - ERR_MOVIE_RECORDING_WARNING_COMPRESSING = 1031, - ERR_NO_CHALLENGE_MODE_REWARD = 1032, - ERR_CLAIMED_CHALLENGE_MODE_REWARD = 1033, - ERR_CHALLENGE_MODE_PERIOD_RESET_SS = 1034, - ERR_CANT_DO_THAT_CHALLENGE_MODE_ACTIVE = 1035, - ERR_TALENT_FAILED_REST_AREA = 1036, - ERR_CANNOT_ABANDON_LAST_PET = 1037, - ERR_TEST_CVAR_SET_SSS = 1038, - ERR_QUEST_TURN_IN_FAIL_REASON = 1039, - ERR_CLAIMED_CHALLENGE_MODE_REWARD_OLD = 1040, - ERR_TALENT_GRANTED_BY_AURA = 1041, - ERR_CHALLENGE_MODE_ALREADY_COMPLETE = 1042, - ERR_GLYPH_TARGET_NOT_AVAILABLE = 1043, - ERR_PVP_WARMODE_TOGGLE_ON = 1044, - ERR_PVP_WARMODE_TOGGLE_OFF = 1045, - ERR_SPELL_FAILED_LEVEL_REQUIREMENT = 1046, - ERR_SPELL_FAILED_CANT_FLY_HERE = 1047, - ERR_BATTLEGROUND_JOIN_REQUIRES_LEVEL = 1048, - ERR_BATTLEGROUND_JOIN_DISQUALIFIED = 1049, - ERR_BATTLEGROUND_JOIN_DISQUALIFIED_NO_NAME = 1050, - ERR_VOICE_CHAT_GENERIC_UNABLE_TO_CONNECT = 1051, - ERR_VOICE_CHAT_SERVICE_LOST = 1052, - ERR_VOICE_CHAT_CHANNEL_NAME_TOO_SHORT = 1053, - ERR_VOICE_CHAT_CHANNEL_NAME_TOO_LONG = 1054, - ERR_VOICE_CHAT_CHANNEL_ALREADY_EXISTS = 1055, - ERR_VOICE_CHAT_TARGET_NOT_FOUND = 1056, - ERR_VOICE_CHAT_TOO_MANY_REQUESTS = 1057, - ERR_VOICE_CHAT_PLAYER_SILENCED = 1058, - ERR_VOICE_CHAT_PARENTAL_DISABLE_ALL = 1059, - ERR_VOICE_CHAT_DISABLED = 1060, - ERR_NO_PVP_REWARD = 1061, - ERR_CLAIMED_PVP_REWARD = 1062, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_ESSENCE_NOT_UNLOCKED = 1063, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_CANT_REMOVE_ESSENCE = 1064, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_CONDITION_FAILED = 1065, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_REST_AREA = 1066, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_SLOT_LOCKED = 1067, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_AT_FORGE = 1068, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_HEART_LEVEL_TOO_LOW = 1069, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_EQUIPPED = 1070, - ERR_SOCKETING_REQUIRES_PUNCHCARDRED_GEM = 1071, - ERR_SOCKETING_PUNCHCARDRED_GEM_ONLY_IN_PUNCHCARDREDSLOT = 1072, - ERR_SOCKETING_REQUIRES_PUNCHCARDYELLOW_GEM = 1073, - ERR_SOCKETING_PUNCHCARDYELLOW_GEM_ONLY_IN_PUNCHCARDYELLOWSLOT = 1074, - ERR_SOCKETING_REQUIRES_PUNCHCARDBLUE_GEM = 1075, - ERR_SOCKETING_PUNCHCARDBLUE_GEM_ONLY_IN_PUNCHCARDBLUESLOT = 1076, - ERR_SOCKETING_REQUIRES_DOMINATION_SHARD = 1077, - ERR_SOCKETING_DOMINATION_SHARD_ONLY_IN_DOMINATIONSLOT = 1078, - ERR_SOCKETING_REQUIRES_CYPHER_GEM = 1079, - ERR_SOCKETING_CYPHER_GEM_ONLY_IN_CYPHERSLOT = 1080, - ERR_SOCKETING_REQUIRES_TINKER_GEM = 1081, - ERR_SOCKETING_TINKER_GEM_ONLY_IN_TINKERSLOT = 1082, - ERR_SOCKETING_REQUIRES_PRIMORDIAL_GEM = 1083, - ERR_SOCKETING_PRIMORDIAL_GEM_ONLY_IN_PRIMORDIALSLOT = 1084, - ERR_LEVEL_LINKING_RESULT_LINKED = 1085, - ERR_LEVEL_LINKING_RESULT_UNLINKED = 1086, - ERR_CLUB_FINDER_ERROR_POST_CLUB = 1087, - ERR_CLUB_FINDER_ERROR_APPLY_CLUB = 1088, - ERR_CLUB_FINDER_ERROR_RESPOND_APPLICANT = 1089, - ERR_CLUB_FINDER_ERROR_CANCEL_APPLICATION = 1090, - ERR_CLUB_FINDER_ERROR_TYPE_ACCEPT_APPLICATION = 1091, - ERR_CLUB_FINDER_ERROR_TYPE_NO_INVITE_PERMISSIONS = 1092, - ERR_CLUB_FINDER_ERROR_TYPE_NO_POSTING_PERMISSIONS = 1093, - ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST = 1094, - ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST_NO_PERM = 1095, - ERR_CLUB_FINDER_ERROR_TYPE_FINDER_NOT_AVAILABLE = 1096, - ERR_CLUB_FINDER_ERROR_TYPE_GET_POSTING_IDS = 1097, - ERR_CLUB_FINDER_ERROR_TYPE_JOIN_APPLICATION = 1098, - ERR_CLUB_FINDER_ERROR_TYPE_REALM_NOT_ELIGIBLE = 1099, - ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_RENAME = 1100, - ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_DESCRIPTION_CHANGE = 1101, - ERR_ITEM_INTERACTION_NOT_ENOUGH_GOLD = 1102, - ERR_ITEM_INTERACTION_NOT_ENOUGH_CURRENCY = 1103, - ERR_ITEM_INTERACTION_NO_CONVERSION_OUTPUT = 1104, - ERR_PLAYER_CHOICE_ERROR_PENDING_CHOICE = 1105, - ERR_SOULBIND_INVALID_CONDUIT = 1106, - ERR_SOULBIND_INVALID_CONDUIT_ITEM = 1107, - ERR_SOULBIND_INVALID_TALENT = 1108, - ERR_SOULBIND_DUPLICATE_CONDUIT = 1109, - ERR_ACTIVATE_SOULBIND_S = 1110, - ERR_ACTIVATE_SOULBIND_FAILED_REST_AREA = 1111, - ERR_CANT_USE_PROFANITY = 1112, - ERR_NOT_IN_PET_BATTLE = 1113, - ERR_NOT_IN_NPE = 1114, - ERR_NO_SPEC = 1115, - ERR_NO_DOMINATIONSHARD_OVERWRITE = 1116, - ERR_USE_WEEKLY_REWARDS_DISABLED = 1117, - ERR_CROSS_FACTION_GROUP_JOINED = 1118, - ERR_CANT_TARGET_UNFRIENDLY_IN_OVERWORLD = 1119, - ERR_EQUIPABLESPELLS_SLOTS_FULL = 1120, - ERR_ITEM_MOD_APPEARANCE_GROUP_ALREADY_KNOWN = 1121, - ERR_CANT_BULK_SELL_ITEM_WITH_REFUND = 1122, - ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_IS_FULL = 1123, - ERR_WOW_LABS_PARTY_ERROR_TYPE_MAX_INVITE_SENT = 1124, - ERR_WOW_LABS_PARTY_ERROR_TYPE_PLAYER_ALREADY_INVITED = 1125, - ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_INVITE_INVALID = 1126, - ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_ENTER_QUEUE_FAILED = 1127, - ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_LEAVE_QUEUE_FAILED = 1128, + ERR_QUEST_PUSH_HIGH_FACTION_S = 494, + ERR_QUEST_PUSH_HIGH_FACTION_TO_RECIPIENT_S = 495, + ERR_QUEST_PUSH_EXPANSION_S = 496, + ERR_QUEST_PUSH_EXPANSION_TO_RECIPIENT_S = 497, + ERR_QUEST_PUSH_NOT_GARRISON_OWNER_S = 498, + ERR_QUEST_PUSH_NOT_GARRISON_OWNER_TO_RECIPIENT_S = 499, + ERR_QUEST_PUSH_WRONG_COVENANT_S = 500, + ERR_QUEST_PUSH_WRONG_COVENANT_TO_RECIPIENT_S = 501, + ERR_QUEST_PUSH_NEW_PLAYER_EXPERIENCE_S = 502, + ERR_QUEST_PUSH_NEW_PLAYER_EXPERIENCE_TO_RECIPIENT_S = 503, + ERR_QUEST_PUSH_WRONG_FACTION_S = 504, + ERR_QUEST_PUSH_WRONG_FACTION_TO_RECIPIENT_S = 505, + ERR_QUEST_PUSH_CROSS_FACTION_RESTRICTED_S = 506, + ERR_RAID_GROUP_LOWLEVEL = 507, + ERR_RAID_GROUP_ONLY = 508, + ERR_RAID_GROUP_FULL = 509, + ERR_RAID_GROUP_REQUIREMENTS_UNMATCH = 510, + ERR_CORPSE_IS_NOT_IN_INSTANCE = 511, + ERR_PVP_KILL_HONORABLE = 512, + ERR_PVP_KILL_DISHONORABLE = 513, + ERR_SPELL_FAILED_ALREADY_AT_FULL_HEALTH = 514, + ERR_SPELL_FAILED_ALREADY_AT_FULL_MANA = 515, + ERR_SPELL_FAILED_ALREADY_AT_FULL_POWER_S = 516, + ERR_AUTOLOOT_MONEY_S = 517, + ERR_GENERIC_STUNNED = 518, + ERR_GENERIC_THROTTLE = 519, + ERR_CLUB_FINDER_SEARCHING_TOO_FAST = 520, + ERR_TARGET_STUNNED = 521, + ERR_MUST_REPAIR_DURABILITY = 522, + ERR_RAID_YOU_JOINED = 523, + ERR_RAID_YOU_LEFT = 524, + ERR_INSTANCE_GROUP_JOINED_WITH_PARTY = 525, + ERR_INSTANCE_GROUP_JOINED_WITH_RAID = 526, + ERR_RAID_MEMBER_ADDED_S = 527, + ERR_RAID_MEMBER_REMOVED_S = 528, + ERR_INSTANCE_GROUP_ADDED_S = 529, + ERR_INSTANCE_GROUP_REMOVED_S = 530, + ERR_CLICK_ON_ITEM_TO_FEED = 531, + ERR_TOO_MANY_CHAT_CHANNELS = 532, + ERR_LOOT_ROLL_PENDING = 533, + ERR_LOOT_PLAYER_NOT_FOUND = 534, + ERR_NOT_IN_RAID = 535, + ERR_LOGGING_OUT = 536, + ERR_TARGET_LOGGING_OUT = 537, + ERR_NOT_WHILE_MOUNTED = 538, + ERR_NOT_WHILE_SHAPESHIFTED = 539, + ERR_NOT_IN_COMBAT = 540, + ERR_NOT_WHILE_DISARMED = 541, + ERR_PET_BROKEN = 542, + ERR_TALENT_WIPE_ERROR = 543, + ERR_SPEC_WIPE_ERROR = 544, + ERR_GLYPH_WIPE_ERROR = 545, + ERR_PET_SPEC_WIPE_ERROR = 546, + ERR_FEIGN_DEATH_RESISTED = 547, + ERR_MEETING_STONE_IN_QUEUE_S = 548, + ERR_MEETING_STONE_LEFT_QUEUE_S = 549, + ERR_MEETING_STONE_OTHER_MEMBER_LEFT = 550, + ERR_MEETING_STONE_PARTY_KICKED_FROM_QUEUE = 551, + ERR_MEETING_STONE_MEMBER_STILL_IN_QUEUE = 552, + ERR_MEETING_STONE_SUCCESS = 553, + ERR_MEETING_STONE_IN_PROGRESS = 554, + ERR_MEETING_STONE_MEMBER_ADDED_S = 555, + ERR_MEETING_STONE_GROUP_FULL = 556, + ERR_MEETING_STONE_NOT_LEADER = 557, + ERR_MEETING_STONE_INVALID_LEVEL = 558, + ERR_MEETING_STONE_TARGET_NOT_IN_PARTY = 559, + ERR_MEETING_STONE_TARGET_INVALID_LEVEL = 560, + ERR_MEETING_STONE_MUST_BE_LEADER = 561, + ERR_MEETING_STONE_NO_RAID_GROUP = 562, + ERR_MEETING_STONE_NEED_PARTY = 563, + ERR_MEETING_STONE_NOT_FOUND = 564, + ERR_MEETING_STONE_TARGET_IN_VEHICLE = 565, + ERR_GUILDEMBLEM_SAME = 566, + ERR_EQUIP_TRADE_ITEM = 567, + ERR_PVP_TOGGLE_ON = 568, + ERR_PVP_TOGGLE_OFF = 569, + ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS = 570, + ERR_GROUP_JOIN_BATTLEGROUND_DEAD = 571, + ERR_GROUP_JOIN_BATTLEGROUND_S = 572, + ERR_GROUP_JOIN_BATTLEGROUND_FAIL = 573, + ERR_GROUP_JOIN_BATTLEGROUND_TOO_MANY = 574, + ERR_SOLO_JOIN_BATTLEGROUND_S = 575, + ERR_JOIN_SINGLE_SCENARIO_S = 576, + ERR_BATTLEGROUND_TOO_MANY_QUEUES = 577, + ERR_BATTLEGROUND_CANNOT_QUEUE_FOR_RATED = 578, + ERR_BATTLEDGROUND_QUEUED_FOR_RATED = 579, + ERR_BATTLEGROUND_TEAM_LEFT_QUEUE = 580, + ERR_BATTLEGROUND_NOT_IN_BATTLEGROUND = 581, + ERR_ALREADY_IN_ARENA_TEAM_S = 582, + ERR_INVALID_PROMOTION_CODE = 583, + ERR_BG_PLAYER_JOINED_SS = 584, + ERR_BG_PLAYER_LEFT_S = 585, + ERR_RESTRICTED_ACCOUNT = 586, + ERR_RESTRICTED_ACCOUNT_TRIAL = 587, + ERR_PLAY_TIME_EXCEEDED = 588, + ERR_APPROACHING_PARTIAL_PLAY_TIME = 589, + ERR_APPROACHING_PARTIAL_PLAY_TIME_2 = 590, + ERR_APPROACHING_NO_PLAY_TIME = 591, + ERR_APPROACHING_NO_PLAY_TIME_2 = 592, + ERR_UNHEALTHY_TIME = 593, + ERR_CHAT_RESTRICTED_TRIAL = 594, + ERR_CHAT_THROTTLED = 595, + ERR_MAIL_REACHED_CAP = 596, + ERR_INVALID_RAID_TARGET = 597, + ERR_RAID_LEADER_READY_CHECK_START_S = 598, + ERR_READY_CHECK_IN_PROGRESS = 599, + ERR_READY_CHECK_THROTTLED = 600, + ERR_DUNGEON_DIFFICULTY_FAILED = 601, + ERR_DUNGEON_DIFFICULTY_CHANGED_S = 602, + ERR_TRADE_WRONG_REALM = 603, + ERR_TRADE_NOT_ON_TAPLIST = 604, + ERR_CHAT_PLAYER_AMBIGUOUS_S = 605, + ERR_LOOT_CANT_LOOT_THAT_NOW = 606, + ERR_LOOT_MASTER_INV_FULL = 607, + ERR_LOOT_MASTER_UNIQUE_ITEM = 608, + ERR_LOOT_MASTER_OTHER = 609, + ERR_FILTERING_YOU_S = 610, + ERR_USE_PREVENTED_BY_MECHANIC_S = 611, + ERR_ITEM_UNIQUE_EQUIPPABLE = 612, + ERR_LFG_LEADER_IS_LFM_S = 613, + ERR_LFG_PENDING = 614, + ERR_CANT_SPEAK_LANGAGE = 615, + ERR_VENDOR_MISSING_TURNINS = 616, + ERR_BATTLEGROUND_NOT_IN_TEAM = 617, + ERR_NOT_IN_BATTLEGROUND = 618, + ERR_NOT_ENOUGH_HONOR_POINTS = 619, + ERR_NOT_ENOUGH_ARENA_POINTS = 620, + ERR_SOCKETING_REQUIRES_META_GEM = 621, + ERR_SOCKETING_META_GEM_ONLY_IN_METASLOT = 622, + ERR_SOCKETING_REQUIRES_HYDRAULIC_GEM = 623, + ERR_SOCKETING_HYDRAULIC_GEM_ONLY_IN_HYDRAULICSLOT = 624, + ERR_SOCKETING_REQUIRES_COGWHEEL_GEM = 625, + ERR_SOCKETING_COGWHEEL_GEM_ONLY_IN_COGWHEELSLOT = 626, + ERR_SOCKETING_ITEM_TOO_LOW_LEVEL = 627, + ERR_ITEM_MAX_COUNT_SOCKETED = 628, + ERR_SYSTEM_DISABLED = 629, + ERR_QUEST_FAILED_TOO_MANY_DAILY_QUESTS_I = 630, + ERR_ITEM_MAX_COUNT_EQUIPPED_SOCKETED = 631, + ERR_ITEM_UNIQUE_EQUIPPABLE_SOCKETED = 632, + ERR_USER_SQUELCHED = 633, + ERR_ACCOUNT_SILENCED = 634, + ERR_PARTY_MEMBER_SILENCED = 635, + ERR_PARTY_MEMBER_SILENCED_LFG_DELIST = 636, + ERR_TOO_MUCH_GOLD = 637, + ERR_NOT_BARBER_SITTING = 638, + ERR_QUEST_FAILED_CAIS = 639, + ERR_INVITE_RESTRICTED_TRIAL = 640, + ERR_VOICE_IGNORE_FULL = 641, + ERR_VOICE_IGNORE_SELF = 642, + ERR_VOICE_IGNORE_NOT_FOUND = 643, + ERR_VOICE_IGNORE_ALREADY_S = 644, + ERR_VOICE_IGNORE_ADDED_S = 645, + ERR_VOICE_IGNORE_REMOVED_S = 646, + ERR_VOICE_IGNORE_AMBIGUOUS = 647, + ERR_VOICE_IGNORE_DELETED = 648, + ERR_UNKNOWN_MACRO_OPTION_S = 649, + ERR_NOT_DURING_ARENA_MATCH = 650, + ERR_NOT_IN_RATED_BATTLEGROUND = 651, + ERR_PLAYER_SILENCED = 652, + ERR_PLAYER_UNSILENCED = 653, + ERR_COMSAT_DISCONNECT = 654, + ERR_COMSAT_RECONNECT_ATTEMPT = 655, + ERR_COMSAT_CONNECT_FAIL = 656, + ERR_MAIL_INVALID_ATTACHMENT_SLOT = 657, + ERR_MAIL_TOO_MANY_ATTACHMENTS = 658, + ERR_MAIL_INVALID_ATTACHMENT = 659, + ERR_MAIL_ATTACHMENT_EXPIRED = 660, + ERR_VOICE_CHAT_PARENTAL_DISABLE_MIC = 661, + ERR_PROFANE_CHAT_NAME = 662, + ERR_PLAYER_SILENCED_ECHO = 663, + ERR_PLAYER_UNSILENCED_ECHO = 664, + ERR_LOOT_CANT_LOOT_THAT = 665, + ERR_ARENA_EXPIRED_CAIS = 666, + ERR_GROUP_ACTION_THROTTLED = 667, + ERR_ALREADY_PICKPOCKETED = 668, + ERR_NAME_INVALID = 669, + ERR_NAME_NO_NAME = 670, + ERR_NAME_TOO_SHORT = 671, + ERR_NAME_TOO_LONG = 672, + ERR_NAME_MIXED_LANGUAGES = 673, + ERR_NAME_PROFANE = 674, + ERR_NAME_RESERVED = 675, + ERR_NAME_THREE_CONSECUTIVE = 676, + ERR_NAME_INVALID_SPACE = 677, + ERR_NAME_CONSECUTIVE_SPACES = 678, + ERR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS = 679, + ERR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END = 680, + ERR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME = 681, + ERR_RECRUIT_A_FRIEND_NOT_LINKED = 682, + ERR_RECRUIT_A_FRIEND_NOT_NOW = 683, + ERR_RECRUIT_A_FRIEND_SUMMON_LEVEL_MAX = 684, + ERR_RECRUIT_A_FRIEND_SUMMON_COOLDOWN = 685, + ERR_RECRUIT_A_FRIEND_SUMMON_OFFLINE = 686, + ERR_RECRUIT_A_FRIEND_INSUF_EXPAN_LVL = 687, + ERR_RECRUIT_A_FRIEND_MAP_INCOMING_TRANSFER_NOT_ALLOWED = 688, + ERR_NOT_SAME_ACCOUNT = 689, + ERR_BAD_ON_USE_ENCHANT = 690, + ERR_TRADE_SELF = 691, + ERR_TOO_MANY_SOCKETS = 692, + ERR_ITEM_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 693, + ERR_TRADE_TARGET_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 694, + ERR_ITEM_MAX_LIMIT_CATEGORY_SOCKETED_EXCEEDED_IS = 695, + ERR_ITEM_MAX_LIMIT_CATEGORY_EQUIPPED_EXCEEDED_IS = 696, + ERR_SHAPESHIFT_FORM_CANNOT_EQUIP = 697, + ERR_ITEM_INVENTORY_FULL_SATCHEL = 698, + ERR_SCALING_STAT_ITEM_LEVEL_EXCEEDED = 699, + ERR_SCALING_STAT_ITEM_LEVEL_TOO_LOW = 700, + ERR_PURCHASE_LEVEL_TOO_LOW = 701, + ERR_GROUP_SWAP_FAILED = 702, + ERR_INVITE_IN_COMBAT = 703, + ERR_INVALID_GLYPH_SLOT = 704, + ERR_GENERIC_NO_VALID_TARGETS = 705, + ERR_CALENDAR_EVENT_ALERT_S = 706, + ERR_PET_LEARN_SPELL_S = 707, + ERR_PET_LEARN_ABILITY_S = 708, + ERR_PET_SPELL_UNLEARNED_S = 709, + ERR_INVITE_UNKNOWN_REALM = 710, + ERR_INVITE_NO_PARTY_SERVER = 711, + ERR_INVITE_PARTY_BUSY = 712, + ERR_INVITE_PARTY_BUSY_PENDING_REQUEST = 713, + ERR_INVITE_PARTY_BUSY_PENDING_SUGGEST = 714, + ERR_PARTY_TARGET_AMBIGUOUS = 715, + ERR_PARTY_LFG_INVITE_RAID_LOCKED = 716, + ERR_PARTY_LFG_BOOT_LIMIT = 717, + ERR_PARTY_LFG_BOOT_COOLDOWN_S = 718, + ERR_PARTY_LFG_BOOT_NOT_ELIGIBLE_S = 719, + ERR_PARTY_LFG_BOOT_INPATIENT_TIMER_S = 720, + ERR_PARTY_LFG_BOOT_IN_PROGRESS = 721, + ERR_PARTY_LFG_BOOT_TOO_FEW_PLAYERS = 722, + ERR_PARTY_LFG_BOOT_VOTE_SUCCEEDED = 723, + ERR_PARTY_LFG_BOOT_VOTE_FAILED = 724, + ERR_PARTY_LFG_BOOT_IN_COMBAT = 725, + ERR_PARTY_LFG_BOOT_DUNGEON_COMPLETE = 726, + ERR_PARTY_LFG_BOOT_LOOT_ROLLS = 727, + ERR_PARTY_LFG_BOOT_VOTE_REGISTERED = 728, + ERR_PARTY_PRIVATE_GROUP_ONLY = 729, + ERR_PARTY_LFG_TELEPORT_IN_COMBAT = 730, + ERR_RAID_DISALLOWED_BY_LEVEL = 731, + ERR_RAID_DISALLOWED_BY_CROSS_REALM = 732, + ERR_PARTY_ROLE_NOT_AVAILABLE = 733, + ERR_JOIN_LFG_OBJECT_FAILED = 734, + ERR_LFG_REMOVED_LEVELUP = 735, + ERR_LFG_REMOVED_XP_TOGGLE = 736, + ERR_LFG_REMOVED_FACTION_CHANGE = 737, + ERR_BATTLEGROUND_INFO_THROTTLED = 738, + ERR_BATTLEGROUND_ALREADY_IN = 739, + ERR_ARENA_TEAM_CHANGE_FAILED_QUEUED = 740, + ERR_ARENA_TEAM_PERMISSIONS = 741, + ERR_NOT_WHILE_FALLING = 742, + ERR_NOT_WHILE_MOVING = 743, + ERR_NOT_WHILE_FATIGUED = 744, + ERR_MAX_SOCKETS = 745, + ERR_MULTI_CAST_ACTION_TOTEM_S = 746, + ERR_BATTLEGROUND_JOIN_LEVELUP = 747, + ERR_REMOVE_FROM_PVP_QUEUE_XP_GAIN = 748, + ERR_BATTLEGROUND_JOIN_XP_GAIN = 749, + ERR_BATTLEGROUND_JOIN_MERCENARY = 750, + ERR_BATTLEGROUND_JOIN_TOO_MANY_HEALERS = 751, + ERR_BATTLEGROUND_JOIN_RATED_TOO_MANY_HEALERS = 752, + ERR_BATTLEGROUND_JOIN_TOO_MANY_TANKS = 753, + ERR_BATTLEGROUND_JOIN_TOO_MANY_DAMAGE = 754, + ERR_RAID_DIFFICULTY_FAILED = 755, + ERR_RAID_DIFFICULTY_CHANGED_S = 756, + ERR_LEGACY_RAID_DIFFICULTY_CHANGED_S = 757, + ERR_RAID_LOCKOUT_CHANGED_S = 758, + ERR_RAID_CONVERTED_TO_PARTY = 759, + ERR_PARTY_CONVERTED_TO_RAID = 760, + ERR_PLAYER_DIFFICULTY_CHANGED_S = 761, + ERR_GMRESPONSE_DB_ERROR = 762, + ERR_BATTLEGROUND_JOIN_RANGE_INDEX = 763, + ERR_ARENA_JOIN_RANGE_INDEX = 764, + ERR_REMOVE_FROM_PVP_QUEUE_FACTION_CHANGE = 765, + ERR_BATTLEGROUND_JOIN_FAILED = 766, + ERR_BATTLEGROUND_JOIN_NO_VALID_SPEC_FOR_ROLE = 767, + ERR_BATTLEGROUND_JOIN_RESPEC = 768, + ERR_BATTLEGROUND_INVITATION_DECLINED = 769, + ERR_BATTLEGROUND_INVITATION_DECLINED_BY = 770, + ERR_BATTLEGROUND_JOIN_TIMED_OUT = 771, + ERR_BATTLEGROUND_DUPE_QUEUE = 772, + ERR_BATTLEGROUND_JOIN_MUST_COMPLETE_QUEST = 773, + ERR_IN_BATTLEGROUND_RESPEC = 774, + ERR_MAIL_LIMITED_DURATION_ITEM = 775, + ERR_YELL_RESTRICTED_TRIAL = 776, + ERR_CHAT_RAID_RESTRICTED_TRIAL = 777, + ERR_LFG_ROLE_CHECK_FAILED = 778, + ERR_LFG_ROLE_CHECK_FAILED_TIMEOUT = 779, + ERR_LFG_ROLE_CHECK_FAILED_NOT_VIABLE = 780, + ERR_LFG_READY_CHECK_FAILED = 781, + ERR_LFG_READY_CHECK_FAILED_TIMEOUT = 782, + ERR_LFG_GROUP_FULL = 783, + ERR_LFG_NO_LFG_OBJECT = 784, + ERR_LFG_NO_SLOTS_PLAYER = 785, + ERR_LFG_NO_SLOTS_PARTY = 786, + ERR_LFG_NO_SPEC = 787, + ERR_LFG_MISMATCHED_SLOTS = 788, + ERR_LFG_MISMATCHED_SLOTS_LOCAL_XREALM = 789, + ERR_LFG_PARTY_PLAYERS_FROM_DIFFERENT_REALMS = 790, + ERR_LFG_MEMBERS_NOT_PRESENT = 791, + ERR_LFG_GET_INFO_TIMEOUT = 792, + ERR_LFG_INVALID_SLOT = 793, + ERR_LFG_DESERTER_PLAYER = 794, + ERR_LFG_DESERTER_PARTY = 795, + ERR_LFG_DEAD = 796, + ERR_LFG_RANDOM_COOLDOWN_PLAYER = 797, + ERR_LFG_RANDOM_COOLDOWN_PARTY = 798, + ERR_LFG_TOO_MANY_MEMBERS = 799, + ERR_LFG_TOO_FEW_MEMBERS = 800, + ERR_LFG_PROPOSAL_FAILED = 801, + ERR_LFG_PROPOSAL_DECLINED_SELF = 802, + ERR_LFG_PROPOSAL_DECLINED_PARTY = 803, + ERR_LFG_NO_SLOTS_SELECTED = 804, + ERR_LFG_NO_ROLES_SELECTED = 805, + ERR_LFG_ROLE_CHECK_INITIATED = 806, + ERR_LFG_READY_CHECK_INITIATED = 807, + ERR_LFG_PLAYER_DECLINED_ROLE_CHECK = 808, + ERR_LFG_PLAYER_DECLINED_READY_CHECK = 809, + ERR_LFG_JOINED_QUEUE = 810, + ERR_LFG_JOINED_FLEX_QUEUE = 811, + ERR_LFG_JOINED_RF_QUEUE = 812, + ERR_LFG_JOINED_SCENARIO_QUEUE = 813, + ERR_LFG_JOINED_WORLD_PVP_QUEUE = 814, + ERR_LFG_JOINED_BATTLEFIELD_QUEUE = 815, + ERR_LFG_JOINED_LIST = 816, + ERR_LFG_LEFT_QUEUE = 817, + ERR_LFG_LEFT_LIST = 818, + ERR_LFG_ROLE_CHECK_ABORTED = 819, + ERR_LFG_READY_CHECK_ABORTED = 820, + ERR_LFG_CANT_USE_BATTLEGROUND = 821, + ERR_LFG_CANT_USE_DUNGEONS = 822, + ERR_LFG_REASON_TOO_MANY_LFG = 823, + ERR_LFG_FARM_LIMIT = 824, + ERR_LFG_NO_CROSS_FACTION_PARTIES = 825, + ERR_INVALID_TELEPORT_LOCATION = 826, + ERR_TOO_FAR_TO_INTERACT = 827, + ERR_BATTLEGROUND_PLAYERS_FROM_DIFFERENT_REALMS = 828, + ERR_DIFFICULTY_CHANGE_COOLDOWN_S = 829, + ERR_DIFFICULTY_CHANGE_COMBAT_COOLDOWN_S = 830, + ERR_DIFFICULTY_CHANGE_WORLDSTATE = 831, + ERR_DIFFICULTY_CHANGE_ENCOUNTER = 832, + ERR_DIFFICULTY_CHANGE_COMBAT = 833, + ERR_DIFFICULTY_CHANGE_PLAYER_BUSY = 834, + ERR_DIFFICULTY_CHANGE_PLAYER_ON_VEHICLE = 835, + ERR_DIFFICULTY_CHANGE_ALREADY_STARTED = 836, + ERR_DIFFICULTY_CHANGE_OTHER_HEROIC_S = 837, + ERR_DIFFICULTY_CHANGE_HEROIC_INSTANCE_ALREADY_RUNNING = 838, + ERR_ARENA_TEAM_PARTY_SIZE = 839, + ERR_SOLO_SHUFFLE_WARGAME_GROUP_SIZE = 840, + ERR_SOLO_SHUFFLE_WARGAME_GROUP_COMP = 841, + ERR_SOLO_MIN_ITEM_LEVEL = 842, + ERR_PVP_PLAYER_ABANDONED = 843, + ERR_BATTLEGROUND_JOIN_GROUP_QUEUE_WITHOUT_HEALER = 844, + ERR_QUEST_FORCE_REMOVED_S = 845, + ERR_ATTACK_NO_ACTIONS = 846, + ERR_IN_RANDOM_BG = 847, + ERR_IN_NON_RANDOM_BG = 848, + ERR_BN_FRIEND_SELF = 849, + ERR_BN_FRIEND_ALREADY = 850, + ERR_BN_FRIEND_BLOCKED = 851, + ERR_BN_FRIEND_LIST_FULL = 852, + ERR_BN_FRIEND_REQUEST_SENT = 853, + ERR_BN_BROADCAST_THROTTLE = 854, + ERR_BG_DEVELOPER_ONLY = 855, + ERR_CURRENCY_SPELL_SLOT_MISMATCH = 856, + ERR_CURRENCY_NOT_TRADABLE = 857, + ERR_REQUIRES_EXPANSION_S = 858, + ERR_QUEST_FAILED_SPELL = 859, + ERR_TALENT_FAILED_UNSPENT_TALENT_POINTS = 860, + ERR_TALENT_FAILED_NOT_ENOUGH_TALENTS_IN_PRIMARY_TREE = 861, + ERR_TALENT_FAILED_NO_PRIMARY_TREE_SELECTED = 862, + ERR_TALENT_FAILED_CANT_REMOVE_TALENT = 863, + ERR_TALENT_FAILED_UNKNOWN = 864, + ERR_TALENT_FAILED_IN_COMBAT = 865, + ERR_TALENT_FAILED_IN_PVP_MATCH = 866, + ERR_TALENT_FAILED_IN_MYTHIC_PLUS = 867, + ERR_WARGAME_REQUEST_FAILURE = 868, + ERR_RANK_REQUIRES_AUTHENTICATOR = 869, + ERR_GUILD_BANK_VOUCHER_FAILED = 870, + ERR_WARGAME_REQUEST_SENT = 871, + ERR_REQUIRES_ACHIEVEMENT_I = 872, + ERR_REFUND_RESULT_EXCEED_MAX_CURRENCY = 873, + ERR_CANT_BUY_QUANTITY = 874, + ERR_ITEM_IS_BATTLE_PAY_LOCKED = 875, + ERR_PARTY_ALREADY_IN_BATTLEGROUND_QUEUE = 876, + ERR_PARTY_CONFIRMING_BATTLEGROUND_QUEUE = 877, + ERR_BATTLEFIELD_TEAM_PARTY_SIZE = 878, + ERR_INSUFF_TRACKED_CURRENCY_IS = 879, + ERR_NOT_ON_TOURNAMENT_REALM = 880, + ERR_GUILD_TRIAL_ACCOUNT_TRIAL = 881, + ERR_GUILD_TRIAL_ACCOUNT_VETERAN = 882, + ERR_GUILD_UNDELETABLE_DUE_TO_LEVEL = 883, + ERR_CANT_DO_THAT_IN_A_GROUP = 884, + ERR_GUILD_LEADER_REPLACED = 885, + ERR_TRANSMOGRIFY_CANT_EQUIP = 886, + ERR_TRANSMOGRIFY_INVALID_ITEM_TYPE = 887, + ERR_TRANSMOGRIFY_NOT_SOULBOUND = 888, + ERR_TRANSMOGRIFY_INVALID_SOURCE = 889, + ERR_TRANSMOGRIFY_INVALID_DESTINATION = 890, + ERR_TRANSMOGRIFY_MISMATCH = 891, + ERR_TRANSMOGRIFY_LEGENDARY = 892, + ERR_TRANSMOGRIFY_SAME_ITEM = 893, + ERR_TRANSMOGRIFY_SAME_APPEARANCE = 894, + ERR_TRANSMOGRIFY_NOT_EQUIPPED = 895, + ERR_VOID_DEPOSIT_FULL = 896, + ERR_VOID_WITHDRAW_FULL = 897, + ERR_VOID_STORAGE_WRAPPED = 898, + ERR_VOID_STORAGE_STACKABLE = 899, + ERR_VOID_STORAGE_UNBOUND = 900, + ERR_VOID_STORAGE_REPAIR = 901, + ERR_VOID_STORAGE_CHARGES = 902, + ERR_VOID_STORAGE_QUEST = 903, + ERR_VOID_STORAGE_CONJURED = 904, + ERR_VOID_STORAGE_MAIL = 905, + ERR_VOID_STORAGE_BAG = 906, + ERR_VOID_TRANSFER_STORAGE_FULL = 907, + ERR_VOID_TRANSFER_INV_FULL = 908, + ERR_VOID_TRANSFER_INTERNAL_ERROR = 909, + ERR_VOID_TRANSFER_ITEM_INVALID = 910, + ERR_DIFFICULTY_DISABLED_IN_LFG = 911, + ERR_VOID_STORAGE_UNIQUE = 912, + ERR_VOID_STORAGE_LOOT = 913, + ERR_VOID_STORAGE_HOLIDAY = 914, + ERR_VOID_STORAGE_DURATION = 915, + ERR_VOID_STORAGE_LOAD_FAILED = 916, + ERR_VOID_STORAGE_INVALID_ITEM = 917, + ERR_PARENTAL_CONTROLS_CHAT_MUTED = 918, + ERR_SOR_START_EXPERIENCE_INCOMPLETE = 919, + ERR_SOR_INVALID_EMAIL = 920, + ERR_SOR_INVALID_COMMENT = 921, + ERR_CHALLENGE_MODE_RESET_COOLDOWN_S = 922, + ERR_CHALLENGE_MODE_RESET_KEYSTONE = 923, + ERR_PET_JOURNAL_ALREADY_IN_LOADOUT = 924, + ERR_REPORT_SUBMITTED_SUCCESSFULLY = 925, + ERR_REPORT_SUBMISSION_FAILED = 926, + ERR_SUGGESTION_SUBMITTED_SUCCESSFULLY = 927, + ERR_BUG_SUBMITTED_SUCCESSFULLY = 928, + ERR_CHALLENGE_MODE_ENABLED = 929, + ERR_CHALLENGE_MODE_DISABLED = 930, + ERR_PETBATTLE_CREATE_FAILED = 931, + ERR_PETBATTLE_NOT_HERE = 932, + ERR_PETBATTLE_NOT_HERE_ON_TRANSPORT = 933, + ERR_PETBATTLE_NOT_HERE_UNEVEN_GROUND = 934, + ERR_PETBATTLE_NOT_HERE_OBSTRUCTED = 935, + ERR_PETBATTLE_NOT_WHILE_IN_COMBAT = 936, + ERR_PETBATTLE_NOT_WHILE_DEAD = 937, + ERR_PETBATTLE_NOT_WHILE_FLYING = 938, + ERR_PETBATTLE_TARGET_INVALID = 939, + ERR_PETBATTLE_TARGET_OUT_OF_RANGE = 940, + ERR_PETBATTLE_TARGET_NOT_CAPTURABLE = 941, + ERR_PETBATTLE_NOT_A_TRAINER = 942, + ERR_PETBATTLE_DECLINED = 943, + ERR_PETBATTLE_IN_BATTLE = 944, + ERR_PETBATTLE_INVALID_LOADOUT = 945, + ERR_PETBATTLE_ALL_PETS_DEAD = 946, + ERR_PETBATTLE_NO_PETS_IN_SLOTS = 947, + ERR_PETBATTLE_NO_ACCOUNT_LOCK = 948, + ERR_PETBATTLE_WILD_PET_TAPPED = 949, + ERR_PETBATTLE_RESTRICTED_ACCOUNT = 950, + ERR_PETBATTLE_OPPONENT_NOT_AVAILABLE = 951, + ERR_PETBATTLE_NOT_WHILE_IN_MATCHED_BATTLE = 952, + ERR_CANT_HAVE_MORE_PETS_OF_THAT_TYPE = 953, + ERR_CANT_HAVE_MORE_PETS = 954, + ERR_PVP_MAP_NOT_FOUND = 955, + ERR_PVP_MAP_NOT_SET = 956, + ERR_PETBATTLE_QUEUE_QUEUED = 957, + ERR_PETBATTLE_QUEUE_ALREADY_QUEUED = 958, + ERR_PETBATTLE_QUEUE_JOIN_FAILED = 959, + ERR_PETBATTLE_QUEUE_JOURNAL_LOCK = 960, + ERR_PETBATTLE_QUEUE_REMOVED = 961, + ERR_PETBATTLE_QUEUE_PROPOSAL_DECLINED = 962, + ERR_PETBATTLE_QUEUE_PROPOSAL_TIMEOUT = 963, + ERR_PETBATTLE_QUEUE_OPPONENT_DECLINED = 964, + ERR_PETBATTLE_QUEUE_REQUEUED_INTERNAL = 965, + ERR_PETBATTLE_QUEUE_REQUEUED_REMOVED = 966, + ERR_PETBATTLE_QUEUE_SLOT_LOCKED = 967, + ERR_PETBATTLE_QUEUE_SLOT_EMPTY = 968, + ERR_PETBATTLE_QUEUE_SLOT_NO_TRACKER = 969, + ERR_PETBATTLE_QUEUE_SLOT_NO_SPECIES = 970, + ERR_PETBATTLE_QUEUE_SLOT_CANT_BATTLE = 971, + ERR_PETBATTLE_QUEUE_SLOT_REVOKED = 972, + ERR_PETBATTLE_QUEUE_SLOT_DEAD = 973, + ERR_PETBATTLE_QUEUE_SLOT_NO_PET = 974, + ERR_PETBATTLE_QUEUE_NOT_WHILE_NEUTRAL = 975, + ERR_PETBATTLE_GAME_TIME_LIMIT_WARNING = 976, + ERR_PETBATTLE_GAME_ROUNDS_LIMIT_WARNING = 977, + ERR_HAS_RESTRICTION = 978, + ERR_ITEM_UPGRADE_ITEM_TOO_LOW_LEVEL = 979, + ERR_ITEM_UPGRADE_NO_PATH = 980, + ERR_ITEM_UPGRADE_NO_MORE_UPGRADES = 981, + ERR_BONUS_ROLL_EMPTY = 982, + ERR_CHALLENGE_MODE_FULL = 983, + ERR_CHALLENGE_MODE_IN_PROGRESS = 984, + ERR_CHALLENGE_MODE_INCORRECT_KEYSTONE = 985, + ERR_BATTLETAG_FRIEND_NOT_FOUND = 986, + ERR_BATTLETAG_FRIEND_NOT_VALID = 987, + ERR_BATTLETAG_FRIEND_NOT_ALLOWED = 988, + ERR_BATTLETAG_FRIEND_THROTTLED = 989, + ERR_BATTLETAG_FRIEND_SUCCESS = 990, + ERR_PET_TOO_HIGH_LEVEL_TO_UNCAGE = 991, + ERR_PETBATTLE_INTERNAL = 992, + ERR_CANT_CAGE_PET_YET = 993, + ERR_NO_LOOT_IN_CHALLENGE_MODE = 994, + ERR_QUEST_PET_BATTLE_VICTORIES_PVP_II = 995, + ERR_ROLE_CHECK_ALREADY_IN_PROGRESS = 996, + ERR_RECRUIT_A_FRIEND_ACCOUNT_LIMIT = 997, + ERR_RECRUIT_A_FRIEND_FAILED = 998, + ERR_SET_LOOT_PERSONAL = 999, + ERR_SET_LOOT_METHOD_FAILED_COMBAT = 1000, + ERR_REAGENT_BANK_FULL = 1001, + ERR_REAGENT_BANK_LOCKED = 1002, + ERR_GARRISON_BUILDING_EXISTS = 1003, + ERR_GARRISON_INVALID_PLOT = 1004, + ERR_GARRISON_INVALID_BUILDINGID = 1005, + ERR_GARRISON_INVALID_PLOT_BUILDING = 1006, + ERR_GARRISON_REQUIRES_BLUEPRINT = 1007, + ERR_GARRISON_NOT_ENOUGH_CURRENCY = 1008, + ERR_GARRISON_NOT_ENOUGH_GOLD = 1009, + ERR_GARRISON_COMPLETE_MISSION_WRONG_FOLLOWER_TYPE = 1010, + ERR_ALREADY_USING_LFG_LIST = 1011, + ERR_RESTRICTED_ACCOUNT_LFG_LIST_TRIAL = 1012, + ERR_TOY_USE_LIMIT_REACHED = 1013, + ERR_TOY_ALREADY_KNOWN = 1014, + ERR_TRANSMOG_SET_ALREADY_KNOWN = 1015, + ERR_NOT_ENOUGH_CURRENCY = 1016, + ERR_SPEC_IS_DISABLED = 1017, + ERR_FEATURE_RESTRICTED_TRIAL = 1018, + ERR_CANT_BE_OBLITERATED = 1019, + ERR_CANT_BE_SCRAPPED = 1020, + ERR_CANT_BE_RECRAFTED = 1021, + ERR_ARTIFACT_RELIC_DOES_NOT_MATCH_ARTIFACT = 1022, + ERR_MUST_EQUIP_ARTIFACT = 1023, + ERR_CANT_DO_THAT_RIGHT_NOW = 1024, + ERR_AFFECTING_COMBAT = 1025, + ERR_EQUIPMENT_MANAGER_COMBAT_SWAP_S = 1026, + ERR_EQUIPMENT_MANAGER_BAGS_FULL = 1027, + ERR_EQUIPMENT_MANAGER_MISSING_ITEM_S = 1028, + ERR_MOVIE_RECORDING_WARNING_PERF = 1029, + ERR_MOVIE_RECORDING_WARNING_DISK_FULL = 1030, + ERR_MOVIE_RECORDING_WARNING_NO_MOVIE = 1031, + ERR_MOVIE_RECORDING_WARNING_REQUIREMENTS = 1032, + ERR_MOVIE_RECORDING_WARNING_COMPRESSING = 1033, + ERR_NO_CHALLENGE_MODE_REWARD = 1034, + ERR_CLAIMED_CHALLENGE_MODE_REWARD = 1035, + ERR_CHALLENGE_MODE_PERIOD_RESET_SS = 1036, + ERR_CANT_DO_THAT_CHALLENGE_MODE_ACTIVE = 1037, + ERR_TALENT_FAILED_REST_AREA = 1038, + ERR_CANNOT_ABANDON_LAST_PET = 1039, + ERR_TEST_CVAR_SET_SSS = 1040, + ERR_QUEST_TURN_IN_FAIL_REASON = 1041, + ERR_CLAIMED_CHALLENGE_MODE_REWARD_OLD = 1042, + ERR_TALENT_GRANTED_BY_AURA = 1043, + ERR_CHALLENGE_MODE_ALREADY_COMPLETE = 1044, + ERR_GLYPH_TARGET_NOT_AVAILABLE = 1045, + ERR_PVP_WARMODE_TOGGLE_ON = 1046, + ERR_PVP_WARMODE_TOGGLE_OFF = 1047, + ERR_SPELL_FAILED_LEVEL_REQUIREMENT = 1048, + ERR_SPELL_FAILED_CANT_FLY_HERE = 1049, + ERR_BATTLEGROUND_JOIN_REQUIRES_LEVEL = 1050, + ERR_BATTLEGROUND_JOIN_DISQUALIFIED = 1051, + ERR_BATTLEGROUND_JOIN_DISQUALIFIED_NO_NAME = 1052, + ERR_VOICE_CHAT_GENERIC_UNABLE_TO_CONNECT = 1053, + ERR_VOICE_CHAT_SERVICE_LOST = 1054, + ERR_VOICE_CHAT_CHANNEL_NAME_TOO_SHORT = 1055, + ERR_VOICE_CHAT_CHANNEL_NAME_TOO_LONG = 1056, + ERR_VOICE_CHAT_CHANNEL_ALREADY_EXISTS = 1057, + ERR_VOICE_CHAT_TARGET_NOT_FOUND = 1058, + ERR_VOICE_CHAT_TOO_MANY_REQUESTS = 1059, + ERR_VOICE_CHAT_PLAYER_SILENCED = 1060, + ERR_VOICE_CHAT_PARENTAL_DISABLE_ALL = 1061, + ERR_VOICE_CHAT_DISABLED = 1062, + ERR_NO_PVP_REWARD = 1063, + ERR_CLAIMED_PVP_REWARD = 1064, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_ESSENCE_NOT_UNLOCKED = 1065, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_CANT_REMOVE_ESSENCE = 1066, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_CONDITION_FAILED = 1067, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_REST_AREA = 1068, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_SLOT_LOCKED = 1069, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_AT_FORGE = 1070, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_HEART_LEVEL_TOO_LOW = 1071, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_EQUIPPED = 1072, + ERR_SOCKETING_REQUIRES_PUNCHCARDRED_GEM = 1073, + ERR_SOCKETING_PUNCHCARDRED_GEM_ONLY_IN_PUNCHCARDREDSLOT = 1074, + ERR_SOCKETING_REQUIRES_PUNCHCARDYELLOW_GEM = 1075, + ERR_SOCKETING_PUNCHCARDYELLOW_GEM_ONLY_IN_PUNCHCARDYELLOWSLOT = 1076, + ERR_SOCKETING_REQUIRES_PUNCHCARDBLUE_GEM = 1077, + ERR_SOCKETING_PUNCHCARDBLUE_GEM_ONLY_IN_PUNCHCARDBLUESLOT = 1078, + ERR_SOCKETING_REQUIRES_DOMINATION_SHARD = 1079, + ERR_SOCKETING_DOMINATION_SHARD_ONLY_IN_DOMINATIONSLOT = 1080, + ERR_SOCKETING_REQUIRES_CYPHER_GEM = 1081, + ERR_SOCKETING_CYPHER_GEM_ONLY_IN_CYPHERSLOT = 1082, + ERR_SOCKETING_REQUIRES_TINKER_GEM = 1083, + ERR_SOCKETING_TINKER_GEM_ONLY_IN_TINKERSLOT = 1084, + ERR_SOCKETING_REQUIRES_PRIMORDIAL_GEM = 1085, + ERR_SOCKETING_PRIMORDIAL_GEM_ONLY_IN_PRIMORDIALSLOT = 1086, + ERR_LEVEL_LINKING_RESULT_LINKED = 1087, + ERR_LEVEL_LINKING_RESULT_UNLINKED = 1088, + ERR_CLUB_FINDER_ERROR_POST_CLUB = 1089, + ERR_CLUB_FINDER_ERROR_APPLY_CLUB = 1090, + ERR_CLUB_FINDER_ERROR_RESPOND_APPLICANT = 1091, + ERR_CLUB_FINDER_ERROR_CANCEL_APPLICATION = 1092, + ERR_CLUB_FINDER_ERROR_TYPE_ACCEPT_APPLICATION = 1093, + ERR_CLUB_FINDER_ERROR_TYPE_NO_INVITE_PERMISSIONS = 1094, + ERR_CLUB_FINDER_ERROR_TYPE_NO_POSTING_PERMISSIONS = 1095, + ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST = 1096, + ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST_NO_PERM = 1097, + ERR_CLUB_FINDER_ERROR_TYPE_FINDER_NOT_AVAILABLE = 1098, + ERR_CLUB_FINDER_ERROR_TYPE_GET_POSTING_IDS = 1099, + ERR_CLUB_FINDER_ERROR_TYPE_JOIN_APPLICATION = 1100, + ERR_CLUB_FINDER_ERROR_TYPE_REALM_NOT_ELIGIBLE = 1101, + ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_RENAME = 1102, + ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_DESCRIPTION_CHANGE = 1103, + ERR_ITEM_INTERACTION_NOT_ENOUGH_GOLD = 1104, + ERR_ITEM_INTERACTION_NOT_ENOUGH_CURRENCY = 1105, + ERR_ITEM_INTERACTION_NO_CONVERSION_OUTPUT = 1106, + ERR_PLAYER_CHOICE_ERROR_PENDING_CHOICE = 1107, + ERR_SOULBIND_INVALID_CONDUIT = 1108, + ERR_SOULBIND_INVALID_CONDUIT_ITEM = 1109, + ERR_SOULBIND_INVALID_TALENT = 1110, + ERR_SOULBIND_DUPLICATE_CONDUIT = 1111, + ERR_ACTIVATE_SOULBIND_S = 1112, + ERR_ACTIVATE_SOULBIND_FAILED_REST_AREA = 1113, + ERR_CANT_USE_PROFANITY = 1114, + ERR_NOT_IN_PET_BATTLE = 1115, + ERR_NOT_IN_NPE = 1116, + ERR_NO_SPEC = 1117, + ERR_NO_DOMINATIONSHARD_OVERWRITE = 1118, + ERR_USE_WEEKLY_REWARDS_DISABLED = 1119, + ERR_CROSS_FACTION_GROUP_JOINED = 1120, + ERR_CANT_TARGET_UNFRIENDLY_IN_OVERWORLD = 1121, + ERR_EQUIPABLESPELLS_SLOTS_FULL = 1122, + ERR_ITEM_MOD_APPEARANCE_GROUP_ALREADY_KNOWN = 1123, + ERR_CANT_BULK_SELL_ITEM_WITH_REFUND = 1124, + ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_IS_FULL = 1125, + ERR_WOW_LABS_PARTY_ERROR_TYPE_MAX_INVITE_SENT = 1126, + ERR_WOW_LABS_PARTY_ERROR_TYPE_PLAYER_ALREADY_INVITED = 1127, + ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_INVITE_INVALID = 1128, + ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_ENTER_QUEUE_FAILED = 1129, + ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_LEAVE_QUEUE_FAILED = 1130, + ERR_TARGET_IS_SELF_FOUND_CANNOT_TRADE = 1131, + ERR_PLAYER_IS_SELF_FOUND_CANNOT_TRADE = 1132, + ERR_MAIL_RECEPIENT_IS_SELF_FOUND_CANNOT_RECEIVE_MAIL = 1133, + ERR_PLAYER_IS_SELF_FOUND_CANNOT_SEND_MAIL = 1134, + ERR_PLAYER_IS_SELF_FOUND_CANNOT_USE_AUCTION_HOUSE = 1135, + ERR_MAIL_TARGET_CANNOT_RECEIVE_MAIL = 1136, }; enum class MountResult : uint32 diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h index e91e0396913..41c253adf29 100644 --- a/src/server/game/Quests/QuestDef.h +++ b/src/server/game/Quests/QuestDef.h @@ -106,16 +106,19 @@ enum class QuestPushReason : uint8 RaceToRecipient = 29, // "%s's attempt to share quest "%s" failed. You are the wrong race for that quest." LowFaction = 30, // "%s's reputation is too low for that quest." LowFactionToRecipient = 31, // "%s's attempt to share quest "%s" failed. Your reputation is too low for that quest." - Expansion = 32, // "%s doesn't own the required expansion for that quest." - ExpansionToRecipient = 33, // "%s's attempt to share quest "%s" failed. You do not own the required expansion for that quest." - NotGarrisonOwner = 34, // "%s must own a garrison to accept that quest." - NotGarrisonOwnerToRecipient = 35, // "%s's attempt to share quest "%s" failed. You must own a garrison to accept that quest." - WrongCovenant = 36, // "%s is in the wrong covenant for that quest." - WrongCovenantToRecipient = 37, // "%s's attempt to share quest "%s" failed. You are in the wrong covenant for that quest." - NewPlayerExperience = 38, // "%s must complete Exile's Reach to accept that quest." - NewPlayerExperienceToRecipient = 39, // "%s's attempt to share quest "%s" failed. You must complete Exile's Reach to accept that quest." - WrongFaction = 40, // "%s is the wrong faction for that quest." - WrongFactionToRecipient = 41 // "%s's attempt to share quest "%s" failed. You are the wrong faction for that quest." + HighFaction = 32, // "%s's reputation is too high for that quest." + HighFactionToRecipient = 33, // "%s's attempt to share quest "%s" failed. Your reputation is too high for that quest." + Expansion = 34, // "%s doesn't own the required expansion for that quest." + ExpansionToRecipient = 35, // "%s's attempt to share quest "%s" failed. You do not own the required expansion for that quest." + NotGarrisonOwner = 36, // "%s must own a garrison to accept that quest." + NotGarrisonOwnerToRecipient = 37, // "%s's attempt to share quest "%s" failed. You must own a garrison to accept that quest." + WrongCovenant = 38, // "%s is in the wrong covenant for that quest." + WrongCovenantToRecipient = 39, // "%s's attempt to share quest "%s" failed. You are in the wrong covenant for that quest." + NewPlayerExperience = 40, // "%s must complete Exile's Reach to accept that quest." + NewPlayerExperienceToRecipient = 41, // "%s's attempt to share quest "%s" failed. You must complete Exile's Reach to accept that quest." + WrongFaction = 42, // "%s is the wrong faction for that quest." + WrongFactionToRecipient = 43, // "%s's attempt to share quest "%s" failed. You are the wrong faction for that quest." + CrossFactionRestricted = 44, // "Quests can't be shared in cross-faction groups." }; enum QuestTradeSkill diff --git a/src/server/game/Quests/enuminfo_QuestDef.cpp b/src/server/game/Quests/enuminfo_QuestDef.cpp index 594b5e7730e..94d0a3c3dfd 100644 --- a/src/server/game/Quests/enuminfo_QuestDef.cpp +++ b/src/server/game/Quests/enuminfo_QuestDef.cpp @@ -138,6 +138,8 @@ TC_API_EXPORT EnumText EnumUtils<QuestPushReason>::ToString(QuestPushReason valu case QuestPushReason::RaceToRecipient: return { "RaceToRecipient", "RaceToRecipient", "\042%s's attempt to share quest \042%s\042 failed. You are the wrong race for that quest.\042" }; case QuestPushReason::LowFaction: return { "LowFaction", "LowFaction", "\042%s's reputation is too low for that quest.\042" }; case QuestPushReason::LowFactionToRecipient: return { "LowFactionToRecipient", "LowFactionToRecipient", "\042%s's attempt to share quest \042%s\042 failed. Your reputation is too low for that quest.\042" }; + case QuestPushReason::HighFaction: return { "HighFaction", "HighFaction", "\042%s's reputation is too high for that quest.\042" }; + case QuestPushReason::HighFactionToRecipient: return { "HighFactionToRecipient", "HighFactionToRecipient", "\042%s's attempt to share quest \042%s\042 failed. Your reputation is too high for that quest.\042" }; case QuestPushReason::Expansion: return { "Expansion", "Expansion", "\042%s doesn't own the required expansion for that quest.\042" }; case QuestPushReason::ExpansionToRecipient: return { "ExpansionToRecipient", "ExpansionToRecipient", "\042%s's attempt to share quest \042%s\042 failed. You do not own the required expansion for that quest.\042" }; case QuestPushReason::NotGarrisonOwner: return { "NotGarrisonOwner", "NotGarrisonOwner", "\042%s must own a garrison to accept that quest.\042" }; @@ -148,12 +150,13 @@ TC_API_EXPORT EnumText EnumUtils<QuestPushReason>::ToString(QuestPushReason valu case QuestPushReason::NewPlayerExperienceToRecipient: return { "NewPlayerExperienceToRecipient", "NewPlayerExperienceToRecipient", "\042%s's attempt to share quest \042%s\042 failed. You must complete Exile's Reach to accept that quest.\042" }; case QuestPushReason::WrongFaction: return { "WrongFaction", "WrongFaction", "\042%s is the wrong faction for that quest.\042" }; case QuestPushReason::WrongFactionToRecipient: return { "WrongFactionToRecipient", "WrongFactionToRecipient", "\042%s's attempt to share quest \042%s\042 failed. You are the wrong faction for that quest.\042" }; + case QuestPushReason::CrossFactionRestricted: return { "CrossFactionRestricted", "CrossFactionRestricted", "\042Quests can't be shared in cross-faction groups.\042" }; default: throw std::out_of_range("value"); } } template <> -TC_API_EXPORT size_t EnumUtils<QuestPushReason>::Count() { return 42; } +TC_API_EXPORT size_t EnumUtils<QuestPushReason>::Count() { return 45; } template <> TC_API_EXPORT QuestPushReason EnumUtils<QuestPushReason>::FromIndex(size_t index) @@ -192,16 +195,19 @@ TC_API_EXPORT QuestPushReason EnumUtils<QuestPushReason>::FromIndex(size_t index case 29: return QuestPushReason::RaceToRecipient; case 30: return QuestPushReason::LowFaction; case 31: return QuestPushReason::LowFactionToRecipient; - case 32: return QuestPushReason::Expansion; - case 33: return QuestPushReason::ExpansionToRecipient; - case 34: return QuestPushReason::NotGarrisonOwner; - case 35: return QuestPushReason::NotGarrisonOwnerToRecipient; - case 36: return QuestPushReason::WrongCovenant; - case 37: return QuestPushReason::WrongCovenantToRecipient; - case 38: return QuestPushReason::NewPlayerExperience; - case 39: return QuestPushReason::NewPlayerExperienceToRecipient; - case 40: return QuestPushReason::WrongFaction; - case 41: return QuestPushReason::WrongFactionToRecipient; + case 32: return QuestPushReason::HighFaction; + case 33: return QuestPushReason::HighFactionToRecipient; + case 34: return QuestPushReason::Expansion; + case 35: return QuestPushReason::ExpansionToRecipient; + case 36: return QuestPushReason::NotGarrisonOwner; + case 37: return QuestPushReason::NotGarrisonOwnerToRecipient; + case 38: return QuestPushReason::WrongCovenant; + case 39: return QuestPushReason::WrongCovenantToRecipient; + case 40: return QuestPushReason::NewPlayerExperience; + case 41: return QuestPushReason::NewPlayerExperienceToRecipient; + case 42: return QuestPushReason::WrongFaction; + case 43: return QuestPushReason::WrongFactionToRecipient; + case 44: return QuestPushReason::CrossFactionRestricted; default: throw std::out_of_range("index"); } } @@ -243,16 +249,19 @@ TC_API_EXPORT size_t EnumUtils<QuestPushReason>::ToIndex(QuestPushReason value) case QuestPushReason::RaceToRecipient: return 29; case QuestPushReason::LowFaction: return 30; case QuestPushReason::LowFactionToRecipient: return 31; - case QuestPushReason::Expansion: return 32; - case QuestPushReason::ExpansionToRecipient: return 33; - case QuestPushReason::NotGarrisonOwner: return 34; - case QuestPushReason::NotGarrisonOwnerToRecipient: return 35; - case QuestPushReason::WrongCovenant: return 36; - case QuestPushReason::WrongCovenantToRecipient: return 37; - case QuestPushReason::NewPlayerExperience: return 38; - case QuestPushReason::NewPlayerExperienceToRecipient: return 39; - case QuestPushReason::WrongFaction: return 40; - case QuestPushReason::WrongFactionToRecipient: return 41; + case QuestPushReason::HighFaction: return 32; + case QuestPushReason::HighFactionToRecipient: return 33; + case QuestPushReason::Expansion: return 34; + case QuestPushReason::ExpansionToRecipient: return 35; + case QuestPushReason::NotGarrisonOwner: return 36; + case QuestPushReason::NotGarrisonOwnerToRecipient: return 37; + case QuestPushReason::WrongCovenant: return 38; + case QuestPushReason::WrongCovenantToRecipient: return 39; + case QuestPushReason::NewPlayerExperience: return 40; + case QuestPushReason::NewPlayerExperienceToRecipient: return 41; + case QuestPushReason::WrongFaction: return 42; + case QuestPushReason::WrongFactionToRecipient: return 43; + case QuestPushReason::CrossFactionRestricted: return 44; default: throw std::out_of_range("value"); } } diff --git a/src/server/game/Server/Packets/AuctionHousePackets.cpp b/src/server/game/Server/Packets/AuctionHousePackets.cpp index bbb4be0aea5..e30031c22f7 100644 --- a/src/server/game/Server/Packets/AuctionHousePackets.cpp +++ b/src/server/game/Server/Packets/AuctionHousePackets.cpp @@ -291,6 +291,7 @@ void AuctionBrowseQuery::Read() KnownPets.resize(knownPetsSize); _worldPacket >> MaxPetLevel; + _worldPacket >> Unused1026; for (uint8& knownPetMask : KnownPets) _worldPacket >> knownPetMask; diff --git a/src/server/game/Server/Packets/AuctionHousePackets.h b/src/server/game/Server/Packets/AuctionHousePackets.h index 376ee86eee7..ac49c86bc99 100644 --- a/src/server/game/Server/Packets/AuctionHousePackets.h +++ b/src/server/game/Server/Packets/AuctionHousePackets.h @@ -157,6 +157,7 @@ namespace WorldPackets AuctionHouseFilterMask Filters = AuctionHouseFilterMask(0); std::vector<uint8> KnownPets; // size checked separately in Read() int8 MaxPetLevel = 0; + uint32 Unused1026 = 0; Optional<Addon::AddOnInfo> TaintedBy; std::string Name; Array<AuctionListFilterClass, 7> ItemClassFilters; diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp index 4519412b40f..2d0982f902f 100644 --- a/src/server/game/Server/Packets/CharacterPackets.cpp +++ b/src/server/game/Server/Packets/CharacterPackets.cpp @@ -352,6 +352,7 @@ void CreateCharacter::Read() bool const hasTemplateSet = _worldPacket.ReadBit(); CreateInfo->IsTrialBoost = _worldPacket.ReadBit(); CreateInfo->UseNPE = _worldPacket.ReadBit(); + CreateInfo->Unused1026 = _worldPacket.ReadBit(); _worldPacket >> CreateInfo->Race; _worldPacket >> CreateInfo->Class; diff --git a/src/server/game/Server/Packets/CharacterPackets.h b/src/server/game/Server/Packets/CharacterPackets.h index 61096bb5ed7..df64374efc4 100644 --- a/src/server/game/Server/Packets/CharacterPackets.h +++ b/src/server/game/Server/Packets/CharacterPackets.h @@ -64,6 +64,7 @@ namespace WorldPackets Optional<int32> TemplateSet; bool IsTrialBoost = false; bool UseNPE = false; + bool Unused1026 = false; std::string Name; /// Server side data diff --git a/src/server/game/Server/Packets/ClientConfigPackets.cpp b/src/server/game/Server/Packets/ClientConfigPackets.cpp index 2b25c4eabe7..5b9bb2d8f82 100644 --- a/src/server/game/Server/Packets/ClientConfigPackets.cpp +++ b/src/server/game/Server/Packets/ClientConfigPackets.cpp @@ -37,15 +37,15 @@ WorldPacket const* WorldPackets::ClientConfig::ClientCacheVersion::Write() void WorldPackets::ClientConfig::RequestAccountData::Read() { _worldPacket >> PlayerGuid; - DataType = _worldPacket.ReadBits(4); + _worldPacket >> DataType; } WorldPacket const* WorldPackets::ClientConfig::UpdateAccountData::Write() { - _worldPacket << Player; _worldPacket << Time; _worldPacket << uint32(Size); - _worldPacket.WriteBits(DataType, 4); + _worldPacket << Player; + _worldPacket << int32(DataType); _worldPacket << uint32(CompressedData.size()); _worldPacket.append(CompressedData); @@ -54,10 +54,10 @@ WorldPacket const* WorldPackets::ClientConfig::UpdateAccountData::Write() void WorldPackets::ClientConfig::UserClientUpdateAccountData::Read() { - _worldPacket >> PlayerGuid; _worldPacket >> Time; _worldPacket >> Size; - DataType = _worldPacket.ReadBits(4); + _worldPacket >> PlayerGuid; + _worldPacket >> DataType; uint32 compressedSize = _worldPacket.read<uint32>(); if (compressedSize > _worldPacket.size() - _worldPacket.rpos()) diff --git a/src/server/game/Server/Packets/ClientConfigPackets.h b/src/server/game/Server/Packets/ClientConfigPackets.h index 5d6ffcccec6..684231af0fe 100644 --- a/src/server/game/Server/Packets/ClientConfigPackets.h +++ b/src/server/game/Server/Packets/ClientConfigPackets.h @@ -56,7 +56,7 @@ namespace WorldPackets void Read() override; ObjectGuid PlayerGuid; - uint8 DataType = 0; ///< @see enum AccountDataType + int32 DataType = 0; ///< @see enum AccountDataType }; class UpdateAccountData final : public ServerPacket @@ -69,7 +69,7 @@ namespace WorldPackets ObjectGuid Player; Timestamp<> Time; uint32 Size = 0; ///< decompressed size - uint8 DataType = 0; ///< @see enum AccountDataType + int32 DataType = 0; ///< @see enum AccountDataType ByteBuffer CompressedData; }; @@ -83,7 +83,7 @@ namespace WorldPackets ObjectGuid PlayerGuid; Timestamp<> Time; uint32 Size = 0; ///< decompressed size - uint8 DataType = 0; ///< @see enum AccountDataType + int32 DataType = 0; ///< @see enum AccountDataType ByteBuffer CompressedData; }; diff --git a/src/server/game/Server/Packets/ReputationPackets.cpp b/src/server/game/Server/Packets/ReputationPackets.cpp index 8896c2071c0..6ba3c02f264 100644 --- a/src/server/game/Server/Packets/ReputationPackets.cpp +++ b/src/server/game/Server/Packets/ReputationPackets.cpp @@ -53,6 +53,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Reputation::FactionStandi { data << int32(factionStanding.Index); data << int32(factionStanding.Standing); + data << int32(factionStanding.FactionID); return data; } diff --git a/src/server/game/Server/Packets/ReputationPackets.h b/src/server/game/Server/Packets/ReputationPackets.h index 31fe7a62a9f..c38c4235914 100644 --- a/src/server/game/Server/Packets/ReputationPackets.h +++ b/src/server/game/Server/Packets/ReputationPackets.h @@ -67,9 +67,11 @@ namespace WorldPackets { FactionStandingData() { } FactionStandingData(int32 index, int32 standing) : Index(index), Standing(standing) { } + FactionStandingData(int32 index, int32 standing, int32 factionId) : Index(index), Standing(standing), FactionID(factionId) { } int32 Index = 0; int32 Standing = 0; + int32 FactionID = 0; }; class SetFactionStanding final : public ServerPacket diff --git a/src/server/game/Server/Packets/ScenePackets.cpp b/src/server/game/Server/Packets/ScenePackets.cpp index 8622a80f949..e3d4489e8b4 100644 --- a/src/server/game/Server/Packets/ScenePackets.cpp +++ b/src/server/game/Server/Packets/ScenePackets.cpp @@ -48,9 +48,11 @@ void WorldPackets::Scenes::SceneTriggerEvent::Read() void WorldPackets::Scenes::ScenePlaybackComplete::Read() { _worldPacket >> SceneInstanceID; + _worldPacket >> TimePassed; } void WorldPackets::Scenes::ScenePlaybackCanceled::Read() { _worldPacket >> SceneInstanceID; + _worldPacket >> TimePassed; } diff --git a/src/server/game/Server/Packets/ScenePackets.h b/src/server/game/Server/Packets/ScenePackets.h index c851d61f29f..99f217f5fbe 100644 --- a/src/server/game/Server/Packets/ScenePackets.h +++ b/src/server/game/Server/Packets/ScenePackets.h @@ -70,6 +70,7 @@ namespace WorldPackets void Read() override; uint32 SceneInstanceID = 0; + int32 TimePassed = 0; }; class ScenePlaybackCanceled final : public ClientPacket @@ -80,6 +81,7 @@ namespace WorldPackets void Read() override; uint32 SceneInstanceID = 0; + int32 TimePassed = 0; }; } } diff --git a/src/server/game/Server/Packets/SystemPackets.cpp b/src/server/game/Server/Packets/SystemPackets.cpp index 1849327538b..db076443f06 100644 --- a/src/server/game/Server/Packets/SystemPackets.cpp +++ b/src/server/game/Server/Packets/SystemPackets.cpp @@ -198,7 +198,7 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write() _worldPacket.WriteBit(KioskModeEnabled); _worldPacket.WriteBit(CompetitiveModeEnabled); - _worldPacket.WriteBit(false); // unused, 10.0.2 + _worldPacket.WriteBit(IsBoostEnabled); _worldPacket.WriteBit(TrialBoostEnabled); _worldPacket.WriteBit(TokenBalanceEnabled); _worldPacket.WriteBit(LiveRegionCharacterListEnabled); @@ -209,7 +209,7 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write() _worldPacket.WriteBit(Unknown901CheckoutRelated); _worldPacket.WriteBit(false); // unused, 10.0.2 _worldPacket.WriteBit(EuropaTicketSystemStatus.has_value()); - _worldPacket.WriteBit(false); // unused, 10.0.2 + _worldPacket.WriteBit(IsNameReservationEnabled); _worldPacket.WriteBit(LaunchETA.has_value()); _worldPacket.WriteBit(AddonsDisabled); _worldPacket.WriteBit(Unused1000); @@ -243,6 +243,7 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write() _worldPacket << PlayerNameQueryInterval; _worldPacket << uint32(DebugTimeEvents.size()); _worldPacket << int32(Unused1007); + _worldPacket << uint32(EventRealmQueues); if (LaunchETA) _worldPacket << int32(*LaunchETA); diff --git a/src/server/game/Server/Packets/SystemPackets.h b/src/server/game/Server/Packets/SystemPackets.h index afb0600db98..249cb171a51 100644 --- a/src/server/game/Server/Packets/SystemPackets.h +++ b/src/server/game/Server/Packets/SystemPackets.h @@ -194,6 +194,7 @@ namespace WorldPackets bool IsExpansionPreorderInStore = false; // NYI bool KioskModeEnabled = false; // NYI bool CompetitiveModeEnabled = false; // NYI + bool IsBoostEnabled = false; // classic only bool TrialBoostEnabled = false; // NYI bool TokenBalanceEnabled = false; // NYI bool LiveRegionCharacterListEnabled = false; // NYI @@ -201,6 +202,7 @@ namespace WorldPackets bool LiveRegionAccountCopyEnabled = false; // NYI bool LiveRegionKeyBindingsCopyEnabled = false; bool Unknown901CheckoutRelated = false; // NYI + bool IsNameReservationEnabled = false; // classic only bool AddonsDisabled = false; bool Unused1000 = false; bool AccountSaveDataExportEnabled = false; @@ -224,6 +226,7 @@ namespace WorldPackets Optional<int32> LaunchETA; std::vector<DebugTimeEventInfo> DebugTimeEvents; int32 Unused1007 = 0; + uint32 EventRealmQueues = 0; Optional<std::string> RealmHiddenAlert; }; diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 613b4e1f970..3a7141cb45a 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -306,6 +306,8 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_CHAT_CHANNEL_UNSILENCE_ALL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); DEFINE_HANDLER(CMSG_CHAT_JOIN_CHANNEL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleJoinChannel); DEFINE_HANDLER(CMSG_CHAT_LEAVE_CHANNEL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLeaveChannel); + DEFINE_HANDLER(CMSG_CHAT_LOBBY_MATCHMAKER_MESSAGE_INSTANCE_CHAT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_CHAT_LOBBY_MATCHMAKER_MESSAGE_PARTY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CHAT_MESSAGE_AFK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatMessageAFKOpcode); DEFINE_HANDLER(CMSG_CHAT_MESSAGE_CHANNEL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatMessageChannelOpcode); DEFINE_HANDLER(CMSG_CHAT_MESSAGE_DND, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatMessageDNDOpcode); @@ -560,8 +562,17 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_LIVE_REGION_KEY_BINDINGS_COPY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_LOADING_SCREEN_NOTIFY, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleLoadScreenOpcode); DEFINE_HANDLER(CMSG_LOAD_SELECTED_TROPHY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_LOBBY_MATCHMAKER_ACCEPT_PARTY_INVITE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_LOBBY_MATCHMAKER_CREATE_CHARACTER, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_LOBBY_MATCHMAKER_LEAVE_PARTY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_LOBBY_MATCHMAKER_PARTY_INVITE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_LOBBY_MATCHMAKER_PARTY_UNINVITE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_LOBBY_MATCHMAKER_REJECT_PARTY_INVITE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_LOBBY_MATCHMAKER_SET_PARTY_PLAYLIST_ENTRY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_LOBBY_MATCHMAKER_SET_PLAYER_READY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_LOGOUT_CANCEL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLogoutCancelOpcode); DEFINE_HANDLER(CMSG_LOGOUT_INSTANT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_LOGOUT_LOBBY_MATCHMAKER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_LOGOUT_REQUEST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLogoutRequestOpcode); DEFINE_HANDLER(CMSG_LOG_DISCONNECT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_EarlyProccess); DEFINE_HANDLER(CMSG_LOG_STREAMING_ERROR, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); @@ -904,6 +915,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_SORT_BAGS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSortBags); DEFINE_HANDLER(CMSG_SORT_BANK_BAGS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSortBankBags); DEFINE_HANDLER(CMSG_SORT_REAGENT_BANK_BAGS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSortReagentBankBags); + DEFINE_HANDLER(CMSG_SPECTATE_CHANGE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SPAWN_TRACKING_UPDATE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SPELL_CLICK, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSpellClick); DEFINE_HANDLER(CMSG_SPELL_EMPOWER_RELEASE, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); @@ -985,6 +997,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_WARDEN3_DATA, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleWardenData); DEFINE_HANDLER(CMSG_WHO, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleWhoOpcode); DEFINE_HANDLER(CMSG_WHO_IS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleWhoIsOpcode); + DEFINE_HANDLER(CMSG_WORLD_LOOT_OBJECT_CLICK, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_WORLD_PORT_RESPONSE, STATUS_TRANSFER, PROCESS_THREADUNSAFE, &WorldSession::HandleMoveWorldportAckOpcode); DEFINE_HANDLER(CMSG_WRAP_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleWrapItem); @@ -1601,6 +1614,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_LIVE_REGION_KEY_BINDINGS_COPY_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOAD_CUF_PROFILES, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOAD_EQUIPMENT_SET, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOBBY_MATCHMAKER_LOBBY_ACQUIRED_SERVER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOBBY_MATCHMAKER_PARTY_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOBBY_MATCHMAKER_PARTY_INVITE_REJECTED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOBBY_MATCHMAKER_RECEIVE_INVITE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -2034,6 +2048,8 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_SOCKET_GEMS_SUCCESS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPECIAL_MOUNT_ANIM, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPEC_INVOLUNTARILY_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPECTATE_END, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPECTATE_PLAYER, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_ABSORB_LOG, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_CATEGORY_COOLDOWN, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_CHANNEL_START, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -2172,6 +2188,10 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_WORLD_QUEST_UPDATE_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WORLD_SERVER_INFO, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WOW_ENTITLEMENT_NOTIFICATION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_WOW_LABS_NOTIFY_PLAYERS_MATCH_END, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_WOW_LABS_NOTIFY_PLAYERS_MATCH_STATE_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_WOW_LABS_PARTY_ERROR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_WOW_LABS_SET_PREDICTION_CIRCLE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_XP_AWARDED_FROM_CURRENCY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_XP_GAIN_ABORTED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_XP_GAIN_ENABLED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 3365afbd902..b6436a5dd03 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -90,8 +90,8 @@ enum OpcodeClient : uint16 CMSG_AUCTION_SELL_COMMODITY = 0x34E0, CMSG_AUCTION_SELL_ITEM = 0x34D3, CMSG_AUCTION_SET_FAVORITE_ITEM = 0x3735, - CMSG_AUTH_CONTINUED_SESSION = 0x3766, - CMSG_AUTH_SESSION = 0x3765, + CMSG_AUTH_CONTINUED_SESSION = 0x377A, + CMSG_AUTH_SESSION = 0x3779, CMSG_AUTOBANK_ITEM = 0x3997, CMSG_AUTOBANK_REAGENT = 0x3999, CMSG_AUTOSTORE_BANK_ITEM = 0x3996, @@ -194,43 +194,45 @@ enum OpcodeClient : uint16 CMSG_CHAR_CUSTOMIZE = 0x368C, CMSG_CHAR_DELETE = 0x369C, CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x3692, - CMSG_CHAT_ADDON_MESSAGE = 0x37EE, - CMSG_CHAT_ADDON_MESSAGE_TARGETED = 0x37EF, - CMSG_CHAT_CAN_LOCAL_WHISPER_TARGET_REQUEST = 0x37F6, - CMSG_CHAT_CHANNEL_ANNOUNCEMENTS = 0x37E3, - CMSG_CHAT_CHANNEL_BAN = 0x37E1, - CMSG_CHAT_CHANNEL_DECLINE_INVITE = 0x37E6, - CMSG_CHAT_CHANNEL_DISPLAY_LIST = 0x37D6, - CMSG_CHAT_CHANNEL_INVITE = 0x37DF, - CMSG_CHAT_CHANNEL_KICK = 0x37E0, - CMSG_CHAT_CHANNEL_LIST = 0x37D5, - CMSG_CHAT_CHANNEL_MODERATOR = 0x37DB, - CMSG_CHAT_CHANNEL_OWNER = 0x37D9, - CMSG_CHAT_CHANNEL_PASSWORD = 0x37D7, - CMSG_CHAT_CHANNEL_SET_OWNER = 0x37D8, - CMSG_CHAT_CHANNEL_SILENCE_ALL = 0x37E4, - CMSG_CHAT_CHANNEL_UNBAN = 0x37E2, - CMSG_CHAT_CHANNEL_UNMODERATOR = 0x37DC, - CMSG_CHAT_CHANNEL_UNSILENCE_ALL = 0x37E5, - CMSG_CHAT_JOIN_CHANNEL = 0x37C8, - CMSG_CHAT_LEAVE_CHANNEL = 0x37C9, - CMSG_CHAT_MESSAGE_AFK = 0x37D3, - CMSG_CHAT_MESSAGE_CHANNEL = 0x37CF, - CMSG_CHAT_MESSAGE_DND = 0x37D4, - CMSG_CHAT_MESSAGE_EMOTE = 0x37E8, - CMSG_CHAT_MESSAGE_GUILD = 0x37D1, - CMSG_CHAT_MESSAGE_INSTANCE_CHAT = 0x37EC, - CMSG_CHAT_MESSAGE_OFFICER = 0x37D2, - CMSG_CHAT_MESSAGE_PARTY = 0x37EA, - CMSG_CHAT_MESSAGE_RAID = 0x37EB, - CMSG_CHAT_MESSAGE_RAID_WARNING = 0x37ED, - CMSG_CHAT_MESSAGE_SAY = 0x37E7, - CMSG_CHAT_MESSAGE_WHISPER = 0x37D0, - CMSG_CHAT_MESSAGE_YELL = 0x37E9, - CMSG_CHAT_REGISTER_ADDON_PREFIXES = 0x37CD, - CMSG_CHAT_REPORT_FILTERED = 0x37CC, - CMSG_CHAT_REPORT_IGNORED = 0x37CB, - CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES = 0x37CE, + CMSG_CHAT_ADDON_MESSAGE = 0x3802, + CMSG_CHAT_ADDON_MESSAGE_TARGETED = 0x3803, + CMSG_CHAT_CAN_LOCAL_WHISPER_TARGET_REQUEST = 0x380A, + CMSG_CHAT_CHANNEL_ANNOUNCEMENTS = 0x37F7, + CMSG_CHAT_CHANNEL_BAN = 0x37F5, + CMSG_CHAT_CHANNEL_DECLINE_INVITE = 0x37FA, + CMSG_CHAT_CHANNEL_DISPLAY_LIST = 0x37EA, + CMSG_CHAT_CHANNEL_INVITE = 0x37F3, + CMSG_CHAT_CHANNEL_KICK = 0x37F4, + CMSG_CHAT_CHANNEL_LIST = 0x37E9, + CMSG_CHAT_CHANNEL_MODERATOR = 0x37EF, + CMSG_CHAT_CHANNEL_OWNER = 0x37ED, + CMSG_CHAT_CHANNEL_PASSWORD = 0x37EB, + CMSG_CHAT_CHANNEL_SET_OWNER = 0x37EC, + CMSG_CHAT_CHANNEL_SILENCE_ALL = 0x37F8, + CMSG_CHAT_CHANNEL_UNBAN = 0x37F6, + CMSG_CHAT_CHANNEL_UNMODERATOR = 0x37F0, + CMSG_CHAT_CHANNEL_UNSILENCE_ALL = 0x37F9, + CMSG_CHAT_JOIN_CHANNEL = 0x37DC, + CMSG_CHAT_LEAVE_CHANNEL = 0x37DD, + CMSG_CHAT_LOBBY_MATCHMAKER_MESSAGE_INSTANCE_CHAT = 0x3809, + CMSG_CHAT_LOBBY_MATCHMAKER_MESSAGE_PARTY = 0x3808, + CMSG_CHAT_MESSAGE_AFK = 0x37E7, + CMSG_CHAT_MESSAGE_CHANNEL = 0x37E3, + CMSG_CHAT_MESSAGE_DND = 0x37E8, + CMSG_CHAT_MESSAGE_EMOTE = 0x37FC, + CMSG_CHAT_MESSAGE_GUILD = 0x37E5, + CMSG_CHAT_MESSAGE_INSTANCE_CHAT = 0x3800, + CMSG_CHAT_MESSAGE_OFFICER = 0x37E6, + CMSG_CHAT_MESSAGE_PARTY = 0x37FE, + CMSG_CHAT_MESSAGE_RAID = 0x37FF, + CMSG_CHAT_MESSAGE_RAID_WARNING = 0x3801, + CMSG_CHAT_MESSAGE_SAY = 0x37FB, + CMSG_CHAT_MESSAGE_WHISPER = 0x37E4, + CMSG_CHAT_MESSAGE_YELL = 0x37FD, + CMSG_CHAT_REGISTER_ADDON_PREFIXES = 0x37E1, + CMSG_CHAT_REPORT_FILTERED = 0x37E0, + CMSG_CHAT_REPORT_IGNORED = 0x37DF, + CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES = 0x37E2, CMSG_CHECK_CHARACTER_NAME_AVAILABILITY = 0x3645, CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID = 0x3258, CMSG_CHOICE_RESPONSE = 0x32C1, @@ -331,10 +333,10 @@ enum OpcodeClient : uint16 CMSG_DUEL_RESPONSE = 0x34F1, CMSG_EJECT_PASSENGER = 0x324D, CMSG_EMOTE = 0x3555, - CMSG_ENABLE_NAGLE = 0x376B, + CMSG_ENABLE_NAGLE = 0x377F, CMSG_ENABLE_TAXI_NODE = 0x34B0, CMSG_ENGINE_SURVEY = 0x36E1, - CMSG_ENTER_ENCRYPTED_MODE_ACK = 0x3767, + CMSG_ENTER_ENCRYPTED_MODE_ACK = 0x377B, CMSG_ENUM_CHARACTERS = 0x35E8, CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x36DB, CMSG_FAR_SIGHT = 0x34F7, @@ -446,7 +448,7 @@ enum OpcodeClient : uint16 CMSG_JOIN_RATED_BATTLEGROUND = 0x3178, CMSG_KEEP_ALIVE = 0x367F, CMSG_KEYBOUND_OVERRIDE = 0x322F, - CMSG_LATENCY_REPORT = 0x3771, + CMSG_LATENCY_REPORT = 0x3785, CMSG_LEARN_PVP_TALENTS = 0x356D, CMSG_LEARN_TALENTS = 0x356B, CMSG_LEAVE_GROUP = 0x3649, @@ -468,11 +470,20 @@ enum OpcodeClient : uint16 CMSG_LIVE_REGION_KEY_BINDINGS_COPY = 0x36B8, CMSG_LOADING_SCREEN_NOTIFY = 0x35F8, CMSG_LOAD_SELECTED_TROPHY = 0x3333, + CMSG_LOBBY_MATCHMAKER_ACCEPT_PARTY_INVITE = 0x373E, + CMSG_LOBBY_MATCHMAKER_CREATE_CHARACTER = 0x374C, + CMSG_LOBBY_MATCHMAKER_LEAVE_PARTY = 0x3741, + CMSG_LOBBY_MATCHMAKER_PARTY_INVITE = 0x373D, + CMSG_LOBBY_MATCHMAKER_PARTY_UNINVITE = 0x3740, + CMSG_LOBBY_MATCHMAKER_REJECT_PARTY_INVITE = 0x373F, + CMSG_LOBBY_MATCHMAKER_SET_PARTY_PLAYLIST_ENTRY = 0x3742, + CMSG_LOBBY_MATCHMAKER_SET_PLAYER_READY = 0x3743, CMSG_LOGOUT_CANCEL = 0x34E7, CMSG_LOGOUT_INSTANT = 0x34E8, + CMSG_LOGOUT_LOBBY_MATCHMAKER = 0x3594, CMSG_LOGOUT_REQUEST = 0x34E5, - CMSG_LOG_DISCONNECT = 0x3769, - CMSG_LOG_STREAMING_ERROR = 0x376D, + CMSG_LOG_DISCONNECT = 0x377D, + CMSG_LOG_STREAMING_ERROR = 0x3781, CMSG_LOOT_ITEM = 0x3217, CMSG_LOOT_MONEY = 0x3216, CMSG_LOOT_RELEASE = 0x321B, @@ -630,7 +641,7 @@ enum OpcodeClient : uint16 CMSG_PET_SET_ACTION = 0x3490, CMSG_PET_SPELL_AUTOCAST = 0x3495, CMSG_PET_STOP_ATTACK = 0x3492, - CMSG_PING = 0x3768, + CMSG_PING = 0x377C, CMSG_PLAYER_LOGIN = 0x35EA, CMSG_PUSH_QUEST_TO_PARTY = 0x34A5, CMSG_PVP_LOG_DATA = 0x317B, @@ -648,9 +659,9 @@ enum OpcodeClient : uint16 CMSG_QUERY_PAGE_TEXT = 0x328C, CMSG_QUERY_PETITION = 0x3290, CMSG_QUERY_PET_NAME = 0x328D, - CMSG_QUERY_PLAYER_NAMES = 0x3772, - CMSG_QUERY_PLAYER_NAMES_FOR_COMMUNITY = 0x3770, - CMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID = 0x376F, + CMSG_QUERY_PLAYER_NAMES = 0x3786, + CMSG_QUERY_PLAYER_NAMES_FOR_COMMUNITY = 0x3784, + CMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID = 0x3783, CMSG_QUERY_QUEST_COMPLETION_NPCS = 0x3174, CMSG_QUERY_QUEST_INFO = 0x328B, CMSG_QUERY_QUEST_ITEM_USABILITY = 0x3175, @@ -676,7 +687,7 @@ enum OpcodeClient : uint16 CMSG_QUEST_SESSION_BEGIN_RESPONSE = 0x33D0, CMSG_QUEST_SESSION_REQUEST_START = 0x33CF, CMSG_QUEST_SESSION_REQUEST_STOP = 0x372C, - CMSG_QUEUED_MESSAGES_END = 0x376C, + CMSG_QUEUED_MESSAGES_END = 0x3780, CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x3704, CMSG_QUICK_JOIN_REQUEST_INVITE = 0x3703, CMSG_QUICK_JOIN_REQUEST_INVITE_WITH_CONFIRMATION = 0x3731, @@ -813,6 +824,7 @@ enum OpcodeClient : uint16 CMSG_SORT_BANK_BAGS = 0x335C, CMSG_SORT_REAGENT_BANK_BAGS = 0x335D, CMSG_SPAWN_TRACKING_UPDATE = 0x32AE, + CMSG_SPECTATE_CHANGE = 0x342A, CMSG_SPELL_CLICK = 0x349B, CMSG_SPELL_EMPOWER_RELEASE = 0x3280, CMSG_SPELL_EMPOWER_RESTART = 0x3281, @@ -831,8 +843,8 @@ enum OpcodeClient : uint16 CMSG_SUMMON_RESPONSE = 0x366A, CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x3646, CMSG_SURRENDER_ARENA = 0x3173, - CMSG_SUSPEND_COMMS_ACK = 0x3764, - CMSG_SUSPEND_TOKEN_RESPONSE = 0x376A, + CMSG_SUSPEND_COMMS_ACK = 0x3778, + CMSG_SUSPEND_TOKEN_RESPONSE = 0x377E, CMSG_SWAP_GUILD_BANK_ITEM_WITH_GUILD_BANK_ITEM = 0x34C1, CMSG_SWAP_INV_ITEM = 0x399D, CMSG_SWAP_ITEM = 0x399C, @@ -893,6 +905,7 @@ enum OpcodeClient : uint16 CMSG_WARDEN3_DATA = 0x35EC, CMSG_WHO = 0x3681, CMSG_WHO_IS = 0x3680, + CMSG_WORLD_LOOT_OBJECT_CLICK = 0x342D, CMSG_WORLD_PORT_RESPONSE = 0x35F9, CMSG_WRAP_ITEM = 0x3994, }; @@ -900,45 +913,45 @@ enum OpcodeClient : uint16 enum OpcodeServer : uint16 { SMSG_ABORT_NEW_WORLD = 0x2597, - SMSG_ACCOUNT_COSMETIC_ADDED = 0x2876, - SMSG_ACCOUNT_CRITERIA_UPDATE = 0x285C, - SMSG_ACCOUNT_DATA_TIMES = 0x2705, - SMSG_ACCOUNT_EXPORT_RESPONSE = 0x28B2, + SMSG_ACCOUNT_COSMETIC_ADDED = 0x2878, + SMSG_ACCOUNT_CRITERIA_UPDATE = 0x285E, + SMSG_ACCOUNT_DATA_TIMES = 0x2707, + SMSG_ACCOUNT_EXPORT_RESPONSE = 0x28B5, SMSG_ACCOUNT_MOUNT_REMOVED = 0x25AE, SMSG_ACCOUNT_MOUNT_UPDATE = 0x25AD, - SMSG_ACCOUNT_NOTIFICATIONS_RESPONSE = 0x2875, + SMSG_ACCOUNT_NOTIFICATIONS_RESPONSE = 0x2877, SMSG_ACCOUNT_TOY_UPDATE = 0x25AF, SMSG_ACCOUNT_TRANSMOG_SET_FAVORITES_UPDATE = 0x25B3, SMSG_ACCOUNT_TRANSMOG_UPDATE = 0x25B2, - SMSG_ACHIEVEMENT_DELETED = 0x26E3, + SMSG_ACHIEVEMENT_DELETED = 0x26E5, SMSG_ACHIEVEMENT_EARNED = 0x2640, SMSG_ACTIVATE_ESSENCE_FAILED = 0x3015, SMSG_ACTIVATE_SOULBIND_FAILED = 0x3017, - SMSG_ACTIVATE_TAXI_REPLY = 0x267A, + SMSG_ACTIVATE_TAXI_REPLY = 0x267C, SMSG_ACTIVE_GLYPHS = 0x2C56, - SMSG_ACTIVE_SCHEDULED_WORLD_STATE_INFO = 0x2741, + SMSG_ACTIVE_SCHEDULED_WORLD_STATE_INFO = 0x2743, SMSG_ADDON_LIST_REQUEST = 0x263F, SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x263A, SMSG_ADD_ITEM_PASSIVE = 0x25A9, - SMSG_ADD_LOSS_OF_CONTROL = 0x266E, - SMSG_ADD_RUNE_POWER = 0x26B4, + SMSG_ADD_LOSS_OF_CONTROL = 0x2670, + SMSG_ADD_RUNE_POWER = 0x26B6, SMSG_ADJUST_SPLINE_DURATION = 0x25CF, - SMSG_ADVANCED_COMBAT_LOG = 0x2872, - SMSG_ADVENTURE_JOURNAL_DATA_RESPONSE = 0x286C, + SMSG_ADVANCED_COMBAT_LOG = 0x2874, + SMSG_ADVENTURE_JOURNAL_DATA_RESPONSE = 0x286E, SMSG_AE_LOOT_TARGETS = 0x2615, SMSG_AE_LOOT_TARGET_ACK = 0x2616, - SMSG_AI_REACTION = 0x26B1, - SMSG_ALLIED_RACE_DETAILS = 0x27F0, + SMSG_AI_REACTION = 0x26B3, + SMSG_ALLIED_RACE_DETAILS = 0x27F2, SMSG_ALL_ACCOUNT_CRITERIA = 0x2571, SMSG_ALL_ACHIEVEMENT_DATA = 0x2570, SMSG_ALL_GUILD_ACHIEVEMENTS = 0x29B8, - SMSG_APPLY_MOUNT_EQUIPMENT_RESULT = 0x2849, + SMSG_APPLY_MOUNT_EQUIPMENT_RESULT = 0x284B, SMSG_ARCHAEOLOGY_SURVERY_CAST = 0x2586, SMSG_AREA_POI_UPDATE_RESPONSE = 0x3010, - SMSG_AREA_SPIRIT_HEALER_TIME = 0x273A, + SMSG_AREA_SPIRIT_HEALER_TIME = 0x273C, SMSG_AREA_TRIGGER_DENIED = 0x2903, SMSG_AREA_TRIGGER_FORCE_SET_POSITION_AND_FACING = 0x2900, - SMSG_AREA_TRIGGER_NO_CORPSE = 0x2711, + SMSG_AREA_TRIGGER_NO_CORPSE = 0x2713, SMSG_AREA_TRIGGER_PLAY_SPELL_VISUAL = 0x28FE, SMSG_AREA_TRIGGER_RE_PATH = 0x28FD, SMSG_AREA_TRIGGER_RE_SHAPE = 0x2902, @@ -947,42 +960,42 @@ enum OpcodeServer : uint16 SMSG_ARENA_CLEAR_OPPONENTS = 0x2646, SMSG_ARENA_CROWD_CONTROL_SPELL_RESULT = 0x262F, SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x2645, - SMSG_ARTIFACT_ENDGAME_POWERS_REFUNDED = 0x279C, - SMSG_ARTIFACT_FORGE_ERROR = 0x279A, - SMSG_ARTIFACT_RESPEC_PROMPT = 0x279B, - SMSG_ARTIFACT_XP_GAIN = 0x27E3, + SMSG_ARTIFACT_ENDGAME_POWERS_REFUNDED = 0x279E, + SMSG_ARTIFACT_FORGE_ERROR = 0x279C, + SMSG_ARTIFACT_RESPEC_PROMPT = 0x279D, + SMSG_ARTIFACT_XP_GAIN = 0x27E5, SMSG_ATTACKER_STATE_UPDATE = 0x294E, SMSG_ATTACK_START = 0x2939, SMSG_ATTACK_STOP = 0x293A, SMSG_ATTACK_SWING_ERROR = 0x2948, SMSG_ATTACK_SWING_LANDED_LOG = 0x2949, - SMSG_AUCTIONABLE_TOKEN_AUCTION_SOLD = 0x27CC, - SMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE_RESPONSE = 0x27CB, - SMSG_AUCTIONABLE_TOKEN_SELL_CONFIRM_REQUIRED = 0x27CA, - SMSG_AUCTION_CLOSED_NOTIFICATION = 0x26EE, - SMSG_AUCTION_COMMAND_RESULT = 0x26EB, - SMSG_AUCTION_DISABLE_NEW_POSTINGS = 0x2892, - SMSG_AUCTION_FAVORITE_LIST = 0x2863, - SMSG_AUCTION_GET_COMMODITY_QUOTE_RESULT = 0x285A, - SMSG_AUCTION_HELLO_RESPONSE = 0x26E9, - SMSG_AUCTION_LIST_BIDDED_ITEMS_RESULT = 0x2859, - SMSG_AUCTION_LIST_BUCKETS_RESULT = 0x2856, - SMSG_AUCTION_LIST_ITEMS_RESULT = 0x2857, - SMSG_AUCTION_LIST_OWNED_ITEMS_RESULT = 0x2858, - SMSG_AUCTION_OUTBID_NOTIFICATION = 0x26ED, - SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x26EF, - SMSG_AUCTION_REPLICATE_RESPONSE = 0x26EA, - SMSG_AUCTION_WON_NOTIFICATION = 0x26EC, + SMSG_AUCTIONABLE_TOKEN_AUCTION_SOLD = 0x27CE, + SMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE_RESPONSE = 0x27CD, + SMSG_AUCTIONABLE_TOKEN_SELL_CONFIRM_REQUIRED = 0x27CC, + SMSG_AUCTION_CLOSED_NOTIFICATION = 0x26F0, + SMSG_AUCTION_COMMAND_RESULT = 0x26ED, + SMSG_AUCTION_DISABLE_NEW_POSTINGS = 0x2895, + SMSG_AUCTION_FAVORITE_LIST = 0x2865, + SMSG_AUCTION_GET_COMMODITY_QUOTE_RESULT = 0x285C, + SMSG_AUCTION_HELLO_RESPONSE = 0x26EB, + SMSG_AUCTION_LIST_BIDDED_ITEMS_RESULT = 0x285B, + SMSG_AUCTION_LIST_BUCKETS_RESULT = 0x2858, + SMSG_AUCTION_LIST_ITEMS_RESULT = 0x2859, + SMSG_AUCTION_LIST_OWNED_ITEMS_RESULT = 0x285A, + SMSG_AUCTION_OUTBID_NOTIFICATION = 0x26EF, + SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x26F1, + SMSG_AUCTION_REPLICATE_RESPONSE = 0x26EC, + SMSG_AUCTION_WON_NOTIFICATION = 0x26EE, SMSG_AURA_POINTS_DEPLETED = 0x2C22, SMSG_AURA_UPDATE = 0x2C21, SMSG_AUTH_CHALLENGE = 0x3048, SMSG_AUTH_FAILED = 0x256C, SMSG_AUTH_RESPONSE = 0x256D, SMSG_AVAILABLE_HOTFIXES = 0x290F, - SMSG_BACKPACK_DEFAULT_SIZE_CHANGED = 0x2897, + SMSG_BACKPACK_DEFAULT_SIZE_CHANGED = 0x289A, SMSG_BAG_CLEANUP_FINISHED = 0x2DA7, - SMSG_BARBER_SHOP_RESULT = 0x26B9, - SMSG_BATCH_PRESENCE_SUBSCRIPTION = 0x283A, + SMSG_BARBER_SHOP_RESULT = 0x26BB, + SMSG_BATCH_PRESENCE_SUBSCRIPTION = 0x283C, SMSG_BATTLEFIELD_LIST = 0x2927, SMSG_BATTLEFIELD_PORT_DENIED = 0x292D, SMSG_BATTLEFIELD_STATUS_ACTIVE = 0x2923, @@ -998,31 +1011,31 @@ enum OpcodeServer : uint16 SMSG_BATTLEGROUND_PLAYER_LEFT = 0x292C, SMSG_BATTLEGROUND_PLAYER_POSITIONS = 0x2928, SMSG_BATTLEGROUND_POINTS = 0x294A, - SMSG_BATTLENET_CHALLENGE_ABORT = 0x2784, - SMSG_BATTLENET_CHALLENGE_START = 0x2783, - SMSG_BATTLENET_NOTIFICATION = 0x27FC, - SMSG_BATTLENET_RESPONSE = 0x27FB, - SMSG_BATTLE_NET_CONNECTION_STATUS = 0x27FD, - SMSG_BATTLE_PAY_ACK_FAILED = 0x277E, - SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x2773, - SMSG_BATTLE_PAY_COLLECTION_ITEM_DELIVERED = 0x2774, - SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x277D, - SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x2771, - SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x2770, - SMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS_RESPONSE = 0x287B, - SMSG_BATTLE_PAY_DISTRIBUTION_UNREVOKED = 0x276E, - SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x276F, - SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x276D, - SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x276B, - SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x276C, - SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x2772, - SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x277C, - SMSG_BATTLE_PAY_START_CHECKOUT = 0x2818, - SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x277A, - SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x2779, - SMSG_BATTLE_PAY_VALIDATE_PURCHASE_RESPONSE = 0x280C, + SMSG_BATTLENET_CHALLENGE_ABORT = 0x2786, + SMSG_BATTLENET_CHALLENGE_START = 0x2785, + SMSG_BATTLENET_NOTIFICATION = 0x27FE, + SMSG_BATTLENET_RESPONSE = 0x27FD, + SMSG_BATTLE_NET_CONNECTION_STATUS = 0x27FF, + SMSG_BATTLE_PAY_ACK_FAILED = 0x2780, + SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x2775, + SMSG_BATTLE_PAY_COLLECTION_ITEM_DELIVERED = 0x2776, + SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x277F, + SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x2773, + SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x2772, + SMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS_RESPONSE = 0x287D, + SMSG_BATTLE_PAY_DISTRIBUTION_UNREVOKED = 0x2770, + SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x2771, + SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x276F, + SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x276D, + SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x276E, + SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x2774, + SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x277E, + SMSG_BATTLE_PAY_START_CHECKOUT = 0x281A, + SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x277C, + SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x277B, + SMSG_BATTLE_PAY_VALIDATE_PURCHASE_RESPONSE = 0x280E, SMSG_BATTLE_PETS_HEALED = 0x25F1, - SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x2675, + SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x2677, SMSG_BATTLE_PET_DELETED = 0x25EE, SMSG_BATTLE_PET_ERROR = 0x2635, SMSG_BATTLE_PET_JOURNAL = 0x25ED, @@ -1041,34 +1054,34 @@ enum OpcodeServer : uint16 SMSG_BOSS_KILL = 0x294D, SMSG_BREAK_TARGET = 0x2938, SMSG_BROADCAST_ACHIEVEMENT = 0x2BBC, - SMSG_BROADCAST_SUMMON_CAST = 0x283C, - SMSG_BROADCAST_SUMMON_RESPONSE = 0x283D, - SMSG_BUY_FAILED = 0x26C2, - SMSG_BUY_SUCCEEDED = 0x26C1, + SMSG_BROADCAST_SUMMON_CAST = 0x283E, + SMSG_BROADCAST_SUMMON_RESPONSE = 0x283F, + SMSG_BUY_FAILED = 0x26C4, + SMSG_BUY_SUCCEEDED = 0x26C3, SMSG_CACHE_INFO = 0x291D, SMSG_CACHE_VERSION = 0x291C, - SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x269A, - SMSG_CALENDAR_COMMAND_RESULT = 0x269B, - SMSG_CALENDAR_COMMUNITY_INVITE = 0x268A, - SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x2692, - SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x2693, - SMSG_CALENDAR_INVITE_ADDED = 0x268B, - SMSG_CALENDAR_INVITE_ALERT = 0x268F, - SMSG_CALENDAR_INVITE_NOTES = 0x2694, - SMSG_CALENDAR_INVITE_NOTES_ALERT = 0x2695, - SMSG_CALENDAR_INVITE_REMOVED = 0x268C, - SMSG_CALENDAR_INVITE_REMOVED_ALERT = 0x2691, - SMSG_CALENDAR_INVITE_STATUS = 0x268D, - SMSG_CALENDAR_INVITE_STATUS_ALERT = 0x2690, - SMSG_CALENDAR_MODERATOR_STATUS = 0x268E, - SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x2696, - SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x2697, - SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x2698, - SMSG_CALENDAR_SEND_CALENDAR = 0x2688, - SMSG_CALENDAR_SEND_EVENT = 0x2689, - SMSG_CALENDAR_SEND_NUM_PENDING = 0x2699, - SMSG_CAMERA_EFFECT = 0x2720, - SMSG_CANCEL_AUTO_REPEAT = 0x26D9, + SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x269C, + SMSG_CALENDAR_COMMAND_RESULT = 0x269D, + SMSG_CALENDAR_COMMUNITY_INVITE = 0x268C, + SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x2694, + SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x2695, + SMSG_CALENDAR_INVITE_ADDED = 0x268D, + SMSG_CALENDAR_INVITE_ALERT = 0x2691, + SMSG_CALENDAR_INVITE_NOTES = 0x2696, + SMSG_CALENDAR_INVITE_NOTES_ALERT = 0x2697, + SMSG_CALENDAR_INVITE_REMOVED = 0x268E, + SMSG_CALENDAR_INVITE_REMOVED_ALERT = 0x2693, + SMSG_CALENDAR_INVITE_STATUS = 0x268F, + SMSG_CALENDAR_INVITE_STATUS_ALERT = 0x2692, + SMSG_CALENDAR_MODERATOR_STATUS = 0x2690, + SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x2698, + SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x2699, + SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x269A, + SMSG_CALENDAR_SEND_CALENDAR = 0x268A, + SMSG_CALENDAR_SEND_EVENT = 0x268B, + SMSG_CALENDAR_SEND_NUM_PENDING = 0x269B, + SMSG_CAMERA_EFFECT = 0x2722, + SMSG_CANCEL_AUTO_REPEAT = 0x26DB, SMSG_CANCEL_COMBAT = 0x2947, SMSG_CANCEL_ORPHAN_SPELL_VISUAL = 0x2C48, SMSG_CANCEL_PING_PIN = 0x25A2, @@ -1077,7 +1090,7 @@ enum OpcodeServer : uint16 SMSG_CANCEL_SPELL_VISUAL = 0x2C46, SMSG_CANCEL_SPELL_VISUAL_KIT = 0x2C4A, SMSG_CAN_DUEL_RESULT = 0x2943, - SMSG_CAN_REDEEM_TOKEN_FOR_BALANCE_RESPONSE = 0x280B, + SMSG_CAN_REDEEM_TOKEN_FOR_BALANCE_RESPONSE = 0x280D, SMSG_CAPTURE_POINT_REMOVED = 0x292A, SMSG_CAST_FAILED = 0x2C59, SMSG_CHAIN_MISSILE_BOUNCE = 0x25C7, @@ -1087,22 +1100,22 @@ enum OpcodeServer : uint16 SMSG_CHALLENGE_MODE_START = 0x2605, SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT = 0x2606, SMSG_CHANGE_PLAYER_DIFFICULTY_RESULT = 0x3004, - SMSG_CHANGE_REALM_TICKET_RESPONSE = 0x27FE, + SMSG_CHANGE_REALM_TICKET_RESPONSE = 0x2800, SMSG_CHANNEL_LIST = 0x2BC4, SMSG_CHANNEL_NOTIFY = 0x2BC1, SMSG_CHANNEL_NOTIFY_JOINED = 0x2BC2, SMSG_CHANNEL_NOTIFY_LEFT = 0x2BC3, - SMSG_CHARACTER_CHECK_UPGRADE_RESULT = 0x27B7, - SMSG_CHARACTER_LOGIN_FAILED = 0x2700, - SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x2782, - SMSG_CHARACTER_RENAME_RESULT = 0x275D, - SMSG_CHARACTER_UPGRADE_ABORTED = 0x27B6, - SMSG_CHARACTER_UPGRADE_COMPLETE = 0x27B5, - SMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_RESULT = 0x27B8, - SMSG_CHARACTER_UPGRADE_STARTED = 0x27B4, - SMSG_CHAR_CUSTOMIZE_FAILURE = 0x26DD, - SMSG_CHAR_CUSTOMIZE_SUCCESS = 0x26DE, - SMSG_CHAR_FACTION_CHANGE_RESULT = 0x27A1, + SMSG_CHARACTER_CHECK_UPGRADE_RESULT = 0x27B9, + SMSG_CHARACTER_LOGIN_FAILED = 0x2702, + SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x2784, + SMSG_CHARACTER_RENAME_RESULT = 0x275F, + SMSG_CHARACTER_UPGRADE_ABORTED = 0x27B8, + SMSG_CHARACTER_UPGRADE_COMPLETE = 0x27B7, + SMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_RESULT = 0x27BA, + SMSG_CHARACTER_UPGRADE_STARTED = 0x27B6, + SMSG_CHAR_CUSTOMIZE_FAILURE = 0x26DF, + SMSG_CHAR_CUSTOMIZE_SUCCESS = 0x26E0, + SMSG_CHAR_FACTION_CHANGE_RESULT = 0x27A3, SMSG_CHAT = 0x2BAD, SMSG_CHAT_AUTO_RESPONDED = 0x2BB8, SMSG_CHAT_CAN_LOCAL_WHISPER_TARGET_RESPONSE = 0x2BCB, @@ -1120,84 +1133,84 @@ enum OpcodeServer : uint16 SMSG_CHECK_ABANDON_NPE = 0x3018, SMSG_CHECK_CHARACTER_NAME_AVAILABILITY_RESULT = 0x2584, SMSG_CHECK_WARGAME_ENTRY = 0x258F, - SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS = 0x2866, - SMSG_CLAIM_RAF_REWARD_RESPONSE = 0x284D, + SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS = 0x2868, + SMSG_CLAIM_RAF_REWARD_RESPONSE = 0x284F, SMSG_CLEAR_ALL_SPELL_CHARGES = 0x2C26, SMSG_CLEAR_BOSS_EMOTES = 0x25BA, - SMSG_CLEAR_COOLDOWN = 0x26B6, + SMSG_CLEAR_COOLDOWN = 0x26B8, SMSG_CLEAR_COOLDOWNS = 0x2C25, SMSG_CLEAR_RESURRECT = 0x257F, SMSG_CLEAR_SPELL_CHARGES = 0x2C27, SMSG_CLEAR_TARGET = 0x2944, SMSG_CLEAR_TREASURE_PICKER_CACHE = 0x2AA1, - SMSG_CLOSE_ARTIFACT_FORGE = 0x2799, - SMSG_CLUB_FINDER_ERROR_MESSAGE = 0x2845, - SMSG_CLUB_FINDER_GET_CLUB_POSTING_IDS_RESPONSE = 0x2848, - SMSG_CLUB_FINDER_LOOKUP_CLUB_POSTINGS_LIST = 0x2846, - SMSG_CLUB_FINDER_RESPONSE_CHARACTER_APPLICATION_LIST = 0x2843, - SMSG_CLUB_FINDER_RESPONSE_POST_RECRUITMENT_MESSAGE = 0x2847, - SMSG_CLUB_FINDER_UPDATE_APPLICATIONS = 0x2844, - SMSG_CLUB_FINDER_WHISPER_APPLICANT_RESPONSE = 0x2889, + SMSG_CLOSE_ARTIFACT_FORGE = 0x279B, + SMSG_CLUB_FINDER_ERROR_MESSAGE = 0x2847, + SMSG_CLUB_FINDER_GET_CLUB_POSTING_IDS_RESPONSE = 0x284A, + SMSG_CLUB_FINDER_LOOKUP_CLUB_POSTINGS_LIST = 0x2848, + SMSG_CLUB_FINDER_RESPONSE_CHARACTER_APPLICATION_LIST = 0x2845, + SMSG_CLUB_FINDER_RESPONSE_POST_RECRUITMENT_MESSAGE = 0x2849, + SMSG_CLUB_FINDER_UPDATE_APPLICATIONS = 0x2846, + SMSG_CLUB_FINDER_WHISPER_APPLICANT_RESPONSE = 0x288B, SMSG_COIN_REMOVED = 0x2614, SMSG_COMBAT_EVENT_FAILED = 0x293B, - SMSG_COMMENTATOR_MAP_INFO = 0x2702, - SMSG_COMMENTATOR_PLAYER_INFO = 0x2703, - SMSG_COMMENTATOR_STATE_CHANGED = 0x2701, - SMSG_COMMERCE_TOKEN_GET_COUNT_RESPONSE = 0x27C7, - SMSG_COMMERCE_TOKEN_GET_LOG_RESPONSE = 0x27D3, - SMSG_COMMERCE_TOKEN_GET_MARKET_PRICE_RESPONSE = 0x27C9, - SMSG_COMMERCE_TOKEN_UPDATE = 0x27C8, - SMSG_COMPLAINT_RESULT = 0x26A8, - SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x2792, - SMSG_CONFIRM_PARTY_INVITE = 0x280A, + SMSG_COMMENTATOR_MAP_INFO = 0x2704, + SMSG_COMMENTATOR_PLAYER_INFO = 0x2705, + SMSG_COMMENTATOR_STATE_CHANGED = 0x2703, + SMSG_COMMERCE_TOKEN_GET_COUNT_RESPONSE = 0x27C9, + SMSG_COMMERCE_TOKEN_GET_LOG_RESPONSE = 0x27D5, + SMSG_COMMERCE_TOKEN_GET_MARKET_PRICE_RESPONSE = 0x27CB, + SMSG_COMMERCE_TOKEN_UPDATE = 0x27CA, + SMSG_COMPLAINT_RESULT = 0x26AA, + SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x2794, + SMSG_CONFIRM_PARTY_INVITE = 0x280C, SMSG_CONNECT_TO = 0x304D, - SMSG_CONQUEST_FORMULA_CONSTANTS = 0x277F, + SMSG_CONQUEST_FORMULA_CONSTANTS = 0x2781, SMSG_CONSOLE_WRITE = 0x2632, - SMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE_RESPONSE = 0x27CF, - SMSG_CONSUMABLE_TOKEN_BUY_CHOICE_REQUIRED = 0x27CE, - SMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY_RESPONSE = 0x27CD, - SMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRM_REQUIRED = 0x27D1, - SMSG_CONSUMABLE_TOKEN_REDEEM_RESPONSE = 0x27D2, - SMSG_CONTACT_LIST = 0x2780, - SMSG_CONTRIBUTION_LAST_UPDATE_RESPONSE = 0x2811, + SMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE_RESPONSE = 0x27D1, + SMSG_CONSUMABLE_TOKEN_BUY_CHOICE_REQUIRED = 0x27D0, + SMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY_RESPONSE = 0x27CF, + SMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRM_REQUIRED = 0x27D3, + SMSG_CONSUMABLE_TOKEN_REDEEM_RESPONSE = 0x27D4, + SMSG_CONTACT_LIST = 0x2782, + SMSG_CONTRIBUTION_LAST_UPDATE_RESPONSE = 0x2813, SMSG_CONTROL_UPDATE = 0x2644, - SMSG_CONVERT_ITEMS_TO_CURRENCY_VALUE = 0x286F, - SMSG_COOLDOWN_CHEAT = 0x2733, - SMSG_COOLDOWN_EVENT = 0x26B5, + SMSG_CONVERT_ITEMS_TO_CURRENCY_VALUE = 0x2871, + SMSG_COOLDOWN_CHEAT = 0x2735, + SMSG_COOLDOWN_EVENT = 0x26B7, SMSG_CORPSE_LOCATION = 0x264C, - SMSG_CORPSE_RECLAIM_DELAY = 0x2744, - SMSG_CORPSE_TRANSPORT_QUERY = 0x270D, + SMSG_CORPSE_RECLAIM_DELAY = 0x2746, + SMSG_CORPSE_TRANSPORT_QUERY = 0x270F, SMSG_COVENANT_CALLINGS_AVAILABILITY_RESPONSE = 0x2AA3, - SMSG_COVENANT_PREVIEW_OPEN_NPC = 0x27F3, - SMSG_COVENANT_RENOWN_SEND_CATCHUP_STATE = 0x2870, - SMSG_CRAFTING_HOUSE_HELLO_RESPONSE = 0x28A5, - SMSG_CRAFTING_ORDER_CANCEL_RESULT = 0x28A1, - SMSG_CRAFTING_ORDER_CLAIM_RESULT = 0x289D, - SMSG_CRAFTING_ORDER_CRAFT_RESULT = 0x289F, - SMSG_CRAFTING_ORDER_CREATE_RESULT = 0x289B, - SMSG_CRAFTING_ORDER_FULFILL_RESULT = 0x28A0, - SMSG_CRAFTING_ORDER_LIST_ORDERS_RESPONSE = 0x289C, - SMSG_CRAFTING_ORDER_REJECT_RESULT = 0x28A3, - SMSG_CRAFTING_ORDER_RELEASE_RESULT = 0x289E, - SMSG_CRAFTING_ORDER_UPDATE_STATE = 0x28A6, - SMSG_CRAFT_ENCHANT_RESULT = 0x28A4, - SMSG_CREATE_CHAR = 0x26FC, - SMSG_CREATE_SHIPMENT_RESPONSE = 0x2791, - SMSG_CREATOR_VISUALS_OVERRIDE = 0x28A9, - SMSG_CRITERIA_DELETED = 0x26E2, - SMSG_CRITERIA_UPDATE = 0x26DC, - SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26BD, + SMSG_COVENANT_PREVIEW_OPEN_NPC = 0x27F5, + SMSG_COVENANT_RENOWN_SEND_CATCHUP_STATE = 0x2872, + SMSG_CRAFTING_HOUSE_HELLO_RESPONSE = 0x28A8, + SMSG_CRAFTING_ORDER_CANCEL_RESULT = 0x28A4, + SMSG_CRAFTING_ORDER_CLAIM_RESULT = 0x28A0, + SMSG_CRAFTING_ORDER_CRAFT_RESULT = 0x28A2, + SMSG_CRAFTING_ORDER_CREATE_RESULT = 0x289E, + SMSG_CRAFTING_ORDER_FULFILL_RESULT = 0x28A3, + SMSG_CRAFTING_ORDER_LIST_ORDERS_RESPONSE = 0x289F, + SMSG_CRAFTING_ORDER_REJECT_RESULT = 0x28A6, + SMSG_CRAFTING_ORDER_RELEASE_RESULT = 0x28A1, + SMSG_CRAFTING_ORDER_UPDATE_STATE = 0x28A9, + SMSG_CRAFT_ENCHANT_RESULT = 0x28A7, + SMSG_CREATE_CHAR = 0x26FE, + SMSG_CREATE_SHIPMENT_RESPONSE = 0x2793, + SMSG_CREATOR_VISUALS_OVERRIDE = 0x28AC, + SMSG_CRITERIA_DELETED = 0x26E4, + SMSG_CRITERIA_UPDATE = 0x26DE, + SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26BF, SMSG_CUSTOM_LOAD_SCREEN = 0x25CA, SMSG_DAILY_QUESTS_RESET = 0x2A80, SMSG_DAMAGE_CALC_LOG = 0x2C65, SMSG_DB_REPLY = 0x290E, - SMSG_DEATH_RELEASE_LOC = 0x26CF, - SMSG_DEBUG_MENU_MANAGER_FULL_UPDATE = 0x2652, + SMSG_DEATH_RELEASE_LOC = 0x26D1, + SMSG_DEBUG_MENU_MANAGER_FULL_UPDATE = 0x2654, SMSG_DEFENSE_MESSAGE = 0x2BB6, - SMSG_DELETE_CHAR = 0x26FD, + SMSG_DELETE_CHAR = 0x26FF, SMSG_DELETE_EXPIRED_MISSIONS_RESULT = 0x2980, - SMSG_DESTROY_ARENA_UNIT = 0x273C, - SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x26F4, + SMSG_DESTROY_ARENA_UNIT = 0x273E, + SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x26F6, SMSG_DIFFERENT_INSTANCE_FROM_PARTY = 0x2589, SMSG_DISENCHANT_CREDIT = 0x25A6, SMSG_DISMOUNT_RESULT = 0x257C, @@ -1206,9 +1219,9 @@ enum OpcodeServer : uint16 SMSG_DISPLAY_PLAYER_CHOICE = 0x2FFC, SMSG_DISPLAY_PROMOTION = 0x2649, SMSG_DISPLAY_QUEST_POPUP = 0x2A9E, - SMSG_DISPLAY_SOULBIND_UPDATE_MESSAGE = 0x2874, + SMSG_DISPLAY_SOULBIND_UPDATE_MESSAGE = 0x2876, SMSG_DISPLAY_TOAST = 0x2621, - SMSG_DISPLAY_WORLD_TEXT = 0x27E4, + SMSG_DISPLAY_WORLD_TEXT = 0x27E6, SMSG_DISPLAY_WORLD_TEXT_ON_TARGET = 0x2C64, SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x25DF, SMSG_DROP_NEW_CONNECTION = 0x304C, @@ -1219,52 +1232,52 @@ enum OpcodeServer : uint16 SMSG_DUEL_OUT_OF_BOUNDS = 0x293E, SMSG_DUEL_REQUESTED = 0x293C, SMSG_DUEL_WINNER = 0x2942, - SMSG_DURABILITY_DAMAGE_DEATH = 0x273F, - SMSG_EMOTE = 0x27BE, - SMSG_ENABLE_BARBER_SHOP = 0x26B8, - SMSG_ENCHANTMENT_LOG = 0x270E, - SMSG_ENCOUNTER_END = 0x2778, - SMSG_ENCOUNTER_START = 0x2777, - SMSG_END_LIGHTNING_STORM = 0x26A5, - SMSG_ENSURE_WORLD_LOADED = 0x2883, + SMSG_DURABILITY_DAMAGE_DEATH = 0x2741, + SMSG_EMOTE = 0x27C0, + SMSG_ENABLE_BARBER_SHOP = 0x26BA, + SMSG_ENCHANTMENT_LOG = 0x2710, + SMSG_ENCOUNTER_END = 0x277A, + SMSG_ENCOUNTER_START = 0x2779, + SMSG_END_LIGHTNING_STORM = 0x26A7, + SMSG_ENSURE_WORLD_LOADED = 0x2885, SMSG_ENTER_ENCRYPTED_MODE = 0x3049, SMSG_ENUM_CHARACTERS_RESULT = 0x2583, - SMSG_ENUM_VAS_PURCHASE_STATES_RESPONSE = 0x27E9, + SMSG_ENUM_VAS_PURCHASE_STATES_RESPONSE = 0x27EB, SMSG_ENVIRONMENTAL_DAMAGE_LOG = 0x2C1E, - SMSG_EQUIPMENT_SET_ID = 0x26AE, + SMSG_EQUIPMENT_SET_ID = 0x26B0, SMSG_EXPECTED_SPAM_RECORDS = 0x2BB1, - SMSG_EXPLORATION_EXPERIENCE = 0x2759, - SMSG_EXTERNAL_TRANSACTION_ID_GENERATED = 0x286D, - SMSG_FACTION_BONUS_INFO = 0x271F, + SMSG_EXPLORATION_EXPERIENCE = 0x275B, + SMSG_EXTERNAL_TRANSACTION_ID_GENERATED = 0x286F, + SMSG_FACTION_BONUS_INFO = 0x2721, SMSG_FAILED_PLAYER_CONDITION = 0x2FFA, - SMSG_FAILED_QUEST_TURN_IN = 0x2807, + SMSG_FAILED_QUEST_TURN_IN = 0x2809, SMSG_FEATURE_SYSTEM_STATUS = 0x25BE, SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN = 0x25BF, - SMSG_FEIGN_DEATH_RESISTED = 0x273E, - SMSG_FISH_ESCAPED = 0x26CC, - SMSG_FISH_NOT_HOOKED = 0x26CB, + SMSG_FEIGN_DEATH_RESISTED = 0x2740, + SMSG_FISH_ESCAPED = 0x26CE, + SMSG_FISH_NOT_HOOKED = 0x26CD, SMSG_FLIGHT_SPLINE_SYNC = 0x2E2B, SMSG_FLUSH_COMBAT_LOG_FILE = 0x2C20, - SMSG_FORCED_DEATH_UPDATE = 0x26D0, - SMSG_FORCE_ANIM = 0x274B, - SMSG_FORCE_ANIMATIONS = 0x274C, + SMSG_FORCED_DEATH_UPDATE = 0x26D2, + SMSG_FORCE_ANIM = 0x274D, + SMSG_FORCE_ANIMATIONS = 0x274E, SMSG_FORCE_OBJECT_RELINK = 0x2648, SMSG_FORCE_RANDOM_TRANSMOG_TOAST = 0x25B1, - SMSG_FRIEND_STATUS = 0x2781, - SMSG_GAIN_MAW_POWER = 0x27D8, + SMSG_FRIEND_STATUS = 0x2783, + SMSG_GAIN_MAW_POWER = 0x27DA, SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT = 0x25C2, - SMSG_GAME_OBJECT_BASE = 0x281E, - SMSG_GAME_OBJECT_CLOSE_INTERACTION = 0x2887, + SMSG_GAME_OBJECT_BASE = 0x2820, + SMSG_GAME_OBJECT_CLOSE_INTERACTION = 0x2889, SMSG_GAME_OBJECT_CUSTOM_ANIM = 0x25C3, SMSG_GAME_OBJECT_DESPAWN = 0x25C4, - SMSG_GAME_OBJECT_INTERACTION = 0x2886, + SMSG_GAME_OBJECT_INTERACTION = 0x2888, SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL = 0x2C4D, SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT = 0x2C4C, - SMSG_GAME_OBJECT_RESET_STATE = 0x2719, - SMSG_GAME_OBJECT_SET_STATE_LOCAL = 0x27FA, - SMSG_GAME_SPEED_SET = 0x267E, - SMSG_GAME_TIME_SET = 0x2707, - SMSG_GAME_TIME_UPDATE = 0x2706, + SMSG_GAME_OBJECT_RESET_STATE = 0x271B, + SMSG_GAME_OBJECT_SET_STATE_LOCAL = 0x27FC, + SMSG_GAME_SPEED_SET = 0x2680, + SMSG_GAME_TIME_SET = 0x2709, + SMSG_GAME_TIME_UPDATE = 0x2708, SMSG_GARRISON_ACTIVATE_MISSION_BONUS_ABILITY = 0x2982, SMSG_GARRISON_ADD_EVENT = 0x29A6, SMSG_GARRISON_ADD_FOLLOWER_RESULT = 0x2974, @@ -1336,36 +1349,36 @@ enum OpcodeServer : uint16 SMSG_GARRISON_UPGRADE_RESULT = 0x296B, SMSG_GARRISON_USE_RECALL_PORTAL_RESULT = 0x297D, SMSG_GENERATE_RANDOM_CHARACTER_NAME_RESULT = 0x2585, - SMSG_GENERATE_SSO_TOKEN_RESPONSE = 0x2812, - SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x275B, + SMSG_GENERATE_SSO_TOKEN_RESPONSE = 0x2814, + SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x275D, SMSG_GET_GARRISON_INFO_RESULT = 0x295E, - SMSG_GET_LANDING_PAGE_SHIPMENTS_RESPONSE = 0x2794, - SMSG_GET_REALM_HIDDEN_RESULT = 0x28B7, - SMSG_GET_REMAINING_GAME_TIME_RESPONSE = 0x27D0, - SMSG_GET_SELECTED_TROPHY_ID_RESPONSE = 0x27BC, - SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x2793, - SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x278F, - SMSG_GET_TROPHY_LIST_RESPONSE = 0x27BB, - SMSG_GET_VAS_ACCOUNT_CHARACTER_LIST_RESULT = 0x27E5, - SMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST_RESULT = 0x27E6, + SMSG_GET_LANDING_PAGE_SHIPMENTS_RESPONSE = 0x2796, + SMSG_GET_REALM_HIDDEN_RESULT = 0x28BA, + SMSG_GET_REMAINING_GAME_TIME_RESPONSE = 0x27D2, + SMSG_GET_SELECTED_TROPHY_ID_RESPONSE = 0x27BE, + SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x2795, + SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x2791, + SMSG_GET_TROPHY_LIST_RESPONSE = 0x27BD, + SMSG_GET_VAS_ACCOUNT_CHARACTER_LIST_RESULT = 0x27E7, + SMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST_RESULT = 0x27E8, SMSG_GM_PLAYER_INFO = 0x3005, SMSG_GM_REQUEST_PLAYER_INFO = 0x2FFB, - SMSG_GM_TICKET_CASE_STATUS = 0x26A0, - SMSG_GM_TICKET_SYSTEM_STATUS = 0x269F, - SMSG_GOD_MODE = 0x26F7, + SMSG_GM_TICKET_CASE_STATUS = 0x26A2, + SMSG_GM_TICKET_SYSTEM_STATUS = 0x26A1, + SMSG_GOD_MODE = 0x26F9, SMSG_GOSSIP_COMPLETE = 0x2A97, SMSG_GOSSIP_MESSAGE = 0x2A98, SMSG_GOSSIP_OPTION_NPC_INTERACTION = 0x2AA7, - SMSG_GOSSIP_POI = 0x278C, + SMSG_GOSSIP_POI = 0x278E, SMSG_GOSSIP_QUEST_UPDATE = 0x2A99, SMSG_GOSSIP_REFRESH_OPTIONS = 0x2AA6, SMSG_GROUP_ACTION_THROTTLED = 0x258D, - SMSG_GROUP_AUTO_KICK = 0x2789, - SMSG_GROUP_DECLINE = 0x2785, - SMSG_GROUP_DESTROYED = 0x2788, + SMSG_GROUP_AUTO_KICK = 0x278B, + SMSG_GROUP_DECLINE = 0x2787, + SMSG_GROUP_DESTROYED = 0x278A, SMSG_GROUP_NEW_LEADER = 0x262A, - SMSG_GROUP_REQUEST_DECLINE = 0x2786, - SMSG_GROUP_UNINVITE = 0x2787, + SMSG_GROUP_REQUEST_DECLINE = 0x2788, + SMSG_GROUP_UNINVITE = 0x2789, SMSG_GUILD_ACHIEVEMENT_DELETED = 0x29C5, SMSG_GUILD_ACHIEVEMENT_EARNED = 0x29C4, SMSG_GUILD_ACHIEVEMENT_MEMBERS = 0x29C7, @@ -1419,59 +1432,59 @@ enum OpcodeServer : uint16 SMSG_GUILD_ROSTER = 0x29BB, SMSG_GUILD_ROSTER_UPDATE = 0x29BC, SMSG_GUILD_SEND_RANK_CHANGE = 0x29B9, - SMSG_HEALTH_UPDATE = 0x26CD, - SMSG_HIGHEST_THREAT_UPDATE = 0x26D5, + SMSG_HEALTH_UPDATE = 0x26CF, + SMSG_HIGHEST_THREAT_UPDATE = 0x26D7, SMSG_HOTFIX_CONNECT = 0x2911, SMSG_HOTFIX_MESSAGE = 0x2910, - SMSG_INITIALIZE_FACTIONS = 0x271E, + SMSG_INITIALIZE_FACTIONS = 0x2720, SMSG_INITIAL_SETUP = 0x2580, - SMSG_INIT_WORLD_STATES = 0x2740, + SMSG_INIT_WORLD_STATES = 0x2742, SMSG_INSPECT_RESULT = 0x262E, - SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x27A7, - SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x27A6, - SMSG_INSTANCE_ENCOUNTER_END = 0x27AF, - SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x27A5, - SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x27B1, - SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x27B0, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x27AA, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x27A9, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x27AE, - SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x27B2, - SMSG_INSTANCE_ENCOUNTER_START = 0x27AB, - SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x27A8, - SMSG_INSTANCE_ENCOUNTER_UPDATE_ALLOW_RELEASE_IN_PROGRESS = 0x27AD, - SMSG_INSTANCE_ENCOUNTER_UPDATE_SUPPRESS_RELEASE = 0x27AC, - SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x26F5, + SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x27A9, + SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x27A8, + SMSG_INSTANCE_ENCOUNTER_END = 0x27B1, + SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x27A7, + SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x27B3, + SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x27B2, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x27AC, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x27AB, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x27B0, + SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x27B4, + SMSG_INSTANCE_ENCOUNTER_START = 0x27AD, + SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x27AA, + SMSG_INSTANCE_ENCOUNTER_UPDATE_ALLOW_RELEASE_IN_PROGRESS = 0x27AF, + SMSG_INSTANCE_ENCOUNTER_UPDATE_SUPPRESS_RELEASE = 0x27AE, + SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x26F7, SMSG_INSTANCE_INFO = 0x2631, - SMSG_INSTANCE_RESET = 0x2683, - SMSG_INSTANCE_RESET_FAILED = 0x2684, - SMSG_INSTANCE_SAVE_CREATED = 0x2776, + SMSG_INSTANCE_RESET = 0x2685, + SMSG_INSTANCE_RESET_FAILED = 0x2686, + SMSG_INSTANCE_SAVE_CREATED = 0x2778, SMSG_INTERRUPT_POWER_REGEN = 0x2C5B, SMSG_INVALIDATE_PAGE_TEXT = 0x2918, SMSG_INVALIDATE_PLAYER = 0x2FFF, - SMSG_INVALID_PROMOTION_CODE = 0x274D, + SMSG_INVALID_PROMOTION_CODE = 0x274F, SMSG_INVENTORY_CHANGE_FAILURE = 0x2DA5, - SMSG_INVENTORY_FIXUP_COMPLETE = 0x2809, - SMSG_INVENTORY_FULL_OVERFLOW = 0x281A, - SMSG_ISLAND_AZERITE_GAIN = 0x2756, - SMSG_ISLAND_COMPLETE = 0x2757, + SMSG_INVENTORY_FIXUP_COMPLETE = 0x280B, + SMSG_INVENTORY_FULL_OVERFLOW = 0x281C, + SMSG_ISLAND_AZERITE_GAIN = 0x2758, + SMSG_ISLAND_COMPLETE = 0x2759, SMSG_IS_QUEST_COMPLETE_RESPONSE = 0x2A84, - SMSG_ITEM_CHANGED = 0x26E6, - SMSG_ITEM_COOLDOWN = 0x27BD, - SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x274F, + SMSG_ITEM_CHANGED = 0x26E8, + SMSG_ITEM_COOLDOWN = 0x27BF, + SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x2751, SMSG_ITEM_EXPIRE_PURCHASE_REFUND = 0x259B, - SMSG_ITEM_INTERACTION_COMPLETE = 0x2865, + SMSG_ITEM_INTERACTION_COMPLETE = 0x2867, SMSG_ITEM_PURCHASE_REFUND_RESULT = 0x2599, SMSG_ITEM_PUSH_RESULT = 0x2620, - SMSG_ITEM_TIME_UPDATE = 0x274E, - SMSG_KICK_REASON = 0x2686, - SMSG_LATENCY_REPORT_PING = 0x2877, + SMSG_ITEM_TIME_UPDATE = 0x2750, + SMSG_KICK_REASON = 0x2688, + SMSG_LATENCY_REPORT_PING = 0x2879, SMSG_LEARNED_SPELLS = 0x2C4F, SMSG_LEARN_PVP_TALENT_FAILED = 0x25D3, SMSG_LEARN_TALENT_FAILED = 0x25D2, - SMSG_LEGACY_LOOT_RULES = 0x281F, - SMSG_LEVEL_LINKING_RESULT = 0x284B, - SMSG_LEVEL_UP_INFO = 0x26E4, + SMSG_LEGACY_LOOT_RULES = 0x2821, + SMSG_LEVEL_LINKING_RESULT = 0x284D, + SMSG_LEVEL_UP_INFO = 0x26E6, SMSG_LFG_BOOT_PLAYER = 0x2A35, SMSG_LFG_DISABLED = 0x2A33, SMSG_LFG_EXPAND_SEARCH_PROMPT = 0x2A3B, @@ -1499,23 +1512,24 @@ enum OpcodeServer : uint16 SMSG_LFG_SLOT_INVALID = 0x2A30, SMSG_LFG_TELEPORT_DENIED = 0x2A32, SMSG_LFG_UPDATE_STATUS = 0x2A24, - SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x2768, - SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x2767, - SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x275C, - SMSG_LIVE_REGION_KEY_BINDINGS_COPY_RESULT = 0x2769, + SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x276A, + SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x2769, + SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x275E, + SMSG_LIVE_REGION_KEY_BINDINGS_COPY_RESULT = 0x276B, SMSG_LOAD_CUF_PROFILES = 0x25BB, - SMSG_LOAD_EQUIPMENT_SET = 0x2709, - SMSG_LOBBY_MATCHMAKER_PARTY_INFO = 0x288B, - SMSG_LOBBY_MATCHMAKER_PARTY_INVITE_REJECTED = 0x288C, - SMSG_LOBBY_MATCHMAKER_RECEIVE_INVITE = 0x288D, - SMSG_LOGIN_SET_TIME_SPEED = 0x2708, + SMSG_LOAD_EQUIPMENT_SET = 0x270B, + SMSG_LOBBY_MATCHMAKER_LOBBY_ACQUIRED_SERVER = 0x288C, + SMSG_LOBBY_MATCHMAKER_PARTY_INFO = 0x288D, + SMSG_LOBBY_MATCHMAKER_PARTY_INVITE_REJECTED = 0x288E, + SMSG_LOBBY_MATCHMAKER_RECEIVE_INVITE = 0x288F, + SMSG_LOGIN_SET_TIME_SPEED = 0x270A, SMSG_LOGIN_VERIFY_WORLD = 0x2596, - SMSG_LOGOUT_CANCEL_ACK = 0x2682, - SMSG_LOGOUT_COMPLETE = 0x2681, - SMSG_LOGOUT_RESPONSE = 0x2680, - SMSG_LOG_XP_GAIN = 0x26E0, + SMSG_LOGOUT_CANCEL_ACK = 0x2684, + SMSG_LOGOUT_COMPLETE = 0x2683, + SMSG_LOGOUT_RESPONSE = 0x2682, + SMSG_LOG_XP_GAIN = 0x26E2, SMSG_LOOT_ALL_PASSED = 0x261E, - SMSG_LOOT_LIST = 0x273B, + SMSG_LOOT_LIST = 0x273D, SMSG_LOOT_MONEY_NOTIFY = 0x2619, SMSG_LOOT_RELEASE = 0x2618, SMSG_LOOT_RELEASE_ALL = 0x2617, @@ -1524,22 +1538,22 @@ enum OpcodeServer : uint16 SMSG_LOOT_ROLL = 0x261B, SMSG_LOOT_ROLLS_COMPLETE = 0x261D, SMSG_LOOT_ROLL_WON = 0x261F, - SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x266D, + SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x266F, SMSG_MAIL_COMMAND_RESULT = 0x2638, - SMSG_MAIL_LIST_RESULT = 0x2750, - SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x2751, + SMSG_MAIL_LIST_RESULT = 0x2752, + SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x2753, SMSG_MAP_OBJECTIVES_INIT = 0x294C, SMSG_MAP_OBJ_EVENTS = 0x25C5, SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x261C, - SMSG_MEETING_STONE_FAILED = 0x288E, + SMSG_MEETING_STONE_FAILED = 0x2890, SMSG_MESSAGE_BOX = 0x2576, - SMSG_MINIMAP_PING = 0x26CA, + SMSG_MINIMAP_PING = 0x26CC, SMSG_MIRROR_IMAGE_COMPONENTED_DATA = 0x2C14, SMSG_MIRROR_IMAGE_CREATURE_DATA = 0x2C13, SMSG_MISSILE_CANCEL = 0x25C6, - SMSG_MODIFY_COOLDOWN = 0x275E, + SMSG_MODIFY_COOLDOWN = 0x2760, SMSG_MOUNT_RESULT = 0x257B, - SMSG_MOVEMENT_ENFORCEMENT_ALERT = 0x283B, + SMSG_MOVEMENT_ENFORCEMENT_ALERT = 0x283D, SMSG_MOVE_ADD_IMPULSE = 0x2E32, SMSG_MOVE_APPLY_INERTIA = 0x2E2E, SMSG_MOVE_APPLY_MOVEMENT_FORCE = 0x2E15, @@ -1647,54 +1661,54 @@ enum OpcodeServer : uint16 SMSG_MOVE_UPDATE_TELEPORT = 0x2DE1, SMSG_MOVE_UPDATE_TURN_RATE = 0x2DDD, SMSG_MOVE_UPDATE_WALK_SPEED = 0x2DD8, - SMSG_MULTI_FLOOR_LEAVE_FLOOR = 0x27D5, - SMSG_MULTI_FLOOR_NEW_FLOOR = 0x27D4, + SMSG_MULTI_FLOOR_LEAVE_FLOOR = 0x27D7, + SMSG_MULTI_FLOOR_NEW_FLOOR = 0x27D6, SMSG_MYTHIC_PLUS_ALL_MAP_STATS = 0x2609, SMSG_MYTHIC_PLUS_CURRENT_AFFIXES = 0x260B, SMSG_MYTHIC_PLUS_NEW_WEEK_RECORD = 0x260F, SMSG_MYTHIC_PLUS_SEASON_DATA = 0x260A, SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x25DA, - SMSG_NEW_DATA_BUILD = 0x28B6, - SMSG_NEW_TAXI_PATH = 0x267B, + SMSG_NEW_DATA_BUILD = 0x28B9, + SMSG_NEW_TAXI_PATH = 0x267D, SMSG_NEW_WORLD = 0x2593, SMSG_NOTIFY_DEST_LOC_SPELL_CAST = 0x2C45, - SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x26A7, + SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x26A9, SMSG_NOTIFY_MONEY = 0x2598, SMSG_NOTIFY_RECEIVED_MAIL = 0x2639, - SMSG_NPC_INTERACTION_OPEN_RESULT = 0x2885, - SMSG_OFFER_PETITION_ERROR = 0x26B2, - SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x26E1, + SMSG_NPC_INTERACTION_OPEN_RESULT = 0x2887, + SMSG_OFFER_PETITION_ERROR = 0x26B4, + SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x26E3, SMSG_ON_MONSTER_MOVE = 0x2DD4, - SMSG_OPEN_ARTIFACT_FORGE = 0x2798, + SMSG_OPEN_ARTIFACT_FORGE = 0x279A, SMSG_OPEN_CONTAINER = 0x2DA6, SMSG_OPEN_LFG_DUNGEON_FINDER = 0x2A31, - SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x2790, - SMSG_OVERRIDE_LIGHT = 0x26B7, - SMSG_PAGE_TEXT = 0x2714, - SMSG_PARTY_COMMAND_RESULT = 0x278A, + SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x2792, + SMSG_OVERRIDE_LIGHT = 0x26B9, + SMSG_PAGE_TEXT = 0x2716, + SMSG_PARTY_COMMAND_RESULT = 0x278C, SMSG_PARTY_INVITE = 0x25BC, - SMSG_PARTY_KILL_LOG = 0x2754, - SMSG_PARTY_MEMBER_FULL_STATE = 0x2753, - SMSG_PARTY_MEMBER_PARTIAL_STATE = 0x2752, - SMSG_PARTY_NOTIFY_LFG_LEADER_CHANGE = 0x286B, + SMSG_PARTY_KILL_LOG = 0x2756, + SMSG_PARTY_MEMBER_FULL_STATE = 0x2755, + SMSG_PARTY_MEMBER_PARTIAL_STATE = 0x2754, + SMSG_PARTY_NOTIFY_LFG_LEADER_CHANGE = 0x286D, SMSG_PARTY_UPDATE = 0x25F2, SMSG_PAST_TIME_EVENTS = 0x25C1, - SMSG_PAUSE_MIRROR_TIMER = 0x270B, - SMSG_PENDING_RAID_LOCK = 0x26F3, - SMSG_PERKS_PROGRAM_ACTIVITY_COMPLETE = 0x2881, - SMSG_PERKS_PROGRAM_ACTIVITY_UPDATE = 0x287D, - SMSG_PERKS_PROGRAM_DISABLED = 0x2882, - SMSG_PERKS_PROGRAM_RESULT = 0x287E, - SMSG_PERKS_PROGRAM_VENDOR_UPDATE = 0x287C, + SMSG_PAUSE_MIRROR_TIMER = 0x270D, + SMSG_PENDING_RAID_LOCK = 0x26F5, + SMSG_PERKS_PROGRAM_ACTIVITY_COMPLETE = 0x2883, + SMSG_PERKS_PROGRAM_ACTIVITY_UPDATE = 0x287F, + SMSG_PERKS_PROGRAM_DISABLED = 0x2884, + SMSG_PERKS_PROGRAM_RESULT = 0x2880, + SMSG_PERKS_PROGRAM_VENDOR_UPDATE = 0x287E, SMSG_PETITION_ALREADY_SIGNED = 0x259E, SMSG_PETITION_RENAME_GUILD_RESPONSE = 0x29FA, - SMSG_PETITION_SHOW_LIST = 0x26BA, - SMSG_PETITION_SHOW_SIGNATURES = 0x26BB, - SMSG_PETITION_SIGN_RESULTS = 0x2746, - SMSG_PET_ACTION_FEEDBACK = 0x2743, - SMSG_PET_ACTION_SOUND = 0x269D, + SMSG_PETITION_SHOW_LIST = 0x26BC, + SMSG_PETITION_SHOW_SIGNATURES = 0x26BD, + SMSG_PETITION_SIGN_RESULTS = 0x2748, + SMSG_PET_ACTION_FEEDBACK = 0x2745, + SMSG_PET_ACTION_SOUND = 0x269F, SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x2600, - SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x2672, + SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x2674, SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x25F9, SMSG_PET_BATTLE_FINAL_ROUND = 0x25FE, SMSG_PET_BATTLE_FINISHED = 0x25FF, @@ -1710,19 +1724,19 @@ enum OpcodeServer : uint16 SMSG_PET_BATTLE_SLOT_UPDATES = 0x25EA, SMSG_PET_CAST_FAILED = 0x2C5A, SMSG_PET_CLEAR_SPELLS = 0x2C23, - SMSG_PET_DISMISS_SOUND = 0x269E, - SMSG_PET_GOD_MODE = 0x2678, - SMSG_PET_GUIDS = 0x26FF, + SMSG_PET_DISMISS_SOUND = 0x26A0, + SMSG_PET_GOD_MODE = 0x267A, + SMSG_PET_GUIDS = 0x2701, SMSG_PET_LEARNED_SPELLS = 0x2C51, SMSG_PET_MODE = 0x2588, - SMSG_PET_NAME_INVALID = 0x26BF, + SMSG_PET_NAME_INVALID = 0x26C1, SMSG_PET_NEWLY_TAMED = 0x2587, SMSG_PET_SPELLS_MESSAGE = 0x2C24, SMSG_PET_STABLE_RESULT = 0x2592, - SMSG_PET_TAME_FAILURE = 0x26AF, + SMSG_PET_TAME_FAILURE = 0x26B1, SMSG_PET_UNLEARNED_SPELLS = 0x2C52, SMSG_PHASE_SHIFT_CHANGE = 0x2578, - SMSG_PLAYED_TIME = 0x26D1, + SMSG_PLAYED_TIME = 0x26D3, SMSG_PLAYER_ACKOWLEDGE_ARROW_CALLOUT = 0x3022, SMSG_PLAYER_AZERITE_ITEM_EQUIPPED_STATUS_CHANGED = 0x3014, SMSG_PLAYER_AZERITE_ITEM_GAINS = 0x3013, @@ -1743,25 +1757,25 @@ enum OpcodeServer : uint16 SMSG_PLAYER_SKINNED = 0x3006, SMSG_PLAYER_TUTORIAL_HIGHLIGHT_SPELL = 0x300D, SMSG_PLAYER_TUTORIAL_UNHIGHLIGHT_SPELL = 0x300C, - SMSG_PLAY_MUSIC = 0x2763, - SMSG_PLAY_OBJECT_SOUND = 0x2764, - SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x272B, + SMSG_PLAY_MUSIC = 0x2765, + SMSG_PLAY_OBJECT_SOUND = 0x2766, + SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x272D, SMSG_PLAY_ORPHAN_SPELL_VISUAL = 0x2C49, SMSG_PLAY_SCENE = 0x2633, - SMSG_PLAY_SOUND = 0x2762, - SMSG_PLAY_SPEAKERBOT_SOUND = 0x2765, + SMSG_PLAY_SOUND = 0x2764, + SMSG_PLAY_SPEAKERBOT_SOUND = 0x2767, SMSG_PLAY_SPELL_VISUAL = 0x2C47, SMSG_PLAY_SPELL_VISUAL_KIT = 0x2C4B, - SMSG_PLAY_TIME_WARNING = 0x26F9, + SMSG_PLAY_TIME_WARNING = 0x26FB, SMSG_PONG = 0x304E, - SMSG_POWER_UPDATE = 0x26CE, + SMSG_POWER_UPDATE = 0x26D0, SMSG_PRELOAD_CHILD_MAP = 0x2579, SMSG_PRELOAD_WORLD = 0x2594, - SMSG_PREPOPULATE_NAME_CACHE = 0x283E, - SMSG_PRE_RESSURECT = 0x2761, + SMSG_PREPOPULATE_NAME_CACHE = 0x2840, + SMSG_PRE_RESSURECT = 0x2763, SMSG_PRINT_NOTIFICATION = 0x25C9, - SMSG_PROC_RESIST = 0x2755, - SMSG_PROFESSION_GOSSIP = 0x27F5, + SMSG_PROC_RESIST = 0x2757, + SMSG_PROFESSION_GOSSIP = 0x27F7, SMSG_PUSH_SPELL_TO_ACTION_BAR = 0x2C53, SMSG_PVP_CREDIT = 0x2946, SMSG_PVP_MATCH_COMPLETE = 0x2951, @@ -1770,7 +1784,7 @@ enum OpcodeServer : uint16 SMSG_PVP_MATCH_START = 0x294F, SMSG_PVP_MATCH_STATISTICS = 0x2932, SMSG_PVP_OPTIONS_ENABLED = 0x2935, - SMSG_PVP_TIER_RECORD = 0x2878, + SMSG_PVP_TIER_RECORD = 0x287A, SMSG_QUERY_BATTLE_PET_NAME_RESPONSE = 0x291A, SMSG_QUERY_CREATURE_RESPONSE = 0x2914, SMSG_QUERY_GAME_OBJECT_RESPONSE = 0x2915, @@ -1786,7 +1800,7 @@ enum OpcodeServer : uint16 SMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID_RESPONSE = 0x3002, SMSG_QUERY_QUEST_INFO_RESPONSE = 0x2A96, SMSG_QUERY_REALM_GUILD_MASTER_INFO_RESPONSE = 0x29E6, - SMSG_QUERY_TIME_RESPONSE = 0x26DF, + SMSG_QUERY_TIME_RESPONSE = 0x26E1, SMSG_QUEST_COMPLETION_NPC_RESPONSE = 0x2A81, SMSG_QUEST_CONFIRM_ACCEPT = 0x2A8F, SMSG_QUEST_FORCE_REMOVED = 0x2A9C, @@ -1805,22 +1819,22 @@ enum OpcodeServer : uint16 SMSG_QUEST_POI_QUERY_RESPONSE = 0x2A9D, SMSG_QUEST_POI_UPDATE_RESPONSE = 0x2A9F, SMSG_QUEST_PUSH_RESULT = 0x2A90, - SMSG_QUEST_SESSION_INFO_RESPONSE = 0x2861, - SMSG_QUEST_SESSION_READY_CHECK = 0x284F, - SMSG_QUEST_SESSION_READY_CHECK_RESPONSE = 0x2850, - SMSG_QUEST_SESSION_RESULT = 0x284E, + SMSG_QUEST_SESSION_INFO_RESPONSE = 0x2863, + SMSG_QUEST_SESSION_READY_CHECK = 0x2851, + SMSG_QUEST_SESSION_READY_CHECK_RESPONSE = 0x2852, + SMSG_QUEST_SESSION_RESULT = 0x2850, SMSG_QUEST_UPDATE_ADD_CREDIT = 0x2A8C, SMSG_QUEST_UPDATE_ADD_CREDIT_SIMPLE = 0x2A8D, SMSG_QUEST_UPDATE_ADD_PVP_CREDIT = 0x2A8E, SMSG_QUEST_UPDATE_COMPLETE = 0x2A89, SMSG_QUEST_UPDATE_FAILED = 0x2A8A, SMSG_QUEST_UPDATE_FAILED_TIMER = 0x2A8B, - SMSG_QUEUE_SUMMARY_UPDATE = 0x2808, - SMSG_RAF_ACCOUNT_INFO = 0x284C, - SMSG_RAF_ACTIVITY_STATE_CHANGED = 0x285D, - SMSG_RAF_DEBUG_FRIEND_MONTHS = 0x28B3, - SMSG_RAID_DIFFICULTY_SET = 0x27A2, - SMSG_RAID_GROUP_ONLY = 0x27A4, + SMSG_QUEUE_SUMMARY_UPDATE = 0x280A, + SMSG_RAF_ACCOUNT_INFO = 0x284E, + SMSG_RAF_ACTIVITY_STATE_CHANGED = 0x285F, + SMSG_RAF_DEBUG_FRIEND_MONTHS = 0x28B6, + SMSG_RAID_DIFFICULTY_SET = 0x27A4, + SMSG_RAID_GROUP_ONLY = 0x27A6, SMSG_RAID_INSTANCE_MESSAGE = 0x2BB4, SMSG_RAID_MARKERS_CHANGED = 0x259F, SMSG_RANDOM_ROLL = 0x262D, @@ -1828,33 +1842,33 @@ enum OpcodeServer : uint16 SMSG_READY_CHECK_COMPLETED = 0x25F6, SMSG_READY_CHECK_RESPONSE = 0x25F5, SMSG_READY_CHECK_STARTED = 0x25F4, - SMSG_READ_ITEM_RESULT_FAILED = 0x279E, - SMSG_READ_ITEM_RESULT_OK = 0x2795, + SMSG_READ_ITEM_RESULT_FAILED = 0x27A0, + SMSG_READ_ITEM_RESULT_OK = 0x2797, SMSG_REALM_QUERY_RESPONSE = 0x2913, - SMSG_REATTACH_RESURRECT = 0x2745, + SMSG_REATTACH_RESURRECT = 0x2747, SMSG_RECEIVE_PING_UNIT = 0x25A0, SMSG_RECEIVE_PING_WORLD_POINT = 0x25A1, - SMSG_RECRAFT_ITEM_RESULT = 0x28A2, - SMSG_RECRUIT_A_FRIEND_FAILURE = 0x26BC, + SMSG_RECRAFT_ITEM_RESULT = 0x28A5, + SMSG_RECRUIT_A_FRIEND_FAILURE = 0x26BE, SMSG_REFRESH_COMPONENT = 0x264E, SMSG_REFRESH_SPELL_HISTORY = 0x2C2B, SMSG_REMOVE_ITEM_PASSIVE = 0x25AA, SMSG_REMOVE_SPELL_FROM_ACTION_BAR = 0x2C54, - SMSG_REPLACE_TROPHY_RESPONSE = 0x27BA, + SMSG_REPLACE_TROPHY_RESPONSE = 0x27BC, SMSG_REPORT_PVP_PLAYER_AFK_RESULT = 0x3001, SMSG_REQUEST_CEMETERY_LIST_RESPONSE = 0x258E, SMSG_REQUEST_PVP_REWARDS_RESPONSE = 0x2936, SMSG_REQUEST_SCHEDULED_PVP_INFO_RESPONSE = 0x2937, SMSG_RESET_COMPRESSION_CONTEXT = 0x304F, - SMSG_RESET_FAILED_NOTIFY = 0x26B3, - SMSG_RESET_LAST_LOADED_CONFIG_CVARS = 0x28A8, + SMSG_RESET_FAILED_NOTIFY = 0x26B5, + SMSG_RESET_LAST_LOADED_CONFIG_CVARS = 0x28AB, SMSG_RESET_QUEST_POI = 0x2AA0, SMSG_RESET_RANGED_COMBAT_TIMER = 0x2945, SMSG_RESET_WEEKLY_CURRENCY = 0x2575, SMSG_RESPEC_WIPE_CONFIRM = 0x2610, SMSG_RESPOND_INSPECT_ACHIEVEMENTS = 0x2572, - SMSG_RESPONSE_PERK_PENDING_REWARDS = 0x287F, - SMSG_RESPONSE_PERK_RECENT_PURCHASES = 0x2880, + SMSG_RESPONSE_PERK_PENDING_REWARDS = 0x2881, + SMSG_RESPONSE_PERK_RECENT_PURCHASES = 0x2882, SMSG_RESTART_GLOBAL_COOLDOWN = 0x2C63, SMSG_RESTRICTED_ACCOUNT_WARNING = 0x25B8, SMSG_RESUME_CAST = 0x2C3D, @@ -1863,21 +1877,21 @@ enum OpcodeServer : uint16 SMSG_RESUME_TOKEN = 0x25A8, SMSG_RESURRECT_REQUEST = 0x257E, SMSG_RESYNC_RUNES = 0x2C61, - SMSG_RETURNING_PLAYER_PROMPT = 0x279D, - SMSG_RETURN_APPLICANT_LIST = 0x2842, - SMSG_RETURN_RECRUITING_CLUBS = 0x2841, + SMSG_RETURNING_PLAYER_PROMPT = 0x279F, + SMSG_RETURN_APPLICANT_LIST = 0x2844, + SMSG_RETURN_RECRUITING_CLUBS = 0x2843, SMSG_ROLE_CHANGED_INFORM = 0x258A, SMSG_ROLE_CHOSEN = 0x2A39, SMSG_ROLE_POLL_INFORM = 0x258B, - SMSG_RUNEFORGE_LEGENDARY_CRAFTING_OPEN_NPC = 0x27F4, + SMSG_RUNEFORGE_LEGENDARY_CRAFTING_OPEN_NPC = 0x27F6, SMSG_RUNE_REGEN_DEBUG = 0x25B5, - SMSG_SCENARIO_COMPLETED = 0x27E2, + SMSG_SCENARIO_COMPLETED = 0x27E4, SMSG_SCENARIO_POIS = 0x2630, SMSG_SCENARIO_PROGRESS_UPDATE = 0x2629, - SMSG_SCENARIO_SHOW_CRITERIA = 0x27F8, + SMSG_SCENARIO_SHOW_CRITERIA = 0x27FA, SMSG_SCENARIO_STATE = 0x2628, - SMSG_SCENARIO_UI_UPDATE = 0x27F7, - SMSG_SCENARIO_VACATE = 0x279F, + SMSG_SCENARIO_UI_UPDATE = 0x27F9, + SMSG_SCENARIO_VACATE = 0x27A1, SMSG_SCENE_OBJECT_EVENT = 0x25E0, SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x25E5, SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x25E6, @@ -1887,7 +1901,7 @@ enum OpcodeServer : uint16 SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x25E3, SMSG_SCRIPT_CAST = 0x2C58, SMSG_SEASON_INFO = 0x25C0, - SMSG_SELL_RESPONSE = 0x26C0, + SMSG_SELL_RESPONSE = 0x26C2, SMSG_SEND_ITEM_PASSIVES = 0x25AB, SMSG_SEND_KNOWN_SPELLS = 0x2C29, SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x262B, @@ -1896,48 +1910,50 @@ enum OpcodeServer : uint16 SMSG_SEND_SPELL_HISTORY = 0x2C2A, SMSG_SEND_UNLEARN_SPELLS = 0x2C2D, SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x264B, - SMSG_SERVER_TIME = 0x267F, - SMSG_SERVER_TIME_OFFSET = 0x270F, + SMSG_SERVER_TIME = 0x2681, + SMSG_SERVER_TIME_OFFSET = 0x2711, SMSG_SETUP_COMBAT_LOG_FILE_FLUSH = 0x2C1F, SMSG_SETUP_CURRENCY = 0x2573, - SMSG_SET_AI_ANIM_KIT = 0x272A, - SMSG_SET_ANIM_TIER = 0x272E, + SMSG_SET_AI_ANIM_KIT = 0x272C, + SMSG_SET_ANIM_TIER = 0x2730, SMSG_SET_CHR_UPGRADE_TIER = 0x25DD, SMSG_SET_CURRENCY = 0x2574, SMSG_SET_DF_FAST_LAUNCH_RESULT = 0x2A2E, - SMSG_SET_DUNGEON_DIFFICULTY = 0x26A1, - SMSG_SET_FACTION_AT_WAR = 0x26FB, - SMSG_SET_FACTION_NOT_VISIBLE = 0x2725, - SMSG_SET_FACTION_STANDING = 0x2726, - SMSG_SET_FACTION_VISIBLE = 0x2724, + SMSG_SET_DUNGEON_DIFFICULTY = 0x26A3, + SMSG_SET_FACTION_AT_WAR = 0x26FD, + SMSG_SET_FACTION_NOT_VISIBLE = 0x2727, + SMSG_SET_FACTION_STANDING = 0x2728, + SMSG_SET_FACTION_VISIBLE = 0x2726, SMSG_SET_FLAT_SPELL_MODIFIER = 0x2C38, - SMSG_SET_FORCED_REACTIONS = 0x2718, + SMSG_SET_FORCED_REACTIONS = 0x271A, SMSG_SET_ITEM_PURCHASE_DATA = 0x259A, - SMSG_SET_LOOT_METHOD_FAILED = 0x27C6, + SMSG_SET_LOOT_METHOD_FAILED = 0x27C8, SMSG_SET_MAX_WEEKLY_QUANTITY = 0x259D, - SMSG_SET_MELEE_ANIM_KIT = 0x272D, - SMSG_SET_MOVEMENT_ANIM_KIT = 0x272C, + SMSG_SET_MELEE_ANIM_KIT = 0x272F, + SMSG_SET_MOVEMENT_ANIM_KIT = 0x272E, SMSG_SET_PCT_SPELL_MODIFIER = 0x2C39, SMSG_SET_PET_SPECIALIZATION = 0x2622, SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x3003, SMSG_SET_PLAY_HOVER_ANIM = 0x25B9, - SMSG_SET_PROFICIENCY = 0x272F, - SMSG_SET_QUEST_REPLAY_COOLDOWN_OVERRIDE = 0x2855, + SMSG_SET_PROFICIENCY = 0x2731, + SMSG_SET_QUEST_REPLAY_COOLDOWN_OVERRIDE = 0x2857, SMSG_SET_SHIPMENT_READY_RESPONSE = 0x2998, SMSG_SET_SPELL_CHARGES = 0x2C28, - SMSG_SET_TIME_ZONE_INFORMATION = 0x2674, - SMSG_SET_VEHICLE_REC_ID = 0x26F2, - SMSG_SHADOWLANDS_CAPACITANCE_UPDATE = 0x2884, + SMSG_SET_TIME_ZONE_INFORMATION = 0x2676, + SMSG_SET_VEHICLE_REC_ID = 0x26F4, + SMSG_SHADOWLANDS_CAPACITANCE_UPDATE = 0x2886, SMSG_SHIPMENT_FACTION_UPDATE_RESULT = 0x2999, SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x25D9, SMSG_SHOW_QUEST_COMPLETION_TEXT = 0x2A95, - SMSG_SHOW_TAXI_NODES = 0x26C9, - SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x276A, - SMSG_SOCIAL_CONTRACT_REQUEST_RESPONSE = 0x288F, - SMSG_SOCKET_GEMS_FAILURE = 0x2722, - SMSG_SOCKET_GEMS_SUCCESS = 0x2721, - SMSG_SPECIAL_MOUNT_ANIM = 0x269C, - SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x2713, + SMSG_SHOW_TAXI_NODES = 0x26CB, + SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x276C, + SMSG_SOCIAL_CONTRACT_REQUEST_RESPONSE = 0x2891, + SMSG_SOCKET_GEMS_FAILURE = 0x2724, + SMSG_SOCKET_GEMS_SUCCESS = 0x2723, + SMSG_SPECIAL_MOUNT_ANIM = 0x269E, + SMSG_SPECTATE_END = 0x28B8, + SMSG_SPECTATE_PLAYER = 0x28B7, + SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x2715, SMSG_SPELL_ABSORB_LOG = 0x2C1C, SMSG_SPELL_CATEGORY_COOLDOWN = 0x2C16, SMSG_SPELL_CHANNEL_START = 0x2C33, @@ -1966,93 +1982,93 @@ enum OpcodeServer : uint16 SMSG_SPELL_PREPARE = 0x2C3A, SMSG_SPELL_START = 0x2C3C, SMSG_SPELL_VISUAL_LOAD_SCREEN = 0x25CB, - SMSG_SPLASH_SCREEN_SHOW_LATEST = 0x2867, - SMSG_STAND_STATE_UPDATE = 0x2717, + SMSG_SPLASH_SCREEN_SHOW_LATEST = 0x2869, + SMSG_STAND_STATE_UPDATE = 0x2719, SMSG_STARTER_BUILD_ACTIVATE_FAILED = 0x25D1, SMSG_START_ELAPSED_TIMER = 0x2602, SMSG_START_ELAPSED_TIMERS = 0x2604, - SMSG_START_LIGHTNING_STORM = 0x26A4, + SMSG_START_LIGHTNING_STORM = 0x26A6, SMSG_START_LOOT_ROLL = 0x261A, - SMSG_START_MIRROR_TIMER = 0x270A, + SMSG_START_MIRROR_TIMER = 0x270C, SMSG_START_TIMER = 0x25A4, SMSG_STOP_ELAPSED_TIMER = 0x2603, - SMSG_STOP_MIRROR_TIMER = 0x270C, - SMSG_STOP_SPEAKERBOT_SOUND = 0x2766, + SMSG_STOP_MIRROR_TIMER = 0x270E, + SMSG_STOP_SPEAKERBOT_SOUND = 0x2768, SMSG_STOP_TIMER = 0x25A5, SMSG_STREAMING_MOVIES = 0x25A3, - SMSG_SUGGEST_INVITE_INFORM = 0x278B, - SMSG_SUMMON_CANCEL = 0x26AD, + SMSG_SUGGEST_INVITE_INFORM = 0x278D, + SMSG_SUMMON_CANCEL = 0x26AF, SMSG_SUMMON_RAID_MEMBER_VALIDATE_FAILED = 0x258C, - SMSG_SUMMON_REQUEST = 0x271C, + SMSG_SUMMON_REQUEST = 0x271E, SMSG_SUPERCEDED_SPELLS = 0x2C4E, SMSG_SUSPEND_COMMS = 0x304A, SMSG_SUSPEND_TOKEN = 0x25A7, - SMSG_SYNC_WOW_ENTITLEMENTS = 0x285F, - SMSG_TALENTS_INVOLUNTARILY_RESET = 0x2712, - SMSG_TAXI_NODE_STATUS = 0x2679, - SMSG_TEXT_EMOTE = 0x2677, - SMSG_THREAT_CLEAR = 0x26D8, - SMSG_THREAT_REMOVE = 0x26D7, - SMSG_THREAT_UPDATE = 0x26D6, + SMSG_SYNC_WOW_ENTITLEMENTS = 0x2861, + SMSG_TALENTS_INVOLUNTARILY_RESET = 0x2714, + SMSG_TAXI_NODE_STATUS = 0x267B, + SMSG_TEXT_EMOTE = 0x2679, + SMSG_THREAT_CLEAR = 0x26DA, + SMSG_THREAT_REMOVE = 0x26D9, + SMSG_THREAT_UPDATE = 0x26D8, SMSG_TIME_ADJUSTMENT = 0x2DD3, SMSG_TIME_SYNC_REQUEST = 0x2DD2, - SMSG_TITLE_EARNED = 0x26D3, - SMSG_TITLE_LOST = 0x26D4, - SMSG_TOTEM_CREATED = 0x26C3, - SMSG_TOTEM_DURATION_CHANGED = 0x26C5, - SMSG_TOTEM_MOVED = 0x26C6, - SMSG_TOTEM_REMOVED = 0x26C4, + SMSG_TITLE_EARNED = 0x26D5, + SMSG_TITLE_LOST = 0x26D6, + SMSG_TOTEM_CREATED = 0x26C5, + SMSG_TOTEM_DURATION_CHANGED = 0x26C7, + SMSG_TOTEM_MOVED = 0x26C8, + SMSG_TOTEM_REMOVED = 0x26C6, SMSG_TRADE_STATUS = 0x2582, SMSG_TRADE_UPDATED = 0x2581, - SMSG_TRAINER_BUY_FAILED = 0x26DB, - SMSG_TRAINER_LIST = 0x26DA, + SMSG_TRAINER_BUY_FAILED = 0x26DD, + SMSG_TRAINER_LIST = 0x26DC, SMSG_TRAIT_CONFIG_COMMIT_FAILED = 0x25D0, - SMSG_TRANSFER_ABORTED = 0x26FE, + SMSG_TRANSFER_ABORTED = 0x2700, SMSG_TRANSFER_PENDING = 0x25CC, SMSG_TREASURE_PICKER_RESPONSE = 0x291F, - SMSG_TRIGGER_CINEMATIC = 0x27BF, - SMSG_TRIGGER_MOVIE = 0x26C7, - SMSG_TURN_IN_PETITION_RESULT = 0x2748, - SMSG_TUTORIAL_FLAGS = 0x27B3, + SMSG_TRIGGER_CINEMATIC = 0x27C1, + SMSG_TRIGGER_MOVIE = 0x26C9, + SMSG_TURN_IN_PETITION_RESULT = 0x274A, + SMSG_TUTORIAL_FLAGS = 0x27B5, SMSG_UI_MAP_QUEST_LINES_RESPONSE = 0x2AA2, - SMSG_UNDELETE_CHARACTER_RESPONSE = 0x27C1, - SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x27C2, + SMSG_UNDELETE_CHARACTER_RESPONSE = 0x27C3, + SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x27C4, SMSG_UNLEARNED_SPELLS = 0x2C50, SMSG_UNLOAD_CHILD_MAP = 0x257A, - SMSG_UPDATE_AADC_STATUS_RESPONSE = 0x2879, - SMSG_UPDATE_ACCOUNT_DATA = 0x2704, + SMSG_UPDATE_AADC_STATUS_RESPONSE = 0x287B, + SMSG_UPDATE_ACCOUNT_DATA = 0x2706, SMSG_UPDATE_ACTION_BUTTONS = 0x25DE, - SMSG_UPDATE_BNET_SESSION_KEY = 0x2819, + SMSG_UPDATE_BNET_SESSION_KEY = 0x281B, SMSG_UPDATE_CAPTURE_POINT = 0x2929, - SMSG_UPDATE_CELESTIAL_BODY = 0x2815, - SMSG_UPDATE_CHARACTER_FLAGS = 0x27B9, - SMSG_UPDATE_CHARGE_CATEGORY_COOLDOWN = 0x2760, - SMSG_UPDATE_COOLDOWN = 0x275F, + SMSG_UPDATE_CELESTIAL_BODY = 0x2817, + SMSG_UPDATE_CHARACTER_FLAGS = 0x27BB, + SMSG_UPDATE_CHARGE_CATEGORY_COOLDOWN = 0x2762, + SMSG_UPDATE_COOLDOWN = 0x2761, SMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x2996, SMSG_UPDATE_DAILY_MISSION_COUNTER = 0x297F, SMSG_UPDATE_EXPANSION_LEVEL = 0x2643, - SMSG_UPDATE_GAME_TIME_STATE = 0x281C, - SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x26A6, - SMSG_UPDATE_LAST_INSTANCE = 0x2685, - SMSG_UPDATE_OBJECT = 0x27C0, + SMSG_UPDATE_GAME_TIME_STATE = 0x281E, + SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x26A8, + SMSG_UPDATE_LAST_INSTANCE = 0x2687, + SMSG_UPDATE_OBJECT = 0x27C2, SMSG_UPDATE_PRIMARY_SPEC = 0x25D6, SMSG_UPDATE_RECENT_PLAYER_GUIDS = 0x25F3, SMSG_UPDATE_TALENT_DATA = 0x25D5, - SMSG_UPDATE_WORLD_STATE = 0x2742, + SMSG_UPDATE_WORLD_STATE = 0x2744, SMSG_USERLIST_ADD = 0x2BB9, SMSG_USERLIST_REMOVE = 0x2BBA, SMSG_USERLIST_UPDATE = 0x2BBB, - SMSG_USE_EQUIPMENT_SET_RESULT = 0x2749, - SMSG_VAS_CHECK_TRANSFER_OK_RESPONSE = 0x2810, - SMSG_VAS_GET_QUEUE_MINUTES_RESPONSE = 0x280E, - SMSG_VAS_GET_SERVICE_STATUS_RESPONSE = 0x280D, - SMSG_VAS_PURCHASE_COMPLETE = 0x27E8, - SMSG_VAS_PURCHASE_STATE_UPDATE = 0x27E7, + SMSG_USE_EQUIPMENT_SET_RESULT = 0x274B, + SMSG_VAS_CHECK_TRANSFER_OK_RESPONSE = 0x2812, + SMSG_VAS_GET_QUEUE_MINUTES_RESPONSE = 0x2810, + SMSG_VAS_GET_SERVICE_STATUS_RESPONSE = 0x280F, + SMSG_VAS_PURCHASE_COMPLETE = 0x27EA, + SMSG_VAS_PURCHASE_STATE_UPDATE = 0x27E9, SMSG_VENDOR_INVENTORY = 0x25B7, SMSG_VIGNETTE_UPDATE = 0x3008, - SMSG_VOICE_CHANNEL_INFO_RESPONSE = 0x2814, - SMSG_VOICE_CHANNEL_STT_TOKEN_RESPONSE = 0x2873, - SMSG_VOICE_LOGIN_RESPONSE = 0x2813, + SMSG_VOICE_CHANNEL_INFO_RESPONSE = 0x2816, + SMSG_VOICE_CHANNEL_STT_TOKEN_RESPONSE = 0x2875, + SMSG_VOICE_LOGIN_RESPONSE = 0x2815, SMSG_VOID_ITEM_SWAP_RESPONSE = 0x2DA4, SMSG_VOID_STORAGE_CONTENTS = 0x2DA1, SMSG_VOID_STORAGE_FAILED = 0x2DA0, @@ -2061,24 +2077,28 @@ enum OpcodeServer : uint16 SMSG_WAIT_QUEUE_FINISH = 0x256F, SMSG_WAIT_QUEUE_UPDATE = 0x256E, SMSG_WARDEN3_DATA = 0x2577, - SMSG_WARDEN3_DISABLED = 0x2817, - SMSG_WARDEN3_ENABLED = 0x2816, - SMSG_WARFRONT_COMPLETE = 0x2758, + SMSG_WARDEN3_DISABLED = 0x2819, + SMSG_WARDEN3_ENABLED = 0x2818, + SMSG_WARFRONT_COMPLETE = 0x275A, SMSG_WARGAME_REQUEST_OPPONENT_RESPONSE = 0x2934, SMSG_WARGAME_REQUEST_SUCCESSFULLY_SENT_TO_OPPONENT = 0x2933, - SMSG_WEATHER = 0x26A3, - SMSG_WEEKLY_REWARDS_PROGRESS_RESULT = 0x286A, - SMSG_WEEKLY_REWARDS_RESULT = 0x2868, - SMSG_WEEKLY_REWARD_CLAIM_RESULT = 0x2869, + SMSG_WEATHER = 0x26A5, + SMSG_WEEKLY_REWARDS_PROGRESS_RESULT = 0x286C, + SMSG_WEEKLY_REWARDS_RESULT = 0x286A, + SMSG_WEEKLY_REWARD_CLAIM_RESULT = 0x286B, SMSG_WHO = 0x2BAE, - SMSG_WHO_IS = 0x26A2, - SMSG_WILL_BE_KICKED_FOR_ADDED_SUBSCRIPTION_TIME = 0x281B, + SMSG_WHO_IS = 0x26A4, + SMSG_WILL_BE_KICKED_FOR_ADDED_SUBSCRIPTION_TIME = 0x281D, SMSG_WORLD_QUEST_UPDATE_RESPONSE = 0x300F, SMSG_WORLD_SERVER_INFO = 0x25AC, - SMSG_WOW_ENTITLEMENT_NOTIFICATION = 0x2860, - SMSG_XP_AWARDED_FROM_CURRENCY = 0x28A7, + SMSG_WOW_ENTITLEMENT_NOTIFICATION = 0x2862, + SMSG_WOW_LABS_NOTIFY_PLAYERS_MATCH_END = 0x2892, + SMSG_WOW_LABS_NOTIFY_PLAYERS_MATCH_STATE_CHANGED = 0x2893, + SMSG_WOW_LABS_PARTY_ERROR = 0x289B, + SMSG_WOW_LABS_SET_PREDICTION_CIRCLE = 0x2894, + SMSG_XP_AWARDED_FROM_CURRENCY = 0x28AA, SMSG_XP_GAIN_ABORTED = 0x25C8, - SMSG_XP_GAIN_ENABLED = 0x27A3, + SMSG_XP_GAIN_ENABLED = 0x27A5, SMSG_ZONE_UNDER_ATTACK = 0x2BB5, // Opcodes that are not generated automatically diff --git a/src/server/shared/Networking/Http/HttpSocket.h b/src/server/shared/Networking/Http/HttpSocket.h index 2bd18efd565..9a333a8e779 100644 --- a/src/server/shared/Networking/Http/HttpSocket.h +++ b/src/server/shared/Networking/Http/HttpSocket.h @@ -53,7 +53,8 @@ class Socket : public BaseSocket<Derived, Impl::BoostBeastSocketWrapper> using SocketBase = BaseSocket<Derived, Impl::BoostBeastSocketWrapper>; public: - explicit Socket(boost::asio::ip::tcp::socket&& socket) + template<typename... Args> + explicit Socket(boost::asio::ip::tcp::socket&& socket, Args&&...) : SocketBase(std::move(socket)) { } Socket(Socket const& other) = delete; diff --git a/src/tools/map_extractor/loadlib/DBFilesClientList.h b/src/tools/map_extractor/loadlib/DBFilesClientList.h index c1c319a85cd..3b95d9104e8 100644 --- a/src/tools/map_extractor/loadlib/DBFilesClientList.h +++ b/src/tools/map_extractor/loadlib/DBFilesClientList.h @@ -31,6 +31,7 @@ DB2FileInfo const DBFilesClientList[] = { 4572795, "ActionBarGroup.db2" }, { 4572797, "ActionBarGroupEntry.db2" }, { 1115949, "AdventureJournal.db2" }, + { 5599873, "AdventureJournalItem.db2" }, { 1267070, "AdventureMapPOI.db2" }, { 1710672, "AlliedRace.db2" }, { 5156218, "AltMinimap.db2" }, @@ -55,6 +56,7 @@ DB2FileInfo const DBFilesClientList[] = { 1093406, "AreaGroupMember.db2" }, { 1000630, "AreaPOI.db2" }, { 1000631, "AreaPOIState.db2" }, + { 5634691, "AreaPOIUiWidgetSet.db2" }, { 1353545, "AreaTable.db2" }, { 1354401, "AreaTrigger.db2" }, { 1352378, "AreaTriggerActionSet.db2" }, @@ -112,6 +114,7 @@ DB2FileInfo const DBFilesClientList[] = { 801583, "BattlePetState.db2" }, { 801584, "BattlePetVisual.db2" }, { 1360265, "BattlemasterList.db2" }, + { 5549327, "BattlepayCurrency.db2" }, { 1525607, "BeamEffect.db2" }, { 3491563, "BeckonTrigger.db2" }, { 1467254, "BoneWindModifierModel.db2" }, @@ -702,6 +705,7 @@ DB2FileInfo const DBFilesClientList[] = { 1716803, "RelicSlotTierRequirement.db2" }, { 1671256, "RelicTalent.db2" }, { 3743117, "RenownRewards.db2" }, + { 5662591, "RenownRewardsPlunderstorm.db2" }, { 1133729, "ResearchBranch.db2" }, { 1133711, "ResearchField.db2" }, { 1134090, "ResearchProject.db2" }, @@ -964,6 +968,7 @@ DB2FileInfo const DBFilesClientList[] = { 1279741, "VehicleUIIndSeat.db2" }, { 1279740, "VehicleUIIndicator.db2" }, { 892861, "Vignette.db2" }, + { 5634692, "VignetteUiWidgetSet.db2" }, { 1634482, "VirtualAttachment.db2" }, { 1634480, "VirtualAttachmentCustomization.db2" }, { 1267067, "VocalUISounds.db2" }, |