@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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*/)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -49,7 +49,7 @@ struct DungeonEncounterEntry;
|
||||
struct InstanceSpawnGroupInfo;
|
||||
enum class CriteriaType : int16;
|
||||
enum class CriteriaStartEvent : uint8;
|
||||
enum Difficulty : uint8;
|
||||
enum Difficulty : int16;
|
||||
|
||||
enum EncounterFrameType
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ class InstanceLock;
|
||||
class InstanceMap;
|
||||
class Map;
|
||||
class Player;
|
||||
enum Difficulty : uint8;
|
||||
enum Difficulty : int16;
|
||||
|
||||
class TC_GAME_API MapManager
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
+1484
-1318
File diff suppressed because it is too large
Load Diff
+2434
-2263
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) :
|
||||
|
||||
@@ -632,7 +632,7 @@ class TC_GAME_API Spell
|
||||
|
||||
struct
|
||||
{
|
||||
uint32 Data[2];
|
||||
uint32 Data[3];
|
||||
} Raw;
|
||||
} m_misc;
|
||||
std::any m_customArg;
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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" },
|
||||
|
||||
Reference in New Issue
Block a user