add asset stuff

This commit is contained in:
quaK 2022-05-27 06:25:26 +03:00
parent f285aa2d59
commit 2e5f3c3d82
8 changed files with 803 additions and 64 deletions

View File

@ -0,0 +1,128 @@
#include <std_include.hpp>
#include "loader/component_loader.hpp"
#include "fastfiles.hpp"
#include "game/game.hpp"
#include "command.hpp"
#include "console.hpp"
#include <utils/hook.hpp>
#include <utils/string.hpp>
#include <utils/concurrency.hpp>
//#define XFILE_DEBUG
namespace fastfiles
{
static utils::concurrency::container<std::string> current_fastfile;
std::string get_current_fastfile()
{
std::string fastfile_copy;
current_fastfile.access([&](std::string& fastfile)
{
fastfile_copy = fastfile;
});
return fastfile_copy;
}
namespace
{
utils::hook::detour db_try_load_x_file_internal_hook;
utils::hook::detour db_init_load_x_file_hook;
utils::hook::detour db_load_x_zone_hook;
utils::hook::detour db_find_xasset_header_hook;
void db_try_load_x_file_internal_stub(const char* zone_name, const unsigned int zone_flags,
const bool is_base_map, const bool was_paused, const int failure_mode)
{
current_fastfile.access([&](std::string& fastfile)
{
fastfile = zone_name;
});
return db_try_load_x_file_internal_hook.invoke<void>(zone_name, zone_flags, is_base_map, was_paused, failure_mode);
}
void db_init_load_x_file_stub(const char* name, std::uint64_t offset)
{
console::info("Loading xfile %s\n", name);
return db_init_load_x_file_hook.invoke<void>(name, offset);
}
void db_load_x_zone_stub(const char* parent_name, unsigned int zone_flags, bool is_base_map, int failure_mode)
{
console::info("Loading zone %s\n", parent_name);
return db_load_x_zone_hook.invoke<void>(parent_name, zone_flags, is_base_map, failure_mode);
}
game::XAssetHeader db_find_xasset_header_stub(game::XAssetType type, const char* name, int allow_create_default)
{
auto result = db_find_xasset_header_hook.invoke<game::XAssetHeader>(type, name, allow_create_default);
if (!result.data)
{
console::error("Error: Could not find %s \"%s\"",
game::g_assetNames[static_cast<unsigned int>(type)],
name);
}
return result;
}
}
class component final : public component_interface
{
public:
void post_unpack() override
{
db_try_load_x_file_internal_hook.create(0x3BBC40_b, db_try_load_x_file_internal_stub);
#if defined(DEBUG) and defined (XFILE_DEBUG)
db_init_load_x_file_hook.create(0x9E8D10_b, db_init_load_x_file_stub);
#else
db_load_x_zone_hook.create(0x3BA920_b, db_load_x_zone_stub);
#endif
db_find_xasset_header_hook.create(0xA76E00_b, db_find_xasset_header_stub);
command::add("listassetpool", [](const command::params& params)
{
if (params.size() < 2)
{
console::info("listassetpool <poolnumber> [filter]: list all the assets in the specified pool\n");
for (auto i = 0; i < game::XAssetType::ASSET_TYPE_COUNT; i++)
{
console::info("%d %s\n", i, game::g_assetNames[i]);
}
return;
}
const auto type = static_cast<game::XAssetType>(atoi(params.get(1)));
if (type < 0 || type >= game::XAssetType::ASSET_TYPE_COUNT)
{
console::error("Invalid pool passed must be between [%d, %d]\n", 0, game::XAssetType::ASSET_TYPE_COUNT - 1);
return;
}
console::info("Listing assets in pool %s\n", game::g_assetNames[type]);
const std::string filter = params.get(2);
game::DB_EnumXAssets(type, [type, filter](const game::XAssetHeader header)
{
const game::XAsset asset{ type, header };
const auto* const asset_name = game::DB_GetXAssetName(&asset);
if (!filter.empty() && !utils::string::match_compare(filter, asset_name, false))
{
return;
}
console::info("%s\n", asset_name);
});
});
}
};
}
REGISTER_COMPONENT(fastfiles::component)

View File

@ -0,0 +1,6 @@
#pragma once
namespace fastfiles
{
std::string get_current_fastfile();
}

View File

@ -21,6 +21,7 @@ namespace logger
utils::hook::call(0xC6E57A_b, sys_print_stub); // SV_SpawnServer: completed\n
utils::hook::call(0xC13641_b, sys_print_stub); // SV_CmdsSP_MapRestart: completed\n
utils::hook::jump(0x519772_b, sys_print_stub); // OnlineAutoTest:: Map load success. Server is listen.\n
utils::hook::call(0xB712BA_b, sys_print_stub); // G_SaveError
}
void R_WarnOncePerFrame_print_stub(char* buffer, size_t buffer_length, char* msg, va_list va)

View File

