diff options
Diffstat (limited to 'src/server/game/DataStores')
| -rw-r--r-- | src/server/game/DataStores/DB2LoadInfo.h | 1724 | ||||
| -rw-r--r-- | src/server/game/DataStores/DB2Metadata.h | 9154 | ||||
| -rw-r--r-- | src/server/game/DataStores/DB2Stores.cpp | 846 | ||||
| -rw-r--r-- | src/server/game/DataStores/DB2Stores.h | 29 | ||||
| -rw-r--r-- | src/server/game/DataStores/DB2Structure.h | 1464 | ||||
| -rw-r--r-- | src/server/game/DataStores/DBCEnums.h | 120 | ||||
| -rw-r--r-- | src/server/game/DataStores/GameTables.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/DataStores/GameTables.h | 11 |
8 files changed, 9794 insertions, 3558 deletions
diff --git a/src/server/game/DataStores/DB2LoadInfo.h b/src/server/game/DataStores/DB2LoadInfo.h index a6b4c1c0426..81ba8e1d6df 100644 --- a/src/server/game/DataStores/DB2LoadInfo.h +++ b/src/server/game/DataStores/DB2LoadInfo.h @@ -30,27 +30,45 @@ struct AchievementLoadInfo { static DB2FieldMeta const fields[] = { - { false, FT_STRING, "Title" }, { false, FT_STRING, "Description" }, + { false, FT_STRING, "Title" }, { false, FT_STRING, "Reward" }, - { true, FT_INT, "Flags" }, + { false, FT_INT, "ID" }, { true, FT_SHORT, "InstanceID" }, + { true, FT_BYTE, "Faction" }, { true, FT_SHORT, "Supercedes" }, { true, FT_SHORT, "Category" }, - { true, FT_SHORT, "UiOrder" }, - { true, FT_SHORT, "SharesCriteria" }, - { true, FT_BYTE, "Faction" }, - { true, FT_BYTE, "Points" }, { true, FT_BYTE, "MinimumCriteria" }, - { false, FT_INT, "ID" }, + { true, FT_BYTE, "Points" }, + { true, FT_INT, "Flags" }, + { true, FT_SHORT, "UiOrder" }, { true, FT_INT, "IconFileID" }, { false, FT_INT, "CriteriaTree" }, + { true, FT_SHORT, "SharesCriteria" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, AchievementMeta::Instance(), HOTFIX_SEL_ACHIEVEMENT); return &loadInfo; } }; +struct AnimationDataLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_INT, "ID" }, + { false, FT_SHORT, "Fallback" }, + { false, FT_BYTE, "BehaviorTier" }, + { true, FT_INT, "BehaviorID" }, + { true, FT_INT, "Flags1" }, + { true, FT_INT, "Flags2" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, AnimationDataMeta::Instance(), HOTFIX_SEL_ANIMATION_DATA); + return &loadInfo; + } +}; + struct AnimKitLoadInfo { static DB2LoadInfo const* Instance() @@ -91,31 +109,31 @@ struct AreaTableLoadInfo { false, FT_INT, "ID" }, { false, FT_STRING_NOT_LOCALIZED, "ZoneName" }, { false, FT_STRING, "AreaName" }, - { true, FT_INT, "Flags1" }, - { true, FT_INT, "Flags2" }, - { false, FT_FLOAT, "AmbientMultiplier" }, { false, FT_SHORT, "ContinentID" }, { false, FT_SHORT, "ParentAreaID" }, { true, FT_SHORT, "AreaBit" }, + { false, FT_BYTE, "SoundProviderPref" }, + { false, FT_BYTE, "SoundProviderPrefUnderwater" }, { false, FT_SHORT, "AmbienceID" }, + { false, FT_SHORT, "UwAmbience" }, { false, FT_SHORT, "ZoneMusic" }, - { false, FT_SHORT, "IntroSound" }, - { false, FT_SHORT, "LiquidTypeID1" }, - { false, FT_SHORT, "LiquidTypeID2" }, - { false, FT_SHORT, "LiquidTypeID3" }, - { false, FT_SHORT, "LiquidTypeID4" }, { false, FT_SHORT, "UwZoneMusic" }, - { false, FT_SHORT, "UwAmbience" }, - { true, FT_SHORT, "PvpCombatWorldStateID" }, - { false, FT_BYTE, "SoundProviderPref" }, - { false, FT_BYTE, "SoundProviderPrefUnderwater" }, { true, FT_BYTE, "ExplorationLevel" }, + { false, FT_SHORT, "IntroSound" }, + { false, FT_INT, "UwIntroSound" }, { false, FT_BYTE, "FactionGroupMask" }, + { false, FT_FLOAT, "AmbientMultiplier" }, { false, FT_BYTE, "MountFlags" }, + { true, FT_SHORT, "PvpCombatWorldStateID" }, { false, FT_BYTE, "WildBattlePetLevelMin" }, { false, FT_BYTE, "WildBattlePetLevelMax" }, { false, FT_BYTE, "WindSettingsID" }, - { false, FT_INT, "UwIntroSound" }, + { true, FT_INT, "Flags1" }, + { true, FT_INT, "Flags2" }, + { false, FT_SHORT, "LiquidTypeID1" }, + { false, FT_SHORT, "LiquidTypeID2" }, + { false, FT_SHORT, "LiquidTypeID3" }, + { false, FT_SHORT, "LiquidTypeID4" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, AreaTableMeta::Instance(), HOTFIX_SEL_AREA_TABLE); return &loadInfo; @@ -131,20 +149,20 @@ struct AreaTriggerLoadInfo { false, FT_FLOAT, "PosX" }, { false, FT_FLOAT, "PosY" }, { false, FT_FLOAT, "PosZ" }, + { false, FT_INT, "ID" }, + { true, FT_SHORT, "ContinentID" }, + { true, FT_BYTE, "PhaseUseFlags" }, + { true, FT_SHORT, "PhaseID" }, + { true, FT_SHORT, "PhaseGroupID" }, { false, FT_FLOAT, "Radius" }, { false, FT_FLOAT, "BoxLength" }, { false, FT_FLOAT, "BoxWidth" }, { false, FT_FLOAT, "BoxHeight" }, { false, FT_FLOAT, "BoxYaw" }, - { true, FT_SHORT, "ContinentID" }, - { true, FT_SHORT, "PhaseID" }, - { true, FT_SHORT, "PhaseGroupID" }, + { true, FT_BYTE, "ShapeType" }, { true, FT_SHORT, "ShapeID" }, { true, FT_SHORT, "AreaTriggerActionSetID" }, - { true, FT_BYTE, "PhaseUseFlags" }, - { true, FT_BYTE, "ShapeType" }, { true, FT_BYTE, "Flags" }, - { false, FT_INT, "ID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, AreaTriggerMeta::Instance(), HOTFIX_SEL_AREA_TRIGGER); return &loadInfo; @@ -175,15 +193,15 @@ struct ArtifactLoadInfo { static DB2FieldMeta const fields[] = { - { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, + { false, FT_INT, "ID" }, + { false, FT_SHORT, "UiTextureKitID" }, + { true, FT_INT, "UiNameColor" }, { true, FT_INT, "UiBarOverlayColor" }, { true, FT_INT, "UiBarBackgroundColor" }, - { true, FT_INT, "UiNameColor" }, - { false, FT_SHORT, "UiTextureKitID" }, { false, FT_SHORT, "ChrSpecializationID" }, - { false, FT_BYTE, "ArtifactCategoryID" }, { false, FT_BYTE, "Flags" }, + { false, FT_BYTE, "ArtifactCategoryID" }, { false, FT_INT, "UiModelSceneID" }, { false, FT_INT, "SpellVisualKitID" }, }; @@ -199,20 +217,20 @@ struct ArtifactAppearanceLoadInfo static DB2FieldMeta const fields[] = { { false, FT_STRING, "Name" }, - { true, FT_INT, "UiSwatchColor" }, - { false, FT_FLOAT, "UiModelSaturation" }, - { false, FT_FLOAT, "UiModelOpacity" }, - { false, FT_INT, "OverrideShapeshiftDisplayID" }, + { false, FT_INT, "ID" }, { false, FT_SHORT, "ArtifactAppearanceSetID" }, - { false, FT_SHORT, "UiCameraID" }, { false, FT_BYTE, "DisplayIndex" }, + { false, FT_INT, "UnlockPlayerConditionID" }, { false, FT_BYTE, "ItemAppearanceModifierID" }, - { false, FT_BYTE, "Flags" }, + { true, FT_INT, "UiSwatchColor" }, + { false, FT_FLOAT, "UiModelSaturation" }, + { false, FT_FLOAT, "UiModelOpacity" }, { false, FT_BYTE, "OverrideShapeshiftFormID" }, - { false, FT_INT, "ID" }, - { false, FT_INT, "UnlockPlayerConditionID" }, + { false, FT_INT, "OverrideShapeshiftDisplayID" }, { false, FT_INT, "UiItemAppearanceID" }, { false, FT_INT, "UiAltItemAppearanceID" }, + { false, FT_BYTE, "Flags" }, + { false, FT_SHORT, "UiCameraID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ArtifactAppearanceMeta::Instance(), HOTFIX_SEL_ARTIFACT_APPEARANCE); return &loadInfo; @@ -227,12 +245,12 @@ struct ArtifactAppearanceSetLoadInfo { { false, FT_STRING, "Name" }, { false, FT_STRING, "Description" }, + { false, FT_INT, "ID" }, + { false, FT_BYTE, "DisplayIndex" }, { false, FT_SHORT, "UiCameraID" }, { false, FT_SHORT, "AltHandUICameraID" }, - { false, FT_BYTE, "DisplayIndex" }, { true, FT_BYTE, "ForgeAttachmentOverride" }, { false, FT_BYTE, "Flags" }, - { false, FT_INT, "ID" }, { false, FT_BYTE, "ArtifactID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ArtifactAppearanceSetMeta::Instance(), HOTFIX_SEL_ARTIFACT_APPEARANCE_SET); @@ -261,14 +279,14 @@ struct ArtifactPowerLoadInfo { static DB2FieldMeta const fields[] = { - { false, FT_FLOAT, "PosX" }, - { false, FT_FLOAT, "PosY" }, + { false, FT_FLOAT, "DisplayPosX" }, + { false, FT_FLOAT, "DisplayPosY" }, + { false, FT_INT, "ID" }, { false, FT_BYTE, "ArtifactID" }, - { false, FT_BYTE, "Flags" }, { false, FT_BYTE, "MaxPurchasableRank" }, - { false, FT_BYTE, "Tier" }, - { false, FT_INT, "ID" }, { true, FT_INT, "Label" }, + { false, FT_BYTE, "Flags" }, + { false, FT_BYTE, "Tier" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ArtifactPowerMeta::Instance(), HOTFIX_SEL_ARTIFACT_POWER); return &loadInfo; @@ -311,10 +329,10 @@ struct ArtifactPowerRankLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_BYTE, "RankIndex" }, { true, FT_INT, "SpellID" }, - { false, FT_FLOAT, "AuraPointsOverride" }, { false, FT_SHORT, "ItemBonusListID" }, - { false, FT_BYTE, "RankIndex" }, + { false, FT_FLOAT, "AuraPointsOverride" }, { false, FT_SHORT, "ArtifactPowerID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ArtifactPowerRankMeta::Instance(), HOTFIX_SEL_ARTIFACT_POWER_RANK); @@ -370,9 +388,9 @@ struct ArtifactUnlockLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_SHORT, "ItemBonusListID" }, - { false, FT_BYTE, "PowerRank" }, { false, FT_INT, "PowerID" }, + { false, FT_BYTE, "PowerRank" }, + { false, FT_SHORT, "ItemBonusListID" }, { false, FT_INT, "PlayerConditionID" }, { false, FT_BYTE, "ArtifactID" }, }; @@ -436,12 +454,12 @@ struct BarberShopStyleLoadInfo { { false, FT_STRING, "DisplayName" }, { false, FT_STRING, "Description" }, - { false, FT_FLOAT, "CostModifier" }, + { false, FT_INT, "ID" }, { false, FT_BYTE, "Type" }, + { false, FT_FLOAT, "CostModifier" }, { false, FT_BYTE, "Race" }, { false, FT_BYTE, "Sex" }, { false, FT_BYTE, "Data" }, - { false, FT_INT, "ID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, BarberShopStyleMeta::Instance(), HOTFIX_SEL_BARBER_SHOP_STYLE); return &loadInfo; @@ -470,8 +488,8 @@ struct BattlePetBreedStateLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_SHORT, "Value" }, { false, FT_BYTE, "BattlePetStateID" }, + { false, FT_SHORT, "Value" }, { false, FT_BYTE, "BattlePetBreedID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, BattlePetBreedStateMeta::Instance(), HOTFIX_SEL_BATTLE_PET_BREED_STATE); @@ -485,15 +503,15 @@ struct BattlePetSpeciesLoadInfo { static DB2FieldMeta const fields[] = { - { false, FT_STRING, "SourceText" }, { false, FT_STRING, "Description" }, + { false, FT_STRING, "SourceText" }, + { false, FT_INT, "ID" }, { true, FT_INT, "CreatureID" }, - { true, FT_INT, "IconFileDataID" }, { true, FT_INT, "SummonSpellID" }, - { false, FT_SHORT, "Flags" }, + { true, FT_INT, "IconFileDataID" }, { false, FT_BYTE, "PetTypeEnum" }, + { false, FT_SHORT, "Flags" }, { true, FT_BYTE, "SourceTypeEnum" }, - { false, FT_INT, "ID" }, { true, FT_INT, "CardUIModelSceneID" }, { true, FT_INT, "LoadoutUIModelSceneID" }, }; @@ -509,8 +527,8 @@ struct BattlePetSpeciesStateLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "Value" }, { false, FT_BYTE, "BattlePetStateID" }, + { true, FT_INT, "Value" }, { false, FT_SHORT, "BattlePetSpeciesID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, BattlePetSpeciesStateMeta::Instance(), HOTFIX_SEL_BATTLE_PET_SPECIES_STATE); @@ -529,7 +547,18 @@ struct BattlemasterListLoadInfo { false, FT_STRING, "GameType" }, { false, FT_STRING, "ShortDescription" }, { false, FT_STRING, "LongDescription" }, + { true, FT_BYTE, "InstanceType" }, + { true, FT_BYTE, "MinLevel" }, + { true, FT_BYTE, "MaxLevel" }, + { true, FT_BYTE, "RatedPlayers" }, + { true, FT_BYTE, "MinPlayers" }, + { true, FT_BYTE, "MaxPlayers" }, + { true, FT_BYTE, "GroupsAllowed" }, + { true, FT_BYTE, "MaxGroupSize" }, + { true, FT_SHORT, "HolidayWorldState" }, + { true, FT_BYTE, "Flags" }, { true, FT_INT, "IconFileDataID" }, + { true, FT_SHORT, "RequiredPlayerConditionID" }, { true, FT_SHORT, "MapID1" }, { true, FT_SHORT, "MapID2" }, { true, FT_SHORT, "MapID3" }, @@ -546,17 +575,6 @@ struct BattlemasterListLoadInfo { true, FT_SHORT, "MapID14" }, { true, FT_SHORT, "MapID15" }, { true, FT_SHORT, "MapID16" }, - { true, FT_SHORT, "HolidayWorldState" }, - { true, FT_SHORT, "RequiredPlayerConditionID" }, - { true, FT_BYTE, "InstanceType" }, - { true, FT_BYTE, "GroupsAllowed" }, - { true, FT_BYTE, "MaxGroupSize" }, - { true, FT_BYTE, "MinLevel" }, - { true, FT_BYTE, "MaxLevel" }, - { true, FT_BYTE, "RatedPlayers" }, - { true, FT_BYTE, "MinPlayers" }, - { true, FT_BYTE, "MaxPlayers" }, - { true, FT_BYTE, "Flags" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, BattlemasterListMeta::Instance(), HOTFIX_SEL_BATTLEMASTER_LIST); return &loadInfo; @@ -569,21 +587,22 @@ struct BroadcastTextLoadInfo { static DB2FieldMeta const fields[] = { - { false, FT_INT, "ID" }, { false, FT_STRING, "Text" }, { false, FT_STRING, "Text1" }, + { false, FT_INT, "ID" }, + { false, FT_BYTE, "LanguageID" }, + { true, FT_INT, "ConditionID" }, + { false, FT_SHORT, "EmotesID" }, + { false, FT_BYTE, "Flags" }, + { false, FT_INT, "ChatBubbleDurationMs" }, + { false, FT_INT, "SoundEntriesID1" }, + { false, FT_INT, "SoundEntriesID2" }, { false, FT_SHORT, "EmoteID1" }, { false, FT_SHORT, "EmoteID2" }, { false, FT_SHORT, "EmoteID3" }, { false, FT_SHORT, "EmoteDelay1" }, { false, FT_SHORT, "EmoteDelay2" }, { false, FT_SHORT, "EmoteDelay3" }, - { false, FT_SHORT, "EmotesID" }, - { false, FT_BYTE, "LanguageID" }, - { false, FT_BYTE, "Flags" }, - { true, FT_INT, "ConditionID" }, - { false, FT_INT, "SoundEntriesID1" }, - { false, FT_INT, "SoundEntriesID2" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, BroadcastTextMeta::Instance(), HOTFIX_SEL_BROADCAST_TEXT); return &loadInfo; @@ -598,10 +617,10 @@ struct CfgRegionsLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING_NOT_LOCALIZED, "Tag" }, - { false, FT_INT, "Raidorigin" }, - { false, FT_INT, "ChallengeOrigin" }, { false, FT_SHORT, "RegionID" }, + { false, FT_INT, "Raidorigin" }, { false, FT_BYTE, "RegionGroupMask" }, + { false, FT_INT, "ChallengeOrigin" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, Cfg_RegionsMeta::Instance(), HOTFIX_SEL_CFG_REGIONS); return &loadInfo; @@ -636,9 +655,9 @@ struct CharBaseSectionLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_BYTE, "LayoutResType" }, { false, FT_BYTE, "VariationEnum" }, { false, FT_BYTE, "ResolutionVariationEnum" }, - { false, FT_BYTE, "LayoutResType" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CharBaseSectionMeta::Instance(), HOTFIX_SEL_CHAR_BASE_SECTION); return &loadInfo; @@ -652,15 +671,15 @@ struct CharSectionsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "MaterialResourcesID1" }, - { true, FT_INT, "MaterialResourcesID2" }, - { true, FT_INT, "MaterialResourcesID3" }, - { true, FT_SHORT, "Flags" }, { true, FT_BYTE, "RaceID" }, { true, FT_BYTE, "SexID" }, { true, FT_BYTE, "BaseSection" }, { true, FT_BYTE, "VariationIndex" }, { true, FT_BYTE, "ColorIndex" }, + { true, FT_SHORT, "Flags" }, + { true, FT_INT, "MaterialResourcesID1" }, + { true, FT_INT, "MaterialResourcesID2" }, + { true, FT_INT, "MaterialResourcesID3" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CharSectionsMeta::Instance(), HOTFIX_SEL_CHAR_SECTIONS); return &loadInfo; @@ -674,6 +693,11 @@ struct CharStartOutfitLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_BYTE, "ClassID" }, + { false, FT_BYTE, "SexID" }, + { false, FT_BYTE, "OutfitID" }, + { false, FT_INT, "PetDisplayID" }, + { false, FT_BYTE, "PetFamilyID" }, { true, FT_INT, "ItemID1" }, { true, FT_INT, "ItemID2" }, { true, FT_INT, "ItemID3" }, @@ -698,11 +722,6 @@ struct CharStartOutfitLoadInfo { true, FT_INT, "ItemID22" }, { true, FT_INT, "ItemID23" }, { true, FT_INT, "ItemID24" }, - { false, FT_INT, "PetDisplayID" }, - { false, FT_BYTE, "ClassID" }, - { false, FT_BYTE, "SexID" }, - { false, FT_BYTE, "OutfitID" }, - { false, FT_BYTE, "PetFamilyID" }, { false, FT_BYTE, "RaceID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CharStartOutfitMeta::Instance(), HOTFIX_SEL_CHAR_START_OUTFIT); @@ -750,26 +769,26 @@ struct ChrClassesLoadInfo { static DB2FieldMeta const fields[] = { - { false, FT_STRING_NOT_LOCALIZED, "PetNameToken" }, { false, FT_STRING, "Name" }, - { false, FT_STRING, "NameFemale" }, - { false, FT_STRING, "NameMale" }, { false, FT_STRING_NOT_LOCALIZED, "Filename" }, + { false, FT_STRING, "NameMale" }, + { false, FT_STRING, "NameFemale" }, + { false, FT_STRING_NOT_LOCALIZED, "PetNameToken" }, + { false, FT_INT, "ID" }, { false, FT_INT, "CreateScreenFileDataID" }, { false, FT_INT, "SelectScreenFileDataID" }, - { false, FT_INT, "LowResScreenFileDataID" }, { false, FT_INT, "IconFileDataID" }, + { false, FT_INT, "LowResScreenFileDataID" }, { true, FT_INT, "StartingLevel" }, { false, FT_SHORT, "Flags" }, { false, FT_SHORT, "CinematicSequenceID" }, { false, FT_SHORT, "DefaultSpec" }, + { false, FT_BYTE, "PrimaryStatPriority" }, { false, FT_BYTE, "DisplayPower" }, - { false, FT_BYTE, "SpellClassSet" }, - { false, FT_BYTE, "AttackPowerPerStrength" }, - { false, FT_BYTE, "AttackPowerPerAgility" }, { false, FT_BYTE, "RangedAttackPowerPerAgility" }, - { false, FT_BYTE, "PrimaryStatPriority" }, - { false, FT_INT, "ID" }, + { false, FT_BYTE, "AttackPowerPerAgility" }, + { false, FT_BYTE, "AttackPowerPerStrength" }, + { false, FT_BYTE, "SpellClassSet" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ChrClassesMeta::Instance(), HOTFIX_SEL_CHR_CLASSES); return &loadInfo; @@ -783,7 +802,7 @@ struct ChrClassesXPowerTypesLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_BYTE, "PowerType" }, + { true, FT_BYTE, "PowerType" }, { false, FT_BYTE, "ClassID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ChrClassesXPowerTypesMeta::Instance(), HOTFIX_SEL_CHR_CLASSES_X_POWER_TYPES); @@ -803,9 +822,12 @@ struct ChrRacesLoadInfo { false, FT_STRING, "NameFemale" }, { false, FT_STRING, "NameLowercase" }, { false, FT_STRING, "NameFemaleLowercase" }, + { false, FT_INT, "ID" }, { true, FT_INT, "Flags" }, { false, FT_INT, "MaleDisplayId" }, { false, FT_INT, "FemaleDisplayId" }, + { false, FT_INT, "HighResMaleDisplayId" }, + { false, FT_INT, "HighResFemaleDisplayId" }, { true, FT_INT, "CreateScreenFileDataID" }, { true, FT_INT, "SelectScreenFileDataID" }, { false, FT_FLOAT, "MaleCustomizeOffset1" }, @@ -815,34 +837,39 @@ struct ChrRacesLoadInfo { false, FT_FLOAT, "FemaleCustomizeOffset2" }, { false, FT_FLOAT, "FemaleCustomizeOffset3" }, { true, FT_INT, "LowResScreenFileDataID" }, + { false, FT_INT, "AlteredFormStartVisualKitID1" }, + { false, FT_INT, "AlteredFormStartVisualKitID2" }, + { false, FT_INT, "AlteredFormStartVisualKitID3" }, + { false, FT_INT, "AlteredFormFinishVisualKitID1" }, + { false, FT_INT, "AlteredFormFinishVisualKitID2" }, + { false, FT_INT, "AlteredFormFinishVisualKitID3" }, + { true, FT_INT, "HeritageArmorAchievementID" }, { true, FT_INT, "StartingLevel" }, { true, FT_INT, "UiDisplayOrder" }, + { true, FT_INT, "FemaleSkeletonFileDataID" }, + { true, FT_INT, "MaleSkeletonFileDataID" }, + { true, FT_INT, "HelmVisFallbackRaceID" }, { true, FT_SHORT, "FactionID" }, + { true, FT_SHORT, "CinematicSequenceID" }, { true, FT_SHORT, "ResSicknessSpellID" }, { true, FT_SHORT, "SplashSoundID" }, - { true, FT_SHORT, "CinematicSequenceID" }, { true, FT_BYTE, "BaseLanguage" }, { true, FT_BYTE, "CreatureType" }, { true, FT_BYTE, "Alliance" }, { true, FT_BYTE, "RaceRelated" }, { true, FT_BYTE, "UnalteredVisualRaceID" }, { true, FT_BYTE, "CharComponentTextureLayoutID" }, + { true, FT_BYTE, "CharComponentTexLayoutHiResID" }, { true, FT_BYTE, "DefaultClassID" }, { true, FT_BYTE, "NeutralRaceID" }, - { true, FT_BYTE, "DisplayRaceID" }, - { true, FT_BYTE, "CharComponentTexLayoutHiResID" }, - { false, FT_INT, "ID" }, - { false, FT_INT, "HighResMaleDisplayId" }, - { false, FT_INT, "HighResFemaleDisplayId" }, - { true, FT_INT, "HeritageArmorAchievementID" }, - { true, FT_INT, "MaleSkeletonFileDataID" }, - { true, FT_INT, "FemaleSkeletonFileDataID" }, - { false, FT_INT, "AlteredFormStartVisualKitID1" }, - { false, FT_INT, "AlteredFormStartVisualKitID2" }, - { false, FT_INT, "AlteredFormStartVisualKitID3" }, - { false, FT_INT, "AlteredFormFinishVisualKitID1" }, - { false, FT_INT, "AlteredFormFinishVisualKitID2" }, - { false, FT_INT, "AlteredFormFinishVisualKitID3" }, + { true, FT_BYTE, "MaleModelFallbackRaceID" }, + { true, FT_BYTE, "MaleModelFallbackSex" }, + { true, FT_BYTE, "FemaleModelFallbackRaceID" }, + { true, FT_BYTE, "FemaleModelFallbackSex" }, + { true, FT_BYTE, "MaleTextureFallbackRaceID" }, + { true, FT_BYTE, "MaleTextureFallbackSex" }, + { true, FT_BYTE, "FemaleTextureFallbackRaceID" }, + { true, FT_BYTE, "FemaleTextureFallbackSex" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ChrRacesMeta::Instance(), HOTFIX_SEL_CHR_RACES); return &loadInfo; @@ -858,17 +885,17 @@ struct ChrSpecializationLoadInfo { false, FT_STRING, "Name" }, { false, FT_STRING, "FemaleName" }, { false, FT_STRING, "Description" }, - { true, FT_INT, "MasterySpellID1" }, - { true, FT_INT, "MasterySpellID2" }, + { false, FT_INT, "ID" }, { true, FT_BYTE, "ClassID" }, { true, FT_BYTE, "OrderIndex" }, { true, FT_BYTE, "PetTalentType" }, { true, FT_BYTE, "Role" }, - { true, FT_BYTE, "PrimaryStatPriority" }, - { false, FT_INT, "ID" }, - { true, FT_INT, "SpellIconFileID" }, { false, FT_INT, "Flags" }, + { true, FT_INT, "SpellIconFileID" }, + { true, FT_BYTE, "PrimaryStatPriority" }, { true, FT_INT, "AnimReplacements" }, + { true, FT_INT, "MasterySpellID1" }, + { true, FT_INT, "MasterySpellID2" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ChrSpecializationMeta::Instance(), HOTFIX_SEL_CHR_SPECIALIZATION); return &loadInfo; @@ -882,10 +909,10 @@ struct CinematicCameraLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "SoundID" }, { false, FT_FLOAT, "OriginX" }, { false, FT_FLOAT, "OriginY" }, { false, FT_FLOAT, "OriginZ" }, + { false, FT_INT, "SoundID" }, { false, FT_FLOAT, "OriginFacing" }, { false, FT_INT, "FileDataID" }, }; @@ -916,6 +943,24 @@ struct CinematicSequencesLoadInfo } }; +struct ContentTuningLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_INT, "ID" }, + { true, FT_INT, "MinLevel" }, + { true, FT_INT, "MaxLevel" }, + { true, FT_INT, "Flags" }, + { true, FT_INT, "ExpectedStatModID" }, + { true, FT_INT, "DifficultyESMID" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ContentTuningMeta::Instance(), HOTFIX_SEL_CONTENT_TUNING); + return &loadInfo; + } +}; + struct ConversationLineLoadInfo { static DB2LoadInfo const* Instance() @@ -944,27 +989,29 @@ struct CreatureDisplayInfoLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_FLOAT, "CreatureModelScale" }, { false, FT_SHORT, "ModelID" }, - { false, FT_SHORT, "NPCSoundID" }, + { false, FT_SHORT, "SoundID" }, { true, FT_BYTE, "SizeClass" }, - { false, FT_BYTE, "Flags" }, - { true, FT_BYTE, "Gender" }, - { true, FT_INT, "ExtendedDisplayInfoID" }, - { true, FT_INT, "PortraitTextureFileDataID" }, + { false, FT_FLOAT, "CreatureModelScale" }, { false, FT_BYTE, "CreatureModelAlpha" }, - { false, FT_SHORT, "SoundID" }, - { false, FT_FLOAT, "PlayerOverrideScale" }, - { true, FT_INT, "PortraitCreatureDisplayInfoID" }, { false, FT_BYTE, "BloodID" }, + { true, FT_INT, "ExtendedDisplayInfoID" }, + { false, FT_SHORT, "NPCSoundID" }, { false, FT_SHORT, "ParticleColorID" }, - { false, FT_INT, "CreatureGeosetData" }, + { true, FT_INT, "PortraitCreatureDisplayInfoID" }, + { true, FT_INT, "PortraitTextureFileDataID" }, { false, FT_SHORT, "ObjectEffectPackageID" }, { false, FT_SHORT, "AnimReplacementSetID" }, - { true, FT_BYTE, "UnarmedWeaponType" }, + { false, FT_BYTE, "Flags" }, { true, FT_INT, "StateSpellVisualKitID" }, + { false, FT_FLOAT, "PlayerOverrideScale" }, { false, FT_FLOAT, "PetInstanceScale" }, + { true, FT_BYTE, "UnarmedWeaponType" }, { true, FT_INT, "MountPoofSpellVisualKitID" }, + { true, FT_INT, "DissolveEffectID" }, + { true, FT_BYTE, "Gender" }, + { true, FT_INT, "DissolveOutEffectID" }, + { true, FT_BYTE, "CreatureModelMinLod" }, { true, FT_INT, "TextureVariationFileDataID1" }, { true, FT_INT, "TextureVariationFileDataID2" }, { true, FT_INT, "TextureVariationFileDataID3" }, @@ -981,8 +1028,6 @@ struct CreatureDisplayInfoExtraLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "BakeMaterialResourcesID" }, - { true, FT_INT, "HDBakeMaterialResourcesID" }, { true, FT_BYTE, "DisplayRaceID" }, { true, FT_BYTE, "DisplaySexID" }, { true, FT_BYTE, "DisplayClassID" }, @@ -991,10 +1036,12 @@ struct CreatureDisplayInfoExtraLoadInfo { true, FT_BYTE, "HairStyleID" }, { true, FT_BYTE, "HairColorID" }, { true, FT_BYTE, "FacialHairID" }, + { true, FT_BYTE, "Flags" }, + { true, FT_INT, "BakeMaterialResourcesID" }, + { true, FT_INT, "HDBakeMaterialResourcesID" }, { false, FT_BYTE, "CustomDisplayOption1" }, { false, FT_BYTE, "CustomDisplayOption2" }, { false, FT_BYTE, "CustomDisplayOption3" }, - { true, FT_BYTE, "Flags" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CreatureDisplayInfoExtraMeta::Instance(), HOTFIX_SEL_CREATURE_DISPLAY_INFO_EXTRA); return &loadInfo; @@ -1010,14 +1057,14 @@ struct CreatureFamilyLoadInfo { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, { false, FT_FLOAT, "MinScale" }, + { true, FT_BYTE, "MinScaleLevel" }, { false, FT_FLOAT, "MaxScale" }, + { true, FT_BYTE, "MaxScaleLevel" }, + { true, FT_SHORT, "PetFoodMask" }, + { true, FT_BYTE, "PetTalentType" }, { true, FT_INT, "IconFileID" }, { true, FT_SHORT, "SkillLine1" }, { true, FT_SHORT, "SkillLine2" }, - { true, FT_SHORT, "PetFoodMask" }, - { true, FT_BYTE, "MinScaleLevel" }, - { true, FT_BYTE, "MaxScaleLevel" }, - { true, FT_BYTE, "PetTalentType" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CreatureFamilyMeta::Instance(), HOTFIX_SEL_CREATURE_FAMILY); return &loadInfo; @@ -1031,39 +1078,39 @@ struct CreatureModelDataLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_FLOAT, "ModelScale" }, - { false, FT_FLOAT, "FootprintTextureLength" }, - { false, FT_FLOAT, "FootprintTextureWidth" }, - { false, FT_FLOAT, "FootprintParticleScale" }, - { false, FT_FLOAT, "CollisionWidth" }, - { false, FT_FLOAT, "CollisionHeight" }, - { false, FT_FLOAT, "MountHeight" }, { false, FT_FLOAT, "GeoBox1" }, { false, FT_FLOAT, "GeoBox2" }, { false, FT_FLOAT, "GeoBox3" }, { false, FT_FLOAT, "GeoBox4" }, { false, FT_FLOAT, "GeoBox5" }, { false, FT_FLOAT, "GeoBox6" }, - { false, FT_FLOAT, "WorldEffectScale" }, - { false, FT_FLOAT, "AttachedEffectScale" }, - { false, FT_FLOAT, "MissileCollisionRadius" }, - { false, FT_FLOAT, "MissileCollisionPush" }, - { false, FT_FLOAT, "MissileCollisionRaise" }, - { false, FT_FLOAT, "OverrideLootEffectScale" }, - { false, FT_FLOAT, "OverrideNameScale" }, - { false, FT_FLOAT, "OverrideSelectionRadius" }, - { false, FT_FLOAT, "TamedPetBaseScale" }, - { false, FT_FLOAT, "HoverHeight" }, { false, FT_INT, "Flags" }, { false, FT_INT, "FileDataID" }, - { false, FT_INT, "SizeClass" }, { false, FT_INT, "BloodID" }, { false, FT_INT, "FootprintTextureID" }, + { false, FT_FLOAT, "FootprintTextureLength" }, + { false, FT_FLOAT, "FootprintTextureWidth" }, + { false, FT_FLOAT, "FootprintParticleScale" }, { false, FT_INT, "FoleyMaterialID" }, { false, FT_INT, "FootstepCameraEffectID" }, { false, FT_INT, "DeathThudCameraEffectID" }, { false, FT_INT, "SoundID" }, + { false, FT_INT, "SizeClass" }, + { false, FT_FLOAT, "CollisionWidth" }, + { false, FT_FLOAT, "CollisionHeight" }, + { false, FT_FLOAT, "WorldEffectScale" }, { false, FT_INT, "CreatureGeosetDataID" }, + { false, FT_FLOAT, "HoverHeight" }, + { false, FT_FLOAT, "AttachedEffectScale" }, + { false, FT_FLOAT, "ModelScale" }, + { false, FT_FLOAT, "MissileCollisionRadius" }, + { false, FT_FLOAT, "MissileCollisionPush" }, + { false, FT_FLOAT, "MissileCollisionRaise" }, + { false, FT_FLOAT, "MountHeight" }, + { false, FT_FLOAT, "OverrideLootEffectScale" }, + { false, FT_FLOAT, "OverrideNameScale" }, + { false, FT_FLOAT, "OverrideSelectionRadius" }, + { false, FT_FLOAT, "TamedPetBaseScale" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CreatureModelDataMeta::Instance(), HOTFIX_SEL_CREATURE_MODEL_DATA); return &loadInfo; @@ -1092,16 +1139,16 @@ struct CriteriaLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "Asset" }, - { true, FT_INT, "StartAsset" }, - { true, FT_INT, "FailAsset" }, + { true, FT_SHORT, "Type" }, + { true, FT_INT, "Asset" }, { false, FT_INT, "ModifierTreeId" }, - { false, FT_SHORT, "StartTimer" }, - { true, FT_SHORT, "EligibilityWorldStateID" }, - { false, FT_BYTE, "Type" }, { false, FT_BYTE, "StartEvent" }, + { true, FT_INT, "StartAsset" }, + { false, FT_SHORT, "StartTimer" }, { false, FT_BYTE, "FailEvent" }, + { true, FT_INT, "FailAsset" }, { false, FT_BYTE, "Flags" }, + { true, FT_SHORT, "EligibilityWorldStateID" }, { true, FT_BYTE, "EligibilityWorldStateValue" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CriteriaMeta::Instance(), HOTFIX_SEL_CRITERIA); @@ -1117,12 +1164,12 @@ struct CriteriaTreeLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "Description" }, - { true, FT_INT, "Amount" }, - { true, FT_SHORT, "Flags" }, + { false, FT_INT, "Parent" }, + { false, FT_INT, "Amount" }, { true, FT_BYTE, "Operator" }, { false, FT_INT, "CriteriaID" }, - { false, FT_INT, "Parent" }, { true, FT_INT, "OrderIndex" }, + { true, FT_SHORT, "Flags" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CriteriaTreeMeta::Instance(), HOTFIX_SEL_CRITERIA_TREE); return &loadInfo; @@ -1138,14 +1185,15 @@ struct CurrencyTypesLoadInfo { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, { false, FT_STRING, "Description" }, - { false, FT_INT, "MaxQty" }, - { false, FT_INT, "MaxEarnablePerWeek" }, - { false, FT_INT, "Flags" }, { false, FT_BYTE, "CategoryID" }, - { false, FT_BYTE, "SpellCategory" }, - { false, FT_BYTE, "Quality" }, { true, FT_INT, "InventoryIconFileID" }, { false, FT_INT, "SpellWeight" }, + { false, FT_BYTE, "SpellCategory" }, + { false, FT_INT, "MaxQty" }, + { false, FT_INT, "MaxEarnablePerWeek" }, + { false, FT_INT, "Flags" }, + { true, FT_BYTE, "Quality" }, + { true, FT_INT, "FactionID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CurrencyTypesMeta::Instance(), HOTFIX_SEL_CURRENCY_TYPES); return &loadInfo; @@ -1191,28 +1239,28 @@ struct DestructibleModelDataLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_SHORT, "State0Wmo" }, - { false, FT_SHORT, "State1Wmo" }, - { false, FT_SHORT, "State2Wmo" }, - { false, FT_SHORT, "State3Wmo" }, - { false, FT_SHORT, "HealEffectSpeed" }, { true, FT_BYTE, "State0ImpactEffectDoodadSet" }, { false, FT_BYTE, "State0AmbientDoodadSet" }, - { true, FT_BYTE, "State0NameSet" }, + { false, FT_SHORT, "State1Wmo" }, { true, FT_BYTE, "State1DestructionDoodadSet" }, { true, FT_BYTE, "State1ImpactEffectDoodadSet" }, { false, FT_BYTE, "State1AmbientDoodadSet" }, - { true, FT_BYTE, "State1NameSet" }, + { false, FT_SHORT, "State2Wmo" }, { true, FT_BYTE, "State2DestructionDoodadSet" }, { true, FT_BYTE, "State2ImpactEffectDoodadSet" }, { false, FT_BYTE, "State2AmbientDoodadSet" }, - { true, FT_BYTE, "State2NameSet" }, + { false, FT_SHORT, "State3Wmo" }, { false, FT_BYTE, "State3InitDoodadSet" }, { false, FT_BYTE, "State3AmbientDoodadSet" }, - { true, FT_BYTE, "State3NameSet" }, { false, FT_BYTE, "EjectDirection" }, { false, FT_BYTE, "DoNotHighlight" }, + { false, FT_SHORT, "State0Wmo" }, { false, FT_BYTE, "HealEffect" }, + { false, FT_SHORT, "HealEffectSpeed" }, + { true, FT_BYTE, "State0NameSet" }, + { true, FT_BYTE, "State1NameSet" }, + { true, FT_BYTE, "State2NameSet" }, + { true, FT_BYTE, "State3NameSet" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, DestructibleModelDataMeta::Instance(), HOTFIX_SEL_DESTRUCTIBLE_MODEL_DATA); return &loadInfo; @@ -1227,18 +1275,18 @@ struct DifficultyLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, - { false, FT_SHORT, "GroupSizeHealthCurveID" }, - { false, FT_SHORT, "GroupSizeDmgCurveID" }, - { false, FT_SHORT, "GroupSizeSpellPointsCurveID" }, - { false, FT_BYTE, "FallbackDifficultyID" }, { false, FT_BYTE, "InstanceType" }, + { false, FT_BYTE, "OrderIndex" }, + { true, FT_BYTE, "OldEnumValue" }, + { false, FT_BYTE, "FallbackDifficultyID" }, { false, FT_BYTE, "MinPlayers" }, { false, FT_BYTE, "MaxPlayers" }, - { true, FT_BYTE, "OldEnumValue" }, { false, FT_BYTE, "Flags" }, - { false, FT_BYTE, "ToggleDifficultyID" }, { false, FT_BYTE, "ItemContext" }, - { false, FT_BYTE, "OrderIndex" }, + { false, FT_BYTE, "ToggleDifficultyID" }, + { false, FT_SHORT, "GroupSizeHealthCurveID" }, + { false, FT_SHORT, "GroupSizeDmgCurveID" }, + { false, FT_SHORT, "GroupSizeSpellPointsCurveID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, DifficultyMeta::Instance(), HOTFIX_SEL_DIFFICULTY); return &loadInfo; @@ -1252,13 +1300,13 @@ struct DungeonEncounterLoadInfo static DB2FieldMeta const fields[] = { { false, FT_STRING, "Name" }, - { true, FT_INT, "CreatureDisplayID" }, + { false, FT_INT, "ID" }, { true, FT_SHORT, "MapID" }, { true, FT_BYTE, "DifficultyID" }, + { true, FT_INT, "OrderIndex" }, { true, FT_BYTE, "Bit" }, + { true, FT_INT, "CreatureDisplayID" }, { false, FT_BYTE, "Flags" }, - { false, FT_INT, "ID" }, - { true, FT_INT, "OrderIndex" }, { true, FT_INT, "SpellIconFileID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, DungeonEncounterMeta::Instance(), HOTFIX_SEL_DUNGEON_ENCOUNTER); @@ -1331,13 +1379,13 @@ struct EmotesLoadInfo { false, FT_INT, "ID" }, { true, FT_LONG, "RaceMask" }, { false, FT_STRING_NOT_LOCALIZED, "EmoteSlashCommand" }, + { true, FT_INT, "AnimID" }, { false, FT_INT, "EmoteFlags" }, - { false, FT_INT, "SpellVisualKitID" }, - { true, FT_SHORT, "AnimID" }, { false, FT_BYTE, "EmoteSpecProc" }, - { true, FT_INT, "ClassMask" }, { false, FT_INT, "EmoteSpecProcParam" }, { false, FT_INT, "EventSoundID" }, + { false, FT_INT, "SpellVisualKitID" }, + { true, FT_INT, "ClassMask" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, EmotesMeta::Instance(), HOTFIX_SEL_EMOTES); return &loadInfo; @@ -1367,8 +1415,8 @@ struct EmotesTextSoundLoadInfo { { false, FT_INT, "ID" }, { false, FT_BYTE, "RaceID" }, - { false, FT_BYTE, "SexID" }, { false, FT_BYTE, "ClassID" }, + { false, FT_BYTE, "SexID" }, { false, FT_INT, "SoundID" }, { false, FT_SHORT, "EmotesTextID" }, }; @@ -1377,6 +1425,52 @@ struct EmotesTextSoundLoadInfo } }; +struct ExpectedStatLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_INT, "ID" }, + { true, FT_INT, "ExpansionID" }, + { false, FT_FLOAT, "CreatureHealth" }, + { false, FT_FLOAT, "PlayerHealth" }, + { false, FT_FLOAT, "CreatureAutoAttackDps" }, + { false, FT_FLOAT, "CreatureArmor" }, + { false, FT_FLOAT, "PlayerMana" }, + { false, FT_FLOAT, "PlayerPrimaryStat" }, + { false, FT_FLOAT, "PlayerSecondaryStat" }, + { false, FT_FLOAT, "ArmorConstant" }, + { false, FT_FLOAT, "CreatureSpellDamage" }, + { true, FT_INT, "Lvl" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ExpectedStatMeta::Instance(), HOTFIX_SEL_EXPECTED_STAT); + return &loadInfo; + } +}; + +struct ExpectedStatModLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_INT, "ID" }, + { false, FT_FLOAT, "CreatureHealthMod" }, + { false, FT_FLOAT, "PlayerHealthMod" }, + { false, FT_FLOAT, "CreatureAutoAttackDPSMod" }, + { false, FT_FLOAT, "CreatureArmorMod" }, + { false, FT_FLOAT, "PlayerManaMod" }, + { false, FT_FLOAT, "PlayerPrimaryStatMod" }, + { false, FT_FLOAT, "PlayerSecondaryStatMod" }, + { false, FT_FLOAT, "ArmorConstantMod" }, + { false, FT_FLOAT, "CreatureSpellDamageMod" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ExpectedStatModMeta::Instance(), HOTFIX_SEL_EXPECTED_STAT_MOD); + return &loadInfo; + } +}; + struct FactionLoadInfo { static DB2LoadInfo const* Instance() @@ -1390,17 +1484,12 @@ struct FactionLoadInfo { false, FT_STRING, "Name" }, { false, FT_STRING, "Description" }, { false, FT_INT, "ID" }, - { true, FT_INT, "ReputationBase1" }, - { true, FT_INT, "ReputationBase2" }, - { true, FT_INT, "ReputationBase3" }, - { true, FT_INT, "ReputationBase4" }, - { false, FT_FLOAT, "ParentFactionMod1" }, - { false, FT_FLOAT, "ParentFactionMod2" }, - { true, FT_INT, "ReputationMax1" }, - { true, FT_INT, "ReputationMax2" }, - { true, FT_INT, "ReputationMax3" }, - { true, FT_INT, "ReputationMax4" }, { true, FT_SHORT, "ReputationIndex" }, + { false, FT_SHORT, "ParentFactionID" }, + { false, FT_BYTE, "Expansion" }, + { false, FT_BYTE, "FriendshipRepID" }, + { false, FT_BYTE, "Flags" }, + { false, FT_SHORT, "ParagonFactionID" }, { true, FT_SHORT, "ReputationClassMask1" }, { true, FT_SHORT, "ReputationClassMask2" }, { true, FT_SHORT, "ReputationClassMask3" }, @@ -1409,13 +1498,18 @@ struct FactionLoadInfo { false, FT_SHORT, "ReputationFlags2" }, { false, FT_SHORT, "ReputationFlags3" }, { false, FT_SHORT, "ReputationFlags4" }, - { false, FT_SHORT, "ParentFactionID" }, - { false, FT_SHORT, "ParagonFactionID" }, + { true, FT_INT, "ReputationBase1" }, + { true, FT_INT, "ReputationBase2" }, + { true, FT_INT, "ReputationBase3" }, + { true, FT_INT, "ReputationBase4" }, + { true, FT_INT, "ReputationMax1" }, + { true, FT_INT, "ReputationMax2" }, + { true, FT_INT, "ReputationMax3" }, + { true, FT_INT, "ReputationMax4" }, + { false, FT_FLOAT, "ParentFactionMod1" }, + { false, FT_FLOAT, "ParentFactionMod2" }, { false, FT_BYTE, "ParentFactionCap1" }, { false, FT_BYTE, "ParentFactionCap2" }, - { false, FT_BYTE, "Expansion" }, - { false, FT_BYTE, "Flags" }, - { false, FT_BYTE, "FriendshipRepID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, FactionMeta::Instance(), HOTFIX_SEL_FACTION); return &loadInfo; @@ -1431,6 +1525,9 @@ struct FactionTemplateLoadInfo { false, FT_INT, "ID" }, { false, FT_SHORT, "Faction" }, { false, FT_SHORT, "Flags" }, + { false, FT_BYTE, "FactionGroup" }, + { false, FT_BYTE, "FriendGroup" }, + { false, FT_BYTE, "EnemyGroup" }, { false, FT_SHORT, "Enemies1" }, { false, FT_SHORT, "Enemies2" }, { false, FT_SHORT, "Enemies3" }, @@ -1439,9 +1536,6 @@ struct FactionTemplateLoadInfo { false, FT_SHORT, "Friend2" }, { false, FT_SHORT, "Friend3" }, { false, FT_SHORT, "Friend4" }, - { false, FT_BYTE, "FactionGroup" }, - { false, FT_BYTE, "FriendGroup" }, - { false, FT_BYTE, "EnemyGroup" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, FactionTemplateMeta::Instance(), HOTFIX_SEL_FACTION_TEMPLATE); return &loadInfo; @@ -1455,16 +1549,16 @@ struct GameobjectDisplayInfoLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "FileDataID" }, { false, FT_FLOAT, "GeoBoxMinX" }, { false, FT_FLOAT, "GeoBoxMinY" }, { false, FT_FLOAT, "GeoBoxMinZ" }, { false, FT_FLOAT, "GeoBoxMaxX" }, { false, FT_FLOAT, "GeoBoxMaxY" }, { false, FT_FLOAT, "GeoBoxMaxZ" }, + { true, FT_INT, "FileDataID" }, + { true, FT_SHORT, "ObjectEffectPackageID" }, { false, FT_FLOAT, "OverrideLootEffectScale" }, { false, FT_FLOAT, "OverrideNameScale" }, - { true, FT_SHORT, "ObjectEffectPackageID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GameObjectDisplayInfoMeta::Instance(), HOTFIX_SEL_GAMEOBJECT_DISPLAY_INFO); return &loadInfo; @@ -1485,7 +1579,14 @@ struct GameobjectsLoadInfo { false, FT_FLOAT, "Rot2" }, { false, FT_FLOAT, "Rot3" }, { false, FT_FLOAT, "Rot4" }, + { false, FT_INT, "ID" }, + { false, FT_SHORT, "OwnerID" }, + { false, FT_SHORT, "DisplayID" }, { false, FT_FLOAT, "Scale" }, + { false, FT_BYTE, "TypeID" }, + { false, FT_BYTE, "PhaseUseFlags" }, + { false, FT_SHORT, "PhaseID" }, + { false, FT_SHORT, "PhaseGroupID" }, { true, FT_INT, "PropValue1" }, { true, FT_INT, "PropValue2" }, { true, FT_INT, "PropValue3" }, @@ -1494,13 +1595,6 @@ struct GameobjectsLoadInfo { true, FT_INT, "PropValue6" }, { true, FT_INT, "PropValue7" }, { true, FT_INT, "PropValue8" }, - { false, FT_SHORT, "OwnerID" }, - { false, FT_SHORT, "DisplayID" }, - { false, FT_SHORT, "PhaseID" }, - { false, FT_SHORT, "PhaseGroupID" }, - { false, FT_BYTE, "PhaseUseFlags" }, - { false, FT_BYTE, "TypeID" }, - { false, FT_INT, "ID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GameObjectsMeta::Instance(), HOTFIX_SEL_GAMEOBJECTS); return &loadInfo; @@ -1515,12 +1609,12 @@ struct GarrAbilityLoadInfo { { false, FT_STRING, "Name" }, { false, FT_STRING, "Description" }, - { true, FT_INT, "IconFileDataID" }, - { false, FT_SHORT, "Flags" }, - { false, FT_SHORT, "FactionChangeGarrAbilityID" }, + { false, FT_INT, "ID" }, { false, FT_BYTE, "GarrAbilityCategoryID" }, { false, FT_BYTE, "GarrFollowerTypeID" }, - { false, FT_INT, "ID" }, + { true, FT_INT, "IconFileDataID" }, + { false, FT_SHORT, "FactionChangeGarrAbilityID" }, + { false, FT_SHORT, "Flags" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GarrAbilityMeta::Instance(), HOTFIX_SEL_GARR_ABILITY); return &loadInfo; @@ -1534,30 +1628,30 @@ struct GarrBuildingLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_STRING, "AllianceName" }, { false, FT_STRING, "HordeName" }, + { false, FT_STRING, "AllianceName" }, { false, FT_STRING, "Description" }, { false, FT_STRING, "Tooltip" }, + { false, FT_BYTE, "GarrTypeID" }, + { false, FT_BYTE, "BuildingType" }, { true, FT_INT, "HordeGameObjectID" }, { true, FT_INT, "AllianceGameObjectID" }, - { true, FT_INT, "IconFileDataID" }, + { false, FT_BYTE, "GarrSiteID" }, + { false, FT_BYTE, "UpgradeLevel" }, + { true, FT_INT, "BuildSeconds" }, { false, FT_SHORT, "CurrencyTypeID" }, + { true, FT_INT, "CurrencyQty" }, { false, FT_SHORT, "HordeUiTextureKitID" }, { false, FT_SHORT, "AllianceUiTextureKitID" }, + { true, FT_INT, "IconFileDataID" }, { false, FT_SHORT, "AllianceSceneScriptPackageID" }, { false, FT_SHORT, "HordeSceneScriptPackageID" }, + { true, FT_INT, "MaxAssignments" }, + { false, FT_BYTE, "ShipmentCapacity" }, { false, FT_SHORT, "GarrAbilityID" }, { false, FT_SHORT, "BonusGarrAbilityID" }, { false, FT_SHORT, "GoldCost" }, - { false, FT_BYTE, "GarrSiteID" }, - { false, FT_BYTE, "BuildingType" }, - { false, FT_BYTE, "UpgradeLevel" }, { false, FT_BYTE, "Flags" }, - { false, FT_BYTE, "ShipmentCapacity" }, - { false, FT_BYTE, "GarrTypeID" }, - { true, FT_INT, "BuildSeconds" }, - { true, FT_INT, "CurrencyQty" }, - { true, FT_INT, "MaxAssignments" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GarrBuildingMeta::Instance(), HOTFIX_SEL_GARR_BUILDING); return &loadInfo; @@ -1572,10 +1666,10 @@ struct GarrBuildingPlotInstLoadInfo { { false, FT_FLOAT, "MapOffsetX" }, { false, FT_FLOAT, "MapOffsetY" }, - { false, FT_SHORT, "UiTextureAtlasMemberID" }, - { false, FT_SHORT, "GarrSiteLevelPlotInstID" }, - { false, FT_BYTE, "GarrBuildingID" }, { false, FT_INT, "ID" }, + { false, FT_BYTE, "GarrBuildingID" }, + { false, FT_SHORT, "GarrSiteLevelPlotInstID" }, + { false, FT_SHORT, "UiTextureAtlasMemberID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GarrBuildingPlotInstMeta::Instance(), HOTFIX_SEL_GARR_BUILDING_PLOT_INST); return &loadInfo; @@ -1591,11 +1685,11 @@ struct GarrClassSpecLoadInfo { false, FT_STRING, "ClassSpec" }, { false, FT_STRING, "ClassSpecMale" }, { false, FT_STRING, "ClassSpecFemale" }, + { false, FT_INT, "ID" }, { false, FT_SHORT, "UiTextureAtlasMemberID" }, { false, FT_SHORT, "GarrFollItemSetID" }, { false, FT_BYTE, "FollowerClassLimit" }, { false, FT_BYTE, "Flags" }, - { false, FT_INT, "ID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GarrClassSpecMeta::Instance(), HOTFIX_SEL_GARR_CLASS_SPEC); return &loadInfo; @@ -1611,35 +1705,35 @@ struct GarrFollowerLoadInfo { false, FT_STRING, "HordeSourceText" }, { false, FT_STRING, "AllianceSourceText" }, { false, FT_STRING, "TitleName" }, + { false, FT_INT, "ID" }, + { false, FT_BYTE, "GarrTypeID" }, + { false, FT_BYTE, "GarrFollowerTypeID" }, { true, FT_INT, "HordeCreatureID" }, { true, FT_INT, "AllianceCreatureID" }, - { true, FT_INT, "HordeIconFileDataID" }, - { true, FT_INT, "AllianceIconFileDataID" }, - { false, FT_INT, "HordeSlottingBroadcastTextID" }, - { false, FT_INT, "AllySlottingBroadcastTextID" }, - { false, FT_SHORT, "HordeGarrFollItemSetID" }, - { false, FT_SHORT, "AllianceGarrFollItemSetID" }, - { false, FT_SHORT, "ItemLevelWeapon" }, - { false, FT_SHORT, "ItemLevelArmor" }, - { false, FT_SHORT, "HordeUITextureKitID" }, - { false, FT_SHORT, "AllianceUITextureKitID" }, - { false, FT_BYTE, "GarrFollowerTypeID" }, { false, FT_BYTE, "HordeGarrFollRaceID" }, { false, FT_BYTE, "AllianceGarrFollRaceID" }, - { false, FT_BYTE, "Quality" }, { false, FT_BYTE, "HordeGarrClassSpecID" }, { false, FT_BYTE, "AllianceGarrClassSpecID" }, + { false, FT_BYTE, "Quality" }, { false, FT_BYTE, "FollowerLevel" }, - { false, FT_BYTE, "Gender" }, - { false, FT_BYTE, "Flags" }, + { false, FT_SHORT, "ItemLevelWeapon" }, + { false, FT_SHORT, "ItemLevelArmor" }, { true, FT_BYTE, "HordeSourceTypeEnum" }, { true, FT_BYTE, "AllianceSourceTypeEnum" }, - { false, FT_BYTE, "GarrTypeID" }, + { true, FT_INT, "HordeIconFileDataID" }, + { true, FT_INT, "AllianceIconFileDataID" }, + { false, FT_SHORT, "HordeGarrFollItemSetID" }, + { false, FT_SHORT, "AllianceGarrFollItemSetID" }, + { false, FT_SHORT, "HordeUITextureKitID" }, + { false, FT_SHORT, "AllianceUITextureKitID" }, { false, FT_BYTE, "Vitality" }, - { false, FT_BYTE, "ChrClassID" }, { false, FT_BYTE, "HordeFlavorGarrStringID" }, { false, FT_BYTE, "AllianceFlavorGarrStringID" }, - { false, FT_INT, "ID" }, + { false, FT_INT, "HordeSlottingBroadcastTextID" }, + { false, FT_INT, "AllySlottingBroadcastTextID" }, + { false, FT_BYTE, "ChrClassID" }, + { false, FT_BYTE, "Flags" }, + { false, FT_BYTE, "Gender" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GarrFollowerMeta::Instance(), HOTFIX_SEL_GARR_FOLLOWER); return &loadInfo; @@ -1653,8 +1747,9 @@ struct GarrFollowerXAbilityLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_SHORT, "GarrAbilityID" }, + { false, FT_BYTE, "OrderIndex" }, { false, FT_BYTE, "FactionIndex" }, + { false, FT_SHORT, "GarrAbilityID" }, { false, FT_SHORT, "GarrFollowerID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GarrFollowerXAbilityMeta::Instance(), HOTFIX_SEL_GARR_FOLLOWER_X_ABILITY); @@ -1669,12 +1764,12 @@ struct GarrPlotLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_STRING, "Name" }, - { true, FT_INT, "AllianceConstructObjID" }, - { true, FT_INT, "HordeConstructObjID" }, - { false, FT_BYTE, "UiCategoryID" }, + { false, FT_STRING_NOT_LOCALIZED, "Name" }, { false, FT_BYTE, "PlotType" }, + { true, FT_INT, "HordeConstructObjID" }, + { true, FT_INT, "AllianceConstructObjID" }, { false, FT_BYTE, "Flags" }, + { false, FT_BYTE, "UiCategoryID" }, { false, FT_INT, "UpgradeRequirement1" }, { false, FT_INT, "UpgradeRequirement2" }, }; @@ -1722,14 +1817,14 @@ struct GarrSiteLevelLoadInfo { false, FT_INT, "ID" }, { false, FT_FLOAT, "TownHallUiPosX" }, { false, FT_FLOAT, "TownHallUiPosY" }, + { false, FT_INT, "GarrSiteID" }, + { false, FT_BYTE, "GarrLevel" }, { false, FT_SHORT, "MapID" }, - { false, FT_SHORT, "UiTextureKitID" }, { false, FT_SHORT, "UpgradeMovieID" }, + { false, FT_SHORT, "UiTextureKitID" }, + { false, FT_BYTE, "MaxBuildingLevel" }, { false, FT_SHORT, "UpgradeCost" }, { false, FT_SHORT, "UpgradeGoldCost" }, - { false, FT_BYTE, "GarrLevel" }, - { false, FT_BYTE, "GarrSiteID" }, - { false, FT_BYTE, "MaxBuildingLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GarrSiteLevelMeta::Instance(), HOTFIX_SEL_GARR_SITE_LEVEL); return &loadInfo; @@ -1761,8 +1856,8 @@ struct GemPropertiesLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "Type" }, { false, FT_SHORT, "EnchantId" }, + { true, FT_INT, "Type" }, { false, FT_SHORT, "MinItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GemPropertiesMeta::Instance(), HOTFIX_SEL_GEM_PROPERTIES); @@ -1825,8 +1920,8 @@ struct GuildColorBackgroundLoadInfo { { false, FT_INT, "ID" }, { false, FT_BYTE, "Red" }, - { false, FT_BYTE, "Green" }, { false, FT_BYTE, "Blue" }, + { false, FT_BYTE, "Green" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GuildColorBackgroundMeta::Instance(), HOTFIX_SEL_GUILD_COLOR_BACKGROUND); return &loadInfo; @@ -1841,8 +1936,8 @@ struct GuildColorBorderLoadInfo { { false, FT_INT, "ID" }, { false, FT_BYTE, "Red" }, - { false, FT_BYTE, "Green" }, { false, FT_BYTE, "Blue" }, + { false, FT_BYTE, "Green" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GuildColorBorderMeta::Instance(), HOTFIX_SEL_GUILD_COLOR_BORDER); return &loadInfo; @@ -1857,8 +1952,8 @@ struct GuildColorEmblemLoadInfo { { false, FT_INT, "ID" }, { false, FT_BYTE, "Red" }, - { false, FT_BYTE, "Green" }, { false, FT_BYTE, "Blue" }, + { false, FT_BYTE, "Green" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GuildColorEmblemMeta::Instance(), HOTFIX_SEL_GUILD_COLOR_EMBLEM); return &loadInfo; @@ -1886,19 +1981,19 @@ struct HeirloomLoadInfo static DB2FieldMeta const fields[] = { { false, FT_STRING, "SourceText" }, + { false, FT_INT, "ID" }, { true, FT_INT, "ItemID" }, - { true, FT_INT, "LegacyItemID" }, { true, FT_INT, "LegacyUpgradedItemID" }, { true, FT_INT, "StaticUpgradedItemID" }, + { true, FT_BYTE, "SourceTypeEnum" }, + { false, FT_BYTE, "Flags" }, + { true, FT_INT, "LegacyItemID" }, { true, FT_INT, "UpgradeItemID1" }, { true, FT_INT, "UpgradeItemID2" }, { true, FT_INT, "UpgradeItemID3" }, { false, FT_SHORT, "UpgradeItemBonusListID1" }, { false, FT_SHORT, "UpgradeItemBonusListID2" }, { false, FT_SHORT, "UpgradeItemBonusListID3" }, - { false, FT_BYTE, "Flags" }, - { true, FT_BYTE, "SourceTypeEnum" }, - { false, FT_INT, "ID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, HeirloomMeta::Instance(), HOTFIX_SEL_HEIRLOOM); return &loadInfo; @@ -1912,6 +2007,23 @@ struct HolidaysLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_SHORT, "Region" }, + { false, FT_BYTE, "Looping" }, + { false, FT_INT, "HolidayNameID" }, + { false, FT_INT, "HolidayDescriptionID" }, + { false, FT_BYTE, "Priority" }, + { true, FT_BYTE, "CalendarFilterType" }, + { false, FT_BYTE, "Flags" }, + { false, FT_SHORT, "Duration1" }, + { false, FT_SHORT, "Duration2" }, + { false, FT_SHORT, "Duration3" }, + { false, FT_SHORT, "Duration4" }, + { false, FT_SHORT, "Duration5" }, + { false, FT_SHORT, "Duration6" }, + { false, FT_SHORT, "Duration7" }, + { false, FT_SHORT, "Duration8" }, + { false, FT_SHORT, "Duration9" }, + { false, FT_SHORT, "Duration10" }, { false, FT_INT, "Date1" }, { false, FT_INT, "Date2" }, { false, FT_INT, "Date3" }, @@ -1928,18 +2040,6 @@ struct HolidaysLoadInfo { false, FT_INT, "Date14" }, { false, FT_INT, "Date15" }, { false, FT_INT, "Date16" }, - { false, FT_SHORT, "Duration1" }, - { false, FT_SHORT, "Duration2" }, - { false, FT_SHORT, "Duration3" }, - { false, FT_SHORT, "Duration4" }, - { false, FT_SHORT, "Duration5" }, - { false, FT_SHORT, "Duration6" }, - { false, FT_SHORT, "Duration7" }, - { false, FT_SHORT, "Duration8" }, - { false, FT_SHORT, "Duration9" }, - { false, FT_SHORT, "Duration10" }, - { false, FT_SHORT, "Region" }, - { false, FT_BYTE, "Looping" }, { false, FT_BYTE, "CalendarFlags1" }, { false, FT_BYTE, "CalendarFlags2" }, { false, FT_BYTE, "CalendarFlags3" }, @@ -1950,11 +2050,6 @@ struct HolidaysLoadInfo { false, FT_BYTE, "CalendarFlags8" }, { false, FT_BYTE, "CalendarFlags9" }, { false, FT_BYTE, "CalendarFlags10" }, - { false, FT_BYTE, "Priority" }, - { true, FT_BYTE, "CalendarFilterType" }, - { false, FT_BYTE, "Flags" }, - { false, FT_INT, "HolidayNameID" }, - { false, FT_INT, "HolidayDescriptionID" }, { true, FT_INT, "TextureFileDataID1" }, { true, FT_INT, "TextureFileDataID2" }, { true, FT_INT, "TextureFileDataID3" }, @@ -2030,13 +2125,13 @@ struct ItemLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "IconFileDataID" }, { false, FT_BYTE, "ClassID" }, { false, FT_BYTE, "SubclassID" }, - { true, FT_BYTE, "SoundOverrideSubclassID" }, { false, FT_BYTE, "Material" }, - { false, FT_BYTE, "InventoryType" }, + { true, FT_BYTE, "InventoryType" }, { false, FT_BYTE, "SheatheType" }, + { true, FT_BYTE, "SoundOverrideSubclassID" }, + { true, FT_INT, "IconFileDataID" }, { false, FT_BYTE, "ItemGroupSoundsID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemMeta::Instance(), HOTFIX_SEL_ITEM); @@ -2051,10 +2146,10 @@ struct ItemAppearanceLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_BYTE, "DisplayType" }, { true, FT_INT, "ItemDisplayInfoID" }, { true, FT_INT, "DefaultIconFileDataID" }, { true, FT_INT, "UiOrder" }, - { false, FT_BYTE, "DisplayType" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemAppearanceMeta::Instance(), HOTFIX_SEL_ITEM_APPEARANCE); return &loadInfo; @@ -2075,7 +2170,6 @@ struct ItemArmorQualityLoadInfo { false, FT_FLOAT, "Qualitymod5" }, { false, FT_FLOAT, "Qualitymod6" }, { false, FT_FLOAT, "Qualitymod7" }, - { true, FT_SHORT, "ItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemArmorQualityMeta::Instance(), HOTFIX_SEL_ITEM_ARMOR_QUALITY); return &loadInfo; @@ -2110,11 +2204,11 @@ struct ItemArmorTotalLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { true, FT_SHORT, "ItemLevel" }, { false, FT_FLOAT, "Cloth" }, { false, FT_FLOAT, "Leather" }, { false, FT_FLOAT, "Mail" }, { false, FT_FLOAT, "Plate" }, - { true, FT_SHORT, "ItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemArmorTotalMeta::Instance(), HOTFIX_SEL_ITEM_ARMOR_TOTAL); return &loadInfo; @@ -2175,10 +2269,10 @@ struct ItemBonusTreeNodeLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_BYTE, "ItemContext" }, { false, FT_SHORT, "ChildItemBonusTreeID" }, { false, FT_SHORT, "ChildItemBonusListID" }, { false, FT_SHORT, "ChildItemLevelSelectorID" }, - { false, FT_BYTE, "ItemContext" }, { false, FT_SHORT, "ParentItemBonusTreeID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemBonusTreeNodeMeta::Instance(), HOTFIX_SEL_ITEM_BONUS_TREE_NODE); @@ -2210,8 +2304,8 @@ struct ItemClassLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "ClassName" }, - { false, FT_FLOAT, "PriceModifier" }, { true, FT_BYTE, "ClassID" }, + { false, FT_FLOAT, "PriceModifier" }, { false, FT_BYTE, "Flags" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemClassMeta::Instance(), HOTFIX_SEL_ITEM_CLASS); @@ -2240,6 +2334,7 @@ struct ItemDamageAmmoLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_SHORT, "ItemLevel" }, { false, FT_FLOAT, "Quality1" }, { false, FT_FLOAT, "Quality2" }, { false, FT_FLOAT, "Quality3" }, @@ -2247,7 +2342,6 @@ struct ItemDamageAmmoLoadInfo { false, FT_FLOAT, "Quality5" }, { false, FT_FLOAT, "Quality6" }, { false, FT_FLOAT, "Quality7" }, - { false, FT_SHORT, "ItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemDamageAmmoMeta::Instance(), HOTFIX_SEL_ITEM_DAMAGE_AMMO); return &loadInfo; @@ -2261,6 +2355,7 @@ struct ItemDamageOneHandLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_SHORT, "ItemLevel" }, { false, FT_FLOAT, "Quality1" }, { false, FT_FLOAT, "Quality2" }, { false, FT_FLOAT, "Quality3" }, @@ -2268,7 +2363,6 @@ struct ItemDamageOneHandLoadInfo { false, FT_FLOAT, "Quality5" }, { false, FT_FLOAT, "Quality6" }, { false, FT_FLOAT, "Quality7" }, - { false, FT_SHORT, "ItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemDamageOneHandMeta::Instance(), HOTFIX_SEL_ITEM_DAMAGE_ONE_HAND); return &loadInfo; @@ -2282,6 +2376,7 @@ struct ItemDamageOneHandCasterLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_SHORT, "ItemLevel" }, { false, FT_FLOAT, "Quality1" }, { false, FT_FLOAT, "Quality2" }, { false, FT_FLOAT, "Quality3" }, @@ -2289,7 +2384,6 @@ struct ItemDamageOneHandCasterLoadInfo { false, FT_FLOAT, "Quality5" }, { false, FT_FLOAT, "Quality6" }, { false, FT_FLOAT, "Quality7" }, - { false, FT_SHORT, "ItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemDamageOneHandCasterMeta::Instance(), HOTFIX_SEL_ITEM_DAMAGE_ONE_HAND_CASTER); return &loadInfo; @@ -2303,6 +2397,7 @@ struct ItemDamageTwoHandLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_SHORT, "ItemLevel" }, { false, FT_FLOAT, "Quality1" }, { false, FT_FLOAT, "Quality2" }, { false, FT_FLOAT, "Quality3" }, @@ -2310,7 +2405,6 @@ struct ItemDamageTwoHandLoadInfo { false, FT_FLOAT, "Quality5" }, { false, FT_FLOAT, "Quality6" }, { false, FT_FLOAT, "Quality7" }, - { false, FT_SHORT, "ItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemDamageTwoHandMeta::Instance(), HOTFIX_SEL_ITEM_DAMAGE_TWO_HAND); return &loadInfo; @@ -2324,6 +2418,7 @@ struct ItemDamageTwoHandCasterLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_SHORT, "ItemLevel" }, { false, FT_FLOAT, "Quality1" }, { false, FT_FLOAT, "Quality2" }, { false, FT_FLOAT, "Quality3" }, @@ -2331,7 +2426,6 @@ struct ItemDamageTwoHandCasterLoadInfo { false, FT_FLOAT, "Quality5" }, { false, FT_FLOAT, "Quality6" }, { false, FT_FLOAT, "Quality7" }, - { false, FT_SHORT, "ItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemDamageTwoHandCasterMeta::Instance(), HOTFIX_SEL_ITEM_DAMAGE_TWO_HAND_CASTER); return &loadInfo; @@ -2345,11 +2439,11 @@ struct ItemDisenchantLootLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { true, FT_BYTE, "Subclass" }, + { false, FT_BYTE, "Quality" }, { false, FT_SHORT, "MinLevel" }, { false, FT_SHORT, "MaxLevel" }, { false, FT_SHORT, "SkillRequired" }, - { true, FT_BYTE, "Subclass" }, - { false, FT_BYTE, "Quality" }, { true, FT_BYTE, "ExpansionID" }, { false, FT_BYTE, "Class" }, }; @@ -2365,14 +2459,14 @@ struct ItemEffectLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "SpellID" }, + { false, FT_BYTE, "LegacySlotIndex" }, + { true, FT_BYTE, "TriggerType" }, + { true, FT_SHORT, "Charges" }, { true, FT_INT, "CoolDownMSec" }, { true, FT_INT, "CategoryCoolDownMSec" }, - { true, FT_SHORT, "Charges" }, { false, FT_SHORT, "SpellCategoryID" }, + { true, FT_INT, "SpellID" }, { false, FT_SHORT, "ChrSpecializationID" }, - { false, FT_BYTE, "LegacySlotIndex" }, - { true, FT_BYTE, "TriggerType" }, { true, FT_INT, "ParentItemID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemEffectMeta::Instance(), HOTFIX_SEL_ITEM_EFFECT); @@ -2387,32 +2481,32 @@ struct ItemExtendedCostLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_SHORT, "RequiredArenaRating" }, + { true, FT_BYTE, "ArenaBracket" }, + { false, FT_BYTE, "Flags" }, + { false, FT_BYTE, "MinFactionID" }, + { false, FT_BYTE, "MinReputation" }, + { false, FT_BYTE, "RequiredAchievement" }, { true, FT_INT, "ItemID1" }, { true, FT_INT, "ItemID2" }, { true, FT_INT, "ItemID3" }, { true, FT_INT, "ItemID4" }, { true, FT_INT, "ItemID5" }, - { false, FT_INT, "CurrencyCount1" }, - { false, FT_INT, "CurrencyCount2" }, - { false, FT_INT, "CurrencyCount3" }, - { false, FT_INT, "CurrencyCount4" }, - { false, FT_INT, "CurrencyCount5" }, { false, FT_SHORT, "ItemCount1" }, { false, FT_SHORT, "ItemCount2" }, { false, FT_SHORT, "ItemCount3" }, { false, FT_SHORT, "ItemCount4" }, { false, FT_SHORT, "ItemCount5" }, - { false, FT_SHORT, "RequiredArenaRating" }, { false, FT_SHORT, "CurrencyID1" }, { false, FT_SHORT, "CurrencyID2" }, { false, FT_SHORT, "CurrencyID3" }, { false, FT_SHORT, "CurrencyID4" }, { false, FT_SHORT, "CurrencyID5" }, - { false, FT_BYTE, "ArenaBracket" }, - { false, FT_BYTE, "MinFactionID" }, - { false, FT_BYTE, "MinReputation" }, - { false, FT_BYTE, "Flags" }, - { false, FT_BYTE, "RequiredAchievement" }, + { false, FT_INT, "CurrencyCount1" }, + { false, FT_INT, "CurrencyCount2" }, + { false, FT_INT, "CurrencyCount3" }, + { false, FT_INT, "CurrencyCount4" }, + { false, FT_INT, "CurrencyCount5" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemExtendedCostMeta::Instance(), HOTFIX_SEL_ITEM_EXTENDED_COST); return &loadInfo; @@ -2503,8 +2597,8 @@ struct ItemModifiedAppearanceLoadInfo { static DB2FieldMeta const fields[] = { - { true, FT_INT, "ItemID" }, { false, FT_INT, "ID" }, + { true, FT_INT, "ItemID" }, { false, FT_BYTE, "ItemAppearanceModifierID" }, { false, FT_SHORT, "ItemAppearanceID" }, { false, FT_BYTE, "OrderIndex" }, @@ -2522,9 +2616,9 @@ struct ItemPriceBaseLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_SHORT, "ItemLevel" }, { false, FT_FLOAT, "Armor" }, { false, FT_FLOAT, "Weapon" }, - { false, FT_SHORT, "ItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemPriceBaseMeta::Instance(), HOTFIX_SEL_ITEM_PRICE_BASE); return &loadInfo; @@ -2583,19 +2677,20 @@ struct ItemSearchNameLoadInfo { true, FT_LONG, "AllowableRace" }, { false, FT_STRING, "Display" }, { false, FT_INT, "ID" }, - { true, FT_INT, "Flags1" }, - { true, FT_INT, "Flags2" }, - { true, FT_INT, "Flags3" }, - { false, FT_SHORT, "ItemLevel" }, { false, FT_BYTE, "OverallQualityID" }, { false, FT_BYTE, "ExpansionID" }, - { true, FT_BYTE, "RequiredLevel" }, { false, FT_SHORT, "MinFactionID" }, { false, FT_BYTE, "MinReputation" }, { true, FT_INT, "AllowableClass" }, + { true, FT_BYTE, "RequiredLevel" }, { false, FT_SHORT, "RequiredSkill" }, { false, FT_SHORT, "RequiredSkillRank" }, { false, FT_INT, "RequiredAbility" }, + { false, FT_SHORT, "ItemLevel" }, + { true, FT_INT, "Flags1" }, + { true, FT_INT, "Flags2" }, + { true, FT_INT, "Flags3" }, + { true, FT_INT, "Flags4" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemSearchNameMeta::Instance(), HOTFIX_SEL_ITEM_SEARCH_NAME); return &loadInfo; @@ -2610,6 +2705,9 @@ struct ItemSetLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, + { false, FT_INT, "SetFlags" }, + { false, FT_INT, "RequiredSkill" }, + { false, FT_SHORT, "RequiredSkillRank" }, { false, FT_INT, "ItemID1" }, { false, FT_INT, "ItemID2" }, { false, FT_INT, "ItemID3" }, @@ -2627,9 +2725,6 @@ struct ItemSetLoadInfo { false, FT_INT, "ItemID15" }, { false, FT_INT, "ItemID16" }, { false, FT_INT, "ItemID17" }, - { false, FT_SHORT, "RequiredSkillRank" }, - { false, FT_INT, "RequiredSkill" }, - { false, FT_INT, "SetFlags" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemSetMeta::Instance(), HOTFIX_SEL_ITEM_SET); return &loadInfo; @@ -2643,8 +2738,8 @@ struct ItemSetSpellLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "SpellID" }, { false, FT_SHORT, "ChrSpecID" }, + { false, FT_INT, "SpellID" }, { false, FT_BYTE, "Threshold" }, { false, FT_SHORT, "ItemSetID" }, }; @@ -2661,33 +2756,16 @@ struct ItemSparseLoadInfo { { false, FT_INT, "ID" }, { true, FT_LONG, "AllowableRace" }, - { false, FT_STRING, "Display" }, - { false, FT_STRING, "Display1" }, - { false, FT_STRING, "Display2" }, - { false, FT_STRING, "Display3" }, { false, FT_STRING, "Description" }, - { true, FT_INT, "Flags1" }, - { true, FT_INT, "Flags2" }, - { true, FT_INT, "Flags3" }, - { true, FT_INT, "Flags4" }, - { false, FT_FLOAT, "PriceRandomValue" }, - { false, FT_FLOAT, "PriceVariance" }, - { false, FT_INT, "VendorStackCount" }, - { false, FT_INT, "BuyPrice" }, - { false, FT_INT, "SellPrice" }, - { false, FT_INT, "RequiredAbility" }, - { true, FT_INT, "MaxCount" }, - { true, FT_INT, "Stackable" }, - { true, FT_INT, "StatPercentEditor1" }, - { true, FT_INT, "StatPercentEditor2" }, - { true, FT_INT, "StatPercentEditor3" }, - { true, FT_INT, "StatPercentEditor4" }, - { true, FT_INT, "StatPercentEditor5" }, - { true, FT_INT, "StatPercentEditor6" }, - { true, FT_INT, "StatPercentEditor7" }, - { true, FT_INT, "StatPercentEditor8" }, - { true, FT_INT, "StatPercentEditor9" }, - { true, FT_INT, "StatPercentEditor10" }, + { false, FT_STRING, "Display3" }, + { false, FT_STRING, "Display2" }, + { false, FT_STRING, "Display1" }, + { false, FT_STRING, "Display" }, + { false, FT_FLOAT, "DmgVariance" }, + { false, FT_INT, "DurationInInventory" }, + { false, FT_FLOAT, "QualityModifier" }, + { false, FT_INT, "BagFamily" }, + { false, FT_FLOAT, "ItemRange" }, { false, FT_FLOAT, "StatPercentageOfSocket1" }, { false, FT_FLOAT, "StatPercentageOfSocket2" }, { false, FT_FLOAT, "StatPercentageOfSocket3" }, @@ -2698,50 +2776,64 @@ struct ItemSparseLoadInfo { false, FT_FLOAT, "StatPercentageOfSocket8" }, { false, FT_FLOAT, "StatPercentageOfSocket9" }, { false, FT_FLOAT, "StatPercentageOfSocket10" }, - { false, FT_FLOAT, "ItemRange" }, - { false, FT_INT, "BagFamily" }, - { false, FT_FLOAT, "QualityModifier" }, - { false, FT_INT, "DurationInInventory" }, - { false, FT_FLOAT, "DmgVariance" }, - { true, FT_SHORT, "AllowableClass" }, - { false, FT_SHORT, "ItemLevel" }, - { false, FT_SHORT, "RequiredSkill" }, - { false, FT_SHORT, "RequiredSkillRank" }, - { false, FT_SHORT, "MinFactionID" }, - { true, FT_SHORT, "ItemStatValue1" }, - { true, FT_SHORT, "ItemStatValue2" }, - { true, FT_SHORT, "ItemStatValue3" }, - { true, FT_SHORT, "ItemStatValue4" }, - { true, FT_SHORT, "ItemStatValue5" }, - { true, FT_SHORT, "ItemStatValue6" }, - { true, FT_SHORT, "ItemStatValue7" }, - { true, FT_SHORT, "ItemStatValue8" }, - { true, FT_SHORT, "ItemStatValue9" }, - { true, FT_SHORT, "ItemStatValue10" }, - { false, FT_SHORT, "ScalingStatDistributionID" }, - { false, FT_SHORT, "ItemDelay" }, - { false, FT_SHORT, "PageID" }, - { false, FT_SHORT, "StartQuestID" }, - { false, FT_SHORT, "LockID" }, - { false, FT_SHORT, "RandomSelect" }, - { false, FT_SHORT, "ItemRandomSuffixGroupID" }, - { false, FT_SHORT, "ItemSet" }, - { false, FT_SHORT, "ZoneBound" }, - { false, FT_SHORT, "InstanceBound" }, - { false, FT_SHORT, "TotemCategoryID" }, - { false, FT_SHORT, "SocketMatchEnchantmentId" }, - { false, FT_SHORT, "GemProperties" }, - { false, FT_SHORT, "LimitCategory" }, - { false, FT_SHORT, "RequiredHoliday" }, - { false, FT_SHORT, "RequiredTransmogHoliday" }, + { true, FT_INT, "StatPercentEditor1" }, + { true, FT_INT, "StatPercentEditor2" }, + { true, FT_INT, "StatPercentEditor3" }, + { true, FT_INT, "StatPercentEditor4" }, + { true, FT_INT, "StatPercentEditor5" }, + { true, FT_INT, "StatPercentEditor6" }, + { true, FT_INT, "StatPercentEditor7" }, + { true, FT_INT, "StatPercentEditor8" }, + { true, FT_INT, "StatPercentEditor9" }, + { true, FT_INT, "StatPercentEditor10" }, + { true, FT_INT, "Stackable" }, + { true, FT_INT, "MaxCount" }, + { false, FT_INT, "RequiredAbility" }, + { false, FT_INT, "SellPrice" }, + { false, FT_INT, "BuyPrice" }, + { false, FT_INT, "VendorStackCount" }, + { false, FT_FLOAT, "PriceVariance" }, + { false, FT_FLOAT, "PriceRandomValue" }, + { true, FT_INT, "Flags1" }, + { true, FT_INT, "Flags2" }, + { true, FT_INT, "Flags3" }, + { true, FT_INT, "Flags4" }, + { true, FT_INT, "FactionRelated" }, { false, FT_SHORT, "ItemNameDescriptionID" }, - { false, FT_BYTE, "OverallQualityID" }, - { false, FT_BYTE, "InventoryType" }, - { true, FT_BYTE, "RequiredLevel" }, - { false, FT_BYTE, "RequiredPVPRank" }, - { false, FT_BYTE, "RequiredPVPMedal" }, - { false, FT_BYTE, "MinReputation" }, - { false, FT_BYTE, "ContainerSlots" }, + { false, FT_SHORT, "RequiredTransmogHoliday" }, + { false, FT_SHORT, "RequiredHoliday" }, + { false, FT_SHORT, "LimitCategory" }, + { false, FT_SHORT, "GemProperties" }, + { false, FT_SHORT, "SocketMatchEnchantmentId" }, + { false, FT_SHORT, "TotemCategoryID" }, + { false, FT_SHORT, "InstanceBound" }, + { false, FT_SHORT, "ZoneBound" }, + { false, FT_SHORT, "ItemSet" }, + { false, FT_SHORT, "ItemRandomSuffixGroupID" }, + { false, FT_SHORT, "RandomSelect" }, + { false, FT_SHORT, "LockID" }, + { false, FT_SHORT, "StartQuestID" }, + { false, FT_SHORT, "PageID" }, + { false, FT_SHORT, "ItemDelay" }, + { false, FT_SHORT, "ScalingStatDistributionID" }, + { false, FT_SHORT, "MinFactionID" }, + { false, FT_SHORT, "RequiredSkillRank" }, + { false, FT_SHORT, "RequiredSkill" }, + { false, FT_SHORT, "ItemLevel" }, + { true, FT_SHORT, "AllowableClass" }, + { false, FT_BYTE, "ExpansionID" }, + { false, FT_BYTE, "ArtifactID" }, + { false, FT_BYTE, "SpellWeight" }, + { false, FT_BYTE, "SpellWeightCategory" }, + { false, FT_BYTE, "SocketType1" }, + { false, FT_BYTE, "SocketType2" }, + { false, FT_BYTE, "SocketType3" }, + { false, FT_BYTE, "SheatheType" }, + { false, FT_BYTE, "Material" }, + { false, FT_BYTE, "PageMaterialID" }, + { false, FT_BYTE, "LanguageID" }, + { false, FT_BYTE, "Bonding" }, + { false, FT_BYTE, "DamageDamageType" }, { true, FT_BYTE, "StatModifierBonusStat1" }, { true, FT_BYTE, "StatModifierBonusStat2" }, { true, FT_BYTE, "StatModifierBonusStat3" }, @@ -2752,19 +2844,13 @@ struct ItemSparseLoadInfo { true, FT_BYTE, "StatModifierBonusStat8" }, { true, FT_BYTE, "StatModifierBonusStat9" }, { true, FT_BYTE, "StatModifierBonusStat10" }, - { false, FT_BYTE, "DamageDamageType" }, - { false, FT_BYTE, "Bonding" }, - { false, FT_BYTE, "LanguageID" }, - { false, FT_BYTE, "PageMaterialID" }, - { false, FT_BYTE, "Material" }, - { false, FT_BYTE, "SheatheType" }, - { false, FT_BYTE, "SocketType1" }, - { false, FT_BYTE, "SocketType2" }, - { false, FT_BYTE, "SocketType3" }, - { false, FT_BYTE, "SpellWeightCategory" }, - { false, FT_BYTE, "SpellWeight" }, - { false, FT_BYTE, "ArtifactID" }, - { false, FT_BYTE, "ExpansionID" }, + { false, FT_BYTE, "ContainerSlots" }, + { false, FT_BYTE, "MinReputation" }, + { false, FT_BYTE, "RequiredPVPMedal" }, + { false, FT_BYTE, "RequiredPVPRank" }, + { true, FT_BYTE, "RequiredLevel" }, + { false, FT_BYTE, "InventoryType" }, + { false, FT_BYTE, "OverallQualityID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemSparseMeta::Instance(), HOTFIX_SEL_ITEM_SPARSE); return &loadInfo; @@ -2778,12 +2864,12 @@ struct ItemSpecLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_SHORT, "SpecializationID" }, { false, FT_BYTE, "MinLevel" }, { false, FT_BYTE, "MaxLevel" }, { false, FT_BYTE, "ItemType" }, { false, FT_BYTE, "PrimaryStat" }, { false, FT_BYTE, "SecondaryStat" }, + { false, FT_SHORT, "SpecializationID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemSpecMeta::Instance(), HOTFIX_SEL_ITEM_SPEC); return &loadInfo; @@ -2812,11 +2898,11 @@ struct ItemUpgradeLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "CurrencyAmount" }, - { false, FT_SHORT, "PrerequisiteID" }, - { false, FT_SHORT, "CurrencyType" }, { false, FT_BYTE, "ItemUpgradePathID" }, { false, FT_BYTE, "ItemLevelIncrement" }, + { false, FT_SHORT, "PrerequisiteID" }, + { false, FT_SHORT, "CurrencyType" }, + { false, FT_INT, "CurrencyAmount" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemUpgradeMeta::Instance(), HOTFIX_SEL_ITEM_UPGRADE); return &loadInfo; @@ -2892,37 +2978,38 @@ struct LfgDungeonsLoadInfo { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, { false, FT_STRING, "Description" }, - { true, FT_INT, "Flags" }, - { false, FT_FLOAT, "MinGear" }, - { false, FT_SHORT, "MaxLevel" }, - { false, FT_SHORT, "TargetLevelMax" }, - { true, FT_SHORT, "MapID" }, - { false, FT_SHORT, "RandomID" }, - { false, FT_SHORT, "ScenarioID" }, - { false, FT_SHORT, "FinalEncounterID" }, - { false, FT_SHORT, "BonusReputationAmount" }, - { false, FT_SHORT, "MentorItemLevel" }, - { false, FT_SHORT, "RequiredPlayerConditionId" }, { false, FT_BYTE, "MinLevel" }, - { false, FT_BYTE, "TargetLevel" }, - { false, FT_BYTE, "TargetLevelMin" }, - { false, FT_BYTE, "DifficultyID" }, + { false, FT_SHORT, "MaxLevel" }, { false, FT_BYTE, "TypeID" }, + { false, FT_BYTE, "Subtype" }, { true, FT_BYTE, "Faction" }, + { true, FT_INT, "IconTextureFileID" }, + { true, FT_INT, "RewardsBgTextureFileID" }, + { true, FT_INT, "PopupBgTextureFileID" }, { false, FT_BYTE, "ExpansionLevel" }, - { false, FT_BYTE, "OrderIndex" }, + { true, FT_SHORT, "MapID" }, + { false, FT_BYTE, "DifficultyID" }, + { false, FT_FLOAT, "MinGear" }, { false, FT_BYTE, "GroupID" }, + { false, FT_BYTE, "OrderIndex" }, + { false, FT_INT, "RequiredPlayerConditionId" }, + { false, FT_BYTE, "TargetLevel" }, + { false, FT_BYTE, "TargetLevelMin" }, + { false, FT_SHORT, "TargetLevelMax" }, + { false, FT_SHORT, "RandomID" }, + { false, FT_SHORT, "ScenarioID" }, + { false, FT_SHORT, "FinalEncounterID" }, { false, FT_BYTE, "CountTank" }, { false, FT_BYTE, "CountHealer" }, { false, FT_BYTE, "CountDamage" }, { false, FT_BYTE, "MinCountTank" }, { false, FT_BYTE, "MinCountHealer" }, { false, FT_BYTE, "MinCountDamage" }, - { false, FT_BYTE, "Subtype" }, + { false, FT_SHORT, "BonusReputationAmount" }, + { false, FT_SHORT, "MentorItemLevel" }, { false, FT_BYTE, "MentorCharLevel" }, - { true, FT_INT, "IconTextureFileID" }, - { true, FT_INT, "RewardsBgTextureFileID" }, - { true, FT_INT, "PopupBgTextureFileID" }, + { true, FT_INT, "Flags1" }, + { true, FT_INT, "Flags2" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, LFGDungeonsMeta::Instance(), HOTFIX_SEL_LFG_DUNGEONS); return &loadInfo; @@ -2970,12 +3057,26 @@ struct LiquidTypeLoadInfo { false, FT_STRING_NOT_LOCALIZED, "Texture4" }, { false, FT_STRING_NOT_LOCALIZED, "Texture5" }, { false, FT_STRING_NOT_LOCALIZED, "Texture6" }, + { false, FT_SHORT, "Flags" }, + { false, FT_BYTE, "SoundBank" }, + { false, FT_INT, "SoundID" }, { false, FT_INT, "SpellID" }, { false, FT_FLOAT, "MaxDarkenDepth" }, { false, FT_FLOAT, "FogDarkenIntensity" }, { false, FT_FLOAT, "AmbDarkenIntensity" }, { false, FT_FLOAT, "DirDarkenIntensity" }, + { false, FT_SHORT, "LightID" }, { false, FT_FLOAT, "ParticleScale" }, + { false, FT_BYTE, "ParticleMovement" }, + { false, FT_BYTE, "ParticleTexSlots" }, + { false, FT_BYTE, "MaterialID" }, + { true, FT_INT, "MinimapStaticCol" }, + { false, FT_BYTE, "FrameCountTexture1" }, + { false, FT_BYTE, "FrameCountTexture2" }, + { false, FT_BYTE, "FrameCountTexture3" }, + { false, FT_BYTE, "FrameCountTexture4" }, + { false, FT_BYTE, "FrameCountTexture5" }, + { false, FT_BYTE, "FrameCountTexture6" }, { true, FT_INT, "Color1" }, { true, FT_INT, "Color2" }, { false, FT_FLOAT, "Float1" }, @@ -3000,19 +3101,10 @@ struct LiquidTypeLoadInfo { false, FT_INT, "Int2" }, { false, FT_INT, "Int3" }, { false, FT_INT, "Int4" }, - { false, FT_SHORT, "Flags" }, - { false, FT_SHORT, "LightID" }, - { false, FT_BYTE, "SoundBank" }, - { false, FT_BYTE, "ParticleMovement" }, - { false, FT_BYTE, "ParticleTexSlots" }, - { false, FT_BYTE, "MaterialID" }, - { false, FT_BYTE, "FrameCountTexture1" }, - { false, FT_BYTE, "FrameCountTexture2" }, - { false, FT_BYTE, "FrameCountTexture3" }, - { false, FT_BYTE, "FrameCountTexture4" }, - { false, FT_BYTE, "FrameCountTexture5" }, - { false, FT_BYTE, "FrameCountTexture6" }, - { false, FT_INT, "SoundID" }, + { false, FT_FLOAT, "Coefficient1" }, + { false, FT_FLOAT, "Coefficient2" }, + { false, FT_FLOAT, "Coefficient3" }, + { false, FT_FLOAT, "Coefficient4" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, LiquidTypeMeta::Instance(), HOTFIX_SEL_LIQUID_TYPE); return &loadInfo; @@ -3091,23 +3183,24 @@ struct MapLoadInfo { false, FT_STRING, "MapDescription1" }, { false, FT_STRING, "PvpShortDescription" }, { false, FT_STRING, "PvpLongDescription" }, - { true, FT_INT, "Flags1" }, - { true, FT_INT, "Flags2" }, - { false, FT_FLOAT, "MinimapIconScale" }, { false, FT_FLOAT, "CorpseX" }, { false, FT_FLOAT, "CorpseY" }, + { false, FT_BYTE, "MapType" }, + { true, FT_BYTE, "InstanceType" }, + { false, FT_BYTE, "ExpansionID" }, { false, FT_SHORT, "AreaTableID" }, { true, FT_SHORT, "LoadingScreenID" }, - { true, FT_SHORT, "CorpseMapID" }, { true, FT_SHORT, "TimeOfDayOverride" }, { true, FT_SHORT, "ParentMapID" }, { true, FT_SHORT, "CosmeticParentMapID" }, - { true, FT_SHORT, "WindSettingsID" }, - { false, FT_BYTE, "InstanceType" }, - { false, FT_BYTE, "MapType" }, - { false, FT_BYTE, "ExpansionID" }, - { false, FT_BYTE, "MaxPlayers" }, { false, FT_BYTE, "TimeOffset" }, + { false, FT_FLOAT, "MinimapIconScale" }, + { true, FT_SHORT, "CorpseMapID" }, + { false, FT_BYTE, "MaxPlayers" }, + { true, FT_SHORT, "WindSettingsID" }, + { true, FT_INT, "ZmpFileDataID" }, + { true, FT_INT, "Flags1" }, + { true, FT_INT, "Flags2" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, MapMeta::Instance(), HOTFIX_SEL_MAP); return &loadInfo; @@ -3122,13 +3215,14 @@ struct MapDifficultyLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "Message" }, + { false, FT_INT, "ItemContextPickerID" }, + { true, FT_INT, "ContentTuningID" }, { false, FT_BYTE, "DifficultyID" }, + { false, FT_BYTE, "LockID" }, { false, FT_BYTE, "ResetInterval" }, { false, FT_BYTE, "MaxPlayers" }, - { false, FT_BYTE, "LockID" }, - { false, FT_BYTE, "Flags" }, { false, FT_BYTE, "ItemContext" }, - { false, FT_INT, "ItemContextPickerID" }, + { false, FT_BYTE, "Flags" }, { false, FT_SHORT, "MapID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, MapDifficultyMeta::Instance(), HOTFIX_SEL_MAP_DIFFICULTY); @@ -3143,13 +3237,13 @@ struct ModifierTreeLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "Asset" }, - { true, FT_INT, "SecondaryAsset" }, { false, FT_INT, "Parent" }, - { false, FT_BYTE, "Type" }, - { true, FT_BYTE, "TertiaryAsset" }, { true, FT_BYTE, "Operator" }, { true, FT_BYTE, "Amount" }, + { false, FT_BYTE, "Type" }, + { true, FT_INT, "Asset" }, + { true, FT_INT, "SecondaryAsset" }, + { true, FT_BYTE, "TertiaryAsset" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ModifierTreeMeta::Instance(), HOTFIX_SEL_MODIFIER_TREE); return &loadInfo; @@ -3163,15 +3257,15 @@ struct MountLoadInfo static DB2FieldMeta const fields[] = { { false, FT_STRING, "Name" }, - { false, FT_STRING, "Description" }, { false, FT_STRING, "SourceText" }, - { true, FT_INT, "SourceSpellID" }, - { false, FT_FLOAT, "MountFlyRideHeight" }, + { false, FT_STRING, "Description" }, + { false, FT_INT, "ID" }, { false, FT_SHORT, "MountTypeID" }, { false, FT_SHORT, "Flags" }, { true, FT_BYTE, "SourceTypeEnum" }, - { false, FT_INT, "ID" }, + { true, FT_INT, "SourceSpellID" }, { false, FT_INT, "PlayerConditionID" }, + { false, FT_FLOAT, "MountFlyRideHeight" }, { true, FT_INT, "UiModelSceneID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, MountMeta::Instance(), HOTFIX_SEL_MOUNT); @@ -3185,14 +3279,14 @@ struct MountCapabilityLoadInfo { static DB2FieldMeta const fields[] = { - { true, FT_INT, "ReqSpellKnownID" }, - { true, FT_INT, "ModSpellAuraID" }, + { false, FT_INT, "ID" }, + { false, FT_BYTE, "Flags" }, { false, FT_SHORT, "ReqRidingSkill" }, { false, FT_SHORT, "ReqAreaID" }, - { true, FT_SHORT, "ReqMapID" }, - { false, FT_BYTE, "Flags" }, - { false, FT_INT, "ID" }, { false, FT_INT, "ReqSpellAuraID" }, + { true, FT_INT, "ReqSpellKnownID" }, + { true, FT_INT, "ModSpellAuraID" }, + { true, FT_SHORT, "ReqMapID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, MountCapabilityMeta::Instance(), HOTFIX_SEL_MOUNT_CAPABILITY); return &loadInfo; @@ -3238,10 +3332,10 @@ struct MovieLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "AudioFileDataID" }, - { false, FT_INT, "SubtitleFileDataID" }, { false, FT_BYTE, "Volume" }, { false, FT_BYTE, "KeyID" }, + { false, FT_INT, "AudioFileDataID" }, + { false, FT_INT, "SubtitleFileDataID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, MovieMeta::Instance(), HOTFIX_SEL_MOVIE); return &loadInfo; @@ -3308,6 +3402,22 @@ struct NamesReservedLocaleLoadInfo } }; +struct NumTalentsAtLevelLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_INT, "ID" }, + { true, FT_INT, "NumTalents" }, + { true, FT_INT, "NumTalentsDeathKnight" }, + { true, FT_INT, "NumTalentsDemonHunter" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, NumTalentsAtLevelMeta::Instance(), HOTFIX_SEL_NUM_TALENTS_AT_LEVEL); + return &loadInfo; + } +}; + struct OverrideSpellDataLoadInfo { static DB2LoadInfo const* Instance() @@ -3371,12 +3481,9 @@ struct PlayerConditionLoadInfo { true, FT_LONG, "RaceMask" }, { false, FT_STRING, "FailureDescription" }, { false, FT_INT, "ID" }, - { false, FT_BYTE, "Flags" }, { false, FT_SHORT, "MinLevel" }, { false, FT_SHORT, "MaxLevel" }, { true, FT_INT, "ClassMask" }, - { true, FT_BYTE, "Gender" }, - { true, FT_BYTE, "NativeGender" }, { false, FT_INT, "SkillLogic" }, { false, FT_BYTE, "LanguageID" }, { false, FT_BYTE, "MinLanguage" }, @@ -3385,8 +3492,6 @@ struct PlayerConditionLoadInfo { false, FT_BYTE, "MaxReputation" }, { false, FT_INT, "ReputationLogic" }, { true, FT_BYTE, "CurrentPvpFaction" }, - { false, FT_BYTE, "MinPVPRank" }, - { false, FT_BYTE, "MaxPVPRank" }, { false, FT_BYTE, "PvpMedal" }, { false, FT_INT, "PrevQuestLogic" }, { false, FT_INT, "CurrQuestLogic" }, @@ -3400,31 +3505,36 @@ struct PlayerConditionLoadInfo { false, FT_BYTE, "PartyStatus" }, { false, FT_BYTE, "LifetimeMaxPVPRank" }, { false, FT_INT, "AchievementLogic" }, - { false, FT_INT, "LfgLogic" }, + { true, FT_BYTE, "Gender" }, + { true, FT_BYTE, "NativeGender" }, { false, FT_INT, "AreaLogic" }, + { false, FT_INT, "LfgLogic" }, { false, FT_INT, "CurrencyLogic" }, { false, FT_SHORT, "QuestKillID" }, { false, FT_INT, "QuestKillLogic" }, { true, FT_BYTE, "MinExpansionLevel" }, { true, FT_BYTE, "MaxExpansionLevel" }, - { true, FT_BYTE, "MinExpansionTier" }, - { true, FT_BYTE, "MaxExpansionTier" }, - { false, FT_BYTE, "MinGuildLevel" }, - { false, FT_BYTE, "MaxGuildLevel" }, - { false, FT_BYTE, "PhaseUseFlags" }, - { false, FT_SHORT, "PhaseID" }, - { false, FT_INT, "PhaseGroupID" }, { true, FT_INT, "MinAvgItemLevel" }, { true, FT_INT, "MaxAvgItemLevel" }, { false, FT_SHORT, "MinAvgEquippedItemLevel" }, { false, FT_SHORT, "MaxAvgEquippedItemLevel" }, + { false, FT_BYTE, "PhaseUseFlags" }, + { false, FT_SHORT, "PhaseID" }, + { false, FT_INT, "PhaseGroupID" }, + { false, FT_BYTE, "Flags" }, { true, FT_BYTE, "ChrSpecializationIndex" }, { true, FT_BYTE, "ChrSpecializationRole" }, + { false, FT_INT, "ModifierTreeID" }, { true, FT_BYTE, "PowerType" }, { false, FT_BYTE, "PowerTypeComp" }, { false, FT_BYTE, "PowerTypeValue" }, - { false, FT_INT, "ModifierTreeID" }, { true, FT_INT, "WeaponSubclassMask" }, + { false, FT_BYTE, "MaxGuildLevel" }, + { false, FT_BYTE, "MinGuildLevel" }, + { true, FT_BYTE, "MaxExpansionTier" }, + { true, FT_BYTE, "MinExpansionTier" }, + { false, FT_BYTE, "MinPVPRank" }, + { false, FT_BYTE, "MaxPVPRank" }, { false, FT_SHORT, "SkillID1" }, { false, FT_SHORT, "SkillID2" }, { false, FT_SHORT, "SkillID3" }, @@ -3483,6 +3593,10 @@ struct PlayerConditionLoadInfo { false, FT_SHORT, "Achievement2" }, { false, FT_SHORT, "Achievement3" }, { false, FT_SHORT, "Achievement4" }, + { false, FT_SHORT, "AreaID1" }, + { false, FT_SHORT, "AreaID2" }, + { false, FT_SHORT, "AreaID3" }, + { false, FT_SHORT, "AreaID4" }, { false, FT_BYTE, "LfgStatus1" }, { false, FT_BYTE, "LfgStatus2" }, { false, FT_BYTE, "LfgStatus3" }, @@ -3495,10 +3609,6 @@ struct PlayerConditionLoadInfo { false, FT_INT, "LfgValue2" }, { false, FT_INT, "LfgValue3" }, { false, FT_INT, "LfgValue4" }, - { false, FT_SHORT, "AreaID1" }, - { false, FT_SHORT, "AreaID2" }, - { false, FT_SHORT, "AreaID3" }, - { false, FT_SHORT, "AreaID4" }, { false, FT_INT, "CurrencyID1" }, { false, FT_INT, "CurrencyID2" }, { false, FT_INT, "CurrencyID3" }, @@ -3548,16 +3658,16 @@ struct PowerTypeLoadInfo { false, FT_INT, "ID" }, { false, FT_STRING_NOT_LOCALIZED, "NameGlobalStringTag" }, { false, FT_STRING_NOT_LOCALIZED, "CostGlobalStringTag" }, - { false, FT_FLOAT, "RegenPeace" }, - { false, FT_FLOAT, "RegenCombat" }, - { true, FT_SHORT, "MaxBasePower" }, - { true, FT_SHORT, "RegenInterruptTimeMS" }, - { true, FT_SHORT, "Flags" }, { true, FT_BYTE, "PowerTypeEnum" }, { true, FT_BYTE, "MinPower" }, + { true, FT_SHORT, "MaxBasePower" }, { true, FT_BYTE, "CenterPower" }, { true, FT_BYTE, "DefaultPower" }, { true, FT_BYTE, "DisplayModifier" }, + { true, FT_SHORT, "RegenInterruptTimeMS" }, + { false, FT_FLOAT, "RegenPeace" }, + { false, FT_FLOAT, "RegenCombat" }, + { true, FT_SHORT, "Flags" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, PowerTypeMeta::Instance(), HOTFIX_SEL_POWER_TYPE); return &loadInfo; @@ -3572,9 +3682,10 @@ struct PrestigeLevelInfoLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, + { true, FT_INT, "PrestigeLevel" }, { true, FT_INT, "BadgeTextureFileDataID" }, - { false, FT_BYTE, "PrestigeLevel" }, { false, FT_BYTE, "Flags" }, + { true, FT_INT, "AwardedAchievementID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, PrestigeLevelInfoMeta::Instance(), HOTFIX_SEL_PRESTIGE_LEVEL_INFO); return &loadInfo; @@ -3613,57 +3724,54 @@ struct PvpItemLoadInfo } }; -struct PvpRewardLoadInfo +struct PvpTalentLoadInfo { static DB2LoadInfo const* Instance() { static DB2FieldMeta const fields[] = { + { false, FT_STRING, "Description" }, { false, FT_INT, "ID" }, - { true, FT_INT, "HonorLevel" }, - { true, FT_INT, "PrestigeLevel" }, - { true, FT_INT, "RewardPackID" }, + { true, FT_INT, "SpecID" }, + { true, FT_INT, "SpellID" }, + { true, FT_INT, "OverridesSpellID" }, + { true, FT_INT, "Flags" }, + { true, FT_INT, "ActionBarSpellID" }, + { true, FT_INT, "PvpTalentCategoryID" }, + { true, FT_INT, "LevelRequired" }, }; - static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, PvpRewardMeta::Instance(), HOTFIX_SEL_PVP_REWARD); + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, PvpTalentMeta::Instance(), HOTFIX_SEL_PVP_TALENT); return &loadInfo; } }; -struct PvpTalentLoadInfo +struct PvpTalentCategoryLoadInfo { static DB2LoadInfo const* Instance() { static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_STRING, "Description" }, - { true, FT_INT, "SpellID" }, - { true, FT_INT, "OverridesSpellID" }, - { true, FT_INT, "ActionBarSpellID" }, - { true, FT_INT, "TierID" }, - { true, FT_INT, "ColumnIndex" }, - { true, FT_INT, "Flags" }, - { true, FT_INT, "ClassID" }, - { true, FT_INT, "SpecID" }, - { true, FT_INT, "Role" }, + { false, FT_BYTE, "TalentSlotMask" }, }; - static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, PvpTalentMeta::Instance(), HOTFIX_SEL_PVP_TALENT); + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, PvpTalentCategoryMeta::Instance(), HOTFIX_SEL_PVP_TALENT_CATEGORY); return &loadInfo; } }; -struct PvpTalentUnlockLoadInfo +struct PvpTalentSlotUnlockLoadInfo { static DB2LoadInfo const* Instance() { static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "TierID" }, - { true, FT_INT, "ColumnIndex" }, - { true, FT_INT, "HonorLevel" }, + { true, FT_BYTE, "Slot" }, + { true, FT_INT, "LevelRequired" }, + { true, FT_INT, "DeathKnightLevelRequired" }, + { true, FT_INT, "DemonHunterLevelRequired" }, }; - static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, PvpTalentUnlockMeta::Instance(), HOTFIX_SEL_PVP_TALENT_UNLOCK); + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, PvpTalentSlotUnlockMeta::Instance(), HOTFIX_SEL_PVP_TALENT_SLOT_UNLOCK); return &loadInfo; } }; @@ -3721,10 +3829,10 @@ struct QuestPackageItemLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "ItemID" }, { false, FT_SHORT, "PackageID" }, - { false, FT_BYTE, "DisplayType" }, + { true, FT_INT, "ItemID" }, { false, FT_INT, "ItemQuantity" }, + { false, FT_BYTE, "DisplayType" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, QuestPackageItemMeta::Instance(), HOTFIX_SEL_QUEST_PACKAGE_ITEM); return &loadInfo; @@ -3790,6 +3898,7 @@ struct RandPropPointsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { true, FT_INT, "DamageReplaceStat" }, { false, FT_INT, "Epic1" }, { false, FT_INT, "Epic2" }, { false, FT_INT, "Epic3" }, @@ -3818,11 +3927,11 @@ struct RewardPackLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { true, FT_INT, "CharTitleID" }, { false, FT_INT, "Money" }, - { false, FT_FLOAT, "ArtifactXPMultiplier" }, { true, FT_BYTE, "ArtifactXPDifficulty" }, + { false, FT_FLOAT, "ArtifactXPMultiplier" }, { false, FT_BYTE, "ArtifactXPCategoryID" }, - { true, FT_INT, "CharTitleID" }, { false, FT_INT, "TreasurePickerID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, RewardPackMeta::Instance(), HOTFIX_SEL_REWARD_PACK); @@ -3877,22 +3986,6 @@ struct RulesetItemUpgradeLoadInfo } }; -struct SandboxScalingLoadInfo -{ - static DB2LoadInfo const* Instance() - { - static DB2FieldMeta const fields[] = - { - { false, FT_INT, "ID" }, - { true, FT_INT, "MinLevel" }, - { true, FT_INT, "MaxLevel" }, - { true, FT_INT, "Flags" }, - }; - static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SandboxScalingMeta::Instance(), HOTFIX_SEL_SANDBOX_SCALING); - return &loadInfo; - } -}; - struct ScalingStatDistributionLoadInfo { static DB2LoadInfo const* Instance() @@ -3918,8 +4011,9 @@ struct ScenarioLoadInfo { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, { false, FT_SHORT, "AreaTableID" }, - { false, FT_BYTE, "Flags" }, { false, FT_BYTE, "Type" }, + { false, FT_BYTE, "Flags" }, + { false, FT_INT, "UiTextureKitID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ScenarioMeta::Instance(), HOTFIX_SEL_SCENARIO); return &loadInfo; @@ -3936,12 +4030,14 @@ struct ScenarioStepLoadInfo { false, FT_STRING, "Description" }, { false, FT_STRING, "Title" }, { false, FT_SHORT, "ScenarioID" }, - { false, FT_SHORT, "Supersedes" }, + { false, FT_INT, "Criteriatreeid" }, { false, FT_SHORT, "RewardQuestID" }, + { true, FT_INT, "RelatedStep" }, + { false, FT_SHORT, "Supersedes" }, { false, FT_BYTE, "OrderIndex" }, { false, FT_BYTE, "Flags" }, - { false, FT_INT, "Criteriatreeid" }, - { true, FT_INT, "RelatedStep" }, + { false, FT_INT, "VisibilityPlayerConditionID" }, + { false, FT_SHORT, "WidgetSetID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ScenarioStepMeta::Instance(), HOTFIX_SEL_SCENARIO_STEP); return &loadInfo; @@ -4013,15 +4109,19 @@ struct SkillLineLoadInfo { static DB2FieldMeta const fields[] = { - { false, FT_INT, "ID" }, { false, FT_STRING, "DisplayName" }, - { false, FT_STRING, "Description" }, { false, FT_STRING, "AlternateVerb" }, - { false, FT_SHORT, "Flags" }, + { false, FT_STRING, "Description" }, + { false, FT_STRING, "HordeDisplayName" }, + { false, FT_STRING_NOT_LOCALIZED, "OverrideSourceInfoDisplayName" }, + { false, FT_INT, "ID" }, { true, FT_BYTE, "CategoryID" }, - { true, FT_BYTE, "CanLink" }, { true, FT_INT, "SpellIconFileID" }, + { true, FT_BYTE, "CanLink" }, { false, FT_INT, "ParentSkillLineID" }, + { true, FT_INT, "ParentTierIndex" }, + { false, FT_SHORT, "Flags" }, + { true, FT_INT, "SpellBookSpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SkillLineMeta::Instance(), HOTFIX_SEL_SKILL_LINE); return &loadInfo; @@ -4036,18 +4136,19 @@ struct SkillLineAbilityLoadInfo { { true, FT_LONG, "RaceMask" }, { false, FT_INT, "ID" }, + { true, FT_SHORT, "SkillLine" }, { true, FT_INT, "Spell" }, + { true, FT_SHORT, "MinSkillLineRank" }, + { true, FT_INT, "ClassMask" }, { true, FT_INT, "SupercedesSpell" }, - { true, FT_SHORT, "SkillLine" }, + { true, FT_BYTE, "AcquireMethod" }, { true, FT_SHORT, "TrivialSkillLineRankHigh" }, { true, FT_SHORT, "TrivialSkillLineRankLow" }, + { true, FT_BYTE, "Flags" }, + { true, FT_BYTE, "NumSkillUps" }, { true, FT_SHORT, "UniqueBit" }, { true, FT_SHORT, "TradeSkillCategoryID" }, - { true, FT_BYTE, "NumSkillUps" }, - { true, FT_INT, "ClassMask" }, - { true, FT_SHORT, "MinSkillLineRank" }, - { true, FT_BYTE, "AcquireMethod" }, - { true, FT_BYTE, "Flags" }, + { true, FT_SHORT, "SkillupSkillLineID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SkillLineAbilityMeta::Instance(), HOTFIX_SEL_SKILL_LINE_ABILITY); return &loadInfo; @@ -4063,11 +4164,11 @@ struct SkillRaceClassInfoLoadInfo { false, FT_INT, "ID" }, { true, FT_LONG, "RaceMask" }, { true, FT_SHORT, "SkillID" }, + { true, FT_INT, "ClassMask" }, { false, FT_SHORT, "Flags" }, - { true, FT_SHORT, "SkillTierID" }, { true, FT_BYTE, "Availability" }, { true, FT_BYTE, "MinLevel" }, - { true, FT_INT, "ClassMask" }, + { true, FT_SHORT, "SkillTierID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SkillRaceClassInfoMeta::Instance(), HOTFIX_SEL_SKILL_RACE_CLASS_INFO); return &loadInfo; @@ -4081,18 +4182,18 @@ struct SoundKitLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_BYTE, "SoundType" }, { false, FT_FLOAT, "VolumeFloat" }, + { false, FT_SHORT, "Flags" }, { false, FT_FLOAT, "MinDistance" }, { false, FT_FLOAT, "DistanceCutoff" }, - { false, FT_SHORT, "Flags" }, - { false, FT_SHORT, "SoundEntriesAdvancedID" }, - { false, FT_BYTE, "SoundType" }, - { false, FT_BYTE, "DialogType" }, { false, FT_BYTE, "EAXDef" }, + { false, FT_INT, "SoundKitAdvancedID" }, { false, FT_FLOAT, "VolumeVariationPlus" }, { false, FT_FLOAT, "VolumeVariationMinus" }, { false, FT_FLOAT, "PitchVariationPlus" }, { false, FT_FLOAT, "PitchVariationMinus" }, + { true, FT_BYTE, "DialogType" }, { false, FT_FLOAT, "PitchAdjust" }, { false, FT_SHORT, "BusOverwriteID" }, { false, FT_BYTE, "MaxInstances" }, @@ -4109,34 +4210,17 @@ struct SpecializationSpellsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_STRING, "Description" }, + { false, FT_INT, "ID" }, + { false, FT_SHORT, "SpecID" }, { true, FT_INT, "SpellID" }, { true, FT_INT, "OverridesSpellID" }, - { false, FT_SHORT, "SpecID" }, { false, FT_BYTE, "DisplayOrder" }, - { false, FT_INT, "ID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpecializationSpellsMeta::Instance(), HOTFIX_SEL_SPECIALIZATION_SPELLS); return &loadInfo; } }; -struct SpellLoadInfo -{ - static DB2LoadInfo const* Instance() - { - static DB2FieldMeta const fields[] = - { - { false, FT_INT, "ID" }, - { false, FT_STRING, "Name" }, - { false, FT_STRING, "NameSubtext" }, - { false, FT_STRING, "Description" }, - { false, FT_STRING, "AuraDescription" }, - }; - static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellMeta::Instance(), HOTFIX_SEL_SPELL); - return &loadInfo; - } -}; - struct SpellAuraOptionsLoadInfo { static DB2LoadInfo const* Instance() @@ -4144,13 +4228,14 @@ struct SpellAuraOptionsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "ProcCharges" }, - { true, FT_INT, "ProcTypeMask" }, - { true, FT_INT, "ProcCategoryRecovery" }, - { false, FT_SHORT, "CumulativeAura" }, - { false, FT_SHORT, "SpellProcsPerMinuteID" }, { false, FT_BYTE, "DifficultyID" }, + { false, FT_SHORT, "CumulativeAura" }, + { true, FT_INT, "ProcCategoryRecovery" }, { false, FT_BYTE, "ProcChance" }, + { true, FT_INT, "ProcCharges" }, + { false, FT_SHORT, "SpellProcsPerMinuteID" }, + { true, FT_INT, "ProcTypeMask1" }, + { true, FT_INT, "ProcTypeMask2" }, { true, FT_INT, "SpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellAuraOptionsMeta::Instance(), HOTFIX_SEL_SPELL_AURA_OPTIONS); @@ -4165,15 +4250,15 @@ struct SpellAuraRestrictionsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "CasterAuraSpell" }, - { true, FT_INT, "TargetAuraSpell" }, - { true, FT_INT, "ExcludeCasterAuraSpell" }, - { true, FT_INT, "ExcludeTargetAuraSpell" }, { false, FT_BYTE, "DifficultyID" }, { false, FT_BYTE, "CasterAuraState" }, { false, FT_BYTE, "TargetAuraState" }, { false, FT_BYTE, "ExcludeCasterAuraState" }, { false, FT_BYTE, "ExcludeTargetAuraState" }, + { true, FT_INT, "CasterAuraSpell" }, + { true, FT_INT, "TargetAuraSpell" }, + { true, FT_INT, "ExcludeCasterAuraSpell" }, + { true, FT_INT, "ExcludeTargetAuraSpell" }, { true, FT_INT, "SpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellAuraRestrictionsMeta::Instance(), HOTFIX_SEL_SPELL_AURA_RESTRICTIONS); @@ -4189,8 +4274,8 @@ struct SpellCastTimesLoadInfo { { false, FT_INT, "ID" }, { true, FT_INT, "Base" }, - { true, FT_INT, "Minimum" }, { true, FT_SHORT, "PerLevel" }, + { true, FT_INT, "Minimum" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellCastTimesMeta::Instance(), HOTFIX_SEL_SPELL_CAST_TIMES); return &loadInfo; @@ -4205,12 +4290,12 @@ struct SpellCastingRequirementsLoadInfo { { false, FT_INT, "ID" }, { true, FT_INT, "SpellID" }, - { false, FT_SHORT, "MinFactionID" }, - { false, FT_SHORT, "RequiredAreasID" }, - { false, FT_SHORT, "RequiresSpellFocus" }, { false, FT_BYTE, "FacingCasterFlags" }, + { false, FT_SHORT, "MinFactionID" }, { true, FT_BYTE, "MinReputation" }, + { false, FT_SHORT, "RequiredAreasID" }, { false, FT_BYTE, "RequiredAuraVision" }, + { false, FT_SHORT, "RequiresSpellFocus" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellCastingRequirementsMeta::Instance(), HOTFIX_SEL_SPELL_CASTING_REQUIREMENTS); return &loadInfo; @@ -4224,14 +4309,14 @@ struct SpellCategoriesLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_SHORT, "Category" }, - { true, FT_SHORT, "StartRecoveryCategory" }, - { true, FT_SHORT, "ChargeCategory" }, { false, FT_BYTE, "DifficultyID" }, + { true, FT_SHORT, "Category" }, { true, FT_BYTE, "DefenseType" }, { true, FT_BYTE, "DispelType" }, { true, FT_BYTE, "Mechanic" }, { true, FT_BYTE, "PreventionType" }, + { true, FT_SHORT, "StartRecoveryCategory" }, + { true, FT_SHORT, "ChargeCategory" }, { true, FT_INT, "SpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellCategoriesMeta::Instance(), HOTFIX_SEL_SPELL_CATEGORIES); @@ -4247,10 +4332,10 @@ struct SpellCategoryLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, - { true, FT_INT, "ChargeRecoveryTime" }, { true, FT_BYTE, "Flags" }, { false, FT_BYTE, "UsesPerWeek" }, { true, FT_BYTE, "MaxCharges" }, + { true, FT_INT, "ChargeRecoveryTime" }, { true, FT_INT, "TypeMask" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellCategoryMeta::Instance(), HOTFIX_SEL_SPELL_CATEGORY); @@ -4266,12 +4351,12 @@ struct SpellClassOptionsLoadInfo { { false, FT_INT, "ID" }, { true, FT_INT, "SpellID" }, - { false, FT_INT, "SpellClassMask1" }, - { false, FT_INT, "SpellClassMask2" }, - { false, FT_INT, "SpellClassMask3" }, - { false, FT_INT, "SpellClassMask4" }, - { false, FT_BYTE, "SpellClassSet" }, { false, FT_INT, "ModalNextSpell" }, + { false, FT_BYTE, "SpellClassSet" }, + { true, FT_INT, "SpellClassMask1" }, + { true, FT_INT, "SpellClassMask2" }, + { true, FT_INT, "SpellClassMask3" }, + { true, FT_INT, "SpellClassMask4" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellClassOptionsMeta::Instance(), HOTFIX_SEL_SPELL_CLASS_OPTIONS); return &loadInfo; @@ -4285,10 +4370,10 @@ struct SpellCooldownsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_BYTE, "DifficultyID" }, { true, FT_INT, "CategoryRecoveryTime" }, { true, FT_INT, "RecoveryTime" }, { true, FT_INT, "StartRecoveryTime" }, - { false, FT_BYTE, "DifficultyID" }, { true, FT_INT, "SpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellCooldownsMeta::Instance(), HOTFIX_SEL_SPELL_COOLDOWNS); @@ -4304,8 +4389,8 @@ struct SpellDurationLoadInfo { { false, FT_INT, "ID" }, { true, FT_INT, "Duration" }, - { true, FT_INT, "MaxDuration" }, { false, FT_INT, "DurationPerLevel" }, + { true, FT_INT, "MaxDuration" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellDurationMeta::Instance(), HOTFIX_SEL_SPELL_DURATION); return &loadInfo; @@ -4319,40 +4404,39 @@ struct SpellEffectLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "Effect" }, - { true, FT_INT, "EffectBasePoints" }, - { true, FT_INT, "EffectIndex" }, - { true, FT_INT, "EffectAura" }, { true, FT_INT, "DifficultyID" }, + { true, FT_INT, "EffectIndex" }, + { false, FT_INT, "Effect" }, { false, FT_FLOAT, "EffectAmplitude" }, + { true, FT_INT, "EffectAttributes" }, + { true, FT_SHORT, "EffectAura" }, { true, FT_INT, "EffectAuraPeriod" }, { false, FT_FLOAT, "EffectBonusCoefficient" }, { false, FT_FLOAT, "EffectChainAmplitude" }, { true, FT_INT, "EffectChainTargets" }, - { true, FT_INT, "EffectDieSides" }, { true, FT_INT, "EffectItemType" }, { true, FT_INT, "EffectMechanic" }, { false, FT_FLOAT, "EffectPointsPerResource" }, + { false, FT_FLOAT, "EffectPosFacing" }, { false, FT_FLOAT, "EffectRealPointsPerLevel" }, { true, FT_INT, "EffectTriggerSpell" }, - { false, FT_FLOAT, "EffectPosFacing" }, - { true, FT_INT, "EffectAttributes" }, { false, FT_FLOAT, "BonusCoefficientFromAP" }, { false, FT_FLOAT, "PvpMultiplier" }, { false, FT_FLOAT, "Coefficient" }, { false, FT_FLOAT, "Variance" }, { false, FT_FLOAT, "ResourceCoefficient" }, { false, FT_FLOAT, "GroupSizeBasePointsCoefficient" }, - { false, FT_INT, "EffectSpellClassMask1" }, - { false, FT_INT, "EffectSpellClassMask2" }, - { false, FT_INT, "EffectSpellClassMask3" }, - { false, FT_INT, "EffectSpellClassMask4" }, + { false, FT_FLOAT, "EffectBasePoints" }, { true, FT_INT, "EffectMiscValue1" }, { true, FT_INT, "EffectMiscValue2" }, { false, FT_INT, "EffectRadiusIndex1" }, { false, FT_INT, "EffectRadiusIndex2" }, - { false, FT_INT, "ImplicitTarget1" }, - { false, FT_INT, "ImplicitTarget2" }, + { true, FT_INT, "EffectSpellClassMask1" }, + { true, FT_INT, "EffectSpellClassMask2" }, + { true, FT_INT, "EffectSpellClassMask3" }, + { true, FT_INT, "EffectSpellClassMask4" }, + { true, FT_SHORT, "ImplicitTarget1" }, + { true, FT_SHORT, "ImplicitTarget2" }, { true, FT_INT, "SpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellEffectMeta::Instance(), HOTFIX_SEL_SPELL_EFFECT); @@ -4368,9 +4452,9 @@ struct SpellEquippedItemsLoadInfo { { false, FT_INT, "ID" }, { true, FT_INT, "SpellID" }, + { true, FT_BYTE, "EquippedItemClass" }, { true, FT_INT, "EquippedItemInvTypes" }, { true, FT_INT, "EquippedItemSubclass" }, - { true, FT_BYTE, "EquippedItemClass" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellEquippedItemsMeta::Instance(), HOTFIX_SEL_SPELL_EQUIPPED_ITEMS); return &loadInfo; @@ -4419,6 +4503,7 @@ struct SpellItemEnchantmentLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, + { false, FT_STRING, "HordeName" }, { false, FT_INT, "EffectArg1" }, { false, FT_INT, "EffectArg2" }, { false, FT_INT, "EffectArg3" }, @@ -4427,6 +4512,7 @@ struct SpellItemEnchantmentLoadInfo { false, FT_FLOAT, "EffectScalingPoints3" }, { false, FT_INT, "TransmogCost" }, { false, FT_INT, "IconFileDataID" }, + { false, FT_INT, "TransmogPlayerConditionID" }, { true, FT_SHORT, "EffectPointsMin1" }, { true, FT_SHORT, "EffectPointsMin2" }, { true, FT_SHORT, "EffectPointsMin3" }, @@ -4439,12 +4525,11 @@ struct SpellItemEnchantmentLoadInfo { false, FT_BYTE, "Effect1" }, { false, FT_BYTE, "Effect2" }, { false, FT_BYTE, "Effect3" }, + { true, FT_BYTE, "ScalingClass" }, + { true, FT_BYTE, "ScalingClassRestricted" }, { false, FT_BYTE, "ConditionID" }, { false, FT_BYTE, "MinLevel" }, { false, FT_BYTE, "MaxLevel" }, - { true, FT_BYTE, "ScalingClass" }, - { true, FT_BYTE, "ScalingClassRestricted" }, - { false, FT_INT, "TransmogPlayerConditionID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellItemEnchantmentMeta::Instance(), HOTFIX_SEL_SPELL_ITEM_ENCHANTMENT); return &loadInfo; @@ -4458,16 +4543,16 @@ struct SpellItemEnchantmentConditionLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "LtOperand1" }, - { false, FT_INT, "LtOperand2" }, - { false, FT_INT, "LtOperand3" }, - { false, FT_INT, "LtOperand4" }, - { false, FT_INT, "LtOperand5" }, { false, FT_BYTE, "LtOperandType1" }, { false, FT_BYTE, "LtOperandType2" }, { false, FT_BYTE, "LtOperandType3" }, { false, FT_BYTE, "LtOperandType4" }, { false, FT_BYTE, "LtOperandType5" }, + { false, FT_INT, "LtOperand1" }, + { false, FT_INT, "LtOperand2" }, + { false, FT_INT, "LtOperand3" }, + { false, FT_INT, "LtOperand4" }, + { false, FT_INT, "LtOperand5" }, { false, FT_BYTE, "Operator1" }, { false, FT_BYTE, "Operator2" }, { false, FT_BYTE, "Operator3" }, @@ -4517,10 +4602,10 @@ struct SpellLevelsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_BYTE, "DifficultyID" }, { true, FT_SHORT, "BaseLevel" }, { true, FT_SHORT, "MaxLevel" }, { true, FT_SHORT, "SpellLevel" }, - { false, FT_BYTE, "DifficultyID" }, { false, FT_BYTE, "MaxPassiveAuraLevel" }, { true, FT_INT, "SpellID" }, }; @@ -4536,15 +4621,16 @@ struct SpellMiscLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_BYTE, "DifficultyID" }, { false, FT_SHORT, "CastingTimeIndex" }, { false, FT_SHORT, "DurationIndex" }, { false, FT_SHORT, "RangeIndex" }, { false, FT_BYTE, "SchoolMask" }, - { true, FT_INT, "SpellIconFileDataID" }, { false, FT_FLOAT, "Speed" }, - { true, FT_INT, "ActiveIconFileDataID" }, { false, FT_FLOAT, "LaunchDelay" }, - { false, FT_BYTE, "DifficultyID" }, + { false, FT_FLOAT, "MinDuration" }, + { true, FT_INT, "SpellIconFileDataID" }, + { true, FT_INT, "ActiveIconFileDataID" }, { true, FT_INT, "Attributes1" }, { true, FT_INT, "Attributes2" }, { true, FT_INT, "Attributes3" }, @@ -4566,25 +4652,39 @@ struct SpellMiscLoadInfo } }; +struct SpellNameLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_INT, "ID" }, + { false, FT_STRING, "Name" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellNameMeta::Instance(), HOTFIX_SEL_SPELL_NAME); + return &loadInfo; + } +}; + struct SpellPowerLoadInfo { static DB2LoadInfo const* Instance() { static DB2FieldMeta const fields[] = { - { true, FT_INT, "ManaCost" }, - { false, FT_FLOAT, "PowerCostPct" }, - { false, FT_FLOAT, "PowerPctPerSecond" }, - { true, FT_INT, "RequiredAuraSpellID" }, - { false, FT_FLOAT, "PowerCostMaxPct" }, - { false, FT_BYTE, "OrderIndex" }, - { true, FT_BYTE, "PowerType" }, { false, FT_INT, "ID" }, + { false, FT_BYTE, "OrderIndex" }, + { true, FT_INT, "ManaCost" }, { true, FT_INT, "ManaCostPerLevel" }, { true, FT_INT, "ManaPerSecond" }, - { false, FT_INT, "OptionalCost" }, { false, FT_INT, "PowerDisplayID" }, { true, FT_INT, "AltPowerBarID" }, + { false, FT_FLOAT, "PowerCostPct" }, + { false, FT_FLOAT, "PowerCostMaxPct" }, + { false, FT_FLOAT, "PowerPctPerSecond" }, + { true, FT_BYTE, "PowerType" }, + { true, FT_INT, "RequiredAuraSpellID" }, + { false, FT_INT, "OptionalCost" }, { true, FT_INT, "SpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellPowerMeta::Instance(), HOTFIX_SEL_SPELL_POWER); @@ -4598,9 +4698,9 @@ struct SpellPowerDifficultyLoadInfo { static DB2FieldMeta const fields[] = { + { false, FT_INT, "ID" }, { false, FT_BYTE, "DifficultyID" }, { false, FT_BYTE, "OrderIndex" }, - { false, FT_INT, "ID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellPowerDifficultyMeta::Instance(), HOTFIX_SEL_SPELL_POWER_DIFFICULTY); return &loadInfo; @@ -4629,9 +4729,9 @@ struct SpellProcsPerMinuteModLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_FLOAT, "Coeff" }, - { true, FT_SHORT, "Param" }, { false, FT_BYTE, "Type" }, + { true, FT_SHORT, "Param" }, + { false, FT_FLOAT, "Coeff" }, { false, FT_SHORT, "SpellProcsPerMinuteID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellProcsPerMinuteModMeta::Instance(), HOTFIX_SEL_SPELL_PROCS_PER_MINUTE_MOD); @@ -4665,11 +4765,11 @@ struct SpellRangeLoadInfo { false, FT_INT, "ID" }, { false, FT_STRING, "DisplayName" }, { false, FT_STRING, "DisplayNameShort" }, + { false, FT_BYTE, "Flags" }, { false, FT_FLOAT, "RangeMin1" }, { false, FT_FLOAT, "RangeMin2" }, { false, FT_FLOAT, "RangeMax1" }, { false, FT_FLOAT, "RangeMax2" }, - { false, FT_BYTE, "Flags" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellRangeMeta::Instance(), HOTFIX_SEL_SPELL_RANGE); return &loadInfo; @@ -4714,10 +4814,10 @@ struct SpellScalingLoadInfo { { false, FT_INT, "ID" }, { true, FT_INT, "SpellID" }, - { true, FT_SHORT, "ScalesFromItemLevel" }, { true, FT_INT, "Class" }, { false, FT_INT, "MinScalingLevel" }, { false, FT_INT, "MaxScalingLevel" }, + { true, FT_SHORT, "ScalesFromItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellScalingMeta::Instance(), HOTFIX_SEL_SPELL_SCALING); return &loadInfo; @@ -4732,11 +4832,11 @@ struct SpellShapeshiftLoadInfo { { false, FT_INT, "ID" }, { true, FT_INT, "SpellID" }, + { true, FT_BYTE, "StanceBarOrder" }, { true, FT_INT, "ShapeshiftExclude1" }, { true, FT_INT, "ShapeshiftExclude2" }, { true, FT_INT, "ShapeshiftMask1" }, { true, FT_INT, "ShapeshiftMask2" }, - { true, FT_BYTE, "StanceBarOrder" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellShapeshiftMeta::Instance(), HOTFIX_SEL_SPELL_SHAPESHIFT); return &loadInfo; @@ -4751,13 +4851,13 @@ struct SpellShapeshiftFormLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, - { false, FT_FLOAT, "DamageVariance" }, + { true, FT_BYTE, "CreatureType" }, { true, FT_INT, "Flags" }, + { true, FT_INT, "AttackIconFileID" }, + { true, FT_BYTE, "BonusActionBar" }, { true, FT_SHORT, "CombatRoundTime" }, + { false, FT_FLOAT, "DamageVariance" }, { false, FT_SHORT, "MountTypeID" }, - { true, FT_BYTE, "CreatureType" }, - { true, FT_BYTE, "BonusActionBar" }, - { true, FT_INT, "AttackIconFileID" }, { false, FT_INT, "CreatureDisplayID1" }, { false, FT_INT, "CreatureDisplayID2" }, { false, FT_INT, "CreatureDisplayID3" }, @@ -4783,13 +4883,13 @@ struct SpellTargetRestrictionsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_FLOAT, "ConeDegrees" }, - { false, FT_FLOAT, "Width" }, - { true, FT_INT, "Targets" }, - { true, FT_SHORT, "TargetCreatureType" }, { false, FT_BYTE, "DifficultyID" }, + { false, FT_FLOAT, "ConeDegrees" }, { false, FT_BYTE, "MaxTargets" }, { false, FT_INT, "MaxTargetLevel" }, + { true, FT_SHORT, "TargetCreatureType" }, + { true, FT_INT, "Targets" }, + { false, FT_FLOAT, "Width" }, { true, FT_INT, "SpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellTargetRestrictionsMeta::Instance(), HOTFIX_SEL_SPELL_TARGET_RESTRICTIONS); @@ -4805,10 +4905,10 @@ struct SpellTotemsLoadInfo { { false, FT_INT, "ID" }, { true, FT_INT, "SpellID" }, - { true, FT_INT, "Totem1" }, - { true, FT_INT, "Totem2" }, { false, FT_SHORT, "RequiredTotemCategoryID1" }, { false, FT_SHORT, "RequiredTotemCategoryID2" }, + { true, FT_INT, "Totem1" }, + { true, FT_INT, "Totem2" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellTotemsMeta::Instance(), HOTFIX_SEL_SPELL_TOTEMS); return &loadInfo; @@ -4821,18 +4921,18 @@ struct SpellXSpellVisualLoadInfo { static DB2FieldMeta const fields[] = { - { false, FT_INT, "SpellVisualID" }, { false, FT_INT, "ID" }, + { false, FT_BYTE, "DifficultyID" }, + { false, FT_INT, "SpellVisualID" }, { false, FT_FLOAT, "Probability" }, - { false, FT_SHORT, "CasterPlayerConditionID" }, - { false, FT_SHORT, "CasterUnitConditionID" }, - { false, FT_SHORT, "ViewerPlayerConditionID" }, - { false, FT_SHORT, "ViewerUnitConditionID" }, - { true, FT_INT, "SpellIconFileID" }, - { true, FT_INT, "ActiveIconFileID" }, { false, FT_BYTE, "Flags" }, - { false, FT_BYTE, "DifficultyID" }, { false, FT_BYTE, "Priority" }, + { true, FT_INT, "SpellIconFileID" }, + { true, FT_INT, "ActiveIconFileID" }, + { false, FT_SHORT, "ViewerUnitConditionID" }, + { false, FT_INT, "ViewerPlayerConditionID" }, + { false, FT_SHORT, "CasterUnitConditionID" }, + { false, FT_INT, "CasterPlayerConditionID" }, { true, FT_INT, "SpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellXSpellVisualMeta::Instance(), HOTFIX_SEL_SPELL_X_SPELL_VISUAL); @@ -4847,11 +4947,11 @@ struct SummonPropertiesLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "Flags" }, { true, FT_INT, "Control" }, { true, FT_INT, "Faction" }, { true, FT_INT, "Title" }, { true, FT_INT, "Slot" }, + { true, FT_INT, "Flags" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SummonPropertiesMeta::Instance(), HOTFIX_SEL_SUMMON_PROPERTIES); return &loadInfo; @@ -4895,15 +4995,15 @@ struct TalentLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "Description" }, - { false, FT_INT, "SpellID" }, - { false, FT_INT, "OverridesSpellID" }, - { false, FT_SHORT, "SpecID" }, { false, FT_BYTE, "TierID" }, - { false, FT_BYTE, "ColumnIndex" }, { false, FT_BYTE, "Flags" }, + { false, FT_BYTE, "ColumnIndex" }, + { false, FT_BYTE, "ClassID" }, + { false, FT_SHORT, "SpecID" }, + { false, FT_INT, "SpellID" }, + { false, FT_INT, "OverridesSpellID" }, { false, FT_BYTE, "CategoryMask1" }, { false, FT_BYTE, "CategoryMask2" }, - { false, FT_BYTE, "ClassID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, TalentMeta::Instance(), HOTFIX_SEL_TALENT); return &loadInfo; @@ -4916,24 +5016,25 @@ struct TaxiNodesLoadInfo { static DB2FieldMeta const fields[] = { - { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, { false, FT_FLOAT, "PosX" }, { false, FT_FLOAT, "PosY" }, { false, FT_FLOAT, "PosZ" }, - { true, FT_INT, "MountCreatureID1" }, - { true, FT_INT, "MountCreatureID2" }, { false, FT_FLOAT, "MapOffsetX" }, { false, FT_FLOAT, "MapOffsetY" }, - { false, FT_FLOAT, "Facing" }, { false, FT_FLOAT, "FlightMapOffsetX" }, { false, FT_FLOAT, "FlightMapOffsetY" }, + { false, FT_INT, "ID" }, { false, FT_SHORT, "ContinentID" }, { false, FT_SHORT, "ConditionID" }, { false, FT_SHORT, "CharacterBitNumber" }, { false, FT_BYTE, "Flags" }, { true, FT_INT, "UiTextureKitID" }, + { false, FT_FLOAT, "Facing" }, { false, FT_INT, "SpecialIconConditionID" }, + { false, FT_INT, "VisibilityConditionID" }, + { true, FT_INT, "MountCreatureID1" }, + { true, FT_INT, "MountCreatureID2" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, TaxiNodesMeta::Instance(), HOTFIX_SEL_TAXI_NODES); return &loadInfo; @@ -4946,9 +5047,9 @@ struct TaxiPathLoadInfo { static DB2FieldMeta const fields[] = { + { false, FT_INT, "ID" }, { false, FT_SHORT, "FromTaxiNode" }, { false, FT_SHORT, "ToTaxiNode" }, - { false, FT_INT, "ID" }, { false, FT_INT, "Cost" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, TaxiPathMeta::Instance(), HOTFIX_SEL_TAXI_PATH); @@ -4965,10 +5066,10 @@ struct TaxiPathNodeLoadInfo { false, FT_FLOAT, "LocX" }, { false, FT_FLOAT, "LocY" }, { false, FT_FLOAT, "LocZ" }, + { false, FT_INT, "ID" }, { false, FT_SHORT, "PathID" }, + { true, FT_INT, "NodeIndex" }, { false, FT_SHORT, "ContinentID" }, - { false, FT_BYTE, "NodeIndex" }, - { false, FT_INT, "ID" }, { false, FT_BYTE, "Flags" }, { false, FT_INT, "Delay" }, { false, FT_SHORT, "ArrivalEventID" }, @@ -4987,8 +5088,8 @@ struct TotemCategoryLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, - { true, FT_INT, "TotemCategoryMask" }, { false, FT_BYTE, "TotemCategoryType" }, + { true, FT_INT, "TotemCategoryMask" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, TotemCategoryMeta::Instance(), HOTFIX_SEL_TOTEM_CATEGORY); return &loadInfo; @@ -5002,10 +5103,10 @@ struct ToyLoadInfo static DB2FieldMeta const fields[] = { { false, FT_STRING, "SourceText" }, + { false, FT_INT, "ID" }, { true, FT_INT, "ItemID" }, { false, FT_BYTE, "Flags" }, { true, FT_BYTE, "SourceTypeEnum" }, - { false, FT_INT, "ID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ToyMeta::Instance(), HOTFIX_SEL_TOY); return &loadInfo; @@ -5033,15 +5134,15 @@ struct TransmogSetLoadInfo static DB2FieldMeta const fields[] = { { false, FT_STRING, "Name" }, - { false, FT_SHORT, "ParentTransmogSetID" }, - { true, FT_SHORT, "UiOrder" }, - { false, FT_BYTE, "ExpansionID" }, { false, FT_INT, "ID" }, - { true, FT_INT, "Flags" }, - { false, FT_INT, "TrackingQuestID" }, { true, FT_INT, "ClassMask" }, - { true, FT_INT, "ItemNameDescriptionID" }, + { false, FT_INT, "TrackingQuestID" }, + { true, FT_INT, "Flags" }, { false, FT_INT, "TransmogSetGroupID" }, + { true, FT_INT, "ItemNameDescriptionID" }, + { false, FT_SHORT, "ParentTransmogSetID" }, + { false, FT_BYTE, "ExpansionID" }, + { true, FT_SHORT, "UiOrder" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, TransmogSetMeta::Instance(), HOTFIX_SEL_TRANSMOG_SET); return &loadInfo; @@ -5085,11 +5186,11 @@ struct TransportAnimationLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "TimeIndex" }, { false, FT_FLOAT, "PosX" }, { false, FT_FLOAT, "PosY" }, { false, FT_FLOAT, "PosZ" }, { false, FT_BYTE, "SequenceID" }, + { false, FT_INT, "TimeIndex" }, { true, FT_INT, "TransportID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, TransportAnimationMeta::Instance(), HOTFIX_SEL_TRANSPORT_ANIMATION); @@ -5104,11 +5205,11 @@ struct TransportRotationLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "TimeIndex" }, { false, FT_FLOAT, "Rot1" }, { false, FT_FLOAT, "Rot2" }, { false, FT_FLOAT, "Rot3" }, { false, FT_FLOAT, "Rot4" }, + { false, FT_INT, "TimeIndex" }, { true, FT_INT, "GameObjectsID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, TransportRotationMeta::Instance(), HOTFIX_SEL_TRANSPORT_ROTATION); @@ -5116,6 +5217,96 @@ struct TransportRotationLoadInfo } }; +struct UiMapLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_STRING, "Name" }, + { false, FT_INT, "ID" }, + { true, FT_INT, "ParentUiMapID" }, + { true, FT_INT, "Flags" }, + { true, FT_INT, "System" }, + { true, FT_INT, "Type" }, + { false, FT_INT, "LevelRangeMin" }, + { false, FT_INT, "LevelRangeMax" }, + { true, FT_INT, "BountySetID" }, + { false, FT_INT, "BountyDisplayLocation" }, + { true, FT_INT, "VisibilityPlayerConditionID" }, + { true, FT_BYTE, "HelpTextPosition" }, + { true, FT_INT, "BkgAtlasID" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, UiMapMeta::Instance(), HOTFIX_SEL_UI_MAP); + return &loadInfo; + } +}; + +struct UiMapAssignmentLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_FLOAT, "UiMinX" }, + { false, FT_FLOAT, "UiMinY" }, + { false, FT_FLOAT, "UiMaxX" }, + { false, FT_FLOAT, "UiMaxY" }, + { false, FT_FLOAT, "Region1X" }, + { false, FT_FLOAT, "Region1Y" }, + { false, FT_FLOAT, "Region1Z" }, + { false, FT_FLOAT, "Region2X" }, + { false, FT_FLOAT, "Region2Y" }, + { false, FT_FLOAT, "Region2Z" }, + { false, FT_INT, "ID" }, + { true, FT_INT, "UiMapID" }, + { true, FT_INT, "OrderIndex" }, + { true, FT_INT, "MapID" }, + { true, FT_INT, "AreaID" }, + { true, FT_INT, "WmoDoodadPlacementID" }, + { true, FT_INT, "WmoGroupID" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, UiMapAssignmentMeta::Instance(), HOTFIX_SEL_UI_MAP_ASSIGNMENT); + return &loadInfo; + } +}; + +struct UiMapLinkLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_FLOAT, "UiMinX" }, + { false, FT_FLOAT, "UiMinY" }, + { false, FT_FLOAT, "UiMaxX" }, + { false, FT_FLOAT, "UiMaxY" }, + { false, FT_INT, "ID" }, + { true, FT_INT, "ParentUiMapID" }, + { true, FT_INT, "OrderIndex" }, + { true, FT_INT, "ChildUiMapID" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, UiMapLinkMeta::Instance(), HOTFIX_SEL_UI_MAP_LINK); + return &loadInfo; + } +}; + +struct UiMapXMapArtLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_INT, "ID" }, + { true, FT_INT, "PhaseID" }, + { true, FT_INT, "UiMapArtID" }, + { true, FT_INT, "UiMapID" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, UiMapXMapArtMeta::Instance(), HOTFIX_SEL_UI_MAP_X_MAP_ART); + return &loadInfo; + } +}; + struct UnitPowerBarLoadInfo { static DB2LoadInfo const* Instance() @@ -5127,8 +5318,16 @@ struct UnitPowerBarLoadInfo { false, FT_STRING, "Cost" }, { false, FT_STRING, "OutOfError" }, { false, FT_STRING, "ToolTip" }, + { false, FT_INT, "MinPower" }, + { false, FT_INT, "MaxPower" }, + { false, FT_SHORT, "StartPower" }, + { false, FT_BYTE, "CenterPower" }, { false, FT_FLOAT, "RegenerationPeace" }, { false, FT_FLOAT, "RegenerationCombat" }, + { false, FT_BYTE, "BarType" }, + { false, FT_SHORT, "Flags" }, + { false, FT_FLOAT, "StartInset" }, + { false, FT_FLOAT, "EndInset" }, { true, FT_INT, "FileDataID1" }, { true, FT_INT, "FileDataID2" }, { true, FT_INT, "FileDataID3" }, @@ -5141,14 +5340,6 @@ struct UnitPowerBarLoadInfo { true, FT_INT, "Color4" }, { true, FT_INT, "Color5" }, { true, FT_INT, "Color6" }, - { false, FT_FLOAT, "StartInset" }, - { false, FT_FLOAT, "EndInset" }, - { false, FT_SHORT, "StartPower" }, - { false, FT_SHORT, "Flags" }, - { false, FT_BYTE, "CenterPower" }, - { false, FT_BYTE, "BarType" }, - { false, FT_INT, "MinPower" }, - { false, FT_INT, "MaxPower" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, UnitPowerBarMeta::Instance(), HOTFIX_SEL_UNIT_POWER_BAR); return &loadInfo; @@ -5163,6 +5354,7 @@ struct VehicleLoadInfo { { false, FT_INT, "ID" }, { true, FT_INT, "Flags" }, + { false, FT_BYTE, "FlagsB" }, { false, FT_FLOAT, "TurnSpeed" }, { false, FT_FLOAT, "PitchSpeed" }, { false, FT_FLOAT, "PitchMin" }, @@ -5174,6 +5366,9 @@ struct VehicleLoadInfo { false, FT_FLOAT, "FacingLimitRight" }, { false, FT_FLOAT, "FacingLimitLeft" }, { false, FT_FLOAT, "CameraYawOffset" }, + { false, FT_BYTE, "UiLocomotionType" }, + { false, FT_SHORT, "VehicleUIIndicatorID" }, + { true, FT_INT, "MissileTargetingID" }, { false, FT_SHORT, "SeatID1" }, { false, FT_SHORT, "SeatID2" }, { false, FT_SHORT, "SeatID3" }, @@ -5182,13 +5377,9 @@ struct VehicleLoadInfo { false, FT_SHORT, "SeatID6" }, { false, FT_SHORT, "SeatID7" }, { false, FT_SHORT, "SeatID8" }, - { false, FT_SHORT, "VehicleUIIndicatorID" }, { false, FT_SHORT, "PowerDisplayID1" }, { false, FT_SHORT, "PowerDisplayID2" }, { false, FT_SHORT, "PowerDisplayID3" }, - { false, FT_BYTE, "FlagsB" }, - { false, FT_BYTE, "UiLocomotionType" }, - { true, FT_INT, "MissileTargetingID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, VehicleMeta::Instance(), HOTFIX_SEL_VEHICLE); return &loadInfo; @@ -5202,12 +5393,16 @@ struct VehicleSeatLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "Flags" }, - { true, FT_INT, "FlagsB" }, - { true, FT_INT, "FlagsC" }, { false, FT_FLOAT, "AttachmentOffsetX" }, { false, FT_FLOAT, "AttachmentOffsetY" }, { false, FT_FLOAT, "AttachmentOffsetZ" }, + { false, FT_FLOAT, "CameraOffsetX" }, + { false, FT_FLOAT, "CameraOffsetY" }, + { false, FT_FLOAT, "CameraOffsetZ" }, + { true, FT_INT, "Flags" }, + { true, FT_INT, "FlagsB" }, + { true, FT_INT, "FlagsC" }, + { true, FT_BYTE, "AttachmentID" }, { false, FT_FLOAT, "EnterPreDelay" }, { false, FT_FLOAT, "EnterSpeed" }, { false, FT_FLOAT, "EnterGravity" }, @@ -5215,6 +5410,12 @@ struct VehicleSeatLoadInfo { false, FT_FLOAT, "EnterMaxDuration" }, { false, FT_FLOAT, "EnterMinArcHeight" }, { false, FT_FLOAT, "EnterMaxArcHeight" }, + { true, FT_INT, "EnterAnimStart" }, + { true, FT_INT, "EnterAnimLoop" }, + { true, FT_INT, "RideAnimStart" }, + { true, FT_INT, "RideAnimLoop" }, + { true, FT_INT, "RideUpperAnimStart" }, + { true, FT_INT, "RideUpperAnimLoop" }, { false, FT_FLOAT, "ExitPreDelay" }, { false, FT_FLOAT, "ExitSpeed" }, { false, FT_FLOAT, "ExitGravity" }, @@ -5222,36 +5423,34 @@ struct VehicleSeatLoadInfo { false, FT_FLOAT, "ExitMaxDuration" }, { false, FT_FLOAT, "ExitMinArcHeight" }, { false, FT_FLOAT, "ExitMaxArcHeight" }, + { true, FT_INT, "ExitAnimStart" }, + { true, FT_INT, "ExitAnimLoop" }, + { true, FT_INT, "ExitAnimEnd" }, + { true, FT_SHORT, "VehicleEnterAnim" }, + { true, FT_BYTE, "VehicleEnterAnimBone" }, + { true, FT_SHORT, "VehicleExitAnim" }, + { true, FT_BYTE, "VehicleExitAnimBone" }, + { true, FT_SHORT, "VehicleRideAnimLoop" }, + { true, FT_BYTE, "VehicleRideAnimLoopBone" }, + { true, FT_BYTE, "PassengerAttachmentID" }, { false, FT_FLOAT, "PassengerYaw" }, { false, FT_FLOAT, "PassengerPitch" }, { false, FT_FLOAT, "PassengerRoll" }, { false, FT_FLOAT, "VehicleEnterAnimDelay" }, { false, FT_FLOAT, "VehicleExitAnimDelay" }, + { true, FT_BYTE, "VehicleAbilityDisplay" }, + { false, FT_INT, "EnterUISoundID" }, + { false, FT_INT, "ExitUISoundID" }, + { true, FT_INT, "UiSkinFileDataID" }, { false, FT_FLOAT, "CameraEnteringDelay" }, { false, FT_FLOAT, "CameraEnteringDuration" }, { false, FT_FLOAT, "CameraExitingDelay" }, { false, FT_FLOAT, "CameraExitingDuration" }, - { false, FT_FLOAT, "CameraOffsetX" }, - { false, FT_FLOAT, "CameraOffsetY" }, - { false, FT_FLOAT, "CameraOffsetZ" }, { false, FT_FLOAT, "CameraPosChaseRate" }, { false, FT_FLOAT, "CameraFacingChaseRate" }, { false, FT_FLOAT, "CameraEnteringZoom" }, { false, FT_FLOAT, "CameraSeatZoomMin" }, { false, FT_FLOAT, "CameraSeatZoomMax" }, - { true, FT_INT, "UiSkinFileDataID" }, - { true, FT_SHORT, "EnterAnimStart" }, - { true, FT_SHORT, "EnterAnimLoop" }, - { true, FT_SHORT, "RideAnimStart" }, - { true, FT_SHORT, "RideAnimLoop" }, - { true, FT_SHORT, "RideUpperAnimStart" }, - { true, FT_SHORT, "RideUpperAnimLoop" }, - { true, FT_SHORT, "ExitAnimStart" }, - { true, FT_SHORT, "ExitAnimLoop" }, - { true, FT_SHORT, "ExitAnimEnd" }, - { true, FT_SHORT, "VehicleEnterAnim" }, - { true, FT_SHORT, "VehicleExitAnim" }, - { true, FT_SHORT, "VehicleRideAnimLoop" }, { true, FT_SHORT, "EnterAnimKitID" }, { true, FT_SHORT, "RideAnimKitID" }, { true, FT_SHORT, "ExitAnimKitID" }, @@ -5259,14 +5458,6 @@ struct VehicleSeatLoadInfo { true, FT_SHORT, "VehicleRideAnimKitID" }, { true, FT_SHORT, "VehicleExitAnimKitID" }, { true, FT_SHORT, "CameraModeID" }, - { true, FT_BYTE, "AttachmentID" }, - { true, FT_BYTE, "PassengerAttachmentID" }, - { true, FT_BYTE, "VehicleEnterAnimBone" }, - { true, FT_BYTE, "VehicleExitAnimBone" }, - { true, FT_BYTE, "VehicleRideAnimLoopBone" }, - { true, FT_BYTE, "VehicleAbilityDisplay" }, - { false, FT_INT, "EnterUISoundID" }, - { false, FT_INT, "ExitUISoundID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, VehicleSeatMeta::Instance(), HOTFIX_SEL_VEHICLE_SEAT); return &loadInfo; @@ -5280,20 +5471,20 @@ struct WmoAreaTableLoadInfo static DB2FieldMeta const fields[] = { { false, FT_STRING, "AreaName" }, + { false, FT_INT, "ID" }, + { false, FT_SHORT, "WmoID" }, + { false, FT_BYTE, "NameSetID" }, { true, FT_INT, "WmoGroupID" }, + { false, FT_BYTE, "SoundProviderPref" }, + { false, FT_BYTE, "SoundProviderPrefUnderwater" }, { false, FT_SHORT, "AmbienceID" }, + { false, FT_SHORT, "UwAmbience" }, { false, FT_SHORT, "ZoneMusic" }, + { false, FT_INT, "UwZoneMusic" }, { false, FT_SHORT, "IntroSound" }, - { false, FT_SHORT, "AreaTableID" }, { false, FT_SHORT, "UwIntroSound" }, - { false, FT_SHORT, "UwAmbience" }, - { false, FT_BYTE, "NameSetID" }, - { false, FT_BYTE, "SoundProviderPref" }, - { false, FT_BYTE, "SoundProviderPrefUnderwater" }, + { false, FT_SHORT, "AreaTableID" }, { false, FT_BYTE, "Flags" }, - { false, FT_INT, "ID" }, - { false, FT_INT, "UwZoneMusic" }, - { false, FT_SHORT, "WmoID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, WMOAreaTableMeta::Instance(), HOTFIX_SEL_WMO_AREA_TABLE); return &loadInfo; @@ -5307,63 +5498,33 @@ struct WorldEffectLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "TargetAsset" }, - { false, FT_SHORT, "CombatConditionID" }, - { false, FT_BYTE, "TargetType" }, - { false, FT_BYTE, "WhenToDisplay" }, { false, FT_INT, "QuestFeedbackEffectID" }, + { false, FT_BYTE, "WhenToDisplay" }, + { false, FT_BYTE, "TargetType" }, + { true, FT_INT, "TargetAsset" }, { false, FT_INT, "PlayerConditionID" }, + { false, FT_SHORT, "CombatConditionID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, WorldEffectMeta::Instance(), HOTFIX_SEL_WORLD_EFFECT); return &loadInfo; } }; -struct WorldMapAreaLoadInfo -{ - static DB2LoadInfo const* Instance() - { - static DB2FieldMeta const fields[] = - { - { false, FT_STRING_NOT_LOCALIZED, "AreaName" }, - { false, FT_FLOAT, "LocLeft" }, - { false, FT_FLOAT, "LocRight" }, - { false, FT_FLOAT, "LocTop" }, - { false, FT_FLOAT, "LocBottom" }, - { false, FT_INT, "Flags" }, - { true, FT_SHORT, "MapID" }, - { false, FT_SHORT, "AreaID" }, - { true, FT_SHORT, "DisplayMapID" }, - { false, FT_SHORT, "DefaultDungeonFloor" }, - { false, FT_SHORT, "ParentWorldMapID" }, - { false, FT_BYTE, "LevelRangeMin" }, - { false, FT_BYTE, "LevelRangeMax" }, - { false, FT_BYTE, "BountySetID" }, - { false, FT_BYTE, "BountyDisplayLocation" }, - { false, FT_INT, "ID" }, - { false, FT_INT, "VisibilityPlayerConditionID" }, - }; - static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, WorldMapAreaMeta::Instance(), HOTFIX_SEL_WORLD_MAP_AREA); - return &loadInfo; - } -}; - struct WorldMapOverlayLoadInfo { static DB2LoadInfo const* Instance() { static DB2FieldMeta const fields[] = { - { false, FT_STRING_NOT_LOCALIZED, "TextureName" }, { false, FT_INT, "ID" }, + { false, FT_INT, "UiMapArtID" }, { false, FT_SHORT, "TextureWidth" }, { false, FT_SHORT, "TextureHeight" }, - { false, FT_INT, "MapAreaID" }, { true, FT_INT, "OffsetX" }, { true, FT_INT, "OffsetY" }, { true, FT_INT, "HitRectTop" }, - { true, FT_INT, "HitRectLeft" }, { true, FT_INT, "HitRectBottom" }, + { true, FT_INT, "HitRectLeft" }, { true, FT_INT, "HitRectRight" }, { false, FT_INT, "PlayerConditionID" }, { false, FT_INT, "Flags" }, @@ -5377,35 +5538,6 @@ struct WorldMapOverlayLoadInfo } }; -struct WorldMapTransformsLoadInfo -{ - static DB2LoadInfo const* Instance() - { - static DB2FieldMeta const fields[] = - { - { false, FT_INT, "ID" }, - { false, FT_FLOAT, "RegionMinX" }, - { false, FT_FLOAT, "RegionMinY" }, - { false, FT_FLOAT, "RegionMinZ" }, - { false, FT_FLOAT, "RegionMaxX" }, - { false, FT_FLOAT, "RegionMaxY" }, - { false, FT_FLOAT, "RegionMaxZ" }, - { false, FT_FLOAT, "RegionOffsetX" }, - { false, FT_FLOAT, "RegionOffsetY" }, - { false, FT_FLOAT, "RegionScale" }, - { false, FT_SHORT, "MapID" }, - { false, FT_SHORT, "AreaID" }, - { false, FT_SHORT, "NewMapID" }, - { false, FT_SHORT, "NewDungeonMapID" }, - { false, FT_SHORT, "NewAreaID" }, - { false, FT_BYTE, "Flags" }, - { true, FT_INT, "Priority" }, - }; - static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, WorldMapTransformsMeta::Instance(), HOTFIX_SEL_WORLD_MAP_TRANSFORMS); - return &loadInfo; - } -}; - struct WorldSafeLocsLoadInfo { static DB2LoadInfo const* Instance() @@ -5417,8 +5549,8 @@ struct WorldSafeLocsLoadInfo { false, FT_FLOAT, "LocX" }, { false, FT_FLOAT, "LocY" }, { false, FT_FLOAT, "LocZ" }, - { false, FT_FLOAT, "Facing" }, { false, FT_SHORT, "MapID" }, + { false, FT_FLOAT, "Facing" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, WorldSafeLocsMeta::Instance(), HOTFIX_SEL_WORLD_SAFE_LOCS); return &loadInfo; diff --git a/src/server/game/DataStores/DB2Metadata.h b/src/server/game/DataStores/DB2Metadata.h index f65b1190066..1d2e317b148 100644 --- a/src/server/game/DataStores/DB2Metadata.h +++ b/src/server/game/DataStores/DB2Metadata.h @@ -24,9 +24,25 @@ struct AchievementMeta { static DB2Meta const* Instance() { - static char const* types = "sssihhhhhbbbiii"; - static uint8 const arraySizes[15] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(12, 15, 0x2C4BE18C, types, arraySizes, 7); + static DB2MetaField const fields[15] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(3, 15, 0x13CB7BEE, fields, 11); return &instance; } }; @@ -35,9 +51,14 @@ struct Achievement_CategoryMeta { static DB2Meta const* Instance() { - static char const* types = "shbi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(3, 4, 0xED226BC9, types, arraySizes, 2); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(1, 4, 0x0B008A91, fields, 3); return &instance; } }; @@ -46,9 +67,32 @@ struct AdventureJournalMeta { static DB2Meta const* Instance() { - static char const* types = "sssssiihhhhhhbbbbbbbii"; - static uint8 const arraySizes[22] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1 }; - static DB2Meta instance(-1, 22, 0xB2FFA8DD, types, arraySizes, -1); + static DB2MetaField const fields[22] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 2, false }, + { FT_BYTE, 2, false }, + }; + static DB2Meta instance(-1, 22, 0x9D620FC8, fields, -1); return &instance; } }; @@ -57,9 +101,22 @@ struct AdventureMapPOIMeta { static DB2Meta const* Instance() { - static char const* types = "ssfibiiiiiiii"; - static uint8 const arraySizes[13] = { 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 13, 0x0C288A82, types, arraySizes, -1); + static DB2MetaField const fields[12] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_FLOAT, 2, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 12, 0x4AABC870, fields, -1); return &instance; } }; @@ -68,9 +125,18 @@ struct AlliedRaceMeta { static DB2Meta const* Instance() { - static char const* types = "iiiiiiii"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(1, 8, 0xB13ABE04, types, arraySizes, -1); + static DB2MetaField const fields[8] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 8, 0xE89FA2D2, fields, -1); return &instance; } }; @@ -79,9 +145,15 @@ struct AlliedRaceRacialAbilityMeta { static DB2Meta const* Instance() { - static char const* types = "ssbii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x9EBF9B09, types, arraySizes, 4); + static DB2MetaField const fields[5] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x96902165, fields, 4); return &instance; } }; @@ -90,9 +162,13 @@ struct AnimKitMeta { static DB2Meta const* Instance() { - static char const* types = "ihh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x81D6D250, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x0C4BCDEC, fields, -1); return &instance; } }; @@ -101,9 +177,15 @@ struct AnimKitBoneSetMeta { static DB2Meta const* Instance() { - static char const* types = "sbbbb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xFE4B9B1F, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x1C432613, fields, -1); return &instance; } }; @@ -112,9 +194,12 @@ struct AnimKitBoneSetAliasMeta { static DB2Meta const* Instance() { - static char const* types = "bb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xEA8B67BC, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xB307E8FC, fields, -1); return &instance; } }; @@ -123,9 +208,11 @@ struct AnimKitConfigMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x8A70ED4C, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 1, 0x972D46F8, fields, -1); return &instance; } }; @@ -134,9 +221,13 @@ struct AnimKitConfigBoneSetMeta { static DB2Meta const* Instance() { - static char const* types = "hbh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x3D9B3BA7, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x48518303, fields, 2); return &instance; } }; @@ -145,9 +236,11 @@ struct AnimKitPriorityMeta { static DB2Meta const* Instance() { - static char const* types = "b"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x5E93C107, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 1, 0x27ED596B, fields, -1); return &instance; } }; @@ -156,9 +249,15 @@ struct AnimKitReplacementMeta { static DB2Meta const* Instance() { - static char const* types = "hhhih"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(3, 5, 0x0735DB83, types, arraySizes, 4); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(0, 5, 0xB0BBA55F, fields, 4); return &instance; } }; @@ -167,9 +266,28 @@ struct AnimKitSegmentMeta { static DB2Meta const* Instance() { - static char const* types = "iiifihhhhhhbbbbbbi"; - static uint8 const arraySizes[18] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 18, 0x08F09B89, types, arraySizes, 5); + static DB2MetaField const fields[18] = + { + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 18, 0xEBF796F5, fields, 0); return &instance; } }; @@ -178,9 +296,15 @@ struct AnimReplacementMeta { static DB2Meta const* Instance() { - static char const* types = "hhhih"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(3, 5, 0x2C8B0F35, types, arraySizes, 4); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(0, 5, 0x5D91ABFD, fields, 4); return &instance; } }; @@ -189,9 +313,11 @@ struct AnimReplacementSetMeta { static DB2Meta const* Instance() { - static char const* types = "b"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x3761247A, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 1, 0x15AFC3D6, fields, -1); return &instance; } }; @@ -200,9 +326,48 @@ struct AnimationDataMeta { static DB2Meta const* Instance() { - static char const* types = "ihhb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x03182786, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 2, true }, + }; + static DB2Meta instance(-1, 4, 0xFB408E92, fields, -1); + return &instance; + } +}; + +struct AoiBoxMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[5] = + { + { FT_FLOAT, 6, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x173154C8, fields, 4); + return &instance; + } +}; + +struct AreaConditionalDataMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[5] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(1, 5, 0xBE8C656A, fields, 4); return &instance; } }; @@ -211,9 +376,14 @@ struct AreaFarClipOverrideMeta { static DB2Meta const* Instance() { - static char const* types = "iffii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(4, 5, 0xEB5921CC, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0xD7028AD6, fields, -1); return &instance; } }; @@ -222,9 +392,12 @@ struct AreaGroupMemberMeta { static DB2Meta const* Instance() { - static char const* types = "hh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x50AA43EE, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x27C84A16, fields, 1); return &instance; } }; @@ -233,9 +406,27 @@ struct AreaPOIMeta { static DB2Meta const* Instance() { - static char const* types = "ssifiihhhhbbiiii"; - static uint8 const arraySizes[16] = { 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 16, 0xB161EE90, types, arraySizes, -1); + static DB2MetaField const fields[17] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_FLOAT, 3, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(2, 17, 0x34D56581, fields, 11); return &instance; } }; @@ -244,9 +435,15 @@ struct AreaPOIStateMeta { static DB2Meta const* Instance() { - static char const* types = "sbbih"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x673BDA80, types, arraySizes, 4); + static DB2MetaField const fields[5] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 5, 0xEB8CA12C, fields, 4); return &instance; } }; @@ -255,9 +452,33 @@ struct AreaTableMeta { static DB2Meta const* Instance() { - static char const* types = "ssifhhhhhhhhhhbbbbbbbbi"; - static uint8 const arraySizes[23] = { 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 23, 0x0CA01129, types, arraySizes, -1); + static DB2MetaField const fields[23] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 2, true }, + { FT_SHORT, 4, false }, + }; + static DB2Meta instance(-1, 23, 0x22229BE7, fields, -1); return &instance; } }; @@ -266,9 +487,25 @@ struct AreaTriggerMeta { static DB2Meta const* Instance() { - static char const* types = "ffffffhhhhhbbbi"; - static uint8 const arraySizes[15] = { 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(14, 15, 0x378573E8, types, arraySizes, 6); + static DB2MetaField const fields[15] = + { + { FT_FLOAT, 3, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(1, 15, 0x61A4F966, fields, 2); return &instance; } }; @@ -277,9 +514,11 @@ struct AreaTriggerActionSetMeta { static DB2Meta const* Instance() { - static char const* types = "h"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x5DA480BD, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xBE34F649, fields, -1); return &instance; } }; @@ -288,9 +527,25 @@ struct AreaTriggerBoxMeta { static DB2Meta const* Instance() { - static char const* types = "f"; - static uint8 const arraySizes[1] = { 3 }; - static DB2Meta instance(-1, 1, 0x602CFDA6, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_FLOAT, 3, true }, + }; + static DB2Meta instance(-1, 1, 0x14918F12, fields, -1); + return &instance; + } +}; + +struct AreaTriggerCreatePropertiesMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xAAE6E300, fields, -1); return &instance; } }; @@ -299,9 +554,13 @@ struct AreaTriggerCylinderMeta { static DB2Meta const* Instance() { - static char const* types = "fff"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x26D4052D, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x867834A9, fields, -1); return &instance; } }; @@ -310,9 +569,11 @@ struct AreaTriggerSphereMeta { static DB2Meta const* Instance() { - static char const* types = "f"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x9141AC7F, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xF1D2220B, fields, -1); return &instance; } }; @@ -321,9 +582,15 @@ struct ArmorLocationMeta { static DB2Meta const* Instance() { - static char const* types = "fffff"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xCCFBD16E, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x1C0BBC02, fields, -1); return &instance; } }; @@ -332,9 +599,21 @@ struct ArtifactMeta { static DB2Meta const* Instance() { - static char const* types = "siiihhbbii"; - static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 10, 0x76CF31A8, types, arraySizes, -1); + static DB2MetaField const fields[11] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(1, 11, 0x780D61EA, fields, -1); return &instance; } }; @@ -343,9 +622,25 @@ struct ArtifactAppearanceMeta { static DB2Meta const* Instance() { - static char const* types = "siffihhbbbbiiii"; - static uint8 const arraySizes[15] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(11, 15, 0xAEED7395, types, arraySizes, 5); + static DB2MetaField const fields[15] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(1, 15, 0x330F75C9, fields, 2); return &instance; } }; @@ -354,9 +649,19 @@ struct ArtifactAppearanceSetMeta { static DB2Meta const* Instance() { - static char const* types = "sshhbbbib"; - static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(7, 9, 0x53DFED74, types, arraySizes, 8); + static DB2MetaField const fields[9] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(2, 9, 0xBB4DB4D3, fields, 8); return &instance; } }; @@ -365,9 +670,27 @@ struct ArtifactCategoryMeta { static DB2Meta const* Instance() { - static char const* types = "hh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x21328475, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x484A6D55, fields, -1); + return &instance; + } +}; + +struct ArtifactItemToTransmogMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xD54CBBE1, fields, 0); return &instance; } }; @@ -376,9 +699,17 @@ struct ArtifactPowerMeta { static DB2Meta const* Instance() { - static char const* types = "fbbbbii"; - static uint8 const arraySizes[7] = { 2, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(5, 7, 0x45240818, types, arraySizes, 1); + static DB2MetaField const fields[7] = + { + { FT_FLOAT, 2, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(1, 7, 0x1F7637C8, fields, 2); return &instance; } }; @@ -387,9 +718,12 @@ struct ArtifactPowerLinkMeta { static DB2Meta const* Instance() { - static char const* types = "hh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xE179618C, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xBB7E3584, fields, -1); return &instance; } }; @@ -398,9 +732,11 @@ struct ArtifactPowerPickerMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x2D6AF006, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 1, 0x253242BA, fields, -1); return &instance; } }; @@ -409,9 +745,15 @@ struct ArtifactPowerRankMeta { static DB2Meta const* Instance() { - static char const* types = "ifhbh"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xA87EACC4, types, arraySizes, 4); + static DB2MetaField const fields[5] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 5, 0x7DC78F1E, fields, 4); return &instance; } }; @@ -420,9 +762,11 @@ struct ArtifactQuestXPMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 10 }; - static DB2Meta instance(-1, 1, 0x86397302, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 10, false }, + }; + static DB2Meta instance(-1, 1, 0x7E00C5B6, fields, -1); return &instance; } }; @@ -431,9 +775,15 @@ struct ArtifactTierMeta { static DB2Meta const* Instance() { - static char const* types = "iiiii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x1A5A50B9, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 5, 0xA47F6D9D, fields, -1); return &instance; } }; @@ -442,9 +792,15 @@ struct ArtifactUnlockMeta { static DB2Meta const* Instance() { - static char const* types = "hbiib"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x52839A77, types, arraySizes, 4); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 5, 0x40C54B9F, fields, 4); return &instance; } }; @@ -453,9 +809,105 @@ struct AuctionHouseMeta { static DB2Meta const* Instance() { - static char const* types = "shbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x51CFEEFF, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x61E641BA, fields, -1); + return &instance; + } +}; + +struct AzeriteEmpoweredItemMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x4078BECD, fields, -1); + return &instance; + } +}; + +struct AzeriteItemMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[1] = + { + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xDAC6A93C, fields, -1); + return &instance; + } +}; + +struct AzeriteItemMilestonePowerMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x7C4DC43D, fields, -1); + return &instance; + } +}; + +struct AzeritePowerMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[4] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0xE7FE46AC, fields, -1); + return &instance; + } +}; + +struct AzeritePowerSetMemberMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[5] = + { + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 5, 0xDB24A281, fields, 4); + return &instance; + } +}; + +struct AzeriteTierUnlockMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x2B04F059, fields, 3); return &instance; } }; @@ -464,9 +916,11 @@ struct BankBagSlotPricesMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xEA0AC2AA, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 1, 0x897A4D1E, fields, -1); return &instance; } }; @@ -475,9 +929,13 @@ struct BannedAddonsMeta { static DB2Meta const* Instance() { - static char const* types = "ssb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xF779B6E5, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xF4525F59, fields, -1); return &instance; } }; @@ -486,9 +944,18 @@ struct BarberShopStyleMeta { static DB2Meta const* Instance() { - static char const* types = "ssfbbbbi"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(7, 8, 0x670C71AE, types, arraySizes, -1); + static DB2MetaField const fields[8] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(2, 8, 0x2DD3952C, fields, -1); return &instance; } }; @@ -497,9 +964,17 @@ struct BattlePetAbilityMeta { static DB2Meta const* Instance() { - static char const* types = "ssihbbi"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0x0F29944D, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 7, 0x4C3AF583, fields, -1); return &instance; } }; @@ -508,9 +983,17 @@ struct BattlePetAbilityEffectMeta { static DB2Meta const* Instance() { - static char const* types = "hhhhhbi"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 6, 1, 1 }; - static DB2Meta instance(6, 7, 0x5D30EBC5, types, arraySizes, 0); + static DB2MetaField const fields[7] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 6, true }, + }; + static DB2Meta instance(0, 7, 0xC850B549, fields, 1); return &instance; } }; @@ -519,9 +1002,13 @@ struct BattlePetAbilityStateMeta { static DB2Meta const* Instance() { - static char const* types = "ibh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x0E40A884, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x73DDAA6A, fields, 2); return &instance; } }; @@ -530,9 +1017,16 @@ struct BattlePetAbilityTurnMeta { static DB2Meta const* Instance() { - static char const* types = "hhbbbi"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(5, 6, 0xCB063F4F, types, arraySizes, 0); + static DB2MetaField const fields[6] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(0, 6, 0xF2218887, fields, 1); return &instance; } }; @@ -541,9 +1035,12 @@ struct BattlePetBreedQualityMeta { static DB2Meta const* Instance() { - static char const* types = "fb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xBDE74E1D, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x6CD46EB5, fields, -1); return &instance; } }; @@ -552,9 +1049,13 @@ struct BattlePetBreedStateMeta { static DB2Meta const* Instance() { - static char const* types = "hbb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x68D5C999, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xC1A59CCF, fields, 2); return &instance; } }; @@ -563,9 +1064,14 @@ struct BattlePetDisplayOverrideMeta { static DB2Meta const* Instance() { - static char const* types = "iiib"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xDE5129EA, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x6F9CB092, fields, -1); return &instance; } }; @@ -574,9 +1080,13 @@ struct BattlePetEffectPropertiesMeta { static DB2Meta const* Instance() { - static char const* types = "shb"; - static uint8 const arraySizes[3] = { 6, 1, 6 }; - static DB2Meta instance(-1, 3, 0x56070751, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING_NOT_LOCALIZED, 6, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 6, false }, + }; + static DB2Meta instance(-1, 3, 0xA2D4ADF5, fields, -1); return &instance; } }; @@ -585,9 +1095,11 @@ struct BattlePetNPCTeamMemberMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x4423F004, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x9F2C8370, fields, -1); return &instance; } }; @@ -596,9 +1108,21 @@ struct BattlePetSpeciesMeta { static DB2Meta const* Instance() { - static char const* types = "ssiiihbbiii"; - static uint8 const arraySizes[11] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(8, 11, 0x8A3D97A4, types, arraySizes, -1); + static DB2MetaField const fields[11] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(2, 11, 0x78A6B928, fields, -1); return &instance; } }; @@ -607,9 +1131,13 @@ struct BattlePetSpeciesStateMeta { static DB2Meta const* Instance() { - static char const* types = "ibh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x8F958D5C, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x99EBACAA, fields, 2); return &instance; } }; @@ -618,9 +1146,14 @@ struct BattlePetSpeciesXAbilityMeta { static DB2Meta const* Instance() { - static char const* types = "hbbh"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x9EE27D6A, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x630BA932, fields, 3); return &instance; } }; @@ -629,9 +1162,13 @@ struct BattlePetStateMeta { static DB2Meta const* Instance() { - static char const* types = "shh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x1797AB4A, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xF9579FAC, fields, -1); return &instance; } }; @@ -640,9 +1177,17 @@ struct BattlePetVisualMeta { static DB2Meta const* Instance() { - static char const* types = "sihhhbb"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0x097E0F6C, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 7, 0x284AF258, fields, -1); return &instance; } }; @@ -651,9 +1196,27 @@ struct BattlemasterListMeta { static DB2Meta const* Instance() { - static char const* types = "ssssihhhbbbbbbbbb"; - static uint8 const arraySizes[17] = { 1, 1, 1, 1, 1, 16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 17, 0xD8AAA088, types, arraySizes, -1); + static DB2MetaField const fields[17] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 16, true }, + }; + static DB2Meta instance(-1, 17, 0x167284E8, fields, -1); return &instance; } }; @@ -662,9 +1225,20 @@ struct BeamEffectMeta { static DB2Meta const* Instance() { - static char const* types = "iffihhhhhh"; - static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 10, 0x42C18603, types, arraySizes, -1); + static DB2MetaField const fields[10] = + { + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 10, 0x0E55B843, fields, -1); return &instance; } }; @@ -673,9 +1247,12 @@ struct BoneWindModifierModelMeta { static DB2Meta const* Instance() { - static char const* types = "ii"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x577A0772, types, arraySizes, 0); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x77B007CA, fields, 0); return &instance; } }; @@ -684,9 +1261,28 @@ struct BoneWindModifiersMeta { static DB2Meta const* Instance() { - static char const* types = "ff"; - static uint8 const arraySizes[2] = { 3, 1 }; - static DB2Meta instance(-1, 2, 0xB4E7449E, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_FLOAT, 3, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xC6F446CE, fields, -1); + return &instance; + } +}; + +struct BonusRollMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xF7A194FA, fields, -1); return &instance; } }; @@ -695,9 +1291,15 @@ struct BountyMeta { static DB2Meta const* Instance() { - static char const* types = "ihhib"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xE76E716C, types, arraySizes, 4); + static DB2MetaField const fields[5] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 5, 0x797CCAA0, fields, 4); return &instance; } }; @@ -706,9 +1308,12 @@ struct BountySetMeta { static DB2Meta const* Instance() { - static char const* types = "hi"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x96B908A5, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xB67E3F83, fields, -1); return &instance; } }; @@ -717,9 +1322,21 @@ struct BroadcastTextMeta { static DB2Meta const* Instance() { - static char const* types = "sshhhbbii"; - static uint8 const arraySizes[9] = { 1, 1, 3, 3, 1, 1, 1, 1, 2 }; - static DB2Meta instance(-1, 9, 0x51BF0C33, types, arraySizes, -1); + static DB2MetaField const fields[11] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 2, false }, + { FT_SHORT, 3, false }, + { FT_SHORT, 3, false }, + }; + static DB2Meta instance(2, 11, 0x6318993B, fields, -1); return &instance; } }; @@ -728,9 +1345,11 @@ struct CameraEffectMeta { static DB2Meta const* Instance() { - static char const* types = "b"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xF6AB4622, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 1, 0xAB0FD78E, fields, -1); return &instance; } }; @@ -739,9 +1358,26 @@ struct CameraEffectEntryMeta { static DB2Meta const* Instance() { - static char const* types = "ffffffffhbbbbbbh"; - static uint8 const arraySizes[16] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 16, 0xC5105557, types, arraySizes, 15); + static DB2MetaField const fields[16] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 16, 0xED27DC2F, fields, 15); return &instance; } }; @@ -750,9 +1386,70 @@ struct CameraModeMeta { static DB2Meta const* Instance() { - static char const* types = "fffffhbbbbb"; - static uint8 const arraySizes[11] = { 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 11, 0xCDB6BC2F, types, arraySizes, -1); + static DB2MetaField const fields[11] = + { + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 11, 0xEE5489F4, fields, -1); + return &instance; + } +}; + +struct CampaignMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[7] = + { + { FT_STRING, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(3, 7, 0x2D49AABD, fields, -1); + return &instance; + } +}; + +struct CampaignXConditionMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x638FC159, fields, 2); + return &instance; + } +}; + +struct CampaignXQuestLineMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x7303E0F9, fields, 0); return &instance; } }; @@ -761,9 +1458,12 @@ struct CastableRaidBuffsMeta { static DB2Meta const* Instance() { - static char const* types = "ii"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x5BDD4028, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x3B349C01, fields, 1); return &instance; } }; @@ -772,9 +1472,25 @@ struct CelestialBodyMeta { static DB2Meta const* Instance() { - static char const* types = "iiiiiifffffffhi"; - static uint8 const arraySizes[15] = { 1, 1, 2, 1, 1, 2, 2, 2, 1, 2, 1, 3, 1, 1, 1 }; - static DB2Meta instance(14, 15, 0xD09BE31C, types, arraySizes, -1); + static DB2MetaField const fields[15] = + { + { FT_FLOAT, 3, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 2, true }, + { FT_FLOAT, 2, true }, + { FT_INT, 2, true }, + { FT_FLOAT, 2, true }, + { FT_FLOAT, 2, true }, + }; + static DB2Meta instance(1, 15, 0xFC417DCA, fields, -1); return &instance; } }; @@ -783,9 +1499,15 @@ struct Cfg_CategoriesMeta { static DB2Meta const* Instance() { - static char const* types = "shbbb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x705B82C8, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_STRING, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 5, 0xB6FEB874, fields, -1); return &instance; } }; @@ -794,9 +1516,14 @@ struct Cfg_ConfigsMeta { static DB2Meta const* Instance() { - static char const* types = "fhbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xC618392F, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0xA275539B, fields, -1); return &instance; } }; @@ -805,9 +1532,15 @@ struct Cfg_RegionsMeta { static DB2Meta const* Instance() { - static char const* types = "siihb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x9F4272BF, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 5, 0x0125202F, fields, -1); return &instance; } }; @@ -816,9 +1549,12 @@ struct CharBaseInfoMeta { static DB2Meta const* Instance() { - static char const* types = "bb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x9E9939B8, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x10AA45F8, fields, -1); return &instance; } }; @@ -827,9 +1563,13 @@ struct CharBaseSectionMeta { static DB2Meta const* Instance() { - static char const* types = "bbb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x4F08B5F3, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xF9D1C513, fields, -1); return &instance; } }; @@ -838,9 +1578,12 @@ struct CharComponentTextureLayoutsMeta { static DB2Meta const* Instance() { - static char const* types = "hh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x0F515E34, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x48D8D7BC, fields, -1); return &instance; } }; @@ -849,9 +1592,17 @@ struct CharComponentTextureSectionsMeta { static DB2Meta const* Instance() { - static char const* types = "ihhhhbb"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0xCE76000F, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 7, 0xD6EDA743, fields, -1); return &instance; } }; @@ -860,9 +1611,20 @@ struct CharHairGeosetsMeta { static DB2Meta const* Instance() { - static char const* types = "ibbbbbbbbi"; - static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 10, 0x33EB32D2, types, arraySizes, 1); + static DB2MetaField const fields[10] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 10, 0xE3732EA9, fields, 0); return &instance; } }; @@ -871,9 +1633,17 @@ struct CharSectionsMeta { static DB2Meta const* Instance() { - static char const* types = "ihbbbbb"; - static uint8 const arraySizes[7] = { 3, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0xE349E55B, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_INT, 3, true }, + }; + static DB2Meta instance(-1, 7, 0x273A7F6F, fields, -1); return &instance; } }; @@ -882,9 +1652,19 @@ struct CharShipmentMeta { static DB2Meta const* Instance() { - static char const* types = "iiiiihhbb"; - static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 9, 0xE6D3C7C1, types, arraySizes, 5); + static DB2MetaField const fields[9] = + { + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 9, 0xD47EC921, fields, 0); return &instance; } }; @@ -893,9 +1673,26 @@ struct CharShipmentContainerMeta { static DB2Meta const* Instance() { - static char const* types = "ssihhhhhhbbbbbbi"; - static uint8 const arraySizes[16] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 16, 0x194896E3, types, arraySizes, -1); + static DB2MetaField const fields[16] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 16, 0x13048703, fields, -1); return &instance; } }; @@ -904,9 +1701,17 @@ struct CharStartOutfitMeta { static DB2Meta const* Instance() { - static char const* types = "iibbbbb"; - static uint8 const arraySizes[7] = { 24, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0x0EEBEE24, types, arraySizes, 6); + static DB2MetaField const fields[7] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 24, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 7, 0x0F59DD96, fields, 6); return &instance; } }; @@ -915,9 +1720,14 @@ struct CharTitlesMeta { static DB2Meta const* Instance() { - static char const* types = "sshb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x7A58AA5F, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 4, 0x81B69C5F, fields, -1); return &instance; } }; @@ -926,9 +1736,15 @@ struct CharacterFaceBoneSetMeta { static DB2Meta const* Instance() { - static char const* types = "ibbbb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x1C634076, types, arraySizes, 4); + static DB2MetaField const fields[5] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 5, 0x3C6DE4D7, fields, 4); return &instance; } }; @@ -937,9 +1753,14 @@ struct CharacterFacialHairStylesMeta { static DB2Meta const* Instance() { - static char const* types = "ibbb"; - static uint8 const arraySizes[4] = { 5, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x47D79688, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 5, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xAA817A08, fields, -1); return &instance; } }; @@ -948,9 +1769,13 @@ struct CharacterLoadoutMeta { static DB2Meta const* Instance() { - static char const* types = "lbb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x87B51673, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_LONG, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xA07F9727, fields, -1); return &instance; } }; @@ -959,9 +1784,12 @@ struct CharacterLoadoutItemMeta { static DB2Meta const* Instance() { - static char const* types = "ih"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x3C3D40B9, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xD892CDA9, fields, 0); return &instance; } }; @@ -970,9 +1798,21 @@ struct CharacterServiceInfoMeta { static DB2Meta const* Instance() { - static char const* types = "sssiiiiiiii"; - static uint8 const arraySizes[11] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 11, 0xADE120EF, types, arraySizes, -1); + static DB2MetaField const fields[11] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 11, 0xC263D77C, fields, -1); return &instance; } }; @@ -981,9 +1821,14 @@ struct ChatChannelsMeta { static DB2Meta const* Instance() { - static char const* types = "ssib"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x1A325E80, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 4, 0x113E92FA, fields, -1); return &instance; } }; @@ -992,9 +1837,12 @@ struct ChatProfanityMeta { static DB2Meta const* Instance() { - static char const* types = "sb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x328E1FE6, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xAF5F92A6, fields, -1); return &instance; } }; @@ -1003,9 +1851,16 @@ struct ChrClassRaceSexMeta { static DB2Meta const* Instance() { - static char const* types = "bbbiii"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0x5E29DFA1, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 6, 0x204BD561, fields, -1); return &instance; } }; @@ -1014,9 +1869,13 @@ struct ChrClassTitleMeta { static DB2Meta const* Instance() { - static char const* types = "ssb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xC155DB2C, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xA01D47C8, fields, -1); return &instance; } }; @@ -1025,9 +1884,13 @@ struct ChrClassUIDisplayMeta { static DB2Meta const* Instance() { - static char const* types = "bii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x59A95A73, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x3D58F88F, fields, -1); return &instance; } }; @@ -1036,9 +1899,13 @@ struct ChrClassVillainMeta { static DB2Meta const* Instance() { - static char const* types = "sbb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xA6AC18CD, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x601C7CCD, fields, -1); return &instance; } }; @@ -1047,9 +1914,30 @@ struct ChrClassesMeta { static DB2Meta const* Instance() { - static char const* types = "sssssiiiiihhhbbbbbbi"; - static uint8 const arraySizes[20] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(19, 20, 0x6F7AB8E7, types, arraySizes, -1); + static DB2MetaField const fields[20] = + { + { FT_STRING, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(5, 20, 0x2CD115AC, fields, -1); return &instance; } }; @@ -1058,9 +1946,12 @@ struct ChrClassesXPowerTypesMeta { static DB2Meta const* Instance() { - static char const* types = "bb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xAF977B23, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x6DE888E7, fields, 1); return &instance; } }; @@ -1069,9 +1960,17 @@ struct ChrCustomizationMeta { static DB2Meta const* Instance() { - static char const* types = "siiiii"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 3, 1 }; - static DB2Meta instance(-1, 6, 0x71833CE5, types, arraySizes, 5); + static DB2MetaField const fields[7] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 3, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 7, 0xC29562A3, fields, 6); return &instance; } }; @@ -1080,9 +1979,56 @@ struct ChrRacesMeta { static DB2Meta const* Instance() { - static char const* types = "ssssssiiiiiffiiihhhhbbbbbbbbbbiiiiiiii"; - static uint8 const arraySizes[38] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3 }; - static DB2Meta instance(30, 38, 0x51C511F9, types, arraySizes, -1); + static DB2MetaField const fields[46] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_INT, 1, true }, + { FT_INT, 3, false }, + { FT_INT, 3, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(6, 46, 0xC8BCDC89, fields, -1); return &instance; } }; @@ -1091,9 +2037,23 @@ struct ChrSpecializationMeta { static DB2Meta const* Instance() { - static char const* types = "sssibbbbbiiii"; - static uint8 const arraySizes[13] = { 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(9, 13, 0x3D86B8F7, types, arraySizes, 4); + static DB2MetaField const fields[13] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 2, true }, + }; + static DB2Meta instance(3, 13, 0xFF9DD5DD, fields, 4); return &instance; } }; @@ -1102,9 +2062,13 @@ struct ChrUpgradeBucketMeta { static DB2Meta const* Instance() { - static char const* types = "hib"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(1, 3, 0xACF64A80, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(0, 3, 0x81B7C74C, fields, 2); return &instance; } }; @@ -1113,9 +2077,12 @@ struct ChrUpgradeBucketSpellMeta { static DB2Meta const* Instance() { - static char const* types = "ih"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xDF939031, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xC665F469, fields, 1); return &instance; } }; @@ -1124,9 +2091,14 @@ struct ChrUpgradeTierMeta { static DB2Meta const* Instance() { - static char const* types = "sbbi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(3, 4, 0x2C87937D, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(1, 4, 0xEC517FDD, fields, -1); return &instance; } }; @@ -1135,9 +2107,14 @@ struct CinematicCameraMeta { static DB2Meta const* Instance() { - static char const* types = "iffi"; - static uint8 const arraySizes[4] = { 1, 3, 1, 1 }; - static DB2Meta instance(-1, 4, 0x0062B0F4, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_FLOAT, 3, true }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x20C5E540, fields, -1); return &instance; } }; @@ -1146,9 +2123,25 @@ struct CinematicSequencesMeta { static DB2Meta const* Instance() { - static char const* types = "ih"; - static uint8 const arraySizes[2] = { 1, 8 }; - static DB2Meta instance(-1, 2, 0x470FDA8C, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, false }, + { FT_SHORT, 8, false }, + }; + static DB2Meta instance(-1, 2, 0x6A232AD4, fields, -1); + return &instance; + } +}; + +struct ClientSceneEffectMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[1] = + { + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x00EE4486, fields, -1); return &instance; } }; @@ -1157,9 +2150,37 @@ struct CloakDampeningMeta { static DB2Meta const* Instance() { - static char const* types = "fffffff"; - static uint8 const arraySizes[7] = { 5, 5, 2, 2, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0xB2DF7F2A, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 5, true }, + { FT_FLOAT, 5, true }, + { FT_FLOAT, 2, true }, + { FT_FLOAT, 2, true }, + }; + static DB2Meta instance(-1, 7, 0xF7C03F6E, fields, -1); + return &instance; + } +}; + +struct CloneEffectMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[8] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 8, 0x2F946F74, fields, -1); return &instance; } }; @@ -1168,9 +2189,21 @@ struct CombatConditionMeta { static DB2Meta const* Instance() { - static char const* types = "hhhhhbbbbbb"; - static uint8 const arraySizes[11] = { 1, 1, 1, 2, 2, 2, 2, 1, 2, 2, 1 }; - static DB2Meta instance(-1, 11, 0x28D253C6, types, arraySizes, -1); + static DB2MetaField const fields[11] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 2, false }, + { FT_BYTE, 2, false }, + { FT_BYTE, 2, false }, + { FT_SHORT, 2, false }, + { FT_BYTE, 2, false }, + { FT_BYTE, 2, false }, + }; + static DB2Meta instance(-1, 11, 0x75A29044, fields, -1); return &instance; } }; @@ -1179,9 +2212,12 @@ struct CommentatorStartLocationMeta { static DB2Meta const* Instance() { - static char const* types = "fi"; - static uint8 const arraySizes[2] = { 3, 1 }; - static DB2Meta instance(-1, 2, 0xEFD540EF, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_FLOAT, 3, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xF552D58F, fields, -1); return &instance; } }; @@ -1190,9 +2226,29 @@ struct CommentatorTrackedCooldownMeta { static DB2Meta const* Instance() { - static char const* types = "bbih"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x84985168, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x3A1476FC, fields, 3); + return &instance; + } +}; + +struct CommunityIconMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 3, 0x7E19DEAD, fields, -1); return &instance; } }; @@ -1201,9 +2257,14 @@ struct ComponentModelFileDataMeta { static DB2Meta const* Instance() { - static char const* types = "bbbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x25BB55A7, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 4, 0x0F90AFAF, fields, -1); return &instance; } }; @@ -1212,9 +2273,13 @@ struct ComponentTextureFileDataMeta { static DB2Meta const* Instance() { - static char const* types = "bbb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x50C58D4F, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x263AACE3, fields, -1); return &instance; } }; @@ -1223,9 +2288,30 @@ struct ConfigurationWarningMeta { static DB2Meta const* Instance() { - static char const* types = "si"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x0B350390, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x99BCBA2D, fields, -1); + return &instance; + } +}; + +struct ContentTuningMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[6] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 6, 0xD1A210D1, fields, -1); return &instance; } }; @@ -1234,9 +2320,49 @@ struct ContributionMeta { static DB2Meta const* Instance() { - static char const* types = "ssiiii"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 4, 1 }; - static DB2Meta instance(2, 6, 0x8EDF6090, types, arraySizes, 3); + static DB2MetaField const fields[7] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 4, true }, + }; + static DB2Meta instance(2, 7, 0x37C49135, fields, 3); + return &instance; + } +}; + +struct ContributionStyleMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[7] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 7, 0x799AE511, fields, -1); + return &instance; + } +}; + +struct ContributionStyleContainerMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[1] = + { + { FT_INT, 5, true }, + }; + static DB2Meta instance(-1, 1, 0x55DAA69B, fields, -1); return &instance; } }; @@ -1245,9 +2371,18 @@ struct ConversationLineMeta { static DB2Meta const* Instance() { - static char const* types = "iiihhbbb"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 8, 0x032B137B, types, arraySizes, -1); + static DB2MetaField const fields[8] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 8, 0x227B5003, fields, -1); return &instance; } }; @@ -1256,9 +2391,21 @@ struct CreatureMeta { static DB2Meta const* Instance() { - static char const* types = "ssssiiifbbbb"; - static uint8 const arraySizes[12] = { 1, 1, 1, 1, 3, 1, 4, 4, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 12, 0xCFB508A9, types, arraySizes, -1); + static DB2MetaField const fields[11] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 4, true }, + { FT_FLOAT, 4, true }, + { FT_INT, 3, true }, + }; + static DB2Meta instance(-1, 11, 0x0D492BF3, fields, -1); return &instance; } }; @@ -1267,9 +2414,17 @@ struct CreatureDifficultyMeta { static DB2Meta const* Instance() { - static char const* types = "ihbbbi"; - static uint8 const arraySizes[6] = { 7, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0x4291EEC6, types, arraySizes, 5); + static DB2MetaField const fields[7] = + { + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 7, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 7, 0xD344A642, fields, 6); return &instance; } }; @@ -1278,9 +2433,12 @@ struct CreatureDispXUiCameraMeta { static DB2Meta const* Instance() { - static char const* types = "ih"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x6E0E7C15, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xD3D075FD, fields, -1); return &instance; } }; @@ -1289,9 +2447,35 @@ struct CreatureDisplayInfoMeta { static DB2Meta const* Instance() { - static char const* types = "ifhhbbbiibhfibhihhbifii"; - static uint8 const arraySizes[23] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3 }; - static DB2Meta instance(0, 23, 0x406268DF, types, arraySizes, -1); + static DB2MetaField const fields[25] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 3, true }, + }; + static DB2Meta instance(0, 25, 0x613413D1, fields, -1); return &instance; } }; @@ -1300,9 +2484,25 @@ struct CreatureDisplayInfoCondMeta { static DB2Meta const* Instance() { - static char const* types = "liiibbiiiiiiiii"; - static uint8 const arraySizes[15] = { 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1 }; - static DB2Meta instance(-1, 15, 0x26CD44AB, types, arraySizes, 14); + static DB2MetaField const fields[15] = + { + { FT_LONG, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 2, true }, + { FT_INT, 2, true }, + { FT_INT, 2, true }, + { FT_INT, 3, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 15, 0x596B4605, fields, 14); return &instance; } }; @@ -1311,9 +2511,14 @@ struct CreatureDisplayInfoEvtMeta { static DB2Meta const* Instance() { - static char const* types = "iibi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x3FEF69BB, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0x16C6EC13, fields, 3); return &instance; } }; @@ -1322,9 +2527,37 @@ struct CreatureDisplayInfoExtraMeta { static DB2Meta const* Instance() { - static char const* types = "iibbbbbbbbbb"; - static uint8 const arraySizes[12] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1 }; - static DB2Meta instance(-1, 12, 0x6DF98EF6, types, arraySizes, -1); + static DB2MetaField const fields[12] = + { + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 3, false }, + }; + static DB2Meta instance(-1, 12, 0x89E31B13, fields, -1); + return &instance; + } +}; + +struct CreatureDisplayInfoGeosetDataMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x13350FA0, fields, 2); return &instance; } }; @@ -1333,9 +2566,16 @@ struct CreatureDisplayInfoTrnMeta { static DB2Meta const* Instance() { - static char const* types = "ifiiii"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0x8E687740, types, arraySizes, 5); + static DB2MetaField const fields[6] = + { + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 6, 0xC3E28858, fields, 5); return &instance; } }; @@ -1344,9 +2584,19 @@ struct CreatureFamilyMeta { static DB2Meta const* Instance() { - static char const* types = "sffihhbbb"; - static uint8 const arraySizes[9] = { 1, 1, 1, 1, 2, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 9, 0xE2DC5126, types, arraySizes, -1); + static DB2MetaField const fields[9] = + { + { FT_STRING, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 2, true }, + }; + static DB2Meta instance(-1, 9, 0x9D14B492, fields, -1); return &instance; } }; @@ -1355,9 +2605,19 @@ struct CreatureImmunitiesMeta { static DB2Meta const* Instance() { - static char const* types = "ibbbbbiii"; - static uint8 const arraySizes[9] = { 2, 1, 1, 1, 1, 1, 1, 8, 16 }; - static DB2Meta instance(-1, 9, 0x2D20050B, types, arraySizes, -1); + static DB2MetaField const fields[9] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 2, true }, + { FT_INT, 9, false }, + { FT_INT, 16, false }, + }; + static DB2Meta instance(-1, 9, 0x36D9340F, fields, -1); return &instance; } }; @@ -1366,9 +2626,38 @@ struct CreatureModelDataMeta { static DB2Meta const* Instance() { - static char const* types = "ffffffffffffffffffiiiiiiiiii"; - static uint8 const arraySizes[28] = { 1, 1, 1, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 28, 0x983BD312, types, arraySizes, -1); + static DB2MetaField const fields[28] = + { + { FT_FLOAT, 6, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 28, 0xF61D550A, fields, -1); return &instance; } }; @@ -1377,9 +2666,11 @@ struct CreatureMovementInfoMeta { static DB2Meta const* Instance() { - static char const* types = "f"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x39F710E3, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x31BE6397, fields, -1); return &instance; } }; @@ -1388,9 +2679,47 @@ struct CreatureSoundDataMeta { static DB2Meta const* Instance() { - static char const* types = "ffbiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"; - static uint8 const arraySizes[37] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 4 }; - static DB2Meta instance(-1, 37, 0x7C3C39B9, types, arraySizes, -1); + static DB2MetaField const fields[37] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 5, false }, + { FT_INT, 4, false }, + }; + static DB2Meta instance(-1, 37, 0xA58BDB91, fields, -1); return &instance; } }; @@ -1399,9 +2728,12 @@ struct CreatureTypeMeta { static DB2Meta const* Instance() { - static char const* types = "sb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x7BA9D2F8, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x218D575A, fields, -1); return &instance; } }; @@ -1410,9 +2742,30 @@ struct CreatureXContributionMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(0, 3, 0x3448DF58, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 3, 0x2DC69C04, fields, 2); + return &instance; + } +}; + +struct CreatureXDisplayInfoMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[5] = + { + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x44D147A6, fields, 4); return &instance; } }; @@ -1421,9 +2774,21 @@ struct CriteriaMeta { static DB2Meta const* Instance() { - static char const* types = "iiiihhbbbbb"; - static uint8 const arraySizes[11] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 11, 0xA87A5BB9, types, arraySizes, -1); + static DB2MetaField const fields[11] = + { + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 11, 0x754DDF45, fields, -1); return &instance; } }; @@ -1432,9 +2797,17 @@ struct CriteriaTreeMeta { static DB2Meta const* Instance() { - static char const* types = "sihbiii"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0x0A1B99C2, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 7, 0xC926CF94, fields, -1); return &instance; } }; @@ -1443,9 +2816,12 @@ struct CriteriaTreeXEffectMeta { static DB2Meta const* Instance() { - static char const* types = "hi"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x929D9B0C, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x80C700F5, fields, 1); return &instance; } }; @@ -1454,9 +2830,33 @@ struct CurrencyCategoryMeta { static DB2Meta const* Instance() { - static char const* types = "sbb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xC3735D76, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x0DB1F53C, fields, -1); + return &instance; + } +}; + +struct CurrencyContainerMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[8] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 8, 0xAC6030BF, fields, 7); return &instance; } }; @@ -1465,9 +2865,21 @@ struct CurrencyTypesMeta { static DB2Meta const* Instance() { - static char const* types = "ssiiibbbii"; - static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 10, 0x6CC25CBF, types, arraySizes, -1); + static DB2MetaField const fields[11] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 11, 0x998F0AAA, fields, -1); return &instance; } }; @@ -1476,9 +2888,12 @@ struct CurveMeta { static DB2Meta const* Instance() { - static char const* types = "bb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x17EA5154, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x4E6F1184, fields, -1); return &instance; } }; @@ -1487,9 +2902,13 @@ struct CurvePointMeta { static DB2Meta const* Instance() { - static char const* types = "fhb"; - static uint8 const arraySizes[3] = { 2, 1, 1 }; - static DB2Meta instance(-1, 3, 0xF36752EB, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_FLOAT, 2, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xFA003217, fields, -1); return &instance; } }; @@ -1498,9 +2917,14 @@ struct DeathThudLookupsMeta { static DB2Meta const* Instance() { - static char const* types = "bbii"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xD469085C, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x3BF7542C, fields, -1); return &instance; } }; @@ -1509,9 +2933,28 @@ struct DecalPropertiesMeta { static DB2Meta const* Instance() { - static char const* types = "iiffffffffbbiiiii"; - static uint8 const arraySizes[17] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(0, 17, 0xDD48C72A, types, arraySizes, -1); + static DB2MetaField const fields[18] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(0, 18, 0xB11F3B40, fields, -1); return &instance; } }; @@ -1520,9 +2963,12 @@ struct DeclinedWordMeta { static DB2Meta const* Instance() { - static char const* types = "si"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(1, 2, 0x3FF5EC3E, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(1, 2, 0x10D7C6A6, fields, -1); return &instance; } }; @@ -1531,9 +2977,13 @@ struct DeclinedWordCasesMeta { static DB2Meta const* Instance() { - static char const* types = "sbi"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x821A20A9, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x3E19B9C5, fields, 2); return &instance; } }; @@ -1542,9 +2992,32 @@ struct DestructibleModelDataMeta { static DB2Meta const* Instance() { - static char const* types = "hhhhhbbbbbbbbbbbbbbbbb"; - static uint8 const arraySizes[22] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 22, 0x1092C9AF, types, arraySizes, -1); + static DB2MetaField const fields[22] = + { + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 22, 0xF245BA93, fields, -1); return &instance; } }; @@ -1553,9 +3026,12 @@ struct DeviceBlacklistMeta { static DB2Meta const* Instance() { - static char const* types = "hh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xD956413D, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x2A350905, fields, -1); return &instance; } }; @@ -1564,9 +3040,13 @@ struct DeviceDefaultSettingsMeta { static DB2Meta const* Instance() { - static char const* types = "hhb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x90CFEC8C, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x2AB8A38C, fields, -1); return &instance; } }; @@ -1575,9 +3055,23 @@ struct DifficultyMeta { static DB2Meta const* Instance() { - static char const* types = "shhhbbbbbbbbb"; - static uint8 const arraySizes[13] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 13, 0x92302BB8, types, arraySizes, -1); + static DB2MetaField const fields[13] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 13, 0x29FC158C, fields, -1); return &instance; } }; @@ -1586,9 +3080,24 @@ struct DissolveEffectMeta { static DB2Meta const* Instance() { - static char const* types = "ffffffffbbiiii"; - static uint8 const arraySizes[14] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 14, 0x566413E7, types, arraySizes, -1); + static DB2MetaField const fields[14] = + { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 14, 0x77C510EC, fields, -1); return &instance; } }; @@ -1597,9 +3106,17 @@ struct DriverBlacklistMeta { static DB2Meta const* Instance() { - static char const* types = "iihbbbb"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0x1466ACAD, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 7, 0x88C28C05, fields, -1); return &instance; } }; @@ -1608,130 +3125,218 @@ struct DungeonEncounterMeta { static DB2Meta const* Instance() { - static char const* types = "sihbbbiii"; - static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(6, 9, 0xB04A2596, types, arraySizes, 2); + static DB2MetaField const fields[9] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(1, 9, 0x6E5C2332, fields, 2); return &instance; } }; -struct DungeonMapMeta +struct DurabilityCostsMeta { static DB2Meta const* Instance() { - static char const* types = "ffhhbbbi"; - static uint8 const arraySizes[8] = { 2, 2, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(7, 8, 0xB5A245F4, types, arraySizes, 2); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 21, false }, + { FT_SHORT, 8, false }, + }; + static DB2Meta instance(-1, 2, 0xBB493F52, fields, -1); return &instance; } }; -struct DungeonMapChunkMeta +struct DurabilityQualityMeta { static DB2Meta const* Instance() { - static char const* types = "fihhh"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x7927A3A7, types, arraySizes, 2); + static DB2MetaField const fields[1] = + { + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xCFF4EEC9, fields, -1); return &instance; } }; -struct DurabilityCostsMeta +struct EdgeGlowEffectMeta { static DB2Meta const* Instance() { - static char const* types = "hh"; - static uint8 const arraySizes[2] = { 21, 8 }; - static DB2Meta instance(-1, 2, 0x8447966A, types, arraySizes, -1); + static DB2MetaField const fields[13] = + { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 13, 0xCBCC7336, fields, -1); return &instance; } }; -struct DurabilityQualityMeta +struct EmotesMeta { static DB2Meta const* Instance() { - static char const* types = "f"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x6F64793D, types, arraySizes, -1); + static DB2MetaField const fields[9] = + { + { FT_LONG, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 9, 0xA909E182, fields, -1); return &instance; } }; -struct EdgeGlowEffectMeta +struct EmotesTextMeta { static DB2Meta const* Instance() { - static char const* types = "ffffffffffbii"; - static uint8 const arraySizes[13] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 13, 0x083BF2C4, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xE255C6B0, fields, -1); return &instance; } }; -struct EmotesMeta +struct EmotesTextDataMeta { static DB2Meta const* Instance() { - static char const* types = "lsiihbiii"; - static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 9, 0x14467F27, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x460E8F09, fields, 2); return &instance; } }; -struct EmotesTextMeta +struct EmotesTextSoundMeta { static DB2Meta const* Instance() { - static char const* types = "sh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xE85AFA10, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 5, 0x3A15105C, fields, 4); return &instance; } }; -struct EmotesTextDataMeta +struct EnvironmentalDamageMeta { static DB2Meta const* Instance() { - static char const* types = "sbh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x0E19BCF1, types, arraySizes, 2); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x448422B4, fields, -1); return &instance; } }; -struct EmotesTextSoundMeta +struct ExhaustionMeta { static DB2Meta const* Instance() { - static char const* types = "bbbih"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x6DFAF9BC, types, arraySizes, 4); + static DB2MetaField const fields[8] = + { + { FT_STRING, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(2, 8, 0xF0F48BB5, fields, -1); return &instance; } }; -struct EnvironmentalDamageMeta +struct ExpectedStatMeta { static DB2Meta const* Instance() { - static char const* types = "hb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xC4552C14, types, arraySizes, -1); + static DB2MetaField const fields[11] = + { + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 11, 0xF0E61875, fields, 10); return &instance; } }; -struct ExhaustionMeta +struct ExpectedStatModMeta { static DB2Meta const* Instance() { - static char const* types = "ssiffffi"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(7, 8, 0xE6E16045, types, arraySizes, -1); + static DB2MetaField const fields[9] = + { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 9, 0xEA56E599, fields, -1); return &instance; } }; @@ -1740,9 +3345,26 @@ struct FactionMeta { static DB2Meta const* Instance() { - static char const* types = "lssiifihhhhhbbbb"; - static uint8 const arraySizes[16] = { 4, 1, 1, 1, 4, 2, 4, 1, 4, 4, 1, 1, 2, 1, 1, 1 }; - static DB2Meta instance(3, 16, 0x6BFE8737, types, arraySizes, -1); + static DB2MetaField const fields[16] = + { + { FT_LONG, 4, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 4, true }, + { FT_SHORT, 4, false }, + { FT_INT, 4, true }, + { FT_INT, 4, true }, + { FT_FLOAT, 2, true }, + { FT_BYTE, 2, false }, + }; + static DB2Meta instance(3, 16, 0x86FE2D69, fields, -1); return &instance; } }; @@ -1751,9 +3373,16 @@ struct FactionGroupMeta { static DB2Meta const* Instance() { - static char const* types = "ssibii"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(2, 6, 0x7A7F9A51, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(2, 6, 0xB9B4369B, fields, -1); return &instance; } }; @@ -1762,9 +3391,17 @@ struct FactionTemplateMeta { static DB2Meta const* Instance() { - static char const* types = "hhhhbbb"; - static uint8 const arraySizes[7] = { 1, 1, 4, 4, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0x6F1D2135, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 4, false }, + { FT_SHORT, 4, false }, + }; + static DB2Meta instance(-1, 7, 0xD7143473, fields, -1); return &instance; } }; @@ -1773,9 +3410,13 @@ struct FootprintTexturesMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xFD6FF285, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xF82F1359, fields, -1); return &instance; } }; @@ -1784,9 +3425,14 @@ struct FootstepTerrainLookupMeta { static DB2Meta const* Instance() { - static char const* types = "hbii"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x454895AE, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xC70AACC6, fields, -1); return &instance; } }; @@ -1795,9 +3441,13 @@ struct FriendshipRepReactionMeta { static DB2Meta const* Instance() { - static char const* types = "shb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x9C412E5B, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x8B096063, fields, 1); return &instance; } }; @@ -1806,9 +3456,14 @@ struct FriendshipReputationMeta { static DB2Meta const* Instance() { - static char const* types = "sihi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(3, 4, 0x406EE0AB, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(1, 4, 0xECCE459C, fields, -1); return &instance; } }; @@ -1817,9 +3472,38 @@ struct FullScreenEffectMeta { static DB2Meta const* Instance() { - static char const* types = "fffffffffffffffffffffffiiii"; - static uint8 const arraySizes[27] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 27, 0x5CBF1D1B, types, arraySizes, -1); + static DB2MetaField const fields[28] = + { + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 28, 0x9854A6AC, fields, -1); return &instance; } }; @@ -1828,9 +3512,13 @@ struct GMSurveyAnswersMeta { static DB2Meta const* Instance() { - static char const* types = "sbi"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x422747F6, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xDE59EC07, fields, 2); return &instance; } }; @@ -1839,9 +3527,11 @@ struct GMSurveyCurrentSurveyMeta { static DB2Meta const* Instance() { - static char const* types = "b"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x617205BF, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 1, 0xAD0D7453, fields, -1); return &instance; } }; @@ -1850,9 +3540,11 @@ struct GMSurveyQuestionsMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x9D852FDC, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x12B097E1, fields, -1); return &instance; } }; @@ -1861,9 +3553,11 @@ struct GMSurveySurveysMeta { static DB2Meta const* Instance() { - static char const* types = "b"; - static uint8 const arraySizes[1] = { 15 }; - static DB2Meta instance(-1, 1, 0x17FEF812, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_BYTE, 15, false }, + }; + static DB2Meta instance(-1, 1, 0x24BB51BE, fields, -1); return &instance; } }; @@ -1872,9 +3566,12 @@ struct GameObjectArtKitMeta { static DB2Meta const* Instance() { - static char const* types = "ii"; - static uint8 const arraySizes[2] = { 1, 3 }; - static DB2Meta instance(-1, 2, 0x6F65BC41, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, true }, + { FT_INT, 3, true }, + }; + static DB2Meta instance(-1, 2, 0xECF16719, fields, -1); return &instance; } }; @@ -1883,9 +3580,14 @@ struct GameObjectDiffAnimMapMeta { static DB2Meta const* Instance() { - static char const* types = "hbbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x89A617CF, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xDB3508F3, fields, 3); return &instance; } }; @@ -1894,9 +3596,15 @@ struct GameObjectDisplayInfoMeta { static DB2Meta const* Instance() { - static char const* types = "ifffh"; - static uint8 const arraySizes[5] = { 1, 6, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x9F2098D1, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_FLOAT, 6, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x7A816799, fields, -1); return &instance; } }; @@ -1905,9 +3613,13 @@ struct GameObjectDisplayInfoXSoundKitMeta { static DB2Meta const* Instance() { - static char const* types = "bii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x4BBA66F2, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x456E4627, fields, 2); return &instance; } }; @@ -1916,9 +3628,22 @@ struct GameObjectsMeta { static DB2Meta const* Instance() { - static char const* types = "sfffihhhhbbi"; - static uint8 const arraySizes[12] = { 1, 3, 4, 1, 8, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(11, 12, 0x597E8643, types, arraySizes, 5); + static DB2MetaField const fields[12] = + { + { FT_STRING, 1, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 4, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 8, true }, + }; + static DB2Meta instance(3, 12, 0x0995B956, fields, 4); return &instance; } }; @@ -1927,9 +3652,14 @@ struct GameTipsMeta { static DB2Meta const* Instance() { - static char const* types = "shhb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x547E3F0F, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x768EB877, fields, -1); return &instance; } }; @@ -1938,9 +3668,18 @@ struct GarrAbilityMeta { static DB2Meta const* Instance() { - static char const* types = "ssihhbbi"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(7, 8, 0x5DF95DBD, types, arraySizes, -1); + static DB2MetaField const fields[8] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(2, 8, 0x8256E595, fields, -1); return &instance; } }; @@ -1949,9 +3688,11 @@ struct GarrAbilityCategoryMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x96663ABF, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x9F2C8370, fields, -1); return &instance; } }; @@ -1960,9 +3701,22 @@ struct GarrAbilityEffectMeta { static DB2Meta const* Instance() { - static char const* types = "fffihbbbbbbi"; - static uint8 const arraySizes[12] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(11, 12, 0xE6A6CB99, types, arraySizes, 4); + static DB2MetaField const fields[12] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(0, 12, 0x682EE0E1, fields, 1); return &instance; } }; @@ -1971,9 +3725,34 @@ struct GarrBuildingMeta { static DB2Meta const* Instance() { - static char const* types = "ssssiiihhhhhhhhbbbbbbiii"; - static uint8 const arraySizes[24] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 24, 0x200F9858, types, arraySizes, -1); + static DB2MetaField const fields[24] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 24, 0x158D48D4, fields, -1); return &instance; } }; @@ -1982,9 +3761,15 @@ struct GarrBuildingDoodadSetMeta { static DB2Meta const* Instance() { - static char const* types = "bbbbb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x2A861C7F, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 5, 0x9A6DE309, fields, -1); return &instance; } }; @@ -1993,9 +3778,15 @@ struct GarrBuildingPlotInstMeta { static DB2Meta const* Instance() { - static char const* types = "fhhbi"; - static uint8 const arraySizes[5] = { 2, 1, 1, 1, 1 }; - static DB2Meta instance(4, 5, 0xF45B6227, types, arraySizes, 3); + static DB2MetaField const fields[5] = + { + { FT_FLOAT, 2, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(1, 5, 0xFB61E627, fields, 2); return &instance; } }; @@ -2004,9 +3795,18 @@ struct GarrClassSpecMeta { static DB2Meta const* Instance() { - static char const* types = "ssshhbbi"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(7, 8, 0x194CD478, types, arraySizes, -1); + static DB2MetaField const fields[8] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(3, 8, 0x644E1AC4, fields, -1); return &instance; } }; @@ -2015,9 +3815,16 @@ struct GarrClassSpecPlayerCondMeta { static DB2Meta const* Instance() { - static char const* types = "sibiii"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0x06936172, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 6, 0x561DEBFE, fields, -1); return &instance; } }; @@ -2026,9 +3833,17 @@ struct GarrEncounterMeta { static DB2Meta const* Instance() { - static char const* types = "siffiii"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(5, 7, 0x63EF121A, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(1, 7, 0xD193D559, fields, -1); return &instance; } }; @@ -2037,9 +3852,13 @@ struct GarrEncounterSetXEncounterMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(0, 3, 0x3AA64423, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(0, 3, 0xCA7143E7, fields, 2); return &instance; } }; @@ -2048,9 +3867,13 @@ struct GarrEncounterXMechanicMeta { static DB2Meta const* Instance() { - static char const* types = "bbh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x97080E17, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x0960A66B, fields, 2); return &instance; } }; @@ -2059,9 +3882,14 @@ struct GarrFollItemSetMemberMeta { static DB2Meta const* Instance() { - static char const* types = "ihbh"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xCA1C4CBF, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x9166B16F, fields, 3); return &instance; } }; @@ -2070,9 +3898,14 @@ struct GarrFollSupportSpellMeta { static DB2Meta const* Instance() { - static char const* types = "iibi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xB7DBA2D1, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0xDB563FC8, fields, 3); return &instance; } }; @@ -2081,9 +3914,42 @@ struct GarrFollowerMeta { static DB2Meta const* Instance() { - static char const* types = "sssiiiiiihhhhhhbbbbbbbbbbbbbbbbi"; - static uint8 const arraySizes[32] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(31, 32, 0xAAB75E04, types, arraySizes, -1); + static DB2MetaField const fields[32] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(3, 32, 0x7C5C19F1, fields, -1); return &instance; } }; @@ -2092,9 +3958,14 @@ struct GarrFollowerLevelXPMeta { static DB2Meta const* Instance() { - static char const* types = "hhbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x1ED485E2, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xABD178B2, fields, -1); return &instance; } }; @@ -2103,9 +3974,17 @@ struct GarrFollowerQualityMeta { static DB2Meta const* Instance() { - static char const* types = "ihbbbbi"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0xAFF4CF7E, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 7, 0xCAE87042, fields, -1); return &instance; } }; @@ -2114,9 +3993,12 @@ struct GarrFollowerSetXFollowerMeta { static DB2Meta const* Instance() { - static char const* types = "ii"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xDB0E0A17, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x621C60FF, fields, 1); return &instance; } }; @@ -2125,9 +4007,17 @@ struct GarrFollowerTypeMeta { static DB2Meta const* Instance() { - static char const* types = "hbbbbbb"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0xD676FBC0, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 7, 0xB4B34EF0, fields, -1); return &instance; } }; @@ -2136,9 +4026,16 @@ struct GarrFollowerUICreatureMeta { static DB2Meta const* Instance() { - static char const* types = "ifbbbh"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0x7E275E96, types, arraySizes, 5); + static DB2MetaField const fields[6] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 6, 0x93A1FAA6, fields, 5); return &instance; } }; @@ -2147,9 +4044,14 @@ struct GarrFollowerXAbilityMeta { static DB2Meta const* Instance() { - static char const* types = "hbh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x996447F1, types, arraySizes, 2); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x590C69F7, fields, 3); return &instance; } }; @@ -2158,9 +4060,15 @@ struct GarrItemLevelUpgradeDataMeta { static DB2Meta const* Instance() { - static char const* types = "iiiii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(0, 5, 0x069F44E5, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 5, 0x6B8723A1, fields, -1); return &instance; } }; @@ -2169,9 +4077,13 @@ struct GarrMechanicMeta { static DB2Meta const* Instance() { - static char const* types = "fbi"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xAB49DA61, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xA83BF5A9, fields, -1); return &instance; } }; @@ -2180,9 +4092,13 @@ struct GarrMechanicSetXMechanicMeta { static DB2Meta const* Instance() { - static char const* types = "bii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(1, 3, 0x59514F7B, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(0, 3, 0xFC7F16A3, fields, 2); return &instance; } }; @@ -2191,9 +4107,15 @@ struct GarrMechanicTypeMeta { static DB2Meta const* Instance() { - static char const* types = "ssibi"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(4, 5, 0x6FEA569F, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(2, 5, 0x05F19FE7, fields, -1); return &instance; } }; @@ -2202,9 +4124,39 @@ struct GarrMissionMeta { static DB2Meta const* Instance() { - static char const* types = "sssiiffhhhbbbbbbbbbiiiiiiiiii"; - static uint8 const arraySizes[29] = { 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(19, 29, 0xDDD70490, types, arraySizes, 28); + static DB2MetaField const fields[29] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_FLOAT, 2, true }, + { FT_FLOAT, 2, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(5, 29, 0x00777205, fields, 28); return &instance; } }; @@ -2213,9 +4165,12 @@ struct GarrMissionTextureMeta { static DB2Meta const* Instance() { - static char const* types = "fh"; - static uint8 const arraySizes[2] = { 2, 1 }; - static DB2Meta instance(-1, 2, 0x3071301C, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_FLOAT, 2, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x0D378464, fields, -1); return &instance; } }; @@ -2224,9 +4179,13 @@ struct GarrMissionTypeMeta { static DB2Meta const* Instance() { - static char const* types = "shh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xA289655E, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x3FC87149, fields, -1); return &instance; } }; @@ -2235,9 +4194,15 @@ struct GarrMissionXEncounterMeta { static DB2Meta const* Instance() { - static char const* types = "biiii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(1, 5, 0xBCB016C6, types, arraySizes, 4); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 5, 0x539B5B1B, fields, 4); return &instance; } }; @@ -2246,9 +4211,13 @@ struct GarrMissionXFollowerMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x1EBABA29, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xFB9C7E3D, fields, 2); return &instance; } }; @@ -2257,9 +4226,15 @@ struct GarrMssnBonusAbilityMeta { static DB2Meta const* Instance() { - static char const* types = "fihbb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x35F5AE92, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x91DD4CE6, fields, -1); return &instance; } }; @@ -2268,9 +4243,17 @@ struct GarrPlotMeta { static DB2Meta const* Instance() { - static char const* types = "siibbbi"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 2 }; - static DB2Meta instance(-1, 7, 0xE12049E0, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 2, false }, + }; + static DB2Meta instance(-1, 7, 0x3897880E, fields, -1); return &instance; } }; @@ -2279,9 +4262,12 @@ struct GarrPlotBuildingMeta { static DB2Meta const* Instance() { - static char const* types = "bb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x3F77A6FA, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x1ECDCE0A, fields, -1); return &instance; } }; @@ -2290,9 +4276,12 @@ struct GarrPlotInstanceMeta { static DB2Meta const* Instance() { - static char const* types = "sb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xB708BB37, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x1FD77CCF, fields, -1); return &instance; } }; @@ -2301,9 +4290,12 @@ struct GarrPlotUICategoryMeta { static DB2Meta const* Instance() { - static char const* types = "sb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xA94645EE, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x867482E6, fields, -1); return &instance; } }; @@ -2312,9 +4304,19 @@ struct GarrSiteLevelMeta { static DB2Meta const* Instance() { - static char const* types = "fhhhhhbbb"; - static uint8 const arraySizes[9] = { 2, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 9, 0xD3979C38, types, arraySizes, -1); + static DB2MetaField const fields[9] = + { + { FT_FLOAT, 2, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 9, 0x4D823E68, fields, -1); return &instance; } }; @@ -2323,9 +4325,14 @@ struct GarrSiteLevelPlotInstMeta { static DB2Meta const* Instance() { - static char const* types = "fhbb"; - static uint8 const arraySizes[4] = { 2, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xC4E74201, types, arraySizes, 1); + static DB2MetaField const fields[4] = + { + { FT_FLOAT, 2, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xA3DF8AD1, fields, 1); return &instance; } }; @@ -2334,9 +4341,17 @@ struct GarrSpecializationMeta { static DB2Meta const* Instance() { - static char const* types = "ssifbbb"; - static uint8 const arraySizes[7] = { 1, 1, 1, 2, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0x797A0F2F, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_FLOAT, 2, true }, + }; + static DB2Meta instance(-1, 7, 0x8400A7E7, fields, -1); return &instance; } }; @@ -2345,9 +4360,11 @@ struct GarrStringMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xE1C08C0C, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xF404C7D8, fields, -1); return &instance; } }; @@ -2356,9 +4373,30 @@ struct GarrTalentMeta { static DB2Meta const* Instance() { - static char const* types = "ssiibbbiiiiiiiiiiiii"; - static uint8 const arraySizes[20] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(7, 20, 0x53D5FD16, types, arraySizes, 8); + static DB2MetaField const fields[20] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(2, 20, 0x96BE787E, fields, 3); return &instance; } }; @@ -2367,9 +4405,17 @@ struct GarrTalentTreeMeta { static DB2Meta const* Instance() { - static char const* types = "hbbii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x676CBC04, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 7, 0x9A3BC97D, fields, -1); return &instance; } }; @@ -2378,9 +4424,15 @@ struct GarrTypeMeta { static DB2Meta const* Instance() { - static char const* types = "iiiii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 2 }; - static DB2Meta instance(-1, 5, 0x7C52F3B7, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 2, true }, + }; + static DB2Meta instance(-1, 5, 0xCCA7D7B5, fields, -1); return &instance; } }; @@ -2389,9 +4441,16 @@ struct GarrUiAnimClassInfoMeta { static DB2Meta const* Instance() { - static char const* types = "fbbiii"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0xDBF4633D, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 6, 0xF6444415, fields, -1); return &instance; } }; @@ -2400,9 +4459,23 @@ struct GarrUiAnimRaceInfoMeta { static DB2Meta const* Instance() { - static char const* types = "ffffffffffffb"; - static uint8 const arraySizes[13] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 13, 0x44B9C1DE, types, arraySizes, -1); + static DB2MetaField const fields[13] = + { + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 13, 0x62B1D302, fields, -1); return &instance; } }; @@ -2411,9 +4484,13 @@ struct GemPropertiesMeta { static DB2Meta const* Instance() { - static char const* types = "ihh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x84558CAB, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xBCE902DB, fields, -1); return &instance; } }; @@ -2422,9 +4499,13 @@ struct GlobalStringsMeta { static DB2Meta const* Instance() { - static char const* types = "ssb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x2CA3EA1E, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x843675FD, fields, -1); return &instance; } }; @@ -2433,9 +4514,12 @@ struct GlyphBindableSpellMeta { static DB2Meta const* Instance() { - static char const* types = "ih"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xEA228DFA, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x03429C72, fields, 1); return &instance; } }; @@ -2444,9 +4528,11 @@ struct GlyphExclusiveCategoryMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xFE598FCD, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x59622339, fields, -1); return &instance; } }; @@ -2455,9 +4541,14 @@ struct GlyphPropertiesMeta { static DB2Meta const* Instance() { - static char const* types = "ihbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xD0046829, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x7C1C2F11, fields, -1); return &instance; } }; @@ -2466,9 +4557,12 @@ struct GlyphRequiredSpecMeta { static DB2Meta const* Instance() { - static char const* types = "hh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xDD6481CE, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x70D4ECC6, fields, 1); return &instance; } }; @@ -2477,9 +4571,14 @@ struct GroundEffectDoodadMeta { static DB2Meta const* Instance() { - static char const* types = "ffbi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x0376B2D6, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0xAB0C6E12, fields, -1); return &instance; } }; @@ -2488,9 +4587,14 @@ struct GroundEffectTextureMeta { static DB2Meta const* Instance() { - static char const* types = "hbbi"; - static uint8 const arraySizes[4] = { 4, 4, 1, 1 }; - static DB2Meta instance(-1, 4, 0x84549F0A, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 4, false }, + { FT_BYTE, 4, true }, + }; + static DB2Meta instance(-1, 4, 0xCCBD52E8, fields, -1); return &instance; } }; @@ -2499,9 +4603,24 @@ struct GroupFinderActivityMeta { static DB2Meta const* Instance() { - static char const* types = "sshhhbbbbbbbbb"; - static uint8 const arraySizes[14] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 14, 0x3EF2F3BD, types, arraySizes, -1); + static DB2MetaField const fields[14] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 14, 0xEC40E4B1, fields, -1); return &instance; } }; @@ -2510,9 +4629,12 @@ struct GroupFinderActivityGrpMeta { static DB2Meta const* Instance() { - static char const* types = "sb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xC9458196, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x1EC8D046, fields, -1); return &instance; } }; @@ -2521,9 +4643,13 @@ struct GroupFinderCategoryMeta { static DB2Meta const* Instance() { - static char const* types = "sbb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x9213552F, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xBFF47DC0, fields, -1); return &instance; } }; @@ -2532,9 +4658,13 @@ struct GuildColorBackgroundMeta { static DB2Meta const* Instance() { - static char const* types = "bbb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xCC0CEFF1, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xCC5FFB4D, fields, -1); return &instance; } }; @@ -2543,9 +4673,13 @@ struct GuildColorBorderMeta { static DB2Meta const* Instance() { - static char const* types = "bbb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xCC0CEFF1, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xCC5FFB4D, fields, -1); return &instance; } }; @@ -2554,9 +4688,13 @@ struct GuildColorEmblemMeta { static DB2Meta const* Instance() { - static char const* types = "bbb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xCC0CEFF1, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xCC5FFB4D, fields, -1); return &instance; } }; @@ -2565,9 +4703,11 @@ struct GuildPerkSpellsMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xC15D6E9F, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xC9961BEB, fields, -1); return &instance; } }; @@ -2576,9 +4716,20 @@ struct HeirloomMeta { static DB2Meta const* Instance() { - static char const* types = "siiiiihbbi"; - static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 3, 3, 1, 1, 1 }; - static DB2Meta instance(9, 10, 0x36887C6F, types, arraySizes, -1); + static DB2MetaField const fields[10] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 3, true }, + { FT_SHORT, 3, false }, + }; + static DB2Meta instance(1, 10, 0xB5925FE9, fields, -1); return &instance; } }; @@ -2587,9 +4738,13 @@ struct HelmetAnimScalingMeta { static DB2Meta const* Instance() { - static char const* types = "fii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xB9EC1058, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xC43CA2FC, fields, 2); return &instance; } }; @@ -2598,9 +4753,11 @@ struct HelmetGeosetVisDataMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 9 }; - static DB2Meta instance(-1, 1, 0x3B38D999, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 9, true }, + }; + static DB2Meta instance(-1, 1, 0x2E7C7FED, fields, -1); return &instance; } }; @@ -2609,9 +4766,15 @@ struct HighlightColorMeta { static DB2Meta const* Instance() { - static char const* types = "iiibb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x5FADC5D3, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 5, 0xDC14DB43, fields, -1); return &instance; } }; @@ -2620,9 +4783,11 @@ struct HolidayDescriptionsMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x92A95550, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xE70F298C, fields, -1); return &instance; } }; @@ -2631,9 +4796,11 @@ struct HolidayNamesMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x96663ABF, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xF2917D77, fields, -1); return &instance; } }; @@ -2642,20 +4809,37 @@ struct HolidaysMeta { static DB2Meta const* Instance() { - static char const* types = "iihhbbbbbiii"; - static uint8 const arraySizes[12] = { 1, 16, 10, 1, 1, 10, 1, 1, 1, 1, 1, 3 }; - static DB2Meta instance(0, 12, 0x7C3E60FC, types, arraySizes, -1); + static DB2MetaField const fields[12] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 10, false }, + { FT_INT, 16, false }, + { FT_BYTE, 10, false }, + { FT_INT, 3, true }, + }; + static DB2Meta instance(0, 12, 0xF6DA3904, fields, -1); return &instance; } }; -struct HotfixMeta +struct HotfixesMeta { static DB2Meta const* Instance() { - static char const* types = "sii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x3747930B, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xB67D3F47, fields, -1); return &instance; } }; @@ -2664,9 +4848,14 @@ struct ImportPriceArmorMeta { static DB2Meta const* Instance() { - static char const* types = "ffff"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x1F7A850F, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0xC4C8D847, fields, -1); return &instance; } }; @@ -2675,9 +4864,11 @@ struct ImportPriceQualityMeta { static DB2Meta const* Instance() { - static char const* types = "f"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x6F64793D, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xCFF4EEC9, fields, -1); return &instance; } }; @@ -2686,9 +4877,11 @@ struct ImportPriceShieldMeta { static DB2Meta const* Instance() { - static char const* types = "f"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x6F64793D, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xCFF4EEC9, fields, -1); return &instance; } }; @@ -2697,9 +4890,11 @@ struct ImportPriceWeaponMeta { static DB2Meta const* Instance() { - static char const* types = "f"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x6F64793D, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xCFF4EEC9, fields, -1); return &instance; } }; @@ -2708,9 +4903,20 @@ struct InvasionClientDataMeta { static DB2Meta const* Instance() { - static char const* types = "sfiiiiiiii"; - static uint8 const arraySizes[10] = { 1, 2, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(2, 10, 0x4C93379F, types, arraySizes, 9); + static DB2MetaField const fields[10] = + { + { FT_STRING, 1, true }, + { FT_FLOAT, 2, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(2, 10, 0x04FC0B4F, fields, 9); return &instance; } }; @@ -2719,9 +4925,18 @@ struct ItemMeta { static DB2Meta const* Instance() { - static char const* types = "ibbbbbbb"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 8, 0x0DFCC83D, types, arraySizes, -1); + static DB2MetaField const fields[8] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 8, 0xF9600007, fields, -1); return &instance; } }; @@ -2730,9 +4945,14 @@ struct ItemAppearanceMeta { static DB2Meta const* Instance() { - static char const* types = "iiib"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x06D35A59, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0x422F764D, fields, -1); return &instance; } }; @@ -2741,9 +4961,12 @@ struct ItemAppearanceXUiCameraMeta { static DB2Meta const* Instance() { - static char const* types = "hh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x67747E15, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xCD3677FD, fields, -1); return &instance; } }; @@ -2752,9 +4975,11 @@ struct ItemArmorQualityMeta { static DB2Meta const* Instance() { - static char const* types = "fh"; - static uint8 const arraySizes[2] = { 7, 1 }; - static DB2Meta instance(-1, 2, 0x85642CC0, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_FLOAT, 7, true }, + }; + static DB2Meta instance(-1, 1, 0x0B17E016, fields, -1); return &instance; } }; @@ -2763,9 +4988,12 @@ struct ItemArmorShieldMeta { static DB2Meta const* Instance() { - static char const* types = "fh"; - static uint8 const arraySizes[2] = { 7, 1 }; - static DB2Meta instance(-1, 2, 0xC2186F95, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_FLOAT, 7, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xC88C8C8D, fields, -1); return &instance; } }; @@ -2774,9 +5002,15 @@ struct ItemArmorTotalMeta { static DB2Meta const* Instance() { - static char const* types = "ffffh"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x45C396DD, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_SHORT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0xC4CD0FD9, fields, -1); return &instance; } }; @@ -2785,9 +5019,11 @@ struct ItemBagFamilyMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x96663ABF, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x9F2C8370, fields, -1); return &instance; } }; @@ -2796,9 +5032,14 @@ struct ItemBonusMeta { static DB2Meta const* Instance() { - static char const* types = "ihbb"; - static uint8 const arraySizes[4] = { 3, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xE12FB1A0, types, arraySizes, 1); + static DB2MetaField const fields[4] = + { + { FT_INT, 3, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xB96C1748, fields, 1); return &instance; } }; @@ -2807,9 +5048,12 @@ struct ItemBonusListLevelDeltaMeta { static DB2Meta const* Instance() { - static char const* types = "hi"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(1, 2, 0xDFBF5AC9, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(1, 2, 0x819C0CC1, fields, -1); return &instance; } }; @@ -2818,9 +5062,15 @@ struct ItemBonusTreeNodeMeta { static DB2Meta const* Instance() { - static char const* types = "hhhbh"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x84FE93B7, types, arraySizes, 4); + static DB2MetaField const fields[5] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 5, 0x1DDAA885, fields, 4); return &instance; } }; @@ -2829,9 +5079,13 @@ struct ItemChildEquipmentMeta { static DB2Meta const* Instance() { - static char const* types = "ibi"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xB6940674, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x48E64550, fields, 2); return &instance; } }; @@ -2840,9 +5094,14 @@ struct ItemClassMeta { static DB2Meta const* Instance() { - static char const* types = "sfbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xA1E4663C, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xB6C67A3D, fields, -1); return &instance; } }; @@ -2851,9 +5110,16 @@ struct ItemContextPickerEntryMeta { static DB2Meta const* Instance() { - static char const* types = "bbiiii"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0x4A6DF90B, types, arraySizes, 5); + static DB2MetaField const fields[6] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 6, 0x1596EAF3, fields, 5); return &instance; } }; @@ -2862,9 +5128,11 @@ struct ItemCurrencyCostMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xE2FF5688, types, arraySizes, 0); + static DB2MetaField const fields[1] = + { + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xDAC6A93C, fields, 0); return &instance; } }; @@ -2873,9 +5141,12 @@ struct ItemDamageAmmoMeta { static DB2Meta const* Instance() { - static char const* types = "fh"; - static uint8 const arraySizes[2] = { 7, 1 }; - static DB2Meta instance(-1, 2, 0xC2186F95, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_FLOAT, 7, true }, + }; + static DB2Meta instance(-1, 2, 0x1309BE8D, fields, -1); return &instance; } }; @@ -2884,9 +5155,12 @@ struct ItemDamageOneHandMeta { static DB2Meta const* Instance() { - static char const* types = "fh"; - static uint8 const arraySizes[2] = { 7, 1 }; - static DB2Meta instance(-1, 2, 0xC2186F95, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_FLOAT, 7, true }, + }; + static DB2Meta instance(-1, 2, 0x1309BE8D, fields, -1); return &instance; } }; @@ -2895,9 +5169,12 @@ struct ItemDamageOneHandCasterMeta { static DB2Meta const* Instance() { - static char const* types = "fh"; - static uint8 const arraySizes[2] = { 7, 1 }; - static DB2Meta instance(-1, 2, 0xC2186F95, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_FLOAT, 7, true }, + }; + static DB2Meta instance(-1, 2, 0x1309BE8D, fields, -1); return &instance; } }; @@ -2906,9 +5183,12 @@ struct ItemDamageTwoHandMeta { static DB2Meta const* Instance() { - static char const* types = "fh"; - static uint8 const arraySizes[2] = { 7, 1 }; - static DB2Meta instance(-1, 2, 0xC2186F95, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_FLOAT, 7, true }, + }; + static DB2Meta instance(-1, 2, 0x1309BE8D, fields, -1); return &instance; } }; @@ -2917,9 +5197,12 @@ struct ItemDamageTwoHandCasterMeta { static DB2Meta const* Instance() { - static char const* types = "fh"; - static uint8 const arraySizes[2] = { 7, 1 }; - static DB2Meta instance(-1, 2, 0xC2186F95, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_FLOAT, 7, true }, + }; + static DB2Meta instance(-1, 2, 0x1309BE8D, fields, -1); return &instance; } }; @@ -2928,9 +5211,17 @@ struct ItemDisenchantLootMeta { static DB2Meta const* Instance() { - static char const* types = "hhhbbbb"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0xC0D926CC, types, arraySizes, 6); + static DB2MetaField const fields[7] = + { + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 7, 0x146B9F40, fields, 6); return &instance; } }; @@ -2939,9 +5230,25 @@ struct ItemDisplayInfoMeta { static DB2Meta const* Instance() { - static char const* types = "iiiiiiiiiiiiiii"; - static uint8 const arraySizes[15] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 4, 4, 2 }; - static DB2Meta instance(-1, 15, 0x99606089, types, arraySizes, -1); + static DB2MetaField const fields[15] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 2, false }, + { FT_INT, 2, true }, + { FT_INT, 6, true }, + { FT_INT, 6, true }, + { FT_INT, 2, true }, + }; + static DB2Meta instance(-1, 15, 0x089404D9, fields, -1); return &instance; } }; @@ -2950,9 +5257,13 @@ struct ItemDisplayInfoMaterialResMeta { static DB2Meta const* Instance() { - static char const* types = "ibi"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xDEE4ED7B, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x936E6A99, fields, 2); return &instance; } }; @@ -2961,9 +5272,12 @@ struct ItemDisplayXUiCameraMeta { static DB2Meta const* Instance() { - static char const* types = "ih"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xE57737B2, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x3E999EAA, fields, -1); return &instance; } }; @@ -2972,9 +5286,19 @@ struct ItemEffectMeta { static DB2Meta const* Instance() { - static char const* types = "iiihhhbbi"; - static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 9, 0xA390FA40, types, arraySizes, 8); + static DB2MetaField const fields[9] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 9, 0x46818AA6, fields, 8); return &instance; } }; @@ -2983,9 +5307,20 @@ struct ItemExtendedCostMeta { static DB2Meta const* Instance() { - static char const* types = "iihhhbbbbb"; - static uint8 const arraySizes[10] = { 5, 5, 5, 1, 5, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 10, 0xC31F4DEF, types, arraySizes, -1); + static DB2MetaField const fields[10] = + { + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 5, true }, + { FT_SHORT, 5, false }, + { FT_SHORT, 5, false }, + { FT_INT, 5, false }, + }; + static DB2Meta instance(-1, 10, 0x2AC5BE11, fields, -1); return &instance; } }; @@ -2994,9 +5329,11 @@ struct ItemGroupSoundsMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 4 }; - static DB2Meta instance(-1, 1, 0xDC2EE466, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 4, false }, + }; + static DB2Meta instance(-1, 1, 0x909375D2, fields, -1); return &instance; } }; @@ -3005,9 +5342,12 @@ struct ItemLevelSelectorMeta { static DB2Meta const* Instance() { - static char const* types = "hh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x8143060E, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x3112276E, fields, -1); return &instance; } }; @@ -3016,9 +5356,13 @@ struct ItemLevelSelectorQualityMeta { static DB2Meta const* Instance() { - static char const* types = "ibh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xB7174A51, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xC40169D5, fields, 2); return &instance; } }; @@ -3027,9 +5371,12 @@ struct ItemLevelSelectorQualitySetMeta { static DB2Meta const* Instance() { - static char const* types = "hh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x20055BA8, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x89657A48, fields, -1); return &instance; } }; @@ -3038,9 +5385,13 @@ struct ItemLimitCategoryMeta { static DB2Meta const* Instance() { - static char const* types = "sbb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xB6BB188D, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xE068171C, fields, -1); return &instance; } }; @@ -3049,9 +5400,13 @@ struct ItemLimitCategoryConditionMeta { static DB2Meta const* Instance() { - static char const* types = "bii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xDE8EAD49, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x7F847085, fields, 2); return &instance; } }; @@ -3060,9 +5415,16 @@ struct ItemModifiedAppearanceMeta { static DB2Meta const* Instance() { - static char const* types = "iibhbb"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(1, 6, 0xE64FD18B, types, arraySizes, 0); + static DB2MetaField const fields[6] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(0, 6, 0x9C32B7FF, fields, 1); return &instance; } }; @@ -3071,9 +5433,15 @@ struct ItemModifiedAppearanceExtraMeta { static DB2Meta const* Instance() { - static char const* types = "iibbb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x77212236, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x7E2FD302, fields, -1); return &instance; } }; @@ -3082,9 +5450,12 @@ struct ItemNameDescriptionMeta { static DB2Meta const* Instance() { - static char const* types = "si"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x16760BD4, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xBBF04CCC, fields, -1); return &instance; } }; @@ -3093,9 +5464,11 @@ struct ItemPetFoodMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xE4923C1F, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xD6AB60EB, fields, -1); return &instance; } }; @@ -3104,9 +5477,13 @@ struct ItemPriceBaseMeta { static DB2Meta const* Instance() { - static char const* types = "ffh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x4BD234D7, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xC90092C7, fields, -1); return &instance; } }; @@ -3115,9 +5492,12 @@ struct ItemRandomPropertiesMeta { static DB2Meta const* Instance() { - static char const* types = "sh"; - static uint8 const arraySizes[2] = { 1, 5 }; - static DB2Meta instance(-1, 2, 0xB67375F8, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING, 1, true }, + { FT_SHORT, 5, false }, + }; + static DB2Meta instance(-1, 2, 0xBDA8BFCD, fields, -1); return &instance; } }; @@ -3126,9 +5506,13 @@ struct ItemRandomSuffixMeta { static DB2Meta const* Instance() { - static char const* types = "shh"; - static uint8 const arraySizes[3] = { 1, 5, 5 }; - static DB2Meta instance(-1, 3, 0x95CAB825, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_SHORT, 5, false }, + { FT_SHORT, 5, false }, + }; + static DB2Meta instance(-1, 3, 0xABCC4871, fields, -1); return &instance; } }; @@ -3137,9 +5521,14 @@ struct ItemRangedDisplayInfoMeta { static DB2Meta const* Instance() { - static char const* types = "iiii"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x687A28D1, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xA6B99F0D, fields, -1); return &instance; } }; @@ -3148,9 +5537,24 @@ struct ItemSearchNameMeta { static DB2Meta const* Instance() { - static char const* types = "lsiihbbbhbihhi"; - static uint8 const arraySizes[14] = { 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(2, 14, 0x2D4B72FA, types, arraySizes, -1); + static DB2MetaField const fields[14] = + { + { FT_LONG, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 4, true }, + }; + static DB2Meta instance(2, 14, 0xF0940AFC, fields, -1); return &instance; } }; @@ -3159,9 +5563,15 @@ struct ItemSetMeta { static DB2Meta const* Instance() { - static char const* types = "sihii"; - static uint8 const arraySizes[5] = { 1, 17, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x847FF58A, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 17, false }, + }; + static DB2Meta instance(-1, 5, 0xB02A9041, fields, -1); return &instance; } }; @@ -3170,9 +5580,14 @@ struct ItemSetSpellMeta { static DB2Meta const* Instance() { - static char const* types = "ihbh"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xF65D0AF8, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xD6AEEA60, fields, 3); return &instance; } }; @@ -3181,9 +5596,74 @@ struct ItemSparseMeta { static DB2Meta const* Instance() { - static char const* types = "lsssssiffiiiiiiiffififhhhhhhhhhhhhhhhhhhhhhhhbbbbbbbbbbbbbbbbbbb"; - static uint8 const arraySizes[64] = { 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 64, 0x4007DE16, types, arraySizes, -1); + static DB2MetaField const fields[64] = + { + { FT_LONG, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 10, true }, + { FT_INT, 10, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 4, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 3, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 10, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 64, 0xF9021F01, fields, -1); return &instance; } }; @@ -3192,9 +5672,16 @@ struct ItemSpecMeta { static DB2Meta const* Instance() { - static char const* types = "hbbbbb"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0xB17B7986, types, arraySizes, 3); + static DB2MetaField const fields[6] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 6, 0xEB138F8E, fields, 2); return &instance; } }; @@ -3203,9 +5690,12 @@ struct ItemSpecOverrideMeta { static DB2Meta const* Instance() { - static char const* types = "hi"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xE499CD2A, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xB235D33A, fields, 1); return &instance; } }; @@ -3214,9 +5704,20 @@ struct ItemSubClassMeta { static DB2Meta const* Instance() { - static char const* types = "sshbbbbbbb"; - static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 10, 0xDAD92A67, types, arraySizes, 3); + static DB2MetaField const fields[10] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 10, 0xC7178B11, fields, 2); return &instance; } }; @@ -3225,9 +5726,13 @@ struct ItemSubClassMaskMeta { static DB2Meta const* Instance() { - static char const* types = "sib"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xFC1DA850, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x146E3154, fields, -1); return &instance; } }; @@ -3236,9 +5741,15 @@ struct ItemUpgradeMeta { static DB2Meta const* Instance() { - static char const* types = "ihhbb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x8F3A4137, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 5, 0x706FA369, fields, -1); return &instance; } }; @@ -3247,9 +5758,11 @@ struct ItemVisualsMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 5 }; - static DB2Meta instance(-1, 1, 0x485EA782, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 5, true }, + }; + static DB2Meta instance(-1, 1, 0x4025FA36, fields, -1); return &instance; } }; @@ -3258,9 +5771,12 @@ struct ItemXBonusTreeMeta { static DB2Meta const* Instance() { - static char const* types = "hi"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x87C4B605, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x57244BD5, fields, 1); return &instance; } }; @@ -3269,9 +5785,20 @@ struct JournalEncounterMeta { static DB2Meta const* Instance() { - static char const* types = "ssfhhhhbbii"; - static uint8 const arraySizes[11] = { 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 11, 0x2935A0FD, types, arraySizes, -1); + static DB2MetaField const fields[10] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_FLOAT, 2, true }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 10, 0x5E057FAD, fields, -1); return &instance; } }; @@ -3280,9 +5807,18 @@ struct JournalEncounterCreatureMeta { static DB2Meta const* Instance() { - static char const* types = "ssiiihbi"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(7, 8, 0x22C79A42, types, arraySizes, 5); + static DB2MetaField const fields[8] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(2, 8, 0x71CE658D, fields, 3); return &instance; } }; @@ -3291,9 +5827,16 @@ struct JournalEncounterItemMeta { static DB2Meta const* Instance() { - static char const* types = "ihbbbi"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(5, 6, 0x39230FF9, types, arraySizes, 1); + static DB2MetaField const fields[6] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(0, 6, 0x5FD94071, fields, 1); return &instance; } }; @@ -3302,9 +5845,25 @@ struct JournalEncounterSectionMeta { static DB2Meta const* Instance() { - static char const* types = "ssiiiihhhhhhbbb"; - static uint8 const arraySizes[15] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 15, 0x13E56B12, types, arraySizes, -1); + static DB2MetaField const fields[15] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 15, 0x582FB4F6, fields, -1); return &instance; } }; @@ -3313,9 +5872,12 @@ struct JournalEncounterXDifficultyMeta { static DB2Meta const* Instance() { - static char const* types = "bh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x321FD542, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x436676BA, fields, 1); return &instance; } }; @@ -3324,9 +5886,15 @@ struct JournalEncounterXMapLocMeta { static DB2Meta const* Instance() { - static char const* types = "fbiiii"; - static uint8 const arraySizes[6] = { 2, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0x430540E4, types, arraySizes, 5); + static DB2MetaField const fields[5] = + { + { FT_FLOAT, 2, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0xBCE56697, fields, 4); return &instance; } }; @@ -3335,9 +5903,21 @@ struct JournalInstanceMeta { static DB2Meta const* Instance() { - static char const* types = "ssiiiihhbbi"; - static uint8 const arraySizes[11] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(10, 11, 0x1691CC3D, types, arraySizes, -1); + static DB2MetaField const fields[11] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(2, 11, 0xBB10478F, fields, -1); return &instance; } }; @@ -3346,9 +5926,12 @@ struct JournalItemXDifficultyMeta { static DB2Meta const* Instance() { - static char const* types = "bh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x60D9CA15, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xF938F4BD, fields, 1); return &instance; } }; @@ -3357,9 +5940,12 @@ struct JournalSectionXDifficultyMeta { static DB2Meta const* Instance() { - static char const* types = "bh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x243822A7, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xE02C355F, fields, 1); return &instance; } }; @@ -3368,9 +5954,11 @@ struct JournalTierMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x8046B23F, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xE0D727CB, fields, -1); return &instance; } }; @@ -3379,9 +5967,12 @@ struct JournalTierXInstanceMeta { static DB2Meta const* Instance() { - static char const* types = "hh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x9C4F4D2A, types, arraySizes, 0); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xD584CE6A, fields, 0); return &instance; } }; @@ -3390,9 +5981,11 @@ struct KeychainMeta { static DB2Meta const* Instance() { - static char const* types = "b"; - static uint8 const arraySizes[1] = { 32 }; - static DB2Meta instance(-1, 1, 0x5B214E82, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_BYTE, 32, false }, + }; + static DB2Meta instance(-1, 1, 0x67DDA82E, fields, -1); return &instance; } }; @@ -3401,9 +5994,14 @@ struct KeystoneAffixMeta { static DB2Meta const* Instance() { - static char const* types = "ssi"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x1BCB46AA, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(2, 4, 0x60D97B7F, fields, -1); return &instance; } }; @@ -3412,9 +6010,17 @@ struct LFGDungeonExpansionMeta { static DB2Meta const* Instance() { - static char const* types = "hbbbiih"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0xB41DEA61, types, arraySizes, 6); + static DB2MetaField const fields[7] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 7, 0x6754EDAB, fields, 6); return &instance; } }; @@ -3423,9 +6029,14 @@ struct LFGDungeonGroupMeta { static DB2Meta const* Instance() { - static char const* types = "shbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x724D58E7, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x4E84BE76, fields, -1); return &instance; } }; @@ -3434,9 +6045,43 @@ struct LFGDungeonsMeta { static DB2Meta const* Instance() { - static char const* types = "ssifhhhhhhhhhbbbbbbbbbbbbbbbbbiii"; - static uint8 const arraySizes[33] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 33, 0xF02081A0, types, arraySizes, -1); + static DB2MetaField const fields[33] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 2, true }, + }; + static DB2Meta instance(-1, 33, 0xD9B678AD, fields, -1); return &instance; } }; @@ -3445,9 +6090,13 @@ struct LFGRoleRequirementMeta { static DB2Meta const* Instance() { - static char const* types = "bih"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x7EB8A359, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x35B34A59, fields, 2); return &instance; } }; @@ -3456,9 +6105,12 @@ struct LanguageWordsMeta { static DB2Meta const* Instance() { - static char const* types = "sb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xC15912BD, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xFBB33D15, fields, -1); return &instance; } }; @@ -3467,9 +6119,12 @@ struct LanguagesMeta { static DB2Meta const* Instance() { - static char const* types = "si"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(1, 2, 0x6FA5D0C4, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(1, 2, 0xAA508D47, fields, -1); return &instance; } }; @@ -3478,9 +6133,13 @@ struct LfgDungeonsGroupingMapMeta { static DB2Meta const* Instance() { - static char const* types = "hbh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x8CB35C50, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xD50B89E4, fields, 2); return &instance; } }; @@ -3489,9 +6148,15 @@ struct LightMeta { static DB2Meta const* Instance() { - static char const* types = "fffhh"; - static uint8 const arraySizes[5] = { 3, 1, 1, 1, 8 }; - static DB2Meta instance(-1, 5, 0x25025A13, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_FLOAT, 3, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 8, false }, + }; + static DB2Meta instance(-1, 5, 0x04052B1F, fields, -1); return &instance; } }; @@ -3500,9 +6165,46 @@ struct LightDataMeta { static DB2Meta const* Instance() { - static char const* types = "iiiiiiiiiiiiiiiiiifffffffffiiiiiihh"; - static uint8 const arraySizes[35] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 35, 0x2D2BA7FA, types, arraySizes, 34); + static DB2MetaField const fields[36] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 36, 0xE7CA3F85, fields, 0); return &instance; } }; @@ -3511,9 +6213,22 @@ struct LightParamsMeta { static DB2Meta const* Instance() { - static char const* types = "ffffffhbbbi"; - static uint8 const arraySizes[11] = { 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1 }; - static DB2Meta instance(10, 11, 0xF67DE2AF, types, arraySizes, -1); + static DB2MetaField const fields[12] = + { + { FT_FLOAT, 3, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(1, 12, 0xA08FAABA, fields, -1); return &instance; } }; @@ -3522,9 +6237,60 @@ struct LightSkyboxMeta { static DB2Meta const* Instance() { - static char const* types = "siib"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x8817C02C, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0x757E9EB6, fields, -1); + return &instance; + } +}; + +struct LightningMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[34] = + { + { FT_FLOAT, 2, true }, + { FT_INT, 3, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 34, 0x8B6D192C, fields, -1); return &instance; } }; @@ -3533,9 +6299,12 @@ struct LiquidMaterialMeta { static DB2Meta const* Instance() { - static char const* types = "bb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x62BE0340, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x6A7287A2, fields, -1); return &instance; } }; @@ -3544,9 +6313,15 @@ struct LiquidObjectMeta { static DB2Meta const* Instance() { - static char const* types = "ffhbb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xACC168A6, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 5, 0x7AF380AA, fields, -1); return &instance; } }; @@ -3555,9 +6330,31 @@ struct LiquidTypeMeta { static DB2Meta const* Instance() { - static char const* types = "ssifffffifihhbbbbbi"; - static uint8 const arraySizes[19] = { 1, 6, 1, 1, 1, 1, 1, 1, 2, 18, 4, 1, 1, 1, 1, 1, 1, 6, 1 }; - static DB2Meta instance(-1, 19, 0x3313BBF3, types, arraySizes, -1); + static DB2MetaField const fields[21] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING_NOT_LOCALIZED, 6, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 6, false }, + { FT_INT, 2, true }, + { FT_FLOAT, 18, true }, + { FT_INT, 4, false }, + { FT_FLOAT, 4, true }, + }; + static DB2Meta instance(-1, 21, 0x29F8C65E, fields, -1); return &instance; } }; @@ -3566,9 +6363,15 @@ struct LoadingScreenTaxiSplinesMeta { static DB2Meta const* Instance() { - static char const* types = "ffhhb"; - static uint8 const arraySizes[5] = { 10, 10, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x4D6292C3, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 10, true }, + { FT_FLOAT, 10, true }, + }; + static DB2Meta instance(-1, 5, 0xCDF5DDF1, fields, -1); return &instance; } }; @@ -3577,9 +6380,13 @@ struct LoadingScreensMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x99C0EB78, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xA2488A1C, fields, -1); return &instance; } }; @@ -3588,9 +6395,14 @@ struct LocaleMeta { static DB2Meta const* Instance() { - static char const* types = "ibbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x592AE13B, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x65638FD5, fields, -1); return &instance; } }; @@ -3599,9 +6411,12 @@ struct LocationMeta { static DB2Meta const* Instance() { - static char const* types = "ff"; - static uint8 const arraySizes[2] = { 3, 3 }; - static DB2Meta instance(-1, 2, 0xBBC1BE7A, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + }; + static DB2Meta instance(-1, 2, 0x71BD1122, fields, -1); return &instance; } }; @@ -3610,9 +6425,14 @@ struct LockMeta { static DB2Meta const* Instance() { - static char const* types = "ihbb"; - static uint8 const arraySizes[4] = { 8, 8, 8, 8 }; - static DB2Meta instance(-1, 4, 0xDAC7F42F, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 8, true }, + { FT_SHORT, 8, false }, + { FT_BYTE, 8, false }, + { FT_BYTE, 8, false }, + }; + static DB2Meta instance(-1, 4, 0x156C0BD7, fields, -1); return &instance; } }; @@ -3621,9 +6441,15 @@ struct LockTypeMeta { static DB2Meta const* Instance() { - static char const* types = "ssssi"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(4, 5, 0xCD5E1D2F, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(4, 5, 0x3F736720, fields, -1); return &instance; } }; @@ -3632,9 +6458,28 @@ struct LookAtControllerMeta { static DB2Meta const* Instance() { - static char const* types = "ffffhhhhbbbbbiiiii"; - static uint8 const arraySizes[18] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 18, 0x543C0D56, types, arraySizes, -1); + static DB2MetaField const fields[18] = + { + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 18, 0x2E077E56, fields, -1); return &instance; } }; @@ -3643,9 +6488,11 @@ struct MailTemplateMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x25C8D6CC, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xC6E0D9B5, fields, -1); return &instance; } }; @@ -3654,9 +6501,20 @@ struct ManagedWorldStateMeta { static DB2Meta const* Instance() { - static char const* types = "iiiiiiiiii"; - static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(9, 10, 0xBA06FC33, types, arraySizes, -1); + static DB2MetaField const fields[10] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 4, true }, + }; + static DB2Meta instance(0, 10, 0x043BFC8F, fields, -1); return &instance; } }; @@ -3665,9 +6523,14 @@ struct ManagedWorldStateBuffMeta { static DB2Meta const* Instance() { - static char const* types = "iiii"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x6D201DC7, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0x049B986F, fields, 3); return &instance; } }; @@ -3676,9 +6539,13 @@ struct ManagedWorldStateInputMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x0FC1A9B0, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x21237CDC, fields, -1); return &instance; } }; @@ -3687,9 +6554,11 @@ struct ManifestInterfaceActionIconMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(0, 1, 0x6A529F37, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 1, false }, + }; + static DB2Meta instance(0, 1, 0xB5EE0DCB, fields, -1); return &instance; } }; @@ -3698,9 +6567,12 @@ struct ManifestInterfaceDataMeta { static DB2Meta const* Instance() { - static char const* types = "ss"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x9E5F4C99, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x03E4C021, fields, -1); return &instance; } }; @@ -3709,9 +6581,11 @@ struct ManifestInterfaceItemIconMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(0, 1, 0x6A529F37, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 1, false }, + }; + static DB2Meta instance(0, 1, 0xB5EE0DCB, fields, -1); return &instance; } }; @@ -3720,9 +6594,11 @@ struct ManifestInterfaceTOCDataMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x6F7D397D, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xD00DAF09, fields, -1); return &instance; } }; @@ -3731,9 +6607,11 @@ struct ManifestMP3Meta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(0, 1, 0x6A529F37, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 1, false }, + }; + static DB2Meta instance(0, 1, 0xB5EE0DCB, fields, -1); return &instance; } }; @@ -3742,9 +6620,32 @@ struct MapMeta { static DB2Meta const* Instance() { - static char const* types = "ssssssiffhhhhhhhbbbbb"; - static uint8 const arraySizes[21] = { 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 21, 0xF568DF12, types, arraySizes, -1); + static DB2MetaField const fields[22] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_FLOAT, 2, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 2, true }, + }; + static DB2Meta instance(-1, 22, 0x503A3E58, fields, -1); return &instance; } }; @@ -3753,9 +6654,13 @@ struct MapCelestialBodyMeta { static DB2Meta const* Instance() { - static char const* types = "hih"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xBDE1C11C, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_SHORT, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x14543648, fields, 2); return &instance; } }; @@ -3764,9 +6669,15 @@ struct MapChallengeModeMeta { static DB2Meta const* Instance() { - static char const* types = "sihhb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 3, 1 }; - static DB2Meta instance(1, 5, 0xC5261662, types, arraySizes, 2); + static DB2MetaField const fields[5] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 3, true }, + }; + static DB2Meta instance(1, 5, 0x50F3ABC2, fields, 2); return &instance; } }; @@ -3775,9 +6686,20 @@ struct MapDifficultyMeta { static DB2Meta const* Instance() { - static char const* types = "sbbbbbbih"; - static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 9, 0x2B3B759E, types, arraySizes, 8); + static DB2MetaField const fields[10] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 10, 0xF876E8BA, fields, 9); return &instance; } }; @@ -3786,9 +6708,14 @@ struct MapDifficultyXConditionMeta { static DB2Meta const* Instance() { - static char const* types = "siii"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x5F5D7102, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x8DBA5D16, fields, 3); return &instance; } }; @@ -3797,9 +6724,15 @@ struct MapLoadingScreenMeta { static DB2Meta const* Instance() { - static char const* types = "ffiii"; - static uint8 const arraySizes[5] = { 2, 2, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xBBE57FE4, types, arraySizes, 4); + static DB2MetaField const fields[5] = + { + { FT_FLOAT, 2, true }, + { FT_FLOAT, 2, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0xC4CFD9A8, fields, 4); return &instance; } }; @@ -3808,9 +6741,17 @@ struct MarketingPromotionsXLocaleMeta { static DB2Meta const* Instance() { - static char const* types = "siiiibb"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0x80362F57, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 7, 0xC04E61FB, fields, -1); return &instance; } }; @@ -3819,9 +6760,14 @@ struct MaterialMeta { static DB2Meta const* Instance() { - static char const* types = "biii"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x0BC8C134, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x370D43B4, fields, -1); return &instance; } }; @@ -3830,9 +6776,13 @@ struct MinorTalentMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xAAEF0DF8, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x09F57B9C, fields, 2); return &instance; } }; @@ -3841,9 +6791,22 @@ struct MissileTargetingMeta { static DB2Meta const* Instance() { - static char const* types = "fffffffffiii"; - static uint8 const arraySizes[12] = { 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2 }; - static DB2Meta instance(-1, 12, 0x2305491E, types, arraySizes, -1); + static DB2MetaField const fields[12] = + { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 2, true }, + { FT_INT, 2, true }, + }; + static DB2Meta instance(-1, 12, 0xF695DDBA, fields, -1); return &instance; } }; @@ -3852,9 +6815,13 @@ struct ModelAnimCloakDampeningMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x839B4263, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xAA668B4F, fields, 2); return &instance; } }; @@ -3863,9 +6830,14 @@ struct ModelFileDataMeta { static DB2Meta const* Instance() { - static char const* types = "bii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(1, 3, 0xA395EB50, types, arraySizes, 2); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(0, 4, 0x9C9B4543, fields, 3); return &instance; } }; @@ -3874,9 +6846,12 @@ struct ModelRibbonQualityMeta { static DB2Meta const* Instance() { - static char const* types = "bi"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x38F764D9, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xA26E8DD1, fields, 1); return &instance; } }; @@ -3885,9 +6860,17 @@ struct ModifierTreeMeta { static DB2Meta const* Instance() { - static char const* types = "iiibbbb"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0x7718AFC2, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 7, 0x643002AE, fields, -1); return &instance; } }; @@ -3896,9 +6879,21 @@ struct MountMeta { static DB2Meta const* Instance() { - static char const* types = "sssifhhbiii"; - static uint8 const arraySizes[11] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(8, 11, 0x4D812F19, types, arraySizes, -1); + static DB2MetaField const fields[11] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(3, 11, 0x629E87E2, fields, -1); return &instance; } }; @@ -3907,9 +6902,18 @@ struct MountCapabilityMeta { static DB2Meta const* Instance() { - static char const* types = "iihhhbii"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(6, 8, 0xB0D11D52, types, arraySizes, -1); + static DB2MetaField const fields[8] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(0, 8, 0xD8A906D6, fields, -1); return &instance; } }; @@ -3918,9 +6922,13 @@ struct MountTypeXCapabilityMeta { static DB2Meta const* Instance() { - static char const* types = "hhb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xA34A8445, types, arraySizes, 0); + static DB2MetaField const fields[3] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x613701E9, fields, 0); return &instance; } }; @@ -3929,9 +6937,13 @@ struct MountXDisplayMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xD59B9FE4, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x2D4F3D78, fields, 2); return &instance; } }; @@ -3940,9 +6952,14 @@ struct MovieMeta { static DB2Meta const* Instance() { - static char const* types = "iibb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xF3E9AE3B, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x4848C4FB, fields, -1); return &instance; } }; @@ -3951,9 +6968,11 @@ struct MovieFileDataMeta { static DB2Meta const* Instance() { - static char const* types = "h"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xAA16D59F, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 1, 0xB24F82EB, fields, -1); return &instance; } }; @@ -3962,9 +6981,69 @@ struct MovieVariationMeta { static DB2Meta const* Instance() { - static char const* types = "iih"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x3BFD250E, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xAEA671AA, fields, 2); + return &instance; + } +}; + +struct MultiStatePropertiesMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[11] = + { + { FT_FLOAT, 3, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 11, 0x50BB5EDC, fields, 10); + return &instance; + } +}; + +struct MultiTransitionPropertiesMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[5] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x5720F452, fields, -1); + return &instance; + } +}; + +struct MythicPlusSeasonRewardLevelsMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[4] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0xAD6A6D9F, fields, 3); return &instance; } }; @@ -3973,9 +7052,13 @@ struct NPCModelItemSlotDisplayInfoMeta { static DB2Meta const* Instance() { - static char const* types = "ibi"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x11D16204, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xB8EC2628, fields, 2); return &instance; } }; @@ -3984,9 +7067,11 @@ struct NPCSoundsMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 4 }; - static DB2Meta instance(-1, 1, 0x672E1A6B, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 4, false }, + }; + static DB2Meta instance(-1, 1, 0x5EF56D1F, fields, -1); return &instance; } }; @@ -3995,9 +7080,13 @@ struct NameGenMeta { static DB2Meta const* Instance() { - static char const* types = "sbb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x2EF936CD, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xB0EBC6C9, fields, -1); return &instance; } }; @@ -4006,9 +7095,12 @@ struct NamesProfanityMeta { static DB2Meta const* Instance() { - static char const* types = "sb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xDFB56E0E, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xCD33D2BE, fields, -1); return &instance; } }; @@ -4017,9 +7109,11 @@ struct NamesReservedMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xE4923C1F, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xECCAE96B, fields, -1); return &instance; } }; @@ -4028,9 +7122,28 @@ struct NamesReservedLocaleMeta { static DB2Meta const* Instance() { - static char const* types = "sb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xC1403093, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x5AAEEDD3, fields, -1); + return &instance; + } +}; + +struct NumTalentsAtLevelMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 4, 0xDE3268EF, fields, -1); return &instance; } }; @@ -4039,9 +7152,18 @@ struct ObjectEffectMeta { static DB2Meta const* Instance() { - static char const* types = "fhbbbbii"; - static uint8 const arraySizes[8] = { 3, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 8, 0x6A0CF743, types, arraySizes, -1); + static DB2MetaField const fields[8] = + { + { FT_FLOAT, 3, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 8, 0x48D89FCF, fields, -1); return &instance; } }; @@ -4050,9 +7172,14 @@ struct ObjectEffectModifierMeta { static DB2Meta const* Instance() { - static char const* types = "fbbb"; - static uint8 const arraySizes[4] = { 4, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xA482B053, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_FLOAT, 4, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x68D120B3, fields, -1); return &instance; } }; @@ -4061,9 +7188,66 @@ struct ObjectEffectPackageElemMeta { static DB2Meta const* Instance() { - static char const* types = "hhh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x8CF043E5, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x3B8C53F9, fields, -1); + return &instance; + } +}; + +struct OccluderMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[9] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(0, 9, 0xFEDCAAB3, fields, -1); + return &instance; + } +}; + +struct OccluderLocationMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[4] = + { + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(2, 4, 0x95F8BBE4, fields, -1); + return &instance; + } +}; + +struct OccluderNodeMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 4, 0x19A34490, fields, -1); return &instance; } }; @@ -4072,9 +7256,16 @@ struct OutlineEffectMeta { static DB2Meta const* Instance() { - static char const* types = "fiiiii"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0x466B2BC4, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 2, false }, + }; + static DB2Meta instance(-1, 6, 0xECA16738, fields, -1); return &instance; } }; @@ -4083,9 +7274,13 @@ struct OverrideSpellDataMeta { static DB2Meta const* Instance() { - static char const* types = "iib"; - static uint8 const arraySizes[3] = { 10, 1, 1 }; - static DB2Meta instance(-1, 3, 0x9417628C, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 10, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xCEE01938, fields, -1); return &instance; } }; @@ -4094,9 +7289,12 @@ struct PVPBracketTypesMeta { static DB2Meta const* Instance() { - static char const* types = "bi"; - static uint8 const arraySizes[2] = { 1, 4 }; - static DB2Meta instance(-1, 2, 0x7C55E5BB, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, true }, + { FT_INT, 4, false }, + }; + static DB2Meta instance(-1, 2, 0x54CF87FB, fields, -1); return &instance; } }; @@ -4105,9 +7303,14 @@ struct PVPDifficultyMeta { static DB2Meta const* Instance() { - static char const* types = "bbbh"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x970B5E15, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x794DB95D, fields, 3); return &instance; } }; @@ -4116,9 +7319,12 @@ struct PVPItemMeta { static DB2Meta const* Instance() { - static char const* types = "ib"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xBD449801, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x0CD750C1, fields, -1); return &instance; } }; @@ -4127,9 +7333,11 @@ struct PageTextMaterialMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x96663ABF, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xF6F6B04B, fields, -1); return &instance; } }; @@ -4138,9 +7346,13 @@ struct PaperDollItemFrameMeta { static DB2Meta const* Instance() { - static char const* types = "sbi"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x66B0597E, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xB85F646E, fields, -1); return &instance; } }; @@ -4149,9 +7361,13 @@ struct ParagonReputationMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xD7712F98, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xF9AC6E2E, fields, 0); return &instance; } }; @@ -4160,9 +7376,30 @@ struct ParticleColorMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 3, 3, 3 }; - static DB2Meta instance(-1, 3, 0x1576D1E1, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 3, true }, + { FT_INT, 3, true }, + { FT_INT, 3, true }, + }; + static DB2Meta instance(-1, 3, 0xB44B4D4D, fields, -1); + return &instance; + } +}; + +struct ParticulateSoundMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[5] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0xF60E0955, fields, 0); return &instance; } }; @@ -4171,9 +7408,17 @@ struct PathMeta { static DB2Meta const* Instance() { - static char const* types = "bbbbbbb"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0x5017579F, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 7, 0x3551690B, fields, -1); return &instance; } }; @@ -4182,9 +7427,14 @@ struct PathNodeMeta { static DB2Meta const* Instance() { - static char const* types = "iihh"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(0, 4, 0x76615830, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 4, 0x19A34490, fields, -1); return &instance; } }; @@ -4193,9 +7443,15 @@ struct PathNodePropertyMeta { static DB2Meta const* Instance() { - static char const* types = "hhbii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(3, 5, 0x92C03009, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 5, 0x578DA815, fields, -1); return &instance; } }; @@ -4204,9 +7460,14 @@ struct PathPropertyMeta { static DB2Meta const* Instance() { - static char const* types = "ihbi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(3, 4, 0x3D29C266, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 4, 0x3B269A90, fields, -1); return &instance; } }; @@ -4215,9 +7476,11 @@ struct PhaseMeta { static DB2Meta const* Instance() { - static char const* types = "h"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x0043219C, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 1, 0x60D39728, fields, -1); return &instance; } }; @@ -4226,9 +7489,23 @@ struct PhaseShiftZoneSoundsMeta { static DB2Meta const* Instance() { - static char const* types = "hhhhhbbbbiiii"; - static uint8 const arraySizes[13] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 13, 0x85ACB830, types, arraySizes, -1); + static DB2MetaField const fields[13] = + { + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 13, 0x7CA0A010, fields, -1); return &instance; } }; @@ -4237,9 +7514,12 @@ struct PhaseXPhaseGroupMeta { static DB2Meta const* Instance() { - static char const* types = "hh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x66517AF6, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xF00195AE, fields, 1); return &instance; } }; @@ -4248,9 +7528,91 @@ struct PlayerConditionMeta { static DB2Meta const* Instance() { - static char const* types = "lsibhhibbibbihbibbbbiiiiibihbbbiiiihibbbbbbbhiiihhbbbbbiihhhibhhhiiihiibhbbihiiii"; - static uint8 const arraySizes[81] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 3, 3, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 2 }; - static DB2Meta instance(2, 81, 0x5B3DA113, types, arraySizes, -1); + static DB2MetaField const fields[81] = + { + { FT_LONG, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 4, false }, + { FT_SHORT, 4, false }, + { FT_SHORT, 4, false }, + { FT_INT, 3, false }, + { FT_BYTE, 3, false }, + { FT_SHORT, 4, false }, + { FT_SHORT, 4, false }, + { FT_SHORT, 4, false }, + { FT_INT, 4, true }, + { FT_INT, 4, true }, + { FT_INT, 4, false }, + { FT_SHORT, 2, false }, + { FT_INT, 2, false }, + { FT_INT, 4, true }, + { FT_BYTE, 4, false }, + { FT_SHORT, 4, false }, + { FT_SHORT, 4, false }, + { FT_BYTE, 4, false }, + { FT_BYTE, 4, false }, + { FT_INT, 4, false }, + { FT_INT, 4, false }, + { FT_INT, 4, false }, + { FT_INT, 6, false }, + { FT_INT, 2, true }, + }; + static DB2Meta instance(2, 81, 0xF28CBD18, fields, -1); return &instance; } }; @@ -4259,9 +7621,14 @@ struct PositionerMeta { static DB2Meta const* Instance() { - static char const* types = "fhbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xE830F1B1, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x533B33CB, fields, -1); return &instance; } }; @@ -4270,9 +7637,18 @@ struct PositionerStateMeta { static DB2Meta const* Instance() { - static char const* types = "fbiiiiii"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 8, 0x6C975DF4, types, arraySizes, -1); + static DB2MetaField const fields[8] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 8, 0x9E87B63A, fields, -1); return &instance; } }; @@ -4281,9 +7657,21 @@ struct PositionerStateEntryMeta { static DB2Meta const* Instance() { - static char const* types = "ffhhhhbbbbi"; - static uint8 const arraySizes[11] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 11, 0x667ED965, types, arraySizes, -1); + static DB2MetaField const fields[11] = + { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 11, 0xBA9A19C4, fields, -1); return &instance; } }; @@ -4292,9 +7680,15 @@ struct PowerDisplayMeta { static DB2Meta const* Instance() { - static char const* types = "sbbbb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xFD152E5B, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 5, 0xEB89C62F, fields, -1); return &instance; } }; @@ -4303,9 +7697,22 @@ struct PowerTypeMeta { static DB2Meta const* Instance() { - static char const* types = "ssffhhhbbbbb"; - static uint8 const arraySizes[12] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 12, 0x0C3844E1, types, arraySizes, -1); + static DB2MetaField const fields[12] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 12, 0x6D438CB5, fields, -1); return &instance; } }; @@ -4314,64 +7721,113 @@ struct PrestigeLevelInfoMeta { static DB2Meta const* Instance() { - static char const* types = "sibb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xA7B2D559, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x31BD813F, fields, -1); return &instance; } }; -struct PvpRewardMeta +struct PvpScalingEffectMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x72F4C016, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xAF88F6DB, fields, 1); return &instance; } }; -struct PvpScalingEffectMeta +struct PvpScalingEffectTypeMeta { static DB2Meta const* Instance() { - static char const* types = "fii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x52121A41, types, arraySizes, 1); + static DB2MetaField const fields[1] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xF6F6B04B, fields, -1); return &instance; } }; -struct PvpScalingEffectTypeMeta +struct PvpTalentMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x96663ABF, types, arraySizes, -1); + static DB2MetaField const fields[9] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(1, 9, 0x340BABA3, fields, 2); return &instance; } }; -struct PvpTalentMeta +struct PvpTalentCategoryMeta { static DB2Meta const* Instance() { - static char const* types = "siiiiiiiii"; - static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 10, 0x6EB51740, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 1, 0xBB4B5731, fields, -1); return &instance; } }; -struct PvpTalentUnlockMeta +struct PvpTalentSlotUnlockMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x465C83BC, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0x572DDD84, fields, -1); + return &instance; + } +}; + +struct PvpTierMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[8] = + { + { FT_STRING, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 8, 0x689983C8, fields, 5); return &instance; } }; @@ -4380,9 +7836,11 @@ struct QuestFactionRewardMeta { static DB2Meta const* Instance() { - static char const* types = "h"; - static uint8 const arraySizes[1] = { 10 }; - static DB2Meta instance(-1, 1, 0xB0E02541, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_SHORT, 10, true }, + }; + static DB2Meta instance(-1, 1, 0x504FAFB5, fields, -1); return &instance; } }; @@ -4391,9 +7849,16 @@ struct QuestFeedbackEffectMeta { static DB2Meta const* Instance() { - static char const* types = "ihbbbb"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0x89D55A27, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 6, 0x58E79FBF, fields, -1); return &instance; } }; @@ -4402,9 +7867,14 @@ struct QuestInfoMeta { static DB2Meta const* Instance() { - static char const* types = "shbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x4F45F445, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xDDB38B83, fields, -1); return &instance; } }; @@ -4413,9 +7883,13 @@ struct QuestLineMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x8046B23F, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xC4BD3235, fields, -1); return &instance; } }; @@ -4424,9 +7898,13 @@ struct QuestLineXQuestMeta { static DB2Meta const* Instance() { - static char const* types = "hhb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x8FA4A9C7, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x57EF18BF, fields, 0); return &instance; } }; @@ -4435,9 +7913,11 @@ struct QuestMoneyRewardMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 10 }; - static DB2Meta instance(-1, 1, 0x86397302, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 10, false }, + }; + static DB2Meta instance(-1, 1, 0x7E00C5B6, fields, -1); return &instance; } }; @@ -4446,9 +7926,18 @@ struct QuestObjectiveMeta { static DB2Meta const* Instance() { - static char const* types = "siibbbbh"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 8, 0xDD995180, types, arraySizes, 7); + static DB2MetaField const fields[8] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 8, 0x37353FB6, fields, 7); return &instance; } }; @@ -4457,9 +7946,17 @@ struct QuestPOIBlobMeta { static DB2Meta const* Instance() { - static char const* types = "ihhbbiii"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(0, 8, 0xEC15976E, types, arraySizes, 2); + static DB2MetaField const fields[7] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(0, 7, 0x5DF4B040, fields, 1); return &instance; } }; @@ -4468,9 +7965,14 @@ struct QuestPOIPointMeta { static DB2Meta const* Instance() { - static char const* types = "ihhi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(0, 4, 0x8CF2B119, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 4, 0x18D6E719, fields, 3); return &instance; } }; @@ -4479,9 +7981,14 @@ struct QuestPackageItemMeta { static DB2Meta const* Instance() { - static char const* types = "ihbi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xCF9401CF, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xEB0764D1, fields, -1); return &instance; } }; @@ -4490,9 +7997,12 @@ struct QuestSortMeta { static DB2Meta const* Instance() { - static char const* types = "sb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xAD7072C6, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x2F5E2228, fields, -1); return &instance; } }; @@ -4501,9 +8011,11 @@ struct QuestV2Meta { static DB2Meta const* Instance() { - static char const* types = "h"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x70495C9B, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 1, 0x638D02EF, fields, -1); return &instance; } }; @@ -4512,9 +8024,34 @@ struct QuestV2CliTaskMeta { static DB2Meta const* Instance() { - static char const* types = "lssihhhhhhbbbbbbbbbbiiii"; - static uint8 const arraySizes[24] = { 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(20, 24, 0x3F026A14, types, arraySizes, -1); + static DB2MetaField const fields[24] = + { + { FT_LONG, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 3, false }, + }; + static DB2Meta instance(3, 24, 0xC0387D4E, fields, -1); return &instance; } }; @@ -4523,9 +8060,12 @@ struct QuestXGroupActivityMeta { static DB2Meta const* Instance() { - static char const* types = "ii"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x06CC45D3, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xAA88A593, fields, -1); return &instance; } }; @@ -4534,9 +8074,11 @@ struct QuestXPMeta { static DB2Meta const* Instance() { - static char const* types = "h"; - static uint8 const arraySizes[1] = { 10 }; - static DB2Meta instance(-1, 1, 0xCB76B4C0, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_SHORT, 10, false }, + }; + static DB2Meta instance(-1, 1, 0xC33E0774, fields, -1); return &instance; } }; @@ -4545,9 +8087,14 @@ struct RandPropPointsMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 5, 5, 5 }; - static DB2Meta instance(-1, 3, 0x4E2C0BCC, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, true }, + { FT_INT, 5, false }, + { FT_INT, 5, false }, + { FT_INT, 5, false }, + }; + static DB2Meta instance(-1, 4, 0x7741F65C, fields, -1); return &instance; } }; @@ -4556,9 +8103,13 @@ struct RelicSlotTierRequirementMeta { static DB2Meta const* Instance() { - static char const* types = "ibb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x129FCC09, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x22CDBDE9, fields, -1); return &instance; } }; @@ -4567,9 +8118,15 @@ struct RelicTalentMeta { static DB2Meta const* Instance() { - static char const* types = "hbiii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x7A5963FD, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x8BEAE937, fields, -1); return &instance; } }; @@ -4578,9 +8135,16 @@ struct ResearchBranchMeta { static DB2Meta const* Instance() { - static char const* types = "sihbii"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0x58A3876E, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 6, 0xA6CB64A5, fields, -1); return &instance; } }; @@ -4589,9 +8153,13 @@ struct ResearchFieldMeta { static DB2Meta const* Instance() { - static char const* types = "sbi"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(2, 3, 0x85868B9F, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(1, 3, 0xD7448990, fields, -1); return &instance; } }; @@ -4600,9 +8168,19 @@ struct ResearchProjectMeta { static DB2Meta const* Instance() { - static char const* types = "ssihbbiii"; - static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(6, 9, 0xB1CAB80B, types, arraySizes, -1); + static DB2MetaField const fields[9] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(2, 9, 0x4A748755, fields, -1); return &instance; } }; @@ -4611,9 +8189,14 @@ struct ResearchSiteMeta { static DB2Meta const* Instance() { - static char const* types = "sihi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x25F7DCC7, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x14F7693B, fields, -1); return &instance; } }; @@ -4622,9 +8205,13 @@ struct ResistancesMeta { static DB2Meta const* Instance() { - static char const* types = "sbi"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xA3EAE5AE, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xF7F049B5, fields, -1); return &instance; } }; @@ -4633,9 +8220,16 @@ struct RewardPackMeta { static DB2Meta const* Instance() { - static char const* types = "ifbbii"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0xDB6CC0AB, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 6, 0xB0527FA7, fields, -1); return &instance; } }; @@ -4644,9 +8238,13 @@ struct RewardPackXCurrencyTypeMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x217E6712, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xEA88FC16, fields, 2); return &instance; } }; @@ -4655,9 +8253,13 @@ struct RewardPackXItemMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x74F6B9BD, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x277E8179, fields, 2); return &instance; } }; @@ -4666,9 +8268,15 @@ struct RibbonQualityMeta { static DB2Meta const* Instance() { - static char const* types = "fffbi"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xC75DAEA8, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 5, 0xBB0CC4F4, fields, -1); return &instance; } }; @@ -4677,9 +8285,12 @@ struct RulesetItemUpgradeMeta { static DB2Meta const* Instance() { - static char const* types = "ih"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xFB641AE0, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xA03B4C48, fields, -1); return &instance; } }; @@ -4688,20 +8299,11 @@ struct SDReplacementModelMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xE1F906C2, types, arraySizes, -1); - return &instance; - } -}; - -struct SandboxScalingMeta -{ - static DB2Meta const* Instance() - { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x5200B7F5, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xD9C05976, fields, -1); return &instance; } }; @@ -4710,9 +8312,13 @@ struct ScalingStatDistributionMeta { static DB2Meta const* Instance() { - static char const* types = "hii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xDED48286, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x34B9A97A, fields, -1); return &instance; } }; @@ -4721,9 +8327,15 @@ struct ScenarioMeta { static DB2Meta const* Instance() { - static char const* types = "shbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xD052232A, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_STRING, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 5, 0x0857765A, fields, -1); return &instance; } }; @@ -4732,9 +8344,12 @@ struct ScenarioEventEntryMeta { static DB2Meta const* Instance() { - static char const* types = "hb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x02E80455, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x34B30E13, fields, -1); return &instance; } }; @@ -4743,9 +8358,21 @@ struct ScenarioStepMeta { static DB2Meta const* Instance() { - static char const* types = "sshhhbbii"; - static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 9, 0x201B0EFC, types, arraySizes, 2); + static DB2MetaField const fields[11] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 11, 0x8FF5E1E6, fields, 2); return &instance; } }; @@ -4754,9 +8381,12 @@ struct SceneScriptMeta { static DB2Meta const* Instance() { - static char const* types = "hh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xC694B81E, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xEF472E96, fields, -1); return &instance; } }; @@ -4765,9 +8395,12 @@ struct SceneScriptGlobalTextMeta { static DB2Meta const* Instance() { - static char const* types = "ss"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xB9F8FDF1, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xDE6E2251, fields, -1); return &instance; } }; @@ -4776,9 +8409,11 @@ struct SceneScriptPackageMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x96663ABF, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xF6F6B04B, fields, -1); return &instance; } }; @@ -4787,9 +8422,14 @@ struct SceneScriptPackageMemberMeta { static DB2Meta const* Instance() { - static char const* types = "hhhb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x787A715F, types, arraySizes, 0); + static DB2MetaField const fields[4] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x9E18D06F, fields, 0); return &instance; } }; @@ -4798,9 +8438,12 @@ struct SceneScriptTextMeta { static DB2Meta const* Instance() { - static char const* types = "ss"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xB9F8FDF1, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xDE6E2251, fields, -1); return &instance; } }; @@ -4809,9 +8452,15 @@ struct ScheduledIntervalMeta { static DB2Meta const* Instance() { - static char const* types = "iiiii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x5DD2FF46, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x0C287F7A, fields, -1); return &instance; } }; @@ -4820,9 +8469,18 @@ struct ScheduledWorldStateMeta { static DB2Meta const* Instance() { - static char const* types = "iiiiiiii"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 8, 0xFCB13A6A, types, arraySizes, 0); + static DB2MetaField const fields[8] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 8, 0xDC45735A, fields, 0); return &instance; } }; @@ -4831,9 +8489,15 @@ struct ScheduledWorldStateGroupMeta { static DB2Meta const* Instance() { - static char const* types = "iiiii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x21F6EE03, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0xCF71B287, fields, -1); return &instance; } }; @@ -4842,9 +8506,13 @@ struct ScheduledWorldStateXUniqCatMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(0, 3, 0x7EFF57FD, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 3, 0xF512C749, fields, 2); return &instance; } }; @@ -4853,9 +8521,22 @@ struct ScreenEffectMeta { static DB2Meta const* Instance() { - static char const* types = "sihhhhbbbiii"; - static uint8 const arraySizes[12] = { 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 12, 0x4D5B91C5, types, arraySizes, -1); + static DB2MetaField const fields[12] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 4, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 12, 0x7A371491, fields, -1); return &instance; } }; @@ -4864,9 +8545,11 @@ struct ScreenLocationMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x96663ABF, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xF6F6B04B, fields, -1); return &instance; } }; @@ -4875,9 +8558,11 @@ struct SeamlessSiteMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xBFE7B9D3, types, arraySizes, 0); + static DB2MetaField const fields[1] = + { + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x9E36592F, fields, 0); return &instance; } }; @@ -4886,9 +8571,11 @@ struct ServerMessagesMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x1C7A1347, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xCC7971DF, fields, -1); return &instance; } }; @@ -4897,9 +8584,39 @@ struct ShadowyEffectMeta { static DB2Meta const* Instance() { - static char const* types = "iifffffffbbii"; - static uint8 const arraySizes[13] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 13, 0xE909BB18, types, arraySizes, -1); + static DB2MetaField const fields[13] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 13, 0x7292BC4C, fields, -1); + return &instance; + } +}; + +struct SiegeablePropertiesMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x98E42A9F, fields, -1); return &instance; } }; @@ -4908,9 +8625,23 @@ struct SkillLineMeta { static DB2Meta const* Instance() { - static char const* types = "ssshbbii"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 8, 0x3F7E88AF, types, arraySizes, -1); + static DB2MetaField const fields[13] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(5, 13, 0xEC83FE8A, fields, -1); return &instance; } }; @@ -4919,9 +8650,25 @@ struct SkillLineAbilityMeta { static DB2Meta const* Instance() { - static char const* types = "liiihhhhhbihbb"; - static uint8 const arraySizes[14] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(1, 14, 0x97B5A653, types, arraySizes, 4); + static DB2MetaField const fields[15] = + { + { FT_LONG, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(1, 15, 0xA38AD072, fields, 2); return &instance; } }; @@ -4930,9 +8677,17 @@ struct SkillRaceClassInfoMeta { static DB2Meta const* Instance() { - static char const* types = "lhhhbbi"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0x9752C2CE, types, arraySizes, 1); + static DB2MetaField const fields[7] = + { + { FT_LONG, 1, true }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 7, 0x4CFD464E, fields, 1); return &instance; } }; @@ -4941,9 +8696,16 @@ struct SoundAmbienceMeta { static DB2Meta const* Instance() { - static char const* types = "biii"; - static uint8 const arraySizes[4] = { 1, 1, 1, 2 }; - static DB2Meta instance(-1, 4, 0xB073D4B5, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 2, false }, + { FT_INT, 2, false }, + { FT_INT, 2, false }, + }; + static DB2Meta instance(-1, 6, 0x625245C7, fields, -1); return &instance; } }; @@ -4952,9 +8714,13 @@ struct SoundAmbienceFlavorMeta { static DB2Meta const* Instance() { - static char const* types = "iih"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x2C58D929, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x41E33D5D, fields, 2); return &instance; } }; @@ -4963,9 +8729,18 @@ struct SoundBusMeta { static DB2Meta const* Instance() { - static char const* types = "fbbbbbih"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(6, 8, 0xB2ACDE2A, types, arraySizes, 7); + static DB2MetaField const fields[8] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(0, 8, 0x7CC84C2D, fields, 7); return &instance; } }; @@ -4974,9 +8749,17 @@ struct SoundBusOverrideMeta { static DB2Meta const* Instance() { - static char const* types = "ifbbbii"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(0, 7, 0x6D887F48, types, arraySizes, 5); + static DB2MetaField const fields[7] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(0, 7, 0xF321EA82, fields, 1); return &instance; } }; @@ -4985,9 +8768,12 @@ struct SoundEmitterPillPointsMeta { static DB2Meta const* Instance() { - static char const* types = "fh"; - static uint8 const arraySizes[2] = { 3, 1 }; - static DB2Meta instance(-1, 2, 0x41FCF15B, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_FLOAT, 3, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xD63C5DE3, fields, 1); return &instance; } }; @@ -4996,9 +8782,22 @@ struct SoundEmittersMeta { static DB2Meta const* Instance() { - static char const* types = "sffhhbbbiiih"; - static uint8 const arraySizes[12] = { 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(8, 12, 0x55A3B17E, types, arraySizes, 11); + static DB2MetaField const fields[12] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(3, 12, 0x1FDCDD5A, fields, 11); return &instance; } }; @@ -5007,9 +8806,17 @@ struct SoundEnvelopeMeta { static DB2Meta const* Instance() { - static char const* types = "iihhhbi"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0x5B78031C, types, arraySizes, 0); + static DB2MetaField const fields[7] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 7, 0xBD6F1248, fields, 0); return &instance; } }; @@ -5018,9 +8825,11 @@ struct SoundFilterMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x96663ABF, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xF6F6B04B, fields, -1); return &instance; } }; @@ -5029,9 +8838,13 @@ struct SoundFilterElemMeta { static DB2Meta const* Instance() { - static char const* types = "fbb"; - static uint8 const arraySizes[3] = { 9, 1, 1 }; - static DB2Meta instance(-1, 3, 0xE17AC589, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_FLOAT, 9, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x84F8D205, fields, 2); return &instance; } }; @@ -5040,9 +8853,26 @@ struct SoundKitMeta { static DB2Meta const* Instance() { - static char const* types = "ifffhhbbbfffffhb"; - static uint8 const arraySizes[16] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(0, 16, 0x0E9CB7AE, types, arraySizes, -1); + static DB2MetaField const fields[16] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(0, 16, 0xAF055926, fields, -1); return &instance; } }; @@ -5051,9 +8881,53 @@ struct SoundKitAdvancedMeta { static DB2Meta const* Instance() { - static char const* types = "ifffffiifbiiiiiiiiiibffffbhffiiibbiiiiii"; - static uint8 const arraySizes[40] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(0, 40, 0x73F6F023, types, arraySizes, -1); + static DB2MetaField const fields[43] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(0, 43, 0x6EAFA63E, fields, -1); return &instance; } }; @@ -5062,9 +8936,12 @@ struct SoundKitChildMeta { static DB2Meta const* Instance() { - static char const* types = "ii"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x2827A3B5, types, arraySizes, 0); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x4215B0DD, fields, 1); return &instance; } }; @@ -5073,9 +8950,14 @@ struct SoundKitEntryMeta { static DB2Meta const* Instance() { - static char const* types = "iibf"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x6ED6E26F, types, arraySizes, 0); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0xCBC66B5F, fields, 0); return &instance; } }; @@ -5084,9 +8966,12 @@ struct SoundKitFallbackMeta { static DB2Meta const* Instance() { - static char const* types = "ii"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xB1A5106F, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x53D01CD7, fields, -1); return &instance; } }; @@ -5095,9 +8980,11 @@ struct SoundKitNameMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x96663ABF, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xF6F6B04B, fields, -1); return &instance; } }; @@ -5106,9 +8993,15 @@ struct SoundOverrideMeta { static DB2Meta const* Instance() { - static char const* types = "hhhb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xFB7643F6, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 5, 0x4EC15243, fields, -1); return &instance; } }; @@ -5117,9 +9010,33 @@ struct SoundProviderPreferencesMeta { static DB2Meta const* Instance() { - static char const* types = "sfffffffffffffffhhhhhbb"; - static uint8 const arraySizes[23] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 23, 0x85F218A4, types, arraySizes, -1); + static DB2MetaField const fields[23] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 23, 0xF0F42A22, fields, -1); return &instance; } }; @@ -5128,9 +9045,14 @@ struct SourceInfoMeta { static DB2Meta const* Instance() { - static char const* types = "sbbi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x7C214135, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xA94C7962, fields, 3); return &instance; } }; @@ -5139,9 +9061,25 @@ struct SpamMessagesMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x0D4BA7E7, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x1A080193, fields, -1); + return &instance; + } +}; + +struct SpecSetMemberMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[2] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xC05B6C73, fields, 1); return &instance; } }; @@ -5150,9 +9088,30 @@ struct SpecializationSpellsMeta { static DB2Meta const* Instance() { - static char const* types = "siihbi"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(5, 6, 0xAE3436F3, types, arraySizes, 3); + static DB2MetaField const fields[6] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(1, 6, 0x88A56A2F, fields, 2); + return &instance; + } +}; + +struct SpecializationSpellsDisplayMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_INT, 6, false }, + }; + static DB2Meta instance(-1, 2, 0xBD5EEC46, fields, 0); return &instance; } }; @@ -5161,9 +9120,13 @@ struct SpellMeta { static DB2Meta const* Instance() { - static char const* types = "ssss"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x2273DFFF, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xFFF1DA38, fields, -1); return &instance; } }; @@ -5172,9 +9135,12 @@ struct SpellActionBarPrefMeta { static DB2Meta const* Instance() { - static char const* types = "ih"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x1EF80B2B, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xCF471C9B, fields, -1); return &instance; } }; @@ -5183,9 +9149,18 @@ struct SpellActivationOverlayMeta { static DB2Meta const* Instance() { - static char const* types = "iiifibbi"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 4, 1, 1, 1 }; - static DB2Meta instance(-1, 8, 0x23568FC7, types, arraySizes, -1); + static DB2MetaField const fields[8] = + { + { FT_INT, 4, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 8, 0xE72C81EF, fields, -1); return &instance; } }; @@ -5194,9 +9169,18 @@ struct SpellAuraOptionsMeta { static DB2Meta const* Instance() { - static char const* types = "iiihhbbi"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 8, 0xE05BE94F, types, arraySizes, 7); + static DB2MetaField const fields[8] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_INT, 2, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 8, 0xCBDA0981, fields, 7); return &instance; } }; @@ -5205,9 +9189,20 @@ struct SpellAuraRestrictionsMeta { static DB2Meta const* Instance() { - static char const* types = "iiiibbbbbi"; - static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 10, 0x7CDF3311, types, arraySizes, 9); + static DB2MetaField const fields[10] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 10, 0xD7479271, fields, 9); return &instance; } }; @@ -5216,9 +9211,12 @@ struct SpellAuraVisXChrSpecMeta { static DB2Meta const* Instance() { - static char const* types = "hh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xA65B6A4A, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x8F54FD52, fields, 1); return &instance; } }; @@ -5227,9 +9225,14 @@ struct SpellAuraVisibilityMeta { static DB2Meta const* Instance() { - static char const* types = "bbii"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(2, 4, 0xA549F79C, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 4, 0xB7F28C20, fields, 3); return &instance; } }; @@ -5238,9 +9241,13 @@ struct SpellCastTimesMeta { static DB2Meta const* Instance() { - static char const* types = "iih"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x4129C6A4, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xA66E197C, fields, -1); return &instance; } }; @@ -5249,9 +9256,17 @@ struct SpellCastingRequirementsMeta { static DB2Meta const* Instance() { - static char const* types = "ihhhbbb"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0xD8B56E5D, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 7, 0xC6D7C649, fields, -1); return &instance; } }; @@ -5260,9 +9275,19 @@ struct SpellCategoriesMeta { static DB2Meta const* Instance() { - static char const* types = "hhhbbbbbi"; - static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 9, 0x14E916CC, types, arraySizes, 8); + static DB2MetaField const fields[9] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 9, 0xEF1D2548, fields, 8); return &instance; } }; @@ -5271,9 +9296,16 @@ struct SpellCategoryMeta { static DB2Meta const* Instance() { - static char const* types = "sibbbi"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0xEA60E384, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 6, 0x53EB1CD3, fields, -1); return &instance; } }; @@ -5282,9 +9314,70 @@ struct SpellChainEffectsMeta { static DB2Meta const* Instance() { - static char const* types = "fffiiffffffffffffffffffffffffffffffffffiffffhhhhbbbbbbbbbbii"; - static uint8 const arraySizes[60] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3 }; - static DB2Meta instance(-1, 60, 0x4E8FF369, types, arraySizes, -1); + static DB2MetaField const fields[60] = + { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 11, false }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_INT, 3, true }, + }; + static DB2Meta instance(-1, 60, 0x461F9829, fields, -1); return &instance; } }; @@ -5293,9 +9386,14 @@ struct SpellClassOptionsMeta { static DB2Meta const* Instance() { - static char const* types = "iibi"; - static uint8 const arraySizes[4] = { 1, 4, 1, 1 }; - static DB2Meta instance(-1, 4, 0x80FBD67A, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 4, true }, + }; + static DB2Meta instance(-1, 4, 0xB4E205E0, fields, -1); return &instance; } }; @@ -5304,9 +9402,15 @@ struct SpellCooldownsMeta { static DB2Meta const* Instance() { - static char const* types = "iiibi"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xCA8D8B3C, types, arraySizes, 4); + static DB2MetaField const fields[5] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x24886B08, fields, 4); return &instance; } }; @@ -5315,9 +9419,11 @@ struct SpellDescriptionVariablesMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xA8EDE75B, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x9C318DAF, fields, -1); return &instance; } }; @@ -5326,9 +9432,14 @@ struct SpellDispelTypeMeta { static DB2Meta const* Instance() { - static char const* types = "ssbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xE9DDA799, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xAA83295A, fields, -1); return &instance; } }; @@ -5337,9 +9448,13 @@ struct SpellDurationMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x0D6C9082, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x22236CBC, fields, -1); return &instance; } }; @@ -5348,9 +9463,59 @@ struct SpellEffectMeta { static DB2Meta const* Instance() { - static char const* types = "iiiiiififfiiiiffififfffffiiiii"; - static uint8 const arraySizes[30] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 2, 2, 2, 1 }; - static DB2Meta instance(0, 30, 0x3244098B, types, arraySizes, 29); + static DB2MetaField const fields[28] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 2, true }, + { FT_INT, 2, false }, + { FT_INT, 4, true }, + { FT_SHORT, 2, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 28, 0x803150B7, fields, 27); + return &instance; + } +}; + +struct SpellEffectAutoDescriptionMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[9] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 9, 0x7C523D94, fields, -1); return &instance; } }; @@ -5359,9 +9524,14 @@ struct SpellEffectEmissionMeta { static DB2Meta const* Instance() { - static char const* types = "ffhb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xC6E61A9B, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 4, 0x66D096CB, fields, -1); return &instance; } }; @@ -5370,9 +9540,14 @@ struct SpellEquippedItemsMeta { static DB2Meta const* Instance() { - static char const* types = "iiib"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xCE628176, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0xA0588766, fields, -1); return &instance; } }; @@ -5381,9 +9556,16 @@ struct SpellFlyoutMeta { static DB2Meta const* Instance() { - static char const* types = "lssbii"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0x437671BD, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_LONG, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 6, 0x1F516F53, fields, -1); return &instance; } }; @@ -5392,9 +9574,13 @@ struct SpellFlyoutItemMeta { static DB2Meta const* Instance() { - static char const* types = "ibb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xF86ADE09, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x650A0B4D, fields, 2); return &instance; } }; @@ -5403,9 +9589,11 @@ struct SpellFocusObjectMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x96663ABF, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x9F2C8370, fields, -1); return &instance; } }; @@ -5414,9 +9602,15 @@ struct SpellInterruptsMeta { static DB2Meta const* Instance() { - static char const* types = "bhiii"; - static uint8 const arraySizes[5] = { 1, 1, 2, 2, 1 }; - static DB2Meta instance(-1, 5, 0x2FA8EA94, types, arraySizes, 4); + static DB2MetaField const fields[5] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, true }, + { FT_INT, 2, true }, + { FT_INT, 2, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0xF551B940, fields, 4); return &instance; } }; @@ -5425,9 +9619,30 @@ struct SpellItemEnchantmentMeta { static DB2Meta const* Instance() { - static char const* types = "sifiihhhhhhbbbbbbbi"; - static uint8 const arraySizes[19] = { 1, 3, 3, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 19, 0x80DEA734, types, arraySizes, -1); + static DB2MetaField const fields[20] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 3, false }, + { FT_FLOAT, 3, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 3, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 3, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 20, 0x96D1828E, fields, -1); return &instance; } }; @@ -5436,9 +9651,16 @@ struct SpellItemEnchantmentConditionMeta { static DB2Meta const* Instance() { - static char const* types = "ibbbbb"; - static uint8 const arraySizes[6] = { 5, 5, 5, 5, 5, 5 }; - static DB2Meta instance(-1, 6, 0xB9C16961, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_BYTE, 5, false }, + { FT_INT, 5, false }, + { FT_BYTE, 5, false }, + { FT_BYTE, 5, false }, + { FT_BYTE, 5, false }, + { FT_BYTE, 5, false }, + }; + static DB2Meta instance(-1, 6, 0xFAA95A11, fields, -1); return &instance; } }; @@ -5447,9 +9669,13 @@ struct SpellKeyboundOverrideMeta { static DB2Meta const* Instance() { - static char const* types = "sib"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x6ECA16FC, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xFB8AD330, fields, -1); return &instance; } }; @@ -5458,9 +9684,12 @@ struct SpellLabelMeta { static DB2Meta const* Instance() { - static char const* types = "ii"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x68E44736, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xCCA24F16, fields, 1); return &instance; } }; @@ -5469,9 +9698,13 @@ struct SpellLearnSpellMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x153EBA26, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xCC8637D2, fields, -1); return &instance; } }; @@ -5480,9 +9713,16 @@ struct SpellLevelsMeta { static DB2Meta const* Instance() { - static char const* types = "hhhbbi"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0x9E7D1CCD, types, arraySizes, 5); + static DB2MetaField const fields[6] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 6, 0xE3096221, fields, 5); return &instance; } }; @@ -5491,9 +9731,11 @@ struct SpellMechanicMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xF2075D8C, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x24C6F0F3, fields, -1); return &instance; } }; @@ -5502,9 +9744,22 @@ struct SpellMiscMeta { static DB2Meta const* Instance() { - static char const* types = "hhhbififbii"; - static uint8 const arraySizes[11] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 1 }; - static DB2Meta instance(-1, 11, 0xCDC114D5, types, arraySizes, 10); + static DB2MetaField const fields[12] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 14, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 12, 0x76E982BB, fields, 11); return &instance; } }; @@ -5513,9 +9768,25 @@ struct SpellMissileMeta { static DB2Meta const* Instance() { - static char const* types = "ifffffffffffffb"; - static uint8 const arraySizes[15] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 15, 0x1D35645E, types, arraySizes, -1); + static DB2MetaField const fields[15] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 15, 0xAF286A50, fields, -1); return &instance; } }; @@ -5524,9 +9795,27 @@ struct SpellMissileMotionMeta { static DB2Meta const* Instance() { - static char const* types = "ssbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x6B78A45B, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xA61A5983, fields, -1); + return &instance; + } +}; + +struct SpellNameMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x9F2C8370, fields, -1); return &instance; } }; @@ -5535,9 +9824,24 @@ struct SpellPowerMeta { static DB2Meta const* Instance() { - static char const* types = "iffifbbiiiiiii"; - static uint8 const arraySizes[14] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(7, 14, 0x8E5E46EC, types, arraySizes, 13); + static DB2MetaField const fields[14] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 14, 0x12ED7A99, fields, 13); return &instance; } }; @@ -5546,9 +9850,13 @@ struct SpellPowerDifficultyMeta { static DB2Meta const* Instance() { - static char const* types = "bbi"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(2, 3, 0x74714FF7, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(0, 3, 0x08FEDBFF, fields, -1); return &instance; } }; @@ -5557,9 +9865,13 @@ struct SpellProceduralEffectMeta { static DB2Meta const* Instance() { - static char const* types = "fbi"; - static uint8 const arraySizes[3] = { 4, 1, 1 }; - static DB2Meta instance(2, 3, 0x3E47F4EF, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_FLOAT, 4, true }, + }; + static DB2Meta instance(0, 3, 0xF320E3AD, fields, -1); return &instance; } }; @@ -5568,9 +9880,12 @@ struct SpellProcsPerMinuteMeta { static DB2Meta const* Instance() { - static char const* types = "fb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x4BC1931B, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xBEBE0C8B, fields, -1); return &instance; } }; @@ -5579,9 +9894,14 @@ struct SpellProcsPerMinuteModMeta { static DB2Meta const* Instance() { - static char const* types = "fhbh"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x2503C18B, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xE5827335, fields, 3); return &instance; } }; @@ -5590,9 +9910,14 @@ struct SpellRadiusMeta { static DB2Meta const* Instance() { - static char const* types = "ffff"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xC12E5C90, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0xAE4257F8, fields, -1); return &instance; } }; @@ -5601,9 +9926,15 @@ struct SpellRangeMeta { static DB2Meta const* Instance() { - static char const* types = "ssffb"; - static uint8 const arraySizes[5] = { 1, 1, 2, 2, 1 }; - static DB2Meta instance(-1, 5, 0xDE2E3F8E, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 2, true }, + { FT_FLOAT, 2, true }, + }; + static DB2Meta instance(-1, 5, 0x6B9E2FD2, fields, -1); return &instance; } }; @@ -5612,9 +9943,13 @@ struct SpellReagentsMeta { static DB2Meta const* Instance() { - static char const* types = "iih"; - static uint8 const arraySizes[3] = { 1, 8, 8 }; - static DB2Meta instance(-1, 3, 0x0463C688, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 8, true }, + { FT_SHORT, 8, true }, + }; + static DB2Meta instance(-1, 3, 0x4B7DC644, fields, -1); return &instance; } }; @@ -5623,9 +9958,13 @@ struct SpellReagentsCurrencyMeta { static DB2Meta const* Instance() { - static char const* types = "ihh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x90A5E5D2, types, arraySizes, 0); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x4D3F01C6, fields, 0); return &instance; } }; @@ -5634,9 +9973,15 @@ struct SpellScalingMeta { static DB2Meta const* Instance() { - static char const* types = "ihiii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xF67A5719, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x4B0C2E65, fields, -1); return &instance; } }; @@ -5645,9 +9990,14 @@ struct SpellShapeshiftMeta { static DB2Meta const* Instance() { - static char const* types = "iiib"; - static uint8 const arraySizes[4] = { 1, 2, 2, 1 }; - static DB2Meta instance(-1, 4, 0xA461C24D, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 2, true }, + { FT_INT, 2, true }, + }; + static DB2Meta instance(-1, 4, 0x91C4FFE9, fields, -1); return &instance; } }; @@ -5656,9 +10006,20 @@ struct SpellShapeshiftFormMeta { static DB2Meta const* Instance() { - static char const* types = "sfihhbbiii"; - static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 4, 8 }; - static DB2Meta instance(-1, 10, 0x130819AF, types, arraySizes, -1); + static DB2MetaField const fields[10] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, false }, + { FT_INT, 4, false }, + { FT_INT, 8, false }, + }; + static DB2Meta instance(-1, 10, 0x7082136E, fields, -1); return &instance; } }; @@ -5667,9 +10028,12 @@ struct SpellSpecialUnitEffectMeta { static DB2Meta const* Instance() { - static char const* types = "hi"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x76989615, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xF084B84D, fields, -1); return &instance; } }; @@ -5678,9 +10042,18 @@ struct SpellTargetRestrictionsMeta { static DB2Meta const* Instance() { - static char const* types = "ffihbbii"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 8, 0x7B330026, types, arraySizes, 7); + static DB2MetaField const fields[8] = + { + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 8, 0x47BE0E0C, fields, 7); return &instance; } }; @@ -5689,9 +10062,13 @@ struct SpellTotemsMeta { static DB2Meta const* Instance() { - static char const* types = "iih"; - static uint8 const arraySizes[3] = { 1, 2, 2 }; - static DB2Meta instance(-1, 3, 0xEC0C4866, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_SHORT, 2, false }, + { FT_INT, 2, true }, + }; + static DB2Meta instance(-1, 3, 0x5214FD94, fields, -1); return &instance; } }; @@ -5700,9 +10077,25 @@ struct SpellVisualMeta { static DB2Meta const* Instance() { - static char const* types = "ffihbbiiiihiii"; - static uint8 const arraySizes[14] = { 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 14, 0x1C1301D2, types, arraySizes, -1); + static DB2MetaField const fields[15] = + { + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 15, 0x514F85ED, fields, -1); return &instance; } }; @@ -5711,9 +10104,13 @@ struct SpellVisualAnimMeta { static DB2Meta const* Instance() { - static char const* types = "hhh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x0ABD7A19, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xB27FB4A5, fields, -1); return &instance; } }; @@ -5722,9 +10119,21 @@ struct SpellVisualColorEffectMeta { static DB2Meta const* Instance() { - static char const* types = "fifhhhhhbbi"; - static uint8 const arraySizes[11] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 11, 0x7E5B2E66, types, arraySizes, -1); + static DB2MetaField const fields[11] = + { + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 11, 0x773CE0DE, fields, -1); return &instance; } }; @@ -5733,9 +10142,24 @@ struct SpellVisualEffectNameMeta { static DB2Meta const* Instance() { - static char const* types = "ffffffiiibiii"; - static uint8 const arraySizes[13] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 13, 0xB930A934, types, arraySizes, -1); + static DB2MetaField const fields[14] = + { + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 14, 0x10206967, fields, -1); return &instance; } }; @@ -5744,9 +10168,19 @@ struct SpellVisualEventMeta { static DB2Meta const* Instance() { - static char const* types = "iiiiiiiii"; - static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 9, 0xAE75BC3C, types, arraySizes, 8); + static DB2MetaField const fields[9] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 9, 0x8352EE58, fields, 8); return &instance; } }; @@ -5755,9 +10189,15 @@ struct SpellVisualKitMeta { static DB2Meta const* Instance() { - static char const* types = "ifihh"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xDC04F488, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 5, 0x3F538334, fields, -1); return &instance; } }; @@ -5766,9 +10206,16 @@ struct SpellVisualKitAreaModelMeta { static DB2Meta const* Instance() { - static char const* types = "ifffhb"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0xBE76E593, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 6, 0x34C79353, fields, -1); return &instance; } }; @@ -5777,9 +10224,13 @@ struct SpellVisualKitEffectMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xB78084B7, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xF104E59F, fields, 2); return &instance; } }; @@ -5788,9 +10239,32 @@ struct SpellVisualKitModelAttachMeta { static DB2Meta const* Instance() { - static char const* types = "ffihbbhffffffffhhhhifi"; - static uint8 const arraySizes[22] = { 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(2, 22, 0xBCE18649, types, arraySizes, 21); + static DB2MetaField const fields[22] = + { + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(2, 22, 0x75650E39, fields, 21); return &instance; } }; @@ -5799,9 +10273,26 @@ struct SpellVisualMissileMeta { static DB2Meta const* Instance() { - static char const* types = "iiiffhhhhhbbiiih"; - static uint8 const arraySizes[16] = { 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(12, 16, 0x00BA67A5, types, arraySizes, 15); + static DB2MetaField const fields[16] = + { + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(2, 16, 0x0A0345EB, fields, 15); return &instance; } }; @@ -5810,9 +10301,12 @@ struct SpellXDescriptionVariablesMeta { static DB2Meta const* Instance() { - static char const* types = "ii"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xB08E6876, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xFBC7B7AE, fields, -1); return &instance; } }; @@ -5821,9 +10315,23 @@ struct SpellXSpellVisualMeta { static DB2Meta const* Instance() { - static char const* types = "iifhhhhiibbbi"; - static uint8 const arraySizes[13] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(1, 13, 0x4F4B8A2A, types, arraySizes, 12); + static DB2MetaField const fields[13] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 13, 0xCDAF2854, fields, 12); return &instance; } }; @@ -5832,9 +10340,13 @@ struct StartupFilesMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x51FEBBB5, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xF1381769, fields, -1); return &instance; } }; @@ -5843,9 +10355,12 @@ struct Startup_StringsMeta { static DB2Meta const* Instance() { - static char const* types = "ss"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xF8CDDEE7, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x82058A06, fields, -1); return &instance; } }; @@ -5854,9 +10369,13 @@ struct StationeryMeta { static DB2Meta const* Instance() { - static char const* types = "bii"; - static uint8 const arraySizes[3] = { 1, 1, 2 }; - static DB2Meta instance(-1, 3, 0x20F6BABD, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 2, true }, + }; + static DB2Meta instance(-1, 3, 0x8B250029, fields, -1); return &instance; } }; @@ -5865,9 +10384,15 @@ struct SummonPropertiesMeta { static DB2Meta const* Instance() { - static char const* types = "iiiii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xFB8338FC, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x4134937A, fields, -1); return &instance; } }; @@ -5876,9 +10401,11 @@ struct TactKeyMeta { static DB2Meta const* Instance() { - static char const* types = "b"; - static uint8 const arraySizes[1] = { 16 }; - static DB2Meta instance(-1, 1, 0xF0F98B62, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_BYTE, 16, false }, + }; + static DB2Meta instance(-1, 1, 0xA55E1CCE, fields, -1); return &instance; } }; @@ -5887,9 +10414,11 @@ struct TactKeyLookupMeta { static DB2Meta const* Instance() { - static char const* types = "b"; - static uint8 const arraySizes[1] = { 8 }; - static DB2Meta instance(-1, 1, 0x3C1AC92A, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_BYTE, 8, false }, + }; + static DB2Meta instance(-1, 1, 0x1A696886, fields, -1); return &instance; } }; @@ -5898,9 +10427,19 @@ struct TalentMeta { static DB2Meta const* Instance() { - static char const* types = "siihbbbbb"; - static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 2, 1 }; - static DB2Meta instance(-1, 9, 0xE8850B48, types, arraySizes, -1); + static DB2MetaField const fields[9] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 2, false }, + }; + static DB2Meta instance(-1, 9, 0x2661E6C2, fields, -1); return &instance; } }; @@ -5909,9 +10448,24 @@ struct TaxiNodesMeta { static DB2Meta const* Instance() { - static char const* types = "sfifffhhhbii"; - static uint8 const arraySizes[12] = { 1, 3, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 12, 0xB46C6A8B, types, arraySizes, -1); + static DB2MetaField const fields[14] = + { + { FT_STRING, 1, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 2, true }, + { FT_FLOAT, 2, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 2, true }, + }; + static DB2Meta instance(4, 14, 0x91ADBF11, fields, 5); return &instance; } }; @@ -5920,9 +10474,14 @@ struct TaxiPathMeta { static DB2Meta const* Instance() { - static char const* types = "hhii"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(2, 4, 0xF44E2BF5, types, arraySizes, 0); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(0, 4, 0x3716BBCD, fields, 1); return &instance; } }; @@ -5931,9 +10490,19 @@ struct TaxiPathNodeMeta { static DB2Meta const* Instance() { - static char const* types = "fhhbibihh"; - static uint8 const arraySizes[9] = { 3, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(4, 9, 0xD38E8C01, types, arraySizes, 1); + static DB2MetaField const fields[9] = + { + { FT_FLOAT, 3, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(1, 9, 0xE28C3360, fields, 2); return &instance; } }; @@ -5942,9 +10511,13 @@ struct TerrainMaterialMeta { static DB2Meta const* Instance() { - static char const* types = "bii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x19D9496F, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x9F25E6D3, fields, -1); return &instance; } }; @@ -5953,9 +10526,15 @@ struct TerrainTypeMeta { static DB2Meta const* Instance() { - static char const* types = "shhbb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x4FE20345, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 5, 0xB4573071, fields, -1); return &instance; } }; @@ -5964,9 +10543,11 @@ struct TerrainTypeSoundsMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xE4923C1F, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xECCAE96B, fields, -1); return &instance; } }; @@ -5975,9 +10556,20 @@ struct TextureBlendSetMeta { static DB2Meta const* Instance() { - static char const* types = "ifffffbbbb"; - static uint8 const arraySizes[10] = { 3, 3, 3, 3, 3, 4, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 10, 0xA2323E0C, types, arraySizes, -1); + static DB2MetaField const fields[10] = + { + { FT_INT, 3, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 4, true }, + }; + static DB2Meta instance(-1, 10, 0xF2AFFE4C, fields, -1); return &instance; } }; @@ -5986,9 +10578,13 @@ struct TextureFileDataMeta { static DB2Meta const* Instance() { - static char const* types = "iib"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(0, 3, 0xE0790D00, types, arraySizes, 1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 3, 0x71D3BD92, fields, 2); return &instance; } }; @@ -5997,9 +10593,13 @@ struct TotemCategoryMeta { static DB2Meta const* Instance() { - static char const* types = "sib"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x20B9177A, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x2AA9FB1E, fields, -1); return &instance; } }; @@ -6008,9 +10608,15 @@ struct ToyMeta { static DB2Meta const* Instance() { - static char const* types = "sibbi"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(4, 5, 0x5409C5EA, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(1, 5, 0x6156EBCA, fields, -1); return &instance; } }; @@ -6019,9 +10625,17 @@ struct TradeSkillCategoryMeta { static DB2Meta const* Instance() { - static char const* types = "shhhb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x5D3ADD4D, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(2, 7, 0xAFEA1AAD, fields, -1); return &instance; } }; @@ -6030,9 +10644,12 @@ struct TradeSkillItemMeta { static DB2Meta const* Instance() { - static char const* types = "hb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xFDE283DA, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xA90CD5D2, fields, -1); return &instance; } }; @@ -6041,9 +10658,15 @@ struct TransformMatrixMeta { static DB2Meta const* Instance() { - static char const* types = "fffff"; - static uint8 const arraySizes[5] = { 3, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xB6A2C431, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_FLOAT, 3, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0xBA00B2FD, fields, -1); return &instance; } }; @@ -6052,9 +10675,12 @@ struct TransmogHolidayMeta { static DB2Meta const* Instance() { - static char const* types = "ii"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(0, 2, 0xB420EB18, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 2, 0x6FC325A0, fields, -1); return &instance; } }; @@ -6063,9 +10689,20 @@ struct TransmogSetMeta { static DB2Meta const* Instance() { - static char const* types = "shhbiiiiii"; - static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(4, 10, 0xBEDFD7D1, types, arraySizes, 1); + static DB2MetaField const fields[10] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(1, 10, 0x3F0E4AEF, fields, 7); return &instance; } }; @@ -6074,9 +10711,12 @@ struct TransmogSetGroupMeta { static DB2Meta const* Instance() { - static char const* types = "si"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(1, 2, 0xCD072FE5, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(1, 2, 0x0F60CFC9, fields, -1); return &instance; } }; @@ -6085,9 +10725,14 @@ struct TransmogSetItemMeta { static DB2Meta const* Instance() { - static char const* types = "iiii"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(0, 4, 0x0E96B3A2, types, arraySizes, 1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 4, 0x23855A82, fields, 1); return &instance; } }; @@ -6096,9 +10741,14 @@ struct TransportAnimationMeta { static DB2Meta const* Instance() { - static char const* types = "ifbi"; - static uint8 const arraySizes[4] = { 1, 3, 1, 1 }; - static DB2Meta instance(-1, 4, 0x099987ED, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_FLOAT, 3, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0x6329464B, fields, 3); return &instance; } }; @@ -6107,9 +10757,20 @@ struct TransportPhysicsMeta { static DB2Meta const* Instance() { - static char const* types = "ffffffffff"; - static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 10, 0x2C1FB208, types, arraySizes, -1); + static DB2MetaField const fields[10] = + { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 10, 0x0B297C98, fields, -1); return &instance; } }; @@ -6118,9 +10779,13 @@ struct TransportRotationMeta { static DB2Meta const* Instance() { - static char const* types = "ifi"; - static uint8 const arraySizes[3] = { 1, 4, 1 }; - static DB2Meta instance(-1, 3, 0x72035AA9, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_FLOAT, 4, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x5FE3BC91, fields, 2); return &instance; } }; @@ -6129,9 +10794,14 @@ struct TrophyMeta { static DB2Meta const* Instance() { - static char const* types = "shbi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xE16151C5, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x0AE68C93, fields, -1); return &instance; } }; @@ -6140,9 +10810,13 @@ struct UIExpansionDisplayInfoMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x73DFDEC5, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xCD407FA1, fields, -1); return &instance; } }; @@ -6151,9 +10825,13 @@ struct UIExpansionDisplayInfoIconMeta { static DB2Meta const* Instance() { - static char const* types = "sii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x331022F2, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xC9B51E5D, fields, -1); return &instance; } }; @@ -6162,9 +10840,15 @@ struct UiCamFbackTransmogChrRaceMeta { static DB2Meta const* Instance() { - static char const* types = "hbbbb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x9FB4CC78, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 5, 0xB1C9DAC4, fields, -1); return &instance; } }; @@ -6173,9 +10857,14 @@ struct UiCamFbackTransmogWeaponMeta { static DB2Meta const* Instance() { - static char const* types = "hbbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x020890B7, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x5148437F, fields, -1); return &instance; } }; @@ -6184,9 +10873,19 @@ struct UiCameraMeta { static DB2Meta const* Instance() { - static char const* types = "sfffhbbbi"; - static uint8 const arraySizes[9] = { 1, 3, 3, 3, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 9, 0xCA6C98D4, types, arraySizes, -1); + static DB2MetaField const fields[9] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 9, 0xC54B36EE, fields, -1); return &instance; } }; @@ -6195,20 +10894,209 @@ struct UiCameraTypeMeta { static DB2Meta const* Instance() { - static char const* types = "sii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x644732AE, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x34F64532, fields, -1); + return &instance; + } +}; + +struct UiCanvasMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(0, 3, 0x77DC2C2A, fields, -1); + return &instance; + } +}; + +struct UiMapMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[13] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(1, 13, 0x4B07CF16, fields, 2); + return &instance; + } +}; + +struct UiMapArtMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xD85EF8B6, fields, -1); + return &instance; + } +}; + +struct UiMapArtStyleLayerMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[9] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 9, 0xAFF6429A, fields, 8); + return &instance; + } +}; + +struct UiMapArtTileMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[5] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0xBA5290E9, fields, 4); + return &instance; + } +}; + +struct UiMapAssignmentMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[10] = + { + { FT_FLOAT, 2, true }, + { FT_FLOAT, 2, true }, + { FT_FLOAT, 6, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(3, 10, 0xFA919770, fields, 4); return &instance; } }; -struct UiMapPOIMeta +struct UiMapFogOfWarMeta { static DB2Meta const* Instance() { - static char const* types = "ifiihhi"; - static uint8 const arraySizes[7] = { 1, 3, 1, 1, 1, 1, 1 }; - static DB2Meta instance(6, 7, 0x559E1F11, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 4, 0x257E044E, fields, 1); + return &instance; + } +}; + +struct UiMapFogOfWarVisualizationMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xB8110379, fields, -1); + return &instance; + } +}; + +struct UiMapGroupMemberMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[5] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x3D1DDDA1, fields, 1); + return &instance; + } +}; + +struct UiMapLinkMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[6] = + { + { FT_FLOAT, 2, true }, + { FT_FLOAT, 2, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(2, 6, 0x1A2F1836, fields, 3); + return &instance; + } +}; + +struct UiMapXMapArtMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xD74B6E49, fields, 2); return &instance; } }; @@ -6217,9 +11105,12 @@ struct UiModelSceneMeta { static DB2Meta const* Instance() { - static char const* types = "bb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xA7D62B8A, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x0B9EFECA, fields, -1); return &instance; } }; @@ -6228,9 +11119,20 @@ struct UiModelSceneActorMeta { static DB2Meta const* Instance() { - static char const* types = "sfffffbiii"; - static uint8 const arraySizes[10] = { 1, 3, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(7, 10, 0x679AC95F, types, arraySizes, 9); + static DB2MetaField const fields[10] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_FLOAT, 3, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(2, 10, 0x8B5BF449, fields, 9); return &instance; } }; @@ -6239,9 +11141,17 @@ struct UiModelSceneActorDisplayMeta { static DB2Meta const* Instance() { - static char const* types = "fffii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x6137F4BE, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 7, 0xDD1DD903, fields, -1); return &instance; } }; @@ -6250,9 +11160,44 @@ struct UiModelSceneCameraMeta { static DB2Meta const* Instance() { - static char const* types = "sfffffffffffbbii"; - static uint8 const arraySizes[16] = { 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(14, 16, 0xC58AA5EC, types, arraySizes, 15); + static DB2MetaField const fields[16] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(3, 16, 0xEDFBD5A2, fields, 15); + return &instance; + } +}; + +struct UiPartyPoseMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[6] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 6, 0x880480BF, fields, 5); return &instance; } }; @@ -6261,9 +11206,28 @@ struct UiTextureAtlasMeta { static DB2Meta const* Instance() { - static char const* types = "ihh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x9879592A, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x6951B2FD, fields, -1); + return &instance; + } +}; + +struct UiTextureAtlasElementMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[2] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(1, 2, 0xBBDA0A61, fields, -1); return &instance; } }; @@ -6272,9 +11236,20 @@ struct UiTextureAtlasMemberMeta { static DB2Meta const* Instance() { - static char const* types = "sihhhhhb"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(1, 8, 0x81E2055F, types, arraySizes, -1); + static DB2MetaField const fields[10] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(1, 10, 0x4D58B085, fields, 7); return &instance; } }; @@ -6283,64 +11258,166 @@ struct UiTextureKitMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x2C7E0372, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x1FC1A9C6, fields, -1); return &instance; } }; -struct UnitBloodMeta +struct UiWidgetMeta { static DB2Meta const* Instance() { - static char const* types = "iiiiii"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0x4689A9A0, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 6, 0xC4C60F67, fields, -1); return &instance; } }; -struct UnitBloodLevelsMeta +struct UiWidgetConstantSourceMeta { static DB2Meta const* Instance() { - static char const* types = "b"; - static uint8 const arraySizes[1] = { 3 }; - static DB2Meta instance(-1, 1, 0x31A6BD58, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xFE573B5D, fields, 2); return &instance; } }; -struct UnitConditionMeta +struct UiWidgetDataSourceMeta { static DB2Meta const* Instance() { - static char const* types = "ibbb"; - static uint8 const arraySizes[4] = { 8, 1, 8, 8 }; - static DB2Meta instance(-1, 4, 0x62802D9C, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x27BC34FD, fields, 3); return &instance; } }; -struct UnitPowerBarMeta +struct UiWidgetStringSourceMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x86CECC21, fields, 2); + return &instance; + } +}; + +struct UiWidgetVisualizationMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0x1DB32AF9, fields, -1); + return &instance; + } +}; + +struct UnitBloodMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[6] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 6, 0x007ED968, fields, -1); + return &instance; + } +}; + +struct UnitBloodLevelsMeta { static DB2Meta const* Instance() { - static char const* types = "ssssffiiffhhbbii"; - static uint8 const arraySizes[16] = { 1, 1, 1, 1, 1, 1, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 16, 0x626C94CD, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_BYTE, 3, false }, + }; + static DB2Meta instance(-1, 1, 0x684D24F4, fields, -1); return &instance; } }; -struct UnitTestMeta +struct UnitConditionMeta { static DB2Meta const* Instance() { - static char const* types = "ssiii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(2, 5, 0x63B4527B, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 8, false }, + { FT_BYTE, 8, true }, + { FT_INT, 8, true }, + }; + static DB2Meta instance(-1, 4, 0x215CBCD2, fields, -1); + return &instance; + } +}; + +struct UnitPowerBarMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[16] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 6, true }, + { FT_INT, 6, true }, + }; + static DB2Meta instance(-1, 16, 0x2640852D, fields, -1); return &instance; } }; @@ -6349,9 +11426,28 @@ struct VehicleMeta { static DB2Meta const* Instance() { - static char const* types = "ifffffffffffhhhbbi"; - static uint8 const arraySizes[18] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 3, 1, 1, 1 }; - static DB2Meta instance(-1, 18, 0x1606C582, types, arraySizes, -1); + static DB2MetaField const fields[18] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 8, false }, + { FT_SHORT, 3, false }, + }; + static DB2Meta instance(-1, 18, 0x221A0252, fields, -1); return &instance; } }; @@ -6360,9 +11456,71 @@ struct VehicleSeatMeta { static DB2Meta const* Instance() { - static char const* types = "iiiffffffffffffffffffffffffffffffihhhhhhhhhhhhhhhhhhhbbbbbbii"; - static uint8 const arraySizes[61] = { 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 61, 0x242E0ECD, types, arraySizes, -1); + static DB2MetaField const fields[61] = + { + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 61, 0x7AB200FA, fields, -1); return &instance; } }; @@ -6371,9 +11529,14 @@ struct VehicleUIIndSeatMeta { static DB2Meta const* Instance() { - static char const* types = "ffbh"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x5F688502, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x590E3162, fields, 3); return &instance; } }; @@ -6382,9 +11545,11 @@ struct VehicleUIIndicatorMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x68486100, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x4B1AACBC, fields, -1); return &instance; } }; @@ -6393,9 +11558,19 @@ struct VignetteMeta { static DB2Meta const* Instance() { - static char const* types = "sffiiii"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0x52E3B381, types, arraySizes, -1); + static DB2MetaField const fields[9] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 9, 0xE70E083E, fields, -1); return &instance; } }; @@ -6404,9 +11579,12 @@ struct VirtualAttachmentMeta { static DB2Meta const* Instance() { - static char const* types = "sh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xEC767C57, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xA9D90777, fields, -1); return &instance; } }; @@ -6415,9 +11593,13 @@ struct VirtualAttachmentCustomizationMeta { static DB2Meta const* Instance() { - static char const* types = "ihh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xC354C931, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x5812DF35, fields, -1); return &instance; } }; @@ -6426,9 +11608,14 @@ struct VocalUISoundsMeta { static DB2Meta const* Instance() { - static char const* types = "bbbi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 2 }; - static DB2Meta instance(-1, 4, 0xED48CFA9, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 2, false }, + }; + static DB2Meta instance(-1, 4, 0x264C4E59, fields, -1); return &instance; } }; @@ -6437,9 +11624,25 @@ struct WMOAreaTableMeta { static DB2Meta const* Instance() { - static char const* types = "sihhhhhhbbbbiih"; - static uint8 const arraySizes[15] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(12, 15, 0x4616C893, types, arraySizes, 14); + static DB2MetaField const fields[15] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(1, 15, 0x60EC930B, fields, 2); return &instance; } }; @@ -6448,9 +11651,15 @@ struct WMOMinimapTextureMeta { static DB2Meta const* Instance() { - static char const* types = "ihbbh"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x8F4AE3C0, types, arraySizes, 4); + static DB2MetaField const fields[5] = + { + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x48CE176C, fields, 4); return &instance; } }; @@ -6459,9 +11668,15 @@ struct WbAccessControlListMeta { static DB2Meta const* Instance() { - static char const* types = "shbbb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xBE044710, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 5, 0xDC9D8334, fields, -1); return &instance; } }; @@ -6470,9 +11685,14 @@ struct WbCertWhitelistMeta { static DB2Meta const* Instance() { - static char const* types = "sbbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x01D13030, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x1524F278, fields, -1); return &instance; } }; @@ -6481,9 +11701,17 @@ struct WeaponImpactSoundsMeta { static DB2Meta const* Instance() { - static char const* types = "bbbiiii"; - static uint8 const arraySizes[7] = { 1, 1, 1, 11, 11, 11, 11 }; - static DB2Meta instance(-1, 7, 0x774C043A, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 11, false }, + { FT_INT, 11, false }, + { FT_INT, 11, false }, + { FT_INT, 11, false }, + }; + static DB2Meta instance(-1, 7, 0x9C7F9BA6, fields, -1); return &instance; } }; @@ -6492,9 +11720,13 @@ struct WeaponSwingSounds2Meta { static DB2Meta const* Instance() { - static char const* types = "bbi"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xD45347C3, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x18B6CC57, fields, -1); return &instance; } }; @@ -6503,9 +11735,19 @@ struct WeaponTrailMeta { static DB2Meta const* Instance() { - static char const* types = "ifffiffff"; - static uint8 const arraySizes[9] = { 1, 1, 1, 1, 3, 3, 3, 3, 3 }; - static DB2Meta instance(-1, 9, 0x49754C60, types, arraySizes, -1); + static DB2MetaField const fields[9] = + { + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + }; + static DB2Meta instance(-1, 9, 0xB05F809A, fields, -1); return &instance; } }; @@ -6514,9 +11756,13 @@ struct WeaponTrailModelDefMeta { static DB2Meta const* Instance() { - static char const* types = "ihh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x7DE7C508, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xCE7AD194, fields, 2); return &instance; } }; @@ -6525,9 +11771,20 @@ struct WeaponTrailParamMeta { static DB2Meta const* Instance() { - static char const* types = "fffffbbbbh"; - static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 10, 0x9B0F7200, types, arraySizes, 9); + static DB2MetaField const fields[10] = + { + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 10, 0xC3B87CA4, fields, 9); return &instance; } }; @@ -6536,86 +11793,133 @@ struct WeatherMeta { static DB2Meta const* Instance() { - static char const* types = "ffffffffhbbbii"; - static uint8 const arraySizes[14] = { 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 14, 0x7C160B07, types, arraySizes, -1); - return &instance; - } -}; - -struct WindSettingsMeta -{ - static DB2Meta const* Instance() - { - static char const* types = "fffffffffb"; - static uint8 const arraySizes[10] = { 1, 3, 1, 1, 3, 1, 3, 1, 1, 1 }; - static DB2Meta instance(-1, 10, 0x5308550C, types, arraySizes, -1); + static DB2MetaField const fields[22] = + { + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 2, true }, + { FT_FLOAT, 3, true }, + }; + static DB2Meta instance(-1, 22, 0x784E91E0, fields, -1); return &instance; } }; -struct WorldBossLockoutMeta +struct WeatherXParticulateMeta { static DB2Meta const* Instance() { - static char const* types = "sh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x4D7103A0, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x791A7865, fields, 1); return &instance; } }; -struct WorldChunkSoundsMeta +struct WindSettingsMeta { static DB2Meta const* Instance() { - static char const* types = "hbbbbb"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0xD06AA126, types, arraySizes, -1); + static DB2MetaField const fields[10] = + { + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 10, 0xE09E01C4, fields, -1); return &instance; } }; -struct WorldEffectMeta +struct WorldBossLockoutMeta { static DB2Meta const* Instance() { - static char const* types = "ihbbii"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0x2E9B9BFD, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x57E8ADB8, fields, -1); return &instance; } }; -struct WorldElapsedTimerMeta +struct WorldChunkSoundsMeta { static DB2Meta const* Instance() { - static char const* types = "sbb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x6C026FDE, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 6, 0xA5616A27, fields, -1); return &instance; } }; -struct WorldMapAreaMeta +struct WorldEffectMeta { static DB2Meta const* Instance() { - static char const* types = "sffffihhhhhbbbbii"; - static uint8 const arraySizes[17] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(15, 17, 0xC7E90019, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 6, 0xBCB8719B, fields, -1); return &instance; } }; -struct WorldMapContinentMeta +struct WorldElapsedTimerMeta { static DB2Meta const* Instance() { - static char const* types = "ffffhhbbbbb"; - static uint8 const arraySizes[11] = { 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 11, 0x8F75E077, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x103B8712, fields, -1); return &instance; } }; @@ -6624,20 +11928,40 @@ struct WorldMapOverlayMeta { static DB2Meta const* Instance() { - static char const* types = "sihhiiiiiiiiii"; - static uint8 const arraySizes[14] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4 }; - static DB2Meta instance(1, 14, 0xDC4B6AF3, types, arraySizes, 4); + static DB2MetaField const fields[13] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 4, false }, + }; + static DB2Meta instance(0, 13, 0x837A3DAA, fields, 1); return &instance; } }; -struct WorldMapTransformsMeta +struct WorldMapOverlayTileMeta { static DB2Meta const* Instance() { - static char const* types = "fffhhhhhbi"; - static uint8 const arraySizes[10] = { 6, 2, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 10, 0x99FB4B71, types, arraySizes, 3); + static DB2MetaField const fields[5] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0xC4DCC916, fields, 4); return &instance; } }; @@ -6646,9 +11970,14 @@ struct WorldSafeLocsMeta { static DB2Meta const* Instance() { - static char const* types = "sffh"; - static uint8 const arraySizes[4] = { 1, 3, 1, 1 }; - static DB2Meta instance(-1, 4, 0x605EA8A6, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, false }, + { FT_FLOAT, 3, false }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, false } + }; + static DB2Meta instance(-1, 4, 0x6BF0D7EC, fields, 3); return &instance; } }; @@ -6657,9 +11986,11 @@ struct WorldStateExpressionMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xA69C9812, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xF23806A6, fields, -1); return &instance; } }; @@ -6668,9 +11999,27 @@ struct WorldStateUIMeta { static DB2Meta const* Instance() { - static char const* types = "ssssshhhhhhbbbiii"; - static uint8 const arraySizes[17] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(14, 17, 0x70808977, types, arraySizes, 5); + static DB2MetaField const fields[17] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 3, false }, + }; + static DB2Meta instance(5, 17, 0xE1F042FE, fields, 6); return &instance; } }; @@ -6679,9 +12028,18 @@ struct WorldStateZoneSoundsMeta { static DB2Meta const* Instance() { - static char const* types = "ihhhhhhb"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 8, 0xB9572D3D, types, arraySizes, -1); + static DB2MetaField const fields[8] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 8, 0x44CFA417, fields, -1); return &instance; } }; @@ -6690,9 +12048,17 @@ struct World_PVP_AreaMeta { static DB2Meta const* Instance() { - static char const* types = "hhhhhbb"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0x6FBBF76B, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 7, 0x3F8DDC83, fields, -1); return &instance; } }; @@ -6701,9 +12067,14 @@ struct ZoneIntroMusicTableMeta { static DB2Meta const* Instance() { - static char const* types = "shbi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x1F8417ED, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x5453B51D, fields, -1); return &instance; } }; @@ -6712,9 +12083,14 @@ struct ZoneLightMeta { static DB2Meta const* Instance() { - static char const* types = "shh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x3C11F38B, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xD553DE84, fields, -1); return &instance; } }; @@ -6723,9 +12099,13 @@ struct ZoneLightPointMeta { static DB2Meta const* Instance() { - static char const* types = "fbh"; - static uint8 const arraySizes[3] = { 2, 1, 1 }; - static DB2Meta instance(-1, 3, 0xEF93DC50, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_FLOAT, 2, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xB21DA554, fields, 2); return &instance; } }; @@ -6734,9 +12114,14 @@ struct ZoneMusicMeta { static DB2Meta const* Instance() { - static char const* types = "siii"; - static uint8 const arraySizes[4] = { 1, 2, 2, 2 }; - static DB2Meta instance(-1, 4, 0x9E2B332D, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 2, false }, + { FT_INT, 2, false }, + { FT_INT, 2, false }, + }; + static DB2Meta instance(-1, 4, 0x9EBD4495, fields, -1); return &instance; } }; @@ -6745,9 +12130,14 @@ struct ZoneStoryMeta { static DB2Meta const* Instance() { - static char const* types = "iibi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xEE16D6F3, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0x5BFB82E8, fields, 3); return &instance; } }; diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp index fe91d679d97..957d44407e8 100644 --- a/src/server/game/DataStores/DB2Stores.cpp +++ b/src/server/game/DataStores/DB2Stores.cpp @@ -27,6 +27,7 @@ #include "Timer.h" #include "Util.h" #include <array> +#include <numeric> #include <sstream> #include <cctype> @@ -36,6 +37,7 @@ #endif DB2Storage<AchievementEntry> sAchievementStore("Achievement.db2", AchievementLoadInfo::Instance()); +DB2Storage<AnimationDataEntry> sAnimationDataStore("AnimationData.db2", AnimationDataLoadInfo::Instance()); DB2Storage<AnimKitEntry> sAnimKitStore("AnimKit.db2", AnimKitLoadInfo::Instance()); DB2Storage<AreaGroupMemberEntry> sAreaGroupMemberStore("AreaGroupMember.db2", AreaGroupMemberLoadInfo::Instance()); DB2Storage<AreaTableEntry> sAreaTableStore("AreaTable.db2", AreaTableLoadInfo::Instance()); @@ -75,6 +77,7 @@ DB2Storage<ChrRacesEntry> sChrRacesStore("ChrRaces.db2", C DB2Storage<ChrSpecializationEntry> sChrSpecializationStore("ChrSpecialization.db2", ChrSpecializationLoadInfo::Instance()); DB2Storage<CinematicCameraEntry> sCinematicCameraStore("CinematicCamera.db2", CinematicCameraLoadInfo::Instance()); DB2Storage<CinematicSequencesEntry> sCinematicSequencesStore("CinematicSequences.db2", CinematicSequencesLoadInfo::Instance()); +DB2Storage<ContentTuningEntry> sContentTuningStore("ContentTuning.db2", ContentTuningLoadInfo::Instance()); DB2Storage<ConversationLineEntry> sConversationLineStore("ConversationLine.db2", ConversationLineLoadInfo::Instance()); DB2Storage<CreatureDisplayInfoEntry> sCreatureDisplayInfoStore("CreatureDisplayInfo.db2", CreatureDisplayInfoLoadInfo::Instance()); DB2Storage<CreatureDisplayInfoExtraEntry> sCreatureDisplayInfoExtraStore("CreatureDisplayInfoExtra.db2", CreatureDisplayInfoExtraLoadInfo::Instance()); @@ -94,6 +97,8 @@ DB2Storage<DurabilityQualityEntry> sDurabilityQualityStore("Durabil DB2Storage<EmotesEntry> sEmotesStore("Emotes.db2", EmotesLoadInfo::Instance()); DB2Storage<EmotesTextEntry> sEmotesTextStore("EmotesText.db2", EmotesTextLoadInfo::Instance()); DB2Storage<EmotesTextSoundEntry> sEmotesTextSoundStore("EmotesTextSound.db2", EmotesTextSoundLoadInfo::Instance()); +DB2Storage<ExpectedStatEntry> sExpectedStatStore("ExpectedStat.db2", ExpectedStatLoadInfo::Instance()); +DB2Storage<ExpectedStatModEntry> sExpectedStatModStore("ExpectedStatMod.db2", ExpectedStatModLoadInfo::Instance()); DB2Storage<FactionEntry> sFactionStore("Faction.db2", FactionLoadInfo::Instance()); DB2Storage<FactionTemplateEntry> sFactionTemplateStore("FactionTemplate.db2", FactionTemplateLoadInfo::Instance()); DB2Storage<GameObjectDisplayInfoEntry> sGameObjectDisplayInfoStore("GameObjectDisplayInfo.db2", GameobjectDisplayInfoLoadInfo::Instance()); @@ -178,6 +183,7 @@ DB2Storage<NameGenEntry> sNameGenStore("NameGen.db2", Nam DB2Storage<NamesProfanityEntry> sNamesProfanityStore("NamesProfanity.db2", NamesProfanityLoadInfo::Instance()); DB2Storage<NamesReservedEntry> sNamesReservedStore("NamesReserved.db2", NamesReservedLoadInfo::Instance()); DB2Storage<NamesReservedLocaleEntry> sNamesReservedLocaleStore("NamesReservedLocale.db2", NamesReservedLocaleLoadInfo::Instance()); +DB2Storage<NumTalentsAtLevelEntry> sNumTalentsAtLevelStore("NumTalentsAtLevel.db2", NumTalentsAtLevelLoadInfo::Instance()); DB2Storage<OverrideSpellDataEntry> sOverrideSpellDataStore("OverrideSpellData.db2", OverrideSpellDataLoadInfo::Instance()); DB2Storage<PhaseEntry> sPhaseStore("Phase.db2", PhaseLoadInfo::Instance()); DB2Storage<PhaseXPhaseGroupEntry> sPhaseXPhaseGroupStore("PhaseXPhaseGroup.db2", PhaseXPhaseGroupLoadInfo::Instance()); @@ -187,9 +193,9 @@ DB2Storage<PowerTypeEntry> sPowerTypeStore("PowerType.db2", DB2Storage<PrestigeLevelInfoEntry> sPrestigeLevelInfoStore("PrestigeLevelInfo.db2", PrestigeLevelInfoLoadInfo::Instance()); DB2Storage<PVPDifficultyEntry> sPVPDifficultyStore("PVPDifficulty.db2", PvpDifficultyLoadInfo::Instance()); DB2Storage<PVPItemEntry> sPVPItemStore("PVPItem.db2", PvpItemLoadInfo::Instance()); -DB2Storage<PvpRewardEntry> sPvpRewardStore("PvpReward.db2", PvpRewardLoadInfo::Instance()); DB2Storage<PvpTalentEntry> sPvpTalentStore("PvpTalent.db2", PvpTalentLoadInfo::Instance()); -DB2Storage<PvpTalentUnlockEntry> sPvpTalentUnlockStore("PvpTalentUnlock.db2", PvpTalentUnlockLoadInfo::Instance()); +DB2Storage<PvpTalentCategoryEntry> sPvpTalentCategoryStore("PvpTalentCategory.db2", PvpTalentCategoryLoadInfo::Instance()); +DB2Storage<PvpTalentSlotUnlockEntry> sPvpTalentSlotUnlockStore("PvpTalentSlotUnlock.db2", PvpTalentSlotUnlockLoadInfo::Instance()); DB2Storage<QuestFactionRewardEntry> sQuestFactionRewardStore("QuestFactionReward.db2", QuestFactionRewardLoadInfo::Instance()); DB2Storage<QuestMoneyRewardEntry> sQuestMoneyRewardStore("QuestMoneyReward.db2", QuestMoneyRewardLoadInfo::Instance()); DB2Storage<QuestPackageItemEntry> sQuestPackageItemStore("QuestPackageItem.db2", QuestPackageItemLoadInfo::Instance()); @@ -201,7 +207,6 @@ DB2Storage<RewardPackEntry> sRewardPackStore("RewardPack.db2 DB2Storage<RewardPackXCurrencyTypeEntry> sRewardPackXCurrencyTypeStore("RewardPackXCurrencyType.db2", RewardPackXCurrencyTypeLoadInfo::Instance()); DB2Storage<RewardPackXItemEntry> sRewardPackXItemStore("RewardPackXItem.db2", RewardPackXItemLoadInfo::Instance()); DB2Storage<RulesetItemUpgradeEntry> sRulesetItemUpgradeStore("RulesetItemUpgrade.db2", RulesetItemUpgradeLoadInfo::Instance()); -DB2Storage<SandboxScalingEntry> sSandboxScalingStore("SandboxScaling.db2", SandboxScalingLoadInfo::Instance()); DB2Storage<ScalingStatDistributionEntry> sScalingStatDistributionStore("ScalingStatDistribution.db2", ScalingStatDistributionLoadInfo::Instance()); DB2Storage<ScenarioEntry> sScenarioStore("Scenario.db2", ScenarioLoadInfo::Instance()); DB2Storage<ScenarioStepEntry> sScenarioStepStore("ScenarioStep.db2", ScenarioStepLoadInfo::Instance()); @@ -214,7 +219,6 @@ DB2Storage<SkillLineAbilityEntry> sSkillLineAbilityStore("SkillLin DB2Storage<SkillRaceClassInfoEntry> sSkillRaceClassInfoStore("SkillRaceClassInfo.db2", SkillRaceClassInfoLoadInfo::Instance()); DB2Storage<SoundKitEntry> sSoundKitStore("SoundKit.db2", SoundKitLoadInfo::Instance()); DB2Storage<SpecializationSpellsEntry> sSpecializationSpellsStore("SpecializationSpells.db2", SpecializationSpellsLoadInfo::Instance()); -DB2Storage<SpellEntry> sSpellStore("Spell.db2", SpellLoadInfo::Instance()); DB2Storage<SpellAuraOptionsEntry> sSpellAuraOptionsStore("SpellAuraOptions.db2", SpellAuraOptionsLoadInfo::Instance()); DB2Storage<SpellAuraRestrictionsEntry> sSpellAuraRestrictionsStore("SpellAuraRestrictions.db2", SpellAuraRestrictionsLoadInfo::Instance()); DB2Storage<SpellCastTimesEntry> sSpellCastTimesStore("SpellCastTimes.db2", SpellCastTimesLoadInfo::Instance()); @@ -233,6 +237,7 @@ DB2Storage<SpellItemEnchantmentConditionEntry> sSpellItemEnchantmentConditionSt DB2Storage<SpellLearnSpellEntry> sSpellLearnSpellStore("SpellLearnSpell.db2", SpellLearnSpellLoadInfo::Instance()); DB2Storage<SpellLevelsEntry> sSpellLevelsStore("SpellLevels.db2", SpellLevelsLoadInfo::Instance()); DB2Storage<SpellMiscEntry> sSpellMiscStore("SpellMisc.db2", SpellMiscLoadInfo::Instance()); +DB2Storage<SpellNameEntry> sSpellNameStore("SpellName.db2", SpellNameLoadInfo::Instance()); DB2Storage<SpellPowerEntry> sSpellPowerStore("SpellPower.db2", SpellPowerLoadInfo::Instance()); DB2Storage<SpellPowerDifficultyEntry> sSpellPowerDifficultyStore("SpellPowerDifficulty.db2", SpellPowerDifficultyLoadInfo::Instance()); DB2Storage<SpellProcsPerMinuteEntry> sSpellProcsPerMinuteStore("SpellProcsPerMinute.db2", SpellProcsPerMinuteLoadInfo::Instance()); @@ -260,14 +265,16 @@ DB2Storage<TransmogSetGroupEntry> sTransmogSetGroupStore("Transmog DB2Storage<TransmogSetItemEntry> sTransmogSetItemStore("TransmogSetItem.db2", TransmogSetItemLoadInfo::Instance()); DB2Storage<TransportAnimationEntry> sTransportAnimationStore("TransportAnimation.db2", TransportAnimationLoadInfo::Instance()); DB2Storage<TransportRotationEntry> sTransportRotationStore("TransportRotation.db2", TransportRotationLoadInfo::Instance()); +DB2Storage<UiMapEntry> sUiMapStore("UiMap.db2", UiMapLoadInfo::Instance()); +DB2Storage<UiMapAssignmentEntry> sUiMapAssignmentStore("UiMapAssignment.db2", UiMapAssignmentLoadInfo::Instance()); +DB2Storage<UiMapLinkEntry> sUiMapLinkStore("UiMapLink.db2", UiMapLinkLoadInfo::Instance()); +DB2Storage<UiMapXMapArtEntry> sUiMapXMapArtStore("UiMapXMapArt.db2", UiMapXMapArtLoadInfo::Instance()); DB2Storage<UnitPowerBarEntry> sUnitPowerBarStore("UnitPowerBar.db2", UnitPowerBarLoadInfo::Instance()); DB2Storage<VehicleEntry> sVehicleStore("Vehicle.db2", VehicleLoadInfo::Instance()); DB2Storage<VehicleSeatEntry> sVehicleSeatStore("VehicleSeat.db2", VehicleSeatLoadInfo::Instance()); DB2Storage<WMOAreaTableEntry> sWMOAreaTableStore("WMOAreaTable.db2", WmoAreaTableLoadInfo::Instance()); DB2Storage<WorldEffectEntry> sWorldEffectStore("WorldEffect.db2", WorldEffectLoadInfo::Instance()); -DB2Storage<WorldMapAreaEntry> sWorldMapAreaStore("WorldMapArea.db2", WorldMapAreaLoadInfo::Instance()); DB2Storage<WorldMapOverlayEntry> sWorldMapOverlayStore("WorldMapOverlay.db2", WorldMapOverlayLoadInfo::Instance()); -DB2Storage<WorldMapTransformsEntry> sWorldMapTransformsStore("WorldMapTransforms.db2", WorldMapTransformsLoadInfo::Instance()); DB2Storage<WorldSafeLocsEntry> sWorldSafeLocsStore("WorldSafeLocs.db2", WorldSafeLocsLoadInfo::Instance()); TaxiMask sTaxiNodesMask; @@ -317,7 +324,6 @@ typedef std::unordered_map<uint32, std::array<std::vector<NameGenEntry const*>, typedef std::array<std::vector<Trinity::wregex>, TOTAL_LOCALES + 1> NameValidationRegexContainer; typedef std::unordered_map<uint32, std::vector<uint32>> PhaseGroupContainer; typedef std::array<PowerTypeEntry const*, MAX_POWERS> PowerTypesContainer; -typedef std::vector<PvpTalentEntry const*> PvpTalentsByPosition[MAX_CLASSES][MAX_PVP_TALENT_TIERS][MAX_PVP_TALENT_COLUMNS]; typedef std::unordered_map<uint32, std::pair<std::vector<QuestPackageItemEntry const*>, std::vector<QuestPackageItemEntry const*>>> QuestPackageItemContainer; typedef std::unordered_map<uint32, uint32> RulesetItemUpgradeContainer; typedef std::unordered_multimap<uint32, SkillRaceClassInfoEntry const*> SkillRaceClassInfoContainer; @@ -329,12 +335,20 @@ typedef std::vector<TalentEntry const*> TalentsByPosition[MAX_CLASSES][MAX_TALEN typedef std::unordered_set<uint32> ToyItemIdsContainer; typedef std::tuple<uint16, uint8, int32> WMOAreaTableKey; typedef std::map<WMOAreaTableKey, WMOAreaTableEntry const*> WMOAreaTableLookupContainer; -typedef std::unordered_map<uint32, WorldMapAreaEntry const*> WorldMapAreaByAreaIDContainer; namespace { + struct UiMapBounds + { + // these coords are mixed when calculated and used... its a mess + float Bounds[4]; + bool IsUiAssignment; + bool IsUiLink; + }; + StorageMap _stores; std::map<uint64, int32> _hotfixData; + std::map<std::pair<uint32 /*tableHash*/, int32 /*recordId*/>, std::vector<uint8>> _hotfixBlob; AreaGroupMemberContainer _areaGroupMembers; ArtifactPowersContainer _artifactPowers; @@ -348,6 +362,7 @@ namespace ChrSpecialzationByClassContainer _defaultChrSpecializationsByClass; CurvePointsContainer _curvePoints; EmotesTextSoundContainer _emoteTextSounds; + std::unordered_map<std::pair<uint32 /*level*/, int32 /*expansion*/>, ExpectedStatEntry const*> _expectedStatsByLevel; FactionTeamContainer _factionTeams; HeirloomItemsContainer _heirlooms; GlyphBindableSpellsContainer _glyphBindableSpells; @@ -373,13 +388,12 @@ namespace PhaseGroupContainer _phasesByGroup; PowerTypesContainer _powerTypes; std::unordered_map<uint32, uint8> _pvpItemBonus; - std::unordered_map<std::pair<uint32 /*prestige level*/, uint32 /*honor level*/>, uint32> _pvpRewardPack; - PvpTalentsByPosition _pvpTalentsByPosition; - uint32 _pvpTalentUnlock[MAX_PVP_TALENT_TIERS][MAX_PVP_TALENT_COLUMNS]; + PvpTalentSlotUnlockEntry const* _pvpTalentSlotUnlock[MAX_PVP_TALENT_SLOTS]; QuestPackageItemContainer _questPackages; std::unordered_map<uint32, std::vector<RewardPackXCurrencyTypeEntry const*>> _rewardPackCurrencyTypes; std::unordered_map<uint32, std::vector<RewardPackXItemEntry const*>> _rewardPackItems; RulesetItemUpgradeContainer _rulesetItemUpgrade; + std::unordered_map<uint32, std::vector<SkillLineAbilityEntry const*>> _skillLineAbilitiesBySkillupSkill; SkillRaceClassInfoContainer _skillRaceClassInfoBySkill; SpecializationSpellsContainer _specializationSpellsBySpec; std::unordered_set<uint8> _spellFamilyNames; @@ -390,25 +404,28 @@ namespace ToyItemIdsContainer _toys; std::unordered_map<uint32, std::vector<TransmogSetEntry const*>> _transmogSetsByItemModifiedAppearance; std::unordered_map<uint32, std::vector<TransmogSetItemEntry const*>> _transmogSetItemsByTransmogSet; + std::unordered_map<int32, UiMapBounds> _uiMapBounds; + std::unordered_multimap<int32, UiMapAssignmentEntry const*> _uiMapAssignmentByMap[MAX_UI_MAP_SYSTEM]; + std::unordered_multimap<int32, UiMapAssignmentEntry const*> _uiMapAssignmentByArea[MAX_UI_MAP_SYSTEM]; + std::unordered_multimap<int32, UiMapAssignmentEntry const*> _uiMapAssignmentByWmoDoodadPlacement[MAX_UI_MAP_SYSTEM]; + std::unordered_multimap<int32, UiMapAssignmentEntry const*> _uiMapAssignmentByWmoGroup[MAX_UI_MAP_SYSTEM]; + std::unordered_set<int32> _uiMapPhases; WMOAreaTableLookupContainer _wmoAreaTableLookup; - WorldMapAreaByAreaIDContainer _worldMapAreaByAreaID; } -typedef std::vector<std::string> DB2StoreProblemList; - template<class T, template<class> class DB2> -inline void LoadDB2(uint32& availableDb2Locales, DB2StoreProblemList& errlist, StorageMap& stores, DB2StorageBase* storage, std::string const& db2Path, uint32 defaultLocale, DB2<T> const& /*hint*/) +inline void LoadDB2(uint32& availableDb2Locales, std::vector<std::string>& errlist, StorageMap& stores, DB2StorageBase* storage, std::string const& db2Path, uint32 defaultLocale, DB2<T> const& /*hint*/) { // validate structure DB2LoadInfo const* loadInfo = storage->GetLoadInfo(); { std::string clientMetaString, ourMetaString; for (std::size_t i = 0; i < loadInfo->Meta->FieldCount; ++i) - for (std::size_t j = 0; j < loadInfo->Meta->ArraySizes[i]; ++j) - clientMetaString += loadInfo->Meta->Types[i]; + for (std::size_t j = 0; j < loadInfo->Meta->Fields[i].ArraySize; ++j) + clientMetaString += loadInfo->Meta->Fields[i].Type; for (std::size_t i = loadInfo->Meta->HasIndexFieldInData() ? 0 : 1; i < loadInfo->FieldCount; ++i) - ourMetaString += char(std::tolower(loadInfo->Fields[i].Type)); + ourMetaString += loadInfo->Fields[i].Type; ASSERT(clientMetaString == ourMetaString, "%s C++ structure fields %s do not match generated types from the client %s", @@ -422,7 +439,7 @@ inline void LoadDB2(uint32& availableDb2Locales, DB2StoreProblemList& errlist, S if (storage->Load(db2Path + localeNames[defaultLocale] + '/', defaultLocale)) { - storage->LoadFromDB(); + storage->LoadFromDB(); // LoadFromDB() always loads strings into enUS locale, other locales are expected to have data in corresponding _locale tables // so we need to make additional call to load that data in case said locale is set as default by worldserver.conf (and we do not want to load all this data from .db2 file again) if (defaultLocale != LOCALE_enUS) @@ -471,12 +488,13 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) std::string db2Path = dataPath + "dbc/"; - DB2StoreProblemList bad_db2_files; + std::vector<std::string> bad_db2_files; uint32 availableDb2Locales = 0xFF; #define LOAD_DB2(store) LoadDB2(availableDb2Locales, bad_db2_files, _stores, &store, db2Path, defaultLocale, store) LOAD_DB2(sAchievementStore); + LOAD_DB2(sAnimationDataStore); LOAD_DB2(sAnimKitStore); LOAD_DB2(sAreaGroupMemberStore); LOAD_DB2(sAreaTableStore); @@ -515,6 +533,7 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) LOAD_DB2(sChrSpecializationStore); LOAD_DB2(sCinematicCameraStore); LOAD_DB2(sCinematicSequencesStore); + LOAD_DB2(sContentTuningStore); LOAD_DB2(sConversationLineStore); LOAD_DB2(sCreatureDisplayInfoStore); LOAD_DB2(sCreatureDisplayInfoExtraStore); @@ -534,6 +553,8 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) LOAD_DB2(sEmotesStore); LOAD_DB2(sEmotesTextStore); LOAD_DB2(sEmotesTextSoundStore); + LOAD_DB2(sExpectedStatStore); + LOAD_DB2(sExpectedStatModStore); LOAD_DB2(sFactionStore); LOAD_DB2(sFactionTemplateStore); LOAD_DB2(sGameObjectsStore); @@ -618,6 +639,7 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) LOAD_DB2(sNamesProfanityStore); LOAD_DB2(sNamesReservedStore); LOAD_DB2(sNamesReservedLocaleStore); + LOAD_DB2(sNumTalentsAtLevelStore); LOAD_DB2(sOverrideSpellDataStore); LOAD_DB2(sPhaseStore); LOAD_DB2(sPhaseXPhaseGroupStore); @@ -627,9 +649,9 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) LOAD_DB2(sPrestigeLevelInfoStore); LOAD_DB2(sPVPDifficultyStore); LOAD_DB2(sPVPItemStore); - LOAD_DB2(sPvpRewardStore); LOAD_DB2(sPvpTalentStore); - LOAD_DB2(sPvpTalentUnlockStore); + LOAD_DB2(sPvpTalentCategoryStore); + LOAD_DB2(sPvpTalentSlotUnlockStore); LOAD_DB2(sQuestFactionRewardStore); LOAD_DB2(sQuestMoneyRewardStore); LOAD_DB2(sQuestPackageItemStore); @@ -641,7 +663,6 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) LOAD_DB2(sRewardPackXCurrencyTypeStore); LOAD_DB2(sRewardPackXItemStore); LOAD_DB2(sRulesetItemUpgradeStore); - LOAD_DB2(sSandboxScalingStore); LOAD_DB2(sScalingStatDistributionStore); LOAD_DB2(sScenarioStore); LOAD_DB2(sScenarioStepStore); @@ -654,7 +675,6 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) LOAD_DB2(sSkillRaceClassInfoStore); LOAD_DB2(sSoundKitStore); LOAD_DB2(sSpecializationSpellsStore); - LOAD_DB2(sSpellStore); LOAD_DB2(sSpellAuraOptionsStore); LOAD_DB2(sSpellAuraRestrictionsStore); LOAD_DB2(sSpellCastTimesStore); @@ -673,6 +693,7 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) LOAD_DB2(sSpellLearnSpellStore); LOAD_DB2(sSpellLevelsStore); LOAD_DB2(sSpellMiscStore); + LOAD_DB2(sSpellNameStore); LOAD_DB2(sSpellPowerStore); LOAD_DB2(sSpellPowerDifficultyStore); LOAD_DB2(sSpellProcsPerMinuteStore); @@ -700,14 +721,16 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) LOAD_DB2(sTransmogSetItemStore); LOAD_DB2(sTransportAnimationStore); LOAD_DB2(sTransportRotationStore); + LOAD_DB2(sUiMapStore); + LOAD_DB2(sUiMapAssignmentStore); + LOAD_DB2(sUiMapLinkStore); + LOAD_DB2(sUiMapXMapArtStore); LOAD_DB2(sUnitPowerBarStore); LOAD_DB2(sVehicleStore); LOAD_DB2(sVehicleSeatStore); LOAD_DB2(sWMOAreaTableStore); LOAD_DB2(sWorldEffectStore); - LOAD_DB2(sWorldMapAreaStore); LOAD_DB2(sWorldMapOverlayStore); - LOAD_DB2(sWorldMapTransformsStore); LOAD_DB2(sWorldSafeLocsStore); #undef LOAD_DB2 @@ -816,6 +839,9 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) for (EmotesTextSoundEntry const* emoteTextSound : sEmotesTextSoundStore) _emoteTextSounds[EmotesTextSoundContainer::key_type(emoteTextSound->EmotesTextID, emoteTextSound->RaceID, emoteTextSound->SexID, emoteTextSound->ClassID)] = emoteTextSound; + for (ExpectedStatEntry const* expectedStat : sExpectedStatStore) + _expectedStatsByLevel[std::make_pair(expectedStat->Lvl, expectedStat->ExpansionID)] = expectedStat; + for (FactionEntry const* faction : sFactionStore) if (faction->ParentFactionID) _factionTeams[faction->ParentFactionID].push_back(faction->ID); @@ -969,28 +995,17 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) for (PVPItemEntry const* pvpItem : sPVPItemStore) _pvpItemBonus[pvpItem->ItemID] = pvpItem->ItemLevelDelta; - for (PvpRewardEntry const* pvpReward : sPvpRewardStore) - _pvpRewardPack[std::make_pair(pvpReward->PrestigeLevel, pvpReward->HonorLevel)] = pvpReward->RewardPackID; - - for (PvpTalentEntry const* talentInfo : sPvpTalentStore) + for (PvpTalentSlotUnlockEntry const* talentUnlock : sPvpTalentSlotUnlockStore) { - ASSERT(talentInfo->ClassID < MAX_CLASSES); - ASSERT(talentInfo->TierID < MAX_PVP_TALENT_TIERS, "MAX_PVP_TALENT_TIERS must be at least %u", talentInfo->TierID + 1); - ASSERT(talentInfo->ColumnIndex < MAX_PVP_TALENT_COLUMNS, "MAX_PVP_TALENT_COLUMNS must be at least %u", talentInfo->ColumnIndex + 1); - if (!talentInfo->ClassID) + ASSERT(talentUnlock->Slot < (1 << MAX_PVP_TALENT_SLOTS)); + for (int8 i = 0; i < MAX_PVP_TALENT_SLOTS; ++i) { - for (uint32 i = 1; i < MAX_CLASSES; ++i) - _pvpTalentsByPosition[i][talentInfo->TierID][talentInfo->ColumnIndex].push_back(talentInfo); + if (talentUnlock->Slot & (1 << i)) + { + ASSERT(!_pvpTalentSlotUnlock[i]); + _pvpTalentSlotUnlock[i] = talentUnlock; + } } - else - _pvpTalentsByPosition[talentInfo->ClassID][talentInfo->TierID][talentInfo->ColumnIndex].push_back(talentInfo); - } - - for (PvpTalentUnlockEntry const* talentUnlock : sPvpTalentUnlockStore) - { - ASSERT(talentUnlock->TierID < MAX_PVP_TALENT_TIERS, "MAX_PVP_TALENT_TIERS must be at least %u", talentUnlock->TierID + 1); - ASSERT(talentUnlock->ColumnIndex < MAX_PVP_TALENT_COLUMNS, "MAX_PVP_TALENT_COLUMNS must be at least %u", talentUnlock->ColumnIndex + 1); - _pvpTalentUnlock[talentUnlock->TierID][talentUnlock->ColumnIndex] = talentUnlock->HonorLevel; } for (QuestPackageItemEntry const* questPackageItem : sQuestPackageItemStore) @@ -1010,6 +1025,9 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) for (RulesetItemUpgradeEntry const* rulesetItemUpgrade : sRulesetItemUpgradeStore) _rulesetItemUpgrade[rulesetItemUpgrade->ItemID] = rulesetItemUpgrade->ItemUpgradeID; + for (SkillLineAbilityEntry const* skillLineAbility : sSkillLineAbilityStore) + _skillLineAbilitiesBySkillupSkill[skillLineAbility->SkillupSkillLineID ? skillLineAbility->SkillupSkillLineID : skillLineAbility->SkillLine].push_back(skillLineAbility); + for (SkillRaceClassInfoEntry const* entry : sSkillRaceClassInfoStore) if (sSkillLineStore.LookupEntry(entry->SkillID)) _skillRaceClassInfoBySkill.insert(SkillRaceClassInfoContainer::value_type(entry->SkillID, entry)); @@ -1073,6 +1091,118 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) for (TaxiPathNodeEntry const* entry : sTaxiPathNodeStore) sTaxiPathNodesByPath[entry->PathID][entry->NodeIndex] = entry; + for (ToyEntry const* toy : sToyStore) + _toys.insert(toy->ItemID); + + for (TransmogSetItemEntry const* transmogSetItem : sTransmogSetItemStore) + { + TransmogSetEntry const* set = sTransmogSetStore.LookupEntry(transmogSetItem->TransmogSetID); + if (!set) + continue; + + _transmogSetsByItemModifiedAppearance[transmogSetItem->ItemModifiedAppearanceID].push_back(set); + _transmogSetItemsByTransmogSet[transmogSetItem->TransmogSetID].push_back(transmogSetItem); + } + + std::unordered_multimap<int32, UiMapAssignmentEntry const*> uiMapAssignmentByUiMap; + for (UiMapAssignmentEntry const* uiMapAssignment : sUiMapAssignmentStore) + { + uiMapAssignmentByUiMap.emplace(uiMapAssignment->UiMapID, uiMapAssignment); + if (UiMapEntry const* uiMap = sUiMapStore.LookupEntry(uiMapAssignment->UiMapID)) + { + ASSERT(uiMap->System < MAX_UI_MAP_SYSTEM, "MAX_TALENT_TIERS must be at least %u", uiMap->System + 1); + if (uiMapAssignment->MapID >= 0) + _uiMapAssignmentByMap[uiMap->System].emplace(uiMapAssignment->MapID, uiMapAssignment); + if (uiMapAssignment->AreaID) + _uiMapAssignmentByArea[uiMap->System].emplace(uiMapAssignment->AreaID, uiMapAssignment); + if (uiMapAssignment->WmoDoodadPlacementID) + _uiMapAssignmentByWmoDoodadPlacement[uiMap->System].emplace(uiMapAssignment->WmoDoodadPlacementID, uiMapAssignment); + if (uiMapAssignment->WmoGroupID) + _uiMapAssignmentByWmoGroup[uiMap->System].emplace(uiMapAssignment->WmoGroupID, uiMapAssignment); + } + } + + std::unordered_map<std::pair<int32, uint32>, UiMapLinkEntry const*> uiMapLinks; + for (UiMapLinkEntry const* uiMapLink : sUiMapLinkStore) + uiMapLinks[std::make_pair(uiMapLink->ParentUiMapID, uint32(uiMapLink->ChildUiMapID))] = uiMapLink; + + for (UiMapEntry const* uiMap : sUiMapStore) + { + UiMapBounds& bounds = _uiMapBounds[uiMap->ID]; + memset(&bounds, 0, sizeof(bounds)); + if (UiMapEntry const* parentUiMap = sUiMapStore.LookupEntry(uiMap->ParentUiMapID)) + { + if (parentUiMap->Flags & 0x80) + continue; + + UiMapAssignmentEntry const* uiMapAssignment = nullptr; + UiMapAssignmentEntry const* parentUiMapAssignment = nullptr; + for (auto uiMapAssignmentForMap : Trinity::Containers::MapEqualRange(uiMapAssignmentByUiMap, uiMap->ID)) + { + if (uiMapAssignmentForMap.second->MapID >= 0 && + uiMapAssignmentForMap.second->Region[1].X - uiMapAssignmentForMap.second->Region[0].X > 0 && + uiMapAssignmentForMap.second->Region[1].Y - uiMapAssignmentForMap.second->Region[0].Y > 0) + { + uiMapAssignment = uiMapAssignmentForMap.second; + break; + } + } + + if (!uiMapAssignment) + continue; + + for (auto uiMapAssignmentForMap : Trinity::Containers::MapEqualRange(uiMapAssignmentByUiMap, uiMap->ParentUiMapID)) + { + if (uiMapAssignmentForMap.second->MapID == uiMapAssignment->MapID && + uiMapAssignmentForMap.second->Region[1].X - uiMapAssignmentForMap.second->Region[0].X > 0 && + uiMapAssignmentForMap.second->Region[1].Y - uiMapAssignmentForMap.second->Region[0].Y > 0) + { + parentUiMapAssignment = uiMapAssignmentForMap.second; + break; + } + } + + if (!parentUiMapAssignment) + continue; + + float parentXsize = parentUiMapAssignment->Region[1].X - parentUiMapAssignment->Region[0].X; + float parentYsize = parentUiMapAssignment->Region[1].Y - parentUiMapAssignment->Region[0].Y; + float bound0scale = (uiMapAssignment->Region[1].X - parentUiMapAssignment->Region[0].X) / parentXsize; + float bound0 = ((1.0f - bound0scale) * parentUiMapAssignment->UiMax.Y) + (bound0scale * parentUiMapAssignment->UiMin.Y); + float bound2scale = (uiMapAssignment->Region[0].X - parentUiMapAssignment->Region[0].X) / parentXsize; + float bound2 = ((1.0f - bound2scale) * parentUiMapAssignment->UiMax.Y) + (bound2scale * parentUiMapAssignment->UiMin.Y); + float bound1scale = (uiMapAssignment->Region[1].Y - parentUiMapAssignment->Region[0].Y) / parentYsize; + float bound1 = ((1.0f - bound1scale) * parentUiMapAssignment->UiMax.X) + (bound1scale * parentUiMapAssignment->UiMin.X); + float bound3scale = (uiMapAssignment->Region[0].Y - parentUiMapAssignment->Region[0].Y) / parentYsize; + float bound3 = ((1.0f - bound3scale) * parentUiMapAssignment->UiMax.X) + (bound3scale * parentUiMapAssignment->UiMin.X); + if ((bound3 - bound1) > 0.0f || (bound2 - bound0) > 0.0f) + { + bounds.Bounds[0] = bound0; + bounds.Bounds[1] = bound1; + bounds.Bounds[2] = bound2; + bounds.Bounds[3] = bound3; + bounds.IsUiAssignment = true; + } + } + + if (UiMapLinkEntry const* uiMapLink = Trinity::Containers::MapGetValuePtr(uiMapLinks, std::make_pair(uiMap->ParentUiMapID, uiMap->ID))) + { + bounds.IsUiAssignment = false; + bounds.IsUiLink = true; + bounds.Bounds[0] = uiMapLink->UiMin.Y; + bounds.Bounds[1] = uiMapLink->UiMin.X; + bounds.Bounds[2] = uiMapLink->UiMax.Y; + bounds.Bounds[3] = uiMapLink->UiMax.X; + } + } + + for (UiMapXMapArtEntry const* uiMapArt : sUiMapXMapArtStore) + if (uiMapArt->PhaseID) + _uiMapPhases.insert(uiMapArt->PhaseID); + + for (WMOAreaTableEntry const* entry : sWMOAreaTableStore) + _wmoAreaTableLookup[WMOAreaTableKey(entry->WmoID, entry->NameSetID, entry->WmoGroupID)] = entry; + // Initialize global taxinodes mask // include existed nodes that have at least single not spell base (scripted) path { @@ -1093,7 +1223,7 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) continue; // valid taxi network node - uint8 field = (uint8)((node->ID - 1) / 8); + uint32 field = uint32((node->ID - 1) / 8); uint32 submask = 1 << ((node->ID - 1) % 8); sTaxiNodesMask[field] |= submask; @@ -1102,32 +1232,15 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) if (node->Flags & TAXI_NODE_FLAG_ALLIANCE) sAllianceTaxiNodesMask[field] |= submask; - uint32 nodeMap; - DeterminaAlternateMapPosition(node->ContinentID, node->Pos.X, node->Pos.Y, node->Pos.Z, &nodeMap); - if (nodeMap < 2) + int32 uiMapId = -1; + if (!GetUiMapPosition(node->Pos.X, node->Pos.Y, node->Pos.Z, node->ContinentID, 0, 0, 0, UI_MAP_SYSTEM_ADVENTURE, false, &uiMapId)) + GetUiMapPosition(node->Pos.X, node->Pos.Y, node->Pos.Z, node->ContinentID, 0, 0, 0, UI_MAP_SYSTEM_TAXI, false, &uiMapId); + + if (uiMapId == 985 || uiMapId == 986) sOldContinentsNodesMask[field] |= submask; } } - for (ToyEntry const* toy : sToyStore) - _toys.insert(toy->ItemID); - - for (TransmogSetItemEntry const* transmogSetItem : sTransmogSetItemStore) - { - TransmogSetEntry const* set = sTransmogSetStore.LookupEntry(transmogSetItem->TransmogSetID); - if (!set) - continue; - - _transmogSetsByItemModifiedAppearance[transmogSetItem->ItemModifiedAppearanceID].push_back(set); - _transmogSetItemsByTransmogSet[transmogSetItem->TransmogSetID].push_back(transmogSetItem); - } - - for (WMOAreaTableEntry const* entry : sWMOAreaTableStore) - _wmoAreaTableLookup[WMOAreaTableKey(entry->WmoID, entry->NameSetID, entry->WmoGroupID)] = entry; - - for (WorldMapAreaEntry const* worldMapArea : sWorldMapAreaStore) - _worldMapAreaByAreaID[worldMapArea->AreaID] = worldMapArea; - // error checks if (bad_db2_files.size() == _stores.size()) { @@ -1145,13 +1258,13 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) } // Check loaded DB2 files proper version - if (!sAreaTableStore.LookupEntry(9531) || // last area added in 7.3.5 (25996) - !sCharTitlesStore.LookupEntry(522) || // last char title added in 7.3.5 (25996) - !sGemPropertiesStore.LookupEntry(3632) || // last gem property added in 7.3.5 (25996) - !sItemStore.LookupEntry(157831) || // last item added in 7.3.5 (25996) - !sItemExtendedCostStore.LookupEntry(6300) || // last item extended cost added in 7.3.5 (25996) - !sMapStore.LookupEntry(1903) || // last map added in 7.3.5 (25996) - !sSpellStore.LookupEntry(263166)) // last spell added in 7.3.5 (25996) + if (!sAreaTableStore.LookupEntry(10048) || // last area added in 8.0.1 (28153) + !sCharTitlesStore.LookupEntry(633) || // last char title added in 8.0.1 (28153) + !sGemPropertiesStore.LookupEntry(3745) || // last gem property added in 8.0.1 (28153) + !sItemStore.LookupEntry(164760) || // last item added in 8.0.1 (28153) + !sItemExtendedCostStore.LookupEntry(6448) || // last item extended cost added in 8.0.1 (28153) + !sMapStore.LookupEntry(2103) || // last map added in 8.0.1 (28153) + !sSpellNameStore.LookupEntry(281872)) // last spell added in 8.0.1 (28153) { TC_LOG_ERROR("misc", "You have _outdated_ DB2 files. Please extract correct versions from current using client."); exit(1); @@ -1193,9 +1306,9 @@ void DB2Manager::LoadHotfixData() uint32 tableHash = fields[1].GetUInt32(); int32 recordId = fields[2].GetInt32(); bool deleted = fields[3].GetBool(); - if (_stores.find(tableHash) == _stores.end()) + if (_stores.find(tableHash) == _stores.end() && _hotfixBlob.find(std::make_pair(tableHash, recordId)) == _hotfixBlob.end()) { - TC_LOG_ERROR("sql.sql", "Table `hotfix_data` references unknown DB2 store by hash 0x%X in hotfix id %d", tableHash, id); + TC_LOG_ERROR("sql.sql", "Table `hotfix_data` references unknown DB2 store by hash 0x%X and has no reference to `hotfix_blob` in hotfix id %d", tableHash, id); continue; } @@ -1210,7 +1323,40 @@ void DB2Manager::LoadHotfixData() if (DB2StorageBase* store = Trinity::Containers::MapGetValuePtr(_stores, itr->first.first)) store->EraseRecord(itr->first.second); - TC_LOG_INFO("server.loading", ">> Loaded %u hotfix records in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); + TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " hotfix records in %u ms", _hotfixData.size(), GetMSTimeDiffToNow(oldMSTime)); +} + +void DB2Manager::LoadHotfixBlob() +{ + uint32 oldMSTime = getMSTime(); + _hotfixBlob.clear(); + + QueryResult result = HotfixDatabase.Query("SELECT TableHash, RecordId, `Blob` FROM hotfix_blob ORDER BY TableHash"); + + if (!result) + { + TC_LOG_INFO("server.loading", ">> Loaded 0 hotfix blob entries."); + return; + } + + do + { + Field* fields = result->Fetch(); + + uint32 tableHash = fields[0].GetUInt32(); + auto storeItr = _stores.find(tableHash); + if (storeItr != _stores.end()) + { + TC_LOG_ERROR("server.loading", "Table hash 0x%X points to a loaded DB2 store %s, fill related table instead of hotfix_blob", + tableHash, storeItr->second->GetFileName().c_str()); + continue; + } + + int32 recordId = fields[1].GetInt32(); + _hotfixBlob[std::make_pair(tableHash, recordId)] = fields[2].GetBinary(); + } while (result->NextRow()); + + TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " hotfix blob records in %u ms", _hotfixBlob.size(), GetMSTimeDiffToNow(oldMSTime)); } std::map<uint64, int32> const& DB2Manager::GetHotfixData() const @@ -1218,6 +1364,11 @@ std::map<uint64, int32> const& DB2Manager::GetHotfixData() const return _hotfixData; } +std::vector<uint8> const* DB2Manager::GetHotfixBlobData(uint32 tableHash, int32 recordId) +{ + return Trinity::Containers::MapGetValuePtr(_hotfixBlob, std::make_pair(tableHash, recordId)); +} + void DB2Manager::InsertNewHotfix(uint32 tableHash, uint32 recordId) { _hotfixData[MAKE_PAIR64(tableHash, ++_maxHotfixId)] = recordId; @@ -1545,6 +1696,98 @@ EmotesTextSoundEntry const* DB2Manager::GetTextSoundEmoteFor(uint32 emote, uint8 return nullptr; } +template<float(ExpectedStatModEntry::*field)> +struct ExpectedStatModReducer +{ + float operator()(float mod, ExpectedStatModEntry const* expectedStatMod) + { + return mod * (expectedStatMod ? expectedStatMod->*field : 1.0f); + } +}; + +float DB2Manager::EvaluateExpectedStat(ExpectedStatType stat, uint32 level, int32 expansion, uint32 contentTuningId, Classes unitClass) const +{ + auto expectedStatItr = _expectedStatsByLevel.find(std::make_pair(level, expansion)); + if (expectedStatItr == _expectedStatsByLevel.end()) + expectedStatItr = _expectedStatsByLevel.find(std::make_pair(level, -2)); + + if (expectedStatItr == _expectedStatsByLevel.end()) + return 1.0f; + + std::array<ExpectedStatModEntry const*, 3> mods; + mods.fill(nullptr); + if (ContentTuningEntry const* contentTuning = sContentTuningStore.LookupEntry(contentTuningId)) + { + mods[0] = sExpectedStatModStore.LookupEntry(contentTuning->ExpectedStatModID); + mods[1] = sExpectedStatModStore.LookupEntry(contentTuning->DifficultyESMID); + } + + switch (unitClass) + { + case CLASS_WARRIOR: + mods[2] = sExpectedStatModStore.LookupEntry(4); + break; + case CLASS_PALADIN: + mods[2] = sExpectedStatModStore.LookupEntry(2); + break; + case CLASS_ROGUE: + mods[2] = sExpectedStatModStore.LookupEntry(3); + break; + case CLASS_MAGE: + mods[2] = sExpectedStatModStore.LookupEntry(1); + break; + default: + break; + } + + float value = 0.0f; + switch (stat) + { + case ExpectedStatType::CreatureHealth: + value = std::accumulate(mods.begin(), mods.end(), expectedStatItr->second->CreatureHealth, + ExpectedStatModReducer<&ExpectedStatModEntry::CreatureHealthMod>()); + break; + case ExpectedStatType::PlayerHealth: + value = std::accumulate(mods.begin(), mods.end(), expectedStatItr->second->PlayerHealth, + ExpectedStatModReducer<&ExpectedStatModEntry::PlayerHealthMod>()); + break; + case ExpectedStatType::CreatureAutoAttackDps: + value = std::accumulate(mods.begin(), mods.end(), expectedStatItr->second->CreatureAutoAttackDps, + ExpectedStatModReducer<&ExpectedStatModEntry::CreatureAutoAttackDPSMod>()); + break; + case ExpectedStatType::CreatureArmor: + value = std::accumulate(mods.begin(), mods.end(), expectedStatItr->second->CreatureArmor, + ExpectedStatModReducer<&ExpectedStatModEntry::CreatureArmorMod>()); + break; + case ExpectedStatType::PlayerMana: + value = std::accumulate(mods.begin(), mods.end(), expectedStatItr->second->PlayerMana, + ExpectedStatModReducer<&ExpectedStatModEntry::PlayerManaMod>()); + break; + case ExpectedStatType::PlayerPrimaryStat: + value = std::accumulate(mods.begin(), mods.end(), expectedStatItr->second->PlayerPrimaryStat, + ExpectedStatModReducer<&ExpectedStatModEntry::PlayerPrimaryStatMod>()); + break; + case ExpectedStatType::PlayerSecondaryStat: + value = std::accumulate(mods.begin(), mods.end(), expectedStatItr->second->PlayerSecondaryStat, + ExpectedStatModReducer<&ExpectedStatModEntry::PlayerSecondaryStatMod>()); + break; + case ExpectedStatType::ArmorConstant: + value = std::accumulate(mods.begin(), mods.end(), expectedStatItr->second->ArmorConstant, + ExpectedStatModReducer<&ExpectedStatModEntry::ArmorConstantMod>()); + break; + case ExpectedStatType::None: + break; + case ExpectedStatType::CreatureSpellDamage: + value = std::accumulate(mods.begin(), mods.end(), expectedStatItr->second->CreatureSpellDamage, + ExpectedStatModReducer<&ExpectedStatModEntry::CreatureSpellDamageMod>()); + break; + default: + break; + } + + return value; +} + std::vector<uint32> const* DB2Manager::GetFactionTeamList(uint32 faction) const { auto itr = _factionTeams.find(faction); @@ -1901,14 +2144,26 @@ ResponseCodes DB2Manager::ValidateName(std::wstring const& name, LocaleConstant return CHAR_NAME_SUCCESS; } -uint8 DB2Manager::GetMaxPrestige() const +int32 DB2Manager::GetNumTalentsAtLevel(uint32 level, Classes playerClass) { - uint8 max = 0; - for (PrestigeLevelInfoEntry const* prestigeLevelInfo : sPrestigeLevelInfoStore) - if (!prestigeLevelInfo->IsDisabled()) - max = std::max(prestigeLevelInfo->PrestigeLevel, max); + NumTalentsAtLevelEntry const* numTalentsAtLevel = sNumTalentsAtLevelStore.LookupEntry(level); + if (!numTalentsAtLevel) + numTalentsAtLevel = sNumTalentsAtLevelStore.LookupEntry(sNumTalentsAtLevelStore.GetNumRows() - 1); - return max; + if (numTalentsAtLevel) + { + switch (playerClass) + { + case CLASS_DEATH_KNIGHT: + return numTalentsAtLevel->NumTalentsDeathKnight; + case CLASS_DEMON_HUNTER: + return numTalentsAtLevel->NumTalentsDemonHunter; + default: + return numTalentsAtLevel->NumTalents; + } + } + + return 0; } PVPDifficultyEntry const* DB2Manager::GetBattlegroundBracketByLevel(uint32 mapid, uint32 level) @@ -1941,27 +2196,34 @@ PVPDifficultyEntry const* DB2Manager::GetBattlegroundBracketById(uint32 mapid, B return nullptr; } -uint32 DB2Manager::GetRewardPackIDForPvpRewardByHonorLevelAndPrestige(uint8 honorLevel, uint8 prestige) const +uint32 DB2Manager::GetRequiredLevelForPvpTalentSlot(uint8 slot, Classes class_) const { - auto itr = _pvpRewardPack.find({ prestige, honorLevel }); - if (itr == _pvpRewardPack.end()) - itr = _pvpRewardPack.find({ 0, honorLevel }); - - if (itr == _pvpRewardPack.end()) - return 0; + ASSERT(slot < MAX_PVP_TALENT_SLOTS); + if (_pvpTalentSlotUnlock[slot]) + { + switch (class_) + { + case CLASS_DEATH_KNIGHT: + return _pvpTalentSlotUnlock[slot]->DeathKnightLevelRequired; + case CLASS_DEMON_HUNTER: + return _pvpTalentSlotUnlock[slot]->DemonHunterLevelRequired; + default: + break; + } + return _pvpTalentSlotUnlock[slot]->LevelRequired; + } - return itr->second; + return 0; } -uint32 DB2Manager::GetRequiredHonorLevelForPvpTalent(PvpTalentEntry const* talentInfo) const +int32 DB2Manager::GetPvpTalentNumSlotsAtLevel(uint32 level, Classes class_) const { - ASSERT(talentInfo); - return _pvpTalentUnlock[talentInfo->TierID][talentInfo->ColumnIndex]; -} + int32 slots = 0; + for (uint8 slot = 0; slot < MAX_PVP_TALENT_SLOTS; ++slot) + if (level >= GetRequiredLevelForPvpTalentSlot(slot, class_)) + ++slots; -std::vector<PvpTalentEntry const*> const& DB2Manager::GetPvpTalentsByPosition(uint32 class_, uint32 tier, uint32 column) const -{ - return _pvpTalentsByPosition[class_][tier][column]; + return slots; } std::vector<QuestPackageItemEntry const*> const* DB2Manager::GetQuestPackageItems(uint32 questPackageID) const @@ -2059,6 +2321,11 @@ uint32 DB2Manager::GetRulesetItemUpgrade(uint32 itemId) const return 0; } +std::vector<SkillLineAbilityEntry const*> const* DB2Manager::GetSkillLineAbilitiesBySkill(uint32 skillId) const +{ + return Trinity::Containers::MapGetValuePtr(_skillLineAbilitiesBySkillupSkill, skillId); +} + SkillRaceClassInfoEntry const* DB2Manager::GetSkillRaceClassInfo(uint32 skill, uint8 race, uint8 class_) { auto bounds = _skillRaceClassInfoBySkill.equal_range(skill); @@ -2180,99 +2447,354 @@ std::vector<TransmogSetItemEntry const*> const* DB2Manager::GetTransmogSetItems( return Trinity::Containers::MapGetValuePtr(_transmogSetItemsByTransmogSet, transmogSetId); } -WMOAreaTableEntry const* DB2Manager::GetWMOAreaTable(int32 rootId, int32 adtId, int32 groupId) const +struct UiMapAssignmentStatus { - auto i = _wmoAreaTableLookup.find(WMOAreaTableKey(int16(rootId), int8(adtId), groupId)); - if (i != _wmoAreaTableLookup.end()) - return i->second; + UiMapAssignmentEntry const* UiMapAssignment = nullptr; + // distances if inside + struct + { + float DistanceToRegionCenterSquared = std::numeric_limits<float>::max(); + float DistanceToRegionBottom = std::numeric_limits<float>::max(); + } Inside; - return nullptr; -} + // distances if outside + struct + { + float DistanceToRegionEdgeSquared = std::numeric_limits<float>::max(); + float DistanceToRegionTop = std::numeric_limits<float>::max(); + float DistanceToRegionBottom = std::numeric_limits<float>::max(); + } Outside; + + int8 MapPriority = 3; + int8 AreaPriority = -1; + int8 WmoPriority = 3; -uint32 DB2Manager::GetVirtualMapForMapAndZone(uint32 mapId, uint32 zoneId) const + bool IsInside() const + { + return Outside.DistanceToRegionEdgeSquared < std::numeric_limits<float>::epsilon() && + std::abs(Outside.DistanceToRegionTop) < std::numeric_limits<float>::epsilon() && + std::abs(Outside.DistanceToRegionBottom) < std::numeric_limits<float>::epsilon(); + } +}; + +static bool operator<(UiMapAssignmentStatus const& left, UiMapAssignmentStatus const& right) { - if (mapId != 530 && mapId != 571 && mapId != 732) // speed for most cases - return mapId; + bool leftInside = left.IsInside(); + bool rightInside = right.IsInside(); + if (leftInside != rightInside) + return leftInside; + + if (left.UiMapAssignment && right.UiMapAssignment && + left.UiMapAssignment->UiMapID == right.UiMapAssignment->UiMapID && + left.UiMapAssignment->OrderIndex != right.UiMapAssignment->OrderIndex) + return left.UiMapAssignment->OrderIndex < right.UiMapAssignment->OrderIndex; + + if (left.WmoPriority != right.WmoPriority) + return left.WmoPriority < right.WmoPriority; + + if (left.AreaPriority != right.AreaPriority) + return left.AreaPriority < right.AreaPriority; + + if (left.MapPriority != right.MapPriority) + return left.MapPriority < right.MapPriority; + + if (leftInside) + { + if (left.Inside.DistanceToRegionBottom != right.Inside.DistanceToRegionBottom) + return left.Inside.DistanceToRegionBottom < right.Inside.DistanceToRegionBottom; - auto itr = _worldMapAreaByAreaID.find(zoneId); - if (itr != _worldMapAreaByAreaID.end()) - return itr->second->DisplayMapID >= 0 ? itr->second->DisplayMapID : itr->second->MapID; + float leftUiSizeX = left.UiMapAssignment ? (left.UiMapAssignment->UiMax.X - left.UiMapAssignment->UiMin.X) : 0.0f; + float rightUiSizeX = right.UiMapAssignment ? (right.UiMapAssignment->UiMax.X - right.UiMapAssignment->UiMin.X) : 0.0f; - return mapId; + if (leftUiSizeX > std::numeric_limits<float>::epsilon() && rightUiSizeX > std::numeric_limits<float>::epsilon()) + { + float leftScale = (left.UiMapAssignment->Region[1].X - left.UiMapAssignment->Region[0].X) / leftUiSizeX; + float rightScale = (right.UiMapAssignment->Region[1].X - right.UiMapAssignment->Region[0].X) / rightUiSizeX; + if (leftScale != rightScale) + return leftScale < rightScale; + } + + if (left.Inside.DistanceToRegionCenterSquared != right.Inside.DistanceToRegionCenterSquared) + return left.Inside.DistanceToRegionCenterSquared < right.Inside.DistanceToRegionCenterSquared; + } + else + { + if (left.Outside.DistanceToRegionTop != right.Outside.DistanceToRegionTop) + return left.Outside.DistanceToRegionTop < right.Outside.DistanceToRegionTop; + + if (left.Outside.DistanceToRegionBottom != right.Outside.DistanceToRegionBottom) + return left.Outside.DistanceToRegionBottom < right.Outside.DistanceToRegionBottom; + + if (left.Outside.DistanceToRegionEdgeSquared != right.Outside.DistanceToRegionEdgeSquared) + return left.Outside.DistanceToRegionEdgeSquared < right.Outside.DistanceToRegionEdgeSquared; + } + + return true; } -void DB2Manager::Zone2MapCoordinates(uint32 areaId, float& x, float& y) const +static bool CheckUiMapAssignmentStatus(float x, float y, float z, int32 mapId, int32 areaId, int32 wmoDoodadPlacementId, int32 wmoGroupId, + UiMapAssignmentEntry const* uiMapAssignment, UiMapAssignmentStatus* status) { - auto itr = _worldMapAreaByAreaID.find(areaId); - if (itr == _worldMapAreaByAreaID.end()) - return; + status->UiMapAssignment = uiMapAssignment; + // x,y not in region + if (x < uiMapAssignment->Region[0].X || x > uiMapAssignment->Region[1].X || y < uiMapAssignment->Region[0].Y || y > uiMapAssignment->Region[1].Y) + { + float xDiff, yDiff; + if (x >= uiMapAssignment->Region[0].X) + { + xDiff = 0.0f; + if (x > uiMapAssignment->Region[1].X) + xDiff = x - uiMapAssignment->Region[0].X; + } + else + xDiff = uiMapAssignment->Region[0].X - x; - std::swap(x, y); // at client map coords swapped - x = x*((itr->second->LocBottom - itr->second->LocTop) / 100) + itr->second->LocTop; - y = y*((itr->second->LocRight - itr->second->LocLeft) / 100) + itr->second->LocLeft; // client y coord from top to down + if (y >= uiMapAssignment->Region[0].Y) + { + yDiff = 0.0f; + if (y > uiMapAssignment->Region[1].Y) + yDiff = y - uiMapAssignment->Region[0].Y; + } + else + yDiff = uiMapAssignment->Region[0].Y - y; + + status->Outside.DistanceToRegionEdgeSquared = xDiff * xDiff + yDiff * yDiff; + } + else + { + status->Inside.DistanceToRegionCenterSquared = + (x - (uiMapAssignment->Region[0].X + uiMapAssignment->Region[1].X) * 0.5f) * (x - (uiMapAssignment->Region[0].X + uiMapAssignment->Region[1].X) * 0.5f) + + (y - (uiMapAssignment->Region[0].Y + uiMapAssignment->Region[1].Y) * 0.5f) * (y - (uiMapAssignment->Region[0].Y + uiMapAssignment->Region[1].Y) * 0.5f); + status->Outside.DistanceToRegionEdgeSquared = 0.0f; + } + + // z not in region + if (z < uiMapAssignment->Region[0].Z || z > uiMapAssignment->Region[1].Z) + { + if (z < uiMapAssignment->Region[1].Z) + { + if (z < uiMapAssignment->Region[0].Z) + status->Outside.DistanceToRegionBottom = std::min(uiMapAssignment->Region[0].Z - z, 10000.0f); + } + else + status->Outside.DistanceToRegionTop = std::min(z - uiMapAssignment->Region[1].Z, 10000.0f); + } + else + { + status->Outside.DistanceToRegionTop = 0.0f; + status->Outside.DistanceToRegionBottom = 0.0f; + status->Inside.DistanceToRegionBottom = std::min(uiMapAssignment->Region[0].Z - z, 10000.0f); + } + + if (areaId && uiMapAssignment->AreaID) + { + int8 areaPriority = 0; + if (areaId) + { + while (areaId != uiMapAssignment->AreaID) + { + if (AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(areaId)) + { + areaId = areaEntry->ParentAreaID; + ++areaPriority; + } + else + return false; + } + } + else + return false; + + status->AreaPriority = areaPriority; + } + + if (mapId >= 0 && uiMapAssignment->MapID >= 0) + { + if (mapId != uiMapAssignment->MapID) + { + if (MapEntry const* mapEntry = sMapStore.LookupEntry(mapId)) + { + if (mapEntry->ParentMapID == uiMapAssignment->MapID) + status->MapPriority = 1; + else if (mapEntry->CosmeticParentMapID == uiMapAssignment->MapID) + status->MapPriority = 2; + else + return false; + } + else + return false; + } + else + status->MapPriority = 0; + } + + if (wmoGroupId || wmoDoodadPlacementId) + { + if (uiMapAssignment->WmoGroupID || uiMapAssignment->WmoDoodadPlacementID) + { + bool hasDoodadPlacement = false; + if (wmoDoodadPlacementId && uiMapAssignment->WmoDoodadPlacementID) + { + if (wmoDoodadPlacementId != uiMapAssignment->WmoDoodadPlacementID) + return false; + + hasDoodadPlacement = true; + } + + if (wmoGroupId && uiMapAssignment->WmoGroupID) + { + if (wmoGroupId != uiMapAssignment->WmoGroupID) + return false; + + if (hasDoodadPlacement) + status->WmoPriority = 0; + else + status->WmoPriority = 2; + } + else if (hasDoodadPlacement) + status->WmoPriority = 1; + } + } + + return true; } -void DB2Manager::Map2ZoneCoordinates(uint32 areaId, float& x, float& y) const +static UiMapAssignmentEntry const* FindNearestMapAssignment(float x, float y, float z, int32 mapId, int32 areaId, int32 wmoDoodadPlacementId, int32 wmoGroupId, UiMapSystem system) { - auto itr = _worldMapAreaByAreaID.find(areaId); - if (itr == _worldMapAreaByAreaID.end()) - return; + UiMapAssignmentStatus nearestMapAssignment; + auto iterateUiMapAssignments = [&](std::unordered_multimap<int32, UiMapAssignmentEntry const*> const& assignments, int32 id) + { + for (auto assignment : Trinity::Containers::MapEqualRange(assignments, id)) + { + UiMapAssignmentStatus status; + if (CheckUiMapAssignmentStatus(x, y, z, mapId, areaId, wmoDoodadPlacementId, wmoGroupId, assignment.second, &status)) + if (status < nearestMapAssignment) + nearestMapAssignment = status; + } + }; + + iterateUiMapAssignments(_uiMapAssignmentByWmoGroup[system], wmoGroupId); + iterateUiMapAssignments(_uiMapAssignmentByWmoDoodadPlacement[system], wmoDoodadPlacementId); + + AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(areaId); + while (areaEntry) + { + iterateUiMapAssignments(_uiMapAssignmentByArea[system], areaEntry->ID); + areaEntry = sAreaTableStore.LookupEntry(areaEntry->ParentAreaID); + } - x = (x - itr->second->LocTop) / ((itr->second->LocBottom - itr->second->LocTop) / 100); - y = (y - itr->second->LocLeft) / ((itr->second->LocRight - itr->second->LocLeft) / 100); // client y coord from top to down - std::swap(x, y); // client have map coords swapped + if (MapEntry const* mapEntry = sMapStore.LookupEntry(mapId)) + { + iterateUiMapAssignments(_uiMapAssignmentByMap[system], mapEntry->ID); + if (mapEntry->ParentMapID >= 0) + iterateUiMapAssignments(_uiMapAssignmentByMap[system], mapEntry->ParentMapID); + if (mapEntry->CosmeticParentMapID >= 0) + iterateUiMapAssignments(_uiMapAssignmentByMap[system], mapEntry->CosmeticParentMapID); + } + + return nearestMapAssignment.UiMapAssignment; } -void DB2Manager::DeterminaAlternateMapPosition(uint32 mapId, float x, float y, float z, uint32* newMapId /*= nullptr*/, DBCPosition2D* newPos /*= nullptr*/) +static DBCPosition2D CalculateGlobalUiMapPosition(int32 uiMapID, DBCPosition2D uiPosition) { - ASSERT(newMapId || newPos); - WorldMapTransformsEntry const* transformation = nullptr; - for (WorldMapTransformsEntry const* transform : sWorldMapTransformsStore) + UiMapEntry const* uiMap = sUiMapStore.LookupEntry(uiMapID); + while (uiMap) { - if (transform->MapID != mapId) - continue; - if (transform->AreaID) - continue; - if (transform->Flags & WORLD_MAP_TRANSFORMS_FLAG_DUNGEON) - continue; - if (transform->RegionMin.X > x || transform->RegionMax.X < x) - continue; - if (transform->RegionMin.Y > y || transform->RegionMax.Y < y) - continue; - if (transform->RegionMin.Z > z || transform->RegionMax.Z < z) - continue; + if (uiMap->Type <= UI_MAP_TYPE_CONTINENT) + break; + + UiMapBounds const* bounds = Trinity::Containers::MapGetValuePtr(_uiMapBounds, uiMap->ID); + if (!bounds || !bounds->IsUiAssignment) + break; - if (!transformation || transformation->Priority < transform->Priority) - transformation = transform; + uiPosition.X = ((1.0 - uiPosition.X) * bounds->Bounds[1]) + (bounds->Bounds[3] * uiPosition.X); + uiPosition.Y = ((1.0 - uiPosition.Y) * bounds->Bounds[0]) + (bounds->Bounds[2] * uiPosition.Y); + + uiMap = sUiMapStore.LookupEntry(uiMap->ParentUiMapID); } - if (!transformation) - { - if (newMapId) - *newMapId = mapId; + return uiPosition; +} - if (newPos) - { - newPos->X = x; - newPos->Y = y; - } - return; +bool DB2Manager::GetUiMapPosition(float x, float y, float z, int32 mapId, int32 areaId, int32 wmoDoodadPlacementId, int32 wmoGroupId, UiMapSystem system, bool local, + int32* uiMapId /*= nullptr*/, DBCPosition2D* newPos /*= nullptr*/) +{ + if (uiMapId) + *uiMapId = -1; + + if (newPos) + { + newPos->X = 0.0f; + newPos->Y = 0.0f; } - if (newMapId) - *newMapId = transformation->NewMapID; + UiMapAssignmentEntry const* uiMapAssignment = FindNearestMapAssignment(x, y, z, mapId, areaId, wmoDoodadPlacementId, wmoGroupId, system); + if (!uiMapAssignment) + return false; + + if (uiMapId) + *uiMapId = uiMapAssignment->UiMapID; + + DBCPosition2D relativePosition{ 0.5f, 0.5f }; + DBCPosition2D regionSize{ uiMapAssignment->Region[1].X - uiMapAssignment->Region[0].X, uiMapAssignment->Region[1].Y - uiMapAssignment->Region[0].Y }; + if (regionSize.X > 0.0f) + relativePosition.X = (x - uiMapAssignment->Region[0].X) / regionSize.X; + if (regionSize.Y > 0.0f) + relativePosition.Y = (y - uiMapAssignment->Region[0].Y) / regionSize.Y; + + DBCPosition2D uiPosition + { + // x any y are swapped + ((1.0f - (1.0f - relativePosition.Y)) * uiMapAssignment->UiMin.X) + ((1.0f - relativePosition.Y) * uiMapAssignment->UiMax.X), + ((1.0f - (1.0f - relativePosition.X)) * uiMapAssignment->UiMin.Y) + ((1.0f - relativePosition.X) * uiMapAssignment->UiMax.Y) + }; + + if (!local) + uiPosition = CalculateGlobalUiMapPosition(uiMapAssignment->UiMapID, uiPosition); + + if (newPos) + *newPos = uiPosition; - if (!newPos) + return true; +} + +void DB2Manager::Zone2MapCoordinates(uint32 areaId, float& x, float& y) const +{ + AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(areaId); + if (!areaEntry) return; - if (std::abs(transformation->RegionScale - 1.0f) > 0.001f) + for (auto assignment : Trinity::Containers::MapEqualRange(_uiMapAssignmentByArea[UI_MAP_SYSTEM_WORLD], areaId)) { - x = (x - transformation->RegionMin.X) * transformation->RegionScale + transformation->RegionMin.X; - y = (y - transformation->RegionMin.Y) * transformation->RegionScale + transformation->RegionMin.Y; + if (assignment.second->MapID >= 0 && assignment.second->MapID != areaEntry->ContinentID) + continue; + + float tmpY = 1.0 - ((y - assignment.second->UiMin.Y) / (assignment.second->UiMax.Y - assignment.second->UiMin.Y)); + float tmpX = 1.0 - ((x - assignment.second->UiMin.X) / (assignment.second->UiMax.X - assignment.second->UiMin.X)); + y = ((1.0 - tmpY) * assignment.second->Region[0].X) + (tmpY * assignment.second->Region[1].X); + x = ((1.0 - tmpX) * assignment.second->Region[0].Y) + (tmpX * assignment.second->Region[1].Y); + break; } +} + +void DB2Manager::Map2ZoneCoordinates(uint32 areaId, float& x, float& y) const +{ + DBCPosition2D zoneCoords; + if (!GetUiMapPosition(x, y, 0.0f, -1, areaId, 0, 0, UI_MAP_SYSTEM_WORLD, true, nullptr, &zoneCoords)) + return; - newPos->X = x + transformation->RegionOffset.X; - newPos->Y = y + transformation->RegionOffset.Y; + x = zoneCoords.Y * 100.0f; + y = zoneCoords.X * 100.0f; +} + +bool DB2Manager::IsUiMapPhase(uint32 phaseId) const +{ + return _uiMapPhases.find(phaseId) != _uiMapPhases.end(); +} + +WMOAreaTableEntry const* DB2Manager::GetWMOAreaTable(int32 rootId, int32 adtId, int32 groupId) const +{ + return Trinity::Containers::MapGetValuePtr(_wmoAreaTableLookup, WMOAreaTableKey(int16(rootId), int8(adtId), groupId)); } bool ChrClassesXPowerTypesEntryComparator::Compare(ChrClassesXPowerTypesEntry const* left, ChrClassesXPowerTypesEntry const* right) diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h index d5f0af253a0..3e61c1513ad 100644 --- a/src/server/game/DataStores/DB2Stores.h +++ b/src/server/game/DataStores/DB2Stores.h @@ -35,6 +35,7 @@ class DB2HotfixGeneratorBase; TC_GAME_API extern DB2Storage<AchievementEntry> sAchievementStore; +TC_GAME_API extern DB2Storage<AnimationDataEntry> sAnimationDataStore; TC_GAME_API extern DB2Storage<AnimKitEntry> sAnimKitStore; TC_GAME_API extern DB2Storage<AreaTableEntry> sAreaTableStore; TC_GAME_API extern DB2Storage<AreaTriggerEntry> sAreaTriggerStore; @@ -65,6 +66,7 @@ TC_GAME_API extern DB2Storage<ChrRacesEntry> sChrRacesSto TC_GAME_API extern DB2Storage<ChrSpecializationEntry> sChrSpecializationStore; TC_GAME_API extern DB2Storage<CinematicCameraEntry> sCinematicCameraStore; TC_GAME_API extern DB2Storage<CinematicSequencesEntry> sCinematicSequencesStore; +TC_GAME_API extern DB2Storage<ContentTuningEntry> sContentTuningStore; TC_GAME_API extern DB2Storage<ConversationLineEntry> sConversationLineStore; TC_GAME_API extern DB2Storage<CreatureDisplayInfoEntry> sCreatureDisplayInfoStore; TC_GAME_API extern DB2Storage<CreatureDisplayInfoExtraEntry> sCreatureDisplayInfoExtraStore; @@ -148,14 +150,14 @@ TC_GAME_API extern DB2Storage<PhaseEntry> sPhaseStore; TC_GAME_API extern DB2Storage<PlayerConditionEntry> sPlayerConditionStore; TC_GAME_API extern DB2Storage<PowerDisplayEntry> sPowerDisplayStore; TC_GAME_API extern DB2Storage<PvpTalentEntry> sPvpTalentStore; -TC_GAME_API extern DB2Storage<PvpTalentUnlockEntry> sPvpTalentUnlockStore; +TC_GAME_API extern DB2Storage<PvpTalentCategoryEntry> sPvpTalentCategoryStore; +TC_GAME_API extern DB2Storage<PvpTalentSlotUnlockEntry> sPvpTalentSlotUnlockStore; TC_GAME_API extern DB2Storage<QuestFactionRewardEntry> sQuestFactionRewardStore; TC_GAME_API extern DB2Storage<QuestMoneyRewardEntry> sQuestMoneyRewardStore; TC_GAME_API extern DB2Storage<QuestSortEntry> sQuestSortStore; TC_GAME_API extern DB2Storage<QuestXPEntry> sQuestXPStore; TC_GAME_API extern DB2Storage<RandPropPointsEntry> sRandPropPointsStore; TC_GAME_API extern DB2Storage<RewardPackEntry> sRewardPackStore; -TC_GAME_API extern DB2Storage<SandboxScalingEntry> sSandboxScalingStore; TC_GAME_API extern DB2Storage<ScalingStatDistributionEntry> sScalingStatDistributionStore; TC_GAME_API extern DB2Storage<ScenarioEntry> sScenarioStore; TC_GAME_API extern DB2Storage<ScenarioStepEntry> sScenarioStepStore; @@ -164,7 +166,6 @@ TC_GAME_API extern DB2Storage<SceneScriptPackageEntry> sSceneScript TC_GAME_API extern DB2Storage<SkillLineAbilityEntry> sSkillLineAbilityStore; TC_GAME_API extern DB2Storage<SkillRaceClassInfoEntry> sSkillRaceClassInfoStore; TC_GAME_API extern DB2Storage<SoundKitEntry> sSoundKitStore; -TC_GAME_API extern DB2Storage<SpellEntry> sSpellStore; TC_GAME_API extern DB2Storage<SpellAuraOptionsEntry> sSpellAuraOptionsStore; TC_GAME_API extern DB2Storage<SpellAuraRestrictionsEntry> sSpellAuraRestrictionsStore; TC_GAME_API extern DB2Storage<SpellCastTimesEntry> sSpellCastTimesStore; @@ -183,6 +184,7 @@ TC_GAME_API extern DB2Storage<SpellItemEnchantmentConditionEntry> sSpellItemEn TC_GAME_API extern DB2Storage<SpellLearnSpellEntry> sSpellLearnSpellStore; TC_GAME_API extern DB2Storage<SpellLevelsEntry> sSpellLevelsStore; TC_GAME_API extern DB2Storage<SpellMiscEntry> sSpellMiscStore; +TC_GAME_API extern DB2Storage<SpellNameEntry> sSpellNameStore; TC_GAME_API extern DB2Storage<SpellPowerEntry> sSpellPowerStore; TC_GAME_API extern DB2Storage<SpellProcsPerMinuteEntry> sSpellProcsPerMinuteStore; TC_GAME_API extern DB2Storage<SpellRadiusEntry> sSpellRadiusStore; @@ -208,7 +210,6 @@ TC_GAME_API extern DB2Storage<UnitPowerBarEntry> sUnitPowerBa TC_GAME_API extern DB2Storage<VehicleEntry> sVehicleStore; TC_GAME_API extern DB2Storage<VehicleSeatEntry> sVehicleSeatStore; TC_GAME_API extern DB2Storage<WorldEffectEntry> sWorldEffectStore; -TC_GAME_API extern DB2Storage<WorldMapAreaEntry> sWorldMapAreaStore; TC_GAME_API extern DB2Storage<WorldMapOverlayEntry> sWorldMapOverlayStore; TC_GAME_API extern DB2Storage<WorldSafeLocsEntry> sWorldSafeLocsStore; @@ -257,7 +258,9 @@ public: DB2StorageBase const* GetStorage(uint32 type) const; void LoadHotfixData(); + void LoadHotfixBlob(); std::map<uint64, int32> const& GetHotfixData() const; + std::vector<uint8> const* GetHotfixBlobData(uint32 tableHash, int32 recordId); std::vector<uint32> GetAreasForGroup(uint32 areaGroupId) const; static bool IsInArea(uint32 objectAreaId, uint32 areaId); @@ -277,6 +280,7 @@ public: static char const* GetCreatureFamilyPetName(uint32 petfamily, uint32 locale); float GetCurveValueAt(uint32 curveId, float x) const; EmotesTextSoundEntry const* GetTextSoundEmoteFor(uint32 emote, uint8 race, uint8 gender, uint8 class_) const; + float EvaluateExpectedStat(ExpectedStatType stat, uint32 level, int32 expansion, uint32 contentTuningId, Classes unitClass) const; std::vector<uint32> const* GetFactionTeamList(uint32 faction) const; HeirloomEntry const* GetHeirloomByItemId(uint32 itemId) const; std::vector<uint32> const* GetGlyphBindableSpells(uint32 glyphPropertiesId) const; @@ -300,28 +304,28 @@ public: MapDifficultyEntry const* GetDefaultMapDifficulty(uint32 mapId, Difficulty* difficulty = nullptr) const; MapDifficultyEntry const* GetMapDifficultyData(uint32 mapId, Difficulty difficulty) const; MapDifficultyEntry const* GetDownscaledMapDifficultyData(uint32 mapId, Difficulty &difficulty) const; - std::string GetNameGenEntry(uint8 race, uint8 gender) const; MountEntry const* GetMount(uint32 spellId) const; MountEntry const* GetMountById(uint32 id) const; MountTypeXCapabilitySet const* GetMountCapabilities(uint32 mountType) const; MountXDisplayContainer const* GetMountDisplays(uint32 mountId) const; + std::string GetNameGenEntry(uint8 race, uint8 gender) const; ResponseCodes ValidateName(std::wstring const& name, LocaleConstant locale) const; + static int32 GetNumTalentsAtLevel(uint32 level, Classes playerClass); 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; - uint8 GetMaxPrestige() const; static PVPDifficultyEntry const* GetBattlegroundBracketByLevel(uint32 mapid, uint32 level); static PVPDifficultyEntry const* GetBattlegroundBracketById(uint32 mapid, BattlegroundBracketId id); - uint32 GetRewardPackIDForPvpRewardByHonorLevelAndPrestige(uint8 honorLevel, uint8 prestige) const; - uint32 GetRequiredHonorLevelForPvpTalent(PvpTalentEntry const* talentInfo) const; - std::vector<PvpTalentEntry const*> const& GetPvpTalentsByPosition(uint32 class_, uint32 tier, uint32 column) const; + uint32 GetRequiredLevelForPvpTalentSlot(uint8 slot, Classes class_) const; + int32 GetPvpTalentNumSlotsAtLevel(uint32 level, Classes class_) const; std::vector<QuestPackageItemEntry const*> const* GetQuestPackageItems(uint32 questPackageID) const; std::vector<QuestPackageItemEntry const*> const* GetQuestPackageItemsFallback(uint32 questPackageID) const; uint32 GetQuestUniqueBitFlag(uint32 questId); std::vector<RewardPackXCurrencyTypeEntry const*> const* GetRewardPackCurrencyTypesByRewardID(uint32 rewardPackID) const; std::vector<RewardPackXItemEntry const*> const* GetRewardPackItemsByRewardID(uint32 rewardPackID) const; uint32 GetRulesetItemUpgrade(uint32 itemId) const; + std::vector<SkillLineAbilityEntry const*> const* GetSkillLineAbilitiesBySkill(uint32 skillId) const; SkillRaceClassInfoEntry const* GetSkillRaceClassInfo(uint32 skill, uint8 race, uint8 class_); std::vector<SpecializationSpellsEntry const*> const* GetSpecializationSpells(uint32 specId) const; static bool IsValidSpellFamiliyName(SpellFamilyNames family); @@ -332,11 +336,12 @@ public: bool IsToyItem(uint32 toy) const; std::vector<TransmogSetEntry const*> const* GetTransmogSetsForItemModifiedAppearance(uint32 itemModifiedAppearanceId) const; std::vector<TransmogSetItemEntry const*> const* GetTransmogSetItems(uint32 transmogSetId) const; - WMOAreaTableEntry const* GetWMOAreaTable(int32 rootId, int32 adtId, int32 groupId) const; - uint32 GetVirtualMapForMapAndZone(uint32 mapId, uint32 zoneId) const; + static bool GetUiMapPosition(float x, float y, float z, int32 mapId, int32 areaId, int32 wmoDoodadPlacementId, int32 wmoGroupId, UiMapSystem system, bool local, + int32* uiMapId = nullptr, DBCPosition2D* newPos = nullptr); void Zone2MapCoordinates(uint32 areaId, float& x, float& y) const; void Map2ZoneCoordinates(uint32 areaId, float& x, float& y) const; - static void DeterminaAlternateMapPosition(uint32 mapId, float x, float y, float z, uint32* newMapId = nullptr, DBCPosition2D* newPos = nullptr); + bool IsUiMapPhase(uint32 phaseId) const; + WMOAreaTableEntry const* GetWMOAreaTable(int32 rootId, int32 adtId, int32 groupId) const; private: friend class DB2HotfixGeneratorBase; diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h index e5f46417a81..0c38d0fb213 100644 --- a/src/server/game/DataStores/DB2Structure.h +++ b/src/server/game/DataStores/DB2Structure.h @@ -28,21 +28,30 @@ struct LocalizedString; struct AchievementEntry { - LocalizedString* Title; LocalizedString* Description; + LocalizedString* Title; LocalizedString* Reward; - int32 Flags; + uint32 ID; int16 InstanceID; // -1 = none + int8 Faction; // -1 = all, 0 = horde, 1 = alliance int16 Supercedes; // its Achievement parent (can`t start while parent uncomplete, use its Criteria if don`t have own, use its progress on begin) int16 Category; - int16 UiOrder; - int16 SharesCriteria; // referenced achievement (counting of all completed criterias) - int8 Faction; // -1 = all, 0 = horde, 1 = alliance - int8 Points; int8 MinimumCriteria; // need this count of completed criterias (own or referenced achievement criterias) - uint32 ID; + int8 Points; + int32 Flags; + int16 UiOrder; int32 IconFileID; uint32 CriteriaTree; + int16 SharesCriteria; // referenced achievement (counting of all completed criterias) +}; + +struct AnimationDataEntry +{ + uint32 ID; + uint16 Fallback; + uint8 BehaviorTier; + int32 BehaviorID; + int32 Flags[2]; }; struct AnimKitEntry @@ -65,27 +74,27 @@ struct AreaTableEntry uint32 ID; char const* ZoneName; LocalizedString* AreaName; - int32 Flags[2]; - float AmbientMultiplier; uint16 ContinentID; uint16 ParentAreaID; int16 AreaBit; + uint8 SoundProviderPref; + uint8 SoundProviderPrefUnderwater; uint16 AmbienceID; + uint16 UwAmbience; uint16 ZoneMusic; - uint16 IntroSound; - uint16 LiquidTypeID[4]; uint16 UwZoneMusic; - uint16 UwAmbience; - int16 PvpCombatWorldStateID; - uint8 SoundProviderPref; - uint8 SoundProviderPrefUnderwater; int8 ExplorationLevel; + uint16 IntroSound; + uint32 UwIntroSound; uint8 FactionGroupMask; + float AmbientMultiplier; uint8 MountFlags; + int16 PvpCombatWorldStateID; uint8 WildBattlePetLevelMin; uint8 WildBattlePetLevelMax; uint8 WindSettingsID; - uint32 UwIntroSound; + int32 Flags[2]; + uint16 LiquidTypeID[4]; // helpers bool IsSanctuary() const @@ -99,20 +108,20 @@ struct AreaTableEntry struct AreaTriggerEntry { DBCPosition3D Pos; + uint32 ID; + int16 ContinentID; + int8 PhaseUseFlags; + int16 PhaseID; + int16 PhaseGroupID; float Radius; float BoxLength; float BoxWidth; float BoxHeight; float BoxYaw; - int16 ContinentID; - int16 PhaseID; - int16 PhaseGroupID; + int8 ShapeType; int16 ShapeID; int16 AreaTriggerActionSetID; - int8 PhaseUseFlags; - int8 ShapeType; int8 Flags; - uint32 ID; }; struct ArmorLocationEntry @@ -127,15 +136,15 @@ struct ArmorLocationEntry struct ArtifactEntry { - uint32 ID; LocalizedString* Name; + uint32 ID; + uint16 UiTextureKitID; + int32 UiNameColor; int32 UiBarOverlayColor; int32 UiBarBackgroundColor; - int32 UiNameColor; - uint16 UiTextureKitID; uint16 ChrSpecializationID; - uint8 ArtifactCategoryID; uint8 Flags; + uint8 ArtifactCategoryID; uint32 UiModelSceneID; uint32 SpellVisualKitID; }; @@ -143,32 +152,32 @@ struct ArtifactEntry struct ArtifactAppearanceEntry { LocalizedString* Name; - int32 UiSwatchColor; - float UiModelSaturation; - float UiModelOpacity; - uint32 OverrideShapeshiftDisplayID; + uint32 ID; uint16 ArtifactAppearanceSetID; - uint16 UiCameraID; uint8 DisplayIndex; + uint32 UnlockPlayerConditionID; uint8 ItemAppearanceModifierID; - uint8 Flags; + int32 UiSwatchColor; + float UiModelSaturation; + float UiModelOpacity; uint8 OverrideShapeshiftFormID; - uint32 ID; - uint32 UnlockPlayerConditionID; + uint32 OverrideShapeshiftDisplayID; uint32 UiItemAppearanceID; uint32 UiAltItemAppearanceID; + uint8 Flags; + uint16 UiCameraID; }; struct ArtifactAppearanceSetEntry { LocalizedString* Name; LocalizedString* Description; + uint32 ID; + uint8 DisplayIndex; uint16 UiCameraID; uint16 AltHandUICameraID; - uint8 DisplayIndex; int8 ForgeAttachmentOverride; uint8 Flags; - uint32 ID; uint8 ArtifactID; }; @@ -181,13 +190,13 @@ struct ArtifactCategoryEntry struct ArtifactPowerEntry { - DBCPosition2D Pos; + DBCPosition2D DisplayPos; + uint32 ID; uint8 ArtifactID; - uint8 Flags; uint8 MaxPurchasableRank; - uint8 Tier; - uint32 ID; int32 Label; + uint8 Flags; + uint8 Tier; }; struct ArtifactPowerLinkEntry @@ -206,10 +215,10 @@ struct ArtifactPowerPickerEntry struct ArtifactPowerRankEntry { uint32 ID; + uint8 RankIndex; int32 SpellID; - float AuraPointsOverride; uint16 ItemBonusListID; - uint8 RankIndex; + float AuraPointsOverride; uint16 ArtifactPowerID; }; @@ -232,9 +241,9 @@ struct ArtifactTierEntry struct ArtifactUnlockEntry { uint32 ID; - uint16 ItemBonusListID; - uint8 PowerRank; uint32 PowerID; + uint8 PowerRank; + uint16 ItemBonusListID; uint32 PlayerConditionID; uint8 ArtifactID; }; @@ -266,12 +275,12 @@ struct BarberShopStyleEntry { LocalizedString* DisplayName; LocalizedString* Description; - float CostModifier; + uint32 ID; uint8 Type; // value 0 -> hair, value 2 -> facialhair + float CostModifier; uint8 Race; uint8 Sex; uint8 Data; // real ID to hair/facial hair - uint32 ID; }; struct BattlePetBreedQualityEntry @@ -284,22 +293,22 @@ struct BattlePetBreedQualityEntry struct BattlePetBreedStateEntry { uint32 ID; - uint16 Value; uint8 BattlePetStateID; + uint16 Value; uint8 BattlePetBreedID; }; struct BattlePetSpeciesEntry { - LocalizedString* SourceText; LocalizedString* Description; + LocalizedString* SourceText; + uint32 ID; int32 CreatureID; - int32 IconFileDataID; int32 SummonSpellID; - uint16 Flags; + int32 IconFileDataID; uint8 PetTypeEnum; + uint16 Flags; int8 SourceTypeEnum; - uint32 ID; int32 CardUIModelSceneID; int32 LoadoutUIModelSceneID; }; @@ -307,8 +316,8 @@ struct BattlePetSpeciesEntry struct BattlePetSpeciesStateEntry { uint32 ID; - int32 Value; uint8 BattlePetStateID; + int32 Value; uint16 BattlePetSpeciesID; }; @@ -319,45 +328,46 @@ struct BattlemasterListEntry LocalizedString* GameType; LocalizedString* ShortDescription; LocalizedString* LongDescription; - int32 IconFileDataID; - int16 MapID[16]; - int16 HolidayWorldState; - int16 RequiredPlayerConditionID; int8 InstanceType; - int8 GroupsAllowed; - int8 MaxGroupSize; int8 MinLevel; int8 MaxLevel; int8 RatedPlayers; int8 MinPlayers; int8 MaxPlayers; + int8 GroupsAllowed; + int8 MaxGroupSize; + int16 HolidayWorldState; int8 Flags; + int32 IconFileDataID; + int16 RequiredPlayerConditionID; + int16 MapID[16]; }; #define MAX_BROADCAST_TEXT_EMOTES 3 struct BroadcastTextEntry { - uint32 ID; LocalizedString* Text; LocalizedString* Text1; - uint16 EmoteID[MAX_BROADCAST_TEXT_EMOTES]; - uint16 EmoteDelay[MAX_BROADCAST_TEXT_EMOTES]; - uint16 EmotesID; + uint32 ID; uint8 LanguageID; - uint8 Flags; int32 ConditionID; + uint16 EmotesID; + uint8 Flags; + uint32 ChatBubbleDurationMs; uint32 SoundEntriesID[2]; + uint16 EmoteID[MAX_BROADCAST_TEXT_EMOTES]; + uint16 EmoteDelay[MAX_BROADCAST_TEXT_EMOTES]; }; struct Cfg_RegionsEntry { uint32 ID; char const* Tag; - uint32 Raidorigin; // Date of first raid reset, all other resets are calculated as this date plus interval - uint32 ChallengeOrigin; uint16 RegionID; + uint32 Raidorigin; // Date of first raid reset, all other resets are calculated as this date plus interval uint8 RegionGroupMask; + uint32 ChallengeOrigin; }; struct CharacterFacialHairStylesEntry @@ -372,21 +382,21 @@ struct CharacterFacialHairStylesEntry struct CharBaseSectionEntry { uint32 ID; + uint8 LayoutResType; uint8 VariationEnum; uint8 ResolutionVariationEnum; - uint8 LayoutResType; }; struct CharSectionsEntry { uint32 ID; - int32 MaterialResourcesID[3]; - int16 Flags; int8 RaceID; int8 SexID; int8 BaseSection; int8 VariationIndex; int8 ColorIndex; + int16 Flags; + int32 MaterialResourcesID[3]; }; #define MAX_OUTFIT_ITEMS 24 @@ -394,12 +404,12 @@ struct CharSectionsEntry struct CharStartOutfitEntry { uint32 ID; - int32 ItemID[MAX_OUTFIT_ITEMS]; - uint32 PetDisplayID; // Pet Model ID for starting pet uint8 ClassID; uint8 SexID; uint8 OutfitID; + uint32 PetDisplayID; // Pet Model ID for starting pet uint8 PetFamilyID; // Pet Family Entry for starting pet + int32 ItemID[MAX_OUTFIT_ITEMS]; uint8 RaceID; }; @@ -423,32 +433,32 @@ struct ChatChannelsEntry struct ChrClassesEntry { - char const* PetNameToken; LocalizedString* Name; - LocalizedString* NameFemale; - LocalizedString* NameMale; char const* Filename; + LocalizedString* NameMale; + LocalizedString* NameFemale; + char const* PetNameToken; + uint32 ID; uint32 CreateScreenFileDataID; uint32 SelectScreenFileDataID; - uint32 LowResScreenFileDataID; uint32 IconFileDataID; + uint32 LowResScreenFileDataID; int32 StartingLevel; uint16 Flags; uint16 CinematicSequenceID; uint16 DefaultSpec; + uint8 PrimaryStatPriority; uint8 DisplayPower; - uint8 SpellClassSet; - uint8 AttackPowerPerStrength; - uint8 AttackPowerPerAgility; uint8 RangedAttackPowerPerAgility; - uint8 PrimaryStatPriority; - uint32 ID; + uint8 AttackPowerPerAgility; + uint8 AttackPowerPerStrength; + uint8 SpellClassSet; }; struct ChrClassesXPowerTypesEntry { uint32 ID; - uint8 PowerType; + int8 PowerType; uint8 ClassID; }; @@ -460,38 +470,46 @@ struct ChrRacesEntry LocalizedString* NameFemale; LocalizedString* NameLowercase; LocalizedString* NameFemaleLowercase; + uint32 ID; int32 Flags; uint32 MaleDisplayId; uint32 FemaleDisplayId; + uint32 HighResMaleDisplayId; + uint32 HighResFemaleDisplayId; int32 CreateScreenFileDataID; int32 SelectScreenFileDataID; float MaleCustomizeOffset[3]; float FemaleCustomizeOffset[3]; int32 LowResScreenFileDataID; + uint32 AlteredFormStartVisualKitID[3]; + uint32 AlteredFormFinishVisualKitID[3]; + int32 HeritageArmorAchievementID; int32 StartingLevel; int32 UiDisplayOrder; + int32 FemaleSkeletonFileDataID; + int32 MaleSkeletonFileDataID; + int32 HelmVisFallbackRaceID; int16 FactionID; + int16 CinematicSequenceID; int16 ResSicknessSpellID; int16 SplashSoundID; - int16 CinematicSequenceID; int8 BaseLanguage; int8 CreatureType; int8 Alliance; int8 RaceRelated; int8 UnalteredVisualRaceID; int8 CharComponentTextureLayoutID; + int8 CharComponentTexLayoutHiResID; int8 DefaultClassID; int8 NeutralRaceID; - int8 DisplayRaceID; - int8 CharComponentTexLayoutHiResID; - uint32 ID; - uint32 HighResMaleDisplayId; - uint32 HighResFemaleDisplayId; - int32 HeritageArmorAchievementID; - int32 MaleSkeletonFileDataID; - int32 FemaleSkeletonFileDataID; - uint32 AlteredFormStartVisualKitID[3]; - uint32 AlteredFormFinishVisualKitID[3]; + int8 MaleModelFallbackRaceID; + int8 MaleModelFallbackSex; + int8 FemaleModelFallbackRaceID; + int8 FemaleModelFallbackSex; + int8 MaleTextureFallbackRaceID; + int8 MaleTextureFallbackSex; + int8 FemaleTextureFallbackRaceID; + int8 FemaleTextureFallbackSex; }; #define MAX_MASTERY_SPELLS 2 @@ -501,16 +519,16 @@ struct ChrSpecializationEntry LocalizedString* Name; LocalizedString* FemaleName; LocalizedString* Description; - int32 MasterySpellID[MAX_MASTERY_SPELLS]; + uint32 ID; int8 ClassID; int8 OrderIndex; int8 PetTalentType; int8 Role; - int8 PrimaryStatPriority; - uint32 ID; - int32 SpellIconFileID; uint32 Flags; + int32 SpellIconFileID; + int8 PrimaryStatPriority; int32 AnimReplacements; + int32 MasterySpellID[MAX_MASTERY_SPELLS]; bool IsPetSpecialization() const { @@ -521,9 +539,9 @@ struct ChrSpecializationEntry struct CinematicCameraEntry { uint32 ID; - uint32 SoundID; // Sound ID (voiceover for cinematic) DBCPosition3D Origin; // Position in map used for basis for M2 co-ordinates - float OriginFacing; // Orientation in map used for basis for M2 co- + uint32 SoundID; // Sound ID (voiceover for cinematic) + float OriginFacing; // Orientation in map used for basis for M2 co uint32 FileDataID; // Model }; @@ -534,6 +552,16 @@ struct CinematicSequencesEntry uint16 Camera[8]; }; +struct ContentTuningEntry +{ + uint32 ID; + int32 MinLevel; + int32 MaxLevel; + int32 Flags; + int32 ExpectedStatModID; + int32 DifficultyESMID; +}; + struct ConversationLineEntry { uint32 ID; @@ -550,35 +578,35 @@ struct ConversationLineEntry struct CreatureDisplayInfoEntry { uint32 ID; - float CreatureModelScale; uint16 ModelID; - uint16 NPCSoundID; + uint16 SoundID; int8 SizeClass; - uint8 Flags; - int8 Gender; - int32 ExtendedDisplayInfoID; - int32 PortraitTextureFileDataID; + float CreatureModelScale; uint8 CreatureModelAlpha; - uint16 SoundID; - float PlayerOverrideScale; - int32 PortraitCreatureDisplayInfoID; uint8 BloodID; + int32 ExtendedDisplayInfoID; + uint16 NPCSoundID; uint16 ParticleColorID; - uint32 CreatureGeosetData; + int32 PortraitCreatureDisplayInfoID; + int32 PortraitTextureFileDataID; uint16 ObjectEffectPackageID; uint16 AnimReplacementSetID; - int8 UnarmedWeaponType; + uint8 Flags; int32 StateSpellVisualKitID; + float PlayerOverrideScale; float PetInstanceScale; // scale of not own player pets inside dungeons/raids/scenarios + int8 UnarmedWeaponType; int32 MountPoofSpellVisualKitID; + int32 DissolveEffectID; + int8 Gender; + int32 DissolveOutEffectID; + int8 CreatureModelMinLod; int32 TextureVariationFileDataID[3]; }; struct CreatureDisplayInfoExtraEntry { uint32 ID; - int32 BakeMaterialResourcesID; - int32 HDBakeMaterialResourcesID; int8 DisplayRaceID; int8 DisplaySexID; int8 DisplayClassID; @@ -587,8 +615,10 @@ struct CreatureDisplayInfoExtraEntry int8 HairStyleID; int8 HairColorID; int8 FacialHairID; - uint8 CustomDisplayOption[3]; int8 Flags; + int32 BakeMaterialResourcesID; + int32 HDBakeMaterialResourcesID; + uint8 CustomDisplayOption[3]; }; struct CreatureFamilyEntry @@ -596,46 +626,46 @@ struct CreatureFamilyEntry uint32 ID; LocalizedString* Name; float MinScale; - float MaxScale; - int32 IconFileID; - int16 SkillLine[2]; - int16 PetFoodMask; int8 MinScaleLevel; + float MaxScale; int8 MaxScaleLevel; + int16 PetFoodMask; int8 PetTalentType; + int32 IconFileID; + int16 SkillLine[2]; }; struct CreatureModelDataEntry { uint32 ID; - float ModelScale; + float GeoBox[6]; + uint32 Flags; + uint32 FileDataID; + uint32 BloodID; + uint32 FootprintTextureID; float FootprintTextureLength; float FootprintTextureWidth; float FootprintParticleScale; + uint32 FoleyMaterialID; + uint32 FootstepCameraEffectID; + uint32 DeathThudCameraEffectID; + uint32 SoundID; + uint32 SizeClass; float CollisionWidth; float CollisionHeight; - float MountHeight; - float GeoBox[6]; float WorldEffectScale; + uint32 CreatureGeosetDataID; + float HoverHeight; float AttachedEffectScale; + float ModelScale; float MissileCollisionRadius; float MissileCollisionPush; float MissileCollisionRaise; + float MountHeight; float OverrideLootEffectScale; float OverrideNameScale; float OverrideSelectionRadius; float TamedPetBaseScale; - float HoverHeight; - uint32 Flags; - uint32 FileDataID; - uint32 SizeClass; - uint32 BloodID; - uint32 FootprintTextureID; - uint32 FoleyMaterialID; - uint32 FootstepCameraEffectID; - uint32 DeathThudCameraEffectID; - uint32 SoundID; - uint32 CreatureGeosetDataID; }; struct CreatureTypeEntry @@ -648,144 +678,150 @@ struct CreatureTypeEntry struct CriteriaEntry { uint32 ID; + int16 Type; union AssetNameAlias { - uint32 ID; + int32 ID; // CRITERIA_TYPE_KILL_CREATURE = 0 // CRITERIA_TYPE_KILLED_BY_CREATURE = 20 - uint32 CreatureID; + int32 CreatureID; // CRITERIA_TYPE_WIN_BG = 1 // CRITERIA_TYPE_COMPLETE_BATTLEGROUND = 15 // CRITERIA_TYPE_DEATH_AT_MAP = 16 // CRITERIA_TYPE_WIN_ARENA = 32 // CRITERIA_TYPE_PLAY_ARENA = 33 - uint32 MapID; + int32 MapID; // CRITERIA_TYPE_REACH_SKILL_LEVEL = 7 // CRITERIA_TYPE_LEARN_SKILL_LEVEL = 40 // CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS = 75 // CRITERIA_TYPE_LEARN_SKILL_LINE = 112 - uint32 SkillID; + int32 SkillID; // CRITERIA_TYPE_COMPLETE_ACHIEVEMENT = 8 - uint32 AchievementID; + int32 AchievementID; // CRITERIA_TYPE_COMPLETE_QUESTS_IN_ZONE = 11 - uint32 ZoneID; + int32 ZoneID; // CRITERIA_TYPE_CURRENCY = 12 - uint32 CurrencyID; + int32 CurrencyID; // CRITERIA_TYPE_DEATH_IN_DUNGEON = 18 // CRITERIA_TYPE_COMPLETE_RAID = 19 - uint32 GroupSize; + int32 GroupSize; // CRITERIA_TYPE_DEATHS_FROM = 26 - uint32 DamageType; + int32 DamageType; // CRITERIA_TYPE_COMPLETE_QUEST = 27 - uint32 QuestID; + int32 QuestID; // CRITERIA_TYPE_BE_SPELL_TARGET = 28 // CRITERIA_TYPE_BE_SPELL_TARGET2 = 69 // CRITERIA_TYPE_CAST_SPELL = 29 // CRITERIA_TYPE_CAST_SPELL2 = 110 // CRITERIA_TYPE_LEARN_SPELL = 34 - uint32 SpellID; + int32 SpellID; // CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE - uint32 ObjectiveId; + int32 ObjectiveId; // CRITERIA_TYPE_HONORABLE_KILL_AT_AREA = 31 // CRITERIA_TYPE_ENTER_AREA = 163 // CRITERIA_TYPE_LEAVE_AREA = 164 - uint32 AreaID; + int32 AreaID; // CRITERIA_TYPE_OWN_ITEM = 36 // CRITERIA_TYPE_USE_ITEM = 41 // CRITERIA_TYPE_LOOT_ITEM = 42 // CRITERIA_TYPE_EQUIP_ITEM = 57 // CRITERIA_TYPE_OWN_TOY = 185 - uint32 ItemID; + int32 ItemID; // CRITERIA_TYPE_HIGHEST_TEAM_RATING = 38 // CRITERIA_TYPE_REACH_TEAM_RATING = 39 // CRITERIA_TYPE_HIGHEST_PERSONAL_RATING = 39 - uint32 TeamType; + int32 TeamType; // CRITERIA_TYPE_EXPLORE_AREA = 43 - uint32 WorldMapOverlayID; + int32 WorldMapOverlayID; // CRITERIA_TYPE_GAIN_REPUTATION = 46 // CRITERIA_TYPE_GAIN_PARAGON_REPUTATION = 206 - uint32 FactionID; + int32 FactionID; // CRITERIA_TYPE_EQUIP_EPIC_ITEM = 49 - uint32 ItemSlot; + int32 ItemSlot; // CRITERIA_TYPE_ROLL_NEED_ON_LOOT = 50 // CRITERIA_TYPE_ROLL_GREED_ON_LOOT = 51 - uint32 RollValue; + int32 RollValue; // CRITERIA_TYPE_HK_CLASS = 52 - uint32 ClassID; + int32 ClassID; // CRITERIA_TYPE_HK_RACE = 53 - uint32 RaceID; + int32 RaceID; // CRITERIA_TYPE_DO_EMOTE = 54 - uint32 EmoteID; + int32 EmoteID; // CRITERIA_TYPE_USE_GAMEOBJECT = 68 // CRITERIA_TYPE_FISH_IN_GAMEOBJECT = 72 - uint32 GameObjectID; + int32 GameObjectID; // CRITERIA_TYPE_HIGHEST_POWER = 96 - uint32 PowerType; + int32 PowerType; // CRITERIA_TYPE_HIGHEST_STAT = 97 - uint32 StatType; + int32 StatType; // CRITERIA_TYPE_HIGHEST_SPELLPOWER = 98 - uint32 SpellSchool; + int32 SpellSchool; // CRITERIA_TYPE_LOOT_TYPE = 109 - uint32 LootType; + int32 LootType; // CRITERIA_TYPE_COMPLETE_DUNGEON_ENCOUNTER = 165 - uint32 DungeonEncounterID; + int32 DungeonEncounterID; // CRITERIA_TYPE_CONSTRUCT_GARRISON_BUILDING = 169 - uint32 GarrBuildingID; + int32 GarrBuildingID; // CRITERIA_TYPE_UPGRADE_GARRISON = 170 - uint32 GarrisonLevel; + int32 GarrisonLevel; // CRITERIA_TYPE_COMPLETE_GARRISON_MISSION = 174 - uint32 GarrMissionID; + int32 GarrMissionID; // CRITERIA_TYPE_COMPLETE_GARRISON_SHIPMENT = 182 - uint32 CharShipmentContainerID; + int32 CharShipmentContainerID; // CRITERIA_TYPE_APPEARANCE_UNLOCKED_BY_SLOT - uint32 EquipmentSlot; + int32 EquipmentSlot; // CRITERIA_TYPE_TRANSMOG_SET_UNLOCKED = 205 - uint32 TransmogSetGroupID; + int32 TransmogSetGroupID; // CRITERIA_TYPE_RELIC_TALENT_UNLOCKED = 211 - uint32 ArtifactPowerID; + int32 ArtifactPowerID; + + // CRITERIA_TYPE_REACH_ACCOUNT_HONOR_LEVEL = 213 + int32 AccountHonorLevel; + + // CRITERIA_TREE_HEART_OF_AZEROTH_LEVEL_REACHED = 215 + int32 HeartOfAzerothLevel; } Asset; - int32 StartAsset; - int32 FailAsset; uint32 ModifierTreeId; - uint16 StartTimer; - int16 EligibilityWorldStateID; - uint8 Type; uint8 StartEvent; + int32 StartAsset; + uint16 StartTimer; uint8 FailEvent; + int32 FailAsset; uint8 Flags; + int16 EligibilityWorldStateID; int8 EligibilityWorldStateValue; }; @@ -793,12 +829,12 @@ struct CriteriaTreeEntry { uint32 ID; LocalizedString* Description; - int32 Amount; - int16 Flags; + uint32 Parent; + uint32 Amount; int8 Operator; uint32 CriteriaID; - uint32 Parent; int32 OrderIndex; + int16 Flags; }; struct CurrencyTypesEntry @@ -806,14 +842,15 @@ struct CurrencyTypesEntry uint32 ID; LocalizedString* Name; LocalizedString* Description; - uint32 MaxQty; - uint32 MaxEarnablePerWeek; - uint32 Flags; uint8 CategoryID; - uint8 SpellCategory; - uint8 Quality; int32 InventoryIconFileID; uint32 SpellWeight; + uint8 SpellCategory; + uint32 MaxQty; + uint32 MaxEarnablePerWeek; + uint32 Flags; + int8 Quality; + int32 FactionID; }; struct CurveEntry @@ -834,58 +871,58 @@ struct CurvePointEntry struct DestructibleModelDataEntry { uint32 ID; - uint16 State0Wmo; - uint16 State1Wmo; - uint16 State2Wmo; - uint16 State3Wmo; - uint16 HealEffectSpeed; int8 State0ImpactEffectDoodadSet; uint8 State0AmbientDoodadSet; - int8 State0NameSet; + uint16 State1Wmo; int8 State1DestructionDoodadSet; int8 State1ImpactEffectDoodadSet; uint8 State1AmbientDoodadSet; - int8 State1NameSet; + uint16 State2Wmo; int8 State2DestructionDoodadSet; int8 State2ImpactEffectDoodadSet; uint8 State2AmbientDoodadSet; - int8 State2NameSet; + uint16 State3Wmo; uint8 State3InitDoodadSet; uint8 State3AmbientDoodadSet; - int8 State3NameSet; uint8 EjectDirection; uint8 DoNotHighlight; + uint16 State0Wmo; uint8 HealEffect; + uint16 HealEffectSpeed; + int8 State0NameSet; + int8 State1NameSet; + int8 State2NameSet; + int8 State3NameSet; }; struct DifficultyEntry { uint32 ID; LocalizedString* Name; - uint16 GroupSizeHealthCurveID; - uint16 GroupSizeDmgCurveID; - uint16 GroupSizeSpellPointsCurveID; - uint8 FallbackDifficultyID; uint8 InstanceType; + uint8 OrderIndex; + int8 OldEnumValue; + uint8 FallbackDifficultyID; uint8 MinPlayers; uint8 MaxPlayers; - int8 OldEnumValue; uint8 Flags; - uint8 ToggleDifficultyID; uint8 ItemContext; - uint8 OrderIndex; + uint8 ToggleDifficultyID; + uint16 GroupSizeHealthCurveID; + uint16 GroupSizeDmgCurveID; + uint16 GroupSizeSpellPointsCurveID; }; struct DungeonEncounterEntry { LocalizedString* Name; - int32 CreatureDisplayID; + uint32 ID; int16 MapID; int8 DifficultyID; + int32 OrderIndex; int8 Bit; + int32 CreatureDisplayID; uint8 Flags; - uint32 ID; - int32 OrderIndex; int32 SpellIconFileID; }; @@ -907,13 +944,13 @@ struct EmotesEntry uint32 ID; int64 RaceMask; char const* EmoteSlashCommand; + int32 AnimID; uint32 EmoteFlags; - uint32 SpellVisualKitID; - int16 AnimID; uint8 EmoteSpecProc; - int32 ClassMask; uint32 EmoteSpecProcParam; uint32 EventSoundID; + uint32 SpellVisualKitID; + int32 ClassMask; }; struct EmotesTextEntry @@ -927,30 +964,60 @@ struct EmotesTextSoundEntry { uint32 ID; uint8 RaceID; - uint8 SexID; uint8 ClassID; + uint8 SexID; uint32 SoundID; uint16 EmotesTextID; }; +struct ExpectedStatEntry +{ + uint32 ID; + int32 ExpansionID; + float CreatureHealth; + float PlayerHealth; + float CreatureAutoAttackDps; + float CreatureArmor; + float PlayerMana; + float PlayerPrimaryStat; + float PlayerSecondaryStat; + float ArmorConstant; + float CreatureSpellDamage; + int32 Lvl; +}; + +struct ExpectedStatModEntry +{ + uint32 ID; + float CreatureHealthMod; + float PlayerHealthMod; + float CreatureAutoAttackDPSMod; + float CreatureArmorMod; + float PlayerManaMod; + float PlayerPrimaryStatMod; + float PlayerSecondaryStatMod; + float ArmorConstantMod; + float CreatureSpellDamageMod; +}; + struct FactionEntry { int64 ReputationRaceMask[4]; LocalizedString* Name; LocalizedString* Description; uint32 ID; - int32 ReputationBase[4]; - float ParentFactionMod[2]; // Faction outputs rep * ParentFactionModOut as spillover reputation - int32 ReputationMax[4]; int16 ReputationIndex; - int16 ReputationClassMask[4]; - uint16 ReputationFlags[4]; uint16 ParentFactionID; - uint16 ParagonFactionID; - uint8 ParentFactionCap[2]; // The highest rank the faction will profit from incoming spillover uint8 Expansion; - uint8 Flags; uint8 FriendshipRepID; + uint8 Flags; + uint16 ParagonFactionID; + int16 ReputationClassMask[4]; + uint16 ReputationFlags[4]; + int32 ReputationBase[4]; + int32 ReputationMax[4]; + float ParentFactionMod[2]; // Faction outputs rep * ParentFactionModOut as spillover reputation + uint8 ParentFactionCap[2]; // The highest rank the faction will profit from incoming spillover // helpers bool CanHaveReputation() const @@ -966,11 +1033,11 @@ struct FactionTemplateEntry uint32 ID; uint16 Faction; uint16 Flags; - uint16 Enemies[MAX_FACTION_RELATIONS]; - uint16 Friend[MAX_FACTION_RELATIONS]; uint8 FactionGroup; uint8 FriendGroup; uint8 EnemyGroup; + uint16 Enemies[MAX_FACTION_RELATIONS]; + uint16 Friend[MAX_FACTION_RELATIONS]; //------------------------------------------------------- end structure @@ -1020,12 +1087,12 @@ struct FactionTemplateEntry struct GameObjectDisplayInfoEntry { uint32 ID; - int32 FileDataID; DBCPosition3D GeoBoxMin; DBCPosition3D GeoBoxMax; + int32 FileDataID; + int16 ObjectEffectPackageID; float OverrideLootEffectScale; float OverrideNameScale; - int16 ObjectEffectPackageID; }; struct GameObjectsEntry @@ -1033,65 +1100,65 @@ struct GameObjectsEntry LocalizedString* Name; DBCPosition3D Pos; float Rot[4]; - float Scale; - int32 PropValue[8]; + uint32 ID; uint16 OwnerID; uint16 DisplayID; + float Scale; + uint8 TypeID; + uint8 PhaseUseFlags; uint16 PhaseID; uint16 PhaseGroupID; - uint8 PhaseUseFlags; - uint8 TypeID; - uint32 ID; + int32 PropValue[8]; }; struct GarrAbilityEntry { LocalizedString* Name; LocalizedString* Description; - int32 IconFileDataID; - uint16 Flags; - uint16 FactionChangeGarrAbilityID; + uint32 ID; uint8 GarrAbilityCategoryID; uint8 GarrFollowerTypeID; - uint32 ID; + int32 IconFileDataID; + uint16 FactionChangeGarrAbilityID; + uint16 Flags; }; struct GarrBuildingEntry { uint32 ID; - LocalizedString* AllianceName; LocalizedString* HordeName; + LocalizedString* AllianceName; LocalizedString* Description; LocalizedString* Tooltip; + uint8 GarrTypeID; + uint8 BuildingType; int32 HordeGameObjectID; int32 AllianceGameObjectID; - int32 IconFileDataID; + uint8 GarrSiteID; + uint8 UpgradeLevel; + int32 BuildSeconds; uint16 CurrencyTypeID; + int32 CurrencyQty; uint16 HordeUiTextureKitID; uint16 AllianceUiTextureKitID; + int32 IconFileDataID; uint16 AllianceSceneScriptPackageID; uint16 HordeSceneScriptPackageID; + int32 MaxAssignments; + uint8 ShipmentCapacity; uint16 GarrAbilityID; uint16 BonusGarrAbilityID; uint16 GoldCost; - uint8 GarrSiteID; - uint8 BuildingType; - uint8 UpgradeLevel; uint8 Flags; - uint8 ShipmentCapacity; - uint8 GarrTypeID; - int32 BuildSeconds; - int32 CurrencyQty; - int32 MaxAssignments; }; struct GarrBuildingPlotInstEntry { DBCPosition2D MapOffset; - uint16 UiTextureAtlasMemberID; - uint16 GarrSiteLevelPlotInstID; - uint8 GarrBuildingID; uint32 ID; + uint8 GarrBuildingID; + uint16 GarrSiteLevelPlotInstID; + uint16 UiTextureAtlasMemberID; }; struct GarrClassSpecEntry @@ -1099,11 +1166,11 @@ struct GarrClassSpecEntry LocalizedString* ClassSpec; LocalizedString* ClassSpecMale; LocalizedString* ClassSpecFemale; + uint32 ID; uint16 UiTextureAtlasMemberID; uint16 GarrFollItemSetID; uint8 FollowerClassLimit; uint8 Flags; - uint32 ID; }; struct GarrFollowerEntry @@ -1111,54 +1178,55 @@ struct GarrFollowerEntry LocalizedString* HordeSourceText; LocalizedString* AllianceSourceText; LocalizedString* TitleName; + uint32 ID; + uint8 GarrTypeID; + uint8 GarrFollowerTypeID; int32 HordeCreatureID; int32 AllianceCreatureID; - int32 HordeIconFileDataID; - int32 AllianceIconFileDataID; - uint32 HordeSlottingBroadcastTextID; - uint32 AllySlottingBroadcastTextID; - uint16 HordeGarrFollItemSetID; - uint16 AllianceGarrFollItemSetID; - uint16 ItemLevelWeapon; - uint16 ItemLevelArmor; - uint16 HordeUITextureKitID; - uint16 AllianceUITextureKitID; - uint8 GarrFollowerTypeID; uint8 HordeGarrFollRaceID; uint8 AllianceGarrFollRaceID; - uint8 Quality; uint8 HordeGarrClassSpecID; uint8 AllianceGarrClassSpecID; + uint8 Quality; uint8 FollowerLevel; - uint8 Gender; - uint8 Flags; + uint16 ItemLevelWeapon; + uint16 ItemLevelArmor; int8 HordeSourceTypeEnum; int8 AllianceSourceTypeEnum; - uint8 GarrTypeID; + int32 HordeIconFileDataID; + int32 AllianceIconFileDataID; + uint16 HordeGarrFollItemSetID; + uint16 AllianceGarrFollItemSetID; + uint16 HordeUITextureKitID; + uint16 AllianceUITextureKitID; uint8 Vitality; - uint8 ChrClassID; uint8 HordeFlavorGarrStringID; uint8 AllianceFlavorGarrStringID; - uint32 ID; + uint32 HordeSlottingBroadcastTextID; + uint32 AllySlottingBroadcastTextID; + uint8 ChrClassID; + uint8 Flags; + uint8 Gender; }; struct GarrFollowerXAbilityEntry { uint32 ID; - uint16 GarrAbilityID; + uint8 OrderIndex; uint8 FactionIndex; + uint16 GarrAbilityID; uint16 GarrFollowerID; }; struct GarrPlotEntry { uint32 ID; - LocalizedString* Name; - int32 AllianceConstructObjID; - int32 HordeConstructObjID; - uint8 UiCategoryID; + char const* Name; uint8 PlotType; + int32 HordeConstructObjID; + int32 AllianceConstructObjID; uint8 Flags; + uint8 UiCategoryID; uint32 UpgradeRequirement[2]; }; @@ -1180,14 +1248,14 @@ struct GarrSiteLevelEntry { uint32 ID; DBCPosition2D TownHallUiPos; + uint32 GarrSiteID; + uint8 GarrLevel; uint16 MapID; - uint16 UiTextureKitID; uint16 UpgradeMovieID; + uint16 UiTextureKitID; + uint8 MaxBuildingLevel; uint16 UpgradeCost; uint16 UpgradeGoldCost; - uint8 GarrLevel; - uint8 GarrSiteID; - uint8 MaxBuildingLevel; }; struct GarrSiteLevelPlotInstEntry @@ -1202,8 +1270,8 @@ struct GarrSiteLevelPlotInstEntry struct GemPropertiesEntry { uint32 ID; - uint32 Type; uint16 EnchantId; + int32 Type; uint16 MinItemLevel; }; @@ -1234,24 +1302,24 @@ struct GuildColorBackgroundEntry { uint32 ID; uint8 Red; - uint8 Green; uint8 Blue; + uint8 Green; }; struct GuildColorBorderEntry { uint32 ID; uint8 Red; - uint8 Green; uint8 Blue; + uint8 Green; }; struct GuildColorEmblemEntry { uint32 ID; uint8 Red; - uint8 Green; uint8 Blue; + uint8 Green; }; struct GuildPerkSpellsEntry @@ -1263,15 +1331,15 @@ struct GuildPerkSpellsEntry struct HeirloomEntry { LocalizedString* SourceText; + uint32 ID; int32 ItemID; - int32 LegacyItemID; int32 LegacyUpgradedItemID; int32 StaticUpgradedItemID; + int8 SourceTypeEnum; + uint8 Flags; + int32 LegacyItemID; int32 UpgradeItemID[3]; uint16 UpgradeItemBonusListID[3]; - uint8 Flags; - int8 SourceTypeEnum; - uint32 ID; }; #define MAX_HOLIDAY_DURATIONS 10 @@ -1281,16 +1349,16 @@ struct HeirloomEntry struct HolidaysEntry { uint32 ID; - uint32 Date[MAX_HOLIDAY_DATES]; // dates in unix time starting at January, 1, 2000 - uint16 Duration[MAX_HOLIDAY_DURATIONS]; uint16 Region; uint8 Looping; - uint8 CalendarFlags[MAX_HOLIDAY_FLAGS]; + uint32 HolidayNameID; + uint32 HolidayDescriptionID; uint8 Priority; int8 CalendarFilterType; uint8 Flags; - uint32 HolidayNameID; - uint32 HolidayDescriptionID; + uint16 Duration[MAX_HOLIDAY_DURATIONS]; + uint32 Date[MAX_HOLIDAY_DATES]; // dates in unix time starting at January, 1, 2000 + uint8 CalendarFlags[MAX_HOLIDAY_DURATIONS]; int32 TextureFileDataID[3]; }; @@ -1324,30 +1392,29 @@ struct ImportPriceWeaponEntry struct ItemEntry { uint32 ID; - int32 IconFileDataID; uint8 ClassID; uint8 SubclassID; - int8 SoundOverrideSubclassID; uint8 Material; - uint8 InventoryType; + int8 InventoryType; uint8 SheatheType; + int8 SoundOverrideSubclassID; + int32 IconFileDataID; uint8 ItemGroupSoundsID; }; struct ItemAppearanceEntry { uint32 ID; + uint8 DisplayType; int32 ItemDisplayInfoID; int32 DefaultIconFileDataID; int32 UiOrder; - uint8 DisplayType; }; struct ItemArmorQualityEntry { uint32 ID; float Qualitymod[7]; - int16 ItemLevel; }; struct ItemArmorShieldEntry @@ -1360,11 +1427,11 @@ struct ItemArmorShieldEntry struct ItemArmorTotalEntry { uint32 ID; + int16 ItemLevel; float Cloth; float Leather; float Mail; float Plate; - int16 ItemLevel; }; struct ItemBagFamilyEntry @@ -1391,10 +1458,10 @@ struct ItemBonusListLevelDeltaEntry struct ItemBonusTreeNodeEntry { uint32 ID; + uint8 ItemContext; uint16 ChildItemBonusTreeID; uint16 ChildItemBonusListID; uint16 ChildItemLevelSelectorID; - uint8 ItemContext; uint16 ParentItemBonusTreeID; }; @@ -1410,8 +1477,8 @@ struct ItemClassEntry { uint32 ID; LocalizedString* ClassName; - float PriceModifier; int8 ClassID; + float PriceModifier; uint8 Flags; }; @@ -1424,46 +1491,46 @@ struct ItemCurrencyCostEntry struct ItemDamageAmmoEntry { uint32 ID; - float Quality[7]; uint16 ItemLevel; + float Quality[7]; }; struct ItemDamageOneHandEntry { uint32 ID; - float Quality[7]; uint16 ItemLevel; + float Quality[7]; }; struct ItemDamageOneHandCasterEntry { uint32 ID; - float Quality[7]; uint16 ItemLevel; + float Quality[7]; }; struct ItemDamageTwoHandEntry { uint32 ID; - float Quality[7]; uint16 ItemLevel; + float Quality[7]; }; struct ItemDamageTwoHandCasterEntry { uint32 ID; - float Quality[7]; uint16 ItemLevel; + float Quality[7]; }; struct ItemDisenchantLootEntry { uint32 ID; + int8 Subclass; + uint8 Quality; uint16 MinLevel; uint16 MaxLevel; uint16 SkillRequired; - int8 Subclass; - uint8 Quality; int8 ExpansionID; uint8 Class; }; @@ -1471,14 +1538,14 @@ struct ItemDisenchantLootEntry struct ItemEffectEntry { uint32 ID; - int32 SpellID; + uint8 LegacySlotIndex; + int8 TriggerType; + int16 Charges; int32 CoolDownMSec; int32 CategoryCoolDownMSec; - int16 Charges; uint16 SpellCategoryID; + int32 SpellID; uint16 ChrSpecializationID; - uint8 LegacySlotIndex; - int8 TriggerType; int32 ParentItemID; }; @@ -1488,16 +1555,16 @@ struct ItemEffectEntry struct ItemExtendedCostEntry { uint32 ID; + uint16 RequiredArenaRating; + int8 ArenaBracket; // arena slot restrictions (min slot value) + uint8 Flags; + uint8 MinFactionID; + uint8 MinReputation; + uint8 RequiredAchievement; // required personal arena rating int32 ItemID[MAX_ITEM_EXT_COST_ITEMS]; // required item id - uint32 CurrencyCount[MAX_ITEM_EXT_COST_CURRENCIES]; // required curency count uint16 ItemCount[MAX_ITEM_EXT_COST_ITEMS]; // required count of 1st item - uint16 RequiredArenaRating; // required personal arena rating uint16 CurrencyID[MAX_ITEM_EXT_COST_CURRENCIES]; // required curency id - uint8 ArenaBracket; // arena slot restrictions (min slot value) - uint8 MinFactionID; - uint8 MinReputation; - uint8 Flags; - uint8 RequiredAchievement; + uint32 CurrencyCount[MAX_ITEM_EXT_COST_CURRENCIES]; // required curency count }; struct ItemLevelSelectorEntry @@ -1540,8 +1607,8 @@ struct ItemLimitCategoryConditionEntry struct ItemModifiedAppearanceEntry { - int32 ItemID; uint32 ID; + int32 ItemID; uint8 ItemAppearanceModifierID; uint16 ItemAppearanceID; uint8 OrderIndex; @@ -1551,9 +1618,9 @@ struct ItemModifiedAppearanceEntry struct ItemPriceBaseEntry { uint32 ID; + uint16 ItemLevel; float Armor; float Weapon; - uint16 ItemLevel; }; #define MAX_ITEM_RANDOM_PROPERTIES 5 @@ -1578,17 +1645,17 @@ struct ItemSearchNameEntry int64 AllowableRace; LocalizedString* Display; uint32 ID; - int32 Flags[3]; - uint16 ItemLevel; uint8 OverallQualityID; uint8 ExpansionID; - int8 RequiredLevel; uint16 MinFactionID; uint8 MinReputation; int32 AllowableClass; + int8 RequiredLevel; uint16 RequiredSkill; uint16 RequiredSkillRank; uint32 RequiredAbility; + uint16 ItemLevel; + int32 Flags[4]; }; #define MAX_ITEM_SET_ITEMS 17 @@ -1597,17 +1664,17 @@ struct ItemSetEntry { uint32 ID; LocalizedString* Name; - uint32 ItemID[MAX_ITEM_SET_ITEMS]; - uint16 RequiredSkillRank; - uint32 RequiredSkill; uint32 SetFlags; + uint32 RequiredSkill; + uint16 RequiredSkillRank; + uint32 ItemID[MAX_ITEM_SET_ITEMS]; }; struct ItemSetSpellEntry { uint32 ID; - uint32 SpellID; uint16 ChrSpecID; + uint32 SpellID; uint8 Threshold; uint16 ItemSetID; }; @@ -1616,80 +1683,80 @@ struct ItemSparseEntry { uint32 ID; int64 AllowableRace; - LocalizedString* Display; - LocalizedString* Display1; - LocalizedString* Display2; - LocalizedString* Display3; LocalizedString* Description; - int32 Flags[MAX_ITEM_PROTO_FLAGS]; - float PriceRandomValue; - float PriceVariance; - uint32 VendorStackCount; - uint32 BuyPrice; - uint32 SellPrice; - uint32 RequiredAbility; - int32 MaxCount; - int32 Stackable; - int32 StatPercentEditor[MAX_ITEM_PROTO_STATS]; - float StatPercentageOfSocket[MAX_ITEM_PROTO_STATS]; - float ItemRange; - uint32 BagFamily; - float QualityModifier; - uint32 DurationInInventory; + LocalizedString* Display3; + LocalizedString* Display2; + LocalizedString* Display1; + LocalizedString* Display; float DmgVariance; - int16 AllowableClass; - uint16 ItemLevel; - uint16 RequiredSkill; - uint16 RequiredSkillRank; - uint16 MinFactionID; - int16 ItemStatValue[MAX_ITEM_PROTO_STATS]; - uint16 ScalingStatDistributionID; - uint16 ItemDelay; - uint16 PageID; - uint16 StartQuestID; - uint16 LockID; - uint16 RandomSelect; - uint16 ItemRandomSuffixGroupID; - uint16 ItemSet; - uint16 ZoneBound; - uint16 InstanceBound; - uint16 TotemCategoryID; - uint16 SocketMatchEnchantmentId; - uint16 GemProperties; - uint16 LimitCategory; - uint16 RequiredHoliday; - uint16 RequiredTransmogHoliday; + uint32 DurationInInventory; + float QualityModifier; + uint32 BagFamily; + float ItemRange; + float StatPercentageOfSocket[MAX_ITEM_PROTO_STATS]; + int32 StatPercentEditor[MAX_ITEM_PROTO_STATS]; + int32 Stackable; + int32 MaxCount; + uint32 RequiredAbility; + uint32 SellPrice; + uint32 BuyPrice; + uint32 VendorStackCount; + float PriceVariance; + float PriceRandomValue; + int32 Flags[MAX_ITEM_PROTO_FLAGS]; + int32 FactionRelated; uint16 ItemNameDescriptionID; - uint8 OverallQualityID; - uint8 InventoryType; - int8 RequiredLevel; - uint8 RequiredPVPRank; - uint8 RequiredPVPMedal; - uint8 MinReputation; - uint8 ContainerSlots; - int8 StatModifierBonusStat[MAX_ITEM_PROTO_STATS]; - uint8 DamageDamageType; - uint8 Bonding; - uint8 LanguageID; - uint8 PageMaterialID; - uint8 Material; - uint8 SheatheType; - uint8 SocketType[MAX_ITEM_PROTO_SOCKETS]; - uint8 SpellWeightCategory; - uint8 SpellWeight; - uint8 ArtifactID; + uint16 RequiredTransmogHoliday; + uint16 RequiredHoliday; + uint16 LimitCategory; + uint16 GemProperties; + uint16 SocketMatchEnchantmentId; + uint16 TotemCategoryID; + uint16 InstanceBound; + uint16 ZoneBound; + uint16 ItemSet; + uint16 ItemRandomSuffixGroupID; + uint16 RandomSelect; + uint16 LockID; + uint16 StartQuestID; + uint16 PageID; + uint16 ItemDelay; + uint16 ScalingStatDistributionID; + uint16 MinFactionID; + uint16 RequiredSkillRank; + uint16 RequiredSkill; + uint16 ItemLevel; + int16 AllowableClass; uint8 ExpansionID; + uint8 ArtifactID; + uint8 SpellWeight; + uint8 SpellWeightCategory; + uint8 SocketType[MAX_ITEM_PROTO_SOCKETS]; + uint8 SheatheType; + uint8 Material; + uint8 PageMaterialID; + uint8 LanguageID; + uint8 Bonding; + uint8 DamageDamageType; + int8 StatModifierBonusStat[MAX_ITEM_PROTO_STATS]; + uint8 ContainerSlots; + uint8 MinReputation; + uint8 RequiredPVPMedal; + uint8 RequiredPVPRank; + int8 RequiredLevel; + uint8 InventoryType; + uint8 OverallQualityID; }; struct ItemSpecEntry { uint32 ID; - uint16 SpecializationID; uint8 MinLevel; uint8 MaxLevel; uint8 ItemType; uint8 PrimaryStat; uint8 SecondaryStat; + uint16 SpecializationID; }; struct ItemSpecOverrideEntry @@ -1702,11 +1769,11 @@ struct ItemSpecOverrideEntry struct ItemUpgradeEntry { uint32 ID; - uint32 CurrencyAmount; - uint16 PrerequisiteID; - uint16 CurrencyType; uint8 ItemUpgradePathID; uint8 ItemLevelIncrement; + uint16 PrerequisiteID; + uint16 CurrencyType; + uint32 CurrencyAmount; }; struct ItemXBonusTreeEntry @@ -1729,37 +1796,37 @@ struct LFGDungeonsEntry uint32 ID; LocalizedString* Name; LocalizedString* Description; - int32 Flags; - float MinGear; - uint16 MaxLevel; - uint16 TargetLevelMax; - int16 MapID; - uint16 RandomID; - uint16 ScenarioID; - uint16 FinalEncounterID; - uint16 BonusReputationAmount; - uint16 MentorItemLevel; - uint16 RequiredPlayerConditionId; uint8 MinLevel; - uint8 TargetLevel; - uint8 TargetLevelMin; - uint8 DifficultyID; + uint16 MaxLevel; uint8 TypeID; + uint8 Subtype; int8 Faction; + int32 IconTextureFileID; + int32 RewardsBgTextureFileID; + int32 PopupBgTextureFileID; uint8 ExpansionLevel; - uint8 OrderIndex; + int16 MapID; + uint8 DifficultyID; + float MinGear; uint8 GroupID; + uint8 OrderIndex; + uint32 RequiredPlayerConditionId; + uint8 TargetLevel; + uint8 TargetLevelMin; + uint16 TargetLevelMax; + uint16 RandomID; + uint16 ScenarioID; + uint16 FinalEncounterID; uint8 CountTank; uint8 CountHealer; uint8 CountDamage; uint8 MinCountTank; uint8 MinCountHealer; uint8 MinCountDamage; - uint8 Subtype; + uint16 BonusReputationAmount; + uint16 MentorItemLevel; uint8 MentorCharLevel; - int32 IconTextureFileID; - int32 RewardsBgTextureFileID; - int32 PopupBgTextureFileID; + int32 Flags[2]; // Helpers uint32 Entry() const { return ID + (TypeID << 24); } @@ -1780,23 +1847,25 @@ struct LiquidTypeEntry uint32 ID; char const* Name; char const* Texture[6]; + uint16 Flags; + uint8 SoundBank; // used to be "type", maybe needs fixing (works well for now) + uint32 SoundID; uint32 SpellID; float MaxDarkenDepth; float FogDarkenIntensity; float AmbDarkenIntensity; float DirDarkenIntensity; - float ParticleScale; - int32 Color[2]; - float Float[18]; - uint32 Int[4]; - uint16 Flags; uint16 LightID; - uint8 SoundBank; // used to be "type", maybe needs fixing (works well for now) + float ParticleScale; uint8 ParticleMovement; uint8 ParticleTexSlots; uint8 MaterialID; + int32 MinimapStaticCol; uint8 FrameCountTexture[6]; - uint32 SoundID; + int32 Color[2]; + float Float[18]; + uint32 Int[4]; + float Coefficient[4]; }; #define MAX_LOCK_CASE 8 @@ -1825,21 +1894,22 @@ struct MapEntry LocalizedString* MapDescription1; // Alliance LocalizedString* PvpShortDescription; LocalizedString* PvpLongDescription; - int32 Flags[2]; - float MinimapIconScale; DBCPosition2D Corpse; // entrance coordinates in ghost mode (in most cases = normal entrance) + uint8 MapType; + int8 InstanceType; + uint8 ExpansionID; uint16 AreaTableID; int16 LoadingScreenID; - int16 CorpseMapID; // map_id of entrance map in ghost mode (continent always and in most cases = normal entrance) int16 TimeOfDayOverride; int16 ParentMapID; int16 CosmeticParentMapID; - int16 WindSettingsID; - uint8 InstanceType; - uint8 MapType; - uint8 ExpansionID; - uint8 MaxPlayers; uint8 TimeOffset; + float MinimapIconScale; + int16 CorpseMapID; // map_id of entrance map in ghost mode (continent always and in most cases = normal entrance) + uint8 MaxPlayers; + int16 WindSettingsID; + int32 ZmpFileDataID; + int32 Flags[2]; // Helpers uint8 Expansion() const { return ExpansionID; } @@ -1877,13 +1947,14 @@ struct MapDifficultyEntry { uint32 ID; LocalizedString* Message; // m_message_lang (text showed when transfer to map failed) + uint32 ItemContextPickerID; + int32 ContentTuningID; uint8 DifficultyID; + uint8 LockID; uint8 ResetInterval; uint8 MaxPlayers; - uint8 LockID; - uint8 Flags; uint8 ItemContext; - uint32 ItemContextPickerID; + uint8 Flags; uint16 MapID; uint32 GetRaidDuration() const @@ -1899,27 +1970,27 @@ struct MapDifficultyEntry struct ModifierTreeEntry { uint32 ID; - int32 Asset; - int32 SecondaryAsset; uint32 Parent; - uint8 Type; - int8 TertiaryAsset; int8 Operator; int8 Amount; + uint8 Type; + int32 Asset; + int32 SecondaryAsset; + int8 TertiaryAsset; }; struct MountEntry { LocalizedString* Name; - LocalizedString* Description; LocalizedString* SourceText; - int32 SourceSpellID; - float MountFlyRideHeight; + LocalizedString* Description; + uint32 ID; uint16 MountTypeID; uint16 Flags; int8 SourceTypeEnum; - uint32 ID; + int32 SourceSpellID; uint32 PlayerConditionID; + float MountFlyRideHeight; int32 UiModelSceneID; bool IsSelfMount() const { return (Flags & MOUNT_FLAG_SELF_MOUNT) != 0; } @@ -1927,14 +1998,14 @@ struct MountEntry struct MountCapabilityEntry { - int32 ReqSpellKnownID; - int32 ModSpellAuraID; + uint32 ID; + uint8 Flags; uint16 ReqRidingSkill; uint16 ReqAreaID; - int16 ReqMapID; - uint8 Flags; - uint32 ID; uint32 ReqSpellAuraID; + int32 ReqSpellKnownID; + int32 ModSpellAuraID; + int16 ReqMapID; }; struct MountTypeXCapabilityEntry @@ -1956,10 +2027,10 @@ struct MountXDisplayEntry struct MovieEntry { uint32 ID; - uint32 AudioFileDataID; - uint32 SubtitleFileDataID; uint8 Volume; uint8 KeyID; + uint32 AudioFileDataID; + uint32 SubtitleFileDataID; }; struct NameGenEntry @@ -1990,6 +2061,14 @@ struct NamesReservedLocaleEntry uint8 LocaleMask; }; +struct NumTalentsAtLevelEntry +{ + uint32 ID; + int32 NumTalents; + int32 NumTalentsDeathKnight; + int32 NumTalentsDemonHunter; +}; + #define MAX_OVERRIDE_SPELL 10 struct OverrideSpellDataEntry @@ -2018,12 +2097,9 @@ struct PlayerConditionEntry int64 RaceMask; LocalizedString* FailureDescription; uint32 ID; - uint8 Flags; uint16 MinLevel; uint16 MaxLevel; int32 ClassMask; - int8 Gender; - int8 NativeGender; uint32 SkillLogic; uint8 LanguageID; uint8 MinLanguage; @@ -2032,8 +2108,6 @@ struct PlayerConditionEntry uint8 MaxReputation; uint32 ReputationLogic; int8 CurrentPvpFaction; - uint8 MinPVPRank; - uint8 MaxPVPRank; uint8 PvpMedal; uint32 PrevQuestLogic; uint32 CurrQuestLogic; @@ -2047,31 +2121,36 @@ struct PlayerConditionEntry uint8 PartyStatus; uint8 LifetimeMaxPVPRank; uint32 AchievementLogic; - uint32 LfgLogic; + int8 Gender; + int8 NativeGender; uint32 AreaLogic; + uint32 LfgLogic; uint32 CurrencyLogic; uint16 QuestKillID; uint32 QuestKillLogic; int8 MinExpansionLevel; int8 MaxExpansionLevel; - int8 MinExpansionTier; - int8 MaxExpansionTier; - uint8 MinGuildLevel; - uint8 MaxGuildLevel; - uint8 PhaseUseFlags; - uint16 PhaseID; - uint32 PhaseGroupID; int32 MinAvgItemLevel; int32 MaxAvgItemLevel; uint16 MinAvgEquippedItemLevel; uint16 MaxAvgEquippedItemLevel; + uint8 PhaseUseFlags; + uint16 PhaseID; + uint32 PhaseGroupID; + uint8 Flags; int8 ChrSpecializationIndex; int8 ChrSpecializationRole; + uint32 ModifierTreeID; int8 PowerType; uint8 PowerTypeComp; uint8 PowerTypeValue; - uint32 ModifierTreeID; int32 WeaponSubclassMask; + uint8 MaxGuildLevel; + uint8 MinGuildLevel; + int8 MaxExpansionTier; + int8 MinExpansionTier; + uint8 MinPVPRank; + uint8 MaxPVPRank; uint16 SkillID[4]; uint16 MinSkill[4]; uint16 MaxSkill[4]; @@ -2088,10 +2167,10 @@ struct PlayerConditionEntry int32 AuraSpellID[4]; uint8 AuraStacks[4]; uint16 Achievement[4]; + uint16 AreaID[4]; uint8 LfgStatus[4]; uint8 LfgCompare[4]; uint32 LfgValue[4]; - uint16 AreaID[4]; uint32 CurrencyID[4]; uint32 CurrencyCount[4]; uint32 QuestKillMonster[6]; @@ -2113,25 +2192,26 @@ struct PowerTypeEntry uint32 ID; char const* NameGlobalStringTag; char const* CostGlobalStringTag; - float RegenPeace; - float RegenCombat; - int16 MaxBasePower; - int16 RegenInterruptTimeMS; - int16 Flags; int8 PowerTypeEnum; int8 MinPower; + int16 MaxBasePower; int8 CenterPower; int8 DefaultPower; int8 DisplayModifier; + int16 RegenInterruptTimeMS; + float RegenPeace; + float RegenCombat; + int16 Flags; }; struct PrestigeLevelInfoEntry { uint32 ID; LocalizedString* Name; + int32 PrestigeLevel; int32 BadgeTextureFileDataID; - uint8 PrestigeLevel; uint8 Flags; + int32 AwardedAchievementID; bool IsDisabled() const { return (Flags & PRESTIGE_FLAG_DISABLED) != 0; } }; @@ -2155,35 +2235,32 @@ struct PVPItemEntry uint8 ItemLevelDelta; }; -struct PvpRewardEntry -{ - uint32 ID; - int32 HonorLevel; - int32 PrestigeLevel; - int32 RewardPackID; -}; - struct PvpTalentEntry { - uint32 ID; LocalizedString* Description; + uint32 ID; + int32 SpecID; int32 SpellID; int32 OverridesSpellID; - int32 ActionBarSpellID; - int32 TierID; - int32 ColumnIndex; int32 Flags; - int32 ClassID; - int32 SpecID; - int32 Role; + int32 ActionBarSpellID; + int32 PvpTalentCategoryID; + int32 LevelRequired; +}; + +struct PvpTalentCategoryEntry +{ + uint32 ID; + uint8 TalentSlotMask; }; -struct PvpTalentUnlockEntry +struct PvpTalentSlotUnlockEntry { uint32 ID; - int32 TierID; - int32 ColumnIndex; - int32 HonorLevel; + int8 Slot; + int32 LevelRequired; + int32 DeathKnightLevelRequired; + int32 DemonHunterLevelRequired; }; struct QuestFactionRewardEntry @@ -2201,10 +2278,10 @@ struct QuestMoneyRewardEntry struct QuestPackageItemEntry { uint32 ID; - int32 ItemID; uint16 PackageID; - uint8 DisplayType; + int32 ItemID; uint32 ItemQuantity; + uint8 DisplayType; }; struct QuestSortEntry @@ -2229,6 +2306,7 @@ struct QuestXPEntry struct RandPropPointsEntry { uint32 ID; + int32 DamageReplaceStat; uint32 Epic[5]; uint32 Superior[5]; uint32 Good[5]; @@ -2237,11 +2315,11 @@ struct RandPropPointsEntry struct RewardPackEntry { uint32 ID; + int32 CharTitleID; uint32 Money; - float ArtifactXPMultiplier; int8 ArtifactXPDifficulty; + float ArtifactXPMultiplier; uint8 ArtifactXPCategoryID; - int32 CharTitleID; uint32 TreasurePickerID; }; @@ -2268,14 +2346,6 @@ struct RulesetItemUpgradeEntry uint16 ItemUpgradeID; }; -struct SandboxScalingEntry -{ - uint32 ID; - int32 MinLevel; - int32 MaxLevel; - int32 Flags; -}; - struct ScalingStatDistributionEntry { uint32 ID; @@ -2289,8 +2359,9 @@ struct ScenarioEntry uint32 ID; LocalizedString* Name; uint16 AreaTableID; - uint8 Flags; uint8 Type; + uint8 Flags; + uint32 UiTextureKitID; }; struct ScenarioStepEntry @@ -2299,12 +2370,14 @@ struct ScenarioStepEntry LocalizedString* Description; LocalizedString* Title; uint16 ScenarioID; - uint16 Supersedes; // Used in conjunction with Proving Grounds scenarios, when sequencing steps (Not using step order?) + uint32 Criteriatreeid; uint16 RewardQuestID; + 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; - uint32 Criteriatreeid; - int32 RelatedStep; // Bonus step can only be completed if scenario is in the step specified in this field + uint32 VisibilityPlayerConditionID; + uint16 WidgetSetID; // helpers bool IsBonusObjective() const @@ -2342,33 +2415,38 @@ struct SceneScriptTextEntry struct SkillLineEntry { - uint32 ID; LocalizedString* DisplayName; - LocalizedString* Description; LocalizedString* AlternateVerb; - uint16 Flags; + LocalizedString* Description; + LocalizedString* HordeDisplayName; + char const* OverrideSourceInfoDisplayName; + uint32 ID; int8 CategoryID; - int8 CanLink; int32 SpellIconFileID; + int8 CanLink; uint32 ParentSkillLineID; + int32 ParentTierIndex; + uint16 Flags; + int32 SpellBookSpellID; }; struct SkillLineAbilityEntry { int64 RaceMask; uint32 ID; + int16 SkillLine; int32 Spell; + int16 MinSkillLineRank; + int32 ClassMask; int32 SupercedesSpell; - int16 SkillLine; + int8 AcquireMethod; int16 TrivialSkillLineRankHigh; int16 TrivialSkillLineRankLow; + int8 Flags; + int8 NumSkillUps; int16 UniqueBit; int16 TradeSkillCategoryID; - int8 NumSkillUps; - int32 ClassMask; - int16 MinSkillLineRank; - int8 AcquireMethod; - int8 Flags; + int16 SkillupSkillLineID; }; struct SkillRaceClassInfoEntry @@ -2376,28 +2454,28 @@ struct SkillRaceClassInfoEntry uint32 ID; int64 RaceMask; int16 SkillID; + int32 ClassMask; uint16 Flags; - int16 SkillTierID; int8 Availability; int8 MinLevel; - int32 ClassMask; + int16 SkillTierID; }; struct SoundKitEntry { uint32 ID; + uint8 SoundType; float VolumeFloat; + uint16 Flags; float MinDistance; float DistanceCutoff; - uint16 Flags; - uint16 SoundEntriesAdvancedID; - uint8 SoundType; - uint8 DialogType; uint8 EAXDef; + uint32 SoundKitAdvancedID; float VolumeVariationPlus; float VolumeVariationMinus; float PitchVariationPlus; float PitchVariationMinus; + int8 DialogType; float PitchAdjust; uint16 BusOverwriteID; uint8 MaxInstances; @@ -2406,47 +2484,38 @@ struct SoundKitEntry struct SpecializationSpellsEntry { LocalizedString* Description; + uint32 ID; + uint16 SpecID; int32 SpellID; int32 OverridesSpellID; - uint16 SpecID; uint8 DisplayOrder; - uint32 ID; -}; - -struct SpellEntry -{ - uint32 ID; - LocalizedString* Name; - LocalizedString* NameSubtext; - LocalizedString* Description; - LocalizedString* AuraDescription; }; struct SpellAuraOptionsEntry { uint32 ID; - int32 ProcCharges; - int32 ProcTypeMask; - int32 ProcCategoryRecovery; - uint16 CumulativeAura; - uint16 SpellProcsPerMinuteID; uint8 DifficultyID; + uint16 CumulativeAura; + int32 ProcCategoryRecovery; uint8 ProcChance; + int32 ProcCharges; + uint16 SpellProcsPerMinuteID; + int32 ProcTypeMask[2]; int32 SpellID; }; struct SpellAuraRestrictionsEntry { uint32 ID; - int32 CasterAuraSpell; - int32 TargetAuraSpell; - int32 ExcludeCasterAuraSpell; - int32 ExcludeTargetAuraSpell; uint8 DifficultyID; uint8 CasterAuraState; uint8 TargetAuraState; uint8 ExcludeCasterAuraState; uint8 ExcludeTargetAuraState; + int32 CasterAuraSpell; + int32 TargetAuraSpell; + int32 ExcludeCasterAuraSpell; + int32 ExcludeTargetAuraSpell; int32 SpellID; }; @@ -2454,33 +2523,33 @@ struct SpellCastTimesEntry { uint32 ID; int32 Base; - int32 Minimum; int16 PerLevel; + int32 Minimum; }; struct SpellCastingRequirementsEntry { uint32 ID; int32 SpellID; - uint16 MinFactionID; - uint16 RequiredAreasID; - uint16 RequiresSpellFocus; uint8 FacingCasterFlags; + uint16 MinFactionID; int8 MinReputation; + uint16 RequiredAreasID; uint8 RequiredAuraVision; + uint16 RequiresSpellFocus; }; struct SpellCategoriesEntry { uint32 ID; - int16 Category; - int16 StartRecoveryCategory; - int16 ChargeCategory; uint8 DifficultyID; + int16 Category; int8 DefenseType; int8 DispelType; int8 Mechanic; int8 PreventionType; + int16 StartRecoveryCategory; + int16 ChargeCategory; int32 SpellID; }; @@ -2488,10 +2557,10 @@ struct SpellCategoryEntry { uint32 ID; LocalizedString* Name; - int32 ChargeRecoveryTime; int8 Flags; uint8 UsesPerWeek; int8 MaxCharges; + int32 ChargeRecoveryTime; int32 TypeMask; }; @@ -2499,18 +2568,18 @@ struct SpellClassOptionsEntry { uint32 ID; int32 SpellID; - flag128 SpellClassMask; - uint8 SpellClassSet; uint32 ModalNextSpell; + uint8 SpellClassSet; + flag128 SpellClassMask; }; struct SpellCooldownsEntry { uint32 ID; + uint8 DifficultyID; int32 CategoryRecoveryTime; int32 RecoveryTime; int32 StartRecoveryTime; - uint8 DifficultyID; int32 SpellID; }; @@ -2518,41 +2587,40 @@ struct SpellDurationEntry { uint32 ID; int32 Duration; - int32 MaxDuration; uint32 DurationPerLevel; + int32 MaxDuration; }; struct SpellEffectEntry { uint32 ID; - uint32 Effect; - int32 EffectBasePoints; - int32 EffectIndex; - int32 EffectAura; int32 DifficultyID; + int32 EffectIndex; + uint32 Effect; float EffectAmplitude; + int32 EffectAttributes; + int16 EffectAura; int32 EffectAuraPeriod; float EffectBonusCoefficient; float EffectChainAmplitude; int32 EffectChainTargets; - int32 EffectDieSides; int32 EffectItemType; int32 EffectMechanic; float EffectPointsPerResource; + float EffectPosFacing; float EffectRealPointsPerLevel; int32 EffectTriggerSpell; - float EffectPosFacing; - int32 EffectAttributes; float BonusCoefficientFromAP; float PvpMultiplier; float Coefficient; float Variance; float ResourceCoefficient; float GroupSizeBasePointsCoefficient; - flag128 EffectSpellClassMask; + float EffectBasePoints; int32 EffectMiscValue[2]; uint32 EffectRadiusIndex[2]; - uint32 ImplicitTarget[2]; + flag128 EffectSpellClassMask; + int16 ImplicitTarget[2]; int32 SpellID; }; @@ -2560,9 +2628,9 @@ struct SpellEquippedItemsEntry { uint32 ID; int32 SpellID; + int8 EquippedItemClass; int32 EquippedItemInvTypes; int32 EquippedItemSubclass; - int8 EquippedItemClass; }; struct SpellFocusObjectEntry @@ -2587,10 +2655,12 @@ struct SpellItemEnchantmentEntry { uint32 ID; LocalizedString* Name; + LocalizedString* HordeName; uint32 EffectArg[MAX_ITEM_ENCHANTMENT_EFFECTS]; float EffectScalingPoints[MAX_ITEM_ENCHANTMENT_EFFECTS]; uint32 TransmogCost; uint32 IconFileDataID; + uint32 TransmogPlayerConditionID; int16 EffectPointsMin[MAX_ITEM_ENCHANTMENT_EFFECTS]; uint16 ItemVisual; uint16 Flags; @@ -2599,19 +2669,18 @@ struct SpellItemEnchantmentEntry uint16 ItemLevel; uint8 Charges; uint8 Effect[MAX_ITEM_ENCHANTMENT_EFFECTS]; + int8 ScalingClass; + int8 ScalingClassRestricted; uint8 ConditionID; uint8 MinLevel; uint8 MaxLevel; - int8 ScalingClass; - int8 ScalingClassRestricted; - uint32 TransmogPlayerConditionID; }; struct SpellItemEnchantmentConditionEntry { uint32 ID; - uint32 LtOperand[5]; uint8 LtOperandType[5]; + uint32 LtOperand[5]; uint8 Operator[5]; uint8 RtOperandType[5]; uint8 RtOperand[5]; @@ -2629,10 +2698,10 @@ struct SpellLearnSpellEntry struct SpellLevelsEntry { uint32 ID; + uint8 DifficultyID; int16 BaseLevel; int16 MaxLevel; int16 SpellLevel; - uint8 DifficultyID; uint8 MaxPassiveAuraLevel; int32 SpellID; }; @@ -2640,43 +2709,50 @@ struct SpellLevelsEntry struct SpellMiscEntry { uint32 ID; + uint8 DifficultyID; uint16 CastingTimeIndex; uint16 DurationIndex; uint16 RangeIndex; uint8 SchoolMask; - int32 SpellIconFileDataID; float Speed; - int32 ActiveIconFileDataID; float LaunchDelay; - uint8 DifficultyID; + float MinDuration; + int32 SpellIconFileDataID; + int32 ActiveIconFileDataID; int32 Attributes[14]; int32 SpellID; }; +struct SpellNameEntry +{ + uint32 ID; // SpellID + LocalizedString* Name; +}; + struct SpellPowerEntry { - int32 ManaCost; - float PowerCostPct; - float PowerPctPerSecond; - int32 RequiredAuraSpellID; - float PowerCostMaxPct; - uint8 OrderIndex; - int8 PowerType; uint32 ID; + uint8 OrderIndex; + int32 ManaCost; int32 ManaCostPerLevel; int32 ManaPerSecond; - uint32 OptionalCost; // Spell uses [ManaCost, ManaCost+ManaCostAdditional] power - affects tooltip parsing as multiplier on SpellEffectEntry::EffectPointsPerResource - // only SPELL_EFFECT_WEAPON_DAMAGE_NOSCHOOL, SPELL_EFFECT_WEAPON_PERCENT_DAMAGE, SPELL_EFFECT_WEAPON_DAMAGE, SPELL_EFFECT_NORMALIZED_WEAPON_DMG uint32 PowerDisplayID; int32 AltPowerBarID; + float PowerCostPct; + float PowerCostMaxPct; + float PowerPctPerSecond; + int8 PowerType; + int32 RequiredAuraSpellID; + uint32 OptionalCost; // Spell uses [ManaCost, ManaCost+ManaCostAdditional] power - affects tooltip parsing as multiplier on SpellEffectEntry::EffectPointsPerResource + // only SPELL_EFFECT_WEAPON_DAMAGE_NOSCHOOL, SPELL_EFFECT_WEAPON_PERCENT_DAMAGE, SPELL_EFFECT_WEAPON_DAMAGE, SPELL_EFFECT_NORMALIZED_WEAPON_DMG int32 SpellID; }; struct SpellPowerDifficultyEntry { + uint32 ID; uint8 DifficultyID; uint8 OrderIndex; - uint32 ID; }; struct SpellProcsPerMinuteEntry @@ -2689,9 +2765,9 @@ struct SpellProcsPerMinuteEntry struct SpellProcsPerMinuteModEntry { uint32 ID; - float Coeff; - int16 Param; uint8 Type; + int16 Param; + float Coeff; uint16 SpellProcsPerMinuteID; }; @@ -2709,9 +2785,9 @@ struct SpellRangeEntry uint32 ID; LocalizedString* DisplayName; LocalizedString* DisplayNameShort; + uint8 Flags; float RangeMin[2]; float RangeMax[2]; - uint8 Flags; }; #define MAX_SPELL_REAGENTS 8 @@ -2728,19 +2804,19 @@ struct SpellScalingEntry { uint32 ID; int32 SpellID; - int16 ScalesFromItemLevel; int32 Class; uint32 MinScalingLevel; uint32 MaxScalingLevel; + int16 ScalesFromItemLevel; }; struct SpellShapeshiftEntry { uint32 ID; int32 SpellID; + int8 StanceBarOrder; int32 ShapeshiftExclude[2]; int32 ShapeshiftMask[2]; - int8 StanceBarOrder; }; #define MAX_SHAPESHIFT_SPELLS 8 @@ -2749,13 +2825,13 @@ struct SpellShapeshiftFormEntry { uint32 ID; LocalizedString* Name; - float DamageVariance; + int8 CreatureType; int32 Flags; + int32 AttackIconFileID; + int8 BonusActionBar; int16 CombatRoundTime; + float DamageVariance; uint16 MountTypeID; - int8 CreatureType; - int8 BonusActionBar; - int32 AttackIconFileID; uint32 CreatureDisplayID[4]; uint32 PresetSpellID[MAX_SHAPESHIFT_SPELLS]; }; @@ -2763,13 +2839,13 @@ struct SpellShapeshiftFormEntry struct SpellTargetRestrictionsEntry { uint32 ID; - float ConeDegrees; - float Width; - int32 Targets; - int16 TargetCreatureType; uint8 DifficultyID; + float ConeDegrees; uint8 MaxTargets; uint32 MaxTargetLevel; + int16 TargetCreatureType; + int32 Targets; + float Width; int32 SpellID; }; @@ -2779,35 +2855,35 @@ struct SpellTotemsEntry { uint32 ID; int32 SpellID; - int32 Totem[MAX_SPELL_TOTEMS]; uint16 RequiredTotemCategoryID[MAX_SPELL_TOTEMS]; + int32 Totem[MAX_SPELL_TOTEMS]; }; struct SpellXSpellVisualEntry { - uint32 SpellVisualID; uint32 ID; + uint8 DifficultyID; + uint32 SpellVisualID; float Probability; - uint16 CasterPlayerConditionID; - uint16 CasterUnitConditionID; - uint16 ViewerPlayerConditionID; - uint16 ViewerUnitConditionID; - int32 SpellIconFileID; - int32 ActiveIconFileID; uint8 Flags; - uint8 DifficultyID; uint8 Priority; + int32 SpellIconFileID; + int32 ActiveIconFileID; + uint16 ViewerUnitConditionID; + uint32 ViewerPlayerConditionID; + uint16 CasterUnitConditionID; + uint32 CasterPlayerConditionID; int32 SpellID; }; struct SummonPropertiesEntry { uint32 ID; - int32 Flags; int32 Control; int32 Faction; int32 Title; int32 Slot; + int32 Flags; }; #define TACTKEY_SIZE 16 @@ -2822,48 +2898,49 @@ struct TalentEntry { uint32 ID; LocalizedString* Description; - uint32 SpellID; - uint32 OverridesSpellID; - uint16 SpecID; uint8 TierID; - uint8 ColumnIndex; uint8 Flags; - uint8 CategoryMask[2]; + uint8 ColumnIndex; uint8 ClassID; + uint16 SpecID; + uint32 SpellID; + uint32 OverridesSpellID; + uint8 CategoryMask[2]; }; struct TaxiNodesEntry { - uint32 ID; LocalizedString* Name; DBCPosition3D Pos; - int32 MountCreatureID[2]; DBCPosition2D MapOffset; - float Facing; DBCPosition2D FlightMapOffset; + uint32 ID; uint16 ContinentID; uint16 ConditionID; uint16 CharacterBitNumber; uint8 Flags; int32 UiTextureKitID; + float Facing; uint32 SpecialIconConditionID; + uint32 VisibilityConditionID; + int32 MountCreatureID[2]; }; struct TaxiPathEntry { + uint32 ID; uint16 FromTaxiNode; uint16 ToTaxiNode; - uint32 ID; uint32 Cost; }; struct TaxiPathNodeEntry { DBCPosition3D Loc; + uint32 ID; uint16 PathID; + int32 NodeIndex; uint16 ContinentID; - uint8 NodeIndex; - uint32 ID; uint8 Flags; uint32 Delay; uint16 ArrivalEventID; @@ -2874,17 +2951,17 @@ struct TotemCategoryEntry { uint32 ID; LocalizedString* Name; - int32 TotemCategoryMask; uint8 TotemCategoryType; + int32 TotemCategoryMask; }; struct ToyEntry { LocalizedString* SourceText; + uint32 ID; int32 ItemID; uint8 Flags; int8 SourceTypeEnum; - uint32 ID; }; struct TransmogHolidayEntry @@ -2896,15 +2973,15 @@ struct TransmogHolidayEntry struct TransmogSetEntry { LocalizedString* Name; - uint16 ParentTransmogSetID; - int16 UiOrder; - uint8 ExpansionID; uint32 ID; - int32 Flags; - uint32 TrackingQuestID; int32 ClassMask; - int32 ItemNameDescriptionID; + uint32 TrackingQuestID; + int32 Flags; uint32 TransmogSetGroupID; + int32 ItemNameDescriptionID; + uint16 ParentTransmogSetID; + uint8 ExpansionID; + int16 UiOrder; }; struct TransmogSetGroupEntry @@ -2924,20 +3001,69 @@ struct TransmogSetItemEntry struct TransportAnimationEntry { uint32 ID; - uint32 TimeIndex; DBCPosition3D Pos; uint8 SequenceID; + uint32 TimeIndex; int32 TransportID; }; struct TransportRotationEntry { uint32 ID; - uint32 TimeIndex; float Rot[4]; + uint32 TimeIndex; int32 GameObjectsID; }; +struct UiMapEntry +{ + LocalizedString* Name; + uint32 ID; + int32 ParentUiMapID; + int32 Flags; + int32 System; + int32 Type; + uint32 LevelRangeMin; + uint32 LevelRangeMax; + int32 BountySetID; + uint32 BountyDisplayLocation; + int32 VisibilityPlayerConditionID; + int8 HelpTextPosition; + int32 BkgAtlasID; +}; + +struct UiMapAssignmentEntry +{ + DBCPosition2D UiMin; + DBCPosition2D UiMax; + DBCPosition3D Region[2]; + uint32 ID; + int32 UiMapID; + int32 OrderIndex; + int32 MapID; + int32 AreaID; + int32 WmoDoodadPlacementID; + int32 WmoGroupID; +}; + +struct UiMapLinkEntry +{ + DBCPosition2D UiMin; + DBCPosition2D UiMax; + uint32 ID; + int32 ParentUiMapID; + int32 OrderIndex; + int32 ChildUiMapID; +}; + +struct UiMapXMapArtEntry +{ + uint32 ID; + int32 PhaseID; + int32 UiMapArtID; + int32 UiMapID; +}; + struct UnitPowerBarEntry { uint32 ID; @@ -2945,18 +3071,18 @@ struct UnitPowerBarEntry LocalizedString* Cost; LocalizedString* OutOfError; LocalizedString* ToolTip; + uint32 MinPower; + uint32 MaxPower; + uint16 StartPower; + uint8 CenterPower; float RegenerationPeace; float RegenerationCombat; - int32 FileDataID[6]; - int32 Color[6]; + uint8 BarType; + uint16 Flags; float StartInset; float EndInset; - uint16 StartPower; - uint16 Flags; - uint8 CenterPower; - uint8 BarType; - uint32 MinPower; - uint32 MaxPower; + int32 FileDataID[6]; + int32 Color[6]; }; #define MAX_VEHICLE_SEATS 8 @@ -2965,6 +3091,7 @@ struct VehicleEntry { uint32 ID; int32 Flags; + uint8 FlagsB; float TurnSpeed; float PitchSpeed; float PitchMin; @@ -2976,21 +3103,22 @@ struct VehicleEntry float FacingLimitRight; float FacingLimitLeft; float CameraYawOffset; - uint16 SeatID[MAX_VEHICLE_SEATS]; - uint16 VehicleUIIndicatorID; - uint16 PowerDisplayID[3]; - uint8 FlagsB; uint8 UiLocomotionType; + uint16 VehicleUIIndicatorID; int32 MissileTargetingID; + uint16 SeatID[8]; + uint16 PowerDisplayID[3]; }; struct VehicleSeatEntry { uint32 ID; + DBCPosition3D AttachmentOffset; + DBCPosition3D CameraOffset; int32 Flags; int32 FlagsB; int32 FlagsC; - DBCPosition3D AttachmentOffset; + int8 AttachmentID; float EnterPreDelay; float EnterSpeed; float EnterGravity; @@ -2998,6 +3126,12 @@ struct VehicleSeatEntry float EnterMaxDuration; float EnterMinArcHeight; float EnterMaxArcHeight; + int32 EnterAnimStart; + int32 EnterAnimLoop; + int32 RideAnimStart; + int32 RideAnimLoop; + int32 RideUpperAnimStart; + int32 RideUpperAnimLoop; float ExitPreDelay; float ExitSpeed; float ExitGravity; @@ -3005,34 +3139,34 @@ struct VehicleSeatEntry float ExitMaxDuration; float ExitMinArcHeight; float ExitMaxArcHeight; + int32 ExitAnimStart; + int32 ExitAnimLoop; + int32 ExitAnimEnd; + int16 VehicleEnterAnim; + int8 VehicleEnterAnimBone; + int16 VehicleExitAnim; + int8 VehicleExitAnimBone; + int16 VehicleRideAnimLoop; + int8 VehicleRideAnimLoopBone; + int8 PassengerAttachmentID; float PassengerYaw; float PassengerPitch; float PassengerRoll; float VehicleEnterAnimDelay; float VehicleExitAnimDelay; + int8 VehicleAbilityDisplay; + uint32 EnterUISoundID; + uint32 ExitUISoundID; + int32 UiSkinFileDataID; float CameraEnteringDelay; float CameraEnteringDuration; float CameraExitingDelay; float CameraExitingDuration; - DBCPosition3D CameraOffset; float CameraPosChaseRate; float CameraFacingChaseRate; float CameraEnteringZoom; float CameraSeatZoomMin; float CameraSeatZoomMax; - int32 UiSkinFileDataID; - int16 EnterAnimStart; - int16 EnterAnimLoop; - int16 RideAnimStart; - int16 RideAnimLoop; - int16 RideUpperAnimStart; - int16 RideUpperAnimLoop; - int16 ExitAnimStart; - int16 ExitAnimLoop; - int16 ExitAnimEnd; - int16 VehicleEnterAnim; - int16 VehicleExitAnim; - int16 VehicleRideAnimLoop; int16 EnterAnimKitID; int16 RideAnimKitID; int16 ExitAnimKitID; @@ -3040,14 +3174,6 @@ struct VehicleSeatEntry int16 VehicleRideAnimKitID; int16 VehicleExitAnimKitID; int16 CameraModeID; - int8 AttachmentID; - int8 PassengerAttachmentID; - int8 VehicleEnterAnimBone; - int8 VehicleExitAnimBone; - int8 VehicleRideAnimLoopBone; - int8 VehicleAbilityDisplay; - uint32 EnterUISoundID; - uint32 ExitUISoundID; bool CanEnterOrExit() const { @@ -3068,97 +3194,59 @@ struct VehicleSeatEntry struct WMOAreaTableEntry { LocalizedString* AreaName; + uint32 ID; + uint16 WmoID; // used in root WMO + uint8 NameSetID; // used in adt file int32 WmoGroupID; // used in group WMO + uint8 SoundProviderPref; + uint8 SoundProviderPrefUnderwater; uint16 AmbienceID; + uint16 UwAmbience; uint16 ZoneMusic; + uint32 UwZoneMusic; uint16 IntroSound; - uint16 AreaTableID; uint16 UwIntroSound; - uint16 UwAmbience; - uint8 NameSetID; // used in adt file - uint8 SoundProviderPref; - uint8 SoundProviderPrefUnderwater; + uint16 AreaTableID; uint8 Flags; - uint32 ID; - uint32 UwZoneMusic; - uint16 WmoID; // used in root WMO }; struct WorldEffectEntry { uint32 ID; - int32 TargetAsset; - uint16 CombatConditionID; - uint8 TargetType; - uint8 WhenToDisplay; uint32 QuestFeedbackEffectID; + uint8 WhenToDisplay; + uint8 TargetType; + int32 TargetAsset; uint32 PlayerConditionID; -}; - -struct WorldMapAreaEntry -{ - char const* AreaName; - float LocLeft; - float LocRight; - float LocTop; - float LocBottom; - uint32 Flags; - int16 MapID; - uint16 AreaID; - int16 DisplayMapID; - uint16 DefaultDungeonFloor; - uint16 ParentWorldMapID; - uint8 LevelRangeMin; - uint8 LevelRangeMax; - uint8 BountySetID; - uint8 BountyDisplayLocation; - uint32 ID; - uint32 VisibilityPlayerConditionID; + uint16 CombatConditionID; }; #define MAX_WORLD_MAP_OVERLAY_AREA_IDX 4 struct WorldMapOverlayEntry { - char const* TextureName; uint32 ID; + uint32 UiMapArtID; uint16 TextureWidth; uint16 TextureHeight; - uint32 MapAreaID; // idx in WorldMapArea.dbc int32 OffsetX; int32 OffsetY; int32 HitRectTop; - int32 HitRectLeft; int32 HitRectBottom; + int32 HitRectLeft; int32 HitRectRight; uint32 PlayerConditionID; uint32 Flags; uint32 AreaID[MAX_WORLD_MAP_OVERLAY_AREA_IDX]; }; -struct WorldMapTransformsEntry -{ - uint32 ID; - DBCPosition3D RegionMin; - DBCPosition3D RegionMax; - DBCPosition2D RegionOffset; - float RegionScale; - uint16 MapID; - uint16 AreaID; - uint16 NewMapID; - uint16 NewDungeonMapID; - uint16 NewAreaID; - uint8 Flags; - int32 Priority; -}; - struct WorldSafeLocsEntry { uint32 ID; LocalizedString* AreaName; DBCPosition3D Loc; - float Facing; uint16 MapID; + float Facing; }; #pragma pack(pop) diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index 6b269dbe406..2655e0e0a12 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -44,11 +44,11 @@ enum LevelLimit // Client expected level limitation, like as used in DBC item max levels for "until max player level" // use as default max player level, must be fit max level for used client // also see MAX_LEVEL and STRONG_MAX_LEVEL define - DEFAULT_MAX_LEVEL = 110, + DEFAULT_MAX_LEVEL = 120, // client supported max level for player/pets/etc. Avoid overflow or client stability affected. // also see GT_MAX_LEVEL define - MAX_LEVEL = 110, + MAX_LEVEL = 120, // Server side limitation. Base at used code requirements. // also see MAX_LEVEL and GT_MAX_LEVEL define @@ -58,7 +58,7 @@ enum LevelLimit enum BattlegroundBracketId // bracketId for level ranges { BG_BRACKET_ID_FIRST = 0, - BG_BRACKET_ID_LAST = 11, + BG_BRACKET_ID_LAST = 12, // must be max value in PvPDificulty slot + 1 MAX_BATTLEGROUND_BRACKETS @@ -166,7 +166,7 @@ enum ArtifactPowerFlag : uint8 #define MAX_ARTIFACT_TIER 1 -#define BATTLE_PET_SPECIES_MAX_ID 2164 +#define BATTLE_PET_SPECIES_MAX_ID 2480 enum ChrSpecializationFlag { @@ -502,10 +502,13 @@ enum CriteriaTypes : uint8 CRITERIA_TYPE_TRANSMOG_SET_UNLOCKED = 205, CRITERIA_TYPE_GAIN_PARAGON_REPUTATION = 206, CRITERIA_TYPE_EARN_HONOR_XP = 207, - CRITERIA_TYPE_RELIC_TALENT_UNLOCKED = 211 + CRITERIA_TYPE_RELIC_TALENT_UNLOCKED = 211, + CRITERIA_TYPE_REACH_ACCOUNT_HONOR_LEVEL = 213, + CRITERIA_TREE_HEART_OF_AZEROTH_ARTIFACT_POWER_EARNED= 214, + CRITERIA_TREE_HEART_OF_AZEROTH_LEVEL_REACHED = 215 }; -#define CRITERIA_TYPE_TOTAL 213 +#define CRITERIA_TYPE_TOTAL 216 enum CriteriaTreeFlags : uint16 { @@ -608,6 +611,11 @@ enum Difficulty : uint8 DIFFICULTY_WORLD_PVP_SCENARIO_2 = 32, DIFFICULTY_TIMEWALKING_RAID = 33, DIFFICULTY_PVP = 34, + DIFFICULTY_NORMAL_ISLAND = 38, + DIFFICULTY_HEROIC_ISLAND = 39, + DIFFICULTY_MYTHIC_ISLAND = 40, + DIFFICULTY_PVP_ISLAND = 45, + DIFFICULTY_NORMAL_WARFRONT = 147, MAX_DIFFICULTY }; @@ -643,6 +651,20 @@ enum SpawnMask SPAWNMASK_RAID_ALL = (SPAWNMASK_RAID_NORMAL_ALL | SPAWNMASK_RAID_HEROIC_ALL) }; +enum class ExpectedStatType : uint8 +{ + CreatureHealth = 0, + PlayerHealth = 1, + CreatureAutoAttackDps = 2, + CreatureArmor = 3, + PlayerMana = 4, + PlayerPrimaryStat = 5, + PlayerSecondaryStat = 6, + ArmorConstant = 7, + None = 8, + CreatureSpellDamage = 9 +}; + enum FactionTemplateFlags { FACTION_TEMPLATE_ENEMY_SPAR = 0x00000020, // guessed, sparring with enemies? @@ -745,6 +767,68 @@ enum ItemBonusType ITEM_BONUS_OVERRIDE_REQUIRED_LEVEL = 18 }; +enum class ItemContext : uint8 +{ + NONE = 0, + Dungeon_Normal = 1, + Dungeon_Heroic = 2, + Raid_Normal = 3, + Raid_Raid_Finder = 4, + Raid_Heroic = 5, + Raid_Mythic = 6, + PVP_Unranked_1 = 7, + PVP_Ranked_1 = 8, + Scenario_Normal = 9, + Scenario_Heroic = 10, + Quest_Reward = 11, + Store = 12, + Trade_Skill = 13, + Vendor = 14, + Black_Market = 15, + Challenge_Mode_1 = 16, + Dungeon_Lvl_Up_1 = 17, + Dungeon_Lvl_Up_2 = 18, + Dungeon_Lvl_Up_3 = 19, + Dungeon_Lvl_Up_4 = 20, + Force_to_NONE = 21, + TimeWalker = 22, + Dungeon_Mythic = 23, + Pvp_Honor_Reward = 24, + World_Quest_1 = 25, + World_Quest_2 = 26, + World_Quest_3 = 27, + World_Quest_4 = 28, + World_Quest_5 = 29, + World_Quest_6 = 30, + Mission_Reward_1 = 31, + Mission_Reward_2 = 32, + Challenge_Mode_2 = 33, + Challenge_Mode_3 = 34, + Challenge_Mode_Jackpot = 35, + World_Quest_7 = 36, + World_Quest_8 = 37, + PVP_Ranked_2 = 38, + PVP_Ranked_3 = 39, + PVP_Ranked_4 = 40, + PVP_Unranked_2 = 41, + World_Quest_9 = 42, + World_Quest_10 = 43, + PVP_Ranked_5 = 44, + PVP_Ranked_6 = 45, + PVP_Ranked_7 = 46, + PVP_Unranked_3 = 47, + PVP_Unranked_4 = 48, + PVP_Unranked_5 = 49, + PVP_Unranked_6 = 50, + PVP_Unranked_7 = 51, + PVP_Ranked_8 = 52, + World_Quest_11 = 53, + World_Quest_12 = 54, + World_Quest_13 = 55, + PVP_Ranked_Jackpot = 56, + Tournament_Realm = 57, +}; + enum ItemLimitCategoryMode { ITEM_LIMIT_CATEGORY_MODE_HAVE = 0, // limit applied to amount items in inventory/bank @@ -917,7 +1001,7 @@ enum SpellShapeshiftFormFlags SHAPESHIFT_FORM_PREVENT_EMOTE_SOUNDS = 0x1000 }; -#define TaxiMaskSize 258 +#define TaxiMaskSize 286 typedef std::array<uint8, TaxiMaskSize> TaxiMask; enum TotemCategoryType @@ -989,8 +1073,7 @@ enum SummonPropFlags #define MAX_TALENT_TIERS 7 #define MAX_TALENT_COLUMNS 3 -#define MAX_PVP_TALENT_TIERS 6 -#define MAX_PVP_TALENT_COLUMNS 3 +#define MAX_PVP_TALENT_SLOTS 4 enum TaxiNodeFlags { @@ -1005,6 +1088,25 @@ enum TaxiPathNodeFlags TAXI_PATH_NODE_FLAG_STOP = 0x2 }; +enum UiMapSystem : int8 +{ + UI_MAP_SYSTEM_WORLD = 0, + UI_MAP_SYSTEM_TAXI = 1, + UI_MAP_SYSTEM_ADVENTURE = 2, + MAX_UI_MAP_SYSTEM = 3 +}; + +enum UiMapType : int8 +{ + UI_MAP_TYPE_COSMIC = 0, + UI_MAP_TYPE_WORLD = 1, + UI_MAP_TYPE_CONTINENT = 2, + UI_MAP_TYPE_ZONE = 3, + UI_MAP_TYPE_DUNGEON = 4, + UI_MAP_TYPE_MICRO = 5, + UI_MAP_TYPE_ORPHAN = 6, +}; + enum VehicleSeatFlags { VEHICLE_SEAT_FLAG_HAS_LOWER_ANIM_FOR_ENTER = 0x00000001, diff --git a/src/server/game/DataStores/GameTables.cpp b/src/server/game/DataStores/GameTables.cpp index 0dd01aa3930..c4232087a7c 100644 --- a/src/server/game/DataStores/GameTables.cpp +++ b/src/server/game/DataStores/GameTables.cpp @@ -29,7 +29,6 @@ GameTable<GtBarberShopCostBaseEntry> sBarberShopCostBaseGameTable; GameTable<GtBaseMPEntry> sBaseMPGameTable; GameTable<GtCombatRatingsEntry> sCombatRatingsGameTable; GameTable<GtCombatRatingsMultByILvl> sCombatRatingsMultByILvlGameTable; -GameTable<GtHonorLevelEntry> sHonorLevelGameTable; GameTable<GtHpPerStaEntry> sHpPerStaGameTable; GameTable<GtItemSocketCostPerLevelEntry> sItemSocketCostPerLevelGameTable; GameTable<GtNpcDamageByClassEntry> sNpcDamageByClassGameTable[MAX_EXPANSIONS]; @@ -118,7 +117,6 @@ void LoadGameTables(std::string const& dataPath) LOAD_GT(sCombatRatingsGameTable, "CombatRatings.txt"); LOAD_GT(sCombatRatingsMultByILvlGameTable, "CombatRatingsMultByILvl.txt"); LOAD_GT(sItemSocketCostPerLevelGameTable, "ItemSocketCostPerLevel.txt"); - LOAD_GT(sHonorLevelGameTable, "HonorLevel.txt"); LOAD_GT(sHpPerStaGameTable, "HpPerSta.txt"); LOAD_GT(sNpcDamageByClassGameTable[0], "NpcDamageByClass.txt"); LOAD_GT(sNpcDamageByClassGameTable[1], "NpcDamageByClassExp1.txt"); @@ -127,6 +125,7 @@ void LoadGameTables(std::string const& dataPath) LOAD_GT(sNpcDamageByClassGameTable[4], "NpcDamageByClassExp4.txt"); LOAD_GT(sNpcDamageByClassGameTable[5], "NpcDamageByClassExp5.txt"); LOAD_GT(sNpcDamageByClassGameTable[6], "NpcDamageByClassExp6.txt"); + LOAD_GT(sNpcDamageByClassGameTable[7], "NpcDamageByClassExp7.txt"); LOAD_GT(sNpcManaCostScalerGameTable, "NPCManaCostScaler.txt"); LOAD_GT(sNpcTotalHpGameTable[0], "NpcTotalHp.txt"); LOAD_GT(sNpcTotalHpGameTable[1], "NpcTotalHpExp1.txt"); @@ -135,6 +134,7 @@ void LoadGameTables(std::string const& dataPath) LOAD_GT(sNpcTotalHpGameTable[4], "NpcTotalHpExp4.txt"); LOAD_GT(sNpcTotalHpGameTable[5], "NpcTotalHpExp5.txt"); LOAD_GT(sNpcTotalHpGameTable[6], "NpcTotalHpExp6.txt"); + LOAD_GT(sNpcTotalHpGameTable[7], "NpcTotalHpExp7.txt"); LOAD_GT(sSpellScalingGameTable, "SpellScaling.txt"); LOAD_GT(sXpGameTable, "xp.txt"); diff --git a/src/server/game/DataStores/GameTables.h b/src/server/game/DataStores/GameTables.h index d265f2657a9..28365a7ff1c 100644 --- a/src/server/game/DataStores/GameTables.h +++ b/src/server/game/DataStores/GameTables.h @@ -103,12 +103,6 @@ struct GtCombatRatingsMultByILvl float JewelryMultiplier = 0.0f; }; -uint8 constexpr PRESTIGE_COLUMN_COUNT = 33; -struct GtHonorLevelEntry -{ - float Prestige[PRESTIGE_COLUMN_COUNT] = { }; -}; - struct GtHpPerStaEntry { float Health = 0.0f; @@ -176,6 +170,7 @@ struct GtSpellScalingEntry float Gem2 = 0.0f; float Gem3 = 0.0f; float Health = 0.0f; + float DamageReplaceStat = 0.0f; }; struct GtXpEntry @@ -214,7 +209,6 @@ TC_GAME_API extern GameTable<GtBarberShopCostBaseEntry> sBarberShopC TC_GAME_API extern GameTable<GtBaseMPEntry> sBaseMPGameTable; TC_GAME_API extern GameTable<GtCombatRatingsEntry> sCombatRatingsGameTable; TC_GAME_API extern GameTable<GtCombatRatingsMultByILvl> sCombatRatingsMultByILvlGameTable; -TC_GAME_API extern GameTable<GtHonorLevelEntry> sHonorLevelGameTable; TC_GAME_API extern GameTable<GtHpPerStaEntry> sHpPerStaGameTable; TC_GAME_API extern GameTable<GtItemSocketCostPerLevelEntry> sItemSocketCostPerLevelGameTable; TC_GAME_API extern GameTable<GtNpcDamageByClassEntry> sNpcDamageByClassGameTable[MAX_EXPANSIONS]; @@ -290,6 +284,7 @@ inline float GetSpellScalingColumnForClass(GtSpellScalingEntry const* row, int32 case CLASS_DEMON_HUNTER: return row->DemonHunter; case -1: + case -7: return row->Item; case -2: return row->Consumable; @@ -301,6 +296,8 @@ inline float GetSpellScalingColumnForClass(GtSpellScalingEntry const* row, int32 return row->Gem3; case -6: return row->Health; + case -8: + return row->DamageReplaceStat; default: break; } |
