Core: Updated to 12.0.0

Signed-off-by: luis <[email protected]>
This commit is contained in:
Shauren
2026-01-29 08:40:48 -03:00
committed by luis
parent 8d95b1f130
commit d71835475e
86 changed files with 8283 additions and 5482 deletions
@@ -0,0 +1,23 @@
DELETE FROM `build_info` WHERE `build` IN (65560);
INSERT INTO `build_info` (`build`,`majorVersion`,`minorVersion`,`bugfixVersion`,`hotfixVersion`) VALUES
(65560,12,0,0,NULL);
DELETE FROM `build_auth_key` WHERE `build`=65560 AND `platform`='Mac' AND `arch`='A64' AND `type`='WoW';
DELETE FROM `build_auth_key` WHERE `build`=65560 AND `platform`='Mac' AND `arch`='A64' AND `type`='WoWC';
DELETE FROM `build_auth_key` WHERE `build`=65560 AND `platform`='Mac' AND `arch`='x64' AND `type`='WoW';
DELETE FROM `build_auth_key` WHERE `build`=65560 AND `platform`='Mac' AND `arch`='x64' AND `type`='WoWC';
DELETE FROM `build_auth_key` WHERE `build`=65560 AND `platform`='Win' AND `arch`='A64' AND `type`='WoW';
DELETE FROM `build_auth_key` WHERE `build`=65560 AND `platform`='Win' AND `arch`='x64' AND `type`='WoW';
DELETE FROM `build_auth_key` WHERE `build`=65560 AND `platform`='Win' AND `arch`='x64' AND `type`='WoWC';
INSERT INTO `build_auth_key` (`build`,`platform`,`arch`,`type`,`key`) VALUES
(65560,'Mac','A64','WoW',0x764AEDCD3D0598B4B0E4800952F35B21),
(65560,'Mac','A64','WoWC',0x6C5142AD00EF0409698E7F15CEC59432),
(65560,'Mac','x64','WoW',0x8277339BE0CE9EF84EF69A88A9986D50),
(65560,'Mac','x64','WoWC',0x066F8A98D49D6795583A2152C36A7B9B),
(65560,'Win','A64','WoW',0xD46670909EAA1861344E421111A4D8AE),
(65560,'Win','x64','WoW',0xAA9B762F17CBDDF63B367E8A4047E301),
(65560,'Win','x64','WoWC',0x438E7EE1E17B986E55B828609FD1773D);
UPDATE `realmlist` SET `gamebuild`=65560 WHERE `gamebuild`=65299;
ALTER TABLE `realmlist` CHANGE `gamebuild` `gamebuild` int unsigned NOT NULL DEFAULT '65560';
@@ -0,0 +1 @@
ALTER TABLE `character_stats` ADD `spirit` int unsigned NOT NULL DEFAULT '0' AFTER `intellect`;
@@ -0,0 +1,171 @@
ALTER TABLE `area_trigger` MODIFY `Flags` int NOT NULL DEFAULT 0 AFTER `AreaTriggerActionSetID`;
ALTER TABLE `artifact` MODIFY `Flags` int NOT NULL DEFAULT 0 AFTER `ChrSpecializationID`;
ALTER TABLE `artifact_appearance` MODIFY `Flags` int NOT NULL DEFAULT 0 AFTER `UiAltItemAppearanceID`;
ALTER TABLE `artifact_appearance_set` MODIFY `Flags` int NOT NULL DEFAULT 0 AFTER `ForgeAttachmentOverride`;
ALTER TABLE `artifact_power` MODIFY `Flags` int NOT NULL DEFAULT 0 AFTER `Label`;
ALTER TABLE `battle_pet_ability` MODIFY `Flags` int NOT NULL DEFAULT 0 AFTER `BattlePetVisualID`;
ALTER TABLE `battlemaster_list` ADD `InstanceType` tinyint NOT NULL DEFAULT 0 AFTER `LongDescription`;
ALTER TABLE `cfg_categories` MODIFY `Flags` int NOT NULL DEFAULT 0 AFTER `ExistingCharsetMask`;
ALTER TABLE `crafting_quality` ADD `CraftingQualityAtlasSetID` int NOT NULL DEFAULT 0 AFTER `QualityTier`;
ALTER TABLE `currency_types`
ADD `RecraftReagentCountPercentage` float NOT NULL DEFAULT 0 AFTER `OrderIndex`,
ADD `OrderSource` tinyint UNSIGNED NOT NULL DEFAULT 0 AFTER `RecraftReagentCountPercentage`,
ADD `MCRCurrencyID` int NOT NULL DEFAULT 0 AFTER `OrderSource`;
ALTER TABLE `difficulty`
MODIFY `FallbackDifficultyID` smallint NOT NULL DEFAULT 0 AFTER `OldEnumValue`,
MODIFY `Flags` int NOT NULL DEFAULT 0 AFTER `MaxPlayers`,
MODIFY `ToggleDifficultyID` smallint NOT NULL DEFAULT 0 AFTER `ItemContext`;
ALTER TABLE `dungeon_encounter` MODIFY `DifficultyID` smallint NOT NULL DEFAULT 0 AFTER `MapID`;
ALTER TABLE `garr_plot`
MODIFY `Flags` int NOT NULL DEFAULT 0 AFTER `AllianceConstructObjID`,
DROP `UiCategoryID`;
ALTER TABLE `holidays`
MODIFY `CalendarFilterType` tinyint UNSIGNED NOT NULL DEFAULT 0 AFTER `Priority`,
MODIFY `Flags` int NOT NULL DEFAULT 0 AFTER `CalendarFilterType`;
ALTER TABLE `item`
ADD `Unknown1200` tinyint UNSIGNED NOT NULL DEFAULT 0 AFTER `ModifiedCraftingReagentItemID`,
CHANGE `Unknown1127` `ItemSquishEraID` int NOT NULL DEFAULT 0 AFTER `CraftingQualityID`,
ADD `RecraftReagentCountPercentage` float NOT NULL DEFAULT 0 AFTER `ItemSquishEraID`,
ADD `OrderSource` tinyint UNSIGNED NOT NULL DEFAULT 0 AFTER `RecraftReagentCountPercentage`;
ALTER TABLE `item_child_equipment` MODIFY `ChildItemEquipSlot` int NOT NULL DEFAULT 0 AFTER `ChildItemID`;
ALTER TABLE `item_context_picker_entry` MODIFY `Flags` int NOT NULL DEFAULT 0 AFTER `LabelID`;
ALTER TABLE `item_effect` MODIFY `TriggerType` tinyint UNSIGNED NOT NULL DEFAULT 0 AFTER `LegacySlotIndex`;
ALTER TABLE `item_limit_category` MODIFY `Flags` int NOT NULL DEFAULT 0 AFTER `Quantity`;
ALTER TABLE `item_scaling_config` CHANGE `Unknown1125` `ItemSquishEraID` int NOT NULL DEFAULT 0 AFTER `RequiredLevel`;
ALTER TABLE `item_set` MODIFY `SetFlags` int NOT NULL DEFAULT 0 AFTER `Name`;
ALTER TABLE `item_sparse` CHANGE `Unknown1127` `ItemSquishEraID` int NOT NULL DEFAULT 0 AFTER `ItemLevelOffsetItemLevel`;
--
-- Table structure for table `item_squish_era`
--
DROP TABLE IF EXISTS `item_squish_era`;
CREATE TABLE `item_squish_era` (
`ID` int unsigned NOT NULL DEFAULT '0',
`Patch` int NOT NULL DEFAULT '0',
`CurveID` int NOT NULL DEFAULT '0',
`Flags` int NOT NULL DEFAULT '0',
`VerifiedBuild` int NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`,`VerifiedBuild`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
ALTER TABLE `lfg_dungeons` MODIFY `DifficultyID` smallint NOT NULL DEFAULT 0 AFTER `MapID`;
ALTER TABLE `liquid_type`
ADD `Color3` int NOT NULL DEFAULT 0 AFTER `Color2`,
ADD `Float19` float NOT NULL DEFAULT 0 AFTER `Float18`,
ADD `Float20` float NOT NULL DEFAULT 0 AFTER `Float19`,
ADD `Float21` float NOT NULL DEFAULT 0 AFTER `Float20`,
ADD `Float22` float NOT NULL DEFAULT 0 AFTER `Float21`,
ADD `Float23` float NOT NULL DEFAULT 0 AFTER `Float22`,
ADD `Float24` float NOT NULL DEFAULT 0 AFTER `Float23`,
ADD `Float25` float NOT NULL DEFAULT 0 AFTER `Float24`,
ADD `Float26` float NOT NULL DEFAULT 0 AFTER `Float25`,
ADD `Float27` float NOT NULL DEFAULT 0 AFTER `Float26`,
ADD `Float28` float NOT NULL DEFAULT 0 AFTER `Float27`,
ADD `Float29` float NOT NULL DEFAULT 0 AFTER `Float28`,
ADD `Float30` float NOT NULL DEFAULT 0 AFTER `Float29`,
ADD `Float31` float NOT NULL DEFAULT 0 AFTER `Float30`,
ADD `Float32` float NOT NULL DEFAULT 0 AFTER `Float31`,
ADD `Float33` float NOT NULL DEFAULT 0 AFTER `Float32`,
ADD `Float34` float NOT NULL DEFAULT 0 AFTER `Float33`,
ADD `Float35` float NOT NULL DEFAULT 0 AFTER `Float34`,
ADD `Float36` float NOT NULL DEFAULT 0 AFTER `Float35`,
ADD `Float37` float NOT NULL DEFAULT 0 AFTER `Float36`,
ADD `Float38` float NOT NULL DEFAULT 0 AFTER `Float37`;
ALTER TABLE `map_difficulty` MODIFY `DifficultyID` smallint NOT NULL DEFAULT 0 AFTER `ID`;
ALTER TABLE `override_spell_data` MODIFY `Flags` int NOT NULL DEFAULT 0 AFTER `PlayerActionBarFileDataID`;
ALTER TABLE `player_condition` MODIFY `PowerTypeValue` tinyint NOT NULL DEFAULT 0 AFTER `PowerTypeComp`;
ALTER TABLE `scenario` MODIFY `Type` int NOT NULL DEFAULT 0 AFTER `AreaTableID`;
ALTER TABLE `scenario` MODIFY `Flags` int NOT NULL DEFAULT 0 AFTER `Type`;
ALTER TABLE `scenario_step` MODIFY `Flags` int NOT NULL DEFAULT 0 AFTER `OrderIndex`;
ALTER TABLE `scene_script_package` ADD `Flags` int NOT NULL DEFAULT 0 AFTER `Name`;
ALTER TABLE `spell_aura_options` MODIFY `DifficultyID` smallint NOT NULL DEFAULT 0 AFTER `ID`;
ALTER TABLE `spell_aura_restrictions`
MODIFY `DifficultyID` smallint NOT NULL DEFAULT 0 AFTER `ID`,
MODIFY `CasterAuraType` smallint NOT NULL DEFAULT 0 AFTER `ExcludeTargetAuraSpell`,
MODIFY `TargetAuraType` smallint NOT NULL DEFAULT 0 AFTER `CasterAuraType`,
MODIFY `ExcludeCasterAuraType` smallint NOT NULL DEFAULT 0 AFTER `TargetAuraType`,
MODIFY `ExcludeTargetAuraType` smallint NOT NULL DEFAULT 0 AFTER `ExcludeCasterAuraType`;
ALTER TABLE `spell_categories`
ADD `DiminishType` int NOT NULL DEFAULT 0 AFTER `DefenseType`,
MODIFY `DifficultyID` smallint NOT NULL DEFAULT 0 AFTER `ID`,
MODIFY `DefenseType` tinyint NOT NULL DEFAULT 0 AFTER `Category`;
ALTER TABLE `spell_cooldowns` MODIFY `DifficultyID` smallint NOT NULL DEFAULT 0 AFTER `ID`;
ALTER TABLE `spell_duration` ADD `DurationPerResource` int NOT NULL DEFAULT 0 AFTER `MaxDuration`;
ALTER TABLE `spell_effect`
ADD `TargetNodeGraph` int NOT NULL DEFAULT 0 AFTER `ScalingClass`,
MODIFY `DifficultyID` smallint NOT NULL DEFAULT 0 AFTER `EffectAura`;
ALTER TABLE `spell_interrupts` MODIFY `DifficultyID` smallint NOT NULL DEFAULT 0 AFTER `ID`;
ALTER TABLE `spell_levels` MODIFY `DifficultyID` smallint NOT NULL DEFAULT 0 AFTER `ID`;
ALTER TABLE `spell_misc`
ADD `Attributes17` int NOT NULL DEFAULT 0 AFTER `Attributes16`,
MODIFY `DifficultyID` smallint NOT NULL DEFAULT 0 AFTER `Attributes17`;
ALTER TABLE `spell_power_difficulty` MODIFY `DifficultyID` smallint NOT NULL DEFAULT 0 AFTER `ID`;
ALTER TABLE `spell_procs_per_minute` MODIFY `Flags` int NOT NULL DEFAULT 0 AFTER `BaseProcRate`;
ALTER TABLE `spell_procs_per_minute_mod` MODIFY `Type` int NOT NULL DEFAULT 0 AFTER `ID`;
ALTER TABLE `spell_range` MODIFY `Flags` int NOT NULL DEFAULT 0 AFTER `DisplayNameShort`;
ALTER TABLE `spell_reagents_currency`
MODIFY `CurrencyTypesID` int NOT NULL DEFAULT 0 AFTER `SpellID`,
MODIFY `CurrencyCount` int NOT NULL DEFAULT 0 AFTER `CurrencyTypesID`,
ADD `OverrideRecraftCurrencyCount` int NOT NULL DEFAULT 0 AFTER `CurrencyCount`,
ADD `OrderSource` tinyint UNSIGNED NOT NULL DEFAULT 0 AFTER `OverrideRecraftCurrencyCount`;
ALTER TABLE `spell_scaling` DROP `ScalesFromItemLevel`;
ALTER TABLE `spell_target_restrictions` MODIFY `DifficultyID` smallint NOT NULL DEFAULT 0 AFTER `ID`;
ALTER TABLE `spell_visual_effect_name`
MODIFY `Flags` int NOT NULL DEFAULT 0 AFTER `Alpha`,
MODIFY `Type` int NOT NULL DEFAULT 0 AFTER `EffectRadius`;
ALTER TABLE `spell_visual_missile` MODIFY `Flags` int NOT NULL DEFAULT 0 AFTER `FollowGroundApproach`;
ALTER TABLE `spell_x_spell_visual` MODIFY `DifficultyID` smallint NOT NULL DEFAULT 0 AFTER `ID`;
ALTER TABLE `trait_edge` MODIFY `Type` tinyint UNSIGNED NOT NULL DEFAULT 0 AFTER `RightTraitNodeID`;
ALTER TABLE `ui_map` DROP `VisibilityPlayerConditionID2`;
DROP TABLE IF EXISTS `pvp_item`;
@@ -0,0 +1,14 @@
ALTER TABLE `access_requirement` MODIFY `difficulty` int NOT NULL DEFAULT 0;
ALTER TABLE `creature_questitem` MODIFY `DifficultyID` int NOT NULL DEFAULT 0;
ALTER TABLE `creature_static_flags_override` MODIFY `DifficultyId` int NOT NULL DEFAULT 0;
ALTER TABLE `creature_template_difficulty` MODIFY `DifficultyID` int NOT NULL DEFAULT 0;
ALTER TABLE `player_classlevelstats` ADD `spi` smallint COMMENT 'spirit' AFTER `inte`;
ALTER TABLE `player_racestats` ADD `spi` smallint COMMENT 'spirit' AFTER `inte`;
UPDATE `player_classlevelstats` SET `spi`=0;
UPDATE `player_racestats` SET `spi`=0;
ALTER TABLE `player_classlevelstats` MODIFY `spi` smallint NOT NULL COMMENT 'spirit';
ALTER TABLE `player_racestats` MODIFY `spi` smallint NOT NULL COMMENT 'spirit';
ALTER TABLE `quest_template` ADD `RewardFavor` int NOT NULL DEFAULT 0;
ALTER TABLE `quest_objectives` CHANGE `SecondaryAmount` `ConditionalAmount` int NOT NULL DEFAULT 0;
ALTER TABLE `scenarios` MODIFY `difficulty` int NOT NULL DEFAULT 0;
ALTER TABLE `serverside_spell` ADD `AttributesEx16` int UNSIGNED NOT NULL DEFAULT 0 AFTER `AttributesEx15`;
@@ -663,8 +663,8 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_INS_CHAR_SPELL_FAVORITE, "INSERT INTO character_spell_favorite (guid, spell) VALUES (?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_CHAR_STATS, "DELETE FROM character_stats WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_INS_CHAR_STATS, "INSERT INTO character_stats (guid, maxhealth, maxpower1, maxpower2, maxpower3, maxpower4, maxpower5, maxpower6, maxpower7, maxpower8, maxpower9, maxpower10, "
"strength, agility, stamina, intellect, armor, resHoly, resFire, resNature, resFrost, resShadow, resArcane, blockPct, dodgePct, parryPct, critPct, rangedCritPct, spellCritPct, "
"attackPower, rangedAttackPower, spellPower, resilience, mastery, versatility) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
"strength, agility, stamina, intellect, spirit, armor, resHoly, resFire, resNature, resFrost, resShadow, resArcane, blockPct, dodgePct, parryPct, critPct, rangedCritPct, spellCritPct, "
"attackPower, rangedAttackPower, spellPower, resilience, mastery, versatility) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_PETITION_BY_OWNER, "DELETE FROM petition WHERE ownerguid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_PETITION_SIGNATURE_BY_OWNER, "DELETE FROM petition_sign WHERE ownerguid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_INS_CHAR_GLYPHS, "INSERT INTO character_glyphs VALUES(?, ?, ?)", CONNECTION_ASYNC);
@@ -273,9 +273,9 @@ void HotfixDatabaseConnection::DoPrepareStatements()
PREPARE_MAX_ID_STMT(HOTFIX_SEL_BATTLE_PET_SPECIES_STATE, "SELECT MAX(ID) + 1 FROM battle_pet_species_state", CONNECTION_SYNCH);
// BattlemasterList.db2
PrepareStatement(HOTFIX_SEL_BATTLEMASTER_LIST, "SELECT ID, Name, GameType, ShortDescription, LongDescription, PvpType, MinLevel, MaxLevel, "
"RatedPlayers, MinPlayers, MaxPlayers, GroupsAllowed, MaxGroupSize, HolidayWorldState, Flags, IconFileDataID, RequiredPlayerConditionID"
" FROM battlemaster_list WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PrepareStatement(HOTFIX_SEL_BATTLEMASTER_LIST, "SELECT ID, Name, GameType, ShortDescription, LongDescription, InstanceType, PvpType, MinLevel, "
"MaxLevel, RatedPlayers, MinPlayers, MaxPlayers, GroupsAllowed, MaxGroupSize, HolidayWorldState, Flags, IconFileDataID, "
"RequiredPlayerConditionID FROM battlemaster_list WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_BATTLEMASTER_LIST, "SELECT MAX(ID) + 1 FROM battlemaster_list", CONNECTION_SYNCH);
PREPARE_LOCALE_STMT(HOTFIX_SEL_BATTLEMASTER_LIST, "SELECT ID, Name_lang, GameType_lang, ShortDescription_lang, LongDescription_lang"
" FROM battlemaster_list_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH);
@@ -491,7 +491,8 @@ void HotfixDatabaseConnection::DoPrepareStatements()
PREPARE_MAX_ID_STMT(HOTFIX_SEL_CORRUPTION_EFFECTS, "SELECT MAX(ID) + 1 FROM corruption_effects", CONNECTION_SYNCH);
// CraftingQuality.db2
PrepareStatement(HOTFIX_SEL_CRAFTING_QUALITY, "SELECT ID, QualityTier FROM crafting_quality WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PrepareStatement(HOTFIX_SEL_CRAFTING_QUALITY, "SELECT ID, QualityTier, CraftingQualityAtlasSetID FROM crafting_quality"
" WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_CRAFTING_QUALITY, "SELECT MAX(ID) + 1 FROM crafting_quality", CONNECTION_SYNCH);
// CreatureDisplayInfo.db2
@@ -554,8 +555,8 @@ void HotfixDatabaseConnection::DoPrepareStatements()
// CurrencyTypes.db2
PrepareStatement(HOTFIX_SEL_CURRENCY_TYPES, "SELECT ID, Name, Description, CategoryID, InventoryIconFileID, SpellWeight, SpellCategory, MaxQty, "
"MaxEarnablePerWeek, Quality, FactionID, ItemGroupSoundsID, XpQuestDifficulty, AwardConditionID, MaxQtyWorldStateID, "
"RechargingAmountPerCycle, RechargingCycleDurationMS, AccountTransferPercentage, OrderIndex, Flags1, Flags2 FROM currency_types"
" WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
"RechargingAmountPerCycle, RechargingCycleDurationMS, AccountTransferPercentage, OrderIndex, RecraftReagentCountPercentage, OrderSource, "
"MCRCurrencyID, Flags1, Flags2 FROM currency_types WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_CURRENCY_TYPES, "SELECT MAX(ID) + 1 FROM currency_types", CONNECTION_SYNCH);
PREPARE_LOCALE_STMT(HOTFIX_SEL_CURRENCY_TYPES, "SELECT ID, Name_lang, Description_lang FROM currency_types_locale WHERE (`VerifiedBuild` > 0) = ?"
" AND locale = ?", CONNECTION_SYNCH);
@@ -745,8 +746,8 @@ void HotfixDatabaseConnection::DoPrepareStatements()
" WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH);
// GarrPlot.db2
PrepareStatement(HOTFIX_SEL_GARR_PLOT, "SELECT ID, Name, PlotType, HordeConstructObjID, AllianceConstructObjID, Flags, UiCategoryID, "
"UpgradeRequirement1, UpgradeRequirement2 FROM garr_plot WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PrepareStatement(HOTFIX_SEL_GARR_PLOT, "SELECT ID, Name, PlotType, HordeConstructObjID, AllianceConstructObjID, Flags, UpgradeRequirement1, "
"UpgradeRequirement2 FROM garr_plot WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_GARR_PLOT, "SELECT MAX(ID) + 1 FROM garr_plot", CONNECTION_SYNCH);
// GarrPlotBuilding.db2
@@ -854,7 +855,8 @@ void HotfixDatabaseConnection::DoPrepareStatements()
// Item.db2
PrepareStatement(HOTFIX_SEL_ITEM, "SELECT ID, ClassID, SubclassID, Material, InventoryType, SheatheType, SoundOverrideSubclassID, IconFileDataID, "
"ItemGroupSoundsID, ContentTuningID, ModifiedCraftingReagentItemID, CraftingQualityID, Unknown1127 FROM item WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
"ItemGroupSoundsID, ContentTuningID, ModifiedCraftingReagentItemID, Unknown1200, CraftingQualityID, ItemSquishEraID, "
"RecraftReagentCountPercentage, OrderSource FROM item WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM, "SELECT MAX(ID) + 1 FROM item", CONNECTION_SYNCH);
// ItemAppearance.db2
@@ -1024,7 +1026,7 @@ void HotfixDatabaseConnection::DoPrepareStatements()
PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_PRICE_BASE, "SELECT MAX(ID) + 1 FROM item_price_base", CONNECTION_SYNCH);
// ItemScalingConfig.db2
PrepareStatement(HOTFIX_SEL_ITEM_SCALING_CONFIG, "SELECT ID, ItemOffsetCurveID, ItemLevel, RequiredLevel, Unknown1125, Flags"
PrepareStatement(HOTFIX_SEL_ITEM_SCALING_CONFIG, "SELECT ID, ItemOffsetCurveID, ItemLevel, RequiredLevel, ItemSquishEraID, Flags"
" FROM item_scaling_config WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_SCALING_CONFIG, "SELECT MAX(ID) + 1 FROM item_scaling_config", CONNECTION_SYNCH);
@@ -1058,7 +1060,7 @@ void HotfixDatabaseConnection::DoPrepareStatements()
"StatModifierBonusStat6, StatModifierBonusStat7, StatModifierBonusStat8, StatModifierBonusStat9, StatModifierBonusStat10, Stackable, "
"MaxCount, MinReputation, RequiredAbility, SellPrice, BuyPrice, VendorStackCount, PriceVariance, PriceRandomValue, Flags1, Flags2, Flags3, "
"Flags4, Flags5, FactionRelated, ModifiedCraftingReagentItemID, ContentTuningID, PlayerLevelToItemLevelCurveID, ItemLevelOffsetCurveID, "
"ItemLevelOffsetItemLevel, Unknown1127, ItemNameDescriptionID, RequiredTransmogHoliday, RequiredHoliday, GemProperties, "
"ItemLevelOffsetItemLevel, ItemSquishEraID, ItemNameDescriptionID, RequiredTransmogHoliday, RequiredHoliday, GemProperties, "
"SocketMatchEnchantmentId, TotemCategoryID, InstanceBound, ZoneBound1, ZoneBound2, ItemSet, LockID, PageID, ItemDelay, MinFactionID, "
"RequiredSkillRank, RequiredSkill, ItemLevel, AllowableClass, ArtifactID, SpellWeight, SpellWeightCategory, SocketType1, SocketType2, "
"SocketType3, SheatheType, Material, PageMaterialID, Bonding, DamageDamageType, ContainerSlots, RequiredPVPMedal, RequiredPVPRank, "
@@ -1076,6 +1078,10 @@ void HotfixDatabaseConnection::DoPrepareStatements()
PrepareStatement(HOTFIX_SEL_ITEM_SPEC_OVERRIDE, "SELECT ID, SpecID, ItemID FROM item_spec_override WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_SPEC_OVERRIDE, "SELECT MAX(ID) + 1 FROM item_spec_override", CONNECTION_SYNCH);
// ItemSquishEra.db2
PrepareStatement(HOTFIX_SEL_ITEM_SQUISH_ERA, "SELECT ID, Patch, CurveID, Flags FROM item_squish_era WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_SQUISH_ERA, "SELECT MAX(ID) + 1 FROM item_squish_era", CONNECTION_SYNCH);
// ItemXBonusTree.db2
PrepareStatement(HOTFIX_SEL_ITEM_X_BONUS_TREE, "SELECT ID, ItemBonusTreeID, ItemID FROM item_x_bonus_tree WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_X_BONUS_TREE, "SELECT MAX(ID) + 1 FROM item_x_bonus_tree", CONNECTION_SYNCH);
@@ -1153,9 +1159,10 @@ void HotfixDatabaseConnection::DoPrepareStatements()
PrepareStatement(HOTFIX_SEL_LIQUID_TYPE, "SELECT ID, Name, Texture1, Texture2, Texture3, Texture4, Texture5, Texture6, Flags, SoundBank, SoundID, "
"SpellID, MaxDarkenDepth, FogDarkenIntensity, AmbDarkenIntensity, DirDarkenIntensity, LightID, ParticleScale, ParticleMovement, "
"ParticleTexSlots, MaterialID, MinimapStaticCol, FrameCountTexture1, FrameCountTexture2, FrameCountTexture3, FrameCountTexture4, "
"FrameCountTexture5, FrameCountTexture6, Color1, Color2, Float1, Float2, Float3, `Float4`, Float5, Float6, Float7, `Float8`, Float9, Float10, "
"Float11, Float12, Float13, Float14, Float15, Float16, Float17, Float18, `Int1`, `Int2`, `Int3`, `Int4`, Coefficient1, Coefficient2, "
"Coefficient3, Coefficient4 FROM liquid_type WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
"FrameCountTexture5, FrameCountTexture6, Color1, Color2, Color3, Float1, Float2, Float3, `Float4`, Float5, Float6, Float7, `Float8`, Float9, "
"Float10, Float11, Float12, Float13, Float14, Float15, Float16, Float17, Float18, Float19, Float20, Float21, Float22, Float23, Float24, "
"Float25, Float26, Float27, Float28, Float29, Float30, Float31, Float32, Float33, Float34, Float35, Float36, Float37, Float38, `Int1`, "
"`Int2`, `Int3`, `Int4`, Coefficient1, Coefficient2, Coefficient3, Coefficient4 FROM liquid_type WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_LIQUID_TYPE, "SELECT MAX(ID) + 1 FROM liquid_type", CONNECTION_SYNCH);
// Location.db2
@@ -1379,10 +1386,6 @@ void HotfixDatabaseConnection::DoPrepareStatements()
PrepareStatement(HOTFIX_SEL_PVP_DIFFICULTY, "SELECT ID, RangeIndex, MinLevel, MaxLevel, MapID FROM pvp_difficulty WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_PVP_DIFFICULTY, "SELECT MAX(ID) + 1 FROM pvp_difficulty", CONNECTION_SYNCH);
// PvpItem.db2
PrepareStatement(HOTFIX_SEL_PVP_ITEM, "SELECT ID, ItemID, ItemLevelDelta FROM pvp_item WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_PVP_ITEM, "SELECT MAX(ID) + 1 FROM pvp_item", CONNECTION_SYNCH);
// PvpStat.db2
PrepareStatement(HOTFIX_SEL_PVP_STAT, "SELECT Description, ID, MapID FROM pvp_stat WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_PVP_STAT, "SELECT MAX(ID) + 1 FROM pvp_stat", CONNECTION_SYNCH);
@@ -1497,7 +1500,7 @@ void HotfixDatabaseConnection::DoPrepareStatements()
PREPARE_MAX_ID_STMT(HOTFIX_SEL_SCENE_SCRIPT_GLOBAL_TEXT, "SELECT MAX(ID) + 1 FROM scene_script_global_text", CONNECTION_SYNCH);
// SceneScriptPackage.db2
PrepareStatement(HOTFIX_SEL_SCENE_SCRIPT_PACKAGE, "SELECT ID, Name, Unknown915 FROM scene_script_package WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PrepareStatement(HOTFIX_SEL_SCENE_SCRIPT_PACKAGE, "SELECT ID, Name, Flags, Unknown915 FROM scene_script_package WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_SCENE_SCRIPT_PACKAGE, "SELECT MAX(ID) + 1 FROM scene_script_package", CONNECTION_SYNCH);
// SceneScriptText.db2
@@ -1578,8 +1581,8 @@ void HotfixDatabaseConnection::DoPrepareStatements()
PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_CASTING_REQUIREMENTS, "SELECT MAX(ID) + 1 FROM spell_casting_requirements", CONNECTION_SYNCH);
// SpellCategories.db2
PrepareStatement(HOTFIX_SEL_SPELL_CATEGORIES, "SELECT ID, DifficultyID, Category, DefenseType, DispelType, Mechanic, PreventionType, "
"StartRecoveryCategory, ChargeCategory, SpellID FROM spell_categories WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PrepareStatement(HOTFIX_SEL_SPELL_CATEGORIES, "SELECT ID, DifficultyID, Category, DefenseType, DiminishType, DispelType, Mechanic, "
"PreventionType, StartRecoveryCategory, ChargeCategory, SpellID FROM spell_categories WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_CATEGORIES, "SELECT MAX(ID) + 1 FROM spell_categories", CONNECTION_SYNCH);
// SpellCategory.db2
@@ -1599,16 +1602,17 @@ void HotfixDatabaseConnection::DoPrepareStatements()
PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_COOLDOWNS, "SELECT MAX(ID) + 1 FROM spell_cooldowns", CONNECTION_SYNCH);
// SpellDuration.db2
PrepareStatement(HOTFIX_SEL_SPELL_DURATION, "SELECT ID, Duration, MaxDuration FROM spell_duration WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PrepareStatement(HOTFIX_SEL_SPELL_DURATION, "SELECT ID, Duration, MaxDuration, DurationPerResource FROM spell_duration"
" WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_DURATION, "SELECT MAX(ID) + 1 FROM spell_duration", CONNECTION_SYNCH);
// SpellEffect.db2
PrepareStatement(HOTFIX_SEL_SPELL_EFFECT, "SELECT ID, EffectAura, DifficultyID, EffectIndex, Effect, EffectAmplitude, EffectAttributes, "
"EffectAuraPeriod, EffectBonusCoefficient, EffectChainAmplitude, EffectChainTargets, EffectItemType, EffectMechanic, EffectPointsPerResource, "
"EffectPosFacing, EffectRealPointsPerLevel, EffectTriggerSpell, BonusCoefficientFromAP, PvpMultiplier, Coefficient, Variance, "
"ResourceCoefficient, GroupSizeBasePointsCoefficient, EffectBasePoints, ScalingClass, EffectMiscValue1, EffectMiscValue2, EffectRadiusIndex1, "
"EffectRadiusIndex2, EffectSpellClassMask1, EffectSpellClassMask2, EffectSpellClassMask3, EffectSpellClassMask4, ImplicitTarget1, "
"ImplicitTarget2, SpellID FROM spell_effect WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
"ResourceCoefficient, GroupSizeBasePointsCoefficient, EffectBasePoints, ScalingClass, TargetNodeGraph, EffectMiscValue1, EffectMiscValue2, "
"EffectRadiusIndex1, EffectRadiusIndex2, EffectSpellClassMask1, EffectSpellClassMask2, EffectSpellClassMask3, EffectSpellClassMask4, "
"ImplicitTarget1, ImplicitTarget2, SpellID FROM spell_effect WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_EFFECT, "SELECT MAX(ID) + 1 FROM spell_effect", CONNECTION_SYNCH);
// SpellEmpower.db2
@@ -1674,10 +1678,10 @@ void HotfixDatabaseConnection::DoPrepareStatements()
// SpellMisc.db2
PrepareStatement(HOTFIX_SEL_SPELL_MISC, "SELECT ID, Attributes1, Attributes2, Attributes3, Attributes4, Attributes5, Attributes6, Attributes7, "
"Attributes8, Attributes9, Attributes10, Attributes11, Attributes12, Attributes13, Attributes14, Attributes15, Attributes16, DifficultyID, "
"CastingTimeIndex, DurationIndex, PvPDurationIndex, RangeIndex, SchoolMask, Speed, LaunchDelay, MinDuration, SpellIconFileDataID, "
"ActiveIconFileDataID, ContentTuningID, ShowFutureSpellPlayerConditionID, SpellVisualScript, ActiveSpellVisualScript, SpellID FROM spell_misc"
" WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
"Attributes8, Attributes9, Attributes10, Attributes11, Attributes12, Attributes13, Attributes14, Attributes15, Attributes16, Attributes17, "
"DifficultyID, CastingTimeIndex, DurationIndex, PvPDurationIndex, RangeIndex, SchoolMask, Speed, LaunchDelay, MinDuration, "
"SpellIconFileDataID, ActiveIconFileDataID, ContentTuningID, ShowFutureSpellPlayerConditionID, SpellVisualScript, ActiveSpellVisualScript, "
"SpellID FROM spell_misc WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_MISC, "SELECT MAX(ID) + 1 FROM spell_misc", CONNECTION_SYNCH);
// SpellName.db2
@@ -1726,12 +1730,12 @@ void HotfixDatabaseConnection::DoPrepareStatements()
PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_REAGENTS, "SELECT MAX(ID) + 1 FROM spell_reagents", CONNECTION_SYNCH);
// SpellReagentsCurrency.db2
PrepareStatement(HOTFIX_SEL_SPELL_REAGENTS_CURRENCY, "SELECT ID, SpellID, CurrencyTypesID, CurrencyCount FROM spell_reagents_currency"
" WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PrepareStatement(HOTFIX_SEL_SPELL_REAGENTS_CURRENCY, "SELECT ID, SpellID, CurrencyTypesID, CurrencyCount, OverrideRecraftCurrencyCount, "
"OrderSource FROM spell_reagents_currency WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_REAGENTS_CURRENCY, "SELECT MAX(ID) + 1 FROM spell_reagents_currency", CONNECTION_SYNCH);
// SpellScaling.db2
PrepareStatement(HOTFIX_SEL_SPELL_SCALING, "SELECT ID, SpellID, MinScalingLevel, MaxScalingLevel, ScalesFromItemLevel FROM spell_scaling"
PrepareStatement(HOTFIX_SEL_SPELL_SCALING, "SELECT ID, SpellID, MinScalingLevel, MaxScalingLevel FROM spell_scaling"
" WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_SCALING, "SELECT MAX(ID) + 1 FROM spell_scaling", CONNECTION_SYNCH);
@@ -2004,8 +2008,8 @@ void HotfixDatabaseConnection::DoPrepareStatements()
// UiMap.db2
PrepareStatement(HOTFIX_SEL_UI_MAP, "SELECT Name, ID, ParentUiMapID, Flags, `System`, Type, BountySetID, BountyDisplayLocation, "
"VisibilityPlayerConditionID2, VisibilityPlayerConditionID, HelpTextPosition, BkgAtlasID, AlternateUiMapGroup, ContentTuningID, "
"AdventureMapTextureKitID, MapArtZoneTextPosition FROM ui_map WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
"VisibilityPlayerConditionID, HelpTextPosition, BkgAtlasID, AlternateUiMapGroup, ContentTuningID, AdventureMapTextureKitID, "
"MapArtZoneTextPosition FROM ui_map WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_UI_MAP, "SELECT MAX(ID) + 1 FROM ui_map", CONNECTION_SYNCH);
PREPARE_LOCALE_STMT(HOTFIX_SEL_UI_MAP, "SELECT ID, Name_lang FROM ui_map_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH);
@@ -18,8 +18,8 @@
// DO NOT EDIT!
// Autogenerated from DB2Structure.h
#ifndef _HOTFIXDATABASE_H
#define _HOTFIXDATABASE_H
#ifndef TRINITYCORE_HOTFIX_DATABASE_H
#define TRINITYCORE_HOTFIX_DATABASE_H
#include "MySQLConnection.h"
@@ -618,6 +618,9 @@ enum HotfixDatabaseStatements : uint32
HOTFIX_SEL_ITEM_SPEC_OVERRIDE,
HOTFIX_SEL_ITEM_SPEC_OVERRIDE_MAX_ID,
HOTFIX_SEL_ITEM_SQUISH_ERA,
HOTFIX_SEL_ITEM_SQUISH_ERA_MAX_ID,
HOTFIX_SEL_ITEM_X_BONUS_TREE,
HOTFIX_SEL_ITEM_X_BONUS_TREE_MAX_ID,
@@ -790,9 +793,6 @@ enum HotfixDatabaseStatements : uint32
HOTFIX_SEL_PVP_DIFFICULTY,
HOTFIX_SEL_PVP_DIFFICULTY_MAX_ID,
HOTFIX_SEL_PVP_ITEM,
HOTFIX_SEL_PVP_ITEM_MAX_ID,
HOTFIX_SEL_PVP_STAT,
HOTFIX_SEL_PVP_STAT_MAX_ID,
HOTFIX_SEL_PVP_STAT_LOCALE,
@@ -1230,4 +1230,4 @@ public:
void DoPrepareStatements() override;
};
#endif
#endif // TRINITYCORE_HOTFIX_DATABASE_H
+1 -1
View File
@@ -43,7 +43,7 @@ class SpellInfo;
class Unit;
struct AISpellInfoType;
enum DamageEffectType : uint8;
enum Difficulty : uint8;
enum Difficulty : int16;
enum MovementGeneratorType : uint8;
enum SpellEffIndex : uint8;
+1 -1
View File
@@ -22,7 +22,7 @@
#include <functional>
class WorldObject;
enum Difficulty : uint8;
enum Difficulty : int16;
template<typename First, typename Second, typename... Rest>
inline First const& RAND(First const& first, Second const& second, Rest const&... rest)
@@ -2087,7 +2087,7 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
return ConditionMgr::IsMeetingWorldStateExpression(referencePlayer->GetMap(), worldStateExpression);
return false;
case ModifierTreeType::DungeonDifficulty: // 68
if (referencePlayer->GetMap()->GetDifficultyID() != reqValue)
if (referencePlayer->GetMap()->GetDifficultyID() != int32(reqValue))
return false;
break;
case ModifierTreeType::PlayerLevelEqualOrGreaterThan: // 69
@@ -3090,7 +3090,7 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
Scenario const* scenario = referencePlayer->GetScenario();
if (!scenario)
return false;
if (scenario->GetEntry()->Type != reqValue)
if (scenario->GetEntry()->Type != int32(reqValue))
return false;
break;
}
+1 -1
View File
@@ -264,7 +264,7 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) const
}
case CONDITION_DIFFICULTY_ID:
{
condMeets = map->GetDifficultyID() == ConditionValue1;
condMeets = map->GetDifficultyID() == int32(ConditionValue1);
break;
}
case CONDITION_SCENARIO_STEP:
+131 -97
View File
@@ -218,7 +218,7 @@ struct AreaTriggerLoadInfo
{ .IsSigned = true, .Type = FT_BYTE, .Name = "ShapeType" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "ShapeID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "AreaTriggerActionSetID" },
{ .IsSigned = true, .Type = FT_BYTE, .Name = "Flags" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
};
static constexpr DB2LoadInfo Instance{ Fields, 17, &AreaTriggerMeta::Instance, HOTFIX_SEL_AREA_TRIGGER };
@@ -261,7 +261,7 @@ struct ArtifactLoadInfo
{ .IsSigned = true, .Type = FT_INT, .Name = "UiBarOverlayColor" },
{ .IsSigned = true, .Type = FT_INT, .Name = "UiBarBackgroundColor" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "ChrSpecializationID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "Flags" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "ArtifactCategoryID" },
{ .IsSigned = false, .Type = FT_INT, .Name = "UiModelSceneID" },
{ .IsSigned = false, .Type = FT_INT, .Name = "SpellVisualKitID" },
@@ -287,7 +287,7 @@ struct ArtifactAppearanceLoadInfo
{ .IsSigned = false, .Type = FT_INT, .Name = "OverrideShapeshiftDisplayID" },
{ .IsSigned = false, .Type = FT_INT, .Name = "UiItemAppearanceID" },
{ .IsSigned = false, .Type = FT_INT, .Name = "UiAltItemAppearanceID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "Flags" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "UiCameraID" },
{ .IsSigned = false, .Type = FT_INT, .Name = "UsablePlayerConditionID" },
};
@@ -306,7 +306,7 @@ struct ArtifactAppearanceSetLoadInfo
{ .IsSigned = false, .Type = FT_SHORT, .Name = "UiCameraID" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "AltHandUICameraID" },
{ .IsSigned = true, .Type = FT_BYTE, .Name = "ForgeAttachmentOverride" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "Flags" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
{ .IsSigned = false, .Type = FT_INT, .Name = "ArtifactID" },
};
@@ -335,7 +335,7 @@ struct ArtifactPowerLoadInfo
{ .IsSigned = false, .Type = FT_BYTE, .Name = "ArtifactID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "MaxPurchasableRank" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Label" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "Flags" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "Tier" },
};
@@ -666,7 +666,7 @@ struct BattlePetAbilityLoadInfo
{ .IsSigned = true, .Type = FT_BYTE, .Name = "PetTypeEnum" },
{ .IsSigned = false, .Type = FT_INT, .Name = "Cooldown" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "BattlePetVisualID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "Flags" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
};
static constexpr DB2LoadInfo Instance{ Fields, 8, &BattlePetAbilityMeta::Instance, HOTFIX_SEL_BATTLE_PET_ABILITY };
@@ -734,13 +734,14 @@ struct BattlePetSpeciesStateLoadInfo
struct BattlemasterListLoadInfo
{
static constexpr DB2FieldMeta Fields[17] =
static constexpr DB2FieldMeta Fields[18] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_STRING, .Name = "Name" },
{ .IsSigned = false, .Type = FT_STRING, .Name = "GameType" },
{ .IsSigned = false, .Type = FT_STRING, .Name = "ShortDescription" },
{ .IsSigned = false, .Type = FT_STRING, .Name = "LongDescription" },
{ .IsSigned = true, .Type = FT_BYTE, .Name = "InstanceType" },
{ .IsSigned = true, .Type = FT_INT, .Name = "PvpType" },
{ .IsSigned = true, .Type = FT_BYTE, .Name = "MinLevel" },
{ .IsSigned = true, .Type = FT_BYTE, .Name = "MaxLevel" },
@@ -755,7 +756,7 @@ struct BattlemasterListLoadInfo
{ .IsSigned = true, .Type = FT_INT, .Name = "RequiredPlayerConditionID" },
};
static constexpr DB2LoadInfo Instance{ Fields, 17, &BattlemasterListMeta::Instance, HOTFIX_SEL_BATTLEMASTER_LIST };
static constexpr DB2LoadInfo Instance{ Fields, 18, &BattlemasterListMeta::Instance, HOTFIX_SEL_BATTLEMASTER_LIST };
};
struct BattlemasterListXMapLoadInfo
@@ -818,7 +819,7 @@ struct CfgCategoriesLoadInfo
{ .IsSigned = false, .Type = FT_SHORT, .Name = "LocaleMask" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "CreateCharsetMask" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "ExistingCharsetMask" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "Flags" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
{ .IsSigned = true, .Type = FT_BYTE, .Name = "Order" },
};
@@ -1407,13 +1408,14 @@ struct CorruptionEffectsLoadInfo
struct CraftingQualityLoadInfo
{
static constexpr DB2FieldMeta Fields[2] =
static constexpr DB2FieldMeta Fields[3] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "QualityTier" },
{ .IsSigned = true, .Type = FT_INT, .Name = "CraftingQualityAtlasSetID" },
};
static constexpr DB2LoadInfo Instance{ Fields, 2, &CraftingQualityMeta::Instance, HOTFIX_SEL_CRAFTING_QUALITY };
static constexpr DB2LoadInfo Instance{ Fields, 3, &CraftingQualityMeta::Instance, HOTFIX_SEL_CRAFTING_QUALITY };
};
struct CreatureDisplayInfoLoadInfo
@@ -1625,7 +1627,7 @@ struct CurrencyContainerLoadInfo
struct CurrencyTypesLoadInfo
{
static constexpr DB2FieldMeta Fields[21] =
static constexpr DB2FieldMeta Fields[24] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_STRING, .Name = "Name" },
@@ -1646,11 +1648,14 @@ struct CurrencyTypesLoadInfo
{ .IsSigned = false, .Type = FT_INT, .Name = "RechargingCycleDurationMS" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "AccountTransferPercentage" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "OrderIndex" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "RecraftReagentCountPercentage" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "OrderSource" },
{ .IsSigned = true, .Type = FT_INT, .Name = "MCRCurrencyID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags1" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags2" },
};
static constexpr DB2LoadInfo Instance{ Fields, 21, &CurrencyTypesMeta::Instance, HOTFIX_SEL_CURRENCY_TYPES };
static constexpr DB2LoadInfo Instance{ Fields, 24, &CurrencyTypesMeta::Instance, HOTFIX_SEL_CURRENCY_TYPES };
};
struct CurveLoadInfo
@@ -1722,12 +1727,12 @@ struct DifficultyLoadInfo
{ .IsSigned = false, .Type = FT_BYTE, .Name = "InstanceType" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "OrderIndex" },
{ .IsSigned = true, .Type = FT_BYTE, .Name = "OldEnumValue" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "FallbackDifficultyID" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "FallbackDifficultyID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "MinPlayers" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "MaxPlayers" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "Flags" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "ItemContext" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "ToggleDifficultyID" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "ToggleDifficultyID" },
{ .IsSigned = false, .Type = FT_INT, .Name = "GroupSizeHealthCurveID" },
{ .IsSigned = false, .Type = FT_INT, .Name = "GroupSizeDmgCurveID" },
{ .IsSigned = false, .Type = FT_INT, .Name = "GroupSizeSpellPointsCurveID" },
@@ -1744,7 +1749,7 @@ struct DungeonEncounterLoadInfo
{ .IsSigned = false, .Type = FT_STRING, .Name = "Name" },
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "MapID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "DifficultyID" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "DifficultyID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "OrderIndex" },
{ .IsSigned = true, .Type = FT_INT, .Name = "CompleteWorldStateID" },
{ .IsSigned = true, .Type = FT_BYTE, .Name = "Bit" },
@@ -2303,20 +2308,19 @@ struct GarrMissionLoadInfo
struct GarrPlotLoadInfo
{
static constexpr DB2FieldMeta Fields[9] =
static constexpr DB2FieldMeta Fields[8] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_STRING_NOT_LOCALIZED, .Name = "Name" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "PlotType" },
{ .IsSigned = true, .Type = FT_INT, .Name = "HordeConstructObjID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "AllianceConstructObjID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "Flags" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "UiCategoryID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
{ .IsSigned = false, .Type = FT_INT, .Name = "UpgradeRequirement1" },
{ .IsSigned = false, .Type = FT_INT, .Name = "UpgradeRequirement2" },
};
static constexpr DB2LoadInfo Instance{ Fields, 9, &GarrPlotMeta::Instance, HOTFIX_SEL_GARR_PLOT };
static constexpr DB2LoadInfo Instance{ Fields, 8, &GarrPlotMeta::Instance, HOTFIX_SEL_GARR_PLOT };
};
struct GarrPlotBuildingLoadInfo
@@ -2578,8 +2582,8 @@ struct HolidaysLoadInfo
{ .IsSigned = false, .Type = FT_INT, .Name = "HolidayNameID" },
{ .IsSigned = false, .Type = FT_INT, .Name = "HolidayDescriptionID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "Priority" },
{ .IsSigned = true, .Type = FT_BYTE, .Name = "CalendarFilterType" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "Flags" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "CalendarFilterType" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "Duration1" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "Duration2" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "Duration3" },
@@ -2683,7 +2687,7 @@ struct ImportPriceWeaponLoadInfo
struct ItemLoadInfo
{
static constexpr DB2FieldMeta Fields[13] =
static constexpr DB2FieldMeta Fields[16] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "ClassID" },
@@ -2696,11 +2700,14 @@ struct ItemLoadInfo
{ .IsSigned = false, .Type = FT_INT, .Name = "ItemGroupSoundsID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "ContentTuningID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "ModifiedCraftingReagentItemID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "Unknown1200" },
{ .IsSigned = true, .Type = FT_INT, .Name = "CraftingQualityID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Unknown1127" },
{ .IsSigned = true, .Type = FT_INT, .Name = "ItemSquishEraID" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "RecraftReagentCountPercentage" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "OrderSource" },
};
static constexpr DB2LoadInfo Instance{ Fields, 13, &ItemMeta::Instance, HOTFIX_SEL_ITEM };
static constexpr DB2LoadInfo Instance{ Fields, 16, &ItemMeta::Instance, HOTFIX_SEL_ITEM };
};
struct ItemAppearanceLoadInfo
@@ -2865,7 +2872,7 @@ struct ItemChildEquipmentLoadInfo
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_INT, .Name = "ParentItemID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "ChildItemID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "ChildItemEquipSlot" },
{ .IsSigned = true, .Type = FT_INT, .Name = "ChildItemEquipSlot" },
};
static constexpr DB2LoadInfo Instance{ Fields, 4, &ItemChildEquipmentMeta::Instance, HOTFIX_SEL_ITEM_CHILD_EQUIPMENT };
@@ -2894,7 +2901,7 @@ struct ItemContextPickerEntryLoadInfo
{ .IsSigned = false, .Type = FT_BYTE, .Name = "OrderIndex" },
{ .IsSigned = true, .Type = FT_INT, .Name = "PVal" },
{ .IsSigned = true, .Type = FT_INT, .Name = "LabelID" },
{ .IsSigned = false, .Type = FT_INT, .Name = "Flags" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
{ .IsSigned = false, .Type = FT_INT, .Name = "PlayerConditionID" },
{ .IsSigned = false, .Type = FT_INT, .Name = "ItemContextPickerID" },
};
@@ -3038,7 +3045,7 @@ struct ItemEffectLoadInfo
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "LegacySlotIndex" },
{ .IsSigned = true, .Type = FT_BYTE, .Name = "TriggerType" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "TriggerType" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "Charges" },
{ .IsSigned = true, .Type = FT_INT, .Name = "CoolDownMSec" },
{ .IsSigned = true, .Type = FT_INT, .Name = "CategoryCoolDownMSec" },
@@ -3132,7 +3139,7 @@ struct ItemLimitCategoryLoadInfo
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_STRING, .Name = "Name" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "Quantity" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "Flags" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
};
static constexpr DB2LoadInfo Instance{ Fields, 4, &ItemLimitCategoryMeta::Instance, HOTFIX_SEL_ITEM_LIMIT_CATEGORY };
@@ -3227,7 +3234,7 @@ struct ItemScalingConfigLoadInfo
{ .IsSigned = true, .Type = FT_INT, .Name = "ItemOffsetCurveID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "ItemLevel" },
{ .IsSigned = true, .Type = FT_INT, .Name = "RequiredLevel" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Unknown1125" },
{ .IsSigned = true, .Type = FT_INT, .Name = "ItemSquishEraID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
};
@@ -3267,7 +3274,7 @@ struct ItemSetLoadInfo
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_STRING, .Name = "Name" },
{ .IsSigned = false, .Type = FT_INT, .Name = "SetFlags" },
{ .IsSigned = true, .Type = FT_INT, .Name = "SetFlags" },
{ .IsSigned = false, .Type = FT_INT, .Name = "RequiredSkill" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "RequiredSkillRank" },
{ .IsSigned = false, .Type = FT_INT, .Name = "ItemID1" },
@@ -3377,7 +3384,7 @@ struct ItemSparseLoadInfo
{ .IsSigned = true, .Type = FT_INT, .Name = "PlayerLevelToItemLevelCurveID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "ItemLevelOffsetCurveID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "ItemLevelOffsetItemLevel" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Unknown1127" },
{ .IsSigned = true, .Type = FT_INT, .Name = "ItemSquishEraID" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "ItemNameDescriptionID" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "RequiredTransmogHoliday" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "RequiredHoliday" },
@@ -3446,6 +3453,19 @@ struct ItemSpecOverrideLoadInfo
static constexpr DB2LoadInfo Instance{ Fields, 3, &ItemSpecOverrideMeta::Instance, HOTFIX_SEL_ITEM_SPEC_OVERRIDE };
};
struct ItemSquishEraLoadInfo
{
static constexpr DB2FieldMeta Fields[4] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Patch" },
{ .IsSigned = true, .Type = FT_INT, .Name = "CurveID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
};
static constexpr DB2LoadInfo Instance{ Fields, 4, &ItemSquishEraMeta::Instance, HOTFIX_SEL_ITEM_SQUISH_ERA };
};
struct ItemXBonusTreeLoadInfo
{
static constexpr DB2FieldMeta Fields[3] =
@@ -3647,7 +3667,7 @@ struct LfgDungeonsLoadInfo
{ .IsSigned = true, .Type = FT_INT, .Name = "PopupBgTextureFileID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "ExpansionLevel" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "MapID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "DifficultyID" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "DifficultyID" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "MinGear" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "GroupID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "OrderIndex" },
@@ -3702,7 +3722,7 @@ struct LightLoadInfo
struct LiquidTypeLoadInfo
{
static constexpr DB2FieldMeta Fields[56] =
static constexpr DB2FieldMeta Fields[77] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_STRING_NOT_LOCALIZED, .Name = "Name" },
@@ -3734,6 +3754,7 @@ struct LiquidTypeLoadInfo
{ .IsSigned = false, .Type = FT_BYTE, .Name = "FrameCountTexture6" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Color1" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Color2" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Color3" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float1" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float2" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float3" },
@@ -3752,6 +3773,26 @@ struct LiquidTypeLoadInfo
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float16" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float17" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float18" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float19" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float20" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float21" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float22" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float23" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float24" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float25" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float26" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float27" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float28" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float29" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float30" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float31" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float32" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float33" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float34" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float35" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float36" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float37" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float38" },
{ .IsSigned = false, .Type = FT_INT, .Name = "Int1" },
{ .IsSigned = false, .Type = FT_INT, .Name = "Int2" },
{ .IsSigned = false, .Type = FT_INT, .Name = "Int3" },
@@ -3762,7 +3803,7 @@ struct LiquidTypeLoadInfo
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Coefficient4" },
};
static constexpr DB2LoadInfo Instance{ Fields, 56, &LiquidTypeMeta::Instance, HOTFIX_SEL_LIQUID_TYPE };
static constexpr DB2LoadInfo Instance{ Fields, 77, &LiquidTypeMeta::Instance, HOTFIX_SEL_LIQUID_TYPE };
};
struct LocationLoadInfo
@@ -3912,7 +3953,7 @@ struct MapDifficultyLoadInfo
{
{ .IsSigned = false, .Type = FT_STRING, .Name = "Message" },
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "DifficultyID" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "DifficultyID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "LockID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "ResetInterval" },
{ .IsSigned = true, .Type = FT_INT, .Name = "MaxPlayers" },
@@ -4172,7 +4213,7 @@ struct OverrideSpellDataLoadInfo
{ .IsSigned = true, .Type = FT_INT, .Name = "Spells9" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Spells10" },
{ .IsSigned = true, .Type = FT_INT, .Name = "PlayerActionBarFileDataID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "Flags" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
};
static constexpr DB2LoadInfo Instance{ Fields, 13, &OverrideSpellDataMeta::Instance, HOTFIX_SEL_OVERRIDE_SPELL_DATA };
@@ -4326,7 +4367,7 @@ struct PlayerConditionLoadInfo
{ .IsSigned = false, .Type = FT_INT, .Name = "ModifierTreeID" },
{ .IsSigned = true, .Type = FT_BYTE, .Name = "PowerType" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "PowerTypeComp" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "PowerTypeValue" },
{ .IsSigned = true, .Type = FT_BYTE, .Name = "PowerTypeValue" },
{ .IsSigned = true, .Type = FT_INT, .Name = "WeaponSubclassMask" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "MaxGuildLevel" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "MinGuildLevel" },
@@ -4562,18 +4603,6 @@ struct PvpDifficultyLoadInfo
static constexpr DB2LoadInfo Instance{ Fields, 5, &PVPDifficultyMeta::Instance, HOTFIX_SEL_PVP_DIFFICULTY };
};
struct PvpItemLoadInfo
{
static constexpr DB2FieldMeta Fields[3] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "ItemID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "ItemLevelDelta" },
};
static constexpr DB2LoadInfo Instance{ Fields, 3, &PVPItemMeta::Instance, HOTFIX_SEL_PVP_ITEM };
};
struct PvpStatLoadInfo
{
static constexpr DB2FieldMeta Fields[3] =
@@ -4882,8 +4911,8 @@ struct ScenarioLoadInfo
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_STRING, .Name = "Name" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "AreaTableID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "Type" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "Flags" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Type" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
{ .IsSigned = false, .Type = FT_INT, .Name = "UiTextureKitID" },
};
@@ -4903,7 +4932,7 @@ struct ScenarioStepLoadInfo
{ .IsSigned = true, .Type = FT_INT, .Name = "RelatedStep" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "Supersedes" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "OrderIndex" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "Flags" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
{ .IsSigned = false, .Type = FT_INT, .Name = "VisibilityPlayerConditionID" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "WidgetSetID" },
};
@@ -4938,14 +4967,15 @@ struct SceneScriptGlobalTextLoadInfo
struct SceneScriptPackageLoadInfo
{
static constexpr DB2FieldMeta Fields[3] =
static constexpr DB2FieldMeta Fields[4] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_STRING_NOT_LOCALIZED, .Name = "Name" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Unknown915" },
};
static constexpr DB2LoadInfo Instance{ Fields, 3, &SceneScriptPackageMeta::Instance, HOTFIX_SEL_SCENE_SCRIPT_PACKAGE };
static constexpr DB2LoadInfo Instance{ Fields, 4, &SceneScriptPackageMeta::Instance, HOTFIX_SEL_SCENE_SCRIPT_PACKAGE };
};
struct SceneScriptTextLoadInfo
@@ -5123,7 +5153,7 @@ struct SpellAuraOptionsLoadInfo
static constexpr DB2FieldMeta Fields[10] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "DifficultyID" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "DifficultyID" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "CumulativeAura" },
{ .IsSigned = true, .Type = FT_INT, .Name = "ProcCategoryRecovery" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "ProcChance" },
@@ -5142,7 +5172,7 @@ struct SpellAuraRestrictionsLoadInfo
static constexpr DB2FieldMeta Fields[15] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "DifficultyID" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "DifficultyID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "CasterAuraState" },
{ .IsSigned = true, .Type = FT_INT, .Name = "TargetAuraState" },
{ .IsSigned = true, .Type = FT_INT, .Name = "ExcludeCasterAuraState" },
@@ -5151,10 +5181,10 @@ struct SpellAuraRestrictionsLoadInfo
{ .IsSigned = true, .Type = FT_INT, .Name = "TargetAuraSpell" },
{ .IsSigned = true, .Type = FT_INT, .Name = "ExcludeCasterAuraSpell" },
{ .IsSigned = true, .Type = FT_INT, .Name = "ExcludeTargetAuraSpell" },
{ .IsSigned = true, .Type = FT_INT, .Name = "CasterAuraType" },
{ .IsSigned = true, .Type = FT_INT, .Name = "TargetAuraType" },
{ .IsSigned = true, .Type = FT_INT, .Name = "ExcludeCasterAuraType" },
{ .IsSigned = true, .Type = FT_INT, .Name = "ExcludeTargetAuraType" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "CasterAuraType" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "TargetAuraType" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "ExcludeCasterAuraType" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "ExcludeTargetAuraType" },
{ .IsSigned = false, .Type = FT_INT, .Name = "SpellID" },
};
@@ -5192,12 +5222,13 @@ struct SpellCastingRequirementsLoadInfo
struct SpellCategoriesLoadInfo
{
static constexpr DB2FieldMeta Fields[10] =
static constexpr DB2FieldMeta Fields[11] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "DifficultyID" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "DifficultyID" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "Category" },
{ .IsSigned = true, .Type = FT_INT, .Name = "DefenseType" },
{ .IsSigned = true, .Type = FT_BYTE, .Name = "DefenseType" },
{ .IsSigned = true, .Type = FT_INT, .Name = "DiminishType" },
{ .IsSigned = true, .Type = FT_BYTE, .Name = "DispelType" },
{ .IsSigned = true, .Type = FT_BYTE, .Name = "Mechanic" },
{ .IsSigned = true, .Type = FT_INT, .Name = "PreventionType" },
@@ -5206,7 +5237,7 @@ struct SpellCategoriesLoadInfo
{ .IsSigned = false, .Type = FT_INT, .Name = "SpellID" },
};
static constexpr DB2LoadInfo Instance{ Fields, 10, &SpellCategoriesMeta::Instance, HOTFIX_SEL_SPELL_CATEGORIES };
static constexpr DB2LoadInfo Instance{ Fields, 11, &SpellCategoriesMeta::Instance, HOTFIX_SEL_SPELL_CATEGORIES };
};
struct SpellCategoryLoadInfo
@@ -5247,7 +5278,7 @@ struct SpellCooldownsLoadInfo
static constexpr DB2FieldMeta Fields[7] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "DifficultyID" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "DifficultyID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "CategoryRecoveryTime" },
{ .IsSigned = true, .Type = FT_INT, .Name = "RecoveryTime" },
{ .IsSigned = true, .Type = FT_INT, .Name = "StartRecoveryTime" },
@@ -5260,23 +5291,24 @@ struct SpellCooldownsLoadInfo
struct SpellDurationLoadInfo
{
static constexpr DB2FieldMeta Fields[3] =
static constexpr DB2FieldMeta Fields[4] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Duration" },
{ .IsSigned = true, .Type = FT_INT, .Name = "MaxDuration" },
{ .IsSigned = true, .Type = FT_INT, .Name = "DurationPerResource" },
};
static constexpr DB2LoadInfo Instance{ Fields, 3, &SpellDurationMeta::Instance, HOTFIX_SEL_SPELL_DURATION };
static constexpr DB2LoadInfo Instance{ Fields, 4, &SpellDurationMeta::Instance, HOTFIX_SEL_SPELL_DURATION };
};
struct SpellEffectLoadInfo
{
static constexpr DB2FieldMeta Fields[36] =
static constexpr DB2FieldMeta Fields[37] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "EffectAura" },
{ .IsSigned = true, .Type = FT_INT, .Name = "DifficultyID" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "DifficultyID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "EffectIndex" },
{ .IsSigned = false, .Type = FT_INT, .Name = "Effect" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "EffectAmplitude" },
@@ -5299,6 +5331,7 @@ struct SpellEffectLoadInfo
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "GroupSizeBasePointsCoefficient" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "EffectBasePoints" },
{ .IsSigned = true, .Type = FT_INT, .Name = "ScalingClass" },
{ .IsSigned = true, .Type = FT_INT, .Name = "TargetNodeGraph" },
{ .IsSigned = true, .Type = FT_INT, .Name = "EffectMiscValue1" },
{ .IsSigned = true, .Type = FT_INT, .Name = "EffectMiscValue2" },
{ .IsSigned = false, .Type = FT_INT, .Name = "EffectRadiusIndex1" },
@@ -5312,7 +5345,7 @@ struct SpellEffectLoadInfo
{ .IsSigned = false, .Type = FT_INT, .Name = "SpellID" },
};
static constexpr DB2LoadInfo Instance{ Fields, 36, &SpellEffectMeta::Instance, HOTFIX_SEL_SPELL_EFFECT };
static constexpr DB2LoadInfo Instance{ Fields, 37, &SpellEffectMeta::Instance, HOTFIX_SEL_SPELL_EFFECT };
};
struct SpellEmpowerLoadInfo
@@ -5370,7 +5403,7 @@ struct SpellInterruptsLoadInfo
static constexpr DB2FieldMeta Fields[8] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "DifficultyID" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "DifficultyID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "InterruptFlags" },
{ .IsSigned = true, .Type = FT_INT, .Name = "AuraInterruptFlags1" },
{ .IsSigned = true, .Type = FT_INT, .Name = "AuraInterruptFlags2" },
@@ -5507,7 +5540,7 @@ struct SpellLevelsLoadInfo
static constexpr DB2FieldMeta Fields[7] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "DifficultyID" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "DifficultyID" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "MaxLevel" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "MaxPassiveAuraLevel" },
{ .IsSigned = true, .Type = FT_INT, .Name = "BaseLevel" },
@@ -5520,7 +5553,7 @@ struct SpellLevelsLoadInfo
struct SpellMiscLoadInfo
{
static constexpr DB2FieldMeta Fields[33] =
static constexpr DB2FieldMeta Fields[34] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Attributes1" },
@@ -5539,7 +5572,8 @@ struct SpellMiscLoadInfo
{ .IsSigned = true, .Type = FT_INT, .Name = "Attributes14" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Attributes15" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Attributes16" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "DifficultyID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Attributes17" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "DifficultyID" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "CastingTimeIndex" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "DurationIndex" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "PvPDurationIndex" },
@@ -5557,7 +5591,7 @@ struct SpellMiscLoadInfo
{ .IsSigned = false, .Type = FT_INT, .Name = "SpellID" },
};
static constexpr DB2LoadInfo Instance{ Fields, 33, &SpellMiscMeta::Instance, HOTFIX_SEL_SPELL_MISC };
static constexpr DB2LoadInfo Instance{ Fields, 34, &SpellMiscMeta::Instance, HOTFIX_SEL_SPELL_MISC };
};
struct SpellNameLoadInfo
@@ -5600,7 +5634,7 @@ struct SpellPowerDifficultyLoadInfo
static constexpr DB2FieldMeta Fields[3] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "DifficultyID" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "DifficultyID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "OrderIndex" },
};
@@ -5613,7 +5647,7 @@ struct SpellProcsPerMinuteLoadInfo
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "BaseProcRate" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "Flags" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
};
static constexpr DB2LoadInfo Instance{ Fields, 3, &SpellProcsPerMinuteMeta::Instance, HOTFIX_SEL_SPELL_PROCS_PER_MINUTE };
@@ -5624,7 +5658,7 @@ struct SpellProcsPerMinuteModLoadInfo
static constexpr DB2FieldMeta Fields[5] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "Type" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Type" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Param" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Coeff" },
{ .IsSigned = false, .Type = FT_INT, .Name = "SpellProcsPerMinuteID" },
@@ -5654,7 +5688,7 @@ struct SpellRangeLoadInfo
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_STRING, .Name = "DisplayName" },
{ .IsSigned = false, .Type = FT_STRING, .Name = "DisplayNameShort" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "Flags" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "RangeMin1" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "RangeMin2" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "RangeMax1" },
@@ -5709,29 +5743,30 @@ struct SpellReagentsLoadInfo
struct SpellReagentsCurrencyLoadInfo
{
static constexpr DB2FieldMeta Fields[4] =
static constexpr DB2FieldMeta Fields[6] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_INT, .Name = "SpellID" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "CurrencyTypesID" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "CurrencyCount" },
{ .IsSigned = true, .Type = FT_INT, .Name = "CurrencyTypesID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "CurrencyCount" },
{ .IsSigned = true, .Type = FT_INT, .Name = "OverrideRecraftCurrencyCount" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "OrderSource" },
};
static constexpr DB2LoadInfo Instance{ Fields, 4, &SpellReagentsCurrencyMeta::Instance, HOTFIX_SEL_SPELL_REAGENTS_CURRENCY };
static constexpr DB2LoadInfo Instance{ Fields, 6, &SpellReagentsCurrencyMeta::Instance, HOTFIX_SEL_SPELL_REAGENTS_CURRENCY };
};
struct SpellScalingLoadInfo
{
static constexpr DB2FieldMeta Fields[5] =
static constexpr DB2FieldMeta Fields[4] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "SpellID" },
{ .IsSigned = false, .Type = FT_INT, .Name = "MinScalingLevel" },
{ .IsSigned = false, .Type = FT_INT, .Name = "MaxScalingLevel" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "ScalesFromItemLevel" },
};
static constexpr DB2LoadInfo Instance{ Fields, 5, &SpellScalingMeta::Instance, HOTFIX_SEL_SPELL_SCALING };
static constexpr DB2LoadInfo Instance{ Fields, 4, &SpellScalingMeta::Instance, HOTFIX_SEL_SPELL_SCALING };
};
struct SpellShapeshiftLoadInfo
@@ -5782,7 +5817,7 @@ struct SpellTargetRestrictionsLoadInfo
static constexpr DB2FieldMeta Fields[9] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "DifficultyID" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "DifficultyID" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "ConeDegrees" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "MaxTargets" },
{ .IsSigned = false, .Type = FT_INT, .Name = "MaxTargetLevel" },
@@ -5852,10 +5887,10 @@ struct SpellVisualEffectNameLoadInfo
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "MinAllowedScale" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "MaxAllowedScale" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Alpha" },
{ .IsSigned = false, .Type = FT_INT, .Name = "Flags" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
{ .IsSigned = true, .Type = FT_INT, .Name = "TextureFileDataID" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "EffectRadius" },
{ .IsSigned = false, .Type = FT_INT, .Name = "Type" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Type" },
{ .IsSigned = true, .Type = FT_INT, .Name = "GenericID" },
{ .IsSigned = false, .Type = FT_INT, .Name = "RibbonQualityID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "DissolveEffectID" },
@@ -5907,7 +5942,7 @@ struct SpellVisualMissileLoadInfo
{ .IsSigned = true, .Type = FT_INT, .Name = "FollowGroundHeight" },
{ .IsSigned = false, .Type = FT_INT, .Name = "FollowGroundDropSpeed" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "FollowGroundApproach" },
{ .IsSigned = false, .Type = FT_INT, .Name = "Flags" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
{ .IsSigned = false, .Type = FT_SHORT, .Name = "SpellMissileMotionID" },
{ .IsSigned = false, .Type = FT_INT, .Name = "AnimKitID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "ClutterLevel" },
@@ -5924,7 +5959,7 @@ struct SpellXSpellVisualLoadInfo
static constexpr DB2FieldMeta Fields[13] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "DifficultyID" },
{ .IsSigned = true, .Type = FT_SHORT, .Name = "DifficultyID" },
{ .IsSigned = false, .Type = FT_INT, .Name = "SpellVisualID" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Probability" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Flags" },
@@ -6233,7 +6268,7 @@ struct TraitEdgeLoadInfo
{ .IsSigned = true, .Type = FT_INT, .Name = "VisualStyle" },
{ .IsSigned = false, .Type = FT_INT, .Name = "LeftTraitNodeID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "RightTraitNodeID" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Type" },
{ .IsSigned = false, .Type = FT_BYTE, .Name = "Type" },
};
static constexpr DB2LoadInfo Instance{ Fields, 5, &TraitEdgeMeta::Instance, HOTFIX_SEL_TRAIT_EDGE };
@@ -6571,7 +6606,7 @@ struct TransportRotationLoadInfo
struct UiMapLoadInfo
{
static constexpr DB2FieldMeta Fields[16] =
static constexpr DB2FieldMeta Fields[15] =
{
{ .IsSigned = false, .Type = FT_STRING, .Name = "Name" },
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
@@ -6581,7 +6616,6 @@ struct UiMapLoadInfo
{ .IsSigned = false, .Type = FT_BYTE, .Name = "Type" },
{ .IsSigned = true, .Type = FT_INT, .Name = "BountySetID" },
{ .IsSigned = false, .Type = FT_INT, .Name = "BountyDisplayLocation" },
{ .IsSigned = true, .Type = FT_INT, .Name = "VisibilityPlayerConditionID2" },
{ .IsSigned = true, .Type = FT_INT, .Name = "VisibilityPlayerConditionID" },
{ .IsSigned = true, .Type = FT_BYTE, .Name = "HelpTextPosition" },
{ .IsSigned = true, .Type = FT_INT, .Name = "BkgAtlasID" },
@@ -6591,7 +6625,7 @@ struct UiMapLoadInfo
{ .IsSigned = true, .Type = FT_BYTE, .Name = "MapArtZoneTextPosition" },
};
static constexpr DB2LoadInfo Instance{ Fields, 16, &UiMapMeta::Instance, HOTFIX_SEL_UI_MAP };
static constexpr DB2LoadInfo Instance{ Fields, 15, &UiMapMeta::Instance, HOTFIX_SEL_UI_MAP };
};
struct UiMapAssignmentLoadInfo
File diff suppressed because it is too large Load Diff
+2 -15
View File
@@ -217,6 +217,7 @@ DB2Storage<ItemSetSpellEntry> sItemSetSpellStore("ItemSetSpell
DB2Storage<ItemSparseEntry> sItemSparseStore("ItemSparse.db2", &ItemSparseLoadInfo::Instance);
DB2Storage<ItemSpecEntry> sItemSpecStore("ItemSpec.db2", &ItemSpecLoadInfo::Instance);
DB2Storage<ItemSpecOverrideEntry> sItemSpecOverrideStore("ItemSpecOverride.db2", &ItemSpecOverrideLoadInfo::Instance);
DB2Storage<ItemSquishEraEntry> sItemSquishEraStore("ItemSquishEra.db2", &ItemSquishEraLoadInfo::Instance);
DB2Storage<ItemXBonusTreeEntry> sItemXBonusTreeStore("ItemXBonusTree.db2", &ItemXBonusTreeLoadInfo::Instance);
DB2Storage<ItemXItemEffectEntry> sItemXItemEffectStore("ItemXItemEffect.db2", &ItemXItemEffectLoadInfo::Instance);
DB2Storage<JournalEncounterEntry> sJournalEncounterStore("JournalEncounter.db2", &JournalEncounterLoadInfo::Instance);
@@ -269,7 +270,6 @@ DB2Storage<PowerDisplayEntry> sPowerDisplayStore("PowerDisplay
DB2Storage<PowerTypeEntry> sPowerTypeStore("PowerType.db2", &PowerTypeLoadInfo::Instance);
DB2Storage<PrestigeLevelInfoEntry> sPrestigeLevelInfoStore("PrestigeLevelInfo.db2", &PrestigeLevelInfoLoadInfo::Instance);
DB2Storage<PVPDifficultyEntry> sPVPDifficultyStore("PVPDifficulty.db2", &PvpDifficultyLoadInfo::Instance);
DB2Storage<PVPItemEntry> sPVPItemStore("PVPItem.db2", &PvpItemLoadInfo::Instance);
DB2Storage<PVPStatEntry> sPVPStatStore("PVPStat.db2", &PvpStatLoadInfo::Instance);
DB2Storage<PvpSeasonEntry> sPvpSeasonStore("PvpSeason.db2", &PvpSeasonLoadInfo::Instance);
DB2Storage<PvpTalentEntry> sPvpTalentStore("PvpTalent.db2", &PvpTalentLoadInfo::Instance);
@@ -517,7 +517,6 @@ namespace
std::unordered_map<uint32 /*pathID*/, PathDb2> _paths;
PhaseGroupContainer _phasesByGroup;
PowerTypesContainer _powerTypes;
std::unordered_map<uint32, uint8> _pvpItemBonus;
PvpTalentSlotUnlockEntry const* _pvpTalentSlotUnlock[MAX_PVP_TALENT_SLOTS];
std::unordered_map<uint32, std::vector<QuestLineXQuestEntry const*>> _questsByQuestLine;
QuestPackageItemContainer _questPackages;
@@ -847,6 +846,7 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul
LOAD_DB2(sItemSparseStore);
LOAD_DB2(sItemSpecStore);
LOAD_DB2(sItemSpecOverrideStore);
LOAD_DB2(sItemSquishEraStore);
LOAD_DB2(sItemXBonusTreeStore);
LOAD_DB2(sItemXItemEffectStore);
LOAD_DB2(sJournalEncounterStore);
@@ -899,7 +899,6 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul
LOAD_DB2(sPowerTypeStore);
LOAD_DB2(sPrestigeLevelInfoStore);
LOAD_DB2(sPVPDifficultyStore);
LOAD_DB2(sPVPItemStore);
LOAD_DB2(sPVPStatStore);
LOAD_DB2(sPvpSeasonStore);
LOAD_DB2(sPvpTalentStore);
@@ -1484,9 +1483,6 @@ void DB2Manager::IndexLoadedStores()
ASSERT(entry->RangeIndex < MAX_BATTLEGROUND_BRACKETS, "PvpDifficulty bracket (%d) exceeded max allowed value (%d)", entry->RangeIndex, MAX_BATTLEGROUND_BRACKETS);
}
for (PVPItemEntry const* pvpItem : sPVPItemStore)
_pvpItemBonus[pvpItem->ItemID] = pvpItem->ItemLevelDelta;
for (PvpTalentSlotUnlockEntry const* talentUnlock : sPvpTalentSlotUnlockStore)
{
ASSERT(talentUnlock->Slot < (1 << MAX_PVP_TALENT_SLOTS));
@@ -3009,15 +3005,6 @@ PowerTypeEntry const* DB2Manager::GetPowerTypeByName(std::string const& name) co
return nullptr;
}
uint8 DB2Manager::GetPvpItemLevelBonus(uint32 itemId) const
{
auto itr = _pvpItemBonus.find(itemId);
if (itr != _pvpItemBonus.end())
return itr->second;
return 0;
}
std::vector<RewardPackXCurrencyTypeEntry const*> const* DB2Manager::GetRewardPackCurrencyTypesByRewardID(uint32 rewardPackID) const
{
return Trinity::Containers::MapGetValuePtr(_rewardPackCurrencyTypes, rewardPackID);
+1 -1
View File
@@ -172,6 +172,7 @@ TC_GAME_API extern DB2Storage<ItemSetSpellEntry> sItemSetSpel
TC_GAME_API extern DB2Storage<ItemSparseEntry> sItemSparseStore;
TC_GAME_API extern DB2Storage<ItemSpecEntry> sItemSpecStore;
TC_GAME_API extern DB2Storage<ItemSpecOverrideEntry> sItemSpecOverrideStore;
TC_GAME_API extern DB2Storage<ItemSquishEraEntry> sItemSquishEraStore;
TC_GAME_API extern DB2Storage<ItemXBonusTreeEntry> sItemXBonusTreeStore;
TC_GAME_API extern DB2Storage<ItemXItemEffectEntry> sItemXItemEffectStore;
TC_GAME_API extern DB2Storage<JournalEncounterEntry> sJournalEncounterStore;
@@ -519,7 +520,6 @@ public:
std::vector<uint32> const* GetPhasesForGroup(uint32 group) const;
PowerTypeEntry const* GetPowerTypeEntry(Powers power) const;
PowerTypeEntry const* GetPowerTypeByName(std::string const& name) const;
uint8 GetPvpItemLevelBonus(uint32 itemId) const;
static PVPDifficultyEntry const* GetBattlegroundBracketByLevel(uint32 mapid, uint32 level);
static PVPDifficultyEntry const* GetBattlegroundBracketById(uint32 mapid, BattlegroundBracketId id);
uint32 GetRequiredLevelForPvpTalentSlot(uint8 slot, Classes class_) const;
+80 -68
View File
@@ -176,7 +176,7 @@ struct AreaTriggerEntry
int8 ShapeType;
int16 ShapeID;
int32 AreaTriggerActionSetID;
int8 Flags;
int32 Flags;
AreaTriggerShapeType GetShapeType() const { return static_cast<AreaTriggerShapeType>(ShapeType); }
};
@@ -208,7 +208,7 @@ struct ArtifactEntry
int32 UiBarOverlayColor;
int32 UiBarBackgroundColor;
uint16 ChrSpecializationID;
uint8 Flags;
int32 Flags;
uint8 ArtifactCategoryID;
uint32 UiModelSceneID;
uint32 SpellVisualKitID;
@@ -229,7 +229,7 @@ struct ArtifactAppearanceEntry
uint32 OverrideShapeshiftDisplayID;
uint32 UiItemAppearanceID;
uint32 UiAltItemAppearanceID;
uint8 Flags;
int32 Flags;
uint16 UiCameraID;
uint32 UsablePlayerConditionID;
};
@@ -243,7 +243,7 @@ struct ArtifactAppearanceSetEntry
uint16 UiCameraID;
uint16 AltHandUICameraID;
int8 ForgeAttachmentOverride;
uint8 Flags;
int32 Flags;
uint32 ArtifactID;
};
@@ -261,7 +261,7 @@ struct ArtifactPowerEntry
uint8 ArtifactID;
uint8 MaxPurchasableRank;
int32 Label;
uint8 Flags;
int32 Flags;
uint8 Tier;
};
@@ -468,7 +468,7 @@ struct BattlePetAbilityEntry
int8 PetTypeEnum;
uint32 Cooldown;
uint16 BattlePetVisualID;
uint8 Flags;
int32 Flags;
};
struct BattlePetBreedQualityEntry
@@ -520,6 +520,7 @@ struct BattlemasterListEntry
LocalizedString GameType;
LocalizedString ShortDescription;
LocalizedString LongDescription;
int8 InstanceType;
int32 PvpType;
int8 MinLevel;
int8 MaxLevel;
@@ -577,7 +578,7 @@ struct Cfg_CategoriesEntry
uint16 LocaleMask;
uint8 CreateCharsetMask;
uint8 ExistingCharsetMask;
uint8 Flags;
int32 Flags;
int8 Order;
EnumFlag<CfgCategoriesCharsets> GetCreateCharsetMask() const { return static_cast<CfgCategoriesCharsets>(CreateCharsetMask); }
@@ -1032,6 +1033,7 @@ struct CraftingQualityEntry
{
uint32 ID;
int32 QualityTier;
int32 CraftingQualityAtlasSetID;
};
//struct CreatureDifficultyEntry
@@ -1428,6 +1430,9 @@ struct CurrencyTypesEntry
uint32 RechargingCycleDurationMS;
float AccountTransferPercentage;
uint8 OrderIndex;
float RecraftReagentCountPercentage;
uint8 OrderSource;
int32 MCRCurrencyID;
std::array<int32, 2> Flags;
EnumFlag<CurrencyTypesFlags> GetFlags() const { return static_cast<CurrencyTypesFlags>(Flags[0]); }
@@ -1535,12 +1540,12 @@ struct DifficultyEntry
uint8 InstanceType;
uint8 OrderIndex;
int8 OldEnumValue;
uint8 FallbackDifficultyID;
int16 FallbackDifficultyID;
uint8 MinPlayers;
uint8 MaxPlayers;
uint16 Flags;
int32 Flags;
uint8 ItemContext;
uint8 ToggleDifficultyID;
int16 ToggleDifficultyID;
uint32 GroupSizeHealthCurveID;
uint32 GroupSizeDmgCurveID;
uint32 GroupSizeSpellPointsCurveID;
@@ -1552,7 +1557,7 @@ struct DungeonEncounterEntry
LocalizedString Name;
uint32 ID;
uint16 MapID;
int32 DifficultyID;
int16 DifficultyID;
int32 OrderIndex;
int32 CompleteWorldStateID;
int8 Bit;
@@ -1972,8 +1977,7 @@ struct GarrPlotEntry
uint8 PlotType;
int32 HordeConstructObjID;
int32 AllianceConstructObjID;
uint8 Flags;
uint8 UiCategoryID;
int32 Flags;
std::array<uint32, 2> UpgradeRequirement;
};
@@ -2146,8 +2150,8 @@ struct HolidaysEntry
uint32 HolidayNameID;
uint32 HolidayDescriptionID;
uint8 Priority;
int8 CalendarFilterType;
uint8 Flags;
uint8 CalendarFilterType;
int32 Flags;
std::array<uint16, MAX_HOLIDAY_DURATIONS> Duration;
std::array<uint32, MAX_HOLIDAY_DATES> Date; // dates in unix time starting at January, 1, 2000
std::array<uint8, MAX_HOLIDAY_DURATIONS> CalendarFlags;
@@ -2194,8 +2198,11 @@ struct ItemEntry
uint32 ItemGroupSoundsID;
int32 ContentTuningID;
int32 ModifiedCraftingReagentItemID;
uint8 Unknown1200;
int32 CraftingQualityID;
int32 Unknown1127;
int32 ItemSquishEraID;
float RecraftReagentCountPercentage;
uint8 OrderSource;
};
struct ItemAppearanceEntry
@@ -2301,7 +2308,7 @@ struct ItemChildEquipmentEntry
uint32 ID;
uint32 ParentItemID;
int32 ChildItemID;
uint8 ChildItemEquipSlot;
int32 ChildItemEquipSlot;
};
struct ItemClassEntry
@@ -2320,7 +2327,7 @@ struct ItemContextPickerEntryEntry
uint8 OrderIndex;
int32 PVal;
int32 LabelID;
uint32 Flags;
int32 Flags;
uint32 PlayerConditionID;
uint32 ItemContextPickerID;
};
@@ -2389,7 +2396,7 @@ struct ItemEffectEntry
{
uint32 ID;
uint8 LegacySlotIndex;
int8 TriggerType;
uint8 TriggerType;
int16 Charges;
int32 CoolDownMSec;
int32 CategoryCoolDownMSec;
@@ -2445,7 +2452,7 @@ struct ItemLimitCategoryEntry
uint32 ID;
LocalizedString Name;
uint8 Quantity;
uint8 Flags;
int32 Flags;
};
struct ItemLimitCategoryConditionEntry
@@ -2505,7 +2512,7 @@ struct ItemScalingConfigEntry
int32 ItemOffsetCurveID;
int32 ItemLevel;
int32 RequiredLevel;
int32 Unknown1125;
int32 ItemSquishEraID;
int32 Flags;
};
@@ -2533,7 +2540,7 @@ struct ItemSetEntry
{
uint32 ID;
LocalizedString Name;
uint32 SetFlags;
int32 SetFlags;
uint32 RequiredSkill;
uint16 RequiredSkillRank;
std::array<uint32, MAX_ITEM_SET_ITEMS> ItemID;
@@ -2586,7 +2593,7 @@ struct ItemSparseEntry
int32 PlayerLevelToItemLevelCurveID;
int32 ItemLevelOffsetCurveID;
int32 ItemLevelOffsetItemLevel;
int32 Unknown1127;
int32 ItemSquishEraID;
uint16 ItemNameDescriptionID;
uint16 RequiredTransmogHoliday;
uint16 RequiredHoliday;
@@ -2639,6 +2646,14 @@ struct ItemSpecOverrideEntry
uint32 ItemID;
};
struct ItemSquishEraEntry
{
uint32 ID;
int32 Patch;
int32 CurveID;
int32 Flags;
};
struct ItemXBonusTreeEntry
{
uint32 ID;
@@ -2758,7 +2773,7 @@ struct LFGDungeonsEntry
int32 PopupBgTextureFileID;
uint8 ExpansionLevel;
int16 MapID;
uint8 DifficultyID;
int16 DifficultyID;
float MinGear;
uint8 GroupID;
uint8 OrderIndex;
@@ -2816,8 +2831,8 @@ struct LiquidTypeEntry
uint8 MaterialID;
int32 MinimapStaticCol;
std::array<uint8, 6> FrameCountTexture;
std::array<int32, 2> Color;
std::array<float, 18> Float;
std::array<int32, 3> Color;
std::array<float, 38> Float;
std::array<uint32, 4> Int;
std::array<float, 4> Coefficient;
};
@@ -2956,7 +2971,7 @@ struct MapDifficultyEntry
{
LocalizedString Message; // m_message_lang (text showed when transfer to map failed)
uint32 ID;
int32 DifficultyID;
int16 DifficultyID;
int32 LockID;
uint8 ResetInterval;
int32 MaxPlayers;
@@ -3142,7 +3157,7 @@ struct OverrideSpellDataEntry
uint32 ID;
std::array<int32, MAX_OVERRIDE_SPELL> Spells;
int32 PlayerActionBarFileDataID;
uint8 Flags;
int32 Flags;
};
struct ParagonReputationEntry
@@ -3260,7 +3275,7 @@ struct PlayerConditionEntry
uint32 ModifierTreeID;
int8 PowerType;
uint8 PowerTypeComp;
uint8 PowerTypeValue;
int8 PowerTypeValue;
int32 WeaponSubclassMask;
uint8 MaxGuildLevel;
uint8 MinGuildLevel;
@@ -3391,13 +3406,6 @@ struct PVPDifficultyEntry
BattlegroundBracketId GetBracketId() const { return BattlegroundBracketId(RangeIndex); }
};
struct PVPItemEntry
{
uint32 ID;
int32 ItemID;
uint8 ItemLevelDelta;
};
struct PVPStatEntry
{
LocalizedString Description;
@@ -3563,8 +3571,8 @@ struct ScenarioEntry
uint32 ID;
LocalizedString Name;
uint16 AreaTableID;
uint8 Type;
uint8 Flags;
int32 Type;
int32 Flags;
uint32 UiTextureKitID;
};
@@ -3579,7 +3587,7 @@ struct ScenarioStepEntry
int32 RelatedStep; // Bonus step can only be completed if scenario is in the step specified in this field
uint16 Supersedes; // Used in conjunction with Proving Grounds scenarios, when sequencing steps (Not using step order?)
uint8 OrderIndex;
uint8 Flags;
int32 Flags;
uint32 VisibilityPlayerConditionID;
uint16 WidgetSetID;
@@ -3609,6 +3617,7 @@ struct SceneScriptPackageEntry
{
uint32 ID;
char const* Name;
int32 Flags;
int32 Unknown915;
};
@@ -3740,7 +3749,7 @@ struct SpecSetMemberEntry
struct SpellAuraOptionsEntry
{
uint32 ID;
uint8 DifficultyID;
int16 DifficultyID;
uint16 CumulativeAura;
int32 ProcCategoryRecovery;
uint8 ProcChance;
@@ -3753,7 +3762,7 @@ struct SpellAuraOptionsEntry
struct SpellAuraRestrictionsEntry
{
uint32 ID;
int32 DifficultyID;
int16 DifficultyID;
int32 CasterAuraState;
int32 TargetAuraState;
int32 ExcludeCasterAuraState;
@@ -3762,10 +3771,10 @@ struct SpellAuraRestrictionsEntry
int32 TargetAuraSpell;
int32 ExcludeCasterAuraSpell;
int32 ExcludeTargetAuraSpell;
int32 CasterAuraType;
int32 TargetAuraType;
int32 ExcludeCasterAuraType;
int32 ExcludeTargetAuraType;
int16 CasterAuraType;
int16 TargetAuraType;
int16 ExcludeCasterAuraType;
int16 ExcludeTargetAuraType;
uint32 SpellID;
};
@@ -3791,9 +3800,10 @@ struct SpellCastingRequirementsEntry
struct SpellCategoriesEntry
{
uint32 ID;
uint8 DifficultyID;
int16 DifficultyID;
int16 Category;
int32 DefenseType;
int8 DefenseType;
int32 DiminishType;
int8 DispelType;
int8 Mechanic;
int32 PreventionType;
@@ -3827,7 +3837,7 @@ struct SpellClassOptionsEntry
struct SpellCooldownsEntry
{
uint32 ID;
uint8 DifficultyID;
int16 DifficultyID;
int32 CategoryRecoveryTime;
int32 RecoveryTime;
int32 StartRecoveryTime;
@@ -3840,13 +3850,14 @@ struct SpellDurationEntry
uint32 ID;
int32 Duration;
int32 MaxDuration;
int32 DurationPerResource;
};
struct SpellEffectEntry
{
uint32 ID;
int16 EffectAura;
int32 DifficultyID;
int16 DifficultyID;
int32 EffectIndex;
uint32 Effect;
float EffectAmplitude;
@@ -3869,6 +3880,7 @@ struct SpellEffectEntry
float GroupSizeBasePointsCoefficient;
float EffectBasePoints;
int32 ScalingClass;
int32 TargetNodeGraph;
std::array<int32, 2> EffectMiscValue;
std::array<uint32, 2> EffectRadiusIndex;
flag128 EffectSpellClassMask;
@@ -3911,7 +3923,7 @@ struct SpellFocusObjectEntry
struct SpellInterruptsEntry
{
uint32 ID;
uint8 DifficultyID;
int16 DifficultyID;
int32 InterruptFlags;
std::array<int32, MAX_SPELL_AURA_INTERRUPT_FLAGS> AuraInterruptFlags;
std::array<int32, MAX_SPELL_AURA_INTERRUPT_FLAGS> ChannelInterruptFlags;
@@ -3988,7 +4000,7 @@ struct SpellLearnSpellEntry
struct SpellLevelsEntry
{
uint32 ID;
uint8 DifficultyID;
int16 DifficultyID;
int16 MaxLevel;
uint8 MaxPassiveAuraLevel;
int32 BaseLevel;
@@ -3999,8 +4011,8 @@ struct SpellLevelsEntry
struct SpellMiscEntry
{
uint32 ID;
std::array<int32, 16> Attributes;
uint8 DifficultyID;
std::array<int32, 17> Attributes;
int16 DifficultyID;
uint16 CastingTimeIndex;
uint16 DurationIndex;
uint16 PvPDurationIndex;
@@ -4047,7 +4059,7 @@ struct SpellPowerEntry
struct SpellPowerDifficultyEntry
{
uint32 ID;
uint8 DifficultyID;
int16 DifficultyID;
uint8 OrderIndex;
};
@@ -4055,13 +4067,13 @@ struct SpellProcsPerMinuteEntry
{
uint32 ID;
float BaseProcRate;
uint8 Flags;
int32 Flags;
};
struct SpellProcsPerMinuteModEntry
{
uint32 ID;
uint8 Type;
int32 Type;
int32 Param;
float Coeff;
uint32 SpellProcsPerMinuteID;
@@ -4081,7 +4093,7 @@ struct SpellRangeEntry
uint32 ID;
LocalizedString DisplayName;
LocalizedString DisplayNameShort;
uint8 Flags;
int32 Flags;
std::array<float, 2> RangeMin;
std::array<float, 2> RangeMax;
};
@@ -4102,8 +4114,10 @@ struct SpellReagentsCurrencyEntry
{
uint32 ID;
uint32 SpellID;
uint16 CurrencyTypesID;
uint16 CurrencyCount;
int32 CurrencyTypesID;
int32 CurrencyCount;
int32 OverrideRecraftCurrencyCount;
uint8 OrderSource;
};
struct SpellScalingEntry
@@ -4112,7 +4126,6 @@ struct SpellScalingEntry
int32 SpellID;
uint32 MinScalingLevel;
uint32 MaxScalingLevel;
int16 ScalesFromItemLevel;
};
struct SpellShapeshiftEntry
@@ -4146,7 +4159,7 @@ struct SpellShapeshiftFormEntry
struct SpellTargetRestrictionsEntry
{
uint32 ID;
uint8 DifficultyID;
int16 DifficultyID;
float ConeDegrees;
uint8 MaxTargets;
uint32 MaxTargetLevel;
@@ -4197,10 +4210,10 @@ struct SpellVisualEffectNameEntry
float MinAllowedScale;
float MaxAllowedScale;
float Alpha;
uint32 Flags;
int32 Flags;
int32 TextureFileDataID;
float EffectRadius;
uint32 Type;
int32 Type;
int32 GenericID;
uint32 RibbonQualityID;
int32 DissolveEffectID;
@@ -4237,7 +4250,7 @@ struct SpellVisualMissileEntry
int32 FollowGroundHeight;
uint32 FollowGroundDropSpeed;
uint16 FollowGroundApproach;
uint32 Flags;
int32 Flags;
uint16 SpellMissileMotionID;
uint32 AnimKitID;
int32 ClutterLevel;
@@ -4249,7 +4262,7 @@ struct SpellVisualMissileEntry
struct SpellXSpellVisualEntry
{
uint32 ID;
uint8 DifficultyID;
int16 DifficultyID;
uint32 SpellVisualID;
float Probability;
int32 Flags;
@@ -4470,7 +4483,7 @@ struct TraitEdgeEntry
int32 VisualStyle;
uint32 LeftTraitNodeID;
int32 RightTraitNodeID;
int32 Type;
uint8 Type;
};
struct TraitNodeEntry
@@ -4698,8 +4711,7 @@ struct UiMapEntry
uint8 Type;
int32 BountySetID;
uint32 BountyDisplayLocation;
int32 VisibilityPlayerConditionID2; // if not met then map is skipped when evaluating UiMapAssignment
int32 VisibilityPlayerConditionID; // if not met then client checks other maps with the same AlternateUiMapGroup, not re-evaluating UiMapAssignment for them
int32 VisibilityPlayerConditionID;
int8 HelpTextPosition;
int32 BkgAtlasID;
int32 AlternateUiMapGroup;
+24 -8
View File
@@ -799,7 +799,7 @@ enum class CriteriaType : int16
RemoveDecor = 271, /*NYI*/ // Remove any decor
CollectUniqueDecor = 272, /*NYI*/ // Collect Unique Decor
Count = 279
Count = 283
};
enum class CriteriaTreeFlags : uint16
@@ -925,7 +925,7 @@ enum class CurveInterpolationMode : uint8
Constant = 6,
};
enum Difficulty : uint8
enum Difficulty : int16
{
DIFFICULTY_NONE = 0,
DIFFICULTY_NORMAL = 1,
@@ -1149,6 +1149,7 @@ enum class GameRule : int32
GdapiCharacterProfileDisabled = 153,
HousingEnabled = 154,
RestrictedAchievementCategoryID = 155,
EjJourneysDisabled = 156,
LootMethodStyle = 157,
ExperienceBarDisabled = 159,
HideUnavailableTransmogSlots = 160,
@@ -1160,6 +1161,7 @@ enum class GameRule : int32
RecommendLeastPopulatedRealm = 169,
BagSpaceOverride = 172,
UnflaggedPlayersCanAttackPvPFlaggedPlayers = 173,
PvPInitialRatingOverride = 190,
};
enum class GlobalCurve : int32
@@ -1188,6 +1190,16 @@ enum class GlobalCurve : int32
MythicPlusEndOfRunGearSequenceLevel = 23,
SpellAreaEffectWarningRadius = 26, // ground spell effect warning circle radius (based on spell radius)
HouseLevelFavorForLevel = 37,
HouseInteriorDecorBudget = 38,
HouseExteriorDecorBudget = 39,
HouseRoomPlacementBudget = 40,
HouseFixtureBudget = 41,
TransmogCost = 43,
MaxHouseSizeForLevel = 46,
};
#define MAX_ITEM_PROTO_FLAGS 5
@@ -1276,6 +1288,7 @@ enum ItemBonusType
ITEM_BONUS_BONDING_WITH_PRIORITY = 47,
ITEM_BONUS_ITEM_OFFSET_CURVE = 48,
ITEM_BONUS_SCALING_CONFIG_AND_REQ_LEVEL = 49,
ITEM_BONUS_ITEM_BONUS_LIST = 50,
ITEM_BONUS_SCALING_CONFIG = 51,
};
@@ -1546,12 +1559,15 @@ enum ItemSpecStat
enum MapTypes // Lua_IsInInstance
{
MAP_COMMON = 0, // none
MAP_INSTANCE = 1, // party
MAP_RAID = 2, // raid
MAP_BATTLEGROUND = 3, // pvp
MAP_ARENA = 4, // arena
MAP_SCENARIO = 5 // scenario
MAP_COMMON = 0, // none
MAP_INSTANCE = 1, // party
MAP_RAID = 2, // raid
MAP_BATTLEGROUND = 3, // pvp
MAP_ARENA = 4, // arena
MAP_SCENARIO = 5, // scenario
MAP_WOWLABS = 6, // wowlabs
MAP_HOUSE_INTERIOR = 7, // interior
MAP_HOUSE_NEIGHBORHOOD = 8 // neighborhood
};
enum class MapFlags : uint32
+1 -1
View File
@@ -32,7 +32,7 @@ class Player;
class Quest;
class Map;
struct LFGDungeonsEntry;
enum Difficulty : uint8;
enum Difficulty : int16;
namespace WorldPackets
{
@@ -1556,7 +1556,7 @@ void GameObject::Update(uint32 diff)
m_loot->Update();
// Non-consumable chest was partially looted and restock time passed, restock all loot now
if (GetGOInfo()->chest.consumable == 0 && m_restockTime && GameTime::GetGameTime() >= m_restockTime)
if (!GetGOInfo()->IsDespawnAtAction() && m_restockTime && GameTime::GetGameTime() >= m_restockTime)
{
m_restockTime = 0;
m_lootState = GO_READY;
@@ -2621,7 +2621,7 @@ void GameObject::Use(Unit* user, bool ignoreCastInProgress /*= false*/)
if (info->GetLootId())
{
Group const* group = player->GetGroup();
bool groupRules = group && info->chest.usegrouplootrules;
bool groupRules = group && info->IsUsingGroupLootRules();
Loot* loot = new Loot(GetMap(), GetGUID(), LOOT_CHEST, groupRules ? group : nullptr);
m_loot.reset(loot);
@@ -3237,7 +3237,7 @@ void GameObject::Use(Unit* user, bool ignoreCastInProgress /*= false*/)
// fallback, will always work
player->TeleportTo(GetMapId(), GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation(), TELE_TO_NOT_LEAVE_TRANSPORT | TELE_TO_NOT_LEAVE_COMBAT | TELE_TO_NOT_UNSUMMON_PET);
player->SetStandState(UnitStandStateType(UNIT_STAND_STATE_SIT_LOW_CHAIR + info->barberChair.chairheight), info->barberChair.SitAnimKit);
player->SetStandState(UnitStandStateType(UNIT_STAND_STATE_SIT_LOW_CHAIR + info->barberChair.chairheight), info->barberChair.CustomSitAnimKit);
return;
}
case GAMEOBJECT_TYPE_NEW_FLAG:
@@ -3874,7 +3874,7 @@ void GameObject::OnLootRelease(Player* looter)
case GAMEOBJECT_TYPE_CHEST:
{
GameObjectTemplate const* goInfo = GetGOInfo();
if (!goInfo->chest.consumable && goInfo->chest.chestPersonalLoot)
if (!goInfo->IsDespawnAtAction() && goInfo->chest.chestPersonalLoot)
{
DespawnForPlayer(looter, goInfo->chest.chestRestockTime
? Seconds(goInfo->chest.chestRestockTime)
@@ -27,6 +27,26 @@
#include <set>
#include <string>
// TODO: Reorder properly, this is temporary to fix compile
enum class GameObjectChestFlags : int32
{
Consumable = 0x0001,
RequireLOS = 0x0002,
LeaveLoot = 0x0004,
NotInCombat = 0x0008,
LogLoot = 0x0010,
UseGroupLootRules = 0x0020,
FloatingTooltip = 0x0040,
GroupXP = 0x0080,
DamageImmuneOK = 0x0100,
GiganticAOI = 0x0200,
LargeAOI = 0x0400,
TurnPersonalLootSecurityOff = 0x0800,
ForceSingleLooter = 0x1000
};
DEFINE_ENUM_FLAG(GameObjectChestFlags);
struct DestructibleHitpoint
{
uint32 Id;
@@ -107,38 +127,38 @@ struct GameObjectTemplate
uint32 open; // 0 open, References: Lock_, NoValue = 0
uint32 chestLoot; // 1 chestLoot (legacy/classic), References: Treasure, NoValue = 0
uint32 chestRestockTime; // 2 chestRestockTime, int, Min value: 0, Max value: 1800000, Default value: 0
uint32 consumable; // 3 consumable, enum { false, true, }; Default: false
uint32 Unused; // 3 Unused, int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 minRestock; // 4 minRestock, int, Min value: 0, Max value: 65535, Default value: 0
uint32 maxRestock; // 5 maxRestock, int, Min value: 0, Max value: 65535, Default value: 0
uint32 triggeredEvent; // 6 triggeredEvent, References: GameEvents, NoValue = 0
uint32 linkedTrap; // 7 linkedTrap, References: GameObjects, NoValue = 0
uint32 questID; // 8 questID, References: QuestV2, NoValue = 0
uint32 InteractRadiusOverride; // 9 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 requireLOS; // 10 require LOS, enum { false, true, }; Default: false
uint32 leaveLoot; // 11 leaveLoot, enum { false, true, }; Default: false
uint32 notInCombat; // 12 notInCombat, enum { false, true, }; Default: false
uint32 logloot; // 13 log loot, enum { false, true, }; Default: false
uint32 Unused2; // 10 Unused, int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 Unused3; // 11 Unused, int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 Unused4; // 12 Unused, int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 Unused5; // 13 Unused, int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 openTextID; // 14 openTextID, References: BroadcastText, NoValue = 0
uint32 usegrouplootrules; // 15 use group loot rules, enum { false, true, }; Default: false
uint32 floatingTooltip; // 16 floatingTooltip, enum { false, true, }; Default: false
uint32 Unused6; // 15 Unused, int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 Unused7; // 16 Unused, int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 conditionID1; // 17 conditionID1, References: PlayerCondition, NoValue = 0
int32 xpLevel; // 18 xpLevel, int, Min value: -2147483648, Max value: 2147483647, Default value: 0
uint32 xpDifficulty; // 19 xpDifficulty, enum { No Exp, Trivial, Very Small, Small, Substandard, Standard, High, Epic, Dungeon, 5, }; Default: No Exp
uint32 Unused; // 20 Unused, int, Min value: 0, Max value: 123, Default value: 0
uint32 GroupXP; // 21 Group XP, enum { false, true, }; Default: false
uint32 DamageImmuneOK; // 22 Damage Immune OK, enum { false, true, }; Default: false
uint32 ChestFlags; // 20 Chest Flags, int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 OneTimeChestCharacterFlag; // 21 One Time Chest Character Flag, References: PlayerDataFlagCharacter, NoValue = 0
uint32 OneTimeChestAccountFlag; // 22 One Time Chest Account Flag, References: PlayerDataFlagAccount, NoValue = 0
uint32 trivialSkillLow; // 23 trivialSkillLow, int, Min value: 0, Max value: 65535, Default value: 0
uint32 trivialSkillHigh; // 24 trivialSkillHigh, int, Min value: 0, Max value: 65535, Default value: 0
uint32 DungeonEncounter; // 25 Dungeon Encounter, References: DungeonEncounter, NoValue = 0
uint32 spell; // 26 spell, References: Spell, NoValue = 0
uint32 GiganticAOI; // 27 Gigantic AOI, enum { false, true, }; Default: false
uint32 LargeAOI; // 28 Large AOI, enum { false, true, }; Default: false
uint32 Unused8; // 27 Unused, int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 Unused9; // 28 Unused, int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 SpawnVignette; // 29 Spawn Vignette, References: vignette, NoValue = 0
uint32 chestPersonalLoot; // 30 chest Personal Loot, References: Treasure, NoValue = 0
uint32 turnpersonallootsecurityoff; // 31 turn personal loot security off, enum { false, true, }; Default: false
uint32 ChestProperties; // 32 Chest Properties, References: ChestProperties, NoValue = 0
uint32 Unused10; // 31 Unused, int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 Unused11; // 32 Unused, References: ChestProperties, NoValue = 0
uint32 chestPushLoot; // 33 chest Push Loot, References: Treasure, NoValue = 0
uint32 ForceSingleLooter; // 34 Force Single Looter, enum { false, true, }; Default: false
uint32 Unused12; // 34 Unused, int, Min value: 0, Max value: 2147483647, Default value: 0
} chest;
// 4 GAMEOBJECT_TYPE_BINDER
struct
@@ -194,6 +214,8 @@ struct GameObjectTemplate
uint32 triggeredEvent; // 3 triggeredEvent, References: GameEvents, NoValue = 0
uint32 conditionID1; // 4 conditionID1, References: PlayerCondition, NoValue = 0
uint32 InteractRadiusOverride; // 5 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 CustomSitAnimKit; // 6 Custom Sit Anim Kit, References: AnimKit, NoValue = 0
int32 CustomSitHeightOffset; // 7 Custom Sit Height Offset (inches), int, Min value: -100, Max value: 100, Default value: 0
} chair;
// 8 GAMEOBJECT_TYPE_SPELL_FOCUS
struct
@@ -503,7 +525,7 @@ struct GameObjectTemplate
// 31 GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY
struct
{
uint32 InstanceType; // 0 Instance Type, enum { Not Instanced, Party Dungeon, Raid Dungeon, PVP Battlefield, Arena Battlefield, Scenario, WoWLabs, }; Default: Party Dungeon
uint32 InstanceType; // 0 Instance Type, enum { Not Instanced, Party Dungeon, Raid Dungeon, PVP Battlefield, Arena Battlefield, Scenario, WoWLabs, House Interior, House Neighborhood, }; Default: Party Dungeon
uint32 DifficultyNormal; // 1 Difficulty Normal, References: animationdata, NoValue = 0
uint32 DifficultyHeroic; // 2 Difficulty Heroic, References: animationdata, NoValue = 0
uint32 DifficultyEpic; // 3 Difficulty Epic, References: animationdata, NoValue = 0
@@ -520,8 +542,8 @@ struct GameObjectTemplate
struct
{
uint32 chairheight; // 0 chairheight, int, Min value: 0, Max value: 2, Default value: 1
int32 HeightOffset; // 1 Height Offset (inches), int, Min value: -100, Max value: 100, Default value: 0
uint32 SitAnimKit; // 2 Sit Anim Kit, References: AnimKit, NoValue = 0
int32 CustomSitHeightOffset; // 1 Custom Sit Height Offset (inches), int, Min value: -100, Max value: 100, Default value: 0
uint32 CustomSitAnimKit; // 2 Custom Sit Anim Kit, References: AnimKit, NoValue = 0
uint32 InteractRadiusOverride; // 3 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 CustomizationFeatureMask; // 4 Customization Feature Mask, int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 Preventteleportingtheplayeroutofthebarbershopchair;// 5 Prevent teleporting the player out of the barbershop chair, enum { false, true, }; Default: false
@@ -701,14 +723,15 @@ struct GameObjectTemplate
// 48 GAMEOBJECT_TYPE_UI_LINK
struct
{
uint32 UILinkType; // 0 UI Link Type(Deprecated), enum { Adventure Journal, Obliterum Forge, Scrapping Machine, Item Interaction, }; Default: Adventure Journal
uint32 UILinkType; // 0 UI Link Type(Deprecated), enum { Adventure Journal, Obliterum Forge, Scrapping Machine, Item Interaction, Cornerstone Interaction, }; Default: Adventure Journal
uint32 allowMounted; // 1 allowMounted, enum { false, true, }; Default: false
uint32 GiganticAOI; // 2 Gigantic AOI, enum { false, true, }; Default: false
uint32 spellFocusType; // 3 spellFocusType, References: SpellFocusObject, NoValue = 0
uint32 radius; // 4 radius, int, Min value: 0, Max value: 50, Default value: 10
uint32 InteractRadiusOverride; // 5 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 ItemInteractionID; // 6 Item Interaction ID, References: UiItemInteraction, NoValue = 0
uint32 PlayerInteractionType; // 7 Player Interaction Type, enum { None, TradePartner, Item, Gossip, QuestGiver, Merchant, TaxiNode, Trainer, Banker, AlliedRaceDetailsGiver, GuildBanker, Registrar, Vendor, PetitionVendor, GuildTabardVendor, TalentMaster, SpecializationMaster, MailInfo, SpiritHealer, AreaSpiritHealer, Binder, Auctioneer, StableMaster, BattleMaster, Transmogrifier, LFGDungeon, VoidStorageBanker, BlackMarketAuctioneer, AdventureMap, WorldMap, GarrArchitect, GarrTradeskill, GarrMission, ShipmentCrafter, GarrRecruitment, GarrTalent, Trophy, PlayerChoice, ArtifactForge, ObliterumForge, ScrappingMachine, ContributionCollector, AzeriteRespec, IslandQueue, ItemInteraction, ChromieTime, CovenantPreview, AnimaDiversion, LegendaryCrafting, WeeklyRewards, Soulbind, CovenantSanctum, NewPlayerGuide, ItemUpgrade, AdventureJournal, Renown, AzeriteForge, PerksProgramVendor, ProfessionsCraftingOrder, Professions, ProfessionsCustomerOrder, TraitSystem, BarbersChoice, JailersTowerBuffs, MajorFactionRenown, PersonalTabardVendor, ForgeMaster, CharacterBanker, AccountBanker, ProfessionRespec, PlaceholderType71, PlaceholderType72, PlaceholderType73, PlaceholderType74, PlaceholderType75, PlaceholderType76, GuildRename, PlaceholderType76, }; Default: None
uint32 PlayerInteractionType; // 7 Player Interaction Type, enum { None, TradePartner, Item, Gossip, QuestGiver, Merchant, TaxiNode, Trainer, Banker, AlliedRaceDetailsGiver, GuildBanker, Registrar, Vendor, PetitionVendor, GuildTabardVendor, TalentMaster, SpecializationMaster, MailInfo, SpiritHealer, AreaSpiritHealer, Binder, Auctioneer, StableMaster, BattleMaster, Transmogrifier, LFGDungeon, VoidStorageBanker, BlackMarketAuctioneer, AdventureMap, WorldMap, GarrArchitect, GarrTradeskill, GarrMission, ShipmentCrafter, GarrRecruitment, GarrTalent, Trophy, PlayerChoice, ArtifactForge, ObliterumForge, ScrappingMachine, ContributionCollector, AzeriteRespec, IslandQueue, ItemInteraction, ChromieTime, CovenantPreview, AnimaDiversion, LegendaryCrafting, WeeklyRewards, Soulbind, CovenantSanctum, NewPlayerGuide, ItemUpgrade, AdventureJournal, Renown, AzeriteForge, PerksProgramVendor, ProfessionsCraftingOrder, Professions, ProfessionsCustomerOrder, TraitSystem, BarbersChoice, JailersTowerBuffs, MajorFactionRenown, PersonalTabardVendor, ForgeMaster, CharacterBanker, AccountBanker, ProfessionRespec, CornerstoneInteraction, RenameNeighborhood, HousingBulletinBoard, HousingPedestal, CreateGuildNeighborhood, NeighborhoodCharter, GuildRename, OpenNeighborhoodCharterConfirmation, OpenHouseFinder, TieredEntrance, }; Default: None
uint32 spell; // 8 spell, References: Spell, NoValue = 0
} UILink;
// 49 GAMEOBJECT_TYPE_KEYSTONE_RECEPTACLE
struct
@@ -868,7 +891,8 @@ struct GameObjectTemplate
{
switch (type)
{
case GAMEOBJECT_TYPE_CHEST: return chest.consumable != 0;
case GAMEOBJECT_TYPE_CHEST: return chest.Unused != 0; // TODO: update database values and research flag order
// case GAMEOBJECT_TYPE_CHEST: return EnumFlag(static_cast<GameObjectChestFlags>(chest.ChestFlags)).HasFlag(GameObjectChestFlags::Consumable);
case GAMEOBJECT_TYPE_GOOBER: return goober.consumable != 0;
default: return false;
}
@@ -995,7 +1019,8 @@ struct GameObjectTemplate
{
case GAMEOBJECT_TYPE_BUTTON: return button.requireLOS;
case GAMEOBJECT_TYPE_QUESTGIVER: return questgiver.requireLOS;
case GAMEOBJECT_TYPE_CHEST: return chest.requireLOS;
case GAMEOBJECT_TYPE_CHEST: return chest.Unused2; // TODO: update database values and research flag order
// case GAMEOBJECT_TYPE_CHEST: return EnumFlag(static_cast<GameObjectChestFlags>(chest.ChestFlags)).HasFlag(GameObjectChestFlags::RequireLOS);
case GAMEOBJECT_TYPE_TRAP: return trap.requireLOS;
case GAMEOBJECT_TYPE_GOOBER: return goober.requireLOS;
case GAMEOBJECT_TYPE_FLAGSTAND: return flagStand.requireLOS;
@@ -1053,7 +1078,8 @@ struct GameObjectTemplate
case GAMEOBJECT_TYPE_DOOR: return door.noDamageImmune;
case GAMEOBJECT_TYPE_BUTTON: return button.noDamageImmune;
case GAMEOBJECT_TYPE_QUESTGIVER: return questgiver.noDamageImmune;
case GAMEOBJECT_TYPE_CHEST: return !chest.DamageImmuneOK;
case GAMEOBJECT_TYPE_CHEST: return !chest.OneTimeChestAccountFlag; // TODO: update database values and research flag order
// case GAMEOBJECT_TYPE_CHEST: return !EnumFlag(static_cast<GameObjectChestFlags>(chest.ChestFlags)).HasFlag(GameObjectChestFlags::DamageImmuneOK);
case GAMEOBJECT_TYPE_GOOBER: return goober.noDamageImmune;
case GAMEOBJECT_TYPE_FLAGSTAND: return flagStand.noDamageImmune;
case GAMEOBJECT_TYPE_FLAGDROP: return flagDrop.noDamageImmune;
@@ -1065,7 +1091,8 @@ struct GameObjectTemplate
{
switch (type)
{
case GAMEOBJECT_TYPE_CHEST: return chest.notInCombat;
case GAMEOBJECT_TYPE_CHEST: return chest.Unused4; // TODO: update database values and research flag order
//case GAMEOBJECT_TYPE_CHEST: return EnumFlag(static_cast<GameObjectChestFlags>(chest.ChestFlags)).HasFlag(GameObjectChestFlags::NotInCombat);
case GAMEOBJECT_TYPE_GATHERING_NODE: return gatheringNode.notInCombat;
default: return 0;
}
@@ -1122,6 +1149,16 @@ struct GameObjectTemplate
}
}
bool IsUsingGroupLootRules() const
{
switch (type)
{
case GAMEOBJECT_TYPE_CHEST: return chest.Unused6 != 0; // TODO: update database values and research flag order
//case GAMEOBJECT_TYPE_CHEST: return EnumFlag(static_cast<GameObjectChestFlags>(chest.ChestFlags)).HasFlag(GameObjectChestFlags::UseGroupLootRules);
default: return false;
}
}
uint32 GetGossipMenuId() const
{
switch (type)
@@ -1264,7 +1301,8 @@ struct GameObjectTemplate
case GAMEOBJECT_TYPE_DOOR: return door.GiganticAOI != 0;
case GAMEOBJECT_TYPE_BUTTON: return button.GiganticAOI != 0;
case GAMEOBJECT_TYPE_QUESTGIVER: return questgiver.GiganticAOI != 0;
case GAMEOBJECT_TYPE_CHEST: return chest.GiganticAOI != 0;
case GAMEOBJECT_TYPE_CHEST: return chest.Unused8 != 0; // TODO: update database values and research flag order
// case GAMEOBJECT_TYPE_CHEST: return EnumFlag(static_cast<GameObjectChestFlags>(chest.ChestFlags)).HasFlag(GameObjectChestFlags::GiganticAOI);
case GAMEOBJECT_TYPE_GENERIC: return generic.GiganticAOI != 0;
case GAMEOBJECT_TYPE_TRAP: return trap.GiganticAOI != 0;
case GAMEOBJECT_TYPE_SPELL_FOCUS: return spellFocus.GiganticAOI != 0;
@@ -1292,7 +1330,8 @@ struct GameObjectTemplate
{
switch (type)
{
case GAMEOBJECT_TYPE_CHEST: return chest.LargeAOI != 0;
case GAMEOBJECT_TYPE_CHEST: return chest.Unused9 != 0; // TODO: update database values and research flag order
// case GAMEOBJECT_TYPE_CHEST: return EnumFlag(static_cast<GameObjectChestFlags>(chest.ChestFlags)).HasFlag(GameObjectChestFlags::LargeAOI);
case GAMEOBJECT_TYPE_GENERIC: return generic.LargeAOI != 0;
case GAMEOBJECT_TYPE_GOOBER: return goober.LargeAOI != 0;
case GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY: return dungeonDifficulty.LargeAOI != 0;
+36 -2
View File
@@ -20,6 +20,7 @@
#include "AzeriteEmpoweredItem.h"
#include "AzeriteItem.h"
#include "Bag.h"
#include "ClientBuildInfo.h"
#include "CollectionMgr.h"
#include "Common.h"
#include "ConditionMgr.h"
@@ -39,6 +40,7 @@
#include "ObjectAccessor.h"
#include "ObjectMgr.h"
#include "Player.h"
#include "RealmList.h"
#include "ScriptMgr.h"
#include "SpellInfo.h"
#include "SpellMgr.h"
@@ -2356,7 +2358,28 @@ uint32 Item::GetItemLevel(ItemTemplate const* itemTemplate, BonusData const& bon
itemLevel = bonusData.PvpItemLevel;
itemLevel += bonusData.PvpItemLevelBonus;
itemLevel += sDB2Manager.GetPvpItemLevelBonus(itemTemplate->GetId());
}
if (!bonusData.IgnoreSquish)
{
if (std::shared_ptr<Realm const> currentRealm = sRealmList->GetCurrentRealm())
{
int32 currentBuild = ClientBuild::GetMinorMajorBugfixVersionForBuild(currentRealm->Build);
// apply all squishes between items_squish and server_squish
for (uint32 squishId = bonusData.ItemSquishEraID; squishId < sItemSquishEraStore.GetNumRows(); ++squishId)
{
ItemSquishEraEntry const* squish = sItemSquishEraStore.LookupEntry(squishId);
if (!squish)
continue;
if (squish->Patch > currentBuild)
break;
if (squish->CurveID)
itemLevel = uint32(sDB2Manager.GetCurveValueAt(squish->CurveID, itemLevel));
}
}
}
if (itemTemplate->GetInventoryType() != INVTYPE_NON_EQUIP)
@@ -2597,7 +2620,7 @@ uint16 Item::GetVisibleItemVisual(Player const* owner) const
void Item::AddBonuses(uint32 bonusListID)
{
if (std::find(GetBonusListIDs().begin(), GetBonusListIDs().end(), int32(bonusListID)) != GetBonusListIDs().end())
if (advstd::ranges::contains(GetBonusListIDs(), int32(bonusListID)))
return;
WorldPackets::Item::ItemBonusKey itemBonusKey;
@@ -2944,6 +2967,7 @@ void BonusData::Initialize(ItemTemplate const* proto)
ItemLevelOffsetCurveId = proto->GetItemLevelOffsetCurveId();
ItemLevelOffsetItemLevel = proto->GetItemLevelOffsetItemLevel();
ItemLevelOffset = 0;
ItemSquishEraID = proto->GetItemSquishEraId();
EffectCount = 0;
for (ItemEffectEntry const* itemEffect : proto->Effects)
@@ -2959,6 +2983,7 @@ void BonusData::Initialize(ItemTemplate const* proto)
CanSalvage = !proto->HasFlag(ITEM_FLAG4_NO_SALVAGE);
CanRecraft = proto->HasFlag(ITEM_FLAG4_RECRAFTABLE);
CannotTradeBindOnPickup = proto->HasFlag(ITEM_FLAG2_NO_TRADE_BIND_ON_ACQUIRE);
IgnoreSquish = false;
_state.SuffixPriority = std::numeric_limits<int32>::max();
_state.AppearanceModPriority = std::numeric_limits<int32>::max();
@@ -3167,6 +3192,9 @@ void BonusData::AddBonus(uint32 type, std::array<int32, 4> const& values)
}
ItemLevelOffsetItemLevel = scalingConfig->ItemLevel;
ItemSquishEraID = scalingConfig->ItemSquishEraID;
if (scalingConfig->Flags & 0x1)
IgnoreSquish = true;
if (values[1] < _state.RequiredLevelCurvePriority)
{
@@ -3176,6 +3204,9 @@ void BonusData::AddBonus(uint32 type, std::array<int32, 4> const& values)
}
}
break;
case ITEM_BONUS_ITEM_BONUS_LIST:
AddBonusList(values[0]);
break;
case ITEM_BONUS_SCALING_CONFIG:
if (values[1] < _state.ScalingStatDistributionPriority)
{
@@ -3188,6 +3219,9 @@ void BonusData::AddBonus(uint32 type, std::array<int32, 4> const& values)
}
ItemLevelOffsetItemLevel = 0;
ItemSquishEraID = scalingConfig->ItemSquishEraID;
if (scalingConfig->Flags & 0x1)
IgnoreSquish = true;
}
}
break;
+2
View File
@@ -86,6 +86,7 @@ struct BonusData
uint32 ItemLevelOffsetCurveId;
uint32 ItemLevelOffsetItemLevel;
uint32 ItemLevelOffset;
uint32 ItemSquishEraID;
std::array<ItemEffectEntry const*, 13> Effects;
std::size_t EffectCount;
uint32 LimitCategory;
@@ -95,6 +96,7 @@ struct BonusData
bool CanRecraft;
bool HasFixedLevel;
bool CannotTradeBindOnPickup;
bool IgnoreSquish;
void Initialize(ItemTemplate const* proto);
void Initialize(WorldPackets::Item::ItemInstance const& itemInstance);
@@ -876,6 +876,7 @@ struct TC_GAME_API ItemTemplate
uint32 GetPlayerLevelToItemLevelCurveId() const { return ExtendedData->PlayerLevelToItemLevelCurveID; }
uint32 GetItemLevelOffsetCurveId() const { return ExtendedData->ItemLevelOffsetCurveID; }
uint32 GetItemLevelOffsetItemLevel() const { return ExtendedData->ItemLevelOffsetItemLevel; }
uint32 GetItemSquishEraId() const { return ExtendedData->ItemSquishEraID; }
uint32 GetDamageType() const { return ExtendedData->DamageDamageType; }
uint32 GetDelay() const { return ExtendedData->ItemDelay; }
float GetRangedModRange() const { return ExtendedData->ItemRange; }
@@ -265,6 +265,8 @@ void BaseEntity::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, P
*data << uint32(0); // RemoveForcesIDs.size()
*data << uint32(0); // MoveIndex
*data << float(unit->m_movementInfo.gravityModifier);
//for (std::size_t i = 0; i < RemoveForcesIDs.size(); ++i)
// *data << ObjectGuid(RemoveForcesIDs);
@@ -112,6 +112,8 @@ struct MovementInfo
Optional<Drive> driveStatus;
float gravityModifier = 1.0f;
Optional<ObjectGuid> standingOnGameObjectGUID;
uint32 GetMovementFlags() const { return flags; }
@@ -163,8 +165,8 @@ struct MovementForce
float Magnitude = 0.0f;
MovementForceType Type = MovementForceType::SingleDirectional;
int32 MovementForceID = 0;
int32 Unknown1110_1 = 0;
int32 Unused1110 = 0;
int32 DurationMs = 0;
uint32 EndTimestamp = 0;
uint32 Flags = 0;
};
+2 -21
View File
@@ -1739,33 +1739,14 @@ int32 WorldObject::CalcSpellDuration(SpellInfo const* spellInfo, std::vector<Spe
if (minduration == maxduration)
return minduration;
Unit const* unit = ToUnit();
if (!unit)
return minduration;
if (!powerCosts)
return minduration;
// we want only baseline cost here
auto itr = std::find_if(spellInfo->PowerCosts.begin(), spellInfo->PowerCosts.end(), [=](SpellPowerEntry const* powerEntry)
{
return powerEntry && powerEntry->PowerType == POWER_COMBO_POINTS && (!powerEntry->RequiredAuraSpellID || unit->HasAura(powerEntry->RequiredAuraSpellID));
});
if (itr == spellInfo->PowerCosts.end())
return minduration;
auto consumedItr = std::find_if(powerCosts->begin(), powerCosts->end(),
[](SpellPowerCost const& consumed) { return consumed.Power == POWER_COMBO_POINTS; });
auto consumedItr = std::ranges::find(*powerCosts, POWER_COMBO_POINTS, &SpellPowerCost::Power);
if (consumedItr == powerCosts->end())
return minduration;
int32 baseComboCost = (*itr)->ManaCost + (*itr)->OptionalCost;
if (PowerTypeEntry const* powerTypeEntry = sDB2Manager.GetPowerTypeEntry(POWER_COMBO_POINTS))
baseComboCost += int32(CalculatePct(powerTypeEntry->MaxBasePower, (*itr)->PowerCostPct + (*itr)->OptionalCostPct));
float durationPerComboPoint = float(maxduration - minduration) / baseComboCost;
return minduration + int32(durationPerComboPoint * consumedItr->Amount);
return std::min(minduration + spellInfo->DurationEntry->DurationPerResource * consumedItr->Amount, maxduration);
}
int32 WorldObject::ModSpellDuration(SpellInfo const* spellInfo, WorldObject const* target, int32 duration, bool positive, uint32 effectMask) const
+48 -6
View File
@@ -190,21 +190,61 @@ namespace
{
ctx.advance_to(AppendTypeName(ctx, typeName));
ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.GetRealmId()));
ctx.advance_to(AppendComponent<padding<8>, hex>(ctx, guid.GetRawValue(0)));
switch (uint8 subType = (guid.GetRawValue(1) >> 40) & 0x3)
{
case 0:
// no subType
ctx.advance_to(AppendComponent<padding<8>, hex>(ctx, guid.GetRawValue(0)));
break;
case 1: // characterless (plunderstorm)
ctx.advance_to(AppendComponent<no_padding, dec>(ctx, subType));
ctx.advance_to(AppendComponent<padding<16>, hex>(ctx, guid.GetRawValue(0)));
break;
case 2: // npc-as-player
ctx.advance_to(AppendComponent<no_padding, dec>(ctx, subType));
ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.GetRawValue(1) >> 16 & 0xFFFFFF)); // creature id?
ctx.advance_to(AppendComponent<padding<16>, hex>(ctx, guid.GetRawValue(0)));
break;
default:
break;
}
return ctx.out();
}
static ObjectGuid ParsePlayer(HighGuid /*type*/, std::string_view guidString)
{
uint32 realmId = 0;
uint8 subType = 0;
uint32 arg1 = 0;
uint64 dbId = UI64LIT(0);
if (!ParseComponent<dec>(guidString, &realmId)
|| !ParseComponent<hex>(guidString, &dbId)
|| !ParseDone(guidString))
|| !ParseComponent<hex>(guidString, &dbId))
return ObjectGuid::FromStringFailed;
return ObjectGuidFactory::CreatePlayer(realmId, dbId);
if (!ParseDone(guidString))
{
// dbId holds playerType at this point
switch (dbId)
{
case 1: // characterless (plunderstorm)
break;
case 2: // npc-as-player
if (!ParseComponent<dec>(guidString, &arg1)) // creature id?
return ObjectGuid::FromStringFailed;
break;
default:
return ObjectGuid::FromStringFailed;
}
subType = dbId;
if (!ParseComponent<hex>(guidString, &dbId)
|| !ParseDone(guidString))
return ObjectGuid::FromStringFailed;
}
return ObjectGuidFactory::CreatePlayer(realmId, subType, arg1, dbId);
}
static fmt::appender FormatItem(fmt::format_context& ctx, std::string_view typeName, ObjectGuid const& guid)
@@ -862,10 +902,12 @@ constexpr ObjectGuid ObjectGuidFactory::CreateUniq(ObjectGuid::LowType id)
id);
}
ObjectGuid ObjectGuidFactory::CreatePlayer(uint32 realmId, ObjectGuid::LowType dbId)
ObjectGuid ObjectGuidFactory::CreatePlayer(uint32 realmId, uint8 subType, uint32 arg1, ObjectGuid::LowType dbId)
{
return ObjectGuid(uint64((uint64(HighGuid::Player) << 58)
| (uint64(GetRealmIdForObjectGuid(realmId)) << 42)),
| (uint64(GetRealmIdForObjectGuid(realmId)) << 42)
| (uint64(subType & 0x3) << 40)
| (uint64(arg1 & 0xFFFFFF) << 16)),
dbId);
}
+2 -2
View File
@@ -284,7 +284,7 @@ class TC_GAME_API ObjectGuidFactory
public:
static constexpr ObjectGuid CreateNull();
static constexpr ObjectGuid CreateUniq(uint64 id);
static ObjectGuid CreatePlayer(uint32 realmId, uint64 dbId);
static ObjectGuid CreatePlayer(uint32 realmId, uint8 subType, uint32 arg1, uint64 dbId);
static ObjectGuid CreateItem(uint32 realmId, uint64 dbId);
static ObjectGuid CreateWorldObject(HighGuid type, uint8 subType, uint32 realmId, uint16 mapId, uint32 serverId, uint32 entry, uint64 counter);
static ObjectGuid CreateTransport(HighGuid type, uint32 counter);
@@ -400,7 +400,7 @@ class TC_GAME_API ObjectGuid
template <HighGuid type, std::enable_if_t<ObjectGuidTraits<type>::Format::value == ObjectGuidFormatType::Null, int32> = 0> static constexpr ObjectGuid Create() { return ObjectGuidFactory::CreateNull(); }
template <HighGuid type, std::enable_if_t<ObjectGuidTraits<type>::Format::value == ObjectGuidFormatType::Uniq, int32> = 0> static constexpr ObjectGuid Create(LowType id) { return ObjectGuidFactory::CreateUniq(id); }
template <HighGuid type, std::enable_if_t<ObjectGuidTraits<type>::Format::value == ObjectGuidFormatType::Player, int32> = 0> static ObjectGuid Create(LowType dbId) { return ObjectGuidFactory::CreatePlayer(0, dbId); }
template <HighGuid type, std::enable_if_t<ObjectGuidTraits<type>::Format::value == ObjectGuidFormatType::Player, int32> = 0> static ObjectGuid Create(LowType dbId) { return ObjectGuidFactory::CreatePlayer(0, 0, 0, dbId); }
template <HighGuid type, std::enable_if_t<ObjectGuidTraits<type>::Format::value == ObjectGuidFormatType::Item, int32> = 0> static ObjectGuid Create(LowType dbId) { return ObjectGuidFactory::CreateItem(0, dbId); }
template <HighGuid type, std::enable_if_t<ObjectGuidTraits<type>::Format::value == ObjectGuidFormatType::WorldObject, int32> = 0> static ObjectGuid Create(uint16 mapId, uint32 entry, LowType counter) { return ObjectGuidFactory::CreateWorldObject(type, 0, 0, mapId, 0, entry, counter); }
template <HighGuid type, std::enable_if_t<ObjectGuidTraits<type>::Format::value == ObjectGuidFormatType::WorldObject, int32> = 0> static ObjectGuid Create(uint8 subType, uint16 mapId, uint32 entry, LowType counter) { return ObjectGuidFactory::CreateWorldObject(type, subType, 0, mapId, 0, entry, counter); }
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -620,7 +620,7 @@ public:
{
value_type flags = gameObjectData->Flags;
if (gameObject->GetGoType() == GAMEOBJECT_TYPE_CHEST)
if (gameObject->GetGOInfo()->chest.usegrouplootrules && !gameObject->IsLootAllowedFor(receiver))
if (gameObject->GetGOInfo()->IsUsingGroupLootRules() && !gameObject->IsLootAllowedFor(receiver))
flags |= GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE;
return flags;
@@ -55,6 +55,7 @@ enum class EntityFragment : uint8
PlayerHouseInfoComponent_C = 32, // UPDATEABLE, INDIRECT,
FHousingStorage_C = 33, // UPDATEABLE,
FHousingFixture_C = 34, // UPDATEABLE,
PlayerInitiativeComponent_C = 37, // UPDATEABLE, INDIRECT,
Tag_Item = 200, // TAG,
Tag_Container = 201, // TAG,
Tag_AzeriteEmpoweredItem = 202, // TAG,
@@ -97,7 +98,8 @@ inline constexpr bool IsUpdateableFragment(EntityFragment frag)
|| frag == EntityFragment::FMirroredPositionData_C
|| frag == EntityFragment::PlayerHouseInfoComponent_C
|| frag == EntityFragment::FHousingStorage_C
|| frag == EntityFragment::FHousingFixture_C;
|| frag == EntityFragment::FHousingFixture_C
|| frag == EntityFragment::PlayerInitiativeComponent_C;
}
inline constexpr bool IsIndirectFragment(EntityFragment frag)
@@ -105,7 +107,8 @@ inline constexpr bool IsIndirectFragment(EntityFragment frag)
return frag == EntityFragment::CGObject
|| frag == EntityFragment::FPlayerOwnershipLink
|| frag == EntityFragment::CActor
|| frag == EntityFragment::PlayerHouseInfoComponent_C;
|| frag == EntityFragment::PlayerHouseInfoComponent_C
|| frag == EntityFragment::PlayerInitiativeComponent_C;
}
template <auto /*FragmentMemberPtr*/>
@@ -146,9 +149,10 @@ struct EntityFragmentsHolder
EntityFragment::End, EntityFragment::End, EntityFragment::End, EntityFragment::End
};
template <std::size_t N>
struct UpdateableFragments
{
static constexpr std::size_t N = 4;
std::array<EntityFragment, N> Ids =
{
EntityFragment::End, EntityFragment::End, EntityFragment::End, EntityFragment::End
@@ -159,7 +163,7 @@ struct EntityFragmentsHolder
std::array<EntityFragmentIsChangedFn, N> IsChanged = { };
};
UpdateableFragments<4> Updateable;
UpdateableFragments Updateable;
uint8 Count = 0;
bool IdsChanged = false;
+5 -5
View File
@@ -13930,18 +13930,18 @@ bool Unit::SetCanAdvFly(bool enable)
bool Unit::SetMoveCantSwim(bool cantSwim)
{
if (cantSwim == HasExtraUnitMovementFlag2(MOVEMENTFLAG3_CANT_SWIM))
if (cantSwim == HasExtraUnitMovementFlag2(MOVEMENTFLAG3_CANNOT_SWIM))
return false;
if (cantSwim)
AddExtraUnitMovementFlag2(MOVEMENTFLAG3_CANT_SWIM);
AddExtraUnitMovementFlag2(MOVEMENTFLAG3_CANNOT_SWIM);
else
RemoveExtraUnitMovementFlag2(MOVEMENTFLAG3_CANT_SWIM);
RemoveExtraUnitMovementFlag2(MOVEMENTFLAG3_CANNOT_SWIM);
static OpcodeServer const cantSwimOpcodeTable[2] =
{
SMSG_MOVE_UNSET_CANT_SWIM,
SMSG_MOVE_SET_CANT_SWIM,
SMSG_MOVE_UNSET_CANNOT_SWIM,
SMSG_MOVE_SET_CANNOT_SWIM,
};
if (Player* playerMover = GetPlayerMovingMe())
+1 -1
View File
@@ -471,7 +471,7 @@ enum MovementFlags3 : uint32
MOVEMENTFLAG3_DISABLE_INERTIA = 0x00000001,
MOVEMENTFLAG3_CAN_ADV_FLY = 0x00000002,
MOVEMENTFLAG3_ADV_FLYING = 0x00000004,
MOVEMENTFLAG3_CANT_SWIM = 0x00002000,
MOVEMENTFLAG3_CANNOT_SWIM = 0x00002000,
MOVEMENTFLAG3_CAN_DRIVE = 0x00004000,
MOVEMENTFLAG3_DRIVING_FORWARD = 0x00008000,
MOVEMENTFLAG3_DRIVING_BACKWARD = 0x00010000,
@@ -851,7 +851,7 @@ TC_API_EXPORT EnumText EnumUtils<MovementFlags3>::ToString(MovementFlags3 value)
case MOVEMENTFLAG3_DISABLE_INERTIA: return { "MOVEMENTFLAG3_DISABLE_INERTIA", "MOVEMENTFLAG3_DISABLE_INERTIA", "" };
case MOVEMENTFLAG3_CAN_ADV_FLY: return { "MOVEMENTFLAG3_CAN_ADV_FLY", "MOVEMENTFLAG3_CAN_ADV_FLY", "" };
case MOVEMENTFLAG3_ADV_FLYING: return { "MOVEMENTFLAG3_ADV_FLYING", "MOVEMENTFLAG3_ADV_FLYING", "" };
case MOVEMENTFLAG3_CANT_SWIM: return { "MOVEMENTFLAG3_CANT_SWIM", "MOVEMENTFLAG3_CANT_SWIM", "" };
case MOVEMENTFLAG3_CANNOT_SWIM: return { "MOVEMENTFLAG3_CANNOT_SWIM", "MOVEMENTFLAG3_CANNOT_SWIM", "" };
case MOVEMENTFLAG3_CAN_DRIVE: return { "MOVEMENTFLAG3_CAN_DRIVE", "MOVEMENTFLAG3_CAN_DRIVE", "" };
case MOVEMENTFLAG3_DRIVING_FORWARD: return { "MOVEMENTFLAG3_DRIVING_FORWARD", "MOVEMENTFLAG3_DRIVING_FORWARD", "" };
case MOVEMENTFLAG3_DRIVING_BACKWARD: return { "MOVEMENTFLAG3_DRIVING_BACKWARD", "MOVEMENTFLAG3_DRIVING_BACKWARD", "" };
@@ -871,7 +871,7 @@ TC_API_EXPORT MovementFlags3 EnumUtils<MovementFlags3>::FromIndex(size_t index)
case 1: return MOVEMENTFLAG3_DISABLE_INERTIA;
case 2: return MOVEMENTFLAG3_CAN_ADV_FLY;
case 3: return MOVEMENTFLAG3_ADV_FLYING;
case 4: return MOVEMENTFLAG3_CANT_SWIM;
case 4: return MOVEMENTFLAG3_CANNOT_SWIM;
case 5: return MOVEMENTFLAG3_CAN_DRIVE;
case 6: return MOVEMENTFLAG3_DRIVING_FORWARD;
case 7: return MOVEMENTFLAG3_DRIVING_BACKWARD;
@@ -888,7 +888,7 @@ TC_API_EXPORT size_t EnumUtils<MovementFlags3>::ToIndex(MovementFlags3 value)
case MOVEMENTFLAG3_DISABLE_INERTIA: return 1;
case MOVEMENTFLAG3_CAN_ADV_FLY: return 2;
case MOVEMENTFLAG3_ADV_FLYING: return 3;
case MOVEMENTFLAG3_CANT_SWIM: return 4;
case MOVEMENTFLAG3_CANNOT_SWIM: return 4;
case MOVEMENTFLAG3_CAN_DRIVE: return 5;
case MOVEMENTFLAG3_DRIVING_FORWARD: return 6;
case MOVEMENTFLAG3_DRIVING_BACKWARD: return 7;
+1 -1
View File
@@ -1698,7 +1698,7 @@ void GameEventMgr::SetHolidayEventTime(GameEventData& event)
for (uint8 i = 0; i < stageIndex; ++i)
stageOffset += Hours(holiday->Duration[i]);
switch (holiday->CalendarFilterType)
switch (static_cast<std::make_signed_t<decltype(holiday->CalendarFilterType)>>(holiday->CalendarFilterType))
{
case -1: // Yearly
event.occurence = YEAR / MINUTE; // Not all too useful
@@ -24,7 +24,7 @@
class AreaTriggerTemplate;
class AreaTriggerCreateProperties;
enum Difficulty : uint8;
enum Difficulty : int16;
struct AreaTriggerId;
struct AreaTriggerSpawn;
+16 -36
View File
@@ -942,7 +942,7 @@ void ObjectMgr::LoadCreatureTemplateDifficulty()
Field* fields = result->Fetch();
uint32 entry = fields[0].GetUInt32();
Difficulty difficulty = Difficulty(fields[1].GetUInt8());
Difficulty difficulty = Difficulty(fields[1].GetInt32());
auto itr = _creatureTemplateStore.find(entry);
if (itr == _creatureTemplateStore.end())
@@ -951,7 +951,7 @@ void ObjectMgr::LoadCreatureTemplateDifficulty()
continue;
}
CreatureDifficulty creatureDifficulty;
CreatureDifficulty& creatureDifficulty = itr->second.difficultyStore.try_emplace(difficulty).first->second;
creatureDifficulty.DeltaLevelMin = fields[2].GetInt16();
creatureDifficulty.DeltaLevelMax = fields[3].GetInt16();
creatureDifficulty.ContentTuningID = fields[4].GetInt32();
@@ -990,8 +990,6 @@ void ObjectMgr::LoadCreatureTemplateDifficulty()
creatureDifficulty.GoldMax = creatureDifficulty.GoldMin;
}
itr->second.difficultyStore[difficulty] = creatureDifficulty;
++count;
} while (result->NextRow());
@@ -4256,7 +4254,7 @@ void ObjectMgr::LoadPlayerInfo()
uint32 oldMSTime = getMSTime();
QueryResult raceStatsResult = WorldDatabase.Query("SELECT race, str, agi, sta, inte FROM player_racestats");
QueryResult raceStatsResult = WorldDatabase.Query("SELECT race, str, agi, sta, inte, spi FROM player_racestats");
if (!raceStatsResult)
{
@@ -4280,8 +4278,8 @@ void ObjectMgr::LoadPlayerInfo()
} while (raceStatsResult->NextRow());
// 0 1 2 3 4 5
QueryResult result = WorldDatabase.Query("SELECT class, level, str, agi, sta, inte FROM player_classlevelstats");
// 0 1 2 3 4 5 6
QueryResult result = WorldDatabase.Query("SELECT class, level, str, agi, sta, inte, spi FROM player_classlevelstats");
if (!result)
{
@@ -4579,37 +4577,21 @@ void ObjectMgr::LoadQuests()
_exclusiveQuestGroups.clear();
QueryResult result = WorldDatabase.Query("SELECT "
//0 1 2 3 4 5 6 7 8 9
"ID, QuestType, QuestPackageID, ContentTuningID, QuestSortID, QuestInfoID, SuggestedGroupNum, RewardNextQuest, RewardXPDifficulty, RewardXPMultiplier, "
//10 11 12 13 14 15 16
"RewardMoneyDifficulty, RewardMoneyMultiplier, RewardBonusMoney, RewardSpell, RewardHonor, RewardKillHonor, StartItem, "
//17 18 19 20 21 22 23
"RewardMoneyDifficulty, RewardMoneyMultiplier, RewardBonusMoney, RewardSpell, RewardHonor, RewardKillHonor, RewardFavor, StartItem, "
"RewardArtifactXPDifficulty, RewardArtifactXPMultiplier, RewardArtifactCategoryID, Flags, FlagsEx, FlagsEx2, FlagsEx3, "
//24 25 26 27 28 29 30 31
"RewardItem1, RewardAmount1, ItemDrop1, ItemDropQuantity1, RewardItem2, RewardAmount2, ItemDrop2, ItemDropQuantity2, "
//32 33 34 35 36 37 38 39
"RewardItem3, RewardAmount3, ItemDrop3, ItemDropQuantity3, RewardItem4, RewardAmount4, ItemDrop4, ItemDropQuantity4, "
//40 41 42 43 44 45
"RewardChoiceItemID1, RewardChoiceItemQuantity1, RewardChoiceItemDisplayID1, RewardChoiceItemID2, RewardChoiceItemQuantity2, RewardChoiceItemDisplayID2, "
//46 47 48 49 50 51
"RewardChoiceItemID3, RewardChoiceItemQuantity3, RewardChoiceItemDisplayID3, RewardChoiceItemID4, RewardChoiceItemQuantity4, RewardChoiceItemDisplayID4, "
//52 53 54 55 56 57
"RewardChoiceItemID5, RewardChoiceItemQuantity5, RewardChoiceItemDisplayID5, RewardChoiceItemID6, RewardChoiceItemQuantity6, RewardChoiceItemDisplayID6, "
//58 59 60 61 62 63 64 65
"POIContinent, POIx, POIy, POIPriority, RewardTitle, RewardArenaPoints, RewardSkillLineID, RewardNumSkillUps, "
//66 67 68 69
"PortraitGiver, PortraitGiverMount, PortraitGiverModelSceneID, PortraitTurnIn, "
//70 71 72 73 74 75 76 77
"RewardFactionID1, RewardFactionValue1, RewardFactionOverride1, RewardFactionCapIn1, RewardFactionID2, RewardFactionValue2, RewardFactionOverride2, RewardFactionCapIn2, "
//78 79 80 81 82 83 84 85
"RewardFactionID3, RewardFactionValue3, RewardFactionOverride3, RewardFactionCapIn3, RewardFactionID4, RewardFactionValue4, RewardFactionOverride4, RewardFactionCapIn4, "
//86 87 88 89 90
"RewardFactionID5, RewardFactionValue5, RewardFactionOverride5, RewardFactionCapIn5, RewardFactionFlags, "
//91 92 93 94 95 96 97 98
"RewardCurrencyID1, RewardCurrencyQty1, RewardCurrencyID2, RewardCurrencyQty2, RewardCurrencyID3, RewardCurrencyQty3, RewardCurrencyID4, RewardCurrencyQty4, "
//99 100 101 102 103 104 105 106 107
"AcceptedSoundKitID, CompleteSoundKitID, AreaGroupID, TimeAllowed, AllowableRaces, ResetByScheduler, Expansion, ManagedWorldStateID, QuestSessionBonus, "
//108 109 110 111 112 113 114 115 116
"LogTitle, LogDescription, QuestDescription, AreaDescription, PortraitGiverText, PortraitGiverName, PortraitTurnInText, PortraitTurnInName, QuestCompletionLog "
"FROM quest_template");
if (!result)
@@ -4673,8 +4655,8 @@ void ObjectMgr::LoadQuests()
// 0 1
{ "QuestId, RewardMailSenderEntry", "quest_mail_sender", "", "mail sender entries", &Quest::LoadQuestMailSender },
// 0 1 2 3 4 5 6 7 8 9 10 11 12
{ "qo.QuestID, qo.ID, qo.Type, qo.StorageIndex, qo.ObjectID, qo.Amount, qo.SecondaryAmount, qo.Flags, qo.Flags2, qo.ProgressBarWeight, qo.ParentObjectiveID, qo.Visible, qo.Description, "
// 0 1 2 3 4 5 6 7 8 9 10 11 12
{ "qo.QuestID, qo.ID, qo.Type, qo.StorageIndex, qo.ObjectID, qo.Amount, qo.ConditionalAmount, qo.Flags, qo.Flags2, qo.ProgressBarWeight, qo.ParentObjectiveID, qo.Visible, qo.Description, "
// 13 14 15 16 17
"qoce.GameEventID, qoce.SpellID, qoce.ConversationID, qoce.UpdatePhaseShift, qoce.UpdateZoneAuras", "quest_objectives qo", "LEFT JOIN quest_objectives_completion_effect qoce ON qo.ID = qoce.ObjectiveID ORDER BY `Order` ASC, StorageIndex ASC", "quest objectives", &Quest::LoadQuestObjective },
@@ -7295,8 +7277,8 @@ void ObjectMgr::LoadAccessRequirements()
continue;
}
uint32 difficulty = fields[1].GetUInt8();
if (!sDB2Manager.GetMapDifficultyData(mapid, Difficulty(difficulty)))
Difficulty difficulty = Difficulty(fields[1].GetInt32());
if (!sDB2Manager.GetMapDifficultyData(mapid, difficulty))
{
TC_LOG_ERROR("sql.sql", "Map {} referenced in `access_requirement` does not have difficulty {}, skipped", mapid, difficulty);
continue;
@@ -7743,8 +7725,6 @@ void ObjectMgr::LoadGameObjectTemplate()
if (got.chest.open)
CheckGOLockId(&got, got.chest.open, 0);
CheckGOConsumable(&got, got.chest.consumable, 3);
if (got.chest.linkedTrap) // linked trap
CheckGOLinkedTrapId(&got, got.chest.linkedTrap, 7);
break;
@@ -7844,11 +7824,11 @@ void ObjectMgr::LoadGameObjectTemplate()
case GAMEOBJECT_TYPE_BARBER_CHAIR: //32
CheckAndFixGOChairHeightId(&got, got.barberChair.chairheight, 0);
if (got.barberChair.SitAnimKit && !sAnimKitStore.LookupEntry(got.barberChair.SitAnimKit))
if (got.barberChair.CustomSitAnimKit && !sAnimKitStore.LookupEntry(got.barberChair.CustomSitAnimKit))
{
TC_LOG_ERROR("sql.sql", "GameObject (Entry: {} GoType: {}) have data2 = {} but AnimKit.dbc (Id: {}) not exist, set to 0.",
entry, got.type, got.barberChair.SitAnimKit, got.barberChair.SitAnimKit);
got.barberChair.SitAnimKit = 0;
entry, got.type, got.barberChair.CustomSitAnimKit, got.barberChair.CustomSitAnimKit);
got.barberChair.CustomSitAnimKit = 0;
}
break;
case GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING:
@@ -10905,7 +10885,7 @@ void ObjectMgr::LoadCreatureQuestItems()
Field* fields = result->Fetch();
uint32 entry = fields[0].GetUInt32();
Difficulty difficulty = Difficulty(fields[1].GetUInt8());
Difficulty difficulty = Difficulty(fields[1].GetInt32());
uint32 item = fields[2].GetUInt32();
uint32 idx = fields[3].GetUInt32();
@@ -10996,7 +10976,7 @@ void ObjectMgr::LoadCreatureStaticFlagsOverride()
Field* fields = result->Fetch();
ObjectGuid::LowType spawnId = fields[0].GetUInt64();
Difficulty difficultyId = static_cast<Difficulty>(fields[1].GetUInt8());
Difficulty difficultyId = static_cast<Difficulty>(fields[1].GetInt32());
CreatureData const* creatureData = GetCreatureData(spawnId);
if (!creatureData)
@@ -11008,7 +10988,7 @@ void ObjectMgr::LoadCreatureStaticFlagsOverride()
// DIFFICULTY_NONE is always a valid fallback
if (difficultyId != DIFFICULTY_NONE)
{
if (std::find(creatureData->spawnDifficulties.begin(), creatureData->spawnDifficulties.end(), difficultyId) == creatureData->spawnDifficulties.end())
if (!advstd::ranges::contains(creatureData->spawnDifficulties, difficultyId))
{
TC_LOG_ERROR("sql.sql", "Table `creature_static_flags_override` has data for a creature that is not available for the specified DifficultyId (SpawnId: {}, DifficultyId: {}), skipped", spawnId, difficultyId);
continue;
+12 -10
View File
@@ -578,18 +578,20 @@ void WorldSession::HandleReadyCheckResponseOpcode(WorldPackets::Party::ReadyChec
void WorldSession::HandleRequestPartyMemberStatsOpcode(WorldPackets::Party::RequestPartyMemberStats& packet)
{
WorldPackets::Party::PartyMemberFullState partyMemberStats;
Player* player = ObjectAccessor::FindConnectedPlayer(packet.TargetGUID);
if (!player)
for (ObjectGuid const& target : packet.Targets)
{
partyMemberStats.MemberGuid = packet.TargetGUID;
partyMemberStats.MemberStats.Status = MEMBER_STATUS_OFFLINE;
WorldPackets::Party::PartyMemberFullState partyMemberStats;
if (Player* player = ObjectAccessor::FindConnectedPlayer(target))
{
partyMemberStats.Initialize(player);
}
else
{
partyMemberStats.MemberGuid = target;
partyMemberStats.MemberStats.Status = MEMBER_STATUS_OFFLINE;
}
SendPacket(partyMemberStats.Write());
}
else
partyMemberStats.Initialize(player);
SendPacket(partyMemberStats.Write());
}
void WorldSession::HandleRequestRaidInfoOpcode(WorldPackets::Party::RequestRaidInfo& /*packet*/)
+1 -2
View File
@@ -729,8 +729,7 @@ void WorldSession::HandlePetCastSpellOpcode(WorldPackets::Spells::PetCastSpell&
Spell* spell = new Spell(caster, spellInfo, triggerCastFlags);
spell->m_fromClient = true;
spell->m_misc.Raw.Data[0] = petCastSpell.Cast.Misc[0];
spell->m_misc.Raw.Data[1] = petCastSpell.Cast.Misc[1];
std::ranges::copy(petCastSpell.Cast.Misc, std::ranges::begin(spell->m_misc.Raw.Data));
spell->m_targets = targets;
SpellCastResult result = spell->CheckPetCast(nullptr);
+1 -2
View File
@@ -90,8 +90,7 @@ void WorldSession::HandleUseToy(WorldPackets::Toy::UseToy& packet)
spell->m_fromClient = true;
spell->m_castItemEntry = itemId;
spell->m_misc.Raw.Data[0] = packet.Cast.Misc[0];
spell->m_misc.Raw.Data[1] = packet.Cast.Misc[1];
std::ranges::copy(packet.Cast.Misc, std::ranges::begin(spell->m_misc.Raw.Data));
spell->m_castFlagsEx |= CAST_FLAG_EX_USE_TOY_SPELL;
spell->prepare(targets);
}
+1 -1
View File
@@ -56,7 +56,7 @@
struct DungeonEncounterEntry;
struct MapEntry;
struct MapDifficultyEntry;
enum Difficulty : uint8;
enum Difficulty : int16;
enum TransferAbortReason : uint32;
#define INSTANCE_ID_HIGH_MASK 0x1F440000
+1 -1
View File
@@ -49,7 +49,7 @@ struct DungeonEncounterEntry;
struct InstanceSpawnGroupInfo;
enum class CriteriaType : int16;
enum class CriteriaStartEvent : uint8;
enum Difficulty : uint8;
enum Difficulty : int16;
enum EncounterFrameType
{
+1 -1
View File
@@ -77,7 +77,7 @@ struct SummonPropertiesEntry;
struct UpdateAdditionalSaveDataEvent;
struct UpdateBossStateSaveDataEvent;
class Transport;
enum Difficulty : uint8;
enum Difficulty : int16;
enum WeatherState : uint32;
enum class ItemContext : uint8;
+1 -1
View File
@@ -37,7 +37,7 @@ class InstanceLock;
class InstanceMap;
class Map;
class Player;
enum Difficulty : uint8;
enum Difficulty : int16;
class TC_GAME_API MapManager
{
+63 -12
View File
@@ -280,9 +280,10 @@ enum Stats : uint16
STAT_AGILITY = 1,
STAT_STAMINA = 2,
STAT_INTELLECT = 3,
STAT_SPIRIT = 4,
};
#define MAX_STATS 4
#define MAX_STATS 5
// EnumUtils: DESCRIBE THIS
enum Powers : int8
@@ -1019,6 +1020,43 @@ enum SpellAttr15 : uint32
SPELL_ATTR15_UNK31 = 0x80000000 // TITLE Unknown attribute 31@Attr15
};
// EnumUtils: DESCRIBE THIS
enum SpellAttr16 : uint32
{
SPELL_ATTR16_UNK0 = 0x00000001, // TITLE Unknown attribute 0@Attr16
SPELL_ATTR16_UNK1 = 0x00000002, // TITLE Unknown attribute 1@Attr16
SPELL_ATTR16_UNK2 = 0x00000004, // TITLE Unknown attribute 2@Attr16
SPELL_ATTR16_UNK3 = 0x00000008, // TITLE Unknown attribute 3@Attr16
SPELL_ATTR16_UNK4 = 0x00000010, // TITLE Unknown attribute 4@Attr16
SPELL_ATTR16_UNK5 = 0x00000020, // TITLE Unknown attribute 5@Attr16
SPELL_ATTR16_UNK6 = 0x00000040, // TITLE Unknown attribute 6@Attr16
SPELL_ATTR16_UNK7 = 0x00000080, // TITLE Unknown attribute 7@Attr16
SPELL_ATTR16_UNK8 = 0x00000100, // TITLE Unknown attribute 8@Attr16
SPELL_ATTR16_UNK9 = 0x00000200, // TITLE Unknown attribute 9@Attr16
SPELL_ATTR16_UNK10 = 0x00000400, // TITLE Unknown attribute 10@Attr16
SPELL_ATTR16_UNK11 = 0x00000800, // TITLE Unknown attribute 11@Attr16
SPELL_ATTR16_UNK12 = 0x00001000, // TITLE Unknown attribute 12@Attr16
SPELL_ATTR16_UNK13 = 0x00002000, // TITLE Unknown attribute 13@Attr16
SPELL_ATTR16_UNK14 = 0x00004000, // TITLE Unknown attribute 14@Attr16
SPELL_ATTR16_UNK15 = 0x00008000, // TITLE Unknown attribute 15@Attr16
SPELL_ATTR16_UNK16 = 0x00010000, // TITLE Unknown attribute 16@Attr16
SPELL_ATTR16_UNK17 = 0x00020000, // TITLE Unknown attribute 17@Attr16
SPELL_ATTR16_UNK18 = 0x00040000, // TITLE Unknown attribute 18@Attr16
SPELL_ATTR16_UNK19 = 0x00080000, // TITLE Unknown attribute 19@Attr16
SPELL_ATTR16_UNK20 = 0x00100000, // TITLE Unknown attribute 20@Attr16
SPELL_ATTR16_UNK21 = 0x00200000, // TITLE Unknown attribute 21@Attr16
SPELL_ATTR16_UNK22 = 0x00400000, // TITLE Unknown attribute 22@Attr16
SPELL_ATTR16_UNK23 = 0x00800000, // TITLE Unknown attribute 23@Attr16
SPELL_ATTR16_UNK24 = 0x01000000, // TITLE Unknown attribute 24@Attr16
SPELL_ATTR16_UNK25 = 0x02000000, // TITLE Unknown attribute 25@Attr16
SPELL_ATTR16_UNK26 = 0x04000000, // TITLE Unknown attribute 26@Attr16
SPELL_ATTR16_UNK27 = 0x08000000, // TITLE Unknown attribute 27@Attr16
SPELL_ATTR16_UNK28 = 0x10000000, // TITLE Unknown attribute 28@Attr16
SPELL_ATTR16_UNK29 = 0x20000000, // TITLE Unknown attribute 29@Attr16
SPELL_ATTR16_UNK30 = 0x40000000, // TITLE Unknown attribute 30@Attr16
SPELL_ATTR16_UNK31 = 0x80000000 // TITLE Unknown attribute 31@Attr16
};
#define MIN_SPECIALIZATION_LEVEL 10
#define MAX_SPECIALIZATIONS 5
#define PET_SPEC_OVERRIDE_CLASS_INDEX MAX_CLASSES
@@ -1651,8 +1689,8 @@ enum SpellEffectName
SPELL_EFFECT_LEARN_HOUSE_EXTERIOR_COMPONENT = 350, // MiscValue[0] = ExteriorComponent
SPELL_EFFECT_LEARN_HOUSE_THEME = 351, // MiscValue[0] = HouseTheme
SPELL_EFFECT_LEARN_HOUSE_ROOM_COMPONENT_TEXTURE = 352, // MiscValue[0] = RoomComponentTexture
// = 354, // MiscValue[0] = NeighborhoodInitiative
SPELL_EFFECT_CREATE_AREATRIGGER_2 = 353,
SPELL_EFFECT_SET_NEIGHBORHOOD_INITIATIVE = 354, // MiscValue[0] = NeighborhoodInitiative
TOTAL_SPELL_EFFECTS
};
@@ -1982,7 +2020,8 @@ enum SpellCastResult : int32
SPELL_FAILED_ITEM_MOD_APPEARANCE_GROUP_ALREADY_KNOWN = 320,
SPELL_FAILED_ITEM_CREATION_DISABLED_FOR_EVENT = 321,
SPELL_FAILED_WARBAND_SCENE_ALREADY_KNOWN = 322,
SPELL_FAILED_UNKNOWN = 323,
SPELL_FAILED_TRANSMOG_OUTFIT_ALREADY_KNOWN = 323,
SPELL_FAILED_UNKNOWN = 324,
// ok cast value - here in case a future version removes SPELL_FAILED_SUCCESS and we need to use a custom value (not sent to client either way)
SPELL_CAST_OK = SPELL_FAILED_SUCCESS // SKIP
@@ -8573,14 +8612,26 @@ enum class GameError : uint32
ERR_CHARTER_SIGNATURE_REQUEST_FAILED_GENERIC = 1213,
ERR_CHARTER_SYSTEM_REQUEST_FAILED_GENERIC = 1214,
ERR_HOUSING_ACTION_UNAVAILABLE = 1215,
ERR_HOUSING_RESULT_MISSING_EXPANSION_ACCESS = 1216,
ERR_HOUSING_RESULT_PERMISSION_DENIED = 1217,
ERR_GUILD_NEIGHBORHOOD_BUILT_HOUSE_S = 1218,
ERR_GUILD_NEIGHBORHOOD_SOLD_HOUSE_S = 1219,
ERR_GUILD_NEIGHBORHOOD_NEW_SUBDIVISION = 1220,
ERR_GUILD_NEIGHBORHOOD_RENAME_S = 1221,
ERR_CHARTER_NEIGHBORHOOD_RENAME = 1222,
ERR_RECENT_ALLY_PIN_SERVER_ERROR = 1223,
ERR_HOUSING_EXTERIOR_FAILSAFE_RESET = 1216,
ERR_HOUSING_RESULT_MISSING_EXPANSION_ACCESS = 1217,
ERR_HOUSING_RESULT_PERMISSION_DENIED = 1218,
ERR_GUILD_NEIGHBORHOOD_BUILT_HOUSE_S = 1219,
ERR_GUILD_NEIGHBORHOOD_SOLD_HOUSE_S = 1220,
ERR_GUILD_NEIGHBORHOOD_NEW_SUBDIVISION = 1221,
ERR_GUILD_NEIGHBORHOOD_RENAME_S = 1222,
ERR_CHARTER_NEIGHBORHOOD_RENAME = 1223,
ERR_CHARTER_SIGNATURE_REMOVED = 1224,
ERR_ENDEAVOR_REWARD_AVAILABLE = 1225,
ERR_HOUSING_RESULT_COSMETIC_OWNER_NOT_IN_GUILD = 1226,
ERR_HOUSING_RESULT_PLOT_NOT_VACANT = 1227,
ERR_HOUSING_RESULT_PLOT_RESERVED = 1228,
ERR_HOUSING_RESULT_MISSING_PRIVATE_NEIGHBORHOOD_INVITE = 1229,
ERR_CHARTER_NEIGHBORHOOD_OWNERSHIP_TRANSFER_SUCCESS = 1230,
ERR_CHARTER_NEIGHBORHOOD_RENAME_NOTIFICATION_S = 1231,
ERR_RECENT_ALLY_PIN_SERVER_ERROR = 1232,
ERR_PVP_TRAINING_GROUNDS_DISABLED = 1233,
ERR_SOLO_JOIN_TRAINING_GROUND = 1234,
ERR_LFG_JOINED_TRAINING_GROUNDS_QUEUE = 1235,
};
enum class MountResult : uint32
+25 -5
View File
@@ -32,7 +32,7 @@
#include "WorldSession.h"
#define QUEST_TEMPLATE_FIELDS (ID)(QuestType)(QuestPackageID)(ContentTuningID)(QuestSortID)(QuestInfoID)(SuggestedGroupNum)(RewardNextQuest)(RewardXPDifficulty)\
(RewardXPMultiplier)(RewardMoneyDifficulty)(RewardMoneyMultiplier)(RewardBonusMoney)(RewardSpell)(RewardHonor)(RewardKillHonor)(StartItem)\
(RewardXPMultiplier)(RewardMoneyDifficulty)(RewardMoneyMultiplier)(RewardBonusMoney)(RewardSpell)(RewardHonor)(RewardKillHonor)(RewardFavor)(StartItem)\
(RewardArtifactXPDifficulty)(RewardArtifactXPMultiplier)(RewardArtifactCategoryID)(Flags)(FlagsEx)(FlagsEx2)(FlagsEx3)\
(RewardItem1)(RewardAmount1)(ItemDrop1)(ItemDropQuantity1)(RewardItem2)(RewardAmount2)(ItemDrop2)(ItemDropQuantity2)\
(RewardItem3)(RewardAmount3)(ItemDrop3)(ItemDropQuantity3)(RewardItem4)(RewardAmount4)(ItemDrop4)(ItemDropQuantity4)\
@@ -102,6 +102,7 @@ Quest::Quest(QuestTemplateQueryResult const& questRecord) :
_rewardSpell(questRecord.RewardSpell().GetUInt32()),
_rewardHonor(questRecord.RewardHonor().GetUInt32()),
_rewardKillHonor(questRecord.RewardKillHonor().GetUInt32()),
_rewardFavor(questRecord.RewardFavor().GetInt32()),
_rewardArtifactXPDifficulty(questRecord.RewardArtifactXPDifficulty().GetUInt32()),
_rewardArtifactXPMultiplier(questRecord.RewardArtifactXPMultiplier().GetFloat()),
_rewardArtifactCategoryID(questRecord.RewardArtifactCategoryID().GetUInt32()),
@@ -277,7 +278,7 @@ void Quest::LoadQuestObjective(Field* fields)
obj.StorageIndex = fields[3].GetInt8();
obj.ObjectID = fields[4].GetInt32();
obj.Amount = fields[5].GetInt32();
obj.SecondaryAmount = fields[6].GetInt32();
obj.ConditionalAmount = fields[6].GetInt32();
obj.Flags = fields[7].GetUInt32();
obj.Flags2 = fields[8].GetUInt32();
obj.ProgressBarWeight = fields[9].GetFloat();
@@ -734,6 +735,8 @@ WorldPacket Quest::BuildQueryData(LocaleConstant loc, Player* player) const
response.Info.RewardHonor = GetRewHonor();
response.Info.RewardKillHonor = GetRewKillHonor();
response.Info.RewardFavor = GetRewardFavor();
response.Info.RewardArtifactXPDifficulty = GetArtifactXPDifficulty();
response.Info.RewardArtifactXPMultiplier = GetArtifactXPMultiplier();
response.Info.RewardArtifactCategoryID = GetArtifactCategoryId();
@@ -795,14 +798,31 @@ WorldPacket Quest::BuildQueryData(LocaleConstant loc, Player* player) const
response.Info.RewardHouseRoomIDs = GetRewardHouseRoomIds();
response.Info.RewardHouseDecorIDs = GetRewardRewardHouseDecorIds();
for (QuestObjective const& questObjective : GetObjectives())
response.Info.Objectives.resize(GetObjectives().size());
for (std::size_t i = 0; i < GetObjectives().size(); ++i)
{
response.Info.Objectives.push_back(questObjective);
QuestObjective const& questObjective = GetObjectives()[i];
WorldPackets::Quest::QuestInfoObjective& responseObjective = response.Info.Objectives[i];
responseObjective.ID = questObjective.ID;
responseObjective.QuestID = questObjective.QuestID;
responseObjective.Type = questObjective.Type;
responseObjective.StorageIndex = questObjective.StorageIndex;
responseObjective.ObjectID = questObjective.ObjectID;
responseObjective.Amount = questObjective.Amount;
responseObjective.ConditionalAmount = questObjective.ConditionalAmount;
responseObjective.Flags = questObjective.Flags;
responseObjective.Flags2 = questObjective.Flags2;
responseObjective.ProgressBarWeight = questObjective.ProgressBarWeight;
responseObjective.ParentObjectiveID = questObjective.ParentObjectiveID;
responseObjective.Visible = questObjective.Visible;
responseObjective.Description = questObjective.Description;
responseObjective.VisualEffects = questObjective.VisualEffects;
if (loc != LOCALE_enUS)
{
if (QuestObjectivesLocale const* questObjectivesLocale = sObjectMgr->GetQuestObjectivesLocale(questObjective.ID))
ObjectMgr::GetLocaleString(questObjectivesLocale->Description, loc, response.Info.Objectives.back().Description);
ObjectMgr::GetLocaleString(questObjectivesLocale->Description, loc, responseObjective.Description);
}
}
+4 -2
View File
@@ -33,7 +33,7 @@
#include <vector>
class Player;
enum Difficulty : uint8;
enum Difficulty : int16;
namespace WorldPackets
{
@@ -485,7 +485,7 @@ struct QuestObjective
int8 StorageIndex = 0;
int32 ObjectID = 0;
int32 Amount = 0;
int32 SecondaryAmount = 0;
int32 ConditionalAmount = 0;
uint32 Flags = 0;
uint32 Flags2 = 0;
float ProgressBarWeight = 0.0f;
@@ -682,6 +682,7 @@ class TC_GAME_API Quest
uint32 GetRewMoneyDifficulty() const { return _rewardMoneyDifficulty; }
uint32 GetRewHonor() const { return _rewardHonor; }
uint32 GetRewKillHonor() const { return _rewardKillHonor; }
int32 GetRewardFavor() const { return _rewardFavor; }
uint32 GetArtifactXPDifficulty() const { return _rewardArtifactXPDifficulty; }
float GetArtifactXPMultiplier() const { return _rewardArtifactXPMultiplier; }
uint32 GetArtifactCategoryId() const { return _rewardArtifactCategoryID; }
@@ -801,6 +802,7 @@ class TC_GAME_API Quest
uint32 _rewardSpell = 0;
uint32 _rewardHonor = 0;
uint32 _rewardKillHonor = 0;
int32 _rewardFavor = 0;
uint32 _rewardArtifactXPDifficulty = 0;
float _rewardArtifactXPMultiplier = 0.f;
uint32 _rewardArtifactCategoryID = 0;
+3 -3
View File
@@ -87,17 +87,17 @@ void ScenarioMgr::LoadDBData()
Field* fields = result->Fetch();
uint32 mapId = fields[0].GetUInt32();
uint8 difficulty = fields[1].GetUInt8();
Difficulty difficulty = Difficulty(fields[1].GetInt32());
uint32 scenarioAllianceId = fields[2].GetUInt32();
if (scenarioAllianceId > 0 && _scenarioData.find(scenarioAllianceId) == _scenarioData.end())
if (scenarioAllianceId > 0 && !_scenarioData.contains(scenarioAllianceId))
{
TC_LOG_ERROR("sql.sql", "ScenarioMgr::LoadDBData: DB Table `scenarios`, column scenario_A contained an invalid scenario (Id: {})!", scenarioAllianceId);
continue;
}
uint32 scenarioHordeId = fields[3].GetUInt32();
if (scenarioHordeId > 0 && _scenarioData.find(scenarioHordeId) == _scenarioData.end())
if (scenarioHordeId > 0 && !_scenarioData.contains(scenarioHordeId))
{
TC_LOG_ERROR("sql.sql", "ScenarioMgr::LoadDBData: DB Table `scenarios`, column scenario_H contained an invalid scenario (Id: {})!", scenarioHordeId);
continue;
+2 -1
View File
@@ -29,6 +29,7 @@ class InstanceMap;
class InstanceScenario;
struct ScenarioEntry;
struct ScenarioStepEntry;
enum Difficulty : int16;
struct ScenarioData
{
@@ -45,7 +46,7 @@ struct ScenarioData
struct ScenarioDBData
{
uint32 MapID;
uint8 DifficultyID;
Difficulty DifficultyID;
uint32 Scenario_A;
uint32 Scenario_H;
};
+1 -1
View File
@@ -86,7 +86,7 @@ struct WorldStateTemplate;
namespace Trinity::ChatCommands { struct ChatCommandBuilder; }
enum BattlegroundTypeId : uint32;
enum Difficulty : uint8;
enum Difficulty : int16;
enum DuelCompleteType : uint8;
enum Emote : uint32;
enum QuestStatus : uint8;
@@ -427,20 +427,20 @@ WorldPacket const* CalendarCommandResult::Write()
WorldPacket const* CalendarRaidLockoutAdded::Write()
{
_worldPacket << uint64(InstanceID);
_worldPacket << ServerTime;
_worldPacket << int32(MapID);
_worldPacket << uint32(DifficultyID);
_worldPacket << int16(DifficultyID);
_worldPacket << int32(TimeRemaining);
_worldPacket << uint64(InstanceID);
return &_worldPacket;
}
WorldPacket const* CalendarRaidLockoutRemoved::Write()
{
_worldPacket << uint64(InstanceID);
_worldPacket << int32(MapID);
_worldPacket << uint32(DifficultyID);
_worldPacket << int16(DifficultyID);
_worldPacket << uint64(InstanceID);
return &_worldPacket;
}
@@ -449,7 +449,7 @@ WorldPacket const* CalendarRaidLockoutUpdated::Write()
{
_worldPacket << ServerTime;
_worldPacket << int32(MapID);
_worldPacket << uint32(DifficultyID);
_worldPacket << int16(DifficultyID);
_worldPacket << int32(OldTimeRemaining);
_worldPacket << int32(NewTimeRemaining);
@@ -448,7 +448,7 @@ namespace WorldPackets
int32 MapID = 0;
bool Extend = false;
uint32 DifficultyID = 0;
int16 DifficultyID = 0;
};
class CalendarModeratorStatusQuery final : public ClientPacket
@@ -485,7 +485,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
uint64 InstanceID = 0;
uint32 DifficultyID = 0;
int16 DifficultyID = 0;
int32 TimeRemaining = 0;
WowTime ServerTime;
int32 MapID = 0;
@@ -500,7 +500,7 @@ namespace WorldPackets
uint64 InstanceID = 0;
int32 MapID = 0;
uint32 DifficultyID = 0;
int16 DifficultyID = 0;
};
class CalendarRaidLockoutUpdated final : public ServerPacket
@@ -512,7 +512,7 @@ namespace WorldPackets
WowTime ServerTime;
int32 MapID = 0;
uint32 DifficultyID = 0;
int16 DifficultyID = 0;
int32 NewTimeRemaining = 0;
int32 OldTimeRemaining = 0;
};
@@ -15,6 +15,7 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "CharacterPackets.h"
#include "CharacterPackets.h"
#include "ClubUtils.h"
#include "DB2Stores.h"
@@ -200,13 +201,13 @@ EnumCharactersResult::CharacterInfoBasic::CharacterInfoBasic(Field const* fields
ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::CharacterInfoBasic::VisualItemInfo const& visualItem)
{
data << uint32(visualItem.DisplayID);
data << uint8(visualItem.InvType);
data << uint32(visualItem.DisplayEnchantID);
data << uint8(visualItem.Subclass);
data << int32(visualItem.SecondaryItemModifiedAppearanceID);
data << uint32(visualItem.ItemID);
data << uint32(visualItem.TransmogrifiedItemID);
data << uint8(visualItem.Subclass);
data << uint8(visualItem.InvType);
data << uint32(visualItem.DisplayID);
data << uint32(visualItem.DisplayEnchantID);
data << int32(visualItem.SecondaryItemModifiedAppearanceID);
return data;
}
@@ -251,15 +252,15 @@ ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::CharacterInfoBasi
data << int32(charInfo.TimerunningSeasonID);
data << uint32(charInfo.OverrideSelectScreenFileDataID);
data << uint32(charInfo.Unused1110_1);
data << uint32(charInfo.RealmQueue);
for (ChrCustomizationChoice const& customization : charInfo.Customizations)
data << customization;
data << SizedString::BitsSize<6>(charInfo.Name);
data << Bits<1>(charInfo.FirstLogin);
data << Bits<1>(charInfo.Unused1110_2);
data << Bits<1>(charInfo.Unused1110_3);
data << Bits<1>(charInfo.RealmInfoFound);
data << Bits<1>(charInfo.IsRealmOffline);
data.FlushBits();
@@ -315,16 +316,30 @@ ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::RegionwideCharact
return data;
}
ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::ClassUnlock const& classUnlock)
{
data << int8(classUnlock.ClassID);
data << uint32(classUnlock.AchievementID);
data << Bits<1>(classUnlock.HasUnlockedAchievement);
data.FlushBits();
return data;
}
ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::RaceUnlock const& raceUnlock)
{
data << int8(raceUnlock.RaceID);
data << Size<uint32>(raceUnlock.ClassUnlocks);
data << Bits<1>(raceUnlock.HasUnlockedLicense);
data << Bits<1>(raceUnlock.HasUnlockedAchievement);
data << Bits<1>(raceUnlock.HasHeritageArmorUnlockAchievement);
data << Bits<1>(raceUnlock.HideRaceOnClient);
data << Bits<1>(raceUnlock.Unused1027);
data << Bits<1>(raceUnlock.FactionBalanceDisabled);
data.FlushBits();
for (EnumCharactersResult::ClassUnlock const& classUnlock : raceUnlock.ClassUnlocks)
data << classUnlock;
return data;
}
@@ -394,9 +409,9 @@ WorldPacket const* EnumCharactersResult::Write()
_worldPacket << Bits<1>(IsRestrictedNewPlayer);
_worldPacket << Bits<1>(IsNewcomerChatCompleted);
_worldPacket << Bits<1>(IsRestrictedTrial);
_worldPacket << Bits<1>(Unused1127);
_worldPacket << Bits<1>(IsAccountLapsedPlayer);
_worldPacket << OptionalInit(ClassDisableMask);
_worldPacket << Bits<1>(DontCreateCharacterDisplays);
_worldPacket << Bits<1>(ForceCharacterListSort);
_worldPacket << Size<uint32>(Characters);
_worldPacket << Size<uint32>(RegionwideCharacters);
_worldPacket << int32(MaxCharacterLevel);
@@ -185,20 +185,20 @@ namespace WorldPackets
struct VisualItemInfo
{
uint32 ItemID = 0;
uint32 TransmogrifiedItemID = 0;
uint8 Subclass = 0;
uint8 InvType = 0;
uint32 DisplayID = 0;
uint32 DisplayEnchantID = 0;
int32 SecondaryItemModifiedAppearanceID = 0; // also -1 is some special value
uint8 InvType = 0;
uint8 Subclass = 0;
uint32 ItemID = 0;
uint32 TransmogrifiedItemID = 0;
};
std::array<VisualItemInfo, 19> VisualItems = { };
CustomTabardInfo PersonalTabard;
uint32 Unused1110_1 = 0;
bool Unused1110_2 = false;
bool Unused1110_3 = false;
uint32 RealmQueue = 0;
bool RealmInfoFound = false;
bool IsRealmOffline = false;
};
struct CharacterRestrictionAndMailData
@@ -231,6 +231,13 @@ namespace WorldPackets
int16 PvpRatingAssociatedSpecID = 0;
};
struct ClassUnlock
{
int8 ClassID = 0;
bool HasUnlockedAchievement = false;
uint32 AchievementID = 0;
};
struct RaceUnlock
{
int8 RaceID = 0;
@@ -238,7 +245,8 @@ namespace WorldPackets
bool HasUnlockedAchievement = false;
bool HasHeritageArmorUnlockAchievement = false;
bool HideRaceOnClient = false;
bool Unused1027 = false;
bool FactionBalanceDisabled = false;
std::vector<ClassUnlock> ClassUnlocks;
};
struct UnlockedConditionalAppearance
@@ -270,8 +278,8 @@ namespace WorldPackets
bool IsRestrictedNewPlayer = false; ///< forbids using level boost and class trials
bool IsNewcomerChatCompleted = false; ///< forbids hero classes and allied races
bool IsRestrictedTrial = false;
bool Unused1127 = false;
bool DontCreateCharacterDisplays = false;
bool IsAccountLapsedPlayer = false;
bool ForceCharacterListSort = false;
int32 MaxCharacterLevel = 1;
Optional<uint32> ClassDisableMask;
@@ -207,6 +207,7 @@ WorldPacket const* Chat::Write()
_worldPacket << Bits<1>(FakeSenderName);
_worldPacket << OptionalInit(BroadcastTextID);
_worldPacket << OptionalInit(ChannelGUID);
_worldPacket << OptionalInit(EncounterEventID);
_worldPacket.FlushBits();
_worldPacket << SizedString::Data(SenderName);
@@ -221,6 +222,9 @@ WorldPacket const* Chat::Write()
if (ChannelGUID)
_worldPacket << *ChannelGUID;
if (EncounterEventID)
_worldPacket << uint32(*EncounterEventID);
return &_worldPacket;
}
@@ -183,6 +183,7 @@ namespace WorldPackets
bool HideChatLog = false;
bool FakeSenderName = false;
Optional<ObjectGuid> ChannelGUID;
Optional<uint32> EncounterEventID;
};
class Emote final : public ServerPacket
@@ -20,10 +20,40 @@
namespace WorldPackets::Crafting
{
ByteBuffer& operator>>(ByteBuffer& data, CraftingReagentBase& reagent)
{
data.ResetBitPos();
data >> OptionalInit(reagent.ItemID);
data >> OptionalInit(reagent.CurrencyID);
if (reagent.ItemID)
data >> *reagent.ItemID;
if (reagent.CurrencyID)
data >> *reagent.CurrencyID;
return data;
}
ByteBuffer& operator<<(ByteBuffer& data, CraftingReagentBase const& reagent)
{
data << OptionalInit(reagent.ItemID);
data << OptionalInit(reagent.CurrencyID);
data.FlushBits();
if (reagent.ItemID)
data << int32(*reagent.ItemID);
if (reagent.CurrencyID)
data << int32(*reagent.CurrencyID);
return data;
}
ByteBuffer& operator<<(ByteBuffer& data, SpellReducedReagent const& spellReducedReagent)
{
data << int32(spellReducedReagent.ItemID);
data << int32(spellReducedReagent.Quantity);
data << spellReducedReagent.Reagent;
return data;
}
@@ -38,8 +68,8 @@ ByteBuffer& operator<<(ByteBuffer& data, CraftingData const& craftingData)
data << int32(craftingData.SkillFromReagents);
data << int32(craftingData.Skill);
data << int32(craftingData.CritBonusSkill);
data << float(craftingData.field_1C);
data << uint64(craftingData.field_20);
data << float(craftingData.ModSkillGain);
data << uint64(craftingData.OrderID);
data << Size<uint32>(craftingData.ResourcesReturned);
data << uint32(craftingData.OperationID);
data << craftingData.ItemGUID;
@@ -49,13 +79,10 @@ ByteBuffer& operator<<(ByteBuffer& data, CraftingData const& craftingData)
data << int32(craftingData.ConcentrationSpent);
data << int32(craftingData.IngenuityRefund);
for (SpellReducedReagent const& spellReducedReagent : craftingData.ResourcesReturned)
data << spellReducedReagent;
data << Bits<1>(craftingData.IsCrit);
data << Bits<1>(craftingData.field_29);
data << Bits<1>(craftingData.field_2A);
data << Bits<1>(craftingData.BonusCraft);
data << Bits<1>(craftingData.IsRecraft);
data << Bits<1>(craftingData.IsInitialRecraft);
data << Bits<1>(craftingData.IsFirstCraft);
data << Bits<1>(craftingData.HasIngenuityProc);
data << Bits<1>(craftingData.ApplyConcentration);
data.FlushBits();
@@ -63,6 +90,9 @@ ByteBuffer& operator<<(ByteBuffer& data, CraftingData const& craftingData)
data << craftingData.OldItem;
data << craftingData.NewItem;
for (SpellReducedReagent const& spellReducedReagent : craftingData.ResourcesReturned)
data << spellReducedReagent;
return data;
}
}
@@ -23,9 +23,15 @@
namespace WorldPackets::Crafting
{
struct CraftingReagentBase
{
Optional<int32> ItemID;
Optional<int32> CurrencyID;
};
struct SpellReducedReagent
{
int32 ItemID = 0;
CraftingReagentBase Reagent;
int32 Quantity = 0;
};
@@ -39,12 +45,12 @@ struct CraftingData
int32 SkillFromReagents = 0;
int32 Skill = 0;
int32 CritBonusSkill = 0;
float field_1C = 0.0f;
uint64 field_20 = 0;
float ModSkillGain = 0.0f;
uint64 OrderID = 0;
bool IsCrit = false;
bool field_29 = false;
bool field_2A = false;
bool BonusCraft = false;
bool IsRecraft = false;
bool IsInitialRecraft = false;
bool IsFirstCraft = false;
std::vector<SpellReducedReagent> ResourcesReturned;
uint32 OperationID = 0;
ObjectGuid ItemGUID;
@@ -59,6 +65,8 @@ struct CraftingData
bool ApplyConcentration = false;
};
ByteBuffer& operator>>(ByteBuffer& data, CraftingReagentBase& reagent);
ByteBuffer& operator<<(ByteBuffer& data, CraftingReagentBase const& reagent);
ByteBuffer& operator<<(ByteBuffer& data, SpellReducedReagent const& spellReducedReagent);
ByteBuffer& operator<<(ByteBuffer& data, CraftingData const& craftingData);
}
@@ -36,10 +36,10 @@ WorldPacket const* UpdateInstanceOwnership::Write()
ByteBuffer& operator<<(ByteBuffer& data, InstanceLock const& lockInfos)
{
data << uint64(lockInfos.InstanceID);
data << uint32(lockInfos.MapID);
data << uint32(lockInfos.DifficultyID);
data << uint32(lockInfos.TimeRemaining);
data << int16(lockInfos.DifficultyID);
data << uint64(lockInfos.InstanceID);
data << int32(lockInfos.TimeRemaining);
data << uint32(lockInfos.CompletedMask);
data << Bits<1>(lockInfos.Locked);
@@ -112,7 +112,7 @@ WorldPacket const* RaidInstanceMessage::Write()
{
_worldPacket << int32(Type);
_worldPacket << uint32(MapID);
_worldPacket << uint32(DifficultyID);
_worldPacket << int16(DifficultyID);
_worldPacket << int32(TimeLeft);
_worldPacket << SizedString::BitsSize<8>(WarningMessage);
_worldPacket << Bits<1>(Locked);
@@ -49,9 +49,9 @@ namespace WorldPackets
struct InstanceLock
{
uint64 InstanceID = 0u;
uint32 MapID = 0u;
uint32 DifficultyID = 0u;
int16 DifficultyID = 0;
uint64 InstanceID = 0u;
int32 TimeRemaining = 0;
uint32 CompletedMask = 0u;
@@ -159,7 +159,7 @@ namespace WorldPackets
int32 Type = 0;
uint32 MapID = 0;
uint32 DifficultyID = 0;
int16 DifficultyID = 0;
int32 TimeLeft = 0;
std::string_view WarningMessage; // GlobalStrings tag
bool Locked = false;
@@ -208,11 +208,11 @@ void TutorialSetFlag::Read()
WorldPacket const* WorldServerInfo::Write()
{
_worldPacket << uint32(DifficultyID);
_worldPacket << HouseGuid;
_worldPacket << HouseOwnerBnetAccount;
_worldPacket << HouseOwnerPlayer;
_worldPacket << NeighborhoodGuid;
_worldPacket << int16(DifficultyID);
_worldPacket << HouseGUID;
_worldPacket << HouseOwnerAccountGUID;
_worldPacket << HouseCosmeticOwnerGUID;
_worldPacket << NeighborhoodGUID;
_worldPacket << Bits<1>(IsTournamentRealm);
_worldPacket << Bits<1>(XRealmPvpAlert);
_worldPacket << Bits<1>(BlockExitingLoadingScreen);
@@ -246,7 +246,7 @@ void SetRaidDifficulty::Read()
WorldPacket const* DungeonDifficultySet::Write()
{
_worldPacket << int32(DifficultyID);
_worldPacket << int16(DifficultyID);
return &_worldPacket;
}
@@ -254,7 +254,7 @@ WorldPacket const* DungeonDifficultySet::Write()
WorldPacket const* RaidDifficultySet::Write()
{
_worldPacket << int32(Legacy);
_worldPacket << int32(DifficultyID);
_worldPacket << int16(DifficultyID);
return &_worldPacket;
}
+9 -9
View File
@@ -257,7 +257,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
uint32 DifficultyID = 0;
int16 DifficultyID = 0;
bool IsTournamentRealm = false;
bool XRealmPvpAlert = false;
bool BlockExitingLoadingScreen = false; // when set to true, sending SMSG_UPDATE_OBJECT with CreateObject Self bit = true will not hide loading screen
@@ -266,10 +266,10 @@ namespace WorldPackets
Optional<uint64> RestrictedAccountMaxMoney;
Optional<uint32> InstanceGroupSize;
ObjectGuid HouseGuid;
ObjectGuid HouseOwnerBnetAccount;
ObjectGuid HouseOwnerPlayer;
ObjectGuid NeighborhoodGuid;
ObjectGuid HouseGUID;
ObjectGuid HouseOwnerAccountGUID;
ObjectGuid HouseCosmeticOwnerGUID;
ObjectGuid NeighborhoodGUID;
};
class SetDungeonDifficulty final : public ClientPacket
@@ -279,7 +279,7 @@ namespace WorldPackets
void Read() override;
uint32 DifficultyID = 0;
int16 DifficultyID = 0;
};
class SetRaidDifficulty final : public ClientPacket
@@ -290,7 +290,7 @@ namespace WorldPackets
void Read() override;
int32 Legacy = 0;
int32 DifficultyID = 0;
int16 DifficultyID = 0;
};
class DungeonDifficultySet final : public ServerPacket
@@ -300,7 +300,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
int32 DifficultyID = 0;
int16 DifficultyID = 0;
};
class RaidDifficultySet final : public ServerPacket
@@ -311,7 +311,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
int32 Legacy = 0;
int32 DifficultyID = 0;
int16 DifficultyID = 0;
};
class CorpseReclaimDelay : public ServerPacket
@@ -36,8 +36,8 @@ ByteBuffer& operator<<(ByteBuffer& data, MovementInfo::TransportInfo const& tran
data << transportInfo.seat; // VehicleSeatIndex
data << transportInfo.time; // MoveTime
data.WriteBit(hasPrevTime);
data.WriteBit(hasVehicleId);
data << WorldPackets::Bits<1>(hasPrevTime);
data << WorldPackets::Bits<1>(hasVehicleId);
data.FlushBits();
@@ -74,11 +74,6 @@ ByteBuffer& operator<<(ByteBuffer& data, MovementInfo const& movementInfo)
bool hasTransportData = !movementInfo.transport.guid.IsEmpty();
bool hasFallDirection = movementInfo.HasMovementFlag(MOVEMENTFLAG_FALLING | MOVEMENTFLAG_FALLING_FAR);
bool hasFallData = hasFallDirection || movementInfo.jump.fallTime != 0;
bool hasSpline = false; // todo 6.x send this infos
bool hasInertia = movementInfo.inertia.has_value();
bool hasAdvFlying = movementInfo.advFlying.has_value();
bool hasDriveStatus = movementInfo.driveStatus.has_value();
bool hasStandingOnGameObjectGUID = movementInfo.standingOnGameObjectGUID.has_value();
data << movementInfo.guid;
data << uint32(movementInfo.flags);
@@ -95,38 +90,39 @@ ByteBuffer& operator<<(ByteBuffer& data, MovementInfo const& movementInfo)
uint32 moveIndex = 0;
data << moveIndex;
data << float(movementInfo.gravityModifier);
/*for (uint32 i = 0; i < removeMovementForcesCount; ++i)
{
data << ObjectGuid;
}*/
data.WriteBit(hasStandingOnGameObjectGUID);
data.WriteBit(hasTransportData);
data.WriteBit(hasFallData);
data.WriteBit(hasSpline);
data.WriteBit(false); // HeightChangeFailed
data.WriteBit(false); // RemoteTimeValid
data.WriteBit(hasInertia);
data.WriteBit(hasAdvFlying);
data.WriteBit(hasDriveStatus);
data << WorldPackets::OptionalInit(movementInfo.standingOnGameObjectGUID);
data << WorldPackets::Bits<1>(hasTransportData);
data << WorldPackets::Bits<1>(hasFallData);
data << WorldPackets::Bits<1>(false); // HasSpline
data << WorldPackets::Bits<1>(false); // HeightChangeFailed
data << WorldPackets::Bits<1>(false); // RemoteTimeValid
data << WorldPackets::OptionalInit(movementInfo.inertia);
data << WorldPackets::OptionalInit(movementInfo.advFlying);
data << WorldPackets::OptionalInit(movementInfo.driveStatus);
data.FlushBits();
if (hasTransportData)
data << movementInfo.transport;
if (hasStandingOnGameObjectGUID)
if (movementInfo.standingOnGameObjectGUID)
data << *movementInfo.standingOnGameObjectGUID;
if (hasInertia)
if (movementInfo.inertia)
{
data << uint32(movementInfo.inertia->id);
data << movementInfo.inertia->force.PositionXYZStream();
data << uint32(movementInfo.inertia->lifetime);
}
if (hasAdvFlying)
if (movementInfo.advFlying)
{
data << float(movementInfo.advFlying->forwardVelocity);
data << float(movementInfo.advFlying->upVelocity);
@@ -137,7 +133,7 @@ ByteBuffer& operator<<(ByteBuffer& data, MovementInfo const& movementInfo)
data << uint32(movementInfo.jump.fallTime);
data << float(movementInfo.jump.zspeed);
data.WriteBit(hasFallDirection);
data << WorldPackets::Bits<1>(hasFallDirection);
data.FlushBits();
if (hasFallDirection)
{
@@ -147,12 +143,12 @@ ByteBuffer& operator<<(ByteBuffer& data, MovementInfo const& movementInfo)
}
}
if (hasDriveStatus)
if (movementInfo.driveStatus)
{
data << float(movementInfo.driveStatus->speed);
data << float(movementInfo.driveStatus->movementAngle);
data.WriteBit(movementInfo.driveStatus->accelerating);
data.WriteBit(movementInfo.driveStatus->drifting);
data << WorldPackets::Bits<1>(movementInfo.driveStatus->accelerating);
data << WorldPackets::Bits<1>(movementInfo.driveStatus->drifting);
data.FlushBits();
}
@@ -161,8 +157,6 @@ ByteBuffer& operator<<(ByteBuffer& data, MovementInfo const& movementInfo)
ByteBuffer& operator>>(ByteBuffer& data, MovementInfo& movementInfo)
{
//bool hasSpline = false;
data >> movementInfo.guid;
data >> movementInfo.flags;
data >> movementInfo.flags2;
@@ -178,42 +172,39 @@ ByteBuffer& operator>>(ByteBuffer& data, MovementInfo& movementInfo)
uint32 moveIndex;
data >> moveIndex;
data >> movementInfo.gravityModifier;
for (uint32 i = 0; i < removeMovementForcesCount; ++i)
{
ObjectGuid guid;
data >> guid;
}
bool hasStandingOnGameObjectGUID = data.ReadBit();
data >> WorldPackets::OptionalInit(movementInfo.standingOnGameObjectGUID);
bool hasTransport = data.ReadBit();
bool hasFall = data.ReadBit();
/*hasSpline = */data.ReadBit(); // todo 6.x read this infos
data.ReadBit(); // HeightChangeFailed
data.ReadBit(); // RemoteTimeValid
bool hasInertia = data.ReadBit();
bool hasAdvFlying = data.ReadBit();
bool hasDriveStatus = data.ReadBit();
data >> WorldPackets::OptionalInit(movementInfo.inertia);
data >> WorldPackets::OptionalInit(movementInfo.advFlying);
data >> WorldPackets::OptionalInit(movementInfo.driveStatus);
if (hasTransport)
data >> movementInfo.transport;
if (hasStandingOnGameObjectGUID)
data >> movementInfo.standingOnGameObjectGUID.emplace();
if (movementInfo.standingOnGameObjectGUID)
data >> *movementInfo.standingOnGameObjectGUID;
if (hasInertia)
if (movementInfo.inertia)
{
movementInfo.inertia.emplace();
data >> movementInfo.inertia->id;
data >> movementInfo.inertia->force.PositionXYZStream();
data >> movementInfo.inertia->lifetime;
}
if (hasAdvFlying)
if (movementInfo.advFlying)
{
movementInfo.advFlying.emplace();
data >> movementInfo.advFlying->forwardVelocity;
data >> movementInfo.advFlying->upVelocity;
}
@@ -234,12 +225,10 @@ ByteBuffer& operator>>(ByteBuffer& data, MovementInfo& movementInfo)
}
}
if (hasDriveStatus)
if (movementInfo.driveStatus)
{
data.ResetBitPos();
movementInfo.driveStatus.emplace();
data >> movementInfo.driveStatus->speed;
data >> movementInfo.driveStatus->movementAngle;
movementInfo.driveStatus->accelerating = data.ReadBit();
@@ -325,13 +314,13 @@ ByteBuffer& operator<<(ByteBuffer& data, MonsterSplineAnimTierTransition const&
return data;
}
ByteBuffer& operator<<(ByteBuffer& data, MonsterSplineUnknown901 const& unk)
ByteBuffer& operator<<(ByteBuffer& data, MonsterSplineClientSpellVisualData const& unk)
{
for (MonsterSplineUnknown901::Inner const& unkInner : unk.Data)
for (MonsterSplineSpellVisualNodeInfo const& nodeInfo : unk.NodeInfo)
{
data << int32(unkInner.Unknown_1);
data << unkInner.Visual;
data << uint32(unkInner.Unknown_4);
data << int32(nodeInfo.SpellID);
data << nodeInfo.Visual;
data << uint32(nodeInfo.StartNodeIndex);
}
return data;
@@ -371,7 +360,7 @@ ByteBuffer& operator<<(ByteBuffer& data, MovementSpline const& movementSpline)
data << OptionalInit(movementSpline.JumpExtraData);
data << OptionalInit(movementSpline.TurnData);
data << OptionalInit(movementSpline.AnimTierTransition);
data << OptionalInit(movementSpline.Unknown901);
data << OptionalInit(movementSpline.SpellVisualData);
data.FlushBits();
if (movementSpline.SplineFilter)
@@ -395,8 +384,8 @@ ByteBuffer& operator<<(ByteBuffer& data, MovementSpline const& movementSpline)
if (movementSpline.AnimTierTransition)
data << *movementSpline.AnimTierTransition;
if (movementSpline.Unknown901)
data << *movementSpline.Unknown901;
if (movementSpline.SpellVisualData)
data << *movementSpline.SpellVisualData;
return data;
}
@@ -452,7 +441,7 @@ void CommonMovement::WriteCreateObjectSplineDataBlock(::Movement::MoveSpline con
data << Bits<1>(hasJumpExtraData);
data << OptionalInit(moveSpline.turn); // HasTurnData
data << OptionalInit(moveSpline.anim_tier); // HasAnimTierTransition
data.WriteBit(false); // HasUnknown901
data << Bits<1>(false); // HasSpellVisualData
data.FlushBits();
//if (HasSplineFilterKey)
@@ -464,7 +453,7 @@ void CommonMovement::WriteCreateObjectSplineDataBlock(::Movement::MoveSpline con
// data << float(Out);
// }
// data.WriteBits(FilterFlags, 2);
// data << Bits<2>(FilterFlags);
// data.FlushBits();
//}
@@ -524,14 +513,13 @@ void CommonMovement::WriteCreateObjectSplineDataBlock(::Movement::MoveSpline con
data << uint32(0);
}
//if (HasUnknown901)
//if (HasSpellVisualData)
//{
// for (WorldPackets::Movement::MonsterSplineUnknown901::Inner const& unkInner : unk.Data) size = 16
// for (WorldPackets::Movement::MonsterSplineSpellVisualNodeInfo const& nodeInfo : SpellVisualData.NodeInfo)
// {
// data << int32(unkInner.Unknown_1);
// data << int32(unkInner.Unknown_2);
// data << int32(unkInner.Unknown_3);
// data << uint32(unkInner.Unknown_4);
// data << int32(nodeInfo.SpellID);
// data << nodeInfo.Visual;
// data << uint32(nodeInfo.StartNodeIndex);
// }
//}
}
@@ -572,8 +560,8 @@ void CommonMovement::WriteMovementForceWithDirection(MovementForce const& moveme
data << uint32(movementForce.TransportID);
data << float(movementForce.Magnitude);
data << int32(movementForce.MovementForceID);
data << int32(movementForce.Unknown1110_1);
data << int32(movementForce.Unused1110);
data << int32(movementForce.DurationMs);
data << uint32(movementForce.EndTimestamp);
data << uint32(movementForce.Flags);
data << Bits<2>(movementForce.Type);
data.FlushBits();
@@ -831,8 +819,8 @@ ByteBuffer& operator>>(ByteBuffer& data, MovementForce& movementForce)
data >> movementForce.TransportID;
data >> movementForce.Magnitude;
data >> movementForce.MovementForceID;
data >> movementForce.Unknown1110_1;
data >> movementForce.Unused1110;
data >> movementForce.DurationMs;
data >> movementForce.EndTimestamp;
data >> movementForce.Flags;
data >> Bits<2>(movementForce.Type);
@@ -105,16 +105,16 @@ namespace WorldPackets
uint8 AnimTier = 0;
};
struct MonsterSplineUnknown901
struct MonsterSplineSpellVisualNodeInfo
{
struct Inner
{
int32 Unknown_1 = 0;
Spells::SpellCastVisual Visual;
uint32 Unknown_4 = 0;
};
int32 SpellID = 0;
Spells::SpellCastVisual Visual;
uint32 StartNodeIndex = 0;
};
std::array<Inner, 16> Data;
struct MonsterSplineClientSpellVisualData
{
std::array<MonsterSplineSpellVisualNodeInfo, 16> NodeInfo;
};
struct MovementSpline
@@ -136,7 +136,7 @@ namespace WorldPackets
Optional<MonsterSplineJumpExtraData> JumpExtraData;
Optional<MonsterSplineTurnData> TurnData;
Optional<MonsterSplineAnimTierTransition> AnimTierTransition;
Optional<MonsterSplineUnknown901> Unknown901;
Optional<MonsterSplineClientSpellVisualData> SpellVisualData;
float FaceDirection = 0.0f;
ObjectGuid FaceGUID;
TaggedPosition<Position::XYZ> FaceSpot;
@@ -144,9 +144,12 @@ WorldPacket const* GroupUninvite::Write()
void RequestPartyMemberStats::Read()
{
_worldPacket >> OptionalInit(PartyIndex);
_worldPacket >> TargetGUID;
_worldPacket >> Size<uint32>(Targets);
if (PartyIndex)
_worldPacket >> *PartyIndex;
for (ObjectGuid& target : Targets)
_worldPacket >> target;
}
ByteBuffer& operator<<(ByteBuffer& data, PartyMemberPhase const& phase)
@@ -500,10 +503,10 @@ ByteBuffer& operator<<(ByteBuffer& data, PartyPlayerInfo const& playerInfo)
ByteBuffer& operator<<(ByteBuffer& data, ChallengeModeData const& challengeMode)
{
data << int32(challengeMode.Unknown_1120_1);
data << int32(challengeMode.Unknown_1120_2);
data << uint64(challengeMode.Unknown_1120_3);
data << int64(challengeMode.Unknown_1120_4);
data << int32(challengeMode.MapID);
data << int32(challengeMode.InitialPlayerCount);
data << uint64(challengeMode.InstanceID);
data << challengeMode.StartTime;
data << challengeMode.KeystoneOwnerGUID;
data << challengeMode.LeaverGUID;
data << challengeMode.InstanceAbandonVoteCooldown;
@@ -543,9 +546,9 @@ ByteBuffer& operator<<(ByteBuffer& data, PartyLootSettings const& lootSettings)
ByteBuffer& operator<<(ByteBuffer& data, PartyDifficultySettings const& difficultySettings)
{
data << uint32(difficultySettings.DungeonDifficultyID);
data << uint32(difficultySettings.RaidDifficultyID);
data << uint32(difficultySettings.LegacyRaidDifficultyID);
data << int16(difficultySettings.DungeonDifficultyID);
data << int16(difficultySettings.RaidDifficultyID);
data << int16(difficultySettings.LegacyRaidDifficultyID);
return data;
}
@@ -147,7 +147,7 @@ namespace WorldPackets
void Read() override;
Optional<uint8> PartyIndex;
ObjectGuid TargetGUID;
Array<ObjectGuid, 40> Targets;
};
struct PartyMemberPhase
@@ -561,17 +561,17 @@ namespace WorldPackets
struct PartyDifficultySettings
{
uint32 DungeonDifficultyID = 0u;
uint32 RaidDifficultyID = 0u;
uint32 LegacyRaidDifficultyID = 0u;
int16 DungeonDifficultyID = 0u;
int16 RaidDifficultyID = 0u;
int16 LegacyRaidDifficultyID = 0u;
};
struct ChallengeModeData
{
int32 Unknown_1120_1 = 0;
int32 Unknown_1120_2 = 0;
uint64 Unknown_1120_3 = 0;
int64 Unknown_1120_4 = 0;
int32 MapID = 0;
int32 InitialPlayerCount = 0;
uint64 InstanceID = 0;
Timestamp<> StartTime;
ObjectGuid KeystoneOwnerGUID;
ObjectGuid LeaverGUID;
Duration<Milliseconds> InstanceAbandonVoteCooldown;
@@ -104,6 +104,7 @@ WorldPacket const* QueryQuestInfoResponse::Write()
_worldPacket << int32(Info.RewardSpell);
_worldPacket << int32(Info.RewardHonor);
_worldPacket << float(Info.RewardKillHonor);
_worldPacket << int32(Info.RewardFavor);
_worldPacket << int32(Info.RewardArtifactXPDifficulty);
_worldPacket << float(Info.RewardArtifactXPMultiplier);
_worldPacket << int32(Info.RewardArtifactCategoryID);
@@ -168,7 +169,7 @@ WorldPacket const* QueryQuestInfoResponse::Write()
_worldPacket << Size<uint32>(Info.Objectives);
_worldPacket << uint64(Info.AllowableRaces.RawValue);
_worldPacket << Size<uint32>(Info.TreasurePickerID);
_worldPacket << Size<uint32>(Info.TreasurePickerID2);
_worldPacket << Size<uint32>(Info.NonDisplayableTreasurePickerIDs);
_worldPacket << int32(Info.Expansion);
_worldPacket << int32(Info.ManagedWorldStateID);
_worldPacket << int32(Info.QuestSessionBonus);
@@ -186,8 +187,8 @@ WorldPacket const* QueryQuestInfoResponse::Write()
if (!Info.TreasurePickerID.empty())
_worldPacket.append(Info.TreasurePickerID.data(), Info.TreasurePickerID.size());
if (!Info.TreasurePickerID2.empty())
_worldPacket.append(Info.TreasurePickerID2.data(), Info.TreasurePickerID2.size());
if (!Info.NonDisplayableTreasurePickerIDs.empty())
_worldPacket.append(Info.NonDisplayableTreasurePickerIDs.data(), Info.NonDisplayableTreasurePickerIDs.size());
if (!Info.RewardHouseRoomIDs.empty())
_worldPacket.append(Info.RewardHouseRoomIDs.data(), Info.RewardHouseRoomIDs.size());
@@ -208,14 +209,14 @@ WorldPacket const* QueryQuestInfoResponse::Write()
_worldPacket << Bits<1>(Info.ReadyForTranslation);
_worldPacket.FlushBits();
for (QuestObjective const& questObjective : Info.Objectives)
for (QuestInfoObjective const& questObjective : Info.Objectives)
{
_worldPacket << uint32(questObjective.ID);
_worldPacket << int32(questObjective.Type);
_worldPacket << int8(questObjective.StorageIndex);
_worldPacket << int32(questObjective.ObjectID);
_worldPacket << int32(questObjective.Amount);
_worldPacket << int32(questObjective.SecondaryAmount); // only objective type 22
_worldPacket << int32(questObjective.ConditionalAmount); // only objective type 22
_worldPacket << uint32(questObjective.Flags);
_worldPacket << uint32(questObjective.Flags2);
_worldPacket << float(questObjective.ProgressBarWeight);
@@ -630,6 +631,8 @@ WorldPacket const* QuestGiverQuestListMessage::Write()
WorldPacket const* QuestUpdateComplete::Write()
{
_worldPacket << int32(QuestID);
_worldPacket << Bits<1>(HideCreditMessage);
_worldPacket.FlushBits();
return &_worldPacket;
}
+22 -2
View File
@@ -115,6 +115,24 @@ namespace WorldPackets
int32 Type = 0;
};
struct QuestInfoObjective
{
uint32 ID = 0;
uint32 QuestID = 0;
uint8 Type = 0;
int8 StorageIndex = 0;
int32 ObjectID = 0;
int32 Amount = 0;
int32 ConditionalAmount = 0;
uint32 Flags = 0;
uint32 Flags2 = 0;
float ProgressBarWeight = 0.0f;
int32 ParentObjectiveID = 0;
bool Visible = false;
std::string_view Description;
std::span<int32 const> VisualEffects;
};
struct ConditionalQuestText
{
int32 PlayerConditionID = 0;
@@ -142,6 +160,7 @@ namespace WorldPackets
int32 RewardSpell = 0;
int32 RewardHonor = 0;
float RewardKillHonor = 0.0f;
int32 RewardFavor = 0;
int32 RewardArtifactXPDifficulty = 0;
float RewardArtifactXPMultiplier = 0.0f;
int32 RewardArtifactCategoryID = 0;
@@ -178,12 +197,12 @@ namespace WorldPackets
int32 AreaGroupID = 0;
int64 TimeAllowed = 0;
std::span<int32 const> TreasurePickerID;
std::span<int32 const> TreasurePickerID2; // unknown purpose, used only sometimes and only if TreasurePickerID is empty
std::span<int32 const> NonDisplayableTreasurePickerIDs;
int32 Expansion = 0;
int32 ManagedWorldStateID = 0;
int32 QuestSessionBonus = 0;
int32 QuestGiverCreatureID = 0; // used to select ConditionalQuestText
std::vector<QuestObjective> Objectives;
std::vector<QuestInfoObjective> Objectives;
std::vector<ConditionalQuestText> ConditionalQuestDescription;
std::vector<ConditionalQuestText> ConditionalQuestCompletionLog;
std::span<int32 const> RewardHouseRoomIDs;
@@ -555,6 +574,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
int32 QuestID = 0;
bool HideCreditMessage = false;
};
class QuestConfirmAcceptResponse final : public ServerPacket
+20 -14
View File
@@ -169,9 +169,9 @@ ByteBuffer& operator>>(ByteBuffer& buffer, SpellTargetData& targetData)
buffer >> targetData.Flags;
buffer >> targetData.Unit;
buffer >> targetData.Item;
buffer >> targetData.Unknown1127_1;
buffer >> targetData.HousingGUID;
buffer >> Bits<1>(targetData.Unknown1127_2);
buffer >> Bits<1>(targetData.HousingIsResident);
buffer >> OptionalInit(targetData.SrcLocation);
buffer >> OptionalInit(targetData.DstLocation);
buffer >> OptionalInit(targetData.Orientation);
@@ -205,9 +205,9 @@ ByteBuffer& operator>>(ByteBuffer& buffer, MissileTrajectoryRequest& trajectory)
ByteBuffer& operator>>(ByteBuffer& data, SpellCraftingReagent& optionalReagent)
{
data >> optionalReagent.ItemID;
data >> optionalReagent.DataSlotIndex;
data >> optionalReagent.Slot;
data >> optionalReagent.Quantity;
data >> optionalReagent.Reagent;
data >> OptionalInit(optionalReagent.Source);
if (optionalReagent.Source)
data >> *optionalReagent.Source;
@@ -229,16 +229,17 @@ ByteBuffer& operator>>(ByteBuffer& buffer, SpellCastRequest& request)
buffer >> request.SendCastFlags;
buffer >> request.Misc[0];
buffer >> request.Misc[1];
buffer >> request.Misc[2];
buffer >> request.SpellID;
buffer >> request.Visual;
buffer >> request.MissileTrajectory;
buffer >> request.CraftingNPC;
buffer >> Size<uint32>(request.OptionalCurrencies);
buffer >> Size<uint32>(request.OptionalReagents);
buffer >> Size<uint32>(request.RemovedModifications);
buffer >> request.CraftingFlags;
buffer >> Size<uint32>(request.ExtraCurrencyCosts);
buffer >> Size<uint32>(request.CraftingReagents);
buffer >> Size<uint32>(request.RemovedReagents);
buffer >> request.CraftingCastFlags;
for (SpellExtraCurrencyCost& optionalCurrency : request.OptionalCurrencies)
for (SpellExtraCurrencyCost& optionalCurrency : request.ExtraCurrencyCosts)
buffer >> optionalCurrency;
buffer >> request.Target;
@@ -248,13 +249,13 @@ ByteBuffer& operator>>(ByteBuffer& buffer, SpellCastRequest& request)
buffer >> BitsSize<2>(request.Weight);
buffer >> OptionalInit(request.CraftingOrderID);
for (SpellCraftingReagent& optionalReagent : request.OptionalReagents)
for (SpellCraftingReagent& optionalReagent : request.CraftingReagents)
buffer >> optionalReagent;
if (request.CraftingOrderID)
buffer >> *request.CraftingOrderID;
for (SpellCraftingReagent& optionalReagent : request.RemovedModifications)
for (SpellCraftingReagent& optionalReagent : request.RemovedReagents)
buffer >> optionalReagent;
if (request.MoveUpdate)
@@ -311,9 +312,9 @@ ByteBuffer& operator<<(ByteBuffer& data, SpellTargetData const& spellTargetData)
data << uint32(spellTargetData.Flags);
data << spellTargetData.Unit;
data << spellTargetData.Item;
data << spellTargetData.Unknown1127_1;
data << spellTargetData.HousingGUID;
data << Bits<1>(spellTargetData.Unknown1127_2);
data << Bits<1>(spellTargetData.HousingIsResident);
data << OptionalInit(spellTargetData.SrcLocation);
data << OptionalInit(spellTargetData.DstLocation);
data << OptionalInit(spellTargetData.Orientation);
@@ -518,6 +519,7 @@ WorldPacket const* SpellFailure::Write()
_worldPacket << int32(SpellID);
_worldPacket << Visual;
_worldPacket << uint16(Reason);
_worldPacket << FailedBy;
return &_worldPacket;
}
@@ -529,6 +531,7 @@ WorldPacket const* SpellFailedOther::Write()
_worldPacket << uint32(SpellID);
_worldPacket << Visual;
_worldPacket << uint8(Reason);
_worldPacket << FailedBy;
return &_worldPacket;
}
@@ -541,6 +544,7 @@ WorldPacket const* CastFailed::Write()
_worldPacket << int32(Reason);
_worldPacket << int32(FailedArg1);
_worldPacket << int32(FailedArg2);
_worldPacket << FailedBy;
return &_worldPacket;
}
@@ -895,6 +899,8 @@ WorldPacket const* SpellChannelUpdate::Write()
{
_worldPacket << CasterGUID;
_worldPacket << int32(TimeRemaining);
_worldPacket << FailedBy;
return &_worldPacket;
}
@@ -936,7 +942,7 @@ WorldPacket const* SpellEmpowerUpdate::Write()
_worldPacket << TimeRemaining;
_worldPacket << Size<uint32>(StageDurations);
_worldPacket << uint8(Status);
_worldPacket.FlushBits();
_worldPacket << FailedBy;
for (Duration<Milliseconds, uint32> stageDuration : StageDurations)
_worldPacket << stageDuration;
+20 -13
View File
@@ -19,6 +19,8 @@
#define TRINITYCORE_SPELL_PACKETS_H
#include "CombatLogPacketsCommon.h"
#include "CraftingPacketsCommon.h"
#include "ItemPacketsCommon.h"
#include "MovementInfo.h"
#include "ObjectGuid.h"
#include "Optional.h"
@@ -203,10 +205,10 @@ namespace WorldPackets
struct SpellTargetData
{
uint32 Flags = 0;
bool Unknown1127_2 = false;
bool HousingIsResident = false;
ObjectGuid Unit;
ObjectGuid Item;
ObjectGuid Unknown1127_1;
ObjectGuid HousingGUID;
Optional<TargetLocation> SrcLocation;
Optional<TargetLocation> DstLocation;
Optional<float> Orientation;
@@ -229,9 +231,9 @@ namespace WorldPackets
struct SpellCraftingReagent
{
int32 ItemID = 0;
int32 DataSlotIndex = 0;
int32 Slot = 0;
int32 Quantity = 0;
Crafting::CraftingReagentBase Reagent;
Optional<uint8> Source;
};
@@ -251,13 +253,13 @@ namespace WorldPackets
MissileTrajectoryRequest MissileTrajectory;
Optional<MovementInfo> MoveUpdate;
std::vector<SpellWeight> Weight;
Array<SpellCraftingReagent, 6> OptionalReagents;
Array<SpellCraftingReagent, 6> RemovedModifications;
Array<SpellExtraCurrencyCost, 5 /*MAX_ITEM_EXT_COST_CURRENCIES*/> OptionalCurrencies;
Array<SpellCraftingReagent, 6> CraftingReagents;
Array<SpellCraftingReagent, 6> RemovedReagents;
Array<SpellExtraCurrencyCost, 5 /*MAX_ITEM_EXT_COST_CURRENCIES*/> ExtraCurrencyCosts;
Optional<uint64> CraftingOrderID;
uint8 CraftingFlags = 0; // 1 = ApplyConcentration
uint8 CraftingCastFlags = 0; // 1 = ApplyConcentration
ObjectGuid CraftingNPC;
int32 Misc[2] = { };
std::array<int32, 3> Misc = { };
};
class CastSpell final : public ClientPacket
@@ -435,7 +437,7 @@ namespace WorldPackets
class SpellFailure final : public ServerPacket
{
public:
explicit SpellFailure() : ServerPacket(SMSG_SPELL_FAILURE, 16 + 4 + 8 + 2 + 16) { }
explicit SpellFailure() : ServerPacket(SMSG_SPELL_FAILURE, 16 + 4 + 8 + 2 + 16 + 16) { }
WorldPacket const* Write() override;
@@ -444,12 +446,13 @@ namespace WorldPackets
SpellCastVisual Visual;
uint16 Reason = 0;
ObjectGuid CastID;
ObjectGuid FailedBy; ///< Unit that caused the spell to fail, set for SPELL_FAILED_INTERRUPTED_COMBAT TODO: port commit from 3.3.5 that implements SPELL_FAILED_INTERRUPTED_COMBAT
};
class SpellFailedOther final : public ServerPacket
{
public:
explicit SpellFailedOther() : ServerPacket(SMSG_SPELL_FAILED_OTHER, 16 + 4 + 8 + 1 + 16) { }
explicit SpellFailedOther() : ServerPacket(SMSG_SPELL_FAILED_OTHER, 16 + 4 + 8 + 1 + 16 + 16) { }
WorldPacket const* Write() override;
@@ -458,12 +461,13 @@ namespace WorldPackets
SpellCastVisual Visual;
uint8 Reason = 0;
ObjectGuid CastID;
ObjectGuid FailedBy; ///< Unit that caused the spell to fail, set for SPELL_FAILED_INTERRUPTED_COMBAT TODO: port commit from 3.3.5 that implements SPELL_FAILED_INTERRUPTED_COMBAT
};
class TC_GAME_API CastFailed final : public ServerPacket
{
public:
explicit CastFailed() : ServerPacket(SMSG_CAST_FAILED, 4 + 4 + 4 + 4 + 1) { }
explicit CastFailed() : ServerPacket(SMSG_CAST_FAILED, 16 + 4 + 8 + 4 + 4 + 4 + 16) { }
WorldPacket const* Write() override;
@@ -473,12 +477,13 @@ namespace WorldPackets
int32 Reason = 0;
int32 FailedArg1 = -1;
int32 FailedArg2 = -1;
ObjectGuid FailedBy; ///< Unit that caused the spell to fail, set for SPELL_FAILED_INTERRUPTED_COMBAT TODO: port commit from 3.3.5 that implements SPELL_FAILED_INTERRUPTED_COMBAT
};
class TC_GAME_API PetCastFailed final : public ServerPacket
{
public:
explicit PetCastFailed() : ServerPacket(SMSG_PET_CAST_FAILED, 4 + 4 + 4 + 1) { }
explicit PetCastFailed() : ServerPacket(SMSG_PET_CAST_FAILED, 16+ 4 + 4 + 4 + 4) { }
WorldPacket const* Write() override;
@@ -860,6 +865,7 @@ namespace WorldPackets
ObjectGuid CasterGUID;
int32 TimeRemaining = 0;
ObjectGuid FailedBy; ///< Unit that caused the spell to fail, set for SPELL_FAILED_INTERRUPTED_COMBAT TODO: port commit from 3.3.5 that implements SPELL_FAILED_INTERRUPTED_COMBAT
};
class SpellEmpowerStart final : public ServerPacket
@@ -894,6 +900,7 @@ namespace WorldPackets
Duration<Milliseconds, int32> TimeRemaining;
std::vector<Duration<Milliseconds, uint32>> StageDurations;
uint8 Status = 0;
ObjectGuid FailedBy; ///< Unit that caused the spell to fail, set for SPELL_FAILED_INTERRUPTED_COMBAT TODO: port commit from 3.3.5 that implements SPELL_FAILED_INTERRUPTED_COMBAT
};
class SetEmpowerMinHoldStagePercent final : public ClientPacket
@@ -77,7 +77,7 @@ ByteBuffer& operator<<(ByteBuffer& data, EuropaTicketConfig const& europaTicketS
data << Bits<1>(europaTicketSystemStatus.SuggestionsEnabled);
data << europaTicketSystemStatus.ThrottleState;
data << europaTicketSystemStatus.Unused1127;
data << europaTicketSystemStatus.ExpensiveThrottleState;
return data;
}
@@ -94,7 +94,7 @@ ByteBuffer& operator<<(ByteBuffer& data, SquelchInfo const& squelch)
ByteBuffer& operator<<(ByteBuffer& data, GameModeData const& gameMode)
{
data << uint8(gameMode.GameMode);
data << int32(gameMode.Unused1127);
data << int32(gameMode.ContentSetID);
data << int32(gameMode.GameModeRecordID);
return data;
@@ -173,13 +173,12 @@ WorldPacket const* FeatureSystemStatus::Write()
_worldPacket << Bits<1>(VoiceEnabled);
_worldPacket << OptionalInit(EuropaTicketSystemStatus);
_worldPacket << Bits<1>(BpayStoreAvailable);
_worldPacket << Bits<1>(BpayStoreDisabledByParentalControls);
_worldPacket << Bits<1>(ItemRestorationButtonEnabled);
_worldPacket << OptionalInit(SessionAlert);
_worldPacket << Bits<1>(RAFSystem.Enabled);
_worldPacket << Bits<1>(RAFSystem.RecruitingEnabled);
_worldPacket << Bits<1>(CharUndeleteEnabled);
_worldPacket << Bits<1>(RestrictedAccount);
_worldPacket << Bits<1>(CommerceServerEnabled);
_worldPacket << Bits<1>(TutorialEnabled);
@@ -187,8 +186,8 @@ WorldPacket const* FeatureSystemStatus::Write()
_worldPacket << Bits<1>(WorldTokenRedeemWillKick);
_worldPacket << Bits<1>(KioskModeEnabled);
_worldPacket << Bits<1>(CompetitiveModeEnabled);
_worldPacket << Bits<1>(RedeemForBalanceAvailable);
_worldPacket << Bits<1>(WarModeEnabled);
_worldPacket << Bits<1>(CommunitiesEnabled);
_worldPacket << Bits<1>(BnetGroupsEnabled);
@@ -196,8 +195,8 @@ WorldPacket const* FeatureSystemStatus::Write()
_worldPacket << Bits<1>(ClubPresenceAllowSubscribeAll);
_worldPacket << Bits<1>(VoiceChatParentalDisabled);
_worldPacket << Bits<1>(VoiceChatParentalMuted);
_worldPacket << Bits<1>(QuestSessionEnabled);
_worldPacket << Bits<1>(IsChatMuted);
_worldPacket << Bits<1>(ClubFinderEnabled);
_worldPacket << Bits<1>(CommunityFinderEnabled);
@@ -205,30 +204,29 @@ WorldPacket const* FeatureSystemStatus::Write()
_worldPacket << Bits<1>(SpeakForMeAllowed);
_worldPacket << Bits<1>(DoesAccountNeedAADCPrompt);
_worldPacket << Bits<1>(IsAccountOptedInToAADC);
_worldPacket << Bits<1>(LfgRequireAuthenticatorEnabled);
_worldPacket << Bits<1>(ScriptsDisallowedForBeta);
_worldPacket << Bits<1>(TimerunningEnabled);
_worldPacket << Bits<1>(WarGamesEnabled);
_worldPacket << Bits<1>(PlayerIdentityOptionsEnabled);
_worldPacket << Bits<1>(IsPlayerContentTrackingEnabled);
_worldPacket << Bits<1>(SellAllJunkEnabled);
_worldPacket << Bits<1>(GroupFinderEnabled);
_worldPacket << Bits<1>(IsPremadeGroupEnabled);
_worldPacket << Bits<1>(false); // unused 10.2.7
_worldPacket << Bits<1>(LfdEnabled);
_worldPacket << Bits<1>(LfrEnabled);
_worldPacket << Bits<1>(PetHappinessEnabled);
_worldPacket << Bits<1>(GuildEventsEditsEnabled);
_worldPacket << Bits<1>(GuildTradeSkillsEnabled);
_worldPacket << SizedString::BitsSize<10>(Unknown1027);
_worldPacket << Bits<1>(BNSendWhisperUseV2Services);
_worldPacket << Bits<1>(BNSendGameDataUseV2Services);
_worldPacket << Bits<1>(IsAccountCurrencyTransferEnabled);
_worldPacket << Bits<1>(false); // unused 11.0.7
_worldPacket << Bits<1>(NetEaseChatTelemetryEnabled);
_worldPacket << Bits<1>(LobbyMatchmakerQueueFromMainlineEnabled);
_worldPacket << Bits<1>(CanSendLobbyMatchmakerPartyCustomizations);
_worldPacket << Bits<1>(AddonProfilerEnabled);
_worldPacket << Bits<1>(false); // unused 11.1.7
_worldPacket << Bits<1>(false); // unused 11.1.7
_worldPacket << Bits<1>(AddonProfilingEnabled);
_worldPacket << Bits<1>(GlobalUserGeneratedContentMuteEnabled);
_worldPacket << Bits<1>(AccountUserGeneratedContentIsRisky);
_worldPacket.FlushBits();
@@ -250,9 +248,9 @@ WorldPacket const* FeatureSystemStatus::Write()
WorldPacket const* FeatureSystemStatusGlueScreen::Write()
{
_worldPacket << Bits<1>(BpayStoreAvailable);
_worldPacket << Bits<1>(BpayStoreDisabledByParentalControls);
_worldPacket << Bits<1>(CharUndeleteEnabled);
_worldPacket << Bits<1>(CommerceServerEnabled);
_worldPacket << Bits<1>(PaidCharacterTransfersBetweenBnetAccountsEnabled);
_worldPacket << Bits<1>(VeteranTokenRedeemWillKick);
_worldPacket << Bits<1>(WorldTokenRedeemWillKick);
_worldPacket << Bits<1>(ExpansionPreorderInStore);
@@ -262,12 +260,11 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write()
_worldPacket << Bits<1>(BoostEnabled);
_worldPacket << Bits<1>(TrialBoostEnabled);
_worldPacket << Bits<1>(RedeemForBalanceAvailable);
_worldPacket << Bits<1>(PaidCharacterTransfersBetweenBnetAccountsEnabled);
_worldPacket << Bits<1>(LiveRegionCharacterListEnabled);
_worldPacket << Bits<1>(LiveRegionCharacterCopyEnabled);
_worldPacket << Bits<1>(LiveRegionAccountCopyEnabled);
_worldPacket << Bits<1>(LiveRegionKeyBindingsCopyEnabled);
_worldPacket << Bits<1>(BrowserCrashReporterEnabled);
_worldPacket << Bits<1>(IsEmployeeAccount);
_worldPacket << OptionalInit(EuropaTicketSystemStatus);
@@ -275,8 +272,8 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write()
_worldPacket << OptionalInit(LaunchDurationETA);
_worldPacket << Bits<1>(TimerunningEnabled);
_worldPacket << Bits<1>(ScriptsDisallowedForBeta);
_worldPacket << Bits<1>(PlayerIdentityOptionsEnabled);
_worldPacket << Bits<1>(AccountExportEnabled);
_worldPacket << Bits<1>(AccountLockedPostExport);
@@ -284,12 +281,12 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write()
_worldPacket << Bits<1>(BNSendWhisperUseV2Services);
_worldPacket << Bits<1>(BNSendGameDataUseV2Services);
_worldPacket << Bits<1>(CharacterSelectListModeRealmless);
_worldPacket << Bits<1>(WowTokenLimitedMode);
_worldPacket << Bits<1>(false); // unused 11.1.7
_worldPacket << Bits<1>(false); // unused 11.1.7
_worldPacket << Bits<1>(PandarenLevelBoostAllowed);
_worldPacket << Bits<1>(NavBarEnabled);
_worldPacket << Bits<1>(GlobalUserGeneratedContentMuteEnabled);
_worldPacket << Bits<1>(AccountUserGeneratedContentIsRisky);
_worldPacket.FlushBits();
+14 -10
View File
@@ -77,7 +77,7 @@ namespace WorldPackets
bool SuggestionsEnabled = false;
SavedThrottleObjectState ThrottleState;
SavedThrottleObjectState Unused1127;
SavedThrottleObjectState ExpensiveThrottleState;
};
struct SquelchInfo
@@ -90,7 +90,7 @@ namespace WorldPackets
struct GameModeData
{
uint8 GameMode = 0;
int32 Unused1127 = 0;
int32 ContentSetID = 0;
int32 GameModeRecordID = 0;
};
@@ -145,7 +145,6 @@ namespace WorldPackets
Duration<Seconds, uint32> NotFoundCacheTimeSeconds = 10s;
bool ItemRestorationButtonEnabled = false;
bool CharUndeleteEnabled = false; ///< Implemented
bool BpayStoreDisabledByParentalControls = false;
bool CommerceServerEnabled = false;
bool VeteranTokenRedeemWillKick = false;
bool WorldTokenRedeemWillKick = false;
@@ -173,19 +172,22 @@ namespace WorldPackets
bool LfgRequireAuthenticatorEnabled = false;
bool ScriptsDisallowedForBeta = false;
bool TimerunningEnabled = false;
bool WarGamesEnabled = false; // classic only
bool PlayerIdentityOptionsEnabled = false; // classic only
bool IsPlayerContentTrackingEnabled = false;
bool SellAllJunkEnabled = false;
bool GroupFinderEnabled = true; // classic only
bool IsPremadeGroupEnabled = true; // classic only
bool LfdEnabled = false;
bool LfrEnabled = true; // classic only
bool PetHappinessEnabled = true; // classic only
bool GuildEventsEditsEnabled = true;
bool GuildTradeSkillsEnabled = true;
bool BNSendWhisperUseV2Services = true; ///< BNSendWhisper will send to v2.WhisperService instead of v1.NotificationService
bool BNSendGameDataUseV2Services = true; ///< BNSendGameData will send to v2.NotificationService instead of v1.NotificationService
bool IsAccountCurrencyTransferEnabled = false;
bool NetEaseChatTelemetryEnabled = false;
bool LobbyMatchmakerQueueFromMainlineEnabled = false;
bool CanSendLobbyMatchmakerPartyCustomizations = false;
bool AddonProfilerEnabled = false;
bool AddonProfilingEnabled = false;
bool GlobalUserGeneratedContentMuteEnabled = false;
bool AccountUserGeneratedContentIsRisky = false;
SocialQueueConfig QuickJoinConfig;
SquelchInfo Squelch;
@@ -221,6 +223,7 @@ namespace WorldPackets
bool BpayStoreDisabledByParentalControls = false; // NYI
bool CharUndeleteEnabled = false;
bool CommerceServerEnabled = false; // NYI
bool PaidCharacterTransfersBetweenBnetAccountsEnabled = false;
bool VeteranTokenRedeemWillKick = false; // NYI
bool WorldTokenRedeemWillKick = false; // NYI
bool ExpansionPreorderInStore = false; // NYI
@@ -229,7 +232,6 @@ namespace WorldPackets
bool BoostEnabled = false; // classic only
bool TrialBoostEnabled = false; // NYI
bool RedeemForBalanceAvailable = false; // NYI
bool PaidCharacterTransfersBetweenBnetAccountsEnabled = false;
bool LiveRegionCharacterListEnabled = false; // NYI
bool LiveRegionCharacterCopyEnabled = false; // NYI
bool LiveRegionAccountCopyEnabled = false; // NYI
@@ -246,7 +248,9 @@ namespace WorldPackets
bool BNSendGameDataUseV2Services = true; ///< BNSendGameData will send to v2.NotificationService instead of v1.NotificationService
bool CharacterSelectListModeRealmless = false;
bool WowTokenLimitedMode = false; // classic only
bool PandarenLevelBoostAllowed = false; // classic only
bool NavBarEnabled = false;
bool GlobalUserGeneratedContentMuteEnabled = false;
bool AccountUserGeneratedContentIsRisky = false;
Optional<EuropaTicketConfig> EuropaTicketSystemStatus;
std::vector<int32> LiveRegionCharacterCopySourceRegions;
uint32 CommercePricePollTimeSeconds = 0; // NYI
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -730,6 +730,16 @@ enum AuraType : uint32
SPELL_AURA_MOD_RANGED_ATTACK_SPEED_FLAT = 643, // NYI
SPELL_AURA_644 = 644,
SPELL_AURA_645 = 645,
SPELL_AURA_ADD_FLAT_PVP_MODIFIER = 646,
SPELL_AURA_ADD_PCT_PVP_MODIFIER = 647,
SPELL_AURA_ADD_FLAT_PVP_MODIFIER_BY_SPELL_LABEL = 648,
SPELL_AURA_ADD_PCT_PVP_MODIFIER_BY_SPELL_LABEL = 649,
SPELL_AURA_650 = 650,
SPELL_AURA_651 = 651,
SPELL_AURA_652 = 652,
SPELL_AURA_653 = 653,
SPELL_AURA_654 = 654,
SPELL_AURA_REMOVE_TRANSMOG_OUTFIT_UPDATE_COST = 655,
TOTAL_AURAS
};
@@ -715,6 +715,16 @@ NonDefaultConstructible<pAuraEffectHandler> AuraEffectHandler[TOTAL_AURAS]=
&AuraEffect::HandleNULL, //643 SPELL_AURA_MOD_RANGED_ATTACK_SPEED_FLAT
&AuraEffect::HandleNULL, //644
&AuraEffect::HandleNULL, //645
&AuraEffect::HandleNULL, //646 SPELL_AURA_ADD_FLAT_PVP_MODIFIER
&AuraEffect::HandleNULL, //647 SPELL_AURA_ADD_PCT_PVP_MODIFIER
&AuraEffect::HandleNULL, //648 SPELL_AURA_ADD_FLAT_PVP_MODIFIER_BY_SPELL_LABEL
&AuraEffect::HandleNULL, //649 SPELL_AURA_ADD_PCT_PVP_MODIFIER_BY_SPELL_LABEL
&AuraEffect::HandleNULL, //650
&AuraEffect::HandleNULL, //651
&AuraEffect::HandleNULL, //652
&AuraEffect::HandleNULL, //653
&AuraEffect::HandleNULL, //654
&AuraEffect::HandleNULL, //655 SPELL_AURA_REMOVE_TRANSMOG_OUTFIT_UPDATE_COST
};
AuraEffect::AuraEffect(Aura* base, SpellEffectInfo const& spellEfffectInfo, int32 const* baseAmount, Unit* caster) :
+1 -1
View File
@@ -632,7 +632,7 @@ class TC_GAME_API Spell
struct
{
uint32 Data[2];
uint32 Data[3];
} Raw;
} m_misc;
std::any m_customArg;
+17 -2
View File
@@ -36,7 +36,7 @@ class Player;
class Spell;
class Unit;
class WorldObject;
enum Difficulty : uint8;
enum Difficulty : int16;
enum ProcFlags : uint32;
enum ProcFlags2 : int32;
enum SpellCastResult : int32;
@@ -190,9 +190,24 @@ enum class SpellModOp : uint8
MaxAuraStacks = 37,
ProcCooldown = 38,
PowerCost2 = 39, // Used when SpellPowerEntry::PowerIndex == 2
MaxTargets = 40
};
#define MAX_SPELLMOD 40
#define MAX_SPELLMOD 41
enum class SpellPvpModifier : uint8
{
HealingAndDamage = 0,
PeriodicHealingAndDamage = 1,
BonusCoefficient = 2,
Points = 4,
PointsIndex0 = 5,
PointsIndex1 = 6,
PointsIndex2 = 7,
PointsIndex3 = 8,
PointsIndex4 = 9,
};
enum SpellValueMod : int32
{
+2
View File
@@ -441,6 +441,8 @@ NonDefaultConstructible<SpellEffectHandlerFn> SpellEffectHandlers[TOTAL_SPELL_EF
&Spell::EffectNULL, //350 SPELL_EFFECT_LEARN_HOUSE_EXTERIOR_COMPONENT
&Spell::EffectNULL, //351 SPELL_EFFECT_LEARN_HOUSE_THEME
&Spell::EffectNULL, //352 SPELL_EFFECT_LEARN_HOUSE_ROOM_COMPONENT_TEXTURE
&Spell::EffectCreateAreaTrigger, //353 SPELL_EFFECT_CREATE_AREATRIGGER_2
&Spell::EffectNULL, //354 SPELL_EFFECT_SET_NEIGHBORHOOD_INITIATIVE
};
void Spell::EffectNULL()
+4 -5
View File
@@ -629,11 +629,8 @@ int32 SpellEffectInfo::CalcBaseValue(WorldObject const* caster, Unit const* targ
return 0;
uint32 effectiveItemLevel = itemLevel != -1 ? uint32(itemLevel) : 1u;
if (_spellInfo->Scaling.ScalesFromItemLevel || _spellInfo->HasAttribute(SPELL_ATTR11_SCALES_WITH_ITEM_LEVEL))
if (_spellInfo->HasAttribute(SPELL_ATTR11_SCALES_WITH_ITEM_LEVEL))
{
if (_spellInfo->Scaling.ScalesFromItemLevel)
effectiveItemLevel = _spellInfo->Scaling.ScalesFromItemLevel;
if (Scaling.Class == -8 || Scaling.Class == -9)
{
RandPropPointsEntry const* randPropPoints = sRandPropPointsStore.LookupEntry(effectiveItemLevel);
@@ -1285,6 +1282,8 @@ std::array<SpellEffectInfo::StaticData, TOTAL_SPELL_EFFECTS> SpellEffectInfo::_d
{EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 350 SPELL_EFFECT_LEARN_HOUSE_EXTERIOR_COMPONENT
{EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 351 SPELL_EFFECT_LEARN_HOUSE_THEME
{EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 352 SPELL_EFFECT_LEARN_HOUSE_ROOM_COMPONENT_TEXTURE
{EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_DEST}, // 353 SPELL_EFFECT_CREATE_AREATRIGGER_2
{EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 354 SPELL_EFFECT_SET_NEIGHBORHOOD_INITIATIVE
} };
SpellInfo::SpellInfo(SpellNameEntry const* spellName, ::Difficulty difficulty, SpellInfoLoadHelper const& data)
@@ -1329,6 +1328,7 @@ SpellInfo::SpellInfo(SpellNameEntry const* spellName, ::Difficulty difficulty, S
AttributesEx13 = _misc->Attributes[13];
AttributesEx14 = _misc->Attributes[14];
AttributesEx15 = _misc->Attributes[15];
AttributesEx16 = _misc->Attributes[16];
CastTimeEntry = sSpellCastTimesStore.LookupEntry(_misc->CastingTimeIndex);
DurationEntry = sSpellDurationStore.LookupEntry(_misc->DurationIndex);
RangeEntry = sSpellRangeStore.LookupEntry(_misc->RangeIndex);
@@ -1347,7 +1347,6 @@ SpellInfo::SpellInfo(SpellNameEntry const* spellName, ::Difficulty difficulty, S
{
Scaling.MinScalingLevel = _scaling->MinScalingLevel;
Scaling.MaxScalingLevel = _scaling->MaxScalingLevel;
Scaling.ScalesFromItemLevel = _scaling->ScalesFromItemLevel;
}
// SpellAuraOptionsEntry
+2 -1
View File
@@ -343,6 +343,7 @@ class TC_GAME_API SpellInfo
uint32 AttributesEx13 = 0;
uint32 AttributesEx14 = 0;
uint32 AttributesEx15 = 0;
uint32 AttributesEx16 = 0;
uint32 AttributesCu = 0;
std::bitset<MAX_SPELL_EFFECTS> NegativeEffects;
uint64 Stances = 0;
@@ -422,7 +423,6 @@ class TC_GAME_API SpellInfo
{
uint32 MinScalingLevel = 0;
uint32 MaxScalingLevel = 0;
uint32 ScalesFromItemLevel = 0;
} Scaling;
uint32 ExplicitTargetMask = 0;
@@ -466,6 +466,7 @@ class TC_GAME_API SpellInfo
bool HasAttribute(SpellAttr13 attribute) const { return !!(AttributesEx13 & attribute); }
bool HasAttribute(SpellAttr14 attribute) const { return !!(AttributesEx14 & attribute); }
bool HasAttribute(SpellAttr15 attribute) const { return !!(AttributesEx15 & attribute); }
bool HasAttribute(SpellAttr16 attribute) const { return !!(AttributesEx16 & attribute); }
bool HasAttribute(SpellCustomAttributes customAttribute) const { return !!(AttributesCu & customAttribute); }
bool CanBeInterrupted(WorldObject const* interruptCaster, Unit const* interruptTarget, bool ignoreImmunity = false) const;
+70 -69
View File
@@ -66,7 +66,7 @@ namespace
class ServersideSpellName
{
public:
explicit ServersideSpellName(uint32 id, std::string name) : _nameStorage(std::move(name))
explicit ServersideSpellName(uint32 id, std::string_view name) : _nameStorage(name)
{
Name.ID = id;
InitPointers();
@@ -2855,21 +2855,21 @@ void SpellMgr::LoadSpellInfoServerside()
QueryResult spellsResult = WorldDatabase.Query("SELECT Id, DifficultyID, CategoryId, Dispel, Mechanic, Attributes, AttributesEx, AttributesEx2, AttributesEx3, "
// 9 10 11 12 13 14 15 16 17 18
"AttributesEx4, AttributesEx5, AttributesEx6, AttributesEx7, AttributesEx8, AttributesEx9, AttributesEx10, AttributesEx11, AttributesEx12, AttributesEx13, "
// 19 20 21 22 23 24 25 26 27 28
"AttributesEx14, AttributesEx15, Stances, StancesNot, Targets, TargetCreatureType, RequiresSpellFocus, FacingCasterFlags, CasterAuraState, TargetAuraState, "
// 29 30 31 32 33 34
"ExcludeCasterAuraState, ExcludeTargetAuraState, CasterAuraSpell, TargetAuraSpell, ExcludeCasterAuraSpell, ExcludeTargetAuraSpell, "
// 35 36 37 38 39
// 19 20 21 22 23 24 25 26 27
"AttributesEx14, AttributesEx15, AttributesEx16, Stances, StancesNot, Targets, TargetCreatureType, RequiresSpellFocus, FacingCasterFlags, "
// 28 29 30 31 32 33 34 35
"CasterAuraState, TargetAuraState, ExcludeCasterAuraState, ExcludeTargetAuraState, CasterAuraSpell, TargetAuraSpell, ExcludeCasterAuraSpell, ExcludeTargetAuraSpell, "
// 36 37 38 39 40
"CasterAuraType, TargetAuraType, ExcludeCasterAuraType, ExcludeTargetAuraType, CastingTimeIndex, "
// 40 41 42 43 44 45 46
// 41 42 43 44 45 46 47
"RecoveryTime, CategoryRecoveryTime, StartRecoveryCategory, StartRecoveryTime, InterruptFlags, AuraInterruptFlags1, AuraInterruptFlags2, "
// 47 48 49 50 51 52 53 54 55 56 57
// 48 49 50 51 52 53 54 55 56 57 58
"ChannelInterruptFlags1, ChannelInterruptFlags2, ProcFlags, ProcFlags2, ProcChance, ProcCharges, ProcCooldown, ProcBasePPM, MaxLevel, BaseLevel, SpellLevel, "
// 58 59 60 61 62 63 64 65 66
// 59 60 61 62 63 64 65 66 67
"DurationIndex, RangeIndex, Speed, LaunchDelay, StackAmount, EquippedItemClass, EquippedItemSubClassMask, EquippedItemInventoryTypeMask, ContentTuningId, "
// 67 68 69 70 71 72 73 74 75 76
// 68 69 70 71 72 73 74 75 76 77
"SpellName, ConeAngle, ConeWidth, MaxTargetLevel, MaxAffectedTargets, SpellFamilyName, SpellFamilyFlags1, SpellFamilyFlags2, SpellFamilyFlags3, SpellFamilyFlags4, "
// 77 78 79 80 81
// 78 79 80 81 82
"DmgClass, PreventionType, AreaGroupId, SchoolMask, ChargeCategoryId FROM serverside_spell");
if (spellsResult)
{
@@ -2887,7 +2887,7 @@ void SpellMgr::LoadSpellInfoServerside()
continue;
}
mServersideSpellNames.emplace_back(spellId, fields[67].GetString());
mServersideSpellNames.emplace_back(spellId, fields[68].GetStringView());
SpellInfo& spellInfo = const_cast<SpellInfo&>(*mSpellInfoMap.emplace(&mServersideSpellNames.back().Name, difficulty, spellEffects[{ spellId, difficulty }]).first);
spellInfo.CategoryId = fields[2].GetUInt32();
@@ -2909,63 +2909,64 @@ void SpellMgr::LoadSpellInfoServerside()
spellInfo.AttributesEx13 = fields[18].GetUInt32();
spellInfo.AttributesEx14 = fields[19].GetUInt32();
spellInfo.AttributesEx15 = fields[20].GetUInt32();
spellInfo.Stances = fields[21].GetUInt64();
spellInfo.StancesNot = fields[22].GetUInt64();
spellInfo.Targets = fields[23].GetUInt32();
spellInfo.TargetCreatureType = fields[24].GetUInt32();
spellInfo.RequiresSpellFocus = fields[25].GetUInt32();
spellInfo.FacingCasterFlags = fields[26].GetUInt32();
spellInfo.CasterAuraState = fields[27].GetUInt32();
spellInfo.TargetAuraState = fields[28].GetUInt32();
spellInfo.ExcludeCasterAuraState = fields[29].GetUInt32();
spellInfo.ExcludeTargetAuraState = fields[30].GetUInt32();
spellInfo.CasterAuraSpell = fields[31].GetUInt32();
spellInfo.TargetAuraSpell = fields[32].GetUInt32();
spellInfo.ExcludeCasterAuraSpell = fields[33].GetUInt32();
spellInfo.ExcludeTargetAuraSpell = fields[34].GetUInt32();
spellInfo.CasterAuraType = AuraType(fields[35].GetInt32());
spellInfo.TargetAuraType = AuraType(fields[36].GetInt32());
spellInfo.ExcludeCasterAuraType = AuraType(fields[37].GetInt32());
spellInfo.ExcludeTargetAuraType = AuraType(fields[38].GetInt32());
spellInfo.CastTimeEntry = sSpellCastTimesStore.LookupEntry(fields[39].GetUInt32());
spellInfo.RecoveryTime = fields[40].GetUInt32();
spellInfo.CategoryRecoveryTime = fields[41].GetUInt32();
spellInfo.StartRecoveryCategory = fields[42].GetUInt32();
spellInfo.StartRecoveryTime = fields[43].GetUInt32();
spellInfo.InterruptFlags = SpellInterruptFlags(fields[44].GetUInt32());
spellInfo.AuraInterruptFlags = SpellAuraInterruptFlags(fields[45].GetUInt32());
spellInfo.AuraInterruptFlags2 = SpellAuraInterruptFlags2(fields[46].GetUInt32());
spellInfo.ChannelInterruptFlags = SpellAuraInterruptFlags(fields[47].GetUInt32());
spellInfo.ChannelInterruptFlags2 = SpellAuraInterruptFlags2(fields[48].GetUInt32());
spellInfo.ProcFlags[0] = fields[49].GetUInt32();
spellInfo.ProcFlags[1] = fields[50].GetUInt32();
spellInfo.ProcChance = fields[51].GetUInt32();
spellInfo.ProcCharges = fields[52].GetUInt32();
spellInfo.ProcCooldown = fields[53].GetUInt32();
spellInfo.ProcBasePPM = fields[54].GetFloat();
spellInfo.MaxLevel = fields[55].GetUInt32();
spellInfo.BaseLevel = fields[56].GetUInt32();
spellInfo.SpellLevel = fields[57].GetUInt32();
spellInfo.DurationEntry = sSpellDurationStore.LookupEntry(fields[58].GetUInt32());
spellInfo.RangeEntry = sSpellRangeStore.LookupEntry(fields[59].GetUInt32());
spellInfo.Speed = fields[60].GetFloat();
spellInfo.LaunchDelay = fields[61].GetFloat();
spellInfo.StackAmount = fields[62].GetUInt32();
spellInfo.EquippedItemClass = fields[63].GetInt32();
spellInfo.EquippedItemSubClassMask = fields[64].GetInt32();
spellInfo.EquippedItemInventoryTypeMask = fields[65].GetInt32();
spellInfo.ContentTuningId = fields[66].GetUInt32();
spellInfo.ConeAngle = fields[68].GetFloat();
spellInfo.Width = fields[69].GetFloat();
spellInfo.MaxTargetLevel = fields[70].GetUInt32();
spellInfo.MaxAffectedTargets = fields[71].GetUInt32();
spellInfo.SpellFamilyName = fields[72].GetUInt32();
spellInfo.SpellFamilyFlags = flag128(fields[73].GetUInt32(), fields[74].GetUInt32(), fields[75].GetUInt32(), fields[76].GetUInt32());
spellInfo.DmgClass = fields[77].GetUInt32();
spellInfo.PreventionType = fields[78].GetUInt32();
spellInfo.RequiredAreasID = fields[79].GetInt32();
spellInfo.SchoolMask = fields[80].GetUInt32();
spellInfo.ChargeCategoryId = fields[81].GetUInt32();
spellInfo.AttributesEx16 = fields[21].GetUInt32();
spellInfo.Stances = fields[22].GetUInt64();
spellInfo.StancesNot = fields[23].GetUInt64();
spellInfo.Targets = fields[24].GetUInt32();
spellInfo.TargetCreatureType = fields[25].GetUInt32();
spellInfo.RequiresSpellFocus = fields[26].GetUInt32();
spellInfo.FacingCasterFlags = fields[27].GetUInt32();
spellInfo.CasterAuraState = fields[28].GetUInt32();
spellInfo.TargetAuraState = fields[29].GetUInt32();
spellInfo.ExcludeCasterAuraState = fields[30].GetUInt32();
spellInfo.ExcludeTargetAuraState = fields[31].GetUInt32();
spellInfo.CasterAuraSpell = fields[32].GetUInt32();
spellInfo.TargetAuraSpell = fields[33].GetUInt32();
spellInfo.ExcludeCasterAuraSpell = fields[34].GetUInt32();
spellInfo.ExcludeTargetAuraSpell = fields[35].GetUInt32();
spellInfo.CasterAuraType = AuraType(fields[36].GetInt32());
spellInfo.TargetAuraType = AuraType(fields[37].GetInt32());
spellInfo.ExcludeCasterAuraType = AuraType(fields[38].GetInt32());
spellInfo.ExcludeTargetAuraType = AuraType(fields[39].GetInt32());
spellInfo.CastTimeEntry = sSpellCastTimesStore.LookupEntry(fields[40].GetUInt32());
spellInfo.RecoveryTime = fields[41].GetUInt32();
spellInfo.CategoryRecoveryTime = fields[42].GetUInt32();
spellInfo.StartRecoveryCategory = fields[43].GetUInt32();
spellInfo.StartRecoveryTime = fields[44].GetUInt32();
spellInfo.InterruptFlags = SpellInterruptFlags(fields[45].GetUInt32());
spellInfo.AuraInterruptFlags = SpellAuraInterruptFlags(fields[46].GetUInt32());
spellInfo.AuraInterruptFlags2 = SpellAuraInterruptFlags2(fields[47].GetUInt32());
spellInfo.ChannelInterruptFlags = SpellAuraInterruptFlags(fields[48].GetUInt32());
spellInfo.ChannelInterruptFlags2 = SpellAuraInterruptFlags2(fields[49].GetUInt32());
spellInfo.ProcFlags[0] = fields[50].GetUInt32();
spellInfo.ProcFlags[1] = fields[51].GetUInt32();
spellInfo.ProcChance = fields[52].GetUInt32();
spellInfo.ProcCharges = fields[53].GetUInt32();
spellInfo.ProcCooldown = fields[54].GetUInt32();
spellInfo.ProcBasePPM = fields[55].GetFloat();
spellInfo.MaxLevel = fields[56].GetUInt32();
spellInfo.BaseLevel = fields[57].GetUInt32();
spellInfo.SpellLevel = fields[58].GetUInt32();
spellInfo.DurationEntry = sSpellDurationStore.LookupEntry(fields[59].GetUInt32());
spellInfo.RangeEntry = sSpellRangeStore.LookupEntry(fields[60].GetUInt32());
spellInfo.Speed = fields[61].GetFloat();
spellInfo.LaunchDelay = fields[62].GetFloat();
spellInfo.StackAmount = fields[63].GetUInt32();
spellInfo.EquippedItemClass = fields[64].GetInt32();
spellInfo.EquippedItemSubClassMask = fields[65].GetInt32();
spellInfo.EquippedItemInventoryTypeMask = fields[66].GetInt32();
spellInfo.ContentTuningId = fields[67].GetUInt32();
spellInfo.ConeAngle = fields[69].GetFloat();
spellInfo.Width = fields[70].GetFloat();
spellInfo.MaxTargetLevel = fields[71].GetUInt32();
spellInfo.MaxAffectedTargets = fields[72].GetUInt32();
spellInfo.SpellFamilyName = fields[73].GetUInt32();
spellInfo.SpellFamilyFlags = flag128(fields[74].GetUInt32(), fields[75].GetUInt32(), fields[76].GetUInt32(), fields[77].GetUInt32());
spellInfo.DmgClass = fields[78].GetUInt32();
spellInfo.PreventionType = fields[79].GetUInt32();
spellInfo.RequiredAreasID = fields[80].GetInt32();
spellInfo.SchoolMask = fields[81].GetUInt32();
spellInfo.ChargeCategoryId = fields[82].GetUInt32();
} while (spellsResult->NextRow());
}
+1 -1
View File
@@ -52,7 +52,7 @@ class WorldObject;
struct SpellDestination;
struct SpellModifier;
struct SpellValue;
enum Difficulty : uint8;
enum Difficulty : int16;
enum class ItemContext : uint8;
#define SPELL_EFFECT_ANY ((uint16)-1)
@@ -80,7 +80,7 @@ struct GameobjectDisplayInfoLoadInfo
.ParentIndexField = -1,
.FieldCount = 9,
.FileFieldCount = 9,
.LayoutHash = 0xD85414D1,
.LayoutHash = 0x16D1DD61,
.Fields = MetaFields
};
@@ -191,8 +191,8 @@ struct LiquidTypeLoadInfo
{ .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false },
{ .Type = FT_INT, .ArraySize = 1, .IsSigned = true },
{ .Type = FT_BYTE, .ArraySize = 6, .IsSigned = false },
{ .Type = FT_INT, .ArraySize = 2, .IsSigned = true },
{ .Type = FT_FLOAT, .ArraySize = 18, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 3, .IsSigned = true },
{ .Type = FT_FLOAT, .ArraySize = 38, .IsSigned = true },
{ .Type = FT_INT, .ArraySize = 4, .IsSigned = false },
{ .Type = FT_FLOAT, .ArraySize = 4, .IsSigned = true },
};
@@ -204,11 +204,11 @@ struct LiquidTypeLoadInfo
.ParentIndexField = -1,
.FieldCount = 21,
.FileFieldCount = 21,
.LayoutHash = 0x4397CEE6,
.LayoutHash = 0xD1ECEEC9,
.Fields = MetaFields
};
static constexpr DB2FieldMeta Fields[56] =
static constexpr DB2FieldMeta Fields[77] =
{
{ .IsSigned = false, .Type = FT_INT, .Name = "ID" },
{ .IsSigned = false, .Type = FT_STRING_NOT_LOCALIZED, .Name = "Name" },
@@ -240,6 +240,7 @@ struct LiquidTypeLoadInfo
{ .IsSigned = false, .Type = FT_BYTE, .Name = "FrameCountTexture6" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Color1" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Color2" },
{ .IsSigned = true, .Type = FT_INT, .Name = "Color3" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float1" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float2" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float3" },
@@ -258,6 +259,26 @@ struct LiquidTypeLoadInfo
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float16" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float17" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float18" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float19" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float20" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float21" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float22" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float23" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float24" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float25" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float26" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float27" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float28" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float29" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float30" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float31" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float32" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float33" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float34" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float35" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float36" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float37" },
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Float38" },
{ .IsSigned = false, .Type = FT_INT, .Name = "Int1" },
{ .IsSigned = false, .Type = FT_INT, .Name = "Int2" },
{ .IsSigned = false, .Type = FT_INT, .Name = "Int3" },
@@ -268,7 +289,7 @@ struct LiquidTypeLoadInfo
{ .IsSigned = false, .Type = FT_FLOAT, .Name = "Coefficient4" },
};
static constexpr DB2FileLoadInfo Instance{ Fields, 56, &MetaInstance };
static constexpr DB2FileLoadInfo Instance{ Fields, 77, &MetaInstance };
};
struct MapLoadInfo
@@ -227,6 +227,7 @@ constexpr DB2FileInfo DBFilesClientList[] =
{ .FileDataId = 2098645, .Name = "CommunityIcon.db2" },
{ .FileDataId = 1349053, .Name = "ComponentModelFileData.db2" },
{ .FileDataId = 1278239, .Name = "ComponentTextureFileData.db2" },
{ .FileDataId = 7556242, .Name = "CompositeSpellsUIRedirect.db2" },
{ .FileDataId = 5211412, .Name = "ConditionalChrModel.db2" },
{ .FileDataId = 3501965, .Name = "ConditionalContentTuning.db2" },
{ .FileDataId = 5525474, .Name = "ConditionalCreatureModelData.db2" },
@@ -257,6 +258,7 @@ constexpr DB2FileInfo DBFilesClientList[] =
{ .FileDataId = 4688652, .Name = "CraftingOrderHouse.db2" },
{ .FileDataId = 5875491, .Name = "CraftingOrderXLabel.db2" },
{ .FileDataId = 4373538, .Name = "CraftingQuality.db2" },
{ .FileDataId = 7012110, .Name = "CraftingQualityAtlasSet.db2" },
{ .FileDataId = 4541803, .Name = "CraftingReagentEffect.db2" },
{ .FileDataId = 4382197, .Name = "CraftingReagentQuality.db2" },
{ .FileDataId = 5049814, .Name = "CraftingReagentRequirement.db2" },
@@ -293,9 +295,11 @@ constexpr DB2FileInfo DBFilesClientList[] =
{ .FileDataId = 1095531, .Name = "CurrencyTypes.db2" },
{ .FileDataId = 892585, .Name = "Curve.db2" },
{ .FileDataId = 892586, .Name = "CurvePoint.db2" },
{ .FileDataId = 7580602, .Name = "DamageMeterOverride.db2" },
{ .FileDataId = 6653645, .Name = "DataTagGroup.db2" },
{ .FileDataId = 6653584, .Name = "DataTagGroupXDataTag.db2" },
{ .FileDataId = 6652252, .Name = "DataTagInfo.db2" },
{ .FileDataId = 7570371, .Name = "DataTagXHouseDecorRecord.db2" },
{ .FileDataId = 6860787, .Name = "DataTagXRecord.db2" },
{ .FileDataId = 1279415, .Name = "DeathThudLookups.db2" },
{ .FileDataId = 1278176, .Name = "DecalProperties.db2" },
@@ -308,13 +312,11 @@ constexpr DB2FileInfo DBFilesClientList[] =
{ .FileDataId = 5920079, .Name = "DelvesSeason.db2" },
{ .FileDataId = 5920080, .Name = "DelvesSeasonXSpell.db2" },
{ .FileDataId = 1122116, .Name = "DestructibleModelData.db2" },
{ .FileDataId = 922722, .Name = "DeviceBlacklist.db2" },
{ .FileDataId = 1352127, .Name = "Difficulty.db2" },
{ .FileDataId = 4279827, .Name = "DisplaySeason.db2" },
{ .FileDataId = 1304325, .Name = "DissolveEffect.db2" },
{ .FileDataId = 6320418, .Name = "DriveCapability.db2" },
{ .FileDataId = 6336219, .Name = "DriveCapabilityTier.db2" },
{ .FileDataId = 922720, .Name = "DriverBlacklist.db2" },
{ .FileDataId = 1347279, .Name = "DungeonEncounter.db2" },
{ .FileDataId = 1283019, .Name = "DurabilityCosts.db2" },
{ .FileDataId = 1130268, .Name = "DurabilityQuality.db2" },
@@ -325,7 +327,12 @@ constexpr DB2FileInfo DBFilesClientList[] =
{ .FileDataId = 1347273, .Name = "EmotesText.db2" },
{ .FileDataId = 1283024, .Name = "EmotesTextData.db2" },
{ .FileDataId = 1286524, .Name = "EmotesTextSound.db2" },
{ .FileDataId = 7571075, .Name = "EncounterEvent.db2" },
{ .FileDataId = 5609253, .Name = "EntryNode.db2" },
{ .FileDataId = 5609255, .Name = "EntryTemplate.db2" },
{ .FileDataId = 1278398, .Name = "EnvironmentalDamage.db2" },
{ .FileDataId = 7499494, .Name = "EventSchedulerCategory.db2" },
{ .FileDataId = 7499495, .Name = "EventSchedulerEvent.db2" },
{ .FileDataId = 1343313, .Name = "Exhaustion.db2" },
{ .FileDataId = 1937326, .Name = "ExpectedStat.db2" },
{ .FileDataId = 1969773, .Name = "ExpectedStatMod.db2" },
@@ -476,6 +483,13 @@ constexpr DB2FileInfo DBFilesClientList[] =
{ .FileDataId = 1121228, .Name = "ImportPriceQuality.db2" },
{ .FileDataId = 1121227, .Name = "ImportPriceShield.db2" },
{ .FileDataId = 1121230, .Name = "ImportPriceWeapon.db2" },
{ .FileDataId = 6880277, .Name = "InitiativeCycle.db2" },
{ .FileDataId = 6880278, .Name = "InitiativeCyclePriority.db2" },
{ .FileDataId = 6880279, .Name = "InitiativeMilestone.db2" },
{ .FileDataId = 6880280, .Name = "InitiativeReward.db2" },
{ .FileDataId = 6914777, .Name = "InitiativeRewardXMilestone.db2" },
{ .FileDataId = 6880281, .Name = "InitiativeTask.db2" },
{ .FileDataId = 6880282, .Name = "InitiativeXTask.db2" },
{ .FileDataId = 1336651, .Name = "InvasionClientData.db2" },
{ .FileDataId = 841626, .Name = "Item.db2" },
{ .FileDataId = 982462, .Name = "ItemAppearance.db2" },
@@ -587,6 +601,7 @@ constexpr DB2FileInfo DBFilesClientList[] =
{ .FileDataId = 1308501, .Name = "LightSkybox.db2" },
{ .FileDataId = 4680119, .Name = "LightWorldShadow.db2" },
{ .FileDataId = 2003383, .Name = "Lightning.db2" },
{ .FileDataId = 5609261, .Name = "Link.db2" },
{ .FileDataId = 1132538, .Name = "LiquidMaterial.db2" },
{ .FileDataId = 1308058, .Name = "LiquidObject.db2" },
{ .FileDataId = 1371380, .Name = "LiquidType.db2" },
@@ -602,6 +617,7 @@ constexpr DB2FileInfo DBFilesClientList[] =
{ .FileDataId = 1098785, .Name = "LookAtController.db2" },
{ .FileDataId = 3311370, .Name = "LoreText.db2" },
{ .FileDataId = 3479846, .Name = "LoreTextPublic.db2" },
{ .FileDataId = 7449895, .Name = "MCRCurrency.db2" },
{ .FileDataId = 3390955, .Name = "MCRSlotXMCRCategory.db2" },
{ .FileDataId = 1240344, .Name = "MailTemplate.db2" },
{ .FileDataId = 1587159, .Name = "ManagedWorldState.db2" },
@@ -628,8 +644,8 @@ constexpr DB2FileInfo DBFilesClientList[] =
{ .FileDataId = 1465904, .Name = "ModelAnimCloakDampening.db2" },
{ .FileDataId = 1337833, .Name = "ModelFileData.db2" },
{ .FileDataId = 1399953, .Name = "ModelRibbonQuality.db2" },
{ .FileDataId = 5682517, .Name = "ModelSoundSettings.db2" },
{ .FileDataId = 5393277, .Name = "ModelSoundTagEntry.db2" },
{ .FileDataId = 5393274, .Name = "ModelSoundAnimEntry.db2" },
{ .FileDataId = 5393275, .Name = "ModelSoundEntry.db2" },
{ .FileDataId = 3386486, .Name = "ModifiedCraftingCategory.db2" },
{ .FileDataId = 4530643, .Name = "ModifiedCraftingItem.db2" },
{ .FileDataId = 3386487, .Name = "ModifiedCraftingReagentItem.db2" },
@@ -667,12 +683,14 @@ constexpr DB2FileInfo DBFilesClientList[] =
{ .FileDataId = 1117085, .Name = "NamesReserved.db2" },
{ .FileDataId = 1117087, .Name = "NamesReservedLocale.db2" },
{ .FileDataId = 6699736, .Name = "NeighborhoodInitiative.db2" },
{ .FileDataId = 6702594, .Name = "NeighborhoodInitiativeReward.db2" },
{ .FileDataId = 6702595, .Name = "NeighborhoodInitiativeTask.db2" },
{ .FileDataId = 6708736, .Name = "NeighborhoodInitiativeXTask.db2" },
{ .FileDataId = 5550624, .Name = "NeighborhoodMap.db2" },
{ .FileDataId = 6237720, .Name = "NeighborhoodNameGen.db2" },
{ .FileDataId = 5550625, .Name = "NeighborhoodPlot.db2" },
{ .FileDataId = 5609263, .Name = "Node.db2" },
{ .FileDataId = 7183970, .Name = "NodeGraphParam.db2" },
{ .FileDataId = 7183971, .Name = "NodeGraphParamValue.db2" },
{ .FileDataId = 5609279, .Name = "NodeTemplate.db2" },
{ .FileDataId = 5609267, .Name = "NodeTemplateXPinTemplate.db2" },
{ .FileDataId = 1953326, .Name = "NumTalentsAtLevel.db2" },
{ .FileDataId = 1090577, .Name = "ObjectEffect.db2" },
{ .FileDataId = 1090575, .Name = "ObjectEffectModifier.db2" },
@@ -685,7 +703,6 @@ constexpr DB2FileInfo DBFilesClientList[] =
{ .FileDataId = 1002186, .Name = "OverrideSpellData.db2" },
{ .FileDataId = 1394275, .Name = "PVPBracketTypes.db2" },
{ .FileDataId = 1339820, .Name = "PVPDifficulty.db2" },
{ .FileDataId = 972287, .Name = "PVPItem.db2" },
{ .FileDataId = 2992916, .Name = "PVPScoreboardCellInfo.db2" },
{ .FileDataId = 2992917, .Name = "PVPScoreboardColumnHeader.db2" },
{ .FileDataId = 2992918, .Name = "PVPScoreboardLayout.db2" },
@@ -718,6 +735,8 @@ constexpr DB2FileInfo DBFilesClientList[] =
{ .FileDataId = 1348558, .Name = "Phase.db2" },
{ .FileDataId = 1267336, .Name = "PhaseShiftZoneSounds.db2" },
{ .FileDataId = 987581, .Name = "PhaseXPhaseGroup.db2" },
{ .FileDataId = 5609269, .Name = "Pin.db2" },
{ .FileDataId = 5609270, .Name = "PinTemplate.db2" },
{ .FileDataId = 5152358, .Name = "PingType.db2" },
{ .FileDataId = 5922429, .Name = "PlayerCompanionInfo.db2" },
{ .FileDataId = 1045411, .Name = "PlayerCondition.db2" },
@@ -882,6 +901,7 @@ constexpr DB2FileInfo DBFilesClientList[] =
{ .FileDataId = 2428698, .Name = "SpellClutterWeaponTrailDist.db2" },
{ .FileDataId = 1139924, .Name = "SpellCooldowns.db2" },
{ .FileDataId = 1140004, .Name = "SpellDescriptionVariables.db2" },
{ .FileDataId = 3055891, .Name = "SpellDiminish.db2" },
{ .FileDataId = 1137829, .Name = "SpellDispelType.db2" },
{ .FileDataId = 1137828, .Name = "SpellDuration.db2" },
{ .FileDataId = 1140088, .Name = "SpellEffect.db2" },
@@ -923,6 +943,11 @@ constexpr DB2FileInfo DBFilesClientList[] =
{ .FileDataId = 1280618, .Name = "SpellShapeshiftForm.db2" },
{ .FileDataId = 1268903, .Name = "SpellSpecialUnitEffect.db2" },
{ .FileDataId = 1139993, .Name = "SpellTargetRestrictions.db2" },
{ .FileDataId = 6031283, .Name = "SpellTgtFilterRuleNode.db2" },
{ .FileDataId = 6031284, .Name = "SpellTgtFilterRuleSetNode.db2" },
{ .FileDataId = 6031285, .Name = "SpellTgtFilterRuleTemplate.db2" },
{ .FileDataId = 6031286, .Name = "SpellTgtGatherNode.db2" },
{ .FileDataId = 6031287, .Name = "SpellTgtGatherTemplate.db2" },
{ .FileDataId = 1002162, .Name = "SpellTotems.db2" },
{ .FileDataId = 897952, .Name = "SpellVisual.db2" },
{ .FileDataId = 1140479, .Name = "SpellVisualAnim.db2" },
@@ -931,6 +956,7 @@ constexpr DB2FileInfo DBFilesClientList[] =
{ .FileDataId = 1685317, .Name = "SpellVisualEvent.db2" },
{ .FileDataId = 897949, .Name = "SpellVisualKit.db2" },
{ .FileDataId = 897951, .Name = "SpellVisualKitAreaModel.db2" },
{ .FileDataId = 7412806, .Name = "SpellVisualKitDecalAttach.db2" },
{ .FileDataId = 1140480, .Name = "SpellVisualKitEffect.db2" },
{ .FileDataId = 897953, .Name = "SpellVisualKitModelAttach.db2" },
{ .FileDataId = 3989478, .Name = "SpellVisualKitPicker.db2" },
@@ -942,6 +968,7 @@ constexpr DB2FileInfo DBFilesClientList[] =
{ .FileDataId = 5735565, .Name = "SpotLightConditionMap.db2" },
{ .FileDataId = 1604265, .Name = "StartupFiles.db2" },
{ .FileDataId = 1140758, .Name = "Stationery.db2" },
{ .FileDataId = 5636015, .Name = "SubgraphNode.db2" },
{ .FileDataId = 1345276, .Name = "SummonProperties.db2" },
{ .FileDataId = 1302850, .Name = "TactKey.db2" },
{ .FileDataId = 1302851, .Name = "TactKeyLookup.db2" },
@@ -993,9 +1020,15 @@ constexpr DB2FileInfo DBFilesClientList[] =
{ .FileDataId = 2399695, .Name = "TransmogDefaultLevel.db2" },
{ .FileDataId = 1589454, .Name = "TransmogHoliday.db2" },
{ .FileDataId = 3580450, .Name = "TransmogIllusion.db2" },
{ .FileDataId = 7320164, .Name = "TransmogOutfitEntry.db2" },
{ .FileDataId = 7300046, .Name = "TransmogOutfitSlotInfo.db2" },
{ .FileDataId = 7299793, .Name = "TransmogOutfitSlotOption.db2" },
{ .FileDataId = 1376213, .Name = "TransmogSet.db2" },
{ .FileDataId = 1576116, .Name = "TransmogSetGroup.db2" },
{ .FileDataId = 1376212, .Name = "TransmogSetItem.db2" },
{ .FileDataId = 7211446, .Name = "TransmogSituation.db2" },
{ .FileDataId = 7212733, .Name = "TransmogSituationGroup.db2" },
{ .FileDataId = 7210468, .Name = "TransmogSituationTrigger.db2" },
{ .FileDataId = 1140686, .Name = "TransportAnimation.db2" },
{ .FileDataId = 1121973, .Name = "TransportPhysics.db2" },
{ .FileDataId = 1140687, .Name = "TransportRotation.db2" },
@@ -1005,6 +1038,7 @@ constexpr DB2FileInfo DBFilesClientList[] =
{ .FileDataId = 3488582, .Name = "UIChromieTimeExpansionInfo.db2" },
{ .FileDataId = 6155772, .Name = "UICinematicIntroInfo.db2" },
{ .FileDataId = 3502042, .Name = "UICovenantAbility.db2" },
{ .FileDataId = 7265906, .Name = "UICovenantHighlight.db2" },
{ .FileDataId = 3502043, .Name = "UICovenantPreview.db2" },
{ .FileDataId = 4579858, .Name = "UIDeadlyDebuff.db2" },
{ .FileDataId = 4065278, .Name = "UIDungeonScoreRarity.db2" },