diff options
author | Shauren <shauren.trinity@gmail.com> | 2016-05-27 23:13:47 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2016-05-27 23:14:36 +0200 |
commit | b82332487afd7233850e7eed996615b3fdd7248c (patch) | |
tree | 4f440c5643049ff69c2544560fd750629c7a5552 /src | |
parent | 31009887e35cf8db6e94bf5b6870b62538364bc4 (diff) |
Core/DataStores: Updated db2 to 7.0.3.21737
Diffstat (limited to 'src')
32 files changed, 7680 insertions, 1758 deletions
diff --git a/src/common/Define.h b/src/common/Define.h index 5bbb77916f5..784bb4dd8ca 100644 --- a/src/common/Define.h +++ b/src/common/Define.h @@ -164,10 +164,7 @@ enum DBCFormer FT_FLOAT = 'f', // float FT_INT = 'i', // uint32 FT_BYTE = 'b', // uint8 - FT_LONG = 'l', // uint64 - FT_SHORT = 'h', // uint16 - FT_SORT = 'd', // sorted by this field but not present in DB2 data block (calculated) - FT_IND = 'n' // sorted by this field + FT_SHORT = 'h' // uint16 }; #endif //TRINITY_DEFINE_H diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp index 6055abdd08d..8dbfbb150a7 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp @@ -127,7 +127,6 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_SEL_CHARACTER_EQUIPMENTSETS, "SELECT setguid, setindex, name, iconname, ignore_mask, item0, item1, item2, item3, item4, item5, item6, item7, item8, " "item9, item10, item11, item12, item13, item14, item15, item16, item17, item18 FROM character_equipmentsets WHERE guid = ? ORDER BY setindex", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_CHARACTER_BGDATA, "SELECT instanceId, team, joinX, joinY, joinZ, joinO, joinMapId, taxiStart, taxiEnd, mountSpell FROM character_battleground_data WHERE guid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_SEL_CHARACTER_GLYPHS, "SELECT talentGroup, glyph1, glyph2, glyph3, glyph4, glyph5, glyph6 FROM character_glyphs WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_CHARACTER_TALENTS, "SELECT spell, talentGroup FROM character_talent WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_CHARACTER_SKILLS, "SELECT skill, value, max FROM character_skills WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_CHARACTER_RANDOMBG, "SELECT guid FROM character_battleground_random WHERE guid = ?", CONNECTION_ASYNC); @@ -554,7 +553,6 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_DEL_CHAR_EQUIPMENTSETS, "DELETE FROM character_equipmentsets WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_GUILD_EVENTLOG_BY_PLAYER, "DELETE FROM guild_eventlog WHERE PlayerGuid1 = ? OR PlayerGuid2 = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_GUILD_BANK_EVENTLOG_BY_PLAYER, "DELETE FROM guild_bank_eventlog WHERE PlayerGuid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_DEL_CHAR_GLYPHS, "DELETE FROM character_glyphs WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_TALENT, "DELETE FROM character_talent WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_SKILLS, "DELETE FROM character_skills WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_CHAR_MONEY, "UPDATE characters SET money = ? WHERE guid = ?", CONNECTION_ASYNC); @@ -583,7 +581,6 @@ void CharacterDatabaseConnection::DoPrepareStatements() "spellPower, resilience) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_PETITION_BY_OWNER, "DELETE FROM petition WHERE ownerguid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_PETITION_SIGNATURE_BY_OWNER, "DELETE FROM petition_sign WHERE ownerguid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_INS_CHAR_GLYPHS, "INSERT INTO character_glyphs (guid, talentGroup, glyph1, glyph2, glyph3, glyph4, glyph5, glyph6) VALUES(?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_TALENT_BY_SPELL_SPEC, "DELETE FROM character_talent WHERE guid = ? and spell = ? and talentGroup = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_INS_CHAR_TALENT, "INSERT INTO character_talent (guid, spell, talentGroup) VALUES (?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_ACTION_EXCEPT_SPEC, "DELETE FROM character_action WHERE spec<>? AND guid = ?", CONNECTION_ASYNC); diff --git a/src/server/database/Database/Implementation/CharacterDatabase.h b/src/server/database/Database/Implementation/CharacterDatabase.h index e35bedfd587..81847f12c58 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.h +++ b/src/server/database/Database/Implementation/CharacterDatabase.h @@ -110,7 +110,6 @@ enum CharacterDatabaseStatements CHAR_SEL_CHARACTER_CRITERIAPROGRESS, CHAR_SEL_CHARACTER_EQUIPMENTSETS, CHAR_SEL_CHARACTER_BGDATA, - CHAR_SEL_CHARACTER_GLYPHS, CHAR_SEL_CHARACTER_TALENTS, CHAR_SEL_CHARACTER_SKILLS, CHAR_SEL_CHARACTER_RANDOMBG, @@ -470,7 +469,6 @@ enum CharacterDatabaseStatements CHAR_DEL_CHAR_EQUIPMENTSETS, CHAR_DEL_GUILD_EVENTLOG_BY_PLAYER, CHAR_DEL_GUILD_BANK_EVENTLOG_BY_PLAYER, - CHAR_DEL_CHAR_GLYPHS, CHAR_DEL_CHAR_TALENT, CHAR_DEL_CHAR_SKILLS, CHAR_UPD_CHAR_MONEY, @@ -497,7 +495,6 @@ enum CharacterDatabaseStatements CHAR_INS_CHAR_STATS, CHAR_DEL_PETITION_BY_OWNER, CHAR_DEL_PETITION_SIGNATURE_BY_OWNER, - CHAR_INS_CHAR_GLYPHS, CHAR_DEL_CHAR_TALENT_BY_SPELL_SPEC, CHAR_INS_CHAR_TALENT, CHAR_DEL_CHAR_ACTION_EXCEPT_SPEC, diff --git a/src/server/database/Database/Implementation/HotfixDatabase.cpp b/src/server/database/Database/Implementation/HotfixDatabase.cpp index 31db228b20a..6a7badda678 100644 --- a/src/server/database/Database/Implementation/HotfixDatabase.cpp +++ b/src/server/database/Database/Implementation/HotfixDatabase.cpp @@ -15,8 +15,8 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ - // DO NOT EDIT! - // Autogenerated from DB2Structure.h +// DO NOT EDIT! +// Autogenerated from DB2Structure.h #include "HotfixDatabase.h" @@ -31,8 +31,8 @@ void HotfixDatabaseConnection::DoPrepareStatements() m_stmts.resize(MAX_HOTFIXDATABASE_STATEMENTS); // Achievement.db2 - PrepareStatement(HOTFIX_SEL_ACHIEVEMENT, "SELECT ID, Title, Description, Flags, Reward, MapID, Supercedes, Category, UIOrder, IconID, " - "SharesCriteria, CriteriaTree, Faction, Points, MinimumCriteria FROM achievement ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ACHIEVEMENT, "SELECT Title, Description, Flags, Reward, MapID, Supercedes, Category, UIOrder, IconID, SharesCriteria, " + "CriteriaTree, Faction, Points, MinimumCriteria, ID FROM achievement ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_ACHIEVEMENT, "SELECT ID, Title_lang, Description_lang, Reward_lang FROM achievement_locale WHERE locale = ?", CONNECTION_SYNCH); // AnimKit.db2 @@ -43,14 +43,14 @@ void HotfixDatabaseConnection::DoPrepareStatements() // AreaTable.db2 PrepareStatement(HOTFIX_SEL_AREA_TABLE, "SELECT ID, Flags1, Flags2, ZoneName, AmbientMultiplier, AreaName, MapID, ParentAreaID, AreaBit, " - "AmbienceID, ZoneMusic, IntroSound, LiquidTypeID1, LiquidTypeID2, LiquidTypeID3, LiquidTypeID4, UWIntroMusic, UWZoneMusic, UWAmbience, " - "PvPCombastWorldStateID, SoundProviderPref, SoundProviderPrefUnderwater, ExplorationLevel, FactionGroupMask, MountFlags, " - "WildBattlePetLevelMin, WildBattlePetLevelMax, WindSettingsID FROM area_table ORDER BY ID DESC", CONNECTION_SYNCH); + "AmbienceID, ZoneMusic, IntroSound, LiquidTypeID1, LiquidTypeID2, LiquidTypeID3, LiquidTypeID4, UWZoneMusic, UWAmbience, " + "PvPCombatWorldStateID, SoundProviderPref, SoundProviderPrefUnderwater, ExplorationLevel, FactionGroupMask, MountFlags, " + "WildBattlePetLevelMin, WildBattlePetLevelMax, WindSettingsID, UWIntroSound FROM area_table ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_AREA_TABLE, "SELECT ID, AreaName_lang FROM area_table_locale WHERE locale = ?", CONNECTION_SYNCH); // AreaTrigger.db2 - PrepareStatement(HOTFIX_SEL_AREA_TRIGGER, "SELECT ID, PosX, PosY, PosZ, Radius, BoxLength, BoxWidth, BoxHeight, BoxYaw, MapID, PhaseID, " - "PhaseGroupID, ShapeID, AreaTriggerActionSetID, PhaseUseFlags, ShapeType, Flag FROM area_trigger ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_AREA_TRIGGER, "SELECT PosX, PosY, PosZ, Radius, BoxLength, BoxWidth, BoxHeight, BoxYaw, MapID, PhaseID, PhaseGroupID, " + "ShapeID, AreaTriggerActionSetID, PhaseUseFlags, ShapeType, Flag, ID FROM area_trigger ORDER BY ID DESC", CONNECTION_SYNCH); // ArmorLocation.db2 PrepareStatement(HOTFIX_SEL_ARMOR_LOCATION, "SELECT ID, Modifier1, Modifier2, Modifier3, Modifier4, Modifier5 FROM armor_location ORDER BY ID DESC", CONNECTION_SYNCH); @@ -66,7 +66,7 @@ void HotfixDatabaseConnection::DoPrepareStatements() PrepareStatement(HOTFIX_SEL_BANNED_ADDONS, "SELECT ID, Name, Version, Flags FROM banned_addons ORDER BY ID DESC", CONNECTION_SYNCH); // BarberShopStyle.db2 - PrepareStatement(HOTFIX_SEL_BARBER_SHOP_STYLE, "SELECT ID, DisplayName, Description, CostModifier, Type, Race, Sex, Data FROM barber_shop_style" + PrepareStatement(HOTFIX_SEL_BARBER_SHOP_STYLE, "SELECT DisplayName, Description, CostModifier, Type, Race, Sex, Data, ID FROM barber_shop_style" " ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_BARBER_SHOP_STYLE, "SELECT ID, DisplayName_lang, Description_lang FROM barber_shop_style_locale WHERE locale = ?", CONNECTION_SYNCH); @@ -77,8 +77,8 @@ void HotfixDatabaseConnection::DoPrepareStatements() PrepareStatement(HOTFIX_SEL_BATTLE_PET_BREED_STATE, "SELECT ID, Value, BreedID, State FROM battle_pet_breed_state ORDER BY ID DESC", CONNECTION_SYNCH); // BattlePetSpecies.db2 - PrepareStatement(HOTFIX_SEL_BATTLE_PET_SPECIES, "SELECT ID, CreatureID, IconFileID, SummonSpellID, SourceText, Description, Flags, PetType, " - "Source FROM battle_pet_species ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_BATTLE_PET_SPECIES, "SELECT CreatureID, IconFileID, SummonSpellID, SourceText, Description, Flags, PetType, Source, " + "ID FROM battle_pet_species ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_BATTLE_PET_SPECIES, "SELECT ID, SourceText_lang, Description_lang FROM battle_pet_species_locale WHERE locale = ?", CONNECTION_SYNCH); // BattlePetSpeciesState.db2 @@ -92,12 +92,12 @@ void HotfixDatabaseConnection::DoPrepareStatements() // BroadcastText.db2 PrepareStatement(HOTFIX_SEL_BROADCAST_TEXT, "SELECT ID, MaleText, FemaleText, EmoteID1, EmoteID2, EmoteID3, EmoteDelay1, EmoteDelay2, " - "EmoteDelay3, SoundID, UnkEmoteID, Language, Type FROM broadcast_text ORDER BY ID DESC", CONNECTION_SYNCH); + "EmoteDelay3, UnkEmoteID, Language, Type, SoundID1, SoundID2, PlayerConditionID FROM broadcast_text ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_BROADCAST_TEXT, "SELECT ID, MaleText_lang, FemaleText_lang FROM broadcast_text_locale WHERE locale = ?", CONNECTION_SYNCH); // CharSections.db2 PrepareStatement(HOTFIX_SEL_CHAR_SECTIONS, "SELECT Id, TextureFileDataID1, TextureFileDataID2, TextureFileDataID3, Flags, Race, Gender, GenType, " - "Type, Color FROM char_sections ORDER BY Id DESC", CONNECTION_SYNCH); + "Type, Color FROM char_sections ORDER BY ID DESC", CONNECTION_SYNCH); // CharStartOutfit.db2 PrepareStatement(HOTFIX_SEL_CHAR_START_OUTFIT, "SELECT ID, ItemID1, ItemID2, ItemID3, ItemID4, ItemID5, ItemID6, ItemID7, ItemID8, ItemID9, " @@ -113,9 +113,9 @@ void HotfixDatabaseConnection::DoPrepareStatements() PREPARE_LOCALE_STMT(HOTFIX_SEL_CHAT_CHANNELS, "SELECT ID, Name_lang, Shortcut_lang FROM chat_channels_locale WHERE locale = ?", CONNECTION_SYNCH); // ChrClasses.db2 - PrepareStatement(HOTFIX_SEL_CHR_CLASSES, "SELECT ID, PowerType, PetNameToken, Name, NameFemale, NameMale, Filename, CreateScreenFileDataID, " - "SelectScreenFileDataID, LowResScreenFileDataID, Flags, CinematicSequenceID, DefaultSpec, SpellClassSet, AttackPowerPerStrength, " - "AttackPowerPerAgility, RangedAttackPowerPerAgility, IconFileDataID, Unk1 FROM chr_classes ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_CHR_CLASSES, "SELECT PetNameToken, Name, NameFemale, NameMale, Filename, CreateScreenFileDataID, " + "SelectScreenFileDataID, LowResScreenFileDataID, Flags, CinematicSequenceID, DefaultSpec, PowerType, SpellClassSet, AttackPowerPerStrength, " + "AttackPowerPerAgility, RangedAttackPowerPerAgility, IconFileDataID, Unk1, ID FROM chr_classes ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_CHR_CLASSES, "SELECT ID, Name_lang, NameFemale_lang, NameMale_lang FROM chr_classes_locale WHERE locale = ?", CONNECTION_SYNCH); // ChrClassesXPowerTypes.db2 @@ -126,14 +126,14 @@ void HotfixDatabaseConnection::DoPrepareStatements() "FacialHairCustomization2, HairCustomization, CreateScreenFileDataID, SelectScreenFileDataID, MaleCustomizeOffset1, MaleCustomizeOffset2, " "MaleCustomizeOffset3, FemaleCustomizeOffset1, FemaleCustomizeOffset2, FemaleCustomizeOffset3, LowResScreenFileDataID, FactionID, " "ExplorationSoundID, MaleDisplayID, FemaleDisplayID, ResSicknessSpellID, SplashSoundID, CinematicSequenceID, UAMaleCreatureSoundDataID, " - "UAFemaleCreatureSoundDataID, HighResMaleDisplayID, HighResFemaleDisplayID, Unk, BaseLanguage, CreatureType, TeamID, RaceRelated, " - "UnalteredVisualRaceID, CharComponentTextureLayoutID, DefaultClassID, NeutralRaceID, ItemAppearanceFrameRaceID, " - "CharComponentTexLayoutHiResID FROM chr_races ORDER BY ID DESC", CONNECTION_SYNCH); + "UAFemaleCreatureSoundDataID, Unk, BaseLanguage, CreatureType, TeamID, RaceRelated, UnalteredVisualRaceID, CharComponentTextureLayoutID, " + "DefaultClassID, NeutralRaceID, ItemAppearanceFrameRaceID, CharComponentTexLayoutHiResID, HighResMaleDisplayID, HighResFemaleDisplayID" + " FROM chr_races ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_CHR_RACES, "SELECT ID, Name_lang, NameFemale_lang, NameMale_lang FROM chr_races_locale WHERE locale = ?", CONNECTION_SYNCH); // ChrSpecialization.db2 - PrepareStatement(HOTFIX_SEL_CHR_SPECIALIZATION, "SELECT ID, MasterySpellID1, MasterySpellID2, Flags, AnimReplacementSetID, Name, Name2, " - "Description, BackgroundFile, SpellIconID, ClassID, OrderIndex, PetTalentType, Role, PrimaryStatOrder FROM chr_specialization ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_CHR_SPECIALIZATION, "SELECT MasterySpellID1, MasterySpellID2, Name, Name2, Description, BackgroundFile, SpellIconID, " + "ClassID, OrderIndex, PetTalentType, Role, PrimaryStatOrder, ID, Flags, AnimReplacementSetID FROM chr_specialization ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_CHR_SPECIALIZATION, "SELECT ID, Name_lang, Name2_lang, Description_lang FROM chr_specialization_locale" " WHERE locale = ?", CONNECTION_SYNCH); @@ -158,11 +158,11 @@ void HotfixDatabaseConnection::DoPrepareStatements() PREPARE_LOCALE_STMT(HOTFIX_SEL_CREATURE_FAMILY, "SELECT ID, Name_lang FROM creature_family_locale WHERE locale = ?", CONNECTION_SYNCH); // CreatureModelData.db2 - PrepareStatement(HOTFIX_SEL_CREATURE_MODEL_DATA, "SELECT ID, Flags, FileDataID, ModelScale, FootprintTextureLength, FootprintTextureWidth, " - "FootprintParticleScale, CollisionWidth, CollisionHeight, MountHeight, GeoBoxMin1, GeoBoxMin2, GeoBoxMin3, GeoBoxMax1, GeoBoxMax2, " - "GeoBoxMax3, WorldEffectScale, AttachedEffectScale, MissileCollisionRadius, MissileCollisionPush, MissileCollisionRaise, " - "OverrideLootEffectScale, OverrideNameScale, OverrideSelectionRadius, TamedPetBaseScale, HoverHeight, SoundID, CreatureGeosetDataID, " - "SizeClass, BloodID, FootprintTextureID, FoleyMaterialID, Unk700_1, Unk700_2, FootstepShakeSize, DeathThudShakeSize FROM creature_model_data" + PrepareStatement(HOTFIX_SEL_CREATURE_MODEL_DATA, "SELECT ID, ModelScale, FootprintTextureLength, FootprintTextureWidth, FootprintParticleScale, " + "CollisionWidth, CollisionHeight, MountHeight, GeoBoxMin1, GeoBoxMin2, GeoBoxMin3, GeoBoxMax1, GeoBoxMax2, GeoBoxMax3, WorldEffectScale, " + "AttachedEffectScale, MissileCollisionRadius, MissileCollisionPush, MissileCollisionRaise, OverrideLootEffectScale, OverrideNameScale, " + "OverrideSelectionRadius, TamedPetBaseScale, HoverHeight, Flags, FileDataID, SizeClass, BloodID, FootprintTextureID, FoleyMaterialID, " + "FootstepEffectID, DeathThudEffectID, FootstepShakeSize, DeathThudShakeSize, SoundID, CreatureGeosetDataID FROM creature_model_data" " ORDER BY ID DESC", CONNECTION_SYNCH); // CreatureType.db2 @@ -170,17 +170,17 @@ void HotfixDatabaseConnection::DoPrepareStatements() PREPARE_LOCALE_STMT(HOTFIX_SEL_CREATURE_TYPE, "SELECT ID, Name_lang FROM creature_type_locale WHERE locale = ?", CONNECTION_SYNCH); // Criteria.db2 - PrepareStatement(HOTFIX_SEL_CRITERIA, "SELECT ID, Asset, StartAsset, FailAsset, StartTimer, ModifierTreeId, EligibilityWorldStateID, Type, " - "StartEvent, FailEvent, Flags, EligibilityWorldStateValue FROM criteria ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_CRITERIA, "SELECT ID, StartAsset, FailAsset, StartTimer, ModifierTreeId, EligibilityWorldStateID, Type, StartEvent, " + "FailEvent, Flags, EligibilityWorldStateValue FROM criteria ORDER BY ID DESC", CONNECTION_SYNCH); // CriteriaTree.db2 - PrepareStatement(HOTFIX_SEL_CRITERIA_TREE, "SELECT ID, Amount, Description, CriteriaID, Parent, Flags, OrderIndex, Operator FROM criteria_tree" + PrepareStatement(HOTFIX_SEL_CRITERIA_TREE, "SELECT ID, CriteriaID, Amount, Description, Parent, Flags, Operator, OrderIndex FROM criteria_tree" " ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_CRITERIA_TREE, "SELECT ID, Description_lang FROM criteria_tree_locale WHERE locale = ?", CONNECTION_SYNCH); // CurrencyTypes.db2 PrepareStatement(HOTFIX_SEL_CURRENCY_TYPES, "SELECT ID, Name, InventoryIcon1, InventoryIcon2, MaxQty, MaxEarnablePerWeek, Flags, Description, " - "CategoryID, SpellWeight, SpellCategory, Quality FROM currency_types ORDER BY ID DESC", CONNECTION_SYNCH); + "CategoryID, SpellCategory, Quality, SpellWeight FROM currency_types ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_CURRENCY_TYPES, "SELECT ID, Name_lang, Description_lang FROM currency_types_locale WHERE locale = ?", CONNECTION_SYNCH); // CurvePoint.db2 @@ -201,7 +201,7 @@ void HotfixDatabaseConnection::DoPrepareStatements() PREPARE_LOCALE_STMT(HOTFIX_SEL_DIFFICULTY, "SELECT ID, Name_lang FROM difficulty_locale WHERE locale = ?", CONNECTION_SYNCH); // DungeonEncounter.db2 - PrepareStatement(HOTFIX_SEL_DUNGEON_ENCOUNTER, "SELECT ID, Name, CreatureDisplayID, MapID, OrderIndex, SpellIconID, DifficultyID, Bit, Flags" + PrepareStatement(HOTFIX_SEL_DUNGEON_ENCOUNTER, "SELECT ID, Name, CreatureDisplayID, MapID, SpellIconID, DifficultyID, Bit, Flags, OrderIndex" " FROM dungeon_encounter ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_DUNGEON_ENCOUNTER, "SELECT ID, Name_lang FROM dungeon_encounter_locale WHERE locale = ?", CONNECTION_SYNCH); @@ -217,22 +217,22 @@ void HotfixDatabaseConnection::DoPrepareStatements() PrepareStatement(HOTFIX_SEL_DURABILITY_QUALITY, "SELECT ID, QualityMod FROM durability_quality ORDER BY ID DESC", CONNECTION_SYNCH); // Emotes.db2 - PrepareStatement(HOTFIX_SEL_EMOTES, "SELECT ID, EmoteSlashCommand, SpellVisualKitID, EmoteFlags, Unk703_1, Unk703_2, AnimID, EmoteSpecProcParam, " - "EmoteSoundID, EmoteSpecProc FROM emotes ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_EMOTES, "SELECT ID, EmoteSlashCommand, SpellVisualKitID, EmoteFlags, AnimID, EmoteSpecProc, EmoteSpecProcParam, " + "EmoteSoundID, ClassMask, RaceMask FROM emotes ORDER BY ID DESC", CONNECTION_SYNCH); // EmotesText.db2 PrepareStatement(HOTFIX_SEL_EMOTES_TEXT, "SELECT ID, Name, EmoteID FROM emotes_text ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_EMOTES_TEXT, "SELECT ID, Name_lang FROM emotes_text_locale WHERE locale = ?", CONNECTION_SYNCH); // EmotesTextSound.db2 - PrepareStatement(HOTFIX_SEL_EMOTES_TEXT_SOUND, "SELECT ID, EmotesTextId, SoundId, RaceId, SexId, ClassId FROM emotes_text_sound ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_EMOTES_TEXT_SOUND, "SELECT ID, EmotesTextId, RaceId, SexId, ClassId, SoundId FROM emotes_text_sound ORDER BY ID DESC", CONNECTION_SYNCH); // Faction.db2 PrepareStatement(HOTFIX_SEL_FACTION, "SELECT ID, ReputationRaceMask1, ReputationRaceMask2, ReputationRaceMask3, ReputationRaceMask4, " "ReputationBase1, ReputationBase2, ReputationBase3, ReputationBase4, ParentFactionModIn, ParentFactionModOut, Name, Description, " - "ReputationIndex, ReputationClassMask1, ReputationClassMask2, ReputationClassMask3, ReputationClassMask4, ReputationFlags1, ReputationFlags2, " - "ReputationFlags3, ReputationFlags4, ParentFactionID, ParentFactionCapIn, ParentFactionCapOut, Expansion, Flags, FriendshipRepID FROM faction" - " ORDER BY ID DESC", CONNECTION_SYNCH); + "ReputationMax1, ReputationMax2, ReputationMax3, ReputationMax4, ReputationIndex, ReputationClassMask1, ReputationClassMask2, " + "ReputationClassMask3, ReputationClassMask4, ReputationFlags1, ReputationFlags2, ReputationFlags3, ReputationFlags4, ParentFactionID, " + "ParentFactionCapIn, ParentFactionCapOut, Expansion, Flags, FriendshipRepID FROM faction ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_FACTION, "SELECT ID, Name_lang, Description_lang FROM faction_locale WHERE locale = ?", CONNECTION_SYNCH); // FactionTemplate.db2 @@ -240,8 +240,8 @@ void HotfixDatabaseConnection::DoPrepareStatements() "Friends4, Mask, FriendMask, EnemyMask FROM faction_template ORDER BY ID DESC", CONNECTION_SYNCH); // Gameobjects.db2 - PrepareStatement(HOTFIX_SEL_GAMEOBJECTS, "SELECT ID, PositionX, PositionY, PositionZ, RotationX, RotationY, RotationZ, RotationW, Size, Data1, " - "Data2, Data3, Data4, Data5, Data6, Data7, Data8, Name, MapID, DisplayID, PhaseID, PhaseGroupID, PhaseUseFlags, Type FROM gameobjects" + PrepareStatement(HOTFIX_SEL_GAMEOBJECTS, "SELECT PositionX, PositionY, PositionZ, RotationX, RotationY, RotationZ, RotationW, Size, Data1, Data2, " + "Data3, Data4, Data5, Data6, Data7, Data8, Name, MapID, DisplayID, PhaseID, PhaseGroupID, PhaseUseFlags, Type, ID FROM gameobjects" " ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_GAMEOBJECTS, "SELECT ID, Name_lang FROM gameobjects_locale WHERE locale = ?", CONNECTION_SYNCH); @@ -250,34 +250,34 @@ void HotfixDatabaseConnection::DoPrepareStatements() "GeoBoxMaxZ, OverrideLootEffectScale, OverrideNameScale, ObjectEffectPackageID FROM gameobject_display_info ORDER BY ID DESC", CONNECTION_SYNCH); // GarrAbility.db2 - PrepareStatement(HOTFIX_SEL_GARR_ABILITY, "SELECT ID, Name, Description, IconFileDataID, Flags, OtherFactionGarrAbilityID, GarrAbilityCategoryID, " - "FollowerTypeID FROM garr_ability ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_GARR_ABILITY, "SELECT Name, Description, IconFileDataID, Flags, OtherFactionGarrAbilityID, GarrAbilityCategoryID, " + "FollowerTypeID, ID FROM garr_ability ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_GARR_ABILITY, "SELECT ID, Name_lang, Description_lang FROM garr_ability_locale WHERE locale = ?", CONNECTION_SYNCH); // GarrBuilding.db2 PrepareStatement(HOTFIX_SEL_GARR_BUILDING, "SELECT ID, HordeGameObjectID, AllianceGameObjectID, NameAlliance, NameHorde, Description, Tooltip, " - "IconFileDataID, BuildDuration, CostCurrencyID, CostCurrencyAmount, AllianceActivationScenePackageID, HordeActivationScenePackageID, " - "CostMoney, Unknown, Type, Level, HordeTexPrefixKitID, AllianceTexPrefixKitID, BonusAmount, Flags, MaxShipments, " - "FollowerRequiredGarrAbilityID, FollowerGarrAbilityEffectID, GarrTypeID FROM garr_building ORDER BY ID DESC", CONNECTION_SYNCH); + "IconFileDataID, CostCurrencyID, HordeTexPrefixKitID, AllianceTexPrefixKitID, AllianceActivationScenePackageID, " + "HordeActivationScenePackageID, FollowerRequiredGarrAbilityID, FollowerGarrAbilityEffectID, CostMoney, Unknown, Type, Level, Flags, " + "MaxShipments, GarrTypeID, BuildDuration, CostCurrencyAmount, BonusAmount FROM garr_building ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_GARR_BUILDING, "SELECT ID, NameAlliance_lang, NameHorde_lang, Description_lang, Tooltip_lang" " FROM garr_building_locale WHERE locale = ?", CONNECTION_SYNCH); // GarrBuildingPlotInst.db2 - PrepareStatement(HOTFIX_SEL_GARR_BUILDING_PLOT_INST, "SELECT ID, LandmarkOffsetX, LandmarkOffsetY, UiTextureAtlasMemberID, " - "GarrSiteLevelPlotInstID, GarrBuildingID FROM garr_building_plot_inst ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_GARR_BUILDING_PLOT_INST, "SELECT LandmarkOffsetX, LandmarkOffsetY, UiTextureAtlasMemberID, GarrSiteLevelPlotInstID, " + "GarrBuildingID, ID FROM garr_building_plot_inst ORDER BY ID DESC", CONNECTION_SYNCH); // GarrClassSpec.db2 - PrepareStatement(HOTFIX_SEL_GARR_CLASS_SPEC, "SELECT ID, NameMale, NameFemale, NameGenderless, ClassAtlasID, GarrFollItemSetID, `Limit`, Flags" + PrepareStatement(HOTFIX_SEL_GARR_CLASS_SPEC, "SELECT NameMale, NameFemale, NameGenderless, ClassAtlasID, GarrFollItemSetID, `Limit`, Flags, ID" " FROM garr_class_spec ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_GARR_CLASS_SPEC, "SELECT ID, NameMale_lang, NameFemale_lang, NameGenderless_lang FROM garr_class_spec_locale" " WHERE locale = ?", CONNECTION_SYNCH); // GarrFollower.db2 - PrepareStatement(HOTFIX_SEL_GARR_FOLLOWER, "SELECT ID, HordeCreatureID, AllianceCreatureID, HordeSourceText, AllianceSourceText, " - "HordePortraitIconID, AlliancePortraitIconID, ItemLevelWeapon, ItemLevelArmor, FollowerTypeID, HordeUiAnimRaceInfoID, " - "AllianceUiAnimRaceInfoID, Quality, HordeGarrClassSpecID, AllianceGarrClassSpecID, HordeGarrFollItemSetID, AllianceGarrFollItemSetID, Level, " - "Unknown1, Flags, Unknown2, Unknown3, HordeListPortraitTextureKitID, AllianceListPortraitTextureKitID, GarrTypeID, MaxDurability, Class" - " FROM garr_follower ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_GARR_FOLLOWER, "SELECT HordeCreatureID, AllianceCreatureID, HordeSourceText, AllianceSourceText, HordePortraitIconID, " + "AlliancePortraitIconID, HordeAddedBroadcastTextID, AllianceAddedBroadcastTextID, HordeGarrFollItemSetID, AllianceGarrFollItemSetID, " + "ItemLevelWeapon, ItemLevelArmor, HordeListPortraitTextureKitID, AllianceListPortraitTextureKitID, FollowerTypeID, HordeUiAnimRaceInfoID, " + "AllianceUiAnimRaceInfoID, Quality, HordeGarrClassSpecID, AllianceGarrClassSpecID, Level, Unknown1, Flags, Unknown2, Unknown3, GarrTypeID, " + "MaxDurability, Class, HordeFlavorTextGarrStringID, AllianceFlavorTextGarrStringID, ID FROM garr_follower ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_GARR_FOLLOWER, "SELECT ID, HordeSourceText_lang, AllianceSourceText_lang FROM garr_follower_locale WHERE locale = ?", CONNECTION_SYNCH); // GarrFollowerXAbility.db2 @@ -285,8 +285,8 @@ void HotfixDatabaseConnection::DoPrepareStatements() " ORDER BY ID DESC", CONNECTION_SYNCH); // GarrPlot.db2 - PrepareStatement(HOTFIX_SEL_GARR_PLOT, "SELECT ID, Name, AllianceConstructionGameObjectID, HordeConstructionGameObjectID, MinCount, MaxCount, " - "GarrPlotUICategoryID, PlotType, Flags FROM garr_plot ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_GARR_PLOT, "SELECT ID, Name, AllianceConstructionGameObjectID, HordeConstructionGameObjectID, GarrPlotUICategoryID, " + "PlotType, Flags, MinCount, MaxCount FROM garr_plot ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_GARR_PLOT, "SELECT ID, Name_lang FROM garr_plot_locale WHERE locale = ?", CONNECTION_SYNCH); // GarrPlotBuilding.db2 @@ -297,7 +297,7 @@ void HotfixDatabaseConnection::DoPrepareStatements() PREPARE_LOCALE_STMT(HOTFIX_SEL_GARR_PLOT_INSTANCE, "SELECT ID, Name_lang FROM garr_plot_instance_locale WHERE locale = ?", CONNECTION_SYNCH); // GarrSiteLevel.db2 - PrepareStatement(HOTFIX_SEL_GARR_SITE_LEVEL, "SELECT ID, TownHallX, TownHallY, MapID, UpgradeResourceCost, UpgradeMoneyCost, Level, SiteID, " + PrepareStatement(HOTFIX_SEL_GARR_SITE_LEVEL, "SELECT ID, TownHallX, TownHallY, MapID, SiteID, UpgradeResourceCost, UpgradeMoneyCost, Level, " "UITextureKitID, MovieID, Level2 FROM garr_site_level ORDER BY ID DESC", CONNECTION_SYNCH); // GarrSiteLevelPlotInst.db2 @@ -311,9 +311,6 @@ void HotfixDatabaseConnection::DoPrepareStatements() PrepareStatement(HOTFIX_SEL_GLYPH_PROPERTIES, "SELECT ID, SpellID, SpellIconID, Type, GlyphExclusiveCategoryID FROM glyph_properties" " ORDER BY ID DESC", CONNECTION_SYNCH); - // GlyphSlot.db2 - PrepareStatement(HOTFIX_SEL_GLYPH_SLOT, "SELECT ID, Tooltip, Type FROM glyph_slot ORDER BY ID DESC", CONNECTION_SYNCH); - // GuildColorBackground.db2 PrepareStatement(HOTFIX_SEL_GUILD_COLOR_BACKGROUND, "SELECT ID, Red, Green, Blue FROM guild_color_background ORDER BY ID DESC", CONNECTION_SYNCH); @@ -327,8 +324,8 @@ void HotfixDatabaseConnection::DoPrepareStatements() PrepareStatement(HOTFIX_SEL_GUILD_PERK_SPELLS, "SELECT ID, SpellID FROM guild_perk_spells ORDER BY ID DESC", CONNECTION_SYNCH); // Heirloom.db2 - PrepareStatement(HOTFIX_SEL_HEIRLOOM, "SELECT ID, ItemID, SourceText, OldItem1, OldItem2, NextDifficultyItemID, UpgradeItemID1, UpgradeItemID2, " - "ItemBonusListID1, ItemBonusListID2, Flags, Source FROM heirloom ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_HEIRLOOM, "SELECT ItemID, SourceText, OldItem1, OldItem2, NextDifficultyItemID, UpgradeItemID1, UpgradeItemID2, " + "ItemBonusListID1, ItemBonusListID2, Flags, Source, ID FROM heirloom ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_HEIRLOOM, "SELECT ID, SourceText_lang FROM heirloom_locale WHERE locale = ?", CONNECTION_SYNCH); // Holidays.db2 @@ -418,17 +415,17 @@ void HotfixDatabaseConnection::DoPrepareStatements() // ItemExtendedCost.db2 PrepareStatement(HOTFIX_SEL_ITEM_EXTENDED_COST, "SELECT ID, RequiredItem1, RequiredItem2, RequiredItem3, RequiredItem4, RequiredItem5, " - "RequiredCurrencyCount1, RequiredCurrencyCount2, RequiredCurrencyCount3, RequiredCurrencyCount4, RequiredCurrencyCount5, RequiredMoney, " - "RequiredItemCount1, RequiredItemCount2, RequiredItemCount3, RequiredItemCount4, RequiredItemCount5, RequiredPersonalArenaRating, " - "RequiredCurrency1, RequiredCurrency2, RequiredCurrency3, RequiredCurrency4, RequiredCurrency5, RequiredArenaSlot, RequiredFactionId, " - "RequiredFactionStanding, RequirementFlags, RequiredAchievement FROM item_extended_cost ORDER BY ID DESC", CONNECTION_SYNCH); + "RequiredCurrencyCount1, RequiredCurrencyCount2, RequiredCurrencyCount3, RequiredCurrencyCount4, RequiredCurrencyCount5, RequiredItemCount1, " + "RequiredItemCount2, RequiredItemCount3, RequiredItemCount4, RequiredItemCount5, RequiredPersonalArenaRating, RequiredCurrency1, " + "RequiredCurrency2, RequiredCurrency3, RequiredCurrency4, RequiredCurrency5, RequiredArenaSlot, RequiredFactionId, RequiredFactionStanding, " + "RequirementFlags, RequiredAchievement FROM item_extended_cost ORDER BY ID DESC", CONNECTION_SYNCH); // ItemLimitCategory.db2 PrepareStatement(HOTFIX_SEL_ITEM_LIMIT_CATEGORY, "SELECT ID, Name, Quantity, Flags FROM item_limit_category ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_LIMIT_CATEGORY, "SELECT ID, Name_lang FROM item_limit_category_locale WHERE locale = ?", CONNECTION_SYNCH); // ItemModifiedAppearance.db2 - PrepareStatement(HOTFIX_SEL_ITEM_MODIFIED_APPEARANCE, "SELECT ID, ItemID, AppearanceID, AppearanceModID, `Index`, SourceType" + PrepareStatement(HOTFIX_SEL_ITEM_MODIFIED_APPEARANCE, "SELECT ItemID, AppearanceID, AppearanceModID, `Index`, SourceType, ID" " FROM item_modified_appearance ORDER BY ID DESC", CONNECTION_SYNCH); // ItemPriceBase.db2 @@ -446,7 +443,7 @@ void HotfixDatabaseConnection::DoPrepareStatements() // ItemSet.db2 PrepareStatement(HOTFIX_SEL_ITEM_SET, "SELECT ID, Name, ItemID1, ItemID2, ItemID3, ItemID4, ItemID5, ItemID6, ItemID7, ItemID8, ItemID9, " - "ItemID10, ItemID11, ItemID12, ItemID13, ItemID14, ItemID15, ItemID16, ItemID17, Unknown703, RequiredSkillRank, RequiredSkill FROM item_set" + "ItemID10, ItemID11, ItemID12, ItemID13, ItemID14, ItemID15, ItemID16, ItemID17, RequiredSkillRank, RequiredSkill, Flags FROM item_set" " ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_SET, "SELECT ID, Name_lang FROM item_set_locale WHERE locale = ?", CONNECTION_SYNCH); @@ -487,10 +484,10 @@ void HotfixDatabaseConnection::DoPrepareStatements() " ORDER BY ID DESC", CONNECTION_SYNCH); // LfgDungeons.db2 - PrepareStatement(HOTFIX_SEL_LFG_DUNGEONS, "SELECT ID, Name, Flags, TextureFilename, Description, MaxLevel, TargetLevelMax, MapID, RandomID, " + PrepareStatement(HOTFIX_SEL_LFG_DUNGEONS, "SELECT Name, Flags, TextureFilename, Description, MaxLevel, TargetLevelMax, MapID, RandomID, " "ScenarioID, LastBossJournalEncounterID, BonusReputationAmount, MentorItemLevel, MinLevel, TargetLevel, TargetLevelMin, DifficultyID, Type, " "Faction, Expansion, OrderIndex, GroupID, CountTank, CountHealer, CountDamage, MinCountTank, MinCountHealer, MinCountDamage, SubType, " - "MentorCharLevel FROM lfg_dungeons ORDER BY ID DESC", CONNECTION_SYNCH); + "MentorCharLevel, ID FROM lfg_dungeons ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_LFG_DUNGEONS, "SELECT ID, Name_lang, Description_lang FROM lfg_dungeons_locale WHERE locale = ?", CONNECTION_SYNCH); // Light.db2 @@ -500,9 +497,9 @@ void HotfixDatabaseConnection::DoPrepareStatements() // LiquidType.db2 PrepareStatement(HOTFIX_SEL_LIQUID_TYPE, "SELECT ID, Name, SpellID, MaxDarkenDepth, FogDarkenIntensity, AmbDarkenIntensity, DirDarkenIntensity, " "ParticleScale, Texture1, Texture2, Texture3, Texture4, Texture5, Texture6, Color1, Color2, Float1, Float2, Float3, `Float4`, Float5, Float6, " - "Float7, `Float8`, Float9, Float10, Float11, Float12, Float13, Float14, Float15, Float16, Float17, Float18, `Int1`, `Int2`, `Int3`, `Int4`, Flags, " - "SoundID, Type, LightID, ParticleMovement, ParticleTexSlots, MaterialID, DepthTexCount1, DepthTexCount2, DepthTexCount3, DepthTexCount4, " - "DepthTexCount5, DepthTexCount6 FROM liquid_type ORDER BY ID DESC", CONNECTION_SYNCH); + "Float7, `Float8`, Float9, Float10, Float11, Float12, Float13, Float14, Float15, Float16, Float17, Float18, `Int1`, `Int2`, `Int3`, `Int4`, " + "Flags, LightID, Type, ParticleMovement, ParticleTexSlots, MaterialID, DepthTexCount1, DepthTexCount2, DepthTexCount3, DepthTexCount4, " + "DepthTexCount5, DepthTexCount6, SoundID FROM liquid_type ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_LIQUID_TYPE, "SELECT ID, Name_lang FROM liquid_type_locale WHERE locale = ?", CONNECTION_SYNCH); // Lock.db2 @@ -521,21 +518,21 @@ void HotfixDatabaseConnection::DoPrepareStatements() PREPARE_LOCALE_STMT(HOTFIX_SEL_MAP, "SELECT ID, MapName_lang, MapDescription0_lang, MapDescription1_lang FROM map_locale WHERE locale = ?", CONNECTION_SYNCH); // MapDifficulty.db2 - PrepareStatement(HOTFIX_SEL_MAP_DIFFICULTY, "SELECT ID, Message, Context, MapID, DifficultyID, RaidDurationType, MaxPlayers, LockID, " - "ItemBonusTreeModID FROM map_difficulty ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_MAP_DIFFICULTY, "SELECT ID, Message, MapID, DifficultyID, RaidDurationType, MaxPlayers, LockID, ItemBonusTreeModID, " + "Context FROM map_difficulty ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_MAP_DIFFICULTY, "SELECT ID, Message_lang FROM map_difficulty_locale WHERE locale = ?", CONNECTION_SYNCH); // ModifierTree.db2 PrepareStatement(HOTFIX_SEL_MODIFIER_TREE, "SELECT ID, Asset1, Asset2, Parent, Type, Unk700, Operator, Amount FROM modifier_tree ORDER BY ID DESC", CONNECTION_SYNCH); // Mount.db2 - PrepareStatement(HOTFIX_SEL_MOUNT, "SELECT ID, SpellId, DisplayId, Name, Description, SourceDescription, MountTypeId, Flags, PlayerConditionId, " - "Source FROM mount ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_MOUNT, "SELECT SpellId, DisplayId, Name, Description, SourceDescription, CameraPivotMultiplier, MountTypeId, Flags, " + "PlayerConditionId, Source, ID FROM mount ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_MOUNT, "SELECT ID, Name_lang, Description_lang, SourceDescription_lang FROM mount_locale WHERE locale = ?", CONNECTION_SYNCH); // MountCapability.db2 - PrepareStatement(HOTFIX_SEL_MOUNT_CAPABILITY, "SELECT ID, RequiredAura, RequiredSpell, SpeedModSpell, RequiredRidingSkill, RequiredArea, " - "RequiredMap, Flags FROM mount_capability ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_MOUNT_CAPABILITY, "SELECT RequiredSpell, SpeedModSpell, RequiredRidingSkill, RequiredArea, RequiredMap, Flags, ID, " + "RequiredAura FROM mount_capability ORDER BY ID DESC", CONNECTION_SYNCH); // MountTypeXCapability.db2 PrepareStatement(HOTFIX_SEL_MOUNT_TYPE_X_CAPABILITY, "SELECT ID, MountTypeID, MountCapabilityID, OrderIndex FROM mount_type_x_capability" @@ -569,21 +566,21 @@ void HotfixDatabaseConnection::DoPrepareStatements() // PlayerCondition.db2 PrepareStatement(HOTFIX_SEL_PLAYER_CONDITION, "SELECT ID, RaceMask, SkillLogic, ReputationLogic, PrevQuestLogic, CurrQuestLogic, " - "CurrentCompletedQuestLogic, SpellLogic, SpellID1, SpellID2, SpellID3, SpellID4, ItemLogic, ItemID1, ItemID2, ItemID3, ItemID4, Time1, Time2, " - "AuraSpellLogic, AuraSpellID1, AuraSpellID2, AuraSpellID3, AuraSpellID4, AchievementLogic, AreaLogic, QuestKillLogic, QuestKillMonster1, " - "QuestKillMonster2, QuestKillMonster3, QuestKillMonster4, QuestKillMonster5, QuestKillMonster6, FailureDescription, Unknown700_1, " - "Unknown700_2, MinLevel, MaxLevel, ClassMask, SkillID1, SkillID2, SkillID3, SkillID4, MinSkill1, MinSkill2, MinSkill3, MinSkill4, MaxSkill1, " - "MaxSkill2, MaxSkill3, MaxSkill4, MinFactionID1, MinFactionID2, MinFactionID3, MaxFactionID, PrevQuestID1, PrevQuestID2, PrevQuestID3, " + "CurrentCompletedQuestLogic, SpellLogic, ItemLogic, Time1, Time2, AuraSpellLogic, AuraSpellID1, AuraSpellID2, AuraSpellID3, AuraSpellID4, " + "AchievementLogic, AreaLogic, QuestKillLogic, FailureDescription, MinLevel, MaxLevel, SkillID1, SkillID2, SkillID3, SkillID4, MinSkill1, " + "MinSkill2, MinSkill3, MinSkill4, MaxSkill1, MaxSkill2, MaxSkill3, MaxSkill4, MaxFactionID, PrevQuestID1, PrevQuestID2, PrevQuestID3, " "PrevQuestID4, CurrQuestID1, CurrQuestID2, CurrQuestID3, CurrQuestID4, CurrentCompletedQuestID1, CurrentCompletedQuestID2, " "CurrentCompletedQuestID3, CurrentCompletedQuestID4, Explored1, Explored2, WorldStateExpressionID, Achievement1, Achievement2, Achievement3, " - "Achievement4, AreaID1, AreaID2, AreaID3, AreaID4, QuestKillID, PhaseID, MinAvgItemLevel, MaxAvgItemLevel, MinAvgEquippedItemLevel, " - "MaxAvgEquippedItemLevel, ModifierTreeID, Flags, Gender, NativeGender, LanguageID, MinLanguage, MaxLanguage, MinReputation1, MinReputation2, " - "MinReputation3, MaxReputation, Unknown1, MinPVPRank, MaxPVPRank, PvpMedal, ItemCount1, ItemCount2, ItemCount3, ItemCount4, ItemFlags, " - "AuraCount1, AuraCount2, AuraCount3, AuraCount4, WeatherID, PartyStatus, LifetimeMaxPVPRank, LfgLogic, LfgStatus1, LfgStatus2, LfgStatus3, " - "LfgStatus4, LfgCompare1, LfgCompare2, LfgCompare3, LfgCompare4, LfgValue1, LfgValue2, LfgValue3, LfgValue4, CurrencyLogic, CurrencyID1, " - "CurrencyID2, CurrencyID3, CurrencyID4, CurrencyCount1, CurrencyCount2, CurrencyCount3, CurrencyCount4, MinExpansionLevel, MaxExpansionLevel, " - "MinExpansionTier, MaxExpansionTier, MinGuildLevel, MaxGuildLevel, PhaseUseFlags, PhaseGroupID, ChrSpecializationIndex, " - "ChrSpecializationRole, PowerType, PowerTypeComp, PowerTypeValue FROM player_condition ORDER BY ID DESC", CONNECTION_SYNCH); + "Achievement4, AreaID1, AreaID2, AreaID3, AreaID4, QuestKillID, PhaseID, MinAvgEquippedItemLevel, MaxAvgEquippedItemLevel, ModifierTreeID, " + "Flags, Gender, NativeGender, MinLanguage, MaxLanguage, MinReputation1, MinReputation2, MinReputation3, MaxReputation, Unknown1, MinPVPRank, " + "MaxPVPRank, PvpMedal, ItemFlags, AuraCount1, AuraCount2, AuraCount3, AuraCount4, WeatherID, PartyStatus, LifetimeMaxPVPRank, LfgStatus1, " + "LfgStatus2, LfgStatus3, LfgStatus4, LfgCompare1, LfgCompare2, LfgCompare3, LfgCompare4, CurrencyCount1, CurrencyCount2, CurrencyCount3, " + "CurrencyCount4, MinExpansionLevel, MaxExpansionLevel, MinExpansionTier, MaxExpansionTier, MinGuildLevel, MaxGuildLevel, PhaseUseFlags, " + "ChrSpecializationIndex, ChrSpecializationRole, PowerType, PowerTypeComp, PowerTypeValue, ClassMask, LanguageID, MinFactionID1, " + "MinFactionID2, MinFactionID3, SpellID1, SpellID2, SpellID3, SpellID4, ItemID1, ItemID2, ItemID3, ItemID4, ItemCount1, ItemCount2, " + "ItemCount3, ItemCount4, LfgLogic, LfgValue1, LfgValue2, LfgValue3, LfgValue4, CurrencyLogic, CurrencyID1, CurrencyID2, CurrencyID3, " + "CurrencyID4, QuestKillMonster1, QuestKillMonster2, QuestKillMonster3, QuestKillMonster4, QuestKillMonster5, QuestKillMonster6, PhaseGroupID, " + "MinAvgItemLevel, MaxAvgItemLevel, Unknown700_1, Unknown700_2 FROM player_condition ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_PLAYER_CONDITION, "SELECT ID, FailureDescription_lang FROM player_condition_locale WHERE locale = ?", CONNECTION_SYNCH); // PowerDisplay.db2 @@ -631,27 +628,27 @@ void HotfixDatabaseConnection::DoPrepareStatements() " WHERE locale = ?", CONNECTION_SYNCH); // SkillLineAbility.db2 - PrepareStatement(HOTFIX_SEL_SKILL_LINE_ABILITY, "SELECT ID, SpellID, RaceMask, ClassMask, SupercedesSpell, SkillLine, MinSkillLineRank, " - "TrivialSkillLineRankHigh, TrivialSkillLineRankLow, UniqueBit, TradeSkillCategoryID, AquireMethod, NumSkillUps FROM skill_line_ability" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SKILL_LINE_ABILITY, "SELECT ID, SpellID, RaceMask, SupercedesSpell, Unknown703, SkillLine, MinSkillLineRank, " + "TrivialSkillLineRankHigh, TrivialSkillLineRankLow, UniqueBit, TradeSkillCategoryID, AquireMethod, NumSkillUps, ClassMask" + " FROM skill_line_ability ORDER BY ID DESC", CONNECTION_SYNCH); // SkillRaceClassInfo.db2 - PrepareStatement(HOTFIX_SEL_SKILL_RACE_CLASS_INFO, "SELECT ID, RaceMask, ClassMask, SkillID, Flags, SkillTierID, Availability, MinLevel" + PrepareStatement(HOTFIX_SEL_SKILL_RACE_CLASS_INFO, "SELECT ID, RaceMask, SkillID, Flags, SkillTierID, Availability, MinLevel, ClassMask" " FROM skill_race_class_info ORDER BY ID DESC", CONNECTION_SYNCH); // SoundKit.db2 - PrepareStatement(HOTFIX_SEL_SOUND_KIT, "SELECT ID, Name, VolumeFloat, MinDistance, DistanceCutoff, VolumeVariationPlus, VolumeVariationMinus, " - "PitchVariationPlus, PitchVariationMinus, PitchAdjust, Flags, SoundEntriesAdvancedID, BusOverwriteID, SoundType, EAXDef, DialogType, Unk700" - " FROM sound_kit ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SOUND_KIT, "SELECT Name, VolumeFloat, MinDistance, DistanceCutoff, VolumeVariationPlus, VolumeVariationMinus, " + "PitchVariationPlus, PitchVariationMinus, PitchAdjust, Flags, SoundEntriesAdvancedID, BusOverwriteID, SoundType, EAXDef, DialogType, Unk700, " + "ID FROM sound_kit ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_SOUND_KIT, "SELECT ID, Name_lang FROM sound_kit_locale WHERE locale = ?", CONNECTION_SYNCH); // SpecializationSpells.db2 - PrepareStatement(HOTFIX_SEL_SPECIALIZATION_SPELLS, "SELECT ID, SpellID, OverridesSpellID, Description, SpecID, OrderIndex" + PrepareStatement(HOTFIX_SEL_SPECIALIZATION_SPELLS, "SELECT SpellID, OverridesSpellID, Description, SpecID, OrderIndex, ID" " FROM specialization_spells ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_SPECIALIZATION_SPELLS, "SELECT ID, Description_lang FROM specialization_spells_locale WHERE locale = ?", CONNECTION_SYNCH); // Spell.db2 - PrepareStatement(HOTFIX_SEL_SPELL, "SELECT ID, Name, NameSubtext, Description, AuraDescription, MiscID, DescriptionVariablesID FROM spell" + PrepareStatement(HOTFIX_SEL_SPELL, "SELECT Name, NameSubtext, Description, AuraDescription, MiscID, ID, DescriptionVariablesID FROM spell" " ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_SPELL, "SELECT ID, Name_lang, NameSubtext_lang, Description_lang, AuraDescription_lang FROM spell_locale" " WHERE locale = ?", CONNECTION_SYNCH); @@ -677,13 +674,13 @@ void HotfixDatabaseConnection::DoPrepareStatements() "DispelType, Mechanic, PreventionType FROM spell_categories ORDER BY ID DESC", CONNECTION_SYNCH); // SpellCategory.db2 - PrepareStatement(HOTFIX_SEL_SPELL_CATEGORY, "SELECT ID, Name, ChargeRecoveryTime, Unk703, Flags, UsesPerWeek, MaxCharges FROM spell_category" + PrepareStatement(HOTFIX_SEL_SPELL_CATEGORY, "SELECT ID, Name, ChargeRecoveryTime, Flags, UsesPerWeek, MaxCharges, Unk703 FROM spell_category" " ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_SPELL_CATEGORY, "SELECT ID, Name_lang FROM spell_category_locale WHERE locale = ?", CONNECTION_SYNCH); // SpellClassOptions.db2 PrepareStatement(HOTFIX_SEL_SPELL_CLASS_OPTIONS, "SELECT ID, SpellID, SpellClassMask1, SpellClassMask2, SpellClassMask3, SpellClassMask4, " - "ModalNextSpell, SpellClassSet FROM spell_class_options ORDER BY ID DESC", CONNECTION_SYNCH); + "SpellClassSet, ModalNextSpell FROM spell_class_options ORDER BY ID DESC", CONNECTION_SYNCH); // SpellCooldowns.db2 PrepareStatement(HOTFIX_SEL_SPELL_COOLDOWNS, "SELECT ID, SpellID, CategoryRecoveryTime, RecoveryTime, StartRecoveryTime, DifficultyID" @@ -693,11 +690,11 @@ void HotfixDatabaseConnection::DoPrepareStatements() PrepareStatement(HOTFIX_SEL_SPELL_DURATION, "SELECT ID, Duration, MaxDuration, DurationPerLevel FROM spell_duration ORDER BY ID DESC", CONNECTION_SYNCH); // SpellEffect.db2 - PrepareStatement(HOTFIX_SEL_SPELL_EFFECT, "SELECT ID, EffectAmplitude, EffectAuraPeriod, EffectBasePoints, EffectBonusCoefficient, " - "EffectChainAmplitude, EffectDieSides, EffectItemType, EffectMiscValue, EffectMiscValueB, EffectPointsPerResource, EffectRealPointsPerLevel, " - "EffectSpellClassMask1, EffectSpellClassMask2, EffectSpellClassMask3, EffectSpellClassMask4, EffectTriggerSpell, EffectPosFacing, SpellID, " - "EffectAttributes, BonusCoefficientFromAP, EffectAura, EffectChainTargets, DifficultyID, Effect, EffectMechanic, EffectRadiusIndex, " - "EffectRadiusMaxIndex, ImplicitTarget1, ImplicitTarget2, EffectIndex FROM spell_effect ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPELL_EFFECT, "SELECT EffectAmplitude, EffectBonusCoefficient, EffectChainAmplitude, EffectPointsPerResource, " + "EffectRealPointsPerLevel, EffectSpellClassMask1, EffectSpellClassMask2, EffectSpellClassMask3, EffectSpellClassMask4, EffectPosFacing, " + "BonusCoefficientFromAP, ID, DifficultyID, Effect, EffectAura, EffectAuraPeriod, EffectBasePoints, EffectChainTargets, EffectDieSides, " + "EffectItemType, EffectMechanic, EffectMiscValue, EffectMiscValueB, EffectRadiusIndex, EffectRadiusMaxIndex, EffectTriggerSpell, " + "ImplicitTarget1, ImplicitTarget2, SpellID, EffectIndex, EffectAttributes FROM spell_effect ORDER BY ID DESC", CONNECTION_SYNCH); // SpellEffectScaling.db2 PrepareStatement(HOTFIX_SEL_SPELL_EFFECT_SCALING, "SELECT ID, Coefficient, Variance, ResourceCoefficient, SpellEffectID FROM spell_effect_scaling" @@ -717,16 +714,16 @@ void HotfixDatabaseConnection::DoPrepareStatements() // SpellItemEnchantment.db2 PrepareStatement(HOTFIX_SEL_SPELL_ITEM_ENCHANTMENT, "SELECT ID, EffectSpellID1, EffectSpellID2, EffectSpellID3, Name, EffectScalingPoints1, " - "EffectScalingPoints2, EffectScalingPoints3, PlayerConditionID, TransmogCost, TextureFileDataID, EffectPointsMin1, EffectPointsMin2, " - "EffectPointsMin3, ItemVisual, Flags, RequiredSkillID, RequiredSkillRank, ItemLevel, Charges, Effect1, Effect2, Effect3, ConditionID, " - "MinLevel, MaxLevel, ScalingClass, ScalingClassRestricted FROM spell_item_enchantment ORDER BY ID DESC", CONNECTION_SYNCH); + "EffectScalingPoints2, EffectScalingPoints3, TransmogCost, TextureFileDataID, EffectPointsMin1, EffectPointsMin2, EffectPointsMin3, " + "ItemVisual, Flags, RequiredSkillID, RequiredSkillRank, ItemLevel, Charges, Effect1, Effect2, Effect3, ConditionID, MinLevel, MaxLevel, " + "ScalingClass, ScalingClassRestricted, PlayerConditionID FROM spell_item_enchantment ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_SPELL_ITEM_ENCHANTMENT, "SELECT ID, Name_lang FROM spell_item_enchantment_locale WHERE locale = ?", CONNECTION_SYNCH); // SpellItemEnchantmentCondition.db2 PrepareStatement(HOTFIX_SEL_SPELL_ITEM_ENCHANTMENT_CONDITION, "SELECT ID, LTOperandType1, LTOperandType2, LTOperandType3, LTOperandType4, " - "LTOperandType5, LTOperand1, LTOperand2, LTOperand3, LTOperand4, LTOperand5, Operator1, Operator2, Operator3, Operator4, Operator5, " - "RTOperandType1, RTOperandType2, RTOperandType3, RTOperandType4, RTOperandType5, RTOperand1, RTOperand2, RTOperand3, RTOperand4, RTOperand5, " - "Logic1, Logic2, Logic3, Logic4, Logic5 FROM spell_item_enchantment_condition ORDER BY ID DESC", CONNECTION_SYNCH); + "LTOperandType5, Operator1, Operator2, Operator3, Operator4, Operator5, RTOperandType1, RTOperandType2, RTOperandType3, RTOperandType4, " + "RTOperandType5, RTOperand1, RTOperand2, RTOperand3, RTOperand4, RTOperand5, Logic1, Logic2, Logic3, Logic4, Logic5, LTOperand1, LTOperand2, " + "LTOperand3, LTOperand4, LTOperand5 FROM spell_item_enchantment_condition ORDER BY ID DESC", CONNECTION_SYNCH); // SpellLearnSpell.db2 PrepareStatement(HOTFIX_SEL_SPELL_LEARN_SPELL, "SELECT ID, LearnSpellID, SpellID, OverridesSpellID FROM spell_learn_spell ORDER BY ID DESC", CONNECTION_SYNCH); @@ -741,13 +738,12 @@ void HotfixDatabaseConnection::DoPrepareStatements() "MultistrikeSpeedMod, CastingTimeIndex, DurationIndex, RangeIndex, SpellIconID, ActiveIconID, SchoolMask FROM spell_misc ORDER BY ID DESC", CONNECTION_SYNCH); // SpellPower.db2 - PrepareStatement(HOTFIX_SEL_SPELL_POWER, "SELECT ID, SpellID, ManaCost, ManaCostPercentage, ManaCostPercentagePerSecond, RequiredAura, " - "HealthCostPercentage, ManaCostPerSecond, ManaCostAdditional, PowerDisplayID, UnitPowerBarID, PowerIndex, PowerType, ManaCostPerLevel" + PrepareStatement(HOTFIX_SEL_SPELL_POWER, "SELECT SpellID, ManaCost, ManaCostPercentage, ManaCostPercentagePerSecond, RequiredAura, " + "HealthCostPercentage, PowerIndex, PowerType, ID, ManaCostPerLevel, ManaCostPerSecond, ManaCostAdditional, PowerDisplayID, UnitPowerBarID" " FROM spell_power ORDER BY ID DESC", CONNECTION_SYNCH); // SpellPowerDifficulty.db2 - PrepareStatement(HOTFIX_SEL_SPELL_POWER_DIFFICULTY, "SELECT SpellPowerID, DifficultyID, PowerIndex FROM spell_power_difficulty" - " ORDER BY SpellPowerID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPELL_POWER_DIFFICULTY, "SELECT DifficultyID, PowerIndex, ID FROM spell_power_difficulty ORDER BY ID DESC", CONNECTION_SYNCH); // SpellProcsPerMinute.db2 PrepareStatement(HOTFIX_SEL_SPELL_PROCS_PER_MINUTE, "SELECT ID, BaseProcRate, Flags FROM spell_procs_per_minute ORDER BY ID DESC", CONNECTION_SYNCH); @@ -770,7 +766,7 @@ void HotfixDatabaseConnection::DoPrepareStatements() " ORDER BY ID DESC", CONNECTION_SYNCH); // SpellScaling.db2 - PrepareStatement(HOTFIX_SEL_SPELL_SCALING, "SELECT ID, SpellID, ScalesFromItemLevel, ScalingClass, MinScalingLevel, MaxScalingLevel" + PrepareStatement(HOTFIX_SEL_SPELL_SCALING, "SELECT ID, SpellID, ScalesFromItemLevel, MinScalingLevel, MaxScalingLevel, ScalingClass" " FROM spell_scaling ORDER BY ID DESC", CONNECTION_SYNCH); // SpellShapeshift.db2 @@ -780,21 +776,21 @@ void HotfixDatabaseConnection::DoPrepareStatements() // SpellShapeshiftForm.db2 PrepareStatement(HOTFIX_SEL_SPELL_SHAPESHIFT_FORM, "SELECT ID, Name, WeaponDamageVariance, Flags, AttackIconID, CombatRoundTime, " "CreatureDisplayID1, CreatureDisplayID2, CreatureDisplayID3, CreatureDisplayID4, PresetSpellID1, PresetSpellID2, PresetSpellID3, " - "PresetSpellID4, PresetSpellID5, PresetSpellID6, PresetSpellID7, PresetSpellID8, CreatureType, MountTypeID, BonusActionBar" + "PresetSpellID4, PresetSpellID5, PresetSpellID6, PresetSpellID7, PresetSpellID8, MountTypeID, CreatureType, BonusActionBar" " FROM spell_shapeshift_form ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_SPELL_SHAPESHIFT_FORM, "SELECT ID, Name_lang FROM spell_shapeshift_form_locale WHERE locale = ?", CONNECTION_SYNCH); // SpellTargetRestrictions.db2 - PrepareStatement(HOTFIX_SEL_SPELL_TARGET_RESTRICTIONS, "SELECT ID, SpellID, ConeAngle, Width, Targets, MaxTargetLevel, TargetCreatureType, " - "DifficultyID, MaxAffectedTargets FROM spell_target_restrictions ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPELL_TARGET_RESTRICTIONS, "SELECT ID, SpellID, ConeAngle, Width, Targets, TargetCreatureType, DifficultyID, " + "MaxAffectedTargets, MaxTargetLevel FROM spell_target_restrictions ORDER BY ID DESC", CONNECTION_SYNCH); // SpellTotems.db2 PrepareStatement(HOTFIX_SEL_SPELL_TOTEMS, "SELECT ID, SpellID, Totem1, Totem2, RequiredTotemCategoryID1, RequiredTotemCategoryID2" " FROM spell_totems ORDER BY ID DESC", CONNECTION_SYNCH); // SpellXSpellVisual.db2 - PrepareStatement(HOTFIX_SEL_SPELL_X_SPELL_VISUAL, "SELECT ID, SpellID, Unk620, SpellVisualID1, SpellVisualID2, PlayerConditionID, DifficultyID, " - "Flags FROM spell_x_spell_visual ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPELL_X_SPELL_VISUAL, "SELECT SpellID, Unk620, SpellVisualID1, SpellVisualID2, PlayerConditionID, DifficultyID, " + "Flags, ID FROM spell_x_spell_visual ORDER BY ID DESC", CONNECTION_SYNCH); // SummonProperties.db2 PrepareStatement(HOTFIX_SEL_SUMMON_PROPERTIES, "SELECT ID, Category, Faction, Type, Slot, Flags FROM summon_properties ORDER BY ID DESC", CONNECTION_SYNCH); @@ -805,23 +801,23 @@ void HotfixDatabaseConnection::DoPrepareStatements() PREPARE_LOCALE_STMT(HOTFIX_SEL_TALENT, "SELECT ID, Description_lang FROM talent_locale WHERE locale = ?", CONNECTION_SYNCH); // TaxiNodes.db2 - PrepareStatement(HOTFIX_SEL_TAXI_NODES, "SELECT ID, PosX, PosY, PosZ, Name, MountCreatureID1, MountCreatureID2, MapOffsetX, MapOffsetY, MapID, " - "ConditionID, LearnableIndex, Flags FROM taxi_nodes ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_TAXI_NODES, "SELECT PosX, PosY, PosZ, Name, MountCreatureID1, MountCreatureID2, MapOffsetX, MapOffsetY, MapID, " + "ConditionID, LearnableIndex, Flags, ID FROM taxi_nodes ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_TAXI_NODES, "SELECT ID, Name_lang FROM taxi_nodes_locale WHERE locale = ?", CONNECTION_SYNCH); // TaxiPath.db2 - PrepareStatement(HOTFIX_SEL_TAXI_PATH, "SELECT ID, `From`, `To`, Cost FROM taxi_path ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_TAXI_PATH, "SELECT `From`, `To`, ID, Cost FROM taxi_path ORDER BY ID DESC", CONNECTION_SYNCH); // TaxiPathNode.db2 - PrepareStatement(HOTFIX_SEL_TAXI_PATH_NODE, "SELECT ID, LocX, LocY, LocZ, Delay, PathID, MapID, ArrivalEventID, DepartureEventID, NodeIndex, " - "Flags FROM taxi_path_node ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_TAXI_PATH_NODE, "SELECT LocX, LocY, LocZ, Delay, PathID, MapID, ArrivalEventID, DepartureEventID, NodeIndex, Flags, " + "ID FROM taxi_path_node ORDER BY ID DESC", CONNECTION_SYNCH); // TotemCategory.db2 PrepareStatement(HOTFIX_SEL_TOTEM_CATEGORY, "SELECT ID, Name, CategoryMask, CategoryType FROM totem_category ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_TOTEM_CATEGORY, "SELECT ID, Name_lang FROM totem_category_locale WHERE locale = ?", CONNECTION_SYNCH); // Toy.db2 - PrepareStatement(HOTFIX_SEL_TOY, "SELECT ID, ItemID, Description, Flags, CategoryFilter FROM toy ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_TOY, "SELECT ItemID, Description, Flags, CategoryFilter, ID FROM toy ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_TOY, "SELECT ID, Description_lang FROM toy_locale WHERE locale = ?", CONNECTION_SYNCH); // TransportAnimation.db2 @@ -832,9 +828,9 @@ void HotfixDatabaseConnection::DoPrepareStatements() PrepareStatement(HOTFIX_SEL_TRANSPORT_ROTATION, "SELECT ID, TransportID, TimeIndex, X, Y, Z, W FROM transport_rotation ORDER BY ID DESC", CONNECTION_SYNCH); // UnitPowerBar.db2 - PrepareStatement(HOTFIX_SEL_UNIT_POWER_BAR, "SELECT ID, MaxPower, RegenerationPeace, RegenerationCombat, FileDataID1, FileDataID2, FileDataID3, " + PrepareStatement(HOTFIX_SEL_UNIT_POWER_BAR, "SELECT ID, RegenerationPeace, RegenerationCombat, FileDataID1, FileDataID2, FileDataID3, " "FileDataID4, FileDataID5, FileDataID6, Color1, Color2, Color3, Color4, Color5, Color6, Name, Cost, OutOfError, ToolTip, StartInset, " - "EndInset, StartPower, Flags, MinPower, CenterPower, BarType FROM unit_power_bar ORDER BY ID DESC", CONNECTION_SYNCH); + "EndInset, StartPower, Flags, CenterPower, BarType, MinPower, MaxPower FROM unit_power_bar ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_UNIT_POWER_BAR, "SELECT ID, Name_lang, Cost_lang, OutOfError_lang, ToolTip_lang FROM unit_power_bar_locale" " WHERE locale = ?", CONNECTION_SYNCH); @@ -850,26 +846,27 @@ void HotfixDatabaseConnection::DoPrepareStatements() PrepareStatement(HOTFIX_SEL_VEHICLE_SEAT, "SELECT ID, Flags1, Flags2, Flags3, AttachmentOffsetX, AttachmentOffsetY, AttachmentOffsetZ, " "EnterPreDelay, EnterSpeed, EnterGravity, EnterMinDuration, EnterMaxDuration, EnterMinArcHeight, EnterMaxArcHeight, ExitPreDelay, ExitSpeed, " "ExitGravity, ExitMinDuration, ExitMaxDuration, ExitMinArcHeight, ExitMaxArcHeight, PassengerYaw, PassengerPitch, PassengerRoll, " - "VehicleEnterAnimDelay, VehicleExitAnimDelay, EnterUISoundID, ExitUISoundID, CameraEnteringDelay, CameraEnteringDuration, CameraExitingDelay, " - "CameraExitingDuration, CameraOffsetX, CameraOffsetY, CameraOffsetZ, CameraPosChaseRate, CameraFacingChaseRate, CameraEnteringZoom, " - "CameraSeatZoomMin, CameraSeatZoomMax, UISkinFileDataID, EnterAnimStart, EnterAnimLoop, RideAnimStart, RideAnimLoop, RideUpperAnimStart, " - "RideUpperAnimLoop, ExitAnimStart, ExitAnimLoop, ExitAnimEnd, VehicleEnterAnim, VehicleExitAnim, VehicleRideAnimLoop, EnterAnimKitID, " - "RideAnimKitID, ExitAnimKitID, VehicleEnterAnimKitID, VehicleRideAnimKitID, VehicleExitAnimKitID, CameraModeID, AttachmentID, " - "PassengerAttachmentID, VehicleEnterAnimBone, VehicleExitAnimBone, VehicleRideAnimLoopBone, VehicleAbilityDisplay FROM vehicle_seat" + "VehicleEnterAnimDelay, VehicleExitAnimDelay, CameraEnteringDelay, CameraEnteringDuration, CameraExitingDelay, CameraExitingDuration, " + "CameraOffsetX, CameraOffsetY, CameraOffsetZ, CameraPosChaseRate, CameraFacingChaseRate, CameraEnteringZoom, CameraSeatZoomMin, " + "CameraSeatZoomMax, UISkinFileDataID, EnterAnimStart, EnterAnimLoop, RideAnimStart, RideAnimLoop, RideUpperAnimStart, RideUpperAnimLoop, " + "ExitAnimStart, ExitAnimLoop, ExitAnimEnd, VehicleEnterAnim, VehicleExitAnim, VehicleRideAnimLoop, EnterAnimKitID, RideAnimKitID, " + "ExitAnimKitID, VehicleEnterAnimKitID, VehicleRideAnimKitID, VehicleExitAnimKitID, CameraModeID, AttachmentID, PassengerAttachmentID, " + "VehicleEnterAnimBone, VehicleExitAnimBone, VehicleRideAnimLoopBone, VehicleAbilityDisplay, EnterUISoundID, ExitUISoundID FROM vehicle_seat" " ORDER BY ID DESC", CONNECTION_SYNCH); // WmoAreaTable.db2 - PrepareStatement(HOTFIX_SEL_WMO_AREA_TABLE, "SELECT ID, WMOGroupID, AreaName, WMOID, AmbienceID, ZoneMusic, IntroSound, AreaTableID, " - "UWIntroSound, UWAmbience, NameSet, SoundProviderPref, SoundProviderPrefUnderwater, Flags, UWZoneMusic FROM wmo_area_table ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_WMO_AREA_TABLE, "SELECT WMOGroupID, AreaName, WMOID, AmbienceID, ZoneMusic, IntroSound, AreaTableID, UWIntroSound, " + "UWAmbience, NameSet, SoundProviderPref, SoundProviderPrefUnderwater, Flags, ID, UWZoneMusic FROM wmo_area_table ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_WMO_AREA_TABLE, "SELECT ID, AreaName_lang FROM wmo_area_table_locale WHERE locale = ?", CONNECTION_SYNCH); // WorldMapArea.db2 - PrepareStatement(HOTFIX_SEL_WORLD_MAP_AREA, "SELECT ID, AreaName, LocLeft, LocRight, LocTop, LocBottom, MapID, AreaID, DisplayMapID, " - "DefaultDungeonFloor, ParentWorldMapID, Flags, PlayerConditionID, LevelRangeMin, LevelRangeMax FROM world_map_area ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_WORLD_MAP_AREA, "SELECT AreaName, LocLeft, LocRight, LocTop, LocBottom, MapID, AreaID, DisplayMapID, " + "DefaultDungeonFloor, ParentWorldMapID, Flags, LevelRangeMin, LevelRangeMax, BountySetID, BountyBoardLocation, ID, PlayerConditionID" + " FROM world_map_area ORDER BY ID DESC", CONNECTION_SYNCH); // WorldMapOverlay.db2 - PrepareStatement(HOTFIX_SEL_WORLD_MAP_OVERLAY, "SELECT ID, TextureName, MapAreaID, AreaID1, AreaID2, AreaID3, AreaID4, TextureWidth, " - "TextureHeight, OffsetX, OffsetY, HitRectTop, HitRectLeft, HitRectBottom, HitRectRight, PlayerConditionID, Flags FROM world_map_overlay" + PrepareStatement(HOTFIX_SEL_WORLD_MAP_OVERLAY, "SELECT ID, TextureName, TextureWidth, TextureHeight, MapAreaID, AreaID1, AreaID2, AreaID3, " + "AreaID4, OffsetX, OffsetY, HitRectTop, HitRectLeft, HitRectBottom, HitRectRight, PlayerConditionID, Flags FROM world_map_overlay" " ORDER BY ID DESC", CONNECTION_SYNCH); // WorldMapTransforms.db2 diff --git a/src/server/database/Database/Implementation/HotfixDatabase.h b/src/server/database/Database/Implementation/HotfixDatabase.h index f9ef5610ca3..5c3b0ddb196 100644 --- a/src/server/database/Database/Implementation/HotfixDatabase.h +++ b/src/server/database/Database/Implementation/HotfixDatabase.h @@ -15,8 +15,8 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ - // DO NOT EDIT! - // Autogenerated from DB2Structure.h +// DO NOT EDIT! +// Autogenerated from DB2Structure.h #ifndef _HOTFIXDATABASE_H #define _HOTFIXDATABASE_H @@ -177,8 +177,6 @@ enum HotfixDatabaseStatements HOTFIX_SEL_GLYPH_PROPERTIES, - HOTFIX_SEL_GLYPH_SLOT, - HOTFIX_SEL_GUILD_COLOR_BACKGROUND, HOTFIX_SEL_GUILD_COLOR_BORDER, diff --git a/src/server/game/DataStores/DB2Metadata.h b/src/server/game/DataStores/DB2Metadata.h new file mode 100644 index 00000000000..51dc273e2bc --- /dev/null +++ b/src/server/game/DataStores/DB2Metadata.h @@ -0,0 +1,6283 @@ +/* + * Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef DB2Metadata_h__ +#define DB2Metadata_h__ + +#include "DB2Meta.h" + +struct AchievementMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ssishhhhhhhbbbi"; + static uint8 const arraySizes[15] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(14, 15, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct AdventureJournalMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sssiisshhhhhhbbbbbbbbb"; + static uint8 const arraySizes[22] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1 }; + static DB2Meta instance(-1, 22, types, arraySizes); + return &instance; + } +}; + +struct AdventureMapPOIMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fissbiiiiiiii"; + static uint8 const arraySizes[13] = { 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 13, types, arraySizes); + return &instance; + } +}; + +struct AnimKitMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ihh"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct AnimKitBoneSetAliasMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "bb"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct AnimKitConfigMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "i"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct AnimKitConfigBoneSetMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hhb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct AnimKitPriorityMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "b"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct AnimKitSegmentMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iiifihhhbbbbbbbi"; + 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, types, arraySizes); + return &instance; + } +}; + +struct AnimReplacementMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hhhh"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +struct AnimReplacementSetMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "b"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct AnimationDataMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sihhb"; + static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 5, types, arraySizes); + return &instance; + } +}; + +struct AreaGroupMemberMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hh"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct AreaPOIMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fsshhhhhhbbbi"; + static uint8 const arraySizes[13] = { 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 13, types, arraySizes); + return &instance; + } +}; + +struct AreaPOIStateMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "shbbi"; + static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 5, types, arraySizes); + return &instance; + } +}; + +struct AreaTableMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iSfshhhhhhhhhhbbbbbbbbi"; + static uint8 const arraySizes[23] = { 2, 1, 1, 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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct AreaTriggerActionSetMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "h"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct AreaTriggerBoxMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "f"; + static uint8 const arraySizes[1] = { 3 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct AreaTriggerCylinderMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fff"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct AreaTriggerSphereMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "f"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct ArtifactMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "siiihhbb"; + static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 8, types, arraySizes); + return &instance; + } +}; + +struct ArtifactAppearanceMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "siffihhhbbbbiii"; + 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, types, arraySizes); + return &instance; + } +}; + +struct ArtifactAppearanceSetMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sshhbbbi"; + static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(7, 8, types, arraySizes); + return &instance; + } +}; + +struct ArtifactCategoryMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hh"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct ArtifactPowerMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fbbbii"; + static uint8 const arraySizes[6] = { 2, 1, 1, 1, 1, 1 }; + static DB2Meta instance(4, 6, types, arraySizes); + return &instance; + } +}; + +struct ArtifactPowerLinkMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hh"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct ArtifactPowerRankMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ifhhb"; + static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 5, types, arraySizes); + return &instance; + } +}; + +struct ArtifactQuestXPMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "i"; + static uint8 const arraySizes[1] = { 10 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct ArtifactUnlockMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hhbbi"; + static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 5, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct BankBagSlotPricesMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "i"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct BannedAddOnsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "SSb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct BattlePetAbilityMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "isshbbi"; + static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 7, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct BattlePetAbilityStateMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ihb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct BattlePetBreedQualityMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fb"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct BattlePetBreedStateMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hbb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct BattlePetEffectPropertiesMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "shb"; + static uint8 const arraySizes[3] = { 6, 1, 6 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct BattlePetNPCTeamMemberMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct BattlePetSpeciesMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iiisshbbi"; + static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(8, 9, types, arraySizes); + return &instance; + } +}; + +struct BattlePetSpeciesStateMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ihb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct BattlePetSpeciesXAbilityMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hhbb"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +struct BattlePetStateMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "shb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct BattlePetVisualMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "shhhhbb"; + static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 7, types, arraySizes); + return &instance; + } +}; + +struct BattlemasterListMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sishhhbbbbbbbbb"; + static uint8 const arraySizes[15] = { 1, 1, 1, 16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 15, types, arraySizes); + return &instance; + } +}; + +struct BoneWindModifierModelMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ii"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct BoneWindModifiersMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ff"; + static uint8 const arraySizes[2] = { 3, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct BountyMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ihhb"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +struct BountySetMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hh"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct BroadcastTextMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sshhhbbii"; + static uint8 const arraySizes[9] = { 1, 1, 3, 3, 1, 1, 1, 2, 1 }; + static DB2Meta instance(-1, 9, types, arraySizes); + return &instance; + } +}; + +struct CameraEffectMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "b"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct CameraEffectEntryMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ffffffffhhbbbbbb"; + 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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct CameraShakesMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ffffbbbbi"; + static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 9, types, arraySizes); + return &instance; + } +}; + +struct CastableRaidBuffsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ii"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct Cfg_RegionsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sib"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct CharBaseInfoMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "bb"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct CharBaseSectionMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "bbb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct CharComponentTextureLayoutsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hh"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct CharComponentTextureSectionsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hhhhbbb"; + static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 7, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct CharShipmentMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iiiiihbb"; + static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 8, types, arraySizes); + return &instance; + } +}; + +struct CharShipmentContainerMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sshhhhhhbbbbbbbi"; + 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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct CharTitlesMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sshhb"; + static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 5, types, arraySizes); + return &instance; + } +}; + +struct CharacterFaceBoneSetMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ibbb"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct CharacterLoadoutMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ibb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct CharacterLoadoutItemMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ih"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct ChatChannelsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "issb"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +struct ChatProfanityMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sb"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct ChrClassTitleMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ssb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct ChrClassUIDisplayMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hhb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct ChrClassVillainMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sbb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct ChrClassesMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "SsssSiiihhhbbbbbbbi"; + static uint8 const arraySizes[19] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(18, 19, types, arraySizes); + return &instance; + } +}; + +struct ChrClassesXPowerTypesMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "bb"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct ChrRacesMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iSSsssSSiiffihhhhhhhhhhbbbbbbbbbbii"; + static uint8 const arraySizes[35] = { 1, 1, 1, 1, 1, 1, 2, 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 }; + static DB2Meta instance(-1, 35, types, arraySizes); + return &instance; + } +}; + +struct ChrSpecializationMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "isssshbbbbbiii"; + static uint8 const arraySizes[14] = { 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(11, 14, types, arraySizes); + return &instance; + } +}; + +struct ChrUpgradeBucketMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hbi"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(2, 3, types, arraySizes); + return &instance; + } +}; + +struct ChrUpgradeBucketSpellMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ih"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct CinematicCameraMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sffh"; + static uint8 const arraySizes[4] = { 1, 3, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +struct CinematicSequencesMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hh"; + static uint8 const arraySizes[2] = { 1, 8 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct CloakDampeningMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fffff"; + static uint8 const arraySizes[5] = { 5, 5, 2, 2, 1 }; + static DB2Meta instance(-1, 5, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct ComponentTextureFileDataMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "bbb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct CreatureMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iiifssssbbbb"; + static uint8 const arraySizes[12] = { 3, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 12, types, arraySizes); + return &instance; + } +}; + +struct CreatureDifficultyMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iihbbb"; + static uint8 const arraySizes[6] = { 1, 7, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 6, types, arraySizes); + return &instance; + } +}; + +struct CreatureDispXUiCameraMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ih"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct CreatureDisplayInfoMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iffiSiiifhhhhhhbbbbbb"; + static uint8 const arraySizes[21] = { 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 21, types, arraySizes); + return &instance; + } +}; + +struct CreatureDisplayInfoCondMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iiiibbiiiiiiiii"; + static uint8 const arraySizes[15] = { 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3 }; + static DB2Meta instance(-1, 15, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct CreatureDisplayInfoTrnMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iifh"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +struct CreatureFamilyMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ffsShhbbbb"; + static uint8 const arraySizes[10] = { 1, 1, 1, 1, 2, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 10, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct CreatureModelDataMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ffffffffffffffffffiiiiiiiiiiii"; + static uint8 const arraySizes[30] = { 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, 1, 1 }; + static DB2Meta instance(-1, 30, types, arraySizes); + return &instance; + } +}; + +struct CreatureMovementInfoMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "f"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct CreatureSoundDataMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ffbbiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"; + static uint8 const arraySizes[37] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 37, types, arraySizes); + return &instance; + } +}; + +struct CreatureTypeMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sb"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct CriteriaMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iiihhhbbbbb"; + static uint8 const arraySizes[11] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 11, types, arraySizes); + return &instance; + } +}; + +struct CriteriaTreeMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iishhbi"; + static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 7, types, arraySizes); + return &instance; + } +}; + +struct CriteriaTreeXEffectMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hh"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct CurrencyCategoryMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sbb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct CurrencyTypesMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sSiiisbbbi"; + static uint8 const arraySizes[10] = { 1, 2, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 10, types, arraySizes); + return &instance; + } +}; + +struct CurveMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "bb"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct CurvePointMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fhb"; + static uint8 const arraySizes[3] = { 2, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct DecalPropertiesMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iffffffffbbiii"; + static uint8 const arraySizes[14] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 14, types, arraySizes); + return &instance; + } +}; + +struct DeclinedWordMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "si"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(1, 2, types, arraySizes); + return &instance; + } +}; + +struct DeclinedWordCasesMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sbi"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct DeviceBlacklistMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hh"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct DeviceDefaultSettingsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hhb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct DifficultyMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sbbbbbbbbbbbb"; + static uint8 const arraySizes[13] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 13, types, arraySizes); + return &instance; + } +}; + +struct DissolveEffectMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fffffffbbii"; + static uint8 const arraySizes[11] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 11, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct DungeonEncounterMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sihhbbbi"; + static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 8, types, arraySizes); + return &instance; + } +}; + +struct DungeonMapMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ffhhbbi"; + static uint8 const arraySizes[7] = { 2, 2, 1, 1, 1, 1, 1 }; + static DB2Meta instance(6, 7, types, arraySizes); + return &instance; + } +}; + +struct DungeonMapChunkMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fihhh"; + static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 5, types, arraySizes); + return &instance; + } +}; + +struct DurabilityCostsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hh"; + static uint8 const arraySizes[2] = { 21, 8 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct DurabilityQualityMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "f"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct EdgeGlowEffectMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fffffffffb"; + static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 10, types, arraySizes); + return &instance; + } +}; + +struct EmotesMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "Siihbiiii"; + static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 9, types, arraySizes); + return &instance; + } +}; + +struct EmotesTextMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sh"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct EmotesTextDataMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "shb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct EmotesTextSoundMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hbbbi"; + static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 5, types, arraySizes); + return &instance; + } +}; + +struct EnvironmentalDamageMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hb"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct ExhaustionMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ifffsfsi"; + static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(7, 8, types, arraySizes); + return &instance; + } +}; + +struct FactionMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iifssihhhhbbbb"; + static uint8 const arraySizes[14] = { 4, 4, 2, 1, 1, 4, 1, 4, 4, 1, 2, 1, 1, 1 }; + static DB2Meta instance(-1, 14, types, arraySizes); + return &instance; + } +}; + +struct FactionGroupMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ssb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct FootprintTexturesMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "si"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(1, 2, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct FriendshipRepReactionMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "shb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct FriendshipReputationMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ishi"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(3, 4, types, arraySizes); + return &instance; + } +}; + +struct FullScreenEffectMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fffffffffffffffffffiiffffffffffffffbiii"; + static uint8 const arraySizes[39] = { 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(-1, 39, types, arraySizes); + return &instance; + } +}; + +struct GMSurveyAnswersMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sbi"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct GMSurveyCurrentSurveyMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "b"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct GMSurveyQuestionsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct GMSurveySurveysMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "b"; + static uint8 const arraySizes[1] = { 15 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct GameObjectArtKitMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ss"; + static uint8 const arraySizes[2] = { 3, 4 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct GameObjectDisplayInfoXSoundKitMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "bii"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct GameObjectsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fffishhhhbbi"; + static uint8 const arraySizes[12] = { 3, 4, 1, 8, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(11, 12, types, arraySizes); + return &instance; + } +}; + +struct GameTipsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sbbb"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct GarrAbilityCategoryMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct GarrBuildingMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iissssihhhhhhhhbbbbbbiii"; + 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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct GarrClassSpecMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ssshbbbi"; + static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(7, 8, types, arraySizes); + return &instance; + } +}; + +struct GarrClassSpecPlayerCondMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "isbiii"; + static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 6, types, arraySizes); + return &instance; + } +}; + +struct GarrEncounterMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "isffihi"; + static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(6, 7, types, arraySizes); + return &instance; + } +}; + +struct GarrEncounterSetXEncounterMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ii"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct GarrEncounterXMechanicMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hbb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct GarrFollItemSetMemberMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ihhb"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct GarrFollowerMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iissiiiihhhhhhbbbbbbbbbbbbbbbbi"; + static uint8 const arraySizes[31] = { 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(30, 31, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct GarrFollowerSetXFollowerMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ii"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct GarrFollowerUICreatureMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ifhbb"; + static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 5, types, arraySizes); + return &instance; + } +}; + +struct GarrFollowerXAbilityMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hhb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct GarrMechanicMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fbi"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct GarrMechanicSetXMechanicMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "bii"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(1, 3, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct GarrMissionMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iisssiiffhhhhhhbbbbbbbbbiiiii"; + static uint8 const arraySizes[29] = { 1, 1, 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 }; + static DB2Meta instance(24, 29, types, arraySizes); + return &instance; + } +}; + +struct GarrMissionTextureMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fh"; + static uint8 const arraySizes[2] = { 2, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct GarrMissionTypeMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "shh"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct GarrMissionXFollowerMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iii"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct GarrPlotBuildingMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "bb"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct GarrPlotInstanceMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sb"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct GarrPlotUICategoryMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sb"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct GarrSiteLevelMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fhhhhbbbb"; + static uint8 const arraySizes[9] = { 2, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 9, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct GarrSpecializationMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ifssbbb"; + static uint8 const arraySizes[7] = { 1, 2, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 7, types, arraySizes); + return &instance; + } +}; + +struct GarrStringMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct GarrTalentMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "issibbbiiiiiiiiiiiii"; + 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, types, arraySizes); + return &instance; + } +}; + +struct GarrTalentTreeMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "bbii"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +struct GarrTypeMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iiiii"; + static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 5, types, arraySizes); + return &instance; + } +}; + +struct GarrUiAnimClassInfoMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fhbb"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct GemPropertiesMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ihh"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct GlobalStringsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ssb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct GlyphBindableSpellMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ih"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct GlyphExclusiveCategoryMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct GlyphRequiredSpecMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hh"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct GroundEffectDoodadMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sffb"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct GroupFinderActivityGrpMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sb"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct GroupFinderCategoryMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sbb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct GuildColorBackgroundMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "bbb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct GuildColorBorderMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "bbb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct GuildColorEmblemMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "bbb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct GuildPerkSpellsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "i"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct HeirloomMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "isiiiihbbi"; + static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 2, 2, 1, 1, 1 }; + static DB2Meta instance(9, 10, types, arraySizes); + return &instance; + } +}; + +struct HelmetAnimScalingMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fii"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct HelmetGeosetVisDataMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "i"; + static uint8 const arraySizes[1] = { 9 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct HolidayDescriptionsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct HolidayNamesMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct HolidaysMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iShhbbbbbbb"; + static uint8 const arraySizes[11] = { 16, 1, 10, 1, 1, 10, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 11, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct ImportPriceQualityMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "f"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct ImportPriceShieldMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "f"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct ImportPriceWeaponMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "f"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct InvasionClientDataMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sfiiiiiii"; + static uint8 const arraySizes[9] = { 1, 2, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(2, 9, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct ItemAppearanceXUiCameraMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hh"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct ItemArmorQualityMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fh"; + static uint8 const arraySizes[2] = { 7, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct ItemArmorShieldMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fh"; + static uint8 const arraySizes[2] = { 7, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct ItemBagFamilyMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct ItemBonusMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ihbb"; + static uint8 const arraySizes[4] = { 2, 1, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +struct ItemBonusListLevelDeltaMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hi"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(1, 2, types, arraySizes); + return &instance; + } +}; + +struct ItemBonusTreeNodeMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hhhb"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +struct ItemChildEquipmentMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iib"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct ItemClassMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fsb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct ItemContextPickerEntryMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "bbiii"; + static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 5, types, arraySizes); + return &instance; + } +}; + +struct ItemCurrencyCostMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "i"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct ItemDamageAmmoMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fh"; + static uint8 const arraySizes[2] = { 7, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct ItemDamageOneHandMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fh"; + static uint8 const arraySizes[2] = { 7, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct ItemDamageOneHandCasterMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fh"; + static uint8 const arraySizes[2] = { 7, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct ItemDamageTwoHandMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fh"; + static uint8 const arraySizes[2] = { 7, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct ItemDamageTwoHandCasterMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fh"; + static uint8 const arraySizes[2] = { 7, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct ItemDisenchantLootMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hhhbbb"; + static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 6, types, arraySizes); + return &instance; + } +}; + +struct ItemDisplayInfoMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iiiiiiiiiiiiiii"; + static uint8 const arraySizes[15] = { 2, 2, 3, 3, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 15, types, arraySizes); + return &instance; + } +}; + +struct ItemDisplayInfoMaterialResMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iib"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct ItemDisplayXUiCameraMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ih"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct ItemEffectMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iiiihhhbb"; + static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 9, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct ItemGroupSoundsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "i"; + static uint8 const arraySizes[1] = { 4 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct ItemLimitCategoryMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sbb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct ItemLimitCategoryConditionMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "bii"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct ItemModifiedAppearanceMeta +{ + 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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct ItemNameDescriptionMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "si"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct ItemPetFoodMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct ItemPriceBaseMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ffh"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct ItemRandomPropertiesMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sh"; + static uint8 const arraySizes[2] = { 1, 5 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct ItemRandomSuffixMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sshh"; + static uint8 const arraySizes[4] = { 1, 1, 5, 5 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct ItemSearchNameMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "siiihhhhbbbbi"; + static uint8 const arraySizes[13] = { 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 13, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct ItemSetSpellMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ihhb"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +struct ItemSparseMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iffiiiiiiiiffsssssififhhhhhhhhhhhhhhhhhhhhbbbbbbbbbbbbbbbbbbbbb"; + static uint8 const arraySizes[63] = { 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 10, 1, 1, 1, 1, 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, 10, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 63, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct ItemSpecOverrideMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ih"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct ItemSubClassMaskMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "isb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct ItemVisualEffectsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct ItemVisualsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "h"; + static uint8 const arraySizes[1] = { 5 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct ItemXBonusTreeMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ih"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct JournalEncounterMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fsshhhhbbi"; + static uint8 const arraySizes[10] = { 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 10, types, arraySizes); + return &instance; + } +}; + +struct JournalEncounterCreatureMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iisshbi"; + static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(6, 7, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct JournalEncounterSectionMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ssiiihhhhhhbbb"; + static uint8 const arraySizes[14] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 14, types, arraySizes); + return &instance; + } +}; + +struct JournalEncounterXDifficultyMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hb"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct JournalInstanceMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iiiisshhbbi"; + static uint8 const arraySizes[11] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(10, 11, types, arraySizes); + return &instance; + } +}; + +struct JournalItemXDifficultyMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hb"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct JournalSectionXDifficultyMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hb"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct JournalTierMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct JournalTierXInstanceMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hh"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct KeyChainMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "b"; + static uint8 const arraySizes[1] = { 32 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct KeystoneAffixMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ssi"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct LanguageWordsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sb"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct LanguagesMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "si"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(1, 2, types, arraySizes); + return &instance; + } +}; + +struct LfgDungeonExpansionMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hhbbbii"; + static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 7, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct LfgDungeonsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "siSshhhhhhhhbbbbbbbbbbbbbbbbbi"; + 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, 1, 1, 1, 1, 1 }; + static DB2Meta instance(29, 30, types, arraySizes); + return &instance; + } +}; + +struct LfgDungeonsGroupingMapMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hhb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct LfgRoleRequirementMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hhb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct LightSkyboxMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sb"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct LiquidMaterialMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "bb"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct LiquidTypeMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sifffffSifihhbbbbbi"; + static uint8 const arraySizes[19] = { 1, 1, 1, 1, 1, 1, 1, 6, 2, 18, 4, 1, 1, 1, 1, 1, 1, 6, 1 }; + static DB2Meta instance(-1, 19, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct LoadingScreensMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iii"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct LocationMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ff"; + static uint8 const arraySizes[2] = { 3, 3 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct MailTemplateMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct ManifestInterfaceActionIconMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "i"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(0, 1, types, arraySizes); + return &instance; + } +}; + +struct ManifestInterfaceDataMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ss"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct ManifestInterfaceItemIconMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "i"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(0, 1, types, arraySizes); + return &instance; + } +}; + +struct ManifestInterfaceTOCDataMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct ManifestMP3Meta +{ + static DB2Meta const* Instance() + { + static char const* types = "i"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(0, 1, types, arraySizes); + return &instance; + } +}; + +struct MapMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "siffssshhhhhhbbbbb"; + static uint8 const arraySizes[18] = { 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 18, types, arraySizes); + return &instance; + } +}; + +struct MapChallengeModeMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hhb"; + static uint8 const arraySizes[3] = { 1, 3, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct MapDifficultyMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "shbbbbbi"; + static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 8, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct MarketingPromotionsXLocaleMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iiiisbb"; + static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 7, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct MinorTalentMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iii"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct ModelAnimCloakDampeningMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "bii"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct ModelFileDataMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "bii"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(1, 3, types, arraySizes); + return &instance; + } +}; + +struct ModelRibbonQualityMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ib"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct ModifierTreeMeta +{ + 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, types, arraySizes); + return &instance; + } +}; + +struct MountMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iisssfhhhbi"; + static uint8 const arraySizes[11] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(10, 11, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct MountTypeXCapabilityMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hhb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct MovieFileDataMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "h"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct MovieVariationMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ihi"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct NPCSoundsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "i"; + static uint8 const arraySizes[1] = { 4 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct NameGenMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sbb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct NamesProfanityMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "Sb"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct NamesReservedMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "S"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct NamesReservedLocaleMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "Sb"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct NpcModelItemSlotDisplayInfoMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iib"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct ObjectEffectMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sfhbbbbbi"; + static uint8 const arraySizes[9] = { 1, 3, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 9, types, arraySizes); + return &instance; + } +}; + +struct ObjectEffectGroupMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct ObjectEffectPackageMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct ObjectEffectPackageElemMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hhh"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct OverrideSpellDataMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iib"; + static uint8 const arraySizes[3] = { 10, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct PageTextMaterialMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct PaperDollItemFrameMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ssb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct ParticleColorMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iii"; + static uint8 const arraySizes[3] = { 3, 3, 3 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct PhaseMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "h"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct PhaseXPhaseGroupMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hh"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct PlayerConditionMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iiiiiiiiiiiiiishhhhhhhhhhhhhhhhhhbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbiiiiiiiiiiiiiii"; + // 1111111121411111144414442144111111111131111114111444111111111111113444141461112 + static uint8 const arraySizes[79] = { 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 4, 1, 1, 1, 1, 1, 1, 4, 4, 4, 1, 4, 4, 4, 2, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 4, 4, 4, 1, 4, 1, 4, 6, 1, 1, 1, 2 }; + static DB2Meta instance(-1, 79, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct PositionerStateEntryMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ffbbbbbbbbi"; + static uint8 const arraySizes[11] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 11, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct PrestigeLevelInfoMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "isbb"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +struct PvpBracketTypesMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "bi"; + static uint8 const arraySizes[2] = { 1, 4 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct PvpDifficultyMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hbbb"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +struct PvpItemMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ib"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct PvpRewardMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iii"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct PvpTalentMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iisiiiiii"; + static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 9, types, arraySizes); + return &instance; + } +}; + +struct PvpTalentUnlockMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iii"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct QuestFactionRewardMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "h"; + static uint8 const arraySizes[1] = { 10 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct QuestLineMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct QuestLineXQuestMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hhb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct QuestMoneyRewardMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "i"; + static uint8 const arraySizes[1] = { 10 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct QuestObjectiveMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iishbbbb"; + static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 8, types, arraySizes); + return &instance; + } +}; + +struct QuestPOIBlobMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hhb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct QuestPOIPointMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ihhi"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(3, 4, types, arraySizes); + return &instance; + } +}; + +struct QuestPOIPointCliTaskMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hhhhhb"; + static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 6, types, arraySizes); + return &instance; + } +}; + +struct QuestPackageItemMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ihbb"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +struct QuestSortMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sb"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct QuestV2Meta +{ + static DB2Meta const* Instance() + { + static char const* types = "h"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct QuestV2CliTaskMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "issihhhhhhhbbbbbbbbbiii"; + static uint8 const arraySizes[23] = { 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(20, 23, types, arraySizes); + return &instance; + } +}; + +struct QuestXPMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "h"; + static uint8 const arraySizes[1] = { 10 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct RacialMountsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ib"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct RandPropPointsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iii"; + static uint8 const arraySizes[3] = { 5, 5, 5 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct ResearchBranchMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ssihb"; + static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 5, types, arraySizes); + return &instance; + } +}; + +struct ResearchFieldMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sbi"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(2, 3, types, arraySizes); + return &instance; + } +}; + +struct ResearchProjectMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ssishbbii"; + static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(7, 9, types, arraySizes); + return &instance; + } +}; + +struct ResearchSiteMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ishi"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +struct ResistancesMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sbi"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct RewardPackXCurrencyTypeMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iii"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct RewardPackXItemMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iii"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct RibbonQualityMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fffb"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +struct RulesetItemUpgradeMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ih"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct ScalingStatDistributionMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hii"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct ScenarioEventEntryMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hb"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct ScenarioStepMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sshhhhbbi"; + static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 9, types, arraySizes); + return &instance; + } +}; + +struct SceneScriptMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sshh"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +struct SceneScriptPackageMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct ScheduledWorldStateXUniqCatMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iii"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(0, 3, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct ScreenLocationMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct SeamlessSiteMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "i"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct ServerMessagesMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct ShadowyEffectMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iiffffffbb"; + static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 10, types, arraySizes); + return &instance; + } +}; + +struct SkillLineMeta +{ + 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(-1, 8, types, arraySizes); + return &instance; + } +}; + +struct SkillLineAbilityMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iiiihhhhhhbbi"; + static uint8 const arraySizes[13] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 13, types, arraySizes); + return &instance; + } +}; + +struct SkillRaceClassInfoMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ihhhbbi"; + static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 7, types, arraySizes); + return &instance; + } +}; + +struct SoundAmbienceMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "biii"; + static uint8 const arraySizes[4] = { 1, 2, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +struct SoundAmbienceFlavorMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hii"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct SoundBusMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ffhbbbbbbbbi"; + static uint8 const arraySizes[12] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(11, 12, types, arraySizes); + return &instance; + } +}; + +struct SoundEmitterPillPointsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fh"; + static uint8 const arraySizes[2] = { 3, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct SoundEmittersMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ffshhhbbbbii"; + static uint8 const arraySizes[12] = { 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(10, 12, types, arraySizes); + return &instance; + } +}; + +struct SoundFilterMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct SoundFilterElemMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fbb"; + static uint8 const arraySizes[3] = { 9, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct SoundKitMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sffffffffhhhbbbbi"; + 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(16, 17, types, arraySizes); + return &instance; + } +}; + +struct SoundKitAdvancedMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fiiiiiifffffiiffffffihbbbbiiiiii"; + 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(-1, 32, types, arraySizes); + return &instance; + } +}; + +struct SoundKitChildMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ii"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct SoundKitEntryMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ifbi"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +struct SoundKitFallbackMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ii"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct SourceInfoMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "isbb"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +struct SpamMessagesMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct SpecializationSpellsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iishbi"; + static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(5, 6, types, arraySizes); + return &instance; + } +}; + +struct SpellMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ssssiii"; + static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(5, 7, types, arraySizes); + return &instance; + } +}; + +struct SpellActionBarPrefMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ih"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct SpellAuraOptionsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iiiihbbb"; + static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 8, types, arraySizes); + return &instance; + } +}; + +struct SpellAuraRestrictionsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iiiiibbbbb"; + static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 10, types, arraySizes); + return &instance; + } +}; + +struct SpellAuraVisXChrSpecMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hh"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct SpellAuraVisibilityMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ibbi"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(3, 4, types, arraySizes); + return &instance; + } +}; + +struct SpellCastTimesMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iih"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct SpellCategoriesMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ihhhbbbbb"; + static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 9, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct SpellChainEffectsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ffffiifffffffffffffffffffffffffffffffffffiffsshhhhbbbbbbbbbbbi"; + static uint8 const arraySizes[62] = { 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, 3, 3, 3, 3, 1, 1, 1, 3, 1, 1, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 62, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct SpellCooldownsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iiiib"; + static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 5, types, arraySizes); + return &instance; + } +}; + +struct SpellDescriptionVariablesMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct SpellDurationMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iih"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct SpellEffectMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fffffiffiiiiiiiiiiiiiiiii"; + static uint8 const arraySizes[25] = { 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1 }; + static DB2Meta instance(8, 25, types, arraySizes); + return &instance; + } +}; + +struct SpellEffectCameraShakesMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hh"; + static uint8 const arraySizes[2] = { 3, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct SpellEffectGroupSizeMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "if"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct SpellEffectScalingMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fffi"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct SpellFlyoutMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "isshbi"; + static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 6, types, arraySizes); + return &instance; + } +}; + +struct SpellFlyoutItemMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ibb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct SpellFocusObjectMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct SpellIconMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct SpellInterruptsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iiihb"; + static uint8 const arraySizes[5] = { 1, 2, 2, 1, 1 }; + static DB2Meta instance(-1, 5, types, arraySizes); + return &instance; + } +}; + +struct SpellItemEnchantmentMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "isfiihhhhhhbbbbbbbi"; + static uint8 const arraySizes[19] = { 3, 1, 3, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 19, types, arraySizes); + return &instance; + } +}; + +struct SpellItemEnchantmentConditionMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "bbbbbi"; + static uint8 const arraySizes[6] = { 5, 5, 5, 5, 5, 5 }; + static DB2Meta instance(-1, 6, types, arraySizes); + return &instance; + } +}; + +struct SpellKeyboundOverrideMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "isb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct SpellLabelMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ii"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct SpellLearnSpellMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iii"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct SpellLevelsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ihhhbb"; + static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 6, types, arraySizes); + return &instance; + } +}; + +struct SpellMechanicMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct SpellMiscMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iffhhhhhb"; + static uint8 const arraySizes[9] = { 14, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 9, types, arraySizes); + return &instance; + } +}; + +struct SpellMiscDifficultyMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ibi"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(2, 3, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct SpellPowerMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iiffifbbiiiiii"; + static uint8 const arraySizes[14] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(8, 14, types, arraySizes); + return &instance; + } +}; + +struct SpellPowerDifficultyMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "bbi"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(2, 3, types, arraySizes); + return &instance; + } +}; + +struct SpellProceduralEffectMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fbi"; + static uint8 const arraySizes[3] = { 4, 1, 1 }; + static DB2Meta instance(2, 3, types, arraySizes); + return &instance; + } +}; + +struct SpellProcsPerMinuteMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fb"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct SpellProcsPerMinuteModMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fhbb"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct SpellRangeMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ffssb"; + static uint8 const arraySizes[5] = { 2, 2, 1, 1, 1 }; + static DB2Meta instance(-1, 5, types, arraySizes); + return &instance; + } +}; + +struct SpellReagentsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iih"; + static uint8 const arraySizes[3] = { 1, 8, 8 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct SpellReagentsCurrencyMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ihh"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct SpellScalingMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ihbbi"; + static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 5, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct SpellShapeshiftFormMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sfihhhhhbb"; + static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 4, 8, 1, 1, 1 }; + static DB2Meta instance(-1, 10, types, arraySizes); + return &instance; + } +}; + +struct SpellSpecialUnitEffectMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hi"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct SpellTargetRestrictionsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iffihbbi"; + static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 8, types, arraySizes); + return &instance; + } +}; + +struct SpellTotemsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iih"; + static uint8 const arraySizes[3] = { 1, 2, 2 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct SpellVisualMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iiiiiiiiiiiiiiiffiihhhbbiiii"; + static uint8 const arraySizes[28] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(24, 28, types, arraySizes); + return &instance; + } +}; + +struct SpellVisualAnimMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hhh"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct SpellVisualEffectNameMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sffffffiiibii"; + static uint8 const arraySizes[13] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 13, types, arraySizes); + return &instance; + } +}; + +struct SpellVisualKitMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ifhhii"; + static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(4, 6, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct SpellVisualKitEffectMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iii"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct SpellVisualKitModelAttachMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iffffffffffifhhhhhhbbi"; + static uint8 const arraySizes[22] = { 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(21, 22, types, arraySizes); + return &instance; + } +}; + +struct SpellVisualMissileMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iiiffhhhhhhbbiii"; + static uint8 const arraySizes[16] = { 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(13, 16, types, arraySizes); + return &instance; + } +}; + +struct SpellXSpellVisualMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ifhhhbbi"; + static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(7, 8, types, arraySizes); + return &instance; + } +}; + +struct Startup_StringsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ss"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct StationeryMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sbi"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct StringLookupsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct TactKeyMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "b"; + static uint8 const arraySizes[1] = { 16 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct TactKeyLookupMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "b"; + static uint8 const arraySizes[1] = { 8 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct TalentMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iishbbbbb"; + static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 2, 1 }; + static DB2Meta instance(-1, 9, types, arraySizes); + return &instance; + } +}; + +struct TaxiNodesMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fsifhhhbi"; + static uint8 const arraySizes[9] = { 3, 1, 2, 2, 1, 1, 1, 1, 1 }; + static DB2Meta instance(8, 9, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct TaxiPathNodeMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fihhhhbbi"; + static uint8 const arraySizes[9] = { 3, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(8, 9, types, arraySizes); + return &instance; + } +}; + +struct TerrainMaterialMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ssb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct TerrainTypeSoundsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct TextureFileDataMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ibi"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(2, 3, types, arraySizes); + return &instance; + } +}; + +struct TotemCategoryMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sib"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct ToyMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "isbbi"; + static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; + static DB2Meta instance(4, 5, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct TradeSkillItemMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "hb"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct TransmogSetMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iiii"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(0, 4, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct TransportAnimationMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iifb"; + static uint8 const arraySizes[4] = { 1, 1, 3, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct TransportRotationMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iif"; + static uint8 const arraySizes[3] = { 1, 1, 4 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct TrophyMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "shhb"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct UiCameraTypeMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sii"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct UiMapPOIMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ifiiiii"; + static uint8 const arraySizes[7] = { 1, 3, 1, 1, 1, 1, 1 }; + static DB2Meta instance(6, 7, types, arraySizes); + return &instance; + } +}; + +struct UiTextureAtlasMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ihh"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct UiTextureAtlasMemberMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "shhhhhbb"; + static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 8, types, arraySizes); + return &instance; + } +}; + +struct UiTextureKitMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct UnitBloodMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "shhhiii"; + static uint8 const arraySizes[7] = { 5, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 7, types, arraySizes); + return &instance; + } +}; + +struct UnitBloodLevelsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "b"; + static uint8 const arraySizes[1] = { 3 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct UnitConditionMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ibbb"; + static uint8 const arraySizes[4] = { 8, 1, 8, 8 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +struct UnitPowerBarMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ffiissssffhhbbii"; + static uint8 const arraySizes[16] = { 1, 1, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 16, types, arraySizes); + return &instance; + } +}; + +struct VehicleMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "iffffffffffffffffffSSSffhhhbb"; + static uint8 const arraySizes[29] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 8, 1, 3, 1, 1 }; + static DB2Meta instance(-1, 29, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct VehicleUIIndSeatMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ffhb"; + static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +struct VehicleUIIndicatorMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct VideoHardwareMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sshhbbbbbbbbbbiiiiiiii"; + 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(14, 22, types, arraySizes); + return &instance; + } +}; + +struct VignetteMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sffhbii"; + static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 7, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct WMOAreaTableMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ishhhhhhhbbbbii"; + static uint8 const arraySizes[15] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(13, 15, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct WbCertBlacklistMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sb"; + static uint8 const arraySizes[2] = { 1, 20 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct WbPermissionsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sb"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct WeaponSwingSounds2Meta +{ + static DB2Meta const* Instance() + { + static char const* types = "bbi"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct WeaponTrailModelDefMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ihh"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct WeaponTrailParamMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fffffhbbbb"; + static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 10, types, arraySizes); + return &instance; + } +}; + +struct WeatherMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fffsfffffhbbbi"; + static uint8 const arraySizes[14] = { 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 14, types, arraySizes); + 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, types, arraySizes); + return &instance; + } +}; + +struct WmoMinimapTextureMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ihhbb"; + static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 5, types, arraySizes); + return &instance; + } +}; + +struct WorldBossLockoutMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sh"; + static uint8 const arraySizes[2] = { 1, 1 }; + static DB2Meta instance(-1, 2, types, arraySizes); + return &instance; + } +}; + +struct WorldChunkSoundsMeta +{ + 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, types, arraySizes); + return &instance; + } +}; + +struct WorldEffectMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ihhhbb"; + static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 6, types, arraySizes); + return &instance; + } +}; + +struct WorldElapsedTimerMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sbb"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct WorldMapAreaMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "Sffffhhhhhhbbbbii"; + 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, types, arraySizes); + return &instance; + } +}; + +struct WorldMapContinentMeta +{ + 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, types, arraySizes); + return &instance; + } +}; + +struct WorldMapOverlayMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "Shhiiiiiiiiii"; + static uint8 const arraySizes[13] = { 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 13, types, arraySizes); + return &instance; + } +}; + +struct WorldMapTransformsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fffhhhhb"; + static uint8 const arraySizes[8] = { 6, 2, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 8, types, arraySizes); + return &instance; + } +}; + +struct WorldSafeLocsMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "ffsh"; + static uint8 const arraySizes[4] = { 3, 1, 1, 1 }; + static DB2Meta instance(-1, 4, types, arraySizes); + return &instance; + } +}; + +struct WorldStateExpressionMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "s"; + static uint8 const arraySizes[1] = { 1 }; + static DB2Meta instance(-1, 1, types, arraySizes); + return &instance; + } +}; + +struct WorldStateUIMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "sssssshhhhhbbbbi"; + static uint8 const arraySizes[16] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1 }; + static DB2Meta instance(15, 16, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +struct ZoneLightMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "shh"; + static uint8 const arraySizes[3] = { 1, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +struct ZoneLightPointMeta +{ + static DB2Meta const* Instance() + { + static char const* types = "fhb"; + static uint8 const arraySizes[3] = { 2, 1, 1 }; + static DB2Meta instance(-1, 3, types, arraySizes); + return &instance; + } +}; + +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, types, arraySizes); + return &instance; + } +}; + +#endif // DB2Metadata_h__ diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp index 0c2c02f2ca8..dfae9795b4e 100644 --- a/src/server/game/DataStores/DB2Stores.cpp +++ b/src/server/game/DataStores/DB2Stores.cpp @@ -18,197 +18,196 @@ #include "DB2Stores.h" #include "Common.h" #include "Containers.h" -#include "DB2fmt.h" -#include "HotfixDatabase.h" +#include "DatabaseEnv.h" +#include "DB2Metadata.h" #include "Log.h" #include "TransportMgr.h" #include "World.h" -DB2Storage<AchievementEntry> sAchievementStore("Achievement.db2", AchievementFormat, HOTFIX_SEL_ACHIEVEMENT); -DB2Storage<AnimKitEntry> sAnimKitStore("AnimKit.db2", AnimKitFormat, HOTFIX_SEL_ANIM_KIT); -DB2Storage<AreaGroupMemberEntry> sAreaGroupMemberStore("AreaGroupMember.db2", AreaGroupMemberFormat, HOTFIX_SEL_AREA_GROUP_MEMBER); -DB2Storage<AreaTableEntry> sAreaTableStore("AreaTable.db2", AreaTableFormat, HOTFIX_SEL_AREA_TABLE); -DB2Storage<AreaTriggerEntry> sAreaTriggerStore("AreaTrigger.db2", AreaTriggerFormat, HOTFIX_SEL_AREA_TRIGGER); -DB2Storage<ArmorLocationEntry> sArmorLocationStore("ArmorLocation.db2", ArmorLocationFormat, HOTFIX_SEL_ARMOR_LOCATION); -DB2Storage<AuctionHouseEntry> sAuctionHouseStore("AuctionHouse.db2", AuctionHouseFormat, HOTFIX_SEL_AUCTION_HOUSE); -DB2Storage<BankBagSlotPricesEntry> sBankBagSlotPricesStore("BankBagSlotPrices.db2", BankBagSlotPricesFormat, HOTFIX_SEL_BANK_BAG_SLOT_PRICES); -DB2Storage<BannedAddOnsEntry> sBannedAddOnsStore("BannedAddOns.db2", BannedAddOnsFormat, HOTFIX_SEL_BANNED_ADDONS); -DB2Storage<BarberShopStyleEntry> sBarberShopStyleStore("BarberShopStyle.db2", BarberShopStyleFormat, HOTFIX_SEL_BARBER_SHOP_STYLE); -DB2Storage<BattlePetBreedQualityEntry> sBattlePetBreedQualityStore("BattlePetBreedQuality.db2", BattlePetBreedQualityFormat, HOTFIX_SEL_BATTLE_PET_BREED_QUALITY); -DB2Storage<BattlePetBreedStateEntry> sBattlePetBreedStateStore("BattlePetBreedState.db2", BattlePetBreedStateFormat, HOTFIX_SEL_BATTLE_PET_BREED_STATE); -DB2Storage<BattlePetSpeciesEntry> sBattlePetSpeciesStore("BattlePetSpecies.db2", BattlePetSpeciesFormat, HOTFIX_SEL_BATTLE_PET_SPECIES); -DB2Storage<BattlePetSpeciesStateEntry> sBattlePetSpeciesStateStore("BattlePetSpeciesState.db2", BattlePetSpeciesStateFormat, HOTFIX_SEL_BATTLE_PET_SPECIES_STATE); -DB2Storage<BattlemasterListEntry> sBattlemasterListStore("BattlemasterList.db2", BattlemasterListFormat, HOTFIX_SEL_BATTLEMASTER_LIST); -DB2Storage<BroadcastTextEntry> sBroadcastTextStore("BroadcastText.db2", BroadcastTextFormat, HOTFIX_SEL_BROADCAST_TEXT); -DB2Storage<CharSectionsEntry> sCharSectionsStore("CharSections.db2", CharSectionsFormat, HOTFIX_SEL_CHAR_SECTIONS); -DB2Storage<CharStartOutfitEntry> sCharStartOutfitStore("CharStartOutfit.db2", CharStartOutfitFormat, HOTFIX_SEL_CHAR_START_OUTFIT); -DB2Storage<CharTitlesEntry> sCharTitlesStore("CharTitles.db2", CharTitlesFormat, HOTFIX_SEL_CHAR_TITLES); -DB2Storage<ChatChannelsEntry> sChatChannelsStore("ChatChannels.db2", ChatChannelsFormat, HOTFIX_SEL_CHAT_CHANNELS); -DB2Storage<ChrClassesEntry> sChrClassesStore("ChrClasses.db2", ChrClassesFormat, HOTFIX_SEL_CHR_CLASSES); -DB2Storage<ChrClassesXPowerTypesEntry> sChrClassesXPowerTypesStore("ChrClassesXPowerTypes.db2", ChrClassesXPowerTypesFormat, HOTFIX_SEL_CHR_CLASSES_X_POWER_TYPES); -DB2Storage<ChrRacesEntry> sChrRacesStore("ChrRaces.db2", ChrRacesFormat, HOTFIX_SEL_CHR_RACES); -DB2Storage<ChrSpecializationEntry> sChrSpecializationStore("ChrSpecialization.db2", ChrSpecializationFormat, HOTFIX_SEL_CHR_SPECIALIZATION); -DB2Storage<CinematicSequencesEntry> sCinematicSequencesStore("CinematicSequences.db2", CinematicSequencesFormat, HOTFIX_SEL_CINEMATIC_SEQUENCES); -DB2Storage<CreatureDisplayInfoEntry> sCreatureDisplayInfoStore("CreatureDisplayInfo.db2", CreatureDisplayInfoFormat, HOTFIX_SEL_CREATURE_DISPLAY_INFO); -DB2Storage<CreatureDisplayInfoExtraEntry> sCreatureDisplayInfoExtraStore("CreatureDisplayInfoExtra.db2", CreatureDisplayInfoExtraFormat, HOTFIX_SEL_CREATURE_DISPLAY_INFO_EXTRA); -DB2Storage<CreatureFamilyEntry> sCreatureFamilyStore("CreatureFamily.db2", CreatureFamilyFormat, HOTFIX_SEL_CREATURE_FAMILY); -DB2Storage<CreatureModelDataEntry> sCreatureModelDataStore("CreatureModelData.db2", CreatureModelDataFormat, HOTFIX_SEL_CREATURE_MODEL_DATA); -DB2Storage<CreatureTypeEntry> sCreatureTypeStore("CreatureType.db2", CreatureTypeFormat, HOTFIX_SEL_CREATURE_TYPE); -DB2Storage<CriteriaEntry> sCriteriaStore("Criteria.db2", CriteriaFormat, HOTFIX_SEL_CRITERIA); -DB2Storage<CriteriaTreeEntry> sCriteriaTreeStore("CriteriaTree.db2", CriteriaTreeFormat, HOTFIX_SEL_CRITERIA_TREE); -DB2Storage<CurrencyTypesEntry> sCurrencyTypesStore("CurrencyTypes.db2", CurrencyTypesFormat, HOTFIX_SEL_CURRENCY_TYPES); -DB2Storage<CurvePointEntry> sCurvePointStore("CurvePoint.db2", CurvePointFormat, HOTFIX_SEL_CURVE_POINT); -DB2Storage<DestructibleModelDataEntry> sDestructibleModelDataStore("DestructibleModelData.db2", DestructibleModelDataFormat, HOTFIX_SEL_DESTRUCTIBLE_MODEL_DATA); -DB2Storage<DifficultyEntry> sDifficultyStore("Difficulty.db2", DifficultyFormat, HOTFIX_SEL_DIFFICULTY); -DB2Storage<DungeonEncounterEntry> sDungeonEncounterStore("DungeonEncounter.db2", DungeonEncounterFormat, HOTFIX_SEL_DUNGEON_ENCOUNTER); -DB2Storage<DurabilityCostsEntry> sDurabilityCostsStore("DurabilityCosts.db2", DurabilityCostsFormat, HOTFIX_SEL_DURABILITY_COSTS); -DB2Storage<DurabilityQualityEntry> sDurabilityQualityStore("DurabilityQuality.db2", DurabilityQualityFormat, HOTFIX_SEL_DURABILITY_QUALITY); -DB2Storage<EmotesEntry> sEmotesStore("Emotes.db2", EmotesFormat, HOTFIX_SEL_EMOTES); -DB2Storage<EmotesTextEntry> sEmotesTextStore("EmotesText.db2", EmotesTextFormat, HOTFIX_SEL_EMOTES_TEXT); -DB2Storage<EmotesTextSoundEntry> sEmotesTextSoundStore("EmotesTextSound.db2", EmotesTextSoundFormat, HOTFIX_SEL_EMOTES_TEXT_SOUND); -DB2Storage<FactionEntry> sFactionStore("Faction.db2", FactionFormat, HOTFIX_SEL_FACTION); -DB2Storage<FactionTemplateEntry> sFactionTemplateStore("FactionTemplate.db2", FactionTemplateFormat, HOTFIX_SEL_FACTION_TEMPLATE); -DB2Storage<GameObjectsEntry> sGameObjectsStore("GameObjects.db2", GameObjectsFormat, HOTFIX_SEL_GAMEOBJECTS); -DB2Storage<GameObjectDisplayInfoEntry> sGameObjectDisplayInfoStore("GameObjectDisplayInfo.db2", GameObjectDisplayInfoFormat, HOTFIX_SEL_GAMEOBJECT_DISPLAY_INFO); -DB2Storage<GarrAbilityEntry> sGarrAbilityStore("GarrAbility.db2", GarrAbilityFormat, HOTFIX_SEL_GARR_ABILITY); -DB2Storage<GarrBuildingEntry> sGarrBuildingStore("GarrBuilding.db2", GarrBuildingFormat, HOTFIX_SEL_GARR_BUILDING); -DB2Storage<GarrBuildingPlotInstEntry> sGarrBuildingPlotInstStore("GarrBuildingPlotInst.db2", GarrBuildingPlotInstFormat, HOTFIX_SEL_GARR_BUILDING_PLOT_INST); -DB2Storage<GarrClassSpecEntry> sGarrClassSpecStore("GarrClassSpec.db2", GarrClassSpecFormat, HOTFIX_SEL_GARR_CLASS_SPEC); -DB2Storage<GarrFollowerEntry> sGarrFollowerStore("GarrFollower.db2", GarrFollowerFormat, HOTFIX_SEL_GARR_FOLLOWER); -DB2Storage<GarrFollowerXAbilityEntry> sGarrFollowerXAbilityStore("GarrFollowerXAbility.db2", GarrFollowerXAbilityFormat, HOTFIX_SEL_GARR_FOLLOWER_X_ABILITY); -DB2Storage<GarrPlotBuildingEntry> sGarrPlotBuildingStore("GarrPlotBuilding.db2", GarrPlotBuildingFormat, HOTFIX_SEL_GARR_PLOT_BUILDING); -DB2Storage<GarrPlotEntry> sGarrPlotStore("GarrPlot.db2", GarrPlotFormat, HOTFIX_SEL_GARR_PLOT); -DB2Storage<GarrPlotInstanceEntry> sGarrPlotInstanceStore("GarrPlotInstance.db2", GarrPlotInstanceFormat, HOTFIX_SEL_GARR_PLOT_INSTANCE); -DB2Storage<GarrSiteLevelEntry> sGarrSiteLevelStore("GarrSiteLevel.db2", GarrSiteLevelFormat, HOTFIX_SEL_GARR_SITE_LEVEL); -DB2Storage<GarrSiteLevelPlotInstEntry> sGarrSiteLevelPlotInstStore("GarrSiteLevelPlotInst.db2", GarrSiteLevelPlotInstFormat, HOTFIX_SEL_GARR_SITE_LEVEL_PLOT_INST); -DB2Storage<GemPropertiesEntry> sGemPropertiesStore("GemProperties.db2", GemPropertiesFormat, HOTFIX_SEL_GEM_PROPERTIES); -DB2Storage<GlyphPropertiesEntry> sGlyphPropertiesStore("GlyphProperties.db2", GlyphPropertiesFormat, HOTFIX_SEL_GLYPH_PROPERTIES); -DB2Storage<GlyphSlotEntry> sGlyphSlotStore("GlyphSlot.db2", GlyphSlotFormat, HOTFIX_SEL_GLYPH_SLOT); -DB2Storage<GuildColorBackgroundEntry> sGuildColorBackgroundStore("GuildColorBackground.db2", GuildColorBackgroundFormat, HOTFIX_SEL_GUILD_COLOR_BACKGROUND); -DB2Storage<GuildColorBorderEntry> sGuildColorBorderStore("GuildColorBorder.db2", GuildColorBorderFormat, HOTFIX_SEL_GUILD_COLOR_BORDER); -DB2Storage<GuildColorEmblemEntry> sGuildColorEmblemStore("GuildColorEmblem.db2", GuildColorEmblemFormat, HOTFIX_SEL_GUILD_COLOR_EMBLEM); -DB2Storage<GuildPerkSpellsEntry> sGuildPerkSpellsStore("GuildPerkSpells.db2", GuildPerkSpellsFormat, HOTFIX_SEL_GUILD_PERK_SPELLS); -DB2Storage<HeirloomEntry> sHeirloomStore("Heirloom.db2", HeirloomFormat, HOTFIX_SEL_HEIRLOOM); -DB2Storage<HolidaysEntry> sHolidaysStore("Holidays.db2", HolidaysEntryFormat, HOTFIX_SEL_HOLIDAYS); -DB2Storage<ImportPriceArmorEntry> sImportPriceArmorStore("ImportPriceArmor.db2", ImportPriceArmorFormat, HOTFIX_SEL_IMPORT_PRICE_ARMOR); -DB2Storage<ImportPriceQualityEntry> sImportPriceQualityStore("ImportPriceQuality.db2", ImportPriceQualityFormat, HOTFIX_SEL_IMPORT_PRICE_QUALITY); -DB2Storage<ImportPriceShieldEntry> sImportPriceShieldStore("ImportPriceShield.db2", ImportPriceShieldFormat, HOTFIX_SEL_IMPORT_PRICE_SHIELD); -DB2Storage<ImportPriceWeaponEntry> sImportPriceWeaponStore("ImportPriceWeapon.db2", ImportPriceWeaponFormat, HOTFIX_SEL_IMPORT_PRICE_WEAPON); -DB2Storage<ItemAppearanceEntry> sItemAppearanceStore("ItemAppearance.db2", ItemAppearanceFormat, HOTFIX_SEL_ITEM_APPEARANCE); -DB2Storage<ItemArmorQualityEntry> sItemArmorQualityStore("ItemArmorQuality.db2", ItemArmorQualityFormat, HOTFIX_SEL_ITEM_ARMOR_QUALITY); -DB2Storage<ItemArmorShieldEntry> sItemArmorShieldStore("ItemArmorShield.db2", ItemArmorShieldFormat, HOTFIX_SEL_ITEM_ARMOR_SHIELD); -DB2Storage<ItemArmorTotalEntry> sItemArmorTotalStore("ItemArmorTotal.db2", ItemArmorTotalFormat, HOTFIX_SEL_ITEM_ARMOR_TOTAL); -DB2Storage<ItemBagFamilyEntry> sItemBagFamilyStore("ItemBagFamily.db2", ItemBagFamilyFormat, HOTFIX_SEL_ITEM_BAG_FAMILY); -DB2Storage<ItemBonusEntry> sItemBonusStore("ItemBonus.db2", ItemBonusFormat, HOTFIX_SEL_ITEM_BONUS); -DB2Storage<ItemBonusTreeNodeEntry> sItemBonusTreeNodeStore("ItemBonusTreeNode.db2", ItemBonusTreeNodeFormat, HOTFIX_SEL_ITEM_BONUS_TREE_NODE); -DB2Storage<ItemClassEntry> sItemClassStore("ItemClass.db2", ItemClassFormat, HOTFIX_SEL_ITEM_CLASS); -DB2Storage<ItemCurrencyCostEntry> sItemCurrencyCostStore("ItemCurrencyCost.db2", ItemCurrencyCostFormat, HOTFIX_SEL_ITEM_CURRENCY_COST); -DB2Storage<ItemDamageAmmoEntry> sItemDamageAmmoStore("ItemDamageAmmo.db2", ItemDamageAmmoFormat, HOTFIX_SEL_ITEM_DAMAGE_AMMO); -DB2Storage<ItemDamageOneHandEntry> sItemDamageOneHandStore("ItemDamageOneHand.db2", ItemDamageOneHandFormat, HOTFIX_SEL_ITEM_DAMAGE_ONE_HAND); -DB2Storage<ItemDamageOneHandCasterEntry> sItemDamageOneHandCasterStore("ItemDamageOneHandCaster.db2", ItemDamageOneHandCasterFormat, HOTFIX_SEL_ITEM_DAMAGE_ONE_HAND_CASTER); -DB2Storage<ItemDamageTwoHandEntry> sItemDamageTwoHandStore("ItemDamageTwoHand.db2", ItemDamageTwoHandFormat, HOTFIX_SEL_ITEM_DAMAGE_TWO_HAND); -DB2Storage<ItemDamageTwoHandCasterEntry> sItemDamageTwoHandCasterStore("ItemDamageTwoHandCaster.db2", ItemDamageTwoHandCasterFormat, HOTFIX_SEL_ITEM_DAMAGE_TWO_HAND_CASTER); -DB2Storage<ItemDisenchantLootEntry> sItemDisenchantLootStore("ItemDisenchantLoot.db2", ItemDisenchantLootFormat, HOTFIX_SEL_ITEM_DISENCHANT_LOOT); -DB2Storage<ItemEffectEntry> sItemEffectStore("ItemEffect.db2", ItemEffectFormat, HOTFIX_SEL_ITEM_EFFECT); -DB2Storage<ItemEntry> sItemStore("Item.db2", ItemFormat, HOTFIX_SEL_ITEM); -DB2Storage<ItemExtendedCostEntry> sItemExtendedCostStore("ItemExtendedCost.db2", ItemExtendedCostFormat, HOTFIX_SEL_ITEM_EXTENDED_COST); -DB2Storage<ItemLimitCategoryEntry> sItemLimitCategoryStore("ItemLimitCategory.db2", ItemLimitCategoryFormat, HOTFIX_SEL_ITEM_LIMIT_CATEGORY); -DB2Storage<ItemModifiedAppearanceEntry> sItemModifiedAppearanceStore("ItemModifiedAppearance.db2", ItemModifiedAppearanceFormat, HOTFIX_SEL_ITEM_MODIFIED_APPEARANCE); -DB2Storage<ItemPriceBaseEntry> sItemPriceBaseStore("ItemPriceBase.db2", ItemPriceBaseFormat, HOTFIX_SEL_ITEM_PRICE_BASE); -DB2Storage<ItemRandomPropertiesEntry> sItemRandomPropertiesStore("ItemRandomProperties.db2", ItemRandomPropertiesFormat, HOTFIX_SEL_ITEM_RANDOM_PROPERTIES); -DB2Storage<ItemRandomSuffixEntry> sItemRandomSuffixStore("ItemRandomSuffix.db2", ItemRandomSuffixFormat, HOTFIX_SEL_ITEM_RANDOM_SUFFIX); -DB2Storage<ItemSetEntry> sItemSetStore("ItemSet.db2", ItemSetFormat, HOTFIX_SEL_ITEM_SET); -DB2Storage<ItemSetSpellEntry> sItemSetSpellStore("ItemSetSpell.db2", ItemSetSpellFormat, HOTFIX_SEL_ITEM_SET_SPELL); -DB2SparseStorage<ItemSparseEntry> sItemSparseStore("Item-sparse.db2", ItemSparseFormat, HOTFIX_SEL_ITEM_SPARSE); -DB2Storage<ItemSpecEntry> sItemSpecStore("ItemSpec.db2", ItemSpecFormat, HOTFIX_SEL_ITEM_SPEC); -DB2Storage<ItemSpecOverrideEntry> sItemSpecOverrideStore("ItemSpecOverride.db2", ItemSpecOverrideFormat, HOTFIX_SEL_ITEM_SPEC_OVERRIDE); -DB2Storage<ItemXBonusTreeEntry> sItemXBonusTreeStore("ItemXBonusTree.db2", ItemXBonusTreeFormat, HOTFIX_SEL_ITEM_X_BONUS_TREE); -DB2Storage<KeyChainEntry> sKeyChainStore("KeyChain.db2", KeyChainFormat, HOTFIX_SEL_KEY_CHAIN); -DB2Storage<LfgDungeonsEntry> sLfgDungeonsStore("LfgDungeons.db2", LfgDungeonsFormat, HOTFIX_SEL_LFG_DUNGEONS); -DB2Storage<LightEntry> sLightStore("Light.db2", LightFormat, HOTFIX_SEL_LIGHT); -DB2Storage<LiquidTypeEntry> sLiquidTypeStore("LiquidType.db2", LiquidTypeFormat, HOTFIX_SEL_LIQUID_TYPE); -DB2Storage<LockEntry> sLockStore("Lock.db2", LockFormat, HOTFIX_SEL_LOCK); -DB2Storage<MailTemplateEntry> sMailTemplateStore("MailTemplate.db2", MailTemplateFormat, HOTFIX_SEL_MAIL_TEMPLATE); -DB2Storage<MapEntry> sMapStore("Map.db2", MapFormat, HOTFIX_SEL_MAP); -DB2Storage<MapDifficultyEntry> sMapDifficultyStore("MapDifficulty.db2", MapDifficultyFormat, HOTFIX_SEL_MAP_DIFFICULTY); -DB2Storage<ModifierTreeEntry> sModifierTreeStore("ModifierTree.db2", ModifierTreeFormat, HOTFIX_SEL_MODIFIER_TREE); -DB2Storage<MountCapabilityEntry> sMountCapabilityStore("MountCapability.db2", MountCapabilityFormat, HOTFIX_SEL_MOUNT_CAPABILITY); -DB2Storage<MountEntry> sMountStore("Mount.db2", MountFormat, HOTFIX_SEL_MOUNT); -DB2Storage<MountTypeXCapabilityEntry> sMountTypeXCapabilityStore("MountTypeXCapability.db2", MountTypeXCapabilityFormat, HOTFIX_SEL_MOUNT_TYPE_X_CAPABILITY); -DB2Storage<MovieEntry> sMovieStore("Movie.db2", MovieFormat, HOTFIX_SEL_MOVIE); -DB2Storage<NameGenEntry> sNameGenStore("NameGen.db2", NameGenFormat, HOTFIX_SEL_NAME_GEN); -DB2Storage<NamesProfanityEntry> sNamesProfanityStore("NamesProfanity.db2", NamesProfanityFormat, HOTFIX_SEL_NAMES_PROFANITY); -DB2Storage<NamesReservedEntry> sNamesReservedStore("NamesReserved.db2", NamesReservedFormat, HOTFIX_SEL_NAMES_RESERVED); -DB2Storage<NamesReservedLocaleEntry> sNamesReservedLocaleStore("NamesReservedLocale.db2", NamesReservedLocaleFormat, HOTFIX_SEL_NAMES_RESERVED_LOCALE); -DB2Storage<OverrideSpellDataEntry> sOverrideSpellDataStore("OverrideSpellData.db2", OverrideSpellDataFormat, HOTFIX_SEL_OVERRIDE_SPELL_DATA); -DB2Storage<PhaseEntry> sPhaseStore("Phase.db2", PhaseFormat, HOTFIX_SEL_PHASE); -DB2Storage<PhaseXPhaseGroupEntry> sPhaseXPhaseGroupStore("PhaseXPhaseGroup.db2", PhaseXPhaseGroupFormat, HOTFIX_SEL_PHASE_X_PHASE_GROUP); -DB2Storage<PlayerConditionEntry> sPlayerConditionStore("PlayerCondition.db2", PlayerConditionFormat, HOTFIX_SEL_PLAYER_CONDITION); -DB2Storage<PowerDisplayEntry> sPowerDisplayStore("PowerDisplay.db2", PowerDisplayFormat, HOTFIX_SEL_POWER_DISPLAY); -DB2Storage<PvPDifficultyEntry> sPvpDifficultyStore("PvpDifficulty.db2", PvpDifficultyFormat, HOTFIX_SEL_PVP_DIFFICULTY); -DB2Storage<QuestFactionRewardEntry> sQuestFactionRewardStore("QuestFactionReward.db2", QuestFactionRewardFormat, HOTFIX_SEL_QUEST_FACTION_REWARD); -DB2Storage<QuestMoneyRewardEntry> sQuestMoneyRewardStore("QuestMoneyReward.db2", QuestMoneyRewardFormat, HOTFIX_SEL_QUEST_MONEY_REWARD); -DB2Storage<QuestPackageItemEntry> sQuestPackageItemStore("QuestPackageItem.db2", QuestPackageItemFormat, HOTFIX_SEL_QUEST_PACKAGE_ITEM); -DB2Storage<QuestSortEntry> sQuestSortStore("QuestSort.db2", QuestSortFormat, HOTFIX_SEL_QUEST_SORT); -DB2Storage<QuestV2Entry> sQuestV2Store("QuestV2.db2", QuestV2Format, HOTFIX_SEL_QUEST_V2); -DB2Storage<QuestXPEntry> sQuestXPStore("QuestXP.db2", QuestXPFormat, HOTFIX_SEL_QUEST_XP); -DB2Storage<RandPropPointsEntry> sRandPropPointsStore("RandPropPoints.db2", RandPropPointsFormat, HOTFIX_SEL_RAND_PROP_POINTS); -DB2Storage<ScalingStatDistributionEntry> sScalingStatDistributionStore("ScalingStatDistribution.db2", ScalingStatDistributionFormat, HOTFIX_SEL_SCALING_STAT_DISTRIBUTION); -DB2Storage<SkillLineEntry> sSkillLineStore("SkillLine.db2", SkillLineFormat, HOTFIX_SEL_SKILL_LINE); -DB2Storage<SkillLineAbilityEntry> sSkillLineAbilityStore("SkillLineAbility.db2", SkillLineAbilityFormat, HOTFIX_SEL_SKILL_LINE_ABILITY); -DB2Storage<SkillRaceClassInfoEntry> sSkillRaceClassInfoStore("SkillRaceClassInfo.db2", SkillRaceClassInfoFormat, HOTFIX_SEL_SKILL_RACE_CLASS_INFO); -DB2Storage<SoundKitEntry> sSoundKitStore("SoundKit.db2", SoundKitFormat, HOTFIX_SEL_SOUND_KIT); -DB2Storage<SpecializationSpellsEntry> sSpecializationSpellsStore("SpecializationSpells.db2", SpecializationSpellsFormat, HOTFIX_SEL_SPECIALIZATION_SPELLS); -DB2Storage<SpellEntry> sSpellStore("Spell.db2", SpellFormat, HOTFIX_SEL_SPELL); -DB2Storage<SpellAuraOptionsEntry> sSpellAuraOptionsStore("SpellAuraOptions.db2", SpellAuraOptionsFormat, HOTFIX_SEL_SPELL_AURA_OPTIONS); -DB2Storage<SpellAuraRestrictionsEntry> sSpellAuraRestrictionsStore("SpellAuraRestrictions.db2", SpellAuraRestrictionsFormat, HOTFIX_SEL_SPELL_AURA_RESTRICTIONS); -DB2Storage<SpellCastTimesEntry> sSpellCastTimesStore("SpellCastTimes.db2", SpellCastTimesFormat, HOTFIX_SEL_SPELL_CAST_TIMES); -DB2Storage<SpellCastingRequirementsEntry> sSpellCastingRequirementsStore("SpellCastingRequirements.db2", SpellCastingRequirementsFormat, HOTFIX_SEL_SPELL_CASTING_REQUIREMENTS); -DB2Storage<SpellCategoriesEntry> sSpellCategoriesStore("SpellCategories.db2", SpellCategoriesFormat, HOTFIX_SEL_SPELL_CATEGORIES); -DB2Storage<SpellCategoryEntry> sSpellCategoryStore("SpellCategory.db2", SpellCategoryFormat, HOTFIX_SEL_SPELL_CATEGORY); -DB2Storage<SpellClassOptionsEntry> sSpellClassOptionsStore("SpellClassOptions.db2", SpellClassOptionsFormat, HOTFIX_SEL_SPELL_CLASS_OPTIONS); -DB2Storage<SpellCooldownsEntry> sSpellCooldownsStore("SpellCooldowns.db2", SpellCooldownsFormat, HOTFIX_SEL_SPELL_COOLDOWNS); -DB2Storage<SpellDurationEntry> sSpellDurationStore("SpellDuration.db2", SpellDurationFormat, HOTFIX_SEL_SPELL_DURATION); -DB2Storage<SpellEffectEntry> sSpellEffectStore("SpellEffect.db2", SpellEffectFormat, HOTFIX_SEL_SPELL_EFFECT); -DB2Storage<SpellEffectScalingEntry> sSpellEffectScalingStore("SpellEffectScaling.db2", SpellEffectScalingFormat, HOTFIX_SEL_SPELL_EFFECT_SCALING); -DB2Storage<SpellEquippedItemsEntry> sSpellEquippedItemsStore("SpellEquippedItems.db2", SpellEquippedItemsFormat, HOTFIX_SEL_SPELL_EQUIPPED_ITEMS); -DB2Storage<SpellFocusObjectEntry> sSpellFocusObjectStore("SpellFocusObject.db2", SpellFocusObjectFormat, HOTFIX_SEL_SPELL_FOCUS_OBJECT); -DB2Storage<SpellInterruptsEntry> sSpellInterruptsStore("SpellInterrupts.db2", SpellInterruptsFormat, HOTFIX_SEL_SPELL_INTERRUPTS); -DB2Storage<SpellItemEnchantmentEntry> sSpellItemEnchantmentStore("SpellItemEnchantment.db2", SpellItemEnchantmentFormat, HOTFIX_SEL_SPELL_ITEM_ENCHANTMENT); -DB2Storage<SpellItemEnchantmentConditionEntry> sSpellItemEnchantmentConditionStore("SpellItemEnchantmentCondition.db2", SpellItemEnchantmentConditionFormat, HOTFIX_SEL_SPELL_ITEM_ENCHANTMENT_CONDITION); -DB2Storage<SpellLearnSpellEntry> sSpellLearnSpellStore("SpellLearnSpell.db2", SpellLearnSpellFormat, HOTFIX_SEL_SPELL_LEARN_SPELL); -DB2Storage<SpellLevelsEntry> sSpellLevelsStore("SpellLevels.db2", SpellLevelsFormat, HOTFIX_SEL_SPELL_LEVELS); -DB2Storage<SpellMiscEntry> sSpellMiscStore("SpellMisc.db2", SpellMiscFormat, HOTFIX_SEL_SPELL_MISC); -DB2Storage<SpellPowerEntry> sSpellPowerStore("SpellPower.db2", SpellPowerFormat, HOTFIX_SEL_SPELL_POWER); -DB2Storage<SpellPowerDifficultyEntry> sSpellPowerDifficultyStore("SpellPowerDifficulty.db2", SpellPowerDifficultyFormat, HOTFIX_SEL_SPELL_POWER_DIFFICULTY); -DB2Storage<SpellProcsPerMinuteEntry> sSpellProcsPerMinuteStore("SpellProcsPerMinute.db2", SpellProcsPerMinuteFormat, HOTFIX_SEL_SPELL_PROCS_PER_MINUTE); -DB2Storage<SpellProcsPerMinuteModEntry> sSpellProcsPerMinuteModStore("SpellProcsPerMinuteMod.db2", SpellProcsPerMinuteModFormat, HOTFIX_SEL_SPELL_PROCS_PER_MINUTE_MOD); -DB2Storage<SpellRadiusEntry> sSpellRadiusStore("SpellRadius.db2", SpellRadiusFormat, HOTFIX_SEL_SPELL_RADIUS); -DB2Storage<SpellRangeEntry> sSpellRangeStore("SpellRange.db2", SpellRangeFormat, HOTFIX_SEL_SPELL_RANGE); -DB2Storage<SpellReagentsEntry> sSpellReagentsStore("SpellReagents.db2", SpellReagentsFormat, HOTFIX_SEL_SPELL_REAGENTS); -DB2Storage<SpellScalingEntry> sSpellScalingStore("SpellScaling.db2", SpellScalingFormat, HOTFIX_SEL_SPELL_SCALING); -DB2Storage<SpellShapeshiftEntry> sSpellShapeshiftStore("SpellShapeshift.db2", SpellShapeshiftFormat, HOTFIX_SEL_SPELL_SHAPESHIFT); -DB2Storage<SpellShapeshiftFormEntry> sSpellShapeshiftFormStore("SpellShapeshiftForm.db2", SpellShapeshiftFormFormat, HOTFIX_SEL_SPELL_SHAPESHIFT_FORM); -DB2Storage<SpellTargetRestrictionsEntry> sSpellTargetRestrictionsStore("SpellTargetRestrictions.db2", SpellTargetRestrictionsFormat, HOTFIX_SEL_SPELL_TARGET_RESTRICTIONS); -DB2Storage<SpellTotemsEntry> sSpellTotemsStore("SpellTotems.db2", SpellTotemsFormat, HOTFIX_SEL_SPELL_TOTEMS); -DB2Storage<SpellXSpellVisualEntry> sSpellXSpellVisualStore("SpellXSpellVisual.db2", SpellXSpellVisualFormat, HOTFIX_SEL_SPELL_X_SPELL_VISUAL); -DB2Storage<SummonPropertiesEntry> sSummonPropertiesStore("SummonProperties.db2", SummonPropertiesFormat, HOTFIX_SEL_SUMMON_PROPERTIES); -DB2Storage<TalentEntry> sTalentStore("Talent.db2", TalentFormat, HOTFIX_SEL_TALENT); -DB2Storage<TaxiNodesEntry> sTaxiNodesStore("TaxiNodes.db2", TaxiNodesFormat, HOTFIX_SEL_TAXI_NODES); -DB2Storage<TaxiPathEntry> sTaxiPathStore("TaxiPath.db2", TaxiPathFormat, HOTFIX_SEL_TAXI_PATH); -DB2Storage<TaxiPathNodeEntry> sTaxiPathNodeStore("TaxiPathNode.db2", TaxiPathNodeFormat, HOTFIX_SEL_TAXI_PATH_NODE); -DB2Storage<TotemCategoryEntry> sTotemCategoryStore("TotemCategory.db2", TotemCategoryFormat, HOTFIX_SEL_TOTEM_CATEGORY); -DB2Storage<ToyEntry> sToyStore("Toy.db2", ToyFormat, HOTFIX_SEL_TOY); -DB2Storage<TransportAnimationEntry> sTransportAnimationStore("TransportAnimation.db2", TransportAnimationFormat, HOTFIX_SEL_TRANSPORT_ANIMATION); -DB2Storage<TransportRotationEntry> sTransportRotationStore("TransportRotation.db2", TransportRotationFormat, HOTFIX_SEL_TRANSPORT_ROTATION); -DB2Storage<UnitPowerBarEntry> sUnitPowerBarStore("UnitPowerBar.db2", UnitPowerBarFormat, HOTFIX_SEL_UNIT_POWER_BAR); -DB2Storage<VehicleEntry> sVehicleStore("Vehicle.db2", VehicleFormat, HOTFIX_SEL_VEHICLE); -DB2Storage<VehicleSeatEntry> sVehicleSeatStore("VehicleSeat.db2", VehicleSeatFormat, HOTFIX_SEL_VEHICLE_SEAT); -DB2Storage<WMOAreaTableEntry> sWMOAreaTableStore("WMOAreaTable.db2", WMOAreaTableFormat, HOTFIX_SEL_WMO_AREA_TABLE); -DB2Storage<WorldMapAreaEntry> sWorldMapAreaStore("WorldMapArea.db2", WorldMapAreaFormat, HOTFIX_SEL_WORLD_MAP_AREA); -DB2Storage<WorldMapOverlayEntry> sWorldMapOverlayStore("WorldMapOverlay.db2", WorldMapOverlayFormat, HOTFIX_SEL_WORLD_MAP_OVERLAY); -DB2Storage<WorldMapTransformsEntry> sWorldMapTransformsStore("WorldMapTransforms.db2", WorldMapTransformsFormat, HOTFIX_SEL_WORLD_MAP_TRANSFORMS); -DB2Storage<WorldSafeLocsEntry> sWorldSafeLocsStore("WorldSafeLocs.db2", WorldSafeLocsFormat, HOTFIX_SEL_WORLD_SAFE_LOCS); +DB2Storage<AchievementEntry> sAchievementStore("Achievement.db2", AchievementMeta::Instance(), HOTFIX_SEL_ACHIEVEMENT); +DB2Storage<AnimKitEntry> sAnimKitStore("AnimKit.db2", AnimKitMeta::Instance(), HOTFIX_SEL_ANIM_KIT); +DB2Storage<AreaGroupMemberEntry> sAreaGroupMemberStore("AreaGroupMember.db2", AreaGroupMemberMeta::Instance(), HOTFIX_SEL_AREA_GROUP_MEMBER); +DB2Storage<AreaTableEntry> sAreaTableStore("AreaTable.db2", AreaTableMeta::Instance(), HOTFIX_SEL_AREA_TABLE); +DB2Storage<AreaTriggerEntry> sAreaTriggerStore("AreaTrigger.db2", AreaTriggerMeta::Instance(), HOTFIX_SEL_AREA_TRIGGER); +DB2Storage<ArmorLocationEntry> sArmorLocationStore("ArmorLocation.db2", ArmorLocationMeta::Instance(), HOTFIX_SEL_ARMOR_LOCATION); +DB2Storage<AuctionHouseEntry> sAuctionHouseStore("AuctionHouse.db2", AuctionHouseMeta::Instance(), HOTFIX_SEL_AUCTION_HOUSE); +DB2Storage<BankBagSlotPricesEntry> sBankBagSlotPricesStore("BankBagSlotPrices.db2", BankBagSlotPricesMeta::Instance(), HOTFIX_SEL_BANK_BAG_SLOT_PRICES); +DB2Storage<BannedAddOnsEntry> sBannedAddOnsStore("BannedAddOns.db2", BannedAddOnsMeta::Instance(), HOTFIX_SEL_BANNED_ADDONS); +DB2Storage<BarberShopStyleEntry> sBarberShopStyleStore("BarberShopStyle.db2", BarberShopStyleMeta::Instance(), HOTFIX_SEL_BARBER_SHOP_STYLE); +DB2Storage<BattlePetBreedQualityEntry> sBattlePetBreedQualityStore("BattlePetBreedQuality.db2", BattlePetBreedQualityMeta::Instance(), HOTFIX_SEL_BATTLE_PET_BREED_QUALITY); +DB2Storage<BattlePetBreedStateEntry> sBattlePetBreedStateStore("BattlePetBreedState.db2", BattlePetBreedStateMeta::Instance(), HOTFIX_SEL_BATTLE_PET_BREED_STATE); +DB2Storage<BattlePetSpeciesEntry> sBattlePetSpeciesStore("BattlePetSpecies.db2", BattlePetSpeciesMeta::Instance(), HOTFIX_SEL_BATTLE_PET_SPECIES); +DB2Storage<BattlePetSpeciesStateEntry> sBattlePetSpeciesStateStore("BattlePetSpeciesState.db2", BattlePetSpeciesStateMeta::Instance(), HOTFIX_SEL_BATTLE_PET_SPECIES_STATE); +DB2Storage<BattlemasterListEntry> sBattlemasterListStore("BattlemasterList.db2", BattlemasterListMeta::Instance(), HOTFIX_SEL_BATTLEMASTER_LIST); +DB2Storage<BroadcastTextEntry> sBroadcastTextStore("BroadcastText.db2", BroadcastTextMeta::Instance(), HOTFIX_SEL_BROADCAST_TEXT); +DB2Storage<CharSectionsEntry> sCharSectionsStore("CharSections.db2", CharSectionsMeta::Instance(), HOTFIX_SEL_CHAR_SECTIONS); +DB2Storage<CharStartOutfitEntry> sCharStartOutfitStore("CharStartOutfit.db2", CharStartOutfitMeta::Instance(), HOTFIX_SEL_CHAR_START_OUTFIT); +DB2Storage<CharTitlesEntry> sCharTitlesStore("CharTitles.db2", CharTitlesMeta::Instance(), HOTFIX_SEL_CHAR_TITLES); +DB2Storage<ChatChannelsEntry> sChatChannelsStore("ChatChannels.db2", ChatChannelsMeta::Instance(), HOTFIX_SEL_CHAT_CHANNELS); +DB2Storage<ChrClassesEntry> sChrClassesStore("ChrClasses.db2", ChrClassesMeta::Instance(), HOTFIX_SEL_CHR_CLASSES); +DB2Storage<ChrClassesXPowerTypesEntry> sChrClassesXPowerTypesStore("ChrClassesXPowerTypes.db2", ChrClassesXPowerTypesMeta::Instance(), HOTFIX_SEL_CHR_CLASSES_X_POWER_TYPES); +DB2Storage<ChrRacesEntry> sChrRacesStore("ChrRaces.db2", ChrRacesMeta::Instance(), HOTFIX_SEL_CHR_RACES); +DB2Storage<ChrSpecializationEntry> sChrSpecializationStore("ChrSpecialization.db2", ChrSpecializationMeta::Instance(), HOTFIX_SEL_CHR_SPECIALIZATION); +DB2Storage<CinematicSequencesEntry> sCinematicSequencesStore("CinematicSequences.db2", CinematicSequencesMeta::Instance(), HOTFIX_SEL_CINEMATIC_SEQUENCES); +DB2Storage<CreatureDisplayInfoEntry> sCreatureDisplayInfoStore("CreatureDisplayInfo.db2", CreatureDisplayInfoMeta::Instance(), HOTFIX_SEL_CREATURE_DISPLAY_INFO); +DB2Storage<CreatureDisplayInfoExtraEntry> sCreatureDisplayInfoExtraStore("CreatureDisplayInfoExtra.db2", CreatureDisplayInfoExtraMeta::Instance(), HOTFIX_SEL_CREATURE_DISPLAY_INFO_EXTRA); +DB2Storage<CreatureFamilyEntry> sCreatureFamilyStore("CreatureFamily.db2", CreatureFamilyMeta::Instance(), HOTFIX_SEL_CREATURE_FAMILY); +DB2Storage<CreatureModelDataEntry> sCreatureModelDataStore("CreatureModelData.db2", CreatureModelDataMeta::Instance(), HOTFIX_SEL_CREATURE_MODEL_DATA); +DB2Storage<CreatureTypeEntry> sCreatureTypeStore("CreatureType.db2", CreatureTypeMeta::Instance(), HOTFIX_SEL_CREATURE_TYPE); +DB2Storage<CriteriaEntry> sCriteriaStore("Criteria.db2", CriteriaMeta::Instance(), HOTFIX_SEL_CRITERIA); +DB2Storage<CriteriaTreeEntry> sCriteriaTreeStore("CriteriaTree.db2", CriteriaTreeMeta::Instance(), HOTFIX_SEL_CRITERIA_TREE); +DB2Storage<CurrencyTypesEntry> sCurrencyTypesStore("CurrencyTypes.db2", CurrencyTypesMeta::Instance(), HOTFIX_SEL_CURRENCY_TYPES); +DB2Storage<CurvePointEntry> sCurvePointStore("CurvePoint.db2", CurvePointMeta::Instance(), HOTFIX_SEL_CURVE_POINT); +DB2Storage<DestructibleModelDataEntry> sDestructibleModelDataStore("DestructibleModelData.db2", DestructibleModelDataMeta::Instance(), HOTFIX_SEL_DESTRUCTIBLE_MODEL_DATA); +DB2Storage<DifficultyEntry> sDifficultyStore("Difficulty.db2", DifficultyMeta::Instance(), HOTFIX_SEL_DIFFICULTY); +DB2Storage<DungeonEncounterEntry> sDungeonEncounterStore("DungeonEncounter.db2", DungeonEncounterMeta::Instance(), HOTFIX_SEL_DUNGEON_ENCOUNTER); +DB2Storage<DurabilityCostsEntry> sDurabilityCostsStore("DurabilityCosts.db2", DurabilityCostsMeta::Instance(), HOTFIX_SEL_DURABILITY_COSTS); +DB2Storage<DurabilityQualityEntry> sDurabilityQualityStore("DurabilityQuality.db2", DurabilityQualityMeta::Instance(), HOTFIX_SEL_DURABILITY_QUALITY); +DB2Storage<EmotesEntry> sEmotesStore("Emotes.db2", EmotesMeta::Instance(), HOTFIX_SEL_EMOTES); +DB2Storage<EmotesTextEntry> sEmotesTextStore("EmotesText.db2", EmotesTextMeta::Instance(), HOTFIX_SEL_EMOTES_TEXT); +DB2Storage<EmotesTextSoundEntry> sEmotesTextSoundStore("EmotesTextSound.db2", EmotesTextSoundMeta::Instance(), HOTFIX_SEL_EMOTES_TEXT_SOUND); +DB2Storage<FactionEntry> sFactionStore("Faction.db2", FactionMeta::Instance(), HOTFIX_SEL_FACTION); +DB2Storage<FactionTemplateEntry> sFactionTemplateStore("FactionTemplate.db2", FactionTemplateMeta::Instance(), HOTFIX_SEL_FACTION_TEMPLATE); +DB2Storage<GameObjectsEntry> sGameObjectsStore("GameObjects.db2", GameObjectsMeta::Instance(), HOTFIX_SEL_GAMEOBJECTS); +DB2Storage<GameObjectDisplayInfoEntry> sGameObjectDisplayInfoStore("GameObjectDisplayInfo.db2", GameObjectDisplayInfoMeta::Instance(), HOTFIX_SEL_GAMEOBJECT_DISPLAY_INFO); +DB2Storage<GarrAbilityEntry> sGarrAbilityStore("GarrAbility.db2", GarrAbilityMeta::Instance(), HOTFIX_SEL_GARR_ABILITY); +DB2Storage<GarrBuildingEntry> sGarrBuildingStore("GarrBuilding.db2", GarrBuildingMeta::Instance(), HOTFIX_SEL_GARR_BUILDING); +DB2Storage<GarrBuildingPlotInstEntry> sGarrBuildingPlotInstStore("GarrBuildingPlotInst.db2", GarrBuildingPlotInstMeta::Instance(), HOTFIX_SEL_GARR_BUILDING_PLOT_INST); +DB2Storage<GarrClassSpecEntry> sGarrClassSpecStore("GarrClassSpec.db2", GarrClassSpecMeta::Instance(), HOTFIX_SEL_GARR_CLASS_SPEC); +DB2Storage<GarrFollowerEntry> sGarrFollowerStore("GarrFollower.db2", GarrFollowerMeta::Instance(), HOTFIX_SEL_GARR_FOLLOWER); +DB2Storage<GarrFollowerXAbilityEntry> sGarrFollowerXAbilityStore("GarrFollowerXAbility.db2", GarrFollowerXAbilityMeta::Instance(), HOTFIX_SEL_GARR_FOLLOWER_X_ABILITY); +DB2Storage<GarrPlotBuildingEntry> sGarrPlotBuildingStore("GarrPlotBuilding.db2", GarrPlotBuildingMeta::Instance(), HOTFIX_SEL_GARR_PLOT_BUILDING); +DB2Storage<GarrPlotEntry> sGarrPlotStore("GarrPlot.db2", GarrPlotMeta::Instance(), HOTFIX_SEL_GARR_PLOT); +DB2Storage<GarrPlotInstanceEntry> sGarrPlotInstanceStore("GarrPlotInstance.db2", GarrPlotInstanceMeta::Instance(), HOTFIX_SEL_GARR_PLOT_INSTANCE); +DB2Storage<GarrSiteLevelEntry> sGarrSiteLevelStore("GarrSiteLevel.db2", GarrSiteLevelMeta::Instance(), HOTFIX_SEL_GARR_SITE_LEVEL); +DB2Storage<GarrSiteLevelPlotInstEntry> sGarrSiteLevelPlotInstStore("GarrSiteLevelPlotInst.db2", GarrSiteLevelPlotInstMeta::Instance(), HOTFIX_SEL_GARR_SITE_LEVEL_PLOT_INST); +DB2Storage<GemPropertiesEntry> sGemPropertiesStore("GemProperties.db2", GemPropertiesMeta::Instance(), HOTFIX_SEL_GEM_PROPERTIES); +DB2Storage<GlyphPropertiesEntry> sGlyphPropertiesStore("GlyphProperties.db2", GlyphPropertiesMeta::Instance(), HOTFIX_SEL_GLYPH_PROPERTIES); +DB2Storage<GuildColorBackgroundEntry> sGuildColorBackgroundStore("GuildColorBackground.db2", GuildColorBackgroundMeta::Instance(), HOTFIX_SEL_GUILD_COLOR_BACKGROUND); +DB2Storage<GuildColorBorderEntry> sGuildColorBorderStore("GuildColorBorder.db2", GuildColorBorderMeta::Instance(), HOTFIX_SEL_GUILD_COLOR_BORDER); +DB2Storage<GuildColorEmblemEntry> sGuildColorEmblemStore("GuildColorEmblem.db2", GuildColorEmblemMeta::Instance(), HOTFIX_SEL_GUILD_COLOR_EMBLEM); +DB2Storage<GuildPerkSpellsEntry> sGuildPerkSpellsStore("GuildPerkSpells.db2", GuildPerkSpellsMeta::Instance(), HOTFIX_SEL_GUILD_PERK_SPELLS); +DB2Storage<HeirloomEntry> sHeirloomStore("Heirloom.db2", HeirloomMeta::Instance(), HOTFIX_SEL_HEIRLOOM); +DB2Storage<HolidaysEntry> sHolidaysStore("Holidays.db2", HolidaysMeta::Instance(), HOTFIX_SEL_HOLIDAYS); +DB2Storage<ImportPriceArmorEntry> sImportPriceArmorStore("ImportPriceArmor.db2", ImportPriceArmorMeta::Instance(), HOTFIX_SEL_IMPORT_PRICE_ARMOR); +DB2Storage<ImportPriceQualityEntry> sImportPriceQualityStore("ImportPriceQuality.db2", ImportPriceQualityMeta::Instance(), HOTFIX_SEL_IMPORT_PRICE_QUALITY); +DB2Storage<ImportPriceShieldEntry> sImportPriceShieldStore("ImportPriceShield.db2", ImportPriceShieldMeta::Instance(), HOTFIX_SEL_IMPORT_PRICE_SHIELD); +DB2Storage<ImportPriceWeaponEntry> sImportPriceWeaponStore("ImportPriceWeapon.db2", ImportPriceWeaponMeta::Instance(), HOTFIX_SEL_IMPORT_PRICE_WEAPON); +DB2Storage<ItemAppearanceEntry> sItemAppearanceStore("ItemAppearance.db2", ItemAppearanceMeta::Instance(), HOTFIX_SEL_ITEM_APPEARANCE); +DB2Storage<ItemArmorQualityEntry> sItemArmorQualityStore("ItemArmorQuality.db2", ItemArmorQualityMeta::Instance(), HOTFIX_SEL_ITEM_ARMOR_QUALITY); +DB2Storage<ItemArmorShieldEntry> sItemArmorShieldStore("ItemArmorShield.db2", ItemArmorShieldMeta::Instance(), HOTFIX_SEL_ITEM_ARMOR_SHIELD); +DB2Storage<ItemArmorTotalEntry> sItemArmorTotalStore("ItemArmorTotal.db2", ItemArmorTotalMeta::Instance(), HOTFIX_SEL_ITEM_ARMOR_TOTAL); +DB2Storage<ItemBagFamilyEntry> sItemBagFamilyStore("ItemBagFamily.db2", ItemBagFamilyMeta::Instance(), HOTFIX_SEL_ITEM_BAG_FAMILY); +DB2Storage<ItemBonusEntry> sItemBonusStore("ItemBonus.db2", ItemBonusMeta::Instance(), HOTFIX_SEL_ITEM_BONUS); +DB2Storage<ItemBonusTreeNodeEntry> sItemBonusTreeNodeStore("ItemBonusTreeNode.db2", ItemBonusTreeNodeMeta::Instance(), HOTFIX_SEL_ITEM_BONUS_TREE_NODE); +DB2Storage<ItemClassEntry> sItemClassStore("ItemClass.db2", ItemClassMeta::Instance(), HOTFIX_SEL_ITEM_CLASS); +DB2Storage<ItemCurrencyCostEntry> sItemCurrencyCostStore("ItemCurrencyCost.db2", ItemCurrencyCostMeta::Instance(), HOTFIX_SEL_ITEM_CURRENCY_COST); +DB2Storage<ItemDamageAmmoEntry> sItemDamageAmmoStore("ItemDamageAmmo.db2", ItemDamageAmmoMeta::Instance(), HOTFIX_SEL_ITEM_DAMAGE_AMMO); +DB2Storage<ItemDamageOneHandEntry> sItemDamageOneHandStore("ItemDamageOneHand.db2", ItemDamageOneHandMeta::Instance(), HOTFIX_SEL_ITEM_DAMAGE_ONE_HAND); +DB2Storage<ItemDamageOneHandCasterEntry> sItemDamageOneHandCasterStore("ItemDamageOneHandCaster.db2", ItemDamageOneHandCasterMeta::Instance(), HOTFIX_SEL_ITEM_DAMAGE_ONE_HAND_CASTER); +DB2Storage<ItemDamageTwoHandEntry> sItemDamageTwoHandStore("ItemDamageTwoHand.db2", ItemDamageTwoHandMeta::Instance(), HOTFIX_SEL_ITEM_DAMAGE_TWO_HAND); +DB2Storage<ItemDamageTwoHandCasterEntry> sItemDamageTwoHandCasterStore("ItemDamageTwoHandCaster.db2", ItemDamageTwoHandCasterMeta::Instance(), HOTFIX_SEL_ITEM_DAMAGE_TWO_HAND_CASTER); +DB2Storage<ItemDisenchantLootEntry> sItemDisenchantLootStore("ItemDisenchantLoot.db2", ItemDisenchantLootMeta::Instance(), HOTFIX_SEL_ITEM_DISENCHANT_LOOT); +DB2Storage<ItemEffectEntry> sItemEffectStore("ItemEffect.db2", ItemEffectMeta::Instance(), HOTFIX_SEL_ITEM_EFFECT); +DB2Storage<ItemEntry> sItemStore("Item.db2", ItemMeta::Instance(), HOTFIX_SEL_ITEM); +DB2Storage<ItemExtendedCostEntry> sItemExtendedCostStore("ItemExtendedCost.db2", ItemExtendedCostMeta::Instance(), HOTFIX_SEL_ITEM_EXTENDED_COST); +DB2Storage<ItemLimitCategoryEntry> sItemLimitCategoryStore("ItemLimitCategory.db2", ItemLimitCategoryMeta::Instance(), HOTFIX_SEL_ITEM_LIMIT_CATEGORY); +DB2Storage<ItemModifiedAppearanceEntry> sItemModifiedAppearanceStore("ItemModifiedAppearance.db2", ItemModifiedAppearanceMeta::Instance(), HOTFIX_SEL_ITEM_MODIFIED_APPEARANCE); +DB2Storage<ItemPriceBaseEntry> sItemPriceBaseStore("ItemPriceBase.db2", ItemPriceBaseMeta::Instance(), HOTFIX_SEL_ITEM_PRICE_BASE); +DB2Storage<ItemRandomPropertiesEntry> sItemRandomPropertiesStore("ItemRandomProperties.db2", ItemRandomPropertiesMeta::Instance(), HOTFIX_SEL_ITEM_RANDOM_PROPERTIES); +DB2Storage<ItemRandomSuffixEntry> sItemRandomSuffixStore("ItemRandomSuffix.db2", ItemRandomSuffixMeta::Instance(), HOTFIX_SEL_ITEM_RANDOM_SUFFIX); +DB2Storage<ItemSetEntry> sItemSetStore("ItemSet.db2", ItemSetMeta::Instance(), HOTFIX_SEL_ITEM_SET); +DB2Storage<ItemSetSpellEntry> sItemSetSpellStore("ItemSetSpell.db2", ItemSetSpellMeta::Instance(), HOTFIX_SEL_ITEM_SET_SPELL); +DB2SparseStorage<ItemSparseEntry> sItemSparseStore("Item-sparse.db2", ItemSparseMeta::Instance(), HOTFIX_SEL_ITEM_SPARSE); +DB2Storage<ItemSpecEntry> sItemSpecStore("ItemSpec.db2", ItemSpecMeta::Instance(), HOTFIX_SEL_ITEM_SPEC); +DB2Storage<ItemSpecOverrideEntry> sItemSpecOverrideStore("ItemSpecOverride.db2", ItemSpecOverrideMeta::Instance(), HOTFIX_SEL_ITEM_SPEC_OVERRIDE); +DB2Storage<ItemXBonusTreeEntry> sItemXBonusTreeStore("ItemXBonusTree.db2", ItemXBonusTreeMeta::Instance(), HOTFIX_SEL_ITEM_X_BONUS_TREE); +DB2Storage<KeyChainEntry> sKeyChainStore("KeyChain.db2", KeyChainMeta::Instance(), HOTFIX_SEL_KEY_CHAIN); +DB2Storage<LfgDungeonsEntry> sLfgDungeonsStore("LfgDungeons.db2", LfgDungeonsMeta::Instance(), HOTFIX_SEL_LFG_DUNGEONS); +DB2Storage<LightEntry> sLightStore("Light.db2", LightMeta::Instance(), HOTFIX_SEL_LIGHT); +DB2Storage<LiquidTypeEntry> sLiquidTypeStore("LiquidType.db2", LiquidTypeMeta::Instance(), HOTFIX_SEL_LIQUID_TYPE); +DB2Storage<LockEntry> sLockStore("Lock.db2", LockMeta::Instance(), HOTFIX_SEL_LOCK); +DB2Storage<MailTemplateEntry> sMailTemplateStore("MailTemplate.db2", MailTemplateMeta::Instance(), HOTFIX_SEL_MAIL_TEMPLATE); +DB2Storage<MapEntry> sMapStore("Map.db2", MapMeta::Instance(), HOTFIX_SEL_MAP); +DB2Storage<MapDifficultyEntry> sMapDifficultyStore("MapDifficulty.db2", MapDifficultyMeta::Instance(), HOTFIX_SEL_MAP_DIFFICULTY); +DB2Storage<ModifierTreeEntry> sModifierTreeStore("ModifierTree.db2", ModifierTreeMeta::Instance(), HOTFIX_SEL_MODIFIER_TREE); +DB2Storage<MountCapabilityEntry> sMountCapabilityStore("MountCapability.db2", MountCapabilityMeta::Instance(), HOTFIX_SEL_MOUNT_CAPABILITY); +DB2Storage<MountEntry> sMountStore("Mount.db2", MountMeta::Instance(), HOTFIX_SEL_MOUNT); +DB2Storage<MountTypeXCapabilityEntry> sMountTypeXCapabilityStore("MountTypeXCapability.db2", MountTypeXCapabilityMeta::Instance(), HOTFIX_SEL_MOUNT_TYPE_X_CAPABILITY); +DB2Storage<MovieEntry> sMovieStore("Movie.db2", MovieMeta::Instance(), HOTFIX_SEL_MOVIE); +DB2Storage<NameGenEntry> sNameGenStore("NameGen.db2", NameGenMeta::Instance(), HOTFIX_SEL_NAME_GEN); +DB2Storage<NamesProfanityEntry> sNamesProfanityStore("NamesProfanity.db2", NamesProfanityMeta::Instance(), HOTFIX_SEL_NAMES_PROFANITY); +DB2Storage<NamesReservedEntry> sNamesReservedStore("NamesReserved.db2", NamesReservedMeta::Instance(), HOTFIX_SEL_NAMES_RESERVED); +DB2Storage<NamesReservedLocaleEntry> sNamesReservedLocaleStore("NamesReservedLocale.db2", NamesReservedLocaleMeta::Instance(), HOTFIX_SEL_NAMES_RESERVED_LOCALE); +DB2Storage<OverrideSpellDataEntry> sOverrideSpellDataStore("OverrideSpellData.db2", OverrideSpellDataMeta::Instance(), HOTFIX_SEL_OVERRIDE_SPELL_DATA); +DB2Storage<PhaseEntry> sPhaseStore("Phase.db2", PhaseMeta::Instance(), HOTFIX_SEL_PHASE); +DB2Storage<PhaseXPhaseGroupEntry> sPhaseXPhaseGroupStore("PhaseXPhaseGroup.db2", PhaseXPhaseGroupMeta::Instance(), HOTFIX_SEL_PHASE_X_PHASE_GROUP); +DB2Storage<PlayerConditionEntry> sPlayerConditionStore("PlayerCondition.db2", PlayerConditionMeta::Instance(), HOTFIX_SEL_PLAYER_CONDITION); +DB2Storage<PowerDisplayEntry> sPowerDisplayStore("PowerDisplay.db2", PowerDisplayMeta::Instance(), HOTFIX_SEL_POWER_DISPLAY); +DB2Storage<PvPDifficultyEntry> sPvpDifficultyStore("PvpDifficulty.db2", PvpDifficultyMeta::Instance(), HOTFIX_SEL_PVP_DIFFICULTY); +DB2Storage<QuestFactionRewardEntry> sQuestFactionRewardStore("QuestFactionReward.db2", QuestFactionRewardMeta::Instance(), HOTFIX_SEL_QUEST_FACTION_REWARD); +DB2Storage<QuestMoneyRewardEntry> sQuestMoneyRewardStore("QuestMoneyReward.db2", QuestMoneyRewardMeta::Instance(), HOTFIX_SEL_QUEST_MONEY_REWARD); +DB2Storage<QuestPackageItemEntry> sQuestPackageItemStore("QuestPackageItem.db2", QuestPackageItemMeta::Instance(), HOTFIX_SEL_QUEST_PACKAGE_ITEM); +DB2Storage<QuestSortEntry> sQuestSortStore("QuestSort.db2", QuestSortMeta::Instance(), HOTFIX_SEL_QUEST_SORT); +DB2Storage<QuestV2Entry> sQuestV2Store("QuestV2.db2", QuestV2Meta::Instance(), HOTFIX_SEL_QUEST_V2); +DB2Storage<QuestXPEntry> sQuestXPStore("QuestXP.db2", QuestXPMeta::Instance(), HOTFIX_SEL_QUEST_XP); +DB2Storage<RandPropPointsEntry> sRandPropPointsStore("RandPropPoints.db2", RandPropPointsMeta::Instance(), HOTFIX_SEL_RAND_PROP_POINTS); +DB2Storage<ScalingStatDistributionEntry> sScalingStatDistributionStore("ScalingStatDistribution.db2", ScalingStatDistributionMeta::Instance(), HOTFIX_SEL_SCALING_STAT_DISTRIBUTION); +DB2Storage<SkillLineEntry> sSkillLineStore("SkillLine.db2", SkillLineMeta::Instance(), HOTFIX_SEL_SKILL_LINE); +DB2Storage<SkillLineAbilityEntry> sSkillLineAbilityStore("SkillLineAbility.db2", SkillLineAbilityMeta::Instance(), HOTFIX_SEL_SKILL_LINE_ABILITY); +DB2Storage<SkillRaceClassInfoEntry> sSkillRaceClassInfoStore("SkillRaceClassInfo.db2", SkillRaceClassInfoMeta::Instance(), HOTFIX_SEL_SKILL_RACE_CLASS_INFO); +DB2Storage<SoundKitEntry> sSoundKitStore("SoundKit.db2", SoundKitMeta::Instance(), HOTFIX_SEL_SOUND_KIT); +DB2Storage<SpecializationSpellsEntry> sSpecializationSpellsStore("SpecializationSpells.db2", SpecializationSpellsMeta::Instance(), HOTFIX_SEL_SPECIALIZATION_SPELLS); +DB2Storage<SpellEntry> sSpellStore("Spell.db2", SpellMeta::Instance(), HOTFIX_SEL_SPELL); +DB2Storage<SpellAuraOptionsEntry> sSpellAuraOptionsStore("SpellAuraOptions.db2", SpellAuraOptionsMeta::Instance(), HOTFIX_SEL_SPELL_AURA_OPTIONS); +DB2Storage<SpellAuraRestrictionsEntry> sSpellAuraRestrictionsStore("SpellAuraRestrictions.db2", SpellAuraRestrictionsMeta::Instance(), HOTFIX_SEL_SPELL_AURA_RESTRICTIONS); +DB2Storage<SpellCastTimesEntry> sSpellCastTimesStore("SpellCastTimes.db2", SpellCastTimesMeta::Instance(), HOTFIX_SEL_SPELL_CAST_TIMES); +DB2Storage<SpellCastingRequirementsEntry> sSpellCastingRequirementsStore("SpellCastingRequirements.db2", SpellCastingRequirementsMeta::Instance(), HOTFIX_SEL_SPELL_CASTING_REQUIREMENTS); +DB2Storage<SpellCategoriesEntry> sSpellCategoriesStore("SpellCategories.db2", SpellCategoriesMeta::Instance(), HOTFIX_SEL_SPELL_CATEGORIES); +DB2Storage<SpellCategoryEntry> sSpellCategoryStore("SpellCategory.db2", SpellCategoryMeta::Instance(), HOTFIX_SEL_SPELL_CATEGORY); +DB2Storage<SpellClassOptionsEntry> sSpellClassOptionsStore("SpellClassOptions.db2", SpellClassOptionsMeta::Instance(), HOTFIX_SEL_SPELL_CLASS_OPTIONS); +DB2Storage<SpellCooldownsEntry> sSpellCooldownsStore("SpellCooldowns.db2", SpellCooldownsMeta::Instance(), HOTFIX_SEL_SPELL_COOLDOWNS); +DB2Storage<SpellDurationEntry> sSpellDurationStore("SpellDuration.db2", SpellDurationMeta::Instance(), HOTFIX_SEL_SPELL_DURATION); +DB2Storage<SpellEffectEntry> sSpellEffectStore("SpellEffect.db2", SpellEffectMeta::Instance(), HOTFIX_SEL_SPELL_EFFECT); +DB2Storage<SpellEffectScalingEntry> sSpellEffectScalingStore("SpellEffectScaling.db2", SpellEffectScalingMeta::Instance(), HOTFIX_SEL_SPELL_EFFECT_SCALING); +DB2Storage<SpellEquippedItemsEntry> sSpellEquippedItemsStore("SpellEquippedItems.db2", SpellEquippedItemsMeta::Instance(), HOTFIX_SEL_SPELL_EQUIPPED_ITEMS); +DB2Storage<SpellFocusObjectEntry> sSpellFocusObjectStore("SpellFocusObject.db2", SpellFocusObjectMeta::Instance(), HOTFIX_SEL_SPELL_FOCUS_OBJECT); +DB2Storage<SpellInterruptsEntry> sSpellInterruptsStore("SpellInterrupts.db2", SpellInterruptsMeta::Instance(), HOTFIX_SEL_SPELL_INTERRUPTS); +DB2Storage<SpellItemEnchantmentEntry> sSpellItemEnchantmentStore("SpellItemEnchantment.db2", SpellItemEnchantmentMeta::Instance(), HOTFIX_SEL_SPELL_ITEM_ENCHANTMENT); +DB2Storage<SpellItemEnchantmentConditionEntry> sSpellItemEnchantmentConditionStore("SpellItemEnchantmentCondition.db2", SpellItemEnchantmentConditionMeta::Instance(), HOTFIX_SEL_SPELL_ITEM_ENCHANTMENT_CONDITION); +DB2Storage<SpellLearnSpellEntry> sSpellLearnSpellStore("SpellLearnSpell.db2", SpellLearnSpellMeta::Instance(), HOTFIX_SEL_SPELL_LEARN_SPELL); +DB2Storage<SpellLevelsEntry> sSpellLevelsStore("SpellLevels.db2", SpellLevelsMeta::Instance(), HOTFIX_SEL_SPELL_LEVELS); +DB2Storage<SpellMiscEntry> sSpellMiscStore("SpellMisc.db2", SpellMiscMeta::Instance(), HOTFIX_SEL_SPELL_MISC); +DB2Storage<SpellPowerEntry> sSpellPowerStore("SpellPower.db2", SpellPowerMeta::Instance(), HOTFIX_SEL_SPELL_POWER); +DB2Storage<SpellPowerDifficultyEntry> sSpellPowerDifficultyStore("SpellPowerDifficulty.db2", SpellPowerDifficultyMeta::Instance(), HOTFIX_SEL_SPELL_POWER_DIFFICULTY); +DB2Storage<SpellProcsPerMinuteEntry> sSpellProcsPerMinuteStore("SpellProcsPerMinute.db2", SpellProcsPerMinuteMeta::Instance(), HOTFIX_SEL_SPELL_PROCS_PER_MINUTE); +DB2Storage<SpellProcsPerMinuteModEntry> sSpellProcsPerMinuteModStore("SpellProcsPerMinuteMod.db2", SpellProcsPerMinuteModMeta::Instance(), HOTFIX_SEL_SPELL_PROCS_PER_MINUTE_MOD); +DB2Storage<SpellRadiusEntry> sSpellRadiusStore("SpellRadius.db2", SpellRadiusMeta::Instance(), HOTFIX_SEL_SPELL_RADIUS); +DB2Storage<SpellRangeEntry> sSpellRangeStore("SpellRange.db2", SpellRangeMeta::Instance(), HOTFIX_SEL_SPELL_RANGE); +DB2Storage<SpellReagentsEntry> sSpellReagentsStore("SpellReagents.db2", SpellReagentsMeta::Instance(), HOTFIX_SEL_SPELL_REAGENTS); +DB2Storage<SpellScalingEntry> sSpellScalingStore("SpellScaling.db2", SpellScalingMeta::Instance(), HOTFIX_SEL_SPELL_SCALING); +DB2Storage<SpellShapeshiftEntry> sSpellShapeshiftStore("SpellShapeshift.db2", SpellShapeshiftMeta::Instance(), HOTFIX_SEL_SPELL_SHAPESHIFT); +DB2Storage<SpellShapeshiftFormEntry> sSpellShapeshiftFormStore("SpellShapeshiftForm.db2", SpellShapeshiftFormMeta::Instance(), HOTFIX_SEL_SPELL_SHAPESHIFT_FORM); +DB2Storage<SpellTargetRestrictionsEntry> sSpellTargetRestrictionsStore("SpellTargetRestrictions.db2", SpellTargetRestrictionsMeta::Instance(), HOTFIX_SEL_SPELL_TARGET_RESTRICTIONS); +DB2Storage<SpellTotemsEntry> sSpellTotemsStore("SpellTotems.db2", SpellTotemsMeta::Instance(), HOTFIX_SEL_SPELL_TOTEMS); +DB2Storage<SpellXSpellVisualEntry> sSpellXSpellVisualStore("SpellXSpellVisual.db2", SpellXSpellVisualMeta::Instance(), HOTFIX_SEL_SPELL_X_SPELL_VISUAL); +DB2Storage<SummonPropertiesEntry> sSummonPropertiesStore("SummonProperties.db2", SummonPropertiesMeta::Instance(), HOTFIX_SEL_SUMMON_PROPERTIES); +DB2Storage<TalentEntry> sTalentStore("Talent.db2", TalentMeta::Instance(), HOTFIX_SEL_TALENT); +DB2Storage<TaxiNodesEntry> sTaxiNodesStore("TaxiNodes.db2", TaxiNodesMeta::Instance(), HOTFIX_SEL_TAXI_NODES); +DB2Storage<TaxiPathEntry> sTaxiPathStore("TaxiPath.db2", TaxiPathMeta::Instance(), HOTFIX_SEL_TAXI_PATH); +DB2Storage<TaxiPathNodeEntry> sTaxiPathNodeStore("TaxiPathNode.db2", TaxiPathNodeMeta::Instance(), HOTFIX_SEL_TAXI_PATH_NODE); +DB2Storage<TotemCategoryEntry> sTotemCategoryStore("TotemCategory.db2", TotemCategoryMeta::Instance(), HOTFIX_SEL_TOTEM_CATEGORY); +DB2Storage<ToyEntry> sToyStore("Toy.db2", ToyMeta::Instance(), HOTFIX_SEL_TOY); +DB2Storage<TransportAnimationEntry> sTransportAnimationStore("TransportAnimation.db2", TransportAnimationMeta::Instance(), HOTFIX_SEL_TRANSPORT_ANIMATION); +DB2Storage<TransportRotationEntry> sTransportRotationStore("TransportRotation.db2", TransportRotationMeta::Instance(), HOTFIX_SEL_TRANSPORT_ROTATION); +DB2Storage<UnitPowerBarEntry> sUnitPowerBarStore("UnitPowerBar.db2", UnitPowerBarMeta::Instance(), HOTFIX_SEL_UNIT_POWER_BAR); +DB2Storage<VehicleEntry> sVehicleStore("Vehicle.db2", VehicleMeta::Instance(), HOTFIX_SEL_VEHICLE); +DB2Storage<VehicleSeatEntry> sVehicleSeatStore("VehicleSeat.db2", VehicleSeatMeta::Instance(), HOTFIX_SEL_VEHICLE_SEAT); +DB2Storage<WMOAreaTableEntry> sWMOAreaTableStore("WMOAreaTable.db2", WMOAreaTableMeta::Instance(), HOTFIX_SEL_WMO_AREA_TABLE); +DB2Storage<WorldMapAreaEntry> sWorldMapAreaStore("WorldMapArea.db2", WorldMapAreaMeta::Instance(), HOTFIX_SEL_WORLD_MAP_AREA); +DB2Storage<WorldMapOverlayEntry> sWorldMapOverlayStore("WorldMapOverlay.db2", WorldMapOverlayMeta::Instance(), HOTFIX_SEL_WORLD_MAP_OVERLAY); +DB2Storage<WorldMapTransformsEntry> sWorldMapTransformsStore("WorldMapTransforms.db2", WorldMapTransformsMeta::Instance(), HOTFIX_SEL_WORLD_MAP_TRANSFORMS); +DB2Storage<WorldSafeLocsEntry> sWorldSafeLocsStore("WorldSafeLocs.db2", WorldSafeLocsMeta::Instance(), HOTFIX_SEL_WORLD_SAFE_LOCS); TaxiMask sTaxiNodesMask; TaxiMask sOldContinentsNodesMask; @@ -225,22 +224,14 @@ template<class T, template<class> class DB2> inline void LoadDB2(uint32& availableDb2Locales, DB2StoreProblemList& errlist, DB2Manager::StorageMap& stores, DB2StorageBase* storage, std::string const& db2Path, uint32 defaultLocale, DB2<T> const& /*hint*/) { // compatibility format and C++ structure sizes - ASSERT(DB2FileLoader::GetFormatRecordSize(storage->GetFormat()) == sizeof(T), + ASSERT(storage->GetMeta()->GetRecordSize() == sizeof(T), "Size of '%s' set by format string (%u) not equal size of C++ structure (" SZFMTD ").", - storage->GetFileName().c_str(), DB2FileLoader::GetFormatRecordSize(storage->GetFormat()), sizeof(T)); + storage->GetFileName().c_str(), storage->GetMeta()->GetRecordSize(), sizeof(T)); ++DB2FilesCount; -#define EXPECTED_DB2_BUILD 21414 - if (storage->Load(db2Path + localeNames[defaultLocale] + '/', defaultLocale)) { - if (storage->GetBuild() != EXPECTED_DB2_BUILD) - { - errlist.push_back(Trinity::StringFormat("DB2 file %s is from wrong client version!", storage->GetFileName())); - return; - } - storage->LoadFromDB(); for (uint32 i = 0; i < TOTAL_LOCALES; ++i) @@ -261,7 +252,7 @@ inline void LoadDB2(uint32& availableDb2Locales, DB2StoreProblemList& errlist, D if (FILE* f = fopen((db2Path + localeNames[defaultLocale] + '/' + storage->GetFileName()).c_str(), "rb")) { std::ostringstream stream; - stream << storage->GetFileName() << " exists, and has " << storage->GetFieldCount() << " field(s) (expected " << strlen(storage->GetFormat()) + stream << storage->GetFileName() << " exists, and has " << storage->GetFieldCount() << " field(s) (expected " << storage->GetMeta()->FieldCount << "). Extracted file might be from wrong client version."; std::string buf = stream.str(); errlist.push_back(buf); @@ -271,7 +262,7 @@ inline void LoadDB2(uint32& availableDb2Locales, DB2StoreProblemList& errlist, D errlist.push_back(storage->GetFileName()); } - stores[storage->GetHash()] = storage; + stores[storage->GetTableHash()] = storage; } DB2Manager& DB2Manager::Instance() @@ -350,7 +341,6 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) LOAD_DB2(sGarrSiteLevelPlotInstStore); LOAD_DB2(sGemPropertiesStore); LOAD_DB2(sGlyphPropertiesStore); - LOAD_DB2(sGlyphSlotStore); LOAD_DB2(sGuildColorBackgroundStore); LOAD_DB2(sGuildColorBorderStore); LOAD_DB2(sGuildColorEmblemStore); @@ -547,10 +537,6 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) std::swap(*(float*)(&gameObjectDisplayInfo->GeoBoxMax.Z), *(float*)(&gameObjectDisplayInfo->GeoBoxMin.Z)); } - for (GlyphSlotEntry const* glyphSlot : sGlyphSlotStore) - if (glyphSlot->Type == GLYPH_SLOT_MAJOR || glyphSlot->Type == GLYPH_SLOT_MINOR) - _glyphSlots.insert(glyphSlot); - for (HeirloomEntry const* heirloom : sHeirloomStore) _heirlooms[heirloom->ItemID] = heirloom; @@ -1476,13 +1462,6 @@ bool DB2Manager::ChrClassesXPowerTypesEntryComparator::Compare(ChrClassesXPowerT return left->PowerType < right->PowerType; } -bool DB2Manager::GlyphSlotEntryComparator::Compare(GlyphSlotEntry const* left, GlyphSlotEntry const* right) -{ - if (left->Tooltip != right->Tooltip) - return left->Tooltip < right->Tooltip; - return left->Type > right->Type; -} - bool DB2Manager::MountTypeXCapabilityEntryComparator::Compare(MountTypeXCapabilityEntry const* left, MountTypeXCapabilityEntry const* right) { if (left->MountTypeID == right->MountTypeID) diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h index 6a325579aa2..a0c54d28ef4 100644 --- a/src/server/game/DataStores/DB2Stores.h +++ b/src/server/game/DataStores/DB2Stores.h @@ -78,7 +78,6 @@ TC_GAME_API extern DB2Storage<GarrSiteLevelEntry> sGarrSiteLev TC_GAME_API extern DB2Storage<GarrSiteLevelPlotInstEntry> sGarrSiteLevelPlotInstStore; TC_GAME_API extern DB2Storage<GemPropertiesEntry> sGemPropertiesStore; TC_GAME_API extern DB2Storage<GlyphPropertiesEntry> sGlyphPropertiesStore; -TC_GAME_API extern DB2Storage<GlyphSlotEntry> sGlyphSlotStore; TC_GAME_API extern DB2Storage<GuildColorBackgroundEntry> sGuildColorBackgroundStore; TC_GAME_API extern DB2Storage<GuildColorBorderEntry> sGuildColorBorderStore; TC_GAME_API extern DB2Storage<GuildColorEmblemEntry> sGuildColorEmblemStore; @@ -189,7 +188,7 @@ typedef std::map<uint32, TaxiPathSetForSource> TaxiPathSetBySource; typedef std::vector<TaxiPathNodeEntry const*> TaxiPathNodeList; typedef std::vector<TaxiPathNodeList> TaxiPathNodesByPath; -#define TaxiMaskSize 232 +#define TaxiMaskSize 234 typedef std::array<uint8, TaxiMaskSize> TaxiMask; TC_GAME_API extern TaxiMask sTaxiNodesMask; @@ -219,7 +218,6 @@ class TC_GAME_API DB2Manager { public: DEFINE_DB2_SET_COMPARATOR(ChrClassesXPowerTypesEntry); - DEFINE_DB2_SET_COMPARATOR(GlyphSlotEntry); DEFINE_DB2_SET_COMPARATOR(MountTypeXCapabilityEntry); typedef std::map<uint32 /*hash*/, DB2StorageBase*> StorageMap; @@ -229,7 +227,6 @@ public: typedef ChrSpecializationEntry const* ChrSpecializationByIndexContainer[MAX_CLASSES + 1][MAX_SPECIALIZATIONS]; typedef std::map<std::tuple<uint32, uint8, uint8, uint8>, EmotesTextSoundEntry const*> EmotesTextSoundContainer; typedef std::unordered_map<uint32, std::vector<uint32>> FactionTeamContainer; - typedef std::set<GlyphSlotEntry const*, GlyphSlotEntryComparator> GlyphSlotContainer; typedef std::map<uint32 /*curveID*/, std::map<uint32/*index*/, CurvePointEntry const*, std::greater<uint32>>> HeirloomCurvesContainer; typedef std::unordered_map<uint32, HeirloomEntry const*> HeirloomItemsContainer; typedef std::vector<ItemBonusEntry const*> ItemBonusList; @@ -278,7 +275,6 @@ public: static char const* GetCreatureFamilyPetName(uint32 petfamily, uint32 locale); EmotesTextSoundEntry const* GetTextSoundEmoteFor(uint32 emote, uint8 race, uint8 gender, uint8 class_) const; std::vector<uint32> const* GetFactionTeamList(uint32 faction) const; - GlyphSlotContainer const& GetGlyphSlots() const { return _glyphSlots; } uint32 GetHeirloomItemLevel(uint32 curveId, uint32 level) const; HeirloomEntry const* GetHeirloomByItemId(uint32 itemId) const; ItemBonusList const* GetItemBonusList(uint32 bonusListId) const; @@ -328,7 +324,6 @@ private: ChrSpecializationByIndexContainer _chrSpecializationsByIndex; EmotesTextSoundContainer _emoteTextSounds; FactionTeamContainer _factionTeams; - GlyphSlotContainer _glyphSlots; HeirloomItemsContainer _heirlooms; HeirloomCurvesContainer _heirloomCurvePoints; ItemBonusListContainer _itemBonusLists; diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h index 568729ec4cb..ae1ef3bf598 100644 --- a/src/server/game/DataStores/DB2Structure.h +++ b/src/server/game/DataStores/DB2Structure.h @@ -26,7 +26,6 @@ struct AchievementEntry { - uint32 ID; LocalizedString* Title; LocalizedString* Description; uint32 Flags; @@ -41,6 +40,7 @@ struct AchievementEntry int8 Faction; // -1 = all, 0 = horde, 1 = alliance uint8 Points; uint8 MinimumCriteria; // need this count of completed criterias (own or referenced achievement criterias) + uint32 ID; }; struct AnimKitEntry @@ -72,10 +72,9 @@ struct AreaTableEntry uint16 ZoneMusic; uint16 IntroSound; uint16 LiquidTypeID[4]; - uint16 UWIntroMusic; uint16 UWZoneMusic; uint16 UWAmbience; - uint16 PvPCombastWorldStateID; + uint16 PvPCombatWorldStateID; uint8 SoundProviderPref; uint8 SoundProviderPrefUnderwater; uint8 ExplorationLevel; @@ -84,6 +83,7 @@ struct AreaTableEntry uint8 WildBattlePetLevelMin; uint8 WildBattlePetLevelMax; uint8 WindSettingsID; + uint32 UWIntroSound; // helpers bool IsSanctuary() const @@ -96,7 +96,6 @@ struct AreaTableEntry struct AreaTriggerEntry { - uint32 ID; DBCPosition3D Pos; float Radius; float BoxLength; @@ -111,6 +110,7 @@ struct AreaTriggerEntry uint8 PhaseUseFlags; uint8 ShapeType; uint8 Flag; + uint32 ID; }; struct ArmorLocationEntry @@ -144,7 +144,6 @@ struct BannedAddOnsEntry struct BarberShopStyleEntry { - uint32 ID; LocalizedString* DisplayName; LocalizedString* Description; float CostModifier; @@ -152,6 +151,7 @@ struct BarberShopStyleEntry uint8 Race; uint8 Sex; uint8 Data; // real ID to hair/facial hair + uint32 ID; }; struct BattlePetBreedQualityEntry @@ -171,7 +171,6 @@ struct BattlePetBreedStateEntry struct BattlePetSpeciesEntry { - uint32 ID; uint32 CreatureID; uint32 IconFileID; uint32 SummonSpellID; @@ -179,7 +178,8 @@ struct BattlePetSpeciesEntry LocalizedString* Description; uint16 Flags; uint8 PetType; - int8 Source; + int8 Source; + uint32 ID; }; struct BattlePetSpeciesStateEntry @@ -219,10 +219,11 @@ struct BroadcastTextEntry LocalizedString* FemaleText; uint16 EmoteID[MAX_BROADCAST_TEXT_EMOTES]; uint16 EmoteDelay[MAX_BROADCAST_TEXT_EMOTES]; - uint16 SoundID; uint16 UnkEmoteID; uint8 Language; uint8 Type; + uint32 SoundID[2]; + uint32 PlayerConditionID; }; struct CharSectionsEntry @@ -272,8 +273,6 @@ struct ChatChannelsEntry struct ChrClassesEntry { - uint32 ID; - uint8 PowerType; char const* PetNameToken; LocalizedString* Name; LocalizedString* NameFemale; @@ -285,12 +284,14 @@ struct ChrClassesEntry uint16 Flags; uint16 CinematicSequenceID; uint16 DefaultSpec; + uint8 PowerType; uint8 SpellClassSet; uint8 AttackPowerPerStrength; uint8 AttackPowerPerAgility; uint8 RangedAttackPowerPerAgility; uint8 IconFileDataID; uint8 Unk1; + uint32 ID; }; struct ChrClassesXPowerTypesEntry @@ -325,8 +326,6 @@ struct ChrRacesEntry uint16 CinematicSequenceID; uint16 UAMaleCreatureSoundDataID; uint16 UAFemaleCreatureSoundDataID; - uint16 HighResMaleDisplayID; - uint16 HighResFemaleDisplayID; uint16 Unk; uint8 BaseLanguage; uint8 CreatureType; @@ -338,16 +337,15 @@ struct ChrRacesEntry uint8 NeutralRaceID; uint8 ItemAppearanceFrameRaceID; uint8 CharComponentTexLayoutHiResID; + uint32 HighResMaleDisplayID; + uint32 HighResFemaleDisplayID; }; #define MAX_MASTERY_SPELLS 2 struct ChrSpecializationEntry { - uint32 ID; uint32 MasterySpellID[MAX_MASTERY_SPELLS]; - uint32 Flags; - uint32 AnimReplacementSetID; LocalizedString* Name; LocalizedString* Name2; LocalizedString* Description; @@ -358,6 +356,9 @@ struct ChrSpecializationEntry uint8 PetTalentType; uint8 Role; uint8 PrimaryStatOrder; + uint32 ID; + uint32 Flags; + uint32 AnimReplacementSetID; }; struct CinematicSequencesEntry @@ -428,8 +429,6 @@ struct CreatureFamilyEntry struct CreatureModelDataEntry { uint32 ID; - uint32 Flags; - uint32 FileDataID; float ModelScale; float FootprintTextureLength; float FootprintTextureWidth; @@ -449,16 +448,18 @@ struct CreatureModelDataEntry float OverrideSelectionRadius; float TamedPetBaseScale; float HoverHeight; - uint16 SoundID; - uint16 CreatureGeosetDataID; - uint8 SizeClass; - uint8 BloodID; - uint8 FootprintTextureID; - uint8 FoleyMaterialID; - uint8 Unk700_1; - uint8 Unk700_2; - uint8 FootstepShakeSize; - uint8 DeathThudShakeSize; + uint32 Flags; + uint32 FileDataID; + uint32 SizeClass; + uint32 BloodID; + uint32 FootprintTextureID; + uint32 FoleyMaterialID; + uint32 FootstepEffectID; + uint32 DeathThudEffectID; + uint32 FootstepShakeSize; + uint32 DeathThudShakeSize; + uint32 SoundID; + uint32 CreatureGeosetDataID; }; struct CreatureTypeEntry @@ -605,13 +606,13 @@ struct CriteriaEntry struct CriteriaTreeEntry { uint32 ID; + uint32 CriteriaID; uint32 Amount; LocalizedString* Description; - uint16 CriteriaID; uint16 Parent; uint16 Flags; - uint16 OrderIndex; uint8 Operator; + uint32 OrderIndex; }; struct CurrencyTypesEntry @@ -624,9 +625,9 @@ struct CurrencyTypesEntry uint32 Flags; LocalizedString* Description; uint8 CategoryID; - uint8 SpellWeight; uint8 SpellCategory; uint8 Quality; + uint32 SpellWeight; }; struct CurvePointEntry @@ -689,11 +690,11 @@ struct DungeonEncounterEntry LocalizedString* Name; uint32 CreatureDisplayID; uint16 MapID; - uint16 OrderIndex; uint16 SpellIconID; uint8 DifficultyID; uint8 Bit; uint8 Flags; + uint32 OrderIndex; }; struct DurabilityCostsEntry @@ -715,12 +716,12 @@ struct EmotesEntry char const* EmoteSlashCommand; uint32 SpellVisualKitID; uint32 EmoteFlags; - int32 Unk703_1; - int32 Unk703_2; uint16 AnimID; - uint16 EmoteSpecProcParam; - uint16 EmoteSoundID; uint8 EmoteSpecProc; + uint32 EmoteSpecProcParam; + uint32 EmoteSoundID; + uint32 ClassMask; + uint32 RaceMask; }; struct EmotesTextEntry @@ -734,10 +735,10 @@ struct EmotesTextSoundEntry { uint32 ID; uint16 EmotesTextId; - uint16 SoundId; uint8 RaceId; uint8 SexId; uint8 ClassId; + uint32 SoundId; }; struct FactionEntry @@ -749,6 +750,7 @@ struct FactionEntry float ParentFactionModOut; // Faction outputs rep * ParentFactionModOut as spillover reputation LocalizedString* Name; LocalizedString* Description; + uint32 ReputationMax[4]; int16 ReputationIndex; uint16 ReputationClassMask[4]; uint16 ReputationFlags[4]; @@ -825,7 +827,6 @@ struct FactionTemplateEntry struct GameObjectsEntry { - uint32 ID; DBCPosition3D Position; float RotationX; float RotationY; @@ -840,6 +841,7 @@ struct GameObjectsEntry uint16 PhaseGroupID; uint8 PhaseUseFlags; uint8 Type; + uint32 ID; }; struct GameObjectDisplayInfoEntry @@ -855,7 +857,6 @@ struct GameObjectDisplayInfoEntry struct GarrAbilityEntry { - uint32 ID; LocalizedString* Name; LocalizedString* Description; uint32 IconFileDataID; @@ -863,6 +864,7 @@ struct GarrAbilityEntry uint16 OtherFactionGarrAbilityID; uint8 GarrAbilityCategoryID; uint8 FollowerTypeID; + uint32 ID; }; struct GarrBuildingEntry @@ -875,37 +877,36 @@ struct GarrBuildingEntry LocalizedString* Description; LocalizedString* Tooltip; uint32 IconFileDataID; - uint16 BuildDuration; uint16 CostCurrencyID; - int16 CostCurrencyAmount; + uint16 HordeTexPrefixKitID; + uint16 AllianceTexPrefixKitID; uint16 AllianceActivationScenePackageID; uint16 HordeActivationScenePackageID; + uint16 FollowerRequiredGarrAbilityID; + uint16 FollowerGarrAbilityEffectID; int16 CostMoney; uint8 Unknown; uint8 Type; uint8 Level; - uint8 HordeTexPrefixKitID; - uint8 AllianceTexPrefixKitID; - uint8 BonusAmount; uint8 Flags; uint8 MaxShipments; - uint8 FollowerRequiredGarrAbilityID; - uint8 FollowerGarrAbilityEffectID; uint8 GarrTypeID; + uint32 BuildDuration; + int32 CostCurrencyAmount; + uint32 BonusAmount; }; struct GarrBuildingPlotInstEntry { - uint32 ID; DBCPosition2D LandmarkOffset; uint16 UiTextureAtlasMemberID; uint16 GarrSiteLevelPlotInstID; uint8 GarrBuildingID; + uint32 ID; }; struct GarrClassSpecEntry { - uint32 ID; LocalizedString* NameMale; LocalizedString* NameFemale; LocalizedString* NameGenderless; @@ -913,37 +914,42 @@ struct GarrClassSpecEntry uint8 GarrFollItemSetID; uint8 Limit; uint8 Flags; + uint32 ID; }; struct GarrFollowerEntry { - uint32 ID; uint32 HordeCreatureID; uint32 AllianceCreatureID; LocalizedString* HordeSourceText; LocalizedString* AllianceSourceText; uint32 HordePortraitIconID; uint32 AlliancePortraitIconID; + uint32 HordeAddedBroadcastTextID; + uint32 AllianceAddedBroadcastTextID; + uint16 HordeGarrFollItemSetID; + uint16 AllianceGarrFollItemSetID; uint16 ItemLevelWeapon; uint16 ItemLevelArmor; + uint16 HordeListPortraitTextureKitID; + uint16 AllianceListPortraitTextureKitID; uint8 FollowerTypeID; uint8 HordeUiAnimRaceInfoID; uint8 AllianceUiAnimRaceInfoID; uint8 Quality; uint8 HordeGarrClassSpecID; uint8 AllianceGarrClassSpecID; - uint8 HordeGarrFollItemSetID; - uint8 AllianceGarrFollItemSetID; uint8 Level; uint8 Unknown1; uint8 Flags; int8 Unknown2; int8 Unknown3; - uint8 HordeListPortraitTextureKitID; - uint8 AllianceListPortraitTextureKitID; uint8 GarrTypeID; uint8 MaxDurability; uint8 Class; + uint8 HordeFlavorTextGarrStringID; + uint8 AllianceFlavorTextGarrStringID; + uint32 ID; }; struct GarrFollowerXAbilityEntry @@ -960,11 +966,11 @@ struct GarrPlotEntry LocalizedString* Name; uint32 AllianceConstructionGameObjectID; uint32 HordeConstructionGameObjectID; - uint16 MinCount; - uint16 MaxCount; uint8 GarrPlotUICategoryID; uint8 PlotType; uint8 Flags; + uint32 MinCount; + uint32 MaxCount; }; struct GarrPlotBuildingEntry @@ -986,10 +992,10 @@ struct GarrSiteLevelEntry uint32 ID; DBCPosition2D TownHall; uint16 MapID; + uint16 SiteID; uint16 UpgradeResourceCost; uint16 UpgradeMoneyCost; uint8 Level; - uint8 SiteID; uint8 UITextureKitID; uint8 MovieID; uint8 Level2; @@ -1021,13 +1027,6 @@ struct GlyphPropertiesEntry uint8 GlyphExclusiveCategoryID; }; -struct GlyphSlotEntry -{ - uint32 ID; - uint16 Tooltip; - uint8 Type; -}; - struct GuildColorBackgroundEntry { uint32 ID; @@ -1060,7 +1059,6 @@ struct GuildPerkSpellsEntry struct HeirloomEntry { - uint32 ID; uint32 ItemID; LocalizedString* SourceText; uint32 OldItem[2]; @@ -1069,6 +1067,7 @@ struct HeirloomEntry uint16 ItemBonusListID[2]; uint8 Flags; uint8 Source; + uint32 ID; }; #define MAX_HOLIDAY_DURATIONS 10 @@ -1267,7 +1266,6 @@ struct ItemExtendedCostEntry uint32 ID; uint32 RequiredItem[MAX_ITEM_EXT_COST_ITEMS]; // required item id uint32 RequiredCurrencyCount[MAX_ITEM_EXT_COST_CURRENCIES]; // required curency count - uint32 RequiredMoney; uint16 RequiredItemCount[MAX_ITEM_EXT_COST_ITEMS]; // required count of 1st item uint16 RequiredPersonalArenaRating; // required personal arena rating uint16 RequiredCurrency[MAX_ITEM_EXT_COST_CURRENCIES]; // required curency id @@ -1288,12 +1286,12 @@ struct ItemLimitCategoryEntry struct ItemModifiedAppearanceEntry { - uint32 ID; uint32 ItemID; uint16 AppearanceID; uint8 AppearanceModID; uint8 Index; uint8 SourceType; + uint32 ID; }; struct ItemPriceBaseEntry @@ -1329,9 +1327,9 @@ struct ItemSetEntry uint32 ID; LocalizedString* Name; uint32 ItemID[MAX_ITEM_SET_ITEMS]; - uint32 Unknown703; uint16 RequiredSkillRank; - uint8 RequiredSkill; + uint32 RequiredSkill; + uint32 Flags; }; struct ItemSetSpellEntry @@ -1450,7 +1448,6 @@ struct KeyChainEntry struct LfgDungeonsEntry { - uint32 ID; LocalizedString* Name; uint32 Flags; char const* TextureFilename; @@ -1480,6 +1477,7 @@ struct LfgDungeonsEntry uint8 MinCountDamage; uint8 SubType; uint8 MentorCharLevel; + uint32 ID; // Helpers uint32 Entry() const { return ID + (Type << 24); } @@ -1510,13 +1508,13 @@ struct LiquidTypeEntry float Float[18]; uint32 Int[4]; uint16 Flags; - uint16 SoundID; + uint16 LightID; uint8 Type; - uint8 LightID; uint8 ParticleMovement; uint8 ParticleTexSlots; uint8 MaterialID; uint8 DepthTexCount[6]; + uint32 SoundID; }; #define MAX_LOCK_CASE 8 @@ -1595,13 +1593,13 @@ struct MapDifficultyEntry { uint32 ID; LocalizedString* Message_lang; // m_message_lang (text showed when transfer to map failed) - uint32 Context; uint16 MapID; uint8 DifficultyID; uint8 RaidDurationType; // 1 means daily reset, 2 means weekly uint8 MaxPlayers; // m_maxPlayers some heroic versions have 0 when expected same amount as in normal version uint8 LockID; uint8 ItemBonusTreeModID; + uint32 Context; uint32 GetRaidDuration() const { @@ -1626,28 +1624,29 @@ struct ModifierTreeEntry struct MountEntry { - uint32 ID; uint32 SpellId; uint32 DisplayId; LocalizedString* Name; LocalizedString* Description; LocalizedString* SourceDescription; + float CameraPivotMultiplier; uint16 MountTypeId; uint16 Flags; uint16 PlayerConditionId; uint8 Source; + uint32 ID; }; struct MountCapabilityEntry { - uint32 ID; - uint32 RequiredAura; uint32 RequiredSpell; uint32 SpeedModSpell; uint16 RequiredRidingSkill; uint16 RequiredArea; int16 RequiredMap; uint8 Flags; + uint32 ID; + uint32 RequiredAura; }; struct MountTypeXCapabilityEntry @@ -1720,7 +1719,7 @@ struct PhaseXPhaseGroupEntry struct PlayerConditionEntry { - uint32 ID; + uint32 ID; // 1, 1, 1 uint32 RaceMask; uint32 SkillLogic; uint32 ReputationLogic; @@ -1728,26 +1727,19 @@ struct PlayerConditionEntry uint32 CurrQuestLogic; uint32 CurrentCompletedQuestLogic; uint32 SpellLogic; - uint32 SpellID[4]; uint32 ItemLogic; - uint32 ItemID[4]; uint32 Time[2]; uint32 AuraSpellLogic; uint32 AuraSpellID[4]; uint32 AchievementLogic; uint32 AreaLogic; uint32 QuestKillLogic; - uint32 QuestKillMonster[6]; LocalizedString* FailureDescription; - uint32 Unknown700_1; - uint32 Unknown700_2; uint16 MinLevel; uint16 MaxLevel; - uint16 ClassMask; uint16 SkillID[4]; int16 MinSkill[4]; int16 MaxSkill[4]; - uint16 MinFactionID[3]; uint16 MaxFactionID; uint16 PrevQuestID[4]; uint16 CurrQuestID[4]; @@ -1758,15 +1750,12 @@ struct PlayerConditionEntry uint16 AreaID[4]; uint16 QuestKillID; uint16 PhaseID; - uint16 MinAvgItemLevel; - uint16 MaxAvgItemLevel; uint16 MinAvgEquippedItemLevel; uint16 MaxAvgEquippedItemLevel; uint16 ModifierTreeID; uint8 Flags; int8 Gender; int8 NativeGender; - uint8 LanguageID; uint8 MinLanguage; uint8 MaxLanguage; uint8 MinReputation[3]; @@ -1775,18 +1764,13 @@ struct PlayerConditionEntry uint8 MinPVPRank; uint8 MaxPVPRank; uint8 PvpMedal; - uint8 ItemCount[4]; uint8 ItemFlags; uint8 AuraCount[4]; uint8 WeatherID; uint8 PartyStatus; uint8 LifetimeMaxPVPRank; - uint8 LfgLogic; uint8 LfgStatus[4]; uint8 LfgCompare[4]; - uint8 LfgValue[4]; - uint8 CurrencyLogic; - uint8 CurrencyID[4]; uint8 CurrencyCount[4]; int8 MinExpansionLevel; int8 MaxExpansionLevel; @@ -1795,12 +1779,26 @@ struct PlayerConditionEntry uint8 MinGuildLevel; uint8 MaxGuildLevel; uint8 PhaseUseFlags; - uint8 PhaseGroupID; int8 ChrSpecializationIndex; int8 ChrSpecializationRole; int8 PowerType; int8 PowerTypeComp; int8 PowerTypeValue; + uint32 ClassMask; + uint32 LanguageID; + uint32 MinFactionID[3]; + uint32 SpellID[4]; + uint32 ItemID[4]; + uint32 ItemCount[4]; + uint32 LfgLogic; + uint32 LfgValue[4]; + uint32 CurrencyLogic; + uint32 CurrencyID[4]; + uint32 QuestKillMonster[6]; + uint32 PhaseGroupID; + uint32 MinAvgItemLevel; + uint32 MaxAvgItemLevel; + uint32 Unknown700[2]; }; struct PowerDisplayEntry @@ -1877,8 +1875,8 @@ struct ScalingStatDistributionEntry { uint32 ID; uint16 ItemLevelCurveID; - uint8 MinLevel; - uint8 MaxLevel; + uint32 MinLevel; + uint32 MaxLevel; }; struct SkillLineEntry @@ -1891,7 +1889,7 @@ struct SkillLineEntry uint16 Flags; uint8 CategoryID; uint8 CanLink; - uint8 ParentSkillLineID; + uint32 ParentSkillLineID; }; struct SkillLineAbilityEntry @@ -1899,8 +1897,8 @@ struct SkillLineAbilityEntry uint32 ID; uint32 SpellID; uint32 RaceMask; - uint32 ClassMask; uint32 SupercedesSpell; + uint32 Unknown703; uint16 SkillLine; uint16 MinSkillLineRank; uint16 TrivialSkillLineRankHigh; @@ -1909,23 +1907,23 @@ struct SkillLineAbilityEntry uint16 TradeSkillCategoryID; uint8 AquireMethod; uint8 NumSkillUps; + uint32 ClassMask; }; struct SkillRaceClassInfoEntry { uint32 ID; int32 RaceMask; - int32 ClassMask; uint16 SkillID; uint16 Flags; uint16 SkillTierID; uint8 Availability; uint8 MinLevel; + int32 ClassMask; }; struct SoundKitEntry { - uint32 ID; LocalizedString* Name; float VolumeFloat; float MinDistance; @@ -1942,27 +1940,28 @@ struct SoundKitEntry uint8 EAXDef; uint8 DialogType; uint8 Unk700; + uint32 ID; }; struct SpecializationSpellsEntry { - uint32 ID; uint32 SpellID; uint32 OverridesSpellID; LocalizedString* Description; uint16 SpecID; uint8 OrderIndex; + uint32 ID; }; struct SpellEntry { - uint32 ID; LocalizedString* Name; LocalizedString* NameSubtext; LocalizedString* Description; LocalizedString* AuraDescription; uint32 MiscID; - uint16 DescriptionVariablesID; + uint32 ID; + uint32 DescriptionVariablesID; }; struct SpellAuraOptionsEntry @@ -2032,10 +2031,10 @@ struct SpellCategoryEntry uint32 ID; LocalizedString* Name; int32 ChargeRecoveryTime; - uint32 Unk703; uint8 Flags; uint8 UsesPerWeek; uint8 MaxCharges; + uint32 Unk703; }; struct SpellClassOptionsEntry @@ -2043,8 +2042,8 @@ struct SpellClassOptionsEntry uint32 ID; uint32 SpellID; flag128 SpellClassMask; - uint16 ModalNextSpell; - uint8 SpellClassSet; + uint8 SpellClassSet; + uint32 ModalNextSpell; }; struct SpellCooldownsEntry @@ -2067,33 +2066,33 @@ struct SpellDurationEntry struct SpellEffectEntry { - uint32 ID; float EffectAmplitude; - uint32 EffectAuraPeriod; - uint32 EffectBasePoints; float EffectBonusCoefficient; float EffectChainAmplitude; + float EffectPointsPerResource; + float EffectRealPointsPerLevel; + flag128 EffectSpellClassMask; + float EffectPosFacing; + float BonusCoefficientFromAP; + uint32 ID; + uint32 DifficultyID; + uint32 Effect; + uint32 EffectAura; + uint32 EffectAuraPeriod; + uint32 EffectBasePoints; + uint32 EffectChainTargets; uint32 EffectDieSides; uint32 EffectItemType; + uint32 EffectMechanic; int32 EffectMiscValue; int32 EffectMiscValueB; - float EffectPointsPerResource; - float EffectRealPointsPerLevel; - flag128 EffectSpellClassMask; + uint32 EffectRadiusIndex; + uint32 EffectRadiusMaxIndex; uint32 EffectTriggerSpell; - float EffectPosFacing; + uint32 ImplicitTarget[2]; uint32 SpellID; + uint32 EffectIndex; uint32 EffectAttributes; - float BonusCoefficientFromAP; - uint16 EffectAura; - uint16 EffectChainTargets; - uint8 DifficultyID; - uint8 Effect; - uint8 EffectMechanic; - uint8 EffectRadiusIndex; - uint8 EffectRadiusMaxIndex; - uint8 ImplicitTarget[2]; - uint8 EffectIndex; }; #define MAX_SPELL_EFFECTS 32 @@ -2141,7 +2140,6 @@ struct SpellItemEnchantmentEntry uint32 EffectSpellID[MAX_ITEM_ENCHANTMENT_EFFECTS]; LocalizedString* Name; float EffectScalingPoints[MAX_ITEM_ENCHANTMENT_EFFECTS]; - uint32 PlayerConditionID; uint32 TransmogCost; uint32 TextureFileDataID; uint16 EffectPointsMin[MAX_ITEM_ENCHANTMENT_EFFECTS]; @@ -2157,17 +2155,18 @@ struct SpellItemEnchantmentEntry uint8 MaxLevel; int8 ScalingClass; int8 ScalingClassRestricted; + uint32 PlayerConditionID; }; struct SpellItemEnchantmentConditionEntry { uint32 ID; uint8 LTOperandType[5]; - uint8 LTOperand[5]; uint8 Operator[5]; uint8 RTOperandType[5]; uint8 RTOperand[5]; uint8 Logic[5]; + uint32 LTOperand[5]; }; struct SpellLearnSpellEntry @@ -2218,28 +2217,28 @@ struct SpellMiscEntry struct SpellPowerEntry { - uint32 ID; uint32 SpellID; uint32 ManaCost; float ManaCostPercentage; float ManaCostPercentagePerSecond; uint32 RequiredAura; float HealthCostPercentage; - uint16 ManaCostPerSecond; - uint16 ManaCostAdditional; // 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 - uint16 PowerDisplayID; - uint16 UnitPowerBarID; uint8 PowerIndex; uint8 PowerType; - uint8 ManaCostPerLevel; + uint32 ID; + uint32 ManaCostPerLevel; + uint32 ManaCostPerSecond; + uint32 ManaCostAdditional; // 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; + uint32 UnitPowerBarID; }; struct SpellPowerDifficultyEntry { - uint32 SpellPowerID; uint8 DifficultyID; uint8 PowerIndex; + uint32 ID; }; struct SpellProcsPerMinuteEntry @@ -2294,9 +2293,9 @@ struct SpellScalingEntry uint32 ID; uint32 SpellID; uint16 ScalesFromItemLevel; - int8 ScalingClass; uint8 MinScalingLevel; uint8 MaxScalingLevel; + int32 ScalingClass; }; struct SpellShapeshiftEntry @@ -2320,8 +2319,8 @@ struct SpellShapeshiftFormEntry uint16 CombatRoundTime; uint16 CreatureDisplayID[4]; uint16 PresetSpellID[MAX_SHAPESHIFT_SPELLS]; + uint16 MountTypeID; int8 CreatureType; - uint8 MountTypeID; uint8 BonusActionBar; }; @@ -2332,10 +2331,10 @@ struct SpellTargetRestrictionsEntry float ConeAngle; float Width; uint32 Targets; - uint16 MaxTargetLevel; uint16 TargetCreatureType; uint8 DifficultyID; uint8 MaxAffectedTargets; + uint32 MaxTargetLevel; }; #define MAX_SPELL_TOTEMS 2 @@ -2345,18 +2344,18 @@ struct SpellTotemsEntry uint32 ID; uint32 SpellID; uint32 Totem[MAX_SPELL_TOTEMS]; - uint8 RequiredTotemCategoryID[MAX_SPELL_TOTEMS]; + uint16 RequiredTotemCategoryID[MAX_SPELL_TOTEMS]; }; struct SpellXSpellVisualEntry { - uint32 ID; uint32 SpellID; float Unk620; uint16 SpellVisualID[2]; uint16 PlayerConditionID; uint8 DifficultyID; uint8 Flags; + uint32 ID; }; struct SummonPropertiesEntry @@ -2388,7 +2387,6 @@ struct TalentEntry struct TaxiNodesEntry { - uint32 ID; DBCPosition3D Pos; LocalizedString* Name; uint32 MountCreatureID[2]; @@ -2397,19 +2395,19 @@ struct TaxiNodesEntry uint16 ConditionID; uint16 LearnableIndex; uint8 Flags; + uint32 ID; }; struct TaxiPathEntry { - uint32 ID; uint16 From; uint16 To; - uint16 Cost; + uint32 ID; + uint32 Cost; }; struct TaxiPathNodeEntry { - uint32 ID; DBCPosition3D Loc; uint32 Delay; uint16 PathID; @@ -2418,6 +2416,7 @@ struct TaxiPathNodeEntry uint16 DepartureEventID; uint8 NodeIndex; uint8 Flags; + uint32 ID; }; struct TotemCategoryEntry @@ -2430,11 +2429,11 @@ struct TotemCategoryEntry struct ToyEntry { - uint32 ID; uint32 ItemID; LocalizedString* Description; uint8 Flags; uint8 CategoryFilter; + uint32 ID; }; struct TransportAnimationEntry @@ -2460,7 +2459,6 @@ struct TransportRotationEntry struct UnitPowerBarEntry { uint32 ID; - uint32 MaxPower; float RegenerationPeace; float RegenerationCombat; uint32 FileDataID[6]; @@ -2473,9 +2471,10 @@ struct UnitPowerBarEntry float EndInset; uint16 StartPower; uint16 Flags; - uint8 MinPower; uint8 CenterPower; uint8 BarType; + uint32 MinPower; + uint32 MaxPower; }; #define MAX_VEHICLE_SEATS 8 @@ -2538,8 +2537,6 @@ struct VehicleSeatEntry float PassengerRoll; float VehicleEnterAnimDelay; float VehicleExitAnimDelay; - uint32 EnterUISoundID; - uint32 ExitUISoundID; float CameraEnteringDelay; float CameraEnteringDuration; float CameraExitingDelay; @@ -2576,6 +2573,8 @@ struct VehicleSeatEntry int8 VehicleExitAnimBone; int8 VehicleRideAnimLoopBone; uint8 VehicleAbilityDisplay; + uint32 EnterUISoundID; + uint32 ExitUISoundID; bool CanEnterOrExit() const { @@ -2595,7 +2594,6 @@ struct VehicleSeatEntry struct WMOAreaTableEntry { - uint32 ID; int32 WMOGroupID; // used in group WMO LocalizedString* AreaName; int16 WMOID; // used in root WMO @@ -2609,12 +2607,12 @@ struct WMOAreaTableEntry uint8 SoundProviderPref; uint8 SoundProviderPrefUnderwater; uint8 Flags; - uint8 UWZoneMusic; + uint32 ID; + uint32 UWZoneMusic; }; struct WorldMapAreaEntry { - uint32 ID; char const* AreaName; float LocLeft; float LocRight; @@ -2626,11 +2624,12 @@ struct WorldMapAreaEntry int16 DefaultDungeonFloor; uint16 ParentWorldMapID; uint16 Flags; - uint16 PlayerConditionID; uint8 LevelRangeMin; uint8 LevelRangeMax; uint8 BountySetID; uint8 BountyBoardLocation; + uint32 ID; + uint32 PlayerConditionID; }; #define MAX_WORLD_MAP_OVERLAY_AREA_IDX 4 @@ -2639,18 +2638,18 @@ struct WorldMapOverlayEntry { uint32 ID; char const* TextureName; - uint16 MapAreaID; // idx in WorldMapArea.dbc - uint16 AreaID[MAX_WORLD_MAP_OVERLAY_AREA_IDX]; uint16 TextureWidth; uint16 TextureHeight; - uint16 OffsetX; - uint16 OffsetY; - uint16 HitRectTop; - uint16 HitRectLeft; - uint16 HitRectBottom; - uint16 HitRectRight; - uint16 PlayerConditionID; - uint8 Flags; + uint32 MapAreaID; // idx in WorldMapArea.dbc + uint32 AreaID[MAX_WORLD_MAP_OVERLAY_AREA_IDX]; + uint32 OffsetX; + uint32 OffsetY; + uint32 HitRectTop; + uint32 HitRectLeft; + uint32 HitRectBottom; + uint32 HitRectRight; + uint32 PlayerConditionID; + uint32 Flags; }; struct WorldMapTransformsEntry diff --git a/src/server/game/DataStores/DB2fmt.h b/src/server/game/DataStores/DB2fmt.h deleted file mode 100644 index 57963f3aec6..00000000000 --- a/src/server/game/DataStores/DB2fmt.h +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/> - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef TRINITY_DB2SFRM_H -#define TRINITY_DB2SFRM_H - -char const AchievementFormat[] = "nssishhhhhhhbbb"; -char const AnimKitFormat[] = "dihh"; -char const AreaGroupMemberFormat[] = "dhh"; -char const AreaTableFormat[] = "diiSfshhhhhhhhhhhhhhbbbbbbbb"; -char const AreaTriggerFormat[] = "nffffffffhhhhhbbb"; -char const ArmorLocationFormat[] = "dfffff"; -char const AuctionHouseFormat[] = "dshbb"; -char const BankBagSlotPricesFormat[] = "di"; -char const BannedAddOnsFormat[] = "dSSb"; -char const BarberShopStyleFormat[] = "nssfbbbb"; -char const BattlePetBreedQualityFormat[] = "dfb"; -char const BattlePetBreedStateFormat[] = "nhbb"; -char const BattlePetSpeciesFormat[] = "niiisshbb"; -char const BattlePetSpeciesStateFormat[] = "nihb"; -char const BattlemasterListFormat[] = "nsishhhhhhhhhhhhhhhhhhbbbbbbbbb"; -char const BroadcastTextFormat[] = "dsshhhhhhhhbb"; -char const CharStartOutfitFormat[] = "diiiiiiiiiiiiiiiiiiiiiiiiibbbbb"; -char const CharSectionsFormat[] = "niiihbbbbb"; -char const CharTitlesFormat[] = "dsshhb"; -char const ChatChannelsFormat[] = "dissb"; -char const ChrClassesFormat[] = "nSsssSiiihhhbbbbbbb"; -char const ChrClassesXPowerTypesFormat[] = "dbb"; -char const ChrRacesFormat[] = "niSSsssSSSiiffffffihhhhhhhhhhhhbbbbbbbbbb"; -char const ChrSpecializationFormat[] = "niiiisssShbbbbb"; -char const CinematicSequencesFormat[] = "dhhhhhhhhh"; -char const CreatureDisplayInfoFormat[] = "diffiiiSiiifhhhhhhbbbbbb"; -char const CreatureDisplayInfoExtraFormat[] = "diibbbbbbbbbbbb"; -char const CreatureFamilyFormat[] = "dffsshhhbbbb"; -char const CreatureModelDataFormat[] = "diifffffffffffffffffffffffhhbbbbbbbb"; -char const CreatureTypeFormat[] = "dsb"; -char const CriteriaFormat[] = "diiihhhbbbbb"; -char const CriteriaTreeFormat[] = "dishhhhb"; -char const CurrencyTypesFormat[] = "nSSsiiisbbbb"; -char const CurvePointFormat[] = "dffhb"; -char const DestructibleModelDataFormat[] = "dhhhhhbbbbbbbbbbbbbbbbb"; -char const DifficultyFormat[] = "nsbbbbbbbbbbbb"; -char const DungeonEncounterFormat[] = "dsihhhbbb"; -char const DurabilityCostsFormat[] = "dhhhhhhhhhhhhhhhhhhhhhhhhhhhhh"; -char const DurabilityQualityFormat[] = "df"; -char const EmotesFormat[] = "dSiiiihhhb"; -char const EmotesTextFormat[] = "dsh"; -char const EmotesTextSoundFormat[] = "dhhbbb"; -char const FactionFormat[] = "diiiiiiiiffsshhhhhhhhhhbbbbb"; -char const FactionTemplateFormat[] = "dhhhhhhhhhhbbb"; -char const GameObjectsFormat[] = "nffffffffiiiiiiiishhhhbb"; -char const GameObjectDisplayInfoFormat[] = "diffffffffh"; -char const GarrAbilityFormat[] = "nssihhbb"; -char const GarrBuildingFormat[] = "diissssihhhhhhbbbbbbbbbbb"; -char const GarrBuildingPlotInstFormat[] = "nffhhb"; -char const GarrClassSpecFormat[] = "nssshbbb"; -char const GarrFollowerFormat[] = "niissiihhbbbbbbbbbbbbbbbbbb"; -char const GarrFollowerXAbilityFormat[] = "dhhb"; -char const GarrPlotFormat[] = "dsiihhbbb"; -char const GarrPlotBuildingFormat[] = "dbb"; -char const GarrPlotInstanceFormat[] = "dsb"; -char const GarrSiteLevelFormat[] = "dffhhhbbbbb"; -char const GarrSiteLevelPlotInstFormat[] = "dffhbb"; -char const GemPropertiesFormat[] = "dihh"; -char const GlyphPropertiesFormat[] = "dihbb"; -char const GlyphSlotFormat[] = "dhb"; -char const GuildColorBackgroundFormat[] = "dbbb"; -char const GuildColorBorderFormat[] = "dbbb"; -char const GuildColorEmblemFormat[] = "dbbb"; -char const GuildPerkSpellsFormat[] = "di"; -char const HeirloomFormat[] = "nisiiiiihhbb"; -char const HolidaysEntryFormat[] = "diiiiiiiiiiiiiiiiShhhhhhhhhhhbbbbbbbbbbbbbbbb"; -char const ImportPriceArmorFormat[] = "dffff"; -char const ImportPriceQualityFormat[] = "df"; -char const ImportPriceShieldFormat[] = "df"; -char const ImportPriceWeaponFormat[] = "df"; -char const ItemFormat[] = "dibbbbbbb"; -char const ItemAppearanceFormat[] = "diiib"; -char const ItemArmorQualityFormat[] = "dfffffffh"; -char const ItemArmorShieldFormat[] = "dfffffffh"; -char const ItemArmorTotalFormat[] = "dffffh"; -char const ItemBagFamilyFormat[] = "ds"; -char const ItemBonusFormat[] = "niihbb"; -char const ItemBonusTreeNodeFormat[] = "dhhhb"; -char const ItemClassFormat[] = "dfsb"; -char const ItemCurrencyCostFormat[] = "di"; -char const ItemDamageAmmoFormat[] = "dfffffffh"; -char const ItemDamageOneHandFormat[] = "dfffffffh"; -char const ItemDamageOneHandCasterFormat[] = "dfffffffh"; -char const ItemDamageTwoHandFormat[] = "dfffffffh"; -char const ItemDamageTwoHandCasterFormat[] = "dfffffffh"; -char const ItemDisenchantLootFormat[] = "dhhhbbb"; -char const ItemEffectFormat[] = "diiiihhhbb"; -char const ItemExtendedCostFormat[] = "diiiiiiiiiiihhhhhhhhhhhbbbbb"; -char const ItemLimitCategoryFormat[] = "dsbb"; -char const ItemModifiedAppearanceFormat[] = "nihbbb"; -char const ItemPriceBaseFormat[] = "dffh"; -char const ItemRandomPropertiesFormat[] = "dshhhhh"; -char const ItemRandomSuffixFormat[] = "dsshhhhhhhhhh"; -char const ItemSetFormat[] = "dsiiiiiiiiiiiiiiiiiihb"; -char const ItemSetSpellFormat[] = "dihhb"; -char const ItemSparseFormat[] = "diiiffiiiiiiiiiiiiiiiiifffffffffffsssssififhhhhhhhhhhhhhhhhhhhhhhhhhhhhhbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"; -char const ItemSpecFormat[] = "dhbbbbb"; -char const ItemSpecOverrideFormat[] = "dih"; -char const ItemXBonusTreeFormat[] = "dih"; -char const KeyChainFormat[] = "dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"; -char const LfgDungeonsFormat[] = "nsiSshhhhhhhhbbbbbbbbbbbbbbbbb"; -char const LightFormat[] = "dfffffhhhhhhhhh"; -char const LiquidTypeFormat[] = "dsifffffssssssiiffffffffffffffffffiiiihhbbbbbbbbbbb"; -char const LockFormat[] = "diiiiiiiihhhhhhhhbbbbbbbbbbbbbbbb"; -char const MailTemplateFormat[] = "ds"; -char const MapFormat[] = "dsiifffssshhhhhhbbbbb"; -char const MapDifficultyFormat[] = "dsihbbbbb"; -char const ModifierTreeFormat[] = "diihbbbb"; -char const MountFormat[] = "niissshhhb"; -char const MountCapabilityFormat[] = "niiihhhb"; -char const MountTypeXCapabilityFormat[] = "dhhb"; -char const MovieFormat[] = "diibb"; -char const NameGenFormat[] = "dsbb"; -char const NamesProfanityFormat[] = "dSb"; -char const NamesReservedFormat[] = "dS"; -char const NamesReservedLocaleFormat[] = "dSb"; -char const OverrideSpellDataFormat[] = "diiiiiiiiiiib"; -char const PhaseFormat[] = "dh"; -char const PhaseXPhaseGroupFormat[] = "dhh"; -char const PlayerConditionFormat[] = "diiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiisiihhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"; -char const PowerDisplayFormat[] = "dSbbbb"; -char const PvpDifficultyFormat[] = "dhbbb"; -char const QuestFactionRewardFormat[] = "dhhhhhhhhhh"; -char const QuestMoneyRewardFormat[] = "diiiiiiiiii"; -char const QuestPackageItemFormat[] = "dihbb"; -char const QuestSortFormat[] = "dsb"; -char const QuestV2Format[] = "dh"; -char const QuestXPFormat[] = "dhhhhhhhhhh"; -char const RandPropPointsFormat[] = "diiiiiiiiiiiiiii"; -char const ScalingStatDistributionFormat[] = "dhbb"; -char const SkillLineFormat[] = "dssshhbbb"; -char const SkillLineAbilityFormat[] = "diiiihhhhhhbb"; -char const SkillRaceClassInfoFormat[] = "diihhhbb"; -char const SoundKitFormat[] = "nsffffffffhhhbbbb"; -char const SpecializationSpellsFormat[] = "niishb"; -char const SpellFormat[] = "nssssih"; -char const SpellAuraOptionsFormat[] = "diiiihbbb"; -char const SpellAuraRestrictionsFormat[] = "diiiiibbbbb"; -char const SpellCastTimesFormat[] = "diih"; -char const SpellCastingRequirementsFormat[] = "dihhhbbb"; -char const SpellCategoriesFormat[] = "dihhhbbbbb"; -char const SpellCategoryFormat[] = "dsiibbb"; -char const SpellClassOptionsFormat[] = "diiiiihb"; -char const SpellCooldownsFormat[] = "diiiib"; -char const SpellDurationFormat[] = "diih"; -char const SpellEffectFormat[] = "nfiiffiiiiffiiiiifiifhhbbbbbbbb"; -char const SpellEffectScalingFormat[] = "dfffi"; -char const SpellEquippedItemsFormat[] = "diiib"; -char const SpellFocusObjectFormat[] = "ds"; -char const SpellInterruptsFormat[] = "diiiiihb"; -char const SpellItemEnchantmentFormat[] = "diiisfffiiihhhhhhhhbbbbbbbbb"; -char const SpellItemEnchantmentConditionFormat[] = "dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"; -char const SpellLearnSpellFormat[] = "diii"; -char const SpellLevelsFormat[] = "dihhhbb"; -char const SpellMiscFormat[] = "diiiiiiiiiiiiiiffhhhhhb"; -char const SpellPowerFormat[] = "niiffifhhhhbbb"; -char const SpellPowerDifficultyFormat[] = "nbb"; -char const SpellProcsPerMinuteFormat[] = "dfb"; -char const SpellProcsPerMinuteModFormat[] = "dfhbb"; -char const SpellRadiusFormat[] = "dffff"; -char const SpellRangeFormat[] = "dffffssb"; -char const SpellReagentsFormat[] = "diiiiiiiiihhhhhhhh"; -char const SpellScalingFormat[] = "dihbbb"; -char const SpellShapeshiftFormat[] = "diiiiib"; -char const SpellShapeshiftFormFormat[] = "dsfihhhhhhhhhhhhhhbbb"; -char const SpellTargetRestrictionsFormat[] = "diffihhbb"; -char const SpellTotemsFormat[] = "diiibb"; -char const SpellXSpellVisualFormat[] = "nifhhhbb"; -char const SummonPropertiesFormat[] = "diiiii"; -char const TalentFormat[] = "diishbbbbbb"; -char const TaxiNodesFormat[] = "nfffsiiffhhhb"; -char const TaxiPathFormat[] = "nhhh"; -char const TaxiPathNodeFormat[] = "nfffihhhhbb"; -char const TotemCategoryFormat[] = "dsib"; -char const ToyFormat[] = "nisbb"; -char const TransportAnimationFormat[] = "diifffb"; -char const TransportRotationFormat[] = "diiffff"; -char const UnitPowerBarFormat[] = "diffiiiiiiiiiiiissssffhhbbb"; -char const VehicleFormat[] = "difffffffffffffffffffSSSSffhhhhhhhhhhhhbb"; -char const VehicleSeatFormat[] = "diiiffffffffffffffffffffffiiffffffffffffihhhhhhhhhhhhhhhhhhhbbbbbb"; -char const WMOAreaTableFormat[] = "nishhhhhhhbbbbb"; -char const WorldMapAreaFormat[] = "nSffffhhhhhhhbbbb"; -char const WorldMapOverlayFormat[] = "dShhhhhhhhhhhhhhb"; -char const WorldMapTransformsFormat[] = "dfffffffffhhhhb"; -char const WorldSafeLocsFormat[] = "dffffsh"; - -#endif diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index f71e105a62b..b00cbf7e9fb 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -585,6 +585,11 @@ enum ItemLimitCategoryMode ITEM_LIMIT_CATEGORY_MODE_EQUIP = 1 // limit applied to amount equipped items (including used gems) }; +enum ItemSetFlags +{ + ITEM_SET_FLAG_LEGACY_INACTIVE = 0x01, +}; + enum ItemSpecStat { ITEM_SPEC_STAT_INTELLECT = 0, diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index 84138cf0b45..a049256f0a7 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -49,6 +49,9 @@ void AddItemsSetItem(Player* player, Item* item) if (set->RequiredSkill && player->GetSkillValue(set->RequiredSkill) < set->RequiredSkillRank) return; + if (set->Flags & ITEM_SET_FLAG_LEGACY_INACTIVE) + return; + ItemSetEffect* eff = NULL; for (size_t x = 0; x < player->ItemSetEff.size(); ++x) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index fefceea25e1..9626b828cf9 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -561,7 +561,6 @@ bool Player::Create(ObjectGuid::LowType guidlow, WorldPackets::Character::Charac // base stats and related field values InitStatsForLevel(); InitTaxiNodesForLevel(); - InitGlyphsForLevel(); InitTalentForLevel(); InitPrimaryProfessions(); // to max set before any spell added @@ -2448,7 +2447,6 @@ void Player::GiveLevel(uint8 level) InitTalentForLevel(); InitTaxiNodesForLevel(); - InitGlyphsForLevel(); UpdateAllStats(); @@ -4021,10 +4019,6 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe stmt->setUInt64(0, guid); trans->Append(stmt); - stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_GLYPHS); - stmt->setUInt64(0, guid); - trans->Append(stmt); - stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_QUESTSTATUS_DAILY); stmt->setUInt64(0, guid); trans->Append(stmt); @@ -16800,7 +16794,6 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) // reset stats before loading any modifiers InitStatsForLevel(); - InitGlyphsForLevel(); InitTaxiNodesForLevel(); InitRunes(); @@ -16869,9 +16862,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) LearnSpecializationSpells(); - _LoadGlyphs(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_GLYPHS)); _LoadAuras(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_AURAS), holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_AURA_EFFECTS), time_diff); - _LoadGlyphAuras(); // add ghost flag (must be after aura load: PLAYER_FLAGS_GHOST set in aura) if (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST)) m_deathState = DEAD; @@ -17241,36 +17232,6 @@ void Player::_LoadAuras(PreparedQueryResult auraResult, PreparedQueryResult effe } } -void Player::_LoadGlyphAuras() -{ - for (uint8 i = 0; i < MAX_GLYPH_SLOT_INDEX; ++i) - { - if (uint32 glyph = GetGlyph(GetActiveTalentGroup(), i)) - { - if (GlyphPropertiesEntry const* gp = sGlyphPropertiesStore.LookupEntry(glyph)) - { - if (GlyphSlotEntry const* gs = sGlyphSlotStore.LookupEntry(GetGlyphSlot(i))) - { - if (gp->Type == gs->Type) - { - CastSpell(this, gp->SpellID, true); - continue; - } - else - TC_LOG_ERROR("entities.player", "Player::_LoadGlyphAuras: Player '%s' (%s) has glyph with typeflags %u in slot with typeflags %u, removing.", GetName().c_str(), GetGUID().ToString().c_str(), gp->Type, gs->Type); - } - else - TC_LOG_ERROR("entities.player", "Player::_LoadGlyphAuras: Player '%s' (%s) has not existing glyph slot entry %u on index %u", GetName().c_str(), GetGUID().ToString().c_str(), GetGlyphSlot(i), i); - } - else - TC_LOG_ERROR("entities.player", "Player::_LoadGlyphAuras: Player '%s' (%s) has not existing glyph entry %u on index %u", GetName().c_str(), GetGUID().ToString().c_str(), glyph, i); - - // On any error remove glyph - SetGlyph(i, 0); - } - } -} - void Player::LoadCorpse(PreparedQueryResult result) { if (IsAlive() || HasAtLoginFlag(AT_LOGIN_RESURRECT)) @@ -18874,7 +18835,6 @@ void Player::SaveToDB(bool create /*=false*/) m_reputationMgr->SaveToDB(trans); _SaveEquipmentSets(trans); GetSession()->SaveTutorialsData(trans); // changed only while character in game - _SaveGlyphs(trans); _SaveInstanceTimeRestrictions(trans); _SaveCurrency(trans); _SaveCUFProfiles(trans); @@ -24014,25 +23974,6 @@ uint32 Player::GetBarberShopCost(BarberShopStyleEntry const* newHairStyle, uint8 return cost; } -void Player::InitGlyphsForLevel() -{ - //uint32 slotMask = 0; - //uint8 slot = 0; - //uint8 level = getLevel(); - //for (GlyphSlotEntry const* gs : sDB2Manager.GetGlyphSlots()) - //{ - // if (level >= ((gs->Tooltip + 1) * 25)) - // slotMask |= 1 << slot; - - // SetGlyphSlot(slot++, gs->ID); - //} -} - -void Player::SetGlyph(uint8 slot, uint32 glyph) -{ - _talentMgr->GroupInfo[GetActiveTalentGroup()].Glyphs[slot] = glyph; -} - bool Player::isTotalImmune() const { AuraEffectList const& immune = GetAuraEffectsByType(SPELL_AURA_SCHOOL_IMMUNITY); @@ -24840,9 +24781,6 @@ void Player::SendTalentsInfoData() groupInfoPkt.TalentIDs.push_back(uint16(itr->first)); } - for (uint32 x = 0; x < MAX_GLYPH_SLOT_INDEX; ++x) - groupInfoPkt.GlyphIDs[x] = uint16(GetGlyph(i, x)); - packet.Info.TalentGroups.push_back(groupInfoPkt); } @@ -25021,48 +24959,6 @@ void Player::SetMap(Map* map) m_mapRef.link(map, this); } -void Player::_LoadGlyphs(PreparedQueryResult result) -{ - // SELECT group, glyph1, glyph2, glyph3, glyph4, glyph5, glyph6, glyph7, glyph8, glyph9 FROM character_glyphs WHERE guid = '%u' - if (!result) - return; - - do - { - Field* fields = result->Fetch(); - - uint8 group = fields[0].GetUInt8(); - if (group >= GetTalentGroupsCount()) - continue; - - for (uint8 i = 0; i < MAX_GLYPH_SLOT_INDEX; ++i) - _talentMgr->GroupInfo[group].Glyphs[i] = fields[i + 1].GetUInt16(); - } - while (result->NextRow()); -} - -void Player::_SaveGlyphs(SQLTransaction& trans) const -{ - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_GLYPHS); - stmt->setUInt64(0, GetGUID().GetCounter()); - trans->Append(stmt); - - for (uint8 group = 0; group < GetTalentGroupsCount(); ++group) - { - uint8 index = 0; - - stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_GLYPHS); - stmt->setUInt64(index++, GetGUID().GetCounter()); - - stmt->setUInt8(index++, group); - - for (uint8 i = 0; i < MAX_GLYPH_SLOT_INDEX; ++i) - stmt->setUInt16(index++, uint16(GetGlyph(group, i))); - - trans->Append(stmt); - } -} - void Player::_LoadTalents(PreparedQueryResult result) { // SetPQuery(PLAYER_LOGIN_QUERY_LOADTALENTS, "SELECT spell, spec FROM character_talent WHERE guid = '%u'", GUID_LOPART(m_guid)); @@ -25215,13 +25111,6 @@ void Player::ActivateTalentGroup(uint8 spec) // Remove spec specific spells RemoveSpecializationSpells(); - // set glyphs - for (uint8 slot = 0; slot < MAX_GLYPH_SLOT_INDEX; ++slot) - // remove secondary glyph - if (uint32 oldglyph = GetGlyph(GetActiveTalentGroup(), slot)) - if (GlyphPropertiesEntry const* old_gp = sGlyphPropertiesStore.LookupEntry(oldglyph)) - RemoveAurasDueToSpell(old_gp->SpellID); - SetActiveTalentGroup(spec); SetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID, GetSpecId(spec)); @@ -25255,19 +25144,6 @@ void Player::ActivateTalentGroup(uint8 spec) if (uint32 mastery = specialization->MasterySpellID[i]) LearnSpell(mastery, false); - // set glyphs - for (uint8 slot = 0; slot < MAX_GLYPH_SLOT_INDEX; ++slot) - { - uint32 glyph = GetGlyph(GetActiveTalentGroup(), slot); - - // apply primary glyph - if (glyph) - if (GlyphPropertiesEntry const* gp = sGlyphPropertiesStore.LookupEntry(glyph)) - CastSpell(this, gp->SpellID, true); - - SetGlyph(slot, glyph); - } - InitTalentForLevel(); { diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 2f2258118b0..7edc88bdecc 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -956,7 +956,6 @@ enum PlayerLoginQueryIndex PLAYER_LOGIN_QUERY_LOAD_CRITERIA_PROGRESS, PLAYER_LOGIN_QUERY_LOAD_EQUIPMENT_SETS, PLAYER_LOGIN_QUERY_LOAD_BG_DATA, - PLAYER_LOGIN_QUERY_LOAD_GLYPHS, PLAYER_LOGIN_QUERY_LOAD_TALENTS, PLAYER_LOGIN_QUERY_LOAD_ACCOUNT_DATA, PLAYER_LOGIN_QUERY_LOAD_SKILLS, @@ -1150,11 +1149,8 @@ struct TC_GAME_API PlayerTalentInfo for (uint8 i = 0; i < MAX_TALENT_GROUPS; ++i) { GroupInfo[i].Talents = new PlayerTalentMap(); - memset(GroupInfo[i].Glyphs, 0, MAX_GLYPH_SLOT_INDEX * sizeof(uint32)); GroupInfo[i].SpecId = 0; } - - GlyphSlots.fill(0); } ~PlayerTalentInfo() @@ -1166,7 +1162,6 @@ struct TC_GAME_API PlayerTalentInfo struct TalentGroupInfo { PlayerTalentMap* Talents; - uint32 Glyphs[MAX_GLYPH_SLOT_INDEX]; uint32 SpecId; } GroupInfo[MAX_TALENT_GROUPS]; @@ -1175,8 +1170,6 @@ struct TC_GAME_API PlayerTalentInfo uint8 ActiveGroup; uint8 GroupsCount; - std::array<uint32, MAX_GLYPH_SLOT_INDEX> GlyphSlots; - private: PlayerTalentInfo(PlayerTalentInfo const&); }; @@ -1784,13 +1777,6 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void UpdateTalentGroupCount(uint8 count); void ActivateTalentGroup(uint8 group); - void InitGlyphsForLevel(); - void SetGlyphSlot(uint8 slot, uint32 slottype) { _talentMgr->GlyphSlots[slot] = slottype; } - - uint32 GetGlyphSlot(uint8 slot) const { return _talentMgr->GlyphSlots[slot]; } - void SetGlyph(uint8 slot, uint32 glyph); - uint32 GetGlyph(uint8 group, uint8 slot) const { return _talentMgr->GroupInfo[group].Glyphs[slot]; } - PlayerTalentMap const* GetTalentMap(uint8 spec) const { return _talentMgr->GroupInfo[spec].Talents; } PlayerTalentMap* GetTalentMap(uint8 spec) { return _talentMgr->GroupInfo[spec].Talents; } ActionButtonList const& GetActionButtons() const { return m_actionButtons; } @@ -2524,7 +2510,6 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void _LoadActions(PreparedQueryResult result); void _LoadAuras(PreparedQueryResult auraResult, PreparedQueryResult effectResult, uint32 timediff); - void _LoadGlyphAuras(); void _LoadBoundInstances(PreparedQueryResult result); void _LoadInventory(PreparedQueryResult result, uint32 timeDiff); void _LoadVoidStorage(PreparedQueryResult result); @@ -2547,7 +2532,6 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void _LoadArenaTeamInfo(PreparedQueryResult result); void _LoadEquipmentSets(PreparedQueryResult result); void _LoadBGData(PreparedQueryResult result); - void _LoadGlyphs(PreparedQueryResult result); void _LoadTalents(PreparedQueryResult result); void _LoadInstanceTimeRestrictions(PreparedQueryResult result); void _LoadCurrency(PreparedQueryResult result); @@ -2571,7 +2555,6 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void _SaveSpells(SQLTransaction& trans); void _SaveEquipmentSets(SQLTransaction& trans); void _SaveBGData(SQLTransaction& trans); - void _SaveGlyphs(SQLTransaction& trans) const; void _SaveTalents(SQLTransaction& trans); void _SaveStats(SQLTransaction& trans) const; void _SaveInstanceTimeRestrictions(SQLTransaction& trans); diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index d4ea3927f6c..1e80aa8018b 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -199,10 +199,6 @@ bool LoginQueryHolder::Initialize() stmt->setUInt64(0, lowGuid); res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_BG_DATA, stmt); - stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_GLYPHS); - stmt->setUInt64(0, lowGuid); - res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_GLYPHS, stmt); - stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_TALENTS); stmt->setUInt64(0, lowGuid); res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_TALENTS, stmt); @@ -1462,28 +1458,6 @@ void WorldSession::HandleAlterAppearance(WorldPackets::Character::AlterApperance _player->SetStandState(UNIT_STAND_STATE_STAND); } -void WorldSession::HandleRemoveGlyph(WorldPacket& recvData) -{ - uint32 slot; - recvData >> slot; - - if (slot >= MAX_GLYPH_SLOT_INDEX) - { - TC_LOG_DEBUG("network", "Client sent wrong glyph slot number in opcode CMSG_REMOVE_GLYPH %u", slot); - return; - } - - if (uint32 glyph = _player->GetGlyph(_player->GetActiveTalentGroup(), slot)) - { - if (GlyphPropertiesEntry const* gp = sGlyphPropertiesStore.LookupEntry(glyph)) - { - _player->RemoveAurasDueToSpell(gp->SpellID); - _player->SetGlyph(slot, 0); - _player->SendTalentsInfoData(); - } - } -} - void WorldSession::HandleCharCustomizeOpcode(WorldPackets::Character::CharCustomize& packet) { if (!IsLegitCharacterForAccount(packet.CustomizeInfo->CharGUID)) diff --git a/src/server/game/Handlers/InspectHandler.cpp b/src/server/game/Handlers/InspectHandler.cpp index 3ffde3dc3e3..3ac39c2d500 100644 --- a/src/server/game/Handlers/InspectHandler.cpp +++ b/src/server/game/Handlers/InspectHandler.cpp @@ -58,9 +58,6 @@ void WorldSession::HandleInspectOpcode(WorldPackets::Inspect::Inspect& inspect) if (v.second != PLAYERSPELL_REMOVED) inspectResult.Talents.push_back(v.first); } - - for (uint8 i = 0; i < MAX_GLYPH_SLOT_INDEX; ++i) - inspectResult.Glyphs.push_back(player->GetGlyph(player->GetActiveTalentGroup(), i)); } if (Guild* guild = sGuildMgr->GetGuildById(player->GetGuildId())) diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index d796b789f8d..6bbec483634 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -855,7 +855,6 @@ enum SpellAttr13 #define MAX_TALENT_GROUP 1 #define MIN_TALENT_GROUPS 1 #define MAX_TALENT_GROUPS 2 -#define MAX_GLYPH_SLOT_INDEX 6 #define MIN_SPECIALIZATION_LEVEL 10 #define MAX_SPECIALIZATIONS 4 #define PET_SPEC_OVERRIDE_CLASS_INDEX MAX_CLASSES diff --git a/src/server/game/Server/Packets/TalentPackets.cpp b/src/server/game/Server/Packets/TalentPackets.cpp index 7dc2daaa706..bc7b6aec20c 100644 --- a/src/server/game/Server/Packets/TalentPackets.cpp +++ b/src/server/game/Server/Packets/TalentPackets.cpp @@ -27,8 +27,8 @@ WorldPacket const* WorldPackets::Talent::UpdateTalentData::Write() _worldPacket << talentGroupInfo.SpecID; _worldPacket << uint32(talentGroupInfo.TalentIDs.size()); - for (uint32 i = 0; i < MAX_GLYPH_SLOT_INDEX; ++i) - _worldPacket << talentGroupInfo.GlyphIDs[i]; + //for (uint32 i = 0; i < MAX_GLYPH_SLOT_INDEX; ++i) + // _worldPacket << talentGroupInfo.GlyphIDs[i]; for (uint16 talentID : talentGroupInfo.TalentIDs) _worldPacket << talentID; diff --git a/src/server/game/Server/Packets/TalentPackets.h b/src/server/game/Server/Packets/TalentPackets.h index ca6b0217a28..9e09605b362 100644 --- a/src/server/game/Server/Packets/TalentPackets.h +++ b/src/server/game/Server/Packets/TalentPackets.h @@ -29,7 +29,7 @@ namespace WorldPackets { uint32 SpecID; std::vector<uint16> TalentIDs; - uint16 GlyphIDs[MAX_GLYPH_SLOT_INDEX]; + //uint16 GlyphIDs[MAX_GLYPH_SLOT_INDEX]; }; struct TalentInfoUpdate diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 5becf594568..d58b03ebb2c 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -1650,7 +1650,6 @@ class TC_GAME_API WorldSession // Miscellaneous void HandleSpellClick(WorldPackets::Spells::SpellClick& spellClick); void HandleMirrorImageDataRequest(WorldPackets::Spells::GetMirrorImageData& getMirrorImageData); - void HandleRemoveGlyph(WorldPacket& recvData); void HandleGuildSetFocusedAchievement(WorldPackets::Achievement::GuildSetFocusedAchievement& setFocusedAchievement); void HandleEquipmentSetSave(WorldPackets::EquipmentSet::SaveEquipmentSet& saveEquipmentSet); void HandleDeleteEquipmentSet(WorldPackets::EquipmentSet::DeleteEquipmentSet& deleteEquipmentSet); diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index e529990cccd..9962a214f97 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -1359,23 +1359,6 @@ void AuraEffect::HandleShapeshiftBoosts(Unit* target, bool apply) const target->CastSpell(target, itr->first, true, NULL, this); } - // Also do it for Glyphs - for (uint32 i = 0; i < MAX_GLYPH_SLOT_INDEX; ++i) - { - if (uint32 glyphId = plrTarget->GetGlyph(plrTarget->GetActiveTalentGroup(), i)) - { - if (GlyphPropertiesEntry const* glyph = sGlyphPropertiesStore.LookupEntry(glyphId)) - { - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(glyph->SpellID); - if (!spellInfo || !(spellInfo->Attributes & (SPELL_ATTR0_PASSIVE | SPELL_ATTR0_HIDDEN_CLIENTSIDE))) - continue; - - if (spellInfo->Stances & (UI64LIT(1) << (GetMiscValue() - 1))) - target->CastSpell(target, glyph->SpellID, true, NULL, this); - } - } - } - // Leader of the Pack if (plrTarget->HasSpell(17007)) { diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index d22b6df71e4..3b452024c80 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -3922,72 +3922,9 @@ void Spell::EffectApplyGlyph(SpellEffIndex /*effIndex*/) if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT) return; - if (m_misc.GlyphSlot >= MAX_GLYPH_SLOT_INDEX) - return; - Player* player = m_caster->ToPlayer(); if (!player) return; - - // glyph sockets level requirement - uint8 minLevel = 0; - switch (m_misc.GlyphSlot) - { - case 0: - case 1: - case 6: minLevel = 25; break; - case 2: - case 3: - case 7: minLevel = 50; break; - case 4: - case 5: - case 8: minLevel = 75; break; - } - - if (minLevel && m_caster->getLevel() < minLevel) - { - SendCastResult(SPELL_FAILED_GLYPH_SOCKET_LOCKED); - return; - } - - // apply new one - if (uint32 newGlyph = effectInfo->MiscValue) - { - if (GlyphPropertiesEntry const* newGlyphProperties = sGlyphPropertiesStore.LookupEntry(newGlyph)) - { - if (GlyphSlotEntry const* newGlyphSlot = sGlyphSlotStore.LookupEntry(player->GetGlyphSlot(m_misc.GlyphSlot))) - { - if (newGlyphProperties->Type != newGlyphSlot->Type) - { - SendCastResult(SPELL_FAILED_INVALID_GLYPH); - return; // glyph slot mismatch - } - } - - // remove old glyph - if (uint32 oldGlyph = player->GetGlyph(player->GetActiveTalentGroup(), m_misc.GlyphSlot)) - { - if (GlyphPropertiesEntry const* oldGlyphProperties = sGlyphPropertiesStore.LookupEntry(oldGlyph)) - { - player->RemoveAurasDueToSpell(oldGlyphProperties->SpellID); - player->SetGlyph(m_misc.GlyphSlot, 0); - } - } - - player->CastSpell(m_caster, newGlyphProperties->SpellID, true); - player->SetGlyph(m_misc.GlyphSlot, newGlyph); - player->SendTalentsInfoData(); - } - } - else if (uint32 oldGlyph = player->GetGlyph(player->GetActiveTalentGroup(), m_misc.GlyphSlot)) // Removing the glyph, get the old one - { - if (GlyphPropertiesEntry const* oldGlyphProperties = sGlyphPropertiesStore.LookupEntry(oldGlyph)) - { - player->RemoveAurasDueToSpell(oldGlyphProperties->SpellID); - player->SetGlyph(m_misc.GlyphSlot, 0); - player->SendTalentsInfoData(); - } - } } void Spell::EffectEnchantHeldItem(SpellEffIndex /*effIndex*/) diff --git a/src/server/scripts/Commands/cs_reset.cpp b/src/server/scripts/Commands/cs_reset.cpp index e77893e9de6..f72d7c614cc 100644 --- a/src/server/scripts/Commands/cs_reset.cpp +++ b/src/server/scripts/Commands/cs_reset.cpp @@ -134,7 +134,6 @@ public: target->InitRunes(); target->InitStatsForLevel(true); target->InitTaxiNodesForLevel(); - target->InitGlyphsForLevel(); target->InitTalentForLevel(); target->SetUInt32Value(PLAYER_XP, 0); @@ -190,7 +189,6 @@ public: target->InitRunes(); target->InitStatsForLevel(true); target->InitTaxiNodesForLevel(); - target->InitGlyphsForLevel(); target->InitTalentForLevel(); return true; diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp index d41dcb42411..0829441e17a 100644 --- a/src/server/scripts/Spells/spell_shaman.cpp +++ b/src/server/scripts/Spells/spell_shaman.cpp @@ -1008,7 +1008,7 @@ class spell_sha_lava_surge_proc : public SpellScriptLoader void ResetCooldown() { - GetCaster()->GetSpellHistory()->RestoreCharge(sSpellMgr->AssertSpellInfo(SPELL_SHAMAN_LAVA_BURST)->ChargeCategoryEntry); + GetCaster()->GetSpellHistory()->RestoreCharge(sSpellMgr->AssertSpellInfo(SPELL_SHAMAN_LAVA_BURST)->ChargeCategoryId); } void Register() override diff --git a/src/server/shared/DataStores/DB2Meta.cpp b/src/server/shared/DataStores/DB2Meta.cpp new file mode 100644 index 00000000000..66c18961551 --- /dev/null +++ b/src/server/shared/DataStores/DB2Meta.cpp @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "DB2Meta.h" + +DB2Meta::DB2Meta(int32 indexField, uint32 fieldCount, char const* types, uint8 const* arraySizes) + : IndexField(indexField), FieldCount(fieldCount), Types(types), ArraySizes(arraySizes) +{ +} + +bool DB2Meta::HasIndexFieldInData() const +{ + return IndexField != -1; +} + +uint32 DB2Meta::GetIndexField() const +{ + return IndexField == -1 ? 0 : uint32(IndexField); +} + +uint32 DB2Meta::GetRecordSize() const +{ + uint32 size = 0; + for (uint32 i = 0; i < FieldCount; ++i) + { + for (uint8 j = 0; j < ArraySizes[i]; ++j) + { + switch (Types[i]) + { + case FT_BYTE: + size += 1; + break; + case FT_SHORT: + size += 2; + break; + case FT_FLOAT: + case FT_INT: + size += 4; + break; + case FT_STRING: + case FT_STRING_NOT_LOCALIZED: + size += sizeof(char*); + break; + } + } + } + + if (!HasIndexFieldInData()) + size += 4; + + return size; +} + +uint32 DB2Meta::GetDbIndexField() const +{ + if (IndexField == -1) + return 0; + + uint32 index = 0; + for (uint32 i = 0; i < FieldCount && i < uint32(IndexField); ++i) + index += ArraySizes[i]; + + return index; +} + +uint32 DB2Meta::GetDbFieldCount() const +{ + uint32 fields = 0; + for (uint32 i = 0; i < FieldCount; ++i) + fields += ArraySizes[i]; + + if (!HasIndexFieldInData()) + ++fields; + + return fields; +} + +uint32 DB2Meta::GetStringFieldCount(bool localizedOnly) const +{ + uint32 stringFields = 0; + for (uint32 i = 0; i < FieldCount; ++i) + if (Types[i] == FT_STRING || (Types[i] == FT_STRING_NOT_LOCALIZED && !localizedOnly)) + for (uint8 j = 0; j < ArraySizes[i]; ++j) + ++stringFields; + + return stringFields; +} diff --git a/src/server/game/DataStores/DBCfmt.h b/src/server/shared/DataStores/DB2Meta.h index 3027402f596..adfdfea37fb 100644 --- a/src/server/game/DataStores/DBCfmt.h +++ b/src/server/shared/DataStores/DB2Meta.h @@ -1,6 +1,5 @@ /* * Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/> - * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/> * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -16,11 +15,32 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -#ifndef TRINITY_DBCSFRM_H -#define TRINITY_DBCSFRM_H +#ifndef DB2Meta_h__ +#define DB2Meta_h__ -// x - skip<uint32>, X - skip<uint8>, s - char*, f - float, i - uint32, b - uint8, d - index (not included) -// n - index (included), l - uint64, p - field present in sql dbc, a - field absent in sql dbc +#include "Define.h" +struct DB2Meta +{ + DB2Meta(int32 indexField, uint32 fieldCount, char const* types, uint8 const* arraySizes); -#endif + bool HasIndexFieldInData() const; + + // Returns field index for data loaded in our structures (ID field is appended in the front if not present in db2 file data section) + uint32 GetIndexField() const; + + // Returns size of final loaded structure + uint32 GetRecordSize() const; + + uint32 GetDbIndexField() const; + uint32 GetDbFieldCount() const; + + uint32 GetStringFieldCount(bool localizedOnly) const; + + int32 IndexField; + uint32 FieldCount; + char const* Types; + uint8 const* ArraySizes; +}; + +#endif // DB2Meta_h__ diff --git a/src/server/shared/DataStores/DB2SparseStorageLoader.cpp b/src/server/shared/DataStores/DB2SparseStorageLoader.cpp index 2d5c11b9d5d..721ce6d8813 100644 --- a/src/server/shared/DataStores/DB2SparseStorageLoader.cpp +++ b/src/server/shared/DataStores/DB2SparseStorageLoader.cpp @@ -23,14 +23,14 @@ DB2SparseFileLoader::DB2SparseFileLoader() { fileName = nullptr; + meta = nullptr; recordCount = 0; fieldCount = 0; recordSize = 0; offsetsPos = 0; tableHash = 0; - build = 0; - unk1 = 0; + layoutHash = 0; minIndex = 0; maxIndex = 0; localeMask = 0; @@ -39,9 +39,10 @@ DB2SparseFileLoader::DB2SparseFileLoader() dataStart = 0; data = nullptr; offsets = nullptr; + fields = nullptr; } -bool DB2SparseFileLoader::Load(const char *filename) +bool DB2SparseFileLoader::Load(const char *filename, DB2Meta const* meta) { if (data) { @@ -54,6 +55,7 @@ bool DB2SparseFileLoader::Load(const char *filename) return false; fileName = filename; + this->meta = meta; uint32 header; if (fread(&header, 4, 1, f) != 1) // Signature { @@ -63,10 +65,10 @@ bool DB2SparseFileLoader::Load(const char *filename) EndianConvert(header); - if (header != 0x34424457) + if (header != 0x35424457) { fclose(f); - return false; //'WDB4' + return false; //'WDB5' } if (fread(&recordCount, 4, 1, f) != 1) // Number of records @@ -109,21 +111,13 @@ bool DB2SparseFileLoader::Load(const char *filename) EndianConvert(tableHash); - if (fread(&build, 4, 1, f) != 1) // Build + if (fread(&layoutHash, 4, 1, f) != 1) // Layout hash { fclose(f); return false; } - EndianConvert(build); - - if (fread(&unk1, 4, 1, f) != 1) // Unknown WDB2 - { - fclose(f); - return false; - } - - EndianConvert(unk1); + EndianConvert(layoutHash); if (fread(&minIndex, 4, 1, f) != 1) // MinIndex WDB2 { @@ -165,6 +159,13 @@ bool DB2SparseFileLoader::Load(const char *filename) EndianConvert(metaFlags); + fields = new FieldEntry[fieldCount]; + if (fread(fields, fieldCount * sizeof(FieldEntry), 1, f) != 1) + { + fclose(f); + return false; + } + dataStart = ftell(f); data = new unsigned char[offsetsPos - dataStart]; @@ -190,69 +191,19 @@ DB2SparseFileLoader::~DB2SparseFileLoader() { delete[] data; delete[] offsets; -} - -uint32 DB2SparseFileLoader::GetFormatRecordSize(const char * format) -{ - uint32 recordsize = 0; - for (uint32 x = 0; format[x]; ++x) - { - switch (format[x]) - { - case FT_FLOAT: - case FT_INT: - case FT_SORT: - recordsize += 4; - break; - case FT_STRING: - case FT_STRING_NOT_LOCALIZED: - recordsize += sizeof(char*); - break; - case FT_BYTE: - recordsize += 1; - break; - case FT_LONG: - recordsize += 8; - break; - case FT_SHORT: - recordsize += 2; - break; - } - } - - return recordsize; -} - -uint32 DB2SparseFileLoader::GetFormatStringFieldCount(const char* format) -{ - uint32 stringfields = 0; - for (uint32 x = 0; format[x]; ++x) - if (format[x] == FT_STRING || format[x] == FT_STRING_NOT_LOCALIZED) - ++stringfields; - - return stringfields; -} - -uint32 DB2SparseFileLoader::GetFormatLocalizedStringFieldCount(char const* format) -{ - uint32 stringfields = 0; - for (uint32 x = 0; format[x]; ++x) - if (format[x] == FT_STRING) - ++stringfields; - - return stringfields; + delete[] fields; } static char const* const nullStr = ""; -char* DB2SparseFileLoader::AutoProduceData(const char* format, IndexTable const& indexTable, uint32 locale, std::vector<char*>& stringPool) +char* DB2SparseFileLoader::AutoProduceData(IndexTable const& indexTable, uint32 locale, std::vector<char*>& stringPool) { typedef char* ptr; - if (strlen(format) != fieldCount + (format[0] == FT_SORT ? 1 : 0)) + if (meta->FieldCount != fieldCount) return NULL; //get struct size and index pos - uint32 recordsize = GetFormatRecordSize(format); + uint32 recordsize = meta->GetRecordSize(); uint32 offsetCount = maxIndex - minIndex + 1; uint32 records = 0; @@ -269,12 +220,11 @@ char* DB2SparseFileLoader::AutoProduceData(const char* format, IndexTable const& char* dataTable = new char[records * recordsize]; // we store flat holders pool as single memory block - std::size_t stringFields = GetFormatStringFieldCount(format); - std::size_t localizedStringFields = GetFormatLocalizedStringFieldCount(format); + std::size_t stringFields = meta->GetStringFieldCount(false); + std::size_t localizedStringFields = meta->GetStringFieldCount(true); // each string field at load have array of string for each locale - std::size_t stringHolderSize = sizeof(char*) * TOTAL_LOCALES; - std::size_t stringHoldersRecordPoolSize = localizedStringFields * stringHolderSize + (stringFields - localizedStringFields) * sizeof(char*); + std::size_t stringHoldersRecordPoolSize = localizedStringFields * sizeof(LocalizedString) + (stringFields - localizedStringFields) * sizeof(char*); std::size_t stringHoldersPoolSize = stringHoldersRecordPoolSize * records; char* stringHoldersPool = new char[stringHoldersPoolSize]; @@ -284,8 +234,8 @@ char* DB2SparseFileLoader::AutoProduceData(const char* format, IndexTable const& for (std::size_t i = 0; i < stringHoldersPoolSize / sizeof(char*); ++i) ((char const**)stringHoldersPool)[i] = nullStr; - char* stringTable = new char[expandedDataSize - records * ((recordsize - (format[0] == FT_SORT ? 4 : 0)) - stringFields * sizeof(char*))]; - memset(stringTable, 0, expandedDataSize - records * ((recordsize - (format[0] == FT_SORT ? 4 : 0)) - stringFields * sizeof(char*))); + char* stringTable = new char[expandedDataSize - records * ((recordsize - (!meta->HasIndexFieldInData() ? 4 : 0)) - stringFields * sizeof(char*))]; + memset(stringTable, 0, expandedDataSize - records * ((recordsize - (!meta->HasIndexFieldInData() ? 4 : 0)) - stringFields * sizeof(char*))); stringPool.push_back(stringTable); char* stringPtr = stringTable; @@ -299,64 +249,113 @@ char* DB2SparseFileLoader::AutoProduceData(const char* format, IndexTable const& indexTable.Insert(y + minIndex, &dataTable[offset]); uint32 fieldOffset = 0; uint32 stringFieldOffset = 0; - for (uint32 x = 0; x < (fieldCount + (format[0] == FT_SORT ? 1 : 0)); x++) + + if (!meta->HasIndexFieldInData()) + { + *((uint32*)(&dataTable[offset])) = y + minIndex; + offset += 4; + } + + for (uint32 x = 0; x < fieldCount; ++x) { - switch (format[x]) + uint16 fieldBytes = 4 - fields[x].UnusedBits / 8; + for (uint32 z = 0; z < meta->ArraySizes[x]; ++z) { - case FT_FLOAT: - *((float*)(&dataTable[offset])) = *reinterpret_cast<float*>(&data[offsets[y].FileOffset - dataStart + fieldOffset]); - offset += 4; - fieldOffset += 4; - break; - case FT_IND: - case FT_INT: - *((uint32*)(&dataTable[offset])) = *reinterpret_cast<uint32*>(&data[offsets[y].FileOffset - dataStart + fieldOffset]); - offset += 4; - fieldOffset += 4; - break; - case FT_BYTE: - *((uint8*)(&dataTable[offset])) = *reinterpret_cast<uint8*>(&data[offsets[y].FileOffset - dataStart + fieldOffset]); - offset += 1; - fieldOffset += 1; - break; - case FT_LONG: - *((uint64*)(&dataTable[offset])) = *reinterpret_cast<uint64*>(&data[offsets[y].FileOffset - dataStart + fieldOffset]); - offset += 8; - fieldOffset += 8; - break; - case FT_SHORT: - *((uint16*)(&dataTable[offset])) = *reinterpret_cast<uint16*>(&data[offsets[y].FileOffset - dataStart + fieldOffset]); - offset += 2; - fieldOffset += 2; - break; - case FT_STRING: - { - LocalizedString** slot = (LocalizedString**)(&dataTable[offset]); - *slot = (LocalizedString*)(&stringHoldersPool[stringHoldersRecordPoolSize * recordNum + stringFieldOffset]); - (*slot)->Str[locale] = stringPtr; - strcpy(stringPtr, (char*)&data[offsets[y].FileOffset - dataStart + fieldOffset]); - fieldOffset += strlen(stringPtr) + 1; - stringPtr += strlen(stringPtr) + 1; - stringFieldOffset += stringHolderSize; - offset += sizeof(LocalizedString*); - break; - } - case FT_STRING_NOT_LOCALIZED: + switch (meta->Types[x]) { - char const*** slot = (char const***)(&dataTable[offset]); - *slot = (char const**)(&stringHoldersPool[stringHoldersRecordPoolSize * recordNum + stringFieldOffset]); - **slot = stringPtr; - strcpy(stringPtr, (char*)&data[offsets[y].FileOffset - dataStart + fieldOffset]); - fieldOffset += strlen(stringPtr) + 1; - stringPtr += strlen(stringPtr) + 1; - ++stringFieldOffset; - offset += sizeof(char*); - break; + case FT_FLOAT: + { + float val = *reinterpret_cast<float*>(&data[offsets[y].FileOffset - dataStart + fieldOffset]); + EndianConvert(val); + *((float*)(&dataTable[offset])) = val; + offset += 4; + fieldOffset += 4; + break; + } + case FT_INT: + { + ASSERT(fieldBytes && fieldBytes <= 4); + uint32 val; + switch (fieldBytes) + { + case 1: + val = *reinterpret_cast<uint8*>(&data[offsets[y].FileOffset - dataStart + fieldOffset]); + break; + case 2: + { + uint16 val16 = *reinterpret_cast<uint16*>(&data[offsets[y].FileOffset - dataStart + fieldOffset]); + EndianConvert(val16); + val = val16; + break; + } + case 3: + { +#pragma pack(push, 1) + struct dbcint24 { uint8 v[3]; }; +#pragma pack(pop) + dbcint24 i24v = *reinterpret_cast<dbcint24*>(&data[offsets[y].FileOffset - dataStart + fieldOffset]); + EndianConvert(i24v); + val = uint32(i24v.v[0]) | (uint32(i24v.v[1]) << 8) | (uint32(i24v.v[2]) << 16); + break; + } + case 4: + val = *reinterpret_cast<uint32*>(&data[offsets[y].FileOffset - dataStart + fieldOffset]); + EndianConvert(val); + break; + default: + break; + } + *((uint32*)(&dataTable[offset])) = val; + offset += 4; + fieldOffset += fieldBytes; + break; + } + case FT_BYTE: + { + ASSERT(fieldBytes == 1); + *((uint8*)(&dataTable[offset])) = *reinterpret_cast<uint8*>(&data[offsets[y].FileOffset - dataStart + fieldOffset]); + offset += 1; + fieldOffset += 1; + break; + } + case FT_SHORT: + { + ASSERT(fieldBytes == 2); + uint16 val = *reinterpret_cast<uint16*>(&data[offsets[y].FileOffset - dataStart + fieldOffset]); + EndianConvert(val); + *((uint16*)(&dataTable[offset])) = val; + offset += 2; + fieldOffset += 2; + break; + } + case FT_STRING: + { + LocalizedString** slot = (LocalizedString**)(&dataTable[offset]); + *slot = (LocalizedString*)(&stringHoldersPool[stringHoldersRecordPoolSize * recordNum + stringFieldOffset]); + (*slot)->Str[locale] = stringPtr; + strcpy(stringPtr, (char*)&data[offsets[y].FileOffset - dataStart + fieldOffset]); + fieldOffset += strlen(stringPtr) + 1; + stringPtr += strlen(stringPtr) + 1; + stringFieldOffset += sizeof(LocalizedString); + offset += sizeof(LocalizedString*); + break; + } + case FT_STRING_NOT_LOCALIZED: + { + char const*** slot = (char const***)(&dataTable[offset]); + *slot = (char const**)(&stringHoldersPool[stringHoldersRecordPoolSize * recordNum + stringFieldOffset]); + **slot = stringPtr; + strcpy(stringPtr, (char*)&data[offsets[y].FileOffset - dataStart + fieldOffset]); + fieldOffset += strlen(stringPtr) + 1; + stringPtr += strlen(stringPtr) + 1; + stringFieldOffset += sizeof(char*); + offset += sizeof(char*); + break; + } + default: + ASSERT(false, "Unknown format character '%c' found in %s meta", meta->Types[x], fileName); + break; } - case FT_SORT: - *((uint32*)(&dataTable[offset])) = y + minIndex; - offset += 4; - break; } } @@ -366,9 +365,9 @@ char* DB2SparseFileLoader::AutoProduceData(const char* format, IndexTable const& return dataTable; } -char* DB2SparseFileLoader::AutoProduceStrings(const char* format, char* dataTable, uint32 locale) +char* DB2SparseFileLoader::AutoProduceStrings(char* dataTable, uint32 locale) { - if (strlen(format) != fieldCount + (format[0] == FT_SORT ? 1 : 0)) + if (meta->FieldCount != fieldCount) return nullptr; if (!(localeMask & (1 << locale))) @@ -394,10 +393,10 @@ char* DB2SparseFileLoader::AutoProduceStrings(const char* format, char* dataTabl if (offsets[i].FileOffset && offsets[i].RecordSize) ++records; - uint32 recordsize = GetFormatRecordSize(format); - std::size_t stringFields = GetFormatLocalizedStringFieldCount(format); - char* stringTable = new char[offsetsPos - dataStart - records * (recordsize - stringFields * sizeof(char*))]; - memset(stringTable, 0, offsetsPos - dataStart - records * (recordsize - stringFields * sizeof(char*))); + uint32 recordsize = meta->GetRecordSize(); + std::size_t stringFields = meta->GetStringFieldCount(true); + char* stringTable = new char[offsetsPos - dataStart - records * ((recordsize - (!meta->HasIndexFieldInData() ? 4 : 0)) - stringFields * sizeof(char*))]; + memset(stringTable, 0, offsetsPos - dataStart - records * ((recordsize - (!meta->HasIndexFieldInData() ? 4 : 0)) - stringFields * sizeof(char*))); char* stringPtr = stringTable; uint32 offset = 0; @@ -407,44 +406,51 @@ char* DB2SparseFileLoader::AutoProduceStrings(const char* format, char* dataTabl if (!offsets[y].FileOffset || !offsets[y].RecordSize) continue; + if (!meta->HasIndexFieldInData()) + offset += 4; + uint32 fieldOffset = 0; - for (uint32 x = 0; x < fieldCount; x++) + for (uint32 x = 0; x < fieldCount; ++x) { - switch (format[x]) + for (uint32 z = 0; z < meta->ArraySizes[x]; ++z) { - case FT_FLOAT: - case FT_IND: - case FT_INT: - offset += 4; - fieldOffset += 4; - break; - case FT_BYTE: - offset += 1; - fieldOffset += 1; - break; - case FT_LONG: - offset += 8; - fieldOffset += 8; - break; - case FT_SHORT: - offset += 2; - fieldOffset += 2; - break; - case FT_STRING: - { - LocalizedString* db2str = *(LocalizedString**)(&dataTable[offset]); - db2str->Str[locale] = stringPtr; - strcpy(stringPtr, (char*)&data[offsets[y].FileOffset - dataStart + fieldOffset]); - fieldOffset += strlen(stringPtr) + 1; - stringPtr += strlen(stringPtr) + 1; - offset += sizeof(char*); - break; - } - case FT_STRING_NOT_LOCALIZED: + switch (meta->Types[x]) { - fieldOffset += strlen((char*)&data[offsets[y].FileOffset - dataStart + fieldOffset]) + 1; - offset += sizeof(char*); - break; + case FT_FLOAT: + offset += 4; + fieldOffset += 4; + break; + case FT_INT: + offset += 4; + fieldOffset += 4 - fields[x].UnusedBits / 8; + break; + case FT_BYTE: + offset += 1; + fieldOffset += 1; + break; + case FT_SHORT: + offset += 2; + fieldOffset += 2; + break; + case FT_STRING: + { + LocalizedString* db2str = *(LocalizedString**)(&dataTable[offset]); + db2str->Str[locale] = stringPtr; + strcpy(stringPtr, (char*)&data[offsets[y].FileOffset - dataStart + fieldOffset]); + fieldOffset += strlen(stringPtr) + 1; + stringPtr += strlen(stringPtr) + 1; + offset += sizeof(char*); + break; + } + case FT_STRING_NOT_LOCALIZED: + { + fieldOffset += strlen((char*)&data[offsets[y].FileOffset - dataStart + fieldOffset]) + 1; + offset += sizeof(char*); + break; + } + default: + ASSERT(false, "Unknown format character '%c' found in %s meta", meta->Types[x], fileName); + break; } } } @@ -453,27 +459,26 @@ char* DB2SparseFileLoader::AutoProduceStrings(const char* format, char* dataTabl return stringTable; } -char* DB2SparseDatabaseLoader::Load(const char* format, HotfixDatabaseStatements preparedStatement, IndexTable const& indexTable, std::vector<char*>& stringPool) +char* DB2SparseDatabaseLoader::Load(HotfixDatabaseStatements preparedStatement, IndexTable const& indexTable, std::vector<char*>& stringPool) { // Even though this query is executed only once, prepared statement is used to send data from mysql server in binary format PreparedQueryResult result = HotfixDatabase.Query(HotfixDatabase.GetPreparedStatement(preparedStatement)); if (!result) return nullptr; - uint32 const fieldCount = strlen(format); - if (fieldCount != result->GetFieldCount()) + if (_meta->GetDbFieldCount() != result->GetFieldCount()) return nullptr; // get struct size and index pos - uint32 recordSize = DB2SparseFileLoader::GetFormatRecordSize(format); + uint32 indexField = _meta->GetDbIndexField(); + uint32 recordSize = _meta->GetRecordSize(); // we store flat holders pool as single memory block - std::size_t stringFields = DB2SparseFileLoader::GetFormatStringFieldCount(format); - std::size_t localizedStringFields = DB2SparseFileLoader::GetFormatLocalizedStringFieldCount(format); + std::size_t stringFields = _meta->GetStringFieldCount(false); + std::size_t localizedStringFields = _meta->GetStringFieldCount(true); // each string field at load have array of string for each locale - std::size_t stringHolderSize = sizeof(char*) * TOTAL_LOCALES; - std::size_t stringHoldersRecordPoolSize = localizedStringFields * stringHolderSize + (stringFields - localizedStringFields) * sizeof(char*); + std::size_t stringHoldersRecordPoolSize = localizedStringFields * sizeof(LocalizedString) + (stringFields - localizedStringFields) * sizeof(char*); char* stringHolders = nullptr; if (stringFields) @@ -498,7 +503,7 @@ char* DB2SparseDatabaseLoader::Load(const char* format, HotfixDatabaseStatements uint32 offset = 0; uint32 stringFieldOffset = 0; - uint32 indexValue = fields[0].GetUInt32(); + uint32 indexValue = fields[indexField].GetUInt32(); // Attempt to overwrite existing data char* dataValue = indexTable.Get(indexValue); @@ -508,60 +513,69 @@ char* DB2SparseDatabaseLoader::Load(const char* format, HotfixDatabaseStatements dataValue = &tempDataTable[newRecords++ * recordSize]; } - for (uint32 f = 0; f < fieldCount; f++) + uint32 f = 0; + if (!_meta->HasIndexFieldInData()) + { + *((uint32*)(&dataValue[offset])) = indexValue; + offset += 4; + ++f; + } + + for (uint32 x = 0; x < _meta->FieldCount; ++x) { - switch (format[f]) + for (uint32 z = 0; z < _meta->ArraySizes[x]; ++z) { - case FT_FLOAT: - *((float*)(&dataValue[offset])) = fields[f].GetFloat(); - offset += 4; - break; - case FT_IND: - case FT_INT: - case FT_SORT: - *((int32*)(&dataValue[offset])) = fields[f].GetInt32(); - offset += 4; - break; - case FT_BYTE: - *((int8*)(&dataValue[offset])) = fields[f].GetInt8(); - offset += 1; - break; - case FT_LONG: - *((int64*)(&dataValue[offset])) = fields[f].GetInt64(); - offset += 8; - break; - case FT_SHORT: - *((int16*)(&dataValue[offset])) = fields[f].GetInt16(); - offset += 2; - break; - case FT_STRING: + switch (_meta->Types[x]) { - LocalizedString** slot = (LocalizedString**)(&dataValue[offset]); - *slot = (LocalizedString*)(&stringHolders[stringHoldersRecordPoolSize * rec + stringFieldOffset]); - ASSERT(*slot); + case FT_FLOAT: + *((float*)(&dataValue[offset])) = fields[f].GetFloat(); + offset += 4; + break; + case FT_INT: + *((int32*)(&dataValue[offset])) = fields[f].GetInt32(); + offset += 4; + break; + case FT_BYTE: + *((int8*)(&dataValue[offset])) = fields[f].GetInt8(); + offset += 1; + break; + case FT_SHORT: + *((int16*)(&dataValue[offset])) = fields[f].GetInt16(); + offset += 2; + break; + case FT_STRING: + { + LocalizedString** slot = (LocalizedString**)(&dataValue[offset]); + *slot = (LocalizedString*)(&stringHolders[stringHoldersRecordPoolSize * rec + stringFieldOffset]); + ASSERT(*slot); - // Value in database in main table field must be for enUS locale - if (char* str = AddString(&(*slot)->Str[LOCALE_enUS], fields[f].GetString())) - stringPool.push_back(str); + // Value in database in main table field must be for enUS locale + if (char* str = AddString(&(*slot)->Str[LOCALE_enUS], fields[f].GetString())) + stringPool.push_back(str); - stringFieldOffset += stringHolderSize; - offset += sizeof(char*); - break; - } - case FT_STRING_NOT_LOCALIZED: - { - char const** slot = (char const**)(&dataValue[offset]); - *slot = (char*)(&stringHolders[stringHoldersRecordPoolSize * rec + stringFieldOffset]); - ASSERT(*slot); + stringFieldOffset += sizeof(LocalizedString); + offset += sizeof(char*); + break; + } + case FT_STRING_NOT_LOCALIZED: + { + char const** slot = (char const**)(&dataValue[offset]); + *slot = (char*)(&stringHolders[stringHoldersRecordPoolSize * rec + stringFieldOffset]); + ASSERT(*slot); - // Value in database in main table field must be for enUS locale - if (char* str = AddString(slot, fields[f].GetString())) - stringPool.push_back(str); + // Value in database in main table field must be for enUS locale + if (char* str = AddString(slot, fields[f].GetString())) + stringPool.push_back(str); - ++stringFieldOffset; - offset += sizeof(char*); - break; + stringFieldOffset += sizeof(char*); + offset += sizeof(char*); + break; + } + default: + ASSERT(false, "Unknown format character '%c' found in %s meta", _meta->Types[x], _storageName.c_str()); + break; } + ++f; } } @@ -590,7 +604,7 @@ char* DB2SparseDatabaseLoader::Load(const char* format, HotfixDatabaseStatements return dataTable; } -void DB2SparseDatabaseLoader::LoadStrings(const char* format, HotfixDatabaseStatements preparedStatement, uint32 locale, IndexTable const& indexTable, std::vector<char*>& stringPool) +void DB2SparseDatabaseLoader::LoadStrings(HotfixDatabaseStatements preparedStatement, uint32 locale, IndexTable const& indexTable, std::vector<char*>& stringPool) { PreparedStatement* stmt = HotfixDatabase.GetPreparedStatement(preparedStatement); stmt->setString(0, localeNames[locale]); @@ -598,13 +612,12 @@ void DB2SparseDatabaseLoader::LoadStrings(const char* format, HotfixDatabaseStat if (!result) return; - size_t stringFields = DB2SparseFileLoader::GetFormatLocalizedStringFieldCount(format); + size_t stringFields = _meta->GetStringFieldCount(true); if (result->GetFieldCount() != stringFields + 1 /*ID*/) return; - uint32 const fieldCount = strlen(format); - uint32 recordSize = DB2SparseFileLoader::GetFormatRecordSize(format); - ASSERT(0 >= 0, "DB2Storage must be indexed to load localized strings"); + uint32 fieldCount = _meta->FieldCount; + uint32 recordSize = _meta->GetRecordSize(); do { @@ -616,36 +629,40 @@ void DB2SparseDatabaseLoader::LoadStrings(const char* format, HotfixDatabaseStat // Attempt to overwrite existing data if (char* dataValue = indexTable.Get(indexValue)) { - for (uint32 x = 0; x < fieldCount; x++) + if (!_meta->HasIndexFieldInData()) + offset += 4; + + for (uint32 x = 0; x < fieldCount; ++x) { - switch (format[x]) + for (uint32 z = 0; z < _meta->ArraySizes[x]; ++z) { - case FT_FLOAT: - case FT_IND: - case FT_INT: - case FT_SORT: - offset += 4; - break; - case FT_BYTE: - offset += 1; - break; - case FT_LONG: - offset += 8; - break; - case FT_SHORT: - offset += 2; - break; - case FT_STRING: + switch (_meta->Types[x]) { - // fill only not filled entries - LocalizedString* db2str = *(LocalizedString**)(&dataValue[offset]); - if (db2str->Str[locale] == nullStr) - if (char* str = AddString(&db2str->Str[locale], fields[1 + stringFieldNumInRecord].GetString())) - stringPool.push_back(str); - - ++stringFieldNumInRecord; - offset += sizeof(char*); - break; + case FT_FLOAT: + case FT_INT: + offset += 4; + break; + case FT_BYTE: + offset += 1; + break; + case FT_SHORT: + offset += 2; + break; + case FT_STRING: + { + // fill only not filled entries + LocalizedString* db2str = *(LocalizedString**)(&dataValue[offset]); + if (db2str->Str[locale] == nullStr) + if (char* str = AddString(&db2str->Str[locale], fields[1 + stringFieldNumInRecord].GetString())) + stringPool.push_back(str); + + ++stringFieldNumInRecord; + offset += sizeof(char*); + break; + } + default: + ASSERT(false, "Unknown format character '%c' found in %s meta", _meta->Types[x], _storageName.c_str()); + break; } } } diff --git a/src/server/shared/DataStores/DB2SparseStorageLoader.h b/src/server/shared/DataStores/DB2SparseStorageLoader.h index ac75e6b82d5..0936947ea6a 100644 --- a/src/server/shared/DataStores/DB2SparseStorageLoader.h +++ b/src/server/shared/DataStores/DB2SparseStorageLoader.h @@ -18,13 +18,13 @@ #ifndef DB2_SPARSE_FILE_LOADER_H #define DB2_SPARSE_FILE_LOADER_H -#include "Define.h" +#include "DB2Meta.h" #include "Utilities/ByteConverter.h" #include "Implementation/HotfixDatabase.h" #include <unordered_map> #include <vector> -class IndexTable +class TC_SHARED_API IndexTable { public: virtual void Insert(uint32 index, char* data) const = 0; @@ -54,24 +54,22 @@ private: std::unordered_map<uint32, T const*>& _indexTable; }; -class DB2SparseFileLoader +class TC_SHARED_API DB2SparseFileLoader { public: DB2SparseFileLoader(); ~DB2SparseFileLoader(); - bool Load(const char *filename); + bool Load(char const* filename, DB2Meta const* meta); uint32 GetNumRows() const { return recordCount; } uint32 GetCols() const { return fieldCount; } - uint32 GetHash() const { return tableHash; } - uint32 GetBuild() const { return build; } + uint32 GetTableHash() const { return tableHash; } + uint32 GetLayoutHash() const { return layoutHash; } bool IsLoaded() const { return (data != NULL); } - char* AutoProduceData(const char* fmt, IndexTable const& indexTable, uint32 locale, std::vector<char*>& stringPool); - char* AutoProduceStrings(const char* fmt, char* dataTable, uint32 locale); - static uint32 GetFormatRecordSize(const char * format); - static uint32 GetFormatStringFieldCount(const char * format); - static uint32 GetFormatLocalizedStringFieldCount(const char * format); + char* AutoProduceData(IndexTable const& indexTable, uint32 locale, std::vector<char*>& stringPool); + char* AutoProduceStrings(char* dataTable, uint32 locale); + private: #pragma pack(push, 1) struct OffsetTableEntry @@ -79,9 +77,15 @@ private: uint32 FileOffset; uint16 RecordSize; }; + struct FieldEntry + { + uint16 UnusedBits; + uint16 Offset; + }; #pragma pack(pop) char const* fileName; + DB2Meta const* meta; // WDB2 / WCH2 fields uint32 recordSize; @@ -89,30 +93,31 @@ private: uint32 fieldCount; uint32 offsetsPos; uint32 tableHash; - uint32 build; - uint32 unk1; + uint32 layoutHash; uint32 minIndex; uint32 maxIndex; uint32 localeMask; uint32 copyIdSize; uint32 metaFlags; + FieldEntry* fields; uint32 dataStart; unsigned char* data; OffsetTableEntry* offsets; }; -class DB2SparseDatabaseLoader +class TC_SHARED_API DB2SparseDatabaseLoader { public: - explicit DB2SparseDatabaseLoader(std::string const& storageName) : _storageName(storageName) { } + DB2SparseDatabaseLoader(std::string const& storageName, DB2Meta const* meta) : _storageName(storageName), _meta(meta) { } - char* Load(const char* format, HotfixDatabaseStatements preparedStatement, IndexTable const& indexTable, std::vector<char*>& stringPool); - void LoadStrings(const char* format, HotfixDatabaseStatements preparedStatement, uint32 locale, IndexTable const& indexTable, std::vector<char*>& stringPool); + char* Load(HotfixDatabaseStatements preparedStatement, IndexTable const& indexTable, std::vector<char*>& stringPool); + void LoadStrings(HotfixDatabaseStatements preparedStatement, uint32 locale, IndexTable const& indexTable, std::vector<char*>& stringPool); static char* AddString(char const** holder, std::string const& value); private: std::string _storageName; + DB2Meta const* _meta; }; #endif diff --git a/src/server/shared/DataStores/DB2StorageLoader.cpp b/src/server/shared/DataStores/DB2StorageLoader.cpp index 56a8dbbed65..0f45b75c8d6 100644 --- a/src/server/shared/DataStores/DB2StorageLoader.cpp +++ b/src/server/shared/DataStores/DB2StorageLoader.cpp @@ -23,28 +23,28 @@ DB2FileLoader::DB2FileLoader() { fileName = nullptr; + meta = nullptr; recordSize = 0; recordCount = 0; fieldCount = 0; stringSize = 0; tableHash = 0; - build = 0; - unk1 = 0; + layoutHash = 0; minIndex = 0; maxIndex = 0; localeMask = 0; copyIdSize = 0; - fieldsOffset = nullptr; data = nullptr; stringTable = nullptr; idTable = nullptr; idTableSize = 0; copyTable = nullptr; + fields = nullptr; } -bool DB2FileLoader::Load(const char *filename, const char *fmt) +bool DB2FileLoader::Load(char const* filename, DB2Meta const* meta) { if (data) { @@ -57,6 +57,7 @@ bool DB2FileLoader::Load(const char *filename, const char *fmt) return false; fileName = filename; + this->meta = meta; uint32 header; if (fread(&header, 4, 1, f) != 1) // Signature { @@ -66,10 +67,10 @@ bool DB2FileLoader::Load(const char *filename, const char *fmt) EndianConvert(header); - if (header != 0x34424457) + if (header != 0x35424457) { fclose(f); - return false; //'WDB4' + return false; //'WDB5' } if (fread(&recordCount, 4, 1, f) != 1) // Number of records @@ -112,21 +113,13 @@ bool DB2FileLoader::Load(const char *filename, const char *fmt) EndianConvert(tableHash); - if (fread(&build, 4, 1, f) != 1) // Build + if (fread(&layoutHash, 4, 1, f) != 1) // Build { fclose(f); return false; } - EndianConvert(build); - - if (fread(&unk1, 4, 1, f) != 1) // Unknown WDB2 - { - fclose(f); - return false; - } - - EndianConvert(unk1); + EndianConvert(layoutHash); if (fread(&minIndex, 4, 1, f) != 1) // MinIndex WDB2 { @@ -168,26 +161,17 @@ bool DB2FileLoader::Load(const char *filename, const char *fmt) EndianConvert(metaFlags); - if (fmt[0] == FT_SORT) + ASSERT((meta->IndexField == -1) || (meta->IndexField == (metaFlags >> 16))); + + fields = new FieldEntry[fieldCount]; + if (fread(fields, fieldCount * sizeof(FieldEntry), 1, f) != 1) { - idTableSize = recordCount * sizeof(uint32); - ++fmt; + fclose(f); + return false; } - fieldsOffset = new uint32[fieldCount]; - fieldsOffset[0] = 0; - for (uint32 i = 1; i < fieldCount; i++) - { - fieldsOffset[i] = fieldsOffset[i - 1]; - if (fmt[i - 1] == FT_BYTE) // byte fields - fieldsOffset[i] += 1; - else if (fmt[i - 1] == FT_LONG) - fieldsOffset[i] += 8; - else if (fmt[i - 1] == FT_SHORT) - fieldsOffset[i] += 2; - else // 4 byte fields (int32/float/strings) - fieldsOffset[i] += 4; - } + if (!meta->HasIndexFieldInData()) + idTableSize = recordCount * sizeof(uint32); data = new unsigned char[recordSize * recordCount + stringSize]; stringTable = data + recordSize * recordCount; @@ -227,7 +211,7 @@ DB2FileLoader::~DB2FileLoader() delete[] data; delete[] idTable; delete[] copyTable; - delete[] fieldsOffset; + delete[] fields; } DB2FileLoader::Record DB2FileLoader::getRecord(size_t id) @@ -236,181 +220,98 @@ DB2FileLoader::Record DB2FileLoader::getRecord(size_t id) return Record(*this, data + id * recordSize); } -uint32 DB2FileLoader::GetFormatRecordSize(const char * format, int32* index_pos) -{ - uint32 recordsize = 0; - int32 i = -1; - for (uint32 x = 0; format[x]; ++x) - { - switch (format[x]) - { - case FT_FLOAT: - case FT_INT: - recordsize += 4; - break; - case FT_STRING: - case FT_STRING_NOT_LOCALIZED: - recordsize += sizeof(char*); - break; - case FT_SORT: - case FT_IND: - i = x; - recordsize += 4; - break; - case FT_BYTE: - recordsize += 1; - break; - case FT_LONG: - recordsize += 8; - break; - case FT_SHORT: - recordsize += 2; - break; - } - } - - if (index_pos) - *index_pos = i; - - return recordsize; -} - -uint32 DB2FileLoader::GetFormatStringFieldCount(const char* format) -{ - uint32 stringfields = 0; - for (uint32 x = 0; format[x]; ++x) - if (format[x] == FT_STRING || format[x] == FT_STRING_NOT_LOCALIZED) - ++stringfields; - - return stringfields; -} - -uint32 DB2FileLoader::GetFormatLocalizedStringFieldCount(char const* format) -{ - uint32 stringfields = 0; - for (uint32 x = 0; format[x]; ++x) - if (format[x] == FT_STRING) - ++stringfields; - - return stringfields; -} - -char* DB2FileLoader::AutoProduceData(const char* format, uint32& records, char**& indexTable) +char* DB2FileLoader::AutoProduceData(uint32& records, char**& indexTable) { typedef char* ptr; - if (strlen(format) != fieldCount + (format[0] == FT_SORT ? 1 : 0)) + if (meta->FieldCount != fieldCount) return NULL; //get struct size and index pos - int32 indexField; - uint32 recordsize = GetFormatRecordSize(format, &indexField); + uint32 indexField = meta->GetIndexField(); + uint32 recordsize = meta->GetRecordSize(); - if (indexField >= 0) + uint32 maxi = 0; + //find max index + if (!idTableSize) { - uint32 maxi = 0; - //find max index - if (!idTableSize) - { - for (uint32 y = 0; y < recordCount; ++y) - { - uint32 ind = getRecord(y).getUInt(indexField); - if (ind > maxi) - maxi = ind; - } - } - else + for (uint32 y = 0; y < recordCount; ++y) { - for (uint32 y = 0; y < recordCount; ++y) - { - uint32 ind = ((uint32*)idTable)[y]; - if (ind > maxi) - maxi = ind; - } + uint32 ind = getRecord(y).getUInt(indexField, 0); + if (ind > maxi) + maxi = ind; } - for (uint32 y = 0; y < copyIdSize; y += 8) + } + else + { + for (uint32 y = 0; y < recordCount; ++y) { - uint32 ind = *((uint32*)(copyTable + y)); + uint32 ind = ((uint32*)idTable)[y]; if (ind > maxi) maxi = ind; } - - ++maxi; - records = maxi; - indexTable = new ptr[maxi]; - memset(indexTable, 0, maxi * sizeof(ptr)); } - else + + for (uint32 y = 0; y < copyIdSize; y += 8) { - ASSERT(!copyIdSize, "Storage %s uses id copy table - must be indexed!", fileName); - records = recordCount; - indexTable = new ptr[recordCount]; + uint32 ind = *((uint32*)(copyTable + y)); + if (ind > maxi) + maxi = ind; } + ++maxi; + records = maxi; + indexTable = new ptr[maxi]; + memset(indexTable, 0, maxi * sizeof(ptr)); + char* dataTable = new char[(recordCount + (copyIdSize / 8)) * recordsize]; uint32 offset = 0; for (uint32 y = 0; y < recordCount; y++) { - uint32 indexVal; - if (indexField >= 0) - indexVal = !idTableSize ? getRecord(y).getUInt(indexField) : ((uint32*)idTable)[y]; - else - indexVal = y; + uint32 indexVal = meta->HasIndexFieldInData() ? getRecord(y).getUInt(indexField, 0) : ((uint32*)idTable)[y]; indexTable[indexVal] = &dataTable[offset]; - uint32 x = 0; - for (char const* fmt = format; *fmt != '\0'; ++fmt) + if (!meta->HasIndexFieldInData()) { - switch (*fmt) - { - case FT_FLOAT: - *((float*)(&dataTable[offset])) = getRecord(y).getFloat(x++); - offset += 4; - break; - case FT_IND: - case FT_INT: - *((uint32*)(&dataTable[offset])) = getRecord(y).getUInt(x++); - offset += 4; - break; - case FT_BYTE: - *((uint8*)(&dataTable[offset])) = getRecord(y).getUInt8(x++); - offset += 1; - break; - case FT_LONG: - *((uint64*)(&dataTable[offset])) = getRecord(y).getUInt64(x++); - offset += 8; - break; - case FT_SHORT: - *((uint16*)(&dataTable[offset])) = getRecord(y).getUInt16(x++); - offset += 2; - break; - case FT_STRING: - case FT_STRING_NOT_LOCALIZED: - *((char**)(&dataTable[offset])) = nullptr; // will be replaces non-empty or "" strings in AutoProduceStrings - offset += sizeof(char*); - ++x; - break; - case FT_SORT: - *((uint32*)(&dataTable[offset])) = indexVal; - offset += 4; - break; - } + *((uint32*)(&dataTable[offset])) = indexVal; + offset += 4; } - } - uint32* copyIds = (uint32*)copyTable; - for (uint32 c = 0; c < copyIdSize / 4; c += 2) - { - uint32 to = copyIds[c]; - uint32 from = copyIds[c + 1]; - - if (from && from < records && indexTable[from]) + Record rec = getRecord(y); + for (uint32 x = 0; x < fieldCount; ++x) { - indexTable[to] = &dataTable[offset]; - memcpy(indexTable[to], indexTable[from], recordsize); - offset += recordsize; + for (uint32 z = 0; z < meta->ArraySizes[x]; ++z) + { + switch (meta->Types[x]) + { + case FT_FLOAT: + *((float*)(&dataTable[offset])) = rec.getFloat(x, z); + offset += 4; + break; + case FT_INT: + *((uint32*)(&dataTable[offset])) = rec.getUInt(x, z); + offset += 4; + break; + case FT_BYTE: + *((uint8*)(&dataTable[offset])) = rec.getUInt8(x, z); + offset += 1; + break; + case FT_SHORT: + *((uint16*)(&dataTable[offset])) = rec.getUInt16(x, z); + offset += 2; + break; + case FT_STRING: + case FT_STRING_NOT_LOCALIZED: + *((char**)(&dataTable[offset])) = nullptr; // will be replaced by non-empty or "" strings in AutoProduceStrings + offset += sizeof(char*); + break; + default: + ASSERT(false, "Unknown format character '%c' found in %s meta", meta->Types[x], fileName); + break; + } + } } } @@ -419,21 +320,20 @@ char* DB2FileLoader::AutoProduceData(const char* format, uint32& records, char** static char const* const nullStr = ""; -char* DB2FileLoader::AutoProduceStringsArrayHolders(const char* format, char* dataTable) +char* DB2FileLoader::AutoProduceStringsArrayHolders(char* dataTable) { - if (strlen(format) != fieldCount + (format[0] == FT_SORT ? 1 : 0)) + if (meta->FieldCount != fieldCount) return nullptr; // we store flat holders pool as single memory block - std::size_t stringFields = GetFormatStringFieldCount(format); + std::size_t stringFields = meta->GetStringFieldCount(false); if (!stringFields) return nullptr; - std::size_t localizedStringFields = GetFormatLocalizedStringFieldCount(format); + std::size_t localizedStringFields = meta->GetStringFieldCount(true); // each string field at load have array of string for each locale - std::size_t stringHolderSize = sizeof(char*) * TOTAL_LOCALES; - std::size_t stringHoldersRecordPoolSize = localizedStringFields * stringHolderSize + (stringFields - localizedStringFields) * sizeof(char*); + std::size_t stringHoldersRecordPoolSize = localizedStringFields * sizeof(LocalizedString) + (stringFields - localizedStringFields) * sizeof(char*); std::size_t stringHoldersPoolSize = stringHoldersRecordPoolSize * recordCount; char* stringHoldersPool = new char[stringHoldersPoolSize]; @@ -449,41 +349,43 @@ char* DB2FileLoader::AutoProduceStringsArrayHolders(const char* format, char* da { uint32 stringFieldOffset = 0; - for (char const* fmt = format; *fmt != '\0'; ++fmt) + if (!meta->HasIndexFieldInData()) + offset += 4; + + for (uint32 x = 0; x < fieldCount; ++x) { - switch (*fmt) + for (uint32 z = 0; z < meta->ArraySizes[x]; ++z) { - case FT_FLOAT: - case FT_IND: - case FT_INT: - case FT_SORT: - offset += 4; - break; - case FT_BYTE: - offset += 1; - break; - case FT_LONG: - offset += 8; - break; - case FT_SHORT: - offset += 2; - break; - case FT_STRING: - case FT_STRING_NOT_LOCALIZED: + switch (meta->Types[x]) { - // init db2 string field slots by pointers to string holders - char const*** slot = (char const***)(&dataTable[offset]); - *slot = (char const**)(&stringHoldersPool[stringHoldersRecordPoolSize * y + stringFieldOffset]); - if (*fmt == FT_STRING) - stringFieldOffset += stringHolderSize; - else - ++stringFieldOffset; - - offset += sizeof(char*); - break; + case FT_FLOAT: + case FT_INT: + offset += 4; + break; + case FT_BYTE: + offset += 1; + break; + case FT_SHORT: + offset += 2; + break; + case FT_STRING: + case FT_STRING_NOT_LOCALIZED: + { + // init db2 string field slots by pointers to string holders + char const*** slot = (char const***)(&dataTable[offset]); + *slot = (char const**)(&stringHoldersPool[stringHoldersRecordPoolSize * y + stringFieldOffset]); + if (meta->Types[x] == FT_STRING) + stringFieldOffset += sizeof(LocalizedString); + else + stringFieldOffset += sizeof(char*); + + offset += sizeof(char*); + break; + } + default: + ASSERT(false, "Unknown format character '%c' found in %s meta", meta->Types[x], fileName); + break; } - default: - ASSERT(false, "unknown format character %c", *fmt); } } } @@ -492,9 +394,9 @@ char* DB2FileLoader::AutoProduceStringsArrayHolders(const char* format, char* da return stringHoldersPool; } -char* DB2FileLoader::AutoProduceStrings(const char* format, char* dataTable, uint32 locale) +char* DB2FileLoader::AutoProduceStrings(char* dataTable, uint32 locale) { - if (strlen(format) != fieldCount + (format[0] == FT_SORT ? 1 : 0)) + if (meta->FieldCount != fieldCount) return nullptr; if (!(localeMask & (1 << locale))) @@ -521,86 +423,110 @@ char* DB2FileLoader::AutoProduceStrings(const char* format, char* dataTable, uin for (uint32 y = 0; y < recordCount; y++) { - uint32 x = 0; - for (char const* fmt = format; *fmt != '\0'; ++fmt) + if (!meta->HasIndexFieldInData()) + offset += 4; + + for (uint32 x = 0; x < fieldCount; ++x) { - switch (*fmt) + for (uint32 z = 0; z < meta->ArraySizes[x]; ++z) { - case FT_FLOAT: - case FT_IND: - case FT_INT: - case FT_SORT: - offset += 4; - break; - case FT_BYTE: - offset += 1; - break; - case FT_LONG: - offset += 8; - break; - case FT_SHORT: - offset += 2; - break; - case FT_STRING: + switch (meta->Types[x]) { - // fill only not filled entries - LocalizedString* db2str = *(LocalizedString**)(&dataTable[offset]); - if (db2str->Str[locale] == nullStr) + case FT_FLOAT: + case FT_INT: + offset += 4; + break; + case FT_BYTE: + offset += 1; + break; + case FT_SHORT: + offset += 2; + break; + case FT_STRING: { - char const* st = getRecord(y).getString(x); - db2str->Str[locale] = stringPool + (st - (char const*)stringTable); - } + // fill only not filled entries + LocalizedString* db2str = *(LocalizedString**)(&dataTable[offset]); + if (db2str->Str[locale] == nullStr) + { + char const* st = getRecord(y).getString(x, z); + db2str->Str[locale] = stringPool + (st - (char const*)stringTable); + } - offset += sizeof(char*); - break; - } - case FT_STRING_NOT_LOCALIZED: - { - char** db2str = (char**)(&dataTable[offset]); - char const* st = getRecord(y).getString(x); - *db2str = stringPool + (st - (char const*)stringTable); - offset += sizeof(char*); - break; + offset += sizeof(char*); + break; + } + case FT_STRING_NOT_LOCALIZED: + { + char** db2str = (char**)(&dataTable[offset]); + char const* st = getRecord(y).getString(x, z); + *db2str = stringPool + (st - (char const*)stringTable); + offset += sizeof(char*); + break; + } + default: + ASSERT(false, "Unknown format character '%c' found in %s meta", meta->Types[x], fileName); + break; } } - - if (*fmt != FT_SORT) - ++x; } } return stringPool; } -char* DB2DatabaseLoader::Load(const char* format, HotfixDatabaseStatements preparedStatement, uint32& records, char**& indexTable, char*& stringHolders, std::vector<char*>& stringPool) +void DB2FileLoader::AutoProduceRecordCopies(uint32 records, char** indexTable, char* dataTable) +{ + uint32 recordsize = meta->GetRecordSize(); + uint32 offset = recordCount * recordsize; + uint32* copyIds = (uint32*)copyTable; + for (uint32 c = 0; c < copyIdSize / 4; c += 2) + { + uint32 to = copyIds[c]; + uint32 from = copyIds[c + 1]; + + if (from && from < records && indexTable[from]) + { + indexTable[to] = &dataTable[offset]; + memcpy(indexTable[to], indexTable[from], recordsize); + + if (meta->HasIndexFieldInData()) + *((uint32*)(&dataTable[offset + fields[meta->GetIndexField()].Offset])) = to; + else + *((uint32*)(&dataTable[offset])) = to; + + offset += recordsize; + } + } +} + +char* DB2DatabaseLoader::Load(HotfixDatabaseStatements preparedStatement, uint32& records, char**& indexTable, char*& stringHolders, std::vector<char*>& stringPool) { // Even though this query is executed only once, prepared statement is used to send data from mysql server in binary format PreparedQueryResult result = HotfixDatabase.Query(HotfixDatabase.GetPreparedStatement(preparedStatement)); if (!result) return nullptr; - uint32 const fieldCount = strlen(format); - if (fieldCount != result->GetFieldCount()) + if (_meta->GetDbFieldCount() != result->GetFieldCount()) return nullptr; // get struct size and index pos - int32 indexField; - uint32 recordSize = DB2FileLoader::GetFormatRecordSize(format, &indexField); + uint32 indexField = _meta->GetDbIndexField(); + uint32 recordSize = _meta->GetRecordSize(); // we store flat holders pool as single memory block - size_t stringFields = DB2FileLoader::GetFormatStringFieldCount(format); + std::size_t stringFields = _meta->GetStringFieldCount(false); + std::size_t localizedStringFields = _meta->GetStringFieldCount(true); // each string field at load have array of string for each locale - size_t stringHolderSize = sizeof(char*) * TOTAL_LOCALES; - size_t stringHoldersRecordPoolSize = stringFields * stringHolderSize; + std::size_t stringHoldersRecordPoolSize = localizedStringFields * sizeof(LocalizedString) + (stringFields - localizedStringFields) * sizeof(char*); if (stringFields) { - size_t stringHoldersPoolSize = stringHoldersRecordPoolSize * result->GetRowCount(); + std::size_t stringHoldersPoolSize = stringHoldersRecordPoolSize * result->GetRowCount(); stringHolders = new char[stringHoldersPoolSize]; // DB2 strings expected to have at least empty string - for (size_t i = 0; i < stringHoldersPoolSize / sizeof(char*); ++i) + for (std::size_t i = 0; i < stringHoldersPoolSize / sizeof(char*); ++i) ((char const**)stringHolders)[i] = nullStr; } else @@ -608,15 +534,9 @@ char* DB2DatabaseLoader::Load(const char* format, HotfixDatabaseStatements prepa // Resize index table // database query *MUST* contain ORDER BY `index_field` DESC clause - uint32 indexTableSize; - if (indexField >= 0) - { - indexTableSize = (*result)[indexField].GetUInt32() + 1; - if (indexTableSize < records) - indexTableSize = records; - } - else - indexTableSize = records + result->GetRowCount(); + uint32 indexTableSize = (*result)[indexField].GetUInt32() + 1; + if (indexTableSize < records) + indexTableSize = records; if (indexTableSize > records) { @@ -636,13 +556,9 @@ char* DB2DatabaseLoader::Load(const char* format, HotfixDatabaseStatements prepa { Field* fields = result->Fetch(); uint32 offset = 0; - uint32 stringFieldNumInRecord = 0; + uint32 stringFieldOffset = 0; - uint32 indexValue; - if (indexField >= 0) - indexValue = fields[indexField].GetUInt32(); - else - indexValue = records + rec; + uint32 indexValue = fields[indexField].GetUInt32(); // Attempt to overwrite existing data char* dataValue = indexTable[indexValue]; @@ -652,63 +568,69 @@ char* DB2DatabaseLoader::Load(const char* format, HotfixDatabaseStatements prepa dataValue = &tempDataTable[newRecords++ * recordSize]; } - for (uint32 f = 0; f < fieldCount; f++) + uint32 f = 0; + if (!_meta->HasIndexFieldInData()) + { + *((uint32*)(&dataValue[offset])) = indexValue; + offset += 4; + ++f; + } + + for (uint32 x = 0; x < _meta->FieldCount; ++x) { - switch (format[f]) + for (uint32 z = 0; z < _meta->ArraySizes[x]; ++z) { - case FT_FLOAT: - *((float*)(&dataValue[offset])) = fields[f].GetFloat(); - offset += 4; - break; - case FT_IND: - case FT_INT: - *((int32*)(&dataValue[offset])) = fields[f].GetInt32(); - offset += 4; - break; - case FT_BYTE: - *((int8*)(&dataValue[offset])) = fields[f].GetInt8(); - offset += 1; - break; - case FT_LONG: - *((int64*)(&dataValue[offset])) = fields[f].GetInt64(); - offset += 8; - break; - case FT_SHORT: - *((int16*)(&dataValue[offset])) = fields[f].GetInt16(); - offset += 2; - break; - case FT_STRING: + switch (_meta->Types[x]) { - LocalizedString** slot = (LocalizedString**)(&dataValue[offset]); - *slot = (LocalizedString*)(&stringHolders[stringHoldersRecordPoolSize * rec + stringHolderSize * stringFieldNumInRecord]); - ASSERT(*slot); + case FT_FLOAT: + *((float*)(&dataValue[offset])) = fields[f].GetFloat(); + offset += 4; + break; + case FT_INT: + *((int32*)(&dataValue[offset])) = fields[f].GetInt32(); + offset += 4; + break; + case FT_BYTE: + *((int8*)(&dataValue[offset])) = fields[f].GetInt8(); + offset += 1; + break; + case FT_SHORT: + *((int16*)(&dataValue[offset])) = fields[f].GetInt16(); + offset += 2; + break; + case FT_STRING: + { + LocalizedString** slot = (LocalizedString**)(&dataValue[offset]); + *slot = (LocalizedString*)(&stringHolders[stringHoldersRecordPoolSize * rec + stringFieldOffset]); + ASSERT(*slot); - // Value in database in main table field must be for enUS locale - if (char* str = AddString(&(*slot)->Str[LOCALE_enUS], fields[f].GetString())) - stringPool.push_back(str); + // Value in database in main table field must be for enUS locale + if (char* str = AddString(&(*slot)->Str[LOCALE_enUS], fields[f].GetString())) + stringPool.push_back(str); - ++stringFieldNumInRecord; - offset += sizeof(char*); - break; - } - case FT_STRING_NOT_LOCALIZED: - { - char const** slot = (char const**)(&dataValue[offset]); - *slot = (char*)(&stringHolders[stringHoldersRecordPoolSize * rec + stringHolderSize * stringFieldNumInRecord]); - ASSERT(*slot); + stringFieldOffset += sizeof(LocalizedString); + offset += sizeof(char*); + break; + } + case FT_STRING_NOT_LOCALIZED: + { + char const** slot = (char const**)(&dataValue[offset]); + *slot = (char*)(&stringHolders[stringHoldersRecordPoolSize * rec + stringFieldOffset]); + ASSERT(*slot); - // Value in database in main table field must be for enUS locale - if (char* str = AddString(slot, fields[f].GetString())) - stringPool.push_back(str); + // Value in database in main table field must be for enUS locale + if (char* str = AddString(slot, fields[f].GetString())) + stringPool.push_back(str); - ++stringFieldNumInRecord; - offset += sizeof(char*); - break; + stringFieldOffset += sizeof(char*); + offset += sizeof(char*); + break; + } + default: + ASSERT(false, "Unknown format character '%c' found in %s meta", _meta->Types[x], _storageName.c_str()); + break; } - case FT_SORT: - *((int32*)(&dataValue[offset])) = indexValue; - offset += 4; - break; + ++f; } } @@ -739,7 +661,7 @@ char* DB2DatabaseLoader::Load(const char* format, HotfixDatabaseStatements prepa return dataTable; } -void DB2DatabaseLoader::LoadStrings(const char* format, HotfixDatabaseStatements preparedStatement, uint32 locale, char**& indexTable, std::vector<char*>& stringPool) +void DB2DatabaseLoader::LoadStrings(HotfixDatabaseStatements preparedStatement, uint32 locale, uint32 records, char** indexTable, std::vector<char*>& stringPool) { PreparedStatement* stmt = HotfixDatabase.GetPreparedStatement(preparedStatement); stmt->setString(0, localeNames[locale]); @@ -747,14 +669,12 @@ void DB2DatabaseLoader::LoadStrings(const char* format, HotfixDatabaseStatements if (!result) return; - size_t stringFields = DB2FileLoader::GetFormatLocalizedStringFieldCount(format); + std::size_t stringFields = _meta->GetStringFieldCount(true); if (result->GetFieldCount() != stringFields + 1 /*ID*/) return; - uint32 const fieldCount = strlen(format); - int32 indexField; - uint32 recordSize = DB2FileLoader::GetFormatRecordSize(format, &indexField); - ASSERT(indexField >= 0, "DB2Storage must be indexed to load localized strings"); + uint32 fieldCount = _meta->FieldCount; + uint32 recordSize = _meta->GetRecordSize(); do { @@ -763,39 +683,49 @@ void DB2DatabaseLoader::LoadStrings(const char* format, HotfixDatabaseStatements uint32 stringFieldNumInRecord = 0; uint32 indexValue = fields[0].GetUInt32(); + if (indexValue >= records) + continue; + // Attempt to overwrite existing data if (char* dataValue = indexTable[indexValue]) { - for (uint32 x = 0; x < fieldCount; x++) + if (!_meta->HasIndexFieldInData()) + offset += 4; + + for (uint32 x = 0; x < fieldCount; ++x) { - switch (format[x]) + for (uint32 z = 0; z < _meta->ArraySizes[x]; ++z) { - case FT_FLOAT: - case FT_IND: - case FT_INT: - case FT_SORT: - offset += 4; - break; - case FT_BYTE: - offset += 1; - break; - case FT_LONG: - offset += 8; - break; - case FT_SHORT: - offset += 2; - break; - case FT_STRING: + switch (_meta->Types[x]) { - // fill only not filled entries - LocalizedString* db2str = *(LocalizedString**)(&dataValue[offset]); - if (db2str->Str[locale] == nullStr) - if (char* str = AddString(&db2str->Str[locale], fields[1 + stringFieldNumInRecord].GetString())) - stringPool.push_back(str); - - ++stringFieldNumInRecord; - offset += sizeof(char*); - break; + case FT_FLOAT: + case FT_INT: + offset += 4; + break; + case FT_BYTE: + offset += 1; + break; + case FT_SHORT: + offset += 2; + break; + case FT_STRING: + { + // fill only not filled entries + LocalizedString* db2str = *(LocalizedString**)(&dataValue[offset]); + if (db2str->Str[locale] == nullStr) + if (char* str = AddString(&db2str->Str[locale], fields[1 + stringFieldNumInRecord].GetString())) + stringPool.push_back(str); + + ++stringFieldNumInRecord; + offset += sizeof(LocalizedString*); + break; + } + case FT_STRING_NOT_LOCALIZED: + offset += sizeof(char*); + break; + default: + ASSERT(false, "Unknown format character '%c' found in %s meta", _meta->Types[x], _storageName.c_str()); + break; } } } @@ -803,7 +733,7 @@ void DB2DatabaseLoader::LoadStrings(const char* format, HotfixDatabaseStatements ASSERT(offset == recordSize); } else - TC_LOG_ERROR("sql.sql", "Hotfix locale table for storage %s references row that does not exist %u!", _storageName.c_str(), indexValue); + TC_LOG_ERROR("sql.sql", "Hotfix locale table for storage %s references row that does not exist %u locale %s!", _storageName.c_str(), indexValue, localeNames[locale]); } while (result->NextRow()); diff --git a/src/server/shared/DataStores/DB2StorageLoader.h b/src/server/shared/DataStores/DB2StorageLoader.h index c84f38b74b9..b302a1afe7d 100644 --- a/src/server/shared/DataStores/DB2StorageLoader.h +++ b/src/server/shared/DataStores/DB2StorageLoader.h @@ -18,10 +18,10 @@ #ifndef DB2_FILE_LOADER_H #define DB2_FILE_LOADER_H -#include "Define.h" +#include "DB2Meta.h" #include "Utilities/ByteConverter.h" #include "Implementation/HotfixDatabase.h" -#include <cassert> +#include "Errors.h" #include <vector> class TC_SHARED_API DB2FileLoader @@ -30,53 +30,101 @@ class TC_SHARED_API DB2FileLoader DB2FileLoader(); ~DB2FileLoader(); - bool Load(const char *filename, const char *fmt); + bool Load(char const* filename, DB2Meta const* meta); class Record { public: - float getFloat(size_t field) const + float getFloat(uint32 field, uint32 arrayIndex) const { - assert(field < file.fieldCount); - float val = *reinterpret_cast<float*>(offset + file.GetOffset(field)); + ASSERT(field < file.fieldCount); + float val = *reinterpret_cast<float*>(offset + GetOffset(field) + arrayIndex * sizeof(float)); EndianConvert(val); return val; } - uint32 getUInt(size_t field) const - { - assert(field < file.fieldCount); - uint32 val = *reinterpret_cast<uint32*>(offset + file.GetOffset(field)); - EndianConvert(val); - return val; - } - uint8 getUInt8(size_t field) const + + uint32 getUInt(uint32 field, uint32 arrayIndex) const { - assert(field < file.fieldCount); - return *reinterpret_cast<uint8*>(offset + file.GetOffset(field)); + ASSERT(field < file.fieldCount); + return GetVarInt(field, GetByteSize(field), arrayIndex); } - uint64 getUInt64(size_t field) const + + uint8 getUInt8(uint32 field, uint32 arrayIndex) const { - assert(field < file.fieldCount); - uint64 val = *reinterpret_cast<uint64*>(offset + file.GetOffset(field)); - EndianConvert(val); - return val; + ASSERT(field < file.fieldCount); + ASSERT(GetByteSize(field) == 1); + return *reinterpret_cast<uint8*>(offset + GetOffset(field) + arrayIndex * sizeof(uint8)); } - uint16 getUInt16(size_t field) const + + uint16 getUInt16(uint32 field, uint32 arrayIndex) const { - assert(field < file.fieldCount); - uint16 val = *reinterpret_cast<uint16*>(offset + file.GetOffset(field)); + ASSERT(field < file.fieldCount); + ASSERT(GetByteSize(field) == 2); + uint16 val = *reinterpret_cast<uint16*>(offset + GetOffset(field) + arrayIndex * sizeof(uint16)); EndianConvert(val); return val; } - const char *getString(size_t field) const + + char const* getString(uint32 field, uint32 arrayIndex) const { - assert(field < file.fieldCount); - size_t stringOffset = getUInt(field); - assert(stringOffset < file.stringSize); + ASSERT(field < file.fieldCount); + uint32 stringOffset = *reinterpret_cast<uint32*>(offset + GetOffset(field) + arrayIndex * sizeof(uint32)); + EndianConvert(stringOffset); + ASSERT(stringOffset < file.stringSize); return reinterpret_cast<char*>(file.stringTable + stringOffset); } private: + uint16 GetOffset(uint32 field) const + { + ASSERT(field < file.fieldCount); + return file.fields[field].Offset; + } + + uint16 GetByteSize(uint32 field) const + { + ASSERT(field < file.fieldCount); + return 4 - file.fields[field].UnusedBits / 8; + } + + uint32 GetVarInt(uint32 field, uint16 size, uint32 arrayIndex) const + { + ASSERT(field < file.fieldCount); + switch (size) + { + case 1: + { + return *reinterpret_cast<uint8*>(offset + GetOffset(field) + arrayIndex * sizeof(uint8)); + } + case 2: + { + uint16 val = *reinterpret_cast<uint16*>(offset + GetOffset(field) + arrayIndex * sizeof(uint16)); + EndianConvert(val); + return val; + } + case 3: + { +#pragma pack(push, 1) + struct dbcint24 { uint8 v[3]; }; +#pragma pack(pop) + dbcint24 val = *reinterpret_cast<dbcint24*>(offset + GetOffset(field) + arrayIndex * sizeof(dbcint24)); + EndianConvert(val); + return uint32(val.v[0]) | (uint32(val.v[1]) << 8) | (uint32(val.v[2]) << 16); + } + case 4: + { + uint32 val = *reinterpret_cast<uint32*>(offset + GetOffset(field) + arrayIndex * sizeof(uint32)); + EndianConvert(val); + return val; + } + default: + break; + } + + ASSERT(false, "GetByteSize(field) < 4"); + return 0; + } + Record(DB2FileLoader &file_, unsigned char *offset_): offset(offset_), file(file_) {} unsigned char *offset; DB2FileLoader &file; @@ -86,22 +134,28 @@ class TC_SHARED_API DB2FileLoader // Get record by id Record getRecord(size_t id); - /// Get begin iterator over records uint32 GetNumRows() const { return recordCount;} uint32 GetCols() const { return fieldCount; } - uint32 GetOffset(size_t id) const { return (fieldsOffset != NULL && id < fieldCount) ? fieldsOffset[id] : 0; } - uint32 GetHash() const { return tableHash; } - uint32 GetBuild() const { return build; } + uint32 GetTableHash() const { return tableHash; } + uint32 GetLayoutHash() const { return layoutHash; } bool IsLoaded() const { return (data != NULL); } - char* AutoProduceData(const char* fmt, uint32& count, char**& indexTable); - char* AutoProduceStringsArrayHolders(const char* fmt, char* dataTable); - char* AutoProduceStrings(const char* fmt, char* dataTable, uint32 locale); - static uint32 GetFormatRecordSize(const char * format, int32 * index_pos = NULL); - static uint32 GetFormatStringFieldCount(const char * format); - static uint32 GetFormatLocalizedStringFieldCount(const char * format); + char* AutoProduceData(uint32& count, char**& indexTable); + char* AutoProduceStringsArrayHolders(char* dataTable); + char* AutoProduceStrings(char* dataTable, uint32 locale); + void AutoProduceRecordCopies(uint32 records, char** indexTable, char* dataTable); + private: +#pragma pack(push, 1) + struct FieldEntry + { + uint16 UnusedBits; + uint16 Offset; + }; +#pragma pack(pop) + char const* fileName; + DB2Meta const* meta; // WDB2 / WCH2 fields uint32 recordSize; @@ -109,33 +163,33 @@ private: uint32 fieldCount; uint32 stringSize; uint32 tableHash; - uint32 build; - uint32 unk1; + uint32 layoutHash; uint32 minIndex; uint32 maxIndex; uint32 localeMask; uint32 copyIdSize; uint32 metaFlags; - uint32 *fieldsOffset; unsigned char* data; unsigned char* stringTable; unsigned char* idTable; uint32 idTableSize; unsigned char* copyTable; + FieldEntry* fields; }; class TC_SHARED_API DB2DatabaseLoader { public: - explicit DB2DatabaseLoader(std::string const& storageName) : _storageName(storageName) { } + DB2DatabaseLoader(std::string const& storageName, DB2Meta const* meta) : _storageName(storageName), _meta(meta) { } - char* Load(const char* format, HotfixDatabaseStatements preparedStatement, uint32& records, char**& indexTable, char*& stringHolders, std::vector<char*>& stringPool); - void LoadStrings(const char* format, HotfixDatabaseStatements preparedStatement, uint32 locale, char**& indexTable, std::vector<char*>& stringPool); + char* Load(HotfixDatabaseStatements preparedStatement, uint32& records, char**& indexTable, char*& stringHolders, std::vector<char*>& stringPool); + void LoadStrings(HotfixDatabaseStatements preparedStatement, uint32 locale, uint32 records, char** indexTable, std::vector<char*>& stringPool); static char* AddString(char const** holder, std::string const& value); private: std::string _storageName; + DB2Meta const* _meta; }; #endif diff --git a/src/server/shared/DataStores/DB2Store.h b/src/server/shared/DataStores/DB2Store.h index e1c05cfbbe7..e673b8a6a97 100644 --- a/src/server/shared/DataStores/DB2Store.h +++ b/src/server/shared/DataStores/DB2Store.h @@ -28,8 +28,8 @@ class DB2StorageBase { public: - DB2StorageBase(char const* fileName, char const* format, HotfixDatabaseStatements preparedStmtIndex) - : _tableHash(0), _build(0), _fileName(fileName), _fieldCount(0), _format(format), _dataTable(nullptr), _dataTableEx(nullptr), _hotfixStatement(preparedStmtIndex) { } + DB2StorageBase(char const* fileName, DB2Meta const* meta, HotfixDatabaseStatements preparedStmtIndex) + : _tableHash(0), _layoutHash(0), _fileName(fileName), _fieldCount(0), _meta(meta), _dataTable(nullptr), _dataTableEx(nullptr), _hotfixStatement(preparedStmtIndex) { } virtual ~DB2StorageBase() { @@ -39,9 +39,9 @@ public: delete[] strings; } - uint32 GetHash() const { return _tableHash; } + uint32 GetTableHash() const { return _tableHash; } - uint32 GetBuild() const { return _build; } + uint32 GetLayoutHash() const { return _layoutHash; } virtual bool HasRecord(uint32 id) const = 0; @@ -53,7 +53,7 @@ public: uint32 GetFieldCount() const { return _fieldCount; } - char const* GetFormat() const { return _format; } + DB2Meta const* GetMeta() const { return _meta; } virtual bool Load(std::string const& path, uint32 locale) = 0; virtual bool LoadStringsFrom(std::string const& path, uint32 locale) = 0; @@ -63,63 +63,67 @@ public: protected: void WriteRecordData(char const* entry, uint32 locale, ByteBuffer& buffer) const { - std::size_t fields = strlen(_format); - for (uint32 i = 0; i < fields; ++i) + if (!_meta->HasIndexFieldInData()) + entry += 4; + + for (uint32 i = 0; i < _meta->FieldCount; ++i) { - switch (_format[i]) + for (uint32 a = 0; a < _meta->ArraySizes[i]; ++a) { - case FT_IND: - case FT_INT: - buffer << *(uint32*)entry; - entry += 4; - break; - case FT_FLOAT: - buffer << *(float*)entry; - entry += 4; - break; - case FT_BYTE: - buffer << *(uint8*)entry; - entry += 1; - break; - case FT_STRING: + switch (_meta->Types[i]) { - LocalizedString* locStr = *(LocalizedString**)entry; - if (locStr->Str[locale][0] == '\0') - locale = 0; - - char const* str = locStr->Str[locale]; - std::size_t len = strlen(str); - buffer << uint16(len ? len + 1 : 0); - if (len) + case FT_INT: + buffer << *(uint32*)entry; + entry += 4; + break; + case FT_FLOAT: + buffer << *(float*)entry; + entry += 4; + break; + case FT_BYTE: + buffer << *(uint8*)entry; + entry += 1; + break; + case FT_STRING: { - buffer.append(str, len); - buffer << uint8(0); + LocalizedString* locStr = *(LocalizedString**)entry; + if (locStr->Str[locale][0] == '\0') + locale = 0; + + char const* str = locStr->Str[locale]; + std::size_t len = strlen(str); + buffer << uint16(len ? len + 1 : 0); + if (len) + { + buffer.append(str, len); + buffer << uint8(0); + } + entry += sizeof(LocalizedString*); + break; } - entry += sizeof(LocalizedString*); - break; - } - case FT_STRING_NOT_LOCALIZED: - { - char const* str = *(char const**)entry; - std::size_t len = strlen(str); - buffer << uint16(len ? len + 1 : 0); - if (len) + case FT_STRING_NOT_LOCALIZED: { - buffer.append(str, len); - buffer << uint8(0); + char const* str = *(char const**)entry; + std::size_t len = strlen(str); + buffer << uint16(len ? len + 1 : 0); + if (len) + { + buffer.append(str, len); + buffer << uint8(0); + } + entry += sizeof(char const*); + break; } - entry += sizeof(char const*); - break; } } } } uint32 _tableHash; - uint32 _build; + uint32 _layoutHash; std::string _fileName; uint32 _fieldCount; - char const* _format; + DB2Meta const* _meta; char* _dataTable; char* _dataTableEx; std::vector<char*> _stringPool; @@ -134,7 +138,7 @@ class DB2Storage : public DB2StorageBase public: typedef DBStorageIterator<T> iterator; - DB2Storage(char const* fileName, char const* format, HotfixDatabaseStatements preparedStmtIndex) : DB2StorageBase(fileName, format, preparedStmtIndex), + DB2Storage(char const* fileName, DB2Meta const* meta, HotfixDatabaseStatements preparedStmtIndex) : DB2StorageBase(fileName, meta, preparedStmtIndex), _indexTableSize(0) { _indexTable.AsT = NULL; @@ -161,26 +165,28 @@ public: { DB2FileLoader db2; // Check if load was successful, only then continue - if (!db2.Load((path + _fileName).c_str(), _format)) + if (!db2.Load((path + _fileName).c_str(), _meta)) return false; _fieldCount = db2.GetCols(); - _tableHash = db2.GetHash(); - _build = db2.GetBuild(); + _tableHash = db2.GetTableHash(); + _layoutHash = db2.GetLayoutHash(); // load raw non-string data - _dataTable = db2.AutoProduceData(_format, _indexTableSize, _indexTable.AsChar); + _dataTable = db2.AutoProduceData(_indexTableSize, _indexTable.AsChar); // create string holders for loaded string fields - if (char* stringHolders = db2.AutoProduceStringsArrayHolders(_format, _dataTable)) + if (char* stringHolders = db2.AutoProduceStringsArrayHolders(_dataTable)) { _stringPool.push_back(stringHolders); // load strings from db2 data - if (char* stringBlock = db2.AutoProduceStrings(_format, _dataTable, locale)) + if (char* stringBlock = db2.AutoProduceStrings(_dataTable, locale)) _stringPool.push_back(stringBlock); } + db2.AutoProduceRecordCopies(_indexTableSize, _indexTable.AsChar, _dataTable); + // error in db2 file at loading if NULL return _indexTable.AsT != NULL; } @@ -193,12 +199,12 @@ public: DB2FileLoader db2; // Check if load was successful, only then continue - if (!db2.Load((path + _fileName).c_str(), _format)) + if (!db2.Load((path + _fileName).c_str(), _meta)) return false; // load strings from another locale db2 data - if (DB2FileLoader::GetFormatLocalizedStringFieldCount(_format)) - if (char* stringBlock = db2.AutoProduceStrings(_format, _dataTable, locale)) + if (_meta->GetStringFieldCount(true)) + if (char* stringBlock = db2.AutoProduceStrings(_dataTable, locale)) _stringPool.push_back(stringBlock); return true; } @@ -206,17 +212,17 @@ public: void LoadFromDB() override { char* extraStringHolders = nullptr; - _dataTableEx = DB2DatabaseLoader(_fileName).Load(_format, _hotfixStatement, _indexTableSize, _indexTable.AsChar, extraStringHolders, _stringPool); + _dataTableEx = DB2DatabaseLoader(_fileName, _meta).Load(_hotfixStatement, _indexTableSize, _indexTable.AsChar, extraStringHolders, _stringPool); if (extraStringHolders) _stringPool.push_back(extraStringHolders); } void LoadStringsFromDB(uint32 locale) override { - if (!DB2FileLoader::GetFormatLocalizedStringFieldCount(_format)) + if (!_meta->GetStringFieldCount(true)) return; - DB2DatabaseLoader(_fileName).LoadStrings(_format, HotfixDatabaseStatements(_hotfixStatement + 1), locale, _indexTable.AsChar, _stringPool); + DB2DatabaseLoader(_fileName, _meta).LoadStrings(HotfixDatabaseStatements(_hotfixStatement + 1), locale, _indexTableSize, _indexTable.AsChar, _stringPool); } iterator begin() { return iterator(_indexTable.AsT, _indexTableSize); } @@ -249,8 +255,8 @@ public: T const* operator*() const { return Base::operator*().second; } } iterator; - DB2SparseStorage(char const* fileName, char const* format, HotfixDatabaseStatements preparedStmtIndex) - : DB2StorageBase(fileName, format, preparedStmtIndex) + DB2SparseStorage(char const* fileName, DB2Meta const* meta, HotfixDatabaseStatements preparedStmtIndex) + : DB2StorageBase(fileName, meta, preparedStmtIndex) { } @@ -282,15 +288,15 @@ public: { DB2SparseFileLoader db2; // Check if load was successful, only then continue - if (!db2.Load((path + _fileName).c_str())) + if (!db2.Load((path + _fileName).c_str(), _meta)) return false; _fieldCount = db2.GetCols(); - _tableHash = db2.GetHash(); - _build = db2.GetBuild(); + _tableHash = db2.GetTableHash(); + _layoutHash = db2.GetLayoutHash(); // load raw non-string data - _dataTable = db2.AutoProduceData(_format, IndexTableAdapter<T>(_indexTable), locale, _stringPool); + _dataTable = db2.AutoProduceData(IndexTableAdapter<T>(_indexTable), locale, _stringPool); // error in db2 file at loading if NULL return !_indexTable.empty(); @@ -304,27 +310,27 @@ public: DB2SparseFileLoader db2; // Check if load was successful, only then continue - if (!db2.Load((path + _fileName).c_str())) + if (!db2.Load((path + _fileName).c_str(), _meta)) return false; // load strings from another locale db2 data - if (DB2SparseFileLoader::GetFormatLocalizedStringFieldCount(_format)) - if (char* stringBlock = db2.AutoProduceStrings(_format, _dataTable, locale)) + if (_meta->GetStringFieldCount(true)) + if (char* stringBlock = db2.AutoProduceStrings(_dataTable, locale)) _stringPool.push_back(stringBlock); return true; } void LoadFromDB() override { - _dataTableEx = DB2SparseDatabaseLoader(_fileName).Load(_format, _hotfixStatement, IndexTableAdapter<T>(_indexTable), _stringPool); + _dataTableEx = DB2SparseDatabaseLoader(_fileName, _meta).Load(_hotfixStatement, IndexTableAdapter<T>(_indexTable), _stringPool); } void LoadStringsFromDB(uint32 locale) override { - if (!DB2SparseFileLoader::GetFormatLocalizedStringFieldCount(_format)) + if (!_meta->GetStringFieldCount(true)) return; - DB2SparseDatabaseLoader(_fileName).LoadStrings(_format, HotfixDatabaseStatements(_hotfixStatement + 1), locale, IndexTableAdapter<T>(_indexTable), _stringPool); + DB2SparseDatabaseLoader(_fileName, _meta).LoadStrings(HotfixDatabaseStatements(_hotfixStatement + 1), locale, IndexTableAdapter<T>(_indexTable), _stringPool); } iterator begin() const { return iterator(_indexTable.begin()); } diff --git a/src/tools/connection_patcher/Patterns/Windows.hpp b/src/tools/connection_patcher/Patterns/Windows.hpp index 5b2de204a7b..239d2a19b36 100644 --- a/src/tools/connection_patcher/Patterns/Windows.hpp +++ b/src/tools/connection_patcher/Patterns/Windows.hpp @@ -29,8 +29,8 @@ namespace Connection_Patcher { struct x86 { - static const std::vector<unsigned char> CertBundleCASCLocalFile() { return{ 0x6A, 0x00, 0x8D, 0x45, 0xFC, 0x50, 0x8D, 0x45, 0xF8, 0x50, 0x68 }; } - static const std::vector<unsigned char> CertBundleSignatureCheck() { return{ 0x59, 0x59, 0x84, 0xC0, 0x75, 0x08, 0x47, 0x83, 0xFF, 0x02 }; } + static const std::vector<unsigned char> CertBundleCASCLocalFile() { return{ 0x6A, 0x00, 0x50, 0x8D, 0x45, 0xF8, 0x50, 0x68 }; } + static const std::vector<unsigned char> CertBundleSignatureCheck() { return{ 0x59, 0x59, 0x84, 0xC0, 0x75, 0x08, 0x46, 0x83, 0xFE, 0x02 }; } }; struct x64 |