@ -158,7 +158,7 @@ namespace scheduler
schedule([=]()
{
const auto dw_init = game::Live_SyncOnlineDataFlags(0) == 0;
if (dw_init && game::Sys_IsDatabaseReady2())
if (dw_init)
{
once(callback, type, delay);
return cond_end;

View File

@ -38,9 +38,102 @@ namespace game
return 0; //return *mp::virtualLobby_loaded == 1;
}
bool Sys_IsDatabaseReady2()
const char* g_assetNames[ASSET_TYPE_COUNT] =
{
return game::databaseCompletedEvent2;
"physicslibrary",
"physicssfxeventasset",
"physicsvfxeventasset",
"physicsasset",
"physicsfxpipeline",
"physicsfxshape",
"xanim",
"xmodelsurfs",
"xmodel",
"mayhem", // not confirmed
"material",
"computeshader",
"vertexshader",
"hullshader",
"domainshader",
"pixelshader",
"vertexdecl",
"techset",
"image",
"soundglobals",
"soundbank",
"soundbankpatch",
"col_map",
"com_map",
"glass_map",
"aipaths",
"navmesh",
"map_ents",
"fx_map",
"gfx_map",
"gfx_map_trzone",
"iesprofile",
"lightdef",
"ui_map",
"animclass",
"playeranim",
"gesture",
"localize",
"attachment",
"weapon",
"vfx",
"impactfx", // not confirmed
"surfacefx", // not confirmed
"aitype", // not confirmed
"mptype", // not confirmed
"character", // not confirmed
"xmodelalias", // not confirmed
"ASSET_TYPE_UNKNOWN", // not confirmed
"rawfile",
"scriptfile",
"stringtable",
"leaderboarddef",
"virtualleaderboarddef",
"structureddatadef",
"ddl",
"tracer",
"vehicle",
"addon_map_ents",
"netconststrings",
"luafile",
"scriptable",
"equipsndtable",
"vectorfield",
"particlesimanimation",
"streaminginfo",
"laser",
"ttf",
"suit",
"suitanimpackage",
"spaceshiptarget",
"rumble",
"rumblegraph",
"animpkg",
"sfxpkg",
"vfxpkg",
"behaviortree",
"animarchetype",
"proceduralbones",
"reticle",
"gfxlightmap",
};
const char* DB_GetXAssetName(const XAsset* asset)
{
return DB_GetXAssetHeaderName(asset->type, asset->header);
}
void DB_EnumXAssets(const std::int32_t type, const std::function<void(XAssetHeader)>& callback)
{
DB_EnumXAssets_FastFile(type, static_cast<void(*)(XAssetHeader, void*)>([](XAssetHeader header, void* data)
{
const auto& cb = *static_cast<const std::function<void(XAssetHeader)>*>(data);
cb(header);
}), &callback);
}
namespace environment

View File

@ -50,7 +50,9 @@ namespace game
bool VirtualLobby_Loaded();
bool Sys_IsDatabaseReady2();
extern const char* g_assetNames[ASSET_TYPE_COUNT];
const char* DB_GetXAssetName(const XAsset* asset);
void DB_EnumXAssets(const std::int32_t type, const std::function<void(XAssetHeader)>& callback);
}
uintptr_t operator"" _b(const uintptr_t ptr);

View File

@ -326,13 +326,87 @@ namespace game
{
enum XAssetType : std::int32_t
{
ASSET_TYPE_PHYSPRESET = 0,
ASSET_TYPE_PHYSICSLIBRARY = 0,
ASSET_TYPE_PHYSICS_SFX_EVENT_ASSET = 1,
ASSET_TYPE_PHYSICS_VFX_EVENT_ASSET = 2,
ASSET_TYPE_PHYSICSASSET = 3,
ASSET_TYPE_PHYSICS_FX_PIPELINE = 4,
ASSET_TYPE_PHYSICS_FX_SHAPE = 5,
ASSET_TYPE_XANIMPARTS = 6,
ASSET_TYPE_XMODEL_SURFS = 7,
ASSET_TYPE_XMODEL = 8,
ASSET_TYPE_MAYHEM = 9, // not confirmed
ASSET_TYPE_MATERIAL = 10,
ASSET_TYPE_FX = 41,
ASSET_TYPE_COMPUTESHADER = 11,
ASSET_TYPE_VERTEXSHADER = 12,
ASSET_TYPE_HULLSHADER = 13,
ASSET_TYPE_DOMAINSHADER = 14,
ASSET_TYPE_PIXELSHADER = 15,
ASSET_TYPE_VERTEXDECL = 16,
ASSET_TYPE_TECHNIQUE_SET = 17,
ASSET_TYPE_IMAGE = 18,
ASSET_TYPE_SOUND_GLOBALS = 19,
ASSET_TYPE_SOUND_BANK = 20,
ASSET_TYPE_SOUND_BANK_TRANSIENT = 21,
ASSET_TYPE_CLIPMAP = 22,
ASSET_TYPE_COMWORLD = 23,
ASSET_TYPE_GLASSWORLD = 24,
ASSET_TYPE_PATHDATA = 25,
ASSET_TYPE_NAVMESH = 26,
ASSET_TYPE_MAP_ENTS = 27,
ASSET_TYPE_FXWORLD = 28,
ASSET_TYPE_GFXWORLD = 29,
ASSET_TYPE_GFXWORLD_TRANSIENT_ZONE = 30,
ASSET_TYPE_IESPROFILE = 31,
ASSET_TYPE_LIGHT_DEF = 32,
ASSET_TYPE_UI_MAP = 33,
ASSET_TYPE_ANIMCLASS = 34,
ASSET_TYPE_PLAYERANIM = 35,
ASSET_TYPE_GESTURE = 36,
ASSET_TYPE_LOCALIZE_ENTRY = 37,
ASSET_TYPE_ATTACHMENT = 38,
ASSET_TYPE_WEAPON = 39,
ASSET_TYPE_VFX = 40,
ASSET_TYPE_IMPACT_FX = 41, // not confirmed
ASSET_TYPE_SURFACE_FX = 42, // not confirmed
ASSET_TYPE_AITYPE = 43, // not confirmed
ASSET_TYPE_MPTYPE = 44, // not confirmed
ASSET_TYPE_CHARACTER = 45, // not confirmed
ASSET_TYPE_XMODELALIAS = 46, // not confirmed
ASSET_TYPE_UNKNOWN = 47, // not confirmed
ASSET_TYPE_RAWFILE = 48,
ASSET_TYPE_SCRIPTFILE = 49,
ASSET_TYPE_STRINGTABLE = 50,
ASSET_TYPE_LEADERBOARD = 51,
ASSET_TYPE_VIRTUAL_LEADERBOARD = 52,
ASSET_TYPE_STRUCTUREDDATADEF = 53,
ASSET_TYPE_DDL = 54,
ASSET_TYPE_TRACER = 55,
ASSET_TYPE_VEHICLE = 56,
ASSET_TYPE_ADDON_MAP_ENTS = 57,
ASSET_TYPE_NET_CONST_STRINGS = 58,
ASSET_TYPE_LUA_FILE = 59,
ASSET_TYPE_SCRIPTABLE = 60,
ASSET_TYPE_FONT = 66,
ASSET_TYPE_EQUIPMENT_SND_TABLE = 61,
ASSET_TYPE_VECTORFIELD = 62,
ASSET_TYPE_PARTICLE_SIM_ANIMATION = 63,
ASSET_TYPE_STREAMING_INFO = 64,
ASSET_TYPE_LASER = 65,
ASSET_TYPE_TTF = 66,
ASSET_TYPE_SUIT = 67,
ASSET_TYPE_SUITANIMPACKAGE = 68,
ASSET_TYPE_SPACESHIPTARGET = 69,
ASSET_TYPE_RUMBLE = 70,
ASSET_TYPE_RUMBLE_GRAPH = 71,
ASSET_TYPE_ANIM_PACKAGE = 72,
ASSET_TYPE_SFX_PACKAGE = 73,
ASSET_TYPE_VFX_PACKAGE = 74,
ASSET_TYPE_BEHAVIOR_TREE = 75,
ASSET_TYPE_ANIMARCHETYPE = 76,
ASSET_TYPE_XANIM_PROCEDURALBONES = 77,
ASSET_TYPE_RETICLE = 78,
ASSET_TYPE_GFXLIGHTMAP = 79,
ASSET_TYPE_COUNT = 80
};
struct Material
@ -405,6 +479,30 @@ namespace game
char strippingType;
const char* buffer;
};
union XAssetHeader
{
Material* material;
RawFile* rawfile;
ScriptFile* scriptfile;
StringTable* stringTable;
LuaFile* luaFile;
void* data;
};
struct XAsset
{
XAssetType type;
XAssetHeader header;
};
struct DBFile
{
char name[64];
void* handle;
char __pad[0x60];
};
static_assert(sizeof(DBFile) == 0xA8);
}
using namespace assets;
@ -442,6 +540,9 @@ namespace game
BD_LOBBY_PROTOCOL_ERROR = 0x71,
BD_LOBBY_FAILED_TO_DECODE_UTF8 = 0x72,
BD_LOBBY_ASCII_EXPECTED = 0x73,
BD_INVALID_CONTEXT = 0x74,
BD_LOBBY_METHOD_DISABLED = 0x75,
BD_LOBBY_MIGRATION_FAILURE = 0x76,
BD_ASYNCHRONOUS_ERROR = 0xC8,
BD_STREAMING_COMPLETE = 0xC9,
BD_MEMBER_NO_PROPOSAL = 0x12C,
@ -462,6 +563,31 @@ namespace game
BD_INVALID_TEAM_PROFILE_QUERY_ID = 0x13B,
BD_TEAMNAME_TOO_SHORT = 0x13C,
BD_UNIQUE_PROFILE_DATA_EXISTS_ALREADY = 0x13D,
BD_APPLICATION_EXISTS = 0x13E,
BD_APPLICATIONS_MAX_EXCEEDED = 0x13F,
BD_PAGE_SIZE_LIMIT_EXCEEDED = 0x140,
BD_APPLICATION_REJECTED_EXISTS = 0x141,
BD_APPLICATION_WITHDRAWN_EXISTS = 0x142,
BD_APPLICATION_DOES_NOT_EXIST = 0x143,
BD_APPLICATION_INVALID_STATE = 0x144,
BD_MEMBER_BAN_EXISTS = 0x145,
BD_MEMBER_BAN_DOES_NOT_EXIST = 0x146,
BD_OWNER_BAN_FORBIDDEN = 0x147,
BD_INVALID_ACCOUNT_TYPE = 0x148,
BD_CONFIGURED_ACCOUNT_TYPE_NOT_FOUND = 0x149,
BD_OWNER_OF_NON_EMPTY_TEAM = 0x14A,
BD_CANNOT_APPLY_TO_PIRIVATE_TEAM = 0x14B,
BD_MEMBER_IS_OWNER = 0x15E,
BD_AUTO_JOINING_DISABLED = 0x15F,
BD_TEAM_SHOWCASE_DISABLED = 0x160,
BD_INVALID_FILTER = 0x162,
BD_INVALID_TEAM_LEADERBOARD = 0x163,
BD_TEAM_LEADERBOARD_LOADING = 0x164,
BD_TEAM_SHOWCASE_COUNT_EXCEEDED = 0x165,
BD_USER_ALREADY_TEAM_OWNER = 0x16A,
BD_UPPER_TEAM_MEMBER_LIMIT_EXCEEDED = 0x16C,
BD_TEAM_MEMBER_LIMIT_NOT_SUPPORTED = 0x16D,
BD_MISMATCHED_TEAM_PROFILE_COLLISION_FIELD = 0x16E,
BD_INVALID_LEADERBOARD_ID = 0x190,
BD_INVALID_STATS_SET = 0x191,
BD_EMPTY_STATS_SET_IGNORED = 0x193,
@ -483,7 +609,15 @@ namespace game
BD_ENTITLEMENTS_NAMED_KEY_ERROR = 0x1A3,
BD_TOO_MANY_ENTITY_IDS_REQUESTED = 0x1A4,
BD_STATS_READ_FAILED = 0x1A5,
BD_STATS_INVALID_WRITE_TO_VIRTUAL_LEADERBOARD = 0x1A6,
BD_STATS_INVALID_WRITE_TYPE_TO_MULTIRANK_LB = 0x1A7,
BD_STATS_INVALID_EXCLUDED_COLUMN = 0x1A8,
BD_STATS_INVALID_INCLUDED_COLUMN = 0x1A9,
BD_STATS_WRITE_NO_SCRIPT_MODULE = 0x1AA,
BD_STATS_WRITE_SCRIPT_MODULE_ERROR = 0x1AB,
BD_NON_READ_ON_READ_ONLY_LEADERBOARD = 0x1AC,
BD_INVALID_TITLE_ID = 0x1F4,
BD_DOWN_FOR_MAINTENANCE = 0x1F5,
BD_MESSAGING_INVALID_MAIL_ID = 0x258,
BD_SELF_BLOCK_NOT_ALLOWED = 0x259,
BD_GLOBAL_MESSAGE_ACCESS_DENIED = 0x25A,
@ -524,13 +658,38 @@ namespace game
BD_AUTH_TENCENT_TICKET_EXPIRED = 0x2DA,
BD_AUTH_PS3_SERVICE_ID_MISMATCH = 0x2DB,
BD_AUTH_CODOID_NOT_WHITELISTED = 0x2DC,
BD_AUTH_PLATFORM_TOKEN_ERROR = 0x2DD,
BD_AUTH_PLATFORM_TOKEN_RETRIEVAL_ERROR = 0x2DD,
BD_AUTH_JSON_FORMAT_ERROR = 0x2DE,
BD_AUTH_REPLY_CONTENT_ERROR = 0x2DF,
BD_AUTH_THIRD_PARTY_TOKEN_EXPIRED = 0x2E0,
BD_AUTH_PLATFORM_TOKEN_EXPIRED = 0x2E0,
BD_AUTH_CONTINUING = 0x2E1,
BD_AUTH_PLATFORM_DEVICE_ID_ERROR = 0x2E4,
BD_AUTH_PLATFORM_TOKEN_DECRYPTION_ERROR = 0x2E2,
BD_AUTH_PLATFORM_TOKEN_SIGNATURE_ERROR = 0x2E3,
BD_AUTH_DNS_RESOLUTION_ERROR = 0x2E4,
BD_AUTH_SSL_CERTIFICATE_ERROR = 0x2E5,
BD_AUTH_SERVER_UNAVAILABLE_ERROR = 0x2E6,
BD_AUTH_ENVIRONMENT_ERROR = 0x2E7,
BD_AUTH_PLATFORM_DEVICE_ID_ERROR = 0x2E8,
BD_AUTH_UNO_APP_ID_MISMATCH = 0x2E9,
BD_AUTH_UNICODE_DECODE_ERROR = 0x2EA,
BD_AUTH_STEAM_PUBLISHER_BAN = 0x2EB,
BD_AUTH_TICKET_DECRYPTION_ERROR = 0x2EC,
BD_AUTH_SIGNATURE_ERROR = 0x2ED,
BD_AUTH_REQUEST_TIMEOUT_ERROR = 0x2EE,
BD_AUTH_REQUEST_ABORTED_ERROR = 0x2EF,
BD_AUTH_SINGLE_IDENTITY_FLOW_DISABLED_ERROR = 0x2F0,
BD_AUTH_SINGLE_IDENTITY_TOKEN_MISSING_ERROR = 0x2F1,
BD_AUTH_SINGLE_IDENTITY_TOKEN_EXPIRED_ERROR = 0x2F2,
BD_AUTH_SINGLE_IDENTITY_TOKEN_INVALID_ERROR = 0x2F3,
BD_AUTH_SWITCH_TOKEN_VERIFICATION_FAILED = 0x2F4,
BD_AUTH_SWITCH_AUTHENTICATION_FAILED = 0x2F5,
BD_AUTH_BAD_DEVICE_KEY = 0x2F6,
BD_AUTH_BAD_DEVICE_TITLE_KEY = 0x2F7,
BD_AUTH_TSIG_EXPIRED = 0x2F8,
BD_AUTH_TOO_MANY_REQUESTS = 0x2F9,
BD_AUTH_COUNTRY_BLOCKED_ERROR = 0x30D,
BD_NO_PROFILE_INFO_EXISTS = 0x320,
BD_PROFILE_COLLISION_FIELD_MISMATCH = 0x321,
BD_FRIENDSHIP_NOT_REQUSTED = 0x384,
BD_NOT_A_FRIEND = 0x385,
BD_SELF_FRIENDSHIP_NOT_ALLOWED = 0x387,
@ -540,11 +699,17 @@ namespace game
BD_FRIENDS_FULL = 0x38C,
BD_FRIENDS_NO_RICH_PRESENCE = 0x38D,
BD_RICH_PRESENCE_TOO_LARGE = 0x38E,
BD_FRIENDS_REMOTE_FULL = 0x38F,
BD_NO_FILE = 0x3E8,
BD_PERMISSION_DENIED = 0x3E9,
BD_FILESIZE_LIMIT_EXCEEDED = 0x3EA,
BD_FILENAME_MAX_LENGTH_EXCEEDED = 0x3EB,
BD_EXTERNAL_STORAGE_SERVICE_ERROR = 0x3EC,
BD_VALIDATION_ERROR = 0x3ED,
BD_VALIDATION_TOKEN_ERROR = 0x3EE,
BD_VALIDATION_TOKEN_GENERATION_ERROR = 0x3EF,
BD_VALIDATION_TOKEN_VERIFICATION_ERROR = 0x3F0,
BD_STORAGE_SERVER_UNREACHABLE = 0x3F1,
BD_CHANNEL_DOES_NOT_EXIST = 0x44D,
BD_CHANNEL_ALREADY_SUBSCRIBED = 0x44E,
BD_CHANNEL_NOT_SUBSCRIBED = 0x44F,
@ -560,11 +725,10 @@ namespace game
BD_CHANNEL_PUBLIC_PASSWORD_NOT_ALLOWED = 0x459,
BD_CHANNEL_PUBLIC_KICK_NOT_ALLOWED = 0x45A,
BD_CHANNEL_MUTED = 0x45B,
BD_EVENT_DESC_TRUNCATED = 0x4B0,
BD_CONTENT_UNLOCK_UNKNOWN_ERROR = 0x514,
BD_UNLOCK_KEY_INVALID = 0x515,
BD_UNLOCK_KEY_ALREADY_USED_UP = 0x516,
BD_SHARED_UNLOCK_LIMIT_REACHED = 0x517,
BD_CONTENT_UNLOCK_LIMIT_REACHED = 0x517,
BD_DIFFERENT_HARDWARE_ID = 0x518,
BD_INVALID_CONTENT_OWNER = 0x519,
BD_CONTENT_UNLOCK_INVALID_USER = 0x51A,
@ -591,6 +755,7 @@ namespace game
BD_CONTENTSTREAMING_INVALID_APPLE_RECEIPT = 0x7DA,
BD_CONTENTSTREAMING_APPLE_STORE_NOT_AVAILABLE = 0x7DB,
BD_CONTENTSTREAMING_APPLE_RECEIPT_FILENAME_MISMATCH = 0x7DC,
BD_CONTENTSTREAMING_BATCH_DOWNLOAD_PARTIAL_FAILURE = 0x7DD,
BD_CONTENTSTREAMING_HTTP_ERROR = 0x7E4,
BD_CONTENTSTREAMING_FAILED_TO_START_HTTP = 0x7E5,
BD_CONTENTSTREAMING_LOCALE_INVALID = 0x7E6,
@ -601,56 +766,27 @@ namespace game
BD_MAX_NUM_TAGS_EXCEEDED = 0x82A,
BD_TAGGED_COLLECTION_DOES_NOT_EXIST = 0x82B,
BD_EMPTY_TAG_ARRAY = 0x82C,
BD_SEARCH_SERVER_UNREACHABLE = 0x82F,
BD_ENTITY_ID_NOT_SPECIFIED = 0x830,
BD_INVALID_QUERY_ID = 0x834,
BD_NO_ENTRY_TO_UPDATE = 0x835,
BD_SESSION_INVITE_EXISTS = 0x836,
BD_INVALID_SESSION_ID = 0x837,
BD_ATTACHMENT_TOO_LARGE = 0x838,
BD_INVALID_FIELD_VALUE = 0x839,
BD_REQUEST_SESSION_NOT_SUPPORTED = 0x83A,
BD_INVALID_GROUP_ID = 0xAF0,
BD_MAIL_INVALID_MAIL_ID_ERROR = 0xB55,
BD_UCD_SERVICE_ERROR = 0xC80,
BD_UCD_SERVICE_DISABLED = 0xC81,
BD_UCD_UNINTIALIZED_ERROR = 0xC82,
BD_UCD_ACCOUNT_ALREADY_REGISTERED = 0xC83,
BD_UCD_ACCOUNT_NOT_REGISTERED = 0xC84,
BD_UCD_AUTH_ATTEMPT_FAILED = 0xC85,
BD_UCD_ACCOUNT_LINKING_ERROR = 0xC86,
BD_UCD_ENCRYPTION_ERROR = 0xC87,
BD_UCD_ACCOUNT_DATA_INVALID = 0xC88,
BD_UCD_ACCOUNT_DATA_INVALID_FIRSTNAME = 0xC89,
BD_UCD_ACCOUNT_DATA_INVALID_LASTNAME = 0xC8A,
BD_UCD_ACCOUNT_DATA_INVALID_DOB = 0xC8B,
BD_UCD_ACCOUNT_DATA_INVALID_EMAIL = 0xC8C,
BD_UCD_ACCOUNT_DATA_INVALID_COUNTRY = 0xC8D,
BD_UCD_ACCOUNT_DATA_INVALID_POSTCODE = 0xC8E,
BD_UCD_ACCOUNT_DATA_INVALID_PASSWORD = 0xC8F,
BD_UCD_ACCOUNT_NAME_ALREADY_RESISTERED = 0xC94,
BD_UCD_ACCOUNT_EMAIL_ALREADY_RESISTERED = 0xC95,
BD_UCD_GUEST_ACCOUNT_AUTH_CONFLICT = 0xC96,
BD_MAIL_PERMISSION_DENIED_ERROR = 0xB56,
BD_TWITCH_SERVICE_ERROR = 0xC1D,
BD_TWITCH_ACCOUNT_ALREADY_LINKED = 0xC1E,
BD_TWITCH_NO_LINKED_ACCOUNT = 0xC1F,
BD_YOUTUBE_SERVICE_ERROR = 0xCE5,
BD_YOUTUBE_SERVICE_COMMUNICATION_ERROR = 0xCE6,
BD_YOUTUBE_USER_DENIED_AUTHORIZATION = 0xCE7,
BD_YOUTUBE_AUTH_MAX_TIME_EXCEEDED = 0xCE8,
BD_YOUTUBE_USER_UNAUTHORIZED = 0xCE9,
BD_YOUTUBE_UPLOAD_MAX_TIME_EXCEEDED = 0xCEA,
BD_YOUTUBE_DUPLICATE_UPLOAD = 0xCEB,
BD_YOUTUBE_FAILED_UPLOAD = 0xCEC,
BD_YOUTUBE_ACCOUNT_ALREADY_REGISTERED = 0xCED,
BD_YOUTUBE_ACCOUNT_NOT_REGISTERED = 0xCEE,
BD_YOUTUBE_CONTENT_SERVER_ERROR = 0xCEF,
BD_YOUTUBE_UPLOAD_DOES_NOT_EXIST = 0xCF0,
BD_YOUTUBE_NO_LINKED_ACCOUNT = 0xCF1,
BD_YOUTUBE_DEVELOPER_TAGS_INVALID = 0xCF2,
BD_TWITTER_AUTH_ATTEMPT_FAILED = 0xDAD,
BD_TWITTER_AUTH_TOKEN_INVALID = 0xDAE,
BD_TWITTER_UPDATE_LIMIT_REACHED = 0xDAF,
BD_TWITTER_UNAVAILABLE = 0xDB0,
BD_TWITTER_ERROR = 0xDB1,
BD_TWITTER_TIMED_OUT = 0xDB2,
BD_TWITTER_DISABLED_FOR_USER = 0xDB3,
BD_TWITTER_ACCOUNT_AMBIGUOUS = 0xDB4,
BD_TWITTER_MAXIMUM_ACCOUNTS_REACHED = 0xDB5,
BD_TWITTER_ACCOUNT_NOT_REGISTERED = 0xDB6,
@ -670,10 +806,29 @@ namespace game
BD_FACEBOOK_INVALID_NUM_PICTURES_REQUESTED = 0xE1C,
BD_FACEBOOK_VIDEO_DOES_NOT_EXIST = 0xE1D,
BD_FACEBOOK_ACCOUNT_ALREADY_REGISTERED = 0xE1E,
BD_FACEBOOK_TARGET_OBJECT_ID_INVALID = 0xE1F,
BD_FACEBOOK_NO_SUCH_ACCOUNT = 0xE20,
BD_APNS_INVALID_PAYLOAD = 0xE74,
BD_APNS_INVALID_TOKEN_LENGTH_ERROR = 0xE76,
BD_MAX_CONSOLEID_LENGTH_EXCEEDED = 0xEE1,
BD_MAX_WHITELIST_LENGTH_EXCEEDED = 0xEE2,
BD_TOTP_CHALLENGE_FAILED = 0xEE3,
BD_NO_TOTP_ACCOUNT = 0xEE4,
BD_EXTENDED_AUTH_INFO_ERROR = 0xEE5,
BD_EXTENDED_AUTH_INFO_LENGTH_EXCEEDED = 0xEE6,
BD_EXTENDED_AUTH_INFO_EXPIRED = 0xEE7,
BD_WHITELIST_TRAILING_WHITE_SPACE = 0xEE8,
BD_WHITELIST_MESSAGE_LENGTH_LIMIT_EXCEEDED = 0xEE9,
BD_BNET_SESSION_TOKEN_ERROR = 0xEEA,
BD_BNET_SESSION_CLAIMS_ERROR = 0xEEB,
BD_TRIAL_STATUS_ERROR = 0xEEC,
BD_TRIAL_STATUS_INVALID_DATA_ERROR = 0xEED,
BD_TRIAL_STATUS_UNAVAILABLE_ERROR = 0xEEE,
BD_LOGON_SCHEDULE_ERROR = 0xEF6,
BD_LOGON_SCHEDULE_INVALID_TIME_RANGE_ERROR = 0xEF7,
BD_LOGON_SCHEDULE_INVALID_DAY_ERROR = 0xEF8,
BD_LOGON_SCHEDULE_INVALID_UPDATE_TYPE_ERROR = 0xEF9,
BD_LOGON_SCHEDULE_UPDATE_FAILED_ERROR = 0xEFA,
BD_USERGROUP_NAME_ALREADY_EXISTS = 0x1770,
BD_INVALID_USERGROUP_ID = 0x1771,
BD_USER_ALREADY_IN_USERGROUP = 0x1772,
@ -683,10 +838,16 @@ namespace game
BD_USERGROUP_NAME_TOO_SHORT = 0x1776,
BD_RICH_PRESENCE_DATA_TOO_LARGE = 0x1A90,
BD_RICH_PRESENCE_TOO_MANY_USERS = 0x1A91,
BD_RICH_PRESENCE_ERROR = 0x1A92,
BD_RICH_PRESENCE_FEATURE_DISABLED_ERROR = 0x1A93,
BD_RICH_PRESENCE_TOO_MANY_UPDATES = 0x1A94,
BD_RICH_PRESENCE_SUBSCRIPTIONS_ERROR = 0x1A9A,
BD_RICH_PRESENCE_TOO_MANY_SUBSCRIPTIONS_ERROR = 0x1A9B,
BD_PRESENCE_DATA_TOO_LARGE = 0x283C,
BD_PRESENCE_TOO_MANY_USERS = 0x283D,
BD_USER_LOGGED_IN_OTHER_TITLE = 0x283E,
BD_USER_NOT_LOGGED_IN = 0x283F,
BD_PRESENCE_INVALID_PLATFORM = 0x2840,
BD_SUBSCRIPTION_TOO_MANY_USERS = 0x1B58,
BD_SUBSCRIPTION_TICKET_PARSE_ERROR = 0x1B59,
BD_CODO_ID_INVALID_DATA = 0x1BBC,
@ -695,6 +856,21 @@ namespace game
BD_CODO_ID_NOT_IN_WHITELIST = 0x1BBF,
BD_TLOG_MESSAGE_TRANSFORMATION_ERROR = 0x1BC0,
BD_REWARDS_NOT_ENABLED = 0x1BC1,
BD_REWARDS_INVALID_RULE = 0x1BC2,
BD_REDEEM_NAME_CHANGE_INTERNAL_ERROR = 0x1BC3,
BD_REDEEM_NAME_CHANGE_INVALID_ITEM = 0x1BC4,
BD_REDEEM_NAME_CHANGE_UNAVAILABLE_ITEM = 0x1BC5,
BD_REDEEM_NAME_CHANGE_IN_PROGRESS = 0x1BC6,
BD_REDEEM_NAME_CHANGE_INACTIVE_REQUEST = 0x1BC7,
BD_REDEEM_NAME_CHANGE_INVALID_NAME = 0x1BC8,
BD_REDEEM_NAME_CHANGE_SAME_NAME = 0x1BC9,
BD_REDEEM_NAME_CHANGE_DUPLICATE_NAME = 0x1BCA,
BD_TENCENT_NO_APPLICABLE_REWARDS = 0x1BCB,
BD_TLOG_MESSAGE_DECOMPRESSION_ERROR = 0x1BCC,
BD_REDEEM_TEAM_NAME_CHANGE_INTERNAL_ERROR = 0x1BCD,
BD_REDEEM_TEAM_NAME_CHANGE_INVALID_ITEM = 0x1BCE,
BD_REDEEM_TEAM_NAME_CHANGE_UNAVAILABLE_ITEM = 0x1BCF,
BD_TENCENT_REWARD_NOT_FOUND = 0x1BD0,
BD_MARKETPLACE_ERROR = 0x1F40,
BD_MARKETPLACE_RESOURCE_NOT_FOUND = 0x1F41,
BD_MARKETPLACE_INVALID_CURRENCY = 0x1F42,
@ -710,6 +886,76 @@ namespace game
BD_MARKETPLACE_VALIDATION_ERROR = 0x1F4C,
BD_MARKETPLACE_TENCENT_PAYMENT_ERROR = 0x1F4D,
BD_MARKETPLACE_SKU_NOT_COUPON_ENABLED_ERROR = 0x1F4E,
BD_MARKETPLACE_TRANSACTION_ERROR = 0x1F4F,
BD_MARKETPLACE_RECEIPT_USED = 0x1F50,
BD_MARKETPLACE_INVALID_RECEIPT = 0x1F51,
BD_MARKETPLACE_STEAM_REQUEST_FAILED = 0x1F52,
BD_MARKETPLACE_STEAM_NOT_APPROVED = 0x1F53,
BD_MARKETPLACE_PRODUCT_NOT_FOUND_IN_FP = 0x1F54,
BD_MARKETPLACE_STEAM_ALREADY_FINALIZED = 0x1F54,
BD_MARKETPLACE_STEAM_BAD_ORDER_ID = 0x1F55,
BD_MARKETPLACE_STEAM_CURRENCY_ERROR = 0x1F56,
BD_MARKETPLACE_PSN_INVALID_NP_TITLE_ID = 0x1F65,
BD_MARKETPLACE_PSN_INVALID_NP_AUTH_CODE = 0x1F57,
BD_MARKETPLACE_PSN_INVALID_ENTITLEMENT_ID = 0x1F58,
BD_MARKETPLACE_PSN_ENTITLEMENT_NOT_PRESENT = 0x1F59,
BD_MARKETPLACE_PSN_INTERNAL_ERROR = 0x1F5A,
BD_MARKETPLACE_XB1_UNAUTHORISED_ERROR = 0x1F5B,
BD_MARKETPLACE_XB1_REQUEST_REJECTED_ERROR = 0x1F5C,
BD_MARKETPLACE_XB1_INSUFFICIENT_QUANTITY_ERROR = 0x1F5D,
BD_MARKETPLACE_XB1_BAD_DELEGATION_TOKEN_ERROR = 0x1F5E,
BD_MARKETPLACE_XB1_REQUEST_FAILED_ERROR = 0x1F5F,
BD_MARKETPLACE_X360_REQUEST_FAILED = 0x1F60,
BD_MARKETPLACE_X360_ITEM_NOT_PRESENT = 0x1F61,
BD_MARKETPLACE_X360_CONNECTION_ERROR = 0x1F62,
BD_MARKETPLACE_USAGE_TIME_ERROR = 0x1F63,
BD_MARKETPLACE_DURABLE_ALREADY_GRANTED = 0x1F64,
BD_MARKETPLACE_FIRST_PARTY_DURABLE_EXISTS = 0x1F66,
BD_MARKETPLACE_ITEM_LIMIT_REACHED = 0x1F67,
BD_MARKETPLACE_OVER_ITEM_MAX_QUANTITY_ERROR = 0x1F69,
BD_MARKETPLACE_INSUFFICIENT_ITEM_QUANTITY = 0x1F6A,
BD_MARKETPLACE_ENTITY_NOT_ENABLED = 0x1F6B,
BD_MARKETPLACE_MISCONFIGURED = 0x1F6C,
BD_MARKETPLACE_COUPON_NOT_CLAIMED_OR_FOUND = 0x1F6D,
BD_MARKETPLACE_INVALID_DISCOUNT = 0x1F6E,
BD_MARKETPLACE_INVALID_STORE_VERSION = 0x1F6F,
BD_MARKETPLACE_SKU_SOLD_OUT = 0x1F72,
BD_MARKETPLACE_WIIU_AUTH_FAILED = 0x1F73,
BD_MARKETPLACE_WIIU_INVALID_PARAMETER = 0x1F74,
BD_MARKETPLACE_WIIU_TAX_LOCATION_NOT_SPECIFIED = 0x1F75,
BD_MARKETPLACE_WIIU_ACCOUNT_ERROR = 0x1F76,
BD_MARKETPLACE_WIIU_PURCHASING_ERROR = 0x1F77,
BD_MARKETPLACE_WIIU_BALANCE_ERROR = 0x1F78,
BD_MARKETPLACE_WIIU_SERVER_ERROR = 0x1F79,
BD_MARKETPLACE_WIIU_REQUEST_FAILED = 0x1F7A,
BD_MARKETPLACE_WIIU_SERVER_MAINTENANCE = 0x1F7B,
BD_MARKETPLACE_WIIU_SERVICE_TERMINATED = 0x1F7C,
BD_MARKETPLACE_WIIU_ITEM_NOT_PRESENT = 0x1F7D,
BD_MARKETPLACE_WIIU_TAX_LOCATION_INVALID = 0x1F7E,
BD_MARKETPLACE_XB1_DURABLE_NOT_PRESENT = 0x1F7F,
BD_MARKETPLACE_EXPECTED_PRICE_MISMATCH = 0x1F80,
BD_MARKETPLACE_ITEM_NOT_CONSUMABLE = 0x1F81,
BD_MARKETPLACE_IDEMPOTENT_REQUEST_COLLISION = 0x1F82,
BD_MARKETPLACE_COUPON_NOT_STARTED = 0x1F83,
BD_MARKETPLACE_MULTIPLE_OPERATIONS_ERROR = 0x1F84,
BD_MARKETPLACE_MISSING_PAYMENT_PROVIDER_CURRENCY_ERROR = 0x1F85,
BD_MARKETPLACE_WIIU_LANGUAGE_NOT_SUPPORTED = 0x1F86,
BD_MARKETPLACE_PAWN_CHOICE_EXPECTED = 0x1F87,
BD_MARKETPLACE_PAWN_CHOICE_UNSUPPORTED = 0x1F88,
BD_MARKETPLACE_INVALID_REWARD_ERROR = 0x1F89,
BD_MARKETPLACE_MISSING_REQUIRED_ITEMS_ERROR = 0x1F8A,
BD_MARKETPLACE_MISSING_REQUIRED_CURRENCY_BALANCES_ERROR = 0x1F8B,
BD_MARKETPLACE_MISSING_REQUIRED_ENTITLEMENTS_ERROR = 0x1F8C,
BD_MARKETPLACE_UNREACHABLE_ERROR = 0x1F8D,
BD_MARKETPLACE_ITEM_ALREADY_PERMANENTLY_OWNED = 0x1F97,
BD_MARKETPLACE_EXCEEDED_ITEM_MAX_USAGE_TIME = 0x1F98,
BD_MARKETPLACE_BNET_REQUEST_FAILED = 0x1F99,
BD_MARKETPLACE_WEGAME_SERVICE_ERROR = 0x1F9A,
BD_MARKETPLACE_WEGAME_REQUEST_FAILED = 0x1F9B,
BD_MARKETPLACE_SWITCH_SERVICE_ERROR = 0x1F9C,
BD_MARKETPLACE_SWITCH_REQUEST_FAILED = 0x1F9D,
BD_COMMS_SERVICE_NOT_AVAILABLE_ERROR = 0x28A0,
BD_COMMS_CLIENT_ERROR = 0x28A1,
BD_LEAGUE_INVALID_TEAM_SIZE = 0x1FA4,
BD_LEAGUE_INVALID_TEAM = 0x1FA5,
BD_LEAGUE_INVALID_SUBDIVISION = 0x1FA6,
@ -725,26 +971,44 @@ namespace game
BD_LEAGUE_SUBDIVISION_UNRANKED = 0x200B,
BD_LEAGUE_CROSS_TEAM_STATS_WRITE_PREVENTED = 0x200C,
BD_LEAGUE_INVALID_STATS_SEASON = 0x200D,
BD_COMMERCE_ERROR = 0x206C,
BD_COMMERCE_RESOURCE_NOT_FOUND = 0x206D,
BD_COMMERCE_STORAGE_INVALID_PARAMETER = 0x206E,
BD_COMMERCE_APPLICATION_INVALID_PARAMETER = 0x206F,
BD_COMMERCE_RESOURCE_CONFLICT = 0x2070,
BD_COMMERCE_STORAGE_ERROR = 0x2071,
BD_COMMERCE_INTEGRITY_ERROR = 0x2072,
BD_COMMERCE_MMP_SERVICE_ERROR = 0x2073,
BD_COMMERCE_PERMISSION_DENIED = 0x2074,
BD_COMMERCE_INSUFFICIENT_FUNDS_ERROR = 0x2075,
BD_COMMERCE_UNKNOWN_CURRENCY = 0x2076,
BD_COMMERCE_INVALID_RECEIPT = 0x2077,
BD_COMMERCE_RECEIPT_USED = 0x2078,
BD_COMMERCE_TRANSACTION_ALREADY_APPLIED = 0x2079,
BD_COMMERCE_INVALID_CURRENCY_TYPE = 0x207A,
BD_CONNECTION_COUNTER_ERROR = 0x20D0,
BD_LINKED_ACCOUNTS_INVALID_CONTEXT = 0x2198,
BD_LINKED_ACCOUNTS_INVALID_PLATFORM = 0x2199,
BD_LINKED_ACCOUNTS_LINKED_ACCOUNTS_FETCH_ERROR = 0x219A,
BD_LINKED_ACCOUNTS_INVALID_ACCOUNT = 0x219B,
BD_LINKED_ACCOUNTS_INVALID_TOKEN = 0x219C,
BD_QUEUED_MATCHING_ERROR = 0x2260,
BD_QUEUED_MATCHING_NOT_FOUND = 0x2261,
BD_QUEUED_MATCHING_WRONG_QUEUE_TYPE = 0x2262,
BD_QUEUED_MATCHING_INVALID_QUEUE_ID = 0x2263,
BD_LOGIN_QUEUE_NO_ERROR = 0x22C4,
BD_LOGIN_QUEUE_ENVIRONMENT_ERROR = 0x22C5,
BD_LOGIN_QUEUE_UNKNOWN_ERROR = 0x22C6,
BD_LOGIN_QUEUE_BAD_REQUEST = 0x22C7,
BD_LOGIN_QUEUE_SERVER_UNAVAILABLE_ERROR = 0x22C8,
BD_LOGIN_QUEUE_SSL_CERTIFICATE_ERROR = 0x22C9,
BD_LOGIN_QUEUE_DNS_RESOLUTION_ERROR = 0x22CA,
BD_LOGIN_QUEUE_JSON_FORMAT_ERROR = 0x22CB,
BD_LOGIN_QUEUE_TICKET_PARSE_ERROR = 0x22CC,
BD_LOGIN_QUEUE_INVALID_TITLE_ID = 0x22CD,
BD_LOGIN_QUEUE_INTERNAL_ERROR = 0x22CE,
BD_LOGIN_QUEUE_CLOSED_QUEUE = 0x22CF,
BD_LOGIN_QUEUE_INVALID_QUEUE_ID = 0x22D0,
BD_LOGIN_QUEUE_NOT_FOUND = 0x22D1,
BD_LOGIN_QUEUE_REPLY_CONTENT_ERROR = 0x22D2,
BD_LOGIN_QUEUE_TOO_MANY_REQUESTS = 0x22D3,
BD_VOTING_MAX_VALUE_EXCEEDED = 0x2328,
BD_VOTING_INVALID_GROUP_NAME = 0x2329,
BD_VOTING_IN_PROGRESS = 0x232A,
BD_VOTING_NON_EXISTENT_GROUP = 0x232B,
BD_USER_GENERATED_STATS_ERROR = 0x238C,
BD_INVALID_ACCESS_TO_USER_GENERATED_LB_ERROR = 0x238D,
BD_INVALID_ACCESS_TO_NON_USER_GENERATED_LB_ERROR = 0x238E,
BD_SUB_LEADERBOARD_ID_MISMATCH_ERROR = 0x238D,
BD_PUBLISHER_VARIABLES_SERVICE_ERROR = 0x251C,
BD_PUBLISHER_VARIABLES_NOT_FOUND = 0x251D,
BD_PUBLISHER_VARIABLES_INVALID_NAMESPACE = 0x251E,
BD_PUBLISHER_VARIABLES_INVALID_GROUP_ID = 0x251F,
BD_GMSG_INVALID_CATEGORY_ID = 0x27D8,
BD_GMSG_CATEGORY_MEMBERSHIPS_LIMIT = 0x27D9,
BD_GMSG_NONMEMBER_POST_DISALLOWED = 0x27DA,
@ -755,7 +1019,250 @@ namespace game
BD_GMSG_USER_PERCATEGORY_POST_RATE_EXCEEDED = 0x27DF,
BD_GMSG_USER_GLOBAL_POST_RATE_EXCEEDED = 0x27E0,
BD_GMSG_GROUP_POST_RATE_EXCEEDED = 0x27E1,
BD_MAX_ERROR_CODE = 0x27E2,
BD_GMSG_GROUP_LIMIT_REACHED = 0x27E2,
BD_GMSG_GROUP_MEMBERSHIP_LIMIT_REACHED = 0x27E3,
BD_SERVER_INVENTORY_SERVER_ERROR = 0x2904,
BD_SERVER_INVENTORY_SERVER_ALLOCATED = 0x2905,
BD_SERVER_INVENTORY_ENTRY_DOES_NOT_EXIST = 0x2906,
BD_SERVER_INVENTORY_DATA_LAYER_ERROR = 0x2907,
BD_SERVER_INVENTORY_NOT_ENABLED = 0x2908,
BD_SERVER_INVENTORY_NO_SERVER_ALLOCATED = 0x2909,
BD_SERVER_INVENTORY_MAX_REGISTRATION_LENGTH_EXCEEDED = 0x290A,
BD_SERVER_INVENTORY_REGISTRATION_INVALID_CHARACTERS = 0x290B,
BD_SERVER_INVENTORY_INVALID_PARAMETER = 0x290D,
BD_CODO_CLAN_NO_TEMP_RESERVATION = 0x2AF8,
BD_CODO_CLAN_TOO_MANY_MEMBERSHIPS = 0x2AF9,
BD_CODO_CLAN_UNEXPECTED_FOUNDATION_STATE = 0x2AFA,
BD_CODO_CLAN_UNABLE_TO_FIND_NAME = 0x2AFB,
BD_CODO_CLAN_INTERNAL_MARKETPLACE_ERROR = 0x2AFC,
BD_CODO_CLAN_INSUFFICIENT_FUNDS = 0x2AFD,
BD_CODO_CLAN_UNSATISFIED_PRECONDITION = 0x2AFE,
BD_CODO_CLAN_NO_CLAN = 0x2AFF,
BD_CODO_CLAN_NO_CHANNEL = 0x2B00,
BD_CODO_CLAN_NOT_A_CLAN_MEMBER = 0x2B01,
BD_CODO_CLAN_DISBAND_TOO_MANY_MEMBERS = 0x2B04,
BD_CODO_CLAN_DISBAND_TOO_SOON = 0x2B05,
BD_NO_SUCH_ROLE = 0x2EE0,
BD_NO_SUCH_PERMISSION = 0x2EE1,
BD_BAD_ROLE_SPECIFICATION = 0x2EE2,
BD_BAD_PERMISSION_SPECIFICATION = 0x2EE3,
BD_REDEEMABLE_CODE_REGISTRY_SERVICE_GENERIC_ERROR = 0x300D,
BD_REDEEMABLE_CODE_MARKETPLACE_SERVICE_GENERIC_ERROR = 0x300E,
BAD_PAYLOAD_ERROR = 0x300F,
INVALID_PAYLOAD_SIGNATURE_ERROR = 0x3010,
GENERATE_PAYLOAD_SIGNATURE_ERROR = 0x3011,
BD_REDEEMABLE_CODE_EXPIRED_CLIENT_TRANSACTION_ID = 0x3012,
BD_REDEEMABLE_CODE_NOT_FOUND = 0x3071,
BD_REDEEMABLE_CODE_USE_LIMIT_EXCEEDED = 0x3072,
BD_REDEEMABLE_CODE_ALREADY_USED_BY_USER = 0x3073,
BD_REDEEMABLE_CODE_EXPIRED = 0x3074,
INVALID_CLIENT_TRANSACTION_ID = 0x3075,
BD_ACHIEVEMENTS_ENGINE_CLIENT_ERROR = 0x30D5,
BD_ACHIEVEMENTS_ENGINE_SERVER_ERROR = 0x30D6,
BD_ACHIEVEMENTS_ENGINE_INSUFFICIENT_BALANCE_ERROR = 0x30D7,
BD_ACHIEVEMENTS_ENGINE_ACTIVATION_NOT_SCHEDULED_ERROR = 0x30D8,
BD_ACHIEVEMENTS_ENGINE_ACTIVE_LIMIT_EXCEEDED = 0x30D9,
BD_ACHIEVEMENTS_ENGINE_DUPLICATE_REQUEST_ID = 0x30DA,
BD_ACHIEVEMENTS_ENGINE_MULTI_STATUS = 0x30DB,
BD_MW4_BACKEND_SERVICE_NOT_AVAILABLE = 0x4CF5,
BD_MW4_BACKEND_RESOURCE_NOT_FOUND = 0x4CF6,
BD_MW4_BACKEND_BAD_REQUEST = 0x4CF7,
BD_CLANS_PROPOSAL_DOES_NOT_EXIST = 0x4D08,
BD_CLANS_GROUP_NAME_NOT_UNIQUE = 0x4D09,
BD_CLANS_MAX_GROUP_MEMBERSHIPS_REACHED = 0x4D0A,
BD_CLANS_MAX_GROUP_OWNERSHIPS_REACHED = 0x4D0B,
BD_CLANS_GROUP_DOES_NOT_EXIST = 0x4D0C,
BD_CLANS_GROUP_PERMISSION_DENIED = 0x4D0D,
BD_CLANS_VULGAR_GROUP_NAME = 0x4D0E,
BD_CLANS_GROUP_NAME_TOO_SHORT = 0x4D0F,
BD_CLANS_GROUP_ATTACHMENT_LIMIT_EXCEEDED = 0x4D10,
BD_CLANS_GROUP_FULL = 0x4D11,
BD_CLANS_MAX_OUTGOING_PROPOSALS_REACHED = 0x4D12,
BD_CLANS_MEMBER_BAN_EXISTS = 0x4D13,
BD_CLANS_GROUP_KIND_NOT_CONFIGURED = 0x4D14,
BD_CLANS_INVALID_ROOT_KIND = 0x4D15,
BD_CLANS_GROUP_FILE_DOES_NOT_EXIST = 0x4D16,
BD_CLANS_GROUP_FILE_COLLISION_FIELD_MISMATCH = 0x4D17,
BD_CLANS_BATCH_REQUEST_LIMIT_EXCEEDED = 0x4D18,
BD_CLANS_INVALID_PAGE_TOKEN = 0x4D19,
BD_CLANS_INVALID_GROUP_FILTER = 0x4D1A,
BD_CLANS_GROUP_TAG_NOT_UNIQUE = 0x4D1B,
BD_CLANS_GROUP_TAG_TOO_SHORT = 0x4D1C,
BD_CLANS_VULGAR_GROUP_TAG = 0x4D1D,
BD_REWARD_NO_REWARD_TOKEN_FOUND = 0x364C,
BD_REWARD_INVALID_ACHIEVEMENT_IDS_SPECIFIED = 0x364D,
BD_REWARD_CLIENT_ACHIEVEMENTS_NOT_ENABLED = 0x364E,
BD_REWARD_EVENTS_ERROR = 0x364F,
BD_REWARD_EVENTS_NOT_ENABLED = 0x3650,
BD_REWARD_EVENTS_RULES_ERROR = 0x3651,
BD_REWARD_EVENTS_DATA_ERROR = 0x3652,
BD_REWARD_EVENTS_TRANSACTION_ERROR = 0x3653,
BD_REWARD_CONFIGURATION_ERROR = 0x3654,
BD_REWARD_TOO_MANY_ACTIVE_CHALLENGES = 0x3655,
BD_REWARD_EVENTS_TRANSACTION_EXPIRED = 0x3656,
BD_REWARD_CHALLENGE_NOT_SCHEDULED = 0x3657,
BD_REWARD_CHALLENGE_ALREADY_COMPLETED = 0x3658,
BD_REWARD_CODO_TOO_MANY_REROLLS = 0x367E,
BD_REWARD_CODO_BAD_REROLL_PARAMS = 0x367F,
BD_UMBRELLA_PROVIDER_SERVER_ERROR = 0x36B0,
BD_UMBRELLA_PROVIDER_UNSUPPORTED_OPERATION = 0x36B1,
BD_UMBRELLA_ERROR = 0x36B2,
BD_UMBRELLA_INVALID_TITLE_ID = 0x36B3,
BD_UMBRELLA_INVALID_QUERY_STRING = 0x36B4,
BD_UMBRELLA_INVALID_DATA = 0x36B5,
BD_UMBRELLA_INVALID_CLIENT = 0x36B6,
BD_UMBRELLA_PROVIDER_NOT_SUPPORTED = 0x36B7,
BD_UMBRELLA_UNAUTHORIZED_ACCESS = 0x36B8,
BD_UMBRELLA_INVALID_TOKEN = 0x36B8,
BD_UMBRELLA_EXPIRED_PROVIDER_REFRESH_TOKEN = 0x36B9,
BD_UMBRELLA_NO_VALID_PROVIDER_TOKENS = 0x36BA,
BD_UMBRELLA_INVALID_LSG_TICKET = 0x36BB,
BD_UMBRELLA_TOKEN_NOT_FOUND = 0x36BC,
BD_UMBRELLA_USER_NOT_FOUND = 0x36BD,
BD_UMBRELLA_ACCOUNT_NOT_FOUND = 0x36BE,
BD_UMBRELLA_MERGE_CONFLICT = 0x36BF,
BD_UMBRELLA_PROVIDER_INACCESSIBLE = 0x36C0,
BD_UMBRELLA_MISSING_FIELD = 0x36C1,
BD_UMBRELLA_FIELD_INVALID = 0x36C2,
BD_UMBRELLA_PLAYER_BAN = 0x36C3,
BD_UMBRELLA_EXPIRED_TOKEN = 0x3719,
BD_UNO_ERROR = 0x3714,
BD_UNO_INVALID_DATA = 0x3715,
BD_UNO_INVALID_DATE_OF_BIRTH = 0x3716,
BD_UNO_UNAUTHORIZED_ACCESS = 0x3717,
BD_UNO_INVALID_TOKEN = 0x3718,
BD_UNO_EXPIRED_TOKEN = 0x3719,
BD_UNO_EMAIL_NOT_VERIFIED = 0x371A,
BD_UNO_TOS_VERSION_NOT_FOUND = 0x371B,
BD_UNO_TOS_CONTENT_NOT_FOUND = 0x371C,
BD_UNO_TOS_ALREADY_ACCEPTED = 0x371D,
BD_UNO_MISSING_FIELD = 0x371E,
BD_UNO_DNS_RESOLUTION_FAILED = 0x371F,
BD_UNO_FIELD_INVALID = 0x3720,
BD_UNO_INVALID_USERNAME = 0x3721,
BD_UNO_INVALID_PASSWORD = 0x3722,
BD_UNO_EMAIL_ALREADY_EXISTS = 0x3723,
BD_UNO_DESERIALIZATION_FAILURE = 0x3724,
BD_UMBRELLA_DESERIALIZATION_FAILURE = 0x3725,
BD_UNO_NO_RENAME_TOKENS = 0x3726,
BD_UNO_MARKETPLACE_ERROR = 0x3727,
BD_SI_ERROR = 0x3777,
BD_MATCH_SCHEDULER_ERROR = 0x3A98,
BD_MATCH_SCHEDULER_SCHEDULED_MATCH_DOES_NOT_EXIST = 0x3A99,
BD_MATCH_SCHEDULER_MAXIMUM_EVENTS_PER_MATCH_REACHED = 0x3A9A,
BD_MLG_ERROR = 0x3AFC,
BD_MLG_REMOTE_ERROR = 0x3AFD,
BD_CODO_AUTO_JOIN_LEVEL_NOT_MET = 0x4A9D,
BD_CODO_NOT_PERMITTED_TO_UPDATE_PROFILE_FIELD = 0x4A9E,
BD_CODO_INVALID_PROFILE_VALUE = 0x4A9F,
BD_CODO_PROFILE_COLUMN_DOES_NOT_EXIST = 0x4AA0,
BD_CODO_LOUDSPEAKER_INVALID_TOKEN = 0x4AA1,
BD_CODO_LOUDSPEAKER_INVALID_CATEGORY = 0x4AA2,
BD_CODO_RESETTABLE_STATS_NOT_CONFIGURED = 0x4AA3,
BD_CODO_REDEEM_INCREASE_TEAM_MEMBER_LIMIT_INVALID_ITEM = 0x4AAB,
BD_CODO_REDEEM_INCREASE_TEAM_MEMBER_LIMIT_INTERNAL_ERROR = 0x4AAC,
BD_CODO_REDEEM_INCREASE_TEAM_MEMBER_LIMIT_UNAVAILABLE_ITEM = 0x4AAD,
BD_PLAYER_VOTE_REJECTED = 0x5EED,
BD_AMM_NOT_LOBBY_HOST = 0x38A4,
BD_AMM_NOT_PARTY_HOST = 0x38A5,
BD_AMM_NOT_LOBBY_MEMBER = 0x38A6,
BD_AMM_INVALID_MATCHMAKING_ID = 0x38A7,
BD_AMM_INVALID_LOBBY_ID = 0x38A8,
BD_AMM_SEARCH_IN_PROGRESS = 0x38A9,
BD_AMM_USER_ALREADY_MATCHMAKING = 0x38AA,
BD_AMM_INVALID_TOKEN = 0x38AB,
BD_AMM_INVALID_DOCUMENT_FORMAT = 0x38AC,
BD_AMM_PLAYER_INFO_UNAVAILABLE = 0x38AD,
BD_AMM_REQUEST_DESERIALIZATION_FAILED = 0x38AE,
BD_AMM_INVALID_QOS_TRANSACTION_ID = 0x38AF,
BD_AMM_INVALID_USER_ID_IN_GUEST_SLOTS = 0x38B0,
BD_AMM_NO_BUILD_NAME_SET = 0x38B1,
BD_AMM_LOBBY_MERGED = 0x38B2,
BD_AMM_BACKOFF_REQUESTED = 0x38B3,
BD_AMM_PLAYER_INFO_INCOMPATIBLE_BUILDS = 0x38B4,
BD_AMM_INVALID_DC_QOS_ADDRESS = 0x38B5,
BD_AMM_INVALID_PLAYER_INFO_DC_QOS_SETTINGS = 0x38B6,
BD_AMM_INVALID_PLAYER_INFO_LISTEN_SERVER_SETTINGS = 0x38B7,
BD_AMM_MIGRATION_NOT_PERMITTED = 0x38B8,
BD_AMM_INVALID_LOBBY_MEMBER_STATUS_TRANSITION = 0x38B9,
BD_AMM_LOBBY_MEMBER_STATUS_REPORTED_FOR_UNKNOWN_PLAYER = 0x38BA,
BD_AMM_DEDI_SHUTDOWN_NOT_PERMITTED = 0x38BB,
BD_AMM_INVALID_USER_ID_IN_PLAYER_RULESET_PAYLOADS = 0x38BC,
BD_AMM_INVALID_MAP_PACK = 0x38BD,
BD_AMM_TOURNAMENT_PLAYER_NOT_IN_TOURNAMENT = 0x38BE,
BD_AMM_TOURNAMENT_DUPLICATE_ACK_JOIN = 0x38BF,
BD_AMM_TOURNAMENT_INVALID_TOURNAMENT_STATUS = 0x38C0,
BD_AMM_TOURNAMENT_INVALID_TOURNAMENT_ID = 0x38C1,
BD_AMM_TOURNAMENT_LOBBY_NOT_IN_ROUND = 0x38C2,
BD_AMM_TOURNAMENT_TEAM_NOT_IN_MATCH = 0x38C3,
BD_AMM_TOURNAMENT_PLAYER_NOT_IN_ROUND = 0x38C4,
BD_AMM_TOURNAMENT_INVALID_LOBBY_DOC = 0x38C5,
BD_AMM_TOURNAMENT_ELIMINATED_PLAYER = 0x38C6,
BD_AMM_TOURNAMENT_LOBBY_ID_NOT_IN_TOURNAMENT = 0x38C7,
BD_AMM_TOURNAMENT_MATCH_ALREADY_HAS_RESULT = 0x38C8,
BD_AMM_TOURNAMENT_MATCH_IN_PROGRESS = 0x38C9,
BD_AMM_TOURNAMENT_FULL = 0x38CA,
BD_CROSS_PLATFORM_FRIENDS_UNKNOWN_ERROR = 0x3E80,
BD_CROSS_PLATFORM_FRIENDS_SELF_FRIENDSHIP_NOT_ALLOWED = 0x3E81,
BD_CROSS_PLATFORM_FRIENDS_CALLER_FRIENDS_LIST_FULL = 0x3E82,
BD_CROSS_PLATFORM_FRIENDS_OTHER_PLAYER_FRIENDS_LIST_FULL = 0x3E83,
BD_CROSS_PLATFORM_FRIENDS_CALLER_OUTGOING_FRIEND_REQUESTS_FULL = 0x3E84,
BD_CROSS_PLATFORM_FRIENDS_OTHER_PLAYER_INCOMING_FRIEND_REQUESTS_FULL = 0x3E85,
BD_CROSS_PLATFORM_FRIENDS_INVALID_PAGE_TOKEN = 0x3E86,
BD_CROSS_PLATFORM_FRIENDS_FRIENDSHIP_ALREADY_EXISTS = 0x3E87,
BD_CROSS_PLATFORM_FRIENDS_INVITE_ALREADY_EXISTS = 0x3E88,
BD_CROSS_PLATFORM_FRIENDS_BACKEND_UNAVAILABLE_ERROR = 0x3E89,
BD_CROSS_PLATFORM_FRIENDS_INVITED_USER_IS_BLOCKED = 0x3E8A,
BD_CROSS_PLATFORM_FRIENDS_CALLER_IS_BLOCKED = 0x3E8B,
BD_CROSS_PLATFORM_FRIENDS_BLOCKED_USER_LIST_FULL = 0x3E8C,
BD_CROSS_PLATFORM_FRIENDS_USER_IS_ALREADY_BLOCKED = 0x3E8D,
BD_CROSS_PLATFORM_USERLISTS_UNKNOWN_ERROR = 0x3F48,
BD_CROSS_PLATFORM_USERLISTS_LIST_DOES_NOT_EXIST = 0x3F49,
BD_CROSS_PLATFORM_USERLISTS_LIST_ALREADY_EXISTS = 0x3F4A,
BD_CROSS_PLATFORM_USERLISTS_INVALID_PAGE_TOKEN = 0x3F4B,
BD_CROSS_PLATFORM_PRESENCE_UNKNOWN_ERROR = 0x4010,
BD_CROSS_PLATFORM_PRESENCE_INVALID_PAGE_TOKEN = 0x4011,
BD_CROSS_PLATFORM_PRESENCE_SUBSCRIPTIONS_LIST_FULL = 0x4012,
BD_CROSS_PLATFORM_PRESENCE_SUBSCRIBERS_LIST_FULL = 0x4013,
BD_CROSS_PLATFORM_PRESENCE_INVALID_MAXIMUM_PAGE_SIZE = 0x4014,
BD_CROSS_PLATFORM_PRESENCE_EXCEEDED_MAX_USERS_IN_REQUEST = 0x4015,
BD_CROSS_TITLE_LOCALIZED_STRINGS_UNKNOWN_ERROR = 0x4074,
BD_CROSS_TITLE_LOCALIZED_STRINGS_STRING_SET_DOES_NOT_EXIST_ERROR = 0x4075,
BD_CROSS_TITLE_LOCALIZED_STRINGS_INVALID_FORMAT_STRING_ERROR = 0x4076,
BD_CROSS_TITLE_LOCALIZED_STRINGS_INVALID_STRING_REF_ERROR = 0x4077,
BD_CROSS_TITLE_LOCALIZED_STRINGS_NOT_ENOUGH_STRING_REFS_ERROR = 0x4078,
BD_OBJECTSTORE_PROXY_OBJECT_NOT_FOUND = 0x4E20,
BD_OBJECTSTORE_PROXY_INVALID_ACCESS = 0x4E21,
BD_OBJECTSTORE_PROXY_SERVICE_UNAVAILABLE = 0x4E22,
BD_OBJECTSTORE_PROXY_OBJECT_TOO_BIG_FOR_REMAINING_SIZE_WINDOW_SPACE_ERROR = 0x4E23,
BD_OBJECTSTORE_PROXY_OBJECT_TOO_BIG_FOR_SIZE_WINDOW_ERROR = 0x4E24,
BD_OBJECTSTORE_HTTP_ERROR = 0x4E84,
BD_OBJECTSTORE_FAILED_TO_START_HTTP = 0x4E85,
BD_AB_TESTING_OBJECT_NOT_FOUND = 0x4BC8,
BD_AB_TESTING_INVALID_ACCESS = 0x4BC9,
BD_AB_TESTING_SERVICE_UNAVAILABLE = 0x4BCA,
BD_REST_ERROR_TEMPORARY_REDIRECT = 0x639C,
BD_REST_ERROR_PERMANENT_REDIRECT = 0x639D,
BD_REST_ERROR_NOT_MODIFIED = 0x639E,
BD_REST_ERROR_BAD_REQUEST = 0x639F,
BD_REST_ERROR_UNAUTHORIZED = 0x63A0,
BD_REST_ERROR_FORBIDDEN = 0x63A1,
BD_REST_ERROR_NOT_FOUND = 0x63A2,
BD_REST_ERROR_METHOD_NOT_ALLOWED = 0x63A3,
BD_REST_ERROR_NOT_ACCEPTABLE = 0x63A4,
BD_REST_ERROR_REQUEST_TIMEOUT = 0x63A5,
BD_REST_ERROR_CONFLICT = 0x63A6,
BD_REST_ERROR_PRECONDITION_FAILED = 0x63A7,
BD_REST_ERROR_PAYLOAD_TOO_LARGE = 0x63A8,
BD_REST_ERROR_REQUEST_URI_TOO_LONG = 0x63A9,
BD_REST_ERROR_REQUESTED_RANGE_NOT_SATISFIABLE = 0x63AA,
BD_REST_ERROR_INTERNAL_SERVER_ERROR = 0x63AB,
BD_REST_ERROR_BAD_GATEWAY = 0x63AC,
BD_REST_ERROR_SERVICE_UNAVAILABLE = 0x63AD,
BD_REST_ERROR_GATEWAY_TIMEOUT = 0x63AE,
BD_REST_ERROR_REQUEST_CANCELLED = 0x63AF,
BD_LOGIN_UNKOWN_ERROR = 0x7724,
BD_MAX_ERROR_CODE = 0x7725,
};
enum bdNATType : uint8_t

