From f58dbf7756ec4b778df42e809f668a78f1fc351d Mon Sep 17 00:00:00 2001 From: adevopg <133045315+adevopg@users.noreply.github.com> Date: Sun, 12 Jul 2026 19:44:16 +0200 Subject: [PATCH] Port to WoW client 12.0.7 (build 68453) Adapt CypherCore from 11.2.5.63796 to 12.0.7.68453 using TrinityCore as byte-exact reference. - Fase 1: build gate 68453 (build_info + build_auth_key SQL, keys from TC) - Fase 2: Opcodes.cs remapped by name to 12.0.7 values - Fase 3: 32 DB2 structs + HotfixDatabase.cs SELECTs realigned; fixed ReputationManager/SpellInfo refs - Fase 4: UpdateFields ported (GameObject/Conversation/AreaTrigger/Player/ Unit/ActivePlayer + nested VisibleItem/QuestLog/BitVectors/CraftingOrderItem/ SkillInfo) - Critical protocol fixes: CreateObject header +3 bits (Room/Decor/MeshObject); EntityFragment enum renumbered to 12.0.7 (was 11.2.5 values, breaking every object packet) - New-entity foundation: TypeId/TypeMask/HighGuid.MeshObject, fragment tags - MeshObject entity scaffold (Midnight features are wire-format only) Builds clean (dotnet build -c Release, 0 errors). Co-Authored-By: Claude Opus 4.8 (1M context) --- PORTING_12.0.7_FASE5.md | 114 + Source/Framework/Constants/Network/Opcodes.cs | 4076 ++++++++-------- Source/Framework/Constants/ObjectConst.cs | 9 +- .../Database/Databases/HotfixDatabase.cs | 128 +- Source/Game/DataStorage/Structs/B_Records.cs | 1 + Source/Game/DataStorage/Structs/C_Records.cs | 8 +- Source/Game/DataStorage/Structs/E_Records.cs | 2 +- Source/Game/DataStorage/Structs/F_Records.cs | 8 +- Source/Game/DataStorage/Structs/G_Records.cs | 2 +- Source/Game/DataStorage/Structs/I_Records.cs | 14 +- Source/Game/DataStorage/Structs/L_Records.cs | 4 +- Source/Game/DataStorage/Structs/M_Records.cs | 4 +- Source/Game/DataStorage/Structs/S_Records.cs | 15 +- Source/Game/DataStorage/Structs/T_Records.cs | 2 + Source/Game/DataStorage/Structs/U_Records.cs | 1 - Source/Game/Entities/MeshObject.cs | 177 + Source/Game/Entities/Object/ObjectGuid.cs | 5 + .../Entities/Object/Update/UpdateFields.cs | 4280 +++++++++++++---- .../Object/Update/WowCSEntityDefinitions.cs | 73 +- Source/Game/Entities/Object/WorldObject.cs | 11 +- Source/Game/Maps/Map.cs | 5 + Source/Game/Spells/SpellInfo.cs | 2 +- .../auth/master/2026_07_12_00_auth.sql | 23 + 23 files changed, 5858 insertions(+), 3106 deletions(-) create mode 100644 PORTING_12.0.7_FASE5.md create mode 100644 Source/Game/Entities/MeshObject.cs create mode 100644 sql/updates/auth/master/2026_07_12_00_auth.sql diff --git a/PORTING_12.0.7_FASE5.md b/PORTING_12.0.7_FASE5.md new file mode 100644 index 000000000..e18d2a17a --- /dev/null +++ b/PORTING_12.0.7_FASE5.md @@ -0,0 +1,114 @@ +# Fase 5 — Poner el cliente 12.0.7 (build 68453) a funcionar en CypherCore + +Guía práctica para validar el port 11.2.5 → 12.0.7. El core ya compila con Fases 1-4 aplicadas. + +--- + +## 0. Prerequisitos +- **Cliente WoW 12.0.7 build 68453** completo (CASC descargado). +- **MySQL/MariaDB** corriendo en `127.0.0.1:3306`. +- **Core compilado** → `Build/Release/AnyCPU/` (`WorldServer.exe`, `BNetServer.exe`). +- **Extractores de TrinityCore master** (soportan 12.0.7). Descarga los binarios de TC o compílalos: `mapextractor`, `vmap4extractor` + `vmap4assembler`, `mmaps_generator`, y el extractor de DB2/DBC/CASC. + +> El core NO trae extractores propios: usa los de TrinityCore (ver README de Cypher). + +--- + +## 1. Extraer datos del cliente 12.0.7 +Copia los extractores de TC a la **raíz del cliente 12.0.7** y ejecútalos ahí, en este orden: + +1. **DB2/DBC + mapas** (`mapextractor`) → genera `dbc/` y `maps/`. +2. **VMaps** (`vmap4extractor` luego `vmap4assembler`) → genera `vmaps/`. +3. **MMaps** (`mmaps_generator`) → genera `mmaps/`. (Lento; puedes lanzarlo por mapa.) + +Copia las carpetas resultantes (`dbc`, `maps`, `vmaps`, `mmaps`) al **DataDir** del WorldServer (por defecto `Build/Release/AnyCPU/Data/`). + +> ⚠️ Los `.db2` extraídos DEBEN ser del cliente 12.0.7. Si extraes con datos de otra versión, las structs DB2 (Fase 3) no cuadrarán. + +--- + +## 2. Bases de datos (4) +Cypher usa 4 DBs: **auth**, **characters**, **world**, **hotfixes**. + +1. Crea las 4 vacías en MySQL: + ```sql + CREATE DATABASE auth; CREATE DATABASE characters; CREATE DATABASE world; CREATE DATABASE hotfixes; + ``` +2. **auth + characters**: se auto-aplican desde `sql/base/` al arrancar (ver §3, `Updates.AutoSetup=1`). +3. **world + hotfixes**: ⚠️ **NO están en `sql/base/`** — necesitas el **dump completo de world/hotfixes de CypherCore** (su equivalente al TDB de TrinityCore). Sin la world DB no hay mundo. Consíguelo del release de CypherCore correspondiente e impórtalo. +4. **Mi SQL de Fase 1** (`sql/updates/auth/master/2026_07_12_00_auth.sql`) lo aplica el updater solo — mete build 68453 en `build_info`/`build_auth_key` y pone `realmlist.gamebuild=68453`. +5. Verifica `realmlist`: `address=127.0.0.1`, `localAddress`, `gamebuild=68453`. + +--- + +## 3. Configuración +``` +cd Build/Release/AnyCPU +copy WorldServer.conf.dist WorldServer.conf +copy BNetServer.conf.dist BNetServer.conf +``` +**WorldServer.conf**: +- `DataDir = "./Data"` (donde copiaste dbc/maps/vmaps/mmaps). +- `LoginDatabaseInfo` / `WorldDatabaseInfo` / `CharacterDatabaseInfo` / `HotfixDatabaseInfo` → host/port/user/pass/DB. +- `Updates.EnableDatabases = 15` (las 4) y `Updates.AutoSetup = 1` → aplica base + updates al arrancar. +- `PacketLogFile = "CypherCore.pkt"` → **déjalo activo para depurar** (§6). + +**BNetServer.conf**: +- `LoginDatabaseInfo` (auth), `BattlenetPort = 1119`, `LoginREST.Port = 8081`, `LoginREST.ExternalAddress = 127.0.0.1`. + +--- + +## 4. Arranque (orden importa) +1. MySQL arriba. +2. **`BNetServer.exe`** primero (login Battle.net + portal REST). +3. **`WorldServer.exe`** después. Al arrancar: aplica updates SQL, carga DB2/mapas, abre el mundo. Espera a `World initialized` **sin errores** de carga de DB2/mapas. +4. Crea cuenta desde la consola del WorldServer: + ``` + bnetaccount create EMAIL@x.com PASSWORD + ``` + +--- + +## 5. Conectar el cliente 12.0.7 +El cliente retail NO usa `realmlist` clásico: usa login Battle.net contra el **portal REST** del BNetServer, y **valida el certificado del servidor**. Necesitas: +- Un **launcher/patcher de conexión** (tipo *Arctium WoW Client Launcher*) que apunte el cliente al portal local (`127.0.0.1:8081`) y saltee la validación de certificado. +- Config del portal: normalmente el launcher inyecta el `--portal 127.0.0.1`. Ajusta según el launcher que uses. +- Login con la cuenta creada en §4. + +--- + +## 6. Depuración reactiva (lo importante) +Aquí es donde se validan/arreglan las Fases 3-4. Síntomas → causa: + +| Síntoma | Causa probable | Acción | +|---|---|---| +| "Bad version" / no pasa auth | build 68453 no en `build_info`/`build_auth_key` | verifica que mi SQL Fase 1 se aplicó (`SELECT * FROM build_info WHERE build=68453`) | +| Desconecta en pantalla de personajes | opcode/estructura de CharEnum | packet log (§abajo) | +| Desconecta/crash **al entrar al mundo** | desalineación byte de UpdateFields / CreateObject header / EntityFragment | packet log + comparar contra TC | +| Log: `No defined handler for opcode X` | opcode nuevo 12.0.7 sin handler (feature no portada) | normal; no crashea. Solo importa si es del camino crítico | +| Log worldserver: errores al cargar `*.db2` | struct DB2 desalineada o datos de otra versión | revisar esa struct vs TC / re-extraer | +| Error en SELECT de hotfix (columna no existe) | esquema de tabla hotfix sin la columna nueva 12.0.7 | ajustar esquema world/hotfixes o poblar hotfix data 12.0.7 | + +**Packet logging (clave para byte-mismatches):** +1. Con `PacketLogFile` activo, se genera `CypherCore.pkt`. +2. Ábrelo con **WowPacketParser** (de TrinityCore) apuntando a build 68453. +3. Busca el último opcode antes de la desconexión y compara la estructura enviada vs lo que el cliente espera. + +--- + +## 7. Cómo reportar para que yo depure +Cuando falle, pásame: +- El **error exacto** del log de `WorldServer`/`BNetServer`. +- Si desconecta al entrar: el **último opcode** enviado/recibido (del log o del `.pkt`). +- Si es carga de DB2: el nombre del `.db2` y el error. + +Con eso ataco el mismatch concreto (struct, opcode o header) contra la referencia de TrinityCore. + +--- + +## Estado del port (referencia) +- ✅ Fase 1 build gate 68453 · Fase 2 opcodes · Fase 3 DB2+hotfix · Fase 4 UpdateFields +- ✅ Fixes críticos: cabecera CreateObject (+3 bits), enum `EntityFragment` renumerado a 12.0.7 +- ✅ B-A0 fundación + B1 MeshObject (scaffold) +- ⏳ Features Midnight (Housing/Neighborhood/Initiative): solo wire-format; sin gameplay (ni TC lo tiene) +- **Compila: `dotnet build CypherCore.sln -c Release` → 0 errores** diff --git a/Source/Framework/Constants/Network/Opcodes.cs b/Source/Framework/Constants/Network/Opcodes.cs index 1a52c5551..6d86b7d18 100644 --- a/Source/Framework/Constants/Network/Opcodes.cs +++ b/Source/Framework/Constants/Network/Opcodes.cs @@ -1,162 +1,162 @@ -// Copyright (c) CypherCore All rights reserved. +// Copyright (c) CypherCore All rights reserved. // Licensed under the GNU GENERAL PUBLIC LICENSE. See LICENSE file in the project root for full license information. namespace Framework.Constants { public enum ClientOpcodes : uint { - AbandonNpeResponse = 0x2f029a, - AcceptGuildInvite = 0x340029, + AbandonNpeResponse = 0x3a02a0, + AcceptGuildInvite = 0x400029, AcceptReturningPlayerPrompt = 0x2f025b, - AcceptSocialContract = 0x340176, - AcceptTrade = 0x2f0004, - AcceptWargameInvite = 0x34000c, - AccountBankDepositMoney = 0x2f02dd, - AccountBankWithdrawMoney = 0x2f02de, - AccountNotificationAcknowledged = 0x340162, - AccountStoreBeginPurchaseOrRefund = 0x3400c0, - ActivateSoulbind = 0x2f0289, - ActivateTaxi = 0x30003e, - AddonList = 0x340004, - AddAccountCosmetic = 0x2f0172, - AddBattlenetFriend = 0x340086, - AddFriend = 0x3400ff, - AddIgnore = 0x340103, - AddToy = 0x2f0171, - AdventureJournalOpenQuest = 0x2f00b4, - AdventureJournalUpdateSuggestions = 0x2f028c, - AdventureMapStartQuest = 0x2f022c, - AlterAppearance = 0x30008d, - AreaSpiritHealerQuery = 0x300043, - AreaSpiritHealerQueue = 0x300044, - AreaTrigger = 0x2f0087, - ArtifactAddPower = 0x2f0056, - ArtifactSetAppearance = 0x2f0058, - AssignEquipmentSetSpec = 0x2f00c0, - AttackStop = 0x2f011e, - AttackSwing = 0x2f011d, - AuctionableTokenSell = 0x340115, - AuctionableTokenSellAtMarketPrice = 0x340116, - AuctionBrowseQuery = 0x300061, - AuctionCancelCommoditiesPurchase = 0x300069, - AuctionConfirmCommoditiesPurchase = 0x300068, - AuctionGetCommodityQuote = 0x300067, - AuctionHelloRequest = 0x30005c, - AuctionListBiddedItems = 0x300065, - AuctionListBucketsByBucketKeys = 0x300066, - AuctionListItemsByBucketKey = 0x300062, - AuctionListItemsByItemId = 0x300063, - AuctionListOwnedItems = 0x300064, - AuctionPlaceBid = 0x300060, - AuctionRemoveItem = 0x30005e, - AuctionReplicateItems = 0x30005f, - AuctionSellCommodity = 0x30006a, - AuctionSellItem = 0x30005d, - AuctionSetFavoriteItem = 0x340163, - AuthContinuedSession = 0x350002, - AuthSession = 0x350001, - AutobankItem = 0x310003, - AutostoreBankItem = 0x310002, - AutoDepositAccountBank = 0x2f02e7, - AutoDepositCharacterBank = 0x2f02ef, - AutoEquipItem = 0x310004, - AutoEquipItemSlot = 0x310009, - AutoGuildBankItem = 0x300048, - AutoStoreBagItem = 0x310005, - AutoStoreGuildBankItem = 0x300051, - AzeriteEmpoweredItemSelectPower = 0x2f0257, - AzeriteEmpoweredItemViewed = 0x2f0238, - AzeriteEssenceActivateEssence = 0x2f0259, - AzeriteEssenceUnlockMilestone = 0x2f0258, - BankerActivate = 0x300046, - BattlefieldLeave = 0x2f001f, - BattlefieldList = 0x2f002a, - BattlefieldPort = 0x3000c3, - BattlemasterHello = 0x2f0190, - BattlemasterJoin = 0x3000ba, - BattlemasterJoinArena = 0x3000bb, - BattlemasterJoinBrawl = 0x3000c1, - BattlemasterJoinRatedBgBlitz = 0x3000bd, - BattlemasterJoinRatedSoloShuffle = 0x3000bc, - BattlemasterJoinSkirmish = 0x3000be, - BattlenetChallengeResponse = 0x340102, - BattlenetRequest = 0x340123, - BattlePayAckFailedResponse = 0x3400fb, - BattlePayCancelOpenCheckout = 0x340140, - BattlePayConfirmPurchaseResponse = 0x3400fa, - BattlePayDistributionAssignToTarget = 0x3400f1, - BattlePayDistributionAssignVas = 0x340166, - BattlePayGetProductList = 0x3400e8, - BattlePayGetPurchaseList = 0x3400e9, - BattlePayOpenCheckout = 0x340139, - BattlePayRequestPriceInfo = 0x340134, - BattlePayStartPurchase = 0x3400f9, - BattlePayStartVasPurchase = 0x340121, + AcceptSocialContract = 0x400177, + AcceptTrade = 0x3a0004, + AcceptWargameInvite = 0x40000c, + AccountBankDepositMoney = 0x3a02e3, + AccountBankWithdrawMoney = 0x3a02e4, + AccountNotificationAcknowledged = 0x400163, + AccountStoreBeginPurchaseOrRefund = 0x4000c1, + ActivateSoulbind = 0x3a028f, + ActivateTaxi = 0x3b003f, + AddonList = 0x400004, + AddAccountCosmetic = 0x3a0175, + AddBattlenetFriend = 0x400086, + AddFriend = 0x400100, + AddIgnore = 0x400104, + AddToy = 0x3a0174, + AdventureJournalOpenQuest = 0x3a00b7, + AdventureJournalUpdateSuggestions = 0x3a0292, + AdventureMapStartQuest = 0x3a0232, + AlterAppearance = 0x3b008e, + AreaSpiritHealerQuery = 0x3b0044, + AreaSpiritHealerQueue = 0x3b0045, + AreaTrigger = 0x3a0089, + ArtifactAddPower = 0x3a005c, + ArtifactSetAppearance = 0x3a005e, + AssignEquipmentSetSpec = 0x3a00c3, + AttackStop = 0x3a0121, + AttackSwing = 0x3a0120, + AuctionableTokenSell = 0x400116, + AuctionableTokenSellAtMarketPrice = 0x400117, + AuctionBrowseQuery = 0x3b0062, + AuctionCancelCommoditiesPurchase = 0x3b006a, + AuctionConfirmCommoditiesPurchase = 0x3b0069, + AuctionGetCommodityQuote = 0x3b0068, + AuctionHelloRequest = 0x3b005d, + AuctionListBiddedItems = 0x3b0066, + AuctionListBucketsByBucketKeys = 0x3b0067, + AuctionListItemsByBucketKey = 0x3b0063, + AuctionListItemsByItemId = 0x3b0064, + AuctionListOwnedItems = 0x3b0065, + AuctionPlaceBid = 0x3b0061, + AuctionRemoveItem = 0x3b005f, + AuctionReplicateItems = 0x3b0060, + AuctionSellCommodity = 0x3b006b, + AuctionSellItem = 0x3b005e, + AuctionSetFavoriteItem = 0x400164, + AuthContinuedSession = 0x410003, + AuthSession = 0x410001, + AutobankItem = 0x3d0003, + AutostoreBankItem = 0x3d0002, + AutoDepositAccountBank = 0x3a02ed, + AutoDepositCharacterBank = 0x3a02f7, + AutoEquipItem = 0x3d0004, + AutoEquipItemSlot = 0x3d0009, + AutoGuildBankItem = 0x3b0049, + AutoStoreBagItem = 0x3d0005, + AutoStoreGuildBankItem = 0x3b0052, + AzeriteEmpoweredItemSelectPower = 0x3a025e, + AzeriteEmpoweredItemViewed = 0x3a023e, + AzeriteEssenceActivateEssence = 0x3a0260, + AzeriteEssenceUnlockMilestone = 0x3a025f, + BankerActivate = 0x3b0047, + BattlefieldLeave = 0x3a001f, + BattlefieldList = 0x3a002a, + BattlefieldPort = 0x3b00c5, + BattlemasterHello = 0x3a0193, + BattlemasterJoin = 0x3b00bb, + BattlemasterJoinArena = 0x3b00bc, + BattlemasterJoinBrawl = 0x3b00c2, + BattlemasterJoinRatedBgBlitz = 0x3b00be, + BattlemasterJoinRatedSoloShuffle = 0x3b00bd, + BattlemasterJoinSkirmish = 0x3b00bf, + BattlenetChallengeResponse = 0x400103, + BattlenetRequest = 0x400124, + BattlePayAckFailedResponse = 0x4000fc, + BattlePayCancelOpenCheckout = 0x400141, + BattlePayConfirmPurchaseResponse = 0x4000fb, + BattlePayDistributionAssignToTarget = 0x4000f2, + BattlePayDistributionAssignVas = 0x400167, + BattlePayGetProductList = 0x4000e9, + BattlePayGetPurchaseList = 0x4000ea, + BattlePayOpenCheckout = 0x40013a, + BattlePayRequestPriceInfo = 0x400135, + BattlePayStartPurchase = 0x4000fa, + BattlePayStartVasPurchase = 0x400122, BattlePetClearFanfare = 0x290002, - BattlePetDeletePet = 0x34004f, - BattlePetDeletePetCheat = 0x340050, - BattlePetModifyName = 0x340052, - BattlePetRequestJournal = 0x34004e, - BattlePetRequestJournalLock = 0x34004d, - BattlePetSetBattleSlot = 0x340057, - BattlePetSetFlags = 0x34005a, - BattlePetSummon = 0x340053, - BattlePetUpdateDisplayNotify = 0x2f0091, - BattlePetUpdateNotify = 0x2f0090, - BeginTrade = 0x2f0001, - BinderActivate = 0x300045, - BlackMarketBidOnItem = 0x3000cb, - BlackMarketOpen = 0x3000c9, - BlackMarketRequestItems = 0x3000ca, - BonusRoll = 0x2f025a, - BugReport = 0x3400b1, - BusyTrade = 0x2f0002, - BuyAccountBankTab = 0x300123, - BuyBackItem = 0x300037, - BuyItem = 0x300036, - CageBattlePet = 0x2f00a4, - CalendarAddEvent = 0x3400a9, - CalendarCommunityInvite = 0x34009d, - CalendarComplain = 0x3400a5, - CalendarCopyEvent = 0x3400a4, - CalendarEventSignUp = 0x3400a7, - CalendarGet = 0x34009b, - CalendarGetEvent = 0x34009c, - CalendarGetNumPending = 0x3400a6, - CalendarInvite = 0x34009e, - CalendarModeratorStatus = 0x3400a2, - CalendarRemoveEvent = 0x3400a3, - CalendarRemoveInvite = 0x34009f, - CalendarRsvp = 0x3400a0, - CalendarStatus = 0x3400a1, - CalendarUpdateEvent = 0x3400aa, - CancelAura = 0x2f005a, - CancelAutoRepeatSpell = 0x30007f, - CancelCast = 0x2f0178, - CancelChannelling = 0x2f0139, - CancelGrowthAura = 0x2f0141, - CancelMasterLootRoll = 0x2f00cd, - CancelModSpeedNoControlAuras = 0x2f0059, - CancelMountAura = 0x2f0154, - CancelQueuedSpell = 0x2f002b, - CancelTempEnchantment = 0x30008a, - CancelTrade = 0x2f0006, - CanDuel = 0x34008e, - CanRedeemTokenForBalance = 0x340133, - CastSpell = 0x2f0175, + BattlePetDeletePet = 0x40004f, + BattlePetDeletePetCheat = 0x400050, + BattlePetModifyName = 0x400052, + BattlePetRequestJournal = 0x40004e, + BattlePetRequestJournalLock = 0x40004d, + BattlePetSetBattleSlot = 0x400057, + BattlePetSetFlags = 0x40005a, + BattlePetSummon = 0x400053, + BattlePetUpdateDisplayNotify = 0x3a0093, + BattlePetUpdateNotify = 0x3a0092, + BeginTrade = 0x3a0001, + BinderActivate = 0x3b0046, + BlackMarketBidOnItem = 0x3b00cd, + BlackMarketOpen = 0x3b00cb, + BlackMarketRequestItems = 0x3b00cc, + BonusRoll = 0x3a0261, + BugReport = 0x4000b1, + BusyTrade = 0x3a0002, + BuyAccountBankTab = 0x3b0126, + BuyBackItem = 0x3b0038, + BuyItem = 0x3b0037, + CageBattlePet = 0x3a00a6, + CalendarAddEvent = 0x4000a9, + CalendarCommunityInvite = 0x40009d, + CalendarComplain = 0x4000a5, + CalendarCopyEvent = 0x4000a4, + CalendarEventSignUp = 0x4000a7, + CalendarGet = 0x40009b, + CalendarGetEvent = 0x40009c, + CalendarGetNumPending = 0x4000a6, + CalendarInvite = 0x40009e, + CalendarModeratorStatus = 0x4000a2, + CalendarRemoveEvent = 0x4000a3, + CalendarRemoveInvite = 0x40009f, + CalendarRsvp = 0x4000a0, + CalendarStatus = 0x4000a1, + CalendarUpdateEvent = 0x4000aa, + CancelAura = 0x3a0060, + CancelAutoRepeatSpell = 0x3b0080, + CancelCast = 0x3a017b, + CancelChannelling = 0x3a013c, + CancelGrowthAura = 0x3a0144, + CancelMasterLootRoll = 0x3a00d0, + CancelModSpeedNoControlAuras = 0x3a005f, + CancelMountAura = 0x3a0157, + CancelQueuedSpell = 0x3a002b, + CancelTempEnchantment = 0x3b008b, + CancelTrade = 0x3a0006, + CanDuel = 0x40008e, + CanRedeemTokenForBalance = 0x400134, + CastSpell = 0x3a0178, ChallengeModeRequestLeaders = 0x2c0002, - ChangeBagSlotFlag = 0x2f0212, - ChangeBankBagSlotFlag = 0x2f0213, - ChangeMonumentAppearance = 0x2f01f3, - ChangeRealmTicket = 0x340128, - ChangeSubGroup = 0x340078, - CharacterCheckUpgrade = 0x3400f4, - CharacterRenameRequest = 0x3400ef, - CharacterUpgradeManualUnrevokeRequest = 0x3400f2, - CharacterUpgradeStart = 0x3400f3, - CharCustomize = 0x3400b8, - CharDelete = 0x3400ca, - CharRaceOrFactionChange = 0x3400be, + ChangeBagSlotFlag = 0x3a0217, + ChangeBankBagSlotFlag = 0x3a0218, + ChangeMonumentAppearance = 0x3a01f8, + ChangeRealmTicket = 0x400129, + ChangeSubGroup = 0x400078, + CharacterCheckUpgrade = 0x4000f5, + CharacterRenameRequest = 0x4000f0, + CharacterUpgradeManualUnrevokeRequest = 0x4000f3, + CharacterUpgradeStart = 0x4000f4, + CharCustomize = 0x4000b9, + CharDelete = 0x4000cb, + CharRaceOrFactionChange = 0x4000bf, ChatAddonMessage = 0x2b002a, ChatAddonMessageTargeted = 0x2b002b, ChatCanLocalWhisperTargetRequest = 0x2b0032, @@ -200,184 +200,184 @@ namespace Framework.Constants ChatSendCautionaryChannelMessage = 0x2b000b, ChatSendCautionaryChatMessage = 0x2b0009, ChatUnregisterAllAddonPrefixes = 0x2b0006, - CheckCharacterNameAvailability = 0x340071, - CheckIsAdventureMapPoiValid = 0x2f010f, - ChoiceResponse = 0x2f017d, - ChromieTimeSelectExpansion = 0x2f0288, - ClaimWeeklyReward = 0x2f0265, - ClassTalentsDeleteConfig = 0x2f02c2, - ClassTalentsNotifyEmptyConfig = 0x2f00c4, - ClassTalentsNotifyValidationFailed = 0x2f02c4, - ClassTalentsRenameConfig = 0x2f02c1, - ClassTalentsRequestNewConfig = 0x2f02c0, - ClassTalentsSetStarterBuildActive = 0x2f02c5, - ClassTalentsSetUsesSharedActionBars = 0x2f00c3, + CheckCharacterNameAvailability = 0x400071, + CheckIsAdventureMapPoiValid = 0x3a0112, + ChoiceResponse = 0x3a0180, + ChromieTimeSelectExpansion = 0x3a028e, + ClaimWeeklyReward = 0x3a026b, + ClassTalentsDeleteConfig = 0x3a02c8, + ClassTalentsNotifyEmptyConfig = 0x3a00c7, + ClassTalentsNotifyValidationFailed = 0x3a02ca, + ClassTalentsRenameConfig = 0x3a02c7, + ClassTalentsRequestNewConfig = 0x3a02c6, + ClassTalentsSetStarterBuildActive = 0x3a02cb, + ClassTalentsSetUsesSharedActionBars = 0x3a00c6, ClearNewAppearance = 0x290005, - ClearRaidMarker = 0x2f0052, - ClearTradeItem = 0x2f0008, - ClientPortGraveyard = 0x3000c5, - CloseInteraction = 0x300025, - CloseQuestChoice = 0x2f017e, - CloseRuneforgeInteraction = 0x2f0290, - CloseTraitSystemInteraction = 0x2f02c6, - ClubFinderApplicationResponse = 0x34014b, - ClubFinderGetApplicantsList = 0x340149, - ClubFinderPost = 0x340146, - ClubFinderRequestClubsData = 0x34014d, - ClubFinderRequestClubsList = 0x340147, - ClubFinderRequestMembershipToClub = 0x340148, - ClubFinderRequestPendingClubsList = 0x34014c, - ClubFinderRequestSubscribedClubPostingIds = 0x34014e, - ClubFinderRespondToApplicant = 0x34014a, - ClubFinderWhisperApplicantRequest = 0x340169, - ClubPresenceSubscribe = 0x340125, - CollectionItemSetFavorite = 0x34005d, - CommentatorEnable = 0x34001c, - CommentatorEnterInstance = 0x340020, - CommentatorExitInstance = 0x340021, - CommentatorGetMapInfo = 0x34001d, - CommentatorGetPlayerCooldowns = 0x34001f, - CommentatorGetPlayerInfo = 0x34001e, - CommentatorSpectate = 0x340167, - CommentatorStartWargame = 0x34001b, - CommerceTokenGetCount = 0x340113, - CommerceTokenGetLog = 0x34011d, - CommerceTokenGetMarketPrice = 0x340114, - Complaint = 0x340098, - CompleteCinematic = 0x3000e3, - CompleteMovie = 0x300075, - ConfirmArtifactRespec = 0x2f0057, - ConfirmProfessionRespec = 0x2f00c7, - ConfirmRespecWipe = 0x2f00c6, - ConnectToFailed = 0x340000, - ConsumableTokenBuy = 0x340118, - ConsumableTokenBuyAtMarketPrice = 0x340119, - ConsumableTokenCanVeteranBuy = 0x340117, - ConsumableTokenRedeem = 0x34011b, - ConsumableTokenRedeemConfirmation = 0x34011c, - ContentTrackingStartTracking = 0x2f02d6, - ContentTrackingStopTracking = 0x2f02d7, - ContributionContribute = 0x3000fb, - ContributionLastUpdateRequest = 0x3000fc, - ConversationCinematicReady = 0x3000e5, - ConversationLineStarted = 0x3000e4, - ConvertItemToBindToAccount = 0x2f02e6, - ConvertRaid = 0x34007a, - ConvertTimerunningCharacter = 0x34018c, - CovenantRenownRequestCatchupState = 0x30010f, - CraftingOrderCancel = 0x30011b, - CraftingOrderClaim = 0x300118, - CraftingOrderCreate = 0x300114, - CraftingOrderFulfill = 0x30011a, - CraftingOrderGetNpcRewardInfo = 0x300117, - CraftingOrderListCrafterOrders = 0x300116, - CraftingOrderListMyOrders = 0x300115, - CraftingOrderReject = 0x30011c, - CraftingOrderRelease = 0x300119, - CraftingOrderReportPlayer = 0x30011d, - CraftingOrderUpdateIgnoreList = 0x30011e, - CreateCharacter = 0x340070, - CreateShipment = 0x2f01dc, - DbQueryBulk = 0x340010, - DeclineGuildInvites = 0x3000b7, - DeclinePetition = 0x3000d2, - DeleteEquipmentSet = 0x3000a3, - DelveTeleportOut = 0x30012b, - DelFriend = 0x340100, - DelIgnore = 0x340104, - DestroyItem = 0x2f016b, - DfBootPlayerVote = 0x340044, - DfConfirmExpandSearch = 0x340036, - DfGetJoinStatus = 0x340042, - DfGetSystemInfo = 0x340041, - DfJoin = 0x340037, - DfLeave = 0x340040, - DfProposalResponse = 0x340035, - DfReadyCheckResponse = 0x340048, - DfSetRoles = 0x340043, - DfTeleport = 0x340045, - DiscardedTimeSyncAcks = 0x32005e, - DismissCritter = 0x300091, - DoCountdown = 0x340145, - DoMasterLootRoll = 0x2f00cc, - DoReadyCheck = 0x34005e, - DuelResponse = 0x30007a, - EjectPassenger = 0x2f0104, - Emote = 0x3000df, - EnableNagle = 0x350007, - EnableTaxiNode = 0x30003c, - EngineSurvey = 0x340112, - EnterEncryptedModeAck = 0x350003, - EnumCharacters = 0x340014, - EnumCharactersDeletedByClient = 0x34010c, - FarSight = 0x300080, + ClearRaidMarker = 0x3a0058, + ClearTradeItem = 0x3a0008, + ClientPortGraveyard = 0x3b00c7, + CloseInteraction = 0x3b0026, + CloseQuestChoice = 0x3a0181, + CloseRuneforgeInteraction = 0x3a0296, + CloseTraitSystemInteraction = 0x3a02cc, + ClubFinderApplicationResponse = 0x40014c, + ClubFinderGetApplicantsList = 0x40014a, + ClubFinderPost = 0x400147, + ClubFinderRequestClubsData = 0x40014e, + ClubFinderRequestClubsList = 0x400148, + ClubFinderRequestMembershipToClub = 0x400149, + ClubFinderRequestPendingClubsList = 0x40014d, + ClubFinderRequestSubscribedClubPostingIds = 0x40014f, + ClubFinderRespondToApplicant = 0x40014b, + ClubFinderWhisperApplicantRequest = 0x40016a, + ClubPresenceSubscribe = 0x400126, + CollectionItemSetFavorite = 0x40005d, + CommentatorEnable = 0x40001c, + CommentatorEnterInstance = 0x400020, + CommentatorExitInstance = 0x400021, + CommentatorGetMapInfo = 0x40001d, + CommentatorGetPlayerCooldowns = 0x40001f, + CommentatorGetPlayerInfo = 0x40001e, + CommentatorSpectate = 0x400168, + CommentatorStartWargame = 0x40001b, + CommerceTokenGetCount = 0x400114, + CommerceTokenGetLog = 0x40011e, + CommerceTokenGetMarketPrice = 0x400115, + Complaint = 0x400098, + CompleteCinematic = 0x3b00e5, + CompleteMovie = 0x3b0076, + ConfirmArtifactRespec = 0x3a005d, + ConfirmProfessionRespec = 0x3a00ca, + ConfirmRespecWipe = 0x3a00c9, + ConnectToFailed = 0x400000, + ConsumableTokenBuy = 0x400119, + ConsumableTokenBuyAtMarketPrice = 0x40011a, + ConsumableTokenCanVeteranBuy = 0x400118, + ConsumableTokenRedeem = 0x40011c, + ConsumableTokenRedeemConfirmation = 0x40011d, + ContentTrackingStartTracking = 0x3a02dc, + ContentTrackingStopTracking = 0x3a02dd, + ContributionContribute = 0x3b00fd, + ContributionLastUpdateRequest = 0x3b00fe, + ConversationCinematicReady = 0x3b00e7, + ConversationLineStarted = 0x3b00e6, + ConvertItemToBindToAccount = 0x3a02ec, + ConvertRaid = 0x40007a, + ConvertTimerunningCharacter = 0x40018d, + CovenantRenownRequestCatchupState = 0x3b0111, + CraftingOrderCancel = 0x3b011e, + CraftingOrderClaim = 0x3b011b, + CraftingOrderCreate = 0x3b0117, + CraftingOrderFulfill = 0x3b011d, + CraftingOrderGetNpcRewardInfo = 0x3b011a, + CraftingOrderListCrafterOrders = 0x3b0119, + CraftingOrderListMyOrders = 0x3b0118, + CraftingOrderReject = 0x3b011f, + CraftingOrderRelease = 0x3b011c, + CraftingOrderReportPlayer = 0x3b0120, + CraftingOrderUpdateIgnoreList = 0x3b0121, + CreateCharacter = 0x400070, + CreateShipment = 0x3a01e1, + DbQueryBulk = 0x400010, + DeclineGuildInvites = 0x3b00b8, + DeclinePetition = 0x3b00d4, + DeleteEquipmentSet = 0x3b00a4, + DelveTeleportOut = 0x3b012e, + DelFriend = 0x400101, + DelIgnore = 0x400105, + DestroyItem = 0x3a016e, + DfBootPlayerVote = 0x400044, + DfConfirmExpandSearch = 0x400036, + DfGetJoinStatus = 0x400042, + DfGetSystemInfo = 0x400041, + DfJoin = 0x400037, + DfLeave = 0x400040, + DfProposalResponse = 0x400035, + DfReadyCheckResponse = 0x400048, + DfSetRoles = 0x400043, + DfTeleport = 0x400045, + DiscardedTimeSyncAcks = 0x3e0060, + DismissCritter = 0x3b0092, + DoCountdown = 0x400146, + DoMasterLootRoll = 0x3a00cf, + DoReadyCheck = 0x40005e, + DuelResponse = 0x3b007b, + EjectPassenger = 0x3a0107, + Emote = 0x3b00e1, + EnableNagle = 0x410009, + EnableTaxiNode = 0x3b003d, + EngineSurvey = 0x400113, + EnterEncryptedModeAck = 0x410005, + EnumCharacters = 0x400014, + EnumCharactersDeletedByClient = 0x40010d, + FarSight = 0x3b0081, GameEventDebugDisable = 0x2f005e, GameEventDebugEnable = 0x2f005d, - GameObjReportUse = 0x300087, - GameObjUse = 0x300086, - GarrisonAddFollowerHealth = 0x2f01d7, - GarrisonAssignFollowerToBuilding = 0x2f01bd, - GarrisonCancelConstruction = 0x2f01aa, - GarrisonCheckUpgradeable = 0x2f020e, - GarrisonCompleteMission = 0x2f0200, - GarrisonFullyHealAllFollowers = 0x2f01d8, - GarrisonGenerateRecruits = 0x2f01c0, - GarrisonGetClassSpecCategoryInfo = 0x2f01cf, - GarrisonGetMapData = 0x2f01d6, - GarrisonGetMissionReward = 0x2f0230, - GarrisonLearnTalent = 0x2f01cb, - GarrisonMissionBonusRoll = 0x2f0202, - GarrisonPurchaseBuilding = 0x2f01a6, - GarrisonRecruitFollower = 0x2f01c2, - GarrisonRemoveFollower = 0x2f01f7, - GarrisonRemoveFollowerFromBuilding = 0x2f01be, - GarrisonRenameFollower = 0x2f01bf, - GarrisonRequestBlueprintAndSpecializationData = 0x2f01a5, - GarrisonRequestShipmentInfo = 0x2f01da, - GarrisonResearchTalent = 0x2f01c3, - GarrisonSetBuildingActive = 0x2f01a7, - GarrisonSetFollowerFavorite = 0x2f01bb, - GarrisonSetFollowerInactive = 0x2f01b3, - GarrisonSetRecruitmentPreferences = 0x2f01c1, - GarrisonSocketTalent = 0x2f029d, - GarrisonStartMission = 0x2f01ff, - GarrisonSwapBuildings = 0x2f01ab, - GenerateRandomCharacterName = 0x340013, - GetAccountCharacterList = 0x3400e3, - GetAccountNotifications = 0x340161, - GetGarrisonInfo = 0x2f01a0, - GetItemPurchaseData = 0x3000cd, - GetLandingPageShipments = 0x2f01db, - GetMirrorImageData = 0x2f016f, - GetPvpOptionsEnabled = 0x34001a, - GetRafAccountInfo = 0x34014f, - GetRegionwideCharacterRestrictionAndMailData = 0x340192, - GetRemainingGameTime = 0x34011a, - GetTrophyList = 0x2f01f0, - GetUndeleteCharacterCooldownStatus = 0x34010e, - GetVasAccountCharacterList = 0x34011f, - GetVasTransferTargetRealmList = 0x340120, - GmTicketAcknowledgeSurvey = 0x3400bc, - GmTicketGetCaseStatus = 0x3400bb, - GmTicketGetSystemStatus = 0x3400ba, - GossipRefreshOptions = 0x30010e, - GossipSelectOption = 0x300026, + GameObjReportUse = 0x3b0088, + GameObjUse = 0x3b0087, + GarrisonAddFollowerHealth = 0x3a01dc, + GarrisonAssignFollowerToBuilding = 0x3a01c2, + GarrisonCancelConstruction = 0x3a01ae, + GarrisonCheckUpgradeable = 0x3a0213, + GarrisonCompleteMission = 0x3a0205, + GarrisonFullyHealAllFollowers = 0x3a01dd, + GarrisonGenerateRecruits = 0x3a01c5, + GarrisonGetClassSpecCategoryInfo = 0x3a01d4, + GarrisonGetMapData = 0x3a01db, + GarrisonGetMissionReward = 0x3a0236, + GarrisonLearnTalent = 0x3a01d0, + GarrisonMissionBonusRoll = 0x3a0207, + GarrisonPurchaseBuilding = 0x3a01aa, + GarrisonRecruitFollower = 0x3a01c7, + GarrisonRemoveFollower = 0x3a01fc, + GarrisonRemoveFollowerFromBuilding = 0x3a01c3, + GarrisonRenameFollower = 0x3a01c4, + GarrisonRequestBlueprintAndSpecializationData = 0x3a01a9, + GarrisonRequestShipmentInfo = 0x3a01df, + GarrisonResearchTalent = 0x3a01c8, + GarrisonSetBuildingActive = 0x3a01ab, + GarrisonSetFollowerFavorite = 0x3a01c0, + GarrisonSetFollowerInactive = 0x3a01b7, + GarrisonSetRecruitmentPreferences = 0x3a01c6, + GarrisonSocketTalent = 0x3a02a3, + GarrisonStartMission = 0x3a0204, + GarrisonSwapBuildings = 0x3a01af, + GenerateRandomCharacterName = 0x400013, + GetAccountCharacterList = 0x4000e4, + GetAccountNotifications = 0x400162, + GetGarrisonInfo = 0x3a01a4, + GetItemPurchaseData = 0x3b00cf, + GetLandingPageShipments = 0x3a01e0, + GetMirrorImageData = 0x3a0172, + GetPvpOptionsEnabled = 0x40001a, + GetRafAccountInfo = 0x400150, + GetRegionwideCharacterRestrictionAndMailData = 0x400193, + GetRemainingGameTime = 0x40011b, + GetTrophyList = 0x3a01f5, + GetUndeleteCharacterCooldownStatus = 0x40010f, + GetVasAccountCharacterList = 0x400120, + GetVasTransferTargetRealmList = 0x400121, + GmTicketAcknowledgeSurvey = 0x4000bd, + GmTicketGetCaseStatus = 0x4000bc, + GmTicketGetSystemStatus = 0x4000bb, + GossipRefreshOptions = 0x3b0110, + GossipSelectOption = 0x3b0027, GuildAddBattlenetFriend = 0x2d0020, GuildAddRank = 0x2d0005, GuildAssignMemberRank = 0x2d0002, - GuildBankActivate = 0x300047, - GuildBankBuyTab = 0x300055, - GuildBankDepositMoney = 0x300057, + GuildBankActivate = 0x3b0048, + GuildBankBuyTab = 0x3b0056, + GuildBankDepositMoney = 0x3b0058, GuildBankLogQuery = 0x2d0019, - GuildBankQueryTab = 0x300054, + GuildBankQueryTab = 0x3b0055, GuildBankRemainingWithdrawMoneyQuery = 0x2d001a, GuildBankSetTabText = 0x2d001d, GuildBankTextQuery = 0x2d001e, - GuildBankUpdateTab = 0x300056, - GuildBankWithdrawMoney = 0x300058, + GuildBankUpdateTab = 0x3b0057, + GuildBankWithdrawMoney = 0x3b0059, GuildChallengeUpdateRequest = 0x2d0017, GuildChangeNameRequest = 0x2d0018, - GuildDeclineInvitation = 0x34002a, + GuildDeclineInvitation = 0x40002a, GuildDelete = 0x2d0009, GuildDeleteRank = 0x2d0006, GuildDemoteMember = 0x2d0001, @@ -385,7 +385,7 @@ namespace Framework.Constants GuildGetAchievementMembers = 0x2d0012, GuildGetRanks = 0x2d000e, GuildGetRoster = 0x2d0014, - GuildInviteByName = 0x340034, + GuildInviteByName = 0x400034, GuildLeave = 0x2d0003, GuildNewsUpdateSticky = 0x2d000f, GuildOfficerRemoveMember = 0x2d0004, @@ -402,1754 +402,1754 @@ namespace Framework.Constants GuildRequestRenameStatus = 0x2d0021, GuildSetAchievementTracking = 0x2d0010, GuildSetFocusedAchievement = 0x2d0011, - GuildSetGuildMaster = 0x3400f6, + GuildSetGuildMaster = 0x4000f7, GuildSetMemberNote = 0x2d0013, GuildSetRankPermissions = 0x2d0008, GuildShiftRank = 0x2d0007, GuildUpdateInfoText = 0x2d0016, GuildUpdateMotdText = 0x2d0015, - HearthAndResurrect = 0x30009f, - HideQuestChoice = 0x2f017f, - HotfixRequest = 0x340011, - IgnoreTrade = 0x2f0003, - InitiateRolePoll = 0x340006, - InitiateTrade = 0x2f0000, - Inspect = 0x3000c7, - InstanceAbandonVoteResponse = 0x340061, - InstanceLockResponse = 0x3000a4, - IslandQueue = 0x2f0261, - ItemPurchaseRefund = 0x3000ce, - ItemTextQuery = 0x2f020f, - JoinPetBattleQueue = 0x2f008e, - JoinRatedBattleground = 0x2f0025, - KeepAlive = 0x3400ab, - KeyboundOverride = 0x2f00e2, - LatencyReport = 0x35000d, - LearnPvpTalents = 0x3000fa, - LearnTalents = 0x3000f8, - LeaveGroup = 0x340075, - LeavePetBattleQueue = 0x2f008f, - LfgListApplyToGroup = 0x34003b, - LfgListCancelApplication = 0x34003c, - LfgListDeclineApplicant = 0x34003d, - LfgListGetStatus = 0x340039, - LfgListInviteApplicant = 0x34003e, - LfgListInviteResponse = 0x34003f, - LfgListJoin = 0x2f0255, - LfgListLeave = 0x340038, - LfgListSearch = 0x34003a, - LfgListUpdateRequest = 0x2f0256, - ListInventory = 0x300033, - LiveRegionAccountRestore = 0x3400e6, - LiveRegionCharacterCopy = 0x3400e5, - LiveRegionGetAccountCharacterList = 0x3400e4, - LiveRegionKeyBindingsCopy = 0x3400e7, - LoadingScreenNotify = 0x340024, - LoadSelectedTrophy = 0x2f01f1, - LobbyMatchmakerAbandonQueue = 0x340174, - LobbyMatchmakerAcceptPartyInvite = 0x34016b, - LobbyMatchmakerCreateCharacter = 0x34017d, - LobbyMatchmakerEnterQueue = 0x340172, - LobbyMatchmakerLeaveParty = 0x34016e, - LobbyMatchmakerPartyInvite = 0x34016a, - LobbyMatchmakerPartyUninvite = 0x34016d, - LobbyMatchmakerQueuePropsalResponse = 0x340173, - LobbyMatchmakerRejectPartyInvite = 0x34016c, - LobbyMatchmakerSetPartyPlaylistEntry = 0x34016f, - LobbyMatchmakerSetPlayerReady = 0x340170, - LogoutCancel = 0x300070, - LogoutInstant = 0x300071, - LogoutLobbyMatchmaker = 0x300122, - LogoutRequest = 0x30006f, - LogDisconnect = 0x350005, - LogStreamingError = 0x350009, - LootItem = 0x2f00ca, - LootMoney = 0x2f00c9, - LootRelease = 0x2f00ce, - LootRoll = 0x2f00cf, - LootUnit = 0x2f00c8, - LowLevelRaid1 = 0x3400ce, - LowLevelRaid2 = 0x3000ab, - MailCreateTextItem = 0x3000d9, - MailDelete = 0x2f00e4, - MailGetList = 0x3000d4, - MailMarkAsRead = 0x3000d8, - MailReturnToSender = 0x340081, - MailTakeItem = 0x3000d6, - MailTakeMoney = 0x3000d5, - MakeContitionalAppearancePermanent = 0x2f00e5, - MasterLootItem = 0x2f00cb, - MergeGuildBankItemWithGuildBankItem = 0x300052, - MergeGuildBankItemWithItem = 0x30004f, - MergeItemWithGuildBankItem = 0x30004d, - MinimapPing = 0x340077, - MissileTrajectoryCollision = 0x2f0036, + HearthAndResurrect = 0x3b00a0, + HideQuestChoice = 0x3a0182, + HotfixRequest = 0x400011, + IgnoreTrade = 0x3a0003, + InitiateRolePoll = 0x400006, + InitiateTrade = 0x3a0000, + Inspect = 0x3b00c9, + InstanceAbandonVoteResponse = 0x400061, + InstanceLockResponse = 0x3b00a5, + IslandQueue = 0x3a0267, + ItemPurchaseRefund = 0x3b00d0, + ItemTextQuery = 0x3a0214, + JoinPetBattleQueue = 0x3a0090, + JoinRatedBattleground = 0x3a0025, + KeepAlive = 0x4000ab, + KeyboundOverride = 0x3a00e5, + LatencyReport = 0x41000f, + LearnPvpTalents = 0x3b00fc, + LearnTalents = 0x3b00fa, + LeaveGroup = 0x400075, + LeavePetBattleQueue = 0x3a0091, + LfgListApplyToGroup = 0x40003b, + LfgListCancelApplication = 0x40003c, + LfgListDeclineApplicant = 0x40003d, + LfgListGetStatus = 0x400039, + LfgListInviteApplicant = 0x40003e, + LfgListInviteResponse = 0x40003f, + LfgListJoin = 0x3a025b, + LfgListLeave = 0x400038, + LfgListSearch = 0x40003a, + LfgListUpdateRequest = 0x3a025c, + ListInventory = 0x3b0034, + LiveRegionAccountRestore = 0x4000e7, + LiveRegionCharacterCopy = 0x4000e6, + LiveRegionGetAccountCharacterList = 0x4000e5, + LiveRegionKeyBindingsCopy = 0x4000e8, + LoadingScreenNotify = 0x400024, + LoadSelectedTrophy = 0x3a01f6, + LobbyMatchmakerAbandonQueue = 0x400175, + LobbyMatchmakerAcceptPartyInvite = 0x40016c, + LobbyMatchmakerCreateCharacter = 0x40017e, + LobbyMatchmakerEnterQueue = 0x400173, + LobbyMatchmakerLeaveParty = 0x40016f, + LobbyMatchmakerPartyInvite = 0x40016b, + LobbyMatchmakerPartyUninvite = 0x40016e, + LobbyMatchmakerQueuePropsalResponse = 0x400174, + LobbyMatchmakerRejectPartyInvite = 0x40016d, + LobbyMatchmakerSetPartyPlaylistEntry = 0x400170, + LobbyMatchmakerSetPlayerReady = 0x400171, + LogoutCancel = 0x3b0071, + LogoutInstant = 0x3b0072, + LogoutLobbyMatchmaker = 0x3b0125, + LogoutRequest = 0x3b0070, + LogDisconnect = 0x410007, + LogStreamingError = 0x41000b, + LootItem = 0x3a00cd, + LootMoney = 0x3a00cc, + LootRelease = 0x3a00d1, + LootRoll = 0x3a00d2, + LootUnit = 0x3a00cb, + LowLevelRaid1 = 0x4000cf, + LowLevelRaid2 = 0x3b00ac, + MailCreateTextItem = 0x3b00db, + MailDelete = 0x3a00e7, + MailGetList = 0x3b00d6, + MailMarkAsRead = 0x3b00da, + MailReturnToSender = 0x400081, + MailTakeItem = 0x3b00d8, + MailTakeMoney = 0x3b00d7, + MakeContitionalAppearancePermanent = 0x3a00e8, + MasterLootItem = 0x3a00ce, + MergeGuildBankItemWithGuildBankItem = 0x3b0053, + MergeGuildBankItemWithItem = 0x3b0050, + MergeItemWithGuildBankItem = 0x3b004e, + MinimapPing = 0x400077, + MissileTrajectoryCollision = 0x3a0036, MountClearFanfare = 0x290003, - MountSetFavorite = 0x34005c, - MountSpecialAnim = 0x2f0155, - MoveAddImpulseAck = 0x32006d, - MoveApplyInertiaAck = 0x32006b, - MoveApplyMovementForceAck = 0x320031, - MoveChangeTransport = 0x32004c, - MoveChangeVehicleSeats = 0x320051, - MoveCollisionDisableAck = 0x320056, - MoveCollisionEnableAck = 0x320057, - MoveDismissVehicle = 0x320050, - MoveDoubleJump = 0x320007, - MoveEnableDoubleJumpAck = 0x32003a, - MoveEnableFullSpeedTurningAck = 0x320083, - MoveEnableSwimToFlyTransAck = 0x320040, - MoveFallLand = 0x320017, - MoveFallReset = 0x320035, - MoveFeatherFallAck = 0x320038, - MoveForceFlightBackSpeedChangeAck = 0x32004b, - MoveForceFlightSpeedChangeAck = 0x32004a, - MoveForcePitchRateChangeAck = 0x32004f, - MoveForceRootAck = 0x32002a, - MoveForceRunBackSpeedChangeAck = 0x320028, - MoveForceRunSpeedChangeAck = 0x320027, - MoveForceSwimBackSpeedChangeAck = 0x32003e, - MoveForceSwimSpeedChangeAck = 0x320029, - MoveForceTurnRateChangeAck = 0x32003f, - MoveForceUnrootAck = 0x32002b, - MoveForceWalkSpeedChangeAck = 0x32003d, - MoveGravityDisableAck = 0x320052, - MoveGravityEnableAck = 0x320053, - MoveGuildBankItem = 0x30004c, - MoveHeartbeat = 0x32002c, - MoveHoverAck = 0x32002f, - MoveInertiaDisableAck = 0x320054, - MoveInertiaEnableAck = 0x320055, - MoveInitActiveMoverComplete = 0x320063, - MoveJump = 0x320006, - MoveKnockBackAck = 0x32002e, - MoveRemoveInertiaAck = 0x32006c, - MoveRemoveMovementForces = 0x320033, - MoveRemoveMovementForceAck = 0x320032, - MoveSetAdvFly = 0x32006f, - MoveSetAdvFlyingAddImpulseMaxSpeedAck = 0x320077, - MoveSetAdvFlyingAirFrictionAck = 0x320072, - MoveSetAdvFlyingBankingRateAck = 0x320078, - MoveSetAdvFlyingDoubleJumpVelModAck = 0x320075, - MoveSetAdvFlyingGlideStartMinHeightAck = 0x320076, - MoveSetAdvFlyingLaunchSpeedCoefficientAck = 0x32007f, - MoveSetAdvFlyingLiftCoefficientAck = 0x320074, - MoveSetAdvFlyingMaxVelAck = 0x320073, - MoveSetAdvFlyingOverMaxDecelerationAck = 0x32007d, - MoveSetAdvFlyingPitchingRateDownAck = 0x320079, - MoveSetAdvFlyingPitchingRateUpAck = 0x32007a, - MoveSetAdvFlyingSurfaceFrictionAck = 0x32007c, - MoveSetAdvFlyingTurnVelocityThresholdAck = 0x32007b, - MoveSetCanAdvFlyAck = 0x32006e, - MoveSetCanDriveAck = 0x320070, - MoveSetCanFlyAck = 0x320043, - MoveSetCanTurnWhileFallingAck = 0x320041, - MoveSetCollisionHeightAck = 0x320058, - MoveSetFacing = 0x320025, - MoveSetFacingHeartbeat = 0x32007e, - MoveSetFly = 0x320045, - MoveSetIgnoreMovementForcesAck = 0x320042, - MoveSetModMovementForceMagnitudeAck = 0x32005f, - MoveSetPitch = 0x320026, - MoveSetRunMode = 0x32000e, - MoveSetTurnRateCheat = 0x320022, - MoveSetVehicleRecIdAck = 0x320030, - MoveSetWalkMode = 0x32000f, - MoveSplineDone = 0x320034, - MoveStartAscend = 0x320046, - MoveStartBackward = 0x320001, - MoveStartDescend = 0x32004d, - MoveStartDriveForward = 0x320071, - MoveStartForward = 0x320000, - MoveStartPitchDown = 0x32000c, - MoveStartPitchUp = 0x32000b, - MoveStartStrafeLeft = 0x320003, - MoveStartStrafeRight = 0x320004, - MoveStartSwim = 0x320018, - MoveStartTurnLeft = 0x320008, - MoveStartTurnRight = 0x320009, - MoveStop = 0x320002, - MoveStopAscend = 0x320047, - MoveStopPitch = 0x32000d, - MoveStopStrafe = 0x320005, - MoveStopSwim = 0x320019, - MoveStopTurn = 0x32000a, - MoveTeleportAck = 0x320016, - MoveTimeSkipped = 0x320037, - MoveUpdateFallSpeed = 0x320036, - MoveWaterWalkAck = 0x320039, + MountSetFavorite = 0x40005c, + MountSpecialAnim = 0x3a0158, + MoveAddImpulseAck = 0x3e006e, + MoveApplyInertiaAck = 0x3e006c, + MoveApplyMovementForceAck = 0x3e0033, + MoveChangeTransport = 0x3e004e, + MoveChangeVehicleSeats = 0x3e0053, + MoveCollisionDisableAck = 0x3e0058, + MoveCollisionEnableAck = 0x3e0059, + MoveDismissVehicle = 0x3e0052, + MoveDoubleJump = 0x3e0007, + MoveEnableDoubleJumpAck = 0x3e003c, + MoveEnableFullSpeedTurningAck = 0x3e0084, + MoveEnableSwimToFlyTransAck = 0x3e0042, + MoveFallLand = 0x3e0017, + MoveFallReset = 0x3e0037, + MoveFeatherFallAck = 0x3e003a, + MoveForceFlightBackSpeedChangeAck = 0x3e004d, + MoveForceFlightSpeedChangeAck = 0x3e004c, + MoveForcePitchRateChangeAck = 0x3e0051, + MoveForceRootAck = 0x3e002c, + MoveForceRunBackSpeedChangeAck = 0x3e002a, + MoveForceRunSpeedChangeAck = 0x3e0029, + MoveForceSwimBackSpeedChangeAck = 0x3e0040, + MoveForceSwimSpeedChangeAck = 0x3e002b, + MoveForceTurnRateChangeAck = 0x3e0041, + MoveForceUnrootAck = 0x3e002d, + MoveForceWalkSpeedChangeAck = 0x3e003f, + MoveGravityDisableAck = 0x3e0054, + MoveGravityEnableAck = 0x3e0055, + MoveGuildBankItem = 0x3b004d, + MoveHeartbeat = 0x3e002e, + MoveHoverAck = 0x3e0031, + MoveInertiaDisableAck = 0x3e0056, + MoveInertiaEnableAck = 0x3e0057, + MoveInitActiveMoverComplete = 0x3e0064, + MoveJump = 0x3e0006, + MoveKnockBackAck = 0x3e0030, + MoveRemoveInertiaAck = 0x3e006d, + MoveRemoveMovementForces = 0x3e0035, + MoveRemoveMovementForceAck = 0x3e0034, + MoveSetAdvFly = 0x3e0070, + MoveSetAdvFlyingAddImpulseMaxSpeedAck = 0x3e0078, + MoveSetAdvFlyingAirFrictionAck = 0x3e0073, + MoveSetAdvFlyingBankingRateAck = 0x3e0079, + MoveSetAdvFlyingDoubleJumpVelModAck = 0x3e0076, + MoveSetAdvFlyingGlideStartMinHeightAck = 0x3e0077, + MoveSetAdvFlyingLaunchSpeedCoefficientAck = 0x3e0080, + MoveSetAdvFlyingLiftCoefficientAck = 0x3e0075, + MoveSetAdvFlyingMaxVelAck = 0x3e0074, + MoveSetAdvFlyingOverMaxDecelerationAck = 0x3e007e, + MoveSetAdvFlyingPitchingRateDownAck = 0x3e007a, + MoveSetAdvFlyingPitchingRateUpAck = 0x3e007b, + MoveSetAdvFlyingSurfaceFrictionAck = 0x3e007d, + MoveSetAdvFlyingTurnVelocityThresholdAck = 0x3e007c, + MoveSetCanAdvFlyAck = 0x3e006f, + MoveSetCanDriveAck = 0x3e0071, + MoveSetCanFlyAck = 0x3e0045, + MoveSetCanTurnWhileFallingAck = 0x3e0043, + MoveSetCollisionHeightAck = 0x3e005a, + MoveSetFacing = 0x3e0027, + MoveSetFacingHeartbeat = 0x3e007f, + MoveSetFly = 0x3e0047, + MoveSetIgnoreMovementForcesAck = 0x3e0044, + MoveSetModMovementForceMagnitudeAck = 0x3e0061, + MoveSetPitch = 0x3e0028, + MoveSetRunMode = 0x3e000e, + MoveSetTurnRateCheat = 0x3e0024, + MoveSetVehicleRecIdAck = 0x3e0032, + MoveSetWalkMode = 0x3e000f, + MoveSplineDone = 0x3e0036, + MoveStartAscend = 0x3e0048, + MoveStartBackward = 0x3e0001, + MoveStartDescend = 0x3e004f, + MoveStartDriveForward = 0x3e0072, + MoveStartForward = 0x3e0000, + MoveStartPitchDown = 0x3e000c, + MoveStartPitchUp = 0x3e000b, + MoveStartStrafeLeft = 0x3e0003, + MoveStartStrafeRight = 0x3e0004, + MoveStartSwim = 0x3e0018, + MoveStartTurnLeft = 0x3e0008, + MoveStartTurnRight = 0x3e0009, + MoveStop = 0x3e0002, + MoveStopAscend = 0x3e0049, + MoveStopPitch = 0x3e000d, + MoveStopStrafe = 0x3e0005, + MoveStopSwim = 0x3e0019, + MoveStopTurn = 0x3e000a, + MoveTeleportAck = 0x3e0016, + MoveTimeSkipped = 0x3e0039, + MoveUpdateFallSpeed = 0x3e0038, + MoveWaterWalkAck = 0x3e003b, MythicPlusRequestMapStats = 0x2c0001, - NeutralPlayerSelectFaction = 0x2f0084, - NextCinematicCamera = 0x3000e2, - ObjectUpdateFailed = 0x2f002c, - ObjectUpdateRescued = 0x2f002d, - OfferPetition = 0x2f0287, - OpeningCinematic = 0x3000e1, - OpenItem = 0x2f0210, - OpenMissionNpc = 0x2f01d1, - OpenShipmentNpc = 0x2f01d9, - OpenTradeskillNpc = 0x2f01e4, - OptOutOfLoot = 0x30008e, - OverrideScreenFlash = 0x3000b8, - PartyInvite = 0x340030, - PartyInviteResponse = 0x340032, - PartyUninvite = 0x340073, - PerformItemInteraction = 0x2f00ed, - PerksProgramItemsRefreshed = 0x2f02af, - PerksProgramRequestCartCheckout = 0x2f02b2, - PerksProgramRequestPendingRewards = 0x290012, - PerksProgramRequestPurchase = 0x2f02b1, - PerksProgramRequestRefund = 0x2f02b3, - PerksProgramSetFrozenVendorItem = 0x2f02b4, - PerksProgramStatusRequest = 0x2f02b0, - PetitionBuy = 0x30005a, - PetitionRenameGuild = 0x3400f7, - PetitionShowList = 0x300059, - PetitionShowSignatures = 0x30005b, - PetAbandon = 0x30001e, - PetAbandonByNumber = 0x30001f, - PetAction = 0x30001c, - PetBattleFinalNotify = 0x2f0093, - PetBattleInput = 0x34006d, - PetBattleQueueProposeMatchResult = 0x2f00e3, - PetBattleQuitNotify = 0x2f0092, - PetBattleReplaceFrontPet = 0x34006e, - PetBattleRequestPvp = 0x2f008c, - PetBattleRequestUpdate = 0x2f008d, - PetBattleRequestWild = 0x2f008a, - PetBattleScriptErrorNotify = 0x2f0094, - PetBattleWildLocationFail = 0x2f008b, - PetCancelAura = 0x300020, - PetCastSpell = 0x2f0174, - PetRename = 0x3400b0, - PetSetAction = 0x30001b, - PetSpellAutocast = 0x300021, - PetStopAttack = 0x30001d, - Ping = 0x350004, - PlayerLogin = 0x340016, - PushQuestToParty = 0x300031, - PvpLogData = 0x2f0028, - QueryBattlePetName = 0x2f0148, - QueryCorpseLocationFromClient = 0x34008c, - QueryCorpseTransport = 0x34008d, - QueryCountdownTimer = 0x2f0055, - QueryCreature = 0x2f0142, - QueryGameObject = 0x2f0143, - QueryGarrisonPetName = 0x2f0149, - QueryGuildInfo = 0x3400b6, - QueryInspectAchievements = 0x300098, - QueryNextMailTime = 0x3000d7, - QueryNpcText = 0x2f0144, - QueryPageText = 0x2f0146, - QueryPetition = 0x2f014a, - QueryPetName = 0x2f0147, - QueryPlayerNames = 0x35000e, - QueryPlayerNamesForCommunity = 0x35000c, - QueryPlayerNameByCommunityId = 0x35000b, - QueryQuestCompletionNpcs = 0x2f0021, - QueryQuestInfo = 0x2f0145, - QueryQuestItemUsability = 0x2f0022, - QueryRealmName = 0x3400b5, - QueryScenarioPoi = 0x340082, - QuerySelectedWowLabsArea = 0x2f02eb, - QueryTime = 0x30006e, - QueryTreasurePicker = 0x2f0233, - QueryWowLabsAreaInfo = 0x2f02ec, - QuestConfirmAccept = 0x300030, - QuestGiverAcceptQuest = 0x30002a, - QuestGiverChooseReward = 0x30002c, - QuestGiverCloseQuest = 0x3000e8, - QuestGiverCompleteQuest = 0x30002b, - QuestGiverHello = 0x300028, - QuestGiverQueryQuest = 0x300029, - QuestGiverRequestReward = 0x30002d, - QuestGiverStatusMultipleQuery = 0x30002f, - QuestGiverStatusQuery = 0x30002e, - QuestLogRemoveQuest = 0x3000cc, - QuestPoiQuery = 0x3400dd, - QuestPushResult = 0x300032, - QuestSessionBeginResponse = 0x2f0279, - QuestSessionRequestStart = 0x2f0278, - QuestSessionRequestStop = 0x34015a, - QueuedMessagesEnd = 0x350008, - QuickJoinAutoAcceptRequests = 0x340131, - QuickJoinRequestInvite = 0x340130, - QuickJoinRequestInviteWithConfirmation = 0x34015f, - QuickJoinRespondToInvite = 0x34012f, - QuickJoinSignalToastDisplayed = 0x34012e, - RafClaimActivityReward = 0x30009c, - RafClaimNextReward = 0x340150, - RafGenerateRecruitmentLink = 0x340152, - RafUpdateRecruitmentInfo = 0x340151, - RandomRoll = 0x340080, - ReadyCheckResponse = 0x34005f, - ReadItem = 0x2f0211, - RecentAllyRequestData = 0x340197, - RecentAllySetNote = 0x340198, - ReclaimCorpse = 0x300073, - RemoveNewItem = 0x2f0237, - RemoveRafRecruit = 0x340153, - ReorderCharacters = 0x340015, - RepairItem = 0x300084, - ReplaceTrophy = 0x2f01f2, - RepopRequest = 0x3000c4, - ReportPvpPlayerAfk = 0x30008c, - ReportServerLag = 0x2f0271, - ReportStuckInCombat = 0x2f0272, - RequestAccountData = 0x3400c2, - RequestAreaPoiUpdate = 0x2f0235, - RequestBattlefieldStatus = 0x340008, - RequestCemeteryList = 0x2f0023, - RequestCharacterGuildFollowInfo = 0x3400b7, - RequestCovenantCallings = 0x2f0263, - RequestCrowdControlSpell = 0x3000c8, - RequestCurrencyDataForAccountCharacters = 0x290019, - RequestGarrisonTalentWorldQuestUnlocks = 0x2f029c, - RequestGuildPartyState = 0x2f0054, - RequestGuildRewardsList = 0x2f0053, - RequestLatestSplashScreen = 0x2f0273, - RequestLfgListBlacklist = 0x2f0180, - RequestMythicPlusAffixes = 0x2f00b8, - RequestMythicPlusSeasonData = 0x2f00b9, - RequestPartyEligibilityForDelveTiers = 0x2f02ea, - RequestPartyJoinUpdates = 0x340023, - RequestPartyMemberStats = 0x34007f, - RequestPetInfo = 0x300022, - RequestPlayedTime = 0x2f014d, - RequestPvpRewards = 0x2f0041, - RequestRaidInfo = 0x3400f8, - RequestRatedPvpInfo = 0x34000f, - RequestRealmGuildMasterInfo = 0x340195, - RequestScheduledAreaPoiUpdate = 0x2f0236, - RequestScheduledPvpInfo = 0x2f0042, - RequestStabledPets = 0x300023, - RequestStoreFrontInfoUpdate = 0x29001e, - RequestSurvey = 0x2f02fd, - RequestVehicleExit = 0x2f00ff, - RequestVehicleNextSeat = 0x2f0101, - RequestVehiclePrevSeat = 0x2f0100, - RequestVehicleSwitchSeat = 0x2f0102, - RequestWeeklyRewards = 0x2f0266, - RequestWorldQuestUpdate = 0x2f0234, - ResetChallengeMode = 0x2f00b6, - ResetChallengeModeCheat = 0x2f00b7, - ResetInstances = 0x340094, - ResurrectResponse = 0x3400af, - RevertMonumentAppearance = 0x2f01f4, - RideVehicleInteract = 0x2f0103, + NeutralPlayerSelectFaction = 0x3a0086, + NextCinematicCamera = 0x3b00e4, + ObjectUpdateFailed = 0x3a002c, + ObjectUpdateRescued = 0x3a002d, + OfferPetition = 0x3a028d, + OpeningCinematic = 0x3b00e3, + OpenItem = 0x3a0215, + OpenMissionNpc = 0x3a01d6, + OpenShipmentNpc = 0x3a01de, + OpenTradeskillNpc = 0x3a01e9, + OptOutOfLoot = 0x3b008f, + OverrideScreenFlash = 0x3b00b9, + PartyInvite = 0x400030, + PartyInviteResponse = 0x400032, + PartyUninvite = 0x400073, + PerformItemInteraction = 0x3a00f0, + PerksProgramItemsRefreshed = 0x3a02b5, + PerksProgramRequestCartCheckout = 0x3a02b8, + PerksProgramRequestPendingRewards = 0x290017, + PerksProgramRequestPurchase = 0x3a02b7, + PerksProgramRequestRefund = 0x3a02b9, + PerksProgramSetFrozenVendorItem = 0x3a02ba, + PerksProgramStatusRequest = 0x3a02b6, + PetitionBuy = 0x3b005b, + PetitionRenameGuild = 0x4000f8, + PetitionShowList = 0x3b005a, + PetitionShowSignatures = 0x3b005c, + PetAbandon = 0x3b001f, + PetAbandonByNumber = 0x3b0020, + PetAction = 0x3b001d, + PetBattleFinalNotify = 0x3a0095, + PetBattleInput = 0x40006d, + PetBattleQueueProposeMatchResult = 0x3a00e6, + PetBattleQuitNotify = 0x3a0094, + PetBattleReplaceFrontPet = 0x40006e, + PetBattleRequestPvp = 0x3a008e, + PetBattleRequestUpdate = 0x3a008f, + PetBattleRequestWild = 0x3a008c, + PetBattleScriptErrorNotify = 0x3a0096, + PetBattleWildLocationFail = 0x3a008d, + PetCancelAura = 0x3b0021, + PetCastSpell = 0x3a0177, + PetRename = 0x4000b0, + PetSetAction = 0x3b001c, + PetSpellAutocast = 0x3b0022, + PetStopAttack = 0x3b001e, + Ping = 0x410006, + PlayerLogin = 0x400016, + PushQuestToParty = 0x3b0032, + PvpLogData = 0x3a0028, + QueryBattlePetName = 0x3a014b, + QueryCorpseLocationFromClient = 0x40008c, + QueryCorpseTransport = 0x40008d, + QueryCountdownTimer = 0x3a005b, + QueryCreature = 0x3a0145, + QueryGameObject = 0x3a0146, + QueryGarrisonPetName = 0x3a014c, + QueryGuildInfo = 0x4000b6, + QueryInspectAchievements = 0x3b0099, + QueryNextMailTime = 0x3b00d9, + QueryNpcText = 0x3a0147, + QueryPageText = 0x3a0149, + QueryPetition = 0x3a014d, + QueryPetName = 0x3a014a, + QueryPlayerNames = 0x410010, + QueryPlayerNamesForCommunity = 0x41000e, + QueryPlayerNameByCommunityId = 0x41000d, + QueryQuestCompletionNpcs = 0x3a0021, + QueryQuestInfo = 0x3a0148, + QueryQuestItemUsability = 0x3a0022, + QueryRealmName = 0x4000b5, + QueryScenarioPoi = 0x400082, + QuerySelectedWowLabsArea = 0x3a02f3, + QueryTime = 0x3b006f, + QueryTreasurePicker = 0x3a0239, + QueryWowLabsAreaInfo = 0x3a02f4, + QuestConfirmAccept = 0x3b0031, + QuestGiverAcceptQuest = 0x3b002b, + QuestGiverChooseReward = 0x3b002d, + QuestGiverCloseQuest = 0x3b00ea, + QuestGiverCompleteQuest = 0x3b002c, + QuestGiverHello = 0x3b0029, + QuestGiverQueryQuest = 0x3b002a, + QuestGiverRequestReward = 0x3b002e, + QuestGiverStatusMultipleQuery = 0x3b0030, + QuestGiverStatusQuery = 0x3b002f, + QuestLogRemoveQuest = 0x3b00ce, + QuestPoiQuery = 0x4000de, + QuestPushResult = 0x3b0033, + QuestSessionBeginResponse = 0x3a027f, + QuestSessionRequestStart = 0x3a027e, + QuestSessionRequestStop = 0x40015b, + QueuedMessagesEnd = 0x41000a, + QuickJoinAutoAcceptRequests = 0x400132, + QuickJoinRequestInvite = 0x400131, + QuickJoinRequestInviteWithConfirmation = 0x400160, + QuickJoinRespondToInvite = 0x400130, + QuickJoinSignalToastDisplayed = 0x40012f, + RafClaimActivityReward = 0x3b009d, + RafClaimNextReward = 0x400151, + RafGenerateRecruitmentLink = 0x400153, + RafUpdateRecruitmentInfo = 0x400152, + RandomRoll = 0x400080, + ReadyCheckResponse = 0x40005f, + ReadItem = 0x3a0216, + RecentAllyRequestData = 0x400198, + RecentAllySetNote = 0x400199, + ReclaimCorpse = 0x3b0074, + RemoveNewItem = 0x3a023d, + RemoveRafRecruit = 0x400154, + ReorderCharacters = 0x400015, + RepairItem = 0x3b0085, + ReplaceTrophy = 0x3a01f7, + RepopRequest = 0x3b00c6, + ReportPvpPlayerAfk = 0x3b008d, + ReportServerLag = 0x3a0277, + ReportStuckInCombat = 0x3a0278, + RequestAccountData = 0x4000c3, + RequestAreaPoiUpdate = 0x3a023b, + RequestBattlefieldStatus = 0x400008, + RequestCemeteryList = 0x3a0023, + RequestCharacterGuildFollowInfo = 0x4000b8, + RequestCovenantCallings = 0x3a0269, + RequestCrowdControlSpell = 0x3b00ca, + RequestCurrencyDataForAccountCharacters = 0x29001e, + RequestGarrisonTalentWorldQuestUnlocks = 0x3a02a2, + RequestGuildPartyState = 0x3a005a, + RequestGuildRewardsList = 0x3a0059, + RequestLatestSplashScreen = 0x3a0279, + RequestLfgListBlacklist = 0x3a0183, + RequestMythicPlusAffixes = 0x3a00bb, + RequestMythicPlusSeasonData = 0x3a00bc, + RequestPartyEligibilityForDelveTiers = 0x3a02f0, + RequestPartyJoinUpdates = 0x400023, + RequestPartyMemberStats = 0x40007f, + RequestPetInfo = 0x3b0023, + RequestPlayedTime = 0x3a0150, + RequestPvpRewards = 0x3a0041, + RequestRaidInfo = 0x4000f9, + RequestRatedPvpInfo = 0x40000f, + RequestRealmGuildMasterInfo = 0x400196, + RequestScheduledAreaPoiUpdate = 0x3a023c, + RequestScheduledPvpInfo = 0x3a0042, + RequestStabledPets = 0x3b0024, + RequestStoreFrontInfoUpdate = 0x290023, + RequestSurvey = 0x3a0306, + RequestVehicleExit = 0x3a0102, + RequestVehicleNextSeat = 0x3a0104, + RequestVehiclePrevSeat = 0x3a0103, + RequestVehicleSwitchSeat = 0x3a0105, + RequestWeeklyRewards = 0x3a026c, + RequestWorldQuestUpdate = 0x3a023a, + ResetChallengeMode = 0x3a00b9, + ResetChallengeModeCheat = 0x3a00ba, + ResetInstances = 0x400094, + ResurrectResponse = 0x4000af, + RevertMonumentAppearance = 0x3a01f9, + RideVehicleInteract = 0x3a0106, RpeResetCharacter = 0x340180, - SaveAccountDataExport = 0x34017a, - SaveCufProfiles = 0x2f0037, - SaveEquipmentSet = 0x3000a2, - SaveGuildEmblem = 0x2f0185, - SavePersonalEmblem = 0x2f0186, - ScenePlaybackCanceled = 0x2f00df, - ScenePlaybackComplete = 0x2f00de, - SceneTriggerEvent = 0x2f00e0, - SeamlessTransferComplete = 0x2f02d9, - SelectWowLabsArea = 0x2f02ed, - SelfRes = 0x3000cf, - SellAllJunkItems = 0x300035, - SellItem = 0x300034, - SendCharacterClubInvitation = 0x340127, - SendContactList = 0x3400fe, - SendMail = 0x340026, - SendPingUnit = 0x2f02db, - SendPingWorldPoint = 0x2f02dc, - SendTextEmote = 0x300019, - ServerTimeOffsetRequest = 0x3400c9, - SetupWarbandGroups = 0x34018e, - SetActionBarToggles = 0x3000d0, - SetActionButton = 0x340062, - SetActiveMover = 0x320059, - SetAdvancedCombatLogging = 0x2f0193, - SetAllowRecentAlliesSeeLocation = 0x2f02fe, - SetAssistantLeader = 0x34007b, - SetBackpackAutosortDisabled = 0x2f0214, - SetBackpackSellJunkDisabled = 0x2f0215, - SetBankAutosortDisabled = 0x2f0216, - SetContactNotes = 0x340101, - SetCurrencyFlags = 0x2f0015, - SetDifficultyId = 0x2f00e1, - SetDungeonDifficulty = 0x3400ae, - SetEmpowerMinHoldStagePercent = 0x2f013c, - SetEveryoneIsAssistant = 0x340046, - SetExcludedChatCensorSources = 0x340132, - SetFactionAtWar = 0x300076, - SetFactionInactive = 0x300078, - SetFactionNotAtWar = 0x300077, - SetGameEventDebugViewState = 0x2f0065, - SetInsertItemsLeftToRight = 0x2f0218, - SetLootMethod = 0x340074, - SetLootSpecialization = 0x3000dd, - SetPartyAssignment = 0x34007d, - SetPartyLeader = 0x340076, - SetPetFavorite = 0x2f0012, - SetPetSlot = 0x2f0011, - SetPetSpecialization = 0x2f0013, - SetPlayerDeclinedNames = 0x3400b4, - SetPreferredCemetery = 0x2f0024, - SetPvp = 0x2f018a, - SetRaidDifficulty = 0x34010a, - SetRestrictPingsToAssistants = 0x340047, - SetRole = 0x340005, - SetSavedInstanceExtend = 0x3400b2, - SetSelection = 0x3000c6, - SetSheathed = 0x30001a, - SetSortBagsRightToLeft = 0x2f0217, - SetTaxiBenchmarkMode = 0x30008b, - SetTitle = 0x2f0153, - SetTradeCurrency = 0x2f000a, - SetTradeGold = 0x2f0009, - SetTradeItem = 0x2f0007, - SetUsingPartyGarrison = 0x2f01d3, - SetWarMode = 0x2f018b, - SetWatchedFaction = 0x300079, - ShowTradeSkill = 0x3400f0, - SignPetition = 0x3000d1, - SilencePartyTalker = 0x34007e, - SocialContractRequest = 0x340175, - SocketGems = 0x300083, - SortAccountBankBags = 0x2f02df, - SortBags = 0x2f0219, - SortBankBags = 0x2f021a, - SpawnTrackingUpdate = 0x2f0168, - SpectateChange = 0x2f02d2, - SpellClick = 0x300027, - SpellEmpowerRelease = 0x2f013a, - SpellEmpowerRestart = 0x2f013b, - SpiritHealerActivate = 0x300042, - SplitGuildBankItem = 0x300053, - SplitGuildBankItemToInventory = 0x300050, - SplitItem = 0x310008, - SplitItemToGuildBank = 0x30004e, - StandStateChange = 0x2f0035, - StartChallengeMode = 0x3000e9, - StartInstanceAbandonVote = 0x340060, - StartSpectatorWarGame = 0x34000b, - StartWarGame = 0x34000a, - StoreGuildBankItem = 0x300049, - SubmitUserFeedback = 0x3400c1, - SubscriptionInterstitialResponse = 0x2f0291, - SummonResponse = 0x340096, - SupportTicketSubmitComplaint = 0x340072, - SurrenderArena = 0x2f0020, - SuspendCommsAck = 0x350000, - SuspendTokenResponse = 0x350006, - SwapGuildBankItemWithGuildBankItem = 0x30004b, - SwapInvItem = 0x310007, - SwapItem = 0x310006, - SwapItemWithGuildBankItem = 0x30004a, - SwapSubGroups = 0x340079, - TabardVendorActivate = 0x2f0187, - TalkToGossip = 0x300024, - TaxiNodeStatusQuery = 0x30003b, - TaxiQueryAvailableNodes = 0x30003d, - TaxiRequestEarlyLanding = 0x30003f, - TimeAdjustmentResponse = 0x32005d, - TimeSyncResponse = 0x32005a, - TimeSyncResponseDropped = 0x32005c, - TimeSyncResponseFailed = 0x32005b, - ToggleDifficulty = 0x340083, - TogglePvp = 0x2f0189, - TotemDestroyed = 0x300090, + SaveAccountDataExport = 0x40017b, + SaveCufProfiles = 0x3a0037, + SaveEquipmentSet = 0x3b00a3, + SaveGuildEmblem = 0x3a0188, + SavePersonalEmblem = 0x3a0189, + ScenePlaybackCanceled = 0x3a00e2, + ScenePlaybackComplete = 0x3a00e1, + SceneTriggerEvent = 0x3a00e3, + SeamlessTransferComplete = 0x3a02df, + SelectWowLabsArea = 0x3a02f5, + SelfRes = 0x3b00d1, + SellAllJunkItems = 0x3b0036, + SellItem = 0x3b0035, + SendCharacterClubInvitation = 0x400128, + SendContactList = 0x4000ff, + SendMail = 0x400026, + SendPingUnit = 0x3a02e1, + SendPingWorldPoint = 0x3a02e2, + SendTextEmote = 0x3b001a, + ServerTimeOffsetRequest = 0x4000ca, + SetupWarbandGroups = 0x40018f, + SetActionBarToggles = 0x3b00d2, + SetActionButton = 0x400062, + SetActiveMover = 0x3e005b, + SetAdvancedCombatLogging = 0x3a0197, + SetAllowRecentAlliesSeeLocation = 0x3a0308, + SetAssistantLeader = 0x40007b, + SetBackpackAutosortDisabled = 0x3a0219, + SetBackpackSellJunkDisabled = 0x3a021a, + SetBankAutosortDisabled = 0x3a021b, + SetContactNotes = 0x400102, + SetCurrencyFlags = 0x3a0015, + SetDifficultyId = 0x3a00e4, + SetDungeonDifficulty = 0x4000ae, + SetEmpowerMinHoldStagePercent = 0x3a013f, + SetEveryoneIsAssistant = 0x400046, + SetExcludedChatCensorSources = 0x400133, + SetFactionAtWar = 0x3b0077, + SetFactionInactive = 0x3b0079, + SetFactionNotAtWar = 0x3b0078, + SetGameEventDebugViewState = 0x3a006b, + SetInsertItemsLeftToRight = 0x3a021d, + SetLootMethod = 0x400074, + SetLootSpecialization = 0x3b00df, + SetPartyAssignment = 0x40007d, + SetPartyLeader = 0x400076, + SetPetFavorite = 0x3a0012, + SetPetSlot = 0x3a0011, + SetPetSpecialization = 0x3a0013, + SetPlayerDeclinedNames = 0x4000b4, + SetPreferredCemetery = 0x3a0024, + SetPvp = 0x3a018d, + SetRaidDifficulty = 0x40010b, + SetRestrictPingsToAssistants = 0x400047, + SetRole = 0x400005, + SetSavedInstanceExtend = 0x4000b2, + SetSelection = 0x3b00c8, + SetSheathed = 0x3b001b, + SetSortBagsRightToLeft = 0x3a021c, + SetTaxiBenchmarkMode = 0x3b008c, + SetTitle = 0x3a0156, + SetTradeCurrency = 0x3a000a, + SetTradeGold = 0x3a0009, + SetTradeItem = 0x3a0007, + SetUsingPartyGarrison = 0x3a01d8, + SetWarMode = 0x3a018e, + SetWatchedFaction = 0x3b007a, + ShowTradeSkill = 0x4000f1, + SignPetition = 0x3b00d3, + SilencePartyTalker = 0x40007e, + SocialContractRequest = 0x400176, + SocketGems = 0x3b0084, + SortAccountBankBags = 0x3a02e5, + SortBags = 0x3a021e, + SortBankBags = 0x3a021f, + SpawnTrackingUpdate = 0x3a016b, + SpectateChange = 0x3a02d7, + SpellClick = 0x3b0028, + SpellEmpowerRelease = 0x3a013d, + SpellEmpowerRestart = 0x3a013e, + SpiritHealerActivate = 0x3b0043, + SplitGuildBankItem = 0x3b0054, + SplitGuildBankItemToInventory = 0x3b0051, + SplitItem = 0x3d0008, + SplitItemToGuildBank = 0x3b004f, + StandStateChange = 0x3a0035, + StartChallengeMode = 0x3b00eb, + StartInstanceAbandonVote = 0x400060, + StartSpectatorWarGame = 0x40000b, + StartWarGame = 0x40000a, + StoreGuildBankItem = 0x3b004a, + SubmitUserFeedback = 0x4000c2, + SubscriptionInterstitialResponse = 0x3a0297, + SummonResponse = 0x400096, + SupportTicketSubmitComplaint = 0x400072, + SurrenderArena = 0x3a0020, + SuspendCommsAck = 0x410000, + SuspendTokenResponse = 0x410008, + SwapGuildBankItemWithGuildBankItem = 0x3b004c, + SwapInvItem = 0x3d0007, + SwapItem = 0x3d0006, + SwapItemWithGuildBankItem = 0x3b004b, + SwapSubGroups = 0x400079, + TabardVendorActivate = 0x3a018a, + TalkToGossip = 0x3b0025, + TaxiNodeStatusQuery = 0x3b003c, + TaxiQueryAvailableNodes = 0x3b003e, + TaxiRequestEarlyLanding = 0x3b0040, + TimeAdjustmentResponse = 0x3e005f, + TimeSyncResponse = 0x3e005c, + TimeSyncResponseDropped = 0x3e005e, + TimeSyncResponseFailed = 0x3e005d, + ToggleDifficulty = 0x400083, + TogglePvp = 0x3a018c, + TotemDestroyed = 0x3b0091, ToyClearFanfare = 0x290004, - TradeSkillSetFavorite = 0x2f0232, - TrainerBuySpell = 0x300041, - TrainerList = 0x300040, - TraitsCommitConfig = 0x2f02ba, - TraitsTalentTestUnlearnSpells = 0x2f02b8, - TransferCurrencyFromAccountCharacter = 0x2f02e8, - TransmogrifyItems = 0x2f0043, - TurnInPetition = 0x3000d3, - Tutorial = 0x34010b, - UiMapQuestLinesRequest = 0x2f0262, - UnacceptTrade = 0x2f0005, - UndeleteCharacter = 0x34010d, - UnlearnSkill = 0x30007d, - UnlearnSpecialization = 0x2f0051, - UpdateAadcStatus = 0x340165, - UpdateAccountBankTabSettings = 0x30012a, - UpdateAccountData = 0x3400c3, - UpdateAreaTriggerVisual = 0x2f0177, + TradeSkillSetFavorite = 0x3a0238, + TrainerBuySpell = 0x3b0042, + TrainerList = 0x3b0041, + TraitsCommitConfig = 0x3a02c0, + TraitsTalentTestUnlearnSpells = 0x3a02be, + TransferCurrencyFromAccountCharacter = 0x3a02ee, + TransmogrifyItems = 0x3a0043, + TurnInPetition = 0x3b00d5, + Tutorial = 0x40010c, + UiMapQuestLinesRequest = 0x3a0268, + UnacceptTrade = 0x3a0005, + UndeleteCharacter = 0x40010e, + UnlearnSkill = 0x3b007e, + UnlearnSpecialization = 0x3a0057, + UpdateAadcStatus = 0x400166, + UpdateAccountBankTabSettings = 0x3b012d, + UpdateAccountData = 0x4000c4, + UpdateAreaTriggerVisual = 0x3a017a, UpdateClientSettings = 0x340090, - UpdateCraftingNpcRecipes = 0x2f01e5, - UpdateMissileTrajectory = 0x320060, - UpdateRaidTarget = 0x34007c, - UpdateSpellVisual = 0x2f0176, - UpdateVasPurchaseStates = 0x340122, - UpgradeGarrison = 0x2f019b, - UpgradeRuneforgeLegendary = 0x2f028f, - UsedFollow = 0x2f0032, - UseCritterItem = 0x2f0109, - UseEquipmentSet = 0x310001, - UseItem = 0x2f0170, - UseToy = 0x2f0173, - VasCheckTransferOk = 0x340138, - VasGetQueueMinutes = 0x340137, - VasGetServiceStatus = 0x340136, - ViolenceLevel = 0x2f0030, - VoiceChannelSttTokenRequest = 0x34013c, - VoiceChatJoinChannel = 0x34013d, - VoiceChatLogin = 0x34013b, - Warden3Data = 0x340018, - Who = 0x3400ad, - WhoIs = 0x3400ac, - WorldLootObjectClick = 0x2f02d5, - WorldPortResponse = 0x340025, - WrapItem = 0x310000, + UpdateCraftingNpcRecipes = 0x3a01ea, + UpdateMissileTrajectory = 0x3e0062, + UpdateRaidTarget = 0x40007c, + UpdateSpellVisual = 0x3a0179, + UpdateVasPurchaseStates = 0x400123, + UpgradeGarrison = 0x3a019f, + UpgradeRuneforgeLegendary = 0x3a0295, + UsedFollow = 0x3a0032, + UseCritterItem = 0x3a010c, + UseEquipmentSet = 0x3d0001, + UseItem = 0x3a0173, + UseToy = 0x3a0176, + VasCheckTransferOk = 0x400139, + VasGetQueueMinutes = 0x400138, + VasGetServiceStatus = 0x400137, + ViolenceLevel = 0x3a0030, + VoiceChannelSttTokenRequest = 0x40013d, + VoiceChatJoinChannel = 0x40013e, + VoiceChatLogin = 0x40013c, + Warden3Data = 0x400018, + Who = 0x4000ad, + WhoIs = 0x4000ac, + WorldLootObjectClick = 0x3a02db, + WorldPortResponse = 0x400025, + WrapItem = 0x3d0000, Unknown = 0xbadd } public enum ServerOpcodes : uint { - AbortNewWorld = 0x360030, - AccountCharacterCurrencyLists = 0x360347, - AccountConversionStateUpdate = 0x36034c, - AccountCosmeticAdded = 0x360300, - AccountCriteriaUpdate = 0x3602e8, - AccountDataTimes = 0x3601a8, - AccountExportResponse = 0x360338, - AccountItemCollectionData = 0x360352, - AccountMountRemoved = 0x360047, - AccountMountUpdate = 0x360046, - AccountNotificationsResponse = 0x3602ff, - AccountStoreCurrencyUpdate = 0x360321, - AccountStoreFrontUpdate = 0x360322, - AccountStoreItemStateChanged = 0x360323, - AccountStoreResult = 0x360324, - AccountToyUpdate = 0x360048, - AccountTransmogSetFavoritesUpdate = 0x36004c, - AccountTransmogUpdate = 0x36004b, - AccountWarbandSceneUpdate = 0x36004e, - AchievementDeleted = 0x360185, - AchievementEarned = 0x3600e0, - ActivateEssenceFailed = 0x4a0020, - ActivateSoulbindFailed = 0x4a0022, - ActivateTaxiReply = 0x36011c, - ActiveGlyphs = 0x4d0045, - ActiveScheduledWorldStateInfo = 0x3601e3, - AddonListRequest = 0x3600df, - AddBattlenetFriendResponse = 0x3600da, - AddItemPassive = 0x360042, - AddLossOfControl = 0x36010f, - AddRunePower = 0x360156, - AdjustSplineDuration = 0x360069, - AdvancedCombatLog = 0x3602fd, - AdventureJournalDataResponse = 0x3602f8, - AeLootTargets = 0x3600b5, - AeLootTargetAck = 0x3600b6, - AiReaction = 0x360153, - AlliedRaceDetails = 0x360291, - AllAccountCriteria = 0x360005, - AllAchievementData = 0x360004, - AllGuildAchievements = 0x420000, - ApplyMountEquipmentResult = 0x3602d5, - ArchaeologySurveryCast = 0x36001d, - AreaPoiUpdateResponse = 0x4a0018, - AreaSpiritHealerTime = 0x3601dc, - AreaTriggerDenied = 0x370004, - AreaTriggerNoCorpse = 0x3601b4, - AreaTriggerPlaySpellVisual = 0x370002, - AreaTriggerUpdateDecalProperties = 0x370003, - ArenaClearOpponents = 0x3600e6, - ArenaCrowdControlSpellResult = 0x3600cf, - ArenaPrepOpponentSpecializations = 0x3600e5, - ArtifactEndgamePowersRefunded = 0x36023e, - ArtifactForgeError = 0x36023c, - ArtifactRespecPrompt = 0x36023d, - ArtifactXpGain = 0x360284, - AttackerStateUpdate = 0x3c002c, - AttackStart = 0x3c0017, - AttackStop = 0x3c0018, - AttackSwingError = 0x3c0026, - AttackSwingLandedLog = 0x3c0027, - AuctionableTokenAuctionSold = 0x36026d, - AuctionableTokenSellAtMarketPriceResponse = 0x36026c, - AuctionableTokenSellConfirmRequired = 0x36026b, - AuctionClosedNotification = 0x360190, - AuctionCommandResult = 0x36018d, - AuctionDisableNewPostings = 0x360325, - AuctionFavoriteList = 0x3602ef, - AuctionGetCommodityQuoteResult = 0x3602e7, - AuctionHelloResponse = 0x36018b, - AuctionListBiddedItemsResult = 0x3602e6, - AuctionListBucketsResult = 0x3602e2, - AuctionListItemsResult = 0x3602e3, - AuctionListOwnedItemsResult = 0x3602e5, - AuctionOutbidNotification = 0x36018f, - AuctionOwnerBidNotification = 0x360191, - AuctionReplicateResponse = 0x36018c, - AuctionWonNotification = 0x36018e, - AuraPointsDepleted = 0x4d0012, - AuraUpdate = 0x4d0011, - AuthChallenge = 0x3d0000, - AuthFailed = 0x360000, - AuthResponse = 0x360001, - AvailableHotfixes = 0x3a0001, - BackpackDefaultSizeChanged = 0x360326, - BagCleanupFinished = 0x4e0007, - BarberShopResult = 0x36015b, - BatchPresenceSubscription = 0x3602c6, - BattlefieldList = 0x3c0005, - BattlefieldPortDenied = 0x3c000b, - BattlefieldStatusActive = 0x3c0001, - BattlefieldStatusFailed = 0x3c0004, - BattlefieldStatusGroupProposalFailed = 0x3c000e, - BattlefieldStatusNeedConfirmation = 0x3c0000, - BattlefieldStatusNone = 0x3c0003, - BattlefieldStatusQueued = 0x3c0002, - BattlefieldStatusWaitForGroups = 0x3c000d, - BattlegroundInfoThrottled = 0x3c000c, - BattlegroundInit = 0x3c0029, - BattlegroundPlayerJoined = 0x3c0009, - BattlegroundPlayerLeft = 0x3c000a, - BattlegroundPlayerPositions = 0x3c0006, - BattlegroundPoints = 0x3c0028, - BattlenetChallengeAbort = 0x360226, - BattlenetChallengeStart = 0x360225, - BattlenetNotification = 0x36029d, - BattlenetResponse = 0x36029c, - BattleNetConnectionStatus = 0x36029e, - BattlePayAckFailed = 0x360221, - BattlePayBattlePetDelivered = 0x360216, - BattlePayCollectionItemDelivered = 0x360217, - BattlePayConfirmPurchase = 0x360220, - BattlePayDeliveryEnded = 0x360214, - BattlePayDeliveryStarted = 0x360213, - BattlePayDistributionAssignVasResponse = 0x360305, - BattlePayDistributionUnrevoked = 0x360211, - BattlePayDistributionUpdate = 0x360212, - BattlePayGetDistributionListResponse = 0x360210, - BattlePayGetProductListResponse = 0x36020e, - BattlePayGetPurchaseListResponse = 0x36020f, - BattlePayMountDelivered = 0x360215, - BattlePayPurchaseUpdate = 0x36021f, - BattlePayStartCheckout = 0x3602ba, - BattlePayStartDistributionAssignToTargetResponse = 0x36021d, - BattlePayStartPurchaseResponse = 0x36021c, - BattlePayValidatePurchaseResponse = 0x3602ad, - BattlePetsHealed = 0x36008b, - BattlePetCageDateError = 0x360117, - BattlePetDeleted = 0x360088, - BattlePetError = 0x3600d5, - BattlePetJournal = 0x360087, - BattlePetJournalLockAcquired = 0x360085, - BattlePetJournalLockDenied = 0x360086, - BattlePetRestored = 0x36008a, - BattlePetRevoked = 0x360089, - BattlePetTrapLevel = 0x360083, - BattlePetUpdates = 0x360082, - BindPointUpdate = 0x360011, - BlackMarketBidOnItemResult = 0x3600c5, - BlackMarketOutbid = 0x3600c6, - BlackMarketRequestItemsResult = 0x3600c4, - BlackMarketWon = 0x3600c7, - BonusRollEmpty = 0x3600e2, - BossKill = 0x3c002b, - BreakTarget = 0x3c0016, - BroadcastAchievement = 0x3b0012, - BroadcastSummonCast = 0x3602c8, - BroadcastSummonResponse = 0x3602c9, - BuyFailed = 0x360164, - BuySucceeded = 0x360163, - CacheInfo = 0x3a000f, - CacheVersion = 0x3a000e, - CalendarClearPendingAction = 0x36013c, - CalendarCommandResult = 0x36013d, - CalendarCommunityInvite = 0x36012c, - CalendarEventRemovedAlert = 0x360134, - CalendarEventUpdatedAlert = 0x360135, - CalendarInviteAdded = 0x36012d, - CalendarInviteAlert = 0x360131, - CalendarInviteNotes = 0x360136, - CalendarInviteNotesAlert = 0x360137, - CalendarInviteRemoved = 0x36012e, - CalendarInviteRemovedAlert = 0x360133, - CalendarInviteStatus = 0x36012f, - CalendarInviteStatusAlert = 0x360132, - CalendarModeratorStatus = 0x360130, - CalendarRaidLockoutAdded = 0x360138, - CalendarRaidLockoutRemoved = 0x360139, - CalendarRaidLockoutUpdated = 0x36013a, - CalendarSendCalendar = 0x36012a, - CalendarSendEvent = 0x36012b, - CalendarSendNumPending = 0x36013b, - CameraEffect = 0x3601c2, - CancelAutoRepeat = 0x36017b, - CancelCombat = 0x3c0025, - CancelOrphanSpellVisual = 0x4d0037, - CancelPingPin = 0x36003b, - CancelPreloadWorld = 0x36002e, - CancelScene = 0x3600d4, - CancelSpellVisual = 0x4d0035, - CancelSpellVisualKit = 0x4d0039, - CanDuelResult = 0x3c0021, - CanRedeemTokenForBalanceResponse = 0x3602ac, - CapturePointRemoved = 0x3c0008, - CastFailed = 0x4d0048, - CasRefreshRemoteData = 0x360115, - CatalogShopLicenseData = 0x3602ae, - CatalogShopObtainLicense = 0x360358, - CatalogShopOpenCheckoutResult = 0x360353, - CautionaryChannelMessage = 0x3b0009, - CautionaryChatMessage = 0x3b0008, - ChainMissileBounce = 0x360061, - ChallengeModeComplete = 0x3600a6, - ChallengeModeNewPlayerRecord = 0x3600a7, - ChallengeModeRequestLeadersResult = 0x3600ad, - ChallengeModeReset = 0x3600a5, - ChallengeModeSetLeaverPenaltyTimer = 0x4a0030, - ChallengeModeStart = 0x3600a3, - ChallengeModeUpdateDeathCount = 0x3600a4, - ChangePlayerDifficultyResult = 0x4a000c, - ChangeRealmTicketResponse = 0x36029f, - ChannelList = 0x3b001b, - ChannelNotify = 0x3b0017, - ChannelNotifyJoined = 0x3b0019, - ChannelNotifyLeft = 0x3b001a, - ChannelNotifyNpeJoinedBatch = 0x3b0018, - CharacterCheckUpgradeResult = 0x360259, - CharacterLoginFailed = 0x3601a2, - CharacterObjectTestResponse = 0x360224, - CharacterRenameResult = 0x3601ff, - CharacterUpgradeAborted = 0x360258, - CharacterUpgradeComplete = 0x360257, - CharacterUpgradeManualUnrevokeResult = 0x36025a, - CharacterUpgradeStarted = 0x360256, - CharCustomizeFailure = 0x36017f, - CharCustomizeSuccess = 0x360180, - CharFactionChangeResult = 0x360243, - Chat = 0x3b0001, - ChatAutoResponded = 0x3b000e, - ChatCanLocalWhisperTargetResponse = 0x3b0022, - ChatDown = 0x3b0014, - ChatIgnoredAccountMuted = 0x3b0000, - ChatIsDown = 0x3b0015, - ChatNotInGuild = 0x3b0023, - ChatNotInParty = 0x3b0006, - ChatPlayerAmbiguous = 0x3b0004, - ChatPlayerNotfound = 0x3b000d, - ChatReconnect = 0x3b0016, - ChatRegionalServiceStatus = 0x3b001d, - ChatRestricted = 0x3b0007, - ChatServerMessage = 0x3b001c, - CheatIgnoreDimishingReturns = 0x4d0002, - CheckAbandonNpe = 0x4a0023, - CheckCharacterNameAvailabilityResult = 0x36001b, - CheckWargameEntry = 0x360027, - ChromieTimeSelectExpansionSuccess = 0x3602f2, - ClaimRafRewardResponse = 0x3602d9, - ClearAllSpellCharges = 0x4d0016, - ClearBossEmotes = 0x360054, - ClearCooldown = 0x360158, - ClearCooldowns = 0x4d0015, - ClearResurrect = 0x360013, - ClearSpellCharges = 0x4d0017, - ClearTarget = 0x3c0022, - ClearTreasurePickerCache = 0x4b0022, - CloseArtifactForge = 0x36023b, - ClubFinderErrorMessage = 0x3602d1, - ClubFinderGetClubPostingIdsResponse = 0x3602d4, - ClubFinderLookupClubPostingsList = 0x3602d2, - ClubFinderResponseCharacterApplicationList = 0x3602cf, - ClubFinderResponsePostRecruitmentMessage = 0x3602d3, - ClubFinderUpdateApplications = 0x3602d0, - ClubFinderWhisperApplicantResponse = 0x360311, - CoinRemoved = 0x3600b4, - CombatEventFailed = 0x3c0019, - CommentatorMapInfo = 0x3601a4, - CommentatorPlayerInfo = 0x3601a5, - CommentatorStateChanged = 0x3601a3, - CommerceTokenGetCountResponse = 0x360268, - CommerceTokenGetLogResponse = 0x360274, - CommerceTokenGetMarketPriceResponse = 0x36026a, - CommerceTokenUpdate = 0x360269, - ComplaintResult = 0x36014a, - CompleteShipmentResponse = 0x360234, - ConfirmPartyInvite = 0x3602ab, - ConnectTo = 0x3d0005, - ConsoleWrite = 0x3600d2, - ConsumableTokenBuyAtMarketPriceResponse = 0x360270, - ConsumableTokenBuyChoiceRequired = 0x36026f, - ConsumableTokenCanVeteranBuyResponse = 0x36026e, - ConsumableTokenRedeemConfirmRequired = 0x360272, - ConsumableTokenRedeemResponse = 0x360273, - ContactList = 0x360222, - ContributionLastUpdateResponse = 0x3602b3, - ControlUpdate = 0x3600e4, - ConvertItemsToCurrencyValue = 0x3602fb, - CooldownCheat = 0x3601d5, - CooldownEvent = 0x360157, - CorpseLocation = 0x3600eb, - CorpseReclaimDelay = 0x3601e6, - CorpseTransportQuery = 0x3601b0, - CovenantCallingsAvailabilityResponse = 0x4b0024, - CovenantPreviewOpenNpc = 0x360294, - CovenantRenownSendCatchupState = 0x3602fc, - CraftingHouseHelloResponse = 0x360332, - CraftingOrderCancelResult = 0x36032e, - CraftingOrderClaimResult = 0x36032a, - CraftingOrderCraftResult = 0x36032c, - CraftingOrderCreateResult = 0x360328, - CraftingOrderFulfillResult = 0x36032d, - CraftingOrderListOrdersResponse = 0x360329, - CraftingOrderNpcRewardInfo = 0x360334, - CraftingOrderRejectResult = 0x360330, - CraftingOrderReleaseResult = 0x36032b, - CraftingOrderUpdateState = 0x360333, - CraftEnchantResult = 0x360331, - CreateChar = 0x36019e, - CreateShipmentResponse = 0x360233, - CreatorVisualsOverride = 0x360337, - CriteriaDeleted = 0x360184, - CriteriaUpdate = 0x36017e, - CrossedInebriationThreshold = 0x36015f, - CurrencyTransferLog = 0x360349, - CurrencyTransferResult = 0x360348, - CustomLoadScreen = 0x360064, - DailyQuestsReset = 0x4b0000, - DamageCalcLog = 0x4d0054, - DbReply = 0x3a0000, - DeathReleaseLoc = 0x360171, - DebugMenuManagerFullUpdate = 0x3600f3, - DefenseMessage = 0x3b000c, - DeleteChar = 0x36019f, - DeleteExpiredMissionsResult = 0x400022, - DelvesAccountDataElementChanged = 0x36034e, - DestroyArenaUnit = 0x3601de, - DestructibleBuildingDamage = 0x360196, - DifferentInstanceFromParty = 0x360020, - DisenchantCredit = 0x36003f, - DismountResult = 0x360010, - DispelFailed = 0x4d001e, - DisplayGameError = 0x360035, - DisplayPlayerChoice = 0x4a0004, - DisplayPromotion = 0x3600e8, - DisplayQuestPopup = 0x4b001e, - DisplayToast = 0x3600c1, - DisplayWorldText = 0x360285, - DisplayWorldTextOnTarget = 0x4d0053, - DontAutoPushSpellsToActionBar = 0x360079, - DropNewConnection = 0x3d0004, - DuelArranged = 0x3c001b, - DuelComplete = 0x3c001f, - DuelCountdown = 0x3c001e, - DuelInBounds = 0x3c001d, - DuelOutOfBounds = 0x3c001c, - DuelRequested = 0x3c001a, - DuelWinner = 0x3c0020, - DurabilityDamageDeath = 0x3601e1, - Emote = 0x360260, - EnableBarberShop = 0x36015a, - EnchantmentLog = 0x3601b1, - EncounterEnd = 0x36021b, - EncounterStart = 0x36021a, - EndLightningStorm = 0x360147, - EnterEncryptedMode = 0x3d0001, - EnumCharactersResult = 0x360018, - EnumVasPurchaseStatesResponse = 0x36028a, - EnvironmentalDamageLog = 0x4d000e, - EquipmentSetId = 0x360150, - ExpectedSpamRecords = 0x3b0005, - ExplorationExperience = 0x3601fb, - ExportAccountProfile = 0x3600f0, - ExternalTransactionIdGenerated = 0x3602f9, - FactionBonusInfo = 0x3601c1, - FailedPlayerCondition = 0x4a0002, - FailedQuestTurnIn = 0x3602a8, - FeatureSystemStatus = 0x360058, + AbortNewWorld = 0x420030, + AccountCharacterCurrencyLists = 0x420353, + AccountConversionStateUpdate = 0x420358, + AccountCosmeticAdded = 0x420311, + AccountCriteriaUpdate = 0x4202f9, + AccountDataTimes = 0x4201b4, + AccountExportResponse = 0x420342, + AccountItemCollectionData = 0x42035e, + AccountMountRemoved = 0x420047, + AccountMountUpdate = 0x420046, + AccountNotificationsResponse = 0x420310, + AccountStoreCurrencyUpdate = 0x42032b, + AccountStoreFrontUpdate = 0x42032c, + AccountStoreItemStateChanged = 0x42032d, + AccountStoreResult = 0x42032e, + AccountToyUpdate = 0x420048, + AccountTransmogSetFavoritesUpdate = 0x420050, + AccountTransmogUpdate = 0x42004f, + AccountWarbandSceneUpdate = 0x420052, + AchievementDeleted = 0x420191, + AchievementEarned = 0x4200eb, + ActivateEssenceFailed = 0x5f0021, + ActivateSoulbindFailed = 0x5f0023, + ActivateTaxiReply = 0x420127, + ActiveGlyphs = 0x620047, + ActiveScheduledWorldStateInfo = 0x4201ef, + AddonListRequest = 0x4200ea, + AddBattlenetFriendResponse = 0x4200e5, + AddItemPassive = 0x420042, + AddLossOfControl = 0x42011a, + AddRunePower = 0x420162, + AdjustSplineDuration = 0x420073, + AdvancedCombatLog = 0x42030e, + AdventureJournalDataResponse = 0x420309, + AeLootTargets = 0x4200c0, + AeLootTargetAck = 0x4200c1, + AiReaction = 0x42015f, + AlliedRaceDetails = 0x4202a2, + AllAccountCriteria = 0x420005, + AllAchievementData = 0x420004, + AllGuildAchievements = 0x4e0000, + ApplyMountEquipmentResult = 0x4202e6, + ArchaeologySurveryCast = 0x42001d, + AreaPoiUpdateResponse = 0x5f0019, + AreaSpiritHealerTime = 0x4201e8, + AreaTriggerDenied = 0x430004, + AreaTriggerNoCorpse = 0x4201c0, + AreaTriggerPlaySpellVisual = 0x430002, + AreaTriggerUpdateDecalProperties = 0x430003, + ArenaClearOpponents = 0x4200f1, + ArenaCrowdControlSpellResult = 0x4200da, + ArenaPrepOpponentSpecializations = 0x4200f0, + ArtifactEndgamePowersRefunded = 0x420250, + ArtifactForgeError = 0x42024e, + ArtifactRespecPrompt = 0x42024f, + ArtifactXpGain = 0x420295, + AttackerStateUpdate = 0x48002c, + AttackStart = 0x480017, + AttackStop = 0x480018, + AttackSwingError = 0x480026, + AttackSwingLandedLog = 0x480027, + AuctionableTokenAuctionSold = 0x42027e, + AuctionableTokenSellAtMarketPriceResponse = 0x42027d, + AuctionableTokenSellConfirmRequired = 0x42027c, + AuctionClosedNotification = 0x42019c, + AuctionCommandResult = 0x420199, + AuctionDisableNewPostings = 0x42032f, + AuctionFavoriteList = 0x420300, + AuctionGetCommodityQuoteResult = 0x4202f8, + AuctionHelloResponse = 0x420197, + AuctionListBiddedItemsResult = 0x4202f7, + AuctionListBucketsResult = 0x4202f3, + AuctionListItemsResult = 0x4202f4, + AuctionListOwnedItemsResult = 0x4202f6, + AuctionOutbidNotification = 0x42019b, + AuctionOwnerBidNotification = 0x42019d, + AuctionReplicateResponse = 0x420198, + AuctionWonNotification = 0x42019a, + AuraPointsDepleted = 0x620012, + AuraUpdate = 0x620011, + AuthChallenge = 0x490000, + AuthFailed = 0x420000, + AuthResponse = 0x420001, + AvailableHotfixes = 0x460001, + BackpackDefaultSizeChanged = 0x420330, + BagCleanupFinished = 0x630007, + BarberShopResult = 0x420167, + BatchPresenceSubscription = 0x4202d7, + BattlefieldList = 0x480005, + BattlefieldPortDenied = 0x48000b, + BattlefieldStatusActive = 0x480001, + BattlefieldStatusFailed = 0x480004, + BattlefieldStatusGroupProposalFailed = 0x48000e, + BattlefieldStatusNeedConfirmation = 0x480000, + BattlefieldStatusNone = 0x480003, + BattlefieldStatusQueued = 0x480002, + BattlefieldStatusWaitForGroups = 0x48000d, + BattlegroundInfoThrottled = 0x48000c, + BattlegroundInit = 0x480029, + BattlegroundPlayerJoined = 0x480009, + BattlegroundPlayerLeft = 0x48000a, + BattlegroundPlayerPositions = 0x480006, + BattlegroundPoints = 0x480028, + BattlenetChallengeAbort = 0x420238, + BattlenetChallengeStart = 0x420237, + BattlenetNotification = 0x4202ae, + BattlenetResponse = 0x4202ad, + BattleNetConnectionStatus = 0x4202af, + BattlePayAckFailed = 0x420233, + BattlePayBattlePetDelivered = 0x420222, + BattlePayCollectionItemDelivered = 0x420223, + BattlePayConfirmPurchase = 0x420232, + BattlePayDeliveryEnded = 0x420220, + BattlePayDeliveryStarted = 0x42021f, + BattlePayDistributionAssignVasResponse = 0x420316, + BattlePayDistributionUnrevoked = 0x42021d, + BattlePayDistributionUpdate = 0x42021e, + BattlePayGetDistributionListResponse = 0x42021c, + BattlePayGetProductListResponse = 0x42021a, + BattlePayGetPurchaseListResponse = 0x42021b, + BattlePayMountDelivered = 0x420221, + BattlePayPurchaseUpdate = 0x420231, + BattlePayStartCheckout = 0x4202cb, + BattlePayStartDistributionAssignToTargetResponse = 0x42022f, + BattlePayStartPurchaseResponse = 0x42022e, + BattlePayValidatePurchaseResponse = 0x4202be, + BattlePetsHealed = 0x420095, + BattlePetCageDateError = 0x420122, + BattlePetDeleted = 0x420092, + BattlePetError = 0x4200e0, + BattlePetJournal = 0x420091, + BattlePetJournalLockAcquired = 0x42008f, + BattlePetJournalLockDenied = 0x420090, + BattlePetRestored = 0x420094, + BattlePetRevoked = 0x420093, + BattlePetTrapLevel = 0x42008d, + BattlePetUpdates = 0x42008c, + BindPointUpdate = 0x420011, + BlackMarketBidOnItemResult = 0x4200d0, + BlackMarketOutbid = 0x4200d1, + BlackMarketRequestItemsResult = 0x4200cf, + BlackMarketWon = 0x4200d2, + BonusRollEmpty = 0x4200ed, + BossKill = 0x48002b, + BreakTarget = 0x480016, + BroadcastAchievement = 0x470012, + BroadcastSummonCast = 0x4202d9, + BroadcastSummonResponse = 0x4202da, + BuyFailed = 0x420170, + BuySucceeded = 0x42016f, + CacheInfo = 0x46000f, + CacheVersion = 0x46000e, + CalendarClearPendingAction = 0x420147, + CalendarCommandResult = 0x420148, + CalendarCommunityInvite = 0x420137, + CalendarEventRemovedAlert = 0x42013f, + CalendarEventUpdatedAlert = 0x420140, + CalendarInviteAdded = 0x420138, + CalendarInviteAlert = 0x42013c, + CalendarInviteNotes = 0x420141, + CalendarInviteNotesAlert = 0x420142, + CalendarInviteRemoved = 0x420139, + CalendarInviteRemovedAlert = 0x42013e, + CalendarInviteStatus = 0x42013a, + CalendarInviteStatusAlert = 0x42013d, + CalendarModeratorStatus = 0x42013b, + CalendarRaidLockoutAdded = 0x420143, + CalendarRaidLockoutRemoved = 0x420144, + CalendarRaidLockoutUpdated = 0x420145, + CalendarSendCalendar = 0x420135, + CalendarSendEvent = 0x420136, + CalendarSendNumPending = 0x420146, + CameraEffect = 0x4201ce, + CancelAutoRepeat = 0x420187, + CancelCombat = 0x480025, + CancelOrphanSpellVisual = 0x620039, + CancelPingPin = 0x42003b, + CancelPreloadWorld = 0x42002e, + CancelScene = 0x4200df, + CancelSpellVisual = 0x620037, + CancelSpellVisualKit = 0x62003b, + CanDuelResult = 0x480021, + CanRedeemTokenForBalanceResponse = 0x4202bd, + CapturePointRemoved = 0x480008, + CastFailed = 0x62004a, + CasRefreshRemoteData = 0x420120, + CatalogShopLicenseData = 0x4202bf, + CatalogShopObtainLicense = 0x42036c, + CatalogShopOpenCheckoutResult = 0x42035f, + CautionaryChannelMessage = 0x470009, + CautionaryChatMessage = 0x470008, + ChainMissileBounce = 0x42006b, + ChallengeModeComplete = 0x4200b0, + ChallengeModeNewPlayerRecord = 0x4200b1, + ChallengeModeRequestLeadersResult = 0x4200b7, + ChallengeModeReset = 0x4200af, + ChallengeModeSetLeaverPenaltyTimer = 0x5f0031, + ChallengeModeStart = 0x4200ad, + ChallengeModeUpdateDeathCount = 0x4200ae, + ChangePlayerDifficultyResult = 0x5f000d, + ChangeRealmTicketResponse = 0x4202b0, + ChannelList = 0x47001b, + ChannelNotify = 0x470017, + ChannelNotifyJoined = 0x470019, + ChannelNotifyLeft = 0x47001a, + ChannelNotifyNpeJoinedBatch = 0x470018, + CharacterCheckUpgradeResult = 0x42026a, + CharacterLoginFailed = 0x4201ae, + CharacterObjectTestResponse = 0x420236, + CharacterRenameResult = 0x42020b, + CharacterUpgradeAborted = 0x420269, + CharacterUpgradeComplete = 0x420268, + CharacterUpgradeManualUnrevokeResult = 0x42026b, + CharacterUpgradeStarted = 0x420267, + CharCustomizeFailure = 0x42018b, + CharCustomizeSuccess = 0x42018c, + CharFactionChangeResult = 0x420254, + Chat = 0x470001, + ChatAutoResponded = 0x47000e, + ChatCanLocalWhisperTargetResponse = 0x470022, + ChatDown = 0x470014, + ChatIgnoredAccountMuted = 0x470000, + ChatIsDown = 0x470015, + ChatNotInGuild = 0x470023, + ChatNotInParty = 0x470006, + ChatPlayerAmbiguous = 0x470004, + ChatPlayerNotfound = 0x47000d, + ChatReconnect = 0x470016, + ChatRegionalServiceStatus = 0x47001d, + ChatRestricted = 0x470007, + ChatServerMessage = 0x47001c, + CheatIgnoreDimishingReturns = 0x620002, + CheckAbandonNpe = 0x5f0024, + CheckCharacterNameAvailabilityResult = 0x42001b, + CheckWargameEntry = 0x420027, + ChromieTimeSelectExpansionSuccess = 0x420303, + ClaimRafRewardResponse = 0x4202ea, + ClearAllSpellCharges = 0x620016, + ClearBossEmotes = 0x42005e, + ClearCooldown = 0x420164, + ClearCooldowns = 0x620015, + ClearResurrect = 0x420013, + ClearSpellCharges = 0x620017, + ClearTarget = 0x480022, + ClearTreasurePickerCache = 0x600022, + CloseArtifactForge = 0x42024d, + ClubFinderErrorMessage = 0x4202e2, + ClubFinderGetClubPostingIdsResponse = 0x4202e5, + ClubFinderLookupClubPostingsList = 0x4202e3, + ClubFinderResponseCharacterApplicationList = 0x4202e0, + ClubFinderResponsePostRecruitmentMessage = 0x4202e4, + ClubFinderUpdateApplications = 0x4202e1, + ClubFinderWhisperApplicantResponse = 0x42031b, + CoinRemoved = 0x4200bf, + CombatEventFailed = 0x480019, + CommentatorMapInfo = 0x4201b0, + CommentatorPlayerInfo = 0x4201b1, + CommentatorStateChanged = 0x4201af, + CommerceTokenGetCountResponse = 0x420279, + CommerceTokenGetLogResponse = 0x420285, + CommerceTokenGetMarketPriceResponse = 0x42027b, + CommerceTokenUpdate = 0x42027a, + ComplaintResult = 0x420155, + CompleteShipmentResponse = 0x420246, + ConfirmPartyInvite = 0x4202bc, + ConnectTo = 0x490008, + ConsoleWrite = 0x4200dd, + ConsumableTokenBuyAtMarketPriceResponse = 0x420281, + ConsumableTokenBuyChoiceRequired = 0x420280, + ConsumableTokenCanVeteranBuyResponse = 0x42027f, + ConsumableTokenRedeemConfirmRequired = 0x420283, + ConsumableTokenRedeemResponse = 0x420284, + ContactList = 0x420234, + ContributionLastUpdateResponse = 0x4202c4, + ControlUpdate = 0x4200ef, + ConvertItemsToCurrencyValue = 0x42030c, + CooldownCheat = 0x4201e1, + CooldownEvent = 0x420163, + CorpseLocation = 0x4200f6, + CorpseReclaimDelay = 0x4201f2, + CorpseTransportQuery = 0x4201bc, + CovenantCallingsAvailabilityResponse = 0x600024, + CovenantPreviewOpenNpc = 0x4202a5, + CovenantRenownSendCatchupState = 0x42030d, + CraftingHouseHelloResponse = 0x42033c, + CraftingOrderCancelResult = 0x420338, + CraftingOrderClaimResult = 0x420334, + CraftingOrderCraftResult = 0x420336, + CraftingOrderCreateResult = 0x420332, + CraftingOrderFulfillResult = 0x420337, + CraftingOrderListOrdersResponse = 0x420333, + CraftingOrderNpcRewardInfo = 0x42033e, + CraftingOrderRejectResult = 0x42033a, + CraftingOrderReleaseResult = 0x420335, + CraftingOrderUpdateState = 0x42033d, + CraftEnchantResult = 0x42033b, + CreateChar = 0x4201aa, + CreateShipmentResponse = 0x420245, + CreatorVisualsOverride = 0x420341, + CriteriaDeleted = 0x420190, + CriteriaUpdate = 0x42018a, + CrossedInebriationThreshold = 0x42016b, + CurrencyTransferLog = 0x420355, + CurrencyTransferResult = 0x420354, + CustomLoadScreen = 0x42006e, + DailyQuestsReset = 0x600000, + DamageCalcLog = 0x620056, + DbReply = 0x460000, + DeathReleaseLoc = 0x42017d, + DebugMenuManagerFullUpdate = 0x4200fe, + DefenseMessage = 0x47000c, + DeleteChar = 0x4201ab, + DeleteExpiredMissionsResult = 0x4c0022, + DelvesAccountDataElementChanged = 0x42035a, + DestroyArenaUnit = 0x4201ea, + DestructibleBuildingDamage = 0x4201a2, + DifferentInstanceFromParty = 0x420020, + DisenchantCredit = 0x42003f, + DismountResult = 0x420010, + DispelFailed = 0x62001e, + DisplayGameError = 0x420035, + DisplayPlayerChoice = 0x5f0004, + DisplayPromotion = 0x4200f3, + DisplayQuestPopup = 0x60001e, + DisplayToast = 0x4200cc, + DisplayWorldText = 0x420296, + DisplayWorldTextOnTarget = 0x620055, + DontAutoPushSpellsToActionBar = 0x420083, + DropNewConnection = 0x490007, + DuelArranged = 0x48001b, + DuelComplete = 0x48001f, + DuelCountdown = 0x48001e, + DuelInBounds = 0x48001d, + DuelOutOfBounds = 0x48001c, + DuelRequested = 0x48001a, + DuelWinner = 0x480020, + DurabilityDamageDeath = 0x4201ed, + Emote = 0x420271, + EnableBarberShop = 0x420166, + EnchantmentLog = 0x4201bd, + EncounterEnd = 0x420227, + EncounterStart = 0x420226, + EndLightningStorm = 0x420152, + EnterEncryptedMode = 0x490004, + EnumCharactersResult = 0x420018, + EnumVasPurchaseStatesResponse = 0x42029b, + EnvironmentalDamageLog = 0x62000e, + EquipmentSetId = 0x42015b, + ExpectedSpamRecords = 0x470005, + ExplorationExperience = 0x420207, + ExportAccountProfile = 0x4200fb, + ExternalTransactionIdGenerated = 0x42030a, + FactionBonusInfo = 0x4201cd, + FailedPlayerCondition = 0x5f0002, + FailedQuestTurnIn = 0x4202b9, + FeatureSystemStatus = 0x420062, FeatureSystemStatus2 = 0x360346, - FeatureSystemStatusGlueScreen = 0x360059, - FeignDeathResisted = 0x3601e0, - FishEscaped = 0x36016e, - FishNotHooked = 0x36016d, - FlightSplineSync = 0x48005b, - FlushCombatLogFile = 0x4d0010, - ForcedDeathUpdate = 0x360172, - ForceAnim = 0x3601ed, - ForceAnimations = 0x3601ee, - ForceRandomTransmogToast = 0x36004a, - ForceSpawnTrackingUpdate = 0x4b0021, - FriendStatus = 0x360223, - GainMawPower = 0x360279, - GameObjectActivateAnimKit = 0x36005c, - GameObjectBase = 0x3602c0, - GameObjectCloseInteraction = 0x360310, - GameObjectCustomAnim = 0x36005d, - GameObjectDespawn = 0x36005e, - GameObjectInteraction = 0x36030f, - GameObjectPlaySpellVisual = 0x4d003c, - GameObjectPlaySpellVisualKit = 0x4d003b, - GameObjectResetState = 0x3601bb, - GameObjectSetStateLocal = 0x36029b, - GameSpeedSet = 0x360120, - GameTimeSet = 0x3601aa, - GameTimeUpdate = 0x3601a9, - GarrisonActivateMissionBonusAbility = 0x400024, - GarrisonAddEvent = 0x400048, - GarrisonAddFollowerResult = 0x400016, - GarrisonAddMissionResult = 0x40001a, - GarrisonAddSpecGroups = 0x40004b, - GarrisonApplyTalentSocketDataChanges = 0x40004f, - GarrisonAssignFollowerToBuildingResult = 0x40002c, - GarrisonAutoTroopMinLevelUpdateResult = 0x400051, - GarrisonBuildingActivated = 0x40000b, - GarrisonBuildingRemoved = 0x400004, - GarrisonBuildingSetActiveSpecializationResult = 0x400006, - GarrisonChangeMissionStartTimeResult = 0x40001d, - GarrisonClearCollection = 0x400047, - GarrisonClearEventList = 0x40004a, - GarrisonClearSpecGroups = 0x40004c, - GarrisonCollectionRemoveEntry = 0x400046, - GarrisonCollectionUpdateEntry = 0x400045, - GarrisonCompleteBuildingConstructionResult = 0x40003d, - GarrisonCompleteMissionResult = 0x40001c, - GarrisonCreateResult = 0x40000c, - GarrisonDeleteMissionResult = 0x400023, - GarrisonDeleteResult = 0x400035, - GarrisonFollowerActivationsSet = 0x40002b, - GarrisonFollowerChangedFlags = 0x400029, - GarrisonFollowerChangedItemLevel = 0x400027, - GarrisonFollowerChangedQuality = 0x400028, - GarrisonFollowerChangedXp = 0x400026, - GarrisonFollowerFatigueCleared = 0x40002a, - GarrisonGenerateFollowersResult = 0x400033, - GarrisonGetClassSpecCategoryInfoResult = 0x400015, - GarrisonGetRecallPortalLastUsedTimeResult = 0x40001e, - GarrisonIsUpgradeableResponse = 0x40003f, - GarrisonLearnBlueprintResult = 0x400007, - GarrisonLearnSpecializationResult = 0x400005, - GarrisonListCompletedMissionsCheatResult = 0x400040, - GarrisonListFollowersCheatResult = 0x400019, - GarrisonMapDataResponse = 0x400042, - GarrisonMissionBonusRollResult = 0x400020, - GarrisonMissionRequestRewardInfoResponse = 0x400043, - GarrisonMissionStartConditionUpdate = 0x400025, - GarrisonOpenCrafter = 0x400037, - GarrisonOpenRecruitmentNpc = 0x400030, - GarrisonPlaceBuildingResult = 0x400003, - GarrisonPlotPlaced = 0x400001, - GarrisonPlotRemoved = 0x400002, - GarrisonRecruitFollowerResult = 0x400034, - GarrisonRemoteInfo = 0x40000a, - GarrisonRemoveEvent = 0x400049, - GarrisonRemoveFollowerAbilityResult = 0x40002f, - GarrisonRemoveFollowerFromBuildingResult = 0x40002d, - GarrisonRemoveFollowerResult = 0x400017, - GarrisonRenameFollowerResult = 0x40002e, - GarrisonRequestBlueprintAndSpecializationDataResult = 0x400009, - GarrisonResearchTalentResult = 0x40000e, - GarrisonResetTalentTree = 0x400013, - GarrisonResetTalentTreeSocketData = 0x400014, - GarrisonStartMissionResult = 0x40001b, - GarrisonSwapBuildingsResponse = 0x40003c, - GarrisonSwitchTalentTreeBranch = 0x40004d, - GarrisonTalentCompleted = 0x40000f, - GarrisonTalentRemoved = 0x400010, - GarrisonTalentRemoveSocketData = 0x400012, - GarrisonTalentUpdateSocketData = 0x400011, - GarrisonTalentWorldQuestUnlocksResponse = 0x40004e, - GarrisonUnlearnBlueprintResult = 0x400008, - GarrisonUpdateFollower = 0x400018, - GarrisonUpdateGarrisonMonumentSelections = 0x40003e, - GarrisonUpdateMissionCheatResult = 0x400050, - GarrisonUpgradeResult = 0x40000d, - GarrisonUseRecallPortalResult = 0x40001f, - GenerateRandomCharacterNameResult = 0x36001c, - GenerateSsoTokenResponse = 0x3602b4, - GetAccountCharacterListResult = 0x3601fd, - GetGarrisonInfoResult = 0x400000, - GetLandingPageShipmentsResponse = 0x360236, - GetRealmHiddenResult = 0x36033d, - GetRemainingGameTimeResponse = 0x360271, - GetSelectedTrophyIdResponse = 0x36025e, - GetShipmentsOfTypeResponse = 0x360235, - GetShipmentInfoResponse = 0x360231, - GetTrophyListResponse = 0x36025d, - GetVasAccountCharacterListResult = 0x360286, - GetVasTransferTargetRealmListResult = 0x360287, - GmPlayerInfo = 0x4a000d, - GmRequestPlayerInfo = 0x4a0003, - GmTicketCaseStatus = 0x360142, - GmTicketSystemStatus = 0x360141, - GodMode = 0x360199, - GossipComplete = 0x4b0017, - GossipMessage = 0x4b0018, - GossipOptionNpcInteraction = 0x4b0028, - GossipPoi = 0x36022e, - GossipQuestUpdate = 0x4b0019, - GossipRefreshOptions = 0x4b0027, - GroupActionThrottled = 0x360024, - GroupAutoKick = 0x36022b, - GroupDecline = 0x360227, - GroupDestroyed = 0x36022a, - GroupNewLeader = 0x3600ca, - GroupRequestDecline = 0x360228, - GroupUninvite = 0x360229, - GuildAchievementDeleted = 0x42000d, - GuildAchievementEarned = 0x42000c, - GuildAchievementMembers = 0x42000f, - GuildBankLogQueryResults = 0x420027, - GuildBankQueryResults = 0x420026, - GuildBankRemainingWithdrawMoney = 0x420028, - GuildBankTextQueryResult = 0x42002b, - GuildChallengeCompleted = 0x42001b, - GuildChallengeUpdate = 0x42001a, - GuildChangeNameResult = 0x420025, - GuildCommandResult = 0x420002, - GuildCriteriaDeleted = 0x42000e, - GuildCriteriaUpdate = 0x42000b, - GuildEventBankContentsChanged = 0x420040, - GuildEventBankMoneyChanged = 0x42003f, - GuildEventDisbanded = 0x420035, - GuildEventLogQueryResults = 0x42002a, - GuildEventMotd = 0x420036, - GuildEventNewLeader = 0x420034, - GuildEventPlayerJoined = 0x420032, - GuildEventPlayerLeft = 0x420033, - GuildEventPresenceChange = 0x420037, - GuildEventRanksUpdated = 0x420039, - GuildEventRankChanged = 0x42003a, - GuildEventStatusChange = 0x420038, - GuildEventTabAdded = 0x42003b, - GuildEventTabDeleted = 0x42003c, - GuildEventTabModified = 0x42003d, - GuildEventTabTextChanged = 0x42003e, - GuildFlaggedForRename = 0x420024, - GuildHardcoreMemberDeath = 0x420004, - GuildInvite = 0x420012, - GuildInviteDeclined = 0x420030, - GuildInviteExpired = 0x420031, - GuildItemLootedNotify = 0x42001c, - GuildKnownRecipes = 0x420006, - GuildMembersWithRecipe = 0x420007, - GuildMemberDailyReset = 0x42002c, - GuildMemberRecipes = 0x420005, - GuildMemberUpdateNote = 0x420011, - GuildMoved = 0x420022, - GuildMoveStarting = 0x420021, - GuildNameChanged = 0x420023, - GuildNews = 0x420009, - GuildNewsDeleted = 0x42000a, - GuildPartyState = 0x420013, - GuildPermissionsQueryResults = 0x420029, - GuildRanks = 0x420010, - GuildRenameNameCheck = 0x420044, - GuildRenameRefundResult = 0x420046, - GuildRenameRequestedResult = 0x420045, - GuildRenameStatusUpdate = 0x420043, - GuildReputationReactionChanged = 0x420014, - GuildReset = 0x420020, - GuildRewardList = 0x420008, - GuildRoster = 0x420003, - GuildSendRankChange = 0x420001, - HardcoreDeathAlert = 0x360345, - HealthUpdate = 0x36016f, - HighestThreatUpdate = 0x360177, - HotfixConnect = 0x3a0003, - HotfixMessage = 0x3a0002, - InitializeFactions = 0x3601c0, - InitialSetup = 0x360014, - InitWorldStates = 0x3601e2, - InspectResult = 0x3600ce, - InstanceAbandonVoteCompleted = 0x360093, - InstanceAbandonVotePlayerLeft = 0x360094, - InstanceAbandonVoteResponse = 0x360092, - InstanceAbandonVoteStarted = 0x360091, - InstanceEncounterChangePriority = 0x360249, - InstanceEncounterDisengageUnit = 0x360248, - InstanceEncounterEnd = 0x360251, - InstanceEncounterEngageUnit = 0x360247, - InstanceEncounterGainCombatResurrectionCharge = 0x360253, - InstanceEncounterInCombatResurrection = 0x360252, - InstanceEncounterObjectiveComplete = 0x36024c, - InstanceEncounterObjectiveStart = 0x36024b, - InstanceEncounterObjectiveUpdate = 0x360250, - InstanceEncounterPhaseShiftChanged = 0x360254, - InstanceEncounterStart = 0x36024d, - InstanceEncounterTimerStart = 0x36024a, - InstanceEncounterUpdateAllowReleaseInProgress = 0x36024f, - InstanceEncounterUpdateSuppressRelease = 0x36024e, - InstanceGroupSizeChanged = 0x360197, - InstanceInfo = 0x3600d1, - InstanceReset = 0x360125, - InstanceResetFailed = 0x360126, - InstanceSaveCreated = 0x360219, - InterruptPowerRegen = 0x4d004a, - InvalidatePageText = 0x3a000a, - InvalidatePlayer = 0x4a0007, - InvalidPromotionCode = 0x3601ef, - InventoryChangeFailure = 0x4e0005, - InventoryFixupComplete = 0x3602aa, - InventoryFullOverflow = 0x3602bc, - IslandAzeriteGain = 0x3601f8, - IslandComplete = 0x3601f9, - IsQuestCompleteResponse = 0x4b0004, - ItemChanged = 0x360188, - ItemCooldown = 0x36025f, - ItemEnchantTimeUpdate = 0x3601f1, - ItemExpirePurchaseRefund = 0x360034, - ItemInteractionComplete = 0x3602f1, - ItemPurchaseRefundResult = 0x360032, - ItemPushResult = 0x3600c0, - ItemTimeUpdate = 0x3601f0, - KickReason = 0x360128, - LatencyReportPing = 0x360301, - LearnedSpells = 0x4d003e, - LearnPvpTalentFailed = 0x36006d, - LearnTalentFailed = 0x36006c, - LegacyLootRules = 0x3602c1, - LevelLinkingResult = 0x3602d7, - LevelUpInfo = 0x360186, - LfgBootPlayer = 0x440019, - LfgDisabled = 0x440017, - LfgExpandSearchPrompt = 0x44001f, - LfgInstanceShutdownCountdown = 0x440009, - LfgJoinLobbyMatchmakerQueue = 0x440020, - LfgJoinResult = 0x440000, - LfgListApplicantListUpdate = 0x44000f, - LfgListApplicationStatusUpdate = 0x44000c, - LfgListApplyToGroupResult = 0x44000d, - LfgListJoinResult = 0x440001, - LfgListSearchResults = 0x440002, - LfgListSearchResultsUpdate = 0x440010, - LfgListSearchStatus = 0x440003, - LfgListUpdateBlacklist = 0x44000e, - LfgListUpdateExpiration = 0x44000b, - LfgListUpdateStatus = 0x44000a, - LfgOfferContinue = 0x440018, - LfgPartyInfo = 0x44001a, - LfgPlayerInfo = 0x44001b, - LfgPlayerReward = 0x44001c, - LfgProposalUpdate = 0x440011, - LfgQueueStatus = 0x440004, - LfgReadyCheckResult = 0x44001e, - LfgReadyCheckUpdate = 0x440006, - LfgRoleCheckUpdate = 0x440005, - LfgSlotInvalid = 0x440014, - LfgTeleportDenied = 0x440016, - LfgUpdateStatus = 0x440008, - LiveRegionAccountRestoreResult = 0x36020b, - LiveRegionCharacterCopyResult = 0x36020a, - LiveRegionGetAccountCharacterListResult = 0x3601fe, - LiveRegionKeyBindingsCopyResult = 0x36020c, - LoadCufProfiles = 0x360055, - LoadEquipmentSet = 0x3601ac, - LobbyMatchmakerLobbyAcquiredServer = 0x360312, - LobbyMatchmakerPartyInfo = 0x360313, - LobbyMatchmakerPartyInviteRejected = 0x360314, - LobbyMatchmakerQueueProposed = 0x360316, - LobbyMatchmakerQueueResult = 0x360317, - LobbyMatchmakerReceiveInvite = 0x360315, - LoginSetTimeSpeed = 0x3601ab, - LoginVerifyWorld = 0x36002f, - LogoutCancelAck = 0x360124, - LogoutComplete = 0x360123, - LogoutResponse = 0x360122, - LogXpGain = 0x360182, - LootAllPassed = 0x3600be, - LootList = 0x3601dd, - LootMoneyNotify = 0x3600b9, - LootRelease = 0x3600b8, - LootReleaseAll = 0x3600b7, - LootRemoved = 0x3600b3, - LootResponse = 0x3600b2, - LootRoll = 0x3600bb, - LootRollsComplete = 0x3600bd, - LootRollWon = 0x3600bf, - LossOfControlAuraUpdate = 0x36010e, - MailCommandResult = 0x3600d8, - MailListResult = 0x3601f2, - MailQueryNextTimeResult = 0x3601f3, - MapObjectivesInit = 0x3c002a, - MapObjEvents = 0x36005f, - MasterLootCandidateList = 0x3600bc, - MeetingStoneFailed = 0x360318, - MessageBox = 0x36000a, - MinimapPing = 0x36016c, - MirrorImageComponentedData = 0x4d0004, - MirrorImageCreatureData = 0x4d0003, - MirrorVars = 0x360359, - MissileCancel = 0x360060, - ModifyCooldown = 0x360200, - Motd = 0x3b0003, - MountResult = 0x36000f, - MovementEnforcementAlert = 0x3602c7, - MoveAddImpulse = 0x480062, - MoveApplyInertia = 0x48005e, - MoveApplyMovementForce = 0x480045, - MoveDisableCollision = 0x480041, - MoveDisableDoubleJump = 0x48002b, - MoveDisableFullSpeedTurning = 0x480075, - MoveDisableGravity = 0x48003d, - MoveDisableInertia = 0x48003f, - MoveDisableTransitionBetweenSwimAndFly = 0x48003c, - MoveEnableCollision = 0x480042, - MoveEnableDoubleJump = 0x48002a, - MoveEnableFullSpeedTurning = 0x480074, - MoveEnableGravity = 0x48003e, - MoveEnableInertia = 0x480040, - MoveEnableTransitionBetweenSwimAndFly = 0x48003b, - MoveKnockBack = 0x480031, - MoveRemoveInertia = 0x48005f, - MoveRemoveMovementForce = 0x480046, - MoveRoot = 0x480027, - MoveSetActiveMover = 0x480003, - MoveSetAdvFlyingAddImpulseMaxSpeed = 0x48006b, - MoveSetAdvFlyingAirFriction = 0x480066, - MoveSetAdvFlyingBankingRate = 0x48006c, - MoveSetAdvFlyingDoubleJumpVelMod = 0x480069, - MoveSetAdvFlyingGlideStartMinHeight = 0x48006a, - MoveSetAdvFlyingLaunchSpeedCoefficient = 0x480072, - MoveSetAdvFlyingLiftCoefficient = 0x480068, - MoveSetAdvFlyingMaxVel = 0x480067, - MoveSetAdvFlyingOverMaxDeceleration = 0x480071, - MoveSetAdvFlyingPitchingRateDown = 0x48006d, - MoveSetAdvFlyingPitchingRateUp = 0x48006e, - MoveSetAdvFlyingSurfaceFriction = 0x480070, - MoveSetAdvFlyingTurnVelocityThreshold = 0x48006f, + FeatureSystemStatusGlueScreen = 0x420063, + FeignDeathResisted = 0x4201ec, + FishEscaped = 0x42017a, + FishNotHooked = 0x420179, + FlightSplineSync = 0x5a005d, + FlushCombatLogFile = 0x620010, + ForcedDeathUpdate = 0x42017e, + ForceAnim = 0x4201f9, + ForceAnimations = 0x4201fa, + ForceRandomTransmogToast = 0x42004e, + ForceSpawnTrackingUpdate = 0x600021, + FriendStatus = 0x420235, + GainMawPower = 0x42028a, + GameObjectActivateAnimKit = 0x420066, + GameObjectBase = 0x4202d1, + GameObjectCloseInteraction = 0x42031a, + GameObjectCustomAnim = 0x420067, + GameObjectDespawn = 0x420068, + GameObjectInteraction = 0x420319, + GameObjectPlaySpellVisual = 0x62003e, + GameObjectPlaySpellVisualKit = 0x62003d, + GameObjectResetState = 0x4201c7, + GameObjectSetStateLocal = 0x4202ac, + GameSpeedSet = 0x42012b, + GameTimeSet = 0x4201b6, + GameTimeUpdate = 0x4201b5, + GarrisonActivateMissionBonusAbility = 0x4c0024, + GarrisonAddEvent = 0x4c0048, + GarrisonAddFollowerResult = 0x4c0016, + GarrisonAddMissionResult = 0x4c001a, + GarrisonAddSpecGroups = 0x4c004b, + GarrisonApplyTalentSocketDataChanges = 0x4c004f, + GarrisonAssignFollowerToBuildingResult = 0x4c002c, + GarrisonAutoTroopMinLevelUpdateResult = 0x4c0051, + GarrisonBuildingActivated = 0x4c000b, + GarrisonBuildingRemoved = 0x4c0004, + GarrisonBuildingSetActiveSpecializationResult = 0x4c0006, + GarrisonChangeMissionStartTimeResult = 0x4c001d, + GarrisonClearCollection = 0x4c0047, + GarrisonClearEventList = 0x4c004a, + GarrisonClearSpecGroups = 0x4c004c, + GarrisonCollectionRemoveEntry = 0x4c0046, + GarrisonCollectionUpdateEntry = 0x4c0045, + GarrisonCompleteBuildingConstructionResult = 0x4c003d, + GarrisonCompleteMissionResult = 0x4c001c, + GarrisonCreateResult = 0x4c000c, + GarrisonDeleteMissionResult = 0x4c0023, + GarrisonDeleteResult = 0x4c0035, + GarrisonFollowerActivationsSet = 0x4c002b, + GarrisonFollowerChangedFlags = 0x4c0029, + GarrisonFollowerChangedItemLevel = 0x4c0027, + GarrisonFollowerChangedQuality = 0x4c0028, + GarrisonFollowerChangedXp = 0x4c0026, + GarrisonFollowerFatigueCleared = 0x4c002a, + GarrisonGenerateFollowersResult = 0x4c0033, + GarrisonGetClassSpecCategoryInfoResult = 0x4c0015, + GarrisonGetRecallPortalLastUsedTimeResult = 0x4c001e, + GarrisonIsUpgradeableResponse = 0x4c003f, + GarrisonLearnBlueprintResult = 0x4c0007, + GarrisonLearnSpecializationResult = 0x4c0005, + GarrisonListCompletedMissionsCheatResult = 0x4c0040, + GarrisonListFollowersCheatResult = 0x4c0019, + GarrisonMapDataResponse = 0x4c0042, + GarrisonMissionBonusRollResult = 0x4c0020, + GarrisonMissionRequestRewardInfoResponse = 0x4c0043, + GarrisonMissionStartConditionUpdate = 0x4c0025, + GarrisonOpenCrafter = 0x4c0037, + GarrisonOpenRecruitmentNpc = 0x4c0030, + GarrisonPlaceBuildingResult = 0x4c0003, + GarrisonPlotPlaced = 0x4c0001, + GarrisonPlotRemoved = 0x4c0002, + GarrisonRecruitFollowerResult = 0x4c0034, + GarrisonRemoteInfo = 0x4c000a, + GarrisonRemoveEvent = 0x4c0049, + GarrisonRemoveFollowerAbilityResult = 0x4c002f, + GarrisonRemoveFollowerFromBuildingResult = 0x4c002d, + GarrisonRemoveFollowerResult = 0x4c0017, + GarrisonRenameFollowerResult = 0x4c002e, + GarrisonRequestBlueprintAndSpecializationDataResult = 0x4c0009, + GarrisonResearchTalentResult = 0x4c000e, + GarrisonResetTalentTree = 0x4c0013, + GarrisonResetTalentTreeSocketData = 0x4c0014, + GarrisonStartMissionResult = 0x4c001b, + GarrisonSwapBuildingsResponse = 0x4c003c, + GarrisonSwitchTalentTreeBranch = 0x4c004d, + GarrisonTalentCompleted = 0x4c000f, + GarrisonTalentRemoved = 0x4c0010, + GarrisonTalentRemoveSocketData = 0x4c0012, + GarrisonTalentUpdateSocketData = 0x4c0011, + GarrisonTalentWorldQuestUnlocksResponse = 0x4c004e, + GarrisonUnlearnBlueprintResult = 0x4c0008, + GarrisonUpdateFollower = 0x4c0018, + GarrisonUpdateGarrisonMonumentSelections = 0x4c003e, + GarrisonUpdateMissionCheatResult = 0x4c0050, + GarrisonUpgradeResult = 0x4c000d, + GarrisonUseRecallPortalResult = 0x4c001f, + GenerateRandomCharacterNameResult = 0x42001c, + GenerateSsoTokenResponse = 0x4202c5, + GetAccountCharacterListResult = 0x420209, + GetGarrisonInfoResult = 0x4c0000, + GetLandingPageShipmentsResponse = 0x420248, + GetRealmHiddenResult = 0x42034a, + GetRemainingGameTimeResponse = 0x420282, + GetSelectedTrophyIdResponse = 0x42026f, + GetShipmentsOfTypeResponse = 0x420247, + GetShipmentInfoResponse = 0x420243, + GetTrophyListResponse = 0x42026e, + GetVasAccountCharacterListResult = 0x420297, + GetVasTransferTargetRealmListResult = 0x420298, + GmPlayerInfo = 0x5f000e, + GmRequestPlayerInfo = 0x5f0003, + GmTicketCaseStatus = 0x42014d, + GmTicketSystemStatus = 0x42014c, + GodMode = 0x4201a5, + GossipComplete = 0x600017, + GossipMessage = 0x600018, + GossipOptionNpcInteraction = 0x600028, + GossipPoi = 0x420240, + GossipQuestUpdate = 0x600019, + GossipRefreshOptions = 0x600027, + GroupActionThrottled = 0x420024, + GroupAutoKick = 0x42023d, + GroupDecline = 0x420239, + GroupDestroyed = 0x42023c, + GroupNewLeader = 0x4200d5, + GroupRequestDecline = 0x42023a, + GroupUninvite = 0x42023b, + GuildAchievementDeleted = 0x4e000d, + GuildAchievementEarned = 0x4e000c, + GuildAchievementMembers = 0x4e000f, + GuildBankLogQueryResults = 0x4e0027, + GuildBankQueryResults = 0x4e0026, + GuildBankRemainingWithdrawMoney = 0x4e0028, + GuildBankTextQueryResult = 0x4e002b, + GuildChallengeCompleted = 0x4e001b, + GuildChallengeUpdate = 0x4e001a, + GuildChangeNameResult = 0x4e0025, + GuildCommandResult = 0x4e0002, + GuildCriteriaDeleted = 0x4e000e, + GuildCriteriaUpdate = 0x4e000b, + GuildEventBankContentsChanged = 0x4e0040, + GuildEventBankMoneyChanged = 0x4e003f, + GuildEventDisbanded = 0x4e0035, + GuildEventLogQueryResults = 0x4e002a, + GuildEventMotd = 0x4e0036, + GuildEventNewLeader = 0x4e0034, + GuildEventPlayerJoined = 0x4e0032, + GuildEventPlayerLeft = 0x4e0033, + GuildEventPresenceChange = 0x4e0037, + GuildEventRanksUpdated = 0x4e0039, + GuildEventRankChanged = 0x4e003a, + GuildEventStatusChange = 0x4e0038, + GuildEventTabAdded = 0x4e003b, + GuildEventTabDeleted = 0x4e003c, + GuildEventTabModified = 0x4e003d, + GuildEventTabTextChanged = 0x4e003e, + GuildFlaggedForRename = 0x4e0024, + GuildHardcoreMemberDeath = 0x4e0004, + GuildInvite = 0x4e0012, + GuildInviteDeclined = 0x4e0030, + GuildInviteExpired = 0x4e0031, + GuildItemLootedNotify = 0x4e001c, + GuildKnownRecipes = 0x4e0006, + GuildMembersWithRecipe = 0x4e0007, + GuildMemberDailyReset = 0x4e002c, + GuildMemberRecipes = 0x4e0005, + GuildMemberUpdateNote = 0x4e0011, + GuildMoved = 0x4e0022, + GuildMoveStarting = 0x4e0021, + GuildNameChanged = 0x4e0023, + GuildNews = 0x4e0009, + GuildNewsDeleted = 0x4e000a, + GuildPartyState = 0x4e0013, + GuildPermissionsQueryResults = 0x4e0029, + GuildRanks = 0x4e0010, + GuildRenameNameCheck = 0x4e0044, + GuildRenameRefundResult = 0x4e0046, + GuildRenameRequestedResult = 0x4e0045, + GuildRenameStatusUpdate = 0x4e0043, + GuildReputationReactionChanged = 0x4e0014, + GuildReset = 0x4e0020, + GuildRewardList = 0x4e0008, + GuildRoster = 0x4e0003, + GuildSendRankChange = 0x4e0001, + HardcoreDeathAlert = 0x420352, + HealthUpdate = 0x42017b, + HighestThreatUpdate = 0x420183, + HotfixConnect = 0x460003, + HotfixMessage = 0x460002, + InitializeFactions = 0x4201cc, + InitialSetup = 0x420014, + InitWorldStates = 0x4201ee, + InspectResult = 0x4200d9, + InstanceAbandonVoteCompleted = 0x42009d, + InstanceAbandonVotePlayerLeft = 0x42009e, + InstanceAbandonVoteResponse = 0x42009c, + InstanceAbandonVoteStarted = 0x42009b, + InstanceEncounterChangePriority = 0x42025a, + InstanceEncounterDisengageUnit = 0x420259, + InstanceEncounterEnd = 0x420262, + InstanceEncounterEngageUnit = 0x420258, + InstanceEncounterGainCombatResurrectionCharge = 0x420264, + InstanceEncounterInCombatResurrection = 0x420263, + InstanceEncounterObjectiveComplete = 0x42025d, + InstanceEncounterObjectiveStart = 0x42025c, + InstanceEncounterObjectiveUpdate = 0x420261, + InstanceEncounterPhaseShiftChanged = 0x420265, + InstanceEncounterStart = 0x42025e, + InstanceEncounterTimerStart = 0x42025b, + InstanceEncounterUpdateAllowReleaseInProgress = 0x420260, + InstanceEncounterUpdateSuppressRelease = 0x42025f, + InstanceGroupSizeChanged = 0x4201a3, + InstanceInfo = 0x4200dc, + InstanceReset = 0x420130, + InstanceResetFailed = 0x420131, + InstanceSaveCreated = 0x420225, + InterruptPowerRegen = 0x62004c, + InvalidatePageText = 0x46000a, + InvalidatePlayer = 0x5f0007, + InvalidPromotionCode = 0x4201fb, + InventoryChangeFailure = 0x630005, + InventoryFixupComplete = 0x4202bb, + InventoryFullOverflow = 0x4202cd, + IslandAzeriteGain = 0x420204, + IslandComplete = 0x420205, + IsQuestCompleteResponse = 0x600004, + ItemChanged = 0x420194, + ItemCooldown = 0x420270, + ItemEnchantTimeUpdate = 0x4201fd, + ItemExpirePurchaseRefund = 0x420034, + ItemInteractionComplete = 0x420302, + ItemPurchaseRefundResult = 0x420032, + ItemPushResult = 0x4200cb, + ItemTimeUpdate = 0x4201fc, + KickReason = 0x420133, + LatencyReportPing = 0x420312, + LearnedSpells = 0x620040, + LearnPvpTalentFailed = 0x420077, + LearnTalentFailed = 0x420076, + LegacyLootRules = 0x4202d2, + LevelLinkingResult = 0x4202e8, + LevelUpInfo = 0x420192, + LfgBootPlayer = 0x560019, + LfgDisabled = 0x560017, + LfgExpandSearchPrompt = 0x56001f, + LfgInstanceShutdownCountdown = 0x560009, + LfgJoinLobbyMatchmakerQueue = 0x560020, + LfgJoinResult = 0x560000, + LfgListApplicantListUpdate = 0x56000f, + LfgListApplicationStatusUpdate = 0x56000c, + LfgListApplyToGroupResult = 0x56000d, + LfgListJoinResult = 0x560001, + LfgListSearchResults = 0x560002, + LfgListSearchResultsUpdate = 0x560010, + LfgListSearchStatus = 0x560003, + LfgListUpdateBlacklist = 0x56000e, + LfgListUpdateExpiration = 0x56000b, + LfgListUpdateStatus = 0x56000a, + LfgOfferContinue = 0x560018, + LfgPartyInfo = 0x56001a, + LfgPlayerInfo = 0x56001b, + LfgPlayerReward = 0x56001c, + LfgProposalUpdate = 0x560011, + LfgQueueStatus = 0x560004, + LfgReadyCheckResult = 0x56001e, + LfgReadyCheckUpdate = 0x560006, + LfgRoleCheckUpdate = 0x560005, + LfgSlotInvalid = 0x560014, + LfgTeleportDenied = 0x560016, + LfgUpdateStatus = 0x560008, + LiveRegionAccountRestoreResult = 0x420217, + LiveRegionCharacterCopyResult = 0x420216, + LiveRegionGetAccountCharacterListResult = 0x42020a, + LiveRegionKeyBindingsCopyResult = 0x420218, + LoadCufProfiles = 0x42005f, + LoadEquipmentSet = 0x4201b8, + LobbyMatchmakerLobbyAcquiredServer = 0x42031c, + LobbyMatchmakerPartyInfo = 0x42031d, + LobbyMatchmakerPartyInviteRejected = 0x42031e, + LobbyMatchmakerQueueProposed = 0x420320, + LobbyMatchmakerQueueResult = 0x420321, + LobbyMatchmakerReceiveInvite = 0x42031f, + LoginSetTimeSpeed = 0x4201b7, + LoginVerifyWorld = 0x42002f, + LogoutCancelAck = 0x42012f, + LogoutComplete = 0x42012e, + LogoutResponse = 0x42012d, + LogXpGain = 0x42018e, + LootAllPassed = 0x4200c9, + LootList = 0x4201e9, + LootMoneyNotify = 0x4200c4, + LootRelease = 0x4200c3, + LootReleaseAll = 0x4200c2, + LootRemoved = 0x4200be, + LootResponse = 0x4200bd, + LootRoll = 0x4200c6, + LootRollsComplete = 0x4200c8, + LootRollWon = 0x4200ca, + LossOfControlAuraUpdate = 0x420119, + MailCommandResult = 0x4200e3, + MailListResult = 0x4201fe, + MailQueryNextTimeResult = 0x4201ff, + MapObjectivesInit = 0x48002a, + MapObjEvents = 0x420069, + MasterLootCandidateList = 0x4200c7, + MeetingStoneFailed = 0x420322, + MessageBox = 0x42000a, + MinimapPing = 0x420178, + MirrorImageComponentedData = 0x620004, + MirrorImageCreatureData = 0x620003, + MirrorVars = 0x42036d, + MissileCancel = 0x42006a, + ModifyCooldown = 0x42020c, + Motd = 0x470003, + MountResult = 0x42000f, + MovementEnforcementAlert = 0x4202d8, + MoveAddImpulse = 0x5a0064, + MoveApplyInertia = 0x5a0060, + MoveApplyMovementForce = 0x5a0047, + MoveDisableCollision = 0x5a0043, + MoveDisableDoubleJump = 0x5a002d, + MoveDisableFullSpeedTurning = 0x5a0077, + MoveDisableGravity = 0x5a003f, + MoveDisableInertia = 0x5a0041, + MoveDisableTransitionBetweenSwimAndFly = 0x5a003e, + MoveEnableCollision = 0x5a0044, + MoveEnableDoubleJump = 0x5a002c, + MoveEnableFullSpeedTurning = 0x5a0076, + MoveEnableGravity = 0x5a0040, + MoveEnableInertia = 0x5a0042, + MoveEnableTransitionBetweenSwimAndFly = 0x5a003d, + MoveKnockBack = 0x5a0033, + MoveRemoveInertia = 0x5a0061, + MoveRemoveMovementForce = 0x5a0048, + MoveRoot = 0x5a0029, + MoveSetActiveMover = 0x5a0003, + MoveSetAdvFlyingAddImpulseMaxSpeed = 0x5a006d, + MoveSetAdvFlyingAirFriction = 0x5a0068, + MoveSetAdvFlyingBankingRate = 0x5a006e, + MoveSetAdvFlyingDoubleJumpVelMod = 0x5a006b, + MoveSetAdvFlyingGlideStartMinHeight = 0x5a006c, + MoveSetAdvFlyingLaunchSpeedCoefficient = 0x5a0074, + MoveSetAdvFlyingLiftCoefficient = 0x5a006a, + MoveSetAdvFlyingMaxVel = 0x5a0069, + MoveSetAdvFlyingOverMaxDeceleration = 0x5a0073, + MoveSetAdvFlyingPitchingRateDown = 0x5a006f, + MoveSetAdvFlyingPitchingRateUp = 0x5a0070, + MoveSetAdvFlyingSurfaceFriction = 0x5a0072, + MoveSetAdvFlyingTurnVelocityThreshold = 0x5a0071, MoveSetCantSwim = 0x480035, - MoveSetCanAdvFly = 0x480064, - MoveSetCanDrive = 0x480076, - MoveSetCanFly = 0x480033, - MoveSetCanTurnWhileFalling = 0x480037, - MoveSetCollisionHeight = 0x480043, - MoveSetCompoundState = 0x480047, - MoveSetFeatherFall = 0x48002d, - MoveSetFlightBackSpeed = 0x480023, - MoveSetFlightSpeed = 0x480022, - MoveSetHovering = 0x48002f, - MoveSetIgnoreMovementForces = 0x480039, - MoveSetLandWalk = 0x48002c, - MoveSetModMovementForceMagnitude = 0x480014, - MoveSetNormalFall = 0x48002e, - MoveSetPitchRate = 0x480026, - MoveSetRunBackSpeed = 0x48001f, - MoveSetRunSpeed = 0x48001e, - MoveSetSwimBackSpeed = 0x480021, - MoveSetSwimSpeed = 0x480020, - MoveSetTurnRate = 0x480025, - MoveSetVehicleRecId = 0x480044, - MoveSetWalkSpeed = 0x480024, - MoveSetWaterWalk = 0x480029, - MoveSkipTime = 0x480048, - MoveSplineDisableCollision = 0x48004d, - MoveSplineDisableGravity = 0x48004b, - MoveSplineEnableCollision = 0x48004e, - MoveSplineEnableGravity = 0x48004c, - MoveSplineRoot = 0x480049, - MoveSplineSetFeatherFall = 0x48004f, - MoveSplineSetFlightBackSpeed = 0x48001a, - MoveSplineSetFlightSpeed = 0x480019, - MoveSplineSetFlying = 0x480059, - MoveSplineSetHover = 0x480051, - MoveSplineSetLandWalk = 0x480054, - MoveSplineSetNormalFall = 0x480050, - MoveSplineSetPitchRate = 0x48001d, - MoveSplineSetRunBackSpeed = 0x480016, - MoveSplineSetRunMode = 0x480057, - MoveSplineSetRunSpeed = 0x480015, - MoveSplineSetSwimBackSpeed = 0x480018, - MoveSplineSetSwimSpeed = 0x480017, - MoveSplineSetTurnRate = 0x48001c, - MoveSplineSetWalkMode = 0x480058, - MoveSplineSetWalkSpeed = 0x48001b, - MoveSplineSetWaterWalk = 0x480053, - MoveSplineStartSwim = 0x480055, - MoveSplineStopSwim = 0x480056, - MoveSplineUnroot = 0x48004a, - MoveSplineUnsetFlying = 0x48005a, - MoveSplineUnsetHover = 0x480052, - MoveTeleport = 0x480032, - MoveUnroot = 0x480028, + MoveSetCanAdvFly = 0x5a0066, + MoveSetCanDrive = 0x5a007a, + MoveSetCanFly = 0x5a0035, + MoveSetCanTurnWhileFalling = 0x5a0039, + MoveSetCollisionHeight = 0x5a0045, + MoveSetCompoundState = 0x5a0049, + MoveSetFeatherFall = 0x5a002f, + MoveSetFlightBackSpeed = 0x5a0025, + MoveSetFlightSpeed = 0x5a0024, + MoveSetHovering = 0x5a0031, + MoveSetIgnoreMovementForces = 0x5a003b, + MoveSetLandWalk = 0x5a002e, + MoveSetModMovementForceMagnitude = 0x5a0014, + MoveSetNormalFall = 0x5a0030, + MoveSetPitchRate = 0x5a0028, + MoveSetRunBackSpeed = 0x5a0021, + MoveSetRunSpeed = 0x5a0020, + MoveSetSwimBackSpeed = 0x5a0023, + MoveSetSwimSpeed = 0x5a0022, + MoveSetTurnRate = 0x5a0027, + MoveSetVehicleRecId = 0x5a0046, + MoveSetWalkSpeed = 0x5a0026, + MoveSetWaterWalk = 0x5a002b, + MoveSkipTime = 0x5a004a, + MoveSplineDisableCollision = 0x5a004f, + MoveSplineDisableGravity = 0x5a004d, + MoveSplineEnableCollision = 0x5a0050, + MoveSplineEnableGravity = 0x5a004e, + MoveSplineRoot = 0x5a004b, + MoveSplineSetFeatherFall = 0x5a0051, + MoveSplineSetFlightBackSpeed = 0x5a001c, + MoveSplineSetFlightSpeed = 0x5a001b, + MoveSplineSetFlying = 0x5a005b, + MoveSplineSetHover = 0x5a0053, + MoveSplineSetLandWalk = 0x5a0056, + MoveSplineSetNormalFall = 0x5a0052, + MoveSplineSetPitchRate = 0x5a001f, + MoveSplineSetRunBackSpeed = 0x5a0016, + MoveSplineSetRunMode = 0x5a0059, + MoveSplineSetRunSpeed = 0x5a0015, + MoveSplineSetSwimBackSpeed = 0x5a0018, + MoveSplineSetSwimSpeed = 0x5a0017, + MoveSplineSetTurnRate = 0x5a001e, + MoveSplineSetWalkMode = 0x5a005a, + MoveSplineSetWalkSpeed = 0x5a001d, + MoveSplineSetWaterWalk = 0x5a0055, + MoveSplineStartSwim = 0x5a0057, + MoveSplineStopSwim = 0x5a0058, + MoveSplineUnroot = 0x5a004c, + MoveSplineUnsetFlying = 0x5a005c, + MoveSplineUnsetHover = 0x5a0054, + MoveTeleport = 0x5a0034, + MoveUnroot = 0x5a002a, MoveUnsetCantSwim = 0x480036, - MoveUnsetCanAdvFly = 0x480065, - MoveUnsetCanDrive = 0x480077, - MoveUnsetCanFly = 0x480034, - MoveUnsetCanTurnWhileFalling = 0x480038, - MoveUnsetHovering = 0x480030, - MoveUnsetIgnoreMovementForces = 0x48003a, - MoveUpdate = 0x48000e, - MoveUpdateAddImpulse = 0x480063, - MoveUpdateApplyInertia = 0x480060, - MoveUpdateApplyMovementForce = 0x480012, - MoveUpdateCollisionHeight = 0x48000d, - MoveUpdateFlightBackSpeed = 0x48000a, - MoveUpdateFlightSpeed = 0x480009, - MoveUpdateKnockBack = 0x480010, - MoveUpdateModMovementForceMagnitude = 0x480011, - MoveUpdatePitchRate = 0x48000c, - MoveUpdateRemoveInertia = 0x480061, - MoveUpdateRemoveMovementForce = 0x480013, - MoveUpdateRunBackSpeed = 0x480005, - MoveUpdateRunSpeed = 0x480004, - MoveUpdateSwimBackSpeed = 0x480008, - MoveUpdateSwimSpeed = 0x480007, - MoveUpdateTeleport = 0x48000f, - MoveUpdateTurnRate = 0x48000b, - MoveUpdateWalkSpeed = 0x480006, - MultiFloorLeaveFloor = 0x360276, - MultiFloorNewFloor = 0x360275, - MythicPlusAllMapStats = 0x3600a8, - MythicPlusCurrentAffixes = 0x3600aa, - MythicPlusNewWeekRecord = 0x3600af, - MythicPlusSeasonData = 0x3600a9, - NeutralPlayerFactionSelectResult = 0x360074, - NewDataBuild = 0x36033c, - NewTaxiPath = 0x36011d, - NewWorld = 0x36002b, - NotifyDestLocSpellCast = 0x4d0034, - NotifyMissileTrajectoryCollision = 0x360149, - NotifyMoney = 0x360031, - NotifyReceivedMail = 0x3600d9, - NpcInteractionOpenResult = 0x36030e, - OfferPetitionError = 0x360154, - OnCancelExpectedRideVehicleAura = 0x360183, - OnMonsterMove = 0x480002, - OpenArtifactForge = 0x36023a, - OpenContainer = 0x4e0006, - OpenLfgDungeonFinder = 0x440015, - OpenShipmentNpcResult = 0x360232, - OverrideLight = 0x360159, - PageText = 0x3601b7, - PartyCommandResult = 0x36022c, - PartyEligibilityForDelveTiersResponse = 0x360351, - PartyInvite = 0x360056, - PartyKillLog = 0x3601f6, - PartyMemberFullState = 0x3601f5, - PartyMemberPartialState = 0x3601f4, - PartyNotifyLfgLeaderChange = 0x3602f7, - PartyUpdate = 0x36008c, - PastTimeEvents = 0x36005b, - PauseMirrorTimer = 0x3601ae, - PendingRaidLock = 0x360195, - PerksProgramActivityComplete = 0x36030b, - PerksProgramActivityUpdate = 0x360307, - PerksProgramDisabled = 0x36030c, - PerksProgramResult = 0x360308, - PerksProgramVendorUpdate = 0x360306, - PetitionAlreadySigned = 0x360037, - PetitionRenameGuildResponse = 0x420042, - PetitionShowList = 0x36015c, - PetitionShowSignatures = 0x36015d, - PetitionSignResults = 0x3601e8, - PetActionFeedback = 0x3601e5, - PetActionSound = 0x36013f, - PetBattleChatRestricted = 0x36009e, - PetBattleDebugQueueDumpResponse = 0x360113, - PetBattleFinalizeLocation = 0x360097, - PetBattleFinalRound = 0x36009c, - PetBattleFinished = 0x36009d, - PetBattleFirstRound = 0x360099, - PetBattleInitialUpdate = 0x360098, - PetBattleMaxGameLengthWarning = 0x36009f, - PetBattlePvpChallenge = 0x360096, - PetBattleQueueProposeMatch = 0x3600d6, - PetBattleQueueStatus = 0x3600d7, - PetBattleReplacementsMade = 0x36009b, - PetBattleRequestFailed = 0x360095, - PetBattleRoundResult = 0x36009a, - PetBattleSlotUpdates = 0x360084, - PetCastFailed = 0x4d0049, - PetClearSpells = 0x4d0013, - PetDismissSound = 0x360140, - PetGodMode = 0x36011a, - PetGuids = 0x3601a1, - PetLearnedSpells = 0x4d0040, - PetMode = 0x36001f, - PetNameInvalid = 0x360161, - PetNewlyTamed = 0x36001e, - PetSpellsMessage = 0x4d0014, - PetStableResult = 0x36002a, - PetTameFailure = 0x360151, - PetUnlearnedSpells = 0x4d0041, - PhaseShiftChange = 0x36000c, - PlayedTime = 0x360173, + MoveUnsetCanAdvFly = 0x5a0067, + MoveUnsetCanDrive = 0x5a007b, + MoveUnsetCanFly = 0x5a0036, + MoveUnsetCanTurnWhileFalling = 0x5a003a, + MoveUnsetHovering = 0x5a0032, + MoveUnsetIgnoreMovementForces = 0x5a003c, + MoveUpdate = 0x5a000e, + MoveUpdateAddImpulse = 0x5a0065, + MoveUpdateApplyInertia = 0x5a0062, + MoveUpdateApplyMovementForce = 0x5a0012, + MoveUpdateCollisionHeight = 0x5a000d, + MoveUpdateFlightBackSpeed = 0x5a000a, + MoveUpdateFlightSpeed = 0x5a0009, + MoveUpdateKnockBack = 0x5a0010, + MoveUpdateModMovementForceMagnitude = 0x5a0011, + MoveUpdatePitchRate = 0x5a000c, + MoveUpdateRemoveInertia = 0x5a0063, + MoveUpdateRemoveMovementForce = 0x5a0013, + MoveUpdateRunBackSpeed = 0x5a0005, + MoveUpdateRunSpeed = 0x5a0004, + MoveUpdateSwimBackSpeed = 0x5a0008, + MoveUpdateSwimSpeed = 0x5a0007, + MoveUpdateTeleport = 0x5a000f, + MoveUpdateTurnRate = 0x5a000b, + MoveUpdateWalkSpeed = 0x5a0006, + MultiFloorLeaveFloor = 0x420287, + MultiFloorNewFloor = 0x420286, + MythicPlusAllMapStats = 0x4200b2, + MythicPlusCurrentAffixes = 0x4200b4, + MythicPlusNewWeekRecord = 0x4200ba, + MythicPlusSeasonData = 0x4200b3, + NeutralPlayerFactionSelectResult = 0x42007e, + NewDataBuild = 0x420349, + NewTaxiPath = 0x420128, + NewWorld = 0x42002b, + NotifyDestLocSpellCast = 0x620036, + NotifyMissileTrajectoryCollision = 0x420154, + NotifyMoney = 0x420031, + NotifyReceivedMail = 0x4200e4, + NpcInteractionOpenResult = 0x420318, + OfferPetitionError = 0x420160, + OnCancelExpectedRideVehicleAura = 0x42018f, + OnMonsterMove = 0x5a0002, + OpenArtifactForge = 0x42024c, + OpenContainer = 0x630006, + OpenLfgDungeonFinder = 0x560015, + OpenShipmentNpcResult = 0x420244, + OverrideLight = 0x420165, + PageText = 0x4201c3, + PartyCommandResult = 0x42023e, + PartyEligibilityForDelveTiersResponse = 0x42035d, + PartyInvite = 0x420060, + PartyKillLog = 0x420202, + PartyMemberFullState = 0x420201, + PartyMemberPartialState = 0x420200, + PartyNotifyLfgLeaderChange = 0x420308, + PartyUpdate = 0x420096, + PastTimeEvents = 0x420065, + PauseMirrorTimer = 0x4201ba, + PendingRaidLock = 0x4201a1, + PerksProgramActivityComplete = 0x5e0005, + PerksProgramActivityUpdate = 0x5e0001, + PerksProgramDisabled = 0x5e0006, + PerksProgramResult = 0x5e0002, + PerksProgramVendorUpdate = 0x5e0000, + PetitionAlreadySigned = 0x420037, + PetitionRenameGuildResponse = 0x4e0042, + PetitionShowList = 0x420168, + PetitionShowSignatures = 0x420169, + PetitionSignResults = 0x4201f4, + PetActionFeedback = 0x4201f1, + PetActionSound = 0x42014a, + PetBattleChatRestricted = 0x4200a8, + PetBattleDebugQueueDumpResponse = 0x42011e, + PetBattleFinalizeLocation = 0x4200a1, + PetBattleFinalRound = 0x4200a6, + PetBattleFinished = 0x4200a7, + PetBattleFirstRound = 0x4200a3, + PetBattleInitialUpdate = 0x4200a2, + PetBattleMaxGameLengthWarning = 0x4200a9, + PetBattlePvpChallenge = 0x4200a0, + PetBattleQueueProposeMatch = 0x4200e1, + PetBattleQueueStatus = 0x4200e2, + PetBattleReplacementsMade = 0x4200a5, + PetBattleRequestFailed = 0x42009f, + PetBattleRoundResult = 0x4200a4, + PetBattleSlotUpdates = 0x42008e, + PetCastFailed = 0x62004b, + PetClearSpells = 0x620013, + PetDismissSound = 0x42014b, + PetGodMode = 0x420125, + PetGuids = 0x4201ad, + PetLearnedSpells = 0x620042, + PetMode = 0x42001f, + PetNameInvalid = 0x42016d, + PetNewlyTamed = 0x42001e, + PetSpellsMessage = 0x620014, + PetStableResult = 0x42002a, + PetTameFailure = 0x42015c, + PetUnlearnedSpells = 0x620043, + PhaseShiftChange = 0x42000c, + PlayedTime = 0x42017f, PlayerAckowledgeArrowCallout = 0x4a002d, - PlayerAzeriteItemEquippedStatusChanged = 0x4a001f, - PlayerAzeriteItemGains = 0x4a001e, - PlayerBonusRollFailed = 0x4a0021, - PlayerBound = 0x4a0000, - PlayerChoiceClear = 0x4a0006, - PlayerChoiceDisplayError = 0x4a0005, - PlayerConditionResult = 0x4a0012, - PlayerEndOfMatchDetails = 0x4a002f, - PlayerHideArrowCallout = 0x4a002c, - PlayerIsAdventureMapPoiValid = 0x4a0011, - PlayerOpenSubscriptionInterstitial = 0x4a0016, - PlayerSaveGuildEmblem = 0x420041, - PlayerSavePersonalEmblem = 0x4a002e, - PlayerShowArrowCallout = 0x4a002b, - PlayerShowGenericWidgetDisplay = 0x4a0029, - PlayerShowPartyPoseUi = 0x4a002a, - PlayerShowUiEventToast = 0x4a0024, - PlayerSkinned = 0x4a000e, - PlayerTutorialHighlightSpell = 0x4a0015, - PlayerTutorialUnhighlightSpell = 0x4a0014, - PlayMusic = 0x360205, - PlayObjectSound = 0x360207, - PlayOneShotAnimKit = 0x3601cd, - PlayOrphanSpellVisual = 0x4d0038, - PlayScene = 0x3600d3, - PlaySound = 0x360204, - PlaySpeakerbotSound = 0x360208, - PlaySpellVisual = 0x4d0036, - PlaySpellVisualKit = 0x4d003a, - PlayTimeWarning = 0x36019b, - Pong = 0x3d0006, - PowerUpdate = 0x360170, - PreloadChildMap = 0x36000d, - PreloadWorld = 0x36002c, - PrepopulateNameCache = 0x3602ca, - PreRessurect = 0x360203, - PrintNotification = 0x360063, - ProcResist = 0x3601f7, - ProfessionGossip = 0x360296, - PushSpellToActionBar = 0x4d0042, - PvpCredit = 0x3c0024, - PvpMatchComplete = 0x3c002f, - PvpMatchInitialize = 0x3c0030, - PvpMatchSetState = 0x3c002e, - PvpMatchStart = 0x3c002d, - PvpMatchStatistics = 0x3c0010, - PvpOptionsEnabled = 0x3c0013, - PvpTierRecord = 0x360302, - QueryBattlePetNameResponse = 0x3a000c, - QueryCreatureResponse = 0x3a0006, - QueryGameObjectResponse = 0x3a0007, - QueryGarrisonPetNameResponse = 0x400041, - QueryGuildFollowInfoResponse = 0x42002f, - QueryGuildInfoResponse = 0x42002d, - QueryItemTextResponse = 0x3a0010, - QueryNpcTextResponse = 0x3a0008, - QueryPageTextResponse = 0x3a0009, - QueryPetitionResponse = 0x3a000d, - QueryPetNameResponse = 0x3a000b, - QueryPlayerNamesResponse = 0x4a0026, - QueryPlayerNameByCommunityIdResponse = 0x4a000a, - QueryQuestInfoResponse = 0x4b0016, - QueryRealmGuildMasterInfoResponse = 0x42002e, - QueryTimeResponse = 0x360181, - QuestCompletionNpcResponse = 0x4b0001, - QuestConfirmAccept = 0x4b000f, - QuestForceRemoved = 0x4b001c, - QuestGiverInvalidQuest = 0x4b0005, - QuestGiverOfferRewardMessage = 0x4b0014, - QuestGiverQuestComplete = 0x4b0003, - QuestGiverQuestDetails = 0x4b0012, - QuestGiverQuestFailed = 0x4b0006, - QuestGiverQuestListMessage = 0x4b001a, - QuestGiverRequestItems = 0x4b0013, - QuestGiverStatus = 0x4b001b, - QuestGiverStatusMultiple = 0x4b0011, - QuestItemUsabilityResponse = 0x4b0002, - QuestLogFull = 0x4b0007, - QuestNonLogUpdateComplete = 0x4b0008, - QuestPoiQueryResponse = 0x4b001d, - QuestPoiUpdateResponse = 0x4b001f, - QuestPushResult = 0x4b0010, - QuestSessionInfoResponse = 0x3602ed, - QuestSessionReadyCheck = 0x3602db, - QuestSessionReadyCheckResponse = 0x3602dc, - QuestSessionResult = 0x3602da, - QuestUpdateAddCredit = 0x4b000c, - QuestUpdateAddCreditSimple = 0x4b000d, - QuestUpdateAddPvpCredit = 0x4b000e, - QuestUpdateComplete = 0x4b0009, - QuestUpdateFailed = 0x4b000a, - QuestUpdateFailedTimer = 0x4b000b, - QueueSummaryUpdate = 0x3602a9, - RafAccountInfo = 0x3602d8, - RafActivityStateChanged = 0x3602e9, - RafDebugFriendMonths = 0x360339, - RaidDifficultySet = 0x360244, - RaidGroupOnly = 0x360246, - RaidInstanceMessage = 0x3b000a, - RaidMarkersChanged = 0x360038, - RandomRoll = 0x3600cd, - RatedPvpInfo = 0x3c000f, - ReadyCheckCompleted = 0x360090, - ReadyCheckResponse = 0x36008f, - ReadyCheckStarted = 0x36008e, - ReadItemResultFailed = 0x360240, - ReadItemResultOk = 0x360237, - RealmQueryResponse = 0x3a0005, - ReattachResurrect = 0x3601e7, - ReceivePingUnit = 0x360039, - ReceivePingWorldPoint = 0x36003a, - RecentAllyDataResponse = 0x360354, - RecentAllyNoteUpdated = 0x360355, - RecraftItemResult = 0x36032f, - RecruitAFriendFailure = 0x36015e, - RefreshComponent = 0x3600ed, - RegionwideCharacterMailData = 0x36001a, - RegionwideCharacterRestrictionsData = 0x360019, - RemoveItemPassive = 0x360043, - RemoveSpellFromActionBar = 0x4d0043, - ReplaceTrophyResponse = 0x36025c, - ReportPvpPlayerAfkResult = 0x4a0009, - RequestCemeteryListResponse = 0x360025, - RequestPvpRewardsResponse = 0x3c0014, - RequestScheduledPvpInfoResponse = 0x3c0015, - ResetCompressionContext = 0x3d0007, - ResetFailedNotify = 0x360155, - ResetLastLoadedConfigCvars = 0x360336, - ResetQuestPoi = 0x4b0020, - ResetRangedCombatTimer = 0x3c0023, - ResetWeeklyCurrency = 0x360009, - RespecWipeConfirm = 0x3600b0, - RespondInspectAchievements = 0x360006, - ResponsePerkPendingRewards = 0x360309, - ResponsePerkRecentPurchases = 0x36030a, - RestartGlobalCooldown = 0x4d0052, - RestrictedAccountWarning = 0x360052, - ResumeCast = 0x4d002c, - ResumeCastBar = 0x4d002f, - ResumeComms = 0x3d0003, - ResumeToken = 0x360041, - ResurrectRequest = 0x360012, - ResyncRunes = 0x4d0050, + PlayerAzeriteItemEquippedStatusChanged = 0x5f0020, + PlayerAzeriteItemGains = 0x5f001f, + PlayerBonusRollFailed = 0x5f0022, + PlayerBound = 0x5f0000, + PlayerChoiceClear = 0x5f0006, + PlayerChoiceDisplayError = 0x5f0005, + PlayerConditionResult = 0x5f0013, + PlayerEndOfMatchDetails = 0x5f0030, + PlayerHideArrowCallout = 0x5f002d, + PlayerIsAdventureMapPoiValid = 0x5f0012, + PlayerOpenSubscriptionInterstitial = 0x5f0017, + PlayerSaveGuildEmblem = 0x4e0041, + PlayerSavePersonalEmblem = 0x5f002f, + PlayerShowArrowCallout = 0x5f002c, + PlayerShowGenericWidgetDisplay = 0x5f002a, + PlayerShowPartyPoseUi = 0x5f002b, + PlayerShowUiEventToast = 0x5f0025, + PlayerSkinned = 0x5f000f, + PlayerTutorialHighlightSpell = 0x5f0016, + PlayerTutorialUnhighlightSpell = 0x5f0015, + PlayMusic = 0x420211, + PlayObjectSound = 0x420213, + PlayOneShotAnimKit = 0x4201d9, + PlayOrphanSpellVisual = 0x62003a, + PlayScene = 0x4200de, + PlaySound = 0x420210, + PlaySpeakerbotSound = 0x420214, + PlaySpellVisual = 0x620038, + PlaySpellVisualKit = 0x62003c, + PlayTimeWarning = 0x4201a7, + Pong = 0x490009, + PowerUpdate = 0x42017c, + PreloadChildMap = 0x42000d, + PreloadWorld = 0x42002c, + PrepopulateNameCache = 0x4202db, + PreRessurect = 0x42020f, + PrintNotification = 0x42006d, + ProcResist = 0x420203, + ProfessionGossip = 0x4202a7, + PushSpellToActionBar = 0x620044, + PvpCredit = 0x480024, + PvpMatchComplete = 0x48002f, + PvpMatchInitialize = 0x480030, + PvpMatchSetState = 0x48002e, + PvpMatchStart = 0x48002d, + PvpMatchStatistics = 0x480010, + PvpOptionsEnabled = 0x480013, + PvpTierRecord = 0x420313, + QueryBattlePetNameResponse = 0x46000c, + QueryCreatureResponse = 0x460006, + QueryGameObjectResponse = 0x460007, + QueryGarrisonPetNameResponse = 0x4c0041, + QueryGuildFollowInfoResponse = 0x4e002f, + QueryGuildInfoResponse = 0x4e002d, + QueryItemTextResponse = 0x460010, + QueryNpcTextResponse = 0x460008, + QueryPageTextResponse = 0x460009, + QueryPetitionResponse = 0x46000d, + QueryPetNameResponse = 0x46000b, + QueryPlayerNamesResponse = 0x5f0027, + QueryPlayerNameByCommunityIdResponse = 0x5f000b, + QueryQuestInfoResponse = 0x600016, + QueryRealmGuildMasterInfoResponse = 0x4e002e, + QueryTimeResponse = 0x42018d, + QuestCompletionNpcResponse = 0x600001, + QuestConfirmAccept = 0x60000f, + QuestForceRemoved = 0x60001c, + QuestGiverInvalidQuest = 0x600005, + QuestGiverOfferRewardMessage = 0x600014, + QuestGiverQuestComplete = 0x600003, + QuestGiverQuestDetails = 0x600012, + QuestGiverQuestFailed = 0x600006, + QuestGiverQuestListMessage = 0x60001a, + QuestGiverRequestItems = 0x600013, + QuestGiverStatus = 0x60001b, + QuestGiverStatusMultiple = 0x600011, + QuestItemUsabilityResponse = 0x600002, + QuestLogFull = 0x600007, + QuestNonLogUpdateComplete = 0x600008, + QuestPoiQueryResponse = 0x60001d, + QuestPoiUpdateResponse = 0x60001f, + QuestPushResult = 0x600010, + QuestSessionInfoResponse = 0x4202fe, + QuestSessionReadyCheck = 0x4202ec, + QuestSessionReadyCheckResponse = 0x4202ed, + QuestSessionResult = 0x4202eb, + QuestUpdateAddCredit = 0x60000c, + QuestUpdateAddCreditSimple = 0x60000d, + QuestUpdateAddPvpCredit = 0x60000e, + QuestUpdateComplete = 0x600009, + QuestUpdateFailed = 0x60000a, + QuestUpdateFailedTimer = 0x60000b, + QueueSummaryUpdate = 0x4202ba, + RafAccountInfo = 0x4202e9, + RafActivityStateChanged = 0x4202fa, + RafDebugFriendMonths = 0x420343, + RaidDifficultySet = 0x420255, + RaidGroupOnly = 0x420257, + RaidInstanceMessage = 0x47000a, + RaidMarkersChanged = 0x420038, + RandomRoll = 0x4200d8, + RatedPvpInfo = 0x48000f, + ReadyCheckCompleted = 0x42009a, + ReadyCheckResponse = 0x420099, + ReadyCheckStarted = 0x420098, + ReadItemResultFailed = 0x420251, + ReadItemResultOk = 0x420249, + RealmQueryResponse = 0x460005, + ReattachResurrect = 0x4201f3, + ReceivePingUnit = 0x420039, + ReceivePingWorldPoint = 0x42003a, + RecentAllyDataResponse = 0x420360, + RecentAllyNoteUpdated = 0x420361, + RecraftItemResult = 0x420339, + RecruitAFriendFailure = 0x42016a, + RefreshComponent = 0x4200f8, + RegionwideCharacterMailData = 0x42001a, + RegionwideCharacterRestrictionsData = 0x420019, + RemoveItemPassive = 0x420043, + RemoveSpellFromActionBar = 0x620045, + ReplaceTrophyResponse = 0x42026d, + ReportPvpPlayerAfkResult = 0x5f000a, + RequestCemeteryListResponse = 0x420025, + RequestPvpRewardsResponse = 0x480014, + RequestScheduledPvpInfoResponse = 0x480015, + ResetCompressionContext = 0x49000a, + ResetFailedNotify = 0x420161, + ResetLastLoadedConfigCvars = 0x420340, + ResetQuestPoi = 0x600020, + ResetRangedCombatTimer = 0x480023, + ResetWeeklyCurrency = 0x420009, + RespecWipeConfirm = 0x4200bb, + RespondInspectAchievements = 0x420006, + ResponsePerkPendingRewards = 0x5e0003, + ResponsePerkRecentPurchases = 0x5e0004, + RestartGlobalCooldown = 0x620054, + RestrictedAccountWarning = 0x42005c, + ResumeCast = 0x62002e, + ResumeCastBar = 0x620031, + ResumeComms = 0x490006, + ResumeToken = 0x420041, + ResurrectRequest = 0x420012, + ResyncRunes = 0x620052, ReturningPlayerPrompt = 0x36023f, - ReturnApplicantList = 0x3602ce, - ReturnRecruitingClubs = 0x3602cd, - RoleChangedInform = 0x360021, - RoleChosen = 0x44001d, - RolePollInform = 0x360022, - RuneforgeLegendaryCraftingOpenNpc = 0x360295, - RuneRegenDebug = 0x36004f, - ScenarioCompleted = 0x360283, - ScenarioPois = 0x3600d0, - ScenarioProgressUpdate = 0x3600c9, - ScenarioShowCriteria = 0x360299, - ScenarioState = 0x3600c8, - ScenarioUiUpdate = 0x360298, - ScenarioVacate = 0x360241, - SceneObjectEvent = 0x36007a, - SceneObjectPetBattleFinalRound = 0x36007f, - SceneObjectPetBattleFinished = 0x360080, - SceneObjectPetBattleFirstRound = 0x36007c, - SceneObjectPetBattleInitialUpdate = 0x36007b, - SceneObjectPetBattleReplacementsMade = 0x36007e, - SceneObjectPetBattleRoundResult = 0x36007d, - ScheduledAreaPoiUpdateResponse = 0x4a0019, - ScriptCast = 0x4d0047, - SeasonInfo = 0x36005a, - SellResponse = 0x360162, - SendItemPassives = 0x360044, - SendKnownSpells = 0x4d0019, - SendRaidTargetUpdateAll = 0x3600cb, - SendRaidTargetUpdateSingle = 0x3600cc, - SendSpellCharges = 0x4d001b, - SendSpellHistory = 0x4d001a, - SendUnlearnSpells = 0x4d001c, - ServerFirstAchievements = 0x3600ea, - ServerTime = 0x360121, - ServerTimeOffset = 0x3601b2, - SetupCombatLogFileFlush = 0x4d000f, - SetupCurrency = 0x360007, - SetAiAnimKit = 0x3601cc, - SetAnimTier = 0x3601d0, - SetChrUpgradeTier = 0x360077, - SetCurrency = 0x360008, - SetDfFastLaunchResult = 0x440012, - SetDungeonDifficulty = 0x360143, - SetFactionAtWar = 0x36019d, - SetFactionNotVisible = 0x3601c7, - SetFactionStanding = 0x3601c8, - SetFactionVisible = 0x3601c6, - SetFlatSpellModifier = 0x4d0027, - SetInstanceLeaver = 0x36035a, - SetItemPurchaseData = 0x360033, - SetLootMethodFailed = 0x360267, - SetMaxWeeklyQuantity = 0x360036, - SetMeleeAnimKit = 0x3601cf, - SetMovementAnimKit = 0x3601ce, - SetPctSpellModifier = 0x4d0028, - SetPetSpecialization = 0x3600c2, - SetPlayerDeclinedNamesResult = 0x4a000b, - SetPlayHoverAnim = 0x360053, - SetProficiency = 0x3601d1, - SetQuestReplayCooldownOverride = 0x3602e1, - SetShipmentReadyResponse = 0x40003a, - SetSpellCharges = 0x4d0018, - SetTimeZoneInformation = 0x360116, - SetVehicleRecId = 0x360194, - ShadowlandsCapacitanceUpdate = 0x36030d, - ShipmentFactionUpdateResult = 0x40003b, - ShowDelvesCompanionConfigurationUi = 0x36034f, - ShowDelvesDisplayUi = 0x36034d, - ShowNeutralPlayerFactionSelectUi = 0x360073, - ShowQuestCompletionText = 0x4b0015, - ShowTaxiNodes = 0x36016b, - ShowTradeSkillResponse = 0x36020d, - SocialContractRequestResponse = 0x360319, - SocketGemsFailure = 0x3601c4, - SocketGemsSuccess = 0x3601c3, - SpecialMountAnim = 0x36013e, - SpectateEnd = 0x36033b, - SpectatePlayer = 0x36033a, - SpecInvoluntarilyChanged = 0x3601b6, - SpellAbsorbLog = 0x4d000c, - SpellCategoryCooldown = 0x4d0006, - SpellChannelStart = 0x4d0022, - SpellChannelUpdate = 0x4d0023, - SpellCooldown = 0x4d0005, - SpellDamageShield = 0x4d001f, - SpellDelayed = 0x4d0030, - SpellDispellLog = 0x4d0007, - SpellEmpowerSetStage = 0x4d0026, - SpellEmpowerStart = 0x4d0024, - SpellEmpowerUpdate = 0x4d0025, - SpellEnergizeLog = 0x4d0009, - SpellExecuteLog = 0x4d0031, - SpellFailedOther = 0x4d0046, - SpellFailure = 0x4d0044, - SpellFailureMessage = 0x4d004b, - SpellGo = 0x4d002a, - SpellHealAbsorbLog = 0x4d000b, - SpellHealLog = 0x4d000a, - SpellInstakillLog = 0x4d0021, - SpellInterruptLog = 0x4d000d, - SpellMissLog = 0x4d0032, - SpellNonMeleeDamageLog = 0x4d0020, - SpellOrDamageImmune = 0x4d001d, - SpellPeriodicAuraLog = 0x4d0008, - SpellPrepare = 0x4d0029, - SpellStart = 0x4d002b, - SpellVisualLoadScreen = 0x360065, - SplashScreenShowLatest = 0x3602f3, - StandStateUpdate = 0x3601ba, - StarterBuildActivateFailed = 0x36006b, - StartElapsedTimer = 0x3600a0, - StartElapsedTimers = 0x3600a2, - StartLightningStorm = 0x360146, - StartLootRoll = 0x3600ba, - StartMirrorTimer = 0x3601ad, - StartTimer = 0x36003d, - StopElapsedTimer = 0x3600a1, - StopMirrorTimer = 0x3601af, - StopSpeakerbotSound = 0x360209, - StopTimer = 0x36003e, - StreamingMovies = 0x36003c, - SuggestInviteInform = 0x36022d, - SummonCancel = 0x36014f, - SummonRaidMemberValidateFailed = 0x360023, - SummonRequest = 0x3601be, - SupercededSpells = 0x4d003d, - SurveyDelivered = 0x360357, - SuspendComms = 0x3d0002, - SuspendToken = 0x360040, - SyncWowEntitlements = 0x3602eb, - TalentsInvoluntarilyReset = 0x3601b5, - TaxiNodeStatus = 0x36011b, - TextEmote = 0x360119, - ThreatClear = 0x36017a, - ThreatRemove = 0x360179, - ThreatUpdate = 0x360178, - TimerunningSeasonEnded = 0x360350, - TimeAdjustment = 0x480001, - TimeSyncRequest = 0x480000, - TitleEarned = 0x360175, - TitleLost = 0x360176, - TotemCreated = 0x360165, - TotemDurationChanged = 0x360167, - TotemMoved = 0x360168, - TotemRemoved = 0x360166, - TradeStatus = 0x360017, - TradeUpdated = 0x360016, - TrainerBuyFailed = 0x36017d, - TrainerList = 0x36017c, - TraitConfigCommitFailed = 0x36006a, - TransferAborted = 0x3601a0, - TransferPending = 0x360066, - TreasurePickerResponse = 0x3a0011, - TriggerCinematic = 0x360261, - TriggerMovie = 0x360169, - TurnInPetitionResult = 0x3601ea, - TutorialFlags = 0x360255, - UiAction = 0x360206, - UiMapQuestLinesResponse = 0x4b0023, - UndeleteCharacterResponse = 0x360262, - UndeleteCooldownStatusResponse = 0x360263, - UnlearnedSpells = 0x4d003f, - UnloadChildMap = 0x36000e, - UnsetInstanceLeaver = 0x36035b, - UpdateAadcStatusResponse = 0x360303, - UpdateAccountData = 0x3601a6, - UpdateAccountDataComplete = 0x3601a7, - UpdateActionButtons = 0x360078, - UpdateBnetSessionKey = 0x3602bb, - UpdateCapturePoint = 0x3c0007, - UpdateCelestialBody = 0x3602b7, - UpdateCharacterFlags = 0x36025b, - UpdateChargeCategoryCooldown = 0x360202, - UpdateCooldown = 0x360201, - UpdateCraftingNpcRecipes = 0x400038, - UpdateDailyMissionCounter = 0x400021, - UpdateExpansionLevel = 0x3600e3, - UpdateGameTimeState = 0x3602be, - UpdateInstanceOwnership = 0x360148, - UpdateLastInstance = 0x360127, - UpdateObject = 0x460000, - UpdatePrimarySpec = 0x360070, - UpdateRecentPlayerGuids = 0x36008d, - UpdateTalentData = 0x36006f, - UpdateWorldState = 0x3601e4, - UserlistAdd = 0x3b000f, - UserlistRemove = 0x3b0010, - UserlistUpdate = 0x3b0011, - UseEquipmentSetResult = 0x3601eb, - VasCheckTransferOkResponse = 0x3602b2, - VasGetQueueMinutesResponse = 0x3602b0, - VasGetServiceStatusResponse = 0x3602af, - VasPurchaseComplete = 0x360289, - VasPurchaseStateUpdate = 0x360288, - VendorInventory = 0x360051, - VignetteUpdate = 0x4a0010, - VoiceChannelInfoResponse = 0x3602b6, - VoiceChannelSttTokenResponse = 0x3602fe, - VoiceLoginResponse = 0x3602b5, - VoidItemSwapResponse = 0x4e0004, - VoidStorageContents = 0x4e0001, - VoidStorageFailed = 0x4e0000, - VoidStorageTransferChanges = 0x4e0002, - VoidTransferResult = 0x4e0003, - WaitQueueFinish = 0x360003, - WaitQueueUpdate = 0x360002, - Warden3Data = 0x36000b, - Warden3Disabled = 0x3602b9, - Warden3Enabled = 0x3602b8, - WarfrontComplete = 0x3601fa, - WargameRequestOpponentResponse = 0x3c0012, - WargameRequestSuccessfullySentToOpponent = 0x3c0011, - Weather = 0x360145, - WeeklyRewardsProgressResult = 0x3602f6, - WeeklyRewardsResult = 0x3602f4, - WeeklyRewardClaimResult = 0x3602f5, - Who = 0x3b0002, - WhoIs = 0x360144, - WillBeKickedForAddedSubscriptionTime = 0x3602bd, - WorldQuestUpdateResponse = 0x4a0017, - WorldServerInfo = 0x360045, - WowEntitlementNotification = 0x3602ec, + ReturnApplicantList = 0x4202df, + ReturnRecruitingClubs = 0x4202de, + RoleChangedInform = 0x420021, + RoleChosen = 0x56001d, + RolePollInform = 0x420022, + RuneforgeLegendaryCraftingOpenNpc = 0x4202a6, + RuneRegenDebug = 0x420059, + ScenarioCompleted = 0x420294, + ScenarioPois = 0x4200db, + ScenarioProgressUpdate = 0x4200d4, + ScenarioShowCriteria = 0x4202aa, + ScenarioState = 0x4200d3, + ScenarioUiUpdate = 0x4202a9, + ScenarioVacate = 0x420252, + SceneObjectEvent = 0x420084, + SceneObjectPetBattleFinalRound = 0x420089, + SceneObjectPetBattleFinished = 0x42008a, + SceneObjectPetBattleFirstRound = 0x420086, + SceneObjectPetBattleInitialUpdate = 0x420085, + SceneObjectPetBattleReplacementsMade = 0x420088, + SceneObjectPetBattleRoundResult = 0x420087, + ScheduledAreaPoiUpdateResponse = 0x5f001a, + ScriptCast = 0x620049, + SeasonInfo = 0x420064, + SellResponse = 0x42016e, + SendItemPassives = 0x420044, + SendKnownSpells = 0x620019, + SendRaidTargetUpdateAll = 0x4200d6, + SendRaidTargetUpdateSingle = 0x4200d7, + SendSpellCharges = 0x62001b, + SendSpellHistory = 0x62001a, + SendUnlearnSpells = 0x62001c, + ServerFirstAchievements = 0x4200f5, + ServerTime = 0x42012c, + ServerTimeOffset = 0x4201be, + SetupCombatLogFileFlush = 0x62000f, + SetupCurrency = 0x420007, + SetAiAnimKit = 0x4201d8, + SetAnimTier = 0x4201dc, + SetChrUpgradeTier = 0x420081, + SetCurrency = 0x420008, + SetDfFastLaunchResult = 0x560012, + SetDungeonDifficulty = 0x42014e, + SetFactionAtWar = 0x4201a9, + SetFactionNotVisible = 0x4201d3, + SetFactionStanding = 0x4201d4, + SetFactionVisible = 0x4201d2, + SetFlatSpellModifier = 0x620027, + SetInstanceLeaver = 0x42036e, + SetItemPurchaseData = 0x420033, + SetLootMethodFailed = 0x420278, + SetMaxWeeklyQuantity = 0x420036, + SetMeleeAnimKit = 0x4201db, + SetMovementAnimKit = 0x4201da, + SetPctSpellModifier = 0x620028, + SetPetSpecialization = 0x4200cd, + SetPlayerDeclinedNamesResult = 0x5f000c, + SetPlayHoverAnim = 0x42005d, + SetProficiency = 0x4201dd, + SetQuestReplayCooldownOverride = 0x4202f2, + SetShipmentReadyResponse = 0x4c003a, + SetSpellCharges = 0x620018, + SetTimeZoneInformation = 0x420121, + SetVehicleRecId = 0x4201a0, + ShadowlandsCapacitanceUpdate = 0x420317, + ShipmentFactionUpdateResult = 0x4c003b, + ShowDelvesCompanionConfigurationUi = 0x42035b, + ShowDelvesDisplayUi = 0x420359, + ShowNeutralPlayerFactionSelectUi = 0x42007d, + ShowQuestCompletionText = 0x600015, + ShowTaxiNodes = 0x420177, + ShowTradeSkillResponse = 0x420219, + SocialContractRequestResponse = 0x420323, + SocketGemsFailure = 0x4201d0, + SocketGemsSuccess = 0x4201cf, + SpecialMountAnim = 0x420149, + SpectateEnd = 0x420348, + SpectatePlayer = 0x420345, + SpecInvoluntarilyChanged = 0x4201c2, + SpellAbsorbLog = 0x62000c, + SpellCategoryCooldown = 0x620006, + SpellChannelStart = 0x620022, + SpellChannelUpdate = 0x620023, + SpellCooldown = 0x620005, + SpellDamageShield = 0x62001f, + SpellDelayed = 0x620032, + SpellDispellLog = 0x620007, + SpellEmpowerSetStage = 0x620026, + SpellEmpowerStart = 0x620024, + SpellEmpowerUpdate = 0x620025, + SpellEnergizeLog = 0x620009, + SpellExecuteLog = 0x620033, + SpellFailedOther = 0x620048, + SpellFailure = 0x620046, + SpellFailureMessage = 0x62004d, + SpellGo = 0x62002c, + SpellHealAbsorbLog = 0x62000b, + SpellHealLog = 0x62000a, + SpellInstakillLog = 0x620021, + SpellInterruptLog = 0x62000d, + SpellMissLog = 0x620034, + SpellNonMeleeDamageLog = 0x620020, + SpellOrDamageImmune = 0x62001d, + SpellPeriodicAuraLog = 0x620008, + SpellPrepare = 0x62002b, + SpellStart = 0x62002d, + SpellVisualLoadScreen = 0x42006f, + SplashScreenShowLatest = 0x420304, + StandStateUpdate = 0x4201c6, + StarterBuildActivateFailed = 0x420075, + StartElapsedTimer = 0x4200aa, + StartElapsedTimers = 0x4200ac, + StartLightningStorm = 0x420151, + StartLootRoll = 0x4200c5, + StartMirrorTimer = 0x4201b9, + StartTimer = 0x42003d, + StopElapsedTimer = 0x4200ab, + StopMirrorTimer = 0x4201bb, + StopSpeakerbotSound = 0x420215, + StopTimer = 0x42003e, + StreamingMovies = 0x42003c, + SuggestInviteInform = 0x42023f, + SummonCancel = 0x42015a, + SummonRaidMemberValidateFailed = 0x420023, + SummonRequest = 0x4201ca, + SupercededSpells = 0x62003f, + SurveyDelivered = 0x420363, + SuspendComms = 0x490005, + SuspendToken = 0x420040, + SyncWowEntitlements = 0x4202fc, + TalentsInvoluntarilyReset = 0x4201c1, + TaxiNodeStatus = 0x420126, + TextEmote = 0x420124, + ThreatClear = 0x420186, + ThreatRemove = 0x420185, + ThreatUpdate = 0x420184, + TimerunningSeasonEnded = 0x42035c, + TimeAdjustment = 0x5a0001, + TimeSyncRequest = 0x5a0000, + TitleEarned = 0x420181, + TitleLost = 0x420182, + TotemCreated = 0x420171, + TotemDurationChanged = 0x420173, + TotemMoved = 0x420174, + TotemRemoved = 0x420172, + TradeStatus = 0x420017, + TradeUpdated = 0x420016, + TrainerBuyFailed = 0x420189, + TrainerList = 0x420188, + TraitConfigCommitFailed = 0x420074, + TransferAborted = 0x4201ac, + TransferPending = 0x420070, + TreasurePickerResponse = 0x460011, + TriggerCinematic = 0x420272, + TriggerMovie = 0x420175, + TurnInPetitionResult = 0x4201f6, + TutorialFlags = 0x420266, + UiAction = 0x420212, + UiMapQuestLinesResponse = 0x600023, + UndeleteCharacterResponse = 0x420273, + UndeleteCooldownStatusResponse = 0x420274, + UnlearnedSpells = 0x620041, + UnloadChildMap = 0x42000e, + UnsetInstanceLeaver = 0x42036f, + UpdateAadcStatusResponse = 0x420314, + UpdateAccountData = 0x4201b2, + UpdateAccountDataComplete = 0x4201b3, + UpdateActionButtons = 0x420082, + UpdateBnetSessionKey = 0x4202cc, + UpdateCapturePoint = 0x480007, + UpdateCelestialBody = 0x4202c8, + UpdateCharacterFlags = 0x42026c, + UpdateChargeCategoryCooldown = 0x42020e, + UpdateCooldown = 0x42020d, + UpdateCraftingNpcRecipes = 0x4c0038, + UpdateDailyMissionCounter = 0x4c0021, + UpdateExpansionLevel = 0x4200ee, + UpdateGameTimeState = 0x4202cf, + UpdateInstanceOwnership = 0x420153, + UpdateLastInstance = 0x420132, + UpdateObject = 0x580000, + UpdatePrimarySpec = 0x42007a, + UpdateRecentPlayerGuids = 0x420097, + UpdateTalentData = 0x420079, + UpdateWorldState = 0x4201f0, + UserlistAdd = 0x47000f, + UserlistRemove = 0x470010, + UserlistUpdate = 0x470011, + UseEquipmentSetResult = 0x4201f7, + VasCheckTransferOkResponse = 0x4202c3, + VasGetQueueMinutesResponse = 0x4202c1, + VasGetServiceStatusResponse = 0x4202c0, + VasPurchaseComplete = 0x42029a, + VasPurchaseStateUpdate = 0x420299, + VendorInventory = 0x42005b, + VignetteUpdate = 0x5f0011, + VoiceChannelInfoResponse = 0x4202c7, + VoiceChannelSttTokenResponse = 0x42030f, + VoiceLoginResponse = 0x4202c6, + VoidItemSwapResponse = 0x630004, + VoidStorageContents = 0x630001, + VoidStorageFailed = 0x630000, + VoidStorageTransferChanges = 0x630002, + VoidTransferResult = 0x630003, + WaitQueueFinish = 0x420003, + WaitQueueUpdate = 0x420002, + Warden3Data = 0x42000b, + Warden3Disabled = 0x4202ca, + Warden3Enabled = 0x4202c9, + WarfrontComplete = 0x420206, + WargameRequestOpponentResponse = 0x480012, + WargameRequestSuccessfullySentToOpponent = 0x480011, + Weather = 0x420150, + WeeklyRewardsProgressResult = 0x420307, + WeeklyRewardsResult = 0x420305, + WeeklyRewardClaimResult = 0x420306, + Who = 0x470002, + WhoIs = 0x42014f, + WillBeKickedForAddedSubscriptionTime = 0x4202ce, + WorldQuestUpdateResponse = 0x5f0018, + WorldServerInfo = 0x420045, + WowEntitlementNotification = 0x4202fd, WowLabsAreaInfo = 0x36031e, - WowLabsNotifyPlayersMatchEnd = 0x36031a, - WowLabsNotifyPlayersMatchStateChanged = 0x36031b, - WowLabsPartyError = 0x360327, + WowLabsNotifyPlayersMatchEnd = 0x420324, + WowLabsNotifyPlayersMatchStateChanged = 0x420325, + WowLabsPartyError = 0x420331, WowLabsSetAreaIdResult = 0x36031c, - WowLabsSetPredictionCircle = 0x360320, + WowLabsSetPredictionCircle = 0x42032a, WowLabsSetSelectedAreaId = 0x36031d, - XpAwardedFromCurrency = 0x360335, - XpGainAborted = 0x360062, - XpGainEnabled = 0x360245, - ZoneUnderAttack = 0x3b000b, + XpAwardedFromCurrency = 0x42033f, + XpGainAborted = 0x42006c, + XpGainEnabled = 0x420256, + ZoneUnderAttack = 0x47000b, // Opcodes That Are Not Generated Automatically AccountHeirloomUpdate = AccountToyUpdate + 1, // No Client Handler - CompressedPacket = AuthChallenge + 0xA, - MultiplePackets = AuthChallenge + 0x9, + CompressedPacket = 0x49000e, + MultiplePackets = 0x49000d, Unknown = 0xbadd, None = 0 diff --git a/Source/Framework/Constants/ObjectConst.cs b/Source/Framework/Constants/ObjectConst.cs index 38f0de2ca..7cd320b3c 100644 --- a/Source/Framework/Constants/ObjectConst.cs +++ b/Source/Framework/Constants/ObjectConst.cs @@ -19,7 +19,8 @@ namespace Framework.Constants AreaTrigger = 11, SceneObject = 12, Conversation = 13, - Max = 14 + MeshObject = 14, // 12.0.7 + Max = 15 } public enum TypeMask @@ -38,9 +39,10 @@ namespace Framework.Constants AreaTrigger = 0x800, SceneObject = 0x1000, Conversation = 0x2000, + MeshObject = 0x4000, // 12.0.7 Seer = Unit | Player | DynamicObject, - WorldObject = Unit | GameObject | DynamicObject | Corpse | AreaTrigger | SceneObject | Conversation + WorldObject = Unit | GameObject | DynamicObject | Corpse | AreaTrigger | SceneObject | Conversation | MeshObject } public enum HighGuid @@ -100,6 +102,9 @@ namespace Framework.Constants ArenaTeam = 52, LMMParty = 53, LMMLobby = 54, + Housing = 55, // 12.0.7 + MeshObject = 56, // 12.0.7 + Entity = 57, // 12.0.7 Count } diff --git a/Source/Framework/Database/Databases/HotfixDatabase.cs b/Source/Framework/Database/Databases/HotfixDatabase.cs index fe9cc1b17..6fe7a6baa 100644 --- a/Source/Framework/Database/Databases/HotfixDatabase.cs +++ b/Source/Framework/Database/Databases/HotfixDatabase.cs @@ -1,4 +1,4 @@ -// Copyright (c) CypherCore All rights reserved. +// Copyright (c) CypherCore All rights reserved. // Licensed under the GNU GENERAL PUBLIC LICENSE. See LICENSE file in the project root for full license information. namespace Framework.Database @@ -202,9 +202,7 @@ namespace Framework.Database " WHERE (`VerifiedBuild` > 0) = ?"); // BattlemasterList.db2 - PrepareStatement(HotfixStatements.SEL_BATTLEMASTER_LIST, "SELECT ID, Name, GameType, ShortDescription, LongDescription, PvpType, MinLevel, MaxLevel, " + - "RatedPlayers, MinPlayers, MaxPlayers, GroupsAllowed, MaxGroupSize, HolidayWorldState, Flags, IconFileDataID, RequiredPlayerConditionID" + - " FROM battlemaster_list WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_BATTLEMASTER_LIST, "SELECT ID, Name, GameType, ShortDescription, LongDescription, InstanceType, PvpType, MinLevel, MaxLevel, RatedPlayers, MinPlayers, MaxPlayers, GroupsAllowed, MaxGroupSize, HolidayWorldState, Flags, IconFileDataID, RequiredPlayerConditionID FROM battlemaster_list WHERE (`VerifiedBuild` > 0) = ?"); PrepareStatement(HotfixStatements.SEL_BATTLEMASTER_LIST_LOCALE, "SELECT ID, Name_lang, GameType_lang, ShortDescription_lang, LongDescription_lang" + " FROM battlemaster_list_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?"); @@ -246,8 +244,7 @@ namespace Framework.Database " AND locale = ?"); // CharacterLoadout.db2 - PrepareStatement(HotfixStatements.SEL_CHARACTER_LOADOUT, "SELECT ID, RaceMask, ChrClassID, Purpose, ItemContext FROM character_loadout" + - " WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_CHARACTER_LOADOUT, "SELECT ID, ChrClassID, Purpose, ItemContext, RaceMask FROM character_loadout WHERE (`VerifiedBuild` > 0) = ?"); // CharacterLoadoutItem.db2 PrepareStatement(HotfixStatements.SEL_CHARACTER_LOADOUT_ITEM, "SELECT ID, CharacterLoadoutID, ItemID FROM character_loadout_item" + @@ -305,8 +302,7 @@ namespace Framework.Database " WHERE (`VerifiedBuild` > 0) = ? AND locale = ?"); // ChrCustomizationReq.db2 - PrepareStatement(HotfixStatements.SEL_CHR_CUSTOMIZATION_REQ, "SELECT ID, RaceMask, ReqSource, Flags, ClassMask, RegionGroupMask, AchievementID, QuestID, " + - "OverrideArchive, ItemModifiedAppearanceID FROM chr_customization_req WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_CHR_CUSTOMIZATION_REQ, "SELECT ID, ReqSource, Flags, ClassMask, RegionGroupMask, AchievementID, QuestID, OverrideArchive, ItemModifiedAppearanceID, RaceMask FROM chr_customization_req WHERE (`VerifiedBuild` > 0) = ?"); PrepareStatement(HotfixStatements.SEL_CHR_CUSTOMIZATION_REQ_LOCALE, "SELECT ID, ReqSource_lang FROM chr_customization_req_locale WHERE (`VerifiedBuild` > 0) = ?" + " AND locale = ?"); @@ -360,8 +356,7 @@ namespace Framework.Database "ChrCustomizationCategoryID FROM conditional_chr_model WHERE (`VerifiedBuild` > 0) = ?"); // ConditionalContentTuning.db2 - PrepareStatement(HotfixStatements.SEL_CONDITIONAL_CONTENT_TUNING, "SELECT ID, OrderIndex, RedirectContentTuningID, RedirectFlag, ParentContentTuningID" + - " FROM conditional_content_tuning WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_CONDITIONAL_CONTENT_TUNING, "SELECT ID, OrderIndex, RedirectContentTuningID, RedirectFlag, RedirectEnum, ParentContentTuningID FROM conditional_content_tuning WHERE (`VerifiedBuild` > 0) = ?"); // ContentTuning.db2 PrepareStatement(HotfixStatements.SEL_CONTENT_TUNING, "SELECT ID, Flags, ExpansionID, HealthItemLevelCurveID, DamageItemLevelCurveID, " + @@ -434,9 +429,7 @@ namespace Framework.Database " WHERE (`VerifiedBuild` > 0) = ? AND locale = ?"); // CurrencyTypes.db2 - PrepareStatement(HotfixStatements.SEL_CURRENCY_TYPES, "SELECT ID, Name, Description, CategoryID, InventoryIconFileID, SpellWeight, SpellCategory, MaxQty, " + - "MaxEarnablePerWeek, Quality, FactionID, ItemGroupSoundsID, XpQuestDifficulty, AwardConditionID, MaxQtyWorldStateID, " + - "RechargingAmountPerCycle, RechargingCycleDurationMS, AccountTransferPercentage, OrderIndex, Flags1, Flags2 FROM currency_types WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_CURRENCY_TYPES, "SELECT ID, Name, Description, CategoryID, InventoryIconFileID, SpellWeight, SpellCategory, MaxQty, MaxEarnablePerWeek, Quality, FactionID, ItemGroupSoundsID, XpQuestDifficulty, AwardConditionID, MaxQtyWorldStateID, RechargingAmountPerCycle, RechargingCycleDurationMS, AccountTransferPercentage, OrderIndex, RecraftReagentCountPercentage, OrderSource, MCRCurrencyID, Flags1, Flags2 FROM currency_types WHERE (`VerifiedBuild` > 0) = ?"); PrepareStatement(HotfixStatements.SEL_CURRENCY_TYPES_LOCALE, "SELECT ID, Name_lang, Description_lang FROM currency_types_locale WHERE (`VerifiedBuild` > 0) = ?" + " AND locale = ?"); @@ -478,8 +471,7 @@ namespace Framework.Database PrepareStatement(HotfixStatements.SEL_DURABILITY_QUALITY, "SELECT ID, Data FROM durability_quality WHERE (`VerifiedBuild` > 0) = ?"); // Emotes.db2 - PrepareStatement(HotfixStatements.SEL_EMOTES, "SELECT ID, RaceMask, EmoteSlashCommand, AnimID, EmoteFlags, EmoteSpecProc, EmoteSpecProcParam, EventSoundID, " + - "SpellVisualKitID, ClassMask FROM emotes WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_EMOTES, "SELECT ID, EmoteSlashCommand, AnimID, EmoteFlags, EmoteSpecProc, EmoteSpecProcParam, EventSoundID, SpellVisualKitID, ClassMask, RaceMask FROM emotes WHERE (`VerifiedBuild` > 0) = ?"); // EmotesText.db2 PrepareStatement(HotfixStatements.SEL_EMOTES_TEXT, "SELECT ID, Name, EmoteID FROM emotes_text WHERE (`VerifiedBuild` > 0) = ?"); @@ -499,12 +491,7 @@ namespace Framework.Database " WHERE (`VerifiedBuild` > 0) = ?"); // Faction.db2 - PrepareStatement(HotfixStatements.SEL_FACTION, "SELECT ID, ReputationRaceMask1, ReputationRaceMask2, ReputationRaceMask3, ReputationRaceMask4, Name, " + - "Description, ReputationIndex, ParentFactionID, Expansion, FriendshipRepID, Flags, ParagonFactionID, RenownFactionID, RenownCurrencyID, " + - "ReputationClassMask1, ReputationClassMask2, ReputationClassMask3, ReputationClassMask4, ReputationFlags1, ReputationFlags2, " + - "ReputationFlags3, ReputationFlags4, ReputationBase1, ReputationBase2, ReputationBase3, ReputationBase4, ReputationMax1, ReputationMax2, " + - "ReputationMax3, ReputationMax4, ParentFactionMod1, ParentFactionMod2, ParentFactionCap1, ParentFactionCap2 FROM faction" + - " WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_FACTION, "SELECT ID, Name, Description, ReputationIndex, ParentFactionID, Expansion, FriendshipRepID, Flags, ParagonFactionID, RenownFactionID, RenownCurrencyID, ReputationClassMask1, ReputationClassMask2, ReputationClassMask3, ReputationClassMask4, ReputationFlags1, ReputationFlags2, ReputationFlags3, ReputationFlags4, ReputationBase1, ReputationBase2, ReputationBase3, ReputationBase4, ReputationMax1, ReputationMax2, ReputationMax3, ReputationMax4, ParentFactionMod1, ParentFactionMod2, ParentFactionCap1, ParentFactionCap2, ReputationRaceMask1, ReputationRaceMask2, ReputationRaceMask3, ReputationRaceMask4 FROM faction WHERE (`VerifiedBuild` > 0) = ?"); PrepareStatement(HotfixStatements.SEL_FACTION_LOCALE, "SELECT ID, Name_lang, Description_lang FROM faction_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?"); // FactionTemplate.db2 @@ -597,8 +584,7 @@ namespace Framework.Database " WHERE (`VerifiedBuild` > 0) = ? AND locale = ?"); // GarrPlot.db2 - PrepareStatement(HotfixStatements.SEL_GARR_PLOT, "SELECT ID, Name, PlotType, HordeConstructObjID, AllianceConstructObjID, Flags, UiCategoryID, " + - "UpgradeRequirement1, UpgradeRequirement2 FROM garr_plot WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_GARR_PLOT, "SELECT ID, Name, PlotType, HordeConstructObjID, AllianceConstructObjID, Flags, UpgradeRequirement1, UpgradeRequirement2 FROM garr_plot WHERE (`VerifiedBuild` > 0) = ?"); // GarrPlotBuilding.db2 PrepareStatement(HotfixStatements.SEL_GARR_PLOT_BUILDING, "SELECT ID, GarrPlotID, GarrBuildingID FROM garr_plot_building WHERE (`VerifiedBuild` > 0) = ?"); @@ -640,7 +626,7 @@ namespace Framework.Database // GossipNpcOption.db2 PrepareStatement(HotfixStatements.SEL_GOSSIP_NPC_OPTION, "SELECT ID, GossipNpcOption, LFGDungeonsID, TrainerID, GarrFollowerTypeID, CharShipmentID, " + "GarrTalentTreeID, UiMapID, UiItemInteractionID, Unknown_1000_8, Unknown_1000_9, CovenantID, GossipOptionID, TraitTreeID, ProfessionID, " + - "Unknown_1002_14, SkillLineID FROM gossip_npc_option WHERE (`VerifiedBuild` > 0) = ?"); + "Unknown_1002_14, NeighborhoodMapID, SkillLineID FROM gossip_npc_option WHERE (`VerifiedBuild` > 0) = ?"); // GuildColorBackground.db2 PrepareStatement(HotfixStatements.SEL_GUILD_COLOR_BACKGROUND, "SELECT ID, Red, Blue, Green FROM guild_color_background WHERE (`VerifiedBuild` > 0) = ?"); @@ -683,8 +669,7 @@ namespace Framework.Database PrepareStatement(HotfixStatements.SEL_IMPORT_PRICE_WEAPON, "SELECT ID, Data FROM import_price_weapon WHERE (`VerifiedBuild` > 0) = ?"); // Item.db2 - PrepareStatement(HotfixStatements.SEL_ITEM, "SELECT ID, ClassID, SubclassID, Material, InventoryType, SheatheType, SoundOverrideSubclassID, IconFileDataID, " + - "ItemGroupSoundsID, ContentTuningID, ModifiedCraftingReagentItemID, CraftingQualityID FROM item WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_ITEM, "SELECT ID, ClassID, SubclassID, Material, InventoryType, SheatheType, SoundOverrideSubclassID, IconFileDataID, ItemGroupSoundsID, ContentTuningID, ModifiedCraftingReagentItemID, Unknown1200, CraftingQualityID, ItemSquishEraID, RecraftReagentCountPercentage, OrderSource FROM item WHERE (`VerifiedBuild` > 0) = ?"); // ItemAppearance.db2 PrepareStatement(HotfixStatements.SEL_ITEM_APPEARANCE, "SELECT ID, DisplayType, ItemDisplayInfoID, DefaultIconFileDataID, UiOrder, PlayerConditionID" + @@ -770,14 +755,10 @@ namespace Framework.Database " FROM item_disenchant_loot WHERE (`VerifiedBuild` > 0) = ?"); // ItemEffect.db2 - PrepareStatement(HotfixStatements.SEL_ITEM_EFFECT, "SELECT ID, LegacySlotIndex, TriggerType, Charges, CoolDownMSec, CategoryCoolDownMSec, SpellCategoryID, " + - "SpellID, ChrSpecializationID FROM item_effect WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_ITEM_EFFECT, "SELECT ID, LegacySlotIndex, TriggerType, Charges, CoolDownMSec, CategoryCoolDownMSec, SpellCategoryID, SpellID, ChrSpecializationID, PlayerConditionID FROM item_effect WHERE (`VerifiedBuild` > 0) = ?"); // ItemExtendedCost.db2 - PrepareStatement(HotfixStatements.SEL_ITEM_EXTENDED_COST, "SELECT ID, RequiredArenaRating, ArenaBracket, Flags, MinFactionID, MinReputation, " + - "RequiredAchievement, ItemID1, ItemID2, ItemID3, ItemID4, ItemID5, ItemCount1, ItemCount2, ItemCount3, ItemCount4, ItemCount5, CurrencyID1, " + - "CurrencyID2, CurrencyID3, CurrencyID4, CurrencyID5, CurrencyCount1, CurrencyCount2, CurrencyCount3, CurrencyCount4, CurrencyCount5" + - " FROM item_extended_cost WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_ITEM_EXTENDED_COST, "SELECT ID, Money, RequiredArenaRating, ArenaBracket, Flags, MinFactionID, MinReputation, RequiredAchievement, ItemID1, ItemID2, ItemID3, ItemID4, ItemID5, ItemCount1, ItemCount2, ItemCount3, ItemCount4, ItemCount5, CurrencyID1, CurrencyID2, CurrencyID3, CurrencyID4, CurrencyID5, CurrencyCount1, CurrencyCount2, CurrencyCount3, CurrencyCount4, CurrencyCount5 FROM item_extended_cost WHERE (`VerifiedBuild` > 0) = ?"); // ItemLevelSelector.db2 PrepareStatement(HotfixStatements.SEL_ITEM_LEVEL_SELECTOR, "SELECT ID, MinItemLevel, ItemLevelSelectorQualitySetID, AzeriteUnlockMappingSet" + @@ -820,13 +801,10 @@ namespace Framework.Database PrepareStatement(HotfixStatements.SEL_ITEM_PRICE_BASE, "SELECT ID, ItemLevel, Armor, Weapon FROM item_price_base WHERE (`VerifiedBuild` > 0) = ?"); // ItemScalingConfig.db2 - PrepareStatement(HotfixStatements.SEL_ITEM_SCALING_CONFIG, "SELECT ID, ItemOffsetCurveID, ItemLevel, RequiredLevel, Unknown1125 FROM item_scaling_config" + - " WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_ITEM_SCALING_CONFIG, "SELECT ID, ItemOffsetCurveID, ItemLevel, RequiredLevel, Unknown1125, Flags FROM item_scaling_config WHERE (`VerifiedBuild` > 0) = ?"); // ItemSearchName.db2 - PrepareStatement(HotfixStatements.SEL_ITEM_SEARCH_NAME, "SELECT ID, AllowableRace, Display, OverallQualityID, ExpansionID, MinFactionID, MinReputation, " + - "AllowableClass, RequiredLevel, RequiredSkill, RequiredSkillRank, RequiredAbility, ItemLevel, Flags1, Flags2, Flags3, Flags4, Flags5" + - " FROM item_search_name WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_ITEM_SEARCH_NAME, "SELECT ID, Display, OverallQualityID, ExpansionID, MinFactionID, MinReputation, AllowableClass, RequiredLevel, RequiredSkill, RequiredSkillRank, RequiredAbility, ItemLevel, Flags1, Flags2, Flags3, Flags4, Flags5, AllowableRace FROM item_search_name WHERE (`VerifiedBuild` > 0) = ?"); PrepareStatement(HotfixStatements.SEL_ITEM_SEARCH_NAME_LOCALE, "SELECT ID, Display_lang FROM item_search_name_locale WHERE (`VerifiedBuild` > 0) = ?" + " AND locale = ?"); @@ -841,20 +819,7 @@ namespace Framework.Database " WHERE (`VerifiedBuild` > 0) = ?"); // ItemSparse.db2 - PrepareStatement(HotfixStatements.SEL_ITEM_SPARSE, "SELECT ID, AllowableRace, Description, Display3, Display2, Display1, Display, ExpansionID, DmgVariance, " + - "LimitCategory, DurationInInventory, QualityModifier, BagFamily, StartQuestID, LanguageID, ItemRange, StatPercentageOfSocket1, " + - "StatPercentageOfSocket2, StatPercentageOfSocket3, StatPercentageOfSocket4, StatPercentageOfSocket5, StatPercentageOfSocket6, " + - "StatPercentageOfSocket7, StatPercentageOfSocket8, StatPercentageOfSocket9, StatPercentageOfSocket10, StatPercentEditor1, StatPercentEditor2, " + - "StatPercentEditor3, StatPercentEditor4, StatPercentEditor5, StatPercentEditor6, StatPercentEditor7, StatPercentEditor8, StatPercentEditor9, " + - "StatPercentEditor10, StatModifierBonusStat1, StatModifierBonusStat2, StatModifierBonusStat3, StatModifierBonusStat4, StatModifierBonusStat5, " + - "StatModifierBonusStat6, StatModifierBonusStat7, StatModifierBonusStat8, StatModifierBonusStat9, StatModifierBonusStat10, Stackable, " + - "MaxCount, MinReputation, RequiredAbility, SellPrice, BuyPrice, VendorStackCount, PriceVariance, PriceRandomValue, Flags1, Flags2, Flags3, " + - "Flags4, Flags5, FactionRelated, ModifiedCraftingReagentItemID, ContentTuningID, PlayerLevelToItemLevelCurveID, ItemLevelOffsetCurveID, " + - "ItemLevelOffsetItemLevel, ItemNameDescriptionID, RequiredTransmogHoliday, RequiredHoliday, GemProperties, SocketMatchEnchantmentId, " + - "TotemCategoryID, InstanceBound, ZoneBound1, ZoneBound2, ItemSet, LockID, PageID, ItemDelay, MinFactionID, RequiredSkillRank, RequiredSkill, " + - "ItemLevel, AllowableClass, ArtifactID, SpellWeight, SpellWeightCategory, SocketType1, SocketType2, SocketType3, SheatheType, Material, " + - "PageMaterialID, Bonding, DamageDamageType, ContainerSlots, RequiredPVPMedal, RequiredPVPRank, RequiredLevel, InventoryType, " + - "OverallQualityID FROM item_sparse WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_ITEM_SPARSE, "SELECT ID, Description, Display3, Display2, Display1, Display, ExpansionID, DmgVariance, LimitCategory, DurationInInventory, QualityModifier, BagFamily, StartQuestID, LanguageID, ItemRange, StatPercentageOfSocket1, StatPercentageOfSocket2, StatPercentageOfSocket3, StatPercentageOfSocket4, StatPercentageOfSocket5, StatPercentageOfSocket6, StatPercentageOfSocket7, StatPercentageOfSocket8, StatPercentageOfSocket9, StatPercentageOfSocket10, StatPercentEditor1, StatPercentEditor2, StatPercentEditor3, StatPercentEditor4, StatPercentEditor5, StatPercentEditor6, StatPercentEditor7, StatPercentEditor8, StatPercentEditor9, StatPercentEditor10, StatModifierBonusStat1, StatModifierBonusStat2, StatModifierBonusStat3, StatModifierBonusStat4, StatModifierBonusStat5, StatModifierBonusStat6, StatModifierBonusStat7, StatModifierBonusStat8, StatModifierBonusStat9, StatModifierBonusStat10, Stackable, MaxCount, MinReputation, RequiredAbility, AllowableRace, SellPrice, BuyPrice, VendorStackCount, PriceVariance, PriceRandomValue, Flags1, Flags2, Flags3, Flags4, Flags5, FactionRelated, ModifiedCraftingReagentItemID, ContentTuningID, PlayerLevelToItemLevelCurveID, ItemLevelOffsetCurveID, ItemLevelOffsetItemLevel, ItemSquishEraID, ItemNameDescriptionID, RequiredTransmogHoliday, RequiredHoliday, GemProperties, SocketMatchEnchantmentId, TotemCategoryID, InstanceBound, ZoneBound1, ZoneBound2, ItemSet, LockID, PageID, ItemDelay, MinFactionID, RequiredSkillRank, RequiredSkill, ItemLevel, AllowableClass, ArtifactID, SpellWeight, SpellWeightCategory, SocketType1, SocketType2, SocketType3, SheatheType, Material, PageMaterialID, Bonding, DamageType, ContainerSlots, RequiredPVPMedal, RequiredPVPRank, RequiredLevel, InventoryType, OverallQualityID FROM item_sparse WHERE (`VerifiedBuild` > 0) = ?"); PrepareStatement(HotfixStatements.SEL_ITEM_SPARSE_LOCALE, "SELECT ID, Description_lang, Display3_lang, Display2_lang, Display1_lang, Display_lang" + " FROM item_sparse_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?"); @@ -927,12 +892,7 @@ namespace Framework.Database " WHERE (`VerifiedBuild` > 0) = ?"); // LiquidType.db2 - PrepareStatement(HotfixStatements.SEL_LIQUID_TYPE, "SELECT ID, Name, Texture1, Texture2, Texture3, Texture4, Texture5, Texture6, Flags, SoundBank, SoundID, " + - "SpellID, MaxDarkenDepth, FogDarkenIntensity, AmbDarkenIntensity, DirDarkenIntensity, LightID, ParticleScale, ParticleMovement, " + - "ParticleTexSlots, MaterialID, MinimapStaticCol, FrameCountTexture1, FrameCountTexture2, FrameCountTexture3, FrameCountTexture4, " + - "FrameCountTexture5, FrameCountTexture6, Color1, Color2, Float1, Float2, Float3, `Float4`, Float5, Float6, Float7, `Float8`, Float9, Float10, " + - "Float11, Float12, Float13, Float14, Float15, Float16, Float17, Float18, `Int1`, `Int2`, `Int3`, `Int4`, Coefficient1, Coefficient2, " + - "Coefficient3, Coefficient4 FROM liquid_type WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_LIQUID_TYPE, "SELECT ID, Name, Texture1, Texture2, Texture3, Texture4, Texture5, Texture6, Flags, SoundBank, SoundID, SpellID, MaxDarkenDepth, FogDarkenIntensity, AmbDarkenIntensity, DirDarkenIntensity, LightID, ParticleScale, ParticleMovement, ParticleTexSlots, MaterialID, MinimapStaticCol, FrameCountTexture1, FrameCountTexture2, FrameCountTexture3, FrameCountTexture4, FrameCountTexture5, FrameCountTexture6, Color1, Color2, Color3, Float1, Float2, Float3, `Float4`, Float5, Float6, Float7, `Float8`, Float9, Float10, Float11, Float12, Float13, Float14, Float15, Float16, Float17, Float18, Float19, Float20, Float21, Float22, Float23, Float24, Float25, Float26, Float27, Float28, Float29, Float30, Float31, Float32, Float33, Float34, Float35, Float36, Float37, Float38, `Int1`, `Int2`, `Int3`, `Int4`, Coefficient1, Coefficient2, Coefficient3, Coefficient4 FROM liquid_type WHERE (`VerifiedBuild` > 0) = ?"); // Location.db2 PrepareStatement(HotfixStatements.SEL_LOCATION, "SELECT ID, PosX, PosY, PosZ, Rot1, Rot2, Rot3 FROM location WHERE (`VerifiedBuild` > 0) = ?"); @@ -955,10 +915,7 @@ namespace Framework.Database "PvpLongDescription_lang FROM map_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?"); // MapChallengeMode.db2 - PrepareStatement(HotfixStatements.SEL_MAP_CHALLENGE_MODE, "SELECT Name, ID, MapID, Flags, ExpansionLevel, RequiredWorldStateID, CriteriaCount1, " + - "CriteriaCount2, CriteriaCount3, FirstRewardQuestID1, FirstRewardQuestID2, FirstRewardQuestID3, FirstRewardQuestID4, FirstRewardQuestID5, " + - "FirstRewardQuestID6, RewardQuestID1, RewardQuestID2, RewardQuestID3, RewardQuestID4, RewardQuestID5, RewardQuestID6 FROM map_challenge_mode" + - " WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_MAP_CHALLENGE_MODE, "SELECT Name, ID, MapID, Flags, MaxMedals, ExpansionLevel, RequiredWorldStateID, CriteriaCount1, CriteriaCount2, CriteriaCount3, CriteriaCount4, CriteriaCount5, FirstRewardQuestID1, FirstRewardQuestID2, FirstRewardQuestID3, FirstRewardQuestID4, FirstRewardQuestID5, FirstRewardQuestID6, RewardQuestID1, RewardQuestID2, RewardQuestID3, RewardQuestID4, RewardQuestID5, RewardQuestID6 FROM map_challenge_mode WHERE (`VerifiedBuild` > 0) = ?"); PrepareStatement(HotfixStatements.SEL_MAP_CHALLENGE_MODE_LOCALE, "SELECT ID, Name_lang FROM map_challenge_mode_locale WHERE (`VerifiedBuild` > 0) = ?" + " AND locale = ?"); @@ -1004,8 +961,7 @@ namespace Framework.Database " WHERE (`VerifiedBuild` > 0) = ?"); // Movie.db2 - PrepareStatement(HotfixStatements.SEL_MOVIE, "SELECT ID, Volume, KeyID, AudioFileDataID, SubtitleFileDataID, SubtitleFileFormat FROM movie" + - " WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_MOVIE, "SELECT ID, Summary, Volume, KeyID, AudioFileDataID, SubtitleFileDataID, SubtitleFileFormat FROM movie WHERE (`VerifiedBuild` > 0) = ?"); // MythicPlusSeason.db2 PrepareStatement(HotfixStatements.SEL_MYTHIC_PLUS_SEASON, "SELECT ID, MilestoneSeason, StartTimeEvent, ExpansionLevel, HeroicLFGDungeonMinGear" + @@ -1190,7 +1146,7 @@ namespace Framework.Database " WHERE (`VerifiedBuild` > 0) = ?"); // Scenario.db2 - PrepareStatement(HotfixStatements.SEL_SCENARIO, "SELECT ID, Name, AreaTableID, Type, Flags, UiTextureKitID FROM scenario WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_SCENARIO, "SELECT ID, Name, AreaTableID, Type, Flags, UiTextureKitID, UiScenarioDisplayInfoID FROM scenario WHERE (`VerifiedBuild` > 0) = ?"); PrepareStatement(HotfixStatements.SEL_SCENARIO_LOCALE, "SELECT ID, Name_lang FROM scenario_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?"); // ScenarioStep.db2 @@ -1207,7 +1163,7 @@ namespace Framework.Database PrepareStatement(HotfixStatements.SEL_SCENE_SCRIPT_GLOBAL_TEXT, "SELECT ID, Name, Script FROM scene_script_global_text WHERE (`VerifiedBuild` > 0) = ?"); // SceneScriptPackage.db2 - PrepareStatement(HotfixStatements.SEL_SCENE_SCRIPT_PACKAGE, "SELECT ID, Name, Unknown915 FROM scene_script_package WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_SCENE_SCRIPT_PACKAGE, "SELECT ID, Name, Flags, Unknown915 FROM scene_script_package WHERE (`VerifiedBuild` > 0) = ?"); // SceneScriptText.db2 PrepareStatement(HotfixStatements.SEL_SCENE_SCRIPT_TEXT, "SELECT ID, Name, Script FROM scene_script_text WHERE (`VerifiedBuild` > 0) = ?"); @@ -1224,9 +1180,7 @@ namespace Framework.Database " FROM skill_line_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?"); // SkillLineAbility.db2 - PrepareStatement(HotfixStatements.SEL_SKILL_LINE_ABILITY, "SELECT RaceMask, AbilityVerb, AbilityAllVerb, ID, SkillLine, Spell, MinSkillLineRank, ClassMask, " + - "SupercedesSpell, AcquireMethod, TrivialSkillLineRankHigh, TrivialSkillLineRankLow, Flags, NumSkillUps, UniqueBit, TradeSkillCategoryID, " + - "SkillupSkillLineID FROM skill_line_ability WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_SKILL_LINE_ABILITY, "SELECT AbilityVerb, AbilityAllVerb, ID, SkillLine, Spell, MinSkillLineRank, ClassMask, SupercedesSpell, AcquireMethod, TrivialSkillLineRankHigh, TrivialSkillLineRankLow, Flags, NumSkillUps, UniqueBit, TradeSkillCategoryID, SkillupSkillLineID, RaceMask FROM skill_line_ability WHERE (`VerifiedBuild` > 0) = ?"); PrepareStatement(HotfixStatements.SEL_SKILL_LINE_ABILITY_LOCALE, "SELECT ID, AbilityVerb_lang, AbilityAllVerb_lang FROM skill_line_ability_locale" + " WHERE (`VerifiedBuild` > 0) = ? AND locale = ?"); @@ -1235,8 +1189,7 @@ namespace Framework.Database " WHERE (`VerifiedBuild` > 0) = ?"); // SkillRaceClassInfo.db2 - PrepareStatement(HotfixStatements.SEL_SKILL_RACE_CLASS_INFO, "SELECT ID, RaceMask, SkillID, ClassMask, Flags, Availability, MinLevel, SkillTierID" + - " FROM skill_race_class_info WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_SKILL_RACE_CLASS_INFO, "SELECT ID, SkillID, ClassMask, Flags, Availability, MinLevel, SkillTierID, RaceMask FROM skill_race_class_info WHERE (`VerifiedBuild` > 0) = ?"); // SoulbindConduitRank.db2 PrepareStatement(HotfixStatements.SEL_SOULBIND_CONDUIT_RANK, "SELECT ID, RankIndex, SpellID, AuraPointsOverride, SoulbindConduitID" + @@ -1273,8 +1226,7 @@ namespace Framework.Database "RequiredAuraVision, RequiresSpellFocus FROM spell_casting_requirements WHERE (`VerifiedBuild` > 0) = ?"); // SpellCategories.db2 - PrepareStatement(HotfixStatements.SEL_SPELL_CATEGORIES, "SELECT ID, DifficultyID, Category, DefenseType, DispelType, Mechanic, PreventionType, " + - "StartRecoveryCategory, ChargeCategory, SpellID FROM spell_categories WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_SPELL_CATEGORIES, "SELECT ID, DifficultyID, Category, DefenseType, DiminishType, DispelType, Mechanic, PreventionType, StartRecoveryCategory, ChargeCategory, SpellID FROM spell_categories WHERE (`VerifiedBuild` > 0) = ?"); // SpellCategory.db2 PrepareStatement(HotfixStatements.SEL_SPELL_CATEGORY, "SELECT ID, Name, Flags, UsesPerWeek, MaxCharges, ChargeRecoveryTime, TypeMask FROM spell_category" + @@ -1290,15 +1242,10 @@ namespace Framework.Database "SpellID FROM spell_cooldowns WHERE (`VerifiedBuild` > 0) = ?"); // SpellDuration.db2 - PrepareStatement(HotfixStatements.SEL_SPELL_DURATION, "SELECT ID, Duration, MaxDuration FROM spell_duration WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_SPELL_DURATION, "SELECT ID, Duration, MaxDuration, DurationPerResource FROM spell_duration WHERE (`VerifiedBuild` > 0) = ?"); // SpellEffect.db2 - PrepareStatement(HotfixStatements.SEL_SPELL_EFFECT, "SELECT ID, EffectAura, DifficultyID, EffectIndex, Effect, EffectAmplitude, EffectAttributes, " + - "EffectAuraPeriod, EffectBonusCoefficient, EffectChainAmplitude, EffectChainTargets, EffectItemType, EffectMechanic, EffectPointsPerResource, " + - "EffectPosFacing, EffectRealPointsPerLevel, EffectTriggerSpell, BonusCoefficientFromAP, PvpMultiplier, Coefficient, Variance, " + - "ResourceCoefficient, GroupSizeBasePointsCoefficient, EffectBasePoints, ScalingClass, EffectMiscValue1, EffectMiscValue2, EffectRadiusIndex1, " + - "EffectRadiusIndex2, EffectSpellClassMask1, EffectSpellClassMask2, EffectSpellClassMask3, EffectSpellClassMask4, ImplicitTarget1, " + - "ImplicitTarget2, SpellID FROM spell_effect WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_SPELL_EFFECT, "SELECT ID, EffectAura, DifficultyID, EffectIndex, Effect, EffectAmplitude, EffectAttributes, EffectAuraPeriod, EffectBonusCoefficient, EffectChainAmplitude, EffectChainTargets, EffectItemType, EffectMechanic, EffectPointsPerResource, EffectPosFacing, EffectRealPointsPerLevel, EffectTriggerSpell, BonusCoefficientFromAP, PvpMultiplier, Coefficient, Variance, ResourceCoefficient, GroupSizeBasePointsCoefficient, EffectBasePoints, ScalingClass, TargetNodeGraph, EffectMiscValue1, EffectMiscValue2, EffectRadiusIndex1, EffectRadiusIndex2, EffectSpellClassMask1, EffectSpellClassMask2, EffectSpellClassMask3, EffectSpellClassMask4, ImplicitTarget1, ImplicitTarget2, SpellID FROM spell_effect WHERE (`VerifiedBuild` > 0) = ?"); // SpellEmpower.db2 PrepareStatement(HotfixStatements.SEL_SPELL_EMPOWER, "SELECT ID, SpellID, Unused1000 FROM spell_empower WHERE (`VerifiedBuild` > 0) = ?"); @@ -1351,11 +1298,7 @@ namespace Framework.Database " FROM spell_levels WHERE (`VerifiedBuild` > 0) = ?"); // SpellMisc.db2 - PrepareStatement(HotfixStatements.SEL_SPELL_MISC, "SELECT ID, Attributes1, Attributes2, Attributes3, Attributes4, Attributes5, Attributes6, Attributes7, " + - "Attributes8, Attributes9, Attributes10, Attributes11, Attributes12, Attributes13, Attributes14, Attributes15, Attributes16, DifficultyID, " + - "CastingTimeIndex, DurationIndex, PvPDurationIndex, RangeIndex, SchoolMask, Speed, LaunchDelay, MinDuration, SpellIconFileDataID, " + - "ActiveIconFileDataID, ContentTuningID, ShowFutureSpellPlayerConditionID, SpellVisualScript, ActiveSpellVisualScript, SpellID FROM spell_misc" + - " WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_SPELL_MISC, "SELECT ID, Attributes1, Attributes2, Attributes3, Attributes4, Attributes5, Attributes6, Attributes7, Attributes8, Attributes9, Attributes10, Attributes11, Attributes12, Attributes13, Attributes14, Attributes15, Attributes16, Attributes17, DifficultyID, CastingTimeIndex, DurationIndex, PvPDurationIndex, RangeIndex, SchoolMask, Speed, LaunchDelay, MinDuration, SpellIconFileDataID, ActiveIconFileDataID, ContentTuningID, ShowFutureSpellPlayerConditionID, SpellVisualScript, ActiveSpellVisualScript, SpellID FROM spell_misc WHERE (`VerifiedBuild` > 0) = ?"); // SpellName.db2 PrepareStatement(HotfixStatements.SEL_SPELL_NAME, "SELECT ID, Name FROM spell_name WHERE (`VerifiedBuild` > 0) = ?"); @@ -1395,12 +1338,10 @@ namespace Framework.Database "ReagentSource7, ReagentSource8 FROM spell_reagents WHERE (`VerifiedBuild` > 0) = ?"); // SpellReagentsCurrency.db2 - PrepareStatement(HotfixStatements.SEL_SPELL_REAGENTS_CURRENCY, "SELECT ID, SpellID, CurrencyTypesID, CurrencyCount FROM spell_reagents_currency" + - " WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_SPELL_REAGENTS_CURRENCY, "SELECT ID, SpellID, CurrencyTypesID, CurrencyCount, OverrideRecraftCurrencyCount, OrderSource FROM spell_reagents_currency WHERE (`VerifiedBuild` > 0) = ?"); // SpellScaling.db2 - PrepareStatement(HotfixStatements.SEL_SPELL_SCALING, "SELECT ID, SpellID, MinScalingLevel, MaxScalingLevel, ScalesFromItemLevel FROM spell_scaling" + - " WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_SPELL_SCALING, "SELECT ID, SpellID, MinScalingLevel, MaxScalingLevel FROM spell_scaling WHERE (`VerifiedBuild` > 0) = ?"); // SpellShapeshift.db2 PrepareStatement(HotfixStatements.SEL_SPELL_SHAPESHIFT, "SELECT ID, SpellID, StanceBarOrder, ShapeshiftExclude1, ShapeshiftExclude2, ShapeshiftMask1, " + @@ -1422,11 +1363,7 @@ namespace Framework.Database " FROM spell_totems WHERE (`VerifiedBuild` > 0) = ?"); // SpellVisual.db2 - PrepareStatement(HotfixStatements.SEL_SPELL_VISUAL, "SELECT ID, MissileCastOffset1, MissileCastOffset2, MissileCastOffset3, MissileImpactOffset1, " + - "MissileImpactOffset2, MissileImpactOffset3, AnimEventSoundID, Flags, MissileAttachment, MissileDestinationAttachment, " + - "MissileCastPositionerID, MissileImpactPositionerID, MissileTargetingKit, HostileSpellVisualID, CasterSpellVisualID, SpellVisualMissileSetID, " + - "DamageNumberDelay, LowViolenceSpellVisualID, RaidSpellVisualMissileSetID, ReducedUnexpectedCameraMovementSpellVisualID FROM spell_visual" + - " WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_SPELL_VISUAL, "SELECT ID, MissileCastOffset1, MissileCastOffset2, MissileCastOffset3, MissileImpactOffset1, MissileImpactOffset2, MissileImpactOffset3, StateKit, AnimEventSoundID, Flags, MissileAttachment, MissileDestinationAttachment, MissileCastPositionerID, MissileImpactPositionerID, MissileTargetingKit, HostileSpellVisualID, CasterSpellVisualID, SpellVisualMissileSetID, DamageNumberDelay, LowViolenceSpellVisualID, RaidSpellVisualMissileSetID, ReducedUnexpectedCameraMovementSpellVisualID FROM spell_visual WHERE (`VerifiedBuild` > 0) = ?"); // SpellVisualEffectName.db2 PrepareStatement(HotfixStatements.SEL_SPELL_VISUAL_EFFECT_NAME, "SELECT ID, ModelFileDataID, BaseMissileSpeed, Scale, MinAllowedScale, MaxAllowedScale, " + @@ -1575,8 +1512,7 @@ namespace Framework.Database " WHERE (`VerifiedBuild` > 0) = ?"); // TraitTree.db2 - PrepareStatement(HotfixStatements.SEL_TRAIT_TREE, "SELECT ID, TraitSystemID, Unused1000_1, FirstTraitNodeID, PlayerConditionID, Flags, Unused1000_2, " + - "Unused1000_3 FROM trait_tree WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_TRAIT_TREE, "SELECT TitleText, ID, TraitSystemID, Unused1000_1, FirstTraitNodeID, PlayerConditionID, Flags, Unused1000_2, Unused1000_3, UiTextureKitID FROM trait_tree WHERE (`VerifiedBuild` > 0) = ?"); // TraitTreeLoadout.db2 PrepareStatement(HotfixStatements.SEL_TRAIT_TREE_LOADOUT, "SELECT ID, TraitTreeID, ChrSpecializationID FROM trait_tree_loadout" + @@ -1622,7 +1558,7 @@ namespace Framework.Database // UiMap.db2 PrepareStatement(HotfixStatements.SEL_UI_MAP, "SELECT Name, ID, ParentUiMapID, Flags, `System`, Type, BountySetID, BountyDisplayLocation, " + - "VisibilityPlayerConditionID2, VisibilityPlayerConditionID, HelpTextPosition, BkgAtlasID, AlternateUiMapGroup, ContentTuningID, " + + "VisibilityPlayerConditionID, HelpTextPosition, BkgAtlasID, AlternateUiMapGroup, ContentTuningID, " + "AdventureMapTextureKitID, MapArtZoneTextPosition FROM ui_map WHERE (`VerifiedBuild` > 0) = ?"); PrepareStatement(HotfixStatements.SEL_UI_MAP_LOCALE, "SELECT ID, Name_lang FROM ui_map_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?"); diff --git a/Source/Game/DataStorage/Structs/B_Records.cs b/Source/Game/DataStorage/Structs/B_Records.cs index 7b0b1477b..45954224f 100644 --- a/Source/Game/DataStorage/Structs/B_Records.cs +++ b/Source/Game/DataStorage/Structs/B_Records.cs @@ -100,6 +100,7 @@ namespace Game.DataStorage public string GameType; public string ShortDescription; public string LongDescription; + public sbyte InstanceType; public int PvpType; public byte MinLevel; public byte MaxLevel; diff --git a/Source/Game/DataStorage/Structs/C_Records.cs b/Source/Game/DataStorage/Structs/C_Records.cs index 6778911a7..e64fec70a 100644 --- a/Source/Game/DataStorage/Structs/C_Records.cs +++ b/Source/Game/DataStorage/Structs/C_Records.cs @@ -63,10 +63,10 @@ namespace Game.DataStorage public sealed class CharacterLoadoutRecord { public uint Id; - public long RaceMask; public sbyte ChrClassID; public int Purpose; public byte ItemContext; + public long RaceMask; public bool IsForNewCharacter() { return Purpose == 9; } } @@ -216,7 +216,6 @@ namespace Game.DataStorage public sealed class ChrCustomizationReqRecord { public uint Id; - public long RaceMask; public string ReqSource; public int Flags; public int ClassMask; @@ -225,6 +224,7 @@ namespace Game.DataStorage public int QuestID; public int OverrideArchive; // -1: allow any, otherwise must match OverrideArchive cvar public uint ItemModifiedAppearanceID; + public long RaceMask; public bool HasFlag(ChrCustomizationReqFlag chrCustomizationReqFlag) { return (Flags & (int)chrCustomizationReqFlag) != 0; } } @@ -382,6 +382,7 @@ namespace Game.DataStorage public int OrderIndex; public int RedirectContentTuningID; public int RedirectFlag; + public int RedirectEnum; public uint ParentContentTuningID; } @@ -639,6 +640,9 @@ namespace Game.DataStorage public uint RechargingCycleDurationMS; public float AccountTransferPercentage; public byte OrderIndex; + public float RecraftReagentCountPercentage; + public byte OrderSource; + public int MCRCurrencyID; public int[] Flags = new int[2]; public bool HasFlag(CurrencyTypesFlags currencyTypesFlags) { return (Flags[0] & (int)currencyTypesFlags) != 0; } diff --git a/Source/Game/DataStorage/Structs/E_Records.cs b/Source/Game/DataStorage/Structs/E_Records.cs index 7ad9707d2..9c9d29931 100644 --- a/Source/Game/DataStorage/Structs/E_Records.cs +++ b/Source/Game/DataStorage/Structs/E_Records.cs @@ -6,7 +6,6 @@ namespace Game.DataStorage public sealed class EmotesRecord { public uint Id; - public long RaceMask; public string EmoteSlashCommand; public short AnimID; public int EmoteFlags; @@ -15,6 +14,7 @@ namespace Game.DataStorage public uint EventSoundID; public uint SpellVisualKitId; public int ClassMask; + public long RaceMask; } public sealed class EmotesTextRecord diff --git a/Source/Game/DataStorage/Structs/F_Records.cs b/Source/Game/DataStorage/Structs/F_Records.cs index 2550ea552..240159ce7 100644 --- a/Source/Game/DataStorage/Structs/F_Records.cs +++ b/Source/Game/DataStorage/Structs/F_Records.cs @@ -8,7 +8,6 @@ namespace Game.DataStorage public sealed class FactionRecord { public uint Id; - public long[] ReputationRaceMask = new long[4]; public LocalizedString Name; public string Description; public short ReputationIndex; @@ -25,8 +24,15 @@ namespace Game.DataStorage public int[] ReputationMax = new int[4]; public float[] ParentFactionMod = new float[2]; // Faction outputs rep * ParentFactionModOut as spillover reputation public byte[] ParentFactionCap = new byte[2]; // The highest rank the faction will profit from incoming spillover + public long ReputationRaceMask1; + public long ReputationRaceMask2; + public long ReputationRaceMask3; + public long ReputationRaceMask4; // helpers + // 12.0.7: client stores ReputationRaceMask as 4 separate RaceMask columns; expose as array for existing code + public long[] ReputationRaceMask => new long[] { ReputationRaceMask1, ReputationRaceMask2, ReputationRaceMask3, ReputationRaceMask4 }; + public bool CanHaveReputation() { return ReputationIndex >= 0; diff --git a/Source/Game/DataStorage/Structs/G_Records.cs b/Source/Game/DataStorage/Structs/G_Records.cs index b8c61c883..f5d5859c9 100644 --- a/Source/Game/DataStorage/Structs/G_Records.cs +++ b/Source/Game/DataStorage/Structs/G_Records.cs @@ -219,7 +219,6 @@ namespace Game.DataStorage public uint HordeConstructObjID; public uint AllianceConstructObjID; public byte Flags; - public byte UiCategoryID; public uint[] UpgradeRequirement = new uint[2]; } @@ -332,6 +331,7 @@ namespace Game.DataStorage public int TraitTreeID; public int ProfessionID; public int Unknown_1002_14; + public int NeighborhoodMapID; public int SkillLineID; } diff --git a/Source/Game/DataStorage/Structs/I_Records.cs b/Source/Game/DataStorage/Structs/I_Records.cs index 2b2811f07..c0f3edb73 100644 --- a/Source/Game/DataStorage/Structs/I_Records.cs +++ b/Source/Game/DataStorage/Structs/I_Records.cs @@ -46,7 +46,11 @@ namespace Game.DataStorage public uint ItemGroupSoundsID; public int ContentTuningID; public int ModifiedCraftingReagentItemID; + public byte Unknown1200; public int CraftingQualityID; + public int ItemSquishEraID; + public float RecraftReagentCountPercentage; + public byte OrderSource; } public sealed class ItemAppearanceRecord @@ -227,13 +231,15 @@ namespace Game.DataStorage public ushort SpellCategoryID; public int SpellID; public ushort ChrSpecializationID; + public int PlayerConditionID; } public sealed class ItemExtendedCostRecord { public uint Id; + public ulong Money; public ushort RequiredArenaRating; - public byte ArenaBracket; // arena slot restrictions (min slot value) + public byte ArenaBracket; // arena slot restrictions (min slot value) public int Flags; public byte MinFactionID; public int MinReputation; @@ -337,12 +343,12 @@ namespace Game.DataStorage public int ItemLevel; public int RequiredLevel; public int Unknown1125; + public int Flags; } public sealed class ItemSearchNameRecord { public uint Id; - public long AllowableRace; public string Display; public byte OverallQualityID; public int ExpansionID; @@ -355,6 +361,7 @@ namespace Game.DataStorage public uint RequiredAbility; public ushort ItemLevel; public int[] Flags = new int[5]; + public long AllowableRace; } public sealed class ItemSetRecord @@ -382,7 +389,6 @@ namespace Game.DataStorage public sealed class ItemSparseRecord { public uint Id; - public long AllowableRace; public string Description; public string Display3; public string Display2; @@ -404,6 +410,7 @@ namespace Game.DataStorage public uint MaxCount; public uint MinReputation; public uint RequiredAbility; + public long AllowableRace; public uint SellPrice; public uint BuyPrice; public uint VendorStackCount; @@ -416,6 +423,7 @@ namespace Game.DataStorage public uint PlayerLevelToItemLevelCurveID; public int ItemLevelOffsetCurveID; public int ItemLevelOffsetItemLevel; + public int ItemSquishEraID; public ushort ItemNameDescriptionID; public ushort RequiredTransmogHoliday; public ushort RequiredHoliday; diff --git a/Source/Game/DataStorage/Structs/L_Records.cs b/Source/Game/DataStorage/Structs/L_Records.cs index 8596cd809..685312ce6 100644 --- a/Source/Game/DataStorage/Structs/L_Records.cs +++ b/Source/Game/DataStorage/Structs/L_Records.cs @@ -94,8 +94,8 @@ namespace Game.DataStorage public byte MaterialID; public int MinimapStaticCol; public byte[] FrameCountTexture = new byte[6]; - public int[] Color = new int[2]; - public float[] Float = new float[18]; + public int[] Color = new int[3]; + public float[] Float = new float[38]; public uint[] Int = new uint[4]; public float[] Coefficient = new float[4]; } diff --git a/Source/Game/DataStorage/Structs/M_Records.cs b/Source/Game/DataStorage/Structs/M_Records.cs index 9af7b9e3b..1d9ef1efc 100644 --- a/Source/Game/DataStorage/Structs/M_Records.cs +++ b/Source/Game/DataStorage/Structs/M_Records.cs @@ -116,9 +116,10 @@ namespace Game.DataStorage public uint Id; public ushort MapID; public int Flags; + public int MaxMedals; public uint ExpansionLevel; public int RequiredWorldStateID; // maybe? - public short[] CriteriaCount = new short[3]; + public short[] CriteriaCount = new short[5]; public int[] FirstRewardQuestID = new int[6]; public int[] RewardQuestID = new int[6]; } @@ -248,6 +249,7 @@ namespace Game.DataStorage public sealed class MovieRecord { public uint Id; + public LocalizedString Summary; public byte Volume; public byte KeyID; public uint AudioFileDataID; diff --git a/Source/Game/DataStorage/Structs/S_Records.cs b/Source/Game/DataStorage/Structs/S_Records.cs index a86d71eed..222112f39 100644 --- a/Source/Game/DataStorage/Structs/S_Records.cs +++ b/Source/Game/DataStorage/Structs/S_Records.cs @@ -15,6 +15,7 @@ namespace Game.DataStorage public byte Type; public byte Flags; public uint UiTextureKitID; + public uint UiScenarioDisplayInfoID; } public sealed class ScenarioStepRecord @@ -59,6 +60,7 @@ namespace Game.DataStorage { public uint Id; public string Name; + public int Flags; public int Unknown915; } @@ -98,7 +100,6 @@ namespace Game.DataStorage public sealed class SkillLineAbilityRecord { - public long RaceMask; public string AbilityVerb; public string AbilityAllVerb; public uint Id; @@ -115,6 +116,7 @@ namespace Game.DataStorage public short UniqueBit; public short TradeSkillCategoryID; public ushort SkillupSkillLineID; + public long RaceMask; public bool HasFlag(SkillLineAbilityFlags skillLineAbilityFlags) { return (Flags & (int)skillLineAbilityFlags) != 0; } } @@ -130,13 +132,13 @@ namespace Game.DataStorage public sealed class SkillRaceClassInfoRecord { public uint Id; - public long RaceMask; public ushort SkillID; public int ClassMask; public int Flags; public int Availability; public sbyte MinLevel; public ushort SkillTierID; + public long RaceMask; public bool HasFlag(SkillRaceClassInfoFlags skillRaceClassInfoFlags) { return (Flags & (int)skillRaceClassInfoFlags) != 0; } } @@ -245,6 +247,7 @@ namespace Game.DataStorage public byte DifficultyID; public ushort Category; public int DefenseType; + public int DiminishType; public sbyte DispelType; public sbyte Mechanic; public int PreventionType; @@ -291,6 +294,7 @@ namespace Game.DataStorage public uint Id; public int Duration; public int MaxDuration; + public int DurationPerResource; } public sealed class SpellEffectRecord @@ -320,6 +324,7 @@ namespace Game.DataStorage public float GroupSizeBasePointsCoefficient; public float EffectBasePoints; public int ScalingClass; + public int TargetNodeGraph; public int[] EffectMiscValue = new int[2]; public uint[] EffectRadiusIndex = new uint[2]; public FlagArray128 EffectSpellClassMask; @@ -446,7 +451,7 @@ namespace Game.DataStorage public sealed class SpellMiscRecord { public uint Id; - public int[] Attributes = new int[16]; + public int[] Attributes = new int[17]; public byte DifficultyID; public ushort CastingTimeIndex; public ushort DurationIndex; @@ -551,6 +556,8 @@ namespace Game.DataStorage public int SpellID; public ushort CurrencyTypesID; public ushort CurrencyCount; + public int OverrideRecraftCurrencyCount; + public byte OrderSource; } public sealed class SpellScalingRecord @@ -559,7 +566,6 @@ namespace Game.DataStorage public uint SpellID; public uint MinScalingLevel; public uint MaxScalingLevel; - public ushort ScalesFromItemLevel; } public sealed class SpellShapeshiftRecord @@ -614,6 +620,7 @@ namespace Game.DataStorage public uint Id; public float[] MissileCastOffset = new float[3]; public float[] MissileImpactOffset = new float[3]; + public int StateKit; public uint AnimEventSoundID; public int Flags; public sbyte MissileAttachment; diff --git a/Source/Game/DataStorage/Structs/T_Records.cs b/Source/Game/DataStorage/Structs/T_Records.cs index 948040a5e..4ce644ca2 100644 --- a/Source/Game/DataStorage/Structs/T_Records.cs +++ b/Source/Game/DataStorage/Structs/T_Records.cs @@ -316,6 +316,7 @@ namespace Game.DataStorage public sealed class TraitTreeRecord { + public LocalizedString TitleText; public uint Id; public uint TraitSystemID; public int Unused1000_1; @@ -324,6 +325,7 @@ namespace Game.DataStorage public int Flags; public float Unused1000_2; public float Unused1000_3; + public int UiTextureKitID; public bool HasFlag(TraitTreeFlag traitTreeFlag) { return (Flags & (int)traitTreeFlag) != 0; } } diff --git a/Source/Game/DataStorage/Structs/U_Records.cs b/Source/Game/DataStorage/Structs/U_Records.cs index ccec2ece9..747071469 100644 --- a/Source/Game/DataStorage/Structs/U_Records.cs +++ b/Source/Game/DataStorage/Structs/U_Records.cs @@ -16,7 +16,6 @@ namespace Game.DataStorage public UiMapType Type; public int BountySetID; public uint BountyDisplayLocation; - public int VisibilityPlayerConditionID2; // if not met then map is skipped when evaluating UiMapAssignment public int VisibilityPlayerConditionID; // if not met then client checks other maps with the same AlternateUiMapGroup, not re-evaluating UiMapAssignment for them public sbyte HelpTextPosition; public int BkgAtlasID; diff --git a/Source/Game/Entities/MeshObject.cs b/Source/Game/Entities/MeshObject.cs new file mode 100644 index 000000000..c5009e338 --- /dev/null +++ b/Source/Game/Entities/MeshObject.cs @@ -0,0 +1,177 @@ +// Copyright (c) CypherCore All rights reserved. +// Licensed under the GNU GENERAL PUBLIC LICENSE. See LICENSE file in the project root for full license information. + +using Framework.Constants; +using Game.Maps; +using Game.Networking; +using Game.Networking.Packets; +using System.Collections.Generic; + +namespace Game.Entities +{ + public class MeshObject : WorldObject + { + MeshObjectData m_meshObjectData; + + Position _stationaryPosition = new(); + + public MeshObject(bool isWorldObject = false) : base(isWorldObject) + { + ObjectTypeMask |= TypeMask.MeshObject; + ObjectTypeId = TypeId.MeshObject; + + m_updateFlag.Stationary = true; + m_updateFlag.MeshObject = true; + + m_entityFragments.Add(EntityFragment.Tag_MeshObject, false); + + m_meshObjectData = new(); + _stationaryPosition = new(); + } + + public override void AddToWorld() + { + if (!IsInWorld) + { + GetMap().GetObjectsStore().Add(GetGUID(), this); + base.AddToWorld(); + } + } + + public override void RemoveFromWorld() + { + if (IsInWorld) + { + base.RemoveFromWorld(); + GetMap().GetObjectsStore().Remove(GetGUID()); + } + } + + public static MeshObject CreateMeshObject(Map map, Position pos, ObjectGuid privateObjectOwner) + { + if (map == null) + return null; + + ulong lowGuid = map.GenerateLowGuid(HighGuid.MeshObject); + + MeshObject meshObject = new(); + if (!meshObject.Create(lowGuid, map, pos, privateObjectOwner)) + { + meshObject.Dispose(); + return null; + } + + return meshObject; + } + + bool Create(ulong lowGuid, Map map, Position pos, ObjectGuid privateObjectOwner) + { + SetMap(map); + Relocate(pos); + RelocateStationaryPosition(pos); + + SetPrivateObjectOwner(privateObjectOwner); + + _Create(ObjectGuid.Create(HighGuid.MeshObject, GetMapId(), 0, lowGuid)); + + SetObjectScale(1.0f); + + // Register the updateable mesh-object-data fragment (vendor-style updateable fragment). + m_entityFragments.Add(EntityFragment.FMeshObjectData_C, IsInWorld); + + if (!GetMap().AddToMap(this)) + return false; + + return true; + } + + public override void BuildValuesCreate(WorldPacket data, UpdateFieldFlag flags, Player target) + { + m_objectData.WriteCreate(data, flags, this, target); + + if (m_meshObjectData != null) + { + if (EntityFragmentsHolder.IsIndirectFragment(EntityFragment.FMeshObjectData_C)) + data.WriteUInt8(1); // IndirectFragmentActive: FMeshObjectData_C + + m_meshObjectData.WriteCreate(data, flags, this, target); + } + } + + public override void BuildValuesUpdate(WorldPacket data, UpdateFieldFlag flags, Player target) + { + if ((m_entityFragments.ContentsChangedMask & m_entityFragments.GetUpdateMaskFor(EntityFragment.CGObject)) != 0) + { + data.WriteUInt32(m_values.GetChangedObjectTypeMask()); + + if (m_values.HasChanged(TypeId.Object)) + m_objectData.WriteUpdate(data, flags, this, target); + } + + if (m_meshObjectData != null && (m_entityFragments.ContentsChangedMask & m_entityFragments.GetUpdateMaskFor(EntityFragment.FMeshObjectData_C)) != 0) + m_meshObjectData.WriteUpdate(data, flags, this, target); + } + + void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedMeshObjectMask, Player target) + { + UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target); + UpdateMask valuesMask = new((int)TypeId.Max); + if (requestedObjectMask.IsAnySet()) + valuesMask.Set((int)TypeId.Object); + + WorldPacket buffer = new(); + BuildEntityFragmentsForValuesUpdateForPlayerWithMask(buffer, flags); + buffer.WriteUInt32(valuesMask.GetBlock(0)); + + if (valuesMask[(int)TypeId.Object]) + m_objectData.WriteUpdate(buffer, requestedObjectMask, true, this, target); + + // MeshObjectData is an updateable fragment (FMeshObjectData_C), written after the values block. + if (m_meshObjectData != null && requestedMeshObjectMask.IsAnySet()) + m_meshObjectData.WriteUpdate(buffer, requestedMeshObjectMask, true, this, target); + + WorldPacket buffer1 = new(); + buffer1.WriteUInt8((byte)UpdateType.Values); + buffer1.WritePackedGuid(GetGUID()); + buffer1.WriteUInt32(buffer.GetSize()); + buffer1.WriteBytes(buffer.GetData()); + + data.AddUpdateBlock(buffer1); + } + + public override void ClearUpdateMask(bool remove) + { + m_values.ClearChangesMask(m_meshObjectData); + base.ClearUpdateMask(remove); + } + + public override uint GetFaction() { return 0; } + + public override Position GetStationaryPosition() { return _stationaryPosition; } + void RelocateStationaryPosition(Position pos) { _stationaryPosition.Relocate(pos); } + + class ValuesUpdateForPlayerWithMaskSender + { + MeshObject Owner; + ObjectFieldData ObjectMask = new(); + MeshObjectData MeshObjectMask = new(); + + public ValuesUpdateForPlayerWithMaskSender(MeshObject owner) + { + Owner = owner; + } + + public void Invoke(Player player) + { + UpdateData udata = new(Owner.GetMapId()); + + Owner.BuildValuesUpdateForPlayerWithMask(udata, ObjectMask.GetUpdateMask(), MeshObjectMask.GetUpdateMask(), player); + + udata.BuildPacket(out UpdateObject packet); + player.SendPacket(packet); + } + + public static implicit operator IDoWork(ValuesUpdateForPlayerWithMaskSender obj) => obj.Invoke; + } + } +} diff --git a/Source/Game/Entities/Object/ObjectGuid.cs b/Source/Game/Entities/Object/ObjectGuid.cs index d23950018..a6ca3d08f 100644 --- a/Source/Game/Entities/Object/ObjectGuid.cs +++ b/Source/Game/Entities/Object/ObjectGuid.cs @@ -143,6 +143,7 @@ namespace Game.Entities case HighGuid.Corpse: case HighGuid.LootObject: case HighGuid.SceneObject: + case HighGuid.MeshObject: case HighGuid.Scenario: case HighGuid.AIGroup: case HighGuid.DynamicDoor: @@ -345,6 +346,8 @@ namespace Game.Entities return TypeId.AreaTrigger; case HighGuid.SceneObject: return TypeId.SceneObject; + case HighGuid.MeshObject: + return TypeId.MeshObject; case HighGuid.Conversation: return TypeId.Conversation; default: @@ -377,6 +380,7 @@ namespace Game.Entities case HighGuid.Corpse: case HighGuid.LootObject: case HighGuid.SceneObject: + case HighGuid.MeshObject: case HighGuid.Scenario: case HighGuid.AIGroup: case HighGuid.DynamicDoor: @@ -605,6 +609,7 @@ namespace Game.Entities SET_GUID_INFO(HighGuid.Corpse, FormatWorldObject, ParseWorldObject); SET_GUID_INFO(HighGuid.LootObject, FormatWorldObject, ParseWorldObject); SET_GUID_INFO(HighGuid.SceneObject, FormatWorldObject, ParseWorldObject); + SET_GUID_INFO(HighGuid.MeshObject, FormatWorldObject, ParseWorldObject); SET_GUID_INFO(HighGuid.Scenario, FormatWorldObject, ParseWorldObject); SET_GUID_INFO(HighGuid.AIGroup, FormatWorldObject, ParseWorldObject); SET_GUID_INFO(HighGuid.DynamicDoor, FormatWorldObject, ParseWorldObject); diff --git a/Source/Game/Entities/Object/Update/UpdateFields.cs b/Source/Game/Entities/Object/Update/UpdateFields.cs index e8b3ba325..74cd98fef 100644 --- a/Source/Game/Entities/Object/Update/UpdateFields.cs +++ b/Source/Game/Entities/Object/Update/UpdateFields.cs @@ -1072,13 +1072,18 @@ namespace Game.Entities } } - public class VisibleItem() : HasChangesMask(6) + public class VisibleItem() : HasChangesMask(11) { - public UpdateField ItemID = new(0, 1); - public UpdateField SecondaryItemModifiedAppearanceID = new(0, 2); - public UpdateField ConditionalItemAppearanceID = new(0, 3); - public UpdateField ItemAppearanceModID = new(0, 4); - public UpdateField ItemVisual = new(0, 5); + public UpdateField HasTransmog = new(0, 1); // 12.0.7: new field + public UpdateField HasIllusion = new(0, 2); // 12.0.7: new field + public UpdateField ItemID = new(0, 3); + public UpdateField SecondaryItemModifiedAppearanceID = new(0, 4); + public UpdateField ConditionalItemAppearanceID = new(0, 5); + public UpdateField ItemAppearanceModID = new(0, 6); + public UpdateField ItemVisual = new(0, 7); + public UpdateField ItemModifiedAppearanceID = new(0, 8); // 12.0.7: new field + public UpdateField TransmogSlotOption = new(0, 9); // 12.0.7: new field + public UpdateField SheatheCategory = new(0, 10); // 12.0.7: new field public void WriteCreate(WorldPacket data, Unit owner, Player receiver) { @@ -1087,6 +1092,12 @@ namespace Game.Entities data.WriteInt32(ConditionalItemAppearanceID); data.WriteUInt16(ItemAppearanceModID); data.WriteUInt16(ItemVisual); + data.WriteUInt32(ItemModifiedAppearanceID); + data.WriteUInt8(TransmogSlotOption); + data.WriteUInt8(SheatheCategory); + data.WriteBit(HasTransmog); + data.WriteBit(HasIllusion); + data.FlushBits(); } public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Unit owner, Player receiver) @@ -1095,41 +1106,70 @@ namespace Game.Entities if (ignoreChangesMask) changesMask.SetAll(); - data.WriteBits(changesMask.GetBlock(0), 6); + data.WriteBits(changesMask.GetBlock(0), 11); - data.FlushBits(); if (changesMask[0]) { if (changesMask[1]) { - data.WriteUInt32(ItemID); + data.WriteBit(HasTransmog); } if (changesMask[2]) { - data.WriteUInt32(SecondaryItemModifiedAppearanceID); + data.WriteBit(HasIllusion); } + } + data.FlushBits(); + if (changesMask[0]) + { if (changesMask[3]) { - data.WriteInt32(ConditionalItemAppearanceID); + data.WriteUInt32(ItemID); } if (changesMask[4]) { - data.WriteUInt16(ItemAppearanceModID); + data.WriteUInt32(SecondaryItemModifiedAppearanceID); } if (changesMask[5]) + { + data.WriteInt32(ConditionalItemAppearanceID); + } + if (changesMask[6]) + { + data.WriteUInt16(ItemAppearanceModID); + } + if (changesMask[7]) { data.WriteUInt16(ItemVisual); } + if (changesMask[8]) + { + data.WriteUInt32(ItemModifiedAppearanceID); + } + if (changesMask[9]) + { + data.WriteUInt8(TransmogSlotOption); + } + if (changesMask[10]) + { + data.WriteUInt8(SheatheCategory); + } } + data.FlushBits(); } public override void ClearChangesMask() { + ClearChangesMask(HasTransmog); + ClearChangesMask(HasIllusion); ClearChangesMask(ItemID); ClearChangesMask(SecondaryItemModifiedAppearanceID); ClearChangesMask(ConditionalItemAppearanceID); ClearChangesMask(ItemAppearanceModID); ClearChangesMask(ItemVisual); + ClearChangesMask(ItemModifiedAppearanceID); + ClearChangesMask(TransmogSlotOption); + ClearChangesMask(SheatheCategory); _changesMask.ResetAll(); } } @@ -1210,7 +1250,7 @@ namespace Game.Entities } } - public class UnitData() : HasChangesMask((int)EntityFragment.CGObject, TypeId.Unit, 223) + public class UnitData() : HasChangesMask((int)EntityFragment.CGObject, TypeId.Unit, 228) { public UpdateField Field_314 = new(0, 1); public UpdateField> StateWorldEffectIDs = new(0, 2); @@ -1243,119 +1283,120 @@ namespace Game.Entities public UpdateField ClassId = new(0, 29); public UpdateField PlayerClassId = new(0, 30); public UpdateField Sex = new(0, 31); - public UpdateField DisplayPower = new(32, 33); - public UpdateField OverrideDisplayPowerID = new(32, 34); - public UpdateField Health = new(32, 35); - public UpdateField MaxHealth = new(32, 36); - public UpdateField Level = new(32, 37); - public UpdateField EffectiveLevel = new(32, 38); - public UpdateField ContentTuningID = new(32, 39); - public UpdateField ScalingLevelMin = new(32, 40); - public UpdateField ScalingLevelMax = new(32, 41); - public UpdateField ScalingLevelDelta = new(32, 42); - public UpdateField ScalingFactionGroup = new(32, 43); - public UpdateField FactionTemplate = new(32, 44); - public UpdateField Flags = new(32, 45); - public UpdateField Flags2 = new(32, 46); - public UpdateField Flags3 = new(32, 47); - public UpdateField Flags4 = new(32, 48); - public UpdateField AuraState = new(32, 49); - public UpdateField RangedAttackRoundBaseTime = new(32, 50); - public UpdateField BoundingRadius = new(32, 51); - public UpdateField CombatReach = new(32, 52); - public UpdateField DisplayScale = new(32, 53); - public UpdateField CreatureFamily = new(32, 54); - public UpdateField CreatureType = new(32, 55); - public UpdateField NativeDisplayID = new(32, 56); - public UpdateField NativeXDisplayScale = new(32, 57); - public UpdateField MountDisplayID = new(32, 58); - public UpdateField CosmeticMountDisplayID = new(32, 59); - public UpdateField MinDamage = new(32, 60); - public UpdateField MaxDamage = new(32, 61); - public UpdateField MinOffHandDamage = new(32, 62); - public UpdateField MaxOffHandDamage = new(32, 63); - public UpdateField StandState = new(64, 65); - public UpdateField PetTalentPoints = new(64, 66); - public UpdateField VisFlags = new(64, 67); - public UpdateField AnimTier = new(64, 68); - public UpdateField PetNumber = new(64, 69); - public UpdateField PetNameTimestamp = new(64, 70); - public UpdateField PetExperience = new(64, 71); - public UpdateField PetNextLevelExperience = new(64, 72); - public UpdateField ModCastingSpeed = new(64, 73); - public UpdateField ModCastingSpeedNeg = new(64, 74); - public UpdateField ModSpellHaste = new(64, 75); - public UpdateField ModHaste = new(64, 76); - public UpdateField ModRangedHaste = new(64, 77); - public UpdateField ModHasteRegen = new(64, 78); - public UpdateField ModTimeRate = new(64, 79); - public UpdateField CreatedBySpell = new(64, 80); - public UpdateField EmoteState = new(64, 81); - public UpdateField BaseMana = new(64, 82); - public UpdateField BaseHealth = new(64, 83); - public UpdateField SheatheState = new(64, 84); - public UpdateField PvpFlags = new(64, 85); - public UpdateField PetFlags = new(64, 86); - public UpdateField ShapeshiftForm = new(64, 87); - public UpdateField AttackPower = new(64, 88); - public UpdateField AttackPowerModPos = new(64, 89); - public UpdateField AttackPowerModNeg = new(64, 90); - public UpdateField AttackPowerMultiplier = new(64, 91); - public UpdateField AttackPowerModSupport = new(64, 92); - public UpdateField RangedAttackPower = new(64, 93); - public UpdateField RangedAttackPowerModPos = new(64, 94); - public UpdateField RangedAttackPowerModNeg = new(64, 95); - public UpdateField RangedAttackPowerMultiplier = new(96, 97); - public UpdateField RangedAttackPowerModSupport = new(96, 98); - public UpdateField MainHandWeaponAttackPower = new(96, 99); - public UpdateField OffHandWeaponAttackPower = new(96, 100); - public UpdateField RangedWeaponAttackPower = new(96, 101); - public UpdateField SetAttackSpeedAura = new(96, 102); - public UpdateField Lifesteal = new(96, 103); - public UpdateField MinRangedDamage = new(96, 104); - public UpdateField MaxRangedDamage = new(96, 105); - public UpdateField ManaCostMultiplier = new(96, 106); - public UpdateField MaxHealthModifier = new(96, 107); - public UpdateField HoverHeight = new(96, 108); - public UpdateField MinItemLevelCutoff = new(96, 109); - public UpdateField MinItemLevel = new(96, 110); - public UpdateField MaxItemLevel = new(96, 111); - public UpdateField AzeriteItemLevel = new(96, 112); - public UpdateField WildBattlePetLevel = new(96, 113); - public UpdateField BattlePetCompanionExperience = new(96, 114); - public UpdateField BattlePetCompanionNameTimestamp = new(96, 115); - public UpdateField InteractSpellID = new(96, 116); - public UpdateField ScaleDuration = new(96, 117); - public UpdateField LooksLikeMountID = new(96, 118); - public UpdateField LooksLikeCreatureID = new(96, 119); - public UpdateField LookAtControllerID = new(96, 120); - public UpdateField PerksVendorItemID = new(96, 121); - public UpdateField TaxiNodesID = new(96, 122); - public UpdateField GuildGUID = new(96, 123); - public UpdateField FlightCapabilityID = new(96, 124); - public UpdateField GlideEventSpeedDivisor = new(96, 125); // Movement speed gets divided by this value when evaluating what GlideEvents to use - public UpdateField DriveCapabilityID = new(96, 126); - public UpdateField MaxHealthModifierFlatNeg = new(96, 127); - public UpdateField MaxHealthModifierFlatPos = new(128, 129); - public UpdateField SilencedSchoolMask = new(128, 130); - public UpdateField CurrentAreaID = new(128, 131); - public UpdateField Field_31C = new(128, 132); - public UpdateField Field_320 = new(128, 133); // Soft targeting related? When UnitFlags3 & 0x40000000 is set, increases some range check using CombatReach by this amount - public UpdateField NameplateAttachToGUID = new(128, 134); // When set, nameplate of this unit will instead appear on that object - public OptionalUpdateField AssistActionData = new(128, 135); - public UpdateFieldArray Power = new(10, 136, 137); - public UpdateFieldArray MaxPower = new(10, 136, 147); - public UpdateFieldArray PowerRegenFlatModifier = new(10, 136, 157); - public UpdateFieldArray PowerRegenInterruptedFlatModifier = new(10, 136, 167); - public UpdateFieldArray VirtualItems = new(3, 177, 178); - public UpdateFieldArray AttackRoundBaseTime = new(2, 181, 182); - public UpdateFieldArray Stats = new(4, 184, 185); - public UpdateFieldArray StatPosBuff = new(4, 184, 189); - public UpdateFieldArray StatNegBuff = new(4, 184, 193); - public UpdateFieldArray StatSupportBuff = new(4, 184, 197); - public UpdateFieldArray Resistances = new(7, 201, 202); - public UpdateFieldArray BonusResistanceMods = new(7, 201, 209); - public UpdateFieldArray ManaCostModifier = new(7, 201, 216); + public UpdateField CreatureType = new(32, 33); // 12.0.7: new field + public UpdateField DisplayPower = new(32, 34); + public UpdateField OverrideDisplayPowerID = new(32, 35); + public UpdateField Health = new(32, 36); + public UpdateField MaxHealth = new(32, 37); + public UpdateField Level = new(32, 38); + public UpdateField EffectiveLevel = new(32, 39); + public UpdateField ContentTuningID = new(32, 40); + public UpdateField ScalingLevelMin = new(32, 41); + public UpdateField ScalingLevelMax = new(32, 42); + public UpdateField ScalingLevelDelta = new(32, 43); + public UpdateField ScalingFactionGroup = new(32, 44); + public UpdateField FactionTemplate = new(32, 45); + public UpdateField Flags = new(32, 46); + public UpdateField Flags2 = new(32, 47); + public UpdateField Flags3 = new(32, 48); + public UpdateField Flags4 = new(32, 49); + public UpdateField AuraState = new(32, 50); + public UpdateField RangedAttackRoundBaseTime = new(32, 51); + public UpdateField BoundingRadius = new(32, 52); + public UpdateField CombatReach = new(32, 53); + public UpdateField DisplayScale = new(32, 54); + public UpdateField CreatureFamily = new(32, 55); + public UpdateField OverrideCreatureType = new(32, 56); // 12.0.7: renamed from CreatureType + public UpdateField NativeDisplayID = new(32, 57); + public UpdateField NativeXDisplayScale = new(32, 58); + public UpdateField MountDisplayID = new(32, 59); + public UpdateField CosmeticMountDisplayID = new(32, 60); + public UpdateField MinDamage = new(32, 61); + public UpdateField MaxDamage = new(32, 62); + public UpdateField MinOffHandDamage = new(32, 63); + public UpdateField MaxOffHandDamage = new(64, 65); + public UpdateField StandState = new(64, 66); + public UpdateField PetTalentPoints = new(64, 67); + public UpdateField VisFlags = new(64, 68); + public UpdateField AnimTier = new(64, 69); + public UpdateField PetNumber = new(64, 70); + public UpdateField PetNameTimestamp = new(64, 71); + public UpdateField PetExperience = new(64, 72); + public UpdateField PetNextLevelExperience = new(64, 73); + public UpdateField ModCastingSpeed = new(64, 74); + public UpdateField ModCastingSpeedNeg = new(64, 75); + public UpdateField ModSpellHaste = new(64, 76); + public UpdateField ModHaste = new(64, 77); + public UpdateField ModRangedHaste = new(64, 78); + public UpdateField ModHasteRegen = new(64, 79); + public UpdateField ModTimeRate = new(64, 80); + public UpdateField CreatedBySpell = new(64, 81); + public UpdateField EmoteState = new(64, 82); + public UpdateField BaseMana = new(64, 83); + public UpdateField BaseHealth = new(64, 84); + public UpdateField SheatheState = new(64, 85); + public UpdateField PvpFlags = new(64, 86); + public UpdateField PetFlags = new(64, 87); + public UpdateField ShapeshiftForm = new(64, 88); + public UpdateField AttackPower = new(64, 89); + public UpdateField AttackPowerModPos = new(64, 90); + public UpdateField AttackPowerModNeg = new(64, 91); + public UpdateField AttackPowerMultiplier = new(64, 92); + public UpdateField AttackPowerModSupport = new(64, 93); + public UpdateField RangedAttackPower = new(64, 94); + public UpdateField RangedAttackPowerModPos = new(64, 95); + public UpdateField RangedAttackPowerModNeg = new(96, 97); + public UpdateField RangedAttackPowerMultiplier = new(96, 98); + public UpdateField RangedAttackPowerModSupport = new(96, 99); + public UpdateField MainHandWeaponAttackPower = new(96, 100); + public UpdateField OffHandWeaponAttackPower = new(96, 101); + public UpdateField RangedWeaponAttackPower = new(96, 102); + public UpdateField SetAttackSpeedAura = new(96, 103); + public UpdateField Lifesteal = new(96, 104); + public UpdateField MinRangedDamage = new(96, 105); + public UpdateField MaxRangedDamage = new(96, 106); + public UpdateField ManaCostMultiplier = new(96, 107); + public UpdateField MaxHealthModifier = new(96, 108); + public UpdateField HoverHeight = new(96, 109); + public UpdateField MinItemLevelCutoff = new(96, 110); + public UpdateField MinItemLevel = new(96, 111); + public UpdateField MaxItemLevel = new(96, 112); + public UpdateField AzeriteItemLevel = new(96, 113); + public UpdateField WildBattlePetLevel = new(96, 114); + public UpdateField BattlePetCompanionExperience = new(96, 115); + public UpdateField BattlePetCompanionNameTimestamp = new(96, 116); + public UpdateField InteractSpellID = new(96, 117); + public UpdateField ScaleDuration = new(96, 118); + public UpdateField LooksLikeMountID = new(96, 119); + public UpdateField LooksLikeCreatureID = new(96, 120); + public UpdateField LookAtControllerID = new(96, 121); + public UpdateField PerksVendorItemID = new(96, 122); + public UpdateField TaxiNodesID = new(96, 123); + public UpdateField GuildGUID = new(96, 124); + public UpdateField FlightCapabilityID = new(96, 125); + public UpdateField GlideEventSpeedDivisor = new(96, 126); // Movement speed gets divided by this value when evaluating what GlideEvents to use + public UpdateField DriveCapabilityID = new(96, 127); + public UpdateField MaxHealthModifierFlatNeg = new(128, 129); + public UpdateField MaxHealthModifierFlatPos = new(128, 130); + public UpdateField SilencedSchoolMask = new(128, 131); + public UpdateField CurrentAreaID = new(128, 132); + public UpdateField Field_31C = new(128, 133); + public UpdateField Field_320 = new(128, 134); // Soft targeting related? When UnitFlags3 & 0x40000000 is set, increases some range check using CombatReach by this amount + public UpdateField NameplateAttachToGUID = new(128, 135); // When set, nameplate of this unit will instead appear on that object + public OptionalUpdateField AssistActionData = new(128, 136); + public UpdateFieldArray Power = new(10, 137, 138); + public UpdateFieldArray MaxPower = new(10, 137, 148); + public UpdateFieldArray PowerRegenFlatModifier = new(10, 137, 158); + public UpdateFieldArray PowerRegenInterruptedFlatModifier = new(10, 137, 168); + public UpdateFieldArray VirtualItems = new(3, 178, 179); + public UpdateFieldArray AttackRoundBaseTime = new(2, 182, 183); + public UpdateFieldArray Stats = new(5, 185, 186); + public UpdateFieldArray StatPosBuff = new(5, 185, 191); + public UpdateFieldArray StatNegBuff = new(5, 185, 196); + public UpdateFieldArray StatSupportBuff = new(5, 185, 201); + public UpdateFieldArray Resistances = new(7, 206, 207); + public UpdateFieldArray BonusResistanceMods = new(7, 206, 214); + public UpdateFieldArray ManaCostModifier = new(7, 206, 221); public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Unit owner, Player receiver) { @@ -1394,6 +1435,7 @@ namespace Game.Entities data.WriteUInt8(ClassId); data.WriteUInt8(PlayerClassId); data.WriteUInt8(Sex); + data.WriteUInt8(CreatureType); data.WriteUInt8(DisplayPower); data.WriteUInt32(OverrideDisplayPowerID); data.WriteUInt64(Health); @@ -1419,9 +1461,6 @@ namespace Game.Entities data.WriteInt32(ScalingLevelDelta); data.WriteUInt8(ScalingFactionGroup); data.WriteUInt32(GetViewerDependentFactionTemplate(this, owner, receiver)); - for (int i = 0; i < 3; ++i) - VirtualItems[i].WriteCreate(data, owner, receiver); - data.WriteUInt32(GetViewerDependentFlags(this, owner, receiver)); data.WriteUInt32(GetViewerDependentFlags2(this, owner, receiver)); data.WriteUInt32(GetViewerDependentFlags3(this, owner, receiver)); @@ -1437,7 +1476,7 @@ namespace Game.Entities data.WriteFloat(CombatReach); data.WriteFloat(DisplayScale); data.WriteInt32(CreatureFamily); - data.WriteUInt8(CreatureType); + data.WriteUInt8(OverrideCreatureType); data.WriteUInt32(NativeDisplayID); data.WriteFloat(NativeXDisplayScale); data.WriteUInt32(MountDisplayID); @@ -1468,7 +1507,7 @@ namespace Game.Entities data.WriteInt32(EmoteState); if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Owner)) { - for (int i = 0; i < 4; ++i) + for (int i = 0; i < 5; ++i) { data.WriteInt32(Stats[i]); data.WriteInt32(StatPosBuff[i]); @@ -1560,6 +1599,9 @@ namespace Game.Entities for (int i = 0; i < ChannelObjects.Size(); ++i) data.WritePackedGuid(ChannelObjects[i]); + for (int i = 0; i < 3; ++i) + VirtualItems[i].WriteCreate(data, owner, receiver); + data.FlushBits(); data.WriteBit(Field_314); data.WriteBits(AssistActionData.HasValue(), 1); @@ -1573,11 +1615,11 @@ namespace Game.Entities public void UnitDataAppendAllowedFieldsMaskForFlag(UpdateMask allowedMaskForTarget, UpdateFieldFlag fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Owner)) - allowedMaskForTarget.OR(new UpdateMask(ChangeMaskLength, [0x00010000u, 0xF0040000u, 0xFF080000u, 0x000007FEu, 0xE0000100u, 0xFF01FFFFu, 0x7FFFFFFFu])); + allowedMaskForTarget.OR(new UpdateMask(ChangeMaskLength, [0x00010000u, 0xE0080000u, 0xFE100002u, 0x00000FFEu, 0xC0000200u, 0xFE03FFFFu, 0xFFFFFFFFu, 0x0000000Fu])); if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.UnitAll)) - allowedMaskForTarget.OR(new UpdateMask(ChangeMaskLength, [0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xE0000100u, 0x0001FFFFu, 0x00000000u])); + allowedMaskForTarget.OR(new UpdateMask(ChangeMaskLength, [0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xC0000200u, 0x0003FFFFu, 0x00000000u, 0x00000000u])); if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Empath)) - allowedMaskForTarget.OR(new UpdateMask(ChangeMaskLength, [0x00000000u, 0xF0000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0001FE00u])); + allowedMaskForTarget.OR(new UpdateMask(ChangeMaskLength, [0x00000000u, 0xE0000000u, 0x00000002u, 0x00000000u, 0x00000000u, 0x00000000u, 0x003FC000u, 0x00000000u])); } public void AppendAllowedFieldsMaskForFlag(UpdateMask allowedMaskForTarget, UpdateFieldFlag fieldVisibilityFlags) @@ -1587,22 +1629,22 @@ namespace Game.Entities public void FilterDisallowedFieldsMaskForFlag(UpdateMask changesMask, UpdateFieldFlag fieldVisibilityFlags) { - UpdateMask allowedMaskForTarget = new(ChangeMaskLength, [0xFFFEFFFFu, 0x0FFBFFFFu, 0x00F7FFFFu, 0xFFFFF801u, 0x1FFFFFFFu, 0x00FE0000u, 0x00000000u]); + UpdateMask allowedMaskForTarget = new(ChangeMaskLength, [0xFFFEFFFFu, 0x1FF7FFFFu, 0x01EFFFFDu, 0xFFFFF001u, 0x3FFFFFFFu, 0x01FC0000u, 0x00000000u, 0x00000000u]); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); changesMask.AND(allowedMaskForTarget); } public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Unit owner, Player receiver) { - UpdateMask allowedMaskForTarget = new(ChangeMaskLength, [0xFFFEFFFFu, 0x0FFBFFFFu, 0x00F7FFFFu, 0xFFFFF801u, 0x1FFFFFFFu, 0x00FE0000u, 0x00000000u]); + UpdateMask allowedMaskForTarget = new(ChangeMaskLength, [0xFFFEFFFFu, 0x1FF7FFFFu, 0x01EFFFFDu, 0xFFFFF001u, 0x3FFFFFFFu, 0x01FC0000u, 0x00000000u, 0x00000000u]); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, Unit owner, Player receiver) { - data.WriteBits(changesMask.GetBlocksMask(0), 7); - for (uint i = 0; i < 7; ++i) + data.WriteBits(changesMask.GetBlocksMask(0), 8); + for (uint i = 0; i < 8; ++i) if (changesMask.GetBlock(i) != 0) data.WriteBits(changesMask.GetBlock(i), 32); @@ -1791,412 +1833,416 @@ namespace Game.Entities { if (changesMask[33]) { - data.WriteUInt8(DisplayPower); + data.WriteUInt8(CreatureType); } if (changesMask[34]) { - data.WriteUInt32(OverrideDisplayPowerID); + data.WriteUInt8(DisplayPower); } if (changesMask[35]) { - data.WriteUInt64(Health); + data.WriteUInt32(OverrideDisplayPowerID); } if (changesMask[36]) { - data.WriteUInt64(MaxHealth); + data.WriteUInt64(Health); } if (changesMask[37]) { - data.WriteUInt32(Level); + data.WriteUInt64(MaxHealth); } if (changesMask[38]) { - data.WriteUInt32(EffectiveLevel); + data.WriteUInt32(Level); } if (changesMask[39]) { - data.WriteUInt32(ContentTuningID); + data.WriteUInt32(EffectiveLevel); } if (changesMask[40]) { - data.WriteInt32(ScalingLevelMin); + data.WriteUInt32(ContentTuningID); } if (changesMask[41]) { - data.WriteInt32(ScalingLevelMax); + data.WriteInt32(ScalingLevelMin); } if (changesMask[42]) { - data.WriteInt32(ScalingLevelDelta); + data.WriteInt32(ScalingLevelMax); } if (changesMask[43]) { - data.WriteUInt8(ScalingFactionGroup); + data.WriteInt32(ScalingLevelDelta); } if (changesMask[44]) { - data.WriteUInt32(GetViewerDependentFactionTemplate(this, owner, receiver)); + data.WriteUInt8(ScalingFactionGroup); } if (changesMask[45]) { - data.WriteUInt32(GetViewerDependentFlags(this, owner, receiver)); + data.WriteUInt32(GetViewerDependentFactionTemplate(this, owner, receiver)); } if (changesMask[46]) { - data.WriteUInt32(GetViewerDependentFlags2(this, owner, receiver)); + data.WriteUInt32(GetViewerDependentFlags(this, owner, receiver)); } if (changesMask[47]) { - data.WriteUInt32(GetViewerDependentFlags3(this, owner, receiver)); + data.WriteUInt32(GetViewerDependentFlags2(this, owner, receiver)); } if (changesMask[48]) { - data.WriteUInt32(GetViewerDependentFlags4(this, owner, receiver)); + data.WriteUInt32(GetViewerDependentFlags3(this, owner, receiver)); } if (changesMask[49]) { - data.WriteUInt32(GetViewerDependentAuraState(this, owner, receiver)); + data.WriteUInt32(GetViewerDependentFlags4(this, owner, receiver)); } if (changesMask[50]) { - data.WriteUInt32(RangedAttackRoundBaseTime); + data.WriteUInt32(GetViewerDependentAuraState(this, owner, receiver)); } if (changesMask[51]) { - data.WriteFloat(BoundingRadius); + data.WriteUInt32(RangedAttackRoundBaseTime); } if (changesMask[52]) { - data.WriteFloat(CombatReach); + data.WriteFloat(BoundingRadius); } if (changesMask[53]) { - data.WriteFloat(DisplayScale); + data.WriteFloat(CombatReach); } if (changesMask[54]) { - data.WriteInt32(CreatureFamily); + data.WriteFloat(DisplayScale); } if (changesMask[55]) { - data.WriteUInt8(CreatureType); + data.WriteInt32(CreatureFamily); } if (changesMask[56]) { - data.WriteUInt32(NativeDisplayID); + data.WriteUInt8(OverrideCreatureType); } if (changesMask[57]) { - data.WriteFloat(NativeXDisplayScale); + data.WriteUInt32(NativeDisplayID); } if (changesMask[58]) { - data.WriteUInt32(MountDisplayID); + data.WriteFloat(NativeXDisplayScale); } if (changesMask[59]) { - data.WriteUInt32(CosmeticMountDisplayID); + data.WriteUInt32(MountDisplayID); } if (changesMask[60]) { - data.WriteFloat(MinDamage); + data.WriteUInt32(CosmeticMountDisplayID); } if (changesMask[61]) { - data.WriteFloat(MaxDamage); + data.WriteFloat(MinDamage); } if (changesMask[62]) { - data.WriteFloat(MinOffHandDamage); + data.WriteFloat(MaxDamage); } if (changesMask[63]) { - data.WriteFloat(MaxOffHandDamage); + data.WriteFloat(MinOffHandDamage); } } if (changesMask[64]) { if (changesMask[65]) { - data.WriteUInt8(StandState); + data.WriteFloat(MaxOffHandDamage); } if (changesMask[66]) { - data.WriteUInt8(PetTalentPoints); + data.WriteUInt8(StandState); } if (changesMask[67]) { - data.WriteUInt8(VisFlags); + data.WriteUInt8(PetTalentPoints); } if (changesMask[68]) { - data.WriteUInt8(AnimTier); + data.WriteUInt8(VisFlags); } if (changesMask[69]) { - data.WriteUInt32(PetNumber); + data.WriteUInt8(AnimTier); } if (changesMask[70]) { - data.WriteUInt32(PetNameTimestamp); + data.WriteUInt32(PetNumber); } if (changesMask[71]) { - data.WriteUInt32(PetExperience); + data.WriteUInt32(PetNameTimestamp); } if (changesMask[72]) { - data.WriteUInt32(PetNextLevelExperience); + data.WriteUInt32(PetExperience); } if (changesMask[73]) { - data.WriteFloat(ModCastingSpeed); + data.WriteUInt32(PetNextLevelExperience); } if (changesMask[74]) { - data.WriteFloat(ModCastingSpeedNeg); + data.WriteFloat(ModCastingSpeed); } if (changesMask[75]) { - data.WriteFloat(ModSpellHaste); + data.WriteFloat(ModCastingSpeedNeg); } if (changesMask[76]) { - data.WriteFloat(ModHaste); + data.WriteFloat(ModSpellHaste); } if (changesMask[77]) { - data.WriteFloat(ModRangedHaste); + data.WriteFloat(ModHaste); } if (changesMask[78]) { - data.WriteFloat(ModHasteRegen); + data.WriteFloat(ModRangedHaste); } if (changesMask[79]) { - data.WriteFloat(ModTimeRate); + data.WriteFloat(ModHasteRegen); } if (changesMask[80]) { - data.WriteUInt32(CreatedBySpell); + data.WriteFloat(ModTimeRate); } if (changesMask[81]) { - data.WriteInt32(EmoteState); + data.WriteUInt32(CreatedBySpell); } if (changesMask[82]) { - data.WriteUInt32(BaseMana); + data.WriteInt32(EmoteState); } if (changesMask[83]) { - data.WriteUInt32(BaseHealth); + data.WriteUInt32(BaseMana); } if (changesMask[84]) { - data.WriteUInt8(SheatheState); + data.WriteUInt32(BaseHealth); } if (changesMask[85]) { - data.WriteUInt8(GetViewerDependentPvpFlags(this, owner, receiver)); + data.WriteUInt8(SheatheState); } if (changesMask[86]) { - data.WriteUInt8(PetFlags); + data.WriteUInt8(GetViewerDependentPvpFlags(this, owner, receiver)); } if (changesMask[87]) { - data.WriteUInt8(ShapeshiftForm); + data.WriteUInt8(PetFlags); } if (changesMask[88]) { - data.WriteInt32(AttackPower); + data.WriteUInt8(ShapeshiftForm); } if (changesMask[89]) { - data.WriteInt32(AttackPowerModPos); + data.WriteInt32(AttackPower); } if (changesMask[90]) { - data.WriteInt32(AttackPowerModNeg); + data.WriteInt32(AttackPowerModPos); } if (changesMask[91]) { - data.WriteFloat(AttackPowerMultiplier); + data.WriteInt32(AttackPowerModNeg); } if (changesMask[92]) { - data.WriteInt32(AttackPowerModSupport); + data.WriteFloat(AttackPowerMultiplier); } if (changesMask[93]) { - data.WriteInt32(RangedAttackPower); + data.WriteInt32(AttackPowerModSupport); } if (changesMask[94]) { - data.WriteInt32(RangedAttackPowerModPos); + data.WriteInt32(RangedAttackPower); } if (changesMask[95]) { - data.WriteInt32(RangedAttackPowerModNeg); + data.WriteInt32(RangedAttackPowerModPos); } } if (changesMask[96]) { if (changesMask[97]) { - data.WriteFloat(RangedAttackPowerMultiplier); + data.WriteInt32(RangedAttackPowerModNeg); } if (changesMask[98]) { - data.WriteInt32(RangedAttackPowerModSupport); + data.WriteFloat(RangedAttackPowerMultiplier); } if (changesMask[99]) { - data.WriteInt32(MainHandWeaponAttackPower); + data.WriteInt32(RangedAttackPowerModSupport); } if (changesMask[100]) { - data.WriteInt32(OffHandWeaponAttackPower); + data.WriteInt32(MainHandWeaponAttackPower); } if (changesMask[101]) { - data.WriteInt32(RangedWeaponAttackPower); + data.WriteInt32(OffHandWeaponAttackPower); } if (changesMask[102]) { - data.WriteInt32(SetAttackSpeedAura); + data.WriteInt32(RangedWeaponAttackPower); } if (changesMask[103]) { - data.WriteFloat(Lifesteal); + data.WriteInt32(SetAttackSpeedAura); } if (changesMask[104]) { - data.WriteFloat(MinRangedDamage); + data.WriteFloat(Lifesteal); } if (changesMask[105]) { - data.WriteFloat(MaxRangedDamage); + data.WriteFloat(MinRangedDamage); } if (changesMask[106]) { - data.WriteFloat(ManaCostMultiplier); + data.WriteFloat(MaxRangedDamage); } if (changesMask[107]) { - data.WriteFloat(MaxHealthModifier); + data.WriteFloat(ManaCostMultiplier); } if (changesMask[108]) { - data.WriteFloat(HoverHeight); + data.WriteFloat(MaxHealthModifier); } if (changesMask[109]) { - data.WriteUInt32(MinItemLevelCutoff); + data.WriteFloat(HoverHeight); } if (changesMask[110]) { - data.WriteUInt32(MinItemLevel); + data.WriteUInt32(MinItemLevelCutoff); } if (changesMask[111]) { - data.WriteUInt32(MaxItemLevel); + data.WriteUInt32(MinItemLevel); } if (changesMask[112]) { - data.WriteUInt32(AzeriteItemLevel); + data.WriteUInt32(MaxItemLevel); } if (changesMask[113]) { - data.WriteUInt32(WildBattlePetLevel); + data.WriteUInt32(AzeriteItemLevel); } if (changesMask[114]) { - data.WriteUInt32(BattlePetCompanionExperience); + data.WriteUInt32(WildBattlePetLevel); } if (changesMask[115]) { - data.WriteUInt32(BattlePetCompanionNameTimestamp); + data.WriteUInt32(BattlePetCompanionExperience); } if (changesMask[116]) { - data.WriteInt32(GetViewerDependentInteractSpellId(this, owner, receiver)); + data.WriteUInt32(BattlePetCompanionNameTimestamp); } if (changesMask[117]) { - data.WriteInt32(ScaleDuration); + data.WriteInt32(GetViewerDependentInteractSpellId(this, owner, receiver)); } if (changesMask[118]) { - data.WriteInt32(LooksLikeMountID); + data.WriteInt32(ScaleDuration); } if (changesMask[119]) { - data.WriteInt32(LooksLikeCreatureID); + data.WriteInt32(LooksLikeMountID); } if (changesMask[120]) { - data.WriteInt32(LookAtControllerID); + data.WriteInt32(LooksLikeCreatureID); } if (changesMask[121]) { - data.WriteInt32(PerksVendorItemID); + data.WriteInt32(LookAtControllerID); } if (changesMask[122]) { - data.WriteInt32(TaxiNodesID); + data.WriteInt32(PerksVendorItemID); } if (changesMask[123]) { - data.WritePackedGuid(GuildGUID); + data.WriteInt32(TaxiNodesID); } if (changesMask[124]) { - data.WriteInt32(FlightCapabilityID); + data.WritePackedGuid(GuildGUID); } if (changesMask[125]) { - data.WriteFloat(GlideEventSpeedDivisor); + data.WriteInt32(FlightCapabilityID); } if (changesMask[126]) { - data.WriteInt32(DriveCapabilityID); + data.WriteFloat(GlideEventSpeedDivisor); } if (changesMask[127]) { - data.WriteInt32(MaxHealthModifierFlatNeg); + data.WriteInt32(DriveCapabilityID); } } if (changesMask[128]) { if (changesMask[129]) { - data.WriteInt32(MaxHealthModifierFlatPos); + data.WriteInt32(MaxHealthModifierFlatNeg); } if (changesMask[130]) { - data.WriteUInt32(SilencedSchoolMask); + data.WriteInt32(MaxHealthModifierFlatPos); } if (changesMask[131]) { - data.WriteUInt32(CurrentAreaID); + data.WriteUInt32(SilencedSchoolMask); } if (changesMask[132]) { - data.WriteFloat(Field_31C); + data.WriteUInt32(CurrentAreaID); } if (changesMask[133]) { - data.WriteFloat(Field_320); + data.WriteFloat(Field_31C); } if (changesMask[134]) + { + data.WriteFloat(Field_320); + } + if (changesMask[135]) { data.WritePackedGuid(NameplateAttachToGUID); } data.WriteBits(AssistActionData.HasValue(), 1); data.FlushBits(); - if (changesMask[135]) + if (changesMask[136]) { if (AssistActionData.HasValue()) { @@ -2204,88 +2250,88 @@ namespace Game.Entities } } } - if (changesMask[136]) + if (changesMask[137]) { for (int i = 0; i < 10; ++i) { - if (changesMask[137 + i]) + if (changesMask[138 + i]) { data.WriteInt32(Power[i]); } - if (changesMask[147 + i]) + if (changesMask[148 + i]) { data.WriteUInt32(MaxPower[i]); } - if (changesMask[157 + i]) + if (changesMask[158 + i]) { data.WriteFloat(PowerRegenFlatModifier[i]); } - if (changesMask[167 + i]) + if (changesMask[168 + i]) { data.WriteFloat(PowerRegenInterruptedFlatModifier[i]); } } } - if (changesMask[177]) - { - for (int i = 0; i < 3; ++i) - { - if (changesMask[178 + i]) - { - VirtualItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); - } - } - } - if (changesMask[181]) + if (changesMask[182]) { for (int i = 0; i < 2; ++i) { - if (changesMask[182 + i]) + if (changesMask[183 + i]) { data.WriteUInt32(AttackRoundBaseTime[i]); } } } - if (changesMask[184]) + if (changesMask[185]) { - for (int i = 0; i < 4; ++i) + for (int i = 0; i < 5; ++i) { - if (changesMask[185 + i]) + if (changesMask[186 + i]) { data.WriteInt32(Stats[i]); } - if (changesMask[189 + i]) + if (changesMask[191 + i]) { data.WriteInt32(StatPosBuff[i]); } - if (changesMask[193 + i]) + if (changesMask[196 + i]) { data.WriteInt32(StatNegBuff[i]); } - if (changesMask[197 + i]) + if (changesMask[201 + i]) { data.WriteInt32(StatSupportBuff[i]); } } } - if (changesMask[201]) + if (changesMask[206]) { for (int i = 0; i < 7; ++i) { - if (changesMask[202 + i]) + if (changesMask[207 + i]) { data.WriteInt32(Resistances[i]); } - if (changesMask[209 + i]) + if (changesMask[214 + i]) { data.WriteInt32(BonusResistanceMods[i]); } - if (changesMask[216 + i]) + if (changesMask[221 + i]) { data.WriteInt32(ManaCostModifier[i]); } } } + if (changesMask[178]) + { + for (int i = 0; i < 3; ++i) + { + if (changesMask[179 + i]) + { + VirtualItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } data.FlushBits(); } @@ -2322,6 +2368,7 @@ namespace Game.Entities ClearChangesMask(ClassId); ClearChangesMask(PlayerClassId); ClearChangesMask(Sex); + ClearChangesMask(CreatureType); ClearChangesMask(DisplayPower); ClearChangesMask(OverrideDisplayPowerID); ClearChangesMask(Health); @@ -2344,7 +2391,7 @@ namespace Game.Entities ClearChangesMask(CombatReach); ClearChangesMask(DisplayScale); ClearChangesMask(CreatureFamily); - ClearChangesMask(CreatureType); + ClearChangesMask(OverrideCreatureType); ClearChangesMask(NativeDisplayID); ClearChangesMask(NativeXDisplayScale); ClearChangesMask(MountDisplayID); @@ -2735,24 +2782,26 @@ namespace Game.Entities } } - public class QuestLog() : HasChangesMask(30) + public class QuestLog() : HasChangesMask(31) { public UpdateField QuestID = new(0, 1); public UpdateField StateFlags = new(0, 2); public UpdateField EndTime = new(0, 3); public UpdateField ObjectiveFlags = new(0, 4); - public UpdateFieldArray ObjectiveProgress = new(24, 5, 6); + public UpdateField EnabledObjectivesMask = new(0, 5); // 12.0.7: new field + public UpdateFieldArray ObjectiveProgress = new(24, 6, 7); public void WriteCreate(WorldPacket data, Player owner, Player receiver) { data.WriteUInt32(QuestID); data.WriteUInt16(StateFlags); - data.WriteInt64(EndTime); - data.WriteUInt32(ObjectiveFlags); for (int i = 0; i < 24; ++i) { data.WriteUInt16(ObjectiveProgress[i]); } + data.WriteInt64(EndTime); + data.WriteUInt32(ObjectiveFlags); + data.WriteUInt32(EnabledObjectivesMask); } public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) @@ -2770,26 +2819,30 @@ namespace Game.Entities { if (changesMask[1]) { - data.WriteInt64(EndTime); + data.WriteUInt32(QuestID); } if (changesMask[2]) { - data.WriteUInt32(QuestID); + data.WriteUInt16(StateFlags); } if (changesMask[3]) { - data.WriteUInt32(StateFlags); + data.WriteInt64(EndTime); } if (changesMask[4]) { data.WriteUInt32(ObjectiveFlags); } + if (changesMask[5]) + { + data.WriteUInt32(EnabledObjectivesMask); + } } - if (changesMask[5]) + if (changesMask[6]) { for (int i = 0; i < 24; ++i) { - if (changesMask[6 + i]) + if (changesMask[7 + i]) { data.WriteUInt16(ObjectiveProgress[i]); } @@ -2803,6 +2856,7 @@ namespace Game.Entities ClearChangesMask(StateFlags); ClearChangesMask(EndTime); ClearChangesMask(ObjectiveFlags); + ClearChangesMask(EnabledObjectivesMask); ClearChangesMask(ObjectiveProgress); _changesMask.ResetAll(); } @@ -3176,7 +3230,37 @@ namespace Game.Entities } } - public class PlayerData() : HasChangesMask((int)EntityFragment.CGObject, TypeId.Player, 324) + public class NPCAsPlayerInfo // 12.0.7: new UpdateField structure + { + public int Field_0; + public int CharacterLoadoutID; + public int CreatureID; + public Vector3 LocWorldSpace; + public float FacingWorldSpace; + public ObjectGuid TransportGUID; + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WriteInt32(Field_0); + data.WriteInt32(CharacterLoadoutID); + data.WriteInt32(CreatureID); + data.WriteVector3(LocWorldSpace); + data.WriteFloat(FacingWorldSpace); + data.WritePackedGuid(TransportGUID); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + data.WriteInt32(Field_0); + data.WriteInt32(CharacterLoadoutID); + data.WriteInt32(CreatureID); + data.WriteVector3(LocWorldSpace); + data.WriteFloat(FacingWorldSpace); + data.WritePackedGuid(TransportGUID); + } + } + + public class PlayerData() : HasChangesMask((int)EntityFragment.CGObject, TypeId.Player, 326) { public UpdateField HasQuestSession = new(0, 1); public UpdateField HasLevelLink = new(0, 2); @@ -3202,35 +3286,37 @@ namespace Game.Entities public UpdateField ArenaFaction = new(0, 22); public UpdateField DuelTeam = new(0, 23); public UpdateField GuildTimeStamp = new(0, 24); - public UpdateField PlayerTitle = new(0, 25); - public UpdateField FakeInebriation = new(0, 26); - public UpdateField VirtualPlayerRealm = new(0, 27); - public UpdateField CurrentSpecID = new(0, 28); - public UpdateField CurrentCombatTraitConfigSubTreeID = new(0, 29); - public UpdateField TaxiMountAnimKitID = new(0, 30); - public UpdateField CurrentBattlePetBreedQuality = new(0, 31); - public UpdateField HonorLevel = new(32, 33); - public UpdateField LogoutTime = new(32, 34); - public UpdateFieldString Name = new(32, 35); - public UpdateField Field_1AC = new(32, 36); - public UpdateField Field_1B0 = new(32, 37); - public UpdateField CurrentBattlePetSpeciesID = new(32, 38); - public UpdateField CtrOptions = new(32, 39); - public UpdateField CovenantID = new(32, 40); - public UpdateField SoulbindID = new(32, 41); - public UpdateField DungeonScore = new(32, 42); - public UpdateField LeaverInfo = new(32, 43); - public UpdateField SpectateTarget = new(32, 44); - public UpdateField Field_200 = new(32, 45); - public OptionalUpdateField DeclinedNames = new(32, 46); - public UpdateField PersonalTabard = new(32, 47); - public UpdateFieldArray PartyType = new(2, 48, 49); - public UpdateFieldArray QuestLog = new(175, 51, 52); - public UpdateFieldArray VisibleItems = new(19, 227, 228); - public UpdateFieldArray AvgItemLevel = new(6, 247, 248); - public UpdateFieldArray ForcedReactions = new(32, 254, 255); - public UpdateFieldArray VisibleEquipableSpells = new(16, 287, 288); - public UpdateFieldArray Field_3120 = new(19, 304, 305); + public MapUpdateField QuestLogQuestIdToIndex = new(0, 25); // 12.0.7: new field + public UpdateField PlayerTitle = new(0, 26); + public UpdateField FakeInebriation = new(0, 27); + public UpdateField VirtualPlayerRealm = new(0, 28); + public UpdateField CurrentSpecID = new(0, 29); + public UpdateField CurrentCombatTraitConfigSubTreeID = new(0, 30); + public UpdateField TaxiMountAnimKitID = new(0, 31); + public UpdateField CurrentBattlePetBreedQuality = new(32, 33); + public UpdateField HonorLevel = new(32, 34); + public UpdateField LogoutTime = new(32, 35); + public UpdateFieldString Name = new(32, 36); + public UpdateField Field_1AC = new(32, 37); + public UpdateField Field_1B0 = new(32, 38); + public UpdateField CurrentBattlePetSpeciesID = new(32, 39); + public UpdateField CtrOptions = new(32, 40); + public UpdateField CovenantID = new(32, 41); + public UpdateField SoulbindID = new(32, 42); + public UpdateField DungeonScore = new(32, 43); + public UpdateField LeaverInfo = new(32, 44); + public UpdateField SpectateTarget = new(32, 45); + public UpdateField Field_200 = new(32, 46); + public OptionalUpdateField DeclinedNames = new(32, 47); + public UpdateField PersonalTabard = new(32, 48); + public UpdateField NpcAsPlayerInfo = new(32, 49); // 12.0.7: new field + public UpdateFieldArray PartyType = new(2, 50, 51); + public UpdateFieldArray QuestLog = new(175, 53, 54); + public UpdateFieldArray VisibleItems = new(19, 229, 230); + public UpdateFieldArray AvgItemLevel = new(6, 249, 250); + public UpdateFieldArray ForcedReactions = new(32, 256, 257); + public UpdateFieldArray VisibleEquipableSpells = new(16, 289, 290); + public UpdateFieldArray Field_3120 = new(19, 306, 307); public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) { @@ -3261,12 +3347,9 @@ namespace Game.Entities for (int i = 0; i < 175; ++i) QuestLog[i].WriteCreate(data, owner, receiver); + WriteMapFieldCreate(QuestLogQuestIdToIndex, data, owner, receiver); data.WriteInt32(QuestSessionQuestLog.Size()); } - for (int i = 0; i < 19; ++i) - { - VisibleItems[i].WriteCreate(data, owner, receiver); - } data.WriteUInt32(PlayerTitle); data.WriteInt32(FakeInebriation); data.WriteUInt32(VirtualPlayerRealm); @@ -3300,6 +3383,7 @@ namespace Game.Entities data.WriteUInt32(Field_3120[i]); } PersonalTabard.GetValue().WriteCreate(data, owner, receiver); + NpcAsPlayerInfo.GetValue().WriteCreate(data, owner, receiver); for (int i = 0; i < Customizations.Size(); ++i) { Customizations[i].WriteCreate(data, owner, receiver); @@ -3323,6 +3407,10 @@ namespace Game.Entities { data.WriteInt32(VisualItemReplacements[i]); } + for (int i = 0; i < 19; ++i) + { + VisibleItems[i].WriteCreate(data, owner, receiver); + } data.FlushBits(); data.WriteBits(Name.Size(), 6); if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.PartyMember)) @@ -3352,7 +3440,7 @@ namespace Game.Entities public void PlayerDataAppendAllowedFieldsMaskForFlag(UpdateMask allowedMaskForTarget, UpdateFieldFlag fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.PartyMember)) - allowedMaskForTarget.OR(new UpdateMask(ChangeMaskLength, [0x00000022u, 0xFFF80000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000007u, 0x00000000u, 0x00000000u, 0x00000000u])); + allowedMaskForTarget.OR(new UpdateMask(ChangeMaskLength, [0x02000022u, 0xFFE00000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x0000001Fu, 0x00000000u, 0x00000000u, 0x00000000u])); } public void AppendAllowedFieldsMaskForFlag(UpdateMask allowedMaskForTarget, UpdateFieldFlag fieldVisibilityFlags) @@ -3362,14 +3450,14 @@ namespace Game.Entities public void FilterDisallowedFieldsMaskForFlag(UpdateMask changesMask, UpdateFieldFlag fieldVisibilityFlags) { - UpdateMask allowedMaskForTarget = new(ChangeMaskLength, [0xFFFFFFDDu, 0x0007FFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFF8u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x0000000Fu]); + UpdateMask allowedMaskForTarget = new(ChangeMaskLength, [0xFDFFFFDDu, 0x001FFFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFE0u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x0000003Fu]); PlayerDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); changesMask.AND(allowedMaskForTarget); } public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) { - UpdateMask allowedMaskForTarget = new(ChangeMaskLength, [0xFFFFFFDDu, 0x0007FFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFF8u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x0000000Fu]); + UpdateMask allowedMaskForTarget = new(ChangeMaskLength, [0xFDFFFFDDu, 0x001FFFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFE0u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x0000003Fu]); PlayerDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } @@ -3567,98 +3655,106 @@ namespace Game.Entities } if (changesMask[25]) { - data.WriteUInt32(PlayerTitle); + WriteMapFieldUpdate(QuestLogQuestIdToIndex, data, ignoreNestedChangesMask, owner, receiver); } if (changesMask[26]) { - data.WriteInt32(FakeInebriation); + data.WriteUInt32(PlayerTitle); } if (changesMask[27]) { - data.WriteUInt32(VirtualPlayerRealm); + data.WriteInt32(FakeInebriation); } if (changesMask[28]) { - data.WriteUInt32(CurrentSpecID); + data.WriteUInt32(VirtualPlayerRealm); } if (changesMask[29]) { - data.WriteInt32(CurrentCombatTraitConfigSubTreeID); + data.WriteUInt32(CurrentSpecID); } if (changesMask[30]) { - data.WriteInt32(TaxiMountAnimKitID); + data.WriteInt32(CurrentCombatTraitConfigSubTreeID); } if (changesMask[31]) { - data.WriteUInt8(CurrentBattlePetBreedQuality); + data.WriteInt32(TaxiMountAnimKitID); } } if (changesMask[32]) { if (changesMask[33]) { - data.WriteUInt32(HonorLevel); + data.WriteUInt8(CurrentBattlePetBreedQuality); } if (changesMask[34]) { - data.WriteInt64(LogoutTime); + data.WriteUInt32(HonorLevel); } - if (changesMask[36]) + if (changesMask[35]) { - data.WriteInt32(Field_1AC); + data.WriteInt64(LogoutTime); } if (changesMask[37]) { - data.WriteInt32(Field_1B0); + data.WriteInt32(Field_1AC); } if (changesMask[38]) { - data.WriteInt32(CurrentBattlePetSpeciesID); + data.WriteInt32(Field_1B0); } if (changesMask[39]) { - ((CTROptions)CtrOptions).WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data.WriteInt32(CurrentBattlePetSpeciesID); } if (changesMask[40]) { - data.WriteInt32(CovenantID); + ((CTROptions)CtrOptions).WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } if (changesMask[41]) { - data.WriteInt32(SoulbindID); + data.WriteInt32(CovenantID); } - if (changesMask[44]) + if (changesMask[42]) { - data.WritePackedGuid(SpectateTarget); + data.WriteInt32(SoulbindID); } if (changesMask[45]) + { + data.WritePackedGuid(SpectateTarget); + } + if (changesMask[46]) { data.WriteInt32(Field_200); } - if (changesMask[47]) + if (changesMask[48]) { PersonalTabard.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[35]) + if (changesMask[49]) + { + NpcAsPlayerInfo.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + if (changesMask[36]) { data.WriteBits(Name.Size(), 6); } data.WriteBits(DeclinedNames.HasValue(), 1); data.FlushBits(); - if (changesMask[42]) + if (changesMask[43]) { DungeonScore.GetValue().Write(data); } - if (changesMask[35]) + if (changesMask[36]) { data.WriteString(Name); } - if (changesMask[43]) + if (changesMask[44]) { LeaverInfo.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[46]) + if (changesMask[47]) { if (DeclinedNames.HasValue()) { @@ -3666,21 +3762,21 @@ namespace Game.Entities } } } - if (changesMask[48]) + if (changesMask[50]) { for (int i = 0; i < 2; ++i) { - if (changesMask[49 + i]) + if (changesMask[51 + i]) { data.WriteUInt8(PartyType[i]); } } } - if (changesMask[51]) + if (changesMask[53]) { for (int i = 0; i < 175; ++i) { - if (changesMask[52 + i]) + if (changesMask[54 + i]) { if (noQuestLogChangesMask) QuestLog[i].WriteCreate(data, owner, receiver); @@ -3689,51 +3785,51 @@ namespace Game.Entities } } } - if (changesMask[227]) - { - for (int i = 0; i < 19; ++i) - { - if (changesMask[228 + i]) - { - VisibleItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); - } - } - } - if (changesMask[247]) + if (changesMask[249]) { for (int i = 0; i < 6; ++i) { - if (changesMask[248 + i]) + if (changesMask[250 + i]) { data.WriteFloat(AvgItemLevel[i]); } } } - if (changesMask[254]) + if (changesMask[256]) { for (int i = 0; i < 32; ++i) { - if (changesMask[255 + i]) + if (changesMask[257 + i]) { ForcedReactions[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[304]) + if (changesMask[306]) { for (int i = 0; i < 19; ++i) { - if (changesMask[305 + i]) + if (changesMask[307 + i]) { data.WriteUInt32(Field_3120[i]); } } } - if (changesMask[287]) + if (changesMask[229]) + { + for (int i = 0; i < 19; ++i) + { + if (changesMask[230 + i]) + { + VisibleItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[289]) { for (int i = 0; i < 16; ++i) { - if (changesMask[288 + i]) + if (changesMask[290 + i]) { VisibleEquipableSpells[i].Write(data); } @@ -3768,6 +3864,7 @@ namespace Game.Entities ClearChangesMask(ArenaFaction); ClearChangesMask(DuelTeam); ClearChangesMask(GuildTimeStamp); + ClearChangesMask(QuestLogQuestIdToIndex); ClearChangesMask(PlayerTitle); ClearChangesMask(FakeInebriation); ClearChangesMask(VirtualPlayerRealm); @@ -3790,6 +3887,7 @@ namespace Game.Entities ClearChangesMask(Field_200); ClearChangesMask(DeclinedNames); ClearChangesMask(PersonalTabard); + ClearChangesMask(NpcAsPlayerInfo); ClearChangesMask(PartyType); ClearChangesMask(QuestLog); ClearChangesMask(VisibleItems); @@ -3803,19 +3901,19 @@ namespace Game.Entities bool IsQuestLogChangesMaskSkipped() { return false; } // bandwidth savings aren't worth the cpu time } - public class SkillInfo() : HasChangesMask(1793) + public class SkillInfo() : HasChangesMask(2101) { - public UpdateFieldArray SkillLineID = new(256, 0, 1); - public UpdateFieldArray SkillStep = new(256, 0, 257); - public UpdateFieldArray SkillRank = new(256, 0, 513); - public UpdateFieldArray SkillStartingRank = new(256, 0, 769); - public UpdateFieldArray SkillMaxRank = new(256, 0, 1025); - public UpdateFieldArray SkillTempBonus = new(256, 0, 1281); - public UpdateFieldArray SkillPermBonus = new(256, 0, 1537); + public UpdateFieldArray SkillLineID = new(300, 0, 1); + public UpdateFieldArray SkillStep = new(300, 0, 301); + public UpdateFieldArray SkillRank = new(300, 0, 601); + public UpdateFieldArray SkillStartingRank = new(300, 0, 901); + public UpdateFieldArray SkillMaxRank = new(300, 0, 1201); + public UpdateFieldArray SkillTempBonus = new(300, 0, 1501); + public UpdateFieldArray SkillPermBonus = new(300, 0, 1801); public void WriteCreate(WorldPacket data, Player owner, Player receiver) { - for (int i = 0; i < 256; ++i) + for (int i = 0; i < 300; ++i) { data.WriteUInt16(SkillLineID[i]); data.WriteUInt16(SkillStep[i]); @@ -3833,43 +3931,43 @@ namespace Game.Entities if (ignoreChangesMask) changesMask.SetAll(); - for (uint i = 0; i < 1; ++i) + for (uint i = 0; i < 2; ++i) data.WriteUInt32(changesMask.GetBlocksMask(i)); - data.WriteBits(changesMask.GetBlocksMask(1), 25); - for (uint i = 0; i < 57; ++i) + data.WriteBits(changesMask.GetBlocksMask(2), 2); + for (uint i = 0; i < 66; ++i) if (changesMask.GetBlock(i) != 0) data.WriteBits(changesMask.GetBlock(i), 32); data.FlushBits(); if (changesMask[0]) { - for (int i = 0; i < 256; ++i) + for (int i = 0; i < 300; ++i) { if (changesMask[1 + i]) { data.WriteUInt16(SkillLineID[i]); } - if (changesMask[257 + i]) + if (changesMask[301 + i]) { data.WriteUInt16(SkillStep[i]); } - if (changesMask[513 + i]) + if (changesMask[601 + i]) { data.WriteUInt16(SkillRank[i]); } - if (changesMask[769 + i]) + if (changesMask[901 + i]) { data.WriteUInt16(SkillStartingRank[i]); } - if (changesMask[1025 + i]) + if (changesMask[1201 + i]) { data.WriteUInt16(SkillMaxRank[i]); } - if (changesMask[1281 + i]) + if (changesMask[1501 + i]) { data.WriteUInt16(SkillTempBonus[i]); } - if (changesMask[1537 + i]) + if (changesMask[1801 + i]) { data.WriteUInt16(SkillPermBonus[i]); } @@ -3942,13 +4040,13 @@ namespace Game.Entities } } - public class BitVectors() : HasChangesMask(14) + public class BitVectors() : HasChangesMask(15) { - public UpdateFieldArray Values = new(13, 0, 1); + public UpdateFieldArray Values = new(14, 0, 1); public void WriteCreate(WorldPacket data, Player owner, Player receiver) { - for (int i = 0; i < 13; ++i) + for (int i = 0; i < 14; ++i) Values[i].WriteCreate(data, owner, receiver); } @@ -3965,7 +4063,7 @@ namespace Game.Entities data.FlushBits(); if (changesMask[0]) { - for (int i = 0; i < 13; ++i) + for (int i = 0; i < 14; ++i) { if (changesMask[1 + i]) { @@ -4877,24 +4975,64 @@ namespace Game.Entities } } - public class CraftingOrderItem() : HasChangesMask(7) + public class CraftingReagentBase // 12.0.7: new UpdateField structure { - public UpdateField Field_0 = new(-1, 0); - public UpdateField ItemGUID = new(-1, 1); - public UpdateField OwnerGUID = new(-1, 2); - public UpdateField ItemID = new(-1, 3); - public UpdateField Quantity = new(-1, 4); - public UpdateField ReagentQuality = new(-1, 5); - public OptionalUpdateField DataSlotIndex = new(-1, 6); + public int? ItemID; + public int? CurrencyID; public void WriteCreate(WorldPacket data, Player owner, Player receiver) { - data.WriteUInt64(Field_0); + data.WriteBits(ItemID.HasValue, 1); + data.WriteBits(CurrencyID.HasValue, 1); + data.FlushBits(); + if (ItemID.HasValue) + { + data.WriteInt32(ItemID.Value); + } + if (CurrencyID.HasValue) + { + data.WriteInt32(CurrencyID.Value); + } + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + data.WriteBits(ItemID.HasValue, 1); + data.WriteBits(CurrencyID.HasValue, 1); + data.FlushBits(); + if (ItemID.HasValue) + { + data.WriteInt32(ItemID.Value); + } + if (CurrencyID.HasValue) + { + data.WriteInt32(CurrencyID.Value); + } + } + } + + public class CraftingOrderItem() : HasChangesMask(12) + { + public UpdateField OrderItemID = new(0, 1); // 12.0.7: renamed from Field_0 + public UpdateField OrderItemType = new(0, 2); // 12.0.7: new field + public UpdateField ItemGUID = new(0, 3); + public UpdateField OwnerGUID = new(4, 5); + public UpdateField Reagent = new(4, 6); // 12.0.7: new field (replaces scalar ItemID) + public UpdateField Quantity = new(4, 7); + public UpdateField ReagentQuality = new(8, 9); + public OptionalUpdateField DataSlotIndex = new(8, 10); + public UpdateField Flags = new(8, 11); // 12.0.7: new field + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WriteUInt64(OrderItemID); + data.WriteInt32(OrderItemType); data.WritePackedGuid(ItemGUID); data.WritePackedGuid(OwnerGUID); - data.WriteInt32(ItemID); data.WriteUInt32(Quantity); data.WriteInt32(ReagentQuality); + data.WriteUInt32(Flags); + Reagent.GetValue().WriteCreate(data, owner, receiver); data.WriteBits(DataSlotIndex.HasValue(), 1); data.FlushBits(); if (DataSlotIndex.HasValue()) @@ -4909,53 +5047,78 @@ namespace Game.Entities if (ignoreChangesMask) changesMask.SetAll(); - data.WriteBits(changesMask.GetBlock(0), 7); + data.WriteBits(changesMask.GetBlock(0), 12); data.FlushBits(); if (changesMask[0]) { - data.WriteUInt64(Field_0); - } - if (changesMask[1]) - { - data.WritePackedGuid(ItemGUID); - } - if (changesMask[2]) - { - data.WritePackedGuid(OwnerGUID); - } - if (changesMask[3]) - { - data.WriteInt32(ItemID); + if (changesMask[1]) + { + data.WriteUInt64(OrderItemID); + } + if (changesMask[2]) + { + data.WriteInt32(OrderItemType); + } + if (changesMask[3]) + { + data.WritePackedGuid(ItemGUID); + } } if (changesMask[4]) { - data.WriteUInt32(Quantity); - } - if (changesMask[5]) - { - data.WriteInt32(ReagentQuality); - } - data.WriteBits(DataSlotIndex.HasValue(), 1); - data.FlushBits(); - if (changesMask[6]) - { - if (DataSlotIndex.HasValue()) + if (changesMask[5]) { - data.WriteUInt8(DataSlotIndex); + data.WritePackedGuid(OwnerGUID); + } + if (changesMask[7]) + { + data.WriteUInt32(Quantity); + } + } + if (changesMask[8]) + { + if (changesMask[9]) + { + data.WriteInt32(ReagentQuality); + } + if (changesMask[11]) + { + data.WriteUInt32(Flags); + } + } + if (changesMask[4]) + { + if (changesMask[6]) + { + Reagent.GetValue().WriteUpdate(data, ignoreChangesMask, owner, receiver); + } + } + if (changesMask[8]) + { + data.WriteBits(DataSlotIndex.HasValue(), 1); + data.FlushBits(); + if (changesMask[10]) + { + if (DataSlotIndex.HasValue()) + { + data.WriteUInt8(DataSlotIndex); + } } } } public override void ClearChangesMask() { - ClearChangesMask(Field_0); + ClearChangesMask(OrderItemID); + ClearChangesMask(OrderItemType); ClearChangesMask(ItemGUID); ClearChangesMask(OwnerGUID); - ClearChangesMask(ItemID); + ClearChangesMask(Reagent); ClearChangesMask(Quantity); ClearChangesMask(ReagentQuality); ClearChangesMask(DataSlotIndex); + ClearChangesMask(Flags); _changesMask.ResetAll(); } } @@ -5824,7 +5987,7 @@ namespace Game.Entities } } - public class DelveData : IEquatable + public class DelveData : IEquatable, IsUpdateFieldStructureTag { public List Owners = new(); public int Field_0; @@ -5953,7 +6116,438 @@ namespace Game.Entities } } - public class ActivePlayerData() : HasChangesMask((int)EntityFragment.CGObject, TypeId.ActivePlayer, 385) + public class SpellPctPVPModByLabel : IEquatable, IsUpdateFieldStructureTag + { + public int PvpModIndex; + public float ModifierValue; + public int LabelID; + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WriteInt32(PvpModIndex); + data.WriteFloat(ModifierValue); + data.WriteInt32(LabelID); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + data.WriteInt32(PvpModIndex); + data.WriteFloat(ModifierValue); + data.WriteInt32(LabelID); + } + + public bool Equals(SpellPctPVPModByLabel right) + { + return PvpModIndex == right.PvpModIndex + && ModifierValue == right.ModifierValue + && LabelID == right.LabelID; + } + } + + public class SpellFlatPVPModByLabel : IEquatable, IsUpdateFieldStructureTag + { + public int PvpModIndex; + public int ModifierValue; + public int LabelID; + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WriteInt32(PvpModIndex); + data.WriteInt32(ModifierValue); + data.WriteInt32(LabelID); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + data.WriteInt32(PvpModIndex); + data.WriteInt32(ModifierValue); + data.WriteInt32(LabelID); + } + + public bool Equals(SpellFlatPVPModByLabel right) + { + return PvpModIndex == right.PvpModIndex + && ModifierValue == right.ModifierValue + && LabelID == right.LabelID; + } + } + + public class LevelLinkInfo() : HasChangesMask(3), IsUpdateFieldStructureTag + { + public UpdateField TargetGUID = new(0, 1); + public UpdateField Level = new(0, 2); + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WritePackedGuid(TargetGUID); + data.WriteInt32(Level); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + UpdateMask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 3); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data.WritePackedGuid(TargetGUID); + } + if (changesMask[2]) + { + data.WriteInt32(Level); + } + } + } + + public override void ClearChangesMask() + { + ClearChangesMask(TargetGUID); + ClearChangesMask(Level); + _changesMask.ResetAll(); + } + } + + public class TransmogOutfitSituationInfo() : HasChangesMask(4), IsUpdateFieldStructureTag + { + public UpdateField SituationID = new(-1, 0); + public UpdateField SpecID = new(-1, 1); + public UpdateField LoadoutID = new(-1, 2); + public UpdateField EquipmentSetID = new(-1, 3); + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WriteUInt32(SituationID); + data.WriteUInt32(SpecID); + data.WriteUInt32(LoadoutID); + data.WriteUInt32(EquipmentSetID); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + UpdateMask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 4); + + data.FlushBits(); + if (changesMask[0]) + { + data.WriteUInt32(SituationID); + } + if (changesMask[1]) + { + data.WriteUInt32(SpecID); + } + if (changesMask[2]) + { + data.WriteUInt32(LoadoutID); + } + if (changesMask[3]) + { + data.WriteUInt32(EquipmentSetID); + } + } + + public override void ClearChangesMask() + { + ClearChangesMask(SituationID); + ClearChangesMask(SpecID); + ClearChangesMask(LoadoutID); + ClearChangesMask(EquipmentSetID); + _changesMask.ResetAll(); + } + } + + public class TransmogOutfitSlotData() : HasChangesMask(11), IsUpdateFieldStructureTag + { + public UpdateField Slot = new(0, 1); + public UpdateField SlotOption = new(0, 2); + public UpdateField SheatheCategory = new(0, 3); + public UpdateField ItemModifiedAppearanceID = new(4, 5); + public UpdateField AppearanceDisplayType = new(4, 6); + public UpdateField SpellItemEnchantmentID = new(4, 7); + public UpdateField IllusionDisplayType = new(8, 9); + public UpdateField Flags = new(8, 10); + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WriteInt8(Slot); + data.WriteUInt8(SlotOption); + data.WriteUInt8(SheatheCategory); + data.WriteUInt32(ItemModifiedAppearanceID); + data.WriteUInt8(AppearanceDisplayType); + data.WriteUInt32(SpellItemEnchantmentID); + data.WriteUInt8(IllusionDisplayType); + data.WriteUInt32(Flags); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + UpdateMask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 11); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data.WriteInt8(Slot); + } + if (changesMask[2]) + { + data.WriteUInt8(SlotOption); + } + if (changesMask[3]) + { + data.WriteUInt8(SheatheCategory); + } + } + if (changesMask[4]) + { + if (changesMask[5]) + { + data.WriteUInt32(ItemModifiedAppearanceID); + } + if (changesMask[6]) + { + data.WriteUInt8(AppearanceDisplayType); + } + if (changesMask[7]) + { + data.WriteUInt32(SpellItemEnchantmentID); + } + } + if (changesMask[8]) + { + if (changesMask[9]) + { + data.WriteUInt8(IllusionDisplayType); + } + if (changesMask[10]) + { + data.WriteUInt32(Flags); + } + } + } + + public override void ClearChangesMask() + { + ClearChangesMask(Slot); + ClearChangesMask(SlotOption); + ClearChangesMask(SheatheCategory); + ClearChangesMask(ItemModifiedAppearanceID); + ClearChangesMask(AppearanceDisplayType); + ClearChangesMask(SpellItemEnchantmentID); + ClearChangesMask(IllusionDisplayType); + ClearChangesMask(Flags); + _changesMask.ResetAll(); + } + } + + public class TransmogOutfitDataInfo() : HasChangesMask(4), IsUpdateFieldStructureTag + { + public UpdateField SituationsEnabled = new(-1, 0); + public UpdateField SetType = new(-1, 1); + public UpdateFieldString Name = new(-1, 2); + public UpdateField Icon = new(-1, 3); + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WriteUInt8(SetType); + data.WriteUInt32(Icon); + data.WriteBits(Name.Size(), 8); + data.WriteBit(SituationsEnabled); + data.FlushBits(); + data.WriteString(Name); + data.FlushBits(); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + UpdateMask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 4); + + if (changesMask[0]) + { + data.WriteBit(SituationsEnabled); + } + data.FlushBits(); + if (changesMask[1]) + { + data.WriteUInt8(SetType); + } + if (changesMask[3]) + { + data.WriteUInt32(Icon); + } + if (changesMask[2]) + { + data.WriteBits(Name.Size(), 8); + data.WriteString(Name); + } + data.FlushBits(); + } + + public override void ClearChangesMask() + { + ClearChangesMask(SituationsEnabled); + ClearChangesMask(SetType); + ClearChangesMask(Name); + ClearChangesMask(Icon); + _changesMask.ResetAll(); + } + } + + public class TransmogOutfitData() : HasChangesMask(5), IsUpdateFieldStructureTag + { + public DynamicUpdateField Situations = new(-1, 0); + public DynamicUpdateField Slots = new(-1, 1); + public UpdateField Id = new(-1, 2); + public UpdateField OutfitInfo = new(-1, 3); + public UpdateField Flags = new(-1, 4); + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WriteUInt32(Id); + data.WriteInt32(Situations.Size()); + data.WriteInt32(Slots.Size()); + data.WriteUInt32(Flags); + for (int i = 0; i < Situations.Size(); ++i) + { + Situations[i].WriteCreate(data, owner, receiver); + } + for (int i = 0; i < Slots.Size(); ++i) + { + Slots[i].WriteCreate(data, owner, receiver); + } + OutfitInfo.GetValue().WriteCreate(data, owner, receiver); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + UpdateMask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 5); + + if (changesMask[0]) + { + if (!ignoreChangesMask) + Situations.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(Situations.Size(), data); + } + if (changesMask[1]) + { + if (!ignoreChangesMask) + Slots.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(Slots.Size(), data); + } + data.FlushBits(); + if (changesMask[0]) + { + for (int i = 0; i < Situations.Size(); ++i) + { + if (Situations.HasChanged(i) || ignoreChangesMask) + { + Situations[i].WriteUpdate(data, ignoreChangesMask, owner, receiver); + } + } + } + if (changesMask[1]) + { + for (int i = 0; i < Slots.Size(); ++i) + { + if (Slots.HasChanged(i) || ignoreChangesMask) + { + Slots[i].WriteUpdate(data, ignoreChangesMask, owner, receiver); + } + } + } + if (changesMask[2]) + { + data.WriteUInt32(Id); + } + if (changesMask[4]) + { + data.WriteUInt32(Flags); + } + if (changesMask[3]) + { + OutfitInfo.GetValue().WriteUpdate(data, ignoreChangesMask, owner, receiver); + } + } + + public override void ClearChangesMask() + { + ClearChangesMask(Situations); + ClearChangesMask(Slots); + ClearChangesMask(Id); + ClearChangesMask(OutfitInfo); + ClearChangesMask(Flags); + _changesMask.ResetAll(); + } + } + + public class TransmogOutfitMetadata : IEquatable, IsUpdateFieldStructureTag + { + public bool Locked; + public byte SituationTrigger; + public uint TransmogOutfitID; + public byte StampedOptionMainHand; + public byte StampedOptionOffHand; + public float CostMod; + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WriteUInt8(SituationTrigger); + data.WriteUInt32(TransmogOutfitID); + data.WriteUInt8(StampedOptionMainHand); + data.WriteUInt8(StampedOptionOffHand); + data.WriteFloat(CostMod); + data.WriteBit(Locked); + data.FlushBits(); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + data.WriteUInt8(SituationTrigger); + data.WriteUInt32(TransmogOutfitID); + data.WriteUInt8(StampedOptionMainHand); + data.WriteUInt8(StampedOptionOffHand); + data.WriteFloat(CostMod); + data.WriteBit(Locked); + data.FlushBits(); + data.FlushBits(); + } + + public bool Equals(TransmogOutfitMetadata right) + { + return Locked == right.Locked + && SituationTrigger == right.SituationTrigger + && TransmogOutfitID == right.TransmogOutfitID + && StampedOptionMainHand == right.StampedOptionMainHand + && StampedOptionOffHand == right.StampedOptionOffHand + && CostMod == right.CostMod; + } + } + + public class ActivePlayerData() : HasChangesMask((int)EntityFragment.CGObject, TypeId.ActivePlayer, 397) { public static int QuestCompletedBitsPerBlock = sizeof(ulong) * 8; @@ -5963,9 +6557,9 @@ namespace Game.Entities public UpdateField SortBagsRightToLeft = new(0, 4); public UpdateField InsertItemsLeftToRight = new(0, 5); public UpdateField HasPerksProgramPendingReward = new(0, 6); - public UpdateFieldArray> ResearchSites = new(1, 42, 43); - public UpdateFieldArray> ResearchSiteProgress = new(1, 44, 45); - public UpdateFieldArray> Research = new(1, 46, 47); + public UpdateFieldArray> ResearchSites = new(1, 50, 51); + public UpdateFieldArray> ResearchSiteProgress = new(1, 52, 53); + public UpdateFieldArray> Research = new(1, 54, 55); public DynamicUpdateField KnownTitles = new(0, 7); public DynamicUpdateField CharacterDataElements = new(0, 8); public DynamicUpdateField AccountDataElements = new(0, 9); @@ -5982,138 +6576,150 @@ namespace Game.Entities public DynamicUpdateField RuneforgePowers = new(0, 21); public DynamicUpdateField TransmogIllusions = new(0, 22); public DynamicUpdateField WarbandScenes = new(0, 23); - public DynamicUpdateField SpellPctModByLabel = new(0, 25); - public DynamicUpdateField SpellFlatModByLabel = new(0, 26); - public DynamicUpdateField MawPowers = new(0, 27); - public DynamicUpdateField MultiFloorExploration = new(0, 28); - public DynamicUpdateField RecipeProgression = new(0, 29); - public DynamicUpdateField ReplayedQuests = new(0, 30); - public DynamicUpdateField TaskQuests = new(0, 31); - public DynamicUpdateField DisabledSpells = new(32, 33); - public DynamicUpdateField PersonalCraftingOrderCounts = new(32, 35); - public DynamicUpdateField NpcCraftingOrders = new(32, 36); - public DynamicUpdateField CategoryCooldownMods = new(32, 37); - public DynamicUpdateField WeeklySpellUses = new(32, 38); - public DynamicUpdateField TrackedCollectableSources = new(32, 39); + public DynamicUpdateField HouseRooms = new(0, 24); + public DynamicUpdateField HouseExteriorComponents = new(0, 25); + public DynamicUpdateField HouseThemes = new(0, 26); + public DynamicUpdateField HouseRoomComponentTextures = new(0, 27); + public DynamicUpdateField HouseTypes = new(0, 28); + public DynamicUpdateField UnlockedTransmogOutfits = new(0, 29); + public DynamicUpdateField SpellPctModByLabel = new(0, 31); + public DynamicUpdateField SpellFlatModByLabel = new(32, 33); + public DynamicUpdateField SpellPctModPVPByLabel = new(32, 34); + public DynamicUpdateField SpellFlatModPVPByLabel = new(32, 35); + public DynamicUpdateField MawPowers = new(32, 36); + public DynamicUpdateField MultiFloorExploration = new(32, 37); + public DynamicUpdateField RecipeProgression = new(32, 38); + public DynamicUpdateField ReplayedQuests = new(32, 39); + public DynamicUpdateField TaskQuests = new(32, 40); + public DynamicUpdateField DisabledSpells = new(32, 41); + public DynamicUpdateField PersonalCraftingOrderCounts = new(32, 43); + public DynamicUpdateField NpcCraftingOrders = new(32, 44); + public DynamicUpdateField CategoryCooldownMods = new(32, 45); + public DynamicUpdateField WeeklySpellUses = new(32, 46); + public DynamicUpdateField TrackedCollectableSources = new(32, 47); public DynamicUpdateField PvpInfo = new(0, 10); - public DynamicUpdateField CharacterRestrictions = new(0, 24); - public DynamicUpdateField CraftingOrders = new(32, 34); - public DynamicUpdateField CharacterBankTabSettings = new(32, 40); - public DynamicUpdateField AccountBankTabSettings = new(32, 41); - public UpdateField FarsightObject = new(32, 48); - public UpdateField SummonedBattlePetGUID = new(32, 49); - public UpdateField Coinage = new(32, 50); - public UpdateField AccountBankCoinage = new(32, 51); - public UpdateField XP = new(32, 52); - public UpdateField NextLevelXP = new(32, 53); - public UpdateField TrialXP = new(32, 54); - public UpdateField Skill = new(32, 55); - public UpdateField CharacterPoints = new(32, 56); - public UpdateField MaxTalentTiers = new(32, 57); - public UpdateField TrackCreatureMask = new(32, 58); - public UpdateField MainhandExpertise = new(32, 59); - public UpdateField OffhandExpertise = new(32, 60); - public UpdateField RangedExpertise = new(32, 61); - public UpdateField CombatRatingExpertise = new(32, 62); - public UpdateField BlockPercentage = new(32, 63); - public UpdateField DodgePercentage = new(32, 64); - public UpdateField DodgePercentageFromAttribute = new(32, 65); - public UpdateField ParryPercentage = new(32, 66); - public UpdateField ParryPercentageFromAttribute = new(32, 67); - public UpdateField CritPercentage = new(32, 68); - public UpdateField RangedCritPercentage = new(32, 69); - public UpdateField OffhandCritPercentage = new(70, 71); - public UpdateField SpellCritPercentage = new(70, 72); - public UpdateField ShieldBlock = new(70, 73); - public UpdateField ShieldBlockCritPercentage = new(70, 74); - public UpdateField Mastery = new(70, 75); - public UpdateField Speed = new(70, 76); - public UpdateField Avoidance = new(70, 77); - public UpdateField Sturdiness = new(70, 78); - public UpdateField Versatility = new(70, 79); - public UpdateField VersatilityBonus = new(70, 80); - public UpdateField PvpPowerDamage = new(70, 81); - public UpdateField PvpPowerHealing = new(70, 82); - public UpdateField BitVectors = new(70, 83); - public UpdateField ModHealingDonePos = new(70, 84); - public UpdateField ModHealingPercent = new(70, 85); - public UpdateField ModPeriodicHealingDonePercent = new(70, 86); - public UpdateField ModSpellPowerPercent = new(70, 87); - public UpdateField ModResiliencePercent = new(70, 88); - public UpdateField OverrideSpellPowerByAPPercent = new(70, 89); - public UpdateField OverrideAPBySpellPowerPercent = new(70, 90); - public UpdateField ModTargetResistance = new(70, 91); - public UpdateField ModTargetPhysicalResistance = new(70, 92); - public UpdateField LocalFlags = new(70, 93); - public UpdateField GrantableLevels = new(70, 94); - public UpdateField MultiActionBars = new(70, 95); - public UpdateField LifetimeMaxRank = new(70, 96); - public UpdateField NumRespecs = new(70, 97); - public UpdateField PvpMedals = new(70, 98); - public UpdateField TodayHonorableKills = new(70, 99); - public UpdateField YesterdayHonorableKills = new(70, 100); - public UpdateField LifetimeHonorableKills = new(70, 101); - public UpdateField WatchedFactionIndex = new(102, 103); - public UpdateField MaxLevel = new(102, 104); - public UpdateField ScalingPlayerLevelDelta = new(102, 105); - public UpdateField MaxCreatureScalingLevel = new(102, 106); - public UpdateField PetSpellPower = new(102, 107); - public UpdateField UiHitModifier = new(102, 108); - public UpdateField UiSpellHitModifier = new(102, 109); - public UpdateField HomeRealmTimeOffset = new(102, 110); - public UpdateField ModPetHaste = new(102, 111); - public UpdateField JailersTowerLevelMax = new(102, 112); - public UpdateField JailersTowerLevel = new(102, 113); - public UpdateField LocalRegenFlags = new(102, 114); - public UpdateField AuraVision = new(102, 115); - public UpdateField NumBackpackSlots = new(102, 116); - public UpdateField OverrideSpellsID = new(102, 117); - public UpdateField LootSpecID = new(102, 118); - public UpdateField OverrideZonePVPType = new(102, 119); - public UpdateField Honor = new(102, 120); - public UpdateField HonorNextLevel = new(102, 121); - public UpdateField PerksProgramCurrency = new(102, 122); - public UpdateField NumBankSlots = new(102, 123); - public UpdateField NumCharacterBankTabs = new(102, 124); - public UpdateField NumAccountBankTabs = new(102, 125); - public UpdateField ResearchHistory = new(102, 126); - public UpdateField FrozenPerksVendorItem = new(102, 127); - public UpdateField Field_1410 = new(102, 129); - public OptionalUpdateField QuestSession = new(102, 128); - public UpdateField UiChromieTimeExpansionID = new(102, 130); - public UpdateField TimerunningSeasonID = new(102, 131); - public UpdateField TransportServerTime = new(102, 132); - public UpdateField WeeklyRewardsPeriodSinceOrigin = new(102, 133); // week count since Cfg_RegionsEntry::ChallengeOrigin - public UpdateField DEBUGSoulbindConduitRank = new(134, 135); - public UpdateField DungeonScore = new(134, 136); - public MapUpdateField TraitConfigs = new(134, 137); - public UpdateField ActiveCombatTraitConfigID = new(134, 138); - public UpdateField ItemUpgradeHighOnehandWeaponItemID = new(134, 139); - public UpdateField ItemUpgradeHighFingerItemID = new(134, 140); - public UpdateField ItemUpgradeHighFingerWatermark = new(134, 141); - public UpdateField ItemUpgradeHighTrinketItemID = new(134, 142); - public UpdateField ItemUpgradeHighTrinketWatermark = new(134, 143); - public UpdateField LootHistoryInstanceID = new(134, 144); - public OptionalUpdateField PetStable = new(134, 145); - public UpdateField RequiredMountCapabilityFlags = new(134, 146); - public OptionalUpdateField WalkInData = new(134, 147); - public OptionalUpdateField DelveData = new(134, 148); - public OptionalUpdateField ChallengeModeData = new(134, 149); - public UpdateFieldArray InvSlots = new(105, 150, 151); - public UpdateFieldArray RestInfo = new(2, 256, 257); - public UpdateFieldArray ModDamageDonePos = new(7, 259, 260); - public UpdateFieldArray ModDamageDoneNeg = new(7, 259, 267); - public UpdateFieldArray ModDamageDonePercent = new(7, 259, 274); - public UpdateFieldArray ModHealingDonePercent = new(7, 259, 281); - public UpdateFieldArray WeaponDmgMultipliers = new(3, 288, 289); - public UpdateFieldArray WeaponAtkSpeedMultipliers = new(3, 288, 292); - public UpdateFieldArray BuybackPrice = new(12, 295, 296); - public UpdateFieldArray BuybackTimestamp = new(12, 295, 308); - public UpdateFieldArray CombatRatings = new(32, 320, 321); - public UpdateFieldArray NoReagentCostMask = new(4, 353, 354); - public UpdateFieldArray ProfessionSkillLine = new(2, 358, 359); - public UpdateFieldArray BagSlotFlags = new(5, 361, 362); - public UpdateFieldArray ItemUpgradeHighWatermark = new(17, 367, 368); + public DynamicUpdateField CharacterRestrictions = new(0, 30); + public DynamicUpdateField CraftingOrders = new(32, 42); + public DynamicUpdateField CharacterBankTabSettings = new(32, 48); + public DynamicUpdateField AccountBankTabSettings = new(32, 49); + public UpdateField FarsightObject = new(32, 56); + public UpdateField SummonedBattlePetGUID = new(32, 57); + public UpdateField Coinage = new(32, 58); + public UpdateField AccountBankCoinage = new(32, 59); + public UpdateField XP = new(32, 60); + public UpdateField NextLevelXP = new(32, 61); + public UpdateField TrialXP = new(32, 62); + public UpdateField Skill = new(32, 63); + public UpdateField CharacterPoints = new(32, 64); + public UpdateField MaxTalentTiers = new(32, 65); + public UpdateField TrackCreatureMask = new(32, 66); + public UpdateField MainhandExpertise = new(32, 67); + public UpdateField OffhandExpertise = new(32, 68); + public UpdateField RangedExpertise = new(32, 69); + public UpdateField CombatRatingExpertise = new(70, 71); + public UpdateField BlockPercentage = new(70, 72); + public UpdateField DodgePercentage = new(70, 73); + public UpdateField DodgePercentageFromAttribute = new(70, 74); + public UpdateField ParryPercentage = new(70, 75); + public UpdateField ParryPercentageFromAttribute = new(70, 76); + public UpdateField CritPercentage = new(70, 77); + public UpdateField RangedCritPercentage = new(70, 78); + public UpdateField OffhandCritPercentage = new(70, 79); + public UpdateField SpellCritPercentage = new(70, 80); + public UpdateField ShieldBlock = new(70, 81); + public UpdateField ShieldBlockCritPercentage = new(70, 82); + public UpdateField Mastery = new(70, 83); + public UpdateField Speed = new(70, 84); + public UpdateField Avoidance = new(70, 85); + public UpdateField Sturdiness = new(70, 86); + public UpdateField Versatility = new(70, 87); + public UpdateField VersatilityBonus = new(70, 88); + public UpdateField PvpPowerDamage = new(70, 89); + public UpdateField PvpPowerHealing = new(70, 90); + public UpdateField BitVectors = new(70, 91); + public UpdateField ModHealingDonePos = new(70, 92); + public UpdateField ModHealingPercent = new(70, 93); + public UpdateField ModPeriodicHealingDonePercent = new(70, 94); + public UpdateField ModSpellPowerPercent = new(70, 95); + public UpdateField ModResiliencePercent = new(70, 96); + public UpdateField OverrideSpellPowerByAPPercent = new(70, 97); + public UpdateField OverrideAPBySpellPowerPercent = new(70, 98); + public UpdateField ModTargetResistance = new(70, 99); + public UpdateField ModTargetPhysicalResistance = new(70, 100); + public UpdateField LocalFlags = new(70, 101); + public UpdateField GrantableLevels = new(102, 103); + public UpdateField MultiActionBars = new(102, 104); + public UpdateField LifetimeMaxRank = new(102, 105); + public UpdateField NumRespecs = new(102, 106); + public UpdateField PvpMedals = new(102, 107); + public UpdateField TodayHonorableKills = new(102, 108); + public UpdateField YesterdayHonorableKills = new(102, 109); + public UpdateField LifetimeHonorableKills = new(102, 110); + public UpdateField WatchedFactionIndex = new(102, 111); + public UpdateField MaxLevel = new(102, 112); + public UpdateField ScalingPlayerLevelDelta = new(102, 113); + public UpdateField MaxCreatureScalingLevel = new(102, 114); + public UpdateField TransmogCostMinScalingLevel = new(102, 115); + public UpdateField PetSpellPower = new(102, 116); + public UpdateField UiHitModifier = new(102, 117); + public UpdateField UiSpellHitModifier = new(102, 118); + public UpdateField HomeRealmTimeOffset = new(102, 119); + public UpdateField ModPetHaste = new(102, 120); + public UpdateField JailersTowerLevelMax = new(102, 121); + public UpdateField JailersTowerLevel = new(102, 122); + public UpdateField LocalRegenFlags = new(102, 123); + public UpdateField AuraVision = new(102, 124); + public UpdateField NumBackpackSlots = new(102, 125); + public UpdateField OverrideSpellsID = new(102, 126); + public UpdateField LootSpecID = new(102, 127); + public UpdateField OverrideZonePVPType = new(102, 128); + public UpdateField Honor = new(102, 129); + public UpdateField HonorNextLevel = new(102, 130); + public UpdateField PerksProgramCurrency = new(102, 131); + public UpdateField NumBankSlots = new(102, 132); + public UpdateField NumCharacterBankTabs = new(102, 133); + public UpdateField NumAccountBankTabs = new(134, 135); + public UpdateField ResearchHistory = new(134, 136); + public UpdateField FrozenPerksVendorItem = new(134, 137); + public UpdateField LevelLinkInfo = new(134, 139); + public OptionalUpdateField QuestSession = new(134, 138); + public UpdateField UiChromieTimeExpansionID = new(134, 140); + public UpdateField TimerunningSeasonID = new(134, 141); + public UpdateField TransportServerTime = new(134, 142); + public UpdateField WeeklyRewardsPeriodSinceOrigin = new(134, 143); // week count since Cfg_RegionsEntry::ChallengeOrigin + public UpdateField DEBUGSoulbindConduitRank = new(134, 144); + public UpdateField DungeonScore = new(134, 145); + public MapUpdateField TraitConfigs = new(134, 146); + public UpdateField ActiveCombatTraitConfigID = new(134, 147); + public UpdateField ItemUpgradeHighOnehandWeaponItemID = new(134, 148); + public UpdateField ItemUpgradeHighFingerItemID = new(134, 149); + public UpdateField ItemUpgradeHighFingerWatermark = new(134, 150); + public UpdateField ItemUpgradeHighTrinketItemID = new(134, 151); + public UpdateField ItemUpgradeHighTrinketWatermark = new(134, 152); + public UpdateField LootHistoryInstanceID = new(134, 153); + public OptionalUpdateField PetStable = new(134, 154); + public UpdateField RequiredMountCapabilityFlags = new(134, 155); + public OptionalUpdateField WalkInData = new(134, 156); + public MapUpdateField DelveData = new(134, 157); + public MapUpdateField TransmogOutfits = new(134, 158); + public OptionalUpdateField ChallengeModeData = new(134, 159); + public UpdateField ViewedOutfit = new(134, 160); + public UpdateField TransmogMetadata = new(134, 161); + public UpdateFieldArray InvSlots = new(105, 162, 163); + public UpdateFieldArray RestInfo = new(2, 268, 269); + public UpdateFieldArray ModDamageDonePos = new(7, 271, 272); + public UpdateFieldArray ModDamageDoneNeg = new(7, 271, 279); + public UpdateFieldArray ModDamageDonePercent = new(7, 271, 286); + public UpdateFieldArray ModHealingDonePercent = new(7, 271, 293); + public UpdateFieldArray WeaponDmgMultipliers = new(3, 300, 301); + public UpdateFieldArray WeaponAtkSpeedMultipliers = new(3, 300, 304); + public UpdateFieldArray BuybackPrice = new(12, 307, 308); + public UpdateFieldArray BuybackTimestamp = new(12, 307, 320); + public UpdateFieldArray CombatRatings = new(32, 332, 333); + public UpdateFieldArray NoReagentCostMask = new(4, 365, 366); + public UpdateFieldArray ProfessionSkillLine = new(2, 370, 371); + public UpdateFieldArray BagSlotFlags = new(5, 373, 374); + public UpdateFieldArray ItemUpgradeHighWatermark = new(17, 379, 380); public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) { @@ -6207,6 +6813,7 @@ namespace Game.Entities data.WriteUInt32(MaxLevel); data.WriteInt32(ScalingPlayerLevelDelta); data.WriteInt32(MaxCreatureScalingLevel); + data.WriteUInt8(TransmogCostMinScalingLevel); for (int i = 0; i < 4; ++i) { data.WriteUInt32(NoReagentCostMask[i]); @@ -6269,9 +6876,17 @@ namespace Game.Entities data.WriteInt32(RuneforgePowers.Size()); data.WriteInt32(TransmogIllusions.Size()); data.WriteInt32(WarbandScenes.Size()); + data.WriteInt32(HouseRooms.Size()); + data.WriteInt32(HouseExteriorComponents.Size()); + data.WriteInt32(HouseThemes.Size()); + data.WriteInt32(HouseRoomComponentTextures.Size()); + data.WriteInt32(HouseTypes.Size()); + data.WriteInt32(UnlockedTransmogOutfits.Size()); data.WriteInt32(CharacterRestrictions.Size()); data.WriteInt32(SpellPctModByLabel.Size()); data.WriteInt32(SpellFlatModByLabel.Size()); + data.WriteInt32(SpellPctModPVPByLabel.Size()); + data.WriteInt32(SpellFlatModPVPByLabel.Size()); data.WriteInt32(MawPowers.Size()); data.WriteInt32(MultiFloorExploration.Size()); data.WriteInt32(RecipeProgression.Size()); @@ -6365,6 +6980,30 @@ namespace Game.Entities { data.WriteUInt32(WarbandScenes[i]); } + for (int i = 0; i < HouseRooms.Size(); ++i) + { + data.WriteUInt32(HouseRooms[i]); + } + for (int i = 0; i < HouseExteriorComponents.Size(); ++i) + { + data.WriteUInt32(HouseExteriorComponents[i]); + } + for (int i = 0; i < HouseThemes.Size(); ++i) + { + data.WriteUInt32(HouseThemes[i]); + } + for (int i = 0; i < HouseRoomComponentTextures.Size(); ++i) + { + data.WriteUInt32(HouseRoomComponentTextures[i]); + } + for (int i = 0; i < HouseTypes.Size(); ++i) + { + data.WriteUInt32(HouseTypes[i]); + } + for (int i = 0; i < UnlockedTransmogOutfits.Size(); ++i) + { + data.WriteInt32(UnlockedTransmogOutfits[i]); + } for (int i = 0; i < SpellPctModByLabel.Size(); ++i) { SpellPctModByLabel[i].WriteCreate(data, owner, receiver); @@ -6373,6 +7012,14 @@ namespace Game.Entities { SpellFlatModByLabel[i].WriteCreate(data, owner, receiver); } + for (int i = 0; i < SpellPctModPVPByLabel.Size(); ++i) + { + SpellPctModPVPByLabel[i].WriteCreate(data, owner, receiver); + } + for (int i = 0; i < SpellFlatModPVPByLabel.Size(); ++i) + { + SpellFlatModPVPByLabel[i].WriteCreate(data, owner, receiver); + } for (int i = 0; i < MawPowers.Size(); ++i) { MawPowers[i].WriteCreate(data, owner, receiver); @@ -6429,7 +7076,6 @@ namespace Game.Entities data.WriteBits(CharacterBankTabSettings.Size(), 3); data.WriteBits(AccountBankTabSettings.Size(), 3); data.WriteBits(WalkInData.HasValue(), 1); - data.WriteBits(DelveData.HasValue(), 1); data.WriteBits(ChallengeModeData.HasValue(), 1); data.FlushBits(); ResearchHistory.GetValue().WriteCreate(data, owner, receiver); @@ -6438,9 +7084,13 @@ namespace Game.Entities QuestSession.GetValue().WriteCreate(data, owner, receiver); } FrozenPerksVendorItem.GetValue().Write(data); - Field_1410.GetValue().WriteCreate(data, owner, receiver); + LevelLinkInfo.GetValue().WriteCreate(data, owner, receiver); DungeonScore.GetValue().Write(data); WriteMapFieldCreate(TraitConfigs, data, owner, receiver); + WriteMapFieldCreate(DelveData, data, owner, receiver); + WriteMapFieldCreate(TransmogOutfits, data, owner, receiver); + ViewedOutfit.GetValue().WriteCreate(data, owner, receiver); + TransmogMetadata.GetValue().WriteCreate(data, owner, receiver); for (int i = 0; i < PvpInfo.Size(); ++i) { PvpInfo[i].WriteCreate(data, owner, receiver); @@ -6469,10 +7119,6 @@ namespace Game.Entities { WalkInData.GetValue().WriteCreate(data, owner, receiver); } - if (DelveData.HasValue()) - { - DelveData.GetValue().WriteCreate(data, owner, receiver); - } if (ChallengeModeData.HasValue()) { ChallengeModeData.GetValue().WriteCreate(data, owner, receiver); @@ -6547,11 +7193,11 @@ namespace Game.Entities WriteCompleteDynamicFieldUpdateMask(PvpInfo.Size(), data); } } - if (changesMask[42]) + if (changesMask[50]) { for (int i = 0; i < 1; ++i) { - if (changesMask[43]) + if (changesMask[51]) { if (!ignoreNestedChangesMask) ResearchSites[i].WriteUpdateMask(data); @@ -6560,11 +7206,11 @@ namespace Game.Entities } } } - if (changesMask[44]) + if (changesMask[52]) { for (int i = 0; i < 1; ++i) { - if (changesMask[45]) + if (changesMask[53]) { if (!ignoreNestedChangesMask) ResearchSiteProgress[i].WriteUpdateMask(data); @@ -6573,11 +7219,11 @@ namespace Game.Entities } } } - if (changesMask[46]) + if (changesMask[54]) { for (int i = 0; i < 1; ++i) { - if (changesMask[47]) + if (changesMask[55]) { if (!ignoreNestedChangesMask) Research[i].WriteUpdateMask(data); @@ -6586,11 +7232,11 @@ namespace Game.Entities } } } - if (changesMask[42]) + if (changesMask[50]) { for (int i = 0; i < 1; ++i) { - if (changesMask[43]) + if (changesMask[51]) { for (int j = 0; j < ResearchSites[i].Size(); ++j) { @@ -6602,11 +7248,11 @@ namespace Game.Entities } } } - if (changesMask[44]) + if (changesMask[52]) { for (int i = 0; i < 1; ++i) { - if (changesMask[45]) + if (changesMask[53]) { for (int j = 0; j < ResearchSiteProgress[i].Size(); ++j) { @@ -6618,11 +7264,11 @@ namespace Game.Entities } } } - if (changesMask[46]) + if (changesMask[54]) { for (int i = 0; i < 1; ++i) { - if (changesMask[47]) + if (changesMask[55]) { for (int j = 0; j < Research[i].Size(); ++j) { @@ -6729,107 +7375,163 @@ namespace Game.Entities WriteCompleteDynamicFieldUpdateMask(WarbandScenes.Size(), data); } if (changesMask[24]) + { + if (!ignoreNestedChangesMask) + HouseRooms.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(HouseRooms.Size(), data); + } + if (changesMask[25]) + { + if (!ignoreNestedChangesMask) + HouseExteriorComponents.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(HouseExteriorComponents.Size(), data); + } + if (changesMask[26]) + { + if (!ignoreNestedChangesMask) + HouseThemes.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(HouseThemes.Size(), data); + } + if (changesMask[27]) + { + if (!ignoreNestedChangesMask) + HouseRoomComponentTextures.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(HouseRoomComponentTextures.Size(), data); + } + if (changesMask[28]) + { + if (!ignoreNestedChangesMask) + HouseTypes.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(HouseTypes.Size(), data); + } + if (changesMask[29]) + { + if (!ignoreNestedChangesMask) + UnlockedTransmogOutfits.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(UnlockedTransmogOutfits.Size(), data); + } + if (changesMask[30]) { if (!ignoreNestedChangesMask) CharacterRestrictions.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(CharacterRestrictions.Size(), data); } - if (changesMask[25]) + if (changesMask[31]) { if (!ignoreNestedChangesMask) SpellPctModByLabel.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(SpellPctModByLabel.Size(), data); } - if (changesMask[26]) - { - if (!ignoreNestedChangesMask) - SpellFlatModByLabel.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(SpellFlatModByLabel.Size(), data); - } - if (changesMask[27]) - { - if (!ignoreNestedChangesMask) - MawPowers.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(MawPowers.Size(), data); - } - if (changesMask[28]) - { - if (!ignoreNestedChangesMask) - MultiFloorExploration.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(MultiFloorExploration.Size(), data); - } - if (changesMask[29]) - { - if (!ignoreNestedChangesMask) - RecipeProgression.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(RecipeProgression.Size(), data); - } - if (changesMask[30]) - { - if (!ignoreNestedChangesMask) - ReplayedQuests.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(ReplayedQuests.Size(), data); - } - if (changesMask[31]) - { - if (!ignoreNestedChangesMask) - TaskQuests.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(TaskQuests.Size(), data); - } } if (changesMask[32]) { if (changesMask[33]) + { + if (!ignoreNestedChangesMask) + SpellFlatModByLabel.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(SpellFlatModByLabel.Size(), data); + } + if (changesMask[34]) + { + if (!ignoreNestedChangesMask) + SpellPctModPVPByLabel.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(SpellPctModPVPByLabel.Size(), data); + } + if (changesMask[35]) + { + if (!ignoreNestedChangesMask) + SpellFlatModPVPByLabel.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(SpellFlatModPVPByLabel.Size(), data); + } + if (changesMask[36]) + { + if (!ignoreNestedChangesMask) + MawPowers.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(MawPowers.Size(), data); + } + if (changesMask[37]) + { + if (!ignoreNestedChangesMask) + MultiFloorExploration.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(MultiFloorExploration.Size(), data); + } + if (changesMask[38]) + { + if (!ignoreNestedChangesMask) + RecipeProgression.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(RecipeProgression.Size(), data); + } + if (changesMask[39]) + { + if (!ignoreNestedChangesMask) + ReplayedQuests.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(ReplayedQuests.Size(), data); + } + if (changesMask[40]) + { + if (!ignoreNestedChangesMask) + TaskQuests.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(TaskQuests.Size(), data); + } + if (changesMask[41]) { if (!ignoreNestedChangesMask) DisabledSpells.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(DisabledSpells.Size(), data); } - if (changesMask[34]) + if (changesMask[42]) { if (!ignoreNestedChangesMask) CraftingOrders.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(CraftingOrders.Size(), data); } - if (changesMask[35]) + if (changesMask[43]) { if (!ignoreNestedChangesMask) PersonalCraftingOrderCounts.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(PersonalCraftingOrderCounts.Size(), data); } - if (changesMask[36]) + if (changesMask[44]) { if (!ignoreNestedChangesMask) NpcCraftingOrders.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(NpcCraftingOrders.Size(), data); } - if (changesMask[37]) + if (changesMask[45]) { if (!ignoreNestedChangesMask) CategoryCooldownMods.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(CategoryCooldownMods.Size(), data); } - if (changesMask[38]) + if (changesMask[46]) { if (!ignoreNestedChangesMask) WeeklySpellUses.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(WeeklySpellUses.Size(), data); } - if (changesMask[39]) + if (changesMask[47]) { if (!ignoreNestedChangesMask) TrackedCollectableSources.WriteUpdateMask(data); @@ -7000,7 +7702,67 @@ namespace Game.Entities } } } + if (changesMask[24]) + { + for (int i = 0; i < HouseRooms.Size(); ++i) + { + if (HouseRooms.HasChanged(i) || ignoreNestedChangesMask) + { + data.WriteUInt32(HouseRooms[i]); + } + } + } if (changesMask[25]) + { + for (int i = 0; i < HouseExteriorComponents.Size(); ++i) + { + if (HouseExteriorComponents.HasChanged(i) || ignoreNestedChangesMask) + { + data.WriteUInt32(HouseExteriorComponents[i]); + } + } + } + if (changesMask[26]) + { + for (int i = 0; i < HouseThemes.Size(); ++i) + { + if (HouseThemes.HasChanged(i) || ignoreNestedChangesMask) + { + data.WriteUInt32(HouseThemes[i]); + } + } + } + if (changesMask[27]) + { + for (int i = 0; i < HouseRoomComponentTextures.Size(); ++i) + { + if (HouseRoomComponentTextures.HasChanged(i) || ignoreNestedChangesMask) + { + data.WriteUInt32(HouseRoomComponentTextures[i]); + } + } + } + if (changesMask[28]) + { + for (int i = 0; i < HouseTypes.Size(); ++i) + { + if (HouseTypes.HasChanged(i) || ignoreNestedChangesMask) + { + data.WriteUInt32(HouseTypes[i]); + } + } + } + if (changesMask[29]) + { + for (int i = 0; i < UnlockedTransmogOutfits.Size(); ++i) + { + if (UnlockedTransmogOutfits.HasChanged(i) || ignoreNestedChangesMask) + { + data.WriteInt32(UnlockedTransmogOutfits[i]); + } + } + } + if (changesMask[31]) { for (int i = 0; i < SpellPctModByLabel.Size(); ++i) { @@ -7010,7 +7772,10 @@ namespace Game.Entities } } } - if (changesMask[26]) + } + if (changesMask[32]) + { + if (changesMask[33]) { for (int i = 0; i < SpellFlatModByLabel.Size(); ++i) { @@ -7020,7 +7785,27 @@ namespace Game.Entities } } } - if (changesMask[27]) + if (changesMask[34]) + { + for (int i = 0; i < SpellPctModPVPByLabel.Size(); ++i) + { + if (SpellPctModPVPByLabel.HasChanged(i) || ignoreNestedChangesMask) + { + SpellPctModPVPByLabel[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[35]) + { + for (int i = 0; i < SpellFlatModPVPByLabel.Size(); ++i) + { + if (SpellFlatModPVPByLabel.HasChanged(i) || ignoreNestedChangesMask) + { + SpellFlatModPVPByLabel[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[36]) { for (int i = 0; i < MawPowers.Size(); ++i) { @@ -7030,7 +7815,7 @@ namespace Game.Entities } } } - if (changesMask[28]) + if (changesMask[37]) { for (int i = 0; i < MultiFloorExploration.Size(); ++i) { @@ -7040,7 +7825,7 @@ namespace Game.Entities } } } - if (changesMask[29]) + if (changesMask[38]) { for (int i = 0; i < RecipeProgression.Size(); ++i) { @@ -7050,7 +7835,7 @@ namespace Game.Entities } } } - if (changesMask[30]) + if (changesMask[39]) { for (int i = 0; i < ReplayedQuests.Size(); ++i) { @@ -7060,7 +7845,7 @@ namespace Game.Entities } } } - if (changesMask[31]) + if (changesMask[40]) { for (int i = 0; i < TaskQuests.Size(); ++i) { @@ -7070,10 +7855,7 @@ namespace Game.Entities } } } - } - if (changesMask[32]) - { - if (changesMask[33]) + if (changesMask[41]) { for (int i = 0; i < DisabledSpells.Size(); ++i) { @@ -7083,7 +7865,7 @@ namespace Game.Entities } } } - if (changesMask[35]) + if (changesMask[43]) { for (int i = 0; i < PersonalCraftingOrderCounts.Size(); ++i) { @@ -7093,7 +7875,7 @@ namespace Game.Entities } } } - if (changesMask[36]) + if (changesMask[44]) { for (int i = 0; i < NpcCraftingOrders.Size(); ++i) { @@ -7103,7 +7885,7 @@ namespace Game.Entities } } } - if (changesMask[37]) + if (changesMask[45]) { for (int i = 0; i < CategoryCooldownMods.Size(); ++i) { @@ -7113,7 +7895,7 @@ namespace Game.Entities } } } - if (changesMask[38]) + if (changesMask[46]) { for (int i = 0; i < WeeklySpellUses.Size(); ++i) { @@ -7123,7 +7905,7 @@ namespace Game.Entities } } } - if (changesMask[39]) + if (changesMask[47]) { for (int i = 0; i < TrackedCollectableSources.Size(); ++i) { @@ -7137,14 +7919,14 @@ namespace Game.Entities data.FlushBits(); if (changesMask[32]) { - if (changesMask[40]) + if (changesMask[48]) { if (!ignoreNestedChangesMask) CharacterBankTabSettings.WriteUpdateMask(data, 3); else WriteCompleteDynamicFieldUpdateMask(CharacterBankTabSettings.Size(), data, 3); } - if (changesMask[41]) + if (changesMask[49]) { if (!ignoreNestedChangesMask) AccountBankTabSettings.WriteUpdateMask(data, 3); @@ -7165,7 +7947,7 @@ namespace Game.Entities } } } - if (changesMask[24]) + if (changesMask[30]) { for (int i = 0; i < CharacterRestrictions.Size(); ++i) { @@ -7178,7 +7960,7 @@ namespace Game.Entities } if (changesMask[32]) { - if (changesMask[34]) + if (changesMask[42]) { for (int i = 0; i < CraftingOrders.Size(); ++i) { @@ -7188,7 +7970,7 @@ namespace Game.Entities } } } - if (changesMask[40]) + if (changesMask[48]) { for (int i = 0; i < CharacterBankTabSettings.Size(); ++i) { @@ -7198,7 +7980,7 @@ namespace Game.Entities } } } - if (changesMask[41]) + if (changesMask[49]) { for (int i = 0; i < AccountBankTabSettings.Size(); ++i) { @@ -7208,438 +7990,441 @@ namespace Game.Entities } } } - if (changesMask[48]) + if (changesMask[56]) { data.WritePackedGuid(FarsightObject); } - if (changesMask[49]) + if (changesMask[57]) { data.WritePackedGuid(SummonedBattlePetGUID); } - if (changesMask[50]) + if (changesMask[58]) { data.WriteUInt64(Coinage); } - if (changesMask[51]) + if (changesMask[59]) { data.WriteUInt64(AccountBankCoinage); } - if (changesMask[52]) + if (changesMask[60]) { data.WriteUInt32(XP); } - if (changesMask[53]) + if (changesMask[61]) { data.WriteUInt32(NextLevelXP); } - if (changesMask[54]) + if (changesMask[62]) { data.WriteInt32(TrialXP); } - if (changesMask[55]) + if (changesMask[63]) { Skill.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[56]) + if (changesMask[64]) { data.WriteUInt32(CharacterPoints); } - if (changesMask[57]) + if (changesMask[65]) { data.WriteUInt32(MaxTalentTiers); } - if (changesMask[58]) + if (changesMask[66]) { data.WriteUInt32(TrackCreatureMask); } - if (changesMask[59]) + if (changesMask[67]) { data.WriteFloat(MainhandExpertise); } - if (changesMask[60]) + if (changesMask[68]) { data.WriteFloat(OffhandExpertise); } - if (changesMask[61]) - { - data.WriteFloat(RangedExpertise); - } - if (changesMask[62]) - { - data.WriteFloat(CombatRatingExpertise); - } - if (changesMask[63]) - { - data.WriteFloat(BlockPercentage); - } - if (changesMask[64]) - { - data.WriteFloat(DodgePercentage); - } - if (changesMask[65]) - { - data.WriteFloat(DodgePercentageFromAttribute); - } - if (changesMask[66]) - { - data.WriteFloat(ParryPercentage); - } - if (changesMask[67]) - { - data.WriteFloat(ParryPercentageFromAttribute); - } - if (changesMask[68]) - { - data.WriteFloat(CritPercentage); - } if (changesMask[69]) { - data.WriteFloat(RangedCritPercentage); + data.WriteFloat(RangedExpertise); } } if (changesMask[70]) { if (changesMask[71]) { - data.WriteFloat(OffhandCritPercentage); + data.WriteFloat(CombatRatingExpertise); } if (changesMask[72]) { - data.WriteFloat(SpellCritPercentage); + data.WriteFloat(BlockPercentage); } if (changesMask[73]) { - data.WriteUInt32(ShieldBlock); + data.WriteFloat(DodgePercentage); } if (changesMask[74]) { - data.WriteFloat(ShieldBlockCritPercentage); + data.WriteFloat(DodgePercentageFromAttribute); } if (changesMask[75]) { - data.WriteFloat(Mastery); + data.WriteFloat(ParryPercentage); } if (changesMask[76]) { - data.WriteFloat(Speed); + data.WriteFloat(ParryPercentageFromAttribute); } if (changesMask[77]) { - data.WriteFloat(Avoidance); + data.WriteFloat(CritPercentage); } if (changesMask[78]) { - data.WriteFloat(Sturdiness); + data.WriteFloat(RangedCritPercentage); } if (changesMask[79]) { - data.WriteInt32(Versatility); + data.WriteFloat(OffhandCritPercentage); } if (changesMask[80]) { - data.WriteFloat(VersatilityBonus); + data.WriteFloat(SpellCritPercentage); } if (changesMask[81]) { - data.WriteFloat(PvpPowerDamage); + data.WriteUInt32(ShieldBlock); } if (changesMask[82]) { - data.WriteFloat(PvpPowerHealing); + data.WriteFloat(ShieldBlockCritPercentage); } if (changesMask[83]) { - BitVectors.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data.WriteFloat(Mastery); } if (changesMask[84]) { - data.WriteInt32(ModHealingDonePos); + data.WriteFloat(Speed); } if (changesMask[85]) { - data.WriteFloat(ModHealingPercent); + data.WriteFloat(Avoidance); } if (changesMask[86]) { - data.WriteFloat(ModPeriodicHealingDonePercent); + data.WriteFloat(Sturdiness); } if (changesMask[87]) { - data.WriteFloat(ModSpellPowerPercent); + data.WriteInt32(Versatility); } if (changesMask[88]) { - data.WriteFloat(ModResiliencePercent); + data.WriteFloat(VersatilityBonus); } if (changesMask[89]) { - data.WriteFloat(OverrideSpellPowerByAPPercent); + data.WriteFloat(PvpPowerDamage); } if (changesMask[90]) { - data.WriteFloat(OverrideAPBySpellPowerPercent); + data.WriteFloat(PvpPowerHealing); } if (changesMask[91]) { - data.WriteInt32(ModTargetResistance); + BitVectors.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } if (changesMask[92]) { - data.WriteInt32(ModTargetPhysicalResistance); + data.WriteInt32(ModHealingDonePos); } if (changesMask[93]) { - data.WriteUInt32(LocalFlags); + data.WriteFloat(ModHealingPercent); } if (changesMask[94]) { - data.WriteUInt8(GrantableLevels); + data.WriteFloat(ModPeriodicHealingDonePercent); } if (changesMask[95]) { - data.WriteUInt8(MultiActionBars); + data.WriteFloat(ModSpellPowerPercent); } if (changesMask[96]) { - data.WriteUInt8(LifetimeMaxRank); + data.WriteFloat(ModResiliencePercent); } if (changesMask[97]) { - data.WriteUInt8(NumRespecs); + data.WriteFloat(OverrideSpellPowerByAPPercent); } if (changesMask[98]) { - data.WriteUInt32(PvpMedals); + data.WriteFloat(OverrideAPBySpellPowerPercent); } if (changesMask[99]) { - data.WriteUInt16(TodayHonorableKills); + data.WriteInt32(ModTargetResistance); } if (changesMask[100]) { - data.WriteUInt16(YesterdayHonorableKills); + data.WriteInt32(ModTargetPhysicalResistance); } if (changesMask[101]) { - data.WriteUInt32(LifetimeHonorableKills); + data.WriteUInt32(LocalFlags); } } if (changesMask[102]) { if (changesMask[103]) { - data.WriteUInt32(WatchedFactionIndex); + data.WriteUInt8(GrantableLevels); } if (changesMask[104]) { - data.WriteUInt32(MaxLevel); + data.WriteUInt8(MultiActionBars); } if (changesMask[105]) { - data.WriteInt32(ScalingPlayerLevelDelta); + data.WriteUInt8(LifetimeMaxRank); } if (changesMask[106]) { - data.WriteInt32(MaxCreatureScalingLevel); + data.WriteUInt8(NumRespecs); } if (changesMask[107]) { - data.WriteUInt32(PetSpellPower); + data.WriteUInt32(PvpMedals); } if (changesMask[108]) { - data.WriteFloat(UiHitModifier); + data.WriteUInt16(TodayHonorableKills); } if (changesMask[109]) { - data.WriteFloat(UiSpellHitModifier); + data.WriteUInt16(YesterdayHonorableKills); } if (changesMask[110]) { - data.WriteInt32(HomeRealmTimeOffset); + data.WriteUInt32(LifetimeHonorableKills); } if (changesMask[111]) { - data.WriteFloat(ModPetHaste); + data.WriteUInt32(WatchedFactionIndex); } if (changesMask[112]) { - data.WriteInt8(JailersTowerLevelMax); + data.WriteUInt32(MaxLevel); } if (changesMask[113]) { - data.WriteInt8(JailersTowerLevel); + data.WriteInt32(ScalingPlayerLevelDelta); } if (changesMask[114]) { - data.WriteUInt8(LocalRegenFlags); + data.WriteInt32(MaxCreatureScalingLevel); } if (changesMask[115]) { - data.WriteUInt8(AuraVision); + data.WriteUInt8(TransmogCostMinScalingLevel); } if (changesMask[116]) { - data.WriteUInt8(NumBackpackSlots); + data.WriteUInt32(PetSpellPower); } if (changesMask[117]) { - data.WriteUInt32(OverrideSpellsID); + data.WriteFloat(UiHitModifier); } if (changesMask[118]) { - data.WriteUInt16(LootSpecID); + data.WriteFloat(UiSpellHitModifier); } if (changesMask[119]) { - data.WriteUInt32(OverrideZonePVPType); + data.WriteInt32(HomeRealmTimeOffset); } if (changesMask[120]) { - data.WriteUInt32(Honor); + data.WriteFloat(ModPetHaste); } if (changesMask[121]) { - data.WriteUInt32(HonorNextLevel); + data.WriteInt8(JailersTowerLevelMax); } if (changesMask[122]) { - data.WriteInt32(PerksProgramCurrency); + data.WriteInt8(JailersTowerLevel); } if (changesMask[123]) { - data.WriteUInt8(NumBankSlots); + data.WriteUInt8(LocalRegenFlags); } if (changesMask[124]) { - data.WriteUInt8(NumCharacterBankTabs); + data.WriteUInt8(AuraVision); } if (changesMask[125]) { - data.WriteUInt8(NumAccountBankTabs); + data.WriteUInt8(NumBackpackSlots); + } + if (changesMask[126]) + { + data.WriteUInt32(OverrideSpellsID); + } + if (changesMask[127]) + { + data.WriteUInt16(LootSpecID); + } + if (changesMask[128]) + { + data.WriteUInt32(OverrideZonePVPType); + } + if (changesMask[129]) + { + data.WriteUInt32(Honor); } if (changesMask[130]) { - data.WriteInt32(UiChromieTimeExpansionID); + data.WriteUInt32(HonorNextLevel); } if (changesMask[131]) { - data.WriteInt32(TimerunningSeasonID); + data.WriteInt32(PerksProgramCurrency); } if (changesMask[132]) { - data.WriteInt32(TransportServerTime); + data.WriteUInt8(NumBankSlots); } if (changesMask[133]) { - data.WriteUInt32(WeeklyRewardsPeriodSinceOrigin); + data.WriteUInt8(NumCharacterBankTabs); } } if (changesMask[134]) { if (changesMask[135]) { - data.WriteInt16(DEBUGSoulbindConduitRank); - } - if (changesMask[138]) - { - data.WriteUInt32(ActiveCombatTraitConfigID); - } - if (changesMask[139]) - { - data.WriteInt32(ItemUpgradeHighOnehandWeaponItemID); + data.WriteUInt8(NumAccountBankTabs); } if (changesMask[140]) { - data.WriteInt32(ItemUpgradeHighFingerItemID); + data.WriteInt32(UiChromieTimeExpansionID); } if (changesMask[141]) { - data.WriteFloat(ItemUpgradeHighFingerWatermark); + data.WriteInt32(TimerunningSeasonID); } if (changesMask[142]) { - data.WriteInt32(ItemUpgradeHighTrinketItemID); + data.WriteInt32(TransportServerTime); } if (changesMask[143]) { - data.WriteFloat(ItemUpgradeHighTrinketWatermark); + data.WriteUInt32(WeeklyRewardsPeriodSinceOrigin); } if (changesMask[144]) + { + data.WriteInt16(DEBUGSoulbindConduitRank); + } + if (changesMask[147]) + { + data.WriteUInt32(ActiveCombatTraitConfigID); + } + if (changesMask[148]) + { + data.WriteInt32(ItemUpgradeHighOnehandWeaponItemID); + } + if (changesMask[149]) + { + data.WriteInt32(ItemUpgradeHighFingerItemID); + } + if (changesMask[150]) + { + data.WriteFloat(ItemUpgradeHighFingerWatermark); + } + if (changesMask[151]) + { + data.WriteInt32(ItemUpgradeHighTrinketItemID); + } + if (changesMask[152]) + { + data.WriteFloat(ItemUpgradeHighTrinketWatermark); + } + if (changesMask[153]) { data.WriteUInt64(LootHistoryInstanceID); } - if (changesMask[146]) + if (changesMask[155]) { data.WriteUInt8(RequiredMountCapabilityFlags); } - } - if (changesMask[102]) - { data.WriteBits(QuestSession.HasValue(), 1); - } - if (changesMask[134]) - { data.WriteBits(PetStable.HasValue(), 1); data.WriteBits(WalkInData.HasValue(), 1); - data.WriteBits(DelveData.HasValue(), 1); data.WriteBits(ChallengeModeData.HasValue(), 1); } data.FlushBits(); - if (changesMask[102]) + if (changesMask[134]) { - if (changesMask[126]) + if (changesMask[136]) { ResearchHistory.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[128]) + if (changesMask[138]) { if (QuestSession.HasValue()) { QuestSession.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } - if (changesMask[127]) + if (changesMask[137]) { FrozenPerksVendorItem.GetValue().Write(data); } - if (changesMask[129]) + if (changesMask[139]) { - Field_1410.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + LevelLinkInfo.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - } - if (changesMask[134]) - { - if (changesMask[136]) + if (changesMask[145]) { DungeonScore.GetValue().Write(data); } - if (changesMask[137]) + if (changesMask[146]) { WriteMapFieldUpdate(TraitConfigs, data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[145]) + if (changesMask[157]) + { + WriteMapFieldUpdate(DelveData, data, ignoreNestedChangesMask, owner, receiver); + } + if (changesMask[158]) + { + WriteMapFieldUpdate(TransmogOutfits, data, ignoreNestedChangesMask, owner, receiver); + } + if (changesMask[160]) + { + ViewedOutfit.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + if (changesMask[161]) + { + TransmogMetadata.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + if (changesMask[154]) { if (PetStable.HasValue()) { PetStable.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } - if (changesMask[147]) + if (changesMask[156]) { if (WalkInData.HasValue()) { WalkInData.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } - if (changesMask[148]) - { - if (DelveData.HasValue()) - { - DelveData.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); - } - } - if (changesMask[149]) + if (changesMask[159]) { if (ChallengeModeData.HasValue()) { @@ -7647,121 +8432,121 @@ namespace Game.Entities } } } - if (changesMask[150]) + if (changesMask[162]) { for (int i = 0; i < 105; ++i) { - if (changesMask[151 + i]) + if (changesMask[163 + i]) { - data .WritePackedGuid(InvSlots[i]); + data.WritePackedGuid(InvSlots[i]); } } } - if (changesMask[256]) + if (changesMask[268]) { for (int i = 0; i < 2; ++i) { - if (changesMask[257 + i]) + if (changesMask[269 + i]) { RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[259]) + if (changesMask[271]) { for (int i = 0; i < 7; ++i) { - if (changesMask[260 + i]) + if (changesMask[272 + i]) { data.WriteInt32(ModDamageDonePos[i]); } - if (changesMask[267 + i]) + if (changesMask[279 + i]) { data.WriteInt32(ModDamageDoneNeg[i]); } - if (changesMask[274 + i]) + if (changesMask[286 + i]) { data.WriteFloat(ModDamageDonePercent[i]); } - if (changesMask[281 + i]) + if (changesMask[293 + i]) { data.WriteFloat(ModHealingDonePercent[i]); } } } - if (changesMask[288]) + if (changesMask[300]) { for (int i = 0; i < 3; ++i) { - if (changesMask[289 + i]) + if (changesMask[301 + i]) { data.WriteFloat(WeaponDmgMultipliers[i]); } - if (changesMask[292 + i]) + if (changesMask[304 + i]) { data.WriteFloat(WeaponAtkSpeedMultipliers[i]); } } } - if (changesMask[295]) + if (changesMask[307]) { for (int i = 0; i < 12; ++i) { - if (changesMask[296 + i]) + if (changesMask[308 + i]) { data.WriteUInt32(BuybackPrice[i]); } - if (changesMask[308 + i]) + if (changesMask[320 + i]) { data.WriteInt64(BuybackTimestamp[i]); } } } - if (changesMask[320]) + if (changesMask[332]) { for (int i = 0; i < 32; ++i) { - if (changesMask[321 + i]) + if (changesMask[333 + i]) { data.WriteUInt32(CombatRatings[i]); } } } - if (changesMask[353]) + if (changesMask[365]) { for (int i = 0; i < 4; ++i) { - if (changesMask[354 + i]) + if (changesMask[366 + i]) { data.WriteUInt32(NoReagentCostMask[i]); } } } - if (changesMask[358]) + if (changesMask[370]) { for (int i = 0; i < 2; ++i) { - if (changesMask[359 + i]) + if (changesMask[371 + i]) { data.WriteUInt32(ProfessionSkillLine[i]); } } } - if (changesMask[361]) + if (changesMask[373]) { for (int i = 0; i < 5; ++i) { - if (changesMask[362 + i]) + if (changesMask[374 + i]) { data.WriteUInt32(BagSlotFlags[i]); } } } - if (changesMask[367]) + if (changesMask[379]) { for (int i = 0; i < 17; ++i) { - if (changesMask[368 + i]) + if (changesMask[380 + i]) { data.WriteFloat(ItemUpgradeHighWatermark[i]); } @@ -7785,6 +8570,7 @@ namespace Game.Entities ClearChangesMask(CharacterDataElements); ClearChangesMask(AccountDataElements); ClearChangesMask(DailyQuestsCompleted); + ClearChangesMask(Field_1328); ClearChangesMask(AvailableQuestLineXQuestIDs); ClearChangesMask(Heirlooms); ClearChangesMask(HeirloomFlags); @@ -7796,8 +8582,16 @@ namespace Game.Entities ClearChangesMask(RuneforgePowers); ClearChangesMask(TransmogIllusions); ClearChangesMask(WarbandScenes); + ClearChangesMask(HouseRooms); + ClearChangesMask(HouseExteriorComponents); + ClearChangesMask(HouseThemes); + ClearChangesMask(HouseRoomComponentTextures); + ClearChangesMask(HouseTypes); + ClearChangesMask(UnlockedTransmogOutfits); ClearChangesMask(SpellPctModByLabel); ClearChangesMask(SpellFlatModByLabel); + ClearChangesMask(SpellPctModPVPByLabel); + ClearChangesMask(SpellFlatModPVPByLabel); ClearChangesMask(MawPowers); ClearChangesMask(MultiFloorExploration); ClearChangesMask(RecipeProgression); @@ -7871,6 +8665,7 @@ namespace Game.Entities ClearChangesMask(MaxLevel); ClearChangesMask(ScalingPlayerLevelDelta); ClearChangesMask(MaxCreatureScalingLevel); + ClearChangesMask(TransmogCostMinScalingLevel); ClearChangesMask(PetSpellPower); ClearChangesMask(UiHitModifier); ClearChangesMask(UiSpellHitModifier); @@ -7892,7 +8687,7 @@ namespace Game.Entities ClearChangesMask(NumAccountBankTabs); ClearChangesMask(ResearchHistory); ClearChangesMask(FrozenPerksVendorItem); - ClearChangesMask(Field_1410); + ClearChangesMask(LevelLinkInfo); ClearChangesMask(QuestSession); ClearChangesMask(UiChromieTimeExpansionID); ClearChangesMask(TimerunningSeasonID); @@ -7912,7 +8707,10 @@ namespace Game.Entities ClearChangesMask(RequiredMountCapabilityFlags); ClearChangesMask(WalkInData); ClearChangesMask(DelveData); + ClearChangesMask(TransmogOutfits); ClearChangesMask(ChallengeModeData); + ClearChangesMask(ViewedOutfit); + ClearChangesMask(TransmogMetadata); ClearChangesMask(InvSlots); ClearChangesMask(RestInfo); ClearChangesMask(ModDamageDonePos); @@ -7976,7 +8774,7 @@ namespace Game.Entities } } - public class GameObjectFieldData() : HasChangesMask((int)EntityFragment.CGObject, TypeId.GameObject, 26) + public class GameObjectFieldData() : HasChangesMask((int)EntityFragment.CGObject, TypeId.GameObject, 27) { public UpdateField> StateWorldEffectIDs = new(0, 1); public DynamicUpdateField EnableDoodadSets = new(0, 2); @@ -7990,19 +8788,20 @@ namespace Game.Entities public UpdateField CreatedBy = new(0, 10); public UpdateField GuildGUID = new(0, 11); public UpdateField Flags = new(0, 12); - public UpdateField ParentRotation = new(0, 13); - public UpdateField FactionTemplate = new(0, 14); - public UpdateField State = new(0, 15); - public UpdateField TypeID = new(0, 16); - public UpdateField PercentHealth = new(0, 17); - public UpdateField ArtKit = new(0, 18); - public UpdateField CustomParam = new(0, 19); - public UpdateField Level = new(0, 20); - public UpdateField AnimGroupInstance = new(0, 21); - public UpdateField UiWidgetItemID = new(0, 22); - public UpdateField UiWidgetItemQuality = new(0, 23); - public UpdateField UiWidgetItemUnknown1000 = new(0, 24); - public OptionalUpdateField AssistActionData = new(0, 25); + public UpdateField FlagsB = new(0, 13); // 12.0.7: new field + public UpdateField ParentRotation = new(0, 14); + public UpdateField FactionTemplate = new(0, 15); + public UpdateField State = new(0, 16); + public UpdateField TypeID = new(0, 17); + public UpdateField PercentHealth = new(0, 18); + public UpdateField ArtKit = new(0, 19); + public UpdateField CustomParam = new(0, 20); + public UpdateField Level = new(0, 21); + public UpdateField AnimGroupInstance = new(0, 22); + public UpdateField UiWidgetItemID = new(0, 23); + public UpdateField UiWidgetItemQuality = new(0, 24); + public UpdateField UiWidgetItemUnknown1000 = new(0, 25); + public OptionalUpdateField AssistActionData = new(0, 26); public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, GameObject owner, Player receiver) { @@ -8021,6 +8820,7 @@ namespace Game.Entities data.WritePackedGuid(CreatedBy); data.WritePackedGuid(GuildGUID); data.WriteUInt32(GetViewerDependentGameObjectFlags(this, owner, receiver)); + data.WriteUInt32(FlagsB); Quaternion rotation = ParentRotation; data.WriteFloat(rotation.X); data.WriteFloat(rotation.Y); @@ -8062,7 +8862,7 @@ namespace Game.Entities public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, GameObject owner, Player receiver) { - data.WriteBits(changesMask.GetBlock(0), 26); + data.WriteBits(changesMask.GetBlock(0), 27); List stateWorldEffectIDs; @@ -8156,59 +8956,63 @@ namespace Game.Entities data.WriteUInt32(GetViewerDependentGameObjectFlags(this, owner, receiver)); } if (changesMask[13]) + { + data.WriteUInt32(FlagsB); + } + if (changesMask[14]) { data.WriteFloat(((Quaternion)ParentRotation).X); data.WriteFloat(((Quaternion)ParentRotation).Y); data.WriteFloat(((Quaternion)ParentRotation).Z); data.WriteFloat(((Quaternion)ParentRotation).W); } - if (changesMask[14]) + if (changesMask[15]) { data.WriteUInt32(FactionTemplate); } - if (changesMask[15]) + if (changesMask[16]) { data.WriteInt8(GetViewerDependentGameObjectState(this, owner, receiver)); } - if (changesMask[16]) + if (changesMask[17]) { data.WriteInt8(TypeID); } - if (changesMask[17]) + if (changesMask[18]) { data.WriteUInt8(PercentHealth); } - if (changesMask[18]) + if (changesMask[19]) { data.WriteUInt32(ArtKit); } - if (changesMask[19]) + if (changesMask[20]) { data.WriteUInt32(CustomParam); } - if (changesMask[20]) + if (changesMask[21]) { data.WriteUInt32(Level); } - if (changesMask[21]) + if (changesMask[22]) { data.WriteUInt32(AnimGroupInstance); } - if (changesMask[22]) + if (changesMask[23]) { data.WriteUInt32(UiWidgetItemID); } - if (changesMask[23]) + if (changesMask[24]) { data.WriteUInt32(UiWidgetItemQuality); } - if (changesMask[24]) + if (changesMask[25]) { data.WriteUInt32(UiWidgetItemUnknown1000); } data.WriteBits(AssistActionData.HasValue(), 1); data.FlushBits(); - if (changesMask[25]) + if (changesMask[26]) { if (AssistActionData.HasValue()) { @@ -8232,6 +9036,7 @@ namespace Game.Entities ClearChangesMask(CreatedBy); ClearChangesMask(GuildGUID); ClearChangesMask(Flags); + ClearChangesMask(FlagsB); ClearChangesMask(ParentRotation); ClearChangesMask(FactionTemplate); ClearChangesMask(State); @@ -9285,44 +10090,88 @@ namespace Game.Entities } } - public class AreaTriggerFieldData() : HasChangesMask((int)EntityFragment.CGObject, TypeId.AreaTrigger, 36) + public class AreaTriggerActionSetPeriodModifier() : HasChangesMask(3) + { + public UpdateField Field_0 = new(0, 1); + public UpdateField Field_4 = new(0, 2); + + public void WriteCreate(WorldPacket data, AreaTrigger owner, Player receiver) + { + data.WriteInt32(Field_0); + data.WriteFloat(Field_4); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, AreaTrigger owner, Player receiver) + { + UpdateMask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 3); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data.WriteInt32(Field_0); + } + if (changesMask[2]) + { + data.WriteFloat(Field_4); + } + } + } + + public override void ClearChangesMask() + { + ClearChangesMask(Field_0); + ClearChangesMask(Field_4); + _changesMask.ResetAll(); + } + } + + public class AreaTriggerFieldData() : HasChangesMask((int)EntityFragment.CGObject, TypeId.AreaTrigger, 39) { public UpdateField OverrideScaleCurve = new(0, 1); public UpdateField ExtraScaleCurve = new(0, 2); public UpdateField OverrideMoveCurveX = new(0, 3); public UpdateField OverrideMoveCurveY = new(0, 4); public UpdateField OverrideMoveCurveZ = new(0, 5); - public UpdateField Caster = new(0, 6); - public UpdateField Duration = new(0, 7); - public UpdateField TimeToTarget = new(0, 8); - public UpdateField TimeToTargetScale = new(0, 9); - public UpdateField TimeToTargetExtraScale = new(0, 10); - public UpdateField TimeToTargetPos = new(0, 11); // Linked to m_overrideMoveCurve - public UpdateField SpellID = new(0, 12); - public UpdateField SpellForVisuals = new(0, 13); - public UpdateField SpellVisual = new(0, 14); - public UpdateField BoundsRadius2D = new(0, 15); - public UpdateField DecalPropertiesID = new(0, 16); - public UpdateField CreatingEffectGUID = new(0, 17); - public UpdateField OrbitPathTarget = new(0, 18); - public UpdateField RollPitchYaw = new(0, 19); - public UpdateField PositionalSoundKitID = new(0, 20); - public UpdateField MovementStartTime = new(0, 21); - public UpdateField CreationTime = new(0, 22); - public UpdateField ZOffset = new(0, 23); - public OptionalUpdateField TargetRollPitchYaw = new(0, 24); - public UpdateField Flags = new(0, 25); - public UpdateField VisualAnim = new(0, 26); - public UpdateField ScaleCurveId = new(0, 27); - public UpdateField FacingCurveId = new(0, 28); - public UpdateField MorphCurveId = new(0, 29); - public UpdateField MoveCurveId = new(0, 30); - public UpdateField Facing = new(0, 31); - public OptionalUpdateField ForcedPositionAndRotation = new(32, 33); - public UpdateField PathType = new(32, 34); - public UpdateField ShapeType = new(32, 35); - public VariantUpdateField PathData = new(32, 34);//, AreaTriggerSplineCalculator, AreaTriggerOrbit, AreaTriggerMovementScript); - public VariantUpdateField ShapeData = new(32, 35);//, AreaTriggerSphere, AreaTriggerBox, AreaTriggerPolygon, AreaTriggerCylinder, AreaTriggerDisk, AreaTriggerBoundedPlane); + public UpdateField Unk1205Curve = new(0, 6); // 12.0.7: new field + public UpdateField Caster = new(0, 7); + public UpdateField Duration = new(0, 8); + public UpdateField TimeToTarget = new(0, 9); + public UpdateField TimeToTargetScale = new(0, 10); + public UpdateField TimeToTargetExtraScale = new(0, 11); + public UpdateField TimeToTargetPos = new(0, 12); // Linked to m_overrideMoveCurve + public UpdateField TimeToTargetUnk1205Curve = new(0, 13); // 12.0.7: new field, linked to m_unk1205Curve + public UpdateField SpellID = new(0, 14); + public UpdateField SpellForVisuals = new(0, 15); + public UpdateField SpellVisual = new(0, 16); + public UpdateField BoundsRadius2D = new(0, 17); + public UpdateField DecalPropertiesID = new(0, 18); + public UpdateField CreatingEffectGUID = new(0, 19); + public UpdateField OrbitPathTarget = new(0, 20); + public UpdateField RollPitchYaw = new(0, 21); + public UpdateField PositionalSoundKitID = new(0, 22); + public UpdateField MovementStartTime = new(0, 23); + public UpdateField CreationTime = new(0, 24); + public UpdateField ZOffset = new(0, 25); + public OptionalUpdateField TargetRollPitchYaw = new(0, 26); + public UpdateField Flags = new(0, 27); + public UpdateField VisualAnim = new(0, 28); + public UpdateField ScaleCurveId = new(0, 29); + public UpdateField FacingCurveId = new(0, 30); + public UpdateField MorphCurveId = new(0, 31); + public UpdateField MoveCurveId = new(32, 33); + public UpdateField Facing = new(32, 34); + public OptionalUpdateField ForcedPositionAndRotation = new(32, 35); + public UpdateField PathType = new(32, 36); + public UpdateField ShapeType = new(32, 37); + public UpdateField PeriodModifier = new(32, 38); // 12.0.7: new field + public VariantUpdateField PathData = new(32, 36);//, AreaTriggerSplineCalculator, AreaTriggerOrbit, AreaTriggerMovementScript); + public VariantUpdateField ShapeData = new(32, 37);//, AreaTriggerSphere, AreaTriggerBox, AreaTriggerPolygon, AreaTriggerCylinder, AreaTriggerDisk, AreaTriggerBoundedPlane); public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, AreaTrigger owner, Player receiver) { @@ -9333,6 +10182,7 @@ namespace Game.Entities data.WriteUInt32(TimeToTargetScale); data.WriteUInt32(TimeToTargetExtraScale); data.WriteUInt32(TimeToTargetPos); + data.WriteUInt32(TimeToTargetUnk1205Curve); data.WriteUInt32(SpellID); data.WriteUInt32(SpellForVisuals); SpellVisual.GetValue().WriteCreate(data, owner, receiver); @@ -9353,6 +10203,7 @@ namespace Game.Entities data.WriteFloat(Facing); data.WriteInt32(PathType); data.WriteUInt8(ShapeType); + PeriodModifier.GetValue().WriteCreate(data, owner, receiver); if (PathType == 3) { PathData.Get().WriteCreate(data, owner, receiver); @@ -9396,6 +10247,7 @@ namespace Game.Entities } OverrideMoveCurveY.GetValue().WriteCreate(data, owner, receiver); OverrideMoveCurveZ.GetValue().WriteCreate(data, owner, receiver); + Unk1205Curve.GetValue().WriteCreate(data, owner, receiver); VisualAnim.GetValue().WriteCreate(data, owner, receiver); if (PathType == 0) { @@ -9415,7 +10267,7 @@ namespace Game.Entities public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, AreaTrigger owner, Player receiver) { data.WriteUInt32(changesMask.GetBlock(0)); - data.WriteBits(changesMask.GetBlock(1), 4); + data.WriteBits(changesMask.GetBlock(1), 7); data.FlushBits(); if (changesMask[0]) @@ -9424,121 +10276,129 @@ namespace Game.Entities { OverrideScaleCurve.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[6]) + if (changesMask[7]) { data.WritePackedGuid(Caster); } - if (changesMask[7]) + if (changesMask[8]) { data.WriteUInt32(Duration); } - if (changesMask[8]) + if (changesMask[9]) { data.WriteUInt32(TimeToTarget); } - if (changesMask[9]) + if (changesMask[10]) { data.WriteUInt32(TimeToTargetScale); } - if (changesMask[10]) + if (changesMask[11]) { data.WriteUInt32(TimeToTargetExtraScale); } - if (changesMask[11]) + if (changesMask[12]) { data.WriteUInt32(TimeToTargetPos); } - if (changesMask[12]) - { - data.WriteUInt32(SpellID); - } if (changesMask[13]) { - data.WriteUInt32(SpellForVisuals); + data.WriteUInt32(TimeToTargetUnk1205Curve); } if (changesMask[14]) { - SpellVisual.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data.WriteUInt32(SpellID); } if (changesMask[15]) { - data.WriteFloat(BoundsRadius2D); + data.WriteUInt32(SpellForVisuals); } if (changesMask[16]) { - data.WriteUInt32(DecalPropertiesID); + SpellVisual.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } if (changesMask[17]) { - data.WritePackedGuid(CreatingEffectGUID); + data.WriteFloat(BoundsRadius2D); } if (changesMask[18]) { - data.WritePackedGuid(OrbitPathTarget); + data.WriteUInt32(DecalPropertiesID); } if (changesMask[19]) { - data.WriteVector3(RollPitchYaw); + data.WritePackedGuid(CreatingEffectGUID); } if (changesMask[20]) { - data.WriteInt32(PositionalSoundKitID); + data.WritePackedGuid(OrbitPathTarget); } if (changesMask[21]) { - data.WriteUInt32(MovementStartTime); + data.WriteVector3(RollPitchYaw); } if (changesMask[22]) { - data.WriteUInt32(CreationTime); + data.WriteInt32(PositionalSoundKitID); } if (changesMask[23]) { - data.WriteFloat(ZOffset); + data.WriteUInt32(MovementStartTime); + } + if (changesMask[24]) + { + data.WriteUInt32(CreationTime); } if (changesMask[25]) { - data.WriteUInt32(Flags); + data.WriteFloat(ZOffset); } if (changesMask[27]) { - data.WriteUInt32(ScaleCurveId); - } - if (changesMask[28]) - { - data.WriteUInt32(FacingCurveId); + data.WriteUInt32(Flags); } if (changesMask[29]) { - data.WriteUInt32(MorphCurveId); + data.WriteUInt32(ScaleCurveId); } if (changesMask[30]) { - data.WriteUInt32(MoveCurveId); + data.WriteUInt32(FacingCurveId); } if (changesMask[31]) { - data.WriteFloat(Facing); + data.WriteUInt32(MorphCurveId); } } if (changesMask[32]) { + if (changesMask[33]) + { + data.WriteUInt32(MoveCurveId); + } if (changesMask[34]) + { + data.WriteFloat(Facing); + } + if (changesMask[36]) { data.WriteInt32(PathType); } - if (changesMask[35]) + if (changesMask[37]) { data.WriteUInt8(ShapeType); } - if (changesMask[34]) + if (changesMask[38]) + { + PeriodModifier.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + if (changesMask[36]) { if (PathType == 3) { PathData.Get().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } - if (changesMask[35]) + if (changesMask[37]) { if (ShapeType == 0) { @@ -9589,7 +10449,7 @@ namespace Game.Entities { OverrideMoveCurveX.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[24]) + if (changesMask[26]) { if (TargetRollPitchYaw.HasValue()) { @@ -9599,7 +10459,7 @@ namespace Game.Entities } if (changesMask[32]) { - if (changesMask[33]) + if (changesMask[35]) { if (ForcedPositionAndRotation.HasValue()) { @@ -9617,14 +10477,18 @@ namespace Game.Entities { OverrideMoveCurveZ.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[26]) + if (changesMask[6]) + { + Unk1205Curve.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + if (changesMask[28]) { VisualAnim.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } if (changesMask[32]) { - if (changesMask[34]) + if (changesMask[36]) { if (PathType == 0) { @@ -9645,12 +10509,14 @@ namespace Game.Entities ClearChangesMask(OverrideMoveCurveX); ClearChangesMask(OverrideMoveCurveY); ClearChangesMask(OverrideMoveCurveZ); + ClearChangesMask(Unk1205Curve); ClearChangesMask(Caster); ClearChangesMask(Duration); ClearChangesMask(TimeToTarget); ClearChangesMask(TimeToTargetScale); ClearChangesMask(TimeToTargetExtraScale); ClearChangesMask(TimeToTargetPos); + ClearChangesMask(TimeToTargetUnk1205Curve); ClearChangesMask(SpellID); ClearChangesMask(SpellForVisuals); ClearChangesMask(SpellVisual); @@ -9674,6 +10540,7 @@ namespace Game.Entities ClearChangesMask(ForcedPositionAndRotation); ClearChangesMask(PathType); ClearChangesMask(ShapeType); + ClearChangesMask(PeriodModifier); ClearChangesMask(PathData); ClearChangesMask(ShapeData); _changesMask.ResetAll(); @@ -9834,14 +10701,15 @@ namespace Game.Entities } } - public class ConversationData() : HasChangesMask((int)EntityFragment.CGObject, TypeId.Conversation, 7) + public class ConversationData() : HasChangesMask((int)EntityFragment.CGObject, TypeId.Conversation, 8) { public UpdateField DontPlayBroadcastTextSounds = new(0, 1); - public UpdateField> Lines = new(0, 2); - public DynamicUpdateField Actors = new(0, 3); - public UpdateField LastLineEndTime = new(0, 4); - public UpdateField Progress = new(0, 5); - public UpdateField Flags = new(0, 6); + public UpdateField Field_33 = new(0, 2); // 12.0.7: new field + public UpdateField> Lines = new(0, 3); + public DynamicUpdateField Actors = new(0, 4); + public UpdateField LastLineEndTime = new(0, 5); + public UpdateField Progress = new(0, 6); + public UpdateField Flags = new(0, 7); public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Conversation owner, Player receiver) { @@ -9853,6 +10721,7 @@ namespace Game.Entities Lines.GetValue()[i].WriteCreate(data, owner, receiver); } data.WriteBit(DontPlayBroadcastTextSounds); + data.WriteBit(Field_33); data.WriteInt32(Actors.Size()); data.WriteUInt32(Flags); for (int i = 0; i < Actors.Size(); ++i) @@ -9869,7 +10738,7 @@ namespace Game.Entities public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, Conversation owner, Player receiver) { - data.WriteBits(_changesMask.GetBlock(0), 6); + data.WriteBits(_changesMask.GetBlock(0), 8); if (_changesMask[0]) { @@ -9877,7 +10746,11 @@ namespace Game.Entities { data.WriteBit(DontPlayBroadcastTextSounds); } - if (changesMask[2]) + if (_changesMask[2]) + { + data.WriteBit(Field_33); + } + if (changesMask[3]) { List list = Lines; data.WriteBits(list.Count, 32); @@ -9890,7 +10763,7 @@ namespace Game.Entities data.FlushBits(); if (_changesMask[0]) { - if (_changesMask[3]) + if (_changesMask[4]) { if (!ignoreNestedChangesMask) Actors.WriteUpdateMask(data); @@ -9901,7 +10774,7 @@ namespace Game.Entities data.FlushBits(); if (_changesMask[0]) { - if (_changesMask[3]) + if (_changesMask[4]) { for (int i = 0; i < Actors.Size(); ++i) { @@ -9911,15 +10784,15 @@ namespace Game.Entities } } } - if (_changesMask[4]) + if (_changesMask[5]) { data.WriteUInt32(GetViewerLastLineEndTime(this, owner, receiver)); } - if (_changesMask[5]) + if (_changesMask[6]) { data.WriteUInt32(Progress); } - if (changesMask[6]) + if (changesMask[7]) { data.WriteUInt32(Flags); } @@ -9930,6 +10803,7 @@ namespace Game.Entities public override void ClearChangesMask() { ClearChangesMask(DontPlayBroadcastTextSounds); + ClearChangesMask(Field_33); ClearChangesMask(Lines); ClearChangesMask(Actors); ClearChangesMask(LastLineEndTime); @@ -9944,6 +10818,1562 @@ namespace Game.Entities } } + // ===== 12.0.7: nuevos structs de UpdateFields (Housing / Player Initiative / Mesh-Mirror / Neighborhood) ===== + // Código nuevo, aún no cableado a ninguna entidad. Owner BaseEntity/Object -> WorldObject (no afecta bytes). + + public class AaBox // 12.0.7: helper + { + public Vector3 Low; + public Vector3 High; + + public void Write(WorldPacket data) + { + data.WriteVector3(Low); + data.WriteVector3(High); + } + } + + public class NeighborhoodCharterSignature // 12.0.7: plain struct + { + public ObjectGuid Guid; + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WritePackedGuid(Guid); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + data.WritePackedGuid(Guid); + } + } + + public class NICompletedMilestoneEntry // 12.0.7: plain struct + { + public long AwardDate; + public uint MilestoneID; + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WriteInt64(AwardDate); + data.WriteUInt32(MilestoneID); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + data.WriteInt64(AwardDate); + data.WriteUInt32(MilestoneID); + } + } + + public class PlayerMirrorHouse // 12.0.7: plain struct + { + public ObjectGuid HouseGUID; + public ObjectGuid NeighborhoodGUID; + public uint Level; + public uint Favor; + public uint InitiativeFavor; + public int MapID; + public int PlotID; + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WritePackedGuid(HouseGUID); + data.WritePackedGuid(NeighborhoodGUID); + data.WriteUInt32(Level); + data.WriteUInt32(Favor); + data.WriteUInt32(InitiativeFavor); + data.WriteInt32(MapID); + data.WriteInt32(PlotID); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + data.WritePackedGuid(HouseGUID); + data.WritePackedGuid(NeighborhoodGUID); + data.WriteUInt32(Level); + data.WriteUInt32(Favor); + data.WriteUInt32(InitiativeFavor); + data.WriteInt32(MapID); + data.WriteInt32(PlotID); + } + } + + public class PlayerHouseInfo // 12.0.7: plain struct + { + public ObjectGuid HouseGUID; + public ObjectGuid OwnerGUID; + + public void WriteCreate(WorldPacket data, WorldObject owner, Player receiver) + { + data.WritePackedGuid(HouseGUID); + data.WritePackedGuid(OwnerGUID); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, WorldObject owner, Player receiver) + { + data.WritePackedGuid(HouseGUID); + data.WritePackedGuid(OwnerGUID); + } + } + + public class HousingOwner // 12.0.7: plain struct + { + public ObjectGuid BnetAccountGUID; + public ObjectGuid PlayerGUID; + + public void WriteCreate(WorldPacket data, WorldObject owner, Player receiver) + { + data.WritePackedGuid(BnetAccountGUID); + data.WritePackedGuid(PlayerGUID); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, WorldObject owner, Player receiver) + { + data.WritePackedGuid(BnetAccountGUID); + data.WritePackedGuid(PlayerGUID); + } + } + + public class DecorDyeSlots // 12.0.7: plain struct + { + public int[] DyeColorID = new int[3]; + + public void WriteCreate(WorldPacket data, WorldObject owner, Player receiver) + { + for (int i = 0; i < 3; ++i) + data.WriteInt32(DyeColorID[i]); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, WorldObject owner, Player receiver) + { + for (int i = 0; i < 3; ++i) + data.WriteInt32(DyeColorID[i]); + } + } + + public class NeighborhoodOwnershipTransfer // 12.0.7: plain struct + { + public ObjectGuid NeighborhoodGUID; + public ObjectGuid CurrentOwnerGUID; + public string NeighborhoodName = ""; + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WritePackedGuid(NeighborhoodGUID); + data.WritePackedGuid(CurrentOwnerGUID); + data.WriteBits((uint)(NeighborhoodName.Length + 1), 8); + data.FlushBits(); + data.WriteCString(NeighborhoodName); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + data.WritePackedGuid(NeighborhoodGUID); + data.WritePackedGuid(CurrentOwnerGUID); + data.WriteBits((uint)(NeighborhoodName.Length + 1), 8); + data.FlushBits(); + data.WriteCString(NeighborhoodName); + } + } + + public class NeighborhoodCharter // 12.0.7: plain struct + { + public List Signatures = new(); + public int Field_0; + public int Field_4; + public string Name = ""; + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WriteInt32(Field_0); + data.WriteInt32(Field_4); + data.WriteUInt32((uint)Signatures.Count); + for (int i = 0; i < Signatures.Count; ++i) + Signatures[i].WriteCreate(data, owner, receiver); + data.WriteBits((uint)(Name.Length + 1), 8); + data.WriteCString(Name); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + data.WriteInt32(Field_0); + data.WriteInt32(Field_4); + data.WriteUInt32((uint)Signatures.Count); + for (int i = 0; i < Signatures.Count; ++i) + Signatures[i].WriteUpdate(data, ignoreChangesMask, owner, receiver); + data.FlushBits(); + data.WriteBits((uint)(Name.Length + 1), 8); + data.WriteCString(Name); + } + } + + public class NICompletedInitiativesEntry // 12.0.7: plain struct + { + public bool Completed; + public List CompletedMilestones = new(); + public uint InitiativeID; + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WriteUInt32(InitiativeID); + data.WriteUInt32((uint)CompletedMilestones.Count); + for (int i = 0; i < CompletedMilestones.Count; ++i) + CompletedMilestones[i].WriteCreate(data, owner, receiver); + data.WriteBit(Completed); + data.FlushBits(); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + data.WriteUInt32(InitiativeID); + data.WriteUInt32((uint)CompletedMilestones.Count); + for (int i = 0; i < CompletedMilestones.Count; ++i) + CompletedMilestones[i].WriteUpdate(data, ignoreChangesMask, owner, receiver); + data.FlushBits(); + data.FlushBits(); + data.WriteBit(Completed); + data.FlushBits(); + } + } + + public class PlayerInitiativeTaskInfo() : HasChangesMask(2) // 12.0.7 + { + public UpdateField TaskID = new(-1, 0); + public UpdateField TimesCompleted = new(-1, 1); + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WriteInt32(TaskID); + data.WriteInt32(TimesCompleted); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + UpdateMask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 2); + + data.FlushBits(); + if (changesMask[0]) + { + data.WriteInt32(TaskID); + } + if (changesMask[1]) + { + data.WriteInt32(TimesCompleted); + } + } + + public override void ClearChangesMask() + { + ClearChangesMask(TaskID); + ClearChangesMask(TimesCompleted); + _changesMask.ResetAll(); + } + } + + public class PlayerInitiativeInfo() : HasChangesMask(7) // 12.0.7 + { + public UpdateField RemainingDuration = new(-1, 0); + public UpdateField CurrentInitiativeID = new(-1, 1); + public UpdateField CurrentMilestoneID = new(-1, 2); + public UpdateField CurrentCycleID = new(-1, 3); + public UpdateField ProgressRequired = new(-1, 4); + public UpdateField CurrentProgress = new(-1, 5); + public UpdateField PlayerTotalContribution = new(-1, 6); + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WriteInt64(RemainingDuration); + data.WriteInt32(CurrentInitiativeID); + data.WriteInt32(CurrentMilestoneID); + data.WriteInt32(CurrentCycleID); + data.WriteFloat(ProgressRequired); + data.WriteFloat(CurrentProgress); + data.WriteFloat(PlayerTotalContribution); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + UpdateMask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 7); + + data.FlushBits(); + if (changesMask[0]) + { + data.WriteInt64(RemainingDuration); + } + if (changesMask[1]) + { + data.WriteInt32(CurrentInitiativeID); + } + if (changesMask[2]) + { + data.WriteInt32(CurrentMilestoneID); + } + if (changesMask[3]) + { + data.WriteInt32(CurrentCycleID); + } + if (changesMask[4]) + { + data.WriteFloat(ProgressRequired); + } + if (changesMask[5]) + { + data.WriteFloat(CurrentProgress); + } + if (changesMask[6]) + { + data.WriteFloat(PlayerTotalContribution); + } + } + + public override void ClearChangesMask() + { + ClearChangesMask(RemainingDuration); + ClearChangesMask(CurrentInitiativeID); + ClearChangesMask(CurrentMilestoneID); + ClearChangesMask(CurrentCycleID); + ClearChangesMask(ProgressRequired); + ClearChangesMask(CurrentProgress); + ClearChangesMask(PlayerTotalContribution); + _changesMask.ResetAll(); + } + } + + public class DecorStoragePersistedData() : HasChangesMask(4), IsUpdateFieldStructureTag // 12.0.7 + { + public UpdateField HouseGUID = new(-1, 0); + public OptionalUpdateField DyeSlots = new(-1, 1); + public UpdateField SourceType = new(-1, 2); + public UpdateFieldString SourceValue = new(-1, 3); + + public void WriteCreate(WorldPacket data, WorldObject owner, Player receiver) + { + data.WritePackedGuid(HouseGUID); + data.WriteUInt8(SourceType); + data.WriteBits(DyeSlots.HasValue(), 1); + data.WriteBits((uint)(SourceValue.Size() + 1), 24); + data.FlushBits(); + if (DyeSlots.HasValue()) + { + DyeSlots.GetValue().WriteCreate(data, owner, receiver); + } + data.WriteCString(SourceValue); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, WorldObject owner, Player receiver) + { + UpdateMask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 4); + + data.FlushBits(); + if (changesMask[0]) + { + data.WritePackedGuid(HouseGUID); + } + if (changesMask[2]) + { + data.WriteUInt8(SourceType); + } + data.WriteBits(DyeSlots.HasValue(), 1); + if (changesMask[3]) + { + data.WriteBits((uint)(SourceValue.Size() + 1), 24); + } + data.FlushBits(); + if (changesMask[1]) + { + if (DyeSlots.HasValue()) + { + DyeSlots.GetValue().WriteUpdate(data, ignoreChangesMask, owner, receiver); + } + } + if (changesMask[3]) + { + data.WriteCString(SourceValue); + } + } + + public override void ClearChangesMask() + { + ClearChangesMask(HouseGUID); + ClearChangesMask(DyeSlots); + ClearChangesMask(SourceType); + ClearChangesMask(SourceValue); + _changesMask.ResetAll(); + } + } + + public class HousingCornerstoneData() : HasChangesMask(3) // 12.0.7 + { + public UpdateField Cost = new(0, 1); + public UpdateField PlotIndex = new(0, 2); + + public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, GameObject owner, Player receiver) + { + data.WriteUInt64(Cost); + data.WriteInt32(PlotIndex); + } + + public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, GameObject owner, Player receiver) + { + WriteUpdate(data, _changesMask, false, owner, receiver); + } + + public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, GameObject owner, Player receiver) + { + data.WriteBits(changesMask.GetBlock(0), 3); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data.WriteUInt64(Cost); + } + if (changesMask[2]) + { + data.WriteInt32(PlotIndex); + } + } + } + + public override void ClearChangesMask() + { + ClearChangesMask(Cost); + ClearChangesMask(PlotIndex); + _changesMask.ResetAll(); + } + } + + public class HousingDoorData() : HasChangesMask(5) // 12.0.7 + { + public UpdateField RoomComponentID = new(0, 1); + public UpdateField RoomComponentOffset = new(0, 2); + public UpdateField RoomComponentType = new(0, 3); + public UpdateField AttachedRoomGUID = new(0, 4); + + public void WriteCreate(WorldPacket data, WorldObject owner, Player receiver) + { + data.WriteInt32(RoomComponentID); + data.WriteVector3(RoomComponentOffset); + data.WriteUInt8(RoomComponentType); + data.WritePackedGuid(AttachedRoomGUID); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, WorldObject owner, Player receiver) + { + UpdateMask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 5); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data.WriteInt32(RoomComponentID); + } + if (changesMask[2]) + { + data.WriteVector3(RoomComponentOffset); + } + if (changesMask[3]) + { + data.WriteUInt8(RoomComponentType); + } + if (changesMask[4]) + { + data.WritePackedGuid(AttachedRoomGUID); + } + } + } + + public override void ClearChangesMask() + { + ClearChangesMask(RoomComponentID); + ClearChangesMask(RoomComponentOffset); + ClearChangesMask(RoomComponentType); + ClearChangesMask(AttachedRoomGUID); + _changesMask.ResetAll(); + } + } + + public class HousingFixtureData() : HasChangesMask(11) // 12.0.7 + { + public UpdateField ExteriorComponentID = new(0, 1); + public UpdateField HouseExteriorWmoDataID = new(0, 2); + public UpdateField ExteriorComponentHookID = new(0, 3); + public UpdateField HouseGUID = new(0, 4); + public UpdateField AttachParentGUID = new(0, 5); + public UpdateField Guid = new(0, 6); + public UpdateField GameObjectGUID = new(0, 7); + public UpdateField ExteriorComponentType = new(0, 8); + public UpdateField Field_59 = new(0, 9); + public UpdateField Size = new(0, 10); + + public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, WorldObject owner, Player receiver) + { + data.WriteInt32(ExteriorComponentID); + data.WriteInt32(HouseExteriorWmoDataID); + data.WriteInt32(ExteriorComponentHookID); + data.WritePackedGuid(HouseGUID); + data.WritePackedGuid(AttachParentGUID); + data.WritePackedGuid(Guid); + data.WritePackedGuid(GameObjectGUID); + data.WriteUInt8(ExteriorComponentType); + data.WriteUInt8(Field_59); + data.WriteUInt8(Size); + } + + public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, WorldObject owner, Player receiver) + { + WriteUpdate(data, _changesMask, false, owner, receiver); + } + + public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, WorldObject owner, Player receiver) + { + data.WriteBits(changesMask.GetBlock(0), 11); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data.WriteInt32(ExteriorComponentID); + } + if (changesMask[2]) + { + data.WriteInt32(HouseExteriorWmoDataID); + } + if (changesMask[3]) + { + data.WriteInt32(ExteriorComponentHookID); + } + if (changesMask[4]) + { + data.WritePackedGuid(HouseGUID); + } + if (changesMask[5]) + { + data.WritePackedGuid(AttachParentGUID); + } + if (changesMask[6]) + { + data.WritePackedGuid(Guid); + } + if (changesMask[7]) + { + data.WritePackedGuid(GameObjectGUID); + } + if (changesMask[8]) + { + data.WriteUInt8(ExteriorComponentType); + } + if (changesMask[9]) + { + data.WriteUInt8(Field_59); + } + if (changesMask[10]) + { + data.WriteUInt8(Size); + } + } + } + + public override void ClearChangesMask() + { + ClearChangesMask(ExteriorComponentID); + ClearChangesMask(HouseExteriorWmoDataID); + ClearChangesMask(ExteriorComponentHookID); + ClearChangesMask(HouseGUID); + ClearChangesMask(AttachParentGUID); + ClearChangesMask(Guid); + ClearChangesMask(GameObjectGUID); + ClearChangesMask(ExteriorComponentType); + ClearChangesMask(Field_59); + ClearChangesMask(Size); + _changesMask.ResetAll(); + } + } + + public class HousingRoomComponentMeshData() : HasChangesMask(10) // 12.0.7 + { + public UpdateField RoomGUID = new(0, 1); + public UpdateField RoomComponentOptionID = new(0, 2); + public UpdateField RoomComponentID = new(0, 3); + public UpdateField Field_20 = new(0, 4); + public UpdateField RoomComponentType = new(0, 5); + public UpdateField Field_24 = new(0, 6); + public UpdateField HouseThemeID = new(0, 7); + public UpdateField RoomComponentTextureID = new(0, 8); + public UpdateField RoomComponentTypeParam = new(0, 9); + + public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, WorldObject owner, Player receiver) + { + data.WritePackedGuid(RoomGUID); + data.WriteInt32(RoomComponentOptionID); + data.WriteInt32(RoomComponentID); + data.WriteUInt8(Field_20); + data.WriteUInt8(RoomComponentType); + data.WriteInt32(Field_24); + data.WriteInt32(HouseThemeID); + data.WriteInt32(RoomComponentTextureID); + data.WriteInt32(RoomComponentTypeParam); + } + + public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, WorldObject owner, Player receiver) + { + WriteUpdate(data, _changesMask, false, owner, receiver); + } + + public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, WorldObject owner, Player receiver) + { + data.WriteBits(changesMask.GetBlock(0), 10); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data.WritePackedGuid(RoomGUID); + } + if (changesMask[2]) + { + data.WriteInt32(RoomComponentOptionID); + } + if (changesMask[3]) + { + data.WriteInt32(RoomComponentID); + } + if (changesMask[4]) + { + data.WriteUInt8(Field_20); + } + if (changesMask[5]) + { + data.WriteUInt8(RoomComponentType); + } + if (changesMask[6]) + { + data.WriteInt32(Field_24); + } + if (changesMask[7]) + { + data.WriteInt32(HouseThemeID); + } + if (changesMask[8]) + { + data.WriteInt32(RoomComponentTextureID); + } + if (changesMask[9]) + { + data.WriteInt32(RoomComponentTypeParam); + } + } + } + + public override void ClearChangesMask() + { + ClearChangesMask(RoomGUID); + ClearChangesMask(RoomComponentOptionID); + ClearChangesMask(RoomComponentID); + ClearChangesMask(Field_20); + ClearChangesMask(RoomComponentType); + ClearChangesMask(Field_24); + ClearChangesMask(HouseThemeID); + ClearChangesMask(RoomComponentTextureID); + ClearChangesMask(RoomComponentTypeParam); + _changesMask.ResetAll(); + } + } + + public class HousingPlayerHouseData() : HasChangesMask(11) // 12.0.7 + { + public UpdateField BnetAccount = new(0, 1); + public UpdateField CosmeticOwner = new(0, 2); + public UpdateField PlotIndex = new(0, 3); + public UpdateField Level = new(0, 4); + public UpdateField Favor = new(0, 5); + public UpdateField InteriorDecorPlacementBudget = new(0, 6); + public UpdateField ExteriorDecorPlacementBudget = new(0, 7); + public UpdateField ExteriorFixtureBudget = new(0, 8); + public UpdateField RoomPlacementBudget = new(0, 9); + public UpdateField EntityGUID = new(0, 10); + + public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, WorldObject owner, Player receiver) + { + data.WritePackedGuid(BnetAccount); + data.WritePackedGuid(CosmeticOwner); + data.WriteInt32(PlotIndex); + data.WriteUInt32(Level); + data.WriteUInt64(Favor); + data.WriteUInt32(InteriorDecorPlacementBudget); + data.WriteUInt32(ExteriorDecorPlacementBudget); + data.WriteUInt32(ExteriorFixtureBudget); + data.WriteUInt32(RoomPlacementBudget); + data.WritePackedGuid(EntityGUID); + } + + public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, WorldObject owner, Player receiver) + { + WriteUpdate(data, _changesMask, false, owner, receiver); + } + + public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, WorldObject owner, Player receiver) + { + data.WriteBits(changesMask.GetBlock(0), 11); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data.WritePackedGuid(BnetAccount); + } + if (changesMask[2]) + { + data.WritePackedGuid(CosmeticOwner); + } + if (changesMask[3]) + { + data.WriteInt32(PlotIndex); + } + if (changesMask[4]) + { + data.WriteUInt32(Level); + } + if (changesMask[5]) + { + data.WriteUInt64(Favor); + } + if (changesMask[6]) + { + data.WriteUInt32(InteriorDecorPlacementBudget); + } + if (changesMask[7]) + { + data.WriteUInt32(ExteriorDecorPlacementBudget); + } + if (changesMask[8]) + { + data.WriteUInt32(ExteriorFixtureBudget); + } + if (changesMask[9]) + { + data.WriteUInt32(RoomPlacementBudget); + } + if (changesMask[10]) + { + data.WritePackedGuid(EntityGUID); + } + } + } + + public override void ClearChangesMask() + { + ClearChangesMask(BnetAccount); + ClearChangesMask(CosmeticOwner); + ClearChangesMask(PlotIndex); + ClearChangesMask(Level); + ClearChangesMask(Favor); + ClearChangesMask(InteriorDecorPlacementBudget); + ClearChangesMask(ExteriorDecorPlacementBudget); + ClearChangesMask(ExteriorFixtureBudget); + ClearChangesMask(RoomPlacementBudget); + ClearChangesMask(EntityGUID); + _changesMask.ResetAll(); + } + } + + public class HousingDecorData() : HasChangesMask(6) // 12.0.7 + { + public UpdateField DecorGUID = new(0, 1); + public UpdateField AttachParentGUID = new(0, 2); + public UpdateField Flags = new(0, 3); + public OptionalUpdateField PersistedData = new(0, 4); + public UpdateField TargetGameObjectGUID = new(0, 5); + + public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, WorldObject owner, Player receiver) + { + data.WritePackedGuid(DecorGUID); + data.WritePackedGuid(AttachParentGUID); + data.WriteUInt8(Flags); + data.WritePackedGuid(TargetGameObjectGUID); + data.WriteBits(PersistedData.HasValue(), 1); + data.FlushBits(); + if (PersistedData.HasValue()) + { + PersistedData.GetValue().WriteCreate(data, owner, receiver); + } + } + + public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, WorldObject owner, Player receiver) + { + WriteUpdate(data, _changesMask, false, owner, receiver); + } + + public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, WorldObject owner, Player receiver) + { + data.WriteBits(changesMask.GetBlock(0), 6); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data.WritePackedGuid(DecorGUID); + } + if (changesMask[2]) + { + data.WritePackedGuid(AttachParentGUID); + } + if (changesMask[3]) + { + data.WriteUInt8(Flags); + } + if (changesMask[5]) + { + data.WritePackedGuid(TargetGameObjectGUID); + } + data.WriteBits(PersistedData.HasValue(), 1); + data.FlushBits(); + if (changesMask[4]) + { + if (PersistedData.HasValue()) + { + PersistedData.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + } + + public override void ClearChangesMask() + { + ClearChangesMask(DecorGUID); + ClearChangesMask(AttachParentGUID); + ClearChangesMask(Flags); + ClearChangesMask(PersistedData); + ClearChangesMask(TargetGameObjectGUID); + _changesMask.ResetAll(); + } + } + + public class HousingStorageData() : HasChangesMask(3) // 12.0.7 + { + public MapUpdateField Decor = new(0, 1); + public UpdateField DecorMaxOwnedCount = new(0, 2); + + public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, WorldObject owner, Player receiver) + { + WriteMapFieldCreate(Decor, data, owner, receiver); + data.WriteUInt32(DecorMaxOwnedCount); + } + + public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, WorldObject owner, Player receiver) + { + WriteUpdate(data, _changesMask, false, owner, receiver); + } + + public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, WorldObject owner, Player receiver) + { + data.WriteBits(changesMask.GetBlock(0), 3); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + WriteMapFieldUpdate(Decor, data, ignoreNestedChangesMask, owner, receiver); + } + if (changesMask[2]) + { + data.WriteUInt32(DecorMaxOwnedCount); + } + } + } + + public override void ClearChangesMask() + { + ClearChangesMask(Decor); + ClearChangesMask(DecorMaxOwnedCount); + _changesMask.ResetAll(); + } + } + + public class HousingRoomData() : HasChangesMask(7) // 12.0.7 + { + public DynamicUpdateField MeshObjects = new(0, 1); + public DynamicUpdateField Doors = new(0, 2); + public UpdateField HouseGUID = new(0, 3); + public UpdateField HouseRoomID = new(0, 4); + public UpdateField Flags = new(0, 5); + public UpdateField FloorIndex = new(0, 6); + + public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, WorldObject owner, Player receiver) + { + data.WritePackedGuid(HouseGUID); + data.WriteInt32(HouseRoomID); + data.WriteInt32(Flags); + data.WriteInt32(MeshObjects.Size()); + data.WriteInt32(Doors.Size()); + data.WriteInt32(FloorIndex); + for (int i = 0; i < MeshObjects.Size(); ++i) + data.WritePackedGuid(MeshObjects[i]); + for (int i = 0; i < Doors.Size(); ++i) + Doors[i].WriteCreate(data, owner, receiver); + } + + public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, WorldObject owner, Player receiver) + { + WriteUpdate(data, _changesMask, false, owner, receiver); + } + + public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, WorldObject owner, Player receiver) + { + data.WriteBits(changesMask.GetBlock(0), 7); + + if (changesMask[0]) + { + if (changesMask[1]) + { + if (!ignoreNestedChangesMask) + MeshObjects.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(MeshObjects.Size(), data); + } + if (changesMask[2]) + { + if (!ignoreNestedChangesMask) + Doors.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(Doors.Size(), data); + } + } + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + for (int i = 0; i < MeshObjects.Size(); ++i) + { + if (MeshObjects.HasChanged(i) || ignoreNestedChangesMask) + { + data.WritePackedGuid(MeshObjects[i]); + } + } + } + if (changesMask[2]) + { + for (int i = 0; i < Doors.Size(); ++i) + { + if (Doors.HasChanged(i) || ignoreNestedChangesMask) + { + Doors[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[3]) + { + data.WritePackedGuid(HouseGUID); + } + if (changesMask[4]) + { + data.WriteInt32(HouseRoomID); + } + if (changesMask[5]) + { + data.WriteInt32(Flags); + } + if (changesMask[6]) + { + data.WriteInt32(FloorIndex); + } + } + } + + public override void ClearChangesMask() + { + ClearChangesMask(MeshObjects); + ClearChangesMask(Doors); + ClearChangesMask(HouseGUID); + ClearChangesMask(HouseRoomID); + ClearChangesMask(Flags); + ClearChangesMask(FloorIndex); + _changesMask.ResetAll(); + } + } + + public class MeshObjectData() : HasChangesMask(5) // 12.0.7 + { + public UpdateField IsWMO = new(0, 1); + public UpdateField IsRoom = new(0, 2); + public UpdateField FileDataID = new(0, 3); + public OptionalUpdateField Geobox = new(0, 4); + + public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, WorldObject owner, Player receiver) + { + data.WriteBit(IsWMO); + data.WriteBit(IsRoom); + data.WriteBits(Geobox.HasValue(), 1); + data.WriteInt32(FileDataID); + if (Geobox.HasValue()) + { + Geobox.GetValue().Write(data); + } + data.FlushBits(); + data.FlushBits(); + } + + public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, WorldObject owner, Player receiver) + { + WriteUpdate(data, _changesMask, false, owner, receiver); + } + + public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, WorldObject owner, Player receiver) + { + data.WriteBits(changesMask.GetBlock(0), 5); + if (changesMask[0]) + { + if (changesMask[1]) + { + data.WriteBit(IsWMO); + } + if (changesMask[2]) + { + data.WriteBit(IsRoom); + } + data.WriteBits(Geobox.HasValue(), 1); + } + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[3]) + { + data.WriteInt32(FileDataID); + } + if (changesMask[4]) + { + if (Geobox.HasValue()) + { + Geobox.GetValue().Write(data); + } + } + } + data.FlushBits(); + } + + public override void ClearChangesMask() + { + ClearChangesMask(IsWMO); + ClearChangesMask(IsRoom); + ClearChangesMask(FileDataID); + ClearChangesMask(Geobox); + _changesMask.ResetAll(); + } + } + + public class MirroredMeshObjectData() : HasChangesMask(6) // 12.0.7 + { + public UpdateField AttachParentGUID = new(0, 1); + public UpdateField PositionLocalSpace = new(0, 2); + public UpdateField RotationLocalSpace = new(0, 3); + public UpdateField ScaleLocalSpace = new(0, 4); + public UpdateField AttachmentFlags = new(0, 5); + + public void WriteCreate(WorldPacket data, WorldObject owner, Player receiver) + { + data.WritePackedGuid(AttachParentGUID); + data.WriteVector3(PositionLocalSpace); + data.WriteFloat(((Quaternion)RotationLocalSpace).X); + data.WriteFloat(((Quaternion)RotationLocalSpace).Y); + data.WriteFloat(((Quaternion)RotationLocalSpace).Z); + data.WriteFloat(((Quaternion)RotationLocalSpace).W); + data.WriteFloat(ScaleLocalSpace); + data.WriteUInt8(AttachmentFlags); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, WorldObject owner, Player receiver) + { + UpdateMask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 6); + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data.WritePackedGuid(AttachParentGUID); + } + if (changesMask[2]) + { + data.WriteVector3(PositionLocalSpace); + } + if (changesMask[3]) + { + data.WriteFloat(((Quaternion)RotationLocalSpace).X); + data.WriteFloat(((Quaternion)RotationLocalSpace).Y); + data.WriteFloat(((Quaternion)RotationLocalSpace).Z); + data.WriteFloat(((Quaternion)RotationLocalSpace).W); + } + if (changesMask[4]) + { + data.WriteFloat(ScaleLocalSpace); + } + if (changesMask[5]) + { + data.WriteUInt8(AttachmentFlags); + } + } + } + + public override void ClearChangesMask() + { + ClearChangesMask(AttachParentGUID); + ClearChangesMask(PositionLocalSpace); + ClearChangesMask(RotationLocalSpace); + ClearChangesMask(ScaleLocalSpace); + ClearChangesMask(AttachmentFlags); + _changesMask.ResetAll(); + } + } + + public class MirroredPositionData() : HasChangesMask(2) // 12.0.7 + { + public UpdateField PositionData = new(0, 1); + + public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, WorldObject owner, Player receiver) + { + PositionData.GetValue().WriteCreate(data, owner, receiver); + } + + public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, WorldObject owner, Player receiver) + { + WriteUpdate(data, _changesMask, false, owner, receiver); + } + + public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, WorldObject owner, Player receiver) + { + data.WriteBits(changesMask.GetBlock(0), 2); + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + PositionData.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + + public override void ClearChangesMask() + { + ClearChangesMask(PositionData); + _changesMask.ResetAll(); + } + } + + public class NeighborhoodMirrorData() : HasChangesMask(5) // 12.0.7 + { + public DynamicUpdateField Houses = new(0, 1); + public DynamicUpdateField Managers = new(0, 2); + public UpdateField OwnerGUID = new(0, 4); + public UpdateFieldString Name = new(0, 3); + + public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, WorldObject owner, Player receiver) + { + data.WriteBits((uint)(Name.Size() + 1), 8); + data.WritePackedGuid(OwnerGUID); + data.WriteInt32(Houses.Size()); + data.WriteInt32(Managers.Size()); + data.WriteCString(Name); + for (int i = 0; i < Houses.Size(); ++i) + Houses[i].WriteCreate(data, owner, receiver); + for (int i = 0; i < Managers.Size(); ++i) + Managers[i].WriteCreate(data, owner, receiver); + } + + public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, WorldObject owner, Player receiver) + { + WriteUpdate(data, _changesMask, false, owner, receiver); + } + + public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, WorldObject owner, Player receiver) + { + data.WriteBits(changesMask.GetBlock(0), 5); + + if (changesMask[0]) + { + if (changesMask[1]) + { + if (!ignoreNestedChangesMask) + Houses.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(Houses.Size(), data); + } + if (changesMask[2]) + { + if (!ignoreNestedChangesMask) + Managers.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(Managers.Size(), data); + } + } + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + for (int i = 0; i < Houses.Size(); ++i) + { + if (Houses.HasChanged(i) || ignoreNestedChangesMask) + { + Houses[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[2]) + { + for (int i = 0; i < Managers.Size(); ++i) + { + if (Managers.HasChanged(i) || ignoreNestedChangesMask) + { + Managers[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + } + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[3]) + { + data.WriteBits((uint)(Name.Size() + 1), 8); + } + if (changesMask[4]) + { + data.WritePackedGuid(OwnerGUID); + } + if (changesMask[3]) + { + data.WriteCString(Name); + } + } + } + + public override void ClearChangesMask() + { + ClearChangesMask(Houses); + ClearChangesMask(Managers); + ClearChangesMask(OwnerGUID); + ClearChangesMask(Name); + _changesMask.ResetAll(); + } + } + + public class PlayerHouseInfoComponentData() : HasChangesMask(10) // 12.0.7 + { + public DynamicUpdateField Field_8 = new(0, 1); + public DynamicUpdateField Houses = new(0, 2); + public DynamicUpdateField Field_88 = new(0, 3); + public DynamicUpdateField Field_C0 = new(0, 4); + public DynamicUpdateField Field_F8 = new(0, 5); + public UpdateField Charter = new(0, 6); + public UpdateField EditorMode = new(0, 7); + public UpdateField NeighborhoodOwnershipTransfer = new(0, 8); + public UpdateField CurrentHouse = new(0, 9); + + public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) + { + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Owner)) + { + data.WriteInt32(Field_8.Size()); + } + data.WriteInt32(Houses.Size()); + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Owner)) + { + data.WriteInt32(Field_88.Size()); + data.WriteInt32(Field_C0.Size()); + data.WriteInt32(Field_F8.Size()); + data.WriteUInt8(EditorMode); + data.WritePackedGuid(CurrentHouse); + for (int i = 0; i < Field_8.Size(); ++i) + data.WritePackedGuid(Field_8[i]); + } + for (int i = 0; i < Houses.Size(); ++i) + Houses[i].WriteCreate(data, owner, receiver); + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Owner)) + { + for (int i = 0; i < Field_88.Size(); ++i) + data.WritePackedGuid(Field_88[i]); + for (int i = 0; i < Field_C0.Size(); ++i) + data.WritePackedGuid(Field_C0[i]); + for (int i = 0; i < Field_F8.Size(); ++i) + data.WritePackedGuid(Field_F8[i]); + Charter.GetValue().WriteCreate(data, owner, receiver); + NeighborhoodOwnershipTransfer.GetValue().WriteCreate(data, owner, receiver); + } + } + + public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) + { + WriteUpdate(data, _changesMask, false, owner, receiver); // 12.0.7: filtrado por flag omitido (código muerto sin cablear) + } + + public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, Player owner, Player receiver) + { + data.WriteBits(changesMask.GetBlock(0), 10); + + if (changesMask[0]) + { + if (changesMask[1]) + { + if (!ignoreNestedChangesMask) + Field_8.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(Field_8.Size(), data); + } + if (changesMask[2]) + { + if (!ignoreNestedChangesMask) + Houses.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(Houses.Size(), data); + } + if (changesMask[3]) + { + if (!ignoreNestedChangesMask) + Field_88.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(Field_88.Size(), data); + } + if (changesMask[4]) + { + if (!ignoreNestedChangesMask) + Field_C0.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(Field_C0.Size(), data); + } + if (changesMask[5]) + { + if (!ignoreNestedChangesMask) + Field_F8.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(Field_F8.Size(), data); + } + } + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + for (int i = 0; i < Field_8.Size(); ++i) + { + if (Field_8.HasChanged(i) || ignoreNestedChangesMask) + { + data.WritePackedGuid(Field_8[i]); + } + } + } + if (changesMask[2]) + { + for (int i = 0; i < Houses.Size(); ++i) + { + if (Houses.HasChanged(i) || ignoreNestedChangesMask) + { + Houses[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[3]) + { + for (int i = 0; i < Field_88.Size(); ++i) + { + if (Field_88.HasChanged(i) || ignoreNestedChangesMask) + { + data.WritePackedGuid(Field_88[i]); + } + } + } + if (changesMask[4]) + { + for (int i = 0; i < Field_C0.Size(); ++i) + { + if (Field_C0.HasChanged(i) || ignoreNestedChangesMask) + { + data.WritePackedGuid(Field_C0[i]); + } + } + } + if (changesMask[5]) + { + for (int i = 0; i < Field_F8.Size(); ++i) + { + if (Field_F8.HasChanged(i) || ignoreNestedChangesMask) + { + data.WritePackedGuid(Field_F8[i]); + } + } + } + if (changesMask[7]) + { + data.WriteUInt8(EditorMode); + } + if (changesMask[9]) + { + data.WritePackedGuid(CurrentHouse); + } + if (changesMask[6]) + { + Charter.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + if (changesMask[8]) + { + NeighborhoodOwnershipTransfer.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + + public override void ClearChangesMask() + { + ClearChangesMask(Field_8); + ClearChangesMask(Houses); + ClearChangesMask(Field_88); + ClearChangesMask(Field_C0); + ClearChangesMask(Field_F8); + ClearChangesMask(Charter); + ClearChangesMask(EditorMode); + ClearChangesMask(NeighborhoodOwnershipTransfer); + ClearChangesMask(CurrentHouse); + _changesMask.ResetAll(); + } + } + + public class PlayerInitiativeComponentData() : HasChangesMask(6) // 12.0.7 + { + public DynamicUpdateField CompletedTasks = new(0, 1); + public DynamicUpdateField CompletedInitiatives = new(0, 2); + public UpdateField NeighborhoodGUID = new(0, 3); + public UpdateField InitiativeInfo = new(0, 4); + public DynamicUpdateField Houses = new(0, 5); // 12.0.7: SetUpdateField modelado como DynamicUpdateField + + public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) + { + data.WritePackedGuid(NeighborhoodGUID); + InitiativeInfo.GetValue().WriteCreate(data, owner, receiver); + data.WriteInt32(CompletedTasks.Size()); + data.WriteInt32(CompletedInitiatives.Size()); + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Owner)) + { + data.WriteInt32(Houses.Size()); + for (int i = 0; i < Houses.Size(); ++i) + data.WritePackedGuid(Houses[i]); + } + for (int i = 0; i < CompletedTasks.Size(); ++i) + CompletedTasks[i].WriteCreate(data, owner, receiver); + for (int i = 0; i < CompletedInitiatives.Size(); ++i) + CompletedInitiatives[i].WriteCreate(data, owner, receiver); + } + + public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) + { + WriteUpdate(data, _changesMask, false, owner, receiver); // 12.0.7: filtrado por flag omitido (código muerto sin cablear) + } + + public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, Player owner, Player receiver) + { + data.WriteBits(changesMask.GetBlock(0), 6); + + if (changesMask[0]) + { + if (changesMask[1]) + { + if (!ignoreNestedChangesMask) + CompletedTasks.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(CompletedTasks.Size(), data); + } + if (changesMask[2]) + { + if (!ignoreNestedChangesMask) + CompletedInitiatives.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(CompletedInitiatives.Size(), data); + } + } + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + for (int i = 0; i < CompletedTasks.Size(); ++i) + { + if (CompletedTasks.HasChanged(i) || ignoreNestedChangesMask) + { + CompletedTasks[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[2]) + { + for (int i = 0; i < CompletedInitiatives.Size(); ++i) + { + if (CompletedInitiatives.HasChanged(i) || ignoreNestedChangesMask) + { + CompletedInitiatives[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[3]) + { + data.WritePackedGuid(NeighborhoodGUID); + } + if (changesMask[4]) + { + InitiativeInfo.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + if (changesMask[5]) + { + if (!ignoreNestedChangesMask) + Houses.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(Houses.Size(), data); + for (int i = 0; i < Houses.Size(); ++i) + { + if (Houses.HasChanged(i) || ignoreNestedChangesMask) + { + data.WritePackedGuid(Houses[i]); + } + } + } + } + } + + public override void ClearChangesMask() + { + ClearChangesMask(CompletedTasks); + ClearChangesMask(CompletedInitiatives); + ClearChangesMask(NeighborhoodGUID); + ClearChangesMask(InitiativeInfo); + ClearChangesMask(Houses); + _changesMask.ResetAll(); + } + } + public class VendorData() : HasChangesMask(2) { public UpdateField Flags = new(0, 1); diff --git a/Source/Game/Entities/Object/Update/WowCSEntityDefinitions.cs b/Source/Game/Entities/Object/Update/WowCSEntityDefinitions.cs index 726de7849..1115565f7 100644 --- a/Source/Game/Entities/Object/Update/WowCSEntityDefinitions.cs +++ b/Source/Game/Entities/Object/Update/WowCSEntityDefinitions.cs @@ -8,33 +8,52 @@ namespace Game.Entities { public enum EntityFragment { - CGObject = 0, // UPDATEABLE, INDIRECT, - Tag_Item = 1, // TAG, - Tag_Container = 2, // TAG, - Tag_AzeriteEmpoweredItem = 3, // TAG, - Tag_AzeriteItem = 4, // TAG, - Tag_Unit = 5, // TAG, - Tag_Player = 6, // TAG, - Tag_GameObject = 7, // TAG, - Tag_DynamicObject = 8, // TAG, - Tag_Corpse = 9, // TAG, - Tag_AreaTrigger = 10, // TAG, - Tag_SceneObject = 11, // TAG, - Tag_Conversation = 12, // TAG, - Tag_AIGroup = 13, // TAG, - Tag_Scenario = 14, // TAG, - Tag_LootObject = 15, // TAG, - Tag_ActivePlayer = 16, // TAG, - Tag_ActiveClient_S = 17, // TAG, - Tag_ActiveObject_C = 18, // TAG, - Tag_VisibleObject_C = 19, // TAG, - Tag_UnitVehicle = 20, // TAG, - FEntityPosition = 112, - FEntityLocalMatrix = 113, - FEntityWorldMatrix = 114, - CActor = 115, // INDIRECT, - FVendor_C = 117, // UPDATEABLE, INDIRECT, - FMirroredObject_C = 119, + // 12.0.7 (build 68453): fragment IDs renumbered vs 11.2.5; these are written into every object create/update packet. + FEntityPosition = 1, + CGObject = 2, // UPDATEABLE, INDIRECT, + FTransportLink = 5, + FPlayerOwnershipLink = 13, + CActor = 15, // INDIRECT, + FVendor_C = 17, // UPDATEABLE, + FMirroredObject_C = 18, + FMeshObjectData_C = 19, // UPDATEABLE, + FHousingDecor_C = 20, // UPDATEABLE, + FHousingRoom_C = 21, // UPDATEABLE, + FHousingRoomComponentMesh_C = 22, // UPDATEABLE, + FHousingPlayerHouse_C = 23, // UPDATEABLE, + FJamHousingCornerstone_C = 27, // UPDATEABLE, + FHousingDecorActor_C = 28, + FNeighborhoodMirrorData_C = 30, // UPDATEABLE, + FMirroredPositionData_C = 31, // UPDATEABLE, + PlayerHouseInfoComponent_C = 32, // UPDATEABLE, INDIRECT, + FHousingStorage_C = 33, // UPDATEABLE, + FHousingFixture_C = 34, // UPDATEABLE, + PlayerInitiativeComponent_C = 37, // UPDATEABLE, INDIRECT, + Tag_Item = 200, // TAG, + Tag_Container = 201, // TAG, + Tag_AzeriteEmpoweredItem = 202, // TAG, + Tag_AzeriteItem = 203, // TAG, + Tag_Unit = 204, // TAG, + Tag_Player = 205, // TAG, + Tag_GameObject = 206, // TAG, + Tag_DynamicObject = 207, // TAG, + Tag_Corpse = 208, // TAG, + Tag_AreaTrigger = 209, // TAG, + Tag_SceneObject = 210, // TAG, + Tag_Conversation = 211, // TAG, + Tag_AIGroup = 212, // TAG, + Tag_Scenario = 213, // TAG, + Tag_LootObject = 214, // TAG, + Tag_ActivePlayer = 215, // TAG, + Tag_ActiveClient_S = 216, // TAG, + Tag_ActiveObject_C = 217, // TAG, + Tag_VisibleObject_C = 218, // TAG, + Tag_UnitVehicle = 219, // TAG, + Tag_HousingRoom = 220, // TAG, + Tag_MeshObject = 221, // TAG, + Tag_HouseExteriorPiece = 224, // TAG, + Tag_HouseExteriorRoot = 225, // TAG, + Tag_HousingDecorProxyGameObject = 226, // TAG, End = 255, } diff --git a/Source/Game/Entities/Object/WorldObject.cs b/Source/Game/Entities/Object/WorldObject.cs index b66aaccc2..f1726aaa0 100644 --- a/Source/Game/Entities/Object/WorldObject.cs +++ b/Source/Game/Entities/Object/WorldObject.cs @@ -39,7 +39,7 @@ namespace Game.Entities m_movementInfo = new MovementInfo(); m_updateFlag.Clear(); - m_entityFragments.Add((int)EntityFragment.CGObject, false); + m_entityFragments.Add(EntityFragment.CGObject, false); m_objectData = new ObjectFieldData(); @@ -313,6 +313,9 @@ namespace Game.Entities data.WriteBit(flags.SceneObject); data.WriteBit(flags.ActivePlayer); data.WriteBit(flags.Conversation); + data.WriteBit(flags.Room); // 12.0.7: new create-header bit + data.WriteBit(flags.Decor); // 12.0.7: new create-header bit + data.WriteBit(flags.MeshObject); // 12.0.7: new create-header bit data.FlushBits(); if (flags.MovementUpdate) @@ -4047,6 +4050,9 @@ namespace Game.Entities public bool SceneObject; public bool ActivePlayer; public bool Conversation; + public bool Room; // 12.0.7: new + public bool Decor; // 12.0.7: new + public bool MeshObject; // 12.0.7: new public void Clear() { @@ -4067,6 +4073,9 @@ namespace Game.Entities SceneObject = false; ActivePlayer = false; Conversation = false; + Room = false; + Decor = false; + MeshObject = false; } } diff --git a/Source/Game/Maps/Map.cs b/Source/Game/Maps/Map.cs index 2c7d57760..bfa69e758 100644 --- a/Source/Game/Maps/Map.cs +++ b/Source/Game/Maps/Map.cs @@ -3579,6 +3579,11 @@ namespace Game.Maps return _objectsStore.LookupByKey(guid) as SceneObject; } + public MeshObject GetMeshObject(ObjectGuid guid) + { + return _objectsStore.LookupByKey(guid) as MeshObject; + } + public Conversation GetConversation(ObjectGuid guid) { return (Conversation)_objectsStore.LookupByKey(guid); diff --git a/Source/Game/Spells/SpellInfo.cs b/Source/Game/Spells/SpellInfo.cs index f35b8d4fc..0bd9b4376 100644 --- a/Source/Game/Spells/SpellInfo.cs +++ b/Source/Game/Spells/SpellInfo.cs @@ -77,7 +77,7 @@ namespace Game.Spells { Scaling.MinScalingLevel = _scaling.MinScalingLevel; Scaling.MaxScalingLevel = _scaling.MaxScalingLevel; - Scaling.ScalesFromItemLevel = _scaling.ScalesFromItemLevel; + // 12.0.7: ScalesFromItemLevel removed from SpellScaling.db2 } // SpellAuraOptionsEntry diff --git a/sql/updates/auth/master/2026_07_12_00_auth.sql b/sql/updates/auth/master/2026_07_12_00_auth.sql new file mode 100644 index 000000000..5f8672d20 --- /dev/null +++ b/sql/updates/auth/master/2026_07_12_00_auth.sql @@ -0,0 +1,23 @@ +DELETE FROM `build_info` WHERE `build` IN (68453); +INSERT INTO `build_info` (`build`,`majorVersion`,`minorVersion`,`bugfixVersion`,`hotfixVersion`) VALUES +(68453,12,0,7,NULL); + +DELETE FROM `build_auth_key` WHERE `build`=68453 AND `platform`='Mac' AND `arch`='A64' AND `type`='WoW'; +DELETE FROM `build_auth_key` WHERE `build`=68453 AND `platform`='Mac' AND `arch`='A64' AND `type`='WoWC'; +DELETE FROM `build_auth_key` WHERE `build`=68453 AND `platform`='Mac' AND `arch`='x64' AND `type`='WoW'; +DELETE FROM `build_auth_key` WHERE `build`=68453 AND `platform`='Mac' AND `arch`='x64' AND `type`='WoWC'; +DELETE FROM `build_auth_key` WHERE `build`=68453 AND `platform`='Win' AND `arch`='A64' AND `type`='WoW'; +DELETE FROM `build_auth_key` WHERE `build`=68453 AND `platform`='Win' AND `arch`='x64' AND `type`='WoW'; +DELETE FROM `build_auth_key` WHERE `build`=68453 AND `platform`='Win' AND `arch`='x64' AND `type`='WoWC'; +INSERT INTO `build_auth_key` (`build`,`platform`,`arch`,`type`,`key`) VALUES +(68453,'Mac','A64','WoW',0xF75A30EE8680432BCCB9E82F126CAC2A), +(68453,'Mac','A64','WoWC',0x65D8638C8AEA812D943E19A713C95CE4), +(68453,'Mac','x64','WoW',0xB8825330648658BF39130E439174CE26), +(68453,'Mac','x64','WoWC',0x88477E39E83C2A3E032760163F982A67), +(68453,'Win','A64','WoW',0x2908E5C883715DFD6201B57B0E479067), +(68453,'Win','x64','WoW',0x4BE7186213EDE43354CB69744C7A41E3), +(68453,'Win','x64','WoWC',0x526540167D7E9433D46719CAF0785F10); + +UPDATE `realmlist` SET `gamebuild`=68453 WHERE `gamebuild`=63796; + +ALTER TABLE `realmlist` CHANGE `gamebuild` `gamebuild` int unsigned NOT NULL DEFAULT '68453';