aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/base/characters_database.sql255
-rw-r--r--sql/updates/characters/cata_classic/2024_03_13_00_characters.sql4
-rw-r--r--sql/updates/world/cata_classic/2024_03_13_00_world.sql20
-rw-r--r--src/server/database/Database/Implementation/CharacterDatabase.cpp35
-rw-r--r--src/server/database/Database/Implementation/CharacterDatabase.h22
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedCreature.cpp6
-rw-r--r--src/server/game/Achievements/CriteriaHandler.cpp119
-rw-r--r--src/server/game/AuctionHouse/AuctionHouseMgr.cpp2
-rw-r--r--src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp4
-rw-r--r--src/server/game/DataStores/DBCEnums.h34
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.cpp2
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTrigger.cpp15
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTrigger.h2
-rw-r--r--src/server/game/Entities/Conversation/Conversation.cpp13
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp8
-rw-r--r--src/server/game/Entities/DynamicObject/DynamicObject.cpp3
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp20
-rw-r--r--src/server/game/Entities/Item/AzeriteItem/AzeriteEmpoweredItem.cpp250
-rw-r--r--src/server/game/Entities/Item/AzeriteItem/AzeriteEmpoweredItem.h74
-rw-r--r--src/server/game/Entities/Item/AzeriteItem/AzeriteItem.cpp523
-rw-r--r--src/server/game/Entities/Item/AzeriteItem/AzeriteItem.h104
-rw-r--r--src/server/game/Entities/Item/Item.cpp121
-rw-r--r--src/server/game/Entities/Item/Item.h32
-rw-r--r--src/server/game/Entities/Item/ItemBonusMgr.cpp2
-rw-r--r--src/server/game/Entities/Object/Object.cpp14
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.cpp2820
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.h975
-rw-r--r--src/server/game/Entities/Player/CollectionMgr.cpp24
-rw-r--r--src/server/game/Entities/Player/Player.cpp369
-rw-r--r--src/server/game/Entities/Player/Player.h43
-rw-r--r--src/server/game/Entities/Unit/StatSystem.cpp15
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp48
-rw-r--r--src/server/game/Entities/Unit/Unit.h29
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp7
-rw-r--r--src/server/game/Handlers/AzeriteHandler.cpp245
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp32
-rw-r--r--src/server/game/Handlers/InspectHandler.cpp5
-rw-r--r--src/server/game/Handlers/LFGHandler.cpp2
-rw-r--r--src/server/game/Loot/Loot.cpp2
-rw-r--r--src/server/game/Quests/QuestDef.cpp25
-rw-r--r--src/server/game/Server/Packets/AllPackets.h1
-rw-r--r--src/server/game/Server/Packets/AzeritePackets.cpp71
-rw-r--r--src/server/game/Server/Packets/AzeritePackets.h110
-rw-r--r--src/server/game/Server/Packets/InspectPackets.cpp23
-rw-r--r--src/server/game/Server/Packets/MiscPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/MiscPackets.h1
-rw-r--r--src/server/game/Server/Packets/MovementPackets.cpp16
-rw-r--r--src/server/game/Server/Packets/MovementPackets.h13
-rw-r--r--src/server/game/Server/Packets/QueryPackets.cpp4
-rw-r--r--src/server/game/Server/Packets/QueryPackets.h4
-rw-r--r--src/server/game/Server/Packets/QuestPackets.cpp19
-rw-r--r--src/server/game/Server/Packets/QuestPackets.h9
-rw-r--r--src/server/game/Server/Packets/SystemPackets.cpp18
-rw-r--r--src/server/game/Server/Packets/SystemPackets.h4
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp8
-rw-r--r--src/server/game/Server/WorldSession.h15
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp69
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.h2
-rw-r--r--src/server/game/Spells/Spell.cpp43
-rw-r--r--src/server/game/Spells/Spell.h2
-rw-r--r--src/server/game/Spells/SpellEffects.cpp73
-rw-r--r--src/server/game/Spells/SpellInfo.cpp5
-rw-r--r--src/server/game/Tools/PlayerDump.cpp4
-rw-r--r--src/server/game/Tools/PlayerDump.h4
-rw-r--r--src/server/scripts/Commands/cs_lookup.cpp9
-rw-r--r--src/server/scripts/Spells/spell_warlock.cpp3
66 files changed, 1335 insertions, 5521 deletions
diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql
index f5806f977f6..3c767dcf735 100644
--- a/sql/base/characters_database.sql
+++ b/sql/base/characters_database.sql
@@ -888,138 +888,6 @@ LOCK TABLES `character_fishingsteps` WRITE;
UNLOCK TABLES;
--
--- Table structure for table `character_garrison`
---
-
-DROP TABLE IF EXISTS `character_garrison`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `character_garrison` (
- `guid` bigint unsigned NOT NULL,
- `siteLevelId` int unsigned NOT NULL DEFAULT '0',
- `followerActivationsRemainingToday` int unsigned NOT NULL DEFAULT '0',
- PRIMARY KEY (`guid`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `character_garrison`
---
-
-LOCK TABLES `character_garrison` WRITE;
-/*!40000 ALTER TABLE `character_garrison` DISABLE KEYS */;
-/*!40000 ALTER TABLE `character_garrison` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `character_garrison_blueprints`
---
-
-DROP TABLE IF EXISTS `character_garrison_blueprints`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `character_garrison_blueprints` (
- `guid` bigint unsigned NOT NULL,
- `buildingId` int unsigned NOT NULL DEFAULT '0',
- PRIMARY KEY (`guid`,`buildingId`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `character_garrison_blueprints`
---
-
-LOCK TABLES `character_garrison_blueprints` WRITE;
-/*!40000 ALTER TABLE `character_garrison_blueprints` DISABLE KEYS */;
-/*!40000 ALTER TABLE `character_garrison_blueprints` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `character_garrison_buildings`
---
-
-DROP TABLE IF EXISTS `character_garrison_buildings`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `character_garrison_buildings` (
- `guid` bigint unsigned NOT NULL,
- `plotInstanceId` int unsigned NOT NULL DEFAULT '0',
- `buildingId` int unsigned NOT NULL DEFAULT '0',
- `timeBuilt` bigint NOT NULL,
- `active` tinyint unsigned NOT NULL DEFAULT '0',
- PRIMARY KEY (`guid`,`plotInstanceId`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `character_garrison_buildings`
---
-
-LOCK TABLES `character_garrison_buildings` WRITE;
-/*!40000 ALTER TABLE `character_garrison_buildings` DISABLE KEYS */;
-/*!40000 ALTER TABLE `character_garrison_buildings` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `character_garrison_follower_abilities`
---
-
-DROP TABLE IF EXISTS `character_garrison_follower_abilities`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `character_garrison_follower_abilities` (
- `dbId` bigint unsigned NOT NULL,
- `abilityId` int unsigned NOT NULL,
- `slot` tinyint unsigned NOT NULL DEFAULT '0',
- PRIMARY KEY (`dbId`,`abilityId`,`slot`),
- CONSTRAINT `fk_foll_dbid` FOREIGN KEY (`dbId`) REFERENCES `character_garrison_followers` (`dbId`) ON DELETE CASCADE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `character_garrison_follower_abilities`
---
-
-LOCK TABLES `character_garrison_follower_abilities` WRITE;
-/*!40000 ALTER TABLE `character_garrison_follower_abilities` DISABLE KEYS */;
-/*!40000 ALTER TABLE `character_garrison_follower_abilities` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `character_garrison_followers`
---
-
-DROP TABLE IF EXISTS `character_garrison_followers`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `character_garrison_followers` (
- `dbId` bigint unsigned NOT NULL,
- `guid` bigint unsigned NOT NULL,
- `followerId` int unsigned NOT NULL,
- `quality` int unsigned NOT NULL DEFAULT '2',
- `level` int unsigned NOT NULL DEFAULT '90',
- `itemLevelWeapon` int unsigned NOT NULL DEFAULT '600',
- `itemLevelArmor` int unsigned NOT NULL DEFAULT '600',
- `xp` int unsigned NOT NULL DEFAULT '0',
- `currentBuilding` int unsigned NOT NULL DEFAULT '0',
- `currentMission` int unsigned NOT NULL DEFAULT '0',
- `status` int unsigned NOT NULL DEFAULT '0',
- PRIMARY KEY (`dbId`),
- UNIQUE KEY `idx_guid_id` (`guid`,`followerId`),
- CONSTRAINT `fk_foll_owner` FOREIGN KEY (`guid`) REFERENCES `characters` (`guid`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `character_garrison_followers`
---
-
-LOCK TABLES `character_garrison_followers` WRITE;
-/*!40000 ALTER TABLE `character_garrison_followers` DISABLE KEYS */;
-/*!40000 ALTER TABLE `character_garrison_followers` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
-- Table structure for table `character_gifts`
--
@@ -2778,125 +2646,6 @@ LOCK TABLES `item_instance_artifact_powers` WRITE;
UNLOCK TABLES;
--
--- Table structure for table `item_instance_azerite`
---
-
-DROP TABLE IF EXISTS `item_instance_azerite`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `item_instance_azerite` (
- `itemGuid` bigint unsigned NOT NULL,
- `xp` bigint unsigned NOT NULL DEFAULT '0',
- `level` int unsigned NOT NULL DEFAULT '1',
- `knowledgeLevel` int unsigned NOT NULL DEFAULT '0',
- `selectedAzeriteEssences1specId` int unsigned DEFAULT '0',
- `selectedAzeriteEssences1azeriteEssenceId1` int unsigned DEFAULT '0',
- `selectedAzeriteEssences1azeriteEssenceId2` int unsigned DEFAULT '0',
- `selectedAzeriteEssences1azeriteEssenceId3` int unsigned DEFAULT '0',
- `selectedAzeriteEssences1azeriteEssenceId4` int unsigned DEFAULT '0',
- `selectedAzeriteEssences2specId` int unsigned DEFAULT '0',
- `selectedAzeriteEssences2azeriteEssenceId1` int unsigned DEFAULT '0',
- `selectedAzeriteEssences2azeriteEssenceId2` int unsigned DEFAULT '0',
- `selectedAzeriteEssences2azeriteEssenceId3` int unsigned DEFAULT '0',
- `selectedAzeriteEssences2azeriteEssenceId4` int unsigned DEFAULT '0',
- `selectedAzeriteEssences3specId` int unsigned DEFAULT '0',
- `selectedAzeriteEssences3azeriteEssenceId1` int unsigned DEFAULT '0',
- `selectedAzeriteEssences3azeriteEssenceId2` int unsigned DEFAULT '0',
- `selectedAzeriteEssences3azeriteEssenceId3` int unsigned DEFAULT '0',
- `selectedAzeriteEssences3azeriteEssenceId4` int unsigned DEFAULT '0',
- `selectedAzeriteEssences4specId` int unsigned DEFAULT '0',
- `selectedAzeriteEssences4azeriteEssenceId1` int unsigned DEFAULT '0',
- `selectedAzeriteEssences4azeriteEssenceId2` int unsigned DEFAULT '0',
- `selectedAzeriteEssences4azeriteEssenceId3` int unsigned DEFAULT '0',
- `selectedAzeriteEssences4azeriteEssenceId4` int unsigned DEFAULT '0',
- PRIMARY KEY (`itemGuid`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `item_instance_azerite`
---
-
-LOCK TABLES `item_instance_azerite` WRITE;
-/*!40000 ALTER TABLE `item_instance_azerite` DISABLE KEYS */;
-/*!40000 ALTER TABLE `item_instance_azerite` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `item_instance_azerite_empowered`
---
-
-DROP TABLE IF EXISTS `item_instance_azerite_empowered`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `item_instance_azerite_empowered` (
- `itemGuid` bigint unsigned NOT NULL,
- `azeritePowerId1` int NOT NULL,
- `azeritePowerId2` int NOT NULL,
- `azeritePowerId3` int NOT NULL,
- `azeritePowerId4` int NOT NULL,
- `azeritePowerId5` int NOT NULL,
- PRIMARY KEY (`itemGuid`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `item_instance_azerite_empowered`
---
-
-LOCK TABLES `item_instance_azerite_empowered` WRITE;
-/*!40000 ALTER TABLE `item_instance_azerite_empowered` DISABLE KEYS */;
-/*!40000 ALTER TABLE `item_instance_azerite_empowered` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `item_instance_azerite_milestone_power`
---
-
-DROP TABLE IF EXISTS `item_instance_azerite_milestone_power`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `item_instance_azerite_milestone_power` (
- `itemGuid` bigint unsigned NOT NULL,
- `azeriteItemMilestonePowerId` int unsigned NOT NULL DEFAULT '0',
- PRIMARY KEY (`itemGuid`,`azeriteItemMilestonePowerId`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `item_instance_azerite_milestone_power`
---
-
-LOCK TABLES `item_instance_azerite_milestone_power` WRITE;
-/*!40000 ALTER TABLE `item_instance_azerite_milestone_power` DISABLE KEYS */;
-/*!40000 ALTER TABLE `item_instance_azerite_milestone_power` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
--- Table structure for table `item_instance_azerite_unlocked_essence`
---
-
-DROP TABLE IF EXISTS `item_instance_azerite_unlocked_essence`;
-/*!40101 SET @saved_cs_client = @@character_set_client */;
-/*!50503 SET character_set_client = utf8mb4 */;
-CREATE TABLE `item_instance_azerite_unlocked_essence` (
- `itemGuid` bigint unsigned NOT NULL,
- `azeriteEssenceId` int unsigned NOT NULL DEFAULT '0',
- `rank` int unsigned NOT NULL DEFAULT '0',
- PRIMARY KEY (`itemGuid`,`azeriteEssenceId`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-/*!40101 SET character_set_client = @saved_cs_client */;
-
---
--- Dumping data for table `item_instance_azerite_unlocked_essence`
---
-
-LOCK TABLES `item_instance_azerite_unlocked_essence` WRITE;
-/*!40000 ALTER TABLE `item_instance_azerite_unlocked_essence` DISABLE KEYS */;
-/*!40000 ALTER TABLE `item_instance_azerite_unlocked_essence` ENABLE KEYS */;
-UNLOCK TABLES;
-
---
-- Table structure for table `item_instance_gems`
--
@@ -3724,7 +3473,9 @@ INSERT INTO `updates` VALUES
('2023_11_02_00_characters.sql','1A76A843F204901C8598DA5682029E815477E427','ARCHIVED','2023-11-02 18:59:41',0),
('2023_11_09_00_characters.sql','1A3D7CA6890353DA55793FE8D925CC8C54965A69','ARCHIVED','2023-11-09 00:56:31',0),
('2023_11_15_00_characters.sql','441E0F17DE3E3945307AC400DF86FCDF06C61653','ARCHIVED','2023-11-15 00:53:47',0),
-('2024_02_08_00_characters.sql','743A11042AA17CDBD5F3D510D24509A10838DB5A','ARCHIVED','2024-02-08 00:56:26',0);
+('2024_02_08_00_characters.sql','743A11042AA17CDBD5F3D510D24509A10838DB5A','ARCHIVED','2024-02-08 00:56:26',0),
+('2024_03_12_00_characters.sql','C91A51EA86C26F3AB60445FE147B0E4B220716A0','ARCHIVED','2024-03-13 17:10:46',0),
+('2024_03_13_00_characters.sql','6360F50059E5DB1F248FA8A270CDC4788A03A0EC','ARCHIVED','2024-03-13 17:10:46',0);
/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
UNLOCK TABLES;
diff --git a/sql/updates/characters/cata_classic/2024_03_13_00_characters.sql b/sql/updates/characters/cata_classic/2024_03_13_00_characters.sql
new file mode 100644
index 00000000000..44a9fe2ac83
--- /dev/null
+++ b/sql/updates/characters/cata_classic/2024_03_13_00_characters.sql
@@ -0,0 +1,4 @@
+DROP TABLE IF EXISTS `item_instance_azerite`;
+DROP TABLE IF EXISTS `item_instance_azerite_milestone_power`;
+DROP TABLE IF EXISTS `item_instance_azerite_unlocked_essence`;
+DROP TABLE IF EXISTS `item_instance_azerite_empowered`; \ No newline at end of file
diff --git a/sql/updates/world/cata_classic/2024_03_13_00_world.sql b/sql/updates/world/cata_classic/2024_03_13_00_world.sql
new file mode 100644
index 00000000000..ed7f83d8e31
--- /dev/null
+++ b/sql/updates/world/cata_classic/2024_03_13_00_world.sql
@@ -0,0 +1,20 @@
+DELETE FROM `spell_script_names` WHERE `ScriptName` IN (
+ 'spell_item_blessed_portents',
+ 'spell_item_concentrated_mending',
+ 'spell_item_bracing_chill_proc',
+ 'spell_item_bracing_chill_search_jump_target',
+ 'spell_item_trample_the_weak',
+ 'spell_item_wracking_brilliance',
+ 'spell_item_orbital_precision',
+ 'spell_item_blur_of_talons',
+ 'spell_item_divine_right',
+ 'spell_item_blood_rite',
+ 'spell_item_tradewinds',
+ 'spell_item_bastion_of_might',
+ 'spell_item_echoing_blades',
+ 'spell_item_echoing_blades_damage',
+ 'spell_item_hour_of_reaping',
+ 'spell_item_conflict_wearer_on_stun_proc',
+ 'spell_item_conflict_rank3',
+ 'spell_item_heart_of_azeroth',
+ 'spell_item_corruption_grasping_tendrils'); \ No newline at end of file
diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp
index 4bff3f1796e..70941741186 100644
--- a/src/server/database/Database/Implementation/CharacterDatabase.cpp
+++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp
@@ -165,15 +165,6 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_SEL_CHARACTER_ACTIONS_SPEC, "SELECT button, action, type FROM character_action WHERE guid = ? AND spec = ? AND traitConfigId = ? ORDER BY button", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_MAILITEMS, "SELECT " SelectItemInstanceContent ", ii.owner_guid, m.id FROM mail_items mi INNER JOIN mail m ON mi.mail_id = m.id LEFT JOIN item_instance ii ON mi.item_guid = ii.guid LEFT JOIN item_instance_gems ig ON ii.guid = ig.itemGuid LEFT JOIN item_instance_transmog iit ON ii.guid = iit.itemGuid LEFT JOIN item_instance_modifiers im ON ii.guid = im.itemGuid WHERE m.receiver = ?", CONNECTION_BOTH);
PrepareStatement(CHAR_SEL_MAILITEMS_ARTIFACT, "SELECT a.itemGuid, a.xp, a.artifactAppearanceId, a.artifactTierId, ap.artifactPowerId, ap.purchasedRank FROM item_instance_artifact_powers ap LEFT JOIN item_instance_artifact a ON ap.itemGuid = a.itemGuid INNER JOIN mail_items mi ON a.itemGuid = mi.item_guid INNER JOIN mail m ON mi.mail_id = m.id WHERE m.receiver = ?", CONNECTION_BOTH);
- PrepareStatement(CHAR_SEL_MAILITEMS_AZERITE, "SELECT iz.itemGuid, iz.xp, iz.level, iz.knowledgeLevel, "
- "iz.selectedAzeriteEssences1specId, iz.selectedAzeriteEssences1azeriteEssenceId1, iz.selectedAzeriteEssences1azeriteEssenceId2, iz.selectedAzeriteEssences1azeriteEssenceId3, iz.selectedAzeriteEssences1azeriteEssenceId4, "
- "iz.selectedAzeriteEssences2specId, iz.selectedAzeriteEssences2azeriteEssenceId1, iz.selectedAzeriteEssences2azeriteEssenceId2, iz.selectedAzeriteEssences2azeriteEssenceId3, iz.selectedAzeriteEssences2azeriteEssenceId4, "
- "iz.selectedAzeriteEssences3specId, iz.selectedAzeriteEssences3azeriteEssenceId1, iz.selectedAzeriteEssences3azeriteEssenceId2, iz.selectedAzeriteEssences3azeriteEssenceId3, iz.selectedAzeriteEssences3azeriteEssenceId4, "
- "iz.selectedAzeriteEssences4specId, iz.selectedAzeriteEssences4azeriteEssenceId1, iz.selectedAzeriteEssences4azeriteEssenceId2, iz.selectedAzeriteEssences4azeriteEssenceId3, iz.selectedAzeriteEssences4azeriteEssenceId4 "
- "FROM item_instance_azerite iz INNER JOIN mail_items mi ON iz.itemGuid = mi.item_guid INNER JOIN mail m ON mi.mail_id = m.id WHERE m.receiver = ?", CONNECTION_BOTH);
- PrepareStatement(CHAR_SEL_MAILITEMS_AZERITE_MILESTONE_POWER, "SELECT iamp.itemGuid, iamp.azeriteItemMilestonePowerId FROM item_instance_azerite_milestone_power iamp INNER JOIN mail_items mi ON iamp.itemGuid = mi.item_guid INNER JOIN mail m ON mi.mail_id = m.id WHERE m.receiver = ?", CONNECTION_BOTH);
- PrepareStatement(CHAR_SEL_MAILITEMS_AZERITE_UNLOCKED_ESSENCE, "SELECT iaue.itemGuid, iaue.azeriteEssenceId, iaue.`rank` FROM item_instance_azerite_unlocked_essence iaue INNER JOIN mail_items mi ON iaue.itemGuid = mi.item_guid INNER JOIN mail m ON mi.mail_id = m.id WHERE m.receiver = ?", CONNECTION_BOTH);
- PrepareStatement(CHAR_SEL_MAILITEMS_AZERITE_EMPOWERED, "SELECT iae.itemGuid, iae.azeritePowerId1, iae.azeritePowerId2, iae.azeritePowerId3, iae.azeritePowerId4, iae.azeritePowerId5 FROM item_instance_azerite_empowered iae INNER JOIN mail_items mi ON iae.itemGuid = mi.item_guid INNER JOIN mail m ON mi.mail_id = m.id WHERE m.receiver = ?", CONNECTION_BOTH);
PrepareStatement(CHAR_SEL_AUCTION_ITEMS, "SELECT " SelectItemInstanceContent ", ii.owner_guid, ai.auctionId FROM auction_items ai INNER JOIN item_instance ii ON ai.itemGuid = ii.guid LEFT JOIN item_instance_gems ig ON ii.guid = ig.itemGuid LEFT JOIN item_instance_transmog iit ON ii.guid = iit.itemGuid LEFT JOIN item_instance_modifiers im ON ii.guid = im.itemGuid", CONNECTION_SYNCH);
PrepareStatement(CHAR_SEL_AUCTIONS, "SELECT id, auctionHouseId, owner, bidder, minBid, buyoutOrUnitPrice, deposit, bidAmount, startTime, endTime, serverFlags FROM auctionhouse", CONNECTION_SYNCH);
PrepareStatement(CHAR_INS_AUCTION_ITEMS, "INSERT INTO auction_items (auctionId, itemGuid) VALUES (?, ?)", CONNECTION_ASYNC);
@@ -225,32 +216,6 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_INS_ITEM_INSTANCE_MODIFIERS, "INSERT INTO item_instance_modifiers (itemGuid, fixedScalingLevel, artifactKnowledgeLevel) VALUES (?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_ITEM_INSTANCE_MODIFIERS, "DELETE FROM item_instance_modifiers WHERE itemGuid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_ITEM_INSTANCE_MODIFIERS_BY_OWNER, "DELETE im FROM item_instance_modifiers im LEFT JOIN item_instance ii ON im.itemGuid = ii.guid WHERE ii.owner_guid = ?", CONNECTION_ASYNC);
- PrepareStatement(CHAR_SEL_ITEM_INSTANCE_AZERITE, "SELECT iz.itemGuid, iz.xp, iz.level, iz.knowledgeLevel, "
- "iz.selectedAzeriteEssences1specId, iz.selectedAzeriteEssences1azeriteEssenceId1, iz.selectedAzeriteEssences1azeriteEssenceId2, iz.selectedAzeriteEssences1azeriteEssenceId3, iz.selectedAzeriteEssences1azeriteEssenceId4, "
- "iz.selectedAzeriteEssences2specId, iz.selectedAzeriteEssences2azeriteEssenceId1, iz.selectedAzeriteEssences2azeriteEssenceId2, iz.selectedAzeriteEssences2azeriteEssenceId3, iz.selectedAzeriteEssences2azeriteEssenceId4, "
- "iz.selectedAzeriteEssences3specId, iz.selectedAzeriteEssences3azeriteEssenceId1, iz.selectedAzeriteEssences3azeriteEssenceId2, iz.selectedAzeriteEssences3azeriteEssenceId3, iz.selectedAzeriteEssences3azeriteEssenceId4, "
- "iz.selectedAzeriteEssences4specId, iz.selectedAzeriteEssences4azeriteEssenceId1, iz.selectedAzeriteEssences4azeriteEssenceId2, iz.selectedAzeriteEssences4azeriteEssenceId3, iz.selectedAzeriteEssences4azeriteEssenceId4 "
- "FROM item_instance_azerite iz INNER JOIN character_inventory ci ON iz.itemGuid = ci.item WHERE ci.guid = ?", CONNECTION_ASYNC);
- PrepareStatement(CHAR_INS_ITEM_INSTANCE_AZERITE, "INSERT INTO item_instance_azerite (itemGuid, xp, level, knowledgeLevel, selectedAzeriteEssences1specId, selectedAzeriteEssences1azeriteEssenceId1, selectedAzeriteEssences1azeriteEssenceId2, selectedAzeriteEssences1azeriteEssenceId3, selectedAzeriteEssences1azeriteEssenceId4, "
- "selectedAzeriteEssences2specId, selectedAzeriteEssences2azeriteEssenceId1, selectedAzeriteEssences2azeriteEssenceId2, selectedAzeriteEssences2azeriteEssenceId3, selectedAzeriteEssences2azeriteEssenceId4, "
- "selectedAzeriteEssences3specId, selectedAzeriteEssences3azeriteEssenceId1, selectedAzeriteEssences3azeriteEssenceId2, selectedAzeriteEssences3azeriteEssenceId3, selectedAzeriteEssences3azeriteEssenceId4, "
- "selectedAzeriteEssences4specId, selectedAzeriteEssences4azeriteEssenceId1, selectedAzeriteEssences4azeriteEssenceId2, selectedAzeriteEssences4azeriteEssenceId3, selectedAzeriteEssences4azeriteEssenceId4) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
- PrepareStatement(CHAR_UPD_ITEM_INSTANCE_AZERITE_ON_LOAD, "UPDATE item_instance_azerite SET xp = ?, knowledgeLevel = ? WHERE itemGuid = ?", CONNECTION_ASYNC);
- PrepareStatement(CHAR_DEL_ITEM_INSTANCE_AZERITE, "DELETE FROM item_instance_azerite WHERE itemGuid = ?", CONNECTION_ASYNC);
- PrepareStatement(CHAR_DEL_ITEM_INSTANCE_AZERITE_BY_OWNER, "DELETE iz FROM item_instance_azerite iz LEFT JOIN item_instance ii ON iz.itemGuid = ii.guid WHERE ii.owner_guid = ?", CONNECTION_ASYNC);
- PrepareStatement(CHAR_SEL_ITEM_INSTANCE_AZERITE_MILESTONE_POWER, "SELECT iamp.itemGuid, iamp.azeriteItemMilestonePowerId FROM item_instance_azerite_milestone_power iamp INNER JOIN character_inventory ci ON iamp.itemGuid = ci.item WHERE ci.guid = ?", CONNECTION_ASYNC);
- PrepareStatement(CHAR_INS_ITEM_INSTANCE_AZERITE_MILESTONE_POWER, "INSERT INTO item_instance_azerite_milestone_power (itemGuid, azeriteItemMilestonePowerId) VALUES (?, ?)", CONNECTION_ASYNC);
- PrepareStatement(CHAR_DEL_ITEM_INSTANCE_AZERITE_MILESTONE_POWER, "DELETE FROM item_instance_azerite_milestone_power WHERE itemGuid = ?", CONNECTION_ASYNC);
- PrepareStatement(CHAR_DEL_ITEM_INSTANCE_AZERITE_MILESTONE_POWER_BY_OWNER, "DELETE iamp FROM item_instance_azerite_milestone_power iamp LEFT JOIN item_instance ii ON iamp.itemGuid = ii.guid WHERE ii.owner_guid = ?", CONNECTION_ASYNC);
- PrepareStatement(CHAR_SEL_ITEM_INSTANCE_AZERITE_UNLOCKED_ESSENCE, "SELECT iaue.itemGuid, iaue.azeriteEssenceId, iaue.`rank` FROM item_instance_azerite_unlocked_essence iaue INNER JOIN character_inventory ci ON iaue.itemGuid = ci.item WHERE ci.guid = ?", CONNECTION_ASYNC);
- PrepareStatement(CHAR_INS_ITEM_INSTANCE_AZERITE_UNLOCKED_ESSENCE, "INSERT INTO item_instance_azerite_unlocked_essence (itemGuid, azeriteEssenceId, `rank`) VALUES (?, ?, ?)", CONNECTION_ASYNC);
- PrepareStatement(CHAR_DEL_ITEM_INSTANCE_AZERITE_UNLOCKED_ESSENCE, "DELETE FROM item_instance_azerite_unlocked_essence WHERE itemGuid = ?", CONNECTION_ASYNC);
- PrepareStatement(CHAR_DEL_ITEM_INSTANCE_AZERITE_UNLOCKED_ESSENCE_BY_OWNER, "DELETE iaue FROM item_instance_azerite_unlocked_essence iaue LEFT JOIN item_instance ii ON iaue.itemGuid = ii.guid WHERE ii.owner_guid = ?", CONNECTION_ASYNC);
- PrepareStatement(CHAR_SEL_ITEM_INSTANCE_AZERITE_EMPOWERED, "SELECT iae.itemGuid, iae.azeritePowerId1, iae.azeritePowerId2, iae.azeritePowerId3, iae.azeritePowerId4, iae.azeritePowerId5 FROM item_instance_azerite_empowered iae INNER JOIN character_inventory ci ON iae.itemGuid = ci.item WHERE ci.guid = ?", CONNECTION_ASYNC);
- PrepareStatement(CHAR_INS_ITEM_INSTANCE_AZERITE_EMPOWERED, "INSERT INTO item_instance_azerite_empowered (itemGuid, azeritePowerId1, azeritePowerId2, azeritePowerId3, azeritePowerId4, azeritePowerId5) VALUES (?, ?, ?, ? ,? ,?)", CONNECTION_ASYNC);
- PrepareStatement(CHAR_UPD_ITEM_INSTANCE_AZERITE_EMPOWERED, "UPDATE item_instance_azerite_empowered SET azeritePowerId1 = ?, azeritePowerId2 = ?, azeritePowerId3 = ?, azeritePowerId4 = ?, azeritePowerId5 = ? WHERE itemGuid = ?", CONNECTION_ASYNC);
- PrepareStatement(CHAR_DEL_ITEM_INSTANCE_AZERITE_EMPOWERED, "DELETE FROM item_instance_azerite_empowered WHERE itemGuid = ?", CONNECTION_ASYNC);
- PrepareStatement(CHAR_DEL_ITEM_INSTANCE_AZERITE_EMPOWERED_BY_OWNER, "DELETE iae FROM item_instance_azerite_empowered iae LEFT JOIN item_instance ii ON iae.itemGuid = ii.guid WHERE ii.owner_guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_UPD_GIFT_OWNER, "UPDATE character_gifts SET guid = ? WHERE item_guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_GIFT, "DELETE FROM character_gifts WHERE item_guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_CHARACTER_GIFT_BY_ITEM, "SELECT entry, flags FROM character_gifts WHERE item_guid = ?", CONNECTION_ASYNC);
diff --git a/src/server/database/Database/Implementation/CharacterDatabase.h b/src/server/database/Database/Implementation/CharacterDatabase.h
index e9e985eed5c..dfdf5d27ad4 100644
--- a/src/server/database/Database/Implementation/CharacterDatabase.h
+++ b/src/server/database/Database/Implementation/CharacterDatabase.h
@@ -121,10 +121,6 @@ enum CharacterDatabaseStatements : uint32
CHAR_SEL_ACCOUNT_INSTANCELOCKTIMES,
CHAR_SEL_MAILITEMS,
CHAR_SEL_MAILITEMS_ARTIFACT,
- CHAR_SEL_MAILITEMS_AZERITE,
- CHAR_SEL_MAILITEMS_AZERITE_MILESTONE_POWER,
- CHAR_SEL_MAILITEMS_AZERITE_UNLOCKED_ESSENCE,
- CHAR_SEL_MAILITEMS_AZERITE_EMPOWERED,
CHAR_SEL_AUCTION_ITEMS,
CHAR_INS_AUCTION,
CHAR_DEL_AUCTION,
@@ -173,24 +169,6 @@ enum CharacterDatabaseStatements : uint32
CHAR_INS_ITEM_INSTANCE_MODIFIERS,
CHAR_DEL_ITEM_INSTANCE_MODIFIERS,
CHAR_DEL_ITEM_INSTANCE_MODIFIERS_BY_OWNER,
- CHAR_SEL_ITEM_INSTANCE_AZERITE,
- CHAR_INS_ITEM_INSTANCE_AZERITE,
- CHAR_UPD_ITEM_INSTANCE_AZERITE_ON_LOAD,
- CHAR_DEL_ITEM_INSTANCE_AZERITE,
- CHAR_DEL_ITEM_INSTANCE_AZERITE_BY_OWNER,
- CHAR_SEL_ITEM_INSTANCE_AZERITE_MILESTONE_POWER,
- CHAR_INS_ITEM_INSTANCE_AZERITE_MILESTONE_POWER,
- CHAR_DEL_ITEM_INSTANCE_AZERITE_MILESTONE_POWER,
- CHAR_DEL_ITEM_INSTANCE_AZERITE_MILESTONE_POWER_BY_OWNER,
- CHAR_SEL_ITEM_INSTANCE_AZERITE_UNLOCKED_ESSENCE,
- CHAR_INS_ITEM_INSTANCE_AZERITE_UNLOCKED_ESSENCE,
- CHAR_DEL_ITEM_INSTANCE_AZERITE_UNLOCKED_ESSENCE,
- CHAR_DEL_ITEM_INSTANCE_AZERITE_UNLOCKED_ESSENCE_BY_OWNER,
- CHAR_SEL_ITEM_INSTANCE_AZERITE_EMPOWERED,
- CHAR_INS_ITEM_INSTANCE_AZERITE_EMPOWERED,
- CHAR_UPD_ITEM_INSTANCE_AZERITE_EMPOWERED,
- CHAR_DEL_ITEM_INSTANCE_AZERITE_EMPOWERED,
- CHAR_DEL_ITEM_INSTANCE_AZERITE_EMPOWERED_BY_OWNER,
CHAR_UPD_GIFT_OWNER,
CHAR_DEL_GIFT,
CHAR_SEL_CHARACTER_GIFT_BY_ITEM,
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
index 576346aa47d..12f959949a0 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
@@ -341,9 +341,9 @@ SpellInfo const* ScriptedAI::SelectSpell(Unit* target, uint32 school, uint32 mec
if (!target)
return nullptr;
- // Silenced so we can't cast
- if (me->IsSilenced(school ? SpellSchoolMask(school) : SPELL_SCHOOL_MASK_MAGIC))
- return nullptr;
+ // Silenced so we can't cast @TODO: 4.4.0
+ // if (me->HasUnitFlag(UNIT_FLAG_SILENCED))
+ // return nullptr;
// Using the extended script system we first create a list of viable spells
SpellInfo const* apSpell[MAX_CREATURE_SPELLS];
diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp
index f04b1b5651f..66627e24b0a 100644
--- a/src/server/game/Achievements/CriteriaHandler.cpp
+++ b/src/server/game/Achievements/CriteriaHandler.cpp
@@ -17,7 +17,6 @@
#include "CriteriaHandler.h"
#include "ArenaTeamMgr.h"
-#include "AzeriteItem.h"
#include "Battleground.h"
#include "BattlePetMgr.h"
#include "CollectionMgr.h"
@@ -2746,12 +2745,7 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
break;
}
case ModifierTreeType::PlayerAzeriteLevelEqualOrGreaterThan: // 235
- {
- Item const* heartOfAzeroth = referencePlayer->GetItemByEntry(ITEM_ID_HEART_OF_AZEROTH, ItemSearchLocation::Everywhere);
- if (!heartOfAzeroth || heartOfAzeroth->ToAzeriteItem()->GetLevel() < reqValue)
- return false;
- break;
- }
+ return false;
case ModifierTreeType::PlayerIsOnQuestInQuestline: // 236
{
bool isOnQuest = false;
@@ -2923,33 +2917,10 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
if (!ref || !ref->IsUnit() || ref->ToUnit()->GetAuraCount(secondaryAsset) < reqValue)
return false;
break;
- case ModifierTreeType::PlayerHasAzeriteEssenceRankLessThan: // 259
- {
- if (Item const* heartOfAzeroth = referencePlayer->GetItemByEntry(ITEM_ID_HEART_OF_AZEROTH, ItemSearchLocation::Everywhere))
- if (AzeriteItem const* azeriteItem = heartOfAzeroth->ToAzeriteItem())
- for (UF::UnlockedAzeriteEssence const& essence : azeriteItem->m_azeriteItemData->UnlockedEssences)
- if (essence.AzeriteEssenceID == reqValue && essence.Rank < secondaryAsset)
- return true;
- return false;
- }
- case ModifierTreeType::PlayerHasAzeriteEssenceRankEqual: // 260
- {
- if (Item const* heartOfAzeroth = referencePlayer->GetItemByEntry(ITEM_ID_HEART_OF_AZEROTH, ItemSearchLocation::Everywhere))
- if (AzeriteItem const* azeriteItem = heartOfAzeroth->ToAzeriteItem())
- for (UF::UnlockedAzeriteEssence const& essence : azeriteItem->m_azeriteItemData->UnlockedEssences)
- if (essence.AzeriteEssenceID == reqValue && essence.Rank == secondaryAsset)
- return true;
- return false;
- }
- case ModifierTreeType::PlayerHasAzeriteEssenceRankGreaterThan: // 261
- {
- if (Item const* heartOfAzeroth = referencePlayer->GetItemByEntry(ITEM_ID_HEART_OF_AZEROTH, ItemSearchLocation::Everywhere))
- if (AzeriteItem const* azeriteItem = heartOfAzeroth->ToAzeriteItem())
- for (UF::UnlockedAzeriteEssence const& essence : azeriteItem->m_azeriteItemData->UnlockedEssences)
- if (essence.AzeriteEssenceID == reqValue && essence.Rank > secondaryAsset)
- return true;
+ case ModifierTreeType::PlayerHasAzeriteEssenceRankLessThan: // 259 NYI
+ case ModifierTreeType::PlayerHasAzeriteEssenceRankEqual: // 260 NYI
+ case ModifierTreeType::PlayerHasAzeriteEssenceRankGreaterThan: // 261 NYI
return false;
- }
case ModifierTreeType::PlayerHasAuraWithEffectIndex: // 262
if (!referencePlayer->GetAuraEffect(reqValue, secondaryAsset))
return false;
@@ -2974,21 +2945,8 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
return false;
break;
}
- case ModifierTreeType::PlayerHasAzeriteEssenceInSlotAtRankLessThan: // 266
- if (Item const* heartOfAzeroth = referencePlayer->GetItemByEntry(ITEM_ID_HEART_OF_AZEROTH, ItemSearchLocation::Everywhere))
- if (AzeriteItem const* azeriteItem = heartOfAzeroth->ToAzeriteItem())
- if (UF::SelectedAzeriteEssences const* selectedEssences = azeriteItem->GetSelectedAzeriteEssences())
- for (UF::UnlockedAzeriteEssence const& essence : azeriteItem->m_azeriteItemData->UnlockedEssences)
- if (essence.AzeriteEssenceID == selectedEssences->AzeriteEssenceID[reqValue] && essence.Rank < secondaryAsset)
- return true;
- return false;
- case ModifierTreeType::PlayerHasAzeriteEssenceInSlotAtRankGreaterThan: // 267
- if (Item const* heartOfAzeroth = referencePlayer->GetItemByEntry(ITEM_ID_HEART_OF_AZEROTH, ItemSearchLocation::Everywhere))
- if (AzeriteItem const* azeriteItem = heartOfAzeroth->ToAzeriteItem())
- if (UF::SelectedAzeriteEssences const* selectedEssences = azeriteItem->GetSelectedAzeriteEssences())
- for (UF::UnlockedAzeriteEssence const& essence : azeriteItem->m_azeriteItemData->UnlockedEssences)
- if (essence.AzeriteEssenceID == selectedEssences->AzeriteEssenceID[reqValue] && essence.Rank > secondaryAsset)
- return true;
+ case ModifierTreeType::PlayerHasAzeriteEssenceInSlotAtRankLessThan: // 266 NYI
+ case ModifierTreeType::PlayerHasAzeriteEssenceInSlotAtRankGreaterThan: // 267 NYI
return false;
case ModifierTreeType::PlayerLevelWithinContentTuning: // 268
{
@@ -3041,11 +2999,8 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
}
case ModifierTreeType::PlayerLevelWithinOrAboveLevelRange: // 274 NYI
case ModifierTreeType::TargetLevelWithinOrAboveLevelRange: // 275 NYI
+ case ModifierTreeType::MaxJailersTowerLevelEqualOrGreaterThan: // 276 NYI
return false;
- case ModifierTreeType::MaxJailersTowerLevelEqualOrGreaterThan: // 276
- if (referencePlayer->m_activePlayerData->JailersTowerLevelMax < int32(reqValue))
- return false;
- break;
case ModifierTreeType::GroupedWithRaFRecruit: // 277
{
Group const* group = referencePlayer->GetGroup();
@@ -3087,11 +3042,8 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
case ModifierTreeType::HonorGainSource: // 285 NYI
case ModifierTreeType::JailersTowerActiveFloorIndexEqualOrGreaterThan: // 286 NYI
case ModifierTreeType::JailersTowerActiveFloorDifficultyEqualOrGreaterThan: // 287 NYI
+ case ModifierTreeType::PlayerCovenant: // 288 NYI
return false;
- case ModifierTreeType::PlayerCovenant: // 288
- if (referencePlayer->m_playerData->CovenantID != int32(reqValue))
- return false;
- break;
case ModifierTreeType::HasTimeEventPassed: // 289
{
time_t eventTimestamp = GameTime::GetGameTime();
@@ -3129,11 +3081,7 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
break;
}
case ModifierTreeType::GarrisonHasPermanentTalent: // 290 NYI
- return false;
- case ModifierTreeType::HasActiveSoulbind: // 291
- if (referencePlayer->m_playerData->SoulbindID != int32(reqValue))
- return false;
- break;
+ case ModifierTreeType::HasActiveSoulbind: // 291 NYI
case ModifierTreeType::HasMemorizedSpell: // 292 NYI
return false;
case ModifierTreeType::PlayerHasAPACSubscriptionReward_2020: // 293
@@ -3160,31 +3108,12 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
return true;
return false;
}
- case ModifierTreeType::PlayerIsInChromieTime: // 300
- if (referencePlayer->m_activePlayerData->UiChromieTimeExpansionID != int32(reqValue))
- return false;
- break;
- case ModifierTreeType::PlayerIsInAnyChromieTime: // 301
- if (referencePlayer->m_activePlayerData->UiChromieTimeExpansionID == 0)
- return false;
- break;
- case ModifierTreeType::ItemIsAzeriteArmor: // 302
- if (!sDB2Manager.GetAzeriteEmpoweredItem(miscValue1))
- return false;
- break;
- case ModifierTreeType::PlayerHasRuneforgePower: // 303
- {
- uint32 block = reqValue / 32;
- if (block >= referencePlayer->m_activePlayerData->RuneforgePowers.size())
- return false;
-
- uint32 bit = reqValue % 32;
- return referencePlayer->m_activePlayerData->RuneforgePowers[block] & (1 << bit);
- }
- case ModifierTreeType::PlayerInChromieTimeForScaling: // 304
- if (!(referencePlayer->m_playerData->CtrOptions->ContentTuningConditionMask & 1))
- return false;
- break;
+ case ModifierTreeType::PlayerIsInChromieTime: // 300 NYI
+ case ModifierTreeType::PlayerIsInAnyChromieTime: // 301 NYI
+ case ModifierTreeType::ItemIsAzeriteArmor: // 302 NYI
+ case ModifierTreeType::PlayerHasRuneforgePower: // 303 NYI
+ case ModifierTreeType::PlayerInChromieTimeForScaling: // 304 NYI
+ return false;
case ModifierTreeType::IsRaFRecruit: // 305
if (!referencePlayer->GetSession()->GetRecruiterId())
return false;
@@ -3236,16 +3165,8 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
return false;
break;
}
- case ModifierTreeType::PlayerHasWeeklyRewardsAvailable: // 313
- if (!*referencePlayer->m_activePlayerData->WeeklyRewardsPeriodSinceOrigin)
- return false;
- break;
- case ModifierTreeType::TargetCovenant: // 314
- if (!ref || !ref->IsPlayer())
- return false;
- if (ref->ToPlayer()->m_playerData->CovenantID != int32(reqValue))
- return false;
- break;
+ case ModifierTreeType::PlayerHasWeeklyRewardsAvailable: // 313 NYI
+ case ModifierTreeType::TargetCovenant: // 314 NYI
case ModifierTreeType::PlayerHasTBCCollectorsEdition: // 315
case ModifierTreeType::PlayerHasWrathCollectorsEdition: // 316
return false;
@@ -3404,10 +3325,8 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
if (GameTime::GetGameTime() - referencePlayer->m_playerData->LogoutTime < int64(reqValue) * DAY)
return false;
break;
- case ModifierTreeType::PlayerHasPerksProgramPendingReward: // 350
- if (!referencePlayer->m_activePlayerData->HasPerksProgramPendingReward)
- return false;
- break;
+ case ModifierTreeType::PlayerHasPerksProgramPendingReward: // 350 NYI
+ return false;
case ModifierTreeType::PlayerCanUseItem: // 351
{
ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(reqValue);
diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
index a89cca92af9..9de88514704 100644
--- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
+++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
@@ -72,7 +72,7 @@ AuctionsBucketKey AuctionsBucketKey::ForItem(Item const* item)
return
{
item->GetEntry(),
- uint16(Item::GetItemLevel(itemTemplate, *item->GetBonus(), 0, item->GetRequiredLevel(), 0, 0, 0, false, 0)),
+ uint16(Item::GetItemLevel(itemTemplate, *item->GetBonus(), 0, item->GetRequiredLevel(), 0, 0, 0, false)),
uint16(item->GetModifier(ITEM_MODIFIER_BATTLE_PET_SPECIES_ID)),
uint16(item->GetBonus()->Suffix)
};
diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp b/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp
index 95e98c53a6f..c96281ca7b9 100644
--- a/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp
+++ b/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp
@@ -169,7 +169,7 @@ bool AuctionBotBuyer::RollBuyChance(BuyerItemInfo const* ahInfo, AuctionPosting
Item const* item = auction->Items[0];
float itemBuyPrice = float(auction->BuyoutOrUnitPrice);
float itemPrice;
- if (uint32 itemSellPrice = item->GetSellPrice(item->GetTemplate(), item->GetQuality(), item->GetItemLevel(item->GetTemplate(), *item->GetBonus(), 0, 0, 0, 0, 0, false, 0)))
+ if (uint32 itemSellPrice = item->GetSellPrice(item->GetTemplate(), item->GetQuality(), item->GetItemLevel(item->GetTemplate(), *item->GetBonus(), 0, 0, 0, 0, 0, false)))
itemPrice = float(itemSellPrice);
else
itemPrice = float(GetVendorPrice(item->GetQuality()));
@@ -214,7 +214,7 @@ bool AuctionBotBuyer::RollBidChance(BuyerItemInfo const* ahInfo, AuctionPosting
Item const* item = auction->Items[0];
float itemBidPrice = float(bidPrice);
float itemPrice;
- if (uint32 itemSellPrice = item->GetSellPrice(item->GetTemplate(), item->GetQuality(), item->GetItemLevel(item->GetTemplate(), *item->GetBonus(), 0, 0, 0, 0, 0, false, 0)))
+ if (uint32 itemSellPrice = item->GetSellPrice(item->GetTemplate(), item->GetQuality(), item->GetItemLevel(item->GetTemplate(), *item->GetBonus(), 0, 0, 0, 0, 0, false)))
itemPrice = float(itemSellPrice);
else
itemPrice = float(GetVendorPrice(item->GetQuality()));
diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h
index fa15667504d..ce4cbaedb0c 100644
--- a/src/server/game/DataStores/DBCEnums.h
+++ b/src/server/game/DataStores/DBCEnums.h
@@ -1553,7 +1553,7 @@ enum class ModifierTreeType : int32
PlayerMainhandWeaponType = 232, // Player has main hand weapon of type "{$Weapon Type}"
PlayerOffhandWeaponType = 233, // Player has off-hand weapon of type "{$Weapon Type}"
PlayerPvpTier = 234, // Player is in PvP tier {PvpTier}
- PlayerAzeriteLevelEqualOrGreaterThan = 235, // Players' Azerite Item is at or above level "{#Azerite Level}"
+ PlayerAzeriteLevelEqualOrGreaterThan = 235, /*NYI*/ // Players' Azerite Item is at or above level "{#Azerite Level}"
PlayerIsOnQuestInQuestline = 236, // Player is on quest in questline "{QuestLine}"
PlayerIsQnQuestLinkedToScheduledWorldStateGroup = 237, // Player is on quest associated with current progressive unlock group "{ScheduledWorldStateGroup}"
PlayerIsInRaidGroup = 238, // Player is in raid group
@@ -1577,15 +1577,15 @@ enum class ModifierTreeType : int32
TargetAuraStackCountEqual = 256, // Target has exactly {#Stacks} stacks of aura "{Spell}"
PlayerAuraStackCountEqualOrGreaterThan = 257, // Player has at least {#Stacks} stacks of aura "{Spell}"
TargetAuraStackCountEqualOrGreaterThan = 258, // Target has at least {#Stacks} stacks of aura "{Spell}"
- PlayerHasAzeriteEssenceRankLessThan = 259, // Player has Azerite Essence {AzeriteEssence} at less than rank {#rank}
- PlayerHasAzeriteEssenceRankEqual = 260, // Player has Azerite Essence {AzeriteEssence} at rank {#rank}
- PlayerHasAzeriteEssenceRankGreaterThan = 261, // Player has Azerite Essence {AzeriteEssence} at greater than rank {#rank}
+ PlayerHasAzeriteEssenceRankLessThan = 259, /*NYI*/ // Player has Azerite Essence {AzeriteEssence} at less than rank {#rank}
+ PlayerHasAzeriteEssenceRankEqual = 260, /*NYI*/ // Player has Azerite Essence {AzeriteEssence} at rank {#rank}
+ PlayerHasAzeriteEssenceRankGreaterThan = 261, /*NYI*/ // Player has Azerite Essence {AzeriteEssence} at greater than rank {#rank}
PlayerHasAuraWithEffectIndex = 262, // Player has Aura {Spell} with Effect Index {#index} active
PlayerLootSpecializationMatchesRole = 263, // Player loot specialization matches role {@LFG_ROLE}
PlayerIsAtMaxExpansionLevel = 264, // Player is at max expansion level
TransmogSource = 265, // Transmog Source is "{@TRANSMOG_SOURCE}"
- PlayerHasAzeriteEssenceInSlotAtRankLessThan = 266, // Player has Azerite Essence in slot {@AZERITE_ESSENCE_SLOT} at less than rank {#rank}
- PlayerHasAzeriteEssenceInSlotAtRankGreaterThan = 267, // Player has Azerite Essence in slot {@AZERITE_ESSENCE_SLOT} at greater than rank {#rank}
+ PlayerHasAzeriteEssenceInSlotAtRankLessThan = 266, /*NYI*/ // Player has Azerite Essence in slot {@AZERITE_ESSENCE_SLOT} at less than rank {#rank}
+ PlayerHasAzeriteEssenceInSlotAtRankGreaterThan = 267, /*NYI*/ // Player has Azerite Essence in slot {@AZERITE_ESSENCE_SLOT} at greater than rank {#rank}
PlayerLevelWithinContentTuning = 268, // Player has level within Content Tuning {ContentTuning}
TargetLevelWithinContentTuning = 269, // Target has level within Content Tuning {ContentTuning}
PlayerIsScenarioInitiator = 270, /*NYI*/ // Player is Scenario Initiator
@@ -1594,7 +1594,7 @@ enum class ModifierTreeType : int32
TargetLevelWithinOrAboveContentTuning = 273, // Target has level within or above Content Tuning {ContentTuning}
PlayerLevelWithinOrAboveLevelRange = 274, /*NYI*/ // Player has level within or above Level Range {LevelRange}
TargetLevelWithinOrAboveLevelRange = 275, /*NYI*/ // Target has level within or above Level Range {LevelRange}
- MaxJailersTowerLevelEqualOrGreaterThan = 276, // Max Jailers Tower Level Atleast {#Level}
+ MaxJailersTowerLevelEqualOrGreaterThan = 276, /*NYI*/ // Max Jailers Tower Level Atleast {#Level}
GroupedWithRaFRecruit = 277, // Grouped With Recruit
GroupedWithRaFRecruiter = 278, // Grouped with Recruiter
PlayerSpecialization = 279, // Specialization is "{ChrSpecialization}"
@@ -1606,10 +1606,10 @@ enum class ModifierTreeType : int32
HonorGainSource = 285, /*NYI*/ // Player gained honor from source {@SPECIAL_MISC_HONOR_GAIN_SOURCE}
JailersTowerActiveFloorIndexEqualOrGreaterThan = 286, /*NYI*/ // Active Floor Index Atleast {#Level}
JailersTowerActiveFloorDifficultyEqualOrGreaterThan = 287, /*NYI*/ // Active Floor Difficulty Atleast {#Level}
- PlayerCovenant = 288, // Player is member of covenant "{Covenant}"
+ PlayerCovenant = 288, /*NYI*/ // Player is member of covenant "{Covenant}"
HasTimeEventPassed = 289, // Has time event "{TimeEvent}" passed
GarrisonHasPermanentTalent = 290, /*NYI*/ // Garrison has permanent talent "{GarrTalent}"
- HasActiveSoulbind = 291, // Has Active Soulbind "{Soulbind}"
+ HasActiveSoulbind = 291, /*NYI*/ // Has Active Soulbind "{Soulbind}"
HasMemorizedSpell = 292, /*NYI*/ // Has memorized spell "{Spell}"
PlayerHasAPACSubscriptionReward_2020 = 293, // Player has APAC Subscription Reward 2020
PlayerHasTBCCDEWarpStalker_Mount = 294, // Player has TBCC:DE Warp Stalker Mount
@@ -1618,11 +1618,11 @@ enum class ModifierTreeType : int32
PlayerHasImpInABallToySubscriptionReward = 297, // Player has Imp in a Ball Toy Subscription Reward
PlayerIsInAreaGroup = 298, // Player is in area group "{AreaGroup}"
TargetIsInAreaGroup = 299, // Target is in area group "{AreaGroup}"
- PlayerIsInChromieTime = 300, // Player has selected Chromie Time ID "{UiChromieTimeExpansionInfo}"
- PlayerIsInAnyChromieTime = 301, // Player has selected ANY Chromie Time ID
- ItemIsAzeriteArmor = 302, // Item is Azerite Armor
- PlayerHasRuneforgePower = 303, // Player Has Runeforge Power "{RuneforgeLegendaryAbility}"
- PlayerInChromieTimeForScaling = 304, // Player is Chromie Time for Scaling
+ PlayerIsInChromieTime = 300, /*NYI*/ // Player has selected Chromie Time ID "{UiChromieTimeExpansionInfo}"
+ PlayerIsInAnyChromieTime = 301, /*NYI*/ // Player has selected ANY Chromie Time ID
+ ItemIsAzeriteArmor = 302, /*NYI*/ // Item is Azerite Armor
+ PlayerHasRuneforgePower = 303, /*NYI*/ // Player Has Runeforge Power "{RuneforgeLegendaryAbility}"
+ PlayerInChromieTimeForScaling = 304, /*NYI*/ // Player is Chromie Time for Scaling
IsRaFRecruit = 305, // Is RAF recruit
AllPlayersInGroupHaveAchievement = 306, // All Players In Group Have Achievement "{Achievement}"
PlayerHasSoulbindConduitRankEqualOrGreaterThan = 307, /*NYI*/ // Player has Conduit "{SoulbindConduit}" at Rank {#Rank} or Higher
@@ -1631,8 +1631,8 @@ enum class ModifierTreeType : int32
PlayerIsRestrictedAccount = 310, // Player is a Restricted Account
PlayerIsFlying = 311, // Player is flying
PlayerScenarioIsLastStep = 312, // Player is on the last step of a Scenario
- PlayerHasWeeklyRewardsAvailable = 313, // Player has weekly rewards available
- TargetCovenant = 314, // Target is member of covenant "{Covenant}"
+ PlayerHasWeeklyRewardsAvailable = 313, /*NYI*/ // Player has weekly rewards available
+ TargetCovenant = 314, /*NYI*/ // Target is member of covenant "{Covenant}"
PlayerHasTBCCollectorsEdition = 315, // Player has TBC Collector's Edition
PlayerHasWrathCollectorsEdition = 316, // Player has Wrath Collector's Edition
GarrisonTalentResearchedAndAtRankEqualOrGreaterThan = 317, /*NYI*/ // Garrison has talent "{GarrTalent}" researched and active at or above {#Rank}
@@ -1665,7 +1665,7 @@ enum class ModifierTreeType : int32
CraftingOrderSkillLineAbility = 347, /*NYI*/
CraftingOrderProfession = 348, /*NYI*/ // ProfessionEnum
- PlayerHasPerksProgramPendingReward = 350,
+ PlayerHasPerksProgramPendingReward = 350, /*NYI*/
PlayerCanUseItem = 351, // Player can use item {#Item}
PlayerSummonedBattlePetSpecies = 352,
PlayerSummonedBattlePetIsMaxLevel = 353,
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp
index 642367f1128..94e596acff9 100644
--- a/src/server/game/DungeonFinding/LFGMgr.cpp
+++ b/src/server/game/DungeonFinding/LFGMgr.cpp
@@ -1759,7 +1759,7 @@ LfgLockMap LFGMgr::GetLockedDungeons(ObjectGuid guid)
return LFG_LOCKSTATUS_RAID_LOCKED;
if (sInstanceLockMgr.FindActiveInstanceLock(guid, { dungeon->map, Difficulty(dungeon->difficulty) }))
return LFG_LOCKSTATUS_RAID_LOCKED;
- if (Optional<ContentTuningLevels> levels = sDB2Manager.GetContentTuningData(dungeon->contentTuningId, player->m_playerData->CtrOptions->ContentTuningConditionMask))
+ if (Optional<ContentTuningLevels> levels = sDB2Manager.GetContentTuningData(dungeon->contentTuningId, 0 /*player->m_playerData->CtrOptions->ContentTuningConditionMask*/))
{
if (levels->MinLevel > level)
return LFG_LOCKSTATUS_TOO_LOW_LEVEL;
diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
index bce08be9666..d1ead16c014 100644
--- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
+++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp
@@ -145,8 +145,7 @@ bool AreaTrigger::Create(AreaTriggerCreatePropertiesId areaTriggerCreateProperti
SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::SpellID), spellInfo->Id);
if (spellInfo)
SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::SpellForVisuals), spellInfo->Id);
- SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::SpellVisual).ModifyValue(&UF::SpellCastVisual::SpellXSpellVisualID), spellVisual.SpellXSpellVisualID);
- SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::SpellVisual).ModifyValue(&UF::SpellCastVisual::ScriptVisualID), spellVisual.ScriptVisualID);
+ SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::SpellXSpellVisualID), spellVisual.SpellXSpellVisualID);
if (!IsStaticSpawn())
SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::TimeToTargetScale), GetCreateProperties()->TimeToTargetScale != 0 ? GetCreateProperties()->TimeToTargetScale : *m_areaTriggerData->Duration);
SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::BoundsRadius2D), GetCreateProperties()->Shape.GetMaxSearchRadius());
@@ -710,9 +709,7 @@ void AreaTrigger::SearchUnitInCylinder(std::vector<Unit*>& targetList)
float scale = CalcCurrentScale();
float radius = G3D::lerp(_shape.CylinderDatas.Radius, _shape.CylinderDatas.RadiusTarget, progress) * scale;
- float height = G3D::lerp(_shape.CylinderDatas.Height, _shape.CylinderDatas.HeightTarget, progress);
- if (!m_areaTriggerData->HeightIgnoresScale)
- height *= scale;
+ float height = G3D::lerp(_shape.CylinderDatas.Height, _shape.CylinderDatas.HeightTarget, progress) * scale;
float minZ = GetPositionZ() - height;
float maxZ = GetPositionZ() + height;
@@ -736,9 +733,7 @@ void AreaTrigger::SearchUnitInDisk(std::vector<Unit*>& targetList)
float scale = CalcCurrentScale();
float innerRadius = G3D::lerp(_shape.DiskDatas.InnerRadius, _shape.DiskDatas.InnerRadiusTarget, progress) * scale;
float outerRadius = G3D::lerp(_shape.DiskDatas.OuterRadius, _shape.DiskDatas.OuterRadiusTarget, progress) * scale;
- float height = G3D::lerp(_shape.DiskDatas.Height, _shape.DiskDatas.HeightTarget, progress);
- if (!m_areaTriggerData->HeightIgnoresScale)
- height *= scale;
+ float height = G3D::lerp(_shape.DiskDatas.Height, _shape.DiskDatas.HeightTarget, progress) * scale;
float minZ = GetPositionZ() - height;
float maxZ = GetPositionZ() + height;
@@ -819,10 +814,6 @@ void AreaTrigger::HandleUnitEnterExit(std::vector<Unit*> const& newTargetList)
_ai->OnUnitExit(leavingUnit);
}
}
-
- SetUpdateFieldValue(m_values.ModifyValue(&AreaTrigger::m_areaTriggerData).ModifyValue(&UF::AreaTriggerData::NumUnitsInside), _insideUnits.size());
- SetUpdateFieldValue(m_values.ModifyValue(&AreaTrigger::m_areaTriggerData).ModifyValue(&UF::AreaTriggerData::NumPlayersInside),
- std::count_if(_insideUnits.begin(), _insideUnits.end(), [](ObjectGuid const& guid) { return guid.IsPlayer(); }));
}
AreaTriggerTemplate const* AreaTrigger::GetTemplate() const
diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.h b/src/server/game/Entities/AreaTrigger/AreaTrigger.h
index 02f69ce40cf..0fa519631d5 100644
--- a/src/server/game/Entities/AreaTrigger/AreaTrigger.h
+++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.h
@@ -100,8 +100,6 @@ class TC_GAME_API AreaTrigger final : public WorldObject, public GridObject<Area
AuraEffect const* GetAuraEffect() const { return _aurEff; }
uint32 GetTimeSinceCreated() const { return _timeSinceCreated; }
- void SetHeightIgnoresScale(bool heightIgnoresScale) { SetUpdateFieldValue(m_values.ModifyValue(&AreaTrigger::m_areaTriggerData).ModifyValue(&UF::AreaTriggerData::HeightIgnoresScale), heightIgnoresScale); }
-
void SetOverrideScaleCurve(float overrideScale);
void SetOverrideScaleCurve(std::array<DBCPosition2D, 2> const& points, Optional<uint32> startTimeOffset = {}, CurveInterpolationMode interpolation = CurveInterpolationMode::Linear);
void ClearOverrideScaleCurve();
diff --git a/src/server/game/Entities/Conversation/Conversation.cpp b/src/server/game/Entities/Conversation/Conversation.cpp
index 11801ca0763..2de2e747b28 100644
--- a/src/server/game/Entities/Conversation/Conversation.cpp
+++ b/src/server/game/Entities/Conversation/Conversation.cpp
@@ -69,15 +69,7 @@ void Conversation::Update(uint32 diff)
sScriptMgr->OnConversationUpdate(this, diff);
if (GetDuration() > Milliseconds(diff))
- {
_duration -= Milliseconds(diff);
- DoWithSuppressingObjectUpdates([&]()
- {
- // Only sent in CreateObject
- ApplyModUpdateFieldValue(m_values.ModifyValue(&Conversation::m_conversationData).ModifyValue(&UF::ConversationData::Progress), int32(diff), true);
- const_cast<UF::ConversationData&>(*m_conversationData).ClearChanged(&UF::ConversationData::Progress);
- });
- }
else
{
Remove(); // expired
@@ -200,7 +192,6 @@ void Conversation::Create(ObjectGuid::LowType lowGuid, uint32 conversationEntry,
lineField.UiCameraID = line->UiCameraID;
lineField.ActorIndex = line->ActorIdx;
lineField.Flags = line->Flags;
- lineField.ChatType = line->ChatType;
for (LocaleConstant locale = LOCALE_enUS; locale < TOTAL_LOCALES; locale = LocaleConstant(locale + 1))
{
@@ -236,7 +227,7 @@ bool Conversation::Start()
for (UF::ConversationLine const& line : *m_conversationData->Lines)
{
UF::ConversationActor const* actor = line.ActorIndex < m_conversationData->Actors.size() ? &m_conversationData->Actors[line.ActorIndex] : nullptr;
- if (!actor || (!actor->CreatureID && actor->ActorGUID.IsEmpty() && !actor->NoActorObject))
+ if (!actor || (!actor->CreatureID && actor->ActorGUID.IsEmpty()))
{
TC_LOG_ERROR("entities.conversation", "Failed to create conversation (Id: {}) due to missing actor (Idx: {}).", GetEntry(), line.ActorIndex);
return false;
@@ -265,7 +256,6 @@ void Conversation::AddActor(int32 actorId, uint32 actorIdx, ObjectGuid const& ac
SetUpdateFieldValue(actorField.ModifyValue(&UF::ConversationActor::ActorGUID), actorGuid);
SetUpdateFieldValue(actorField.ModifyValue(&UF::ConversationActor::Id), actorId);
SetUpdateFieldValue(actorField.ModifyValue(&UF::ConversationActor::Type), AsUnderlyingType(ConversationActorType::WorldObject));
- SetUpdateFieldValue(actorField.ModifyValue(&UF::ConversationActor::NoActorObject), 0);
}
void Conversation::AddActor(int32 actorId, uint32 actorIdx, ConversationActorType type, uint32 creatureId, uint32 creatureDisplayInfoId)
@@ -276,7 +266,6 @@ void Conversation::AddActor(int32 actorId, uint32 actorIdx, ConversationActorTyp
SetUpdateFieldValue(actorField.ModifyValue(&UF::ConversationActor::ActorGUID), ObjectGuid::Empty);
SetUpdateFieldValue(actorField.ModifyValue(&UF::ConversationActor::Id), actorId);
SetUpdateFieldValue(actorField.ModifyValue(&UF::ConversationActor::Type), AsUnderlyingType(type));
- SetUpdateFieldValue(actorField.ModifyValue(&UF::ConversationActor::NoActorObject), type == ConversationActorType::WorldObject ? 1 : 0);
}
Milliseconds const* Conversation::GetLineStartTime(LocaleConstant locale, int32 lineId) const
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index c122e51800a..cc8e3fc7757 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -645,15 +645,7 @@ bool Creature::UpdateEntry(uint32 entry, CreatureData const* data /*= nullptr*/,
// checked and error show at loading templates
if (FactionTemplateEntry const* factionTemplate = sFactionTemplateStore.LookupEntry(cInfo->faction))
- {
SetPvP((factionTemplate->Flags & FACTION_TEMPLATE_FLAG_PVP) != 0);
- if (IsTaxi())
- {
- uint32 taxiNodesId = sObjectMgr->GetNearestTaxiNode(GetPositionX(), GetPositionY(), GetPositionZ(), GetMapId(),
- factionTemplate->FactionGroup & FACTION_MASK_ALLIANCE ? ALLIANCE : HORDE);
- SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::TaxiNodesID), taxiNodesId);
- }
- }
// updates spell bars for vehicles and set player's faction - should be called here, to overwrite faction that is set from the new template
if (IsVehicle())
diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.cpp b/src/server/game/Entities/DynamicObject/DynamicObject.cpp
index f4023c18c68..d19a1f012d7 100644
--- a/src/server/game/Entities/DynamicObject/DynamicObject.cpp
+++ b/src/server/game/Entities/DynamicObject/DynamicObject.cpp
@@ -102,8 +102,7 @@ bool DynamicObject::CreateDynamicObject(ObjectGuid::LowType guidlow, Unit* caste
auto dynamicObjectData = m_values.ModifyValue(&DynamicObject::m_dynamicObjectData);
SetUpdateFieldValue(dynamicObjectData.ModifyValue(&UF::DynamicObjectData::Caster), caster->GetGUID());
SetUpdateFieldValue(dynamicObjectData.ModifyValue(&UF::DynamicObjectData::Type), type);
- SetUpdateFieldValue(dynamicObjectData.ModifyValue(&UF::DynamicObjectData::SpellVisual).ModifyValue(&UF::SpellCastVisual::SpellXSpellVisualID), spellVisual.SpellXSpellVisualID);
- SetUpdateFieldValue(dynamicObjectData.ModifyValue(&UF::DynamicObjectData::SpellVisual).ModifyValue(&UF::SpellCastVisual::ScriptVisualID), spellVisual.ScriptVisualID);
+ SetUpdateFieldValue(dynamicObjectData.ModifyValue(&UF::DynamicObjectData::SpellXSpellVisualID), spellVisual.SpellXSpellVisualID);
SetUpdateFieldValue(dynamicObjectData.ModifyValue(&UF::DynamicObjectData::SpellID), spell->Id);
SetUpdateFieldValue(dynamicObjectData.ModifyValue(&UF::DynamicObjectData::Radius), radius);
SetUpdateFieldValue(dynamicObjectData.ModifyValue(&UF::DynamicObjectData::CastTime), GameTime::GetGameTimeMS());
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index 5816b1c3707..e6b894b0d32 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -17,8 +17,6 @@
#include "GameObject.h"
#include "ArtifactPackets.h"
-#include "AzeriteItem.h"
-#include "AzeritePackets.h"
#include "Battleground.h"
#include "BattlegroundPackets.h"
#include "CellImpl.h"
@@ -2183,7 +2181,7 @@ uint8 GameObject::GetLevelForTarget(WorldObject const* target) const
if (GetGoType() == GAMEOBJECT_TYPE_TRAP)
{
if (Player const* player = target->ToPlayer())
- if (Optional<ContentTuningLevels> userLevels = sDB2Manager.GetContentTuningData(GetGOInfo()->ContentTuningId, player->m_playerData->CtrOptions->ContentTuningConditionMask))
+ if (Optional<ContentTuningLevels> userLevels = sDB2Manager.GetContentTuningData(GetGOInfo()->ContentTuningId, 0 /*player->m_playerData->CtrOptions->ContentTuningConditionMask*/))
return uint8(std::clamp<int16>(player->GetLevel(), userLevels->MinLevel, userLevels->MaxLevel));
if (Unit const* targetUnit = target->ToUnit())
@@ -3073,11 +3071,11 @@ void GameObject::Use(Unit* user)
return;
//required lvl checks!
- if (Optional<ContentTuningLevels> userLevels = sDB2Manager.GetContentTuningData(info->ContentTuningId, player->m_playerData->CtrOptions->ContentTuningConditionMask))
+ if (Optional<ContentTuningLevels> userLevels = sDB2Manager.GetContentTuningData(info->ContentTuningId, 0 /*player->m_playerData->CtrOptions->ContentTuningConditionMask*/))
if (player->GetLevel() < userLevels->MaxLevel)
return;
- if (Optional<ContentTuningLevels> targetLevels = sDB2Manager.GetContentTuningData(info->ContentTuningId, targetPlayer->m_playerData->CtrOptions->ContentTuningConditionMask))
+ if (Optional<ContentTuningLevels> targetLevels = sDB2Manager.GetContentTuningData(info->ContentTuningId, 0 /*player->m_playerData->CtrOptions->ContentTuningConditionMask*/))
if (targetPlayer->GetLevel() < targetLevels->MaxLevel)
return;
@@ -3323,18 +3321,6 @@ void GameObject::Use(Unit* user)
player->SendDirectMessage(openArtifactForge.Write());
break;
}
- case 2: // Heart Forge
- {
- Item const* item = player->GetItemByEntry(ITEM_ID_HEART_OF_AZEROTH, ItemSearchLocation::Everywhere);
- if (!item)
- return;
-
- WorldPackets::GameObject::GameObjectInteraction openHeartForge;
- openHeartForge.ObjectGUID = GetGUID();
- openHeartForge.InteractionType = PlayerInteractionType::AzeriteForge;
- player->SendDirectMessage(openHeartForge.Write());
- break;
- }
default:
break;
}
diff --git a/src/server/game/Entities/Item/AzeriteItem/AzeriteEmpoweredItem.cpp b/src/server/game/Entities/Item/AzeriteItem/AzeriteEmpoweredItem.cpp
deleted file mode 100644
index c755a372a1d..00000000000
--- a/src/server/game/Entities/Item/AzeriteItem/AzeriteEmpoweredItem.cpp
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "AzeriteEmpoweredItem.h"
-#include "DatabaseEnv.h"
-#include "DB2Stores.h"
-#include "Player.h"
-#include "UpdateData.h"
-
-AzeriteEmpoweredItem::AzeriteEmpoweredItem()
-{
- m_objectType |= TYPEMASK_AZERITE_EMPOWERED_ITEM;
- m_objectTypeId = TYPEID_AZERITE_EMPOWERED_ITEM;
-
- m_azeritePowers = nullptr;
- m_maxTier = 0;
-}
-
-bool AzeriteEmpoweredItem::Create(ObjectGuid::LowType guidlow, uint32 itemId, ItemContext context, Player const* owner)
-{
- if (!Item::Create(guidlow, itemId, context, owner))
- return false;
-
- InitAzeritePowerData();
- return true;
-}
-
-void AzeriteEmpoweredItem::SaveToDB(CharacterDatabaseTransaction trans)
-{
- CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE_AZERITE_EMPOWERED);
- stmt->setUInt64(0, GetGUID().GetCounter());
- trans->Append(stmt);
-
- switch (GetState())
- {
- case ITEM_NEW:
- case ITEM_CHANGED:
- {
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ITEM_INSTANCE_AZERITE_EMPOWERED);
- stmt->setUInt64(0, GetGUID().GetCounter());
- for (uint32 i = 0; i < MAX_AZERITE_EMPOWERED_TIER; ++i)
- stmt->setInt32(1 + i, m_azeriteEmpoweredItemData->Selections[i]);
-
- trans->Append(stmt);
- break;
- }
- case ITEM_REMOVED:
- default:
- break;
- }
-
- Item::SaveToDB(trans);
-}
-
-void AzeriteEmpoweredItem::LoadAzeriteEmpoweredItemData(Player const* owner, AzeriteEmpoweredItemData& azeriteEmpoweredItem)
-{
- InitAzeritePowerData();
- bool needSave = false;
- if (m_azeritePowers)
- {
- for (int32 i = MAX_AZERITE_EMPOWERED_TIER; --i >= 0; )
- {
- int32 selection = azeriteEmpoweredItem.SelectedAzeritePowers[i];
- if (GetTierForAzeritePower(Classes(owner->GetClass()), selection) != i)
- {
- needSave = true;
- break;
- }
-
- SetSelectedAzeritePower(i, selection);
- }
- }
- else
- needSave = true;
-
- if (needSave)
- {
- CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ITEM_INSTANCE_AZERITE_EMPOWERED);
- for (uint32 i = 0; i < MAX_AZERITE_EMPOWERED_TIER; ++i)
- stmt->setInt32(i, m_azeriteEmpoweredItemData->Selections[i]);
-
- stmt->setUInt64(5, GetGUID().GetCounter());
- CharacterDatabase.Execute(stmt);
- }
-}
-
-void AzeriteEmpoweredItem::DeleteFromDB(CharacterDatabaseTransaction trans, ObjectGuid::LowType itemGuid)
-{
- CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE_AZERITE_EMPOWERED);
- stmt->setUInt64(0, itemGuid);
- CharacterDatabase.ExecuteOrAppend(trans, stmt);
-}
-
-void AzeriteEmpoweredItem::DeleteFromDB(CharacterDatabaseTransaction trans)
-{
- AzeriteEmpoweredItem::DeleteFromDB(trans, GetGUID().GetCounter());
- Item::DeleteFromDB(trans);
-}
-
-uint32 AzeriteEmpoweredItem::GetRequiredAzeriteLevelForTier(uint32 tier) const
-{
- return sDB2Manager.GetRequiredAzeriteLevelForAzeritePowerTier(_bonusData.AzeriteTierUnlockSetId, GetContext(), tier);
-}
-
-int32 AzeriteEmpoweredItem::GetTierForAzeritePower(Classes playerClass, int32 azeritePowerId) const
-{
- auto azeritePowerItr = std::find_if(m_azeritePowers->begin(), m_azeritePowers->end(), [&](AzeritePowerSetMemberEntry const* power)
- {
- return power->AzeritePowerID == azeritePowerId && power->Class == playerClass;
- });
- if (azeritePowerItr != m_azeritePowers->end())
- return (*azeritePowerItr)->Tier;
-
- return MAX_AZERITE_EMPOWERED_TIER;
-}
-
-void AzeriteEmpoweredItem::SetSelectedAzeritePower(int32 tier, int32 azeritePowerId)
-{
- SetUpdateFieldValue(m_values.ModifyValue(&AzeriteEmpoweredItem::m_azeriteEmpoweredItemData).ModifyValue(&UF::AzeriteEmpoweredItemData::Selections, uint32(tier)), azeritePowerId);
-
- // Not added to UF::ItemData::BonusListIDs, client fakes it on its own too
- _bonusData.AddBonusList(sAzeritePowerStore.AssertEntry(azeritePowerId)->ItemBonusListID);
-}
-
-void AzeriteEmpoweredItem::ClearSelectedAzeritePowers()
-{
- for (uint32 i = 0; i < MAX_AZERITE_EMPOWERED_TIER; ++i)
- SetUpdateFieldValue(m_values.ModifyValue(&AzeriteEmpoweredItem::m_azeriteEmpoweredItemData).ModifyValue(&UF::AzeriteEmpoweredItemData::Selections, i), 0);
-
- _bonusData.Initialize(GetTemplate());
- for (int32 bonusListID : GetBonusListIDs())
- _bonusData.AddBonusList(bonusListID);
-}
-
-int64 AzeriteEmpoweredItem::GetRespecCost() const
-{
- if (Player const* owner = GetOwner())
- return int64(float(GOLD) * sDB2Manager.GetCurveValueAt(CURVE_ID_AZERITE_EMPOWERED_ITEM_RESPEC_COST, float(owner->GetNumRespecs())));
-
- return MAX_MONEY_AMOUNT + 1;
-}
-
-void AzeriteEmpoweredItem::BuildValuesCreate(ByteBuffer* data, Player const* target) const
-{
- UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
- std::size_t sizePos = data->wpos();
- *data << uint32(0);
- *data << uint8(flags);
- m_objectData->WriteCreate(*data, flags, this, target);
- m_itemData->WriteCreate(*data, flags, this, target);
- m_azeriteEmpoweredItemData->WriteCreate(*data, flags, this, target);
- data->put<uint32>(sizePos, data->wpos() - sizePos - 4);
-}
-
-void AzeriteEmpoweredItem::BuildValuesUpdate(ByteBuffer* data, Player const* target) const
-{
- UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
- std::size_t sizePos = data->wpos();
- *data << uint32(0);
- *data << uint32(m_values.GetChangedObjectTypeMask());
-
- if (m_values.HasChanged(TYPEID_OBJECT))
- m_objectData->WriteUpdate(*data, flags, this, target);
-
- if (m_values.HasChanged(TYPEID_ITEM))
- m_itemData->WriteUpdate(*data, flags, this, target);
-
- if (m_values.HasChanged(TYPEID_AZERITE_EMPOWERED_ITEM))
- m_azeriteEmpoweredItemData->WriteUpdate(*data, flags, this, target);
-
- data->put<uint32>(sizePos, data->wpos() - sizePos - 4);
-}
-
-void AzeriteEmpoweredItem::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::Mask const& requestedObjectMask,
- UF::ItemData::Mask const& requestedItemMask, UF::AzeriteEmpoweredItemData::Mask const& requestedAzeriteEmpoweredItemMask, Player const* target) const
-{
- UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
- UpdateMask<NUM_CLIENT_OBJECT_TYPES> valuesMask;
- if (requestedObjectMask.IsAnySet())
- valuesMask.Set(TYPEID_OBJECT);
-
- UF::ItemData::Mask itemMask = requestedItemMask;
- m_itemData->FilterDisallowedFieldsMaskForFlag(itemMask, flags);
- if (itemMask.IsAnySet())
- valuesMask.Set(TYPEID_ITEM);
-
- if (requestedAzeriteEmpoweredItemMask.IsAnySet())
- valuesMask.Set(TYPEID_AZERITE_EMPOWERED_ITEM);
-
- ByteBuffer& buffer = PrepareValuesUpdateBuffer(data);
- std::size_t sizePos = buffer.wpos();
- buffer << uint32(0);
- buffer << uint32(valuesMask.GetBlock(0));
-
- if (valuesMask[TYPEID_OBJECT])
- m_objectData->WriteUpdate(buffer, requestedObjectMask, true, this, target);
-
- if (valuesMask[TYPEID_ITEM])
- m_itemData->WriteUpdate(buffer, itemMask, true, this, target);
-
- if (valuesMask[TYPEID_AZERITE_EMPOWERED_ITEM])
- m_azeriteEmpoweredItemData->WriteUpdate(buffer, requestedAzeriteEmpoweredItemMask, true, this, target);
-
- buffer.put<uint32>(sizePos, buffer.wpos() - sizePos - 4);
-
- data->AddUpdateBlock();
-}
-
-void AzeriteEmpoweredItem::ValuesUpdateForPlayerWithMaskSender::operator()(Player const* player) const
-{
- UpdateData udata(player->GetMapId());
- WorldPacket packet;
-
- Owner->BuildValuesUpdateForPlayerWithMask(&udata, ObjectMask.GetChangesMask(), ItemMask.GetChangesMask(), AzeriteEmpoweredItemMask.GetChangesMask(), player);
-
- udata.BuildPacket(&packet);
- player->SendDirectMessage(&packet);
-}
-
-void AzeriteEmpoweredItem::ClearUpdateMask(bool remove)
-{
- m_values.ClearChangesMask(&AzeriteEmpoweredItem::m_azeriteEmpoweredItemData);
- Item::ClearUpdateMask(remove);
-}
-
-void AzeriteEmpoweredItem::InitAzeritePowerData()
-{
- m_azeritePowers = sDB2Manager.GetAzeritePowers(GetEntry());
- if (m_azeritePowers)
- {
- m_maxTier = (*std::max_element(m_azeritePowers->begin(), m_azeritePowers->end(), [](AzeritePowerSetMemberEntry const* a1, AzeritePowerSetMemberEntry const* a2)
- {
- return a1->Tier < a2->Tier;
- }))->Tier;
- }
-}
diff --git a/src/server/game/Entities/Item/AzeriteItem/AzeriteEmpoweredItem.h b/src/server/game/Entities/Item/AzeriteItem/AzeriteEmpoweredItem.h
deleted file mode 100644
index 0fb82e6e09e..00000000000
--- a/src/server/game/Entities/Item/AzeriteItem/AzeriteEmpoweredItem.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef AzeriteEmpoweredItem_h__
-#define AzeriteEmpoweredItem_h__
-
-#include "Item.h"
-
-class TC_GAME_API AzeriteEmpoweredItem final : public Item
-{
-public:
- AzeriteEmpoweredItem();
-
- bool Create(ObjectGuid::LowType guidlow, uint32 itemId, ItemContext context, Player const* owner) override;
-
- void SaveToDB(CharacterDatabaseTransaction trans) override;
- void LoadAzeriteEmpoweredItemData(Player const* owner, AzeriteEmpoweredItemData& azeriteEmpoweredItem);
- static void DeleteFromDB(CharacterDatabaseTransaction trans, ObjectGuid::LowType itemGuid);
- void DeleteFromDB(CharacterDatabaseTransaction trans) override;
-
- uint32 GetRequiredAzeriteLevelForTier(uint32 tier) const;
- int32 GetTierForAzeritePower(Classes playerClass, int32 azeritePowerId) const;
- int32 GetMaxAzeritePowerTier() const { return m_maxTier; }
-
- uint32 GetSelectedAzeritePower(int32 tier) const { return uint32(m_azeriteEmpoweredItemData->Selections[uint32(tier)]); }
- void SetSelectedAzeritePower(int32 tier, int32 azeritePowerId);
- void ClearSelectedAzeritePowers();
-
- int64 GetRespecCost() const;
-
-protected:
- void BuildValuesCreate(ByteBuffer* data, Player const* target) const override;
- void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override;
- void ClearUpdateMask(bool remove) override;
-
-public:
- void BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::Mask const& requestedObjectMask, UF::ItemData::Mask const& requestedItemMask,
- UF::AzeriteEmpoweredItemData::Mask const& requestedAzeriteEmpoweredItemMask, Player const* target) const;
-
- struct ValuesUpdateForPlayerWithMaskSender // sender compatible with MessageDistDeliverer
- {
- explicit ValuesUpdateForPlayerWithMaskSender(AzeriteEmpoweredItem const* owner) : Owner(owner) { }
-
- AzeriteEmpoweredItem const* Owner;
- UF::ObjectData::Base ObjectMask;
- UF::ItemData::Base ItemMask;
- UF::AzeriteEmpoweredItemData::Base AzeriteEmpoweredItemMask;
-
- void operator()(Player const* player) const;
- };
-
- UF::UpdateField<UF::AzeriteEmpoweredItemData, 0, TYPEID_AZERITE_EMPOWERED_ITEM> m_azeriteEmpoweredItemData;
-
-private:
- void InitAzeritePowerData();
- std::vector<AzeritePowerSetMemberEntry const*> const* m_azeritePowers;
- int32 m_maxTier;
-};
-
-#endif // AzeriteEmpoweredItem_h__
diff --git a/src/server/game/Entities/Item/AzeriteItem/AzeriteItem.cpp b/src/server/game/Entities/Item/AzeriteItem/AzeriteItem.cpp
deleted file mode 100644
index 6f76852e93a..00000000000
--- a/src/server/game/Entities/Item/AzeriteItem/AzeriteItem.cpp
+++ /dev/null
@@ -1,523 +0,0 @@
-/*
- * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "AzeriteItem.h"
-#include "AzeritePackets.h"
-#include "ConditionMgr.h"
-#include "DB2Stores.h"
-#include "DatabaseEnv.h"
-#include "GameObject.h"
-#include "GameTime.h"
-#include "Player.h"
-#include "UpdateData.h"
-#include <boost/date_time/gregorian/gregorian_types.hpp>
-#include <boost/date_time/posix_time/conversion.hpp>
-
-AzeriteItem::AzeriteItem() : Item()
-{
- m_objectType |= TYPEMASK_AZERITE_ITEM;
- m_objectTypeId = TYPEID_AZERITE_ITEM;
-
- SetUpdateFieldValue(m_values.ModifyValue(&AzeriteItem::m_azeriteItemData).ModifyValue(&UF::AzeriteItemData::DEBUGknowledgeWeek), -1);
-}
-
-bool AzeriteItem::Create(ObjectGuid::LowType guidlow, uint32 itemId, ItemContext context, Player const* owner)
-{
- if (!Item::Create(guidlow, itemId, context, owner))
- return false;
-
- SetUpdateFieldValue(m_values.ModifyValue(&AzeriteItem::m_azeriteItemData).ModifyValue(&UF::AzeriteItemData::Level), 1);
- SetUpdateFieldValue(m_values.ModifyValue(&AzeriteItem::m_azeriteItemData).ModifyValue(&UF::AzeriteItemData::KnowledgeLevel), GetCurrentKnowledgeLevel());
- UnlockDefaultMilestones();
- return true;
-}
-
-void AzeriteItem::SaveToDB(CharacterDatabaseTransaction trans)
-{
- CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE_AZERITE);
- stmt->setUInt64(0, GetGUID().GetCounter());
- trans->Append(stmt);
-
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE_AZERITE_MILESTONE_POWER);
- stmt->setUInt64(0, GetGUID().GetCounter());
- trans->Append(stmt);
-
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE_AZERITE_UNLOCKED_ESSENCE);
- stmt->setUInt64(0, GetGUID().GetCounter());
- trans->Append(stmt);
-
- switch (GetState())
- {
- case ITEM_NEW:
- case ITEM_CHANGED:
- {
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ITEM_INSTANCE_AZERITE);
- stmt->setUInt64(0, GetGUID().GetCounter());
- stmt->setUInt64(1, m_azeriteItemData->Xp);
- stmt->setUInt32(2, m_azeriteItemData->Level);
- stmt->setUInt32(3, m_azeriteItemData->KnowledgeLevel);
- std::size_t specIndex = 0;
- for (; specIndex < m_azeriteItemData->SelectedEssences.size(); ++specIndex)
- {
- stmt->setUInt32(4 + specIndex * 5, m_azeriteItemData->SelectedEssences[specIndex].SpecializationID);
- for (std::size_t j = 0; j < MAX_AZERITE_ESSENCE_SLOT; ++j)
- stmt->setUInt32(5 + specIndex * 5 + j, m_azeriteItemData->SelectedEssences[specIndex].AzeriteEssenceID[j]);
- }
- for (; specIndex < 4; ++specIndex)
- {
- stmt->setUInt32(4 + specIndex * 5, 0);
- for (std::size_t j = 0; j < MAX_AZERITE_ESSENCE_SLOT; ++j)
- stmt->setUInt32(5 + specIndex * 5 + j, 0);
- }
-
- trans->Append(stmt);
-
- for (uint32 azeriteItemMilestonePowerId : m_azeriteItemData->UnlockedEssenceMilestones)
- {
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ITEM_INSTANCE_AZERITE_MILESTONE_POWER);
- stmt->setUInt64(0, GetGUID().GetCounter());
- stmt->setUInt32(1, azeriteItemMilestonePowerId);
- trans->Append(stmt);
- }
-
- for (UF::UnlockedAzeriteEssence const& azeriteEssence : m_azeriteItemData->UnlockedEssences)
- {
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ITEM_INSTANCE_AZERITE_UNLOCKED_ESSENCE);
- stmt->setUInt64(0, GetGUID().GetCounter());
- stmt->setUInt32(1, azeriteEssence.AzeriteEssenceID);
- stmt->setUInt32(2, azeriteEssence.Rank);
- trans->Append(stmt);
- }
- break;
- }
- case ITEM_REMOVED:
- default:
- break;
- }
-
- Item::SaveToDB(trans);
-}
-
-void AzeriteItem::LoadAzeriteItemData(Player const* owner, AzeriteItemData& azeriteItemData)
-{
- bool needSave = false;
-
- if (!sAzeriteLevelInfoStore.LookupEntry(azeriteItemData.Level))
- {
- azeriteItemData.Xp = 0;
- azeriteItemData.Level = 1;
- azeriteItemData.KnowledgeLevel = GetCurrentKnowledgeLevel();
- needSave = true;
- }
- else if (azeriteItemData.Level > MAX_AZERITE_ITEM_LEVEL)
- {
- azeriteItemData.Xp = 0;
- azeriteItemData.Level = MAX_AZERITE_ITEM_LEVEL;
- needSave = true;
- }
-
- if (azeriteItemData.KnowledgeLevel != GetCurrentKnowledgeLevel())
- {
- // rescale XP to maintain same progress %
- uint64 oldMax = CalcTotalXPToNextLevel(azeriteItemData.Level, azeriteItemData.KnowledgeLevel);
- azeriteItemData.KnowledgeLevel = GetCurrentKnowledgeLevel();
- uint64 newMax = CalcTotalXPToNextLevel(azeriteItemData.Level, azeriteItemData.KnowledgeLevel);
- azeriteItemData.Xp = uint64(azeriteItemData.Xp / double(oldMax) * newMax);
- needSave = true;
- }
- else if (azeriteItemData.KnowledgeLevel > MAX_AZERITE_ITEM_KNOWLEDGE_LEVEL)
- {
- azeriteItemData.KnowledgeLevel = MAX_AZERITE_ITEM_KNOWLEDGE_LEVEL;
- needSave = true;
- }
-
- SetUpdateFieldValue(m_values.ModifyValue(&AzeriteItem::m_azeriteItemData).ModifyValue(&UF::AzeriteItemData::Xp), azeriteItemData.Xp);
- SetUpdateFieldValue(m_values.ModifyValue(&AzeriteItem::m_azeriteItemData).ModifyValue(&UF::AzeriteItemData::Level), azeriteItemData.Level);
- SetUpdateFieldValue(m_values.ModifyValue(&AzeriteItem::m_azeriteItemData).ModifyValue(&UF::AzeriteItemData::KnowledgeLevel), azeriteItemData.KnowledgeLevel);
- for (uint32 azeriteItemMilestonePowerId : azeriteItemData.AzeriteItemMilestonePowers)
- AddUnlockedEssenceMilestone(azeriteItemMilestonePowerId);
-
- UnlockDefaultMilestones();
-
- for (AzeriteEssencePowerEntry const* unlockedAzeriteEssence : azeriteItemData.UnlockedAzeriteEssences)
- SetEssenceRank(unlockedAzeriteEssence->AzeriteEssenceID, unlockedAzeriteEssence->Tier);
-
- for (AzeriteItemSelectedEssencesData const& selectedEssenceData : azeriteItemData.SelectedAzeriteEssences)
- {
- if (!selectedEssenceData.SpecializationId)
- continue;
-
- auto selectedEssences = AddDynamicUpdateFieldValue(m_values.ModifyValue(&AzeriteItem::m_azeriteItemData).ModifyValue(&UF::AzeriteItemData::SelectedEssences));
- selectedEssences.ModifyValue(&UF::SelectedAzeriteEssences::SpecializationID).SetValue(selectedEssenceData.SpecializationId);
- for (uint32 i = 0; i < MAX_AZERITE_ESSENCE_SLOT; ++i)
- {
- // Check if essence was unlocked
- if (!GetEssenceRank(selectedEssenceData.AzeriteEssenceId[i]))
- continue;
-
- selectedEssences.ModifyValue(&UF::SelectedAzeriteEssences::AzeriteEssenceID, i).SetValue(selectedEssenceData.AzeriteEssenceId[i]);
- }
-
- if (owner && owner->GetPrimarySpecialization() == ChrSpecialization(selectedEssenceData.SpecializationId))
- selectedEssences.ModifyValue(&UF::SelectedAzeriteEssences::Enabled).SetValue(true);
- }
-
- // add selected essences for current spec
- if (owner && !GetSelectedAzeriteEssences())
- CreateSelectedAzeriteEssences(AsUnderlyingType(owner->GetPrimarySpecialization()));
-
- if (needSave)
- {
- CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ITEM_INSTANCE_AZERITE_ON_LOAD);
- stmt->setUInt64(0, azeriteItemData.Xp);
- stmt->setUInt32(1, azeriteItemData.KnowledgeLevel);
- stmt->setUInt64(2, GetGUID().GetCounter());
- CharacterDatabase.Execute(stmt);
- }
-}
-
-void AzeriteItem::DeleteFromDB(CharacterDatabaseTransaction trans, ObjectGuid::LowType itemGuid)
-{
- CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE_AZERITE);
- stmt->setUInt64(0, itemGuid);
- CharacterDatabase.ExecuteOrAppend(trans, stmt);
-
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE_AZERITE_MILESTONE_POWER);
- stmt->setUInt64(0, itemGuid);
- CharacterDatabase.ExecuteOrAppend(trans, stmt);
-
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE_AZERITE_UNLOCKED_ESSENCE);
- stmt->setUInt64(0, itemGuid);
- CharacterDatabase.ExecuteOrAppend(trans, stmt);
-}
-
-void AzeriteItem::DeleteFromDB(CharacterDatabaseTransaction trans)
-{
- AzeriteItem::DeleteFromDB(trans, GetGUID().GetCounter());
- Item::DeleteFromDB(trans);
-}
-
-uint32 AzeriteItem::GetCurrentKnowledgeLevel()
-{
- // count weeks from 14.01.2020
- boost::gregorian::date now = boost::posix_time::from_time_t(GameTime::GetGameTime()).date();
- boost::gregorian::week_iterator itr(boost::gregorian::date(2020, boost::date_time::Jan, 14));
- uint32 knowledge = 0;
- while (*itr < now && knowledge < MAX_AZERITE_ITEM_KNOWLEDGE_LEVEL)
- {
- ++knowledge;
- ++itr;
- }
- return knowledge;
-}
-
-uint64 AzeriteItem::CalcTotalXPToNextLevel(uint32 level, uint32 knowledgeLevel)
-{
- AzeriteLevelInfoEntry const* levelInfo = sAzeriteLevelInfoStore.AssertEntry(level);
- uint64 totalXp = levelInfo->BaseExperienceToNextLevel * sAzeriteKnowledgeMultiplierStore.AssertEntry(knowledgeLevel)->Multiplier;
- return std::max(totalXp, levelInfo->MinimumExperienceToNextLevel);
-}
-
-void AzeriteItem::GiveXP(uint64 xp)
-{
- Player* owner = GetOwner();
- uint32 level = m_azeriteItemData->Level;
- if (level < MAX_AZERITE_ITEM_LEVEL)
- {
- uint64 currentXP = m_azeriteItemData->Xp;
- uint64 remainingXP = xp;
- do
- {
- uint64 totalXp = CalcTotalXPToNextLevel(level, m_azeriteItemData->KnowledgeLevel);
- if (currentXP + remainingXP >= totalXp)
- {
- // advance to next level
- ++level;
- remainingXP -= totalXp - currentXP;
- currentXP = 0;
- }
- else
- {
- currentXP += remainingXP;
- remainingXP = 0;
- }
- } while (remainingXP > 0 && level < MAX_AZERITE_ITEM_LEVEL);
-
- SetUpdateFieldValue(m_values.ModifyValue(&AzeriteItem::m_azeriteItemData).ModifyValue(&UF::AzeriteItemData::Xp), currentXP);
-
- owner->UpdateCriteria(CriteriaType::EarnArtifactXPForAzeriteItem, xp);
-
- // changing azerite level changes item level, need to update stats
- if (m_azeriteItemData->Level != level)
- {
- if (IsEquipped())
- owner->_ApplyItemBonuses(this, GetSlot(), false);
-
- SetUpdateFieldValue(m_values.ModifyValue(&AzeriteItem::m_azeriteItemData).ModifyValue(&UF::AzeriteItemData::Level), level);
- UnlockDefaultMilestones();
- owner->UpdateCriteria(CriteriaType::AzeriteLevelReached, level);
-
- if (IsEquipped())
- owner->_ApplyItemBonuses(this, GetSlot(), true);
- }
-
- SetState(ITEM_CHANGED, owner);
- }
-
- WorldPackets::Azerite::PlayerAzeriteItemGains xpGain;
- xpGain.ItemGUID = GetGUID();
- xpGain.XP = xp;
- owner->SendDirectMessage(xpGain.Write());
-}
-
-GameObject const* AzeriteItem::FindHeartForge(Player const* owner)
-{
- if (GameObject const* forge = owner->FindNearestGameObjectOfType(GAMEOBJECT_TYPE_ITEM_FORGE, 40.0f))
- if (forge->GetGOInfo()->itemForge.ForgeType == 2)
- return forge;
-
- return nullptr;
-}
-
-bool AzeriteItem::CanUseEssences() const
-{
- if (PlayerConditionEntry const* condition = sPlayerConditionStore.LookupEntry(PLAYER_CONDITION_ID_UNLOCKED_AZERITE_ESSENCES))
- return ConditionMgr::IsPlayerMeetingCondition(GetOwner(), condition);
-
- return false;
-}
-
-bool AzeriteItem::HasUnlockedEssenceSlot(uint8 slot) const
-{
- AzeriteItemMilestonePowerEntry const* milestone = sDB2Manager.GetAzeriteItemMilestonePower(slot);
- return m_azeriteItemData->UnlockedEssenceMilestones.FindIndex(milestone->ID) != -1;
-}
-
-uint32 AzeriteItem::GetEssenceRank(uint32 azeriteEssenceId) const
-{
- int32 index = m_azeriteItemData->UnlockedEssences.FindIndexIf([azeriteEssenceId](UF::UnlockedAzeriteEssence const& essence)
- {
- return essence.AzeriteEssenceID == azeriteEssenceId;
- });
-
- if (index < 0)
- return 0;
-
- return m_azeriteItemData->UnlockedEssences[index].Rank;
-}
-
-void AzeriteItem::SetEssenceRank(uint32 azeriteEssenceId, uint32 rank)
-{
- int32 index = m_azeriteItemData->UnlockedEssences.FindIndexIf([azeriteEssenceId](UF::UnlockedAzeriteEssence const& essence)
- {
- return essence.AzeriteEssenceID == azeriteEssenceId;
- });
-
- if (!rank && index >= 0)
- {
- RemoveDynamicUpdateFieldValue(m_values.ModifyValue(&AzeriteItem::m_azeriteItemData).ModifyValue(&UF::AzeriteItemData::UnlockedEssences), index);
- return;
- }
-
- if (!sDB2Manager.GetAzeriteEssencePower(azeriteEssenceId, rank))
- return;
-
- if (index < 0)
- {
- UF::UnlockedAzeriteEssence& unlockedEssence = AddDynamicUpdateFieldValue(m_values.ModifyValue(&AzeriteItem::m_azeriteItemData)
- .ModifyValue(&UF::AzeriteItemData::UnlockedEssences));
- unlockedEssence.AzeriteEssenceID = azeriteEssenceId;
- unlockedEssence.Rank = rank;
- }
- else
- SetUpdateFieldValue(m_values.ModifyValue(&AzeriteItem::m_azeriteItemData).ModifyValue(&UF::AzeriteItemData::UnlockedEssences, index)
- .ModifyValue(&UF::UnlockedAzeriteEssence::Rank), rank);
-}
-
-UF::SelectedAzeriteEssences const* AzeriteItem::GetSelectedAzeriteEssences() const
-{
- for (UF::SelectedAzeriteEssences const& essences : m_azeriteItemData->SelectedEssences)
- if (essences.Enabled)
- return &essences;
-
- return nullptr;
-}
-
-void AzeriteItem::SetSelectedAzeriteEssences(uint32 specializationId)
-{
- int32 index = m_azeriteItemData->SelectedEssences.FindIndexIf([](UF::SelectedAzeriteEssences const& essences) { return essences.Enabled == 1; });
- if (index >= 0)
- SetUpdateFieldValue(m_values.ModifyValue(&AzeriteItem::m_azeriteItemData).ModifyValue(&UF::AzeriteItemData::SelectedEssences, index)
- .ModifyValue(&UF::SelectedAzeriteEssences::Enabled), false);
-
- index = m_azeriteItemData->SelectedEssences.FindIndexIf([specializationId](UF::SelectedAzeriteEssences const& essences)
- {
- return essences.SpecializationID == specializationId;
- });
-
- if (index >= 0)
- SetUpdateFieldValue(m_values.ModifyValue(&AzeriteItem::m_azeriteItemData).ModifyValue(&UF::AzeriteItemData::SelectedEssences, index)
- .ModifyValue(&UF::SelectedAzeriteEssences::Enabled), true);
- else
- CreateSelectedAzeriteEssences(specializationId);
-}
-
-void AzeriteItem::CreateSelectedAzeriteEssences(uint32 specializationId)
-{
- auto selectedEssences = AddDynamicUpdateFieldValue(m_values.ModifyValue(&AzeriteItem::m_azeriteItemData).ModifyValue(&UF::AzeriteItemData::SelectedEssences));
- selectedEssences.ModifyValue(&UF::SelectedAzeriteEssences::SpecializationID).SetValue(specializationId);
- selectedEssences.ModifyValue(&UF::SelectedAzeriteEssences::Enabled).SetValue(true);
-}
-
-void AzeriteItem::SetSelectedAzeriteEssence(uint8 slot, uint32 azeriteEssenceId)
-{
- ASSERT(slot < MAX_AZERITE_ESSENCE_SLOT);
- int32 index = m_azeriteItemData->SelectedEssences.FindIndexIf([](UF::SelectedAzeriteEssences const& essences) { return essences.Enabled == 1; });
- ASSERT(index >= 0);
- SetUpdateFieldValue(m_values.ModifyValue(&AzeriteItem::m_azeriteItemData).ModifyValue(&UF::AzeriteItemData::SelectedEssences, index)
- .ModifyValue(&UF::SelectedAzeriteEssences::AzeriteEssenceID, slot), azeriteEssenceId);
-}
-
-void AzeriteItem::BuildValuesCreate(ByteBuffer* data, Player const* target) const
-{
- UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
- std::size_t sizePos = data->wpos();
- *data << uint32(0);
- *data << uint8(flags);
- m_objectData->WriteCreate(*data, flags, this, target);
- m_itemData->WriteCreate(*data, flags, this, target);
- m_azeriteItemData->WriteCreate(*data, flags, this, target);
- data->put<uint32>(sizePos, data->wpos() - sizePos - 4);
-}
-
-void AzeriteItem::BuildValuesUpdate(ByteBuffer* data, Player const* target) const
-{
- UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
- std::size_t sizePos = data->wpos();
- *data << uint32(0);
- *data << uint32(m_values.GetChangedObjectTypeMask());
-
- if (m_values.HasChanged(TYPEID_OBJECT))
- m_objectData->WriteUpdate(*data, flags, this, target);
-
- if (m_values.HasChanged(TYPEID_ITEM))
- m_itemData->WriteUpdate(*data, flags, this, target);
-
- if (m_values.HasChanged(TYPEID_AZERITE_ITEM))
- m_azeriteItemData->WriteUpdate(*data, flags, this, target);
-
- data->put<uint32>(sizePos, data->wpos() - sizePos - 4);
-}
-
-void AzeriteItem::BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const
-{
- UpdateMask<NUM_CLIENT_OBJECT_TYPES> valuesMask;
- valuesMask.Set(TYPEID_ITEM);
- valuesMask.Set(TYPEID_AZERITE_ITEM);
-
- std::size_t sizePos = data->wpos();
- *data << uint32(0);
- *data << uint32(valuesMask.GetBlock(0));
-
- UF::ItemData::Mask mask;
- m_itemData->AppendAllowedFieldsMaskForFlag(mask, flags);
- m_itemData->WriteUpdate(*data, mask, true, this, target);
-
- UF::AzeriteItemData::Mask mask2;
- m_azeriteItemData->AppendAllowedFieldsMaskForFlag(mask2, flags);
- m_azeriteItemData->WriteUpdate(*data, mask2, true, this, target);
-
- data->put<uint32>(sizePos, data->wpos() - sizePos - 4);
-}
-
-void AzeriteItem::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::Mask const& requestedObjectMask,
- UF::ItemData::Mask const& requestedItemMask, UF::AzeriteItemData::Mask const& requestedAzeriteItemMask, Player const* target) const
-{
- UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
- UpdateMask<NUM_CLIENT_OBJECT_TYPES> valuesMask;
- if (requestedObjectMask.IsAnySet())
- valuesMask.Set(TYPEID_OBJECT);
-
- UF::ItemData::Mask itemMask = requestedItemMask;
- m_itemData->FilterDisallowedFieldsMaskForFlag(itemMask, flags);
- if (itemMask.IsAnySet())
- valuesMask.Set(TYPEID_ITEM);
-
- UF::AzeriteItemData::Mask azeriteItemMask = requestedAzeriteItemMask;
- m_azeriteItemData->FilterDisallowedFieldsMaskForFlag(azeriteItemMask, flags);
- if (azeriteItemMask.IsAnySet())
- valuesMask.Set(TYPEID_AZERITE_ITEM);
-
- ByteBuffer& buffer = PrepareValuesUpdateBuffer(data);
- std::size_t sizePos = buffer.wpos();
- buffer << uint32(0);
- buffer << uint32(valuesMask.GetBlock(0));
-
- if (valuesMask[TYPEID_OBJECT])
- m_objectData->WriteUpdate(buffer, requestedObjectMask, true, this, target);
-
- if (valuesMask[TYPEID_ITEM])
- m_itemData->WriteUpdate(buffer, itemMask, true, this, target);
-
- if (valuesMask[TYPEID_AZERITE_ITEM])
- m_azeriteItemData->WriteUpdate(buffer, azeriteItemMask, true, this, target);
-
- buffer.put<uint32>(sizePos, buffer.wpos() - sizePos - 4);
-
- data->AddUpdateBlock();
-}
-
-void AzeriteItem::ValuesUpdateForPlayerWithMaskSender::operator()(Player const* player) const
-{
- UpdateData udata(player->GetMapId());
- WorldPacket packet;
-
- Owner->BuildValuesUpdateForPlayerWithMask(&udata, ObjectMask.GetChangesMask(), ItemMask.GetChangesMask(), AzeriteItemMask.GetChangesMask(), player);
-
- udata.BuildPacket(&packet);
- player->SendDirectMessage(&packet);
-}
-
-void AzeriteItem::ClearUpdateMask(bool remove)
-{
- m_values.ClearChangesMask(&AzeriteItem::m_azeriteItemData);
- Item::ClearUpdateMask(remove);
-}
-
-void AzeriteItem::UnlockDefaultMilestones()
-{
- bool hasPreviousMilestone = true;
- for (AzeriteItemMilestonePowerEntry const* milestone : sDB2Manager.GetAzeriteItemMilestonePowers())
- {
- if (!hasPreviousMilestone)
- break;
-
- if (milestone->RequiredLevel > int32(GetLevel()))
- break;
-
- if (HasUnlockedEssenceMilestone(milestone->ID))
- continue;
-
- if (milestone->AutoUnlock)
- {
- AddUnlockedEssenceMilestone(milestone->ID);
- hasPreviousMilestone = true;
- }
- else
- hasPreviousMilestone = false;
- }
-}
diff --git a/src/server/game/Entities/Item/AzeriteItem/AzeriteItem.h b/src/server/game/Entities/Item/AzeriteItem/AzeriteItem.h
deleted file mode 100644
index b682452f1ac..00000000000
--- a/src/server/game/Entities/Item/AzeriteItem/AzeriteItem.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef AzeriteItem_h__
-#define AzeriteItem_h__
-
-#include "Item.h"
-
-constexpr uint32 ITEM_ID_HEART_OF_AZEROTH = 158075;
-constexpr uint32 MAX_AZERITE_ITEM_LEVEL = 129;
-constexpr uint32 MAX_AZERITE_ITEM_KNOWLEDGE_LEVEL = 30;
-constexpr uint32 PLAYER_CONDITION_ID_UNLOCKED_AZERITE_ESSENCES = 69048;
-constexpr uint32 SPELL_ID_HEART_ESSENCE_ACTION_BAR_OVERRIDE = 298554;
-
-class TC_GAME_API AzeriteItem final : public Item
-{
-public:
- AzeriteItem();
-
- bool Create(ObjectGuid::LowType guidlow, uint32 itemId, ItemContext context, Player const* owner) override;
-
- void SaveToDB(CharacterDatabaseTransaction trans) override;
- void LoadAzeriteItemData(Player const* owner, AzeriteItemData& azeriteItem);
- static void DeleteFromDB(CharacterDatabaseTransaction trans, ObjectGuid::LowType itemGuid);
- void DeleteFromDB(CharacterDatabaseTransaction trans) override;
-
- uint32 GetLevel() const { return m_azeriteItemData->Level; }
- uint32 GetEffectiveLevel() const
- {
- uint32 level = m_azeriteItemData->AuraLevel;
- if (!level)
- level = m_azeriteItemData->Level;
-
- return level;
- }
-
- // Gaining artifact power
- static uint32 GetCurrentKnowledgeLevel();
- static uint64 CalcTotalXPToNextLevel(uint32 level, uint32 knowledgeLevel);
- void GiveXP(uint64 xp);
-
- // Essences
- // C_AzeriteEssence.CanOpenUI - checks PlayerCondition 69048 - HasAura(261912) || RewardedQuest(57010) || IsOnQuest(57010)
- static GameObject const* FindHeartForge(Player const* owner);
- bool CanUseEssences() const;
- bool HasUnlockedEssenceSlot(uint8 slot) const;
- bool HasUnlockedEssenceMilestone(uint32 azeriteItemMilestonePowerId) const { return m_azeriteItemData->UnlockedEssenceMilestones.FindIndex(azeriteItemMilestonePowerId) != -1; }
- void AddUnlockedEssenceMilestone(uint32 azeriteItemMilestonePowerId)
- {
- AddDynamicUpdateFieldValue(m_values.ModifyValue(&AzeriteItem::m_azeriteItemData)
- .ModifyValue(&UF::AzeriteItemData::UnlockedEssenceMilestones)) = azeriteItemMilestonePowerId;
- }
-
- uint32 GetEssenceRank(uint32 azeriteEssenceId) const;
- void SetEssenceRank(uint32 azeriteEssenceId, uint32 rank);
-
- UF::SelectedAzeriteEssences const* GetSelectedAzeriteEssences() const;
- void SetSelectedAzeriteEssences(uint32 specializationId);
- void CreateSelectedAzeriteEssences(uint32 specializationId);
- void SetSelectedAzeriteEssence(uint8 slot, uint32 azeriteEssenceId);
-
-protected:
- void BuildValuesCreate(ByteBuffer* data, Player const* target) const override;
- void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override;
- void ClearUpdateMask(bool remove) override;
-
-public:
- void BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
- void BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::Mask const& requestedObjectMask, UF::ItemData::Mask const& requestedItemMask,
- UF::AzeriteItemData::Mask const& requestedAzeriteItemMask, Player const* target) const;
-
- struct ValuesUpdateForPlayerWithMaskSender // sender compatible with MessageDistDeliverer
- {
- explicit ValuesUpdateForPlayerWithMaskSender(AzeriteItem const* owner) : Owner(owner) { }
-
- AzeriteItem const* Owner;
- UF::ObjectData::Base ObjectMask;
- UF::ItemData::Base ItemMask;
- UF::AzeriteItemData::Base AzeriteItemMask;
-
- void operator()(Player const* player) const;
- };
-
- UF::UpdateField<UF::AzeriteItemData, 0, TYPEID_AZERITE_ITEM> m_azeriteItemData;
-
-private:
- void UnlockDefaultMilestones();
-};
-
-#endif // AzeriteItem_h__
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
index af82859acf1..89b950bb54a 100644
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -17,8 +17,6 @@
#include "Item.h"
#include "ArtifactPackets.h"
-#include "AzeriteEmpoweredItem.h"
-#include "AzeriteItem.h"
#include "Bag.h"
#include "CollectionMgr.h"
#include "Common.h"
@@ -54,12 +52,6 @@ Item* NewItemOrBag(ItemTemplate const* proto)
if (proto->GetInventoryType() == INVTYPE_BAG)
return new Bag();
- if (sDB2Manager.IsAzeriteItem(proto->GetId()))
- return new AzeriteItem();
-
- if (sDB2Manager.GetAzeriteEmpoweredItem(proto->GetId()))
- return new AzeriteEmpoweredItem();
-
return new Item();
}
@@ -89,7 +81,7 @@ void AddItemsSetItem(Player* player, Item const* item)
{
uint32 maxLevel = sDB2Manager.GetCurveXAxisRange(item->GetBonus()->PlayerLevelToItemLevelCurveId).second;
- if (Optional<ContentTuningLevels> contentTuning = sDB2Manager.GetContentTuningData(item->GetBonus()->ContentTuningId, player->m_playerData->CtrOptions->ContentTuningConditionMask, true))
+ if (Optional<ContentTuningLevels> contentTuning = sDB2Manager.GetContentTuningData(item->GetBonus()->ContentTuningId, 0 /*player->m_playerData->CtrOptions->ContentTuningConditionMask*/, true))
maxLevel = std::min<uint32>(maxLevel, contentTuning->MaxLevel);
if (player->GetLevel() > maxLevel)
@@ -308,9 +300,7 @@ ItemModifier const SecondaryAppearanceModifierSlotBySpec[MAX_SPECIALIZATIONS] =
};
void ItemAdditionalLoadInfo::Init(std::unordered_map<ObjectGuid::LowType, ItemAdditionalLoadInfo>* loadInfo,
- PreparedQueryResult artifactResult, PreparedQueryResult azeriteItemResult,
- PreparedQueryResult azeriteItemMilestonePowersResult, PreparedQueryResult azeriteItemUnlockedEssencesResult,
- PreparedQueryResult azeriteEmpoweredItemResult)
+ PreparedQueryResult artifactResult)
{
// 0 1 2 3 4 5
// SELECT a.itemGuid, a.xp, a.artifactAppearanceId, a.artifactTierId, ap.artifactPowerId, ap.purchasedRank FROM item_instance_artifact_powers ap LEFT JOIN item_instance_artifact a ON ap.itemGuid = a.itemGuid ...
@@ -345,100 +335,6 @@ void ItemAdditionalLoadInfo::Init(std::unordered_map<ObjectGuid::LowType, ItemAd
} while (artifactResult->NextRow());
}
-
- // 0 1 2 3
- // SELECT iz.itemGuid, iz.xp, iz.level, iz.knowledgeLevel,
- // 4 5 6 7 8
- // iz.selectedAzeriteEssences1specId, iz.selectedAzeriteEssences1azeriteEssenceId1, iz.selectedAzeriteEssences1azeriteEssenceId2, iz.selectedAzeriteEssences1azeriteEssenceId3, iz.selectedAzeriteEssences1azeriteEssenceId4,
- // 9 10 11 12 13
- // iz.selectedAzeriteEssences2specId, iz.selectedAzeriteEssences2azeriteEssenceId1, iz.selectedAzeriteEssences2azeriteEssenceId2, iz.selectedAzeriteEssences2azeriteEssenceId3, iz.selectedAzeriteEssences2azeriteEssenceId4,
- // 14 15 16 17 18
- // iz.selectedAzeriteEssences3specId, iz.selectedAzeriteEssences3azeriteEssenceId1, iz.selectedAzeriteEssences3azeriteEssenceId2, iz.selectedAzeriteEssences3azeriteEssenceId3, iz.selectedAzeriteEssences3azeriteEssenceId4,
- // 19 20 21 22 23
- // iz.selectedAzeriteEssences4specId, iz.selectedAzeriteEssences4azeriteEssenceId1, iz.selectedAzeriteEssences4azeriteEssenceId2, iz.selectedAzeriteEssences4azeriteEssenceId3, iz.selectedAzeriteEssences4azeriteEssenceId4
- // FROM item_instance_azerite iz INNER JOIN ...
- if (azeriteItemResult)
- {
- do
- {
- Field* fields = azeriteItemResult->Fetch();
- ItemAdditionalLoadInfo& info = (*loadInfo)[fields[0].GetUInt64()];
- if (!info.AzeriteItem)
- info.AzeriteItem.emplace();
- info.AzeriteItem->Xp = fields[1].GetUInt64();
- info.AzeriteItem->Level = fields[2].GetUInt32();
- info.AzeriteItem->KnowledgeLevel = fields[3].GetUInt32();
- for (std::size_t i = 0; i < info.AzeriteItem->SelectedAzeriteEssences.size(); ++i)
- {
- uint32 specializationId = fields[4 + i * 4].GetUInt32();
- if (!sChrSpecializationStore.LookupEntry(specializationId))
- continue;
-
- info.AzeriteItem->SelectedAzeriteEssences[i].SpecializationId = specializationId;
- for (std::size_t j = 0; j < MAX_AZERITE_ESSENCE_SLOT; ++j)
- {
- AzeriteEssenceEntry const* azeriteEssence = sAzeriteEssenceStore.LookupEntry(fields[5 + i * 5 + j].GetUInt32());
- if (!azeriteEssence || !sDB2Manager.IsSpecSetMember(azeriteEssence->SpecSetID, specializationId))
- continue;
-
- info.AzeriteItem->SelectedAzeriteEssences[i].AzeriteEssenceId[j] = azeriteEssence->ID;
- }
- }
-
- } while (azeriteItemResult->NextRow());
- }
-
- // 0 1
- // SELECT iamp.itemGuid, iamp.azeriteItemMilestonePowerId FROM item_instance_azerite_milestone_power iamp INNER JOIN ...
- if (azeriteItemMilestonePowersResult)
- {
- do
- {
- Field* fields = azeriteItemMilestonePowersResult->Fetch();
- ItemAdditionalLoadInfo& info = (*loadInfo)[fields[0].GetUInt64()];
- if (!info.AzeriteItem)
- info.AzeriteItem.emplace();
- info.AzeriteItem->AzeriteItemMilestonePowers.push_back(fields[1].GetUInt32());
- }
- while (azeriteItemMilestonePowersResult->NextRow());
- }
-
- // 0 1 2
- // SELECT iaue.itemGuid, iaue.azeriteEssenceId, iaue.`rank` FROM item_instance_azerite_unlocked_essence iaue INNER JOIN ...
- if (azeriteItemUnlockedEssencesResult)
- {
- do
- {
- Field* fields = azeriteItemUnlockedEssencesResult->Fetch();
- if (AzeriteEssencePowerEntry const* azeriteEssencePower = sDB2Manager.GetAzeriteEssencePower(fields[1].GetUInt32(), fields[2].GetUInt32()))
- {
- ItemAdditionalLoadInfo& info = (*loadInfo)[fields[0].GetUInt64()];
- if (!info.AzeriteItem)
- info.AzeriteItem.emplace();
-
- info.AzeriteItem->UnlockedAzeriteEssences.push_back(azeriteEssencePower);
- }
- }
- while (azeriteItemUnlockedEssencesResult->NextRow());
- }
-
- // 0 1 2 3 4 5
- // SELECT iae.itemGuid, iae.azeritePowerId1, iae.azeritePowerId2, iae.azeritePowerId3, iae.azeritePowerId4, iae.azeritePowerId5 FROM item_instance_azerite_empowered iae INNER JOIN ...
- if (azeriteEmpoweredItemResult)
- {
- do
- {
- Field* fields = azeriteEmpoweredItemResult->Fetch();
- ItemAdditionalLoadInfo& info = (*loadInfo)[fields[0].GetUInt64()];
- if (!info.AzeriteEmpoweredItem)
- info.AzeriteEmpoweredItem.emplace();
-
- for (uint32 i = 0; i < MAX_AZERITE_EMPOWERED_TIER; ++i)
- if (sAzeritePowerStore.LookupEntry(fields[1 + i].GetInt32()))
- info.AzeriteEmpoweredItem->SelectedAzeritePowers[i] = fields[1 + i].GetInt32();
-
- } while (azeriteEmpoweredItemResult->NextRow());
- }
}
Item::Item()
@@ -1474,7 +1370,8 @@ void Item::ClearEnchantment(EnchantmentSlot slot)
SetUpdateFieldValue(enchantmentField.ModifyValue(&UF::ItemEnchantment::ID), 0);
SetUpdateFieldValue(enchantmentField.ModifyValue(&UF::ItemEnchantment::Duration), 0);
SetUpdateFieldValue(enchantmentField.ModifyValue(&UF::ItemEnchantment::Charges), 0);
- SetUpdateFieldValue(enchantmentField.ModifyValue(&UF::ItemEnchantment::Inactive), 0);
+ SetUpdateFieldValue(enchantmentField.ModifyValue(&UF::ItemEnchantment::Field_A), 0);
+ SetUpdateFieldValue(enchantmentField.ModifyValue(&UF::ItemEnchantment::Field_B), 0);
SetState(ITEM_CHANGED, GetOwner());
}
@@ -2283,23 +2180,17 @@ uint32 Item::GetItemLevel(Player const* owner) const
uint32 minItemLevelCutoff = owner->m_unitData->MinItemLevelCutoff;
uint32 maxItemLevel = itemTemplate->HasFlag(ITEM_FLAG3_IGNORE_ITEM_LEVEL_CAP_IN_PVP) ? 0 : owner->m_unitData->MaxItemLevel;
bool pvpBonus = owner->IsUsingPvpItemLevels();
- uint32 azeriteLevel = 0;
- if (AzeriteItem const* azeriteItem = ToAzeriteItem())
- azeriteLevel = azeriteItem->GetEffectiveLevel();
return Item::GetItemLevel(itemTemplate, _bonusData, owner->GetLevel(), GetModifier(ITEM_MODIFIER_TIMEWALKER_LEVEL),
- minItemLevel, minItemLevelCutoff, maxItemLevel, pvpBonus, azeriteLevel);
+ minItemLevel, minItemLevelCutoff, maxItemLevel, pvpBonus);
}
uint32 Item::GetItemLevel(ItemTemplate const* itemTemplate, BonusData const& bonusData, uint32 level, uint32 fixedLevel,
- uint32 minItemLevel, uint32 minItemLevelCutoff, uint32 maxItemLevel, bool pvpBonus, uint32 azeriteLevel)
+ uint32 minItemLevel, uint32 minItemLevelCutoff, uint32 maxItemLevel, bool pvpBonus)
{
if (!itemTemplate)
return MIN_ITEM_LEVEL;
uint32 itemLevel = itemTemplate->GetBaseItemLevel();
- if (AzeriteLevelInfoEntry const* azeriteLevelInfo = sAzeriteLevelInfoStore.LookupEntry(azeriteLevel))
- itemLevel = azeriteLevelInfo->ItemLevel;
-
if (bonusData.PlayerLevelToItemLevelCurveId)
{
if (fixedLevel)
diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h
index ff873c859e0..984329e1e10 100644
--- a/src/server/game/Entities/Item/Item.h
+++ b/src/server/game/Entities/Item/Item.h
@@ -126,35 +126,11 @@ struct ArtifactData
std::vector<ArtifactPowerData> ArtifactPowers;
};
-struct AzeriteItemSelectedEssencesData
-{
- uint32 SpecializationId = 0;
- std::array<uint32, MAX_AZERITE_ESSENCE_SLOT> AzeriteEssenceId = { };
-};
-
-struct AzeriteItemData
-{
- uint64 Xp;
- uint32 Level;
- uint32 KnowledgeLevel;
- std::vector<uint32> AzeriteItemMilestonePowers;
- std::vector<AzeriteEssencePowerEntry const*> UnlockedAzeriteEssences;
- std::array<AzeriteItemSelectedEssencesData, 4> SelectedAzeriteEssences = { };
-};
-
-struct AzeriteEmpoweredItemData
-{
- std::array<int32, MAX_AZERITE_EMPOWERED_TIER> SelectedAzeritePowers;
-};
-
struct ItemAdditionalLoadInfo
{
- static void Init(std::unordered_map<ObjectGuid::LowType, ItemAdditionalLoadInfo>* loadInfo, PreparedQueryResult artifactResult, PreparedQueryResult azeriteItemResult,
- PreparedQueryResult azeriteItemMilestonePowersResult, PreparedQueryResult azeriteItemUnlockedEssencesResult, PreparedQueryResult azeriteEmpoweredItemResult);
+ static void Init(std::unordered_map<ObjectGuid::LowType, ItemAdditionalLoadInfo>* loadInfo, PreparedQueryResult artifactResult);
Optional<ArtifactData> Artifact;
- Optional<AzeriteItemData> AzeriteItem;
- Optional<AzeriteEmpoweredItemData> AzeriteEmpoweredItem;
};
struct ItemDynamicFieldGems
@@ -240,10 +216,6 @@ class TC_GAME_API Item : public Object
Bag* ToBag() { if (IsBag()) return reinterpret_cast<Bag*>(this); else return nullptr; }
Bag const* ToBag() const { if (IsBag()) return reinterpret_cast<Bag const*>(this); else return nullptr; }
- AzeriteItem* ToAzeriteItem() { return IsAzeriteItem() ? reinterpret_cast<AzeriteItem*>(this) : nullptr; }
- AzeriteItem const* ToAzeriteItem() const { return IsAzeriteItem() ? reinterpret_cast<AzeriteItem const*>(this) : nullptr; }
- AzeriteEmpoweredItem* ToAzeriteEmpoweredItem() { return IsAzeriteEmpoweredItem() ? reinterpret_cast<AzeriteEmpoweredItem*>(this) : nullptr; }
- AzeriteEmpoweredItem const* ToAzeriteEmpoweredItem() const { return IsAzeriteEmpoweredItem() ? reinterpret_cast<AzeriteEmpoweredItem const*>(this) : nullptr; }
bool IsRefundable() const { return HasItemFlag(ITEM_FIELD_FLAG_REFUNDABLE); }
bool IsBOPTradeable() const { return HasItemFlag(ITEM_FIELD_FLAG_BOP_TRADEABLE); }
@@ -337,7 +309,7 @@ class TC_GAME_API Item : public Object
uint32 GetQuality() const { return _bonusData.Quality; }
uint32 GetItemLevel(Player const* owner) const;
static uint32 GetItemLevel(ItemTemplate const* itemTemplate, BonusData const& bonusData, uint32 level, uint32 fixedLevel,
- uint32 minItemLevel, uint32 minItemLevelCutoff, uint32 maxItemLevel, bool pvpBonus, uint32 azeriteLevel);
+ uint32 minItemLevel, uint32 minItemLevelCutoff, uint32 maxItemLevel, bool pvpBonus);
int32 GetRequiredLevel() const;
int32 GetItemStatType(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_STATS); return _bonusData.ItemStatType[index]; }
float GetItemStatValue(uint32 index, Player const* owner) const;
diff --git a/src/server/game/Entities/Item/ItemBonusMgr.cpp b/src/server/game/Entities/Item/ItemBonusMgr.cpp
index 7315bc8ea8a..1a840d8cda3 100644
--- a/src/server/game/Entities/Item/ItemBonusMgr.cpp
+++ b/src/server/game/Entities/Item/ItemBonusMgr.cpp
@@ -78,7 +78,7 @@ ItemContext GetContextForPlayer(MapDifficultyEntry const* mapDifficulty, Player
if (mapDifficulty->ItemContextPickerID)
{
- uint32 contentTuningId = sDB2Manager.GetRedirectedContentTuningId(mapDifficulty->ContentTuningID, player->m_playerData->CtrOptions->ContentTuningConditionMask);
+ uint32 contentTuningId = sDB2Manager.GetRedirectedContentTuningId(mapDifficulty->ContentTuningID, 0 /*player->m_playerData->CtrOptions->ContentTuningConditionMask*/);
ItemContextPickerEntryEntry const* selectedPickerEntry = nullptr;
for (ItemContextPickerEntryEntry const* itemContextPickerEntry : sItemContextPickerEntryStore)
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 350756f3313..8e31a00d45f 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -727,9 +727,11 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe
bool HasSceneInstanceIDs = !player->GetSceneMgr().GetSceneTemplateByInstanceMap().empty();
bool HasRuneState = ToUnit()->GetPowerIndex(POWER_RUNES) != MAX_POWERS;
+ bool HasActionButtons = true;
data->WriteBit(HasSceneInstanceIDs);
data->WriteBit(HasRuneState);
+ data->WriteBit(HasActionButtons);
data->FlushBits();
if (HasSceneInstanceIDs)
{
@@ -748,6 +750,18 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe
for (uint32 i = 0; i < maxRunes; ++i)
*data << uint8((baseCd - float(player->GetRuneCooldown(i))) / baseCd * 255);
}
+ if (HasActionButtons)
+ {
+ ActionButtonList const& actionButtonList = player->GetActionButtons();
+ for (uint8 i = 0; i < MAX_ACTION_BUTTONS; ++i)
+ {
+ auto const& itr = actionButtonList.find(i);
+ if (itr != actionButtonList.end() && itr->second.uState != ACTIONBUTTON_DELETED)
+ *data << uint32(itr->second.GetAction());
+ else
+ *data << uint32(0);
+ }
+ }
}
if (flags.Conversation)
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp
index 2e012897754..195a6019d1b 100644
--- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp
+++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp
@@ -82,7 +82,8 @@ void ItemEnchantment::WriteCreate(ByteBuffer& data, Item const* owner, Player co
data << int32(ID);
data << uint32(Duration);
data << int16(Charges);
- data << uint16(Inactive);
+ data << uint8(Field_A);
+ data << uint8(Field_B);
}
void ItemEnchantment::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Item const* owner, Player const* receiver) const
@@ -91,7 +92,7 @@ void ItemEnchantment::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Item
if (ignoreChangesMask)
changesMask.SetAll();
- data.WriteBits(changesMask.GetBlock(0), 5);
+ data.WriteBits(changesMask.GetBlock(0), 6);
data.FlushBits();
if (changesMask[0])
@@ -110,7 +111,11 @@ void ItemEnchantment::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Item
}
if (changesMask[4])
{
- data << uint16(Inactive);
+ data << uint8(Field_A);
+ }
+ if (changesMask[5])
+ {
+ data << uint8(Field_B);
}
}
}
@@ -120,7 +125,8 @@ void ItemEnchantment::ClearChangesMask()
Base::ClearChangesMask(ID);
Base::ClearChangesMask(Duration);
Base::ClearChangesMask(Charges);
- Base::ClearChangesMask(Inactive);
+ Base::ClearChangesMask(Field_A);
+ Base::ClearChangesMask(Field_B);
_changesMask.ResetAll();
}
@@ -280,6 +286,8 @@ void ItemData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi
{
Enchantment[i].WriteCreate(data, owner, receiver);
}
+ data << int32(PropertySeed);
+ data << int32(RandomPropertiesID);
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
{
data << uint32(Durability);
@@ -317,7 +325,7 @@ void ItemData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi
void ItemData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
{
- Mask allowedMaskForTarget({ 0xF80A727Fu, 0x000001FFu });
+ Mask allowedMaskForTarget({ 0xE029CE7Fu, 0x000007FFu });
AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver);
}
@@ -325,12 +333,12 @@ void ItemData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi
void ItemData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
{
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
- allowedMaskForTarget |= { 0x07F58D80u, 0x00000000u };
+ allowedMaskForTarget |= { 0x1FD63180u, 0x00000000u };
}
void ItemData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
{
- Mask allowedMaskForTarget({ 0xF80A727Fu, 0x000001FFu });
+ Mask allowedMaskForTarget({ 0xE029CE7Fu, 0x000007FFu });
AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
changesMask &= allowedMaskForTarget;
}
@@ -412,64 +420,72 @@ void ItemData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor
}
if (changesMask[10])
{
- data << uint32(Durability);
+ data << int32(PropertySeed);
}
if (changesMask[11])
{
- data << uint32(MaxDurability);
+ data << int32(RandomPropertiesID);
}
if (changesMask[12])
{
- data << uint32(CreatePlayedTime);
+ data << uint32(Durability);
}
if (changesMask[13])
{
- data << int32(Context);
+ data << uint32(MaxDurability);
}
if (changesMask[14])
{
- data << int64(CreateTime);
+ data << uint32(CreatePlayedTime);
}
if (changesMask[15])
{
- data << uint64(ArtifactXP);
+ data << int32(Context);
}
if (changesMask[16])
{
- data << uint8(ItemAppearanceModID);
+ data << int64(CreateTime);
+ }
+ if (changesMask[17])
+ {
+ data << uint64(ArtifactXP);
}
if (changesMask[18])
{
+ data << uint8(ItemAppearanceModID);
+ }
+ if (changesMask[20])
+ {
data << uint32(DynamicFlags2);
}
- if (changesMask[19])
+ if (changesMask[21])
{
data << ItemBonusKey;
}
- if (changesMask[20])
+ if (changesMask[22])
{
data << uint16(DEBUGItemLevel);
}
- if (changesMask[17])
+ if (changesMask[19])
{
Modifiers->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
- if (changesMask[21])
+ if (changesMask[23])
{
for (uint32 i = 0; i < 5; ++i)
{
- if (changesMask[22 + i])
+ if (changesMask[24 + i])
{
data << int32(SpellCharges[i]);
}
}
}
- if (changesMask[27])
+ if (changesMask[29])
{
for (uint32 i = 0; i < 13; ++i)
{
- if (changesMask[28 + i])
+ if (changesMask[30 + i])
{
Enchantment[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
@@ -488,6 +504,8 @@ void ItemData::ClearChangesMask()
Base::ClearChangesMask(StackCount);
Base::ClearChangesMask(Expiration);
Base::ClearChangesMask(DynamicFlags);
+ Base::ClearChangesMask(PropertySeed);
+ Base::ClearChangesMask(RandomPropertiesID);
Base::ClearChangesMask(Durability);
Base::ClearChangesMask(MaxDurability);
Base::ClearChangesMask(CreatePlayedTime);
@@ -552,315 +570,27 @@ void ContainerData::ClearChangesMask()
_changesMask.ResetAll();
}
-void AzeriteEmpoweredItemData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AzeriteEmpoweredItem const* owner, Player const* receiver) const
-{
- for (uint32 i = 0; i < 5; ++i)
- {
- data << int32(Selections[i]);
- }
-}
-
-void AzeriteEmpoweredItemData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AzeriteEmpoweredItem const* owner, Player const* receiver) const
-{
- WriteUpdate(data, _changesMask, false, owner, receiver);
-}
-
-void AzeriteEmpoweredItemData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, AzeriteEmpoweredItem const* owner, Player const* receiver) const
-{
- data.WriteBits(changesMask.GetBlocksMask(0), 1);
- if (changesMask.GetBlock(0))
- data.WriteBits(changesMask.GetBlock(0), 32);
-
- data.FlushBits();
- if (changesMask[0])
- {
- for (uint32 i = 0; i < 5; ++i)
- {
- if (changesMask[1 + i])
- {
- data << int32(Selections[i]);
- }
- }
- }
-}
-
-void AzeriteEmpoweredItemData::ClearChangesMask()
-{
- Base::ClearChangesMask(Selections);
- _changesMask.ResetAll();
-}
-
-void UnlockedAzeriteEssence::WriteCreate(ByteBuffer& data, AzeriteItem const* owner, Player const* receiver) const
-{
- data << uint32(AzeriteEssenceID);
- data << uint32(Rank);
-}
-
-void UnlockedAzeriteEssence::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AzeriteItem const* owner, Player const* receiver) const
-{
- data << uint32(AzeriteEssenceID);
- data << uint32(Rank);
-}
-
-bool UnlockedAzeriteEssence::operator==(UnlockedAzeriteEssence const& right) const
-{
- return AzeriteEssenceID == right.AzeriteEssenceID
- && Rank == right.Rank;
-}
-
-void SelectedAzeriteEssences::WriteCreate(ByteBuffer& data, AzeriteItem const* owner, Player const* receiver) const
-{
- for (uint32 i = 0; i < 4; ++i)
- {
- data << uint32(AzeriteEssenceID[i]);
- }
- data << uint32(SpecializationID);
- data.WriteBit(Enabled);
- data.FlushBits();
-}
-
-void SelectedAzeriteEssences::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AzeriteItem const* owner, Player const* receiver) const
-{
- Mask changesMask = _changesMask;
- if (ignoreChangesMask)
- changesMask.SetAll();
-
- data.WriteBits(changesMask.GetBlocksMask(0), 1);
- if (changesMask.GetBlock(0))
- data.WriteBits(changesMask.GetBlock(0), 32);
-
- if (changesMask[0])
- {
- if (changesMask[1])
- {
- data.WriteBit(Enabled);
- }
- }
- data.FlushBits();
- if (changesMask[0])
- {
- if (changesMask[2])
- {
- data << uint32(SpecializationID);
- }
- }
- if (changesMask[3])
- {
- for (uint32 i = 0; i < 4; ++i)
- {
- if (changesMask[4 + i])
- {
- data << uint32(AzeriteEssenceID[i]);
- }
- }
- }
- data.FlushBits();
-}
-
-void SelectedAzeriteEssences::ClearChangesMask()
-{
- Base::ClearChangesMask(Enabled);
- Base::ClearChangesMask(SpecializationID);
- Base::ClearChangesMask(AzeriteEssenceID);
- _changesMask.ResetAll();
-}
-
-void AzeriteItemData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AzeriteItem const* owner, Player const* receiver) const
-{
- if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
- {
- data << uint64(Xp);
- data << uint32(Level);
- data << uint32(AuraLevel);
- data << uint32(KnowledgeLevel);
- data << int32(DEBUGknowledgeWeek);
- }
- data << uint32(UnlockedEssences.size());
- data << uint32(SelectedEssences.size());
- data << uint32(UnlockedEssenceMilestones.size());
- for (uint32 i = 0; i < UnlockedEssences.size(); ++i)
- {
- UnlockedEssences[i].WriteCreate(data, owner, receiver);
- }
- for (uint32 i = 0; i < UnlockedEssenceMilestones.size(); ++i)
- {
- data << uint32(UnlockedEssenceMilestones[i]);
- }
- if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
- {
- data.WriteBit(Enabled);
- }
- for (uint32 i = 0; i < SelectedEssences.size(); ++i)
- {
- SelectedEssences[i].WriteCreate(data, owner, receiver);
- }
- data.FlushBits();
-}
-
-void AzeriteItemData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AzeriteItem const* owner, Player const* receiver) const
-{
- Mask allowedMaskForTarget({ 0x0000001Du });
- AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
- WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver);
-}
-
-void AzeriteItemData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
-{
- if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
- allowedMaskForTarget |= { 0x000003E2u };
-}
-
-void AzeriteItemData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
-{
- Mask allowedMaskForTarget({ 0x0000001Du });
- AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
- changesMask &= allowedMaskForTarget;
-}
-
-void AzeriteItemData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, AzeriteItem const* owner, Player const* receiver) const
-{
- data.WriteBits(changesMask.GetBlock(0), 10);
-
- if (changesMask[0])
- {
- if (changesMask[1])
- {
- data.WriteBit(Enabled);
- }
- if (changesMask[2])
- {
- if (!ignoreNestedChangesMask)
- UnlockedEssences.WriteUpdateMask(data);
- else
- WriteCompleteDynamicFieldUpdateMask(UnlockedEssences.size(), data);
- }
- if (changesMask[3])
- {
- if (!ignoreNestedChangesMask)
- SelectedEssences.WriteUpdateMask(data);
- else
- WriteCompleteDynamicFieldUpdateMask(SelectedEssences.size(), data);
- }
- if (changesMask[4])
- {
- if (!ignoreNestedChangesMask)
- UnlockedEssenceMilestones.WriteUpdateMask(data);
- else
- WriteCompleteDynamicFieldUpdateMask(UnlockedEssenceMilestones.size(), data);
- }
- }
- data.FlushBits();
- if (changesMask[0])
- {
- if (changesMask[2])
- {
- for (uint32 i = 0; i < UnlockedEssences.size(); ++i)
- {
- if (UnlockedEssences.HasChanged(i) || ignoreNestedChangesMask)
- {
- UnlockedEssences[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
- }
- }
- }
- if (changesMask[4])
- {
- for (uint32 i = 0; i < UnlockedEssenceMilestones.size(); ++i)
- {
- if (UnlockedEssenceMilestones.HasChanged(i) || ignoreNestedChangesMask)
- {
- data << uint32(UnlockedEssenceMilestones[i]);
- }
- }
- }
- if (changesMask[3])
- {
- for (uint32 i = 0; i < SelectedEssences.size(); ++i)
- {
- if (SelectedEssences.HasChanged(i) || ignoreNestedChangesMask)
- {
- SelectedEssences[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
- }
- }
- }
- if (changesMask[5])
- {
- data << uint64(Xp);
- }
- if (changesMask[6])
- {
- data << uint32(Level);
- }
- if (changesMask[7])
- {
- data << uint32(AuraLevel);
- }
- if (changesMask[8])
- {
- data << uint32(KnowledgeLevel);
- }
- if (changesMask[9])
- {
- data << int32(DEBUGknowledgeWeek);
- }
- }
- data.FlushBits();
-}
-
-void AzeriteItemData::ClearChangesMask()
-{
- Base::ClearChangesMask(Enabled);
- Base::ClearChangesMask(UnlockedEssences);
- Base::ClearChangesMask(UnlockedEssenceMilestones);
- Base::ClearChangesMask(SelectedEssences);
- Base::ClearChangesMask(Xp);
- Base::ClearChangesMask(Level);
- Base::ClearChangesMask(AuraLevel);
- Base::ClearChangesMask(KnowledgeLevel);
- Base::ClearChangesMask(DEBUGknowledgeWeek);
- _changesMask.ResetAll();
-}
-
-void SpellCastVisual::WriteCreate(ByteBuffer& data, Object const* owner, Player const* receiver) const
-{
- data << int32(SpellXSpellVisualID);
- data << int32(ScriptVisualID);
-}
-
-void SpellCastVisual::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Object const* owner, Player const* receiver) const
-{
- data << int32(SpellXSpellVisualID);
- data << int32(ScriptVisualID);
-}
-
-bool SpellCastVisual::operator==(SpellCastVisual const& right) const
-{
- return SpellXSpellVisualID == right.SpellXSpellVisualID
- && ScriptVisualID == right.ScriptVisualID;
-}
-
void UnitChannel::WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const
{
data << int32(SpellID);
- SpellVisual.WriteCreate(data, owner, receiver);
+ data << int32(SpellXSpellVisualID);
}
void UnitChannel::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Unit const* owner, Player const* receiver) const
{
data << int32(SpellID);
- SpellVisual.WriteUpdate(data, ignoreChangesMask, owner, receiver);
+ data << int32(SpellXSpellVisualID);
}
bool UnitChannel::operator==(UnitChannel const& right) const
{
return SpellID == right.SpellID
- && SpellVisual == right.SpellVisual;
+ && SpellXSpellVisualID == right.SpellXSpellVisualID;
}
void VisibleItem::WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const
{
data << int32(ItemID);
- data << int32(SecondaryItemModifiedAppearanceID);
- data << int32(ConditionalItemAppearanceID);
data << uint16(ItemAppearanceModID);
data << uint16(ItemVisual);
}
@@ -871,7 +601,7 @@ void VisibleItem::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Unit con
if (ignoreChangesMask)
changesMask.SetAll();
- data.WriteBits(changesMask.GetBlock(0), 6);
+ data.WriteBits(changesMask.GetBlock(0), 4);
data.FlushBits();
if (changesMask[0])
@@ -882,17 +612,9 @@ void VisibleItem::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Unit con
}
if (changesMask[2])
{
- data << int32(SecondaryItemModifiedAppearanceID);
- }
- if (changesMask[3])
- {
- data << int32(ConditionalItemAppearanceID);
- }
- if (changesMask[4])
- {
data << uint16(ItemAppearanceModID);
}
- if (changesMask[5])
+ if (changesMask[3])
{
data << uint16(ItemVisual);
}
@@ -902,8 +624,6 @@ void VisibleItem::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Unit con
void VisibleItem::ClearChangesMask()
{
Base::ClearChangesMask(ItemID);
- Base::ClearChangesMask(SecondaryItemModifiedAppearanceID);
- Base::ClearChangesMask(ConditionalItemAppearanceID);
Base::ClearChangesMask(ItemAppearanceModID);
Base::ClearChangesMask(ItemVisual);
_changesMask.ResetAll();
@@ -929,6 +649,8 @@ bool PassiveSpellHistory::operator==(PassiveSpellHistory const& right) const
void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
{
+ data << int64(Health);
+ data << int64(MaxHealth);
data << int32(ViewerDependentValue<DisplayIDTag>::GetValue(this, owner, receiver));
for (uint32 i = 0; i < 2; ++i)
{
@@ -938,8 +660,6 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi
data << uint32(StateAnimID);
data << uint32(StateAnimKitID);
data << uint32(StateWorldEffectIDs->size());
- data << uint32(StateWorldEffectsQuestObjectiveID);
- data << int32(SpellOverrideNameID);
for (uint32 i = 0; i < StateWorldEffectIDs->size(); ++i)
{
data << uint32((*StateWorldEffectIDs)[i]);
@@ -959,7 +679,6 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi
data << BattlePetCompanionGUID;
data << uint64(BattlePetDBID);
ChannelData->WriteCreate(data, owner, receiver);
- data << int8(SpellEmpowerStage);
data << uint32(SummonedByHomeRealm);
data << uint8(Race);
data << uint8(ClassId);
@@ -967,12 +686,6 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi
data << uint8(Sex);
data << uint8(DisplayPower);
data << uint32(OverrideDisplayPowerID);
- data << int64(Health);
- for (uint32 i = 0; i < 10; ++i)
- {
- data << int32(Power[i]);
- data << int32(MaxPower[i]);
- }
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner | UpdateFieldFlag::UnitAll))
{
for (uint32 i = 0; i < 10; ++i)
@@ -981,7 +694,12 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi
data << float(PowerRegenInterruptedFlatModifier[i]);
}
}
- data << int64(MaxHealth);
+ for (uint32 i = 0; i < 10; ++i)
+ {
+ data << int32(Power[i]);
+ data << int32(MaxPower[i]);
+ data << float(ModPowerRegen[i]);
+ }
data << int32(Level);
data << int32(EffectiveLevel);
data << int32(ContentTuningID);
@@ -1011,12 +729,9 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi
data << float(BoundingRadius);
data << float(CombatReach);
data << float(DisplayScale);
- data << int32(CreatureFamily);
- data << int32(CreatureType);
data << int32(NativeDisplayID);
data << float(NativeXDisplayScale);
data << int32(MountDisplayID);
- data << int32(CosmeticMountDisplayID);
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner | UpdateFieldFlag::Empath))
{
data << float(MinDamage);
@@ -1033,7 +748,6 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi
data << uint32(PetExperience);
data << uint32(PetNextLevelExperience);
data << float(ModCastingSpeed);
- data << float(ModCastingSpeedNeg);
data << float(ModSpellHaste);
data << float(ModHaste);
data << float(ModRangedHaste);
@@ -1041,14 +755,15 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi
data << float(ModTimeRate);
data << int32(CreatedBySpell);
data << int32(EmoteState);
+ data << int16(TrainingPointsUsed);
+ data << int16(TrainingPointsTotal);
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
{
- for (uint32 i = 0; i < 4; ++i)
+ for (uint32 i = 0; i < 5; ++i)
{
data << int32(Stats[i]);
data << int32(StatPosBuff[i]);
data << int32(StatNegBuff[i]);
- data << int32(StatSupportBuff[i]);
}
}
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner | UpdateFieldFlag::Empath))
@@ -1062,10 +777,15 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi
{
for (uint32 i = 0; i < 7; ++i)
{
- data << int32(BonusResistanceMods[i]);
- data << int32(ManaCostModifier[i]);
+ data << int32(PowerCostModifier[i]);
+ data << float(PowerCostMultiplier[i]);
}
}
+ for (uint32 i = 0; i < 7; ++i)
+ {
+ data << int32(ResistanceBuffModsPositive[i]);
+ data << int32(ResistanceBuffModsNegative[i]);
+ }
data << int32(BaseMana);
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
{
@@ -1081,29 +801,21 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi
data << int32(AttackPowerModPos);
data << int32(AttackPowerModNeg);
data << float(AttackPowerMultiplier);
- data << int32(AttackPowerModSupport);
data << int32(RangedAttackPower);
data << int32(RangedAttackPowerModPos);
data << int32(RangedAttackPowerModNeg);
data << float(RangedAttackPowerMultiplier);
- data << int32(RangedAttackPowerModSupport);
- data << int32(MainHandWeaponAttackPower);
- data << int32(OffHandWeaponAttackPower);
- data << int32(RangedWeaponAttackPower);
data << int32(SetAttackSpeedAura);
data << float(Lifesteal);
data << float(MinRangedDamage);
data << float(MaxRangedDamage);
- data << float(ManaCostMultiplier);
data << float(MaxHealthModifier);
}
data << float(HoverHeight);
data << int32(MinItemLevelCutoff);
data << int32(MinItemLevel);
data << int32(MaxItemLevel);
- data << int32(AzeriteItemLevel);
data << int32(WildBattlePetLevel);
- data << int32(BattlePetCompanionExperience);
data << uint32(BattlePetCompanionNameTimestamp);
data << int32(ViewerDependentValue<InteractSpellIDTag>::GetValue(this, owner, receiver));
data << int32(ScaleDuration);
@@ -1111,16 +823,18 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi
data << int32(LooksLikeCreatureID);
data << int32(LookAtControllerID);
data << int32(PerksVendorItemID);
- data << int32(TaxiNodesID);
data << GuildGUID;
data << uint32(PassiveSpells.size());
data << uint32(WorldEffects.size());
data << uint32(ChannelObjects.size());
+ data << SkinningOwnerGUID;
data << int32(FlightCapabilityID);
data << float(GlideEventSpeedDivisor);
- data << uint32(SilencedSchoolMask);
data << uint32(CurrentAreaID);
- data << NameplateAttachToGUID;
+ if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
+ {
+ data << ComboTarget;
+ }
for (uint32 i = 0; i < PassiveSpells.size(); ++i)
{
PassiveSpells[i].WriteCreate(data, owner, receiver);
@@ -1137,7 +851,7 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi
void UnitData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
{
- Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xC3FEFFFFu, 0x003DFFFFu, 0xFFFFFC01u, 0x007FFFFFu, 0x0003F800u, 0x00000000u });
+ Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xFF0FDFFFu, 0xC001EFFFu, 0x001EFFFFu, 0xFFFFFE00u, 0x00003FFFu, 0xFFF00000u, 0x00000007u });
AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver);
}
@@ -1145,24 +859,24 @@ void UnitData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi
void UnitData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
{
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
- allowedMaskForTarget |= { 0x00002000u, 0x3C010000u, 0xFFC20000u, 0x000003FEu, 0xFF800004u, 0xFFFC07FFu, 0x01FFFFFFu };
+ allowedMaskForTarget |= { 0x00002000u, 0x00F02000u, 0x3FFE1000u, 0xFFF10000u, 0x000001FFu, 0xFFFFC000u, 0x000FFFFFu, 0x00000000u };
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::UnitAll))
- allowedMaskForTarget |= { 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFF800004u, 0x000007FFu, 0x00000000u };
+ allowedMaskForTarget |= { 0x00000000u, 0x00000000u, 0x00000000u, 0xFFF00000u, 0x000001FFu, 0x00000000u, 0x00000000u, 0x00000000u };
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Empath))
- allowedMaskForTarget |= { 0x00000000u, 0x3C000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x000007F8u };
+ allowedMaskForTarget |= { 0x00000000u, 0x00F00000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xC0000000u, 0x0000003Fu, 0x00000000u };
}
void UnitData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
{
- Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xC3FEFFFFu, 0x003DFFFFu, 0xFFFFFC01u, 0x007FFFFFu, 0x0003F800u, 0x00000000u });
+ Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xFF0FDFFFu, 0xC001EFFFu, 0x001EFFFFu, 0xFFFFFE00u, 0x00003FFFu, 0xFFF00000u, 0x00000007u });
AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
changesMask &= allowedMaskForTarget;
}
void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Unit const* owner, Player const* receiver) const
{
- data.WriteBits(changesMask.GetBlocksMask(0), 7);
- for (uint32 i = 0; i < 7; ++i)
+ data.WriteBits(changesMask.GetBlocksMask(0), 8);
+ for (uint32 i = 0; i < 8; ++i)
if (changesMask.GetBlock(i))
data.WriteBits(changesMask.GetBlock(i), 32);
@@ -1237,27 +951,27 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor
}
if (changesMask[5])
{
- data << int32(ViewerDependentValue<DisplayIDTag>::GetValue(this, owner, receiver));
+ data << int64(Health);
}
if (changesMask[6])
{
- data << uint32(StateSpellVisualID);
+ data << int64(MaxHealth);
}
if (changesMask[7])
{
- data << uint32(StateAnimID);
+ data << int32(ViewerDependentValue<DisplayIDTag>::GetValue(this, owner, receiver));
}
if (changesMask[8])
{
- data << uint32(StateAnimKitID);
+ data << uint32(StateSpellVisualID);
}
if (changesMask[9])
{
- data << uint32(StateWorldEffectsQuestObjectiveID);
+ data << uint32(StateAnimID);
}
if (changesMask[10])
{
- data << int32(SpellOverrideNameID);
+ data << uint32(StateAnimKitID);
}
if (changesMask[11])
{
@@ -1309,507 +1023,465 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor
}
if (changesMask[23])
{
- data << int8(SpellEmpowerStage);
+ data << uint32(SummonedByHomeRealm);
}
if (changesMask[24])
{
- data << uint32(SummonedByHomeRealm);
+ data << uint8(Race);
}
if (changesMask[25])
{
- data << uint8(Race);
+ data << uint8(ClassId);
}
if (changesMask[26])
{
- data << uint8(ClassId);
+ data << uint8(PlayerClassId);
}
if (changesMask[27])
{
- data << uint8(PlayerClassId);
+ data << uint8(Sex);
}
if (changesMask[28])
{
- data << uint8(Sex);
+ data << uint8(DisplayPower);
}
if (changesMask[29])
{
- data << uint8(DisplayPower);
+ data << uint32(OverrideDisplayPowerID);
}
if (changesMask[30])
{
- data << uint32(OverrideDisplayPowerID);
+ data << int32(Level);
}
if (changesMask[31])
{
- data << int64(Health);
+ data << int32(EffectiveLevel);
}
}
if (changesMask[32])
{
if (changesMask[33])
{
- data << int64(MaxHealth);
+ data << int32(ContentTuningID);
}
if (changesMask[34])
{
- data << int32(Level);
+ data << int32(ScalingLevelMin);
}
if (changesMask[35])
{
- data << int32(EffectiveLevel);
+ data << int32(ScalingLevelMax);
}
if (changesMask[36])
{
- data << int32(ContentTuningID);
+ data << int32(ScalingLevelDelta);
}
if (changesMask[37])
{
- data << int32(ScalingLevelMin);
+ data << int32(ScalingFactionGroup);
}
if (changesMask[38])
{
- data << int32(ScalingLevelMax);
+ data << int32(ScalingHealthItemLevelCurveID);
}
if (changesMask[39])
{
- data << int32(ScalingLevelDelta);
+ data << int32(ScalingDamageItemLevelCurveID);
}
if (changesMask[40])
{
- data << int32(ScalingFactionGroup);
+ data << int32(ViewerDependentValue<FactionTemplateTag>::GetValue(this, owner, receiver));
}
if (changesMask[41])
{
- data << int32(ScalingHealthItemLevelCurveID);
+ data << uint32(ViewerDependentValue<FlagsTag>::GetValue(this, owner, receiver));
}
if (changesMask[42])
{
- data << int32(ScalingDamageItemLevelCurveID);
+ data << uint32(Flags2);
}
if (changesMask[43])
{
- data << int32(ViewerDependentValue<FactionTemplateTag>::GetValue(this, owner, receiver));
+ data << uint32(ViewerDependentValue<Flags3Tag>::GetValue(this, owner, receiver));
}
if (changesMask[44])
{
- data << uint32(ViewerDependentValue<FlagsTag>::GetValue(this, owner, receiver));
+ data << uint32(ViewerDependentValue<AuraStateTag>::GetValue(this, owner, receiver));
}
if (changesMask[45])
{
- data << uint32(Flags2);
+ data << uint32(RangedAttackRoundBaseTime);
}
if (changesMask[46])
{
- data << uint32(ViewerDependentValue<Flags3Tag>::GetValue(this, owner, receiver));
+ data << float(BoundingRadius);
}
if (changesMask[47])
{
- data << uint32(ViewerDependentValue<AuraStateTag>::GetValue(this, owner, receiver));
+ data << float(CombatReach);
}
if (changesMask[48])
{
- data << uint32(RangedAttackRoundBaseTime);
+ data << float(DisplayScale);
}
if (changesMask[49])
{
- data << float(BoundingRadius);
+ data << int32(NativeDisplayID);
}
if (changesMask[50])
{
- data << float(CombatReach);
+ data << float(NativeXDisplayScale);
}
if (changesMask[51])
{
- data << float(DisplayScale);
+ data << int32(MountDisplayID);
}
if (changesMask[52])
{
- data << int32(CreatureFamily);
+ data << float(MinDamage);
}
if (changesMask[53])
{
- data << int32(CreatureType);
+ data << float(MaxDamage);
}
if (changesMask[54])
{
- data << int32(NativeDisplayID);
+ data << float(MinOffHandDamage);
}
if (changesMask[55])
{
- data << float(NativeXDisplayScale);
+ data << float(MaxOffHandDamage);
}
if (changesMask[56])
{
- data << int32(MountDisplayID);
+ data << uint8(StandState);
}
if (changesMask[57])
{
- data << int32(CosmeticMountDisplayID);
+ data << uint8(PetTalentPoints);
}
if (changesMask[58])
{
- data << float(MinDamage);
+ data << uint8(VisFlags);
}
if (changesMask[59])
{
- data << float(MaxDamage);
+ data << uint8(AnimTier);
}
if (changesMask[60])
{
- data << float(MinOffHandDamage);
+ data << uint32(PetNumber);
}
if (changesMask[61])
{
- data << float(MaxOffHandDamage);
+ data << uint32(PetNameTimestamp);
}
if (changesMask[62])
{
- data << uint8(StandState);
+ data << uint32(PetExperience);
}
if (changesMask[63])
{
- data << uint8(PetTalentPoints);
+ data << uint32(PetNextLevelExperience);
}
}
if (changesMask[64])
{
if (changesMask[65])
{
- data << uint8(VisFlags);
+ data << float(ModCastingSpeed);
}
if (changesMask[66])
{
- data << uint8(AnimTier);
+ data << float(ModSpellHaste);
}
if (changesMask[67])
{
- data << uint32(PetNumber);
+ data << float(ModHaste);
}
if (changesMask[68])
{
- data << uint32(PetNameTimestamp);
+ data << float(ModRangedHaste);
}
if (changesMask[69])
{
- data << uint32(PetExperience);
+ data << float(ModHasteRegen);
}
if (changesMask[70])
{
- data << uint32(PetNextLevelExperience);
+ data << float(ModTimeRate);
}
if (changesMask[71])
{
- data << float(ModCastingSpeed);
+ data << int32(CreatedBySpell);
}
if (changesMask[72])
{
- data << float(ModCastingSpeedNeg);
+ data << int32(EmoteState);
}
if (changesMask[73])
{
- data << float(ModSpellHaste);
+ data << int16(TrainingPointsUsed);
}
if (changesMask[74])
{
- data << float(ModHaste);
+ data << int16(TrainingPointsTotal);
}
if (changesMask[75])
{
- data << float(ModRangedHaste);
+ data << int32(BaseMana);
}
if (changesMask[76])
{
- data << float(ModHasteRegen);
+ data << int32(BaseHealth);
}
if (changesMask[77])
{
- data << float(ModTimeRate);
+ data << uint8(SheatheState);
}
if (changesMask[78])
{
- data << int32(CreatedBySpell);
+ data << uint8(ViewerDependentValue<PvpFlagsTag>::GetValue(this, owner, receiver));
}
if (changesMask[79])
{
- data << int32(EmoteState);
+ data << uint8(PetFlags);
}
if (changesMask[80])
{
- data << int32(BaseMana);
+ data << uint8(ShapeshiftForm);
}
if (changesMask[81])
{
- data << int32(BaseHealth);
+ data << int32(AttackPower);
}
if (changesMask[82])
{
- data << uint8(SheatheState);
+ data << int32(AttackPowerModPos);
}
if (changesMask[83])
{
- data << uint8(ViewerDependentValue<PvpFlagsTag>::GetValue(this, owner, receiver));
+ data << int32(AttackPowerModNeg);
}
if (changesMask[84])
{
- data << uint8(PetFlags);
+ data << float(AttackPowerMultiplier);
}
if (changesMask[85])
{
- data << uint8(ShapeshiftForm);
+ data << int32(RangedAttackPower);
}
if (changesMask[86])
{
- data << int32(AttackPower);
+ data << int32(RangedAttackPowerModPos);
}
if (changesMask[87])
{
- data << int32(AttackPowerModPos);
+ data << int32(RangedAttackPowerModNeg);
}
if (changesMask[88])
{
- data << int32(AttackPowerModNeg);
+ data << float(RangedAttackPowerMultiplier);
}
if (changesMask[89])
{
- data << float(AttackPowerMultiplier);
+ data << int32(SetAttackSpeedAura);
}
if (changesMask[90])
{
- data << int32(AttackPowerModSupport);
+ data << float(Lifesteal);
}
if (changesMask[91])
{
- data << int32(RangedAttackPower);
+ data << float(MinRangedDamage);
}
if (changesMask[92])
{
- data << int32(RangedAttackPowerModPos);
+ data << float(MaxRangedDamage);
}
if (changesMask[93])
{
- data << int32(RangedAttackPowerModNeg);
+ data << float(MaxHealthModifier);
}
if (changesMask[94])
{
- data << float(RangedAttackPowerMultiplier);
+ data << float(HoverHeight);
}
if (changesMask[95])
{
- data << int32(RangedAttackPowerModSupport);
+ data << int32(MinItemLevelCutoff);
}
}
if (changesMask[96])
{
if (changesMask[97])
{
- data << int32(MainHandWeaponAttackPower);
+ data << int32(MinItemLevel);
}
if (changesMask[98])
{
- data << int32(OffHandWeaponAttackPower);
+ data << int32(MaxItemLevel);
}
if (changesMask[99])
{
- data << int32(RangedWeaponAttackPower);
+ data << int32(WildBattlePetLevel);
}
if (changesMask[100])
{
- data << int32(SetAttackSpeedAura);
+ data << uint32(BattlePetCompanionNameTimestamp);
}
if (changesMask[101])
{
- data << float(Lifesteal);
+ data << int32(ViewerDependentValue<InteractSpellIDTag>::GetValue(this, owner, receiver));
}
if (changesMask[102])
{
- data << float(MinRangedDamage);
+ data << int32(ScaleDuration);
}
if (changesMask[103])
{
- data << float(MaxRangedDamage);
+ data << int32(LooksLikeMountID);
}
if (changesMask[104])
{
- data << float(ManaCostMultiplier);
+ data << int32(LooksLikeCreatureID);
}
if (changesMask[105])
{
- data << float(MaxHealthModifier);
+ data << int32(LookAtControllerID);
}
if (changesMask[106])
{
- data << float(HoverHeight);
+ data << int32(PerksVendorItemID);
}
if (changesMask[107])
{
- data << int32(MinItemLevelCutoff);
+ data << GuildGUID;
}
if (changesMask[108])
{
- data << int32(MinItemLevel);
+ data << SkinningOwnerGUID;
}
if (changesMask[109])
{
- data << int32(MaxItemLevel);
- }
- if (changesMask[110])
- {
- data << int32(AzeriteItemLevel);
- }
- if (changesMask[111])
- {
- data << int32(WildBattlePetLevel);
- }
- if (changesMask[112])
- {
- data << int32(BattlePetCompanionExperience);
- }
- if (changesMask[113])
- {
- data << uint32(BattlePetCompanionNameTimestamp);
- }
- if (changesMask[114])
- {
- data << int32(ViewerDependentValue<InteractSpellIDTag>::GetValue(this, owner, receiver));
- }
- if (changesMask[115])
- {
- data << int32(ScaleDuration);
- }
- if (changesMask[116])
- {
- data << int32(LooksLikeMountID);
- }
- if (changesMask[117])
- {
- data << int32(LooksLikeCreatureID);
- }
- if (changesMask[118])
- {
- data << int32(LookAtControllerID);
- }
- if (changesMask[119])
- {
- data << int32(PerksVendorItemID);
- }
- if (changesMask[120])
- {
- data << int32(TaxiNodesID);
- }
- if (changesMask[121])
- {
- data << GuildGUID;
- }
- if (changesMask[122])
- {
data << int32(FlightCapabilityID);
}
- if (changesMask[123])
+ if (changesMask[110])
{
data << float(GlideEventSpeedDivisor);
}
- if (changesMask[124])
- {
- data << uint32(SilencedSchoolMask);
- }
- if (changesMask[125])
+ if (changesMask[111])
{
data << uint32(CurrentAreaID);
}
- if (changesMask[126])
+ if (changesMask[112])
{
- data << NameplateAttachToGUID;
+ data << ComboTarget;
}
}
- if (changesMask[127])
+ if (changesMask[113])
{
for (uint32 i = 0; i < 2; ++i)
{
- if (changesMask[128 + i])
+ if (changesMask[114 + i])
{
data << uint32(ViewerDependentValue<NpcFlagsTag>::GetValue(this, i, owner, receiver));
}
}
}
- if (changesMask[130])
+ if (changesMask[116])
{
for (uint32 i = 0; i < 10; ++i)
{
- if (changesMask[131 + i])
+ if (changesMask[117 + i])
{
- data << int32(Power[i]);
+ data << float(PowerRegenFlatModifier[i]);
}
- if (changesMask[141 + i])
+ if (changesMask[127 + i])
{
- data << int32(MaxPower[i]);
+ data << float(PowerRegenInterruptedFlatModifier[i]);
}
- if (changesMask[151 + i])
+ if (changesMask[137 + i])
{
- data << float(PowerRegenFlatModifier[i]);
+ data << int32(Power[i]);
}
- if (changesMask[161 + i])
+ if (changesMask[147 + i])
{
- data << float(PowerRegenInterruptedFlatModifier[i]);
+ data << int32(MaxPower[i]);
+ }
+ if (changesMask[157 + i])
+ {
+ data << float(ModPowerRegen[i]);
}
}
}
- if (changesMask[171])
+ if (changesMask[167])
{
for (uint32 i = 0; i < 3; ++i)
{
- if (changesMask[172 + i])
+ if (changesMask[168 + i])
{
VirtualItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
- if (changesMask[175])
+ if (changesMask[171])
{
for (uint32 i = 0; i < 2; ++i)
{
- if (changesMask[176 + i])
+ if (changesMask[172 + i])
{
data << uint32(AttackRoundBaseTime[i]);
}
}
}
- if (changesMask[178])
+ if (changesMask[174])
{
- for (uint32 i = 0; i < 4; ++i)
+ for (uint32 i = 0; i < 5; ++i)
{
- if (changesMask[179 + i])
+ if (changesMask[175 + i])
{
data << int32(Stats[i]);
}
- if (changesMask[183 + i])
+ if (changesMask[180 + i])
{
data << int32(StatPosBuff[i]);
}
- if (changesMask[187 + i])
+ if (changesMask[185 + i])
{
data << int32(StatNegBuff[i]);
}
- if (changesMask[191 + i])
- {
- data << int32(StatSupportBuff[i]);
- }
}
}
- if (changesMask[195])
+ if (changesMask[190])
{
for (uint32 i = 0; i < 7; ++i)
{
- if (changesMask[196 + i])
+ if (changesMask[191 + i])
{
data << int32(Resistances[i]);
}
- if (changesMask[203 + i])
+ if (changesMask[198 + i])
{
- data << int32(BonusResistanceMods[i]);
+ data << int32(PowerCostModifier[i]);
}
- if (changesMask[210 + i])
+ if (changesMask[205 + i])
{
- data << int32(ManaCostModifier[i]);
+ data << float(PowerCostMultiplier[i]);
+ }
+ }
+ }
+ if (changesMask[212])
+ {
+ for (uint32 i = 0; i < 7; ++i)
+ {
+ if (changesMask[213 + i])
+ {
+ data << int32(ResistanceBuffModsPositive[i]);
+ }
+ if (changesMask[220 + i])
+ {
+ data << int32(ResistanceBuffModsNegative[i]);
}
}
}
@@ -1821,12 +1493,12 @@ void UnitData::ClearChangesMask()
Base::ClearChangesMask(PassiveSpells);
Base::ClearChangesMask(WorldEffects);
Base::ClearChangesMask(ChannelObjects);
+ Base::ClearChangesMask(Health);
+ Base::ClearChangesMask(MaxHealth);
Base::ClearChangesMask(DisplayID);
Base::ClearChangesMask(StateSpellVisualID);
Base::ClearChangesMask(StateAnimID);
Base::ClearChangesMask(StateAnimKitID);
- Base::ClearChangesMask(StateWorldEffectsQuestObjectiveID);
- Base::ClearChangesMask(SpellOverrideNameID);
Base::ClearChangesMask(Charm);
Base::ClearChangesMask(Summon);
Base::ClearChangesMask(Critter);
@@ -1839,7 +1511,6 @@ void UnitData::ClearChangesMask()
Base::ClearChangesMask(BattlePetCompanionGUID);
Base::ClearChangesMask(BattlePetDBID);
Base::ClearChangesMask(ChannelData);
- Base::ClearChangesMask(SpellEmpowerStage);
Base::ClearChangesMask(SummonedByHomeRealm);
Base::ClearChangesMask(Race);
Base::ClearChangesMask(ClassId);
@@ -1847,8 +1518,6 @@ void UnitData::ClearChangesMask()
Base::ClearChangesMask(Sex);
Base::ClearChangesMask(DisplayPower);
Base::ClearChangesMask(OverrideDisplayPowerID);
- Base::ClearChangesMask(Health);
- Base::ClearChangesMask(MaxHealth);
Base::ClearChangesMask(Level);
Base::ClearChangesMask(EffectiveLevel);
Base::ClearChangesMask(ContentTuningID);
@@ -1867,12 +1536,9 @@ void UnitData::ClearChangesMask()
Base::ClearChangesMask(BoundingRadius);
Base::ClearChangesMask(CombatReach);
Base::ClearChangesMask(DisplayScale);
- Base::ClearChangesMask(CreatureFamily);
- Base::ClearChangesMask(CreatureType);
Base::ClearChangesMask(NativeDisplayID);
Base::ClearChangesMask(NativeXDisplayScale);
Base::ClearChangesMask(MountDisplayID);
- Base::ClearChangesMask(CosmeticMountDisplayID);
Base::ClearChangesMask(MinDamage);
Base::ClearChangesMask(MaxDamage);
Base::ClearChangesMask(MinOffHandDamage);
@@ -1886,7 +1552,6 @@ void UnitData::ClearChangesMask()
Base::ClearChangesMask(PetExperience);
Base::ClearChangesMask(PetNextLevelExperience);
Base::ClearChangesMask(ModCastingSpeed);
- Base::ClearChangesMask(ModCastingSpeedNeg);
Base::ClearChangesMask(ModSpellHaste);
Base::ClearChangesMask(ModHaste);
Base::ClearChangesMask(ModRangedHaste);
@@ -1894,6 +1559,8 @@ void UnitData::ClearChangesMask()
Base::ClearChangesMask(ModTimeRate);
Base::ClearChangesMask(CreatedBySpell);
Base::ClearChangesMask(EmoteState);
+ Base::ClearChangesMask(TrainingPointsUsed);
+ Base::ClearChangesMask(TrainingPointsTotal);
Base::ClearChangesMask(BaseMana);
Base::ClearChangesMask(BaseHealth);
Base::ClearChangesMask(SheatheState);
@@ -1904,28 +1571,20 @@ void UnitData::ClearChangesMask()
Base::ClearChangesMask(AttackPowerModPos);
Base::ClearChangesMask(AttackPowerModNeg);
Base::ClearChangesMask(AttackPowerMultiplier);
- Base::ClearChangesMask(AttackPowerModSupport);
Base::ClearChangesMask(RangedAttackPower);
Base::ClearChangesMask(RangedAttackPowerModPos);
Base::ClearChangesMask(RangedAttackPowerModNeg);
Base::ClearChangesMask(RangedAttackPowerMultiplier);
- Base::ClearChangesMask(RangedAttackPowerModSupport);
- Base::ClearChangesMask(MainHandWeaponAttackPower);
- Base::ClearChangesMask(OffHandWeaponAttackPower);
- Base::ClearChangesMask(RangedWeaponAttackPower);
Base::ClearChangesMask(SetAttackSpeedAura);
Base::ClearChangesMask(Lifesteal);
Base::ClearChangesMask(MinRangedDamage);
Base::ClearChangesMask(MaxRangedDamage);
- Base::ClearChangesMask(ManaCostMultiplier);
Base::ClearChangesMask(MaxHealthModifier);
Base::ClearChangesMask(HoverHeight);
Base::ClearChangesMask(MinItemLevelCutoff);
Base::ClearChangesMask(MinItemLevel);
Base::ClearChangesMask(MaxItemLevel);
- Base::ClearChangesMask(AzeriteItemLevel);
Base::ClearChangesMask(WildBattlePetLevel);
- Base::ClearChangesMask(BattlePetCompanionExperience);
Base::ClearChangesMask(BattlePetCompanionNameTimestamp);
Base::ClearChangesMask(InteractSpellID);
Base::ClearChangesMask(ScaleDuration);
@@ -1933,27 +1592,28 @@ void UnitData::ClearChangesMask()
Base::ClearChangesMask(LooksLikeCreatureID);
Base::ClearChangesMask(LookAtControllerID);
Base::ClearChangesMask(PerksVendorItemID);
- Base::ClearChangesMask(TaxiNodesID);
Base::ClearChangesMask(GuildGUID);
+ Base::ClearChangesMask(SkinningOwnerGUID);
Base::ClearChangesMask(FlightCapabilityID);
Base::ClearChangesMask(GlideEventSpeedDivisor);
- Base::ClearChangesMask(SilencedSchoolMask);
Base::ClearChangesMask(CurrentAreaID);
- Base::ClearChangesMask(NameplateAttachToGUID);
+ Base::ClearChangesMask(ComboTarget);
Base::ClearChangesMask(NpcFlags);
- Base::ClearChangesMask(Power);
- Base::ClearChangesMask(MaxPower);
Base::ClearChangesMask(PowerRegenFlatModifier);
Base::ClearChangesMask(PowerRegenInterruptedFlatModifier);
+ Base::ClearChangesMask(Power);
+ Base::ClearChangesMask(MaxPower);
+ Base::ClearChangesMask(ModPowerRegen);
Base::ClearChangesMask(VirtualItems);
Base::ClearChangesMask(AttackRoundBaseTime);
Base::ClearChangesMask(Stats);
Base::ClearChangesMask(StatPosBuff);
Base::ClearChangesMask(StatNegBuff);
- Base::ClearChangesMask(StatSupportBuff);
Base::ClearChangesMask(Resistances);
- Base::ClearChangesMask(BonusResistanceMods);
- Base::ClearChangesMask(ManaCostModifier);
+ Base::ClearChangesMask(PowerCostModifier);
+ Base::ClearChangesMask(PowerCostMultiplier);
+ Base::ClearChangesMask(ResistanceBuffModsPositive);
+ Base::ClearChangesMask(ResistanceBuffModsNegative);
_changesMask.ResetAll();
}
@@ -1980,10 +1640,9 @@ void QuestLog::WriteCreate(ByteBuffer& data, Player const* owner, Player const*
data << int64(EndTime);
data << int32(QuestID);
data << uint32(StateFlags);
- data << uint32(ObjectiveFlags);
for (uint32 i = 0; i < 24; ++i)
{
- data << int16(ObjectiveProgress[i]);
+ data << uint16(ObjectiveProgress[i]);
}
}
@@ -2012,18 +1671,14 @@ void QuestLog::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player cons
{
data << uint32(StateFlags);
}
- if (changesMask[4])
- {
- data << uint32(ObjectiveFlags);
- }
}
- if (changesMask[5])
+ if (changesMask[4])
{
for (uint32 i = 0; i < 24; ++i)
{
- if (changesMask[6 + i])
+ if (changesMask[5 + i])
{
- data << int16(ObjectiveProgress[i]);
+ data << uint16(ObjectiveProgress[i]);
}
}
}
@@ -2034,7 +1689,6 @@ void QuestLog::ClearChangesMask()
Base::ClearChangesMask(EndTime);
Base::ClearChangesMask(QuestID);
Base::ClearChangesMask(StateFlags);
- Base::ClearChangesMask(ObjectiveFlags);
Base::ClearChangesMask(ObjectiveProgress);
_changesMask.ResetAll();
}
@@ -2042,6 +1696,7 @@ void QuestLog::ClearChangesMask()
void ArenaCooldown::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int32(SpellID);
+ data << int32(ItemID);
data << int32(Charges);
data << uint32(Flags);
data << uint32(StartTime);
@@ -2056,7 +1711,7 @@ void ArenaCooldown::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player
if (ignoreChangesMask)
changesMask.SetAll();
- data.WriteBits(changesMask.GetBlock(0), 8);
+ data.WriteBits(changesMask.GetBlock(0), 9);
data.FlushBits();
if (changesMask[0])
@@ -2067,26 +1722,30 @@ void ArenaCooldown::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player
}
if (changesMask[2])
{
- data << int32(Charges);
+ data << int32(ItemID);
}
if (changesMask[3])
{
- data << uint32(Flags);
+ data << int32(Charges);
}
if (changesMask[4])
{
- data << uint32(StartTime);
+ data << uint32(Flags);
}
if (changesMask[5])
{
- data << uint32(EndTime);
+ data << uint32(StartTime);
}
if (changesMask[6])
{
- data << uint32(NextChargeTime);
+ data << uint32(EndTime);
}
if (changesMask[7])
{
+ data << uint32(NextChargeTime);
+ }
+ if (changesMask[8])
+ {
data << uint8(MaxCharges);
}
}
@@ -2095,6 +1754,7 @@ void ArenaCooldown::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player
void ArenaCooldown::ClearChangesMask()
{
Base::ClearChangesMask(SpellID);
+ Base::ClearChangesMask(ItemID);
Base::ClearChangesMask(Charges);
Base::ClearChangesMask(Flags);
Base::ClearChangesMask(StartTime);
@@ -2104,27 +1764,6 @@ void ArenaCooldown::ClearChangesMask()
_changesMask.ResetAll();
}
-void CTROptions::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
-{
- data << int32(ContentTuningConditionMask);
- data << uint32(Field_4);
- data << uint32(ExpansionLevelMask);
-}
-
-void CTROptions::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
-{
- data << int32(ContentTuningConditionMask);
- data << uint32(Field_4);
- data << uint32(ExpansionLevelMask);
-}
-
-bool CTROptions::operator==(CTROptions const& right) const
-{
- return ContentTuningConditionMask == right.ContentTuningConditionMask
- && Field_4 == right.Field_4
- && ExpansionLevelMask == right.ExpansionLevelMask;
-}
-
void DeclinedNames::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
for (uint32 i = 0; i < 5; ++i)
@@ -2246,24 +1885,25 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi
data << uint32(GuildDeleteDate);
data << int32(GuildLevel);
data << uint32(Customizations.size());
- data << uint32(QaCustomizations.size());
for (uint32 i = 0; i < 2; ++i)
{
data << uint8(PartyType[i]);
}
+ data << uint8(NumBankSlots);
data << uint8(NativeSex);
data << uint8(Inebriation);
data << uint8(PvpTitle);
data << uint8(ArenaFaction);
+ data << uint8(PvpRank);
+ data << int32(Field_88);
data << uint32(DuelTeam);
data << int32(GuildTimeStamp);
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
{
- for (uint32 i = 0; i < 175; ++i)
+ for (uint32 i = 0; i < 25; ++i)
{
QuestLog[i].WriteCreate(data, owner, receiver);
}
- data << uint32(QuestSessionQuestLog.size());
}
for (uint32 i = 0; i < 19; ++i)
{
@@ -2282,12 +1922,7 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi
data << int32(HonorLevel);
data << int64(LogoutTime);
data << uint32(ArenaCooldowns.size());
- data << int32(Field_B0);
- data << int32(Field_B4);
data << int32(CurrentBattlePetSpeciesID);
- CtrOptions->WriteCreate(data, owner, receiver);
- data << int32(CovenantID);
- data << int32(SoulbindID);
data << uint32(VisualItemReplacements.size());
for (uint32 i = 0; i < 19; ++i)
{
@@ -2298,17 +1933,6 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi
{
Customizations[i].WriteCreate(data, owner, receiver);
}
- for (uint32 i = 0; i < QaCustomizations.size(); ++i)
- {
- QaCustomizations[i].WriteCreate(data, owner, receiver);
- }
- if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
- {
- for (uint32 i = 0; i < QuestSessionQuestLog.size(); ++i)
- {
- QuestSessionQuestLog[i].WriteCreate(data, owner, receiver);
- }
- }
for (uint32 i = 0; i < ArenaCooldowns.size(); ++i)
{
ArenaCooldowns[i].WriteCreate(data, owner, receiver);
@@ -2317,13 +1941,7 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi
{
data << int32(VisualItemReplacements[i]);
}
- data.FlushBits();
data.WriteBits(Name->size(), 6);
- if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
- {
- data.WriteBit(HasQuestSession);
- }
- data.WriteBit(HasLevelLink);
data.WriteBits(DeclinedNames.has_value(), 1);
data << DungeonScore;
data.WriteString(Name);
@@ -2336,7 +1954,7 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi
void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
{
- Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x00003FFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xC0000000u, 0xFFFFFFFFu, 0x00001FFFu });
+ Mask allowedMaskForTarget({ 0xFFFFFFFFu, 0x000000FFu, 0xFFFFFFFCu, 0x0001FFFFu });
AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver);
}
@@ -2344,20 +1962,20 @@ void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi
void PlayerData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
{
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
- allowedMaskForTarget |= { 0x00000022u, 0xFFFFC000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x3FFFFFFFu, 0x00000000u, 0x00000000u };
+ allowedMaskForTarget |= { 0x00000000u, 0xFFFFFF00u, 0x00000003u, 0x00000000u };
}
void PlayerData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
{
- Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x00003FFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xC0000000u, 0xFFFFFFFFu, 0x00001FFFu });
+ Mask allowedMaskForTarget({ 0xFFFFFFFFu, 0x000000FFu, 0xFFFFFFFCu, 0x0001FFFFu });
AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
changesMask &= allowedMaskForTarget;
}
void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Player const* owner, Player const* receiver) const
{
- data.WriteBits(changesMask.GetBlocksMask(0), 9);
- for (uint32 i = 0; i < 9; ++i)
+ data.WriteBits(changesMask.GetBlocksMask(0), 4);
+ for (uint32 i = 0; i < 4; ++i)
if (changesMask.GetBlock(i))
data.WriteBits(changesMask.GetBlock(i), 32);
@@ -2366,41 +1984,19 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign
{
if (changesMask[1])
{
- data.WriteBit(HasQuestSession);
- }
- if (changesMask[2])
- {
- data.WriteBit(HasLevelLink);
- }
- if (changesMask[3])
- {
if (!ignoreNestedChangesMask)
Customizations.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(Customizations.size(), data);
}
- if (changesMask[4])
- {
- if (!ignoreNestedChangesMask)
- QaCustomizations.WriteUpdateMask(data);
- else
- WriteCompleteDynamicFieldUpdateMask(QaCustomizations.size(), data);
- }
- if (changesMask[5])
- {
- if (!ignoreNestedChangesMask)
- QuestSessionQuestLog.WriteUpdateMask(data);
- else
- WriteCompleteDynamicFieldUpdateMask(QuestSessionQuestLog.size(), data);
- }
- if (changesMask[6])
+ if (changesMask[2])
{
if (!ignoreNestedChangesMask)
ArenaCooldowns.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(ArenaCooldowns.size(), data);
}
- if (changesMask[7])
+ if (changesMask[3])
{
if (!ignoreNestedChangesMask)
VisualItemReplacements.WriteUpdateMask(data);
@@ -2411,7 +2007,7 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign
data.FlushBits();
if (changesMask[0])
{
- if (changesMask[3])
+ if (changesMask[1])
{
for (uint32 i = 0; i < Customizations.size(); ++i)
{
@@ -2421,30 +2017,7 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign
}
}
}
- if (changesMask[4])
- {
- for (uint32 i = 0; i < QaCustomizations.size(); ++i)
- {
- if (QaCustomizations.HasChanged(i) || ignoreNestedChangesMask)
- {
- QaCustomizations[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
- }
- }
- }
- if (changesMask[5])
- {
- for (uint32 i = 0; i < QuestSessionQuestLog.size(); ++i)
- {
- if (QuestSessionQuestLog.HasChanged(i) || ignoreNestedChangesMask)
- {
- if (noQuestLogChangesMask)
- QuestSessionQuestLog[i].WriteCreate(data, owner, receiver);
- else
- QuestSessionQuestLog[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
- }
- }
- }
- if (changesMask[6])
+ if (changesMask[2])
{
for (uint32 i = 0; i < ArenaCooldowns.size(); ++i)
{
@@ -2454,7 +2027,7 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign
}
}
}
- if (changesMask[7])
+ if (changesMask[3])
{
for (uint32 i = 0; i < VisualItemReplacements.size(); ++i)
{
@@ -2464,148 +2037,152 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign
}
}
}
- if (changesMask[8])
+ if (changesMask[4])
{
data << DuelArbiter;
}
- if (changesMask[9])
+ if (changesMask[5])
{
data << WowAccount;
}
- if (changesMask[10])
+ if (changesMask[6])
{
data << BnetAccount;
}
- if (changesMask[11])
+ if (changesMask[7])
{
data << uint64(GuildClubMemberID);
}
- if (changesMask[12])
+ if (changesMask[8])
{
data << LootTargetGUID;
}
- if (changesMask[13])
+ if (changesMask[9])
{
data << uint32(PlayerFlags);
}
- if (changesMask[14])
+ if (changesMask[10])
{
data << uint32(PlayerFlagsEx);
}
- if (changesMask[15])
+ if (changesMask[11])
{
data << uint32(GuildRankID);
}
- if (changesMask[16])
+ if (changesMask[12])
{
data << uint32(GuildDeleteDate);
}
- if (changesMask[17])
+ if (changesMask[13])
{
data << int32(GuildLevel);
}
- if (changesMask[18])
+ if (changesMask[14])
+ {
+ data << uint8(NumBankSlots);
+ }
+ if (changesMask[15])
{
data << uint8(NativeSex);
}
- if (changesMask[19])
+ if (changesMask[16])
{
data << uint8(Inebriation);
}
- if (changesMask[20])
+ if (changesMask[17])
{
data << uint8(PvpTitle);
}
- if (changesMask[21])
+ if (changesMask[18])
{
data << uint8(ArenaFaction);
}
- if (changesMask[22])
+ if (changesMask[19])
+ {
+ data << uint8(PvpRank);
+ }
+ if (changesMask[20])
+ {
+ data << int32(Field_88);
+ }
+ if (changesMask[21])
{
data << uint32(DuelTeam);
}
- if (changesMask[23])
+ if (changesMask[22])
{
data << int32(GuildTimeStamp);
}
- if (changesMask[24])
+ if (changesMask[23])
{
data << int32(PlayerTitle);
}
- if (changesMask[25])
+ if (changesMask[24])
{
data << int32(FakeInebriation);
}
- if (changesMask[26])
+ if (changesMask[25])
{
data << uint32(VirtualPlayerRealm);
}
- if (changesMask[27])
+ if (changesMask[26])
{
data << uint32(CurrentSpecID);
}
- if (changesMask[28])
+ if (changesMask[27])
{
data << int32(TaxiMountAnimKitID);
}
- if (changesMask[29])
+ if (changesMask[28])
{
data << uint8(CurrentBattlePetBreedQuality);
}
- if (changesMask[30])
+ if (changesMask[29])
{
data << int32(HonorLevel);
}
- if (changesMask[31])
+ if (changesMask[30])
{
data << int64(LogoutTime);
}
}
if (changesMask[32])
{
- if (changesMask[34])
- {
- data << int32(Field_B0);
- }
- if (changesMask[35])
- {
- data << int32(Field_B4);
- }
- if (changesMask[36])
+ if (changesMask[33])
{
data << int32(CurrentBattlePetSpeciesID);
}
- if (changesMask[37])
- {
- CtrOptions->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
- }
- if (changesMask[38])
- {
- data << int32(CovenantID);
- }
- if (changesMask[39])
- {
- data << int32(SoulbindID);
- }
- if (changesMask[42])
+ if (changesMask[36])
{
PersonalTabard->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
- if (changesMask[33])
+ }
+ if (changesMask[0])
+ {
+ if (changesMask[31])
{
data.WriteBits(Name->size(), 32);
}
+ }
+ if (changesMask[32])
+ {
data.WriteBits(DeclinedNames.has_value(), 1);
data.FlushBits();
- if (changesMask[40])
+ if (changesMask[34])
{
data << DungeonScore;
}
- if (changesMask[33])
+ }
+ if (changesMask[0])
+ {
+ if (changesMask[31])
{
data.WriteString(Name);
}
- if (changesMask[41])
+ }
+ if (changesMask[32])
+ {
+ if (changesMask[35])
{
if (DeclinedNames.has_value())
{
@@ -2613,21 +2190,21 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign
}
}
}
- if (changesMask[43])
+ if (changesMask[37])
{
for (uint32 i = 0; i < 2; ++i)
{
- if (changesMask[44 + i])
+ if (changesMask[38 + i])
{
data << uint8(PartyType[i]);
}
}
}
- if (changesMask[46])
+ if (changesMask[40])
{
- for (uint32 i = 0; i < 175; ++i)
+ for (uint32 i = 0; i < 25; ++i)
{
- if (changesMask[47 + i])
+ if (changesMask[41 + i])
{
if (noQuestLogChangesMask)
QuestLog[i].WriteCreate(data, owner, receiver);
@@ -2636,31 +2213,31 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign
}
}
}
- if (changesMask[222])
+ if (changesMask[66])
{
for (uint32 i = 0; i < 19; ++i)
{
- if (changesMask[223 + i])
+ if (changesMask[67 + i])
{
VisibleItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
- if (changesMask[242])
+ if (changesMask[86])
{
for (uint32 i = 0; i < 6; ++i)
{
- if (changesMask[243 + i])
+ if (changesMask[87 + i])
{
data << float(AvgItemLevel[i]);
}
}
}
- if (changesMask[249])
+ if (changesMask[93])
{
for (uint32 i = 0; i < 19; ++i)
{
- if (changesMask[250 + i])
+ if (changesMask[94 + i])
{
data << uint32(Field_3120[i]);
}
@@ -2671,11 +2248,7 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign
void PlayerData::ClearChangesMask()
{
- Base::ClearChangesMask(HasQuestSession);
- Base::ClearChangesMask(HasLevelLink);
Base::ClearChangesMask(Customizations);
- Base::ClearChangesMask(QaCustomizations);
- Base::ClearChangesMask(QuestSessionQuestLog);
Base::ClearChangesMask(ArenaCooldowns);
Base::ClearChangesMask(VisualItemReplacements);
Base::ClearChangesMask(DuelArbiter);
@@ -2688,10 +2261,13 @@ void PlayerData::ClearChangesMask()
Base::ClearChangesMask(GuildRankID);
Base::ClearChangesMask(GuildDeleteDate);
Base::ClearChangesMask(GuildLevel);
+ Base::ClearChangesMask(NumBankSlots);
Base::ClearChangesMask(NativeSex);
Base::ClearChangesMask(Inebriation);
Base::ClearChangesMask(PvpTitle);
Base::ClearChangesMask(ArenaFaction);
+ Base::ClearChangesMask(PvpRank);
+ Base::ClearChangesMask(Field_88);
Base::ClearChangesMask(DuelTeam);
Base::ClearChangesMask(GuildTimeStamp);
Base::ClearChangesMask(PlayerTitle);
@@ -2703,12 +2279,7 @@ void PlayerData::ClearChangesMask()
Base::ClearChangesMask(HonorLevel);
Base::ClearChangesMask(LogoutTime);
Base::ClearChangesMask(Name);
- Base::ClearChangesMask(Field_B0);
- Base::ClearChangesMask(Field_B4);
Base::ClearChangesMask(CurrentBattlePetSpeciesID);
- Base::ClearChangesMask(CtrOptions);
- Base::ClearChangesMask(CovenantID);
- Base::ClearChangesMask(SoulbindID);
Base::ClearChangesMask(DungeonScore);
Base::ClearChangesMask(DeclinedNames);
Base::ClearChangesMask(PersonalTabard);
@@ -3125,186 +2696,6 @@ void ResearchHistory::ClearChangesMask()
_changesMask.ResetAll();
}
-void MawPower::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
-{
- data << int32(Field_0);
- data << int32(Field_4);
- data << int32(Field_8);
-}
-
-void MawPower::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
-{
- data << int32(Field_0);
- data << int32(Field_4);
- data << int32(Field_8);
-}
-
-bool MawPower::operator==(MawPower const& right) const
-{
- return Field_0 == right.Field_0
- && Field_4 == right.Field_4
- && Field_8 == right.Field_8;
-}
-
-void MultiFloorExplore::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
-{
- data << uint32(WorldMapOverlayIDs.size());
- for (uint32 i = 0; i < WorldMapOverlayIDs.size(); ++i)
- {
- data << int32(WorldMapOverlayIDs[i]);
- }
-}
-
-void MultiFloorExplore::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
-{
- data << uint32(WorldMapOverlayIDs.size());
- for (uint32 i = 0; i < WorldMapOverlayIDs.size(); ++i)
- {
- data << int32(WorldMapOverlayIDs[i]);
- }
- data.FlushBits();
-}
-
-bool MultiFloorExplore::operator==(MultiFloorExplore const& right) const
-{
- return WorldMapOverlayIDs == right.WorldMapOverlayIDs;
-}
-
-void RecipeProgressionInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
-{
- data << uint16(RecipeProgressionGroupID);
- data << uint16(Experience);
-}
-
-void RecipeProgressionInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
-{
- data << uint16(RecipeProgressionGroupID);
- data << uint16(Experience);
-}
-
-bool RecipeProgressionInfo::operator==(RecipeProgressionInfo const& right) const
-{
- return RecipeProgressionGroupID == right.RecipeProgressionGroupID
- && Experience == right.Experience;
-}
-
-void ActivePlayerUnk901::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
-{
- data << Field_0;
- data << int32(Field_10);
-}
-
-void ActivePlayerUnk901::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
-{
- Mask changesMask = _changesMask;
- if (ignoreChangesMask)
- changesMask.SetAll();
-
- data.WriteBits(changesMask.GetBlock(0), 3);
-
- data.FlushBits();
- if (changesMask[0])
- {
- if (changesMask[1])
- {
- data << Field_0;
- }
- if (changesMask[2])
- {
- data << int32(Field_10);
- }
- }
-}
-
-void ActivePlayerUnk901::ClearChangesMask()
-{
- Base::ClearChangesMask(Field_0);
- Base::ClearChangesMask(Field_10);
- _changesMask.ResetAll();
-}
-
-void QuestSession::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
-{
- data << Owner;
- for (uint32 i = 0; i < 950; ++i)
- {
- data << uint64(QuestCompleted[i]);
- }
-}
-
-void QuestSession::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
-{
- Mask changesMask = _changesMask;
- if (ignoreChangesMask)
- changesMask.SetAll();
-
- data.WriteBits(changesMask.GetBlocksMask(0), 30);
- for (uint32 i = 0; i < 30; ++i)
- if (changesMask.GetBlock(i))
- data.WriteBits(changesMask.GetBlock(i), 32);
-
- data.FlushBits();
- if (changesMask[0])
- {
- if (changesMask[1])
- {
- data << Owner;
- }
- }
- if (changesMask[2])
- {
- for (uint32 i = 0; i < 950; ++i)
- {
- if (changesMask[3 + i])
- {
- data << uint64(QuestCompleted[i]);
- }
- }
- }
-}
-
-void QuestSession::ClearChangesMask()
-{
- Base::ClearChangesMask(Owner);
- Base::ClearChangesMask(QuestCompleted);
- _changesMask.ResetAll();
-}
-
-void ReplayedQuest::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
-{
- data << int32(QuestID);
- data << uint32(ReplayTime);
-}
-
-void ReplayedQuest::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
-{
- Mask changesMask = _changesMask;
- if (ignoreChangesMask)
- changesMask.SetAll();
-
- data.WriteBits(changesMask.GetBlock(0), 3);
-
- data.FlushBits();
- if (changesMask[0])
- {
- if (changesMask[1])
- {
- data << int32(QuestID);
- }
- if (changesMask[2])
- {
- data << uint32(ReplayTime);
- }
- }
-}
-
-void ReplayedQuest::ClearChangesMask()
-{
- Base::ClearChangesMask(QuestID);
- Base::ClearChangesMask(ReplayTime);
- _changesMask.ResetAll();
-}
-
void TraitEntry::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int32(TraitNodeID);
@@ -3463,391 +2854,6 @@ void TraitConfig::ClearChangesMask()
_changesMask.ResetAll();
}
-void CraftingOrderItem::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
-{
- data << uint64(Field_0);
- data << ItemGUID;
- data << OwnerGUID;
- data << int32(ItemID);
- data << uint32(Quantity);
- data << int32(ReagentQuality);
- data.WriteBits(DataSlotIndex.has_value(), 1);
- data.FlushBits();
- if (DataSlotIndex.has_value())
- {
- data << uint8(DataSlotIndex);
- }
-}
-
-void CraftingOrderItem::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
-{
- Mask changesMask = _changesMask;
- if (ignoreChangesMask)
- changesMask.SetAll();
-
- data.WriteBits(changesMask.GetBlock(0), 7);
-
- data.FlushBits();
- if (changesMask[0])
- {
- data << uint64(Field_0);
- }
- if (changesMask[1])
- {
- data << ItemGUID;
- }
- if (changesMask[2])
- {
- data << OwnerGUID;
- }
- if (changesMask[3])
- {
- data << int32(ItemID);
- }
- if (changesMask[4])
- {
- data << uint32(Quantity);
- }
- if (changesMask[5])
- {
- data << int32(ReagentQuality);
- }
- data.WriteBits(DataSlotIndex.has_value(), 1);
- data.FlushBits();
- if (changesMask[6])
- {
- if (DataSlotIndex.has_value())
- {
- data << uint8(DataSlotIndex);
- }
- }
-}
-
-void CraftingOrderItem::ClearChangesMask()
-{
- Base::ClearChangesMask(Field_0);
- Base::ClearChangesMask(ItemGUID);
- Base::ClearChangesMask(OwnerGUID);
- Base::ClearChangesMask(ItemID);
- Base::ClearChangesMask(Quantity);
- Base::ClearChangesMask(ReagentQuality);
- Base::ClearChangesMask(DataSlotIndex);
- _changesMask.ResetAll();
-}
-
-void CraftingOrderData::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
-{
- data << int32(Field_0);
- data << uint64(OrderID);
- data << int32(SkillLineAbilityID);
- data << uint8(OrderState);
- data << uint8(OrderType);
- data << uint8(MinQuality);
- data << int64(ExpirationTime);
- data << int64(ClaimEndTime);
- data << int64(TipAmount);
- data << int64(ConsortiumCut);
- data << uint32(Flags);
- data << CustomerGUID;
- data << CustomerAccountGUID;
- data << CrafterGUID;
- data << PersonalCrafterGUID;
- data << uint32(Reagents.size());
- data.WriteBits(CustomerNotes->size(), 10);
- data.WriteBits(OutputItem.has_value(), 1);
- data.WriteBits(OutputItemData.has_value(), 1);
- data.FlushBits();
- for (uint32 i = 0; i < Reagents.size(); ++i)
- {
- Reagents[i].WriteCreate(data, owner, receiver);
- }
- data.WriteString(CustomerNotes);
- if (OutputItem.has_value())
- {
- OutputItem->WriteCreate(data, owner, receiver);
- }
- if (OutputItemData.has_value())
- {
- data << OutputItemData;
- }
- data.FlushBits();
-}
-
-void CraftingOrderData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
-{
- Mask changesMask = _changesMask;
- if (ignoreChangesMask)
- changesMask.SetAll();
-
- data.WriteBits(changesMask.GetBlock(0), 24);
-
- if (changesMask[0])
- {
- if (changesMask[1])
- {
- if (!ignoreChangesMask)
- Reagents.WriteUpdateMask(data);
- else
- WriteCompleteDynamicFieldUpdateMask(Reagents.size(), data);
- }
- }
- data.FlushBits();
- if (changesMask[0])
- {
- if (changesMask[1])
- {
- for (uint32 i = 0; i < Reagents.size(); ++i)
- {
- if (Reagents.HasChanged(i) || ignoreChangesMask)
- {
- Reagents[i].WriteUpdate(data, ignoreChangesMask, owner, receiver);
- }
- }
- }
- if (changesMask[2])
- {
- data << int32(Field_0);
- }
- if (changesMask[3])
- {
- data << uint64(OrderID);
- }
- if (changesMask[4])
- {
- data << int32(SkillLineAbilityID);
- }
- }
- if (changesMask[5])
- {
- if (changesMask[6])
- {
- data << uint8(OrderState);
- }
- if (changesMask[7])
- {
- data << uint8(OrderType);
- }
- if (changesMask[8])
- {
- data << uint8(MinQuality);
- }
- if (changesMask[9])
- {
- data << int64(ExpirationTime);
- }
- }
- if (changesMask[10])
- {
- if (changesMask[11])
- {
- data << int64(ClaimEndTime);
- }
- if (changesMask[12])
- {
- data << int64(TipAmount);
- }
- if (changesMask[13])
- {
- data << int64(ConsortiumCut);
- }
- if (changesMask[14])
- {
- data << uint32(Flags);
- }
- }
- if (changesMask[15])
- {
- if (changesMask[16])
- {
- data << CustomerGUID;
- }
- if (changesMask[17])
- {
- data << CustomerAccountGUID;
- }
- if (changesMask[18])
- {
- data << CrafterGUID;
- }
- if (changesMask[19])
- {
- data << PersonalCrafterGUID;
- }
- }
- if (changesMask[20])
- {
- if (changesMask[21])
- {
- data.WriteBits(CustomerNotes->size(), 10);
- data.WriteString(CustomerNotes);
- }
- data.WriteBits(OutputItem.has_value(), 1);
- data.WriteBits(OutputItemData.has_value(), 1);
- data.FlushBits();
- if (changesMask[22])
- {
- if (OutputItem.has_value())
- {
- OutputItem->WriteUpdate(data, ignoreChangesMask, owner, receiver);
- }
- }
- if (changesMask[23])
- {
- if (OutputItemData.has_value())
- {
- data << OutputItemData;
- }
- }
- }
- data.FlushBits();
-}
-
-void CraftingOrderData::ClearChangesMask()
-{
- Base::ClearChangesMask(Reagents);
- Base::ClearChangesMask(Field_0);
- Base::ClearChangesMask(OrderID);
- Base::ClearChangesMask(SkillLineAbilityID);
- Base::ClearChangesMask(OrderState);
- Base::ClearChangesMask(OrderType);
- Base::ClearChangesMask(MinQuality);
- Base::ClearChangesMask(ExpirationTime);
- Base::ClearChangesMask(ClaimEndTime);
- Base::ClearChangesMask(TipAmount);
- Base::ClearChangesMask(ConsortiumCut);
- Base::ClearChangesMask(Flags);
- Base::ClearChangesMask(CustomerGUID);
- Base::ClearChangesMask(CustomerAccountGUID);
- Base::ClearChangesMask(CrafterGUID);
- Base::ClearChangesMask(PersonalCrafterGUID);
- Base::ClearChangesMask(CustomerNotes);
- Base::ClearChangesMask(OutputItem);
- Base::ClearChangesMask(OutputItemData);
- _changesMask.ResetAll();
-}
-
-void CraftingOrder::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
-{
- Data->WriteCreate(data, owner, receiver);
- data.WriteBits(RecraftItemInfo.has_value(), 1);
- data.WriteBits(Enchantments.size(), 4);
- data.WriteBits(Gems.size(), 2);
- data.FlushBits();
- if (RecraftItemInfo.has_value())
- {
- data << RecraftItemInfo;
- }
- for (uint32 i = 0; i < Enchantments.size(); ++i)
- {
- data << Enchantments[i];
- }
- for (uint32 i = 0; i < Gems.size(); ++i)
- {
- data << Gems[i];
- }
- data.FlushBits();
-}
-
-void CraftingOrder::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
-{
- Mask changesMask = _changesMask;
- if (ignoreChangesMask)
- changesMask.SetAll();
-
- data.WriteBits(changesMask.GetBlock(0), 4);
-
- if (changesMask[0])
- {
- if (!ignoreChangesMask)
- Enchantments.WriteUpdateMask(data, 4);
- else
- WriteCompleteDynamicFieldUpdateMask(Enchantments.size(), data, 4);
- }
- if (changesMask[1])
- {
- if (!ignoreChangesMask)
- Gems.WriteUpdateMask(data, 2);
- else
- WriteCompleteDynamicFieldUpdateMask(Gems.size(), data, 2);
- }
- data.FlushBits();
- if (changesMask[0])
- {
- for (uint32 i = 0; i < Enchantments.size(); ++i)
- {
- if (Enchantments.HasChanged(i) || ignoreChangesMask)
- {
- data << Enchantments[i];
- }
- }
- }
- if (changesMask[1])
- {
- for (uint32 i = 0; i < Gems.size(); ++i)
- {
- if (Gems.HasChanged(i) || ignoreChangesMask)
- {
- data << Gems[i];
- }
- }
- }
- if (changesMask[2])
- {
- Data->WriteUpdate(data, ignoreChangesMask, owner, receiver);
- }
- data.WriteBits(RecraftItemInfo.has_value(), 1);
- data.FlushBits();
- if (changesMask[3])
- {
- if (RecraftItemInfo.has_value())
- {
- data << RecraftItemInfo;
- }
- }
- data.FlushBits();
-}
-
-void CraftingOrder::ClearChangesMask()
-{
- Base::ClearChangesMask(Enchantments);
- Base::ClearChangesMask(Gems);
- Base::ClearChangesMask(Data);
- Base::ClearChangesMask(RecraftItemInfo);
- _changesMask.ResetAll();
-}
-
-void PersonalCraftingOrderCount::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
-{
- data << int32(ProfessionID);
- data << uint32(Count);
-}
-
-void PersonalCraftingOrderCount::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
-{
- Mask changesMask = _changesMask;
- if (ignoreChangesMask)
- changesMask.SetAll();
-
- data.WriteBits(changesMask.GetBlock(0), 2);
-
- data.FlushBits();
- if (changesMask[0])
- {
- data << int32(ProfessionID);
- }
- if (changesMask[1])
- {
- data << uint32(Count);
- }
-}
-
-void PersonalCraftingOrderCount::ClearChangesMask()
-{
- Base::ClearChangesMask(ProfessionID);
- Base::ClearChangesMask(Count);
- _changesMask.ResetAll();
-}
-
void CategoryCooldownMod::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int32(SpellCategoryID);
@@ -4008,47 +3014,6 @@ void StableInfo::ClearChangesMask()
_changesMask.ResetAll();
}
-void CollectableSourceTrackedData::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
-{
- data << int32(TargetType);
- data << int32(TargetID);
- data << int32(CollectableSourceInfoID);
-}
-
-void CollectableSourceTrackedData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
-{
- Mask changesMask = _changesMask;
- if (ignoreChangesMask)
- changesMask.SetAll();
-
- data.WriteBits(changesMask.GetBlock(0), 4);
-
- data.FlushBits();
- if (changesMask[0])
- {
- if (changesMask[1])
- {
- data << int32(TargetType);
- }
- if (changesMask[2])
- {
- data << int32(TargetID);
- }
- if (changesMask[3])
- {
- data << int32(CollectableSourceInfoID);
- }
- }
-}
-
-void CollectableSourceTrackedData::ClearChangesMask()
-{
- Base::ClearChangesMask(TargetType);
- Base::ClearChangesMask(TargetID);
- Base::ClearChangesMask(CollectableSourceInfoID);
- _changesMask.ResetAll();
-}
-
void Research::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int16(ResearchProjectID);
@@ -4066,7 +3031,7 @@ bool Research::operator==(Research const& right) const
void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
{
- for (uint32 i = 0; i < 227; ++i)
+ for (uint32 i = 0; i < 141; ++i)
{
data << InvSlots[i];
}
@@ -4081,6 +3046,10 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
data << int32(CharacterPoints);
data << int32(MaxTalentTiers);
data << uint32(TrackCreatureMask);
+ for (uint32 i = 0; i < 2; ++i)
+ {
+ data << uint32(TrackResourceMask[i]);
+ }
data << float(MainhandExpertise);
data << float(OffhandExpertise);
data << float(RangedExpertise);
@@ -4093,7 +3062,13 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
data << float(CritPercentage);
data << float(RangedCritPercentage);
data << float(OffhandCritPercentage);
- data << float(SpellCritPercentage);
+ for (uint32 i = 0; i < 7; ++i)
+ {
+ data << float(SpellCritPercentage[i]);
+ data << int32(ModDamageDonePos[i]);
+ data << int32(ModDamageDoneNeg[i]);
+ data << float(ModDamageDonePercent[i]);
+ }
data << int32(ShieldBlock);
data << float(ShieldBlockCritPercentage);
data << float(Mastery);
@@ -4116,15 +3091,9 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
{
RestInfo[i].WriteCreate(data, owner, receiver);
}
- for (uint32 i = 0; i < 7; ++i)
- {
- data << int32(ModDamageDonePos[i]);
- data << int32(ModDamageDoneNeg[i]);
- data << float(ModDamageDonePercent[i]);
- data << float(ModHealingDonePercent[i]);
- }
data << int32(ModHealingDonePos);
data << float(ModHealingPercent);
+ data << float(ModHealingDonePercent);
data << float(ModPeriodicHealingDonePercent);
for (uint32 i = 0; i < 3; ++i)
{
@@ -4142,6 +3111,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
data << uint8(MultiActionBars);
data << uint8(LifetimeMaxRank);
data << uint8(NumRespecs);
+ data << int32(AmmoID);
data << uint32(PvpMedals);
for (uint32 i = 0; i < 12; ++i)
{
@@ -4149,14 +3119,25 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
data << int64(BuybackTimestamp[i]);
}
data << uint16(TodayHonorableKills);
+ data << uint16(TodayDishonorableKills);
data << uint16(YesterdayHonorableKills);
+ data << uint16(YesterdayDishonorableKills);
+ data << uint16(LastWeekHonorableKills);
+ data << uint16(LastWeekDishonorableKills);
+ data << uint16(ThisWeekHonorableKills);
+ data << uint16(ThisWeekDishonorableKills);
+ data << uint32(ThisWeekContribution);
data << uint32(LifetimeHonorableKills);
+ data << uint32(LifetimeDishonorableKills);
+ data << uint32(Field_F24);
+ data << uint32(YesterdayContribution);
+ data << uint32(LastWeekContribution);
+ data << uint32(LastWeekRank);
data << int32(WatchedFactionIndex);
for (uint32 i = 0; i < 32; ++i)
{
data << int32(CombatRatings[i]);
}
- data << uint32(PvpInfo.size());
data << int32(MaxLevel);
data << int32(ScalingPlayerLevelDelta);
data << int32(MaxCreatureScalingLevel);
@@ -4173,15 +3154,14 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
data << float(UiSpellHitModifier);
data << int32(HomeRealmTimeOffset);
data << float(ModPetHaste);
- data << int8(JailersTowerLevelMax);
- data << int8(JailersTowerLevel);
data << uint8(LocalRegenFlags);
data << uint8(AuraVision);
data << uint8(NumBackpackSlots);
data << int32(OverrideSpellsID);
+ data << int32(LfgBonusFactionID);
data << uint16(LootSpecID);
data << uint32(OverrideZonePVPType);
- for (uint32 i = 0; i < 5; ++i)
+ for (uint32 i = 0; i < 4; ++i)
{
data << uint32(BagSlotFlags[i]);
}
@@ -4195,8 +3175,11 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
}
data << int32(Honor);
data << int32(HonorNextLevel);
+ data << int32(Field_F74);
+ data << int32(PvpTierMaxFromWins);
+ data << int32(PvpLastWeeksTierMaxFromWins);
+ data << uint8(PvpRankProgress);
data << int32(PerksProgramCurrency);
- data << uint8(NumBankSlots);
for (uint32 i = 0; i < 1; ++i)
{
data << uint32(ResearchSites[i].size());
@@ -4217,46 +3200,30 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
}
data << uint32(DailyQuestsCompleted.size());
data << uint32(AvailableQuestLineXQuestIDs.size());
+ data << uint32(Field_1000.size());
data << uint32(Heirlooms.size());
data << uint32(HeirloomFlags.size());
data << uint32(Toys.size());
- data << uint32(ToyFlags.size());
data << uint32(Transmog.size());
data << uint32(ConditionalTransmog.size());
data << uint32(SelfResSpells.size());
- data << uint32(RuneforgePowers.size());
- data << uint32(TransmogIllusions.size());
data << uint32(CharacterRestrictions.size());
data << uint32(SpellPctModByLabel.size());
data << uint32(SpellFlatModByLabel.size());
- data << uint32(MawPowers.size());
- data << uint32(MultiFloorExploration.size());
- data << uint32(RecipeProgression.size());
- data << uint32(ReplayedQuests.size());
data << uint32(TaskQuests.size());
- data << uint32(DisabledSpells.size());
- data << int32(UiChromieTimeExpansionID);
data << int32(TransportServerTime);
- data << uint32(WeeklyRewardsPeriodSinceOrigin);
- data << int16(DEBUGSoulbindConduitRank);
data << uint32(TraitConfigs.size());
data << uint32(ActiveCombatTraitConfigID);
- data << uint32(CraftingOrders.size());
- data << uint32(PersonalCraftingOrderCounts.size());
+ for (uint32 i = 0; i < 9; ++i)
+ {
+ data << uint32(GlyphSlots[i]);
+ data << uint32(Glyphs[i]);
+ }
+ data << uint8(GlyphsEnabled);
+ data << uint8(LfgRoles);
data << uint32(CategoryCooldownMods.size());
data << uint32(WeeklySpellUses.size());
- for (uint32 i = 0; i < 17; ++i)
- {
- data << float(ItemUpgradeHighWatermark[i]);
- }
- data << int32(ItemUpgradeHighOnehandWeaponItemID);
- data << int32(ItemUpgradeHighFingerItemID);
- data << float(ItemUpgradeHighFingerWatermark);
- data << int32(ItemUpgradeHighTrinketItemID);
- data << float(ItemUpgradeHighTrinketWatermark);
- data << uint64(LootHistoryInstanceID);
- data << uint32(TrackedCollectableSources.size());
- data << uint8(RequiredMountCapabilityFlags);
+ data << uint8(NumStableSlots);
for (uint32 i = 0; i < KnownTitles.size(); ++i)
{
data << uint64(KnownTitles[i]);
@@ -4269,6 +3236,10 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
{
data << int32(AvailableQuestLineXQuestIDs[i]);
}
+ for (uint32 i = 0; i < Field_1000.size(); ++i)
+ {
+ data << int32(Field_1000[i]);
+ }
for (uint32 i = 0; i < Heirlooms.size(); ++i)
{
data << int32(Heirlooms[i]);
@@ -4281,10 +3252,6 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
{
data << int32(Toys[i]);
}
- for (uint32 i = 0; i < ToyFlags.size(); ++i)
- {
- data << uint32(ToyFlags[i]);
- }
for (uint32 i = 0; i < Transmog.size(); ++i)
{
data << uint32(Transmog[i]);
@@ -4297,14 +3264,6 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
{
data << int32(SelfResSpells[i]);
}
- for (uint32 i = 0; i < RuneforgePowers.size(); ++i)
- {
- data << uint32(RuneforgePowers[i]);
- }
- for (uint32 i = 0; i < TransmogIllusions.size(); ++i)
- {
- data << uint32(TransmogIllusions[i]);
- }
for (uint32 i = 0; i < SpellPctModByLabel.size(); ++i)
{
SpellPctModByLabel[i].WriteCreate(data, owner, receiver);
@@ -4313,34 +3272,10 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
{
SpellFlatModByLabel[i].WriteCreate(data, owner, receiver);
}
- for (uint32 i = 0; i < MawPowers.size(); ++i)
- {
- MawPowers[i].WriteCreate(data, owner, receiver);
- }
- for (uint32 i = 0; i < MultiFloorExploration.size(); ++i)
- {
- MultiFloorExploration[i].WriteCreate(data, owner, receiver);
- }
- for (uint32 i = 0; i < RecipeProgression.size(); ++i)
- {
- RecipeProgression[i].WriteCreate(data, owner, receiver);
- }
- for (uint32 i = 0; i < ReplayedQuests.size(); ++i)
- {
- ReplayedQuests[i].WriteCreate(data, owner, receiver);
- }
for (uint32 i = 0; i < TaskQuests.size(); ++i)
{
TaskQuests[i].WriteCreate(data, owner, receiver);
}
- for (uint32 i = 0; i < DisabledSpells.size(); ++i)
- {
- data << int32(DisabledSpells[i]);
- }
- for (uint32 i = 0; i < PersonalCraftingOrderCounts.size(); ++i)
- {
- PersonalCraftingOrderCounts[i].WriteCreate(data, owner, receiver);
- }
for (uint32 i = 0; i < CategoryCooldownMods.size(); ++i)
{
CategoryCooldownMods[i].WriteCreate(data, owner, receiver);
@@ -4349,32 +3284,17 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
{
WeeklySpellUses[i].WriteCreate(data, owner, receiver);
}
- for (uint32 i = 0; i < TrackedCollectableSources.size(); ++i)
+ for (uint32 i = 0; i < 9; ++i)
{
- TrackedCollectableSources[i].WriteCreate(data, owner, receiver);
+ PvpInfo[i].WriteCreate(data, owner, receiver);
}
data.FlushBits();
- data.WriteBit(BackpackAutoSortDisabled);
- data.WriteBit(BackpackSellJunkDisabled);
- data.WriteBit(BankAutoSortDisabled);
data.WriteBit(SortBagsRightToLeft);
data.WriteBit(InsertItemsLeftToRight);
- data.WriteBit(HasPerksProgramPendingReward);
- data.WriteBits(QuestSession.has_value(), 1);
data.WriteBits(PetStable.has_value(), 1);
data.FlushBits();
ResearchHistory->WriteCreate(data, owner, receiver);
- if (QuestSession.has_value())
- {
- QuestSession->WriteCreate(data, owner, receiver);
- }
data << FrozenPerksVendorItem;
- Field_1410->WriteCreate(data, owner, receiver);
- data << DungeonScore;
- for (uint32 i = 0; i < PvpInfo.size(); ++i)
- {
- PvpInfo[i].WriteCreate(data, owner, receiver);
- }
for (uint32 i = 0; i < CharacterRestrictions.size(); ++i)
{
CharacterRestrictions[i].WriteCreate(data, owner, receiver);
@@ -4383,10 +3303,6 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
{
TraitConfigs[i].WriteCreate(data, owner, receiver);
}
- for (uint32 i = 0; i < CraftingOrders.size(); ++i)
- {
- CraftingOrders[i].WriteCreate(data, owner, receiver);
- }
if (PetStable.has_value())
{
PetStable->WriteCreate(data, owner, receiver);
@@ -4403,8 +3319,8 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
{
for (uint32 i = 0; i < 1; ++i)
data << uint32(changesMask.GetBlocksMask(i));
- data.WriteBits(changesMask.GetBlocksMask(1), 14);
- for (uint32 i = 0; i < 46; ++i)
+ data.WriteBits(changesMask.GetBlocksMask(1), 11);
+ for (uint32 i = 0; i < 43; ++i)
if (changesMask.GetBlock(i))
data.WriteBits(changesMask.GetBlock(i), 32);
@@ -4412,29 +3328,13 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
{
if (changesMask[1])
{
- data.WriteBit(BackpackAutoSortDisabled);
- }
- if (changesMask[2])
- {
- data.WriteBit(BackpackSellJunkDisabled);
- }
- if (changesMask[3])
- {
- data.WriteBit(BankAutoSortDisabled);
- }
- if (changesMask[4])
- {
data.WriteBit(SortBagsRightToLeft);
}
- if (changesMask[5])
+ if (changesMask[2])
{
data.WriteBit(InsertItemsLeftToRight);
}
- if (changesMask[6])
- {
- data.WriteBit(HasPerksProgramPendingReward);
- }
- if (changesMask[7])
+ if (changesMask[3])
{
if (!ignoreNestedChangesMask)
KnownTitles.WriteUpdateMask(data);
@@ -4442,11 +3342,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
WriteCompleteDynamicFieldUpdateMask(KnownTitles.size(), data);
}
}
- if (changesMask[36])
+ if (changesMask[20])
{
for (uint32 i = 0; i < 8; ++i)
{
- if (changesMask[37])
+ if (changesMask[21])
{
if (!ignoreNestedChangesMask)
DataFlags[i].WriteUpdateMask(data);
@@ -4455,11 +3355,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[36])
+ if (changesMask[20])
{
for (uint32 i = 0; i < 8; ++i)
{
- if (changesMask[37])
+ if (changesMask[21])
{
for (uint32 j = 0; j < DataFlags[i].size(); ++j)
{
@@ -4471,21 +3371,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[0])
- {
- if (changesMask[8])
- {
- if (!ignoreNestedChangesMask)
- PvpInfo.WriteUpdateMask(data);
- else
- WriteCompleteDynamicFieldUpdateMask(PvpInfo.size(), data);
- }
- }
- if (changesMask[38])
+ if (changesMask[22])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[39])
+ if (changesMask[23])
{
if (!ignoreNestedChangesMask)
ResearchSites[i].WriteUpdateMask(data);
@@ -4494,11 +3384,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[40])
+ if (changesMask[24])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[41])
+ if (changesMask[25])
{
if (!ignoreNestedChangesMask)
ResearchSiteProgress[i].WriteUpdateMask(data);
@@ -4507,11 +3397,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[42])
+ if (changesMask[26])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[43])
+ if (changesMask[27])
{
if (!ignoreNestedChangesMask)
Research[i].WriteUpdateMask(data);
@@ -4520,11 +3410,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[38])
+ if (changesMask[22])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[39])
+ if (changesMask[23])
{
for (uint32 j = 0; j < ResearchSites[i].size(); ++j)
{
@@ -4536,11 +3426,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[40])
+ if (changesMask[24])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[41])
+ if (changesMask[25])
{
for (uint32 j = 0; j < ResearchSiteProgress[i].size(); ++j)
{
@@ -4552,11 +3442,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[42])
+ if (changesMask[26])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[43])
+ if (changesMask[27])
{
for (uint32 j = 0; j < Research[i].size(); ++j)
{
@@ -4571,196 +3461,123 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
data.FlushBits();
if (changesMask[0])
{
- if (changesMask[9])
+ if (changesMask[4])
{
if (!ignoreNestedChangesMask)
DailyQuestsCompleted.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(DailyQuestsCompleted.size(), data);
}
- if (changesMask[10])
+ if (changesMask[5])
{
if (!ignoreNestedChangesMask)
AvailableQuestLineXQuestIDs.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(AvailableQuestLineXQuestIDs.size(), data);
}
- if (changesMask[11])
+ if (changesMask[6])
+ {
+ if (!ignoreNestedChangesMask)
+ Field_1000.WriteUpdateMask(data);
+ else
+ WriteCompleteDynamicFieldUpdateMask(Field_1000.size(), data);
+ }
+ if (changesMask[7])
{
if (!ignoreNestedChangesMask)
Heirlooms.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(Heirlooms.size(), data);
}
- if (changesMask[12])
+ if (changesMask[8])
{
if (!ignoreNestedChangesMask)
HeirloomFlags.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(HeirloomFlags.size(), data);
}
- if (changesMask[13])
+ if (changesMask[9])
{
if (!ignoreNestedChangesMask)
Toys.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(Toys.size(), data);
}
- if (changesMask[14])
- {
- if (!ignoreNestedChangesMask)
- ToyFlags.WriteUpdateMask(data);
- else
- WriteCompleteDynamicFieldUpdateMask(ToyFlags.size(), data);
- }
- if (changesMask[15])
+ if (changesMask[10])
{
if (!ignoreNestedChangesMask)
Transmog.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(Transmog.size(), data);
}
- if (changesMask[16])
+ if (changesMask[11])
{
if (!ignoreNestedChangesMask)
ConditionalTransmog.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(ConditionalTransmog.size(), data);
}
- if (changesMask[17])
+ if (changesMask[12])
{
if (!ignoreNestedChangesMask)
SelfResSpells.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(SelfResSpells.size(), data);
}
- if (changesMask[18])
- {
- if (!ignoreNestedChangesMask)
- RuneforgePowers.WriteUpdateMask(data);
- else
- WriteCompleteDynamicFieldUpdateMask(RuneforgePowers.size(), data);
- }
- if (changesMask[19])
- {
- if (!ignoreNestedChangesMask)
- TransmogIllusions.WriteUpdateMask(data);
- else
- WriteCompleteDynamicFieldUpdateMask(TransmogIllusions.size(), data);
- }
- if (changesMask[20])
+ if (changesMask[13])
{
if (!ignoreNestedChangesMask)
CharacterRestrictions.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(CharacterRestrictions.size(), data);
}
- if (changesMask[21])
+ if (changesMask[14])
{
if (!ignoreNestedChangesMask)
SpellPctModByLabel.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(SpellPctModByLabel.size(), data);
}
- if (changesMask[22])
+ if (changesMask[15])
{
if (!ignoreNestedChangesMask)
SpellFlatModByLabel.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(SpellFlatModByLabel.size(), data);
}
- if (changesMask[23])
- {
- if (!ignoreNestedChangesMask)
- MawPowers.WriteUpdateMask(data);
- else
- WriteCompleteDynamicFieldUpdateMask(MawPowers.size(), data);
- }
- if (changesMask[24])
- {
- if (!ignoreNestedChangesMask)
- MultiFloorExploration.WriteUpdateMask(data);
- else
- WriteCompleteDynamicFieldUpdateMask(MultiFloorExploration.size(), data);
- }
- if (changesMask[25])
- {
- if (!ignoreNestedChangesMask)
- RecipeProgression.WriteUpdateMask(data);
- else
- WriteCompleteDynamicFieldUpdateMask(RecipeProgression.size(), data);
- }
- if (changesMask[26])
- {
- if (!ignoreNestedChangesMask)
- ReplayedQuests.WriteUpdateMask(data);
- else
- WriteCompleteDynamicFieldUpdateMask(ReplayedQuests.size(), data);
- }
- if (changesMask[27])
+ if (changesMask[16])
{
if (!ignoreNestedChangesMask)
TaskQuests.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(TaskQuests.size(), data);
}
- if (changesMask[28])
- {
- if (!ignoreNestedChangesMask)
- DisabledSpells.WriteUpdateMask(data);
- else
- WriteCompleteDynamicFieldUpdateMask(DisabledSpells.size(), data);
- }
- if (changesMask[29])
+ if (changesMask[17])
{
if (!ignoreNestedChangesMask)
TraitConfigs.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(TraitConfigs.size(), data);
}
- if (changesMask[30])
- {
- if (!ignoreNestedChangesMask)
- CraftingOrders.WriteUpdateMask(data);
- else
- WriteCompleteDynamicFieldUpdateMask(CraftingOrders.size(), data);
- }
- if (changesMask[31])
- {
- if (!ignoreNestedChangesMask)
- PersonalCraftingOrderCounts.WriteUpdateMask(data);
- else
- WriteCompleteDynamicFieldUpdateMask(PersonalCraftingOrderCounts.size(), data);
- }
- }
- if (changesMask[32])
- {
- if (changesMask[33])
+ if (changesMask[18])
{
if (!ignoreNestedChangesMask)
CategoryCooldownMods.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(CategoryCooldownMods.size(), data);
}
- if (changesMask[34])
+ if (changesMask[19])
{
if (!ignoreNestedChangesMask)
WeeklySpellUses.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(WeeklySpellUses.size(), data);
}
- if (changesMask[35])
- {
- if (!ignoreNestedChangesMask)
- TrackedCollectableSources.WriteUpdateMask(data);
- else
- WriteCompleteDynamicFieldUpdateMask(TrackedCollectableSources.size(), data);
- }
}
data.FlushBits();
if (changesMask[0])
{
- if (changesMask[7])
+ if (changesMask[3])
{
for (uint32 i = 0; i < KnownTitles.size(); ++i)
{
@@ -4770,7 +3587,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[9])
+ if (changesMask[4])
{
for (uint32 i = 0; i < DailyQuestsCompleted.size(); ++i)
{
@@ -4780,7 +3597,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[10])
+ if (changesMask[5])
{
for (uint32 i = 0; i < AvailableQuestLineXQuestIDs.size(); ++i)
{
@@ -4790,7 +3607,17 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[11])
+ if (changesMask[6])
+ {
+ for (uint32 i = 0; i < Field_1000.size(); ++i)
+ {
+ if (Field_1000.HasChanged(i) || ignoreNestedChangesMask)
+ {
+ data << int32(Field_1000[i]);
+ }
+ }
+ }
+ if (changesMask[7])
{
for (uint32 i = 0; i < Heirlooms.size(); ++i)
{
@@ -4800,7 +3627,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[12])
+ if (changesMask[8])
{
for (uint32 i = 0; i < HeirloomFlags.size(); ++i)
{
@@ -4810,7 +3637,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[13])
+ if (changesMask[9])
{
for (uint32 i = 0; i < Toys.size(); ++i)
{
@@ -4820,17 +3647,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[14])
- {
- for (uint32 i = 0; i < ToyFlags.size(); ++i)
- {
- if (ToyFlags.HasChanged(i) || ignoreNestedChangesMask)
- {
- data << uint32(ToyFlags[i]);
- }
- }
- }
- if (changesMask[15])
+ if (changesMask[10])
{
for (uint32 i = 0; i < Transmog.size(); ++i)
{
@@ -4840,7 +3657,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[16])
+ if (changesMask[11])
{
for (uint32 i = 0; i < ConditionalTransmog.size(); ++i)
{
@@ -4850,7 +3667,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[17])
+ if (changesMask[12])
{
for (uint32 i = 0; i < SelfResSpells.size(); ++i)
{
@@ -4860,27 +3677,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[18])
- {
- for (uint32 i = 0; i < RuneforgePowers.size(); ++i)
- {
- if (RuneforgePowers.HasChanged(i) || ignoreNestedChangesMask)
- {
- data << uint32(RuneforgePowers[i]);
- }
- }
- }
- if (changesMask[19])
- {
- for (uint32 i = 0; i < TransmogIllusions.size(); ++i)
- {
- if (TransmogIllusions.HasChanged(i) || ignoreNestedChangesMask)
- {
- data << uint32(TransmogIllusions[i]);
- }
- }
- }
- if (changesMask[21])
+ if (changesMask[14])
{
for (uint32 i = 0; i < SpellPctModByLabel.size(); ++i)
{
@@ -4890,7 +3687,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[22])
+ if (changesMask[15])
{
for (uint32 i = 0; i < SpellFlatModByLabel.size(); ++i)
{
@@ -4900,527 +3697,447 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[23])
+ if (changesMask[16])
{
- for (uint32 i = 0; i < MawPowers.size(); ++i)
+ for (uint32 i = 0; i < TaskQuests.size(); ++i)
{
- if (MawPowers.HasChanged(i) || ignoreNestedChangesMask)
+ if (TaskQuests.HasChanged(i) || ignoreNestedChangesMask)
{
- MawPowers[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ TaskQuests[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
- if (changesMask[24])
+ if (changesMask[18])
{
- for (uint32 i = 0; i < MultiFloorExploration.size(); ++i)
+ for (uint32 i = 0; i < CategoryCooldownMods.size(); ++i)
{
- if (MultiFloorExploration.HasChanged(i) || ignoreNestedChangesMask)
+ if (CategoryCooldownMods.HasChanged(i) || ignoreNestedChangesMask)
{
- MultiFloorExploration[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ CategoryCooldownMods[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
- if (changesMask[25])
+ if (changesMask[19])
{
- for (uint32 i = 0; i < RecipeProgression.size(); ++i)
+ for (uint32 i = 0; i < WeeklySpellUses.size(); ++i)
{
- if (RecipeProgression.HasChanged(i) || ignoreNestedChangesMask)
+ if (WeeklySpellUses.HasChanged(i) || ignoreNestedChangesMask)
{
- RecipeProgression[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ WeeklySpellUses[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
- if (changesMask[26])
+ if (changesMask[13])
{
- for (uint32 i = 0; i < ReplayedQuests.size(); ++i)
+ for (uint32 i = 0; i < CharacterRestrictions.size(); ++i)
{
- if (ReplayedQuests.HasChanged(i) || ignoreNestedChangesMask)
+ if (CharacterRestrictions.HasChanged(i) || ignoreNestedChangesMask)
{
- ReplayedQuests[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ CharacterRestrictions[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
- if (changesMask[27])
+ if (changesMask[17])
{
- for (uint32 i = 0; i < TaskQuests.size(); ++i)
+ for (uint32 i = 0; i < TraitConfigs.size(); ++i)
{
- if (TaskQuests.HasChanged(i) || ignoreNestedChangesMask)
+ if (TraitConfigs.HasChanged(i) || ignoreNestedChangesMask)
{
- TaskQuests[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ TraitConfigs[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
if (changesMask[28])
{
- for (uint32 i = 0; i < DisabledSpells.size(); ++i)
- {
- if (DisabledSpells.HasChanged(i) || ignoreNestedChangesMask)
- {
- data << int32(DisabledSpells[i]);
- }
- }
+ data << FarsightObject;
+ }
+ if (changesMask[29])
+ {
+ data << SummonedBattlePetGUID;
+ }
+ if (changesMask[30])
+ {
+ data << uint64(Coinage);
}
if (changesMask[31])
{
- for (uint32 i = 0; i < PersonalCraftingOrderCounts.size(); ++i)
- {
- if (PersonalCraftingOrderCounts.HasChanged(i) || ignoreNestedChangesMask)
- {
- PersonalCraftingOrderCounts[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
- }
- }
+ data << int32(XP);
+ }
+ if (changesMask[32])
+ {
+ data << int32(NextLevelXP);
}
- }
- if (changesMask[32])
- {
if (changesMask[33])
{
- for (uint32 i = 0; i < CategoryCooldownMods.size(); ++i)
- {
- if (CategoryCooldownMods.HasChanged(i) || ignoreNestedChangesMask)
- {
- CategoryCooldownMods[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
- }
- }
+ data << int32(TrialXP);
}
if (changesMask[34])
{
- for (uint32 i = 0; i < WeeklySpellUses.size(); ++i)
- {
- if (WeeklySpellUses.HasChanged(i) || ignoreNestedChangesMask)
- {
- WeeklySpellUses[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
- }
- }
+ Skill->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
if (changesMask[35])
{
- for (uint32 i = 0; i < TrackedCollectableSources.size(); ++i)
- {
- if (TrackedCollectableSources.HasChanged(i) || ignoreNestedChangesMask)
- {
- TrackedCollectableSources[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
- }
- }
+ data << int32(CharacterPoints);
}
- }
- if (changesMask[0])
- {
- if (changesMask[8])
+ if (changesMask[36])
{
- for (uint32 i = 0; i < PvpInfo.size(); ++i)
- {
- if (PvpInfo.HasChanged(i) || ignoreNestedChangesMask)
- {
- PvpInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
- }
- }
+ data << int32(MaxTalentTiers);
}
- if (changesMask[20])
+ if (changesMask[37])
{
- for (uint32 i = 0; i < CharacterRestrictions.size(); ++i)
- {
- if (CharacterRestrictions.HasChanged(i) || ignoreNestedChangesMask)
- {
- CharacterRestrictions[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
- }
- }
+ data << uint32(TrackCreatureMask);
}
- if (changesMask[29])
+ if (changesMask[38])
{
- for (uint32 i = 0; i < TraitConfigs.size(); ++i)
- {
- if (TraitConfigs.HasChanged(i) || ignoreNestedChangesMask)
- {
- TraitConfigs[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
- }
- }
+ data << float(MainhandExpertise);
}
- if (changesMask[30])
+ if (changesMask[39])
{
- for (uint32 i = 0; i < CraftingOrders.size(); ++i)
- {
- if (CraftingOrders.HasChanged(i) || ignoreNestedChangesMask)
- {
- CraftingOrders[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
- }
- }
+ data << float(OffhandExpertise);
}
}
- if (changesMask[32])
+ if (changesMask[40])
{
+ if (changesMask[41])
+ {
+ data << float(RangedExpertise);
+ }
+ if (changesMask[42])
+ {
+ data << float(CombatRatingExpertise);
+ }
+ if (changesMask[43])
+ {
+ data << float(BlockPercentage);
+ }
if (changesMask[44])
{
- data << FarsightObject;
+ data << float(DodgePercentage);
}
if (changesMask[45])
{
- data << SummonedBattlePetGUID;
+ data << float(DodgePercentageFromAttribute);
}
if (changesMask[46])
{
- data << uint64(Coinage);
+ data << float(ParryPercentage);
}
if (changesMask[47])
{
- data << int32(XP);
+ data << float(ParryPercentageFromAttribute);
}
if (changesMask[48])
{
- data << int32(NextLevelXP);
+ data << float(CritPercentage);
}
if (changesMask[49])
{
- data << int32(TrialXP);
+ data << float(RangedCritPercentage);
}
if (changesMask[50])
{
- Skill->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ data << float(OffhandCritPercentage);
}
if (changesMask[51])
{
- data << int32(CharacterPoints);
+ data << int32(ShieldBlock);
}
if (changesMask[52])
{
- data << int32(MaxTalentTiers);
+ data << float(ShieldBlockCritPercentage);
}
if (changesMask[53])
{
- data << uint32(TrackCreatureMask);
+ data << float(Mastery);
}
if (changesMask[54])
{
- data << float(MainhandExpertise);
+ data << float(Speed);
}
if (changesMask[55])
{
- data << float(OffhandExpertise);
+ data << float(Avoidance);
}
if (changesMask[56])
{
- data << float(RangedExpertise);
+ data << float(Sturdiness);
}
if (changesMask[57])
{
- data << float(CombatRatingExpertise);
+ data << int32(Versatility);
}
if (changesMask[58])
{
- data << float(BlockPercentage);
+ data << float(VersatilityBonus);
}
if (changesMask[59])
{
- data << float(DodgePercentage);
+ data << float(PvpPowerDamage);
}
if (changesMask[60])
{
- data << float(DodgePercentageFromAttribute);
+ data << float(PvpPowerHealing);
}
if (changesMask[61])
{
- data << float(ParryPercentage);
+ data << int32(ModHealingDonePos);
}
if (changesMask[62])
{
- data << float(ParryPercentageFromAttribute);
+ data << float(ModHealingPercent);
}
if (changesMask[63])
{
- data << float(CritPercentage);
+ data << float(ModHealingDonePercent);
}
if (changesMask[64])
{
- data << float(RangedCritPercentage);
+ data << float(ModPeriodicHealingDonePercent);
}
if (changesMask[65])
{
- data << float(OffhandCritPercentage);
+ data << float(ModSpellPowerPercent);
}
if (changesMask[66])
{
- data << float(SpellCritPercentage);
+ data << float(ModResiliencePercent);
}
if (changesMask[67])
{
- data << int32(ShieldBlock);
+ data << float(OverrideSpellPowerByAPPercent);
}
if (changesMask[68])
{
- data << float(ShieldBlockCritPercentage);
+ data << float(OverrideAPBySpellPowerPercent);
}
if (changesMask[69])
{
- data << float(Mastery);
+ data << int32(ModTargetResistance);
}
if (changesMask[70])
{
- data << float(Speed);
+ data << int32(ModTargetPhysicalResistance);
}
if (changesMask[71])
{
- data << float(Avoidance);
+ data << uint32(LocalFlags);
}
}
if (changesMask[72])
{
if (changesMask[73])
{
- data << float(Sturdiness);
+ data << uint8(GrantableLevels);
}
if (changesMask[74])
{
- data << int32(Versatility);
+ data << uint8(MultiActionBars);
}
if (changesMask[75])
{
- data << float(VersatilityBonus);
+ data << uint8(LifetimeMaxRank);
}
if (changesMask[76])
{
- data << float(PvpPowerDamage);
+ data << uint8(NumRespecs);
}
if (changesMask[77])
{
- data << float(PvpPowerHealing);
+ data << int32(AmmoID);
}
if (changesMask[78])
{
- data << int32(ModHealingDonePos);
+ data << uint32(PvpMedals);
}
if (changesMask[79])
{
- data << float(ModHealingPercent);
+ data << uint16(TodayHonorableKills);
}
if (changesMask[80])
{
- data << float(ModPeriodicHealingDonePercent);
+ data << uint16(TodayDishonorableKills);
}
if (changesMask[81])
{
- data << float(ModSpellPowerPercent);
+ data << uint16(YesterdayHonorableKills);
}
if (changesMask[82])
{
- data << float(ModResiliencePercent);
+ data << uint16(YesterdayDishonorableKills);
}
if (changesMask[83])
{
- data << float(OverrideSpellPowerByAPPercent);
+ data << uint16(LastWeekHonorableKills);
}
if (changesMask[84])
{
- data << float(OverrideAPBySpellPowerPercent);
+ data << uint16(LastWeekDishonorableKills);
}
if (changesMask[85])
{
- data << int32(ModTargetResistance);
+ data << uint16(ThisWeekHonorableKills);
}
if (changesMask[86])
{
- data << int32(ModTargetPhysicalResistance);
+ data << uint16(ThisWeekDishonorableKills);
}
if (changesMask[87])
{
- data << uint32(LocalFlags);
+ data << uint32(ThisWeekContribution);
}
if (changesMask[88])
{
- data << uint8(GrantableLevels);
+ data << uint32(LifetimeHonorableKills);
}
if (changesMask[89])
{
- data << uint8(MultiActionBars);
+ data << uint32(LifetimeDishonorableKills);
}
if (changesMask[90])
{
- data << uint8(LifetimeMaxRank);
+ data << uint32(Field_F24);
}
if (changesMask[91])
{
- data << uint8(NumRespecs);
+ data << uint32(YesterdayContribution);
}
if (changesMask[92])
{
- data << uint32(PvpMedals);
+ data << uint32(LastWeekContribution);
}
if (changesMask[93])
{
- data << uint16(TodayHonorableKills);
+ data << uint32(LastWeekRank);
}
if (changesMask[94])
{
- data << uint16(YesterdayHonorableKills);
+ data << int32(WatchedFactionIndex);
}
if (changesMask[95])
{
- data << uint32(LifetimeHonorableKills);
+ data << int32(MaxLevel);
}
if (changesMask[96])
{
- data << int32(WatchedFactionIndex);
+ data << int32(ScalingPlayerLevelDelta);
}
if (changesMask[97])
{
- data << int32(MaxLevel);
+ data << int32(MaxCreatureScalingLevel);
}
if (changesMask[98])
{
- data << int32(ScalingPlayerLevelDelta);
+ data << int32(PetSpellPower);
}
if (changesMask[99])
{
- data << int32(MaxCreatureScalingLevel);
+ data << float(UiHitModifier);
}
if (changesMask[100])
{
- data << int32(PetSpellPower);
+ data << float(UiSpellHitModifier);
}
if (changesMask[101])
{
- data << float(UiHitModifier);
+ data << int32(HomeRealmTimeOffset);
}
if (changesMask[102])
{
- data << float(UiSpellHitModifier);
+ data << float(ModPetHaste);
}
if (changesMask[103])
{
- data << int32(HomeRealmTimeOffset);
+ data << uint8(LocalRegenFlags);
}
}
if (changesMask[104])
{
if (changesMask[105])
{
- data << float(ModPetHaste);
+ data << uint8(AuraVision);
}
if (changesMask[106])
{
- data << int8(JailersTowerLevelMax);
+ data << uint8(NumBackpackSlots);
}
if (changesMask[107])
{
- data << int8(JailersTowerLevel);
+ data << int32(OverrideSpellsID);
}
if (changesMask[108])
{
- data << uint8(LocalRegenFlags);
+ data << int32(LfgBonusFactionID);
}
if (changesMask[109])
{
- data << uint8(AuraVision);
+ data << uint16(LootSpecID);
}
if (changesMask[110])
{
- data << uint8(NumBackpackSlots);
+ data << uint32(OverrideZonePVPType);
}
if (changesMask[111])
{
- data << int32(OverrideSpellsID);
+ data << int32(Honor);
}
if (changesMask[112])
{
- data << uint16(LootSpecID);
+ data << int32(HonorNextLevel);
}
if (changesMask[113])
{
- data << uint32(OverrideZonePVPType);
+ data << int32(Field_F74);
}
if (changesMask[114])
{
- data << int32(Honor);
+ data << int32(PvpTierMaxFromWins);
}
if (changesMask[115])
{
- data << int32(HonorNextLevel);
+ data << int32(PvpLastWeeksTierMaxFromWins);
}
if (changesMask[116])
{
- data << int32(PerksProgramCurrency);
+ data << uint8(PvpRankProgress);
}
if (changesMask[117])
{
- data << uint8(NumBankSlots);
- }
- if (changesMask[122])
- {
- data << int32(UiChromieTimeExpansionID);
+ data << int32(PerksProgramCurrency);
}
- if (changesMask[123])
+ if (changesMask[120])
{
data << int32(TransportServerTime);
}
- if (changesMask[124])
- {
- data << uint32(WeeklyRewardsPeriodSinceOrigin);
- }
- if (changesMask[125])
- {
- data << int16(DEBUGSoulbindConduitRank);
- }
- if (changesMask[127])
+ if (changesMask[121])
{
data << uint32(ActiveCombatTraitConfigID);
}
- if (changesMask[128])
- {
- data << int32(ItemUpgradeHighOnehandWeaponItemID);
- }
- if (changesMask[129])
- {
- data << int32(ItemUpgradeHighFingerItemID);
- }
- if (changesMask[130])
- {
- data << float(ItemUpgradeHighFingerWatermark);
- }
- if (changesMask[131])
- {
- data << int32(ItemUpgradeHighTrinketItemID);
- }
- if (changesMask[132])
+ if (changesMask[122])
{
- data << float(ItemUpgradeHighTrinketWatermark);
+ data << uint8(GlyphsEnabled);
}
- if (changesMask[133])
+ if (changesMask[123])
{
- data << uint64(LootHistoryInstanceID);
+ data << uint8(LfgRoles);
}
- if (changesMask[135])
+ if (changesMask[125])
{
- data << uint8(RequiredMountCapabilityFlags);
+ data << uint8(NumStableSlots);
}
- data.WriteBits(QuestSession.has_value(), 1);
- data.WriteBits(PetStable.has_value(), 1);
}
data.FlushBits();
if (changesMask[104])
{
+ data.WriteBits(PetStable.has_value(), 1);
if (changesMask[118])
{
ResearchHistory->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
- if (changesMask[120])
- {
- if (QuestSession.has_value())
- {
- QuestSession->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
- }
- }
if (changesMask[119])
{
data << FrozenPerksVendorItem;
}
- if (changesMask[121])
- {
- Field_1410->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
- }
- if (changesMask[126])
- {
- data << DungeonScore;
- }
- if (changesMask[134])
+ if (changesMask[124])
{
if (PetStable.has_value())
{
@@ -5428,143 +4145,167 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[136])
+ if (changesMask[126])
{
- for (uint32 i = 0; i < 227; ++i)
+ for (uint32 i = 0; i < 141; ++i)
{
- if (changesMask[137 + i])
+ if (changesMask[127 + i])
{
data << InvSlots[i];
}
}
}
- if (changesMask[364])
+ if (changesMask[268])
{
for (uint32 i = 0; i < 2; ++i)
{
- if (changesMask[365 + i])
+ if (changesMask[269 + i])
{
- RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ data << uint32(TrackResourceMask[i]);
}
}
}
- if (changesMask[367])
+ if (changesMask[271])
{
for (uint32 i = 0; i < 7; ++i)
{
- if (changesMask[368 + i])
+ if (changesMask[272 + i])
+ {
+ data << float(SpellCritPercentage[i]);
+ }
+ if (changesMask[279 + i])
{
data << int32(ModDamageDonePos[i]);
}
- if (changesMask[375 + i])
+ if (changesMask[286 + i])
{
data << int32(ModDamageDoneNeg[i]);
}
- if (changesMask[382 + i])
+ if (changesMask[293 + i])
{
data << float(ModDamageDonePercent[i]);
}
- if (changesMask[389 + i])
+ }
+ }
+ if (changesMask[300])
+ {
+ for (uint32 i = 0; i < 2; ++i)
+ {
+ if (changesMask[301 + i])
{
- data << float(ModHealingDonePercent[i]);
+ RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
- if (changesMask[396])
+ if (changesMask[303])
{
for (uint32 i = 0; i < 3; ++i)
{
- if (changesMask[397 + i])
+ if (changesMask[304 + i])
{
data << float(WeaponDmgMultipliers[i]);
}
- if (changesMask[400 + i])
+ if (changesMask[307 + i])
{
data << float(WeaponAtkSpeedMultipliers[i]);
}
}
}
- if (changesMask[403])
+ if (changesMask[310])
{
for (uint32 i = 0; i < 12; ++i)
{
- if (changesMask[404 + i])
+ if (changesMask[311 + i])
{
data << uint32(BuybackPrice[i]);
}
- if (changesMask[416 + i])
+ if (changesMask[323 + i])
{
data << int64(BuybackTimestamp[i]);
}
}
}
- if (changesMask[428])
+ if (changesMask[335])
{
for (uint32 i = 0; i < 32; ++i)
{
- if (changesMask[429 + i])
+ if (changesMask[336 + i])
{
data << int32(CombatRatings[i]);
}
}
}
- if (changesMask[461])
+ if (changesMask[378])
{
for (uint32 i = 0; i < 4; ++i)
{
- if (changesMask[462 + i])
+ if (changesMask[379 + i])
{
data << uint32(NoReagentCostMask[i]);
}
}
}
- if (changesMask[466])
+ if (changesMask[383])
{
for (uint32 i = 0; i < 2; ++i)
{
- if (changesMask[467 + i])
+ if (changesMask[384 + i])
{
data << int32(ProfessionSkillLine[i]);
}
}
}
- if (changesMask[469])
+ if (changesMask[386])
{
- for (uint32 i = 0; i < 5; ++i)
+ for (uint32 i = 0; i < 4; ++i)
{
- if (changesMask[470 + i])
+ if (changesMask[387 + i])
{
data << uint32(BagSlotFlags[i]);
}
}
}
- if (changesMask[475])
+ if (changesMask[391])
{
for (uint32 i = 0; i < 7; ++i)
{
- if (changesMask[476 + i])
+ if (changesMask[392 + i])
{
data << uint32(BankBagSlotFlags[i]);
}
}
}
- if (changesMask[483])
+ if (changesMask[399])
{
for (uint32 i = 0; i < 950; ++i)
{
- if (changesMask[484 + i])
+ if (changesMask[400 + i])
{
data << uint64(QuestCompleted[i]);
}
}
}
- if (changesMask[1434])
+ if (changesMask[1350])
+ {
+ for (uint32 i = 0; i < 9; ++i)
+ {
+ if (changesMask[1351 + i])
+ {
+ data << uint32(GlyphSlots[i]);
+ }
+ if (changesMask[1360 + i])
+ {
+ data << uint32(Glyphs[i]);
+ }
+ }
+ }
+ if (changesMask[368])
{
- for (uint32 i = 0; i < 17; ++i)
+ for (uint32 i = 0; i < 9; ++i)
{
- if (changesMask[1435 + i])
+ if (changesMask[369 + i])
{
- data << float(ItemUpgradeHighWatermark[i]);
+ PvpInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
@@ -5573,12 +4314,8 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
void ActivePlayerData::ClearChangesMask()
{
- Base::ClearChangesMask(BackpackAutoSortDisabled);
- Base::ClearChangesMask(BackpackSellJunkDisabled);
- Base::ClearChangesMask(BankAutoSortDisabled);
Base::ClearChangesMask(SortBagsRightToLeft);
Base::ClearChangesMask(InsertItemsLeftToRight);
- Base::ClearChangesMask(HasPerksProgramPendingReward);
Base::ClearChangesMask(DataFlags);
Base::ClearChangesMask(ResearchSites);
Base::ClearChangesMask(ResearchSiteProgress);
@@ -5586,31 +4323,20 @@ void ActivePlayerData::ClearChangesMask()
Base::ClearChangesMask(KnownTitles);
Base::ClearChangesMask(DailyQuestsCompleted);
Base::ClearChangesMask(AvailableQuestLineXQuestIDs);
+ Base::ClearChangesMask(Field_1000);
Base::ClearChangesMask(Heirlooms);
Base::ClearChangesMask(HeirloomFlags);
Base::ClearChangesMask(Toys);
- Base::ClearChangesMask(ToyFlags);
Base::ClearChangesMask(Transmog);
Base::ClearChangesMask(ConditionalTransmog);
Base::ClearChangesMask(SelfResSpells);
- Base::ClearChangesMask(RuneforgePowers);
- Base::ClearChangesMask(TransmogIllusions);
Base::ClearChangesMask(SpellPctModByLabel);
Base::ClearChangesMask(SpellFlatModByLabel);
- Base::ClearChangesMask(MawPowers);
- Base::ClearChangesMask(MultiFloorExploration);
- Base::ClearChangesMask(RecipeProgression);
- Base::ClearChangesMask(ReplayedQuests);
Base::ClearChangesMask(TaskQuests);
- Base::ClearChangesMask(DisabledSpells);
- Base::ClearChangesMask(PersonalCraftingOrderCounts);
Base::ClearChangesMask(CategoryCooldownMods);
Base::ClearChangesMask(WeeklySpellUses);
- Base::ClearChangesMask(TrackedCollectableSources);
- Base::ClearChangesMask(PvpInfo);
Base::ClearChangesMask(CharacterRestrictions);
Base::ClearChangesMask(TraitConfigs);
- Base::ClearChangesMask(CraftingOrders);
Base::ClearChangesMask(FarsightObject);
Base::ClearChangesMask(SummonedBattlePetGUID);
Base::ClearChangesMask(Coinage);
@@ -5633,7 +4359,6 @@ void ActivePlayerData::ClearChangesMask()
Base::ClearChangesMask(CritPercentage);
Base::ClearChangesMask(RangedCritPercentage);
Base::ClearChangesMask(OffhandCritPercentage);
- Base::ClearChangesMask(SpellCritPercentage);
Base::ClearChangesMask(ShieldBlock);
Base::ClearChangesMask(ShieldBlockCritPercentage);
Base::ClearChangesMask(Mastery);
@@ -5646,6 +4371,7 @@ void ActivePlayerData::ClearChangesMask()
Base::ClearChangesMask(PvpPowerHealing);
Base::ClearChangesMask(ModHealingDonePos);
Base::ClearChangesMask(ModHealingPercent);
+ Base::ClearChangesMask(ModHealingDonePercent);
Base::ClearChangesMask(ModPeriodicHealingDonePercent);
Base::ClearChangesMask(ModSpellPowerPercent);
Base::ClearChangesMask(ModResiliencePercent);
@@ -5658,10 +4384,23 @@ void ActivePlayerData::ClearChangesMask()
Base::ClearChangesMask(MultiActionBars);
Base::ClearChangesMask(LifetimeMaxRank);
Base::ClearChangesMask(NumRespecs);
+ Base::ClearChangesMask(AmmoID);
Base::ClearChangesMask(PvpMedals);
Base::ClearChangesMask(TodayHonorableKills);
+ Base::ClearChangesMask(TodayDishonorableKills);
Base::ClearChangesMask(YesterdayHonorableKills);
+ Base::ClearChangesMask(YesterdayDishonorableKills);
+ Base::ClearChangesMask(LastWeekHonorableKills);
+ Base::ClearChangesMask(LastWeekDishonorableKills);
+ Base::ClearChangesMask(ThisWeekHonorableKills);
+ Base::ClearChangesMask(ThisWeekDishonorableKills);
+ Base::ClearChangesMask(ThisWeekContribution);
Base::ClearChangesMask(LifetimeHonorableKills);
+ Base::ClearChangesMask(LifetimeDishonorableKills);
+ Base::ClearChangesMask(Field_F24);
+ Base::ClearChangesMask(YesterdayContribution);
+ Base::ClearChangesMask(LastWeekContribution);
+ Base::ClearChangesMask(LastWeekRank);
Base::ClearChangesMask(WatchedFactionIndex);
Base::ClearChangesMask(MaxLevel);
Base::ClearChangesMask(ScalingPlayerLevelDelta);
@@ -5671,53 +4410,48 @@ void ActivePlayerData::ClearChangesMask()
Base::ClearChangesMask(UiSpellHitModifier);
Base::ClearChangesMask(HomeRealmTimeOffset);
Base::ClearChangesMask(ModPetHaste);
- Base::ClearChangesMask(JailersTowerLevelMax);
- Base::ClearChangesMask(JailersTowerLevel);
Base::ClearChangesMask(LocalRegenFlags);
Base::ClearChangesMask(AuraVision);
Base::ClearChangesMask(NumBackpackSlots);
Base::ClearChangesMask(OverrideSpellsID);
+ Base::ClearChangesMask(LfgBonusFactionID);
Base::ClearChangesMask(LootSpecID);
Base::ClearChangesMask(OverrideZonePVPType);
Base::ClearChangesMask(Honor);
Base::ClearChangesMask(HonorNextLevel);
+ Base::ClearChangesMask(Field_F74);
+ Base::ClearChangesMask(PvpTierMaxFromWins);
+ Base::ClearChangesMask(PvpLastWeeksTierMaxFromWins);
+ Base::ClearChangesMask(PvpRankProgress);
Base::ClearChangesMask(PerksProgramCurrency);
- Base::ClearChangesMask(NumBankSlots);
Base::ClearChangesMask(ResearchHistory);
Base::ClearChangesMask(FrozenPerksVendorItem);
- Base::ClearChangesMask(Field_1410);
- Base::ClearChangesMask(QuestSession);
- Base::ClearChangesMask(UiChromieTimeExpansionID);
Base::ClearChangesMask(TransportServerTime);
- Base::ClearChangesMask(WeeklyRewardsPeriodSinceOrigin);
- Base::ClearChangesMask(DEBUGSoulbindConduitRank);
- Base::ClearChangesMask(DungeonScore);
Base::ClearChangesMask(ActiveCombatTraitConfigID);
- Base::ClearChangesMask(ItemUpgradeHighOnehandWeaponItemID);
- Base::ClearChangesMask(ItemUpgradeHighFingerItemID);
- Base::ClearChangesMask(ItemUpgradeHighFingerWatermark);
- Base::ClearChangesMask(ItemUpgradeHighTrinketItemID);
- Base::ClearChangesMask(ItemUpgradeHighTrinketWatermark);
- Base::ClearChangesMask(LootHistoryInstanceID);
+ Base::ClearChangesMask(GlyphsEnabled);
+ Base::ClearChangesMask(LfgRoles);
Base::ClearChangesMask(PetStable);
- Base::ClearChangesMask(RequiredMountCapabilityFlags);
+ Base::ClearChangesMask(NumStableSlots);
Base::ClearChangesMask(InvSlots);
- Base::ClearChangesMask(RestInfo);
+ Base::ClearChangesMask(TrackResourceMask);
+ Base::ClearChangesMask(SpellCritPercentage);
Base::ClearChangesMask(ModDamageDonePos);
Base::ClearChangesMask(ModDamageDoneNeg);
Base::ClearChangesMask(ModDamageDonePercent);
- Base::ClearChangesMask(ModHealingDonePercent);
+ Base::ClearChangesMask(RestInfo);
Base::ClearChangesMask(WeaponDmgMultipliers);
Base::ClearChangesMask(WeaponAtkSpeedMultipliers);
Base::ClearChangesMask(BuybackPrice);
Base::ClearChangesMask(BuybackTimestamp);
Base::ClearChangesMask(CombatRatings);
+ Base::ClearChangesMask(PvpInfo);
Base::ClearChangesMask(NoReagentCostMask);
Base::ClearChangesMask(ProfessionSkillLine);
Base::ClearChangesMask(BagSlotFlags);
Base::ClearChangesMask(BankBagSlotFlags);
Base::ClearChangesMask(QuestCompleted);
- Base::ClearChangesMask(ItemUpgradeHighWatermark);
+ Base::ClearChangesMask(GlyphSlots);
+ Base::ClearChangesMask(Glyphs);
_changesMask.ResetAll();
}
@@ -5729,7 +4463,6 @@ void GameObjectData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fie
data << uint32(SpawnTrackingStateAnimID);
data << uint32(SpawnTrackingStateAnimKitID);
data << uint32(StateWorldEffectIDs->size());
- data << uint32(StateWorldEffectsQuestObjectiveID);
for (uint32 i = 0; i < StateWorldEffectIDs->size(); ++i)
{
data << uint32((*StateWorldEffectIDs)[i]);
@@ -5742,17 +4475,13 @@ void GameObjectData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fie
data << float(ParentRotation->z);
data << float(ParentRotation->w);
data << int32(FactionTemplate);
+ data << int32(Level);
data << int8(ViewerDependentValue<StateTag>::GetValue(this, owner, receiver));
data << int8(TypeID);
data << uint8(PercentHealth);
data << uint32(ArtKit);
data << uint32(EnableDoodadSets.size());
data << uint32(CustomParam);
- data << int32(Level);
- data << uint32(AnimGroupInstance);
- data << uint32(UiWidgetItemID);
- data << uint32(UiWidgetItemQuality);
- data << uint32(UiWidgetItemUnknown1000);
data << uint32(WorldEffects.size());
for (uint32 i = 0; i < EnableDoodadSets.size(); ++i)
{
@@ -5771,7 +4500,7 @@ void GameObjectData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fie
void GameObjectData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, GameObject const* owner, Player const* receiver) const
{
- data.WriteBits(changesMask.GetBlock(0), 25);
+ data.WriteBits(changesMask.GetBlock(0), 20);
if (changesMask[0])
{
@@ -5847,31 +4576,31 @@ void GameObjectData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool
}
if (changesMask[9])
{
- data << uint32(StateWorldEffectsQuestObjectiveID);
- }
- if (changesMask[10])
- {
data << CreatedBy;
}
- if (changesMask[11])
+ if (changesMask[10])
{
data << GuildGUID;
}
- if (changesMask[12])
+ if (changesMask[11])
{
data << uint32(ViewerDependentValue<FlagsTag>::GetValue(this, owner, receiver));
}
- if (changesMask[13])
+ if (changesMask[12])
{
data << float(ParentRotation->x);
data << float(ParentRotation->y);
data << float(ParentRotation->z);
data << float(ParentRotation->w);
}
- if (changesMask[14])
+ if (changesMask[13])
{
data << int32(FactionTemplate);
}
+ if (changesMask[14])
+ {
+ data << int32(Level);
+ }
if (changesMask[15])
{
data << int8(ViewerDependentValue<StateTag>::GetValue(this, owner, receiver));
@@ -5892,26 +4621,6 @@ void GameObjectData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool
{
data << uint32(CustomParam);
}
- if (changesMask[20])
- {
- data << int32(Level);
- }
- if (changesMask[21])
- {
- data << uint32(AnimGroupInstance);
- }
- if (changesMask[22])
- {
- data << uint32(UiWidgetItemID);
- }
- if (changesMask[23])
- {
- data << uint32(UiWidgetItemQuality);
- }
- if (changesMask[24])
- {
- data << uint32(UiWidgetItemUnknown1000);
- }
}
}
@@ -5925,22 +4634,17 @@ void GameObjectData::ClearChangesMask()
Base::ClearChangesMask(StateSpellVisualID);
Base::ClearChangesMask(SpawnTrackingStateAnimID);
Base::ClearChangesMask(SpawnTrackingStateAnimKitID);
- Base::ClearChangesMask(StateWorldEffectsQuestObjectiveID);
Base::ClearChangesMask(CreatedBy);
Base::ClearChangesMask(GuildGUID);
Base::ClearChangesMask(Flags);
Base::ClearChangesMask(ParentRotation);
Base::ClearChangesMask(FactionTemplate);
+ Base::ClearChangesMask(Level);
Base::ClearChangesMask(State);
Base::ClearChangesMask(TypeID);
Base::ClearChangesMask(PercentHealth);
Base::ClearChangesMask(ArtKit);
Base::ClearChangesMask(CustomParam);
- Base::ClearChangesMask(Level);
- Base::ClearChangesMask(AnimGroupInstance);
- Base::ClearChangesMask(UiWidgetItemID);
- Base::ClearChangesMask(UiWidgetItemQuality);
- Base::ClearChangesMask(UiWidgetItemUnknown1000);
_changesMask.ResetAll();
}
@@ -5948,7 +4652,7 @@ void DynamicObjectData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag>
{
data << Caster;
data << uint8(Type);
- SpellVisual->WriteCreate(data, owner, receiver);
+ data << int32(SpellXSpellVisualID);
data << int32(SpellID);
data << float(Radius);
data << uint32(CastTime);
@@ -5976,7 +4680,7 @@ void DynamicObjectData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, b
}
if (changesMask[3])
{
- SpellVisual->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ data << int32(SpellXSpellVisualID);
}
if (changesMask[4])
{
@@ -5997,7 +4701,7 @@ void DynamicObjectData::ClearChangesMask()
{
Base::ClearChangesMask(Caster);
Base::ClearChangesMask(Type);
- Base::ClearChangesMask(SpellVisual);
+ Base::ClearChangesMask(SpellXSpellVisualID);
Base::ClearChangesMask(SpellID);
Base::ClearChangesMask(Radius);
Base::ClearChangesMask(CastTime);
@@ -6021,7 +4725,6 @@ void CorpseData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi
data << uint32(Customizations.size());
data << uint32(Flags);
data << int32(FactionTemplate);
- data << uint32(StateSpellVisualKitID);
for (uint32 i = 0; i < Customizations.size(); ++i)
{
Customizations[i].WriteCreate(data, owner, receiver);
@@ -6035,10 +4738,7 @@ void CorpseData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi
void CorpseData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Corpse const* owner, Player const* receiver) const
{
- data.WriteBits(changesMask.GetBlocksMask(0), 2);
- for (uint32 i = 0; i < 2; ++i)
- if (changesMask.GetBlock(i))
- data.WriteBits(changesMask.GetBlock(i), 32);
+ data.WriteBits(changesMask.GetBlock(0), 32);
if (changesMask[0])
{
@@ -6103,16 +4803,12 @@ void CorpseData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign
{
data << int32(FactionTemplate);
}
- if (changesMask[12])
- {
- data << uint32(StateSpellVisualKitID);
- }
}
- if (changesMask[13])
+ if (changesMask[12])
{
for (uint32 i = 0; i < 19; ++i)
{
- if (changesMask[14 + i])
+ if (changesMask[13 + i])
{
data << uint32(Items[i]);
}
@@ -6133,7 +4829,6 @@ void CorpseData::ClearChangesMask()
Base::ClearChangesMask(Class);
Base::ClearChangesMask(Flags);
Base::ClearChangesMask(FactionTemplate);
- Base::ClearChangesMask(StateSpellVisualKitID);
Base::ClearChangesMask(Items);
_changesMask.ResetAll();
}
@@ -6262,24 +4957,16 @@ void AreaTriggerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fi
data << uint32(TimeToTargetPos);
data << int32(SpellID);
data << int32(SpellForVisuals);
- SpellVisual->WriteCreate(data, owner, receiver);
+ data << int32(SpellXSpellVisualID);
data << float(BoundsRadius2D);
data << uint32(DecalPropertiesID);
data << CreatingEffectGUID;
- data << uint32(NumUnitsInside);
- data << uint32(NumPlayersInside);
data << OrbitPathTarget;
- data << RollPitchYaw;
- data << int32(PositionalSoundKitID);
ExtraScaleCurve->WriteCreate(data, owner, receiver);
- data.FlushBits();
- data.WriteBit(HeightIgnoresScale);
- data.WriteBit(Field_261);
OverrideMoveCurveX->WriteCreate(data, owner, receiver);
OverrideMoveCurveY->WriteCreate(data, owner, receiver);
OverrideMoveCurveZ->WriteCreate(data, owner, receiver);
VisualAnim->WriteCreate(data, owner, receiver);
- data.FlushBits();
}
void AreaTriggerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const
@@ -6289,122 +4976,92 @@ void AreaTriggerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fi
void AreaTriggerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, AreaTrigger const* owner, Player const* receiver) const
{
- data.WriteBits(changesMask.GetBlock(0), 26);
+ data.WriteBits(changesMask.GetBlock(0), 20);
- if (changesMask[0])
- {
- if (changesMask[1])
- {
- data.WriteBit(HeightIgnoresScale);
- }
- if (changesMask[2])
- {
- data.WriteBit(Field_261);
- }
- }
data.FlushBits();
if (changesMask[0])
{
- if (changesMask[3])
+ if (changesMask[1])
{
OverrideScaleCurve->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
- if (changesMask[8])
+ if (changesMask[6])
{
data << Caster;
}
- if (changesMask[9])
+ if (changesMask[7])
{
data << uint32(Duration);
}
- if (changesMask[10])
+ if (changesMask[8])
{
data << uint32(TimeToTarget);
}
- if (changesMask[11])
+ if (changesMask[9])
{
data << uint32(TimeToTargetScale);
}
- if (changesMask[12])
+ if (changesMask[10])
{
data << uint32(TimeToTargetExtraScale);
}
- if (changesMask[13])
+ if (changesMask[11])
{
data << uint32(TimeToTargetPos);
}
- if (changesMask[14])
+ if (changesMask[12])
{
data << int32(SpellID);
}
- if (changesMask[15])
+ if (changesMask[13])
{
data << int32(SpellForVisuals);
}
- if (changesMask[16])
+ if (changesMask[14])
{
- SpellVisual->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ data << int32(SpellXSpellVisualID);
}
- if (changesMask[17])
+ if (changesMask[15])
{
data << float(BoundsRadius2D);
}
- if (changesMask[18])
+ if (changesMask[16])
{
data << uint32(DecalPropertiesID);
}
- if (changesMask[19])
+ if (changesMask[17])
{
data << CreatingEffectGUID;
}
- if (changesMask[20])
- {
- data << uint32(NumUnitsInside);
- }
- if (changesMask[21])
- {
- data << uint32(NumPlayersInside);
- }
- if (changesMask[22])
+ if (changesMask[18])
{
data << OrbitPathTarget;
}
- if (changesMask[23])
- {
- data << RollPitchYaw;
- }
- if (changesMask[24])
- {
- data << int32(PositionalSoundKitID);
- }
- if (changesMask[4])
+ if (changesMask[2])
{
ExtraScaleCurve->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
- if (changesMask[5])
+ if (changesMask[3])
{
OverrideMoveCurveX->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
- if (changesMask[6])
+ if (changesMask[4])
{
OverrideMoveCurveY->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
- if (changesMask[7])
+ if (changesMask[5])
{
OverrideMoveCurveZ->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
- if (changesMask[25])
+ if (changesMask[19])
{
VisualAnim->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
- data.FlushBits();
}
void AreaTriggerData::ClearChangesMask()
{
- Base::ClearChangesMask(HeightIgnoresScale);
- Base::ClearChangesMask(Field_261);
Base::ClearChangesMask(OverrideScaleCurve);
Base::ClearChangesMask(ExtraScaleCurve);
Base::ClearChangesMask(OverrideMoveCurveX);
@@ -6418,15 +5075,11 @@ void AreaTriggerData::ClearChangesMask()
Base::ClearChangesMask(TimeToTargetPos);
Base::ClearChangesMask(SpellID);
Base::ClearChangesMask(SpellForVisuals);
- Base::ClearChangesMask(SpellVisual);
+ Base::ClearChangesMask(SpellXSpellVisualID);
Base::ClearChangesMask(BoundsRadius2D);
Base::ClearChangesMask(DecalPropertiesID);
Base::ClearChangesMask(CreatingEffectGUID);
- Base::ClearChangesMask(NumUnitsInside);
- Base::ClearChangesMask(NumPlayersInside);
Base::ClearChangesMask(OrbitPathTarget);
- Base::ClearChangesMask(RollPitchYaw);
- Base::ClearChangesMask(PositionalSoundKitID);
Base::ClearChangesMask(VisualAnim);
_changesMask.ResetAll();
}
@@ -6487,7 +5140,6 @@ void ConversationLine::WriteCreate(ByteBuffer& data, Conversation const* owner,
data << int32(UiCameraID);
data << uint8(ActorIndex);
data << uint8(Flags);
- data << uint8(ChatType);
}
void ConversationLine::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Conversation const* owner, Player const* receiver) const
@@ -6498,7 +5150,6 @@ void ConversationLine::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Con
data << int32(UiCameraID);
data << uint8(ActorIndex);
data << uint8(Flags);
- data << uint8(ChatType);
}
bool ConversationLine::operator==(ConversationLine const& right) const
@@ -6508,59 +5159,63 @@ bool ConversationLine::operator==(ConversationLine const& right) const
&& StartTime == right.StartTime
&& UiCameraID == right.UiCameraID
&& ActorIndex == right.ActorIndex
- && Flags == right.Flags
- && ChatType == right.ChatType;
+ && Flags == right.Flags;
}
void ConversationActor::WriteCreate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const
{
- data << uint32(CreatureID);
- data << uint32(CreatureDisplayInfoID);
- data << ActorGUID;
- data << int32(Id);
data.WriteBits(Type, 1);
- data.WriteBits(NoActorObject, 1);
+ data << int32(Id);
+ if (Type == 1)
+ {
+ data << uint32(CreatureID);
+ data << uint32(CreatureDisplayInfoID);
+ }
+ if (Type == 0)
+ {
+ data << ActorGUID;
+ }
data.FlushBits();
}
void ConversationActor::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Conversation const* owner, Player const* receiver) const
{
- data << uint32(CreatureID);
- data << uint32(CreatureDisplayInfoID);
- data << ActorGUID;
- data << int32(Id);
data.WriteBits(Type, 1);
- data.WriteBits(NoActorObject, 1);
+ data << int32(Id);
+ if (Type == 1)
+ {
+ data << uint32(CreatureID);
+ data << uint32(CreatureDisplayInfoID);
+ }
+ if (Type == 0)
+ {
+ data << ActorGUID;
+ }
data.FlushBits();
}
bool ConversationActor::operator==(ConversationActor const& right) const
{
- return CreatureID == right.CreatureID
- && CreatureDisplayInfoID == right.CreatureDisplayInfoID
- && ActorGUID == right.ActorGUID
+ return Type == right.Type
&& Id == right.Id
- && Type == right.Type
- && NoActorObject == right.NoActorObject;
+ && CreatureID == right.CreatureID
+ && CreatureDisplayInfoID == right.CreatureDisplayInfoID
+ && ActorGUID == right.ActorGUID;
}
void ConversationData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const
{
data << uint32(Lines->size());
data << int32(ViewerDependentValue<LastLineEndTimeTag>::GetValue(this, owner, receiver));
- data << uint32(Progress);
for (uint32 i = 0; i < Lines->size(); ++i)
{
(*Lines)[i].WriteCreate(data, owner, receiver);
}
- data.WriteBit(DontPlayBroadcastTextSounds);
data << uint32(Actors.size());
- data << uint32(Flags);
for (uint32 i = 0; i < Actors.size(); ++i)
{
Actors[i].WriteCreate(data, owner, receiver);
}
- data.FlushBits();
}
void ConversationData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const
@@ -6570,16 +5225,12 @@ void ConversationData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
void ConversationData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Conversation const* owner, Player const* receiver) const
{
- data.WriteBits(changesMask.GetBlock(0), 7);
+ data.WriteBits(changesMask.GetBlock(0), 4);
if (changesMask[0])
{
if (changesMask[1])
{
- data.WriteBit(DontPlayBroadcastTextSounds);
- }
- if (changesMask[2])
- {
data.WriteBits(Lines->size(), 32);
for (uint32 i = 0; i < Lines->size(); ++i)
{
@@ -6590,7 +5241,7 @@ void ConversationData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
data.FlushBits();
if (changesMask[0])
{
- if (changesMask[3])
+ if (changesMask[2])
{
if (!ignoreNestedChangesMask)
Actors.WriteUpdateMask(data);
@@ -6601,7 +5252,7 @@ void ConversationData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
data.FlushBits();
if (changesMask[0])
{
- if (changesMask[3])
+ if (changesMask[2])
{
for (uint32 i = 0; i < Actors.size(); ++i)
{
@@ -6611,33 +5262,20 @@ void ConversationData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[4])
+ if (changesMask[3])
{
data << int32(ViewerDependentValue<LastLineEndTimeTag>::GetValue(this, owner, receiver));
}
- if (changesMask[5])
- {
- data << uint32(Progress);
- }
- if (changesMask[6])
- {
- data << uint32(Flags);
- }
}
- data.FlushBits();
}
void ConversationData::ClearChangesMask()
{
- Base::ClearChangesMask(DontPlayBroadcastTextSounds);
Base::ClearChangesMask(Lines);
Base::ClearChangesMask(Actors);
Base::ClearChangesMask(LastLineEndTime);
- Base::ClearChangesMask(Progress);
- Base::ClearChangesMask(Flags);
_changesMask.ResetAll();
}
-
}
#if TRINITY_COMPILER == TRINITY_COMPILER_GNU
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h
index 078f0e5738c..d9543196a31 100644
--- a/src/server/game/Entities/Object/Updates/UpdateFields.h
+++ b/src/server/game/Entities/Object/Updates/UpdateFields.h
@@ -31,8 +31,6 @@
// This file is automatically generated, DO NOT EDIT
class AreaTrigger;
-class AzeriteEmpoweredItem;
-class AzeriteItem;
class Bag;
class ByteBuffer;
class Conversation;
@@ -60,12 +58,13 @@ struct ObjectData : public IsUpdateFieldStructureTag, public HasChangesMask<4>
void ClearChangesMask();
};
-struct ItemEnchantment : public IsUpdateFieldStructureTag, public HasChangesMask<5>
+struct ItemEnchantment : public IsUpdateFieldStructureTag, public HasChangesMask<6>
{
UpdateField<int32, 0, 1> ID;
UpdateField<uint32, 0, 2> Duration;
UpdateField<int16, 0, 3> Charges;
- UpdateField<uint16, 0, 4> Inactive;
+ UpdateField<uint8, 0, 4> Field_A;
+ UpdateField<uint8, 0, 5> Field_B;
void WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Item const* owner, Player const* receiver) const;
@@ -115,7 +114,7 @@ struct SocketedGem : public IsUpdateFieldStructureTag, public HasChangesMask<20>
void ClearChangesMask();
};
-struct ItemData : public IsUpdateFieldStructureTag, public HasChangesMask<41>
+struct ItemData : public IsUpdateFieldStructureTag, public HasChangesMask<43>
{
DynamicUpdateField<UF::ArtifactPower, 0, 1> ArtifactPowers;
DynamicUpdateField<UF::SocketedGem, 0, 2> Gems;
@@ -126,19 +125,21 @@ struct ItemData : public IsUpdateFieldStructureTag, public HasChangesMask<41>
UpdateField<uint32, 0, 7> StackCount;
UpdateField<uint32, 0, 8> Expiration;
UpdateField<uint32, 0, 9> DynamicFlags;
- UpdateField<uint32, 0, 10> Durability;
- UpdateField<uint32, 0, 11> MaxDurability;
- UpdateField<uint32, 0, 12> CreatePlayedTime;
- UpdateField<int32, 0, 13> Context;
- UpdateField<int64, 0, 14> CreateTime;
- UpdateField<uint64, 0, 15> ArtifactXP;
- UpdateField<uint8, 0, 16> ItemAppearanceModID;
- UpdateField<UF::ItemModList, 0, 17> Modifiers;
- UpdateField<uint32, 0, 18> DynamicFlags2;
- UpdateField<WorldPackets::Item::ItemBonusKey, 0, 19> ItemBonusKey;
- UpdateField<uint16, 0, 20> DEBUGItemLevel;
- UpdateFieldArray<int32, 5, 21, 22> SpellCharges;
- UpdateFieldArray<UF::ItemEnchantment, 13, 27, 28> Enchantment;
+ UpdateField<int32, 0, 10> PropertySeed;
+ UpdateField<int32, 0, 11> RandomPropertiesID;
+ UpdateField<uint32, 0, 12> Durability;
+ UpdateField<uint32, 0, 13> MaxDurability;
+ UpdateField<uint32, 0, 14> CreatePlayedTime;
+ UpdateField<int32, 0, 15> Context;
+ UpdateField<int64, 0, 16> CreateTime;
+ UpdateField<uint64, 0, 17> ArtifactXP;
+ UpdateField<uint8, 0, 18> ItemAppearanceModID;
+ UpdateField<UF::ItemModList, 0, 19> Modifiers;
+ UpdateField<uint32, 0, 20> DynamicFlags2;
+ UpdateField<WorldPackets::Item::ItemBonusKey, 0, 21> ItemBonusKey;
+ UpdateField<uint16, 0, 22> DEBUGItemLevel;
+ UpdateFieldArray<int32, 5, 23, 24> SpellCharges;
+ UpdateFieldArray<UF::ItemEnchantment, 13, 29, 30> Enchantment;
void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
@@ -159,73 +160,10 @@ struct ContainerData : public IsUpdateFieldStructureTag, public HasChangesMask<3
void ClearChangesMask();
};
-struct AzeriteEmpoweredItemData : public IsUpdateFieldStructureTag, public HasChangesMask<6>
-{
- UpdateFieldArray<int32, 5, 0, 1> Selections;
-
- void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AzeriteEmpoweredItem const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AzeriteEmpoweredItem const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, AzeriteEmpoweredItem const* owner, Player const* receiver) const;
- void ClearChangesMask();
-};
-
-struct UnlockedAzeriteEssence : public IsUpdateFieldStructureTag
-{
- uint32 AzeriteEssenceID;
- uint32 Rank;
-
- void WriteCreate(ByteBuffer& data, AzeriteItem const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AzeriteItem const* owner, Player const* receiver) const;
- bool operator==(UnlockedAzeriteEssence const& right) const;
- bool operator!=(UnlockedAzeriteEssence const& right) const { return !(*this == right); }
-};
-
-struct SelectedAzeriteEssences : public IsUpdateFieldStructureTag, public HasChangesMask<8>
-{
- UpdateField<bool, 0, 1> Enabled;
- UpdateField<uint32, 0, 2> SpecializationID;
- UpdateFieldArray<uint32, 4, 3, 4> AzeriteEssenceID;
-
- void WriteCreate(ByteBuffer& data, AzeriteItem const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AzeriteItem const* owner, Player const* receiver) const;
- void ClearChangesMask();
-};
-
-struct AzeriteItemData : public IsUpdateFieldStructureTag, public HasChangesMask<10>
-{
- UpdateField<bool, 0, 1> Enabled;
- DynamicUpdateField<UF::UnlockedAzeriteEssence, 0, 2> UnlockedEssences;
- DynamicUpdateField<uint32, 0, 4> UnlockedEssenceMilestones;
- DynamicUpdateField<UF::SelectedAzeriteEssences, 0, 3> SelectedEssences;
- UpdateField<uint64, 0, 5> Xp;
- UpdateField<uint32, 0, 6> Level;
- UpdateField<uint32, 0, 7> AuraLevel;
- UpdateField<uint32, 0, 8> KnowledgeLevel;
- UpdateField<int32, 0, 9> DEBUGknowledgeWeek;
-
- void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AzeriteItem const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AzeriteItem const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, AzeriteItem const* owner, Player const* receiver) const;
- static void AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags);
- static void FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags);
- void ClearChangesMask();
-};
-
-struct SpellCastVisual : public IsUpdateFieldStructureTag
-{
- int32 SpellXSpellVisualID;
- int32 ScriptVisualID;
-
- void WriteCreate(ByteBuffer& data, Object const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Object const* owner, Player const* receiver) const;
- bool operator==(SpellCastVisual const& right) const;
- bool operator!=(SpellCastVisual const& right) const { return !(*this == right); }
-};
-
struct UnitChannel : public IsUpdateFieldStructureTag
{
int32 SpellID;
- UF::SpellCastVisual SpellVisual;
+ int32 SpellXSpellVisualID;
void WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Unit const* owner, Player const* receiver) const;
@@ -233,13 +171,11 @@ struct UnitChannel : public IsUpdateFieldStructureTag
bool operator!=(UnitChannel const& right) const { return !(*this == right); }
};
-struct VisibleItem : public IsUpdateFieldStructureTag, public HasChangesMask<6>
+struct VisibleItem : public IsUpdateFieldStructureTag, public HasChangesMask<4>
{
UpdateField<int32, 0, 1> ItemID;
- UpdateField<int32, 0, 2> SecondaryItemModifiedAppearanceID;
- UpdateField<int32, 0, 3> ConditionalItemAppearanceID;
- UpdateField<uint16, 0, 4> ItemAppearanceModID;
- UpdateField<uint16, 0, 5> ItemVisual;
+ UpdateField<uint16, 0, 2> ItemAppearanceModID;
+ UpdateField<uint16, 0, 3> ItemVisual;
void WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Unit const* owner, Player const* receiver) const;
@@ -257,19 +193,19 @@ struct PassiveSpellHistory : public IsUpdateFieldStructureTag
bool operator!=(PassiveSpellHistory const& right) const { return !(*this == right); }
};
-struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<217>
+struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<227>
{
UpdateField<std::vector<uint32>, 0, 1> StateWorldEffectIDs;
DynamicUpdateField<UF::PassiveSpellHistory, 0, 2> PassiveSpells;
DynamicUpdateField<int32, 0, 3> WorldEffects;
DynamicUpdateField<ObjectGuid, 0, 4> ChannelObjects;
- UpdateField<int32, 0, 5> DisplayID;
+ UpdateField<int64, 0, 5> Health;
+ UpdateField<int64, 0, 6> MaxHealth;
+ UpdateField<int32, 0, 7> DisplayID;
struct DisplayIDTag : ViewerDependentValueTag<int32> {};
- UpdateField<uint32, 0, 6> StateSpellVisualID;
- UpdateField<uint32, 0, 7> StateAnimID;
- UpdateField<uint32, 0, 8> StateAnimKitID;
- UpdateField<uint32, 0, 9> StateWorldEffectsQuestObjectiveID;
- UpdateField<int32, 0, 10> SpellOverrideNameID;
+ UpdateField<uint32, 0, 8> StateSpellVisualID;
+ UpdateField<uint32, 0, 9> StateAnimID;
+ UpdateField<uint32, 0, 10> StateAnimKitID;
UpdateField<ObjectGuid, 0, 11> Charm;
UpdateField<ObjectGuid, 0, 12> Summon;
UpdateField<ObjectGuid, 0, 13> Critter;
@@ -282,128 +218,116 @@ struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<217>
UpdateField<ObjectGuid, 0, 20> BattlePetCompanionGUID;
UpdateField<uint64, 0, 21> BattlePetDBID;
UpdateField<UF::UnitChannel, 0, 22> ChannelData;
- UpdateField<int8, 0, 23> SpellEmpowerStage;
- UpdateField<uint32, 0, 24> SummonedByHomeRealm;
- UpdateField<uint8, 0, 25> Race;
- UpdateField<uint8, 0, 26> ClassId;
- UpdateField<uint8, 0, 27> PlayerClassId;
- UpdateField<uint8, 0, 28> Sex;
- UpdateField<uint8, 0, 29> DisplayPower;
- UpdateField<uint32, 0, 30> OverrideDisplayPowerID;
- UpdateField<int64, 0, 31> Health;
- UpdateField<int64, 32, 33> MaxHealth;
- UpdateField<int32, 32, 34> Level;
- UpdateField<int32, 32, 35> EffectiveLevel;
- UpdateField<int32, 32, 36> ContentTuningID;
- UpdateField<int32, 32, 37> ScalingLevelMin;
- UpdateField<int32, 32, 38> ScalingLevelMax;
- UpdateField<int32, 32, 39> ScalingLevelDelta;
- UpdateField<int32, 32, 40> ScalingFactionGroup;
- UpdateField<int32, 32, 41> ScalingHealthItemLevelCurveID;
- UpdateField<int32, 32, 42> ScalingDamageItemLevelCurveID;
- UpdateField<int32, 32, 43> FactionTemplate;
+ UpdateField<uint32, 0, 23> SummonedByHomeRealm;
+ UpdateField<uint8, 0, 24> Race;
+ UpdateField<uint8, 0, 25> ClassId;
+ UpdateField<uint8, 0, 26> PlayerClassId;
+ UpdateField<uint8, 0, 27> Sex;
+ UpdateField<uint8, 0, 28> DisplayPower;
+ UpdateField<uint32, 0, 29> OverrideDisplayPowerID;
+ UpdateField<int32, 0, 30> Level;
+ UpdateField<int32, 0, 31> EffectiveLevel;
+ UpdateField<int32, 32, 33> ContentTuningID;
+ UpdateField<int32, 32, 34> ScalingLevelMin;
+ UpdateField<int32, 32, 35> ScalingLevelMax;
+ UpdateField<int32, 32, 36> ScalingLevelDelta;
+ UpdateField<int32, 32, 37> ScalingFactionGroup;
+ UpdateField<int32, 32, 38> ScalingHealthItemLevelCurveID;
+ UpdateField<int32, 32, 39> ScalingDamageItemLevelCurveID;
+ UpdateField<int32, 32, 40> FactionTemplate;
struct FactionTemplateTag : ViewerDependentValueTag<int32> {};
- UpdateField<uint32, 32, 44> Flags;
+ UpdateField<uint32, 32, 41> Flags;
struct FlagsTag : ViewerDependentValueTag<uint32> {};
- UpdateField<uint32, 32, 45> Flags2;
- UpdateField<uint32, 32, 46> Flags3;
+ UpdateField<uint32, 32, 42> Flags2;
+ UpdateField<uint32, 32, 43> Flags3;
struct Flags3Tag : ViewerDependentValueTag<uint32> {};
- UpdateField<uint32, 32, 47> AuraState;
+ UpdateField<uint32, 32, 44> AuraState;
struct AuraStateTag : ViewerDependentValueTag<uint32> {};
- UpdateField<uint32, 32, 48> RangedAttackRoundBaseTime;
- UpdateField<float, 32, 49> BoundingRadius;
- UpdateField<float, 32, 50> CombatReach;
- UpdateField<float, 32, 51> DisplayScale;
- UpdateField<int32, 32, 52> CreatureFamily;
- UpdateField<int32, 32, 53> CreatureType;
- UpdateField<int32, 32, 54> NativeDisplayID;
- UpdateField<float, 32, 55> NativeXDisplayScale;
- UpdateField<int32, 32, 56> MountDisplayID;
- UpdateField<int32, 32, 57> CosmeticMountDisplayID;
- UpdateField<float, 32, 58> MinDamage;
- UpdateField<float, 32, 59> MaxDamage;
- UpdateField<float, 32, 60> MinOffHandDamage;
- UpdateField<float, 32, 61> MaxOffHandDamage;
- UpdateField<uint8, 32, 62> StandState;
- UpdateField<uint8, 32, 63> PetTalentPoints;
- UpdateField<uint8, 64, 65> VisFlags;
- UpdateField<uint8, 64, 66> AnimTier;
- UpdateField<uint32, 64, 67> PetNumber;
- UpdateField<uint32, 64, 68> PetNameTimestamp;
- UpdateField<uint32, 64, 69> PetExperience;
- UpdateField<uint32, 64, 70> PetNextLevelExperience;
- UpdateField<float, 64, 71> ModCastingSpeed;
- UpdateField<float, 64, 72> ModCastingSpeedNeg;
- UpdateField<float, 64, 73> ModSpellHaste;
- UpdateField<float, 64, 74> ModHaste;
- UpdateField<float, 64, 75> ModRangedHaste;
- UpdateField<float, 64, 76> ModHasteRegen;
- UpdateField<float, 64, 77> ModTimeRate;
- UpdateField<int32, 64, 78> CreatedBySpell;
- UpdateField<int32, 64, 79> EmoteState;
- UpdateField<int32, 64, 80> BaseMana;
- UpdateField<int32, 64, 81> BaseHealth;
- UpdateField<uint8, 64, 82> SheatheState;
- UpdateField<uint8, 64, 83> PvpFlags;
+ UpdateField<uint32, 32, 45> RangedAttackRoundBaseTime;
+ UpdateField<float, 32, 46> BoundingRadius;
+ UpdateField<float, 32, 47> CombatReach;
+ UpdateField<float, 32, 48> DisplayScale;
+ UpdateField<int32, 32, 49> NativeDisplayID;
+ UpdateField<float, 32, 50> NativeXDisplayScale;
+ UpdateField<int32, 32, 51> MountDisplayID;
+ UpdateField<float, 32, 52> MinDamage;
+ UpdateField<float, 32, 53> MaxDamage;
+ UpdateField<float, 32, 54> MinOffHandDamage;
+ UpdateField<float, 32, 55> MaxOffHandDamage;
+ UpdateField<uint8, 32, 56> StandState;
+ UpdateField<uint8, 32, 57> PetTalentPoints;
+ UpdateField<uint8, 32, 58> VisFlags;
+ UpdateField<uint8, 32, 59> AnimTier;
+ UpdateField<uint32, 32, 60> PetNumber;
+ UpdateField<uint32, 32, 61> PetNameTimestamp;
+ UpdateField<uint32, 32, 62> PetExperience;
+ UpdateField<uint32, 32, 63> PetNextLevelExperience;
+ UpdateField<float, 64, 65> ModCastingSpeed;
+ UpdateField<float, 64, 66> ModSpellHaste;
+ UpdateField<float, 64, 67> ModHaste;
+ UpdateField<float, 64, 68> ModRangedHaste;
+ UpdateField<float, 64, 69> ModHasteRegen;
+ UpdateField<float, 64, 70> ModTimeRate;
+ UpdateField<int32, 64, 71> CreatedBySpell;
+ UpdateField<int32, 64, 72> EmoteState;
+ UpdateField<int16, 64, 73> TrainingPointsUsed;
+ UpdateField<int16, 64, 74> TrainingPointsTotal;
+ UpdateField<int32, 64, 75> BaseMana;
+ UpdateField<int32, 64, 76> BaseHealth;
+ UpdateField<uint8, 64, 77> SheatheState;
+ UpdateField<uint8, 64, 78> PvpFlags;
struct PvpFlagsTag : ViewerDependentValueTag<uint8> {};
- UpdateField<uint8, 64, 84> PetFlags;
- UpdateField<uint8, 64, 85> ShapeshiftForm;
- UpdateField<int32, 64, 86> AttackPower;
- UpdateField<int32, 64, 87> AttackPowerModPos;
- UpdateField<int32, 64, 88> AttackPowerModNeg;
- UpdateField<float, 64, 89> AttackPowerMultiplier;
- UpdateField<int32, 64, 90> AttackPowerModSupport;
- UpdateField<int32, 64, 91> RangedAttackPower;
- UpdateField<int32, 64, 92> RangedAttackPowerModPos;
- UpdateField<int32, 64, 93> RangedAttackPowerModNeg;
- UpdateField<float, 64, 94> RangedAttackPowerMultiplier;
- UpdateField<int32, 64, 95> RangedAttackPowerModSupport;
- UpdateField<int32, 96, 97> MainHandWeaponAttackPower;
- UpdateField<int32, 96, 98> OffHandWeaponAttackPower;
- UpdateField<int32, 96, 99> RangedWeaponAttackPower;
- UpdateField<int32, 96, 100> SetAttackSpeedAura;
- UpdateField<float, 96, 101> Lifesteal;
- UpdateField<float, 96, 102> MinRangedDamage;
- UpdateField<float, 96, 103> MaxRangedDamage;
- UpdateField<float, 96, 104> ManaCostMultiplier;
- UpdateField<float, 96, 105> MaxHealthModifier;
- UpdateField<float, 96, 106> HoverHeight;
- UpdateField<int32, 96, 107> MinItemLevelCutoff;
- UpdateField<int32, 96, 108> MinItemLevel;
- UpdateField<int32, 96, 109> MaxItemLevel;
- UpdateField<int32, 96, 110> AzeriteItemLevel;
- UpdateField<int32, 96, 111> WildBattlePetLevel;
- UpdateField<int32, 96, 112> BattlePetCompanionExperience;
- UpdateField<uint32, 96, 113> BattlePetCompanionNameTimestamp;
- UpdateField<int32, 96, 114> InteractSpellID;
+ UpdateField<uint8, 64, 79> PetFlags;
+ UpdateField<uint8, 64, 80> ShapeshiftForm;
+ UpdateField<int32, 64, 81> AttackPower;
+ UpdateField<int32, 64, 82> AttackPowerModPos;
+ UpdateField<int32, 64, 83> AttackPowerModNeg;
+ UpdateField<float, 64, 84> AttackPowerMultiplier;
+ UpdateField<int32, 64, 85> RangedAttackPower;
+ UpdateField<int32, 64, 86> RangedAttackPowerModPos;
+ UpdateField<int32, 64, 87> RangedAttackPowerModNeg;
+ UpdateField<float, 64, 88> RangedAttackPowerMultiplier;
+ UpdateField<int32, 64, 89> SetAttackSpeedAura;
+ UpdateField<float, 64, 90> Lifesteal;
+ UpdateField<float, 64, 91> MinRangedDamage;
+ UpdateField<float, 64, 92> MaxRangedDamage;
+ UpdateField<float, 64, 93> MaxHealthModifier;
+ UpdateField<float, 64, 94> HoverHeight;
+ UpdateField<int32, 64, 95> MinItemLevelCutoff;
+ UpdateField<int32, 96, 97> MinItemLevel;
+ UpdateField<int32, 96, 98> MaxItemLevel;
+ UpdateField<int32, 96, 99> WildBattlePetLevel;
+ UpdateField<uint32, 96, 100> BattlePetCompanionNameTimestamp;
+ UpdateField<int32, 96, 101> InteractSpellID;
struct InteractSpellIDTag : ViewerDependentValueTag<int32> {};
- UpdateField<int32, 96, 115> ScaleDuration;
- UpdateField<int32, 96, 116> LooksLikeMountID;
- UpdateField<int32, 96, 117> LooksLikeCreatureID;
- UpdateField<int32, 96, 118> LookAtControllerID;
- UpdateField<int32, 96, 119> PerksVendorItemID;
- UpdateField<int32, 96, 120> TaxiNodesID;
- UpdateField<ObjectGuid, 96, 121> GuildGUID;
- UpdateField<int32, 96, 122> FlightCapabilityID;
- UpdateField<float, 96, 123> GlideEventSpeedDivisor; // Movement speed gets divided by this value when evaluating what GlideEvents to use
- UpdateField<uint32, 96, 124> SilencedSchoolMask;
- UpdateField<uint32, 96, 125> CurrentAreaID;
- UpdateField<ObjectGuid, 96, 126> NameplateAttachToGUID; // When set, nameplate of this unit will instead appear on that object
- UpdateFieldArray<uint32, 2, 127, 128> NpcFlags;
+ UpdateField<int32, 96, 102> ScaleDuration;
+ UpdateField<int32, 96, 103> LooksLikeMountID;
+ UpdateField<int32, 96, 104> LooksLikeCreatureID;
+ UpdateField<int32, 96, 105> LookAtControllerID;
+ UpdateField<int32, 96, 106> PerksVendorItemID;
+ UpdateField<ObjectGuid, 96, 107> GuildGUID;
+ UpdateField<ObjectGuid, 96, 108> SkinningOwnerGUID;
+ UpdateField<int32, 96, 109> FlightCapabilityID;
+ UpdateField<float, 96, 110> GlideEventSpeedDivisor; // Movement speed gets divided by this value when evaluating what GlideEvents to use
+ UpdateField<uint32, 96, 111> CurrentAreaID;
+ UpdateField<ObjectGuid, 96, 112> ComboTarget;
+ UpdateFieldArray<uint32, 2, 113, 114> NpcFlags;
struct NpcFlagsTag : ViewerDependentValueTag<uint32> {};
- UpdateFieldArray<int32, 10, 130, 131> Power;
- UpdateFieldArray<int32, 10, 130, 141> MaxPower;
- UpdateFieldArray<float, 10, 130, 151> PowerRegenFlatModifier;
- UpdateFieldArray<float, 10, 130, 161> PowerRegenInterruptedFlatModifier;
- UpdateFieldArray<UF::VisibleItem, 3, 171, 172> VirtualItems;
- UpdateFieldArray<uint32, 2, 175, 176> AttackRoundBaseTime;
- UpdateFieldArray<int32, 4, 178, 179> Stats;
- UpdateFieldArray<int32, 4, 178, 183> StatPosBuff;
- UpdateFieldArray<int32, 4, 178, 187> StatNegBuff;
- UpdateFieldArray<int32, 4, 178, 191> StatSupportBuff;
- UpdateFieldArray<int32, 7, 195, 196> Resistances;
- UpdateFieldArray<int32, 7, 195, 203> BonusResistanceMods;
- UpdateFieldArray<int32, 7, 195, 210> ManaCostModifier;
+ UpdateFieldArray<float, 10, 116, 117> PowerRegenFlatModifier;
+ UpdateFieldArray<float, 10, 116, 127> PowerRegenInterruptedFlatModifier;
+ UpdateFieldArray<int32, 10, 116, 137> Power;
+ UpdateFieldArray<int32, 10, 116, 147> MaxPower;
+ UpdateFieldArray<float, 10, 116, 157> ModPowerRegen; // Applies to power regen only if expansion < 2, hidden from lua
+ UpdateFieldArray<UF::VisibleItem, 3, 167, 168> VirtualItems;
+ UpdateFieldArray<uint32, 2, 171, 172> AttackRoundBaseTime;
+ UpdateFieldArray<int32, 5, 174, 175> Stats;
+ UpdateFieldArray<int32, 5, 174, 180> StatPosBuff;
+ UpdateFieldArray<int32, 5, 174, 185> StatNegBuff;
+ UpdateFieldArray<int32, 7, 190, 191> Resistances;
+ UpdateFieldArray<int32, 7, 190, 198> PowerCostModifier;
+ UpdateFieldArray<float, 7, 190, 205> PowerCostMultiplier;
+ UpdateFieldArray<int32, 7, 212, 213> ResistanceBuffModsPositive;
+ UpdateFieldArray<int32, 7, 212, 220> ResistanceBuffModsNegative;
void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const;
@@ -424,46 +348,34 @@ struct ChrCustomizationChoice : public IsUpdateFieldStructureTag
bool operator!=(ChrCustomizationChoice const& right) const { return !(*this == right); }
};
-struct QuestLog : public IsUpdateFieldStructureTag, public HasChangesMask<30>
+struct QuestLog : public IsUpdateFieldStructureTag, public HasChangesMask<29>
{
UpdateField<int64, 0, 1> EndTime;
UpdateField<int32, 0, 2> QuestID;
UpdateField<uint32, 0, 3> StateFlags;
- UpdateField<uint32, 0, 4> ObjectiveFlags;
- UpdateFieldArray<int16, 24, 5, 6> ObjectiveProgress;
+ UpdateFieldArray<uint16, 24, 4, 5> ObjectiveProgress;
void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const;
void ClearChangesMask();
};
-struct ArenaCooldown : public IsUpdateFieldStructureTag, public HasChangesMask<8>
+struct ArenaCooldown : public IsUpdateFieldStructureTag, public HasChangesMask<9>
{
UpdateField<int32, 0, 1> SpellID;
- UpdateField<int32, 0, 2> Charges;
- UpdateField<uint32, 0, 3> Flags;
- UpdateField<uint32, 0, 4> StartTime;
- UpdateField<uint32, 0, 5> EndTime;
- UpdateField<uint32, 0, 6> NextChargeTime;
- UpdateField<uint8, 0, 7> MaxCharges;
+ UpdateField<int32, 0, 2> ItemID;
+ UpdateField<int32, 0, 3> Charges;
+ UpdateField<uint32, 0, 4> Flags;
+ UpdateField<uint32, 0, 5> StartTime;
+ UpdateField<uint32, 0, 6> EndTime;
+ UpdateField<uint32, 0, 7> NextChargeTime;
+ UpdateField<uint8, 0, 8> MaxCharges;
void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const;
void ClearChangesMask();
};
-struct CTROptions : public IsUpdateFieldStructureTag
-{
- int32 ContentTuningConditionMask;
- uint32 Field_4;
- uint32 ExpansionLevelMask;
-
- void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const;
- bool operator==(CTROptions const& right) const;
- bool operator!=(CTROptions const& right) const { return !(*this == right); }
-};
-
struct DeclinedNames : public IsUpdateFieldStructureTag, public HasChangesMask<6>
{
UpdateFieldArray<std::string, 5, 0, 1> Name;
@@ -486,54 +398,48 @@ struct CustomTabardInfo : public IsUpdateFieldStructureTag, public HasChangesMas
void ClearChangesMask();
};
-struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<269>
+struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<113>
{
- UpdateField<bool, 0, 1> HasQuestSession;
- UpdateField<bool, 0, 2> HasLevelLink;
- DynamicUpdateField<UF::ChrCustomizationChoice, 0, 3> Customizations;
- DynamicUpdateField<UF::ChrCustomizationChoice, 0, 4> QaCustomizations;
- DynamicUpdateField<UF::QuestLog, 0, 5> QuestSessionQuestLog;
- DynamicUpdateField<UF::ArenaCooldown, 0, 6> ArenaCooldowns;
- DynamicUpdateField<int32, 0, 7> VisualItemReplacements;
- UpdateField<ObjectGuid, 0, 8> DuelArbiter;
- UpdateField<ObjectGuid, 0, 9> WowAccount;
- UpdateField<ObjectGuid, 0, 10> BnetAccount;
- UpdateField<uint64, 0, 11> GuildClubMemberID;
- UpdateField<ObjectGuid, 0, 12> LootTargetGUID;
- UpdateField<uint32, 0, 13> PlayerFlags;
- UpdateField<uint32, 0, 14> PlayerFlagsEx;
- UpdateField<uint32, 0, 15> GuildRankID;
- UpdateField<uint32, 0, 16> GuildDeleteDate;
- UpdateField<int32, 0, 17> GuildLevel;
- UpdateField<uint8, 0, 18> NativeSex;
- UpdateField<uint8, 0, 19> Inebriation;
- UpdateField<uint8, 0, 20> PvpTitle;
- UpdateField<uint8, 0, 21> ArenaFaction;
- UpdateField<uint32, 0, 22> DuelTeam;
- UpdateField<int32, 0, 23> GuildTimeStamp;
- UpdateField<int32, 0, 24> PlayerTitle;
- UpdateField<int32, 0, 25> FakeInebriation;
- UpdateField<uint32, 0, 26> VirtualPlayerRealm;
- UpdateField<uint32, 0, 27> CurrentSpecID;
- UpdateField<int32, 0, 28> TaxiMountAnimKitID;
- UpdateField<uint8, 0, 29> CurrentBattlePetBreedQuality;
- UpdateField<int32, 0, 30> HonorLevel;
- UpdateField<int64, 0, 31> LogoutTime;
- UpdateField<std::string, 32, 33> Name;
- UpdateField<int32, 32, 34> Field_B0;
- UpdateField<int32, 32, 35> Field_B4;
- UpdateField<int32, 32, 36> CurrentBattlePetSpeciesID;
- UpdateField<UF::CTROptions, 32, 37> CtrOptions;
- UpdateField<int32, 32, 38> CovenantID;
- UpdateField<int32, 32, 39> SoulbindID;
- UpdateField<WorldPackets::MythicPlus::DungeonScoreSummary, 32, 40> DungeonScore;
- OptionalUpdateField<UF::DeclinedNames, 32, 41> DeclinedNames;
- UpdateField<UF::CustomTabardInfo, 32, 42> PersonalTabard;
- UpdateFieldArray<uint8, 2, 43, 44> PartyType;
- UpdateFieldArray<UF::QuestLog, 175, 46, 47> QuestLog;
- UpdateFieldArray<UF::VisibleItem, 19, 222, 223> VisibleItems;
- UpdateFieldArray<float, 6, 242, 243> AvgItemLevel;
- UpdateFieldArray<uint32, 19, 249, 250> Field_3120;
+ DynamicUpdateField<UF::ChrCustomizationChoice, 0, 1> Customizations;
+ DynamicUpdateField<UF::ArenaCooldown, 0, 2> ArenaCooldowns;
+ DynamicUpdateField<int32, 0, 3> VisualItemReplacements;
+ UpdateField<ObjectGuid, 0, 4> DuelArbiter;
+ UpdateField<ObjectGuid, 0, 5> WowAccount;
+ UpdateField<ObjectGuid, 0, 6> BnetAccount;
+ UpdateField<uint64, 0, 7> GuildClubMemberID;
+ UpdateField<ObjectGuid, 0, 8> LootTargetGUID;
+ UpdateField<uint32, 0, 9> PlayerFlags;
+ UpdateField<uint32, 0, 10> PlayerFlagsEx;
+ UpdateField<uint32, 0, 11> GuildRankID;
+ UpdateField<uint32, 0, 12> GuildDeleteDate;
+ UpdateField<int32, 0, 13> GuildLevel;
+ UpdateField<uint8, 0, 14> NumBankSlots;
+ UpdateField<uint8, 0, 15> NativeSex;
+ UpdateField<uint8, 0, 16> Inebriation;
+ UpdateField<uint8, 0, 17> PvpTitle;
+ UpdateField<uint8, 0, 18> ArenaFaction;
+ UpdateField<uint8, 0, 19> PvpRank;
+ UpdateField<int32, 0, 20> Field_88;
+ UpdateField<uint32, 0, 21> DuelTeam;
+ UpdateField<int32, 0, 22> GuildTimeStamp;
+ UpdateField<int32, 0, 23> PlayerTitle;
+ UpdateField<int32, 0, 24> FakeInebriation;
+ UpdateField<uint32, 0, 25> VirtualPlayerRealm;
+ UpdateField<uint32, 0, 26> CurrentSpecID;
+ UpdateField<int32, 0, 27> TaxiMountAnimKitID;
+ UpdateField<uint8, 0, 28> CurrentBattlePetBreedQuality;
+ UpdateField<int32, 0, 29> HonorLevel;
+ UpdateField<int64, 0, 30> LogoutTime;
+ UpdateField<std::string, 0, 31> Name;
+ UpdateField<int32, 32, 33> CurrentBattlePetSpeciesID;
+ UpdateField<WorldPackets::MythicPlus::DungeonScoreSummary, 32, 34> DungeonScore;
+ OptionalUpdateField<UF::DeclinedNames, 32, 35> DeclinedNames;
+ UpdateField<UF::CustomTabardInfo, 32, 36> PersonalTabard;
+ UpdateFieldArray<uint8, 2, 37, 38> PartyType;
+ UpdateFieldArray<UF::QuestLog, 25, 40, 41> QuestLog;
+ UpdateFieldArray<UF::VisibleItem, 19, 66, 67> VisibleItems;
+ UpdateFieldArray<float, 6, 86, 87> AvgItemLevel;
+ UpdateFieldArray<uint32, 19, 93, 94> Field_3120;
void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
@@ -652,69 +558,6 @@ struct ResearchHistory : public IsUpdateFieldStructureTag, public HasChangesMask
void ClearChangesMask();
};
-struct MawPower : public IsUpdateFieldStructureTag
-{
- int32 Field_0;
- int32 Field_4;
- int32 Field_8;
-
- void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const;
- bool operator==(MawPower const& right) const;
- bool operator!=(MawPower const& right) const { return !(*this == right); }
-};
-
-struct MultiFloorExplore : public IsUpdateFieldStructureTag
-{
- std::vector<int32> WorldMapOverlayIDs;
-
- void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const;
- bool operator==(MultiFloorExplore const& right) const;
- bool operator!=(MultiFloorExplore const& right) const { return !(*this == right); }
-};
-
-struct RecipeProgressionInfo : public IsUpdateFieldStructureTag
-{
- uint16 RecipeProgressionGroupID;
- uint16 Experience;
-
- void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const;
- bool operator==(RecipeProgressionInfo const& right) const;
- bool operator!=(RecipeProgressionInfo const& right) const { return !(*this == right); }
-};
-
-struct ActivePlayerUnk901 : public IsUpdateFieldStructureTag, public HasChangesMask<3>
-{
- UpdateField<ObjectGuid, 0, 1> Field_0;
- UpdateField<int32, 0, 2> Field_10;
-
- void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const;
- void ClearChangesMask();
-};
-
-struct QuestSession : public IsUpdateFieldStructureTag, public HasChangesMask<953>
-{
- UpdateField<ObjectGuid, 0, 1> Owner;
- UpdateFieldArray<uint64, 950, 2, 3> QuestCompleted;
-
- void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const;
- void ClearChangesMask();
-};
-
-struct ReplayedQuest : public IsUpdateFieldStructureTag, public HasChangesMask<3>
-{
- UpdateField<int32, 0, 1> QuestID;
- UpdateField<uint32, 0, 2> ReplayTime;
-
- void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const;
- void ClearChangesMask();
-};
-
struct TraitEntry : public IsUpdateFieldStructureTag
{
int32 TraitNodeID;
@@ -745,70 +588,6 @@ struct TraitConfig : public IsUpdateFieldStructureTag, public HasChangesMask<12>
void ClearChangesMask();
};
-struct CraftingOrderItem : public IsUpdateFieldStructureTag, public HasChangesMask<7>
-{
- UpdateField<uint64, -1, 0> Field_0;
- UpdateField<ObjectGuid, -1, 1> ItemGUID;
- UpdateField<ObjectGuid, -1, 2> OwnerGUID;
- UpdateField<int32, -1, 3> ItemID;
- UpdateField<uint32, -1, 4> Quantity;
- UpdateField<int32, -1, 5> ReagentQuality;
- OptionalUpdateField<uint8, -1, 6> DataSlotIndex;
-
- void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const;
- void ClearChangesMask();
-};
-
-struct CraftingOrderData : public IsUpdateFieldStructureTag, public HasChangesMask<24>
-{
- DynamicUpdateField<UF::CraftingOrderItem, 0, 1> Reagents;
- UpdateField<int32, 0, 2> Field_0;
- UpdateField<uint64, 0, 3> OrderID;
- UpdateField<int32, 0, 4> SkillLineAbilityID;
- UpdateField<uint8, 5, 6> OrderState;
- UpdateField<uint8, 5, 7> OrderType;
- UpdateField<uint8, 5, 8> MinQuality;
- UpdateField<int64, 5, 9> ExpirationTime;
- UpdateField<int64, 10, 11> ClaimEndTime;
- UpdateField<int64, 10, 12> TipAmount;
- UpdateField<int64, 10, 13> ConsortiumCut;
- UpdateField<uint32, 10, 14> Flags;
- UpdateField<ObjectGuid, 15, 16> CustomerGUID;
- UpdateField<ObjectGuid, 15, 17> CustomerAccountGUID;
- UpdateField<ObjectGuid, 15, 18> CrafterGUID;
- UpdateField<ObjectGuid, 15, 19> PersonalCrafterGUID;
- UpdateField<std::string, 20, 21> CustomerNotes;
- OptionalUpdateField<UF::CraftingOrderItem, 20, 22> OutputItem;
- OptionalUpdateField<WorldPackets::Item::ItemInstance, 20, 23> OutputItemData;
-
- void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const;
- void ClearChangesMask();
-};
-
-struct CraftingOrder : public IsUpdateFieldStructureTag, public HasChangesMask<4>
-{
- DynamicUpdateField<WorldPackets::Item::ItemEnchantData, -1, 0> Enchantments;
- DynamicUpdateField<WorldPackets::Item::ItemGemData, -1, 1> Gems;
- UpdateField<UF::CraftingOrderData, -1, 2> Data;
- OptionalUpdateField<WorldPackets::Item::ItemInstance, -1, 3> RecraftItemInfo;
-
- void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const;
- void ClearChangesMask();
-};
-
-struct PersonalCraftingOrderCount : public IsUpdateFieldStructureTag, public HasChangesMask<2>
-{
- UpdateField<int32, -1, 0> ProfessionID;
- UpdateField<uint32, -1, 1> Count;
-
- void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const;
- void ClearChangesMask();
-};
-
struct CategoryCooldownMod : public IsUpdateFieldStructureTag
{
int32 SpellCategoryID;
@@ -856,17 +635,6 @@ struct StableInfo : public IsUpdateFieldStructureTag, public HasChangesMask<3>
void ClearChangesMask();
};
-struct CollectableSourceTrackedData : public IsUpdateFieldStructureTag, public HasChangesMask<4>
-{
- UpdateField<int32, 0, 1> TargetType;
- UpdateField<int32, 0, 2> TargetID;
- UpdateField<int32, 0, 3> CollectableSourceInfoID;
-
- void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const;
- void ClearChangesMask();
-};
-
struct Research : public IsUpdateFieldStructureTag
{
int16 ResearchProjectID;
@@ -877,153 +645,146 @@ struct Research : public IsUpdateFieldStructureTag
bool operator!=(Research const& right) const { return !(*this == right); }
};
-struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1452>
-{
- UpdateField<bool, 0, 1> BackpackAutoSortDisabled;
- UpdateField<bool, 0, 2> BackpackSellJunkDisabled;
- UpdateField<bool, 0, 3> BankAutoSortDisabled;
- UpdateField<bool, 0, 4> SortBagsRightToLeft;
- UpdateField<bool, 0, 5> InsertItemsLeftToRight;
- UpdateField<bool, 0, 6> HasPerksProgramPendingReward;
- UpdateFieldArray<DynamicUpdateFieldBase<uint64>, 8, 36, 37> DataFlags;
- UpdateFieldArray<DynamicUpdateFieldBase<uint16>, 1, 38, 39> ResearchSites;
- UpdateFieldArray<DynamicUpdateFieldBase<uint32>, 1, 40, 41> ResearchSiteProgress;
- UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 42, 43> Research;
- DynamicUpdateField<uint64, 0, 7> KnownTitles;
- DynamicUpdateField<int32, 0, 9> DailyQuestsCompleted;
- DynamicUpdateField<int32, 0, 10> AvailableQuestLineXQuestIDs;
- DynamicUpdateField<int32, 0, 11> Heirlooms;
- DynamicUpdateField<uint32, 0, 12> HeirloomFlags;
- DynamicUpdateField<int32, 0, 13> Toys;
- DynamicUpdateField<uint32, 0, 14> ToyFlags;
- DynamicUpdateField<uint32, 0, 15> Transmog;
- DynamicUpdateField<int32, 0, 16> ConditionalTransmog;
- DynamicUpdateField<int32, 0, 17> SelfResSpells;
- DynamicUpdateField<uint32, 0, 18> RuneforgePowers;
- DynamicUpdateField<uint32, 0, 19> TransmogIllusions;
- DynamicUpdateField<UF::SpellPctModByLabel, 0, 21> SpellPctModByLabel;
- DynamicUpdateField<UF::SpellFlatModByLabel, 0, 22> SpellFlatModByLabel;
- DynamicUpdateField<UF::MawPower, 0, 23> MawPowers;
- DynamicUpdateField<UF::MultiFloorExplore, 0, 24> MultiFloorExploration;
- DynamicUpdateField<UF::RecipeProgressionInfo, 0, 25> RecipeProgression;
- DynamicUpdateField<UF::ReplayedQuest, 0, 26> ReplayedQuests;
- DynamicUpdateField<UF::QuestLog, 0, 27> TaskQuests;
- DynamicUpdateField<int32, 0, 28> DisabledSpells;
- DynamicUpdateField<UF::PersonalCraftingOrderCount, 0, 31> PersonalCraftingOrderCounts;
- DynamicUpdateField<UF::CategoryCooldownMod, 32, 33> CategoryCooldownMods;
- DynamicUpdateField<UF::WeeklySpellUse, 32, 34> WeeklySpellUses;
- DynamicUpdateField<UF::CollectableSourceTrackedData, 32, 35> TrackedCollectableSources;
- DynamicUpdateField<UF::PVPInfo, 0, 8> PvpInfo;
- DynamicUpdateField<UF::CharacterRestriction, 0, 20> CharacterRestrictions;
- DynamicUpdateField<UF::TraitConfig, 0, 29> TraitConfigs;
- DynamicUpdateField<UF::CraftingOrder, 0, 30> CraftingOrders;
- UpdateField<ObjectGuid, 32, 44> FarsightObject;
- UpdateField<ObjectGuid, 32, 45> SummonedBattlePetGUID;
- UpdateField<uint64, 32, 46> Coinage;
- UpdateField<int32, 32, 47> XP;
- UpdateField<int32, 32, 48> NextLevelXP;
- UpdateField<int32, 32, 49> TrialXP;
- UpdateField<UF::SkillInfo, 32, 50> Skill;
- UpdateField<int32, 32, 51> CharacterPoints;
- UpdateField<int32, 32, 52> MaxTalentTiers;
- UpdateField<uint32, 32, 53> TrackCreatureMask;
- UpdateField<float, 32, 54> MainhandExpertise;
- UpdateField<float, 32, 55> OffhandExpertise;
- UpdateField<float, 32, 56> RangedExpertise;
- UpdateField<float, 32, 57> CombatRatingExpertise;
- UpdateField<float, 32, 58> BlockPercentage;
- UpdateField<float, 32, 59> DodgePercentage;
- UpdateField<float, 32, 60> DodgePercentageFromAttribute;
- UpdateField<float, 32, 61> ParryPercentage;
- UpdateField<float, 32, 62> ParryPercentageFromAttribute;
- UpdateField<float, 32, 63> CritPercentage;
- UpdateField<float, 32, 64> RangedCritPercentage;
- UpdateField<float, 32, 65> OffhandCritPercentage;
- UpdateField<float, 32, 66> SpellCritPercentage;
- UpdateField<int32, 32, 67> ShieldBlock;
- UpdateField<float, 32, 68> ShieldBlockCritPercentage;
- UpdateField<float, 32, 69> Mastery;
- UpdateField<float, 32, 70> Speed;
- UpdateField<float, 32, 71> Avoidance;
- UpdateField<float, 72, 73> Sturdiness;
- UpdateField<int32, 72, 74> Versatility;
- UpdateField<float, 72, 75> VersatilityBonus;
- UpdateField<float, 72, 76> PvpPowerDamage;
- UpdateField<float, 72, 77> PvpPowerHealing;
- UpdateField<int32, 72, 78> ModHealingDonePos;
- UpdateField<float, 72, 79> ModHealingPercent;
- UpdateField<float, 72, 80> ModPeriodicHealingDonePercent;
- UpdateField<float, 72, 81> ModSpellPowerPercent;
- UpdateField<float, 72, 82> ModResiliencePercent;
- UpdateField<float, 72, 83> OverrideSpellPowerByAPPercent;
- UpdateField<float, 72, 84> OverrideAPBySpellPowerPercent;
- UpdateField<int32, 72, 85> ModTargetResistance;
- UpdateField<int32, 72, 86> ModTargetPhysicalResistance;
- UpdateField<uint32, 72, 87> LocalFlags;
- UpdateField<uint8, 72, 88> GrantableLevels;
- UpdateField<uint8, 72, 89> MultiActionBars;
- UpdateField<uint8, 72, 90> LifetimeMaxRank;
- UpdateField<uint8, 72, 91> NumRespecs;
- UpdateField<uint32, 72, 92> PvpMedals;
- UpdateField<uint16, 72, 93> TodayHonorableKills;
- UpdateField<uint16, 72, 94> YesterdayHonorableKills;
- UpdateField<uint32, 72, 95> LifetimeHonorableKills;
- UpdateField<int32, 72, 96> WatchedFactionIndex;
- UpdateField<int32, 72, 97> MaxLevel;
- UpdateField<int32, 72, 98> ScalingPlayerLevelDelta;
- UpdateField<int32, 72, 99> MaxCreatureScalingLevel;
- UpdateField<int32, 72, 100> PetSpellPower;
- UpdateField<float, 72, 101> UiHitModifier;
- UpdateField<float, 72, 102> UiSpellHitModifier;
- UpdateField<int32, 72, 103> HomeRealmTimeOffset;
- UpdateField<float, 104, 105> ModPetHaste;
- UpdateField<int8, 104, 106> JailersTowerLevelMax;
- UpdateField<int8, 104, 107> JailersTowerLevel;
- UpdateField<uint8, 104, 108> LocalRegenFlags;
- UpdateField<uint8, 104, 109> AuraVision;
- UpdateField<uint8, 104, 110> NumBackpackSlots;
- UpdateField<int32, 104, 111> OverrideSpellsID;
- UpdateField<uint16, 104, 112> LootSpecID;
- UpdateField<uint32, 104, 113> OverrideZonePVPType;
- UpdateField<int32, 104, 114> Honor;
- UpdateField<int32, 104, 115> HonorNextLevel;
- UpdateField<int32, 104, 116> PerksProgramCurrency;
- UpdateField<uint8, 104, 117> NumBankSlots;
+struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1369>
+{
+ UpdateField<bool, 0, 1> SortBagsRightToLeft;
+ UpdateField<bool, 0, 2> InsertItemsLeftToRight;
+ UpdateFieldArray<DynamicUpdateFieldBase<uint64>, 8, 20, 21> DataFlags;
+ UpdateFieldArray<DynamicUpdateFieldBase<uint16>, 1, 22, 23> ResearchSites;
+ UpdateFieldArray<DynamicUpdateFieldBase<uint32>, 1, 24, 25> ResearchSiteProgress;
+ UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 26, 27> Research;
+ DynamicUpdateField<uint64, 0, 3> KnownTitles;
+ DynamicUpdateField<int32, 0, 4> DailyQuestsCompleted;
+ DynamicUpdateField<int32, 0, 5> AvailableQuestLineXQuestIDs;
+ DynamicUpdateField<int32, 0, 6> Field_1000;
+ DynamicUpdateField<int32, 0, 7> Heirlooms;
+ DynamicUpdateField<uint32, 0, 8> HeirloomFlags;
+ DynamicUpdateField<int32, 0, 9> Toys;
+ DynamicUpdateField<uint32, 0, 10> Transmog;
+ DynamicUpdateField<int32, 0, 11> ConditionalTransmog;
+ DynamicUpdateField<int32, 0, 12> SelfResSpells;
+ DynamicUpdateField<UF::SpellPctModByLabel, 0, 14> SpellPctModByLabel;
+ DynamicUpdateField<UF::SpellFlatModByLabel, 0, 15> SpellFlatModByLabel;
+ DynamicUpdateField<UF::QuestLog, 0, 16> TaskQuests;
+ DynamicUpdateField<UF::CategoryCooldownMod, 0, 18> CategoryCooldownMods;
+ DynamicUpdateField<UF::WeeklySpellUse, 0, 19> WeeklySpellUses;
+ DynamicUpdateField<UF::CharacterRestriction, 0, 13> CharacterRestrictions;
+ DynamicUpdateField<UF::TraitConfig, 0, 17> TraitConfigs;
+ UpdateField<ObjectGuid, 0, 28> FarsightObject;
+ UpdateField<ObjectGuid, 0, 29> SummonedBattlePetGUID;
+ UpdateField<uint64, 0, 30> Coinage;
+ UpdateField<int32, 0, 31> XP;
+ UpdateField<int32, 0, 32> NextLevelXP;
+ UpdateField<int32, 0, 33> TrialXP;
+ UpdateField<UF::SkillInfo, 0, 34> Skill;
+ UpdateField<int32, 0, 35> CharacterPoints;
+ UpdateField<int32, 0, 36> MaxTalentTiers;
+ UpdateField<uint32, 0, 37> TrackCreatureMask;
+ UpdateField<float, 0, 38> MainhandExpertise;
+ UpdateField<float, 0, 39> OffhandExpertise;
+ UpdateField<float, 40, 41> RangedExpertise;
+ UpdateField<float, 40, 42> CombatRatingExpertise;
+ UpdateField<float, 40, 43> BlockPercentage;
+ UpdateField<float, 40, 44> DodgePercentage;
+ UpdateField<float, 40, 45> DodgePercentageFromAttribute;
+ UpdateField<float, 40, 46> ParryPercentage;
+ UpdateField<float, 40, 47> ParryPercentageFromAttribute;
+ UpdateField<float, 40, 48> CritPercentage;
+ UpdateField<float, 40, 49> RangedCritPercentage;
+ UpdateField<float, 40, 50> OffhandCritPercentage;
+ UpdateField<int32, 40, 51> ShieldBlock;
+ UpdateField<float, 40, 52> ShieldBlockCritPercentage;
+ UpdateField<float, 40, 53> Mastery;
+ UpdateField<float, 40, 54> Speed;
+ UpdateField<float, 40, 55> Avoidance;
+ UpdateField<float, 40, 56> Sturdiness;
+ UpdateField<int32, 40, 57> Versatility;
+ UpdateField<float, 40, 58> VersatilityBonus;
+ UpdateField<float, 40, 59> PvpPowerDamage;
+ UpdateField<float, 40, 60> PvpPowerHealing;
+ UpdateField<int32, 40, 61> ModHealingDonePos;
+ UpdateField<float, 40, 62> ModHealingPercent;
+ UpdateField<float, 40, 63> ModHealingDonePercent;
+ UpdateField<float, 40, 64> ModPeriodicHealingDonePercent;
+ UpdateField<float, 40, 65> ModSpellPowerPercent;
+ UpdateField<float, 40, 66> ModResiliencePercent;
+ UpdateField<float, 40, 67> OverrideSpellPowerByAPPercent;
+ UpdateField<float, 40, 68> OverrideAPBySpellPowerPercent;
+ UpdateField<int32, 40, 69> ModTargetResistance;
+ UpdateField<int32, 40, 70> ModTargetPhysicalResistance;
+ UpdateField<uint32, 40, 71> LocalFlags;
+ UpdateField<uint8, 72, 73> GrantableLevels;
+ UpdateField<uint8, 72, 74> MultiActionBars;
+ UpdateField<uint8, 72, 75> LifetimeMaxRank;
+ UpdateField<uint8, 72, 76> NumRespecs;
+ UpdateField<int32, 72, 77> AmmoID;
+ UpdateField<uint32, 72, 78> PvpMedals;
+ UpdateField<uint16, 72, 79> TodayHonorableKills;
+ UpdateField<uint16, 72, 80> TodayDishonorableKills;
+ UpdateField<uint16, 72, 81> YesterdayHonorableKills;
+ UpdateField<uint16, 72, 82> YesterdayDishonorableKills;
+ UpdateField<uint16, 72, 83> LastWeekHonorableKills;
+ UpdateField<uint16, 72, 84> LastWeekDishonorableKills;
+ UpdateField<uint16, 72, 85> ThisWeekHonorableKills;
+ UpdateField<uint16, 72, 86> ThisWeekDishonorableKills;
+ UpdateField<uint32, 72, 87> ThisWeekContribution;
+ UpdateField<uint32, 72, 88> LifetimeHonorableKills;
+ UpdateField<uint32, 72, 89> LifetimeDishonorableKills;
+ UpdateField<uint32, 72, 90> Field_F24;
+ UpdateField<uint32, 72, 91> YesterdayContribution;
+ UpdateField<uint32, 72, 92> LastWeekContribution;
+ UpdateField<uint32, 72, 93> LastWeekRank;
+ UpdateField<int32, 72, 94> WatchedFactionIndex;
+ UpdateField<int32, 72, 95> MaxLevel;
+ UpdateField<int32, 72, 96> ScalingPlayerLevelDelta;
+ UpdateField<int32, 72, 97> MaxCreatureScalingLevel;
+ UpdateField<int32, 72, 98> PetSpellPower;
+ UpdateField<float, 72, 99> UiHitModifier;
+ UpdateField<float, 72, 100> UiSpellHitModifier;
+ UpdateField<int32, 72, 101> HomeRealmTimeOffset;
+ UpdateField<float, 72, 102> ModPetHaste;
+ UpdateField<uint8, 72, 103> LocalRegenFlags;
+ UpdateField<uint8, 104, 105> AuraVision;
+ UpdateField<uint8, 104, 106> NumBackpackSlots;
+ UpdateField<int32, 104, 107> OverrideSpellsID;
+ UpdateField<int32, 104, 108> LfgBonusFactionID;
+ UpdateField<uint16, 104, 109> LootSpecID;
+ UpdateField<uint32, 104, 110> OverrideZonePVPType;
+ UpdateField<int32, 104, 111> Honor;
+ UpdateField<int32, 104, 112> HonorNextLevel;
+ UpdateField<int32, 104, 113> Field_F74;
+ UpdateField<int32, 104, 114> PvpTierMaxFromWins;
+ UpdateField<int32, 104, 115> PvpLastWeeksTierMaxFromWins;
+ UpdateField<uint8, 104, 116> PvpRankProgress;
+ UpdateField<int32, 104, 117> PerksProgramCurrency;
UpdateField<UF::ResearchHistory, 104, 118> ResearchHistory;
UpdateField<WorldPackets::PerksProgram::PerksVendorItem, 104, 119> FrozenPerksVendorItem;
- UpdateField<UF::ActivePlayerUnk901, 104, 121> Field_1410;
- OptionalUpdateField<UF::QuestSession, 104, 120> QuestSession;
- UpdateField<int32, 104, 122> UiChromieTimeExpansionID;
- UpdateField<int32, 104, 123> TransportServerTime;
- UpdateField<uint32, 104, 124> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin
- UpdateField<int16, 104, 125> DEBUGSoulbindConduitRank;
- UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 104, 126> DungeonScore;
- UpdateField<uint32, 104, 127> ActiveCombatTraitConfigID;
- UpdateField<int32, 104, 128> ItemUpgradeHighOnehandWeaponItemID;
- UpdateField<int32, 104, 129> ItemUpgradeHighFingerItemID;
- UpdateField<float, 104, 130> ItemUpgradeHighFingerWatermark;
- UpdateField<int32, 104, 131> ItemUpgradeHighTrinketItemID;
- UpdateField<float, 104, 132> ItemUpgradeHighTrinketWatermark;
- UpdateField<uint64, 104, 133> LootHistoryInstanceID;
- OptionalUpdateField<UF::StableInfo, 104, 134> PetStable;
- UpdateField<uint8, 104, 135> RequiredMountCapabilityFlags;
- UpdateFieldArray<ObjectGuid, 227, 136, 137> InvSlots;
- UpdateFieldArray<UF::RestInfo, 2, 364, 365> RestInfo;
- UpdateFieldArray<int32, 7, 367, 368> ModDamageDonePos;
- UpdateFieldArray<int32, 7, 367, 375> ModDamageDoneNeg;
- UpdateFieldArray<float, 7, 367, 382> ModDamageDonePercent;
- UpdateFieldArray<float, 7, 367, 389> ModHealingDonePercent;
- UpdateFieldArray<float, 3, 396, 397> WeaponDmgMultipliers;
- UpdateFieldArray<float, 3, 396, 400> WeaponAtkSpeedMultipliers;
- UpdateFieldArray<uint32, 12, 403, 404> BuybackPrice;
- UpdateFieldArray<int64, 12, 403, 416> BuybackTimestamp;
- UpdateFieldArray<int32, 32, 428, 429> CombatRatings;
- UpdateFieldArray<uint32, 4, 461, 462> NoReagentCostMask;
- UpdateFieldArray<int32, 2, 466, 467> ProfessionSkillLine;
- UpdateFieldArray<uint32, 5, 469, 470> BagSlotFlags;
- UpdateFieldArray<uint32, 7, 475, 476> BankBagSlotFlags;
- UpdateFieldArray<uint64, 950, 483, 484> QuestCompleted;
- UpdateFieldArray<float, 17, 1434, 1435> ItemUpgradeHighWatermark;
+ UpdateField<int32, 104, 120> TransportServerTime;
+ UpdateField<uint32, 104, 121> ActiveCombatTraitConfigID;
+ UpdateField<uint8, 104, 122> GlyphsEnabled;
+ UpdateField<uint8, 104, 123> LfgRoles;
+ OptionalUpdateField<UF::StableInfo, 104, 124> PetStable;
+ UpdateField<uint8, 104, 125> NumStableSlots;
+ UpdateFieldArray<ObjectGuid, 141, 126, 127> InvSlots;
+ UpdateFieldArray<uint32, 2, 268, 269> TrackResourceMask;
+ UpdateFieldArray<float, 7, 271, 272> SpellCritPercentage;
+ UpdateFieldArray<int32, 7, 271, 279> ModDamageDonePos;
+ UpdateFieldArray<int32, 7, 271, 286> ModDamageDoneNeg;
+ UpdateFieldArray<float, 7, 271, 293> ModDamageDonePercent;
+ UpdateFieldArray<UF::RestInfo, 2, 300, 301> RestInfo;
+ UpdateFieldArray<float, 3, 303, 304> WeaponDmgMultipliers;
+ UpdateFieldArray<float, 3, 303, 307> WeaponAtkSpeedMultipliers;
+ UpdateFieldArray<uint32, 12, 310, 311> BuybackPrice;
+ UpdateFieldArray<int64, 12, 310, 323> BuybackTimestamp;
+ UpdateFieldArray<int32, 32, 335, 336> CombatRatings;
+ UpdateFieldArray<UF::PVPInfo, 9, 368, 369> PvpInfo;
+ UpdateFieldArray<uint32, 4, 378, 379> NoReagentCostMask;
+ UpdateFieldArray<int32, 2, 383, 384> ProfessionSkillLine;
+ UpdateFieldArray<uint32, 4, 386, 387> BagSlotFlags;
+ UpdateFieldArray<uint32, 7, 391, 392> BankBagSlotFlags;
+ UpdateFieldArray<uint64, 950, 399, 400> QuestCompleted;
+ UpdateFieldArray<uint32, 9, 1350, 1351> GlyphSlots;
+ UpdateFieldArray<uint32, 9, 1350, 1360> Glyphs;
void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
@@ -1031,7 +792,7 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas
void ClearChangesMask();
};
-struct GameObjectData : public IsUpdateFieldStructureTag, public HasChangesMask<25>
+struct GameObjectData : public IsUpdateFieldStructureTag, public HasChangesMask<20>
{
UpdateField<std::vector<uint32>, 0, 1> StateWorldEffectIDs;
DynamicUpdateField<int32, 0, 2> EnableDoodadSets;
@@ -1041,24 +802,19 @@ struct GameObjectData : public IsUpdateFieldStructureTag, public HasChangesMask<
UpdateField<uint32, 0, 6> StateSpellVisualID;
UpdateField<uint32, 0, 7> SpawnTrackingStateAnimID;
UpdateField<uint32, 0, 8> SpawnTrackingStateAnimKitID;
- UpdateField<uint32, 0, 9> StateWorldEffectsQuestObjectiveID;
- UpdateField<ObjectGuid, 0, 10> CreatedBy;
- UpdateField<ObjectGuid, 0, 11> GuildGUID;
- UpdateField<uint32, 0, 12> Flags;
+ UpdateField<ObjectGuid, 0, 9> CreatedBy;
+ UpdateField<ObjectGuid, 0, 10> GuildGUID;
+ UpdateField<uint32, 0, 11> Flags;
struct FlagsTag : ViewerDependentValueTag<uint32> {};
- UpdateField<QuaternionData, 0, 13> ParentRotation;
- UpdateField<int32, 0, 14> FactionTemplate;
+ UpdateField<QuaternionData, 0, 12> ParentRotation;
+ UpdateField<int32, 0, 13> FactionTemplate;
+ UpdateField<int32, 0, 14> Level;
UpdateField<int8, 0, 15> State;
struct StateTag : ViewerDependentValueTag<int8> {};
UpdateField<int8, 0, 16> TypeID;
UpdateField<uint8, 0, 17> PercentHealth;
UpdateField<uint32, 0, 18> ArtKit;
UpdateField<uint32, 0, 19> CustomParam;
- UpdateField<int32, 0, 20> Level;
- UpdateField<uint32, 0, 21> AnimGroupInstance;
- UpdateField<uint32, 0, 22> UiWidgetItemID;
- UpdateField<uint32, 0, 23> UiWidgetItemQuality;
- UpdateField<uint32, 0, 24> UiWidgetItemUnknown1000;
void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const;
@@ -1070,7 +826,7 @@ struct DynamicObjectData : public IsUpdateFieldStructureTag, public HasChangesMa
{
UpdateField<ObjectGuid, 0, 1> Caster;
UpdateField<uint8, 0, 2> Type;
- UpdateField<UF::SpellCastVisual, 0, 3> SpellVisual;
+ UpdateField<int32, 0, 3> SpellXSpellVisualID;
UpdateField<int32, 0, 4> SpellID;
UpdateField<float, 0, 5> Radius;
UpdateField<uint32, 0, 6> CastTime;
@@ -1081,7 +837,7 @@ struct DynamicObjectData : public IsUpdateFieldStructureTag, public HasChangesMa
void ClearChangesMask();
};
-struct CorpseData : public IsUpdateFieldStructureTag, public HasChangesMask<33>
+struct CorpseData : public IsUpdateFieldStructureTag, public HasChangesMask<32>
{
DynamicUpdateField<UF::ChrCustomizationChoice, 0, 1> Customizations;
UpdateField<uint32, 0, 2> DynamicFlags;
@@ -1094,8 +850,7 @@ struct CorpseData : public IsUpdateFieldStructureTag, public HasChangesMask<33>
UpdateField<uint8, 0, 9> Class;
UpdateField<uint32, 0, 10> Flags;
UpdateField<int32, 0, 11> FactionTemplate;
- UpdateField<uint32, 0, 12> StateSpellVisualKitID;
- UpdateFieldArray<uint32, 19, 13, 14> Items;
+ UpdateFieldArray<uint32, 19, 12, 13> Items;
void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Corpse const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Corpse const* owner, Player const* receiver) const;
@@ -1127,33 +882,27 @@ struct VisualAnim : public IsUpdateFieldStructureTag, public HasChangesMask<5>
void ClearChangesMask();
};
-struct AreaTriggerData : public IsUpdateFieldStructureTag, public HasChangesMask<26>
-{
- UpdateField<bool, 0, 1> HeightIgnoresScale;
- UpdateField<bool, 0, 2> Field_261;
- UpdateField<UF::ScaleCurve, 0, 3> OverrideScaleCurve;
- UpdateField<UF::ScaleCurve, 0, 4> ExtraScaleCurve;
- UpdateField<UF::ScaleCurve, 0, 5> OverrideMoveCurveX;
- UpdateField<UF::ScaleCurve, 0, 6> OverrideMoveCurveY;
- UpdateField<UF::ScaleCurve, 0, 7> OverrideMoveCurveZ;
- UpdateField<ObjectGuid, 0, 8> Caster;
- UpdateField<uint32, 0, 9> Duration;
- UpdateField<uint32, 0, 10> TimeToTarget;
- UpdateField<uint32, 0, 11> TimeToTargetScale;
- UpdateField<uint32, 0, 12> TimeToTargetExtraScale;
- UpdateField<uint32, 0, 13> TimeToTargetPos; // Linked to m_overrideMoveCurve
- UpdateField<int32, 0, 14> SpellID;
- UpdateField<int32, 0, 15> SpellForVisuals;
- UpdateField<UF::SpellCastVisual, 0, 16> SpellVisual;
- UpdateField<float, 0, 17> BoundsRadius2D;
- UpdateField<uint32, 0, 18> DecalPropertiesID;
- UpdateField<ObjectGuid, 0, 19> CreatingEffectGUID;
- UpdateField<uint32, 0, 20> NumUnitsInside;
- UpdateField<uint32, 0, 21> NumPlayersInside; // When not 0 this causes SpellVisualEvent 14 to trigger, playing alternate visuals, typically used by "SOAK THIS" areatriggers
- UpdateField<ObjectGuid, 0, 22> OrbitPathTarget;
- UpdateField<TaggedPosition<Position::XYZ>, 0, 23> RollPitchYaw;
- UpdateField<int32, 0, 24> PositionalSoundKitID;
- UpdateField<UF::VisualAnim, 0, 25> VisualAnim;
+struct AreaTriggerData : public IsUpdateFieldStructureTag, public HasChangesMask<20>
+{
+ UpdateField<UF::ScaleCurve, 0, 1> OverrideScaleCurve;
+ UpdateField<UF::ScaleCurve, 0, 2> ExtraScaleCurve;
+ UpdateField<UF::ScaleCurve, 0, 3> OverrideMoveCurveX;
+ UpdateField<UF::ScaleCurve, 0, 4> OverrideMoveCurveY;
+ UpdateField<UF::ScaleCurve, 0, 5> OverrideMoveCurveZ;
+ UpdateField<ObjectGuid, 0, 6> Caster;
+ UpdateField<uint32, 0, 7> Duration;
+ UpdateField<uint32, 0, 8> TimeToTarget;
+ UpdateField<uint32, 0, 9> TimeToTargetScale;
+ UpdateField<uint32, 0, 10> TimeToTargetExtraScale;
+ UpdateField<uint32, 0, 11> TimeToTargetPos; // Linked to m_overrideMoveCurve
+ UpdateField<int32, 0, 12> SpellID;
+ UpdateField<int32, 0, 13> SpellForVisuals;
+ UpdateField<int32, 0, 14> SpellXSpellVisualID;
+ UpdateField<float, 0, 15> BoundsRadius2D;
+ UpdateField<uint32, 0, 16> DecalPropertiesID;
+ UpdateField<ObjectGuid, 0, 17> CreatingEffectGUID;
+ UpdateField<ObjectGuid, 0, 18> OrbitPathTarget;
+ UpdateField<UF::VisualAnim, 0, 19> VisualAnim;
void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const;
@@ -1183,7 +932,6 @@ struct ConversationLine : public IsUpdateFieldStructureTag
int32 UiCameraID;
uint8 ActorIndex;
uint8 Flags;
- uint8 ChatType;
void WriteCreate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Conversation const* owner, Player const* receiver) const;
@@ -1193,12 +941,11 @@ struct ConversationLine : public IsUpdateFieldStructureTag
struct ConversationActor : public IsUpdateFieldStructureTag
{
+ uint32 Type;
+ int32 Id;
uint32 CreatureID;
uint32 CreatureDisplayInfoID;
ObjectGuid ActorGUID;
- int32 Id;
- uint32 Type;
- uint32 NoActorObject;
void WriteCreate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Conversation const* owner, Player const* receiver) const;
@@ -1206,22 +953,18 @@ struct ConversationActor : public IsUpdateFieldStructureTag
bool operator!=(ConversationActor const& right) const { return !(*this == right); }
};
-struct ConversationData : public IsUpdateFieldStructureTag, public HasChangesMask<7>
+struct ConversationData : public IsUpdateFieldStructureTag, public HasChangesMask<4>
{
- UpdateField<bool, 0, 1> DontPlayBroadcastTextSounds;
- UpdateField<std::vector<UF::ConversationLine>, 0, 2> Lines;
- DynamicUpdateField<UF::ConversationActor, 0, 3> Actors;
- UpdateField<int32, 0, 4> LastLineEndTime;
+ UpdateField<std::vector<UF::ConversationLine>, 0, 1> Lines;
+ DynamicUpdateField<UF::ConversationActor, 0, 2> Actors;
+ UpdateField<int32, 0, 3> LastLineEndTime;
struct LastLineEndTimeTag : ViewerDependentValueTag<int32> {};
- UpdateField<uint32, 0, 5> Progress;
- UpdateField<uint32, 0, 6> Flags;
void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Conversation const* owner, Player const* receiver) const;
void ClearChangesMask();
};
-
}
#endif // UpdateFields_h__
diff --git a/src/server/game/Entities/Player/CollectionMgr.cpp b/src/server/game/Entities/Player/CollectionMgr.cpp
index a2b27285f17..2089afdcb86 100644
--- a/src/server/game/Entities/Player/CollectionMgr.cpp
+++ b/src/server/game/Entities/Player/CollectionMgr.cpp
@@ -880,13 +880,9 @@ void CollectionMgr::SendFavoriteAppearances() const
_owner->SendPacket(accountTransmogUpdate.Write());
}
+// @TODO: Remove
void CollectionMgr::LoadTransmogIllusions()
{
- Player* owner = _owner->GetPlayer();
- boost::to_block_range(*_transmogIllusions, DynamicBitsetBlockOutputIterator([owner](uint32 blockValue)
- {
- owner->AddIllusionBlock(blockValue);
- }));
}
void CollectionMgr::LoadAccountTransmogIllusions(PreparedQueryResult knownTransmogIllusions)
@@ -947,23 +943,9 @@ void CollectionMgr::SaveAccountTransmogIllusions(LoginDatabaseTransaction trans)
}));
}
-void CollectionMgr::AddTransmogIllusion(uint32 transmogIllusionId)
+// @TODO: Remove
+void CollectionMgr::AddTransmogIllusion(uint32 /*transmogIllusionId*/)
{
- Player* owner = _owner->GetPlayer();
- if (_transmogIllusions->size() <= transmogIllusionId)
- {
- std::size_t numBlocks = _transmogIllusions->num_blocks();
- _transmogIllusions->resize(transmogIllusionId + 1);
- numBlocks = _transmogIllusions->num_blocks() - numBlocks;
- while (numBlocks--)
- owner->AddIllusionBlock(0);
- }
-
- _transmogIllusions->set(transmogIllusionId);
- uint32 blockIndex = transmogIllusionId / 32;
- uint32 bitIndex = transmogIllusionId % 32;
-
- owner->AddIllusionFlag(blockIndex, 1 << bitIndex);
}
bool CollectionMgr::HasTransmogIllusion(uint32 transmogIllusionId) const
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index a5e59506fcc..9c916689153 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -21,8 +21,6 @@
#include "AchievementMgr.h"
#include "ArenaTeam.h"
#include "ArenaTeamMgr.h"
-#include "AzeriteEmpoweredItem.h"
-#include "AzeriteItem.h"
#include "Bag.h"
#include "Battlefield.h"
#include "BattlefieldMgr.h"
@@ -2464,7 +2462,6 @@ void Player::InitStatsForLevel(bool reapplyMods)
SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModDamageDoneNeg, i), 0);
SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModDamageDonePos, i), 0);
SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModDamageDonePercent, i), 1.0f);
- SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModHealingDonePercent, i), 1.0f);
}
SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModSpellPowerPercent), 1.0f);
@@ -2496,7 +2493,8 @@ void Player::InitStatsForLevel(bool reapplyMods)
SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::RangedCritPercentage), 0.0f);
// Init spell schools (will be recalculated in UpdateAllStats() at loading and in _ApplyAllStatBonuses() at reset
- SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::SpellCritPercentage), 0.0f);
+ for (uint8 i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; ++i)
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::SpellCritPercentage, i), 0.0f);
SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ParryPercentage), 0.0f);
SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BlockPercentage), 0.0f);
@@ -2508,18 +2506,13 @@ void Player::InitStatsForLevel(bool reapplyMods)
// set armor (resistance 0) to original value (create_agility*2)
SetArmor(int32(m_createStats[STAT_AGILITY] * 2), 0);
- SetBonusResistanceMod(SPELL_SCHOOL_NORMAL, 0);
+
// set other resistance to original value (0)
for (uint8 i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; ++i)
- {
SetResistance(SpellSchools(i), 0);
- SetBonusResistanceMod(SpellSchools(i), 0);
- }
SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModTargetResistance), 0);
SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModTargetPhysicalResistance), 0);
- for (uint8 i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; ++i)
- SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ManaCostModifier, i), 0);
// Reset no reagent cost field
SetNoRegentCostMask(flag128());
@@ -3899,25 +3892,8 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe
stmt->setUInt64(0, guid);
PreparedQueryResult artifactResult = CharacterDatabase.Query(stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_MAILITEMS_AZERITE);
- stmt->setUInt64(0, guid);
- PreparedQueryResult azeriteResult = CharacterDatabase.Query(stmt);
-
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_MAILITEMS_AZERITE_MILESTONE_POWER);
- stmt->setUInt64(0, guid);
- PreparedQueryResult azeriteItemMilestonePowersResult = CharacterDatabase.Query(stmt);
-
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_MAILITEMS_AZERITE_UNLOCKED_ESSENCE);
- stmt->setUInt64(0, guid);
- PreparedQueryResult azeriteItemUnlockedEssencesResult = CharacterDatabase.Query(stmt);
-
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_MAILITEMS_AZERITE_EMPOWERED);
- stmt->setUInt64(0, guid);
- PreparedQueryResult azeriteEmpoweredItemResult = CharacterDatabase.Query(stmt);
-
std::unordered_map<ObjectGuid::LowType, ItemAdditionalLoadInfo> additionalData;
- ItemAdditionalLoadInfo::Init(&additionalData, artifactResult, azeriteResult, azeriteItemMilestonePowersResult,
- azeriteItemUnlockedEssencesResult, azeriteEmpoweredItemResult);
+ ItemAdditionalLoadInfo::Init(&additionalData, artifactResult);
do
{
@@ -4133,22 +4109,6 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe
stmt->setUInt64(0, guid);
trans->Append(stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE_AZERITE_BY_OWNER);
- stmt->setUInt64(0, guid);
- trans->Append(stmt);
-
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE_AZERITE_MILESTONE_POWER_BY_OWNER);
- stmt->setUInt64(0, guid);
- trans->Append(stmt);
-
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE_AZERITE_UNLOCKED_ESSENCE_BY_OWNER);
- stmt->setUInt64(0, guid);
- trans->Append(stmt);
-
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE_AZERITE_EMPOWERED_BY_OWNER);
- stmt->setUInt64(0, guid);
- trans->Append(stmt);
-
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE_BY_OWNER);
stmt->setUInt64(0, guid);
trans->Append(stmt);
@@ -7073,15 +7033,6 @@ void Player::ModifyCurrency(uint32 id, int32 amount, CurrencyGainSource gainSour
return;
}
- // Azerite
- if (id == CURRENCY_TYPE_AZERITE)
- {
- if (amount > 0)
- if (Item* heartOfAzeroth = GetItemByEntry(ITEM_ID_HEART_OF_AZEROTH, ItemSearchLocation::Everywhere))
- heartOfAzeroth->ToAzeriteItem()->GiveXP(uint64(amount));
- return;
- }
-
PlayerCurrenciesMap::iterator itr = _currencyStorage.find(id);
if (itr == _currencyStorage.end())
{
@@ -7789,7 +7740,6 @@ void Player::_ApplyItemMods(Item* item, uint8 slot, bool apply, bool updateItemA
UpdateWeaponDependentAuras(attackType);
}
ApplyArtifactPowers(item, apply);
- ApplyAzeritePowers(item, apply);
ApplyEnchantment(item, apply);
TC_LOG_DEBUG("entities.player.items", "Player::_ApplyItemMods: completed");
@@ -8049,6 +7999,7 @@ void Player::_ApplyItemBonuses(Item* item, uint8 slot, bool apply)
_ApplyWeaponDamage(slot, item, apply);
}
+// @TODO: Ovahlord ScalingStat db2s
void Player::_ApplyWeaponDamage(uint8 slot, Item* item, bool apply)
{
ItemTemplate const* proto = item->GetTemplate();
@@ -8056,43 +8007,46 @@ void Player::_ApplyWeaponDamage(uint8 slot, Item* item, bool apply)
if (!IsInFeralForm() && apply && !CanUseAttackType(attType))
return;
- float damage = 0.0f;
- uint32 itemLevel = item->GetItemLevel(this);
- float minDamage, maxDamage;
- proto->GetDamage(itemLevel, minDamage, maxDamage);
+ // ScalingStatDistributionEntry const* ssd = sScalingStatDistributionStore.LookupEntry(proto->GetScalingStatDistributionID());
+ // ScalingStatValuesEntry const* ssv = (ssd && proto->GetScalingStatValue() != 0) ? sDB2Manager.GetScalingStatValuesForLevel(std::clamp<uint32>(GetLevel(), ssd->MinLevel, ssd->MaxLevel)) : nullptr;
- if (minDamage > 0)
+ float damage = 0.0f;
+ //for (uint8 i = 0; i < MAX_ITEM_PROTO_DAMAGES; ++i)
{
- damage = apply ? minDamage : BASE_MINDAMAGE;
- SetBaseWeaponDamage(attType, MINDAMAGE, damage);
- }
+ float minDamage = 0.0f; // proto->GetMinDamage(0);
+ float maxDamage = 0.0f; // proto->GetMaxDamage(0);
- if (maxDamage > 0)
- {
- damage = apply ? maxDamage : BASE_MAXDAMAGE;
- SetBaseWeaponDamage(attType, MAXDAMAGE, damage);
+ // If set dpsMod in ScalingStatValue use it for min (70% from average), max (130% from average) damage
+ // if (ssv)
+ // {
+ // int32 extraDPS = ssv->getDPSMod(proto->GetScalingStatValue());
+ // if (extraDPS)
+ // {
+ // float average = extraDPS * proto->GetDelay() / 1000.0f;
+ // float mod = ssv->isTwoHand(proto->GetScalingStatValue()) ? 0.2f : 0.3f;
+ //
+ // minDamage = (1.0f - mod) * average;
+ // maxDamage = (1.0f + mod) * average;
+ // }
+ // }
+
+ if (minDamage > 0)
+ {
+ damage = apply ? minDamage : BASE_MINDAMAGE;
+ SetBaseWeaponDamage(attType, MINDAMAGE, damage);
+ }
+
+ if (maxDamage > 0)
+ {
+ damage = apply ? maxDamage : BASE_MAXDAMAGE;
+ SetBaseWeaponDamage(attType, MAXDAMAGE, damage);
+ }
}
SpellShapeshiftFormEntry const* shapeshift = sSpellShapeshiftFormStore.LookupEntry(GetShapeshiftForm());
if (proto->GetDelay() && !(shapeshift && shapeshift->CombatRoundTime))
SetBaseAttackTime(attType, apply ? proto->GetDelay() : BASE_ATTACK_TIME);
- int32 weaponBasedAttackPower = apply ? int32(proto->GetDPS(itemLevel) * 6.0f) : 0;
- switch (attType)
- {
- case BASE_ATTACK:
- SetMainHandWeaponAttackPower(weaponBasedAttackPower);
- break;
- case OFF_ATTACK:
- SetOffHandWeaponAttackPower(weaponBasedAttackPower);
- break;
- case RANGED_ATTACK:
- SetRangedWeaponAttackPower(weaponBasedAttackPower);
- break;
- default:
- break;
- }
-
if (CanModifyStats() && (damage || proto->GetDelay()))
UpdateDamagePhysical(attType);
}
@@ -8413,110 +8367,6 @@ void Player::ApplyArtifactPowerRank(Item* artifact, ArtifactPowerRankEntry const
}
-void Player::ApplyAzeritePowers(Item* item, bool apply)
-{
- if (AzeriteItem* azeriteItem = item->ToAzeriteItem())
- {
- // milestone powers
- for (uint32 azeriteItemMilestonePowerId : azeriteItem->m_azeriteItemData->UnlockedEssenceMilestones)
- ApplyAzeriteItemMilestonePower(azeriteItem, sAzeriteItemMilestonePowerStore.AssertEntry(azeriteItemMilestonePowerId), apply);
-
- // essences
- if (UF::SelectedAzeriteEssences const* selectedEssences = azeriteItem->GetSelectedAzeriteEssences())
- for (uint8 slot = 0; slot < MAX_AZERITE_ESSENCE_SLOT; ++slot)
- if (selectedEssences->AzeriteEssenceID[slot])
- ApplyAzeriteEssence(azeriteItem, selectedEssences->AzeriteEssenceID[slot], azeriteItem->GetEssenceRank(selectedEssences->AzeriteEssenceID[slot]),
- AzeriteItemMilestoneType(sDB2Manager.GetAzeriteItemMilestonePower(slot)->Type) == AzeriteItemMilestoneType::MajorEssence, apply);
- }
- else if (AzeriteEmpoweredItem* azeriteEmpoweredItem = item->ToAzeriteEmpoweredItem())
- {
- if (!apply || GetItemByEntry(ITEM_ID_HEART_OF_AZEROTH, ItemSearchLocation::Equipment))
- for (int32 i = 0; i < MAX_AZERITE_EMPOWERED_TIER; ++i)
- if (AzeritePowerEntry const* azeritePower = sAzeritePowerStore.LookupEntry(azeriteEmpoweredItem->GetSelectedAzeritePower(i)))
- ApplyAzeritePower(azeriteEmpoweredItem, azeritePower, apply);
- }
-}
-
-void Player::ApplyAzeriteItemMilestonePower(AzeriteItem* item, AzeriteItemMilestonePowerEntry const* azeriteItemMilestonePower, bool apply)
-{
- AzeriteItemMilestoneType type = AzeriteItemMilestoneType(azeriteItemMilestonePower->Type);
- if (type == AzeriteItemMilestoneType::BonusStamina)
- {
- if (AzeritePowerEntry const* azeritePower = sAzeritePowerStore.LookupEntry(azeriteItemMilestonePower->AzeritePowerID))
- {
- if (apply)
- CastSpell(this, azeritePower->SpellID, item);
- else
- RemoveAurasDueToItemSpell(azeritePower->SpellID, item->GetGUID());
- }
- }
-}
-
-void Player::ApplyAzeriteEssence(AzeriteItem* item, uint32 azeriteEssenceId, uint32 rank, bool major, bool apply)
-{
- for (uint32 currentRank = 1; currentRank <= rank; ++currentRank)
- {
- if (AzeriteEssencePowerEntry const* azeriteEssencePower = sDB2Manager.GetAzeriteEssencePower(azeriteEssenceId, currentRank))
- {
- ApplyAzeriteEssencePower(item, azeriteEssencePower, major, apply);
- if (major && currentRank == 1)
- {
- if (apply)
- {
- CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
- args.AddSpellMod(SPELLVALUE_BASE_POINT0, azeriteEssencePower->MajorPowerDescription);
- CastSpell(this, SPELL_ID_HEART_ESSENCE_ACTION_BAR_OVERRIDE, args);
- }
- else
- RemoveAurasDueToSpell(SPELL_ID_HEART_ESSENCE_ACTION_BAR_OVERRIDE);
- }
- }
- }
-}
-
-void Player::ApplyAzeriteEssencePower(AzeriteItem* item, AzeriteEssencePowerEntry const* azeriteEssencePower, bool major, bool apply)
-{
- if (SpellInfo const* powerSpell = sSpellMgr->GetSpellInfo(azeriteEssencePower->MinorPowerDescription, DIFFICULTY_NONE))
- {
- if (apply)
- CastSpell(this, powerSpell->Id, item);
- else
- RemoveAurasDueToItemSpell(powerSpell->Id, item->GetGUID());
- }
-
- if (major)
- {
- if (SpellInfo const* powerSpell = sSpellMgr->GetSpellInfo(azeriteEssencePower->MajorPowerDescription, DIFFICULTY_NONE))
- {
- if (powerSpell->IsPassive())
- {
- if (apply)
- CastSpell(this, powerSpell->Id, item);
- else
- RemoveAurasDueToItemSpell(powerSpell->Id, item->GetGUID());
- }
- else
- {
- if (apply)
- LearnSpell(powerSpell->Id, true, 0, true);
- else
- RemoveSpell(powerSpell->Id, false, false, true);
- }
- }
- }
-}
-
-void Player::ApplyAzeritePower(AzeriteEmpoweredItem* item, AzeritePowerEntry const* azeritePower, bool apply)
-{
- if (apply)
- {
- if (!azeritePower->SpecSetID || sDB2Manager.IsSpecSetMember(azeritePower->SpecSetID, AsUnderlyingType(GetPrimarySpecialization())))
- CastSpell(this, azeritePower->SpellID, item);
- }
- else
- RemoveAurasDueToItemSpell(azeritePower->SpellID, item->GetGUID());
-}
-
void Player::CastItemCombatSpell(DamageInfo const& damageInfo)
{
Unit* target = damageInfo.GetVictim();
@@ -8904,34 +8754,6 @@ void Player::_ApplyAllLevelScaleItemMods(bool apply)
}
}
-void Player::ApplyAllAzeriteItemMods(bool apply)
-{
- for (uint8 i = 0; i < INVENTORY_SLOT_BAG_END; ++i)
- {
- if (m_items[i])
- {
- if (!m_items[i]->IsAzeriteItem() || m_items[i]->IsBroken() || !CanUseAttackType(Player::GetAttackBySlot(i, m_items[i]->GetTemplate()->GetInventoryType())))
- continue;
-
- ApplyAzeritePowers(m_items[i], apply);
- }
- }
-}
-
-void Player::ApplyAllAzeriteEmpoweredItemMods(bool apply)
-{
- for (uint8 i = 0; i < INVENTORY_SLOT_BAG_END; ++i)
- {
- if (m_items[i])
- {
- if (!m_items[i]->IsAzeriteEmpoweredItem() || m_items[i]->IsBroken() || !CanUseAttackType(Player::GetAttackBySlot(i, m_items[i]->GetTemplate()->GetInventoryType())))
- continue;
-
- ApplyAzeritePowers(m_items[i], apply);
- }
- }
-}
-
Loot* Player::GetLootByWorldObjectGUID(ObjectGuid const& lootWorldObjectGuid) const
{
auto itr = std::find_if(m_AELootView.begin(), m_AELootView.end(), [&lootWorldObjectGuid](std::pair<ObjectGuid const, Loot*> const& lootView)
@@ -11869,14 +11691,12 @@ void Player::SetVisibleItemSlot(uint8 slot, Item* pItem)
if (pItem)
{
SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemID), pItem->GetVisibleEntry(this));
- SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::SecondaryItemModifiedAppearanceID), pItem->GetVisibleSecondaryModifiedAppearanceId(this));
SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemAppearanceModID), pItem->GetVisibleAppearanceModId(this));
SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemVisual), pItem->GetVisibleItemVisual(this));
}
else
{
SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemID), 0);
- SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::SecondaryItemModifiedAppearanceID), 0);
SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemAppearanceModID), 0);
SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemVisual), 0);
}
@@ -14297,7 +14117,7 @@ int32 Player::GetQuestMinLevel(Quest const* quest) const
int32 Player::GetQuestMinLevel(uint32 contentTuningId) const
{
- if (Optional<ContentTuningLevels> questLevels = sDB2Manager.GetContentTuningData(contentTuningId, m_playerData->CtrOptions->ContentTuningConditionMask))
+ if (Optional<ContentTuningLevels> questLevels = sDB2Manager.GetContentTuningData(contentTuningId, 0 /*m_playerData->CtrOptions->ContentTuningConditionMask*/))
{
ChrRacesEntry const* race = sChrRacesStore.AssertEntry(GetRace());
FactionTemplateEntry const* raceFaction = sFactionTemplateStore.AssertEntry(race->FactionID);
@@ -14321,7 +14141,7 @@ int32 Player::GetQuestLevel(Quest const* quest) const
int32 Player::GetQuestLevel(uint32 contentTuningId) const
{
- if (Optional<ContentTuningLevels> questLevels = sDB2Manager.GetContentTuningData(contentTuningId, m_playerData->CtrOptions->ContentTuningConditionMask))
+ if (Optional<ContentTuningLevels> questLevels = sDB2Manager.GetContentTuningData(contentTuningId, 0 /*m_playerData->CtrOptions->ContentTuningConditionMask*/))
{
int32 minLevel = GetQuestMinLevel(contentTuningId);
int32 maxLevel = questLevels->MaxLevel;
@@ -16327,13 +16147,6 @@ int64 Player::GetQuestSlotEndTime(uint16 slot) const
return m_playerData->QuestLog[slot].EndTime;
}
-bool Player::GetQuestSlotObjectiveFlag(uint16 slot, int8 objectiveIndex) const
-{
- if (objectiveIndex < MAX_QUEST_COUNTS)
- return (*m_playerData->QuestLog[slot].ObjectiveFlags) & (1 << objectiveIndex);
- return false;
-}
-
int32 Player::GetQuestSlotObjectiveData(uint16 slot, QuestObjective const& objective) const
{
if (objective.StorageIndex < 0)
@@ -16353,7 +16166,7 @@ int32 Player::GetQuestSlotObjectiveData(uint16 slot, QuestObjective const& objec
if (!objective.IsStoringFlag())
return GetQuestSlotCounter(slot, objective.StorageIndex);
- return GetQuestSlotObjectiveFlag(slot, objective.StorageIndex) ? 1 : 0;
+ return uint8((GetQuestSlotState(slot) & objective.StorageIndex) != 0);
}
int32 Player::GetQuestObjectiveData(uint32 questId, uint32 objectiveId) const
@@ -16375,7 +16188,6 @@ void Player::SetQuestSlot(uint16 slot, uint32 quest_id)
SetUpdateFieldValue(questLogField.ModifyValue(&UF::QuestLog::QuestID), quest_id);
SetUpdateFieldValue(questLogField.ModifyValue(&UF::QuestLog::StateFlags), 0);
SetUpdateFieldValue(questLogField.ModifyValue(&UF::QuestLog::EndTime), 0);
- SetUpdateFieldValue(questLogField.ModifyValue(&UF::QuestLog::ObjectiveFlags), 0);
for (uint32 i = 0; i < MAX_QUEST_COUNTS; ++i)
SetUpdateFieldValue(questLogField.ModifyValue(&UF::QuestLog::ObjectiveProgress, i), 0);
}
@@ -16411,20 +16223,6 @@ void Player::SetQuestSlotEndTime(uint16 slot, time_t endTime)
.ModifyValue(&UF::QuestLog::EndTime), uint32(endTime));
}
-void Player::SetQuestSlotObjectiveFlag(uint16 slot, int8 objectiveIndex)
-{
- SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_playerData)
- .ModifyValue(&UF::PlayerData::QuestLog, slot)
- .ModifyValue(&UF::QuestLog::ObjectiveFlags), 1 << objectiveIndex);
-}
-
-void Player::RemoveQuestSlotObjectiveFlag(uint16 slot, int8 objectiveIndex)
-{
- RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_playerData)
- .ModifyValue(&UF::PlayerData::QuestLog, slot)
- .ModifyValue(&UF::QuestLog::ObjectiveFlags), 1 << objectiveIndex);
-}
-
void Player::SetQuestCompletedBit(uint32 questBit, bool completed)
{
if (!questBit)
@@ -16891,9 +16689,9 @@ void Player::SetQuestObjectiveData(QuestObjective const& objective, int32 data)
if (!objective.IsStoringFlag())
SetQuestSlotCounter(status.Slot, objective.StorageIndex, data);
else if (data)
- SetQuestSlotObjectiveFlag(status.Slot, objective.StorageIndex);
+ SetQuestSlotState(status.Slot, 256 << objective.StorageIndex);
else
- RemoveQuestSlotObjectiveFlag(status.Slot, objective.StorageIndex);
+ RemoveQuestSlotState(status.Slot, 256 << objective.StorageIndex);
}
bool Player::IsQuestObjectiveCompletable(uint16 slot, Quest const* quest, QuestObjective const& objective) const
@@ -18179,10 +17977,6 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder const& hol
_LoadInventory(holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_INVENTORY),
holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_ARTIFACTS),
- holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_AZERITE),
- holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_AZERITE_MILESTONE_POWERS),
- holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_AZERITE_UNLOCKED_ESSENCES),
- holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_AZERITE_EMPOWERED),
time_diff);
if (IsVoidStorageUnlocked())
@@ -18196,11 +17990,7 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder const& hol
// unread mails and next delivery time, actual mails not loaded
_LoadMail(holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_MAILS),
holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS),
- holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS_ARTIFACT),
- holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS_AZERITE),
- holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS_AZERITE_MILESTONE_POWER),
- holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS_AZERITE_UNLOCKED_ESSENCE),
- holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS_AZERITE_EMPOWERED));
+ holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS_ARTIFACT));
m_social = sSocialMgr->LoadFromDB(holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_SOCIAL_LIST), GetGUID());
@@ -18618,9 +18408,7 @@ void Player::LoadCorpse(PreparedQueryResult result)
RemoveAtLoginFlag(AT_LOGIN_RESURRECT);
}
-void Player::_LoadInventory(PreparedQueryResult result, PreparedQueryResult artifactsResult, PreparedQueryResult azeriteResult,
- PreparedQueryResult azeriteItemMilestonePowersResult, PreparedQueryResult azeriteItemUnlockedEssencesResult,
- PreparedQueryResult azeriteEmpoweredItemResult, uint32 timeDiff)
+void Player::_LoadInventory(PreparedQueryResult result, PreparedQueryResult artifactsResult, uint32 timeDiff)
{
// 0 1 2 3 4 5 6 7 8 9 10 11 12
// SELECT guid, itemEntry, creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text,
@@ -18651,8 +18439,7 @@ void Player::_LoadInventory(PreparedQueryResult result, PreparedQueryResult arti
//expected to be equipped before offhand items (@todo fixme)
std::unordered_map<ObjectGuid::LowType, ItemAdditionalLoadInfo> additionalData;
- ItemAdditionalLoadInfo::Init(&additionalData, artifactsResult, azeriteResult, azeriteItemMilestonePowersResult,
- azeriteItemUnlockedEssencesResult, azeriteEmpoweredItemResult);
+ ItemAdditionalLoadInfo::Init(&additionalData, artifactsResult);
if (result)
{
@@ -18675,14 +18462,6 @@ void Player::_LoadInventory(PreparedQueryResult result, PreparedQueryResult arti
if (item->GetTemplate()->GetArtifactID() && addionalDataPtr->Artifact)
item->LoadArtifactData(this, addionalDataPtr->Artifact->Xp, addionalDataPtr->Artifact->ArtifactAppearanceId,
addionalDataPtr->Artifact->ArtifactTierId, addionalDataPtr->Artifact->ArtifactPowers);
-
- if (addionalDataPtr->AzeriteItem)
- if (AzeriteItem* azeriteItem = item->ToAzeriteItem())
- azeriteItem->LoadAzeriteItemData(this, *addionalDataPtr->AzeriteItem);
-
- if (addionalDataPtr->AzeriteEmpoweredItem)
- if (AzeriteEmpoweredItem* azeriteEmpoweredItem = item->ToAzeriteEmpoweredItem())
- azeriteEmpoweredItem->LoadAzeriteEmpoweredItemData(this, *addionalDataPtr->AzeriteEmpoweredItem);
}
ObjectGuid bagGuid = fields[51].GetUInt64() ? ObjectGuid::Create<HighGuid::Item>(fields[51].GetUInt64()) : ObjectGuid::Empty;
@@ -18810,8 +18589,6 @@ void Player::_LoadInventory(PreparedQueryResult result, PreparedQueryResult arti
}
//if (IsAlive())
_ApplyAllItemMods();
- // Apply all azerite item mods, azerite empowered item mods will get applied through its spell script
- ApplyAllAzeriteItemMods(true);
}
void Player::_LoadVoidStorage(PreparedQueryResult result)
@@ -18992,8 +18769,6 @@ Item* Player::_LoadItem(CharacterDatabaseTransaction trans, uint32 zoneId, uint3
GetGUID().ToString(), GetName(), itemEntry);
Item::DeleteFromInventoryDB(trans, itemGuid);
Item::DeleteFromDB(trans, itemGuid);
- AzeriteItem::DeleteFromDB(trans, itemGuid);
- AzeriteEmpoweredItem::DeleteFromDB(trans, itemGuid);
}
return item;
}
@@ -19017,8 +18792,6 @@ Item* Player::_LoadMailedItem(ObjectGuid const& playerGuid, Player* player, uint
trans->Append(stmt);
Item::DeleteFromDB(trans, itemGuid);
- AzeriteItem::DeleteFromDB(trans, itemGuid);
- AzeriteEmpoweredItem::DeleteFromDB(trans, itemGuid);
CharacterDatabase.CommitTransaction(trans);
return nullptr;
@@ -19047,14 +18820,6 @@ Item* Player::_LoadMailedItem(ObjectGuid const& playerGuid, Player* player, uint
if (item->GetTemplate()->GetArtifactID() && addionalData->Artifact)
item->LoadArtifactData(player, addionalData->Artifact->Xp, addionalData->Artifact->ArtifactAppearanceId,
addionalData->Artifact->ArtifactTierId, addionalData->Artifact->ArtifactPowers);
-
- if (addionalData->AzeriteItem)
- if (AzeriteItem* azeriteItem = item->ToAzeriteItem())
- azeriteItem->LoadAzeriteItemData(player, *addionalData->AzeriteItem);
-
- if (addionalData->AzeriteEmpoweredItem)
- if (AzeriteEmpoweredItem* azeriteEmpoweredItem = item->ToAzeriteEmpoweredItem())
- azeriteEmpoweredItem->LoadAzeriteEmpoweredItemData(player, *addionalData->AzeriteEmpoweredItem);
}
if (mail)
@@ -19066,8 +18831,7 @@ Item* Player::_LoadMailedItem(ObjectGuid const& playerGuid, Player* player, uint
return item;
}
-void Player::_LoadMail(PreparedQueryResult mailsResult, PreparedQueryResult mailItemsResult, PreparedQueryResult artifactResult, PreparedQueryResult azeriteItemResult,
- PreparedQueryResult azeriteItemMilestonePowersResult, PreparedQueryResult azeriteItemUnlockedEssencesResult, PreparedQueryResult azeriteEmpoweredItemResult)
+void Player::_LoadMail(PreparedQueryResult mailsResult, PreparedQueryResult mailItemsResult, PreparedQueryResult artifactResult)
{
std::unordered_map<uint64, Mail*> mailById;
@@ -19109,8 +18873,7 @@ void Player::_LoadMail(PreparedQueryResult mailsResult, PreparedQueryResult mail
if (mailItemsResult)
{
std::unordered_map<ObjectGuid::LowType, ItemAdditionalLoadInfo> additionalData;
- ItemAdditionalLoadInfo::Init(&additionalData, artifactResult, azeriteItemResult, azeriteItemMilestonePowersResult,
- azeriteItemUnlockedEssencesResult, azeriteEmpoweredItemResult);
+ ItemAdditionalLoadInfo::Init(&additionalData, artifactResult);
do
{
@@ -19245,7 +19008,7 @@ void Player::_LoadQuestStatusObjectives(PreparedQueryResult result)
if (!objectiveItr->IsStoringFlag())
SetQuestSlotCounter(questStatusData.Slot, storageIndex, data);
else if (data)
- SetQuestSlotObjectiveFlag(questStatusData.Slot, storageIndex);
+ SetQuestSlotState(questStatusData.Slot, 256 << storageIndex);
}
else
TC_LOG_ERROR("entities.player", "Player::_LoadQuestStatusObjectives: Player '{}' ({}) has quest {} out of range objective index {}.", GetName(), GetGUID().ToString(), questID, storageIndex);
@@ -20618,11 +20381,7 @@ void Player::_SaveMail(CharacterDatabaseTransaction trans)
if (m->HasItems())
{
for (MailItemInfoVec::iterator itr2 = m->items.begin(); itr2 != m->items.end(); ++itr2)
- {
Item::DeleteFromDB(trans, itr2->item_guid);
- AzeriteItem::DeleteFromDB(trans, itr2->item_guid);
- AzeriteEmpoweredItem::DeleteFromDB(trans, itr2->item_guid);
- }
}
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_MAIL_BY_ID);
stmt->setUInt64(0, m->messageID);
@@ -21035,7 +20794,7 @@ void Player::_SaveStats(CharacterDatabaseTransaction trans) const
stmt->setFloat(index++, m_activePlayerData->ParryPercentage);
stmt->setFloat(index++, m_activePlayerData->CritPercentage);
stmt->setFloat(index++, m_activePlayerData->RangedCritPercentage);
- stmt->setFloat(index++, m_activePlayerData->SpellCritPercentage);
+ stmt->setFloat(index++, 0.f); // m_activePlayerData->SpellCritPercentage// @todo (4.4.0): in wotlk spell crit percentage was split by spell school
stmt->setUInt32(index++, m_unitData->AttackPower);
stmt->setUInt32(index++, m_unitData->RangedAttackPower);
stmt->setUInt32(index++, GetBaseSpellPowerBonus());
@@ -21504,14 +21263,12 @@ void Player::SetBattlePetData(BattlePets::BattlePet const* pet)
{
SetSummonedBattlePetGUID(pet->PacketInfo.Guid);
SetCurrentBattlePetBreedQuality(pet->PacketInfo.Quality);
- SetBattlePetCompanionExperience(pet->PacketInfo.Exp);
SetWildBattlePetLevel(pet->PacketInfo.Level);
}
else
{
SetSummonedBattlePetGUID(ObjectGuid::Empty);
SetCurrentBattlePetBreedQuality(AsUnderlyingType(BattlePets::BattlePetBreedQuality::Poor));
- SetBattlePetCompanionExperience(0);
SetWildBattlePetLevel(0);
}
}
@@ -22335,12 +22092,12 @@ uint32 Player::GetArenaPersonalRating(uint8 slot) const
UF::PVPInfo const* Player::GetPvpInfoForBracket(int8 bracket) const
{
- int32 index = m_activePlayerData->PvpInfo.FindIndexIf([bracket](UF::PVPInfo const& pvpInfo)
+ auto itr = std::find_if(m_activePlayerData->PvpInfo.begin(), m_activePlayerData->PvpInfo.end(), [bracket](UF::PVPInfo const& pvpInfo)
{
return pvpInfo.Bracket == bracket && !*pvpInfo.Disqualified;
});
- if (index >= 0)
- return &m_activePlayerData->PvpInfo[index];
+ if (itr != m_activePlayerData->PvpInfo.end())
+ return itr;
return nullptr;
}
@@ -27086,7 +26843,7 @@ void Player::SendTalentsInfoData()
packet.Info.TalentGroups.push_back(groupInfoPkt);
}
- SendDirectMessage(packet.Write());
+ // SendDirectMessage(packet.Write());
}
void Player::SendEquipmentSetList()
@@ -27837,28 +27594,6 @@ void Player::ActivateTalentGroup(ChrSpecializationEntry const* spec)
activeGlyphs.IsFullUpdate = true;
SendDirectMessage(activeGlyphs.Write());
- if (Item* item = GetItemByEntry(ITEM_ID_HEART_OF_AZEROTH, ItemSearchLocation::Everywhere))
- {
- if (AzeriteItem* azeriteItem = item->ToAzeriteItem())
- {
- if (azeriteItem->IsEquipped())
- {
- ApplyAllAzeriteEmpoweredItemMods(false);
- ApplyAzeritePowers(azeriteItem, false);
- }
-
- azeriteItem->SetSelectedAzeriteEssences(spec->ID);
-
- if (azeriteItem->IsEquipped())
- {
- ApplyAzeritePowers(azeriteItem, true);
- ApplyAllAzeriteEmpoweredItemMods(true);
- }
-
- azeriteItem->SetState(ITEM_CHANGED, this);
- }
- }
-
Unit::AuraEffectList const& shapeshiftAuras = GetAuraEffectsByType(SPELL_AURA_MOD_SHAPESHIFT);
for (AuraEffect* aurEff : shapeshiftAuras)
{
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 3493f79b0b8..f8079305193 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -615,7 +615,7 @@ enum PlayerSlots
// first slot for item stored (in any way in player m_items data)
PLAYER_SLOT_START = 0,
// last+1 slot for item stored (in any way in player m_items data)
- PLAYER_SLOT_END = 227,
+ PLAYER_SLOT_END = 141,
PLAYER_SLOTS_COUNT = (PLAYER_SLOT_END - PLAYER_SLOT_START)
};
@@ -849,17 +849,9 @@ enum PlayerLoginQueryIndex
PLAYER_LOGIN_QUERY_LOAD_REPUTATION,
PLAYER_LOGIN_QUERY_LOAD_INVENTORY,
PLAYER_LOGIN_QUERY_LOAD_ARTIFACTS,
- PLAYER_LOGIN_QUERY_LOAD_AZERITE,
- PLAYER_LOGIN_QUERY_LOAD_AZERITE_MILESTONE_POWERS,
- PLAYER_LOGIN_QUERY_LOAD_AZERITE_UNLOCKED_ESSENCES,
- PLAYER_LOGIN_QUERY_LOAD_AZERITE_EMPOWERED,
PLAYER_LOGIN_QUERY_LOAD_MAILS,
PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS,
PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS_ARTIFACT,
- PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS_AZERITE,
- PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS_AZERITE_MILESTONE_POWER,
- PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS_AZERITE_UNLOCKED_ESSENCE,
- PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS_AZERITE_EMPOWERED,
PLAYER_LOGIN_QUERY_LOAD_SOCIAL_LIST,
PLAYER_LOGIN_QUERY_LOAD_HOME_BIND,
PLAYER_LOGIN_QUERY_LOAD_SPELL_COOLDOWNS,
@@ -1362,8 +1354,8 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
bool IsValidPos(uint8 bag, uint8 slot, bool explicit_pos) const;
uint8 GetInventorySlotCount() const { return m_activePlayerData->NumBackpackSlots; }
void SetInventorySlotCount(uint8 slots);
- uint8 GetBankBagSlotCount() const { return m_activePlayerData->NumBankSlots; }
- void SetBankBagSlotCount(uint8 count) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::NumBankSlots), count); }
+ uint8 GetBankBagSlotCount() const { return m_playerData->NumBankSlots; }
+ void SetBankBagSlotCount(uint8 count) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::NumBankSlots), count); }
bool HasItemCount(uint32 item, uint32 count = 1, bool inBankAlso = false) const;
bool HasItemFitToSpellRequirements(SpellInfo const* spellInfo, Item const* ignoreItem = nullptr) const;
bool CanNoReagentCast(SpellInfo const* spellInfo) const;
@@ -1601,7 +1593,6 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
uint32 GetQuestSlotState(uint16 slot) const;
uint16 GetQuestSlotCounter(uint16 slot, uint8 counter) const;
int64 GetQuestSlotEndTime(uint16 slot) const;
- bool GetQuestSlotObjectiveFlag(uint16 slot, int8 objectiveIndex) const;
int32 GetQuestSlotObjectiveData(uint16 slot, QuestObjective const& objective) const;
int32 GetQuestObjectiveData(uint32 questId, uint32 objectiveId) const;
void SetQuestSlot(uint16 slot, uint32 quest_id);
@@ -1609,8 +1600,6 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
void SetQuestSlotState(uint16 slot, uint32 state);
void RemoveQuestSlotState(uint16 slot, uint32 state);
void SetQuestSlotEndTime(uint16 slot, time_t endTime);
- void SetQuestSlotObjectiveFlag(uint16 slot, int8 objectiveIndex);
- void RemoveQuestSlotObjectiveFlag(uint16 slot, int8 objectiveIndex);
void SetQuestCompletedBit(uint32 questBit, bool completed);
uint16 GetReqKillOrCastCurrentCount(uint32 quest_id, int32 entry) const;
@@ -2327,8 +2316,6 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
void _RemoveAllItemMods();
void _ApplyAllItemMods();
void _ApplyAllLevelScaleItemMods(bool apply);
- void ApplyAllAzeriteItemMods(bool apply);
- void ApplyAllAzeriteEmpoweredItemMods(bool apply);
void _ApplyItemBonuses(Item* item, uint8 slot, bool apply);
void _ApplyWeaponDamage(uint8 slot, Item* item, bool apply);
bool EnchantmentFitsRequirements(uint32 enchantmentcondition, int8 slot) const;
@@ -2342,11 +2329,6 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
void UpdateItemSetAuras(bool formChange = false);
void ApplyArtifactPowers(Item* item, bool apply);
void ApplyArtifactPowerRank(Item* artifact, ArtifactPowerRankEntry const* artifactPowerRank, bool apply);
- void ApplyAzeritePowers(Item* item, bool apply);
- void ApplyAzeriteItemMilestonePower(AzeriteItem* item, AzeriteItemMilestonePowerEntry const* azeriteItemMilestonePower, bool apply);
- void ApplyAzeriteEssence(AzeriteItem* item, uint32 azeriteEssenceId, uint32 rank, bool major, bool apply);
- void ApplyAzeriteEssencePower(AzeriteItem* item, AzeriteEssencePowerEntry const* azeriteEssencePower, bool major, bool apply);
- void ApplyAzeritePower(AzeriteEmpoweredItem* item, AzeritePowerEntry const* azeritePower, bool apply);
void CastItemCombatSpell(DamageInfo const& damageInfo);
void CastItemCombatSpell(DamageInfo const& damageInfo, Item* item, ItemTemplate const* proto);
@@ -2767,11 +2749,7 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
void SetHeirloom(uint32 slot, int32 itemId) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Heirlooms, slot), itemId); }
void SetHeirloomFlags(uint32 slot, uint32 flags) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::HeirloomFlags, slot), flags); }
- void AddToy(int32 itemId, uint32 flags)
- {
- AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Toys)) = itemId;
- AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ToyFlags)) = flags;
- }
+ void AddToy(int32 itemId, uint32 /*flags*/) { AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Toys)) = itemId; }
void AddTransmogBlock(uint32 blockValue) { AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Transmog)) = blockValue; }
void AddTransmogFlag(uint32 slot, uint32 flag) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Transmog, slot), flag); }
@@ -2784,9 +2762,6 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
RemoveDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ConditionalTransmog), uint32(index));
}
- void AddIllusionBlock(uint32 blockValue) { AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TransmogIllusions)) = blockValue; }
- void AddIllusionFlag(uint32 slot, uint32 flag) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TransmogIllusions, slot), flag); }
-
void AddSelfResSpell(int32 spellId) { AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::SelfResSpells)) = spellId; }
void RemoveSelfResSpell(int32 spellId)
{
@@ -2823,9 +2798,6 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
void SetTransportServerTime(int32 transportServerTime) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TransportServerTime), transportServerTime); }
- void SetRequiredMountCapabilityFlag(uint8 flag) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::RequiredMountCapabilityFlags), flag); }
- void ReplaceAllRequiredMountCapabilityFlags(uint8 flags) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::RequiredMountCapabilityFlags), flags); }
-
bool IsInFriendlyArea() const;
bool IsFriendlyArea(AreaTableEntry const* inArea) const;
@@ -2903,12 +2875,9 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
void _LoadActions(PreparedQueryResult result);
void _LoadAuras(PreparedQueryResult auraResult, PreparedQueryResult effectResult, uint32 timediff);
void _LoadGlyphAuras();
- void _LoadInventory(PreparedQueryResult result, PreparedQueryResult artifactsResult, PreparedQueryResult azeriteResult,
- PreparedQueryResult azeriteItemMilestonePowersResult, PreparedQueryResult azeriteItemUnlockedEssencesResult,
- PreparedQueryResult azeriteEmpoweredItemResult, uint32 timeDiff);
+ void _LoadInventory(PreparedQueryResult result, PreparedQueryResult artifactsResult, uint32 timeDiff);
void _LoadVoidStorage(PreparedQueryResult result);
- void _LoadMail(PreparedQueryResult mailsResult, PreparedQueryResult mailItemsResult, PreparedQueryResult artifactResult, PreparedQueryResult azeriteItemResult,
- PreparedQueryResult azeriteItemMilestonePowersResult, PreparedQueryResult azeriteItemUnlockedEssencesResult, PreparedQueryResult azeriteEmpoweredItemResult);
+ void _LoadMail(PreparedQueryResult mailsResult, PreparedQueryResult mailItemsResult, PreparedQueryResult artifactResult);
static Item* _LoadMailedItem(ObjectGuid const& playerGuid, Player* player, uint64 mailId, Mail* mail, Field* fields, ItemAdditionalLoadInfo* addionalData);
void _LoadQuestStatus(PreparedQueryResult result);
void _LoadQuestStatusObjectives(PreparedQueryResult result);
diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp
index 5dd4eaf42d0..8697f2656a1 100644
--- a/src/server/game/Entities/Unit/StatSystem.cpp
+++ b/src/server/game/Entities/Unit/StatSystem.cpp
@@ -584,13 +584,12 @@ void Player::UpdateHealingDonePercentMod()
{
float value = 1.0f;
- AddPct(value, GetRatingBonusValue(CR_VERSATILITY_HEALING_DONE) + GetTotalAuraModifier(SPELL_AURA_MOD_VERSATILITY));
+ // AddPct(value, GetRatingBonusValue(CR_VERSATILITY_HEALING_DONE) + GetTotalAuraModifier(SPELL_AURA_MOD_VERSATILITY));
for (AuraEffect const* auraEffect : GetAuraEffectsByType(SPELL_AURA_MOD_HEALING_DONE_PERCENT))
AddPct(value, auraEffect->GetAmount());
- for (uint32 i = 0; i < MAX_SPELL_SCHOOL; ++i)
- SetUpdateFieldStatValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModHealingDonePercent, i), value);
+ SetUpdateFieldStatValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModHealingDonePercent), value);
}
float const m_diminishing_k[MAX_CLASSES] =
@@ -722,7 +721,8 @@ void Player::UpdateSpellCritChance()
crit += GetRatingBonusValue(CR_CRIT_SPELL);
// Store crit value
- SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::SpellCritPercentage), crit);
+ for (uint8 i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; ++i)
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::SpellCritPercentage, i), crit);
}
void Player::UpdateCorruption()
@@ -836,7 +836,6 @@ void Player::_ApplyAllStatBonuses()
_ApplyAllAuraStatMods();
_ApplyAllItemMods();
- ApplyAllAzeriteItemMods(true);
SetCanModifyStats(true);
@@ -847,7 +846,6 @@ void Player::_RemoveAllStatBonuses()
{
SetCanModifyStats(false);
- ApplyAllAzeriteItemMods(false);
_RemoveAllItemMods();
_RemoveAllAuraStatMods();
@@ -1113,17 +1111,12 @@ void Guardian::UpdateResistances(uint32 school)
if (school > SPELL_SCHOOL_NORMAL)
{
float baseValue = GetFlatModifierValue(UnitMods(UNIT_MOD_RESISTANCE_START + school), BASE_VALUE);
- float bonusValue = GetTotalAuraModValue(UnitMods(UNIT_MOD_RESISTANCE_START + school)) - baseValue;
// hunter and warlock pets gain 40% of owner's resistance
if (IsPet())
- {
baseValue += float(CalculatePct(m_owner->GetResistance(SpellSchools(school)), 40));
- bonusValue += float(CalculatePct(m_owner->GetBonusResistanceMod(SpellSchools(school)), 40));
- }
SetResistance(SpellSchools(school), int32(baseValue));
- SetBonusResistanceMod(SpellSchools(school), int32(bonusValue));
}
else
UpdateArmor();
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 708b35d2418..136208da8e7 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -6943,24 +6943,13 @@ float Unit::SpellCritChanceDone(Spell* spell, AuraEffect const* aurEff, SpellSch
case SPELL_DAMAGE_CLASS_NONE:
case SPELL_DAMAGE_CLASS_MAGIC:
{
- auto getPhysicalCritChance = [&]
- {
- return GetUnitCriticalChanceDone(attackType);
- };
-
- auto getMagicCritChance = [&]
- {
- if (Player const* thisPlayer = ToPlayer())
- return *thisPlayer->m_activePlayerData->SpellCritPercentage;
-
- return m_baseSpellCritChance;
- };
-
if (schoolMask & SPELL_SCHOOL_MASK_NORMAL)
- crit_chance = std::max(crit_chance, getPhysicalCritChance());
-
- if (schoolMask & ~SPELL_SCHOOL_MASK_NORMAL)
- crit_chance = std::max(crit_chance, getMagicCritChance());
+ crit_chance = 0.0f;
+ // For other schools
+ else if (Player const* thisPlayer = ToPlayer())
+ crit_chance = thisPlayer->m_activePlayerData->SpellCritPercentage[AsUnderlyingType(GetFirstSchoolInMask(schoolMask))];
+ else
+ crit_chance = (float)m_baseSpellCritChance;
break;
}
case SPELL_DAMAGE_CLASS_MELEE:
@@ -7252,14 +7241,7 @@ float Unit::SpellHealingPctDone(Unit* victim, SpellInfo const* spellProto) const
// Healing done percent
if (Player const* thisPlayer = ToPlayer())
- {
- float maxModDamagePercentSchool = 0.0f;
- for (uint32 i = 0; i < MAX_SPELL_SCHOOL; ++i)
- if (spellProto->GetSchoolMask() & (1 << i))
- maxModDamagePercentSchool = std::max(maxModDamagePercentSchool, thisPlayer->m_activePlayerData->ModHealingDonePercent[i]);
-
- DoneTotalMod *= maxModDamagePercentSchool;
- }
+ DoneTotalMod *= thisPlayer->m_activePlayerData->ModHealingDonePercent;
else // SPELL_AURA_MOD_HEALING_DONE_PERCENT is included in m_activePlayerData->ModHealingDonePercent for players
DoneTotalMod *= GetTotalAuraMultiplier(SPELL_AURA_MOD_HEALING_DONE_PERCENT);
@@ -9260,14 +9242,10 @@ void Unit::UpdateResistances(uint32 school)
float value = CalculatePct(GetFlatModifierValue(unitMod, BASE_VALUE), std::max(GetFlatModifierValue(unitMod, BASE_PCT_EXCLUDE_CREATE), -100.0f));
value *= GetPctModifierValue(unitMod, BASE_PCT);
-
- float baseValue = value;
-
value += GetFlatModifierValue(unitMod, TOTAL_VALUE);
value *= GetPctModifierValue(unitMod, TOTAL_PCT);
SetResistance(SpellSchools(school), int32(value));
- SetBonusResistanceMod(SpellSchools(school), int32(value - baseValue));
}
else
UpdateArmor();
@@ -9278,8 +9256,6 @@ float Unit::GetTotalAttackPowerValue(WeaponAttackType attType, bool includeWeapo
if (attType == RANGED_ATTACK)
{
float ap = m_unitData->RangedAttackPower + m_unitData->RangedAttackPowerModPos + m_unitData->RangedAttackPowerModNeg;
- if (includeWeapon)
- ap += std::max<float>(m_unitData->MainHandWeaponAttackPower, m_unitData->RangedWeaponAttackPower);
if (ap < 0)
return 0.0f;
return ap * (1.0f + m_unitData->RangedAttackPowerMultiplier);
@@ -9287,16 +9263,6 @@ float Unit::GetTotalAttackPowerValue(WeaponAttackType attType, bool includeWeapo
else
{
float ap = m_unitData->AttackPower + m_unitData->AttackPowerModPos + m_unitData->AttackPowerModNeg;
- if (includeWeapon)
- {
- if (attType == BASE_ATTACK)
- ap += std::max<float>(m_unitData->MainHandWeaponAttackPower, m_unitData->RangedWeaponAttackPower);
- else
- {
- ap += m_unitData->OffHandWeaponAttackPower;
- ap /= 2;
- }
- }
if (ap < 0)
return 0.0f;
return ap * (1.0f + m_unitData->AttackPowerMultiplier);
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 96596d60ac6..bdf55ce3a45 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -756,17 +756,11 @@ class TC_GAME_API Unit : public WorldObject
float GetStat(Stats stat) const { return float(m_unitData->Stats[stat]); }
void SetStat(Stats stat, int32 val) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Stats, stat), val); }
uint32 GetArmor() const { return GetResistance(SPELL_SCHOOL_NORMAL); }
- void SetArmor(int32 val, int32 bonusVal)
- {
- SetResistance(SPELL_SCHOOL_NORMAL, val);
- SetBonusResistanceMod(SPELL_SCHOOL_NORMAL, bonusVal);
- }
+ void SetArmor(int32 val, int32 /*bonusVal*/) { SetResistance(SPELL_SCHOOL_NORMAL, val); }
int32 GetResistance(SpellSchools school) const { return m_unitData->Resistances[school]; }
- int32 GetBonusResistanceMod(SpellSchools school) const { return m_unitData->BonusResistanceMods[school]; }
int32 GetResistance(SpellSchoolMask mask) const;
void SetResistance(SpellSchools school, int32 val) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Resistances, school), val); }
- void SetBonusResistanceMod(SpellSchools school, int32 val) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::BonusResistanceMods, school), val); }
static float CalculateAverageResistReduction(WorldObject const* caster, SpellSchoolMask schoolMask, Unit const* victim, SpellInfo const* spellInfo = nullptr);
uint64 GetHealth() const { return m_unitData->Health; }
@@ -809,9 +803,6 @@ class TC_GAME_API Unit : public WorldObject
// returns the change in power
int32 ModifyPower(Powers power, int32 val, bool withPowerUpdate = true);
- void ApplyModManaCostMultiplier(float manaCostMultiplier, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ManaCostMultiplier), manaCostMultiplier, apply); }
- void ApplyModManaCostModifier(SpellSchools school, int32 mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ManaCostModifier, school), mod, apply); }
-
uint32 GetBaseAttackTime(WeaponAttackType att) const;
void SetBaseAttackTime(WeaponAttackType att, uint32 val);
void UpdateAttackTimeField(WeaponAttackType att);
@@ -842,8 +833,6 @@ class TC_GAME_API Unit : public WorldObject
void SetCreatedBySpell(int32 spellId) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::CreatedBySpell), spellId); }
- void SetNameplateAttachToGUID(ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NameplateAttachToGUID), guid); }
-
Emote GetEmoteState() const { return Emote(*m_unitData->EmoteState); }
void SetEmoteState(Emote emote) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::EmoteState), emote); }
@@ -894,8 +883,6 @@ class TC_GAME_API Unit : public WorldObject
bool IsMounted() const { return HasUnitFlag(UNIT_FLAG_MOUNT); }
uint32 GetMountDisplayId() const { return m_unitData->MountDisplayID; }
void SetMountDisplayId(uint32 mountDisplayId) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MountDisplayID), mountDisplayId); }
- uint32 GetCosmeticMountDisplayId() const { return m_unitData->CosmeticMountDisplayID; }
- void SetCosmeticMountDisplayId(uint32 mountDisplayId) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::CosmeticMountDisplayID), mountDisplayId); }
void Mount(uint32 mount, uint32 vehicleId = 0, uint32 creatureEntry = 0);
void Dismount();
MountCapabilityEntry const* GetMountCapability(uint32 mountType) const;
@@ -1240,8 +1227,6 @@ class TC_GAME_API Unit : public WorldObject
uint32 GetBattlePetCompanionNameTimestamp() const { return m_unitData->BattlePetCompanionNameTimestamp; }
void SetBattlePetCompanionNameTimestamp(uint32 timestamp) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::BattlePetCompanionNameTimestamp), timestamp); }
- uint32 GetBattlePetCompanionExperience() const { return m_unitData->BattlePetCompanionExperience; }
- void SetBattlePetCompanionExperience(uint32 experience) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::BattlePetCompanionExperience), experience); }
uint32 GetWildBattlePetLevel() const { return m_unitData->WildBattlePetLevel; }
void SetWildBattlePetLevel(uint32 wildBattlePetLevel) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::WildBattlePetLevel), wildBattlePetLevel); }
@@ -1403,14 +1388,13 @@ class TC_GAME_API Unit : public WorldObject
.ModifyValue(&UF::UnitData::ChannelData)
.ModifyValue(&UF::UnitChannel::SpellID), channelSpellId);
}
- uint32 GetChannelSpellXSpellVisualId() const { return m_unitData->ChannelData->SpellVisual.SpellXSpellVisualID; }
- uint32 GetChannelScriptVisualId() const { return m_unitData->ChannelData->SpellVisual.ScriptVisualID; }
+ uint32 GetChannelSpellXSpellVisualId() const { return m_unitData->ChannelData->SpellXSpellVisualID; }
void SetChannelVisual(SpellCastVisual channelVisual)
{
SetUpdateFieldValue(m_values
.ModifyValue(&Unit::m_unitData)
.ModifyValue(&UF::UnitData::ChannelData)
- .ModifyValue(&UF::UnitChannel::SpellVisual), channelVisual);
+ .ModifyValue(&UF::UnitChannel::SpellXSpellVisualID), channelVisual.SpellXSpellVisualID);
}
void AddChannelObject(ObjectGuid guid) { AddDynamicUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ChannelObjects)) = guid; }
void SetChannelObject(uint32 slot, ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ChannelObjects, slot), guid); }
@@ -1446,10 +1430,6 @@ class TC_GAME_API Unit : public WorldObject
virtual bool IsMovementPreventedByCasting() const;
bool CanCastSpellWhileMoving(SpellInfo const* spellInfo) const;
- bool IsSilenced(SpellSchoolMask schoolMask) const { return (*m_unitData->SilencedSchoolMask & schoolMask) != 0; }
- void SetSilencedSchoolMask(SpellSchoolMask schoolMask) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::SilencedSchoolMask), schoolMask); }
- void ReplaceAllSilencedSchoolMask(SpellSchoolMask schoolMask) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::SilencedSchoolMask), schoolMask); }
-
SpellHistory* GetSpellHistory() { return _spellHistory.get(); }
SpellHistory const* GetSpellHistory() const { return _spellHistory.get(); }
@@ -1517,9 +1497,6 @@ class TC_GAME_API Unit : public WorldObject
void SetRangedAttackPowerModPos(int32 attackPowerMod) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::RangedAttackPowerModPos), attackPowerMod); }
void SetRangedAttackPowerModNeg(int32 attackPowerMod) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::RangedAttackPowerModNeg), attackPowerMod); }
void SetRangedAttackPowerMultiplier(float attackPowerMult) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::RangedAttackPowerMultiplier), attackPowerMult); }
- void SetMainHandWeaponAttackPower(int32 attackPower) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MainHandWeaponAttackPower), attackPower); }
- void SetOffHandWeaponAttackPower(int32 attackPower) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::OffHandWeaponAttackPower), attackPower); }
- void SetRangedWeaponAttackPower(int32 attackPower) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::RangedWeaponAttackPower), attackPower); }
virtual void UpdateDamagePhysical(WeaponAttackType attType);
float GetTotalAttackPowerValue(WeaponAttackType attType, bool includeWeapon = true) const;
float GetWeaponDamageRange(WeaponAttackType attType, WeaponDamageRange type) const;
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 7715e1fcb84..5aaa3e6e080 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -19,8 +19,6 @@
#include "ArenaTeamMgr.h"
#include "AreaTriggerDataStore.h"
#include "AreaTriggerTemplate.h"
-#include "AzeriteEmpoweredItem.h"
-#include "AzeriteItem.h"
#include "Chat.h"
#include "Containers.h"
#include "CreatureAIFactory.h"
@@ -6376,13 +6374,10 @@ void ObjectMgr::ReturnOrDeleteOldMails(bool serverUp)
if (m->messageType != MAIL_NORMAL || (m->checked & (MAIL_CHECK_MASK_COD_PAYMENT | MAIL_CHECK_MASK_RETURNED)))
{
CharacterDatabaseTransaction nonTransactional(nullptr);
+
// mail open and then not returned
for (MailItemInfoVec::iterator itr2 = m->items.begin(); itr2 != m->items.end(); ++itr2)
- {
Item::DeleteFromDB(nonTransactional, itr2->item_guid);
- AzeriteItem::DeleteFromDB(nonTransactional, itr2->item_guid);
- AzeriteEmpoweredItem::DeleteFromDB(nonTransactional, itr2->item_guid);
- }
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_MAIL_ITEM_BY_ID);
stmt->setUInt64(0, m->messageID);
diff --git a/src/server/game/Handlers/AzeriteHandler.cpp b/src/server/game/Handlers/AzeriteHandler.cpp
deleted file mode 100644
index 015ec05e570..00000000000
--- a/src/server/game/Handlers/AzeriteHandler.cpp
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "WorldSession.h"
-#include "AzeriteEmpoweredItem.h"
-#include "AzeriteItem.h"
-#include "AzeritePackets.h"
-#include "DB2Stores.h"
-#include "NPCPackets.h"
-#include "Player.h"
-#include "SpellHistory.h"
-
-void WorldSession::HandleAzeriteEssenceUnlockMilestone(WorldPackets::Azerite::AzeriteEssenceUnlockMilestone& azeriteEssenceUnlockMilestone)
-{
- if (!AzeriteItem::FindHeartForge(_player))
- return;
-
- Item* item = _player->GetItemByEntry(ITEM_ID_HEART_OF_AZEROTH, ItemSearchLocation::Everywhere);
- if (!item)
- return;
-
- AzeriteItem* azeriteItem = item->ToAzeriteItem();
- if (!azeriteItem || !azeriteItem->CanUseEssences())
- return;
-
- AzeriteItemMilestonePowerEntry const* milestonePower = sAzeriteItemMilestonePowerStore.LookupEntry(azeriteEssenceUnlockMilestone.AzeriteItemMilestonePowerID);
- if (!milestonePower || milestonePower->RequiredLevel > int32(azeriteItem->GetLevel()))
- return;
-
- // check that all previous milestones are unlocked
- for (AzeriteItemMilestonePowerEntry const* previousMilestone : sDB2Manager.GetAzeriteItemMilestonePowers())
- {
- if (previousMilestone == milestonePower)
- break;
-
- if (!azeriteItem->HasUnlockedEssenceMilestone(previousMilestone->ID))
- return;
- }
-
- azeriteItem->AddUnlockedEssenceMilestone(milestonePower->ID);
- _player->ApplyAzeriteItemMilestonePower(azeriteItem, milestonePower, true);
- azeriteItem->SetState(ITEM_CHANGED, _player);
-}
-
-void WorldSession::HandleAzeriteEssenceActivateEssence(WorldPackets::Azerite::AzeriteEssenceActivateEssence& azeriteEssenceActivateEssence)
-{
- WorldPackets::Azerite::ActivateEssenceFailed activateEssenceResult;
- activateEssenceResult.AzeriteEssenceID = azeriteEssenceActivateEssence.AzeriteEssenceID;
- Item* item = _player->GetItemByEntry(ITEM_ID_HEART_OF_AZEROTH, ItemSearchLocation::Equipment);
- if (!item)
- {
- activateEssenceResult.Reason = AzeriteEssenceActivateResult::NotEquipped;
- activateEssenceResult.Slot = azeriteEssenceActivateEssence.Slot;
- SendPacket(activateEssenceResult.Write());
- return;
- }
-
- AzeriteItem* azeriteItem = item->ToAzeriteItem();
- if (!azeriteItem || !azeriteItem->CanUseEssences())
- {
- activateEssenceResult.Reason = AzeriteEssenceActivateResult::ConditionFailed;
- SendPacket(activateEssenceResult.Write());
- return;
- }
-
- if (azeriteEssenceActivateEssence.Slot >= MAX_AZERITE_ESSENCE_SLOT || !azeriteItem->HasUnlockedEssenceSlot(azeriteEssenceActivateEssence.Slot))
- {
- activateEssenceResult.Reason = AzeriteEssenceActivateResult::SlotLocked;
- SendPacket(activateEssenceResult.Write());
- return;
- }
-
- UF::SelectedAzeriteEssences const* selectedEssences = azeriteItem->GetSelectedAzeriteEssences();
- // essence is already in that slot, nothing to do
- if (selectedEssences && selectedEssences->AzeriteEssenceID[azeriteEssenceActivateEssence.Slot] == uint32(azeriteEssenceActivateEssence.AzeriteEssenceID))
- return;
-
- uint32 rank = azeriteItem->GetEssenceRank(azeriteEssenceActivateEssence.AzeriteEssenceID);
- if (!rank)
- {
- activateEssenceResult.Reason = AzeriteEssenceActivateResult::EssenceNotUnlocked;
- activateEssenceResult.Arg = azeriteEssenceActivateEssence.AzeriteEssenceID;
- SendPacket(activateEssenceResult.Write());
- return;
- }
-
- if (_player->IsInCombat())
- {
- activateEssenceResult.Reason = AzeriteEssenceActivateResult::AffectingCombat;
- activateEssenceResult.Slot = azeriteEssenceActivateEssence.Slot;
- SendPacket(activateEssenceResult.Write());
- return;
- }
-
- if (_player->isDead())
- {
- activateEssenceResult.Reason = AzeriteEssenceActivateResult::CantDoThatRightNow;
- activateEssenceResult.Slot = azeriteEssenceActivateEssence.Slot;
- SendPacket(activateEssenceResult.Write());
- return;
- }
-
- if (!_player->HasPlayerFlag(PLAYER_FLAGS_RESTING) && !_player->HasUnitFlag2(UNIT_FLAG2_ALLOW_CHANGING_TALENTS))
- {
- activateEssenceResult.Reason = AzeriteEssenceActivateResult::NotInRestArea;
- activateEssenceResult.Slot = azeriteEssenceActivateEssence.Slot;
- SendPacket(activateEssenceResult.Write());
- return;
- }
-
- if (selectedEssences)
- {
- // need to remove selected essence from another slot if selected
- int32 removeEssenceFromSlot = -1;
- for (int32 slot = 0; slot < MAX_AZERITE_ESSENCE_SLOT; ++slot)
- if (azeriteEssenceActivateEssence.Slot != uint8(slot) && selectedEssences->AzeriteEssenceID[slot] == uint32(azeriteEssenceActivateEssence.AzeriteEssenceID))
- removeEssenceFromSlot = slot;
-
- // check cooldown of major essence slot
- if (selectedEssences->AzeriteEssenceID[0] && (azeriteEssenceActivateEssence.Slot == 0 || removeEssenceFromSlot == 0))
- {
- for (uint32 essenceRank = 1; essenceRank <= rank; ++essenceRank)
- {
- AzeriteEssencePowerEntry const* azeriteEssencePower = ASSERT_NOTNULL(sDB2Manager.GetAzeriteEssencePower(selectedEssences->AzeriteEssenceID[0], essenceRank));
- if (_player->GetSpellHistory()->HasCooldown(azeriteEssencePower->MajorPowerDescription))
- {
- activateEssenceResult.Reason = AzeriteEssenceActivateResult::CantRemoveEssence;
- activateEssenceResult.Arg = azeriteEssencePower->MajorPowerDescription;
- activateEssenceResult.Slot = azeriteEssenceActivateEssence.Slot;
- SendPacket(activateEssenceResult.Write());
- return;
- }
- }
- }
-
- if (removeEssenceFromSlot != -1)
- {
- _player->ApplyAzeriteEssence(azeriteItem, selectedEssences->AzeriteEssenceID[removeEssenceFromSlot], MAX_AZERITE_ESSENCE_RANK,
- AzeriteItemMilestoneType(sDB2Manager.GetAzeriteItemMilestonePower(removeEssenceFromSlot)->Type) == AzeriteItemMilestoneType::MajorEssence, false);
- azeriteItem->SetSelectedAzeriteEssence(removeEssenceFromSlot, 0);
- }
-
- if (selectedEssences->AzeriteEssenceID[azeriteEssenceActivateEssence.Slot])
- {
- _player->ApplyAzeriteEssence(azeriteItem, selectedEssences->AzeriteEssenceID[azeriteEssenceActivateEssence.Slot], MAX_AZERITE_ESSENCE_RANK,
- AzeriteItemMilestoneType(sDB2Manager.GetAzeriteItemMilestonePower(azeriteEssenceActivateEssence.Slot)->Type) == AzeriteItemMilestoneType::MajorEssence, false);
- }
- }
- else
- azeriteItem->CreateSelectedAzeriteEssences(AsUnderlyingType(_player->GetPrimarySpecialization()));
-
- azeriteItem->SetSelectedAzeriteEssence(azeriteEssenceActivateEssence.Slot, azeriteEssenceActivateEssence.AzeriteEssenceID);
-
- _player->ApplyAzeriteEssence(azeriteItem, azeriteEssenceActivateEssence.AzeriteEssenceID, rank,
- AzeriteItemMilestoneType(sDB2Manager.GetAzeriteItemMilestonePower(azeriteEssenceActivateEssence.Slot)->Type) == AzeriteItemMilestoneType::MajorEssence, true);
-
- azeriteItem->SetState(ITEM_CHANGED, _player);
-}
-
-void WorldSession::HandleAzeriteEmpoweredItemViewed(WorldPackets::Azerite::AzeriteEmpoweredItemViewed& azeriteEmpoweredItemViewed)
-{
- Item* item = _player->GetItemByGuid(azeriteEmpoweredItemViewed.ItemGUID);
- if (!item || !item->IsAzeriteEmpoweredItem())
- return;
-
- item->SetItemFlag(ITEM_FIELD_FLAG_AZERITE_EMPOWERED_ITEM_VIEWED);
- item->SetState(ITEM_CHANGED, _player);
-}
-
-void WorldSession::HandleAzeriteEmpoweredItemSelectPower(WorldPackets::Azerite::AzeriteEmpoweredItemSelectPower& azeriteEmpoweredItemSelectPower)
-{
- Item* item = _player->GetItemByPos(azeriteEmpoweredItemSelectPower.ContainerSlot, azeriteEmpoweredItemSelectPower.Slot);
- if (!item)
- return;
-
- AzeritePowerEntry const* azeritePower = sAzeritePowerStore.LookupEntry(azeriteEmpoweredItemSelectPower.AzeritePowerID);
- if (!azeritePower)
- return;
-
- AzeriteEmpoweredItem* azeriteEmpoweredItem = item->ToAzeriteEmpoweredItem();
- if (!azeriteEmpoweredItem)
- return;
-
- // Validate tier
- int32 actualTier = azeriteEmpoweredItem->GetTierForAzeritePower(Classes(_player->GetClass()), azeriteEmpoweredItemSelectPower.AzeritePowerID);
- if (azeriteEmpoweredItemSelectPower.Tier > MAX_AZERITE_EMPOWERED_TIER || azeriteEmpoweredItemSelectPower.Tier != actualTier)
- return;
-
- uint32 azeriteLevel = 0;
- Item const* heartOfAzeroth = _player->GetItemByEntry(ITEM_ID_HEART_OF_AZEROTH, ItemSearchLocation::Everywhere);
- if (!heartOfAzeroth)
- return;
-
- if (AzeriteItem const* azeriteItem = heartOfAzeroth->ToAzeriteItem())
- azeriteLevel = azeriteItem->GetEffectiveLevel();
-
- // Check required heart of azeroth level
- if (azeriteLevel < azeriteEmpoweredItem->GetRequiredAzeriteLevelForTier(uint32(actualTier)))
- return;
-
- // tiers are ordered backwards, you first select the highest one
- for (int32 i = actualTier + 1; i < azeriteEmpoweredItem->GetMaxAzeritePowerTier(); ++i)
- if (!azeriteEmpoweredItem->GetSelectedAzeritePower(i))
- return;
-
- bool activateAzeritePower = azeriteEmpoweredItem->IsEquipped() && heartOfAzeroth->IsEquipped();
- if (azeritePower->ItemBonusListID && activateAzeritePower)
- _player->_ApplyItemMods(azeriteEmpoweredItem, azeriteEmpoweredItem->GetSlot(), false);
-
- azeriteEmpoweredItem->SetSelectedAzeritePower(actualTier, azeriteEmpoweredItemSelectPower.AzeritePowerID);
-
- if (activateAzeritePower)
- {
- // apply all item mods when azerite power grants a bonus, item level changes and that affects stats and auras that scale with item level
- if (azeritePower->ItemBonusListID)
- _player->_ApplyItemMods(azeriteEmpoweredItem, azeriteEmpoweredItem->GetSlot(), true);
- else
- _player->ApplyAzeritePower(azeriteEmpoweredItem, azeritePower, true);
- }
-
- azeriteEmpoweredItem->SetState(ITEM_CHANGED, _player);
-}
-
-void WorldSession::SendAzeriteRespecNPC(ObjectGuid npc)
-{
- WorldPackets::NPC::NPCInteractionOpenResult npcInteraction;
- npcInteraction.Npc = npc;
- npcInteraction.InteractionType = PlayerInteractionType::AzeriteRespec;
- npcInteraction.Success = true;
- SendPacket(npcInteraction.Write());
-}
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index 3a07852a3e1..8bcb9011c69 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -161,22 +161,6 @@ bool LoginQueryHolder::Initialize()
stmt->setUInt64(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_ARTIFACTS, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ITEM_INSTANCE_AZERITE);
- stmt->setUInt64(0, lowGuid);
- res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_AZERITE, stmt);
-
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ITEM_INSTANCE_AZERITE_MILESTONE_POWER);
- stmt->setUInt64(0, lowGuid);
- res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_AZERITE_MILESTONE_POWERS, stmt);
-
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ITEM_INSTANCE_AZERITE_UNLOCKED_ESSENCE);
- stmt->setUInt64(0, lowGuid);
- res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_AZERITE_UNLOCKED_ESSENCES, stmt);
-
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ITEM_INSTANCE_AZERITE_EMPOWERED);
- stmt->setUInt64(0, lowGuid);
- res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_AZERITE_EMPOWERED, stmt);
-
stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_VOID_STORAGE);
stmt->setUInt64(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_VOID_STORAGE, stmt);
@@ -193,22 +177,6 @@ bool LoginQueryHolder::Initialize()
stmt->setUInt64(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS_ARTIFACT, stmt);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_MAILITEMS_AZERITE);
- stmt->setUInt64(0, lowGuid);
- res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS_AZERITE, stmt);
-
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_MAILITEMS_AZERITE_MILESTONE_POWER);
- stmt->setUInt64(0, lowGuid);
- res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS_AZERITE_MILESTONE_POWER, stmt);
-
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_MAILITEMS_AZERITE_UNLOCKED_ESSENCE);
- stmt->setUInt64(0, lowGuid);
- res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS_AZERITE_UNLOCKED_ESSENCE, stmt);
-
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_MAILITEMS_AZERITE_EMPOWERED);
- stmt->setUInt64(0, lowGuid);
- res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS_AZERITE_EMPOWERED, stmt);
-
stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_SOCIALLIST);
stmt->setUInt64(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_SOCIAL_LIST, stmt);
diff --git a/src/server/game/Handlers/InspectHandler.cpp b/src/server/game/Handlers/InspectHandler.cpp
index 5bfd00dc1fa..a6a664fee14 100644
--- a/src/server/game/Handlers/InspectHandler.cpp
+++ b/src/server/game/Handlers/InspectHandler.cpp
@@ -17,7 +17,6 @@
#include "WorldSession.h"
#include "AchievementMgr.h"
-#include "AzeriteItem.h"
#include "Guild.h"
#include "GuildMgr.h"
#include "InspectPackets.h"
@@ -71,10 +70,6 @@ void WorldSession::HandleInspectOpcode(WorldPackets::Inspect::Inspect& inspect)
inspectResult.GuildData->AchievementPoints = guild->GetAchievementMgr().GetAchievementPoints();
}
- if (Item const* heartOfAzeroth = player->GetItemByEntry(ITEM_ID_HEART_OF_AZEROTH, ItemSearchLocation::Everywhere))
- if (AzeriteItem const* azeriteItem = heartOfAzeroth->ToAzeriteItem())
- inspectResult.AzeriteLevel = azeriteItem->GetEffectiveLevel();
-
inspectResult.ItemLevel = int32(player->GetAverageItemLevel());
inspectResult.LifetimeMaxRank = player->m_activePlayerData->LifetimeMaxRank;
inspectResult.TodayHK = player->m_activePlayerData->TodayHonorableKills;
diff --git a/src/server/game/Handlers/LFGHandler.cpp b/src/server/game/Handlers/LFGHandler.cpp
index baaeebaf5bc..ed946568930 100644
--- a/src/server/game/Handlers/LFGHandler.cpp
+++ b/src/server/game/Handlers/LFGHandler.cpp
@@ -143,7 +143,7 @@ void WorldSession::SendLfgPlayerLockInfo()
// Get Random dungeons that can be done at a certain level and expansion
uint8 level = GetPlayer()->GetLevel();
- uint32 contentTuningReplacementConditionMask = GetPlayer()->m_playerData->CtrOptions->ContentTuningConditionMask;
+ uint32 contentTuningReplacementConditionMask = 0 /*GetPlayer()->m_playerData->CtrOptions->ContentTuningConditionMask*/;
lfg::LfgDungeonSet const& randomDungeons = sLFGMgr->GetRandomAndSeasonalDungeons(level, GetExpansion(), contentTuningReplacementConditionMask);
WorldPackets::LFG::LfgPlayerInfo lfgPlayerInfo;
diff --git a/src/server/game/Loot/Loot.cpp b/src/server/game/Loot/Loot.cpp
index 050f205eb8c..3c9f0b4f643 100644
--- a/src/server/game/Loot/Loot.cpp
+++ b/src/server/game/Loot/Loot.cpp
@@ -568,7 +568,7 @@ ItemDisenchantLootEntry const* LootRoll::GetItemDisenchantLoot() const
return nullptr;
ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(m_lootItem->itemid);
- uint32 itemLevel = Item::GetItemLevel(itemTemplate, bonusData, 1, 0, 0, 0, 0, false, 0);
+ uint32 itemLevel = Item::GetItemLevel(itemTemplate, bonusData, 1, 0, 0, 0, 0, false);
return Item::GetDisenchantLoot(itemTemplate, bonusData.Quality, itemLevel);
}
diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp
index 17003ca274a..5e7a46641f6 100644
--- a/src/server/game/Quests/QuestDef.cpp
+++ b/src/server/game/Quests/QuestDef.cpp
@@ -619,19 +619,6 @@ WorldPacket Quest::BuildQueryData(LocaleConstant loc, Player* player) const
response.Info.PortraitGiverName = GetPortraitGiverName();
response.Info.PortraitTurnInText = GetPortraitTurnInText();
response.Info.PortraitTurnInName = GetPortraitTurnInName();
- std::transform(GetConditionalQuestDescription().begin(), GetConditionalQuestDescription().end(), std::back_inserter(response.Info.ConditionalQuestDescription), [loc](QuestConditionalText const& text)
- {
- std::string_view content = text.Text[LOCALE_enUS];
- ObjectMgr::GetLocaleString(text.Text, loc, content);
- return WorldPackets::Quest::ConditionalQuestText { text.PlayerConditionId, text.QuestgiverCreatureId, content };
- });
-
- std::transform(GetConditionalQuestCompletionLog().begin(), GetConditionalQuestCompletionLog().end(), std::back_inserter(response.Info.ConditionalQuestCompletionLog), [loc](QuestConditionalText const& text)
- {
- std::string_view content = text.Text[LOCALE_enUS];
- ObjectMgr::GetLocaleString(text.Text, loc, content);
- return WorldPackets::Quest::ConditionalQuestText { text.PlayerConditionId, text.QuestgiverCreatureId, content };
- });
if (loc != LOCALE_enUS)
{
@@ -651,7 +638,6 @@ WorldPacket Quest::BuildQueryData(LocaleConstant loc, Player* player) const
response.Info.QuestID = GetQuestId();
response.Info.QuestType = GetQuestType();
- response.Info.ContentTuningID = GetContentTuningId();
response.Info.QuestPackageID = GetQuestPackageID();
response.Info.QuestSortID = GetZoneOrSort();
response.Info.QuestInfoID = GetQuestInfoID();
@@ -666,12 +652,13 @@ WorldPacket Quest::BuildQueryData(LocaleConstant loc, Player* player) const
response.Info.RewardMoneyDifficulty = GetRewMoneyDifficulty();
response.Info.RewardMoneyMultiplier = GetMoneyMultiplier();
response.Info.RewardBonusMoney = GetRewMoneyMaxLevel();
- for (QuestRewardDisplaySpell displaySpell : RewardDisplaySpell)
+
+ for (uint8 i = 0; i < QUEST_REWARD_DISPLAY_SPELL_COUNT; ++i)
{
- WorldPackets::Quest::QuestCompleteDisplaySpell& rewardDisplaySpell = response.Info.RewardDisplaySpell.emplace_back();
- rewardDisplaySpell.SpellID = displaySpell.SpellId;
- rewardDisplaySpell.PlayerConditionID = displaySpell.PlayerConditionId;
- rewardDisplaySpell.Type = int32(displaySpell.Type);
+ if (RewardDisplaySpell.empty() || RewardDisplaySpell.size() < i)
+ continue;
+
+ response.Info.RewardDisplaySpell[i] = RewardDisplaySpell[i].SpellId;
}
response.Info.RewardSpell = GetRewSpell();
diff --git a/src/server/game/Server/Packets/AllPackets.h b/src/server/game/Server/Packets/AllPackets.h
index a9658aec4eb..d047007694b 100644
--- a/src/server/game/Server/Packets/AllPackets.h
+++ b/src/server/game/Server/Packets/AllPackets.h
@@ -26,7 +26,6 @@
#include "ArtifactPackets.h"
#include "AuctionHousePackets.h"
#include "AuthenticationPackets.h"
-#include "AzeritePackets.h"
#include "BankPackets.h"
#include "BlackMarketPackets.h"
#include "BattlegroundPackets.h"
diff --git a/src/server/game/Server/Packets/AzeritePackets.cpp b/src/server/game/Server/Packets/AzeritePackets.cpp
deleted file mode 100644
index 87406b757dc..00000000000
--- a/src/server/game/Server/Packets/AzeritePackets.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "AzeritePackets.h"
-#include "Util.h"
-
-WorldPacket const* WorldPackets::Azerite::PlayerAzeriteItemGains::Write()
-{
- _worldPacket << ItemGUID;
- _worldPacket << uint64(XP);
-
- return &_worldPacket;
-}
-
-void WorldPackets::Azerite::AzeriteEssenceUnlockMilestone::Read()
-{
- _worldPacket >> AzeriteItemMilestonePowerID;
-}
-
-void WorldPackets::Azerite::AzeriteEssenceActivateEssence::Read()
-{
- _worldPacket >> AzeriteEssenceID;
- _worldPacket >> Slot;
-}
-
-WorldPacket const* WorldPackets::Azerite::ActivateEssenceFailed::Write()
-{
- _worldPacket.WriteBits(AsUnderlyingType(Reason), 4);
- _worldPacket.WriteBit(Slot.has_value());
- _worldPacket << int32(Arg);
- _worldPacket << int32(AzeriteEssenceID);
- if (Slot)
- _worldPacket << uint8(*Slot);
-
- return &_worldPacket;
-}
-
-void WorldPackets::Azerite::AzeriteEmpoweredItemViewed::Read()
-{
- _worldPacket >> ItemGUID;
-}
-
-void WorldPackets::Azerite::AzeriteEmpoweredItemSelectPower::Read()
-{
- _worldPacket >> Tier;
- _worldPacket >> AzeritePowerID;
- _worldPacket >> ContainerSlot;
- _worldPacket >> Slot;
-}
-
-WorldPacket const* WorldPackets::Azerite::PlayerAzeriteItemEquippedStatusChanged::Write()
-{
- _worldPacket.WriteBit(IsHeartEquipped);
- _worldPacket.FlushBits();
-
- return &_worldPacket;
-}
diff --git a/src/server/game/Server/Packets/AzeritePackets.h b/src/server/game/Server/Packets/AzeritePackets.h
deleted file mode 100644
index 0a0204c61e7..00000000000
--- a/src/server/game/Server/Packets/AzeritePackets.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef AzeriteItemPackets_h__
-#define AzeriteItemPackets_h__
-
-#include "Packet.h"
-#include "ItemDefines.h"
-#include "ObjectGuid.h"
-#include "Optional.h"
-
-namespace WorldPackets
-{
- namespace Azerite
- {
- class PlayerAzeriteItemGains final : public ServerPacket
- {
- public:
- PlayerAzeriteItemGains() : ServerPacket(SMSG_PLAYER_AZERITE_ITEM_GAINS, 16 + 8) { }
-
- WorldPacket const* Write() override;
-
- ObjectGuid ItemGUID;
- uint64 XP = 0;
- };
-
- class AzeriteEssenceUnlockMilestone final : public ClientPacket
- {
- public:
- AzeriteEssenceUnlockMilestone(WorldPacket&& packet) : ClientPacket(CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE, std::move(packet)) { }
-
- void Read() override;
-
- int32 AzeriteItemMilestonePowerID = 0;
- };
-
- class AzeriteEssenceActivateEssence final : public ClientPacket
- {
- public:
- AzeriteEssenceActivateEssence(WorldPacket&& packet) : ClientPacket(CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE, std::move(packet)) { }
-
- void Read() override;
-
- int32 AzeriteEssenceID = 0;
- uint8 Slot = 0;
- };
-
- class ActivateEssenceFailed final : public ServerPacket
- {
- public:
- ActivateEssenceFailed() : ServerPacket(SMSG_ACTIVATE_ESSENCE_FAILED, 1 + 4 + 4 + 1) { }
-
- WorldPacket const* Write() override;
-
- AzeriteEssenceActivateResult Reason = AzeriteEssenceActivateResult::None;
- int32 Arg = 0;
- int32 AzeriteEssenceID = 0;
- Optional<uint8> Slot;
- };
-
- class AzeriteEmpoweredItemViewed final : public ClientPacket
- {
- public:
- AzeriteEmpoweredItemViewed(WorldPacket&& packet) : ClientPacket(CMSG_AZERITE_EMPOWERED_ITEM_VIEWED, std::move(packet)) { }
-
- void Read() override;
-
- ObjectGuid ItemGUID;
- };
-
- class AzeriteEmpoweredItemSelectPower final : public ClientPacket
- {
- public:
- AzeriteEmpoweredItemSelectPower(WorldPacket&& packet) : ClientPacket(CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER, std::move(packet)) { }
-
- void Read() override;
-
- int32 Tier = 0;
- int32 AzeritePowerID = 0;
- uint8 ContainerSlot = 0;
- uint8 Slot = 0;
- };
-
- class TC_GAME_API PlayerAzeriteItemEquippedStatusChanged final : public ServerPacket
- {
- public:
- PlayerAzeriteItemEquippedStatusChanged() : ServerPacket(SMSG_PLAYER_AZERITE_ITEM_EQUIPPED_STATUS_CHANGED, 1) { }
-
- WorldPacket const* Write() override;
-
- bool IsHeartEquipped = false;
- };
- }
-}
-
-#endif // AzeriteItemPackets_h__
diff --git a/src/server/game/Server/Packets/InspectPackets.cpp b/src/server/game/Server/Packets/InspectPackets.cpp
index cd2d25b80a1..942ffdc8f63 100644
--- a/src/server/game/Server/Packets/InspectPackets.cpp
+++ b/src/server/game/Server/Packets/InspectPackets.cpp
@@ -16,7 +16,6 @@
*/
#include "InspectPackets.h"
-#include "AzeriteItem.h"
#include "Item.h"
#include "Player.h"
@@ -181,28 +180,6 @@ InspectItemData::InspectItemData(::Item const* item, uint8 index)
}
++i;
}
-
- if (AzeriteItem const* azeriteItem = item->ToAzeriteItem())
- {
- if (UF::SelectedAzeriteEssences const* essences = azeriteItem->GetSelectedAzeriteEssences())
- {
- for (uint8 slot = 0; slot < essences->AzeriteEssenceID.size(); ++slot)
- {
- AzeriteEssences.emplace_back();
-
- AzeriteEssenceData& essence = AzeriteEssences.back();
- essence.Index = slot;
- essence.AzeriteEssenceID = essences->AzeriteEssenceID[slot];
- if (essence.AzeriteEssenceID)
- {
- essence.Rank = azeriteItem->GetEssenceRank(essence.AzeriteEssenceID);
- essence.SlotUnlocked = true;
- }
- else
- essence.SlotUnlocked = azeriteItem->HasUnlockedEssenceSlot(slot);
- }
- }
- }
}
WorldPacket const* InspectResult::Write()
diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp
index 5e7c646d529..2240f4ae250 100644
--- a/src/server/game/Server/Packets/MiscPackets.cpp
+++ b/src/server/game/Server/Packets/MiscPackets.cpp
@@ -182,7 +182,6 @@ WorldPacket const* WorldPackets::Misc::TriggerMovie::Write()
WorldPacket const* WorldPackets::Misc::TriggerCinematic::Write()
{
_worldPacket << uint32(CinematicID);
- _worldPacket << ConversationGuid;
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h
index 10aeacead81..b0bab1847df 100644
--- a/src/server/game/Server/Packets/MiscPackets.h
+++ b/src/server/game/Server/Packets/MiscPackets.h
@@ -196,7 +196,6 @@ namespace WorldPackets
WorldPacket const* Write() override;
uint32 CinematicID = 0;
- ObjectGuid ConversationGuid;
};
class TriggerMovie final : public ServerPacket
diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp
index 49e7c7f9f92..7c2bc3206eb 100644
--- a/src/server/game/Server/Packets/MovementPackets.cpp
+++ b/src/server/game/Server/Packets/MovementPackets.cpp
@@ -282,18 +282,6 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Movement::MonsterSplineAn
return data;
}
-ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Movement::MonsterSplineUnknown901 const& unk)
-{
- for (WorldPackets::Movement::MonsterSplineUnknown901::Inner const& unkInner : unk.Data)
- {
- data << int32(unkInner.Unknown_1);
- data << unkInner.Visual;
- data << uint32(unkInner.Unknown_4);
- }
-
- return data;
-}
-
ByteBuffer& WorldPackets::operator<<(ByteBuffer& data, Movement::MovementSpline const& movementSpline)
{
data << uint32(movementSpline.Flags);
@@ -312,7 +300,6 @@ ByteBuffer& WorldPackets::operator<<(ByteBuffer& data, Movement::MovementSpline
data.WriteBit(movementSpline.SpellEffectExtraData.has_value());
data.WriteBit(movementSpline.JumpExtraData.has_value());
data.WriteBit(movementSpline.AnimTierTransition.has_value());
- data.WriteBit(movementSpline.Unknown901.has_value());
data.FlushBits();
if (movementSpline.SplineFilter)
@@ -347,9 +334,6 @@ ByteBuffer& WorldPackets::operator<<(ByteBuffer& data, Movement::MovementSpline
if (movementSpline.AnimTierTransition)
data << *movementSpline.AnimTierTransition;
- if (movementSpline.Unknown901)
- data << *movementSpline.Unknown901;
-
return data;
}
diff --git a/src/server/game/Server/Packets/MovementPackets.h b/src/server/game/Server/Packets/MovementPackets.h
index 77cc00d71c7..51a0c4c002a 100644
--- a/src/server/game/Server/Packets/MovementPackets.h
+++ b/src/server/game/Server/Packets/MovementPackets.h
@@ -100,18 +100,6 @@ namespace WorldPackets
uint8 AnimTier = 0;
};
- struct MonsterSplineUnknown901
- {
- struct Inner
- {
- int32 Unknown_1 = 0;
- Spells::SpellCastVisual Visual;
- uint32 Unknown_4 = 0;
- };
-
- std::array<Inner, 16> Data;
- };
-
struct MovementSpline
{
uint32 Flags = 0; // Spline flags
@@ -130,7 +118,6 @@ namespace WorldPackets
Optional<MonsterSplineSpellEffectExtraData> SpellEffectExtraData;
Optional<MonsterSplineJumpExtraData> JumpExtraData;
Optional<MonsterSplineAnimTierTransition> AnimTierTransition;
- Optional<MonsterSplineUnknown901> Unknown901;
float FaceDirection = 0.0f;
ObjectGuid FaceGUID;
TaggedPosition<Position::XYZ> FaceSpot;
diff --git a/src/server/game/Server/Packets/QueryPackets.cpp b/src/server/game/Server/Packets/QueryPackets.cpp
index 8f6e7572638..377072f69c0 100644
--- a/src/server/game/Server/Packets/QueryPackets.cpp
+++ b/src/server/game/Server/Packets/QueryPackets.cpp
@@ -78,7 +78,7 @@ WorldPacket const* QueryCreatureResponse::Write()
_worldPacket.WriteBits(Stats.Title.length() + 1, 11);
_worldPacket.WriteBits(Stats.TitleAlt.length() + 1, 11);
_worldPacket.WriteBits(Stats.CursorName.length() + 1, 6);
- _worldPacket.WriteBit(Stats.Cilivilan);
+ _worldPacket.WriteBit(Stats.Civilian);
_worldPacket.WriteBit(Stats.Leader);
for (std::size_t i = 0; i < Stats.Name.size(); ++i)
@@ -102,7 +102,7 @@ WorldPacket const* QueryCreatureResponse::Write()
_worldPacket << int32(Stats.CreatureType);
_worldPacket << int32(Stats.CreatureFamily);
_worldPacket << int32(Stats.Classification);
- _worldPacket << uint32(Stats.PetSpellDataId);
+ _worldPacket << uint32(Stats.PetSpellDataID);
_worldPacket.append(Stats.ProxyCreatureID.data(), Stats.ProxyCreatureID.size());
_worldPacket << uint32(Stats.Display.CreatureDisplay.size());
_worldPacket << float(Stats.Display.TotalProbability);
diff --git a/src/server/game/Server/Packets/QueryPackets.h b/src/server/game/Server/Packets/QueryPackets.h
index 74b777f6d93..6bd43833081 100644
--- a/src/server/game/Server/Packets/QueryPackets.h
+++ b/src/server/game/Server/Packets/QueryPackets.h
@@ -67,11 +67,11 @@ namespace WorldPackets
int32 CreatureType = 0;
int32 CreatureFamily = 0;
int32 Classification = 0;
- uint32 PetSpellDataId = 0;
+ uint32 PetSpellDataID = 0;
CreatureDisplayStats Display;
float HpMulti = 0.0f;
float EnergyMulti = 0.0f;
- bool Cilivilan = false;
+ bool Civilian = false;
bool Leader = false;
std::vector<int32> QuestItems;
std::vector<int32> QuestCurrencies;
diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp
index cefc2959e07..8418f13c0f3 100644
--- a/src/server/game/Server/Packets/QuestPackets.cpp
+++ b/src/server/game/Server/Packets/QuestPackets.cpp
@@ -104,8 +104,11 @@ WorldPacket const* QueryQuestInfoResponse::Write()
{
_worldPacket << int32(Info.QuestID);
_worldPacket << int32(Info.QuestType);
+ _worldPacket << int32(Info.QuestLevel);
+ _worldPacket << int32(Info.QuestScalingFactionGroup);
+ _worldPacket << int32(Info.QuestMaxScalingLevel);
_worldPacket << int32(Info.QuestPackageID);
- _worldPacket << int32(Info.ContentTuningID);
+ _worldPacket << int32(Info.QuestMinLevel);
_worldPacket << int32(Info.QuestSortID);
_worldPacket << int32(Info.QuestInfoID);
_worldPacket << int32(Info.SuggestedGroupNum);
@@ -116,7 +119,7 @@ WorldPacket const* QueryQuestInfoResponse::Write()
_worldPacket << int32(Info.RewardMoneyDifficulty);
_worldPacket << float(Info.RewardMoneyMultiplier);
_worldPacket << int32(Info.RewardBonusMoney);
- _worldPacket << uint32(Info.RewardDisplaySpell.size());
+ _worldPacket.append(Info.RewardDisplaySpell.data(), Info.RewardDisplaySpell.size());
_worldPacket << int32(Info.RewardSpell);
_worldPacket << int32(Info.RewardHonor);
_worldPacket << float(Info.RewardKillHonor);
@@ -188,12 +191,6 @@ WorldPacket const* QueryQuestInfoResponse::Write()
_worldPacket << int32(Info.QuestSessionBonus);
_worldPacket << int32(Info.QuestGiverCreatureID);
- _worldPacket << uint32(Info.ConditionalQuestDescription.size());
- _worldPacket << uint32(Info.ConditionalQuestCompletionLog.size());
-
- for (QuestCompleteDisplaySpell const& rewardDisplaySpell : Info.RewardDisplaySpell)
- _worldPacket << rewardDisplaySpell;
-
_worldPacket.WriteBits(Info.LogTitle.size(), 9);
_worldPacket.WriteBits(Info.LogDescription.size(), 12);
_worldPacket.WriteBits(Info.QuestDescription.size(), 12);
@@ -236,12 +233,6 @@ WorldPacket const* QueryQuestInfoResponse::Write()
_worldPacket.WriteString(Info.PortraitTurnInText);
_worldPacket.WriteString(Info.PortraitTurnInName);
_worldPacket.WriteString(Info.QuestCompletionLog);
-
- for (ConditionalQuestText const& conditionalQuestText : Info.ConditionalQuestDescription)
- _worldPacket << conditionalQuestText;
-
- for (ConditionalQuestText const& conditionalQuestText : Info.ConditionalQuestCompletionLog)
- _worldPacket << conditionalQuestText;
}
return &_worldPacket;
diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h
index 582144adcb2..bfdfae08758 100644
--- a/src/server/game/Server/Packets/QuestPackets.h
+++ b/src/server/game/Server/Packets/QuestPackets.h
@@ -135,8 +135,11 @@ namespace WorldPackets
{
int32 QuestID = 0;
int32 QuestType = 0; // Accepted values: 0, 1 or 2. 0 == IsAutoComplete() (skip objectives/details)
- int32 ContentTuningID = 0;
+ int32 QuestLevel = 0;
+ int32 QuestScalingFactionGroup = 0;
+ int32 QuestMaxScalingLevel = 0;
int32 QuestPackageID = 0;
+ int32 QuestMinLevel = 0;
int32 QuestSortID = 0; // zone or sort to display in quest log
int32 QuestInfoID = 0;
int32 SuggestedGroupNum = 0;
@@ -147,7 +150,7 @@ namespace WorldPackets
int32 RewardMoneyDifficulty = 0;
float RewardMoneyMultiplier = 1.0f;
int32 RewardBonusMoney = 0;
- std::vector<QuestCompleteDisplaySpell> RewardDisplaySpell; // reward spell, this spell will be displayed (icon)
+ std::array<int32, QUEST_REWARD_DISPLAY_SPELL_COUNT> RewardDisplaySpell; // reward spell, this spell will be displayed (icon)
int32 RewardSpell = 0;
int32 RewardHonor = 0;
float RewardKillHonor = 0.0f;
@@ -191,8 +194,6 @@ namespace WorldPackets
int32 QuestSessionBonus = 0;
int32 QuestGiverCreatureID = 0; // used to select ConditionalQuestText
std::vector<QuestObjective> Objectives;
- std::vector<ConditionalQuestText> ConditionalQuestDescription;
- std::vector<ConditionalQuestText> ConditionalQuestCompletionLog;
int32 RewardItems[QUEST_REWARD_ITEM_COUNT] = { };
int32 RewardAmount[QUEST_REWARD_ITEM_COUNT] = { };
int32 ItemDrop[QUEST_ITEM_DROP_COUNT] = { };
diff --git a/src/server/game/Server/Packets/SystemPackets.cpp b/src/server/game/Server/Packets/SystemPackets.cpp
index 1849327538b..59131fa2c4a 100644
--- a/src/server/game/Server/Packets/SystemPackets.cpp
+++ b/src/server/game/Server/Packets/SystemPackets.cpp
@@ -130,14 +130,18 @@ WorldPacket const* FeatureSystemStatus::Write()
_worldPacket.WriteBit(LFGListCustomRequiresAuthenticator);
_worldPacket.WriteBit(AddonsDisabled);
_worldPacket.WriteBit(WarGamesEnabled);
+ _worldPacket.WriteBit(false); // unk, unused 4.4.0
+ _worldPacket.WriteBit(false); // unk, unused 4.4.0
_worldPacket.WriteBit(ContentTrackingEnabled);
_worldPacket.WriteBit(IsSellAllJunkEnabled);
+
_worldPacket.WriteBit(IsGroupFinderEnabled);
_worldPacket.WriteBit(IsLFDEnabled);
-
_worldPacket.WriteBit(IsLFREnabled);
_worldPacket.WriteBit(IsPremadeGroupEnabled);
+ _worldPacket.WriteBits(Field_16F.size(), 8);
+
_worldPacket.FlushBits();
{
@@ -173,6 +177,9 @@ WorldPacket const* FeatureSystemStatus::Write()
_worldPacket << int32(SessionAlert->DisplayTime);
}
+ if (!Field_16F.empty())
+ _worldPacket.WriteString(Field_16F);
+
{
_worldPacket.WriteBit(Squelch.IsSquelched);
_worldPacket << Squelch.BnetAccountGuid;
@@ -209,11 +216,15 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write()
_worldPacket.WriteBit(Unknown901CheckoutRelated);
_worldPacket.WriteBit(false); // unused, 10.0.2
_worldPacket.WriteBit(EuropaTicketSystemStatus.has_value());
- _worldPacket.WriteBit(false); // unused, 10.0.2
+ _worldPacket.WriteBit(IsNameReservationEnabled);
_worldPacket.WriteBit(LaunchETA.has_value());
+ _worldPacket.WriteBit(false); // unused, 4.4.0
+ _worldPacket.WriteBit(false); // unused, 4.4.0
+
+ _worldPacket.WriteBit(false); // unused, 4.4.0
+ _worldPacket.WriteBit(IsSoMNotificationEnabled);
_worldPacket.WriteBit(AddonsDisabled);
_worldPacket.WriteBit(Unused1000);
-
_worldPacket.WriteBit(AccountSaveDataExportEnabled);
_worldPacket.WriteBit(AccountLockedByExport);
_worldPacket.WriteBit(RealmHiddenAlert.has_value());
@@ -243,6 +254,7 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write()
_worldPacket << PlayerNameQueryInterval;
_worldPacket << uint32(DebugTimeEvents.size());
_worldPacket << int32(Unused1007);
+ _worldPacket << int32(Unused440);
if (LaunchETA)
_worldPacket << int32(*LaunchETA);
diff --git a/src/server/game/Server/Packets/SystemPackets.h b/src/server/game/Server/Packets/SystemPackets.h
index afb0600db98..aebb3e658c9 100644
--- a/src/server/game/Server/Packets/SystemPackets.h
+++ b/src/server/game/Server/Packets/SystemPackets.h
@@ -169,6 +169,7 @@ namespace WorldPackets
SquelchInfo Squelch;
RafSystemFeatureInfo RAFSystem;
std::vector<GameRuleValuePair> GameRuleValues;
+ std::string Field_16F = "";
};
struct DebugTimeEventInfo
@@ -202,9 +203,11 @@ namespace WorldPackets
bool LiveRegionKeyBindingsCopyEnabled = false;
bool Unknown901CheckoutRelated = false; // NYI
bool AddonsDisabled = false;
+ bool IsSoMNotificationEnabled = false; // NYI
bool Unused1000 = false;
bool AccountSaveDataExportEnabled = false;
bool AccountLockedByExport = false;
+ bool IsNameReservationEnabled = false; // NYI
Optional<EuropaTicketConfig> EuropaTicketSystemStatus;
std::vector<int32> LiveRegionCharacterCopySourceRegions;
uint32 TokenPollTimeSeconds = 0; // NYI
@@ -224,6 +227,7 @@ namespace WorldPackets
Optional<int32> LaunchETA;
std::vector<DebugTimeEventInfo> DebugTimeEvents;
int32 Unused1007 = 0;
+ int32 Unused440 = 0;
Optional<std::string> RealmHiddenAlert;
};
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 36b9bc1ef46..83c4d7e4bf4 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -193,10 +193,10 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_AUTO_GUILD_BANK_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoGuildBankItem);
DEFINE_HANDLER(CMSG_AUTO_STORE_BAG_ITEM, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleAutoStoreBagItemOpcode);
DEFINE_HANDLER(CMSG_AUTO_STORE_GUILD_BANK_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoStoreGuildBankItem);
- DEFINE_HANDLER(CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleAzeriteEmpoweredItemSelectPower);
- DEFINE_HANDLER(CMSG_AZERITE_EMPOWERED_ITEM_VIEWED, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleAzeriteEmpoweredItemViewed);
- DEFINE_HANDLER(CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleAzeriteEssenceActivateEssence);
- DEFINE_HANDLER(CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleAzeriteEssenceUnlockMilestone);
+ DEFINE_HANDLER(CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_AZERITE_EMPOWERED_ITEM_VIEWED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_BANKER_ACTIVATE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleBankerActivateOpcode);
DEFINE_HANDLER(CMSG_BATTLEFIELD_LEAVE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlefieldLeaveOpcode);
DEFINE_HANDLER(CMSG_BATTLEFIELD_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlefieldListOpcode);
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index e7b63f99464..d5aa44ac58b 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -153,14 +153,6 @@ namespace WorldPackets
enum class ConnectToSerial : uint32;
}
- namespace Azerite
- {
- class AzeriteEmpoweredItemSelectPower;
- class AzeriteEmpoweredItemViewed;
- class AzeriteEssenceUnlockMilestone;
- class AzeriteEssenceActivateEssence;
- }
-
namespace Bank
{
class AutoBankItem;
@@ -1830,13 +1822,6 @@ class TC_GAME_API WorldSession
// Scenario
void HandleQueryScenarioPOI(WorldPackets::Scenario::QueryScenarioPOI& queryScenarioPOI);
- // Azerite
- void HandleAzeriteEssenceUnlockMilestone(WorldPackets::Azerite::AzeriteEssenceUnlockMilestone& azeriteEssenceUnlockMilestone);
- void HandleAzeriteEssenceActivateEssence(WorldPackets::Azerite::AzeriteEssenceActivateEssence& azeriteEssenceActivateEssence);
- void HandleAzeriteEmpoweredItemViewed(WorldPackets::Azerite::AzeriteEmpoweredItemViewed& azeriteEmpoweredItemViewed);
- void HandleAzeriteEmpoweredItemSelectPower(WorldPackets::Azerite::AzeriteEmpoweredItemSelectPower& azeriteEmpoweredItemSelectPower);
- void SendAzeriteRespecNPC(ObjectGuid npc);
-
void HandleRequestLatestSplashScreen(WorldPackets::Misc::RequestLatestSplashScreen& requestLatestSplashScreen);
void HandleSocialContractRequest(WorldPackets::Social::SocialContractRequest& socialContractRequest);
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index ce642c60e63..e8393cf19d0 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -555,7 +555,7 @@ NonDefaultConstructible<pAuraEffectHandler> AuraEffectHandler[TOTAL_AURAS]=
&AuraEffect::HandleNULL, //484 SPELL_AURA_ALLOW_INTERRUPT_SPELL
&AuraEffect::HandleModMovementForceMagnitude, //485 SPELL_AURA_MOD_MOVEMENT_FORCE_MAGNITUDE
&AuraEffect::HandleNULL, //486
- &AuraEffect::HandleCosmeticMounted, //487 SPELL_AURA_COSMETIC_MOUNTED
+ &AuraEffect::HandleNULL, //487 SPELL_AURA_COSMETIC_MOUNTED
&AuraEffect::HandleNULL, //488
&AuraEffect::HandleModAlternativeDefaultLanguage, //489 SPELL_AURA_MOD_ALTERNATIVE_DEFAULT_LANGUAGE
&AuraEffect::HandleNULL, //490
@@ -609,7 +609,7 @@ NonDefaultConstructible<pAuraEffectHandler> AuraEffectHandler[TOTAL_AURAS]=
&AuraEffect::HandleUnused, //538 SPELL_AURA_MOD_FAKE_INEBRIATION_MOVEMENT_ONLY handled clientside
&AuraEffect::HandleNoImmediateEffect, //539 SPELL_AURA_ALLOW_MOUNT_IN_COMBAT implemented in SpellInfo::CanBeUsedInCombat
&AuraEffect::HandleNULL, //540 SPELL_AURA_MOD_SUPPORT_STAT
- &AuraEffect::HandleModRequiredMountCapabilityFlags, //541 SPELL_AURA_MOD_REQUIRED_MOUNT_CAPABILITY_FLAGS
+ &AuraEffect::HandleNULL, //541 SPELL_AURA_MOD_REQUIRED_MOUNT_CAPABILITY_FLAGS
&AuraEffect::HandleNULL, //542
&AuraEffect::HandleNULL, //543
&AuraEffect::HandleNULL, //544
@@ -2470,7 +2470,8 @@ void AuraEffect::HandleAuraModSilence(AuraApplication const* aurApp, uint8 mode,
if (apply)
{
- target->SetSilencedSchoolMask(SpellSchoolMask(GetMiscValue()));
+ // @TODO: Fix for 4.4.0
+ // target->SetUnitFlag(UNIT_FLAG_SILENCED);
// call functions which may have additional effects after changing state of unit
// Stop cast only spells vs PreventionType & SPELL_PREVENTION_TYPE_SILENCE
@@ -2482,14 +2483,12 @@ void AuraEffect::HandleAuraModSilence(AuraApplication const* aurApp, uint8 mode,
}
else
{
- int32 silencedSchoolMask = 0;
- for (AuraEffect const* auraEffect : target->GetAuraEffectsByType(SPELL_AURA_MOD_SILENCE))
- silencedSchoolMask |= auraEffect->GetMiscValue();
-
- for (AuraEffect const* auraEffect : target->GetAuraEffectsByType(SPELL_AURA_MOD_PACIFY_SILENCE))
- silencedSchoolMask |= auraEffect->GetMiscValue();
+ // do not remove unit flag if there are more than this auraEffect of that kind on unit on unit
+ if (target->HasAuraType(SPELL_AURA_MOD_SILENCE) || target->HasAuraType(SPELL_AURA_MOD_PACIFY_SILENCE))
+ return;
- target->ReplaceAllSilencedSchoolMask(SpellSchoolMask(silencedSchoolMask));
+ // @TODO: Fix for 4.4.0
+ // target->RemoveUnitFlag(UNIT_FLAG_SILENCED);
}
}
@@ -4111,8 +4110,6 @@ void AuraEffect::HandleModManaCostPct(AuraApplication const* aurApp, uint8 mode,
{
if (!(mode & (AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK | AURA_EFFECT_HANDLE_STAT)))
return;
-
- aurApp->GetTarget()->ApplyModManaCostMultiplier(GetAmount() / 100.0f, apply);
}
void AuraEffect::HandleAuraModPowerDisplay(AuraApplication const* aurApp, uint8 mode, bool apply) const
@@ -4667,11 +4664,11 @@ void AuraEffect::HandleModPowerCost(AuraApplication const* aurApp, uint8 mode, b
if (!(GetMiscValueB() & (1 << POWER_MANA)))
return;
- Unit* target = aurApp->GetTarget();
-
- for (int i = 0; i < MAX_SPELL_SCHOOL; ++i)
- if (GetMiscValue() & (1 << i))
- target->ApplyModManaCostModifier(SpellSchools(i), GetAmount(), apply);
+ // Unit* target = aurApp->GetTarget();
+ //
+ // for (int i = 0; i < MAX_SPELL_SCHOOL; ++i)
+ // if (GetMiscValue() & (1 << i))
+ // target->ApplyModManaCostModifier(SpellSchools(i), GetAmount(), apply);
}
void AuraEffect::HandleArenaPreparation(AuraApplication const* aurApp, uint8 mode, bool apply) const
@@ -6379,44 +6376,6 @@ void AuraEffect::HandleMountRestrictions(AuraApplication const* aurApp, uint8 mo
aurApp->GetTarget()->UpdateMountCapability();
}
-void AuraEffect::HandleCosmeticMounted(AuraApplication const* aurApp, uint8 mode, bool apply) const
-{
- if (!(mode & AURA_EFFECT_HANDLE_REAL))
- return;
-
- if (apply)
- aurApp->GetTarget()->SetCosmeticMountDisplayId(GetMiscValue());
- else
- aurApp->GetTarget()->SetCosmeticMountDisplayId(0); // set cosmetic mount to 0, even if multiple auras are active; tested with zandalari racial + divine steed
-
- Player* playerTarget = aurApp->GetTarget()->ToPlayer();
- if (!playerTarget)
- return;
-
- playerTarget->SendMovementSetCollisionHeight(playerTarget->GetCollisionHeight(), WorldPackets::Movement::UpdateCollisionHeightReason::Force);
-}
-
-void AuraEffect::HandleModRequiredMountCapabilityFlags(AuraApplication const* aurApp, uint8 mode, bool apply) const
-{
- if (!(mode & AURA_EFFECT_HANDLE_REAL))
- return;
-
- Player* playerTarget = aurApp->GetTarget()->ToPlayer();
- if (!playerTarget)
- return;
-
- if (apply)
- playerTarget->SetRequiredMountCapabilityFlag(GetMiscValue());
- else
- {
- int32 mountCapabilityFlags = 0;
- for (AuraEffect* otherAura : playerTarget->GetAuraEffectsByType(GetAuraType()))
- mountCapabilityFlags |= otherAura->GetMiscValue();
-
- playerTarget->ReplaceAllRequiredMountCapabilityFlags(mountCapabilityFlags);
- }
-}
-
void AuraEffect::HandleSuppressItemPassiveEffectBySpellLabel(AuraApplication const* aurApp, uint8 mode, bool /*apply*/) const
{
if (!(mode & AURA_EFFECT_HANDLE_REAL))
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h
index 8260d96f621..7f7321d80d0 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.h
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.h
@@ -333,8 +333,6 @@ class TC_GAME_API AuraEffect
void HandleTriggerSpellOnExpire(AuraApplication const* aurApp, uint8 mode, bool apply) const;
void HandleStoreTeleportReturnPoint(AuraApplication const* aurApp, uint8 mode, bool apply) const;
void HandleMountRestrictions(AuraApplication const* aurApp, uint8 mode, bool apply) const;
- void HandleCosmeticMounted(AuraApplication const* aurApp, uint8 mode, bool apply) const;
- void HandleModRequiredMountCapabilityFlags(AuraApplication const* aurApp, uint8 mode, bool apply) const;
void HandleSuppressItemPassiveEffectBySpellLabel(AuraApplication const* aurApp, uint8 mode, bool apply) const;
void HandleForceBreathBar(AuraApplication const* aurApp, uint8 mode, bool apply) const;
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 0086030683f..1bb329d982d 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -16,7 +16,6 @@
*/
#include "Spell.h"
-#include "AzeriteEmpoweredItem.h"
#include "Battlefield.h"
#include "BattlefieldMgr.h"
#include "Battleground.h"
@@ -6856,7 +6855,8 @@ SpellCastResult Spell::CheckCasterAuras(int32* param1) const
else if ((m_spellInfo->Mechanic & MECHANIC_IMMUNE_SHIELD) && m_caster->ToUnit() && m_caster->ToUnit()->HasAuraWithMechanic(1 << MECHANIC_BANISH))
result = SPELL_FAILED_STUNNED;
}
- else if (unitCaster->IsSilenced(m_spellSchoolMask) && m_spellInfo->PreventionType & SPELL_PREVENTION_TYPE_SILENCE && !CheckSpellCancelsSilence(param1))
+ // @TODO: Fix for 4.4.0
+ else if (/*unitCaster->HasUnitFlag(UNIT_FLAG_SILENCED) &&*/ m_spellInfo->PreventionType & SPELL_PREVENTION_TYPE_SILENCE && !CheckSpellCancelsSilence(param1))
result = SPELL_FAILED_SILENCED;
else if (unitflag & UNIT_FLAG_PACIFIED && m_spellInfo->PreventionType & SPELL_PREVENTION_TYPE_PACIFY && !CheckSpellCancelsPacify(param1))
result = SPELL_FAILED_PACIFIED;
@@ -7735,37 +7735,6 @@ SpellCastResult Spell::CheckItems(int32* param1 /*= nullptr*/, int32* param2 /*=
return SPELL_FAILED_ITEM_AT_MAX_CHARGES;
break;
}
- case SPELL_EFFECT_RESPEC_AZERITE_EMPOWERED_ITEM:
- {
- Item const* item = m_targets.GetItemTarget();
- if (!item)
- return SPELL_FAILED_AZERITE_EMPOWERED_ONLY;
-
- if (item->GetOwnerGUID() != m_caster->GetGUID())
- return SPELL_FAILED_DONT_REPORT;
-
- AzeriteEmpoweredItem const* azeriteEmpoweredItem = item->ToAzeriteEmpoweredItem();
- if (!azeriteEmpoweredItem)
- return SPELL_FAILED_AZERITE_EMPOWERED_ONLY;
-
- bool hasSelections = false;
- for (int32 tier = 0; tier < MAX_AZERITE_EMPOWERED_TIER; ++tier)
- {
- if (azeriteEmpoweredItem->GetSelectedAzeritePower(tier))
- {
- hasSelections = true;
- break;
- }
- }
-
- if (!hasSelections)
- return SPELL_FAILED_AZERITE_EMPOWERED_NO_CHOICES_TO_UNDO;
-
- if (!m_caster->ToPlayer()->HasEnoughMoney(azeriteEmpoweredItem->GetRespecCost()))
- return SPELL_FAILED_DONT_REPORT;
-
- break;
- }
default:
break;
}
@@ -9360,14 +9329,6 @@ CastSpellExtraArgs& CastSpellExtraArgs::SetTriggeringAura(AuraEffect const* trig
return *this;
}
-SpellCastVisual::operator UF::SpellCastVisual() const
-{
- UF::SpellCastVisual visual;
- visual.SpellXSpellVisualID = SpellXSpellVisualID;
- visual.ScriptVisualID = ScriptVisualID;
- return visual;
-}
-
SpellCastVisual::operator WorldPackets::Spells::SpellCastVisual() const
{
return { int32(SpellXSpellVisualID), int32(ScriptVisualID) };
diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h
index 9c452f59c9a..9deaa008721 100644
--- a/src/server/game/Spells/Spell.h
+++ b/src/server/game/Spells/Spell.h
@@ -412,8 +412,6 @@ class TC_GAME_API Spell
void EffectGiveHonor();
void EffectJumpCharge();
void EffectLearnTransmogSet();
- void EffectRespecAzeriteEmpoweredItem();
- void EffectLearnAzeriteEssencePower();
void EffectCreatePrivateConversation();
void EffectSendChatMessage();
void EffectGrantBattlePetExperience();
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 3c4a40ff587..ebc57399656 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -18,8 +18,6 @@
#include "Spell.h"
#include "AccountMgr.h"
#include "AreaTrigger.h"
-#include "AzeriteEmpoweredItem.h"
-#include "AzeriteItem.h"
#include "Battleground.h"
#include "BattlegroundMgr.h"
#include "BattlePetMgr.h"
@@ -346,13 +344,13 @@ NonDefaultConstructible<SpellEffectHandlerFn> SpellEffectHandlers[TOTAL_SPELL_EF
&Spell::EffectUnused, //256 SPELL_EFFECT_256
&Spell::EffectUnused, //257 SPELL_EFFECT_257
&Spell::EffectNULL, //258 SPELL_EFFECT_MODIFY_KEYSTONE
- &Spell::EffectRespecAzeriteEmpoweredItem, //259 SPELL_EFFECT_RESPEC_AZERITE_EMPOWERED_ITEM
+ &Spell::EffectNULL, //259 SPELL_EFFECT_RESPEC_AZERITE_EMPOWERED_ITEM
&Spell::EffectNULL, //260 SPELL_EFFECT_SUMMON_STABLED_PET
&Spell::EffectNULL, //261 SPELL_EFFECT_SCRAP_ITEM
&Spell::EffectUnused, //262 SPELL_EFFECT_262
&Spell::EffectNULL, //263 SPELL_EFFECT_REPAIR_ITEM
&Spell::EffectNULL, //264 SPELL_EFFECT_REMOVE_GEM
- &Spell::EffectLearnAzeriteEssencePower, //265 SPELL_EFFECT_LEARN_AZERITE_ESSENCE_POWER
+ &Spell::EffectNULL, //265 SPELL_EFFECT_LEARN_AZERITE_ESSENCE_POWER
&Spell::EffectNULL, //266 SPELL_EFFECT_SET_ITEM_BONUS_LIST_GROUP_ENTRY
&Spell::EffectCreatePrivateConversation, //267 SPELL_EFFECT_CREATE_PRIVATE_CONVERSATION
&Spell::EffectNULL, //268 SPELL_EFFECT_APPLY_MOUNT_EQUIPMENT
@@ -5770,73 +5768,6 @@ void Spell::EffectLearnTransmogSet()
unitTarget->ToPlayer()->GetSession()->GetCollectionMgr()->AddTransmogSet(effectInfo->MiscValue);
}
-void Spell::EffectRespecAzeriteEmpoweredItem()
-{
- if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET)
- return;
-
- if (!itemTarget || !itemTarget->IsAzeriteEmpoweredItem())
- return;
-
- Player* owner = m_caster->ToPlayer();
- if (!owner)
- return;
-
- AzeriteEmpoweredItem* azeriteEmpoweredItem = itemTarget->ToAzeriteEmpoweredItem();
- owner->ModifyMoney(-azeriteEmpoweredItem->GetRespecCost());
-
- // reapply all item mods - item level change affects stats and auras
- if (azeriteEmpoweredItem->IsEquipped())
- owner->_ApplyItemMods(azeriteEmpoweredItem, azeriteEmpoweredItem->GetSlot(), false);
-
- azeriteEmpoweredItem->ClearSelectedAzeritePowers();
-
- if (azeriteEmpoweredItem->IsEquipped())
- owner->_ApplyItemMods(azeriteEmpoweredItem, azeriteEmpoweredItem->GetSlot(), true);
-
- azeriteEmpoweredItem->SetState(ITEM_CHANGED, owner);
- owner->SetNumRespecs(owner->GetNumRespecs() + 1);
-}
-
-void Spell::EffectLearnAzeriteEssencePower()
-{
- if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET)
- return;
-
- Player* playerTarget = unitTarget ? unitTarget->ToPlayer() : nullptr;
- if (!playerTarget)
- return;
-
- Item* heartOfAzeroth = playerTarget->GetItemByEntry(ITEM_ID_HEART_OF_AZEROTH, ItemSearchLocation::Everywhere);
- if (!heartOfAzeroth)
- return;
-
- AzeriteItem* azeriteItem = heartOfAzeroth->ToAzeriteItem();
- if (!azeriteItem)
- return;
-
- // remove old rank and apply new one
- if (azeriteItem->IsEquipped())
- {
- if (UF::SelectedAzeriteEssences const* selectedEssences = azeriteItem->GetSelectedAzeriteEssences())
- {
- for (int32 slot = 0; slot < MAX_AZERITE_ESSENCE_SLOT; ++slot)
- {
- if (selectedEssences->AzeriteEssenceID[slot] == uint32(effectInfo->MiscValue))
- {
- bool major = AzeriteItemMilestoneType(sDB2Manager.GetAzeriteItemMilestonePower(slot)->Type) == AzeriteItemMilestoneType::MajorEssence;
- playerTarget->ApplyAzeriteEssence(azeriteItem, effectInfo->MiscValue, MAX_AZERITE_ESSENCE_RANK, major, false);
- playerTarget->ApplyAzeriteEssence(azeriteItem, effectInfo->MiscValue, effectInfo->MiscValueB, major, false);
- break;
- }
- }
- }
- }
-
- azeriteItem->SetEssenceRank(effectInfo->MiscValue, effectInfo->MiscValueB);
- azeriteItem->SetState(ITEM_CHANGED, playerTarget);
-}
-
void Spell::EffectCreatePrivateConversation()
{
if (effectHandleMode != SPELL_EFFECT_HANDLE_LAUNCH_TARGET)
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp
index 74676b7db47..e8f973eebd9 100644
--- a/src/server/game/Spells/SpellInfo.cpp
+++ b/src/server/game/Spells/SpellInfo.cpp
@@ -4032,9 +4032,6 @@ Optional<SpellPowerCost> SpellInfo::CalcPowerCost(SpellPowerEntry const* power,
}
}
- if (power->PowerType == POWER_MANA)
- powerCost = float(powerCost) * (1.0f + unitCaster->m_unitData->ManaCostMultiplier);
-
// power cost cannot become negative if initially positive
if (initiallyNegative != (powerCost < 0))
powerCost = 0;
@@ -4116,7 +4113,7 @@ inline float CalcPPMCritMod(SpellProcsPerMinuteModEntry const* mod, Unit* caster
float crit = player->m_activePlayerData->CritPercentage;
float rangedCrit = player->m_activePlayerData->RangedCritPercentage;
- float spellCrit = player->m_activePlayerData->SpellCritPercentage;
+ float spellCrit = player->m_activePlayerData->SpellCritPercentage[0];
switch (mod->Param)
{
diff --git a/src/server/game/Tools/PlayerDump.cpp b/src/server/game/Tools/PlayerDump.cpp
index 2737ca0e6ab..8cfac55b236 100644
--- a/src/server/game/Tools/PlayerDump.cpp
+++ b/src/server/game/Tools/PlayerDump.cpp
@@ -136,10 +136,6 @@ DumpTable const DumpTables[] =
{ "character_gifts", DTT_ITEM_GIFT }, // must be after item_instance
{ "item_instance_artifact", DTT_ITEM_TABLE }, // must be after item_instance
{ "item_instance_artifact_powers", DTT_ITEM_TABLE }, // must be after item_instance
- { "item_instance_azerite", DTT_ITEM_TABLE }, // must be after item_instance
- { "item_instance_azerite_empowered", DTT_ITEM_TABLE }, // must be after item_instance
- { "item_instance_azerite_milestone_power", DTT_ITEM_TABLE }, // must be after item_instance
- { "item_instance_azerite_unlocked_essence", DTT_ITEM_TABLE }, // must be after item_instance
{ "item_instance_gems", DTT_ITEM_TABLE }, // must be after item_instance
{ "item_instance_modifiers", DTT_ITEM_TABLE }, // must be after item_instance
{ "item_instance_transmog", DTT_ITEM_TABLE }, // must be after item_instance
diff --git a/src/server/game/Tools/PlayerDump.h b/src/server/game/Tools/PlayerDump.h
index 7858acff731..e15751accc1 100644
--- a/src/server/game/Tools/PlayerDump.h
+++ b/src/server/game/Tools/PlayerDump.h
@@ -52,9 +52,7 @@ enum DumpTableType
DTT_ITEM_GIFT, // <- item guids // character_gifts
- DTT_ITEM_TABLE, // <- item guids // item_instance_artifact, item_instance_artifact_powers, item_instance_azerite
- // item_instance_azerite_empowered, item_instance_azerite_milestone_power,
- // item_instance_azerite_unlocked_essence, item_instance_gems, item_instance_modifiers,
+ DTT_ITEM_TABLE, // <- item guids // item_instance_artifact, item_instance_artifact_powers, item_instance_gems, item_instance_modifiers,
// item_instance_transmog
DTT_PET, // -> pet guids collection // character_pet
diff --git a/src/server/scripts/Commands/cs_lookup.cpp b/src/server/scripts/Commands/cs_lookup.cpp
index cfd9b4fd99a..354820cb2ec 100644
--- a/src/server/scripts/Commands/cs_lookup.cpp
+++ b/src/server/scripts/Commands/cs_lookup.cpp
@@ -684,8 +684,7 @@ public:
if (handler->GetSession())
{
int32 maxLevel = 0;
- if (Optional<ContentTuningLevels> questLevels = sDB2Manager.GetContentTuningData(questTemplatePair.second.GetContentTuningId(),
- handler->GetSession()->GetPlayer()->m_playerData->CtrOptions->ContentTuningConditionMask))
+ if (Optional<ContentTuningLevels> questLevels = sDB2Manager.GetContentTuningData(questTemplatePair.second.GetContentTuningId(), 0))
maxLevel = questLevels->MaxLevel;
int32 scalingFactionGroup = 0;
@@ -744,8 +743,7 @@ public:
if (handler->GetSession())
{
int32 maxLevel = 0;
- if (Optional<ContentTuningLevels> questLevels = sDB2Manager.GetContentTuningData(questTemplatePair.second.GetContentTuningId(),
- handler->GetSession()->GetPlayer()->m_playerData->CtrOptions->ContentTuningConditionMask))
+ if (Optional<ContentTuningLevels> questLevels = sDB2Manager.GetContentTuningData(questTemplatePair.second.GetContentTuningId(), 0))
maxLevel = questLevels->MaxLevel;
int32 scalingFactionGroup = 0;
@@ -814,8 +812,7 @@ public:
if (handler->GetSession())
{
int32 maxLevel = 0;
- if (Optional<ContentTuningLevels> questLevels = sDB2Manager.GetContentTuningData(quest->GetContentTuningId(),
- handler->GetSession()->GetPlayer()->m_playerData->CtrOptions->ContentTuningConditionMask))
+ if (Optional<ContentTuningLevels> questLevels = sDB2Manager.GetContentTuningData(quest->GetContentTuningId(), 0))
maxLevel = questLevels->MaxLevel;
int32 scalingFactionGroup = 0;
diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp
index 2b131d686f2..a13eaa70265 100644
--- a/src/server/scripts/Spells/spell_warlock.cpp
+++ b/src/server/scripts/Spells/spell_warlock.cpp
@@ -158,9 +158,10 @@ class spell_warl_chaos_bolt : public SpellScript
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
+ // @TODO: Fix for 4.4.0
void HandleDummy(SpellEffIndex /*effIndex*/)
{
- SetHitDamage(GetHitDamage() + CalculatePct(GetHitDamage(), GetCaster()->ToPlayer()->m_activePlayerData->SpellCritPercentage));
+ SetHitDamage(GetHitDamage() + CalculatePct(GetHitDamage(), GetCaster()->ToPlayer()->m_activePlayerData->SpellCritPercentage[0]));
}
void CalcCritChance(Unit const* /*victim*/, float& critChance)