View File

@ -18,6 +18,10 @@ namespace game
WEAK symbol<void(const char* text_in)> Cmd_TokenizeString{ 0xB7D850 };
WEAK symbol<void()> Cmd_EndTokenizeString{ 0xB7CC90 };
WEAK symbol<const char* (XAssetType type, XAssetHeader header)> DB_GetXAssetHeaderName{ 0x9E5BA0 };
WEAK symbol<bool(std::int32_t, void(__cdecl*)(XAssetHeader, void*), const void*)> DB_EnumXAssets_FastFile{ 0xA76CE0 };
WEAK symbol<bool(XAssetType type, const char* name)> DB_IsXAssetDefault{ 0xA780D0 };
WEAK symbol<dvar_t* (const char* name, bool value,
unsigned int flags, const char* description)> Dvar_RegisterBool{ 0xCEB380 };
WEAK symbol<dvar_t* (const char* name, int value, int min, int max,
@ -68,8 +72,6 @@ namespace game
* Variables
**************************************************************/
WEAK symbol<bool> databaseCompletedEvent2{ 0x5685979 };
WEAK symbol<CmdArgs> sv_cmd_args{ 0x5D65C20 };
WEAK symbol<CmdArgs> cmd_args{ 0x5D65B70 };
WEAK symbol<cmd_function_s*> cmd_functions{ 0x5D65CC8 };