diff --git a/sql/updates/hotfixes/6.x/2016_10_09_00_hotfixes.sql b/sql/updates/hotfixes/6.x/2016_10_09_00_hotfixes.sql
new file mode 100644
index 00000000000..b594584b34d
--- /dev/null
+++ b/sql/updates/hotfixes/6.x/2016_10_09_00_hotfixes.sql
@@ -0,0 +1,25 @@
+ALTER TABLE `artifact_power` MODIFY `RelicType` int(11) NOT NULL DEFAULT '0' AFTER `ID`;
+ALTER TABLE `criteria_tree` MODIFY `OrderIndex` int(11) NOT NULL DEFAULT '0' AFTER `Operator`;
+ALTER TABLE `dungeon_encounter` MODIFY `OrderIndex` int(11) NOT NULL DEFAULT '0' AFTER `Flags`;
+ALTER TABLE `emotes` MODIFY `ClassMask` int(11) NOT NULL DEFAULT '0' AFTER `EmoteSoundID`;
+ALTER TABLE `emotes` MODIFY `RaceMask` int(11) NOT NULL DEFAULT '0' AFTER `ClassMask`;
+ALTER TABLE `garr_building` MODIFY `BuildDuration` int(11) NOT NULL DEFAULT '0' AFTER `GarrTypeID`;
+ALTER TABLE `garr_building` MODIFY `BonusAmount` int(11) NOT NULL DEFAULT '0' AFTER `CostCurrencyAmount`;
+ALTER TABLE `item_search_name` MODIFY `AllowableClass` int(11) NOT NULL DEFAULT '0' AFTER `RequiredLevel`;
+ALTER TABLE `player_condition` MODIFY `ClassMask` int(11) NOT NULL DEFAULT '0' AFTER `PowerTypeValue`;
+ALTER TABLE `player_condition` MODIFY `Unknown7001` int(11) NOT NULL DEFAULT '0' AFTER `MaxAvgItemLevel`;
+ALTER TABLE `player_condition` MODIFY `Unknown7002` int(11) NOT NULL DEFAULT '0' AFTER `Unknown7001`;
+ALTER TABLE `skill_line_ability` MODIFY `ClassMask` int(11) NOT NULL DEFAULT '0' AFTER `NumSkillUps`;
+ALTER TABLE `spell_category` CHANGE `Unk703` `ChargeCategoryType` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `MaxCharges`;
+ALTER TABLE `spell_effect` MODIFY `EffectBasePoints` int(11) NOT NULL DEFAULT '0' AFTER `EffectAuraPeriod`;
+ALTER TABLE `spell_effect` MODIFY `EffectDieSides` int(11) NOT NULL DEFAULT '0' AFTER `EffectChainTargets`;
+ALTER TABLE `spell_power` MODIFY `ManaCostPerLevel` int(11) NOT NULL DEFAULT '0' AFTER `ID`;
+ALTER TABLE `spell_power` MODIFY `ManaCostPerSecond` int(11) NOT NULL DEFAULT '0' AFTER `ManaCostPerLevel`;
+ALTER TABLE `summon_properties` MODIFY `Type` int(11) NOT NULL DEFAULT '0' AFTER `Faction`;
+ALTER TABLE `tact_key` CHANGE `Id` `ID` int(10) UNSIGNED NOT NULL DEFAULT '0' FIRST ;
+ALTER TABLE `world_map_overlay` MODIFY `OffsetX` int(11) NOT NULL DEFAULT '0' AFTER `AreaID4`;
+ALTER TABLE `world_map_overlay` MODIFY `OffsetY` int(11) NOT NULL DEFAULT '0' AFTER `OffsetX`;
+ALTER TABLE `world_map_overlay` MODIFY `HitRectTop` int(11) NOT NULL DEFAULT '0' AFTER `OffsetY`;
+ALTER TABLE `world_map_overlay` MODIFY `HitRectLeft` int(11) NOT NULL DEFAULT '0' AFTER `HitRectTop`;
+ALTER TABLE `world_map_overlay` MODIFY `HitRectBottom` int(11) NOT NULL DEFAULT '0' AFTER `HitRectLeft`;
+ALTER TABLE `world_map_overlay` MODIFY `HitRectRight` int(11) NOT NULL DEFAULT '0' AFTER `HitRectBottom`;
diff --git a/src/common/DataStores/DB2Meta.cpp b/src/common/DataStores/DB2Meta.cpp
index bf119b52150..819ce20f821 100644
--- a/src/common/DataStores/DB2Meta.cpp
+++ b/src/common/DataStores/DB2Meta.cpp
@@ -99,3 +99,8 @@ uint32 DB2Meta::GetStringFieldCount(bool localizedOnly) const
return stringFields;
}
+
+DB2FieldMeta::DB2FieldMeta(bool isSigned, DBCFormer type, char const* name)
+ : IsSigned(isSigned), Type(type), Name(name)
+{
+}
diff --git a/src/common/DataStores/DB2Meta.h b/src/common/DataStores/DB2Meta.h
index e99981cf094..a8b4074d05b 100644
--- a/src/common/DataStores/DB2Meta.h
+++ b/src/common/DataStores/DB2Meta.h
@@ -44,4 +44,13 @@ struct TC_COMMON_API DB2Meta
uint8 const* ArraySizes;
};
+struct TC_COMMON_API DB2FieldMeta
+{
+ DB2FieldMeta(bool isSigned, DBCFormer type, char const* name);
+
+ bool IsSigned;
+ DBCFormer Type;
+ char const* Name;
+};
+
#endif // DB2Meta_h__
diff --git a/src/server/database/Database/Implementation/HotfixDatabase.cpp b/src/server/database/Database/Implementation/HotfixDatabase.cpp
index a5099a8c7f5..9b459f29907 100644
--- a/src/server/database/Database/Implementation/HotfixDatabase.cpp
+++ b/src/server/database/Database/Implementation/HotfixDatabase.cpp
@@ -204,8 +204,8 @@ 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, StartAsset, FailAsset, StartTimer, ModifierTreeId, EligibilityWorldStateID, Type, StartEvent, "
- "FailEvent, Flags, EligibilityWorldStateValue FROM criteria ORDER BY ID DESC", CONNECTION_SYNCH);
+ 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);
// CriteriaTree.db2
PrepareStatement(HOTFIX_SEL_CRITERIA_TREE, "SELECT ID, CriteriaID, Amount, Description, Parent, Flags, Operator, OrderIndex FROM criteria_tree"
@@ -746,8 +746,8 @@ 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, Flags, UsesPerWeek, MaxCharges, Unk703 FROM spell_category"
- " ORDER BY ID DESC", CONNECTION_SYNCH);
+ PrepareStatement(HOTFIX_SEL_SPELL_CATEGORY, "SELECT ID, Name, ChargeRecoveryTime, Flags, UsesPerWeek, MaxCharges, ChargeCategoryType"
+ " 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
diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp
index a910df7b0a9..f8844ea925d 100644
--- a/src/server/game/Battlegrounds/Battleground.cpp
+++ b/src/server/game/Battlegrounds/Battleground.cpp
@@ -1910,7 +1910,7 @@ void Battleground::StartCriteriaTimer(CriteriaTimedTypes type, uint32 entry)
player->StartCriteriaTimer(type, entry);
}
-void Battleground::SetBracket(PvPDifficultyEntry const* bracketEntry)
+void Battleground::SetBracket(PvpDifficultyEntry const* bracketEntry)
{
m_BracketId = bracketEntry->GetBracketId();
SetLevelRange(bracketEntry->MinLevel, bracketEntry->MaxLevel);
diff --git a/src/server/game/Battlegrounds/Battleground.h b/src/server/game/Battlegrounds/Battleground.h
index 4d2f5da1a24..c574285a239 100644
--- a/src/server/game/Battlegrounds/Battleground.h
+++ b/src/server/game/Battlegrounds/Battleground.h
@@ -39,7 +39,7 @@ class WorldObject;
class WorldPacket;
class BattlegroundMap;
-struct PvPDifficultyEntry;
+struct PvpDifficultyEntry;
struct WorldSafeLocsEntry;
enum BattlegroundCriteriaId
@@ -290,7 +290,7 @@ class TC_GAME_API Battleground
void SetTypeID(BattlegroundTypeId TypeID) { m_TypeID = TypeID; }
void SetRandomTypeID(BattlegroundTypeId TypeID) { m_RandomTypeID = TypeID; }
//here we can count minlevel and maxlevel for players
- void SetBracket(PvPDifficultyEntry const* bracketEntry);
+ void SetBracket(PvpDifficultyEntry const* bracketEntry);
void SetInstanceID(uint32 InstanceID) { m_InstanceID = InstanceID; }
void SetStatus(BattlegroundStatus Status) { m_Status = Status; }
void SetClientInstanceID(uint32 InstanceID) { m_ClientInstanceID = InstanceID; }
diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
index 8585aa42a03..469447b127e 100644
--- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp
+++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
@@ -281,7 +281,7 @@ uint32 BattlegroundMgr::CreateClientVisibleInstanceId(BattlegroundTypeId bgTypeI
}
// create a new battleground that will really be used to play
-Battleground* BattlegroundMgr::CreateNewBattleground(BattlegroundTypeId originalBgTypeId, PvPDifficultyEntry const* bracketEntry, uint8 arenaType, bool isRated)
+Battleground* BattlegroundMgr::CreateNewBattleground(BattlegroundTypeId originalBgTypeId, PvpDifficultyEntry const* bracketEntry, uint8 arenaType, bool isRated)
{
BattlegroundTypeId bgTypeId = GetRandomBG(originalBgTypeId);
diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.h b/src/server/game/Battlegrounds/BattlegroundMgr.h
index d35b239a725..0ef0d04f5fb 100644
--- a/src/server/game/Battlegrounds/BattlegroundMgr.h
+++ b/src/server/game/Battlegrounds/BattlegroundMgr.h
@@ -91,7 +91,7 @@ class TC_GAME_API BattlegroundMgr
/* Battlegrounds */
Battleground* GetBattleground(uint32 InstanceID, BattlegroundTypeId bgTypeId);
Battleground* GetBattlegroundTemplate(BattlegroundTypeId bgTypeId);
- Battleground* CreateNewBattleground(BattlegroundTypeId bgTypeId, PvPDifficultyEntry const* bracketEntry, uint8 arenaType, bool isRated);
+ Battleground* CreateNewBattleground(BattlegroundTypeId bgTypeId, PvpDifficultyEntry const* bracketEntry, uint8 arenaType, bool isRated);
void AddBattleground(Battleground* bg);
void RemoveBattleground(BattlegroundTypeId bgTypeId, uint32 instanceId);
diff --git a/src/server/game/Battlegrounds/BattlegroundQueue.cpp b/src/server/game/Battlegrounds/BattlegroundQueue.cpp
index bb4aea1a22c..134e9cf9e67 100644
--- a/src/server/game/Battlegrounds/BattlegroundQueue.cpp
+++ b/src/server/game/Battlegrounds/BattlegroundQueue.cpp
@@ -126,7 +126,7 @@ bool BattlegroundQueue::SelectionPool::AddGroup(GroupQueueInfo* ginfo, uint32 de
/*********************************************************/
// add group or player (grp == NULL) to bg queue with the given leader and bg specifications
-GroupQueueInfo* BattlegroundQueue::AddGroup(Player* leader, Group* grp, BattlegroundTypeId BgTypeId, PvPDifficultyEntry const* bracketEntry, uint8 ArenaType, bool isRated, bool isPremade, uint32 ArenaRating, uint32 MatchmakerRating, uint32 arenateamid)
+GroupQueueInfo* BattlegroundQueue::AddGroup(Player* leader, Group* grp, BattlegroundTypeId BgTypeId, PvpDifficultyEntry const* bracketEntry, uint8 ArenaType, bool isRated, bool isPremade, uint32 ArenaRating, uint32 MatchmakerRating, uint32 arenateamid)
{
BattlegroundBracketId bracketId = bracketEntry->GetBracketId();
@@ -814,7 +814,7 @@ void BattlegroundQueue::BattlegroundQueueUpdate(uint32 /*diff*/, BattlegroundTyp
return;
}
- PvPDifficultyEntry const* bracketEntry = DB2Manager::GetBattlegroundBracketById(bg_template->GetMapId(), bracket_id);
+ PvpDifficultyEntry const* bracketEntry = DB2Manager::GetBattlegroundBracketById(bg_template->GetMapId(), bracket_id);
if (!bracketEntry)
{
TC_LOG_ERROR("bg.battleground", "Battleground: Update: bg bracket entry not found for map %u bracket id %u", bg_template->GetMapId(), bracket_id);
diff --git a/src/server/game/Battlegrounds/BattlegroundQueue.h b/src/server/game/Battlegrounds/BattlegroundQueue.h
index 5eac6a8f51a..c98b388010f 100644
--- a/src/server/game/Battlegrounds/BattlegroundQueue.h
+++ b/src/server/game/Battlegrounds/BattlegroundQueue.h
@@ -85,7 +85,7 @@ class TC_GAME_API BattlegroundQueue
bool CheckPremadeMatch(BattlegroundBracketId bracket_id, uint32 MinPlayersPerTeam, uint32 MaxPlayersPerTeam);
bool CheckNormalMatch(Battleground* bg_template, BattlegroundBracketId bracket_id, uint32 minPlayers, uint32 maxPlayers);
bool CheckSkirmishForSameFaction(BattlegroundBracketId bracket_id, uint32 minPlayersPerTeam);
- GroupQueueInfo* AddGroup(Player* leader, Group* group, BattlegroundTypeId bgTypeId, PvPDifficultyEntry const* bracketEntry, uint8 ArenaType, bool isRated, bool isPremade, uint32 ArenaRating, uint32 MatchmakerRating, uint32 ArenaTeamId = 0);
+ GroupQueueInfo* AddGroup(Player* leader, Group* group, BattlegroundTypeId bgTypeId, PvpDifficultyEntry const* bracketEntry, uint8 ArenaType, bool isRated, bool isPremade, uint32 ArenaRating, uint32 MatchmakerRating, uint32 ArenaTeamId = 0);
void RemovePlayer(ObjectGuid guid, bool decreaseInvitedCount);
bool IsPlayerInvited(ObjectGuid pl_guid, const uint32 bgInstanceGuid, const uint32 removeTime);
bool GetPlayerGroupInfoData(ObjectGuid guid, GroupQueueInfo* ginfo);
diff --git a/src/server/game/DataStores/DB2LoadInfo.h b/src/server/game/DataStores/DB2LoadInfo.h
new file mode 100644
index 00000000000..7ad3813c6a6
--- /dev/null
+++ b/src/server/game/DataStores/DB2LoadInfo.h
@@ -0,0 +1,4683 @@
+/*
+ * Copyright (C) 2008-2016 TrinityCore
+ *
+ * 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 .
+ */
+
+// DO NOT EDIT!
+// Autogenerated from DB2Structure.h
+
+#ifndef DB2LoadInfo_h__
+#define DB2LoadInfo_h__
+
+#include "DB2StorageLoader.h"
+#include "DB2Metadata.h"
+
+struct AchievementLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_STRING, "Title" },
+ { false, FT_STRING, "Description" },
+ { false, FT_INT, "Flags" },
+ { false, FT_STRING, "Reward" },
+ { true, FT_SHORT, "MapID" },
+ { false, FT_SHORT, "Supercedes" },
+ { false, FT_SHORT, "Category" },
+ { false, FT_SHORT, "UIOrder" },
+ { false, FT_SHORT, "IconID" },
+ { false, FT_SHORT, "SharesCriteria" },
+ { false, FT_SHORT, "CriteriaTree" },
+ { true, FT_BYTE, "Faction" },
+ { false, FT_BYTE, "Points" },
+ { false, FT_BYTE, "MinimumCriteria" },
+ { false, FT_INT, "ID" },
+ };
+ return { &fields[0], std::extent::value, AchievementMeta::Instance(), HOTFIX_SEL_ACHIEVEMENT };
+ }
+};
+
+struct AnimKitLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "OneShotDuration" },
+ { false, FT_SHORT, "OneShotStopAnimKitID" },
+ { false, FT_SHORT, "LowDefAnimKitID" },
+ };
+ return { &fields[0], std::extent::value, AnimKitMeta::Instance(), HOTFIX_SEL_ANIM_KIT };
+ }
+};
+
+struct AreaGroupMemberLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_SHORT, "AreaGroupID" },
+ { false, FT_SHORT, "AreaID" },
+ };
+ return { &fields[0], std::extent::value, AreaGroupMemberMeta::Instance(), HOTFIX_SEL_AREA_GROUP_MEMBER };
+ }
+};
+
+struct AreaTableLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "Flags1" },
+ { false, FT_INT, "Flags2" },
+ { false, FT_STRING_NOT_LOCALIZED, "ZoneName" },
+ { false, FT_FLOAT, "AmbientMultiplier" },
+ { false, FT_STRING, "AreaName" },
+ { false, FT_SHORT, "MapID" },
+ { false, FT_SHORT, "ParentAreaID" },
+ { true, FT_SHORT, "AreaBit" },
+ { false, FT_SHORT, "AmbienceID" },
+ { false, FT_SHORT, "ZoneMusic" },
+ { false, FT_SHORT, "IntroSound" },
+ { false, FT_SHORT, "LiquidTypeID1" },
+ { false, FT_SHORT, "LiquidTypeID2" },
+ { false, FT_SHORT, "LiquidTypeID3" },
+ { false, FT_SHORT, "LiquidTypeID4" },
+ { false, FT_SHORT, "UWZoneMusic" },
+ { false, FT_SHORT, "UWAmbience" },
+ { false, FT_SHORT, "PvPCombatWorldStateID" },
+ { false, FT_BYTE, "SoundProviderPref" },
+ { false, FT_BYTE, "SoundProviderPrefUnderwater" },
+ { false, FT_BYTE, "ExplorationLevel" },
+ { false, FT_BYTE, "FactionGroupMask" },
+ { false, FT_BYTE, "MountFlags" },
+ { false, FT_BYTE, "WildBattlePetLevelMin" },
+ { false, FT_BYTE, "WildBattlePetLevelMax" },
+ { false, FT_BYTE, "WindSettingsID" },
+ { false, FT_INT, "UWIntroSound" },
+ };
+ return { &fields[0], std::extent::value, AreaTableMeta::Instance(), HOTFIX_SEL_AREA_TABLE };
+ }
+};
+
+struct AreaTriggerLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_FLOAT, "PosX" },
+ { false, FT_FLOAT, "PosY" },
+ { false, FT_FLOAT, "PosZ" },
+ { false, FT_FLOAT, "Radius" },
+ { false, FT_FLOAT, "BoxLength" },
+ { false, FT_FLOAT, "BoxWidth" },
+ { false, FT_FLOAT, "BoxHeight" },
+ { false, FT_FLOAT, "BoxYaw" },
+ { false, FT_SHORT, "MapID" },
+ { false, FT_SHORT, "PhaseID" },
+ { false, FT_SHORT, "PhaseGroupID" },
+ { false, FT_SHORT, "ShapeID" },
+ { false, FT_SHORT, "AreaTriggerActionSetID" },
+ { false, FT_BYTE, "PhaseUseFlags" },
+ { false, FT_BYTE, "ShapeType" },
+ { false, FT_BYTE, "Flag" },
+ { false, FT_INT, "ID" },
+ };
+ return { &fields[0], std::extent::value, AreaTriggerMeta::Instance(), HOTFIX_SEL_AREA_TRIGGER };
+ }
+};
+
+struct ArmorLocationLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "Modifier1" },
+ { false, FT_FLOAT, "Modifier2" },
+ { false, FT_FLOAT, "Modifier3" },
+ { false, FT_FLOAT, "Modifier4" },
+ { false, FT_FLOAT, "Modifier5" },
+ };
+ return { &fields[0], std::extent::value, ArmorLocationMeta::Instance(), HOTFIX_SEL_ARMOR_LOCATION };
+ }
+};
+
+struct ArtifactLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Name" },
+ { false, FT_INT, "BarConnectedColor" },
+ { false, FT_INT, "BarDisconnectedColor" },
+ { false, FT_INT, "TitleColor" },
+ { false, FT_SHORT, "ClassUiTextureKitID" },
+ { false, FT_SHORT, "SpecID" },
+ { false, FT_BYTE, "ArtifactCategoryID" },
+ { false, FT_BYTE, "Flags" },
+ };
+ return { &fields[0], std::extent::value, ArtifactMeta::Instance(), HOTFIX_SEL_ARTIFACT };
+ }
+};
+
+struct ArtifactAppearanceLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_STRING, "Name" },
+ { false, FT_INT, "SwatchColor" },
+ { false, FT_FLOAT, "ModelDesaturation" },
+ { false, FT_FLOAT, "ModelAlpha" },
+ { false, FT_INT, "ShapeshiftDisplayID" },
+ { false, FT_SHORT, "ArtifactAppearanceSetID" },
+ { false, FT_SHORT, "PlayerConditionID" },
+ { false, FT_SHORT, "Unknown" },
+ { false, FT_BYTE, "DisplayIndex" },
+ { false, FT_BYTE, "AppearanceModID" },
+ { false, FT_BYTE, "Flags" },
+ { false, FT_BYTE, "ModifiesShapeshiftFormDisplay" },
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "ItemAppearanceID" },
+ { false, FT_INT, "AltItemAppearanceID" },
+ };
+ return { &fields[0], std::extent::value, ArtifactAppearanceMeta::Instance(), HOTFIX_SEL_ARTIFACT_APPEARANCE };
+ }
+};
+
+struct ArtifactAppearanceSetLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_STRING, "Name" },
+ { false, FT_STRING, "Name2" },
+ { false, FT_SHORT, "UiCameraID" },
+ { false, FT_SHORT, "AltHandUICameraID" },
+ { false, FT_BYTE, "ArtifactID" },
+ { false, FT_BYTE, "DisplayIndex" },
+ { false, FT_BYTE, "AttachmentPoint" },
+ { false, FT_BYTE, "Flags" },
+ { false, FT_INT, "ID" },
+ };
+ return { &fields[0], std::extent::value, ArtifactAppearanceSetMeta::Instance(), HOTFIX_SEL_ARTIFACT_APPEARANCE_SET };
+ }
+};
+
+struct ArtifactCategoryLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_SHORT, "ArtifactKnowledgeCurrencyID" },
+ { false, FT_SHORT, "ArtifactKnowledgeMultiplierCurveID" },
+ };
+ return { &fields[0], std::extent::value, ArtifactCategoryMeta::Instance(), HOTFIX_SEL_ARTIFACT_CATEGORY };
+ }
+};
+
+struct ArtifactPowerLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_FLOAT, "PosX" },
+ { false, FT_FLOAT, "PosY" },
+ { false, FT_BYTE, "ArtifactID" },
+ { false, FT_BYTE, "Flags" },
+ { false, FT_BYTE, "MaxRank" },
+ { false, FT_INT, "ID" },
+ { true, FT_INT, "RelicType" },
+ };
+ return { &fields[0], std::extent::value, ArtifactPowerMeta::Instance(), HOTFIX_SEL_ARTIFACT_POWER };
+ }
+};
+
+struct ArtifactPowerLinkLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_SHORT, "FromArtifactPowerID" },
+ { false, FT_SHORT, "ToArtifactPowerID" },
+ };
+ return { &fields[0], std::extent::value, ArtifactPowerLinkMeta::Instance(), HOTFIX_SEL_ARTIFACT_POWER_LINK };
+ }
+};
+
+struct ArtifactPowerRankLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "SpellID" },
+ { false, FT_FLOAT, "Value" },
+ { false, FT_SHORT, "ArtifactPowerID" },
+ { false, FT_SHORT, "Unknown" },
+ { false, FT_BYTE, "Rank" },
+ };
+ return { &fields[0], std::extent::value, ArtifactPowerRankMeta::Instance(), HOTFIX_SEL_ARTIFACT_POWER_RANK };
+ }
+};
+
+struct ArtifactQuestXpLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "Exp1" },
+ { false, FT_INT, "Exp2" },
+ { false, FT_INT, "Exp3" },
+ { false, FT_INT, "Exp4" },
+ { false, FT_INT, "Exp5" },
+ { false, FT_INT, "Exp6" },
+ { false, FT_INT, "Exp7" },
+ { false, FT_INT, "Exp8" },
+ { false, FT_INT, "Exp9" },
+ { false, FT_INT, "Exp10" },
+ };
+ return { &fields[0], std::extent::value, ArtifactQuestXPMeta::Instance(), HOTFIX_SEL_ARTIFACT_QUEST_XP };
+ }
+};
+
+struct AuctionHouseLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Name" },
+ { false, FT_SHORT, "FactionID" },
+ { false, FT_BYTE, "DepositRate" },
+ { false, FT_BYTE, "ConsignmentRate" },
+ };
+ return { &fields[0], std::extent::value, AuctionHouseMeta::Instance(), HOTFIX_SEL_AUCTION_HOUSE };
+ }
+};
+
+struct BankBagSlotPricesLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "Cost" },
+ };
+ return { &fields[0], std::extent::value, BankBagSlotPricesMeta::Instance(), HOTFIX_SEL_BANK_BAG_SLOT_PRICES };
+ }
+};
+
+struct BannedAddonsLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING_NOT_LOCALIZED, "Name" },
+ { false, FT_STRING_NOT_LOCALIZED, "Version" },
+ { false, FT_BYTE, "Flags" },
+ };
+ return { &fields[0], std::extent::value, BannedAddOnsMeta::Instance(), HOTFIX_SEL_BANNED_ADDONS };
+ }
+};
+
+struct BarberShopStyleLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_STRING, "DisplayName" },
+ { false, FT_STRING, "Description" },
+ { false, FT_FLOAT, "CostModifier" },
+ { false, FT_BYTE, "Type" },
+ { false, FT_BYTE, "Race" },
+ { false, FT_BYTE, "Sex" },
+ { false, FT_BYTE, "Data" },
+ { false, FT_INT, "ID" },
+ };
+ return { &fields[0], std::extent::value, BarberShopStyleMeta::Instance(), HOTFIX_SEL_BARBER_SHOP_STYLE };
+ }
+};
+
+struct BattlePetBreedQualityLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "Modifier" },
+ { false, FT_BYTE, "Quality" },
+ };
+ return { &fields[0], std::extent::value, BattlePetBreedQualityMeta::Instance(), HOTFIX_SEL_BATTLE_PET_BREED_QUALITY };
+ }
+};
+
+struct BattlePetBreedStateLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { true, FT_SHORT, "Value" },
+ { false, FT_BYTE, "BreedID" },
+ { false, FT_BYTE, "State" },
+ };
+ return { &fields[0], std::extent::value, BattlePetBreedStateMeta::Instance(), HOTFIX_SEL_BATTLE_PET_BREED_STATE };
+ }
+};
+
+struct BattlePetSpeciesLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "CreatureID" },
+ { false, FT_INT, "IconFileID" },
+ { false, FT_INT, "SummonSpellID" },
+ { false, FT_STRING, "SourceText" },
+ { false, FT_STRING, "Description" },
+ { false, FT_SHORT, "Flags" },
+ { false, FT_BYTE, "PetType" },
+ { true, FT_BYTE, "Source" },
+ { false, FT_INT, "ID" },
+ };
+ return { &fields[0], std::extent::value, BattlePetSpeciesMeta::Instance(), HOTFIX_SEL_BATTLE_PET_SPECIES };
+ }
+};
+
+struct BattlePetSpeciesStateLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { true, FT_INT, "Value" },
+ { false, FT_SHORT, "SpeciesID" },
+ { false, FT_BYTE, "State" },
+ };
+ return { &fields[0], std::extent::value, BattlePetSpeciesStateMeta::Instance(), HOTFIX_SEL_BATTLE_PET_SPECIES_STATE };
+ }
+};
+
+struct BattlemasterListLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Name" },
+ { false, FT_INT, "IconFileDataID" },
+ { false, FT_STRING, "GameType" },
+ { true, FT_SHORT, "MapID1" },
+ { true, FT_SHORT, "MapID2" },
+ { true, FT_SHORT, "MapID3" },
+ { true, FT_SHORT, "MapID4" },
+ { true, FT_SHORT, "MapID5" },
+ { true, FT_SHORT, "MapID6" },
+ { true, FT_SHORT, "MapID7" },
+ { true, FT_SHORT, "MapID8" },
+ { true, FT_SHORT, "MapID9" },
+ { true, FT_SHORT, "MapID10" },
+ { true, FT_SHORT, "MapID11" },
+ { true, FT_SHORT, "MapID12" },
+ { true, FT_SHORT, "MapID13" },
+ { true, FT_SHORT, "MapID14" },
+ { true, FT_SHORT, "MapID15" },
+ { true, FT_SHORT, "MapID16" },
+ { false, FT_SHORT, "HolidayWorldState" },
+ { false, FT_SHORT, "PlayerConditionID" },
+ { false, FT_BYTE, "InstanceType" },
+ { false, FT_BYTE, "GroupsAllowed" },
+ { false, FT_BYTE, "MaxGroupSize" },
+ { false, FT_BYTE, "MinLevel" },
+ { false, FT_BYTE, "MaxLevel" },
+ { false, FT_BYTE, "RatedPlayers" },
+ { false, FT_BYTE, "MinPlayers" },
+ { false, FT_BYTE, "MaxPlayers" },
+ { false, FT_BYTE, "Flags" },
+ };
+ return { &fields[0], std::extent::value, BattlemasterListMeta::Instance(), HOTFIX_SEL_BATTLEMASTER_LIST };
+ }
+};
+
+struct BroadcastTextLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "MaleText" },
+ { false, FT_STRING, "FemaleText" },
+ { false, FT_SHORT, "EmoteID1" },
+ { false, FT_SHORT, "EmoteID2" },
+ { false, FT_SHORT, "EmoteID3" },
+ { false, FT_SHORT, "EmoteDelay1" },
+ { false, FT_SHORT, "EmoteDelay2" },
+ { false, FT_SHORT, "EmoteDelay3" },
+ { false, FT_SHORT, "UnkEmoteID" },
+ { false, FT_BYTE, "Language" },
+ { false, FT_BYTE, "Type" },
+ { false, FT_INT, "SoundID1" },
+ { false, FT_INT, "SoundID2" },
+ { false, FT_INT, "PlayerConditionID" },
+ };
+ return { &fields[0], std::extent::value, BroadcastTextMeta::Instance(), HOTFIX_SEL_BROADCAST_TEXT };
+ }
+};
+
+struct CharSectionsLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "TextureFileDataID1" },
+ { false, FT_INT, "TextureFileDataID2" },
+ { false, FT_INT, "TextureFileDataID3" },
+ { false, FT_SHORT, "Flags" },
+ { false, FT_BYTE, "Race" },
+ { false, FT_BYTE, "Gender" },
+ { false, FT_BYTE, "GenType" },
+ { false, FT_BYTE, "Type" },
+ { false, FT_BYTE, "Color" },
+ };
+ return { &fields[0], std::extent::value, CharSectionsMeta::Instance(), HOTFIX_SEL_CHAR_SECTIONS };
+ }
+};
+
+struct CharStartOutfitLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { true, FT_INT, "ItemID1" },
+ { true, FT_INT, "ItemID2" },
+ { true, FT_INT, "ItemID3" },
+ { true, FT_INT, "ItemID4" },
+ { true, FT_INT, "ItemID5" },
+ { true, FT_INT, "ItemID6" },
+ { true, FT_INT, "ItemID7" },
+ { true, FT_INT, "ItemID8" },
+ { true, FT_INT, "ItemID9" },
+ { true, FT_INT, "ItemID10" },
+ { true, FT_INT, "ItemID11" },
+ { true, FT_INT, "ItemID12" },
+ { true, FT_INT, "ItemID13" },
+ { true, FT_INT, "ItemID14" },
+ { true, FT_INT, "ItemID15" },
+ { true, FT_INT, "ItemID16" },
+ { true, FT_INT, "ItemID17" },
+ { true, FT_INT, "ItemID18" },
+ { true, FT_INT, "ItemID19" },
+ { true, FT_INT, "ItemID20" },
+ { true, FT_INT, "ItemID21" },
+ { true, FT_INT, "ItemID22" },
+ { true, FT_INT, "ItemID23" },
+ { true, FT_INT, "ItemID24" },
+ { false, FT_INT, "PetDisplayID" },
+ { false, FT_BYTE, "RaceID" },
+ { false, FT_BYTE, "ClassID" },
+ { false, FT_BYTE, "GenderID" },
+ { false, FT_BYTE, "OutfitID" },
+ { false, FT_BYTE, "PetFamilyID" },
+ };
+ return { &fields[0], std::extent::value, CharStartOutfitMeta::Instance(), HOTFIX_SEL_CHAR_START_OUTFIT };
+ }
+};
+
+struct CharTitlesLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "NameMale" },
+ { false, FT_STRING, "NameFemale" },
+ { false, FT_SHORT, "MaskID" },
+ { false, FT_BYTE, "Flags" },
+ };
+ return { &fields[0], std::extent::value, CharTitlesMeta::Instance(), HOTFIX_SEL_CHAR_TITLES };
+ }
+};
+
+struct ChatChannelsLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "Flags" },
+ { false, FT_STRING, "Name" },
+ { false, FT_STRING, "Shortcut" },
+ { false, FT_BYTE, "FactionGroup" },
+ };
+ return { &fields[0], std::extent::value, ChatChannelsMeta::Instance(), HOTFIX_SEL_CHAT_CHANNELS };
+ }
+};
+
+struct ChrClassesLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_STRING_NOT_LOCALIZED, "PetNameToken" },
+ { false, FT_STRING, "Name" },
+ { false, FT_STRING, "NameFemale" },
+ { false, FT_STRING, "NameMale" },
+ { false, FT_STRING_NOT_LOCALIZED, "Filename" },
+ { false, FT_INT, "CreateScreenFileDataID" },
+ { false, FT_INT, "SelectScreenFileDataID" },
+ { false, FT_INT, "LowResScreenFileDataID" },
+ { false, FT_SHORT, "Flags" },
+ { false, FT_SHORT, "CinematicSequenceID" },
+ { false, FT_SHORT, "DefaultSpec" },
+ { false, FT_BYTE, "PowerType" },
+ { false, FT_BYTE, "SpellClassSet" },
+ { false, FT_BYTE, "AttackPowerPerStrength" },
+ { false, FT_BYTE, "AttackPowerPerAgility" },
+ { false, FT_BYTE, "RangedAttackPowerPerAgility" },
+ { false, FT_BYTE, "IconFileDataID" },
+ { false, FT_BYTE, "Unk1" },
+ { false, FT_INT, "ID" },
+ };
+ return { &fields[0], std::extent::value, ChrClassesMeta::Instance(), HOTFIX_SEL_CHR_CLASSES };
+ }
+};
+
+struct ChrClassesXPowerTypesLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_BYTE, "ClassID" },
+ { false, FT_BYTE, "PowerType" },
+ };
+ return { &fields[0], std::extent::value, ChrClassesXPowerTypesMeta::Instance(), HOTFIX_SEL_CHR_CLASSES_X_POWER_TYPES };
+ }
+};
+
+struct ChrRacesLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "Flags" },
+ { false, FT_STRING_NOT_LOCALIZED, "ClientPrefix" },
+ { false, FT_STRING_NOT_LOCALIZED, "ClientFileString" },
+ { false, FT_STRING, "Name" },
+ { false, FT_STRING, "NameFemale" },
+ { false, FT_STRING, "NameMale" },
+ { false, FT_STRING_NOT_LOCALIZED, "FacialHairCustomization1" },
+ { false, FT_STRING_NOT_LOCALIZED, "FacialHairCustomization2" },
+ { false, FT_STRING_NOT_LOCALIZED, "HairCustomization" },
+ { false, FT_INT, "CreateScreenFileDataID" },
+ { false, FT_INT, "SelectScreenFileDataID" },
+ { false, FT_FLOAT, "MaleCustomizeOffset1" },
+ { false, FT_FLOAT, "MaleCustomizeOffset2" },
+ { false, FT_FLOAT, "MaleCustomizeOffset3" },
+ { false, FT_FLOAT, "FemaleCustomizeOffset1" },
+ { false, FT_FLOAT, "FemaleCustomizeOffset2" },
+ { false, FT_FLOAT, "FemaleCustomizeOffset3" },
+ { false, FT_INT, "LowResScreenFileDataID" },
+ { false, FT_SHORT, "FactionID" },
+ { false, FT_SHORT, "ExplorationSoundID" },
+ { false, FT_SHORT, "MaleDisplayID" },
+ { false, FT_SHORT, "FemaleDisplayID" },
+ { false, FT_SHORT, "ResSicknessSpellID" },
+ { false, FT_SHORT, "SplashSoundID" },
+ { false, FT_SHORT, "CinematicSequenceID" },
+ { false, FT_SHORT, "UAMaleCreatureSoundDataID" },
+ { false, FT_SHORT, "UAFemaleCreatureSoundDataID" },
+ { false, FT_BYTE, "BaseLanguage" },
+ { false, FT_BYTE, "CreatureType" },
+ { false, FT_BYTE, "TeamID" },
+ { false, FT_BYTE, "RaceRelated" },
+ { false, FT_BYTE, "UnalteredVisualRaceID" },
+ { false, FT_BYTE, "CharComponentTextureLayoutID" },
+ { false, FT_BYTE, "DefaultClassID" },
+ { false, FT_BYTE, "NeutralRaceID" },
+ { false, FT_BYTE, "ItemAppearanceFrameRaceID" },
+ { false, FT_BYTE, "CharComponentTexLayoutHiResID" },
+ { false, FT_INT, "HighResMaleDisplayID" },
+ { false, FT_INT, "HighResFemaleDisplayID" },
+ { false, FT_INT, "Unk1" },
+ { false, FT_INT, "Unk2" },
+ { false, FT_INT, "Unk3" },
+ };
+ return { &fields[0], std::extent::value, ChrRacesMeta::Instance(), HOTFIX_SEL_CHR_RACES };
+ }
+};
+
+struct ChrSpecializationLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "MasterySpellID1" },
+ { false, FT_INT, "MasterySpellID2" },
+ { false, FT_STRING, "Name" },
+ { false, FT_STRING, "Name2" },
+ { false, FT_STRING, "Description" },
+ { false, FT_STRING_NOT_LOCALIZED, "BackgroundFile" },
+ { false, FT_SHORT, "SpellIconID" },
+ { false, FT_BYTE, "ClassID" },
+ { false, FT_BYTE, "OrderIndex" },
+ { false, FT_BYTE, "PetTalentType" },
+ { false, FT_BYTE, "Role" },
+ { false, FT_BYTE, "PrimaryStatOrder" },
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "Flags" },
+ { false, FT_INT, "AnimReplacementSetID" },
+ };
+ return { &fields[0], std::extent::value, ChrSpecializationMeta::Instance(), HOTFIX_SEL_CHR_SPECIALIZATION };
+ }
+};
+
+struct CinematicSequencesLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_SHORT, "SoundID" },
+ { false, FT_SHORT, "Camera1" },
+ { false, FT_SHORT, "Camera2" },
+ { false, FT_SHORT, "Camera3" },
+ { false, FT_SHORT, "Camera4" },
+ { false, FT_SHORT, "Camera5" },
+ { false, FT_SHORT, "Camera6" },
+ { false, FT_SHORT, "Camera7" },
+ { false, FT_SHORT, "Camera8" },
+ };
+ return { &fields[0], std::extent::value, CinematicSequencesMeta::Instance(), HOTFIX_SEL_CINEMATIC_SEQUENCES };
+ }
+};
+
+struct CreatureDisplayInfoLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "ExtendedDisplayInfoID" },
+ { false, FT_FLOAT, "CreatureModelScale" },
+ { false, FT_FLOAT, "PlayerModelScale" },
+ { false, FT_INT, "TextureVariation1" },
+ { false, FT_INT, "TextureVariation2" },
+ { false, FT_INT, "TextureVariation3" },
+ { false, FT_STRING_NOT_LOCALIZED, "PortraitTextureName" },
+ { false, FT_INT, "PortraitCreatureDisplayInfoID" },
+ { false, FT_INT, "CreatureGeosetData" },
+ { false, FT_INT, "StateSpellVisualKitID" },
+ { false, FT_FLOAT, "InstanceOtherPlayerPetScale" },
+ { false, FT_SHORT, "ModelID" },
+ { false, FT_SHORT, "SoundID" },
+ { false, FT_SHORT, "NPCSoundID" },
+ { false, FT_SHORT, "ParticleColorID" },
+ { false, FT_SHORT, "ObjectEffectPackageID" },
+ { false, FT_SHORT, "AnimReplacementSetID" },
+ { false, FT_BYTE, "CreatureModelAlpha" },
+ { false, FT_BYTE, "SizeClass" },
+ { false, FT_BYTE, "BloodID" },
+ { false, FT_BYTE, "Flags" },
+ { true, FT_BYTE, "Gender" },
+ { true, FT_BYTE, "Unk700" },
+ };
+ return { &fields[0], std::extent::value, CreatureDisplayInfoMeta::Instance(), HOTFIX_SEL_CREATURE_DISPLAY_INFO };
+ }
+};
+
+struct CreatureDisplayInfoExtraLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "FileDataID" },
+ { false, FT_INT, "HDFileDataID" },
+ { false, FT_BYTE, "DisplayRaceID" },
+ { false, FT_BYTE, "DisplaySexID" },
+ { false, FT_BYTE, "DisplayClassID" },
+ { false, FT_BYTE, "SkinID" },
+ { false, FT_BYTE, "FaceID" },
+ { false, FT_BYTE, "HairStyleID" },
+ { false, FT_BYTE, "HairColorID" },
+ { false, FT_BYTE, "FacialHairID" },
+ { false, FT_BYTE, "CustomDisplayOption1" },
+ { false, FT_BYTE, "CustomDisplayOption2" },
+ { false, FT_BYTE, "CustomDisplayOption3" },
+ { false, FT_BYTE, "Flags" },
+ };
+ return { &fields[0], std::extent::value, CreatureDisplayInfoExtraMeta::Instance(), HOTFIX_SEL_CREATURE_DISPLAY_INFO_EXTRA };
+ }
+};
+
+struct CreatureFamilyLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "MinScale" },
+ { false, FT_FLOAT, "MaxScale" },
+ { false, FT_STRING, "Name" },
+ { false, FT_STRING_NOT_LOCALIZED, "IconFile" },
+ { false, FT_SHORT, "SkillLine1" },
+ { false, FT_SHORT, "SkillLine2" },
+ { false, FT_SHORT, "PetFoodMask" },
+ { false, FT_BYTE, "MinScaleLevel" },
+ { false, FT_BYTE, "MaxScaleLevel" },
+ { false, FT_BYTE, "PetTalentType" },
+ };
+ return { &fields[0], std::extent::value, CreatureFamilyMeta::Instance(), HOTFIX_SEL_CREATURE_FAMILY };
+ }
+};
+
+struct CreatureModelDataLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "ModelScale" },
+ { false, FT_FLOAT, "FootprintTextureLength" },
+ { false, FT_FLOAT, "FootprintTextureWidth" },
+ { false, FT_FLOAT, "FootprintParticleScale" },
+ { false, FT_FLOAT, "CollisionWidth" },
+ { false, FT_FLOAT, "CollisionHeight" },
+ { false, FT_FLOAT, "MountHeight" },
+ { false, FT_FLOAT, "GeoBoxMin1" },
+ { false, FT_FLOAT, "GeoBoxMin2" },
+ { false, FT_FLOAT, "GeoBoxMin3" },
+ { false, FT_FLOAT, "GeoBoxMax1" },
+ { false, FT_FLOAT, "GeoBoxMax2" },
+ { false, FT_FLOAT, "GeoBoxMax3" },
+ { false, FT_FLOAT, "WorldEffectScale" },
+ { false, FT_FLOAT, "AttachedEffectScale" },
+ { false, FT_FLOAT, "MissileCollisionRadius" },
+ { false, FT_FLOAT, "MissileCollisionPush" },
+ { false, FT_FLOAT, "MissileCollisionRaise" },
+ { false, FT_FLOAT, "OverrideLootEffectScale" },
+ { false, FT_FLOAT, "OverrideNameScale" },
+ { false, FT_FLOAT, "OverrideSelectionRadius" },
+ { false, FT_FLOAT, "TamedPetBaseScale" },
+ { false, FT_FLOAT, "HoverHeight" },
+ { false, FT_INT, "Flags" },
+ { false, FT_INT, "FileDataID" },
+ { false, FT_INT, "SizeClass" },
+ { false, FT_INT, "BloodID" },
+ { false, FT_INT, "FootprintTextureID" },
+ { false, FT_INT, "FoleyMaterialID" },
+ { false, FT_INT, "FootstepEffectID" },
+ { false, FT_INT, "DeathThudEffectID" },
+ { false, FT_INT, "FootstepShakeSize" },
+ { false, FT_INT, "DeathThudShakeSize" },
+ { false, FT_INT, "SoundID" },
+ { false, FT_INT, "CreatureGeosetDataID" },
+ };
+ return { &fields[0], std::extent::value, CreatureModelDataMeta::Instance(), HOTFIX_SEL_CREATURE_MODEL_DATA };
+ }
+};
+
+struct CreatureTypeLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Name" },
+ { false, FT_BYTE, "Flags" },
+ };
+ return { &fields[0], std::extent::value, CreatureTypeMeta::Instance(), HOTFIX_SEL_CREATURE_TYPE };
+ }
+};
+
+struct CriteriaLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "Asset" },
+ { false, FT_INT, "StartAsset" },
+ { false, FT_INT, "FailAsset" },
+ { false, FT_SHORT, "StartTimer" },
+ { false, FT_SHORT, "ModifierTreeId" },
+ { false, FT_SHORT, "EligibilityWorldStateID" },
+ { false, FT_BYTE, "Type" },
+ { false, FT_BYTE, "StartEvent" },
+ { false, FT_BYTE, "FailEvent" },
+ { false, FT_BYTE, "Flags" },
+ { false, FT_BYTE, "EligibilityWorldStateValue" },
+ };
+ return { &fields[0], std::extent::value, CriteriaMeta::Instance(), HOTFIX_SEL_CRITERIA };
+ }
+};
+
+struct CriteriaTreeLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "CriteriaID" },
+ { false, FT_INT, "Amount" },
+ { false, FT_STRING, "Description" },
+ { false, FT_SHORT, "Parent" },
+ { false, FT_SHORT, "Flags" },
+ { false, FT_BYTE, "Operator" },
+ { true, FT_INT, "OrderIndex" },
+ };
+ return { &fields[0], std::extent::value, CriteriaTreeMeta::Instance(), HOTFIX_SEL_CRITERIA_TREE };
+ }
+};
+
+struct CurrencyTypesLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Name" },
+ { false, FT_STRING_NOT_LOCALIZED, "InventoryIcon1" },
+ { false, FT_STRING_NOT_LOCALIZED, "InventoryIcon2" },
+ { false, FT_INT, "MaxQty" },
+ { false, FT_INT, "MaxEarnablePerWeek" },
+ { false, FT_INT, "Flags" },
+ { false, FT_STRING, "Description" },
+ { false, FT_BYTE, "CategoryID" },
+ { false, FT_BYTE, "SpellCategory" },
+ { false, FT_BYTE, "Quality" },
+ { false, FT_INT, "SpellWeight" },
+ };
+ return { &fields[0], std::extent::value, CurrencyTypesMeta::Instance(), HOTFIX_SEL_CURRENCY_TYPES };
+ }
+};
+
+struct CurveLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_BYTE, "Type" },
+ { false, FT_BYTE, "Unused" },
+ };
+ return { &fields[0], std::extent::value, CurveMeta::Instance(), HOTFIX_SEL_CURVE };
+ }
+};
+
+struct CurvePointLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "X" },
+ { false, FT_FLOAT, "Y" },
+ { false, FT_SHORT, "CurveID" },
+ { false, FT_BYTE, "Index" },
+ };
+ return { &fields[0], std::extent::value, CurvePointMeta::Instance(), HOTFIX_SEL_CURVE_POINT };
+ }
+};
+
+struct DestructibleModelDataLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_SHORT, "StateDamagedDisplayID" },
+ { false, FT_SHORT, "StateDestroyedDisplayID" },
+ { false, FT_SHORT, "StateRebuildingDisplayID" },
+ { false, FT_SHORT, "StateSmokeDisplayID" },
+ { false, FT_SHORT, "HealEffectSpeed" },
+ { false, FT_BYTE, "StateDamagedImpactEffectDoodadSet" },
+ { false, FT_BYTE, "StateDamagedAmbientDoodadSet" },
+ { false, FT_BYTE, "StateDamagedNameSet" },
+ { false, FT_BYTE, "StateDestroyedDestructionDoodadSet" },
+ { false, FT_BYTE, "StateDestroyedImpactEffectDoodadSet" },
+ { false, FT_BYTE, "StateDestroyedAmbientDoodadSet" },
+ { false, FT_BYTE, "StateDestroyedNameSet" },
+ { false, FT_BYTE, "StateRebuildingDestructionDoodadSet" },
+ { false, FT_BYTE, "StateRebuildingImpactEffectDoodadSet" },
+ { false, FT_BYTE, "StateRebuildingAmbientDoodadSet" },
+ { false, FT_BYTE, "StateRebuildingNameSet" },
+ { false, FT_BYTE, "StateSmokeInitDoodadSet" },
+ { false, FT_BYTE, "StateSmokeAmbientDoodadSet" },
+ { false, FT_BYTE, "StateSmokeNameSet" },
+ { false, FT_BYTE, "EjectDirection" },
+ { false, FT_BYTE, "DoNotHighlight" },
+ { false, FT_BYTE, "HealEffect" },
+ };
+ return { &fields[0], std::extent::value, DestructibleModelDataMeta::Instance(), HOTFIX_SEL_DESTRUCTIBLE_MODEL_DATA };
+ }
+};
+
+struct DifficultyLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Name" },
+ { false, FT_BYTE, "FallbackDifficultyID" },
+ { false, FT_BYTE, "InstanceType" },
+ { false, FT_BYTE, "MinPlayers" },
+ { false, FT_BYTE, "MaxPlayers" },
+ { true, FT_BYTE, "OldEnumValue" },
+ { false, FT_BYTE, "Flags" },
+ { false, FT_BYTE, "ToggleDifficultyID" },
+ { false, FT_BYTE, "GroupSizeHealthCurveID" },
+ { false, FT_BYTE, "GroupSizeDmgCurveID" },
+ { false, FT_BYTE, "GroupSizeSpellPointsCurveID" },
+ { false, FT_BYTE, "ItemBonusTreeModID" },
+ { false, FT_BYTE, "OrderIndex" },
+ };
+ return { &fields[0], std::extent::value, DifficultyMeta::Instance(), HOTFIX_SEL_DIFFICULTY };
+ }
+};
+
+struct DungeonEncounterLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Name" },
+ { false, FT_INT, "CreatureDisplayID" },
+ { false, FT_SHORT, "MapID" },
+ { false, FT_SHORT, "SpellIconID" },
+ { false, FT_BYTE, "DifficultyID" },
+ { false, FT_BYTE, "Bit" },
+ { false, FT_BYTE, "Flags" },
+ { true, FT_INT, "OrderIndex" },
+ };
+ return { &fields[0], std::extent::value, DungeonEncounterMeta::Instance(), HOTFIX_SEL_DUNGEON_ENCOUNTER };
+ }
+};
+
+struct DurabilityCostsLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_SHORT, "WeaponSubClassCost1" },
+ { false, FT_SHORT, "WeaponSubClassCost2" },
+ { false, FT_SHORT, "WeaponSubClassCost3" },
+ { false, FT_SHORT, "WeaponSubClassCost4" },
+ { false, FT_SHORT, "WeaponSubClassCost5" },
+ { false, FT_SHORT, "WeaponSubClassCost6" },
+ { false, FT_SHORT, "WeaponSubClassCost7" },
+ { false, FT_SHORT, "WeaponSubClassCost8" },
+ { false, FT_SHORT, "WeaponSubClassCost9" },
+ { false, FT_SHORT, "WeaponSubClassCost10" },
+ { false, FT_SHORT, "WeaponSubClassCost11" },
+ { false, FT_SHORT, "WeaponSubClassCost12" },
+ { false, FT_SHORT, "WeaponSubClassCost13" },
+ { false, FT_SHORT, "WeaponSubClassCost14" },
+ { false, FT_SHORT, "WeaponSubClassCost15" },
+ { false, FT_SHORT, "WeaponSubClassCost16" },
+ { false, FT_SHORT, "WeaponSubClassCost17" },
+ { false, FT_SHORT, "WeaponSubClassCost18" },
+ { false, FT_SHORT, "WeaponSubClassCost19" },
+ { false, FT_SHORT, "WeaponSubClassCost20" },
+ { false, FT_SHORT, "WeaponSubClassCost21" },
+ { false, FT_SHORT, "ArmorSubClassCost1" },
+ { false, FT_SHORT, "ArmorSubClassCost2" },
+ { false, FT_SHORT, "ArmorSubClassCost3" },
+ { false, FT_SHORT, "ArmorSubClassCost4" },
+ { false, FT_SHORT, "ArmorSubClassCost5" },
+ { false, FT_SHORT, "ArmorSubClassCost6" },
+ { false, FT_SHORT, "ArmorSubClassCost7" },
+ { false, FT_SHORT, "ArmorSubClassCost8" },
+ };
+ return { &fields[0], std::extent::value, DurabilityCostsMeta::Instance(), HOTFIX_SEL_DURABILITY_COSTS };
+ }
+};
+
+struct DurabilityQualityLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "QualityMod" },
+ };
+ return { &fields[0], std::extent::value, DurabilityQualityMeta::Instance(), HOTFIX_SEL_DURABILITY_QUALITY };
+ }
+};
+
+struct EmotesLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING_NOT_LOCALIZED, "EmoteSlashCommand" },
+ { false, FT_INT, "SpellVisualKitID" },
+ { false, FT_INT, "EmoteFlags" },
+ { false, FT_SHORT, "AnimID" },
+ { false, FT_BYTE, "EmoteSpecProc" },
+ { false, FT_INT, "EmoteSpecProcParam" },
+ { false, FT_INT, "EmoteSoundID" },
+ { true, FT_INT, "ClassMask" },
+ { true, FT_INT, "RaceMask" },
+ };
+ return { &fields[0], std::extent::value, EmotesMeta::Instance(), HOTFIX_SEL_EMOTES };
+ }
+};
+
+struct EmotesTextLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Name" },
+ { false, FT_SHORT, "EmoteID" },
+ };
+ return { &fields[0], std::extent::value, EmotesTextMeta::Instance(), HOTFIX_SEL_EMOTES_TEXT };
+ }
+};
+
+struct EmotesTextSoundLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_SHORT, "EmotesTextId" },
+ { false, FT_BYTE, "RaceId" },
+ { false, FT_BYTE, "SexId" },
+ { false, FT_BYTE, "ClassId" },
+ { false, FT_INT, "SoundId" },
+ };
+ return { &fields[0], std::extent::value, EmotesTextSoundMeta::Instance(), HOTFIX_SEL_EMOTES_TEXT_SOUND };
+ }
+};
+
+struct FactionLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "ReputationRaceMask1" },
+ { false, FT_INT, "ReputationRaceMask2" },
+ { false, FT_INT, "ReputationRaceMask3" },
+ { false, FT_INT, "ReputationRaceMask4" },
+ { true, FT_INT, "ReputationBase1" },
+ { true, FT_INT, "ReputationBase2" },
+ { true, FT_INT, "ReputationBase3" },
+ { true, FT_INT, "ReputationBase4" },
+ { false, FT_FLOAT, "ParentFactionModIn" },
+ { false, FT_FLOAT, "ParentFactionModOut" },
+ { false, FT_STRING, "Name" },
+ { false, FT_STRING, "Description" },
+ { false, FT_INT, "ReputationMax1" },
+ { false, FT_INT, "ReputationMax2" },
+ { false, FT_INT, "ReputationMax3" },
+ { false, FT_INT, "ReputationMax4" },
+ { true, FT_SHORT, "ReputationIndex" },
+ { false, FT_SHORT, "ReputationClassMask1" },
+ { false, FT_SHORT, "ReputationClassMask2" },
+ { false, FT_SHORT, "ReputationClassMask3" },
+ { false, FT_SHORT, "ReputationClassMask4" },
+ { false, FT_SHORT, "ReputationFlags1" },
+ { false, FT_SHORT, "ReputationFlags2" },
+ { false, FT_SHORT, "ReputationFlags3" },
+ { false, FT_SHORT, "ReputationFlags4" },
+ { false, FT_SHORT, "ParentFactionID" },
+ { false, FT_BYTE, "ParentFactionCapIn" },
+ { false, FT_BYTE, "ParentFactionCapOut" },
+ { false, FT_BYTE, "Expansion" },
+ { false, FT_BYTE, "Flags" },
+ { false, FT_BYTE, "FriendshipRepID" },
+ };
+ return { &fields[0], std::extent::value, FactionMeta::Instance(), HOTFIX_SEL_FACTION };
+ }
+};
+
+struct FactionTemplateLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_SHORT, "Faction" },
+ { false, FT_SHORT, "Flags" },
+ { false, FT_SHORT, "Enemies1" },
+ { false, FT_SHORT, "Enemies2" },
+ { false, FT_SHORT, "Enemies3" },
+ { false, FT_SHORT, "Enemies4" },
+ { false, FT_SHORT, "Friends1" },
+ { false, FT_SHORT, "Friends2" },
+ { false, FT_SHORT, "Friends3" },
+ { false, FT_SHORT, "Friends4" },
+ { false, FT_BYTE, "Mask" },
+ { false, FT_BYTE, "FriendMask" },
+ { false, FT_BYTE, "EnemyMask" },
+ };
+ return { &fields[0], std::extent::value, FactionTemplateMeta::Instance(), HOTFIX_SEL_FACTION_TEMPLATE };
+ }
+};
+
+struct GameobjectsLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_FLOAT, "PositionX" },
+ { false, FT_FLOAT, "PositionY" },
+ { false, FT_FLOAT, "PositionZ" },
+ { false, FT_FLOAT, "RotationX" },
+ { false, FT_FLOAT, "RotationY" },
+ { false, FT_FLOAT, "RotationZ" },
+ { false, FT_FLOAT, "RotationW" },
+ { false, FT_FLOAT, "Size" },
+ { true, FT_INT, "Data1" },
+ { true, FT_INT, "Data2" },
+ { true, FT_INT, "Data3" },
+ { true, FT_INT, "Data4" },
+ { true, FT_INT, "Data5" },
+ { true, FT_INT, "Data6" },
+ { true, FT_INT, "Data7" },
+ { true, FT_INT, "Data8" },
+ { false, FT_STRING, "Name" },
+ { false, FT_SHORT, "MapID" },
+ { false, FT_SHORT, "DisplayID" },
+ { false, FT_SHORT, "PhaseID" },
+ { false, FT_SHORT, "PhaseGroupID" },
+ { false, FT_BYTE, "PhaseUseFlags" },
+ { false, FT_BYTE, "Type" },
+ { false, FT_INT, "ID" },
+ };
+ return { &fields[0], std::extent::value, GameObjectsMeta::Instance(), HOTFIX_SEL_GAMEOBJECTS };
+ }
+};
+
+struct GameobjectDisplayInfoLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "FileDataID" },
+ { false, FT_FLOAT, "GeoBoxMinX" },
+ { false, FT_FLOAT, "GeoBoxMinY" },
+ { false, FT_FLOAT, "GeoBoxMinZ" },
+ { false, FT_FLOAT, "GeoBoxMaxX" },
+ { false, FT_FLOAT, "GeoBoxMaxY" },
+ { false, FT_FLOAT, "GeoBoxMaxZ" },
+ { false, FT_FLOAT, "OverrideLootEffectScale" },
+ { false, FT_FLOAT, "OverrideNameScale" },
+ { false, FT_SHORT, "ObjectEffectPackageID" },
+ };
+ return { &fields[0], std::extent::value, GameObjectDisplayInfoMeta::Instance(), HOTFIX_SEL_GAMEOBJECT_DISPLAY_INFO };
+ }
+};
+
+struct GarrAbilityLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_STRING, "Name" },
+ { false, FT_STRING, "Description" },
+ { false, FT_INT, "IconFileDataID" },
+ { false, FT_SHORT, "Flags" },
+ { false, FT_SHORT, "OtherFactionGarrAbilityID" },
+ { false, FT_BYTE, "GarrAbilityCategoryID" },
+ { false, FT_BYTE, "FollowerTypeID" },
+ { false, FT_INT, "ID" },
+ };
+ return { &fields[0], std::extent::value, GarrAbilityMeta::Instance(), HOTFIX_SEL_GARR_ABILITY };
+ }
+};
+
+struct GarrBuildingLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "HordeGameObjectID" },
+ { false, FT_INT, "AllianceGameObjectID" },
+ { false, FT_STRING, "NameAlliance" },
+ { false, FT_STRING, "NameHorde" },
+ { false, FT_STRING, "Description" },
+ { false, FT_STRING, "Tooltip" },
+ { false, FT_INT, "IconFileDataID" },
+ { false, FT_SHORT, "CostCurrencyID" },
+ { false, FT_SHORT, "HordeTexPrefixKitID" },
+ { false, FT_SHORT, "AllianceTexPrefixKitID" },
+ { false, FT_SHORT, "AllianceActivationScenePackageID" },
+ { false, FT_SHORT, "HordeActivationScenePackageID" },
+ { false, FT_SHORT, "FollowerRequiredGarrAbilityID" },
+ { false, FT_SHORT, "FollowerGarrAbilityEffectID" },
+ { true, FT_SHORT, "CostMoney" },
+ { false, FT_BYTE, "Unknown" },
+ { false, FT_BYTE, "Type" },
+ { false, FT_BYTE, "Level" },
+ { false, FT_BYTE, "Flags" },
+ { false, FT_BYTE, "MaxShipments" },
+ { false, FT_BYTE, "GarrTypeID" },
+ { true, FT_INT, "BuildDuration" },
+ { true, FT_INT, "CostCurrencyAmount" },
+ { true, FT_INT, "BonusAmount" },
+ };
+ return { &fields[0], std::extent::value, GarrBuildingMeta::Instance(), HOTFIX_SEL_GARR_BUILDING };
+ }
+};
+
+struct GarrBuildingPlotInstLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_FLOAT, "LandmarkOffsetX" },
+ { false, FT_FLOAT, "LandmarkOffsetY" },
+ { false, FT_SHORT, "UiTextureAtlasMemberID" },
+ { false, FT_SHORT, "GarrSiteLevelPlotInstID" },
+ { false, FT_BYTE, "GarrBuildingID" },
+ { false, FT_INT, "ID" },
+ };
+ return { &fields[0], std::extent::value, GarrBuildingPlotInstMeta::Instance(), HOTFIX_SEL_GARR_BUILDING_PLOT_INST };
+ }
+};
+
+struct GarrClassSpecLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_STRING, "NameMale" },
+ { false, FT_STRING, "NameFemale" },
+ { false, FT_STRING, "NameGenderless" },
+ { false, FT_SHORT, "ClassAtlasID" },
+ { false, FT_BYTE, "GarrFollItemSetID" },
+ { false, FT_BYTE, "Limit" },
+ { false, FT_BYTE, "Flags" },
+ { false, FT_INT, "ID" },
+ };
+ return { &fields[0], std::extent::value, GarrClassSpecMeta::Instance(), HOTFIX_SEL_GARR_CLASS_SPEC };
+ }
+};
+
+struct GarrFollowerLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "HordeCreatureID" },
+ { false, FT_INT, "AllianceCreatureID" },
+ { false, FT_STRING, "HordeSourceText" },
+ { false, FT_STRING, "AllianceSourceText" },
+ { false, FT_INT, "HordePortraitIconID" },
+ { false, FT_INT, "AlliancePortraitIconID" },
+ { false, FT_INT, "HordeAddedBroadcastTextID" },
+ { false, FT_INT, "AllianceAddedBroadcastTextID" },
+ { false, FT_SHORT, "HordeGarrFollItemSetID" },
+ { false, FT_SHORT, "AllianceGarrFollItemSetID" },
+ { false, FT_SHORT, "ItemLevelWeapon" },
+ { false, FT_SHORT, "ItemLevelArmor" },
+ { false, FT_SHORT, "HordeListPortraitTextureKitID" },
+ { false, FT_SHORT, "AllianceListPortraitTextureKitID" },
+ { false, FT_BYTE, "FollowerTypeID" },
+ { false, FT_BYTE, "HordeUiAnimRaceInfoID" },
+ { false, FT_BYTE, "AllianceUiAnimRaceInfoID" },
+ { false, FT_BYTE, "Quality" },
+ { false, FT_BYTE, "HordeGarrClassSpecID" },
+ { false, FT_BYTE, "AllianceGarrClassSpecID" },
+ { false, FT_BYTE, "Level" },
+ { false, FT_BYTE, "Unknown1" },
+ { false, FT_BYTE, "Flags" },
+ { true, FT_BYTE, "Unknown2" },
+ { true, FT_BYTE, "Unknown3" },
+ { false, FT_BYTE, "GarrTypeID" },
+ { false, FT_BYTE, "MaxDurability" },
+ { false, FT_BYTE, "Class" },
+ { false, FT_BYTE, "HordeFlavorTextGarrStringID" },
+ { false, FT_BYTE, "AllianceFlavorTextGarrStringID" },
+ { false, FT_INT, "ID" },
+ };
+ return { &fields[0], std::extent::value, GarrFollowerMeta::Instance(), HOTFIX_SEL_GARR_FOLLOWER };
+ }
+};
+
+struct GarrFollowerXAbilityLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_SHORT, "GarrFollowerID" },
+ { false, FT_SHORT, "GarrAbilityID" },
+ { false, FT_BYTE, "FactionIndex" },
+ };
+ return { &fields[0], std::extent::value, GarrFollowerXAbilityMeta::Instance(), HOTFIX_SEL_GARR_FOLLOWER_X_ABILITY };
+ }
+};
+
+struct GarrPlotLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Name" },
+ { false, FT_INT, "AllianceConstructionGameObjectID" },
+ { false, FT_INT, "HordeConstructionGameObjectID" },
+ { false, FT_BYTE, "GarrPlotUICategoryID" },
+ { false, FT_BYTE, "PlotType" },
+ { false, FT_BYTE, "Flags" },
+ { false, FT_INT, "MinCount" },
+ { false, FT_INT, "MaxCount" },
+ };
+ return { &fields[0], std::extent::value, GarrPlotMeta::Instance(), HOTFIX_SEL_GARR_PLOT };
+ }
+};
+
+struct GarrPlotBuildingLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_BYTE, "GarrPlotID" },
+ { false, FT_BYTE, "GarrBuildingID" },
+ };
+ return { &fields[0], std::extent::value, GarrPlotBuildingMeta::Instance(), HOTFIX_SEL_GARR_PLOT_BUILDING };
+ }
+};
+
+struct GarrPlotInstanceLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Name" },
+ { false, FT_BYTE, "GarrPlotID" },
+ };
+ return { &fields[0], std::extent::value, GarrPlotInstanceMeta::Instance(), HOTFIX_SEL_GARR_PLOT_INSTANCE };
+ }
+};
+
+struct GarrSiteLevelLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "TownHallX" },
+ { false, FT_FLOAT, "TownHallY" },
+ { false, FT_SHORT, "MapID" },
+ { false, FT_SHORT, "SiteID" },
+ { false, FT_SHORT, "UpgradeResourceCost" },
+ { false, FT_SHORT, "UpgradeMoneyCost" },
+ { false, FT_BYTE, "Level" },
+ { false, FT_BYTE, "UITextureKitID" },
+ { false, FT_BYTE, "MovieID" },
+ { false, FT_BYTE, "Level2" },
+ };
+ return { &fields[0], std::extent::value, GarrSiteLevelMeta::Instance(), HOTFIX_SEL_GARR_SITE_LEVEL };
+ }
+};
+
+struct GarrSiteLevelPlotInstLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "LandmarkX" },
+ { false, FT_FLOAT, "LandmarkY" },
+ { false, FT_SHORT, "GarrSiteLevelID" },
+ { false, FT_BYTE, "GarrPlotInstanceID" },
+ { false, FT_BYTE, "Unknown" },
+ };
+ return { &fields[0], std::extent::value, GarrSiteLevelPlotInstMeta::Instance(), HOTFIX_SEL_GARR_SITE_LEVEL_PLOT_INST };
+ }
+};
+
+struct GemPropertiesLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "Type" },
+ { false, FT_SHORT, "EnchantID" },
+ { false, FT_SHORT, "MinItemLevel" },
+ };
+ return { &fields[0], std::extent::value, GemPropertiesMeta::Instance(), HOTFIX_SEL_GEM_PROPERTIES };
+ }
+};
+
+struct GlyphBindableSpellLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "SpellID" },
+ { false, FT_SHORT, "GlyphPropertiesID" },
+ };
+ return { &fields[0], std::extent::value, GlyphBindableSpellMeta::Instance(), HOTFIX_SEL_GLYPH_BINDABLE_SPELL };
+ }
+};
+
+struct GlyphPropertiesLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "SpellID" },
+ { false, FT_SHORT, "SpellIconID" },
+ { false, FT_BYTE, "Type" },
+ { false, FT_BYTE, "GlyphExclusiveCategoryID" },
+ };
+ return { &fields[0], std::extent::value, GlyphPropertiesMeta::Instance(), HOTFIX_SEL_GLYPH_PROPERTIES };
+ }
+};
+
+struct GlyphRequiredSpecLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_SHORT, "GlyphPropertiesID" },
+ { false, FT_SHORT, "ChrSpecializationID" },
+ };
+ return { &fields[0], std::extent::value, GlyphRequiredSpecMeta::Instance(), HOTFIX_SEL_GLYPH_REQUIRED_SPEC };
+ }
+};
+
+struct GuildColorBackgroundLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_BYTE, "Red" },
+ { false, FT_BYTE, "Green" },
+ { false, FT_BYTE, "Blue" },
+ };
+ return { &fields[0], std::extent::value, GuildColorBackgroundMeta::Instance(), HOTFIX_SEL_GUILD_COLOR_BACKGROUND };
+ }
+};
+
+struct GuildColorBorderLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_BYTE, "Red" },
+ { false, FT_BYTE, "Green" },
+ { false, FT_BYTE, "Blue" },
+ };
+ return { &fields[0], std::extent::value, GuildColorBorderMeta::Instance(), HOTFIX_SEL_GUILD_COLOR_BORDER };
+ }
+};
+
+struct GuildColorEmblemLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_BYTE, "Red" },
+ { false, FT_BYTE, "Green" },
+ { false, FT_BYTE, "Blue" },
+ };
+ return { &fields[0], std::extent::value, GuildColorEmblemMeta::Instance(), HOTFIX_SEL_GUILD_COLOR_EMBLEM };
+ }
+};
+
+struct GuildPerkSpellsLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "SpellID" },
+ };
+ return { &fields[0], std::extent::value, GuildPerkSpellsMeta::Instance(), HOTFIX_SEL_GUILD_PERK_SPELLS };
+ }
+};
+
+struct HeirloomLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ItemID" },
+ { false, FT_STRING, "SourceText" },
+ { false, FT_INT, "OldItem1" },
+ { false, FT_INT, "OldItem2" },
+ { false, FT_INT, "NextDifficultyItemID" },
+ { false, FT_INT, "UpgradeItemID1" },
+ { false, FT_INT, "UpgradeItemID2" },
+ { false, FT_SHORT, "ItemBonusListID1" },
+ { false, FT_SHORT, "ItemBonusListID2" },
+ { false, FT_BYTE, "Flags" },
+ { false, FT_BYTE, "Source" },
+ { false, FT_INT, "ID" },
+ };
+ return { &fields[0], std::extent::value, HeirloomMeta::Instance(), HOTFIX_SEL_HEIRLOOM };
+ }
+};
+
+struct HolidaysLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "Date1" },
+ { false, FT_INT, "Date2" },
+ { false, FT_INT, "Date3" },
+ { false, FT_INT, "Date4" },
+ { false, FT_INT, "Date5" },
+ { false, FT_INT, "Date6" },
+ { false, FT_INT, "Date7" },
+ { false, FT_INT, "Date8" },
+ { false, FT_INT, "Date9" },
+ { false, FT_INT, "Date10" },
+ { false, FT_INT, "Date11" },
+ { false, FT_INT, "Date12" },
+ { false, FT_INT, "Date13" },
+ { false, FT_INT, "Date14" },
+ { false, FT_INT, "Date15" },
+ { false, FT_INT, "Date16" },
+ { false, FT_STRING_NOT_LOCALIZED, "TextureFilename" },
+ { false, FT_SHORT, "Duration1" },
+ { false, FT_SHORT, "Duration2" },
+ { false, FT_SHORT, "Duration3" },
+ { false, FT_SHORT, "Duration4" },
+ { false, FT_SHORT, "Duration5" },
+ { false, FT_SHORT, "Duration6" },
+ { false, FT_SHORT, "Duration7" },
+ { false, FT_SHORT, "Duration8" },
+ { false, FT_SHORT, "Duration9" },
+ { false, FT_SHORT, "Duration10" },
+ { false, FT_SHORT, "Region" },
+ { false, FT_BYTE, "Looping" },
+ { false, FT_BYTE, "CalendarFlags1" },
+ { false, FT_BYTE, "CalendarFlags2" },
+ { false, FT_BYTE, "CalendarFlags3" },
+ { false, FT_BYTE, "CalendarFlags4" },
+ { false, FT_BYTE, "CalendarFlags5" },
+ { false, FT_BYTE, "CalendarFlags6" },
+ { false, FT_BYTE, "CalendarFlags7" },
+ { false, FT_BYTE, "CalendarFlags8" },
+ { false, FT_BYTE, "CalendarFlags9" },
+ { false, FT_BYTE, "CalendarFlags10" },
+ { false, FT_BYTE, "HolidayNameID" },
+ { false, FT_BYTE, "HolidayDescriptionID" },
+ { false, FT_BYTE, "Priority" },
+ { true, FT_BYTE, "CalendarFilterType" },
+ { false, FT_BYTE, "Flags" },
+ };
+ return { &fields[0], std::extent::value, HolidaysMeta::Instance(), HOTFIX_SEL_HOLIDAYS };
+ }
+};
+
+struct ImportPriceArmorLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "ClothFactor" },
+ { false, FT_FLOAT, "LeatherFactor" },
+ { false, FT_FLOAT, "MailFactor" },
+ { false, FT_FLOAT, "PlateFactor" },
+ };
+ return { &fields[0], std::extent::value, ImportPriceArmorMeta::Instance(), HOTFIX_SEL_IMPORT_PRICE_ARMOR };
+ }
+};
+
+struct ImportPriceQualityLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "Factor" },
+ };
+ return { &fields[0], std::extent::value, ImportPriceQualityMeta::Instance(), HOTFIX_SEL_IMPORT_PRICE_QUALITY };
+ }
+};
+
+struct ImportPriceShieldLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "Factor" },
+ };
+ return { &fields[0], std::extent::value, ImportPriceShieldMeta::Instance(), HOTFIX_SEL_IMPORT_PRICE_SHIELD };
+ }
+};
+
+struct ImportPriceWeaponLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "Factor" },
+ };
+ return { &fields[0], std::extent::value, ImportPriceWeaponMeta::Instance(), HOTFIX_SEL_IMPORT_PRICE_WEAPON };
+ }
+};
+
+struct ItemLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "FileDataID" },
+ { false, FT_BYTE, "Class" },
+ { false, FT_BYTE, "SubClass" },
+ { true, FT_BYTE, "SoundOverrideSubclass" },
+ { true, FT_BYTE, "Material" },
+ { false, FT_BYTE, "InventoryType" },
+ { false, FT_BYTE, "Sheath" },
+ { false, FT_BYTE, "GroupSoundsID" },
+ };
+ return { &fields[0], std::extent::value, ItemMeta::Instance(), HOTFIX_SEL_ITEM };
+ }
+};
+
+struct ItemAppearanceLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "DisplayID" },
+ { false, FT_INT, "IconFileDataID" },
+ { false, FT_INT, "UIOrder" },
+ { false, FT_BYTE, "ObjectComponentSlot" },
+ };
+ return { &fields[0], std::extent::value, ItemAppearanceMeta::Instance(), HOTFIX_SEL_ITEM_APPEARANCE };
+ }
+};
+
+struct ItemArmorQualityLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "QualityMod1" },
+ { false, FT_FLOAT, "QualityMod2" },
+ { false, FT_FLOAT, "QualityMod3" },
+ { false, FT_FLOAT, "QualityMod4" },
+ { false, FT_FLOAT, "QualityMod5" },
+ { false, FT_FLOAT, "QualityMod6" },
+ { false, FT_FLOAT, "QualityMod7" },
+ { false, FT_SHORT, "ItemLevel" },
+ };
+ return { &fields[0], std::extent::value, ItemArmorQualityMeta::Instance(), HOTFIX_SEL_ITEM_ARMOR_QUALITY };
+ }
+};
+
+struct ItemArmorShieldLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "Quality1" },
+ { false, FT_FLOAT, "Quality2" },
+ { false, FT_FLOAT, "Quality3" },
+ { false, FT_FLOAT, "Quality4" },
+ { false, FT_FLOAT, "Quality5" },
+ { false, FT_FLOAT, "Quality6" },
+ { false, FT_FLOAT, "Quality7" },
+ { false, FT_SHORT, "ItemLevel" },
+ };
+ return { &fields[0], std::extent::value, ItemArmorShieldMeta::Instance(), HOTFIX_SEL_ITEM_ARMOR_SHIELD };
+ }
+};
+
+struct ItemArmorTotalLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "Value1" },
+ { false, FT_FLOAT, "Value2" },
+ { false, FT_FLOAT, "Value3" },
+ { false, FT_FLOAT, "Value4" },
+ { false, FT_SHORT, "ItemLevel" },
+ };
+ return { &fields[0], std::extent::value, ItemArmorTotalMeta::Instance(), HOTFIX_SEL_ITEM_ARMOR_TOTAL };
+ }
+};
+
+struct ItemBagFamilyLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Name" },
+ };
+ return { &fields[0], std::extent::value, ItemBagFamilyMeta::Instance(), HOTFIX_SEL_ITEM_BAG_FAMILY };
+ }
+};
+
+struct ItemBonusLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { true, FT_INT, "Value1" },
+ { true, FT_INT, "Value2" },
+ { false, FT_SHORT, "BonusListID" },
+ { false, FT_BYTE, "Type" },
+ { false, FT_BYTE, "Index" },
+ };
+ return { &fields[0], std::extent::value, ItemBonusMeta::Instance(), HOTFIX_SEL_ITEM_BONUS };
+ }
+};
+
+struct ItemBonusListLevelDeltaLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { true, FT_SHORT, "Delta" },
+ { false, FT_INT, "ID" },
+ };
+ return { &fields[0], std::extent::value, ItemBonusListLevelDeltaMeta::Instance(), HOTFIX_SEL_ITEM_BONUS_LIST_LEVEL_DELTA };
+ }
+};
+
+struct ItemBonusTreeNodeLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_SHORT, "BonusTreeID" },
+ { false, FT_SHORT, "SubTreeID" },
+ { false, FT_SHORT, "BonusListID" },
+ { false, FT_BYTE, "BonusTreeModID" },
+ };
+ return { &fields[0], std::extent::value, ItemBonusTreeNodeMeta::Instance(), HOTFIX_SEL_ITEM_BONUS_TREE_NODE };
+ }
+};
+
+struct ItemChildEquipmentLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "ItemID" },
+ { false, FT_INT, "AltItemID" },
+ { false, FT_BYTE, "AltEquipmentSlot" },
+ };
+ return { &fields[0], std::extent::value, ItemChildEquipmentMeta::Instance(), HOTFIX_SEL_ITEM_CHILD_EQUIPMENT };
+ }
+};
+
+struct ItemClassLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "PriceMod" },
+ { false, FT_STRING, "Name" },
+ { false, FT_BYTE, "Flags" },
+ };
+ return { &fields[0], std::extent::value, ItemClassMeta::Instance(), HOTFIX_SEL_ITEM_CLASS };
+ }
+};
+
+struct ItemCurrencyCostLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "ItemId" },
+ };
+ return { &fields[0], std::extent::value, ItemCurrencyCostMeta::Instance(), HOTFIX_SEL_ITEM_CURRENCY_COST };
+ }
+};
+
+struct ItemDamageAmmoLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "DPS1" },
+ { false, FT_FLOAT, "DPS2" },
+ { false, FT_FLOAT, "DPS3" },
+ { false, FT_FLOAT, "DPS4" },
+ { false, FT_FLOAT, "DPS5" },
+ { false, FT_FLOAT, "DPS6" },
+ { false, FT_FLOAT, "DPS7" },
+ { false, FT_SHORT, "ItemLevel" },
+ };
+ return { &fields[0], std::extent::value, ItemDamageAmmoMeta::Instance(), HOTFIX_SEL_ITEM_DAMAGE_AMMO };
+ }
+};
+
+struct ItemDamageOneHandLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "DPS1" },
+ { false, FT_FLOAT, "DPS2" },
+ { false, FT_FLOAT, "DPS3" },
+ { false, FT_FLOAT, "DPS4" },
+ { false, FT_FLOAT, "DPS5" },
+ { false, FT_FLOAT, "DPS6" },
+ { false, FT_FLOAT, "DPS7" },
+ { false, FT_SHORT, "ItemLevel" },
+ };
+ return { &fields[0], std::extent::value, ItemDamageOneHandMeta::Instance(), HOTFIX_SEL_ITEM_DAMAGE_ONE_HAND };
+ }
+};
+
+struct ItemDamageOneHandCasterLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "DPS1" },
+ { false, FT_FLOAT, "DPS2" },
+ { false, FT_FLOAT, "DPS3" },
+ { false, FT_FLOAT, "DPS4" },
+ { false, FT_FLOAT, "DPS5" },
+ { false, FT_FLOAT, "DPS6" },
+ { false, FT_FLOAT, "DPS7" },
+ { false, FT_SHORT, "ItemLevel" },
+ };
+ return { &fields[0], std::extent::value, ItemDamageOneHandCasterMeta::Instance(), HOTFIX_SEL_ITEM_DAMAGE_ONE_HAND_CASTER };
+ }
+};
+
+struct ItemDamageTwoHandLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "DPS1" },
+ { false, FT_FLOAT, "DPS2" },
+ { false, FT_FLOAT, "DPS3" },
+ { false, FT_FLOAT, "DPS4" },
+ { false, FT_FLOAT, "DPS5" },
+ { false, FT_FLOAT, "DPS6" },
+ { false, FT_FLOAT, "DPS7" },
+ { false, FT_SHORT, "ItemLevel" },
+ };
+ return { &fields[0], std::extent::value, ItemDamageTwoHandMeta::Instance(), HOTFIX_SEL_ITEM_DAMAGE_TWO_HAND };
+ }
+};
+
+struct ItemDamageTwoHandCasterLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "DPS1" },
+ { false, FT_FLOAT, "DPS2" },
+ { false, FT_FLOAT, "DPS3" },
+ { false, FT_FLOAT, "DPS4" },
+ { false, FT_FLOAT, "DPS5" },
+ { false, FT_FLOAT, "DPS6" },
+ { false, FT_FLOAT, "DPS7" },
+ { false, FT_SHORT, "ItemLevel" },
+ };
+ return { &fields[0], std::extent::value, ItemDamageTwoHandCasterMeta::Instance(), HOTFIX_SEL_ITEM_DAMAGE_TWO_HAND_CASTER };
+ }
+};
+
+struct ItemDisenchantLootLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_SHORT, "MinItemLevel" },
+ { false, FT_SHORT, "MaxItemLevel" },
+ { false, FT_SHORT, "RequiredDisenchantSkill" },
+ { false, FT_BYTE, "ItemClass" },
+ { true, FT_BYTE, "ItemSubClass" },
+ { false, FT_BYTE, "ItemQuality" },
+ };
+ return { &fields[0], std::extent::value, ItemDisenchantLootMeta::Instance(), HOTFIX_SEL_ITEM_DISENCHANT_LOOT };
+ }
+};
+
+struct ItemEffectLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "ItemID" },
+ { false, FT_INT, "SpellID" },
+ { true, FT_INT, "Cooldown" },
+ { true, FT_INT, "CategoryCooldown" },
+ { true, FT_SHORT, "Charges" },
+ { false, FT_SHORT, "Category" },
+ { false, FT_SHORT, "ChrSpecializationID" },
+ { false, FT_BYTE, "OrderIndex" },
+ { false, FT_BYTE, "Trigger" },
+ };
+ return { &fields[0], std::extent::value, ItemEffectMeta::Instance(), HOTFIX_SEL_ITEM_EFFECT };
+ }
+};
+
+struct ItemExtendedCostLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "RequiredItem1" },
+ { false, FT_INT, "RequiredItem2" },
+ { false, FT_INT, "RequiredItem3" },
+ { false, FT_INT, "RequiredItem4" },
+ { false, FT_INT, "RequiredItem5" },
+ { false, FT_INT, "RequiredCurrencyCount1" },
+ { false, FT_INT, "RequiredCurrencyCount2" },
+ { false, FT_INT, "RequiredCurrencyCount3" },
+ { false, FT_INT, "RequiredCurrencyCount4" },
+ { false, FT_INT, "RequiredCurrencyCount5" },
+ { false, FT_SHORT, "RequiredItemCount1" },
+ { false, FT_SHORT, "RequiredItemCount2" },
+ { false, FT_SHORT, "RequiredItemCount3" },
+ { false, FT_SHORT, "RequiredItemCount4" },
+ { false, FT_SHORT, "RequiredItemCount5" },
+ { false, FT_SHORT, "RequiredPersonalArenaRating" },
+ { false, FT_SHORT, "RequiredCurrency1" },
+ { false, FT_SHORT, "RequiredCurrency2" },
+ { false, FT_SHORT, "RequiredCurrency3" },
+ { false, FT_SHORT, "RequiredCurrency4" },
+ { false, FT_SHORT, "RequiredCurrency5" },
+ { false, FT_BYTE, "RequiredArenaSlot" },
+ { false, FT_BYTE, "RequiredFactionId" },
+ { false, FT_BYTE, "RequiredFactionStanding" },
+ { false, FT_BYTE, "RequirementFlags" },
+ { false, FT_BYTE, "RequiredAchievement" },
+ };
+ return { &fields[0], std::extent::value, ItemExtendedCostMeta::Instance(), HOTFIX_SEL_ITEM_EXTENDED_COST };
+ }
+};
+
+struct ItemLimitCategoryLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Name" },
+ { false, FT_BYTE, "Quantity" },
+ { false, FT_BYTE, "Flags" },
+ };
+ return { &fields[0], std::extent::value, ItemLimitCategoryMeta::Instance(), HOTFIX_SEL_ITEM_LIMIT_CATEGORY };
+ }
+};
+
+struct ItemModifiedAppearanceLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ItemID" },
+ { false, FT_SHORT, "AppearanceID" },
+ { false, FT_BYTE, "AppearanceModID" },
+ { false, FT_BYTE, "Index" },
+ { false, FT_BYTE, "SourceType" },
+ { false, FT_INT, "ID" },
+ };
+ return { &fields[0], std::extent::value, ItemModifiedAppearanceMeta::Instance(), HOTFIX_SEL_ITEM_MODIFIED_APPEARANCE };
+ }
+};
+
+struct ItemPriceBaseLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "ArmorFactor" },
+ { false, FT_FLOAT, "WeaponFactor" },
+ { false, FT_SHORT, "ItemLevel" },
+ };
+ return { &fields[0], std::extent::value, ItemPriceBaseMeta::Instance(), HOTFIX_SEL_ITEM_PRICE_BASE };
+ }
+};
+
+struct ItemRandomPropertiesLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Name" },
+ { false, FT_SHORT, "Enchantment1" },
+ { false, FT_SHORT, "Enchantment2" },
+ { false, FT_SHORT, "Enchantment3" },
+ { false, FT_SHORT, "Enchantment4" },
+ { false, FT_SHORT, "Enchantment5" },
+ };
+ return { &fields[0], std::extent::value, ItemRandomPropertiesMeta::Instance(), HOTFIX_SEL_ITEM_RANDOM_PROPERTIES };
+ }
+};
+
+struct ItemRandomSuffixLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Name" },
+ { false, FT_SHORT, "Enchantment1" },
+ { false, FT_SHORT, "Enchantment2" },
+ { false, FT_SHORT, "Enchantment3" },
+ { false, FT_SHORT, "Enchantment4" },
+ { false, FT_SHORT, "Enchantment5" },
+ { false, FT_SHORT, "AllocationPct1" },
+ { false, FT_SHORT, "AllocationPct2" },
+ { false, FT_SHORT, "AllocationPct3" },
+ { false, FT_SHORT, "AllocationPct4" },
+ { false, FT_SHORT, "AllocationPct5" },
+ };
+ return { &fields[0], std::extent::value, ItemRandomSuffixMeta::Instance(), HOTFIX_SEL_ITEM_RANDOM_SUFFIX };
+ }
+};
+
+struct ItemSearchNameLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Name" },
+ { false, FT_INT, "Flags1" },
+ { false, FT_INT, "Flags2" },
+ { false, FT_INT, "Flags3" },
+ { false, FT_INT, "AllowableRace" },
+ { false, FT_INT, "RequiredSpell" },
+ { false, FT_SHORT, "RequiredReputationFaction" },
+ { false, FT_SHORT, "RequiredSkill" },
+ { false, FT_SHORT, "RequiredSkillRank" },
+ { false, FT_SHORT, "ItemLevel" },
+ { false, FT_BYTE, "Quality" },
+ { false, FT_BYTE, "RequiredExpansion" },
+ { false, FT_BYTE, "RequiredReputationRank" },
+ { false, FT_BYTE, "RequiredLevel" },
+ { true, FT_INT, "AllowableClass" },
+ };
+ return { &fields[0], std::extent::value, ItemSearchNameMeta::Instance(), HOTFIX_SEL_ITEM_SEARCH_NAME };
+ }
+};
+
+struct ItemSetLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Name" },
+ { false, FT_INT, "ItemID1" },
+ { false, FT_INT, "ItemID2" },
+ { false, FT_INT, "ItemID3" },
+ { false, FT_INT, "ItemID4" },
+ { false, FT_INT, "ItemID5" },
+ { false, FT_INT, "ItemID6" },
+ { false, FT_INT, "ItemID7" },
+ { false, FT_INT, "ItemID8" },
+ { false, FT_INT, "ItemID9" },
+ { false, FT_INT, "ItemID10" },
+ { false, FT_INT, "ItemID11" },
+ { false, FT_INT, "ItemID12" },
+ { false, FT_INT, "ItemID13" },
+ { false, FT_INT, "ItemID14" },
+ { false, FT_INT, "ItemID15" },
+ { false, FT_INT, "ItemID16" },
+ { false, FT_INT, "ItemID17" },
+ { false, FT_SHORT, "RequiredSkillRank" },
+ { false, FT_INT, "RequiredSkill" },
+ { false, FT_INT, "Flags" },
+ };
+ return { &fields[0], std::extent::value, ItemSetMeta::Instance(), HOTFIX_SEL_ITEM_SET };
+ }
+};
+
+struct ItemSetSpellLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "SpellID" },
+ { false, FT_SHORT, "ItemSetID" },
+ { false, FT_SHORT, "ChrSpecID" },
+ { false, FT_BYTE, "Threshold" },
+ };
+ return { &fields[0], std::extent::value, ItemSetSpellMeta::Instance(), HOTFIX_SEL_ITEM_SET_SPELL };
+ }
+};
+
+struct ItemSparseLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "Flags1" },
+ { false, FT_INT, "Flags2" },
+ { false, FT_INT, "Flags3" },
+ { false, FT_FLOAT, "Unk1" },
+ { false, FT_FLOAT, "Unk2" },
+ { false, FT_INT, "BuyPrice" },
+ { false, FT_INT, "SellPrice" },
+ { true, FT_INT, "AllowableClass" },
+ { true, FT_INT, "AllowableRace" },
+ { false, FT_INT, "RequiredSpell" },
+ { false, FT_INT, "MaxCount" },
+ { false, FT_INT, "Stackable" },
+ { true, FT_INT, "ItemStatAllocation1" },
+ { true, FT_INT, "ItemStatAllocation2" },
+ { true, FT_INT, "ItemStatAllocation3" },
+ { true, FT_INT, "ItemStatAllocation4" },
+ { true, FT_INT, "ItemStatAllocation5" },
+ { true, FT_INT, "ItemStatAllocation6" },
+ { true, FT_INT, "ItemStatAllocation7" },
+ { true, FT_INT, "ItemStatAllocation8" },
+ { true, FT_INT, "ItemStatAllocation9" },
+ { true, FT_INT, "ItemStatAllocation10" },
+ { false, FT_FLOAT, "ItemStatSocketCostMultiplier1" },
+ { false, FT_FLOAT, "ItemStatSocketCostMultiplier2" },
+ { false, FT_FLOAT, "ItemStatSocketCostMultiplier3" },
+ { false, FT_FLOAT, "ItemStatSocketCostMultiplier4" },
+ { false, FT_FLOAT, "ItemStatSocketCostMultiplier5" },
+ { false, FT_FLOAT, "ItemStatSocketCostMultiplier6" },
+ { false, FT_FLOAT, "ItemStatSocketCostMultiplier7" },
+ { false, FT_FLOAT, "ItemStatSocketCostMultiplier8" },
+ { false, FT_FLOAT, "ItemStatSocketCostMultiplier9" },
+ { false, FT_FLOAT, "ItemStatSocketCostMultiplier10" },
+ { false, FT_FLOAT, "RangedModRange" },
+ { false, FT_STRING, "Name" },
+ { false, FT_STRING, "Name2" },
+ { false, FT_STRING, "Name3" },
+ { false, FT_STRING, "Name4" },
+ { false, FT_STRING, "Description" },
+ { false, FT_INT, "BagFamily" },
+ { false, FT_FLOAT, "ArmorDamageModifier" },
+ { false, FT_INT, "Duration" },
+ { false, FT_FLOAT, "StatScalingFactor" },
+ { false, FT_SHORT, "ItemLevel" },
+ { false, FT_SHORT, "RequiredSkill" },
+ { false, FT_SHORT, "RequiredSkillRank" },
+ { false, FT_SHORT, "RequiredReputationFaction" },
+ { true, FT_SHORT, "ItemStatValue1" },
+ { true, FT_SHORT, "ItemStatValue2" },
+ { true, FT_SHORT, "ItemStatValue3" },
+ { true, FT_SHORT, "ItemStatValue4" },
+ { true, FT_SHORT, "ItemStatValue5" },
+ { true, FT_SHORT, "ItemStatValue6" },
+ { true, FT_SHORT, "ItemStatValue7" },
+ { true, FT_SHORT, "ItemStatValue8" },
+ { true, FT_SHORT, "ItemStatValue9" },
+ { true, FT_SHORT, "ItemStatValue10" },
+ { false, FT_SHORT, "ScalingStatDistribution" },
+ { false, FT_SHORT, "Delay" },
+ { false, FT_SHORT, "PageText" },
+ { false, FT_SHORT, "StartQuest" },
+ { false, FT_SHORT, "LockID" },
+ { false, FT_SHORT, "RandomProperty" },
+ { false, FT_SHORT, "RandomSuffix" },
+ { false, FT_SHORT, "ItemSet" },
+ { false, FT_SHORT, "Area" },
+ { false, FT_SHORT, "Map" },
+ { false, FT_SHORT, "SocketBonus" },
+ { false, FT_SHORT, "GemProperties" },
+ { false, FT_SHORT, "ItemLimitCategory" },
+ { false, FT_SHORT, "HolidayID" },
+ { false, FT_SHORT, "ItemNameDescriptionID" },
+ { false, FT_BYTE, "Quality" },
+ { false, FT_BYTE, "BuyCount" },
+ { false, FT_BYTE, "InventoryType" },
+ { true, FT_BYTE, "RequiredLevel" },
+ { false, FT_BYTE, "RequiredHonorRank" },
+ { false, FT_BYTE, "RequiredCityRank" },
+ { false, FT_BYTE, "RequiredReputationRank" },
+ { false, FT_BYTE, "ContainerSlots" },
+ { true, FT_BYTE, "ItemStatType1" },
+ { true, FT_BYTE, "ItemStatType2" },
+ { true, FT_BYTE, "ItemStatType3" },
+ { true, FT_BYTE, "ItemStatType4" },
+ { true, FT_BYTE, "ItemStatType5" },
+ { true, FT_BYTE, "ItemStatType6" },
+ { true, FT_BYTE, "ItemStatType7" },
+ { true, FT_BYTE, "ItemStatType8" },
+ { true, FT_BYTE, "ItemStatType9" },
+ { true, FT_BYTE, "ItemStatType10" },
+ { false, FT_BYTE, "DamageType" },
+ { false, FT_BYTE, "Bonding" },
+ { false, FT_BYTE, "LanguageID" },
+ { false, FT_BYTE, "PageMaterial" },
+ { true, FT_BYTE, "Material" },
+ { false, FT_BYTE, "Sheath" },
+ { false, FT_BYTE, "TotemCategory" },
+ { false, FT_BYTE, "SocketColor1" },
+ { false, FT_BYTE, "SocketColor2" },
+ { false, FT_BYTE, "SocketColor3" },
+ { false, FT_BYTE, "CurrencySubstitutionID" },
+ { false, FT_BYTE, "CurrencySubstitutionCount" },
+ { false, FT_BYTE, "ArtifactID" },
+ { false, FT_BYTE, "RequiredExpansion" },
+ };
+ return { &fields[0], std::extent::value, ItemSparseMeta::Instance(), HOTFIX_SEL_ITEM_SPARSE };
+ }
+};
+
+struct ItemSpecLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_SHORT, "SpecID" },
+ { false, FT_BYTE, "MinLevel" },
+ { false, FT_BYTE, "MaxLevel" },
+ { false, FT_BYTE, "ItemType" },
+ { false, FT_BYTE, "PrimaryStat" },
+ { false, FT_BYTE, "SecondaryStat" },
+ };
+ return { &fields[0], std::extent::value, ItemSpecMeta::Instance(), HOTFIX_SEL_ITEM_SPEC };
+ }
+};
+
+struct ItemSpecOverrideLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "ItemID" },
+ { false, FT_SHORT, "SpecID" },
+ };
+ return { &fields[0], std::extent::value, ItemSpecOverrideMeta::Instance(), HOTFIX_SEL_ITEM_SPEC_OVERRIDE };
+ }
+};
+
+struct ItemUpgradeLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "CurrencyCost" },
+ { false, FT_SHORT, "PrevItemUpgradeID" },
+ { false, FT_SHORT, "CurrencyID" },
+ { false, FT_BYTE, "ItemUpgradePathID" },
+ { false, FT_BYTE, "ItemLevelBonus" },
+ };
+ return { &fields[0], std::extent::value, ItemUpgradeMeta::Instance(), HOTFIX_SEL_ITEM_UPGRADE };
+ }
+};
+
+struct ItemXBonusTreeLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "ItemID" },
+ { false, FT_SHORT, "BonusTreeID" },
+ };
+ return { &fields[0], std::extent::value, ItemXBonusTreeMeta::Instance(), HOTFIX_SEL_ITEM_X_BONUS_TREE };
+ }
+};
+
+struct KeyChainLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_BYTE, "Key1" },
+ { false, FT_BYTE, "Key2" },
+ { false, FT_BYTE, "Key3" },
+ { false, FT_BYTE, "Key4" },
+ { false, FT_BYTE, "Key5" },
+ { false, FT_BYTE, "Key6" },
+ { false, FT_BYTE, "Key7" },
+ { false, FT_BYTE, "Key8" },
+ { false, FT_BYTE, "Key9" },
+ { false, FT_BYTE, "Key10" },
+ { false, FT_BYTE, "Key11" },
+ { false, FT_BYTE, "Key12" },
+ { false, FT_BYTE, "Key13" },
+ { false, FT_BYTE, "Key14" },
+ { false, FT_BYTE, "Key15" },
+ { false, FT_BYTE, "Key16" },
+ { false, FT_BYTE, "Key17" },
+ { false, FT_BYTE, "Key18" },
+ { false, FT_BYTE, "Key19" },
+ { false, FT_BYTE, "Key20" },
+ { false, FT_BYTE, "Key21" },
+ { false, FT_BYTE, "Key22" },
+ { false, FT_BYTE, "Key23" },
+ { false, FT_BYTE, "Key24" },
+ { false, FT_BYTE, "Key25" },
+ { false, FT_BYTE, "Key26" },
+ { false, FT_BYTE, "Key27" },
+ { false, FT_BYTE, "Key28" },
+ { false, FT_BYTE, "Key29" },
+ { false, FT_BYTE, "Key30" },
+ { false, FT_BYTE, "Key31" },
+ { false, FT_BYTE, "Key32" },
+ };
+ return { &fields[0], std::extent::value, KeyChainMeta::Instance(), HOTFIX_SEL_KEY_CHAIN };
+ }
+};
+
+struct LfgDungeonsLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_STRING, "Name" },
+ { false, FT_INT, "Flags" },
+ { false, FT_STRING_NOT_LOCALIZED, "TextureFilename" },
+ { false, FT_STRING, "Description" },
+ { false, FT_INT, "PlayerConditionID" },
+ { false, FT_SHORT, "MaxLevel" },
+ { false, FT_SHORT, "TargetLevelMax" },
+ { true, FT_SHORT, "MapID" },
+ { false, FT_SHORT, "RandomID" },
+ { false, FT_SHORT, "ScenarioID" },
+ { false, FT_SHORT, "LastBossJournalEncounterID" },
+ { false, FT_SHORT, "BonusReputationAmount" },
+ { false, FT_SHORT, "MentorItemLevel" },
+ { false, FT_BYTE, "MinLevel" },
+ { false, FT_BYTE, "TargetLevel" },
+ { false, FT_BYTE, "TargetLevelMin" },
+ { false, FT_BYTE, "DifficultyID" },
+ { false, FT_BYTE, "Type" },
+ { false, FT_BYTE, "Faction" },
+ { false, FT_BYTE, "Expansion" },
+ { false, FT_BYTE, "OrderIndex" },
+ { false, FT_BYTE, "GroupID" },
+ { false, FT_BYTE, "CountTank" },
+ { false, FT_BYTE, "CountHealer" },
+ { false, FT_BYTE, "CountDamage" },
+ { false, FT_BYTE, "MinCountTank" },
+ { false, FT_BYTE, "MinCountHealer" },
+ { false, FT_BYTE, "MinCountDamage" },
+ { false, FT_BYTE, "SubType" },
+ { false, FT_BYTE, "MentorCharLevel" },
+ { false, FT_INT, "ID" },
+ };
+ return { &fields[0], std::extent::value, LfgDungeonsMeta::Instance(), HOTFIX_SEL_LFG_DUNGEONS };
+ }
+};
+
+struct LightLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "PosX" },
+ { false, FT_FLOAT, "PosY" },
+ { false, FT_FLOAT, "PosZ" },
+ { false, FT_FLOAT, "FalloffStart" },
+ { false, FT_FLOAT, "FalloffEnd" },
+ { false, FT_SHORT, "MapID" },
+ { false, FT_SHORT, "LightParamsID1" },
+ { false, FT_SHORT, "LightParamsID2" },
+ { false, FT_SHORT, "LightParamsID3" },
+ { false, FT_SHORT, "LightParamsID4" },
+ { false, FT_SHORT, "LightParamsID5" },
+ { false, FT_SHORT, "LightParamsID6" },
+ { false, FT_SHORT, "LightParamsID7" },
+ { false, FT_SHORT, "LightParamsID8" },
+ };
+ return { &fields[0], std::extent::value, LightMeta::Instance(), HOTFIX_SEL_LIGHT };
+ }
+};
+
+struct LiquidTypeLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Name" },
+ { false, FT_INT, "SpellID" },
+ { false, FT_FLOAT, "MaxDarkenDepth" },
+ { false, FT_FLOAT, "FogDarkenIntensity" },
+ { false, FT_FLOAT, "AmbDarkenIntensity" },
+ { false, FT_FLOAT, "DirDarkenIntensity" },
+ { false, FT_FLOAT, "ParticleScale" },
+ { false, FT_STRING_NOT_LOCALIZED, "Texture1" },
+ { false, FT_STRING_NOT_LOCALIZED, "Texture2" },
+ { false, FT_STRING_NOT_LOCALIZED, "Texture3" },
+ { false, FT_STRING_NOT_LOCALIZED, "Texture4" },
+ { false, FT_STRING_NOT_LOCALIZED, "Texture5" },
+ { false, FT_STRING_NOT_LOCALIZED, "Texture6" },
+ { false, FT_INT, "Color1" },
+ { false, FT_INT, "Color2" },
+ { false, FT_FLOAT, "Float1" },
+ { false, FT_FLOAT, "Float2" },
+ { false, FT_FLOAT, "Float3" },
+ { false, FT_FLOAT, "Float4" },
+ { false, FT_FLOAT, "Float5" },
+ { false, FT_FLOAT, "Float6" },
+ { false, FT_FLOAT, "Float7" },
+ { false, FT_FLOAT, "Float8" },
+ { false, FT_FLOAT, "Float9" },
+ { false, FT_FLOAT, "Float10" },
+ { false, FT_FLOAT, "Float11" },
+ { false, FT_FLOAT, "Float12" },
+ { false, FT_FLOAT, "Float13" },
+ { false, FT_FLOAT, "Float14" },
+ { false, FT_FLOAT, "Float15" },
+ { false, FT_FLOAT, "Float16" },
+ { false, FT_FLOAT, "Float17" },
+ { false, FT_FLOAT, "Float18" },
+ { false, FT_INT, "Int1" },
+ { false, FT_INT, "Int2" },
+ { false, FT_INT, "Int3" },
+ { false, FT_INT, "Int4" },
+ { false, FT_SHORT, "Flags" },
+ { false, FT_SHORT, "LightID" },
+ { false, FT_BYTE, "Type" },
+ { false, FT_BYTE, "ParticleMovement" },
+ { false, FT_BYTE, "ParticleTexSlots" },
+ { false, FT_BYTE, "MaterialID" },
+ { false, FT_BYTE, "DepthTexCount1" },
+ { false, FT_BYTE, "DepthTexCount2" },
+ { false, FT_BYTE, "DepthTexCount3" },
+ { false, FT_BYTE, "DepthTexCount4" },
+ { false, FT_BYTE, "DepthTexCount5" },
+ { false, FT_BYTE, "DepthTexCount6" },
+ { false, FT_INT, "SoundID" },
+ };
+ return { &fields[0], std::extent::value, LiquidTypeMeta::Instance(), HOTFIX_SEL_LIQUID_TYPE };
+ }
+};
+
+struct LockLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "Index1" },
+ { false, FT_INT, "Index2" },
+ { false, FT_INT, "Index3" },
+ { false, FT_INT, "Index4" },
+ { false, FT_INT, "Index5" },
+ { false, FT_INT, "Index6" },
+ { false, FT_INT, "Index7" },
+ { false, FT_INT, "Index8" },
+ { false, FT_SHORT, "Skill1" },
+ { false, FT_SHORT, "Skill2" },
+ { false, FT_SHORT, "Skill3" },
+ { false, FT_SHORT, "Skill4" },
+ { false, FT_SHORT, "Skill5" },
+ { false, FT_SHORT, "Skill6" },
+ { false, FT_SHORT, "Skill7" },
+ { false, FT_SHORT, "Skill8" },
+ { false, FT_BYTE, "Type1" },
+ { false, FT_BYTE, "Type2" },
+ { false, FT_BYTE, "Type3" },
+ { false, FT_BYTE, "Type4" },
+ { false, FT_BYTE, "Type5" },
+ { false, FT_BYTE, "Type6" },
+ { false, FT_BYTE, "Type7" },
+ { false, FT_BYTE, "Type8" },
+ { false, FT_BYTE, "Action1" },
+ { false, FT_BYTE, "Action2" },
+ { false, FT_BYTE, "Action3" },
+ { false, FT_BYTE, "Action4" },
+ { false, FT_BYTE, "Action5" },
+ { false, FT_BYTE, "Action6" },
+ { false, FT_BYTE, "Action7" },
+ { false, FT_BYTE, "Action8" },
+ };
+ return { &fields[0], std::extent::value, LockMeta::Instance(), HOTFIX_SEL_LOCK };
+ }
+};
+
+struct MailTemplateLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Body" },
+ };
+ return { &fields[0], std::extent::value, MailTemplateMeta::Instance(), HOTFIX_SEL_MAIL_TEMPLATE };
+ }
+};
+
+struct MapLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING_NOT_LOCALIZED, "Directory" },
+ { false, FT_INT, "Flags1" },
+ { false, FT_INT, "Flags2" },
+ { false, FT_FLOAT, "MinimapIconScale" },
+ { false, FT_FLOAT, "CorpsePosX" },
+ { false, FT_FLOAT, "CorpsePosY" },
+ { false, FT_STRING, "MapName" },
+ { false, FT_STRING, "MapDescription0" },
+ { false, FT_STRING, "MapDescription1" },
+ { false, FT_SHORT, "AreaTableID" },
+ { false, FT_SHORT, "LoadingScreenID" },
+ { true, FT_SHORT, "CorpseMapID" },
+ { false, FT_SHORT, "TimeOfDayOverride" },
+ { true, FT_SHORT, "ParentMapID" },
+ { true, FT_SHORT, "CosmeticParentMapID" },
+ { false, FT_SHORT, "WindSettingsID" },
+ { false, FT_BYTE, "InstanceType" },
+ { false, FT_BYTE, "unk5" },
+ { false, FT_BYTE, "ExpansionID" },
+ { false, FT_BYTE, "MaxPlayers" },
+ { false, FT_BYTE, "TimeOffset" },
+ };
+ return { &fields[0], std::extent::value, MapMeta::Instance(), HOTFIX_SEL_MAP };
+ }
+};
+
+struct MapDifficultyLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Message" },
+ { false, FT_SHORT, "MapID" },
+ { false, FT_BYTE, "DifficultyID" },
+ { false, FT_BYTE, "RaidDurationType" },
+ { false, FT_BYTE, "MaxPlayers" },
+ { false, FT_BYTE, "LockID" },
+ { false, FT_BYTE, "ItemBonusTreeModID" },
+ { false, FT_INT, "Context" },
+ };
+ return { &fields[0], std::extent::value, MapDifficultyMeta::Instance(), HOTFIX_SEL_MAP_DIFFICULTY };
+ }
+};
+
+struct ModifierTreeLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "Asset1" },
+ { false, FT_INT, "Asset2" },
+ { false, FT_SHORT, "Parent" },
+ { false, FT_BYTE, "Type" },
+ { false, FT_BYTE, "Unk700" },
+ { false, FT_BYTE, "Operator" },
+ { false, FT_BYTE, "Amount" },
+ };
+ return { &fields[0], std::extent::value, ModifierTreeMeta::Instance(), HOTFIX_SEL_MODIFIER_TREE };
+ }
+};
+
+struct MountLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "SpellId" },
+ { false, FT_INT, "DisplayId" },
+ { false, FT_STRING, "Name" },
+ { false, FT_STRING, "Description" },
+ { false, FT_STRING, "SourceDescription" },
+ { false, FT_FLOAT, "CameraPivotMultiplier" },
+ { false, FT_SHORT, "MountTypeId" },
+ { false, FT_SHORT, "Flags" },
+ { false, FT_SHORT, "PlayerConditionId" },
+ { false, FT_BYTE, "Source" },
+ { false, FT_INT, "ID" },
+ };
+ return { &fields[0], std::extent::value, MountMeta::Instance(), HOTFIX_SEL_MOUNT };
+ }
+};
+
+struct MountCapabilityLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "RequiredSpell" },
+ { false, FT_INT, "SpeedModSpell" },
+ { false, FT_SHORT, "RequiredRidingSkill" },
+ { false, FT_SHORT, "RequiredArea" },
+ { true, FT_SHORT, "RequiredMap" },
+ { false, FT_BYTE, "Flags" },
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "RequiredAura" },
+ };
+ return { &fields[0], std::extent::value, MountCapabilityMeta::Instance(), HOTFIX_SEL_MOUNT_CAPABILITY };
+ }
+};
+
+struct MountTypeXCapabilityLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_SHORT, "MountTypeID" },
+ { false, FT_SHORT, "MountCapabilityID" },
+ { false, FT_BYTE, "OrderIndex" },
+ };
+ return { &fields[0], std::extent::value, MountTypeXCapabilityMeta::Instance(), HOTFIX_SEL_MOUNT_TYPE_X_CAPABILITY };
+ }
+};
+
+struct MovieLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "AudioFileDataID" },
+ { false, FT_INT, "SubtitleFileDataID" },
+ { false, FT_BYTE, "Volume" },
+ { false, FT_BYTE, "KeyID" },
+ };
+ return { &fields[0], std::extent::value, MovieMeta::Instance(), HOTFIX_SEL_MOVIE };
+ }
+};
+
+struct NameGenLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Name" },
+ { false, FT_BYTE, "Race" },
+ { false, FT_BYTE, "Sex" },
+ };
+ return { &fields[0], std::extent::value, NameGenMeta::Instance(), HOTFIX_SEL_NAME_GEN };
+ }
+};
+
+struct NamesProfanityLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING_NOT_LOCALIZED, "Name" },
+ { true, FT_BYTE, "Language" },
+ };
+ return { &fields[0], std::extent::value, NamesProfanityMeta::Instance(), HOTFIX_SEL_NAMES_PROFANITY };
+ }
+};
+
+struct NamesReservedLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING_NOT_LOCALIZED, "Name" },
+ };
+ return { &fields[0], std::extent::value, NamesReservedMeta::Instance(), HOTFIX_SEL_NAMES_RESERVED };
+ }
+};
+
+struct NamesReservedLocaleLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING_NOT_LOCALIZED, "Name" },
+ { false, FT_BYTE, "LocaleMask" },
+ };
+ return { &fields[0], std::extent::value, NamesReservedLocaleMeta::Instance(), HOTFIX_SEL_NAMES_RESERVED };
+ }
+};
+
+struct OverrideSpellDataLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "SpellID1" },
+ { false, FT_INT, "SpellID2" },
+ { false, FT_INT, "SpellID3" },
+ { false, FT_INT, "SpellID4" },
+ { false, FT_INT, "SpellID5" },
+ { false, FT_INT, "SpellID6" },
+ { false, FT_INT, "SpellID7" },
+ { false, FT_INT, "SpellID8" },
+ { false, FT_INT, "SpellID9" },
+ { false, FT_INT, "SpellID10" },
+ { false, FT_INT, "PlayerActionbarFileDataID" },
+ { false, FT_BYTE, "Flags" },
+ };
+ return { &fields[0], std::extent::value, OverrideSpellDataMeta::Instance(), HOTFIX_SEL_OVERRIDE_SPELL_DATA };
+ }
+};
+
+struct PhaseLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_SHORT, "Flags" },
+ };
+ return { &fields[0], std::extent::value, PhaseMeta::Instance(), HOTFIX_SEL_PHASE };
+ }
+};
+
+struct PhaseXPhaseGroupLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_SHORT, "PhaseID" },
+ { false, FT_SHORT, "PhaseGroupID" },
+ };
+ return { &fields[0], std::extent::value, PhaseXPhaseGroupMeta::Instance(), HOTFIX_SEL_PHASE_X_PHASE_GROUP };
+ }
+};
+
+struct PlayerConditionLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "RaceMask" },
+ { false, FT_INT, "SkillLogic" },
+ { false, FT_INT, "ReputationLogic" },
+ { false, FT_INT, "PrevQuestLogic" },
+ { false, FT_INT, "CurrQuestLogic" },
+ { false, FT_INT, "CurrentCompletedQuestLogic" },
+ { false, FT_INT, "SpellLogic" },
+ { false, FT_INT, "ItemLogic" },
+ { false, FT_INT, "Time1" },
+ { false, FT_INT, "Time2" },
+ { false, FT_INT, "AuraSpellLogic" },
+ { false, FT_INT, "AuraSpellID1" },
+ { false, FT_INT, "AuraSpellID2" },
+ { false, FT_INT, "AuraSpellID3" },
+ { false, FT_INT, "AuraSpellID4" },
+ { false, FT_INT, "AchievementLogic" },
+ { false, FT_INT, "AreaLogic" },
+ { false, FT_INT, "QuestKillLogic" },
+ { false, FT_STRING, "FailureDescription" },
+ { false, FT_SHORT, "MinLevel" },
+ { false, FT_SHORT, "MaxLevel" },
+ { false, FT_SHORT, "SkillID1" },
+ { false, FT_SHORT, "SkillID2" },
+ { false, FT_SHORT, "SkillID3" },
+ { false, FT_SHORT, "SkillID4" },
+ { true, FT_SHORT, "MinSkill1" },
+ { true, FT_SHORT, "MinSkill2" },
+ { true, FT_SHORT, "MinSkill3" },
+ { true, FT_SHORT, "MinSkill4" },
+ { true, FT_SHORT, "MaxSkill1" },
+ { true, FT_SHORT, "MaxSkill2" },
+ { true, FT_SHORT, "MaxSkill3" },
+ { true, FT_SHORT, "MaxSkill4" },
+ { false, FT_SHORT, "MaxFactionID" },
+ { false, FT_SHORT, "PrevQuestID1" },
+ { false, FT_SHORT, "PrevQuestID2" },
+ { false, FT_SHORT, "PrevQuestID3" },
+ { false, FT_SHORT, "PrevQuestID4" },
+ { false, FT_SHORT, "CurrQuestID1" },
+ { false, FT_SHORT, "CurrQuestID2" },
+ { false, FT_SHORT, "CurrQuestID3" },
+ { false, FT_SHORT, "CurrQuestID4" },
+ { false, FT_SHORT, "CurrentCompletedQuestID1" },
+ { false, FT_SHORT, "CurrentCompletedQuestID2" },
+ { false, FT_SHORT, "CurrentCompletedQuestID3" },
+ { false, FT_SHORT, "CurrentCompletedQuestID4" },
+ { false, FT_SHORT, "Explored1" },
+ { false, FT_SHORT, "Explored2" },
+ { false, FT_SHORT, "WorldStateExpressionID" },
+ { false, FT_SHORT, "Achievement1" },
+ { false, FT_SHORT, "Achievement2" },
+ { false, FT_SHORT, "Achievement3" },
+ { false, FT_SHORT, "Achievement4" },
+ { false, FT_SHORT, "AreaID1" },
+ { false, FT_SHORT, "AreaID2" },
+ { false, FT_SHORT, "AreaID3" },
+ { false, FT_SHORT, "AreaID4" },
+ { false, FT_SHORT, "QuestKillID" },
+ { false, FT_SHORT, "PhaseID" },
+ { false, FT_SHORT, "MinAvgEquippedItemLevel" },
+ { false, FT_SHORT, "MaxAvgEquippedItemLevel" },
+ { false, FT_SHORT, "ModifierTreeID" },
+ { false, FT_BYTE, "Flags" },
+ { true, FT_BYTE, "Gender" },
+ { true, FT_BYTE, "NativeGender" },
+ { false, FT_BYTE, "MinLanguage" },
+ { false, FT_BYTE, "MaxLanguage" },
+ { false, FT_BYTE, "MinReputation1" },
+ { false, FT_BYTE, "MinReputation2" },
+ { false, FT_BYTE, "MinReputation3" },
+ { false, FT_BYTE, "MaxReputation" },
+ { false, FT_BYTE, "Unknown1" },
+ { false, FT_BYTE, "MinPVPRank" },
+ { false, FT_BYTE, "MaxPVPRank" },
+ { false, FT_BYTE, "PvpMedal" },
+ { false, FT_BYTE, "ItemFlags" },
+ { false, FT_BYTE, "AuraCount1" },
+ { false, FT_BYTE, "AuraCount2" },
+ { false, FT_BYTE, "AuraCount3" },
+ { false, FT_BYTE, "AuraCount4" },
+ { false, FT_BYTE, "WeatherID" },
+ { false, FT_BYTE, "PartyStatus" },
+ { false, FT_BYTE, "LifetimeMaxPVPRank" },
+ { false, FT_BYTE, "LfgStatus1" },
+ { false, FT_BYTE, "LfgStatus2" },
+ { false, FT_BYTE, "LfgStatus3" },
+ { false, FT_BYTE, "LfgStatus4" },
+ { false, FT_BYTE, "LfgCompare1" },
+ { false, FT_BYTE, "LfgCompare2" },
+ { false, FT_BYTE, "LfgCompare3" },
+ { false, FT_BYTE, "LfgCompare4" },
+ { false, FT_BYTE, "CurrencyCount1" },
+ { false, FT_BYTE, "CurrencyCount2" },
+ { false, FT_BYTE, "CurrencyCount3" },
+ { false, FT_BYTE, "CurrencyCount4" },
+ { true, FT_BYTE, "MinExpansionLevel" },
+ { true, FT_BYTE, "MaxExpansionLevel" },
+ { true, FT_BYTE, "MinExpansionTier" },
+ { true, FT_BYTE, "MaxExpansionTier" },
+ { false, FT_BYTE, "MinGuildLevel" },
+ { false, FT_BYTE, "MaxGuildLevel" },
+ { false, FT_BYTE, "PhaseUseFlags" },
+ { true, FT_BYTE, "ChrSpecializationIndex" },
+ { true, FT_BYTE, "ChrSpecializationRole" },
+ { true, FT_BYTE, "PowerType" },
+ { true, FT_BYTE, "PowerTypeComp" },
+ { true, FT_BYTE, "PowerTypeValue" },
+ { true, FT_INT, "ClassMask" },
+ { false, FT_INT, "LanguageID" },
+ { false, FT_INT, "MinFactionID1" },
+ { false, FT_INT, "MinFactionID2" },
+ { false, FT_INT, "MinFactionID3" },
+ { false, FT_INT, "SpellID1" },
+ { false, FT_INT, "SpellID2" },
+ { false, FT_INT, "SpellID3" },
+ { false, FT_INT, "SpellID4" },
+ { false, FT_INT, "ItemID1" },
+ { false, FT_INT, "ItemID2" },
+ { false, FT_INT, "ItemID3" },
+ { false, FT_INT, "ItemID4" },
+ { false, FT_INT, "ItemCount1" },
+ { false, FT_INT, "ItemCount2" },
+ { false, FT_INT, "ItemCount3" },
+ { false, FT_INT, "ItemCount4" },
+ { false, FT_INT, "LfgLogic" },
+ { false, FT_INT, "LfgValue1" },
+ { false, FT_INT, "LfgValue2" },
+ { false, FT_INT, "LfgValue3" },
+ { false, FT_INT, "LfgValue4" },
+ { false, FT_INT, "CurrencyLogic" },
+ { false, FT_INT, "CurrencyID1" },
+ { false, FT_INT, "CurrencyID2" },
+ { false, FT_INT, "CurrencyID3" },
+ { false, FT_INT, "CurrencyID4" },
+ { false, FT_INT, "QuestKillMonster1" },
+ { false, FT_INT, "QuestKillMonster2" },
+ { false, FT_INT, "QuestKillMonster3" },
+ { false, FT_INT, "QuestKillMonster4" },
+ { false, FT_INT, "QuestKillMonster5" },
+ { false, FT_INT, "QuestKillMonster6" },
+ { false, FT_INT, "PhaseGroupID" },
+ { false, FT_INT, "MinAvgItemLevel" },
+ { false, FT_INT, "MaxAvgItemLevel" },
+ { true, FT_INT, "Unknown7001" },
+ { true, FT_INT, "Unknown7002" },
+ };
+ return { &fields[0], std::extent::value, PlayerConditionMeta::Instance(), HOTFIX_SEL_PLAYER_CONDITION };
+ }
+};
+
+struct PowerDisplayLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING_NOT_LOCALIZED, "GlobalStringBaseTag" },
+ { false, FT_BYTE, "PowerType" },
+ { false, FT_BYTE, "Red" },
+ { false, FT_BYTE, "Green" },
+ { false, FT_BYTE, "Blue" },
+ };
+ return { &fields[0], std::extent::value, PowerDisplayMeta::Instance(), HOTFIX_SEL_POWER_DISPLAY };
+ }
+};
+
+struct PowerTypeLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING_NOT_LOCALIZED, "PowerTypeToken" },
+ { false, FT_STRING_NOT_LOCALIZED, "PowerCostToken" },
+ { false, FT_FLOAT, "RegenerationPeace" },
+ { false, FT_FLOAT, "RegenerationCombat" },
+ { true, FT_SHORT, "MaxPower" },
+ { false, FT_SHORT, "RegenerationDelay" },
+ { false, FT_SHORT, "Flags" },
+ { false, FT_BYTE, "PowerTypeEnum" },
+ { true, FT_BYTE, "RegenerationMin" },
+ { true, FT_BYTE, "RegenerationCenter" },
+ { true, FT_BYTE, "RegenerationMax" },
+ { false, FT_BYTE, "UIModifier" },
+ };
+ return { &fields[0], std::extent::value, PowerTypeMeta::Instance(), HOTFIX_SEL_POWER_TYPE };
+ }
+};
+
+struct PvpDifficultyLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_SHORT, "MapID" },
+ { false, FT_BYTE, "BracketID" },
+ { false, FT_BYTE, "MinLevel" },
+ { false, FT_BYTE, "MaxLevel" },
+ };
+ return { &fields[0], std::extent::value, PvpDifficultyMeta::Instance(), HOTFIX_SEL_PVP_DIFFICULTY };
+ }
+};
+
+struct QuestFactionRewardLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { true, FT_SHORT, "QuestRewFactionValue1" },
+ { true, FT_SHORT, "QuestRewFactionValue2" },
+ { true, FT_SHORT, "QuestRewFactionValue3" },
+ { true, FT_SHORT, "QuestRewFactionValue4" },
+ { true, FT_SHORT, "QuestRewFactionValue5" },
+ { true, FT_SHORT, "QuestRewFactionValue6" },
+ { true, FT_SHORT, "QuestRewFactionValue7" },
+ { true, FT_SHORT, "QuestRewFactionValue8" },
+ { true, FT_SHORT, "QuestRewFactionValue9" },
+ { true, FT_SHORT, "QuestRewFactionValue10" },
+ };
+ return { &fields[0], std::extent::value, QuestFactionRewardMeta::Instance(), HOTFIX_SEL_QUEST_FACTION_REWARD };
+ }
+};
+
+struct QuestMoneyRewardLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "Money1" },
+ { false, FT_INT, "Money2" },
+ { false, FT_INT, "Money3" },
+ { false, FT_INT, "Money4" },
+ { false, FT_INT, "Money5" },
+ { false, FT_INT, "Money6" },
+ { false, FT_INT, "Money7" },
+ { false, FT_INT, "Money8" },
+ { false, FT_INT, "Money9" },
+ { false, FT_INT, "Money10" },
+ };
+ return { &fields[0], std::extent::value, QuestMoneyRewardMeta::Instance(), HOTFIX_SEL_QUEST_MONEY_REWARD };
+ }
+};
+
+struct QuestPackageItemLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "ItemID" },
+ { false, FT_SHORT, "QuestPackageID" },
+ { false, FT_BYTE, "ItemCount" },
+ { false, FT_BYTE, "FilterType" },
+ };
+ return { &fields[0], std::extent::value, QuestPackageItemMeta::Instance(), HOTFIX_SEL_QUEST_PACKAGE_ITEM };
+ }
+};
+
+struct QuestSortLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "SortName" },
+ { false, FT_BYTE, "SortOrder" },
+ };
+ return { &fields[0], std::extent::value, QuestSortMeta::Instance(), HOTFIX_SEL_QUEST_SORT };
+ }
+};
+
+struct QuestV2LoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_SHORT, "UniqueBitFlag" },
+ };
+ return { &fields[0], std::extent::value, QuestV2Meta::Instance(), HOTFIX_SEL_QUEST_V2 };
+ }
+};
+
+struct QuestXpLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_SHORT, "Exp1" },
+ { false, FT_SHORT, "Exp2" },
+ { false, FT_SHORT, "Exp3" },
+ { false, FT_SHORT, "Exp4" },
+ { false, FT_SHORT, "Exp5" },
+ { false, FT_SHORT, "Exp6" },
+ { false, FT_SHORT, "Exp7" },
+ { false, FT_SHORT, "Exp8" },
+ { false, FT_SHORT, "Exp9" },
+ { false, FT_SHORT, "Exp10" },
+ };
+ return { &fields[0], std::extent::value, QuestXPMeta::Instance(), HOTFIX_SEL_QUEST_XP };
+ }
+};
+
+struct RandPropPointsLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "EpicPropertiesPoints1" },
+ { false, FT_INT, "EpicPropertiesPoints2" },
+ { false, FT_INT, "EpicPropertiesPoints3" },
+ { false, FT_INT, "EpicPropertiesPoints4" },
+ { false, FT_INT, "EpicPropertiesPoints5" },
+ { false, FT_INT, "RarePropertiesPoints1" },
+ { false, FT_INT, "RarePropertiesPoints2" },
+ { false, FT_INT, "RarePropertiesPoints3" },
+ { false, FT_INT, "RarePropertiesPoints4" },
+ { false, FT_INT, "RarePropertiesPoints5" },
+ { false, FT_INT, "UncommonPropertiesPoints1" },
+ { false, FT_INT, "UncommonPropertiesPoints2" },
+ { false, FT_INT, "UncommonPropertiesPoints3" },
+ { false, FT_INT, "UncommonPropertiesPoints4" },
+ { false, FT_INT, "UncommonPropertiesPoints5" },
+ };
+ return { &fields[0], std::extent::value, RandPropPointsMeta::Instance(), HOTFIX_SEL_RAND_PROP_POINTS };
+ }
+};
+
+struct RulesetItemUpgradeLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "ItemID" },
+ { false, FT_SHORT, "ItemUpgradeID" },
+ };
+ return { &fields[0], std::extent::value, RulesetItemUpgradeMeta::Instance(), HOTFIX_SEL_RULESET_ITEM_UPGRADE };
+ }
+};
+
+struct ScalingStatDistributionLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_SHORT, "ItemLevelCurveID" },
+ { false, FT_INT, "MinLevel" },
+ { false, FT_INT, "MaxLevel" },
+ };
+ return { &fields[0], std::extent::value, ScalingStatDistributionMeta::Instance(), HOTFIX_SEL_SCALING_STAT_DISTRIBUTION };
+ }
+};
+
+struct SceneScriptLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING_NOT_LOCALIZED, "Name" },
+ { false, FT_STRING_NOT_LOCALIZED, "Script" },
+ { false, FT_SHORT, "PrevScriptId" },
+ { false, FT_SHORT, "NextScriptId" },
+ };
+ return { &fields[0], std::extent::value, SceneScriptMeta::Instance(), HOTFIX_SEL_SCENE_SCRIPT };
+ }
+};
+
+struct SceneScriptPackageLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING_NOT_LOCALIZED, "Name" },
+ };
+ return { &fields[0], std::extent::value, SceneScriptPackageMeta::Instance(), HOTFIX_SEL_SCENE_SCRIPT_PACKAGE };
+ }
+};
+
+struct SkillLineLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "DisplayName" },
+ { false, FT_STRING, "Description" },
+ { false, FT_STRING, "AlternateVerb" },
+ { false, FT_SHORT, "SpellIconID" },
+ { false, FT_SHORT, "Flags" },
+ { false, FT_BYTE, "CategoryID" },
+ { false, FT_BYTE, "CanLink" },
+ { false, FT_INT, "ParentSkillLineID" },
+ };
+ return { &fields[0], std::extent::value, SkillLineMeta::Instance(), HOTFIX_SEL_SKILL_LINE };
+ }
+};
+
+struct SkillLineAbilityLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "SpellID" },
+ { false, FT_INT, "RaceMask" },
+ { false, FT_INT, "SupercedesSpell" },
+ { false, FT_INT, "Unknown703" },
+ { false, FT_SHORT, "SkillLine" },
+ { false, FT_SHORT, "MinSkillLineRank" },
+ { false, FT_SHORT, "TrivialSkillLineRankHigh" },
+ { false, FT_SHORT, "TrivialSkillLineRankLow" },
+ { false, FT_SHORT, "UniqueBit" },
+ { false, FT_SHORT, "TradeSkillCategoryID" },
+ { false, FT_BYTE, "AcquireMethod" },
+ { false, FT_BYTE, "NumSkillUps" },
+ { true, FT_INT, "ClassMask" },
+ };
+ return { &fields[0], std::extent::value, SkillLineAbilityMeta::Instance(), HOTFIX_SEL_SKILL_LINE_ABILITY };
+ }
+};
+
+struct SkillRaceClassInfoLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { true, FT_INT, "RaceMask" },
+ { false, FT_SHORT, "SkillID" },
+ { false, FT_SHORT, "Flags" },
+ { false, FT_SHORT, "SkillTierID" },
+ { false, FT_BYTE, "Availability" },
+ { false, FT_BYTE, "MinLevel" },
+ { true, FT_INT, "ClassMask" },
+ };
+ return { &fields[0], std::extent::value, SkillRaceClassInfoMeta::Instance(), HOTFIX_SEL_SKILL_RACE_CLASS_INFO };
+ }
+};
+
+struct SoundKitLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_STRING, "Name" },
+ { false, FT_FLOAT, "VolumeFloat" },
+ { false, FT_FLOAT, "MinDistance" },
+ { false, FT_FLOAT, "DistanceCutoff" },
+ { false, FT_FLOAT, "VolumeVariationPlus" },
+ { false, FT_FLOAT, "VolumeVariationMinus" },
+ { false, FT_FLOAT, "PitchVariationPlus" },
+ { false, FT_FLOAT, "PitchVariationMinus" },
+ { false, FT_FLOAT, "PitchAdjust" },
+ { false, FT_SHORT, "Flags" },
+ { false, FT_SHORT, "SoundEntriesAdvancedID" },
+ { false, FT_SHORT, "BusOverwriteID" },
+ { false, FT_BYTE, "SoundType" },
+ { false, FT_BYTE, "EAXDef" },
+ { false, FT_BYTE, "DialogType" },
+ { false, FT_BYTE, "Unk700" },
+ { false, FT_INT, "ID" },
+ };
+ return { &fields[0], std::extent::value, SoundKitMeta::Instance(), HOTFIX_SEL_SOUND_KIT };
+ }
+};
+
+struct SpecializationSpellsLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "SpellID" },
+ { false, FT_INT, "OverridesSpellID" },
+ { false, FT_STRING, "Description" },
+ { false, FT_SHORT, "SpecID" },
+ { false, FT_BYTE, "OrderIndex" },
+ { false, FT_INT, "ID" },
+ };
+ return { &fields[0], std::extent::value, SpecializationSpellsMeta::Instance(), HOTFIX_SEL_SPECIALIZATION_SPELLS };
+ }
+};
+
+struct SpellLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_STRING, "Name" },
+ { false, FT_STRING, "NameSubtext" },
+ { false, FT_STRING, "Description" },
+ { false, FT_STRING, "AuraDescription" },
+ { false, FT_INT, "MiscID" },
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "DescriptionVariablesID" },
+ };
+ return { &fields[0], std::extent::value, SpellMeta::Instance(), HOTFIX_SEL_SPELL };
+ }
+};
+
+struct SpellAuraOptionsLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "SpellID" },
+ { false, FT_INT, "ProcCharges" },
+ { false, FT_INT, "ProcTypeMask" },
+ { false, FT_INT, "ProcCategoryRecovery" },
+ { false, FT_SHORT, "CumulativeAura" },
+ { false, FT_BYTE, "DifficultyID" },
+ { false, FT_BYTE, "ProcChance" },
+ { false, FT_BYTE, "SpellProcsPerMinuteID" },
+ };
+ return { &fields[0], std::extent::value, SpellAuraOptionsMeta::Instance(), HOTFIX_SEL_SPELL_AURA_OPTIONS };
+ }
+};
+
+struct SpellAuraRestrictionsLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "SpellID" },
+ { false, FT_INT, "CasterAuraSpell" },
+ { false, FT_INT, "TargetAuraSpell" },
+ { false, FT_INT, "ExcludeCasterAuraSpell" },
+ { false, FT_INT, "ExcludeTargetAuraSpell" },
+ { false, FT_BYTE, "DifficultyID" },
+ { false, FT_BYTE, "CasterAuraState" },
+ { false, FT_BYTE, "TargetAuraState" },
+ { false, FT_BYTE, "ExcludeCasterAuraState" },
+ { false, FT_BYTE, "ExcludeTargetAuraState" },
+ };
+ return { &fields[0], std::extent::value, SpellAuraRestrictionsMeta::Instance(), HOTFIX_SEL_SPELL_AURA_RESTRICTIONS };
+ }
+};
+
+struct SpellCastTimesLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { true, FT_INT, "CastTime" },
+ { true, FT_INT, "MinCastTime" },
+ { true, FT_SHORT, "CastTimePerLevel" },
+ };
+ return { &fields[0], std::extent::value, SpellCastTimesMeta::Instance(), HOTFIX_SEL_SPELL_CAST_TIMES };
+ }
+};
+
+struct SpellCastingRequirementsLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "SpellID" },
+ { false, FT_SHORT, "MinFactionID" },
+ { false, FT_SHORT, "RequiredAreasID" },
+ { false, FT_SHORT, "RequiresSpellFocus" },
+ { false, FT_BYTE, "FacingCasterFlags" },
+ { false, FT_BYTE, "MinReputation" },
+ { false, FT_BYTE, "RequiredAuraVision" },
+ };
+ return { &fields[0], std::extent::value, SpellCastingRequirementsMeta::Instance(), HOTFIX_SEL_SPELL_CASTING_REQUIREMENTS };
+ }
+};
+
+struct SpellCategoriesLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "SpellID" },
+ { false, FT_SHORT, "Category" },
+ { false, FT_SHORT, "StartRecoveryCategory" },
+ { false, FT_SHORT, "ChargeCategory" },
+ { false, FT_BYTE, "DifficultyID" },
+ { false, FT_BYTE, "DefenseType" },
+ { false, FT_BYTE, "DispelType" },
+ { false, FT_BYTE, "Mechanic" },
+ { false, FT_BYTE, "PreventionType" },
+ };
+ return { &fields[0], std::extent::value, SpellCategoriesMeta::Instance(), HOTFIX_SEL_SPELL_CATEGORIES };
+ }
+};
+
+struct SpellCategoryLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Name" },
+ { true, FT_INT, "ChargeRecoveryTime" },
+ { false, FT_BYTE, "Flags" },
+ { false, FT_BYTE, "UsesPerWeek" },
+ { false, FT_BYTE, "MaxCharges" },
+ { false, FT_INT, "ChargeCategoryType" },
+ };
+ return { &fields[0], std::extent::value, SpellCategoryMeta::Instance(), HOTFIX_SEL_SPELL_CATEGORY };
+ }
+};
+
+struct SpellClassOptionsLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "SpellID" },
+ { false, FT_INT, "SpellClassMask1" },
+ { false, FT_INT, "SpellClassMask2" },
+ { false, FT_INT, "SpellClassMask3" },
+ { false, FT_INT, "SpellClassMask4" },
+ { false, FT_BYTE, "SpellClassSet" },
+ { false, FT_INT, "ModalNextSpell" },
+ };
+ return { &fields[0], std::extent::value, SpellClassOptionsMeta::Instance(), HOTFIX_SEL_SPELL_CLASS_OPTIONS };
+ }
+};
+
+struct SpellCooldownsLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "SpellID" },
+ { false, FT_INT, "CategoryRecoveryTime" },
+ { false, FT_INT, "RecoveryTime" },
+ { false, FT_INT, "StartRecoveryTime" },
+ { false, FT_BYTE, "DifficultyID" },
+ };
+ return { &fields[0], std::extent::value, SpellCooldownsMeta::Instance(), HOTFIX_SEL_SPELL_COOLDOWNS };
+ }
+};
+
+struct SpellDurationLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { true, FT_INT, "Duration" },
+ { true, FT_INT, "MaxDuration" },
+ { true, FT_SHORT, "DurationPerLevel" },
+ };
+ return { &fields[0], std::extent::value, SpellDurationMeta::Instance(), HOTFIX_SEL_SPELL_DURATION };
+ }
+};
+
+struct SpellEffectLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_FLOAT, "EffectAmplitude" },
+ { false, FT_FLOAT, "EffectBonusCoefficient" },
+ { false, FT_FLOAT, "EffectChainAmplitude" },
+ { false, FT_FLOAT, "EffectPointsPerResource" },
+ { false, FT_FLOAT, "EffectRealPointsPerLevel" },
+ { false, FT_INT, "EffectSpellClassMask1" },
+ { false, FT_INT, "EffectSpellClassMask2" },
+ { false, FT_INT, "EffectSpellClassMask3" },
+ { false, FT_INT, "EffectSpellClassMask4" },
+ { false, FT_FLOAT, "EffectPosFacing" },
+ { false, FT_FLOAT, "BonusCoefficientFromAP" },
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "DifficultyID" },
+ { false, FT_INT, "Effect" },
+ { false, FT_INT, "EffectAura" },
+ { false, FT_INT, "EffectAuraPeriod" },
+ { true, FT_INT, "EffectBasePoints" },
+ { false, FT_INT, "EffectChainTargets" },
+ { true, FT_INT, "EffectDieSides" },
+ { false, FT_INT, "EffectItemType" },
+ { false, FT_INT, "EffectMechanic" },
+ { true, FT_INT, "EffectMiscValue" },
+ { true, FT_INT, "EffectMiscValueB" },
+ { false, FT_INT, "EffectRadiusIndex" },
+ { false, FT_INT, "EffectRadiusMaxIndex" },
+ { false, FT_INT, "EffectTriggerSpell" },
+ { false, FT_INT, "ImplicitTarget1" },
+ { false, FT_INT, "ImplicitTarget2" },
+ { false, FT_INT, "SpellID" },
+ { false, FT_INT, "EffectIndex" },
+ { false, FT_INT, "EffectAttributes" },
+ };
+ return { &fields[0], std::extent::value, SpellEffectMeta::Instance(), HOTFIX_SEL_SPELL_EFFECT };
+ }
+};
+
+struct SpellEffectScalingLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "Coefficient" },
+ { false, FT_FLOAT, "Variance" },
+ { false, FT_FLOAT, "ResourceCoefficient" },
+ { false, FT_INT, "SpellEffectID" },
+ };
+ return { &fields[0], std::extent::value, SpellEffectScalingMeta::Instance(), HOTFIX_SEL_SPELL_EFFECT_SCALING };
+ }
+};
+
+struct SpellEquippedItemsLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "SpellID" },
+ { true, FT_INT, "EquippedItemInventoryTypeMask" },
+ { true, FT_INT, "EquippedItemSubClassMask" },
+ { true, FT_BYTE, "EquippedItemClass" },
+ };
+ return { &fields[0], std::extent::value, SpellEquippedItemsMeta::Instance(), HOTFIX_SEL_SPELL_EQUIPPED_ITEMS };
+ }
+};
+
+struct SpellFocusObjectLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Name" },
+ };
+ return { &fields[0], std::extent::value, SpellFocusObjectMeta::Instance(), HOTFIX_SEL_SPELL_FOCUS_OBJECT };
+ }
+};
+
+struct SpellInterruptsLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "SpellID" },
+ { false, FT_INT, "AuraInterruptFlags1" },
+ { false, FT_INT, "AuraInterruptFlags2" },
+ { false, FT_INT, "ChannelInterruptFlags1" },
+ { false, FT_INT, "ChannelInterruptFlags2" },
+ { false, FT_SHORT, "InterruptFlags" },
+ { false, FT_BYTE, "DifficultyID" },
+ };
+ return { &fields[0], std::extent::value, SpellInterruptsMeta::Instance(), HOTFIX_SEL_SPELL_INTERRUPTS };
+ }
+};
+
+struct SpellItemEnchantmentLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "EffectSpellID1" },
+ { false, FT_INT, "EffectSpellID2" },
+ { false, FT_INT, "EffectSpellID3" },
+ { false, FT_STRING, "Name" },
+ { false, FT_FLOAT, "EffectScalingPoints1" },
+ { false, FT_FLOAT, "EffectScalingPoints2" },
+ { false, FT_FLOAT, "EffectScalingPoints3" },
+ { false, FT_INT, "TransmogCost" },
+ { false, FT_INT, "TextureFileDataID" },
+ { false, FT_SHORT, "EffectPointsMin1" },
+ { false, FT_SHORT, "EffectPointsMin2" },
+ { false, FT_SHORT, "EffectPointsMin3" },
+ { false, FT_SHORT, "ItemVisual" },
+ { false, FT_SHORT, "Flags" },
+ { false, FT_SHORT, "RequiredSkillID" },
+ { false, FT_SHORT, "RequiredSkillRank" },
+ { false, FT_SHORT, "ItemLevel" },
+ { false, FT_BYTE, "Charges" },
+ { false, FT_BYTE, "Effect1" },
+ { false, FT_BYTE, "Effect2" },
+ { false, FT_BYTE, "Effect3" },
+ { false, FT_BYTE, "ConditionID" },
+ { false, FT_BYTE, "MinLevel" },
+ { false, FT_BYTE, "MaxLevel" },
+ { true, FT_BYTE, "ScalingClass" },
+ { true, FT_BYTE, "ScalingClassRestricted" },
+ { false, FT_INT, "PlayerConditionID" },
+ };
+ return { &fields[0], std::extent::value, SpellItemEnchantmentMeta::Instance(), HOTFIX_SEL_SPELL_ITEM_ENCHANTMENT };
+ }
+};
+
+struct SpellItemEnchantmentConditionLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_BYTE, "LTOperandType1" },
+ { false, FT_BYTE, "LTOperandType2" },
+ { false, FT_BYTE, "LTOperandType3" },
+ { false, FT_BYTE, "LTOperandType4" },
+ { false, FT_BYTE, "LTOperandType5" },
+ { false, FT_BYTE, "Operator1" },
+ { false, FT_BYTE, "Operator2" },
+ { false, FT_BYTE, "Operator3" },
+ { false, FT_BYTE, "Operator4" },
+ { false, FT_BYTE, "Operator5" },
+ { false, FT_BYTE, "RTOperandType1" },
+ { false, FT_BYTE, "RTOperandType2" },
+ { false, FT_BYTE, "RTOperandType3" },
+ { false, FT_BYTE, "RTOperandType4" },
+ { false, FT_BYTE, "RTOperandType5" },
+ { false, FT_BYTE, "RTOperand1" },
+ { false, FT_BYTE, "RTOperand2" },
+ { false, FT_BYTE, "RTOperand3" },
+ { false, FT_BYTE, "RTOperand4" },
+ { false, FT_BYTE, "RTOperand5" },
+ { false, FT_BYTE, "Logic1" },
+ { false, FT_BYTE, "Logic2" },
+ { false, FT_BYTE, "Logic3" },
+ { false, FT_BYTE, "Logic4" },
+ { false, FT_BYTE, "Logic5" },
+ { false, FT_INT, "LTOperand1" },
+ { false, FT_INT, "LTOperand2" },
+ { false, FT_INT, "LTOperand3" },
+ { false, FT_INT, "LTOperand4" },
+ { false, FT_INT, "LTOperand5" },
+ };
+ return { &fields[0], std::extent::value, SpellItemEnchantmentConditionMeta::Instance(), HOTFIX_SEL_SPELL_ITEM_ENCHANTMENT_CONDITION };
+ }
+};
+
+struct SpellLearnSpellLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "LearnSpellID" },
+ { false, FT_INT, "SpellID" },
+ { false, FT_INT, "OverridesSpellID" },
+ };
+ return { &fields[0], std::extent::value, SpellLearnSpellMeta::Instance(), HOTFIX_SEL_SPELL_LEARN_SPELL };
+ }
+};
+
+struct SpellLevelsLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "SpellID" },
+ { false, FT_SHORT, "BaseLevel" },
+ { false, FT_SHORT, "MaxLevel" },
+ { false, FT_SHORT, "SpellLevel" },
+ { false, FT_BYTE, "DifficultyID" },
+ { false, FT_BYTE, "MaxUsableLevel" },
+ };
+ return { &fields[0], std::extent::value, SpellLevelsMeta::Instance(), HOTFIX_SEL_SPELL_LEVELS };
+ }
+};
+
+struct SpellMiscLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "Attributes" },
+ { false, FT_INT, "AttributesEx" },
+ { false, FT_INT, "AttributesExB" },
+ { false, FT_INT, "AttributesExC" },
+ { false, FT_INT, "AttributesExD" },
+ { false, FT_INT, "AttributesExE" },
+ { false, FT_INT, "AttributesExF" },
+ { false, FT_INT, "AttributesExG" },
+ { false, FT_INT, "AttributesExH" },
+ { false, FT_INT, "AttributesExI" },
+ { false, FT_INT, "AttributesExJ" },
+ { false, FT_INT, "AttributesExK" },
+ { false, FT_INT, "AttributesExL" },
+ { false, FT_INT, "AttributesExM" },
+ { false, FT_FLOAT, "Speed" },
+ { false, FT_FLOAT, "MultistrikeSpeedMod" },
+ { false, FT_SHORT, "CastingTimeIndex" },
+ { false, FT_SHORT, "DurationIndex" },
+ { false, FT_SHORT, "RangeIndex" },
+ { false, FT_SHORT, "SpellIconID" },
+ { false, FT_SHORT, "ActiveIconID" },
+ { false, FT_BYTE, "SchoolMask" },
+ };
+ return { &fields[0], std::extent::value, SpellMiscMeta::Instance(), HOTFIX_SEL_SPELL_MISC };
+ }
+};
+
+struct SpellPowerLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "SpellID" },
+ { false, FT_INT, "ManaCost" },
+ { false, FT_FLOAT, "ManaCostPercentage" },
+ { false, FT_FLOAT, "ManaCostPercentagePerSecond" },
+ { false, FT_INT, "RequiredAura" },
+ { false, FT_FLOAT, "HealthCostPercentage" },
+ { false, FT_BYTE, "PowerIndex" },
+ { false, FT_BYTE, "PowerType" },
+ { false, FT_INT, "ID" },
+ { true, FT_INT, "ManaCostPerLevel" },
+ { true, FT_INT, "ManaCostPerSecond" },
+ { false, FT_INT, "ManaCostAdditional" },
+ { false, FT_INT, "PowerDisplayID" },
+ { false, FT_INT, "UnitPowerBarID" },
+ };
+ return { &fields[0], std::extent::value, SpellPowerMeta::Instance(), HOTFIX_SEL_SPELL_POWER };
+ }
+};
+
+struct SpellPowerDifficultyLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_BYTE, "DifficultyID" },
+ { false, FT_BYTE, "PowerIndex" },
+ { false, FT_INT, "ID" },
+ };
+ return { &fields[0], std::extent::value, SpellPowerDifficultyMeta::Instance(), HOTFIX_SEL_SPELL_POWER_DIFFICULTY };
+ }
+};
+
+struct SpellProcsPerMinuteLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "BaseProcRate" },
+ { false, FT_BYTE, "Flags" },
+ };
+ return { &fields[0], std::extent::value, SpellProcsPerMinuteMeta::Instance(), HOTFIX_SEL_SPELL_PROCS_PER_MINUTE };
+ }
+};
+
+struct SpellProcsPerMinuteModLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "Coeff" },
+ { false, FT_SHORT, "Param" },
+ { false, FT_BYTE, "Type" },
+ { false, FT_BYTE, "SpellProcsPerMinuteID" },
+ };
+ return { &fields[0], std::extent::value, SpellProcsPerMinuteModMeta::Instance(), HOTFIX_SEL_SPELL_PROCS_PER_MINUTE_MOD };
+ }
+};
+
+struct SpellRadiusLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "Radius" },
+ { false, FT_FLOAT, "RadiusPerLevel" },
+ { false, FT_FLOAT, "RadiusMin" },
+ { false, FT_FLOAT, "RadiusMax" },
+ };
+ return { &fields[0], std::extent::value, SpellRadiusMeta::Instance(), HOTFIX_SEL_SPELL_RADIUS };
+ }
+};
+
+struct SpellRangeLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "MinRangeHostile" },
+ { false, FT_FLOAT, "MinRangeFriend" },
+ { false, FT_FLOAT, "MaxRangeHostile" },
+ { false, FT_FLOAT, "MaxRangeFriend" },
+ { false, FT_STRING, "DisplayName" },
+ { false, FT_STRING, "DisplayNameShort" },
+ { false, FT_BYTE, "Flags" },
+ };
+ return { &fields[0], std::extent::value, SpellRangeMeta::Instance(), HOTFIX_SEL_SPELL_RANGE };
+ }
+};
+
+struct SpellReagentsLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "SpellID" },
+ { true, FT_INT, "Reagent1" },
+ { true, FT_INT, "Reagent2" },
+ { true, FT_INT, "Reagent3" },
+ { true, FT_INT, "Reagent4" },
+ { true, FT_INT, "Reagent5" },
+ { true, FT_INT, "Reagent6" },
+ { true, FT_INT, "Reagent7" },
+ { true, FT_INT, "Reagent8" },
+ { false, FT_SHORT, "ReagentCount1" },
+ { false, FT_SHORT, "ReagentCount2" },
+ { false, FT_SHORT, "ReagentCount3" },
+ { false, FT_SHORT, "ReagentCount4" },
+ { false, FT_SHORT, "ReagentCount5" },
+ { false, FT_SHORT, "ReagentCount6" },
+ { false, FT_SHORT, "ReagentCount7" },
+ { false, FT_SHORT, "ReagentCount8" },
+ };
+ return { &fields[0], std::extent::value, SpellReagentsMeta::Instance(), HOTFIX_SEL_SPELL_REAGENTS };
+ }
+};
+
+struct SpellScalingLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "SpellID" },
+ { false, FT_SHORT, "ScalesFromItemLevel" },
+ { true, FT_INT, "ScalingClass" },
+ { false, FT_INT, "MinScalingLevel" },
+ { false, FT_INT, "MaxScalingLevel" },
+ };
+ return { &fields[0], std::extent::value, SpellScalingMeta::Instance(), HOTFIX_SEL_SPELL_SCALING };
+ }
+};
+
+struct SpellShapeshiftLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "SpellID" },
+ { false, FT_INT, "ShapeshiftExclude1" },
+ { false, FT_INT, "ShapeshiftExclude2" },
+ { false, FT_INT, "ShapeshiftMask1" },
+ { false, FT_INT, "ShapeshiftMask2" },
+ { false, FT_BYTE, "StanceBarOrder" },
+ };
+ return { &fields[0], std::extent::value, SpellShapeshiftMeta::Instance(), HOTFIX_SEL_SPELL_SHAPESHIFT };
+ }
+};
+
+struct SpellShapeshiftFormLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Name" },
+ { false, FT_FLOAT, "WeaponDamageVariance" },
+ { false, FT_INT, "Flags" },
+ { false, FT_SHORT, "AttackIconID" },
+ { false, FT_SHORT, "CombatRoundTime" },
+ { false, FT_SHORT, "CreatureDisplayID1" },
+ { false, FT_SHORT, "CreatureDisplayID2" },
+ { false, FT_SHORT, "CreatureDisplayID3" },
+ { false, FT_SHORT, "CreatureDisplayID4" },
+ { false, FT_SHORT, "PresetSpellID1" },
+ { false, FT_SHORT, "PresetSpellID2" },
+ { false, FT_SHORT, "PresetSpellID3" },
+ { false, FT_SHORT, "PresetSpellID4" },
+ { false, FT_SHORT, "PresetSpellID5" },
+ { false, FT_SHORT, "PresetSpellID6" },
+ { false, FT_SHORT, "PresetSpellID7" },
+ { false, FT_SHORT, "PresetSpellID8" },
+ { false, FT_SHORT, "MountTypeID" },
+ { true, FT_BYTE, "CreatureType" },
+ { false, FT_BYTE, "BonusActionBar" },
+ };
+ return { &fields[0], std::extent::value, SpellShapeshiftFormMeta::Instance(), HOTFIX_SEL_SPELL_SHAPESHIFT_FORM };
+ }
+};
+
+struct SpellTargetRestrictionsLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "SpellID" },
+ { false, FT_FLOAT, "ConeAngle" },
+ { false, FT_FLOAT, "Width" },
+ { false, FT_INT, "Targets" },
+ { false, FT_SHORT, "TargetCreatureType" },
+ { false, FT_BYTE, "DifficultyID" },
+ { false, FT_BYTE, "MaxAffectedTargets" },
+ { false, FT_INT, "MaxTargetLevel" },
+ };
+ return { &fields[0], std::extent::value, SpellTargetRestrictionsMeta::Instance(), HOTFIX_SEL_SPELL_TARGET_RESTRICTIONS };
+ }
+};
+
+struct SpellTotemsLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "SpellID" },
+ { false, FT_INT, "Totem1" },
+ { false, FT_INT, "Totem2" },
+ { false, FT_SHORT, "RequiredTotemCategoryID1" },
+ { false, FT_SHORT, "RequiredTotemCategoryID2" },
+ };
+ return { &fields[0], std::extent::value, SpellTotemsMeta::Instance(), HOTFIX_SEL_SPELL_TOTEMS };
+ }
+};
+
+struct SpellXSpellVisualLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "SpellID" },
+ { false, FT_FLOAT, "Unk620" },
+ { false, FT_SHORT, "SpellVisualID1" },
+ { false, FT_SHORT, "SpellVisualID2" },
+ { false, FT_SHORT, "PlayerConditionID" },
+ { false, FT_BYTE, "DifficultyID" },
+ { false, FT_BYTE, "Flags" },
+ { false, FT_INT, "ID" },
+ };
+ return { &fields[0], std::extent::value, SpellXSpellVisualMeta::Instance(), HOTFIX_SEL_SPELL_X_SPELL_VISUAL };
+ }
+};
+
+struct SummonPropertiesLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "Flags" },
+ { false, FT_INT, "Category" },
+ { false, FT_INT, "Faction" },
+ { true, FT_INT, "Type" },
+ { true, FT_INT, "Slot" },
+ };
+ return { &fields[0], std::extent::value, SummonPropertiesMeta::Instance(), HOTFIX_SEL_SUMMON_PROPERTIES };
+ }
+};
+
+struct TactKeyLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_BYTE, "Key1" },
+ { false, FT_BYTE, "Key2" },
+ { false, FT_BYTE, "Key3" },
+ { false, FT_BYTE, "Key4" },
+ { false, FT_BYTE, "Key5" },
+ { false, FT_BYTE, "Key6" },
+ { false, FT_BYTE, "Key7" },
+ { false, FT_BYTE, "Key8" },
+ { false, FT_BYTE, "Key9" },
+ { false, FT_BYTE, "Key10" },
+ { false, FT_BYTE, "Key11" },
+ { false, FT_BYTE, "Key12" },
+ { false, FT_BYTE, "Key13" },
+ { false, FT_BYTE, "Key14" },
+ { false, FT_BYTE, "Key15" },
+ { false, FT_BYTE, "Key16" },
+ };
+ return { &fields[0], std::extent::value, TactKeyMeta::Instance(), HOTFIX_SEL_TACT_KEY };
+ }
+};
+
+struct TalentLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "SpellID" },
+ { false, FT_INT, "OverridesSpellID" },
+ { false, FT_STRING, "Description" },
+ { false, FT_SHORT, "SpecID" },
+ { false, FT_BYTE, "TierID" },
+ { false, FT_BYTE, "ColumnIndex" },
+ { false, FT_BYTE, "Flags" },
+ { false, FT_BYTE, "CategoryMask1" },
+ { false, FT_BYTE, "CategoryMask2" },
+ { false, FT_BYTE, "ClassID" },
+ };
+ return { &fields[0], std::extent::value, TalentMeta::Instance(), HOTFIX_SEL_TALENT };
+ }
+};
+
+struct TaxiNodesLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_FLOAT, "PosX" },
+ { false, FT_FLOAT, "PosY" },
+ { false, FT_FLOAT, "PosZ" },
+ { false, FT_STRING, "Name" },
+ { false, FT_INT, "MountCreatureID1" },
+ { false, FT_INT, "MountCreatureID2" },
+ { false, FT_FLOAT, "MapOffsetX" },
+ { false, FT_FLOAT, "MapOffsetY" },
+ { false, FT_SHORT, "MapID" },
+ { false, FT_SHORT, "ConditionID" },
+ { false, FT_SHORT, "LearnableIndex" },
+ { false, FT_BYTE, "Flags" },
+ { false, FT_INT, "ID" },
+ };
+ return { &fields[0], std::extent::value, TaxiNodesMeta::Instance(), HOTFIX_SEL_TAXI_NODES };
+ }
+};
+
+struct TaxiPathLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_SHORT, "From" },
+ { false, FT_SHORT, "To" },
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "Cost" },
+ };
+ return { &fields[0], std::extent::value, TaxiPathMeta::Instance(), HOTFIX_SEL_TAXI_PATH };
+ }
+};
+
+struct TaxiPathNodeLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_FLOAT, "LocX" },
+ { false, FT_FLOAT, "LocY" },
+ { false, FT_FLOAT, "LocZ" },
+ { false, FT_INT, "Delay" },
+ { false, FT_SHORT, "PathID" },
+ { false, FT_SHORT, "MapID" },
+ { false, FT_SHORT, "ArrivalEventID" },
+ { false, FT_SHORT, "DepartureEventID" },
+ { false, FT_BYTE, "NodeIndex" },
+ { false, FT_BYTE, "Flags" },
+ { false, FT_INT, "ID" },
+ };
+ return { &fields[0], std::extent::value, TaxiPathNodeMeta::Instance(), HOTFIX_SEL_TAXI_PATH_NODE };
+ }
+};
+
+struct TotemCategoryLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Name" },
+ { false, FT_INT, "CategoryMask" },
+ { false, FT_BYTE, "CategoryType" },
+ };
+ return { &fields[0], std::extent::value, TotemCategoryMeta::Instance(), HOTFIX_SEL_TOTEM_CATEGORY };
+ }
+};
+
+struct ToyLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ItemID" },
+ { false, FT_STRING, "Description" },
+ { false, FT_BYTE, "Flags" },
+ { false, FT_BYTE, "CategoryFilter" },
+ { false, FT_INT, "ID" },
+ };
+ return { &fields[0], std::extent::value, ToyMeta::Instance(), HOTFIX_SEL_TOY };
+ }
+};
+
+struct TransportAnimationLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "TransportID" },
+ { false, FT_INT, "TimeIndex" },
+ { false, FT_FLOAT, "PosX" },
+ { false, FT_FLOAT, "PosY" },
+ { false, FT_FLOAT, "PosZ" },
+ { false, FT_BYTE, "SequenceID" },
+ };
+ return { &fields[0], std::extent::value, TransportAnimationMeta::Instance(), HOTFIX_SEL_TRANSPORT_ANIMATION };
+ }
+};
+
+struct TransportRotationLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "TransportID" },
+ { false, FT_INT, "TimeIndex" },
+ { false, FT_FLOAT, "X" },
+ { false, FT_FLOAT, "Y" },
+ { false, FT_FLOAT, "Z" },
+ { false, FT_FLOAT, "W" },
+ };
+ return { &fields[0], std::extent::value, TransportRotationMeta::Instance(), HOTFIX_SEL_TRANSPORT_ROTATION };
+ }
+};
+
+struct UnitPowerBarLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "RegenerationPeace" },
+ { false, FT_FLOAT, "RegenerationCombat" },
+ { false, FT_INT, "FileDataID1" },
+ { false, FT_INT, "FileDataID2" },
+ { false, FT_INT, "FileDataID3" },
+ { false, FT_INT, "FileDataID4" },
+ { false, FT_INT, "FileDataID5" },
+ { false, FT_INT, "FileDataID6" },
+ { false, FT_INT, "Color1" },
+ { false, FT_INT, "Color2" },
+ { false, FT_INT, "Color3" },
+ { false, FT_INT, "Color4" },
+ { false, FT_INT, "Color5" },
+ { false, FT_INT, "Color6" },
+ { false, FT_STRING, "Name" },
+ { false, FT_STRING, "Cost" },
+ { false, FT_STRING, "OutOfError" },
+ { false, FT_STRING, "ToolTip" },
+ { false, FT_FLOAT, "StartInset" },
+ { false, FT_FLOAT, "EndInset" },
+ { false, FT_SHORT, "StartPower" },
+ { false, FT_SHORT, "Flags" },
+ { false, FT_BYTE, "CenterPower" },
+ { false, FT_BYTE, "BarType" },
+ { false, FT_INT, "MinPower" },
+ { false, FT_INT, "MaxPower" },
+ };
+ return { &fields[0], std::extent::value, UnitPowerBarMeta::Instance(), HOTFIX_SEL_UNIT_POWER_BAR };
+ }
+};
+
+struct VehicleLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "Flags" },
+ { false, FT_FLOAT, "TurnSpeed" },
+ { false, FT_FLOAT, "PitchSpeed" },
+ { false, FT_FLOAT, "PitchMin" },
+ { false, FT_FLOAT, "PitchMax" },
+ { false, FT_FLOAT, "MouseLookOffsetPitch" },
+ { false, FT_FLOAT, "CameraFadeDistScalarMin" },
+ { false, FT_FLOAT, "CameraFadeDistScalarMax" },
+ { false, FT_FLOAT, "CameraPitchOffset" },
+ { false, FT_FLOAT, "FacingLimitRight" },
+ { false, FT_FLOAT, "FacingLimitLeft" },
+ { false, FT_FLOAT, "MsslTrgtTurnLingering" },
+ { false, FT_FLOAT, "MsslTrgtPitchLingering" },
+ { false, FT_FLOAT, "MsslTrgtMouseLingering" },
+ { false, FT_FLOAT, "MsslTrgtEndOpacity" },
+ { false, FT_FLOAT, "MsslTrgtArcSpeed" },
+ { false, FT_FLOAT, "MsslTrgtArcRepeat" },
+ { false, FT_FLOAT, "MsslTrgtArcWidth" },
+ { false, FT_FLOAT, "MsslTrgtImpactRadius1" },
+ { false, FT_FLOAT, "MsslTrgtImpactRadius2" },
+ { false, FT_STRING_NOT_LOCALIZED, "MsslTrgtArcTexture" },
+ { false, FT_STRING_NOT_LOCALIZED, "MsslTrgtImpactTexture" },
+ { false, FT_STRING_NOT_LOCALIZED, "MsslTrgtImpactModel1" },
+ { false, FT_STRING_NOT_LOCALIZED, "MsslTrgtImpactModel2" },
+ { false, FT_FLOAT, "CameraYawOffset" },
+ { false, FT_FLOAT, "MsslTrgtImpactTexRadius" },
+ { false, FT_SHORT, "SeatID1" },
+ { false, FT_SHORT, "SeatID2" },
+ { false, FT_SHORT, "SeatID3" },
+ { false, FT_SHORT, "SeatID4" },
+ { false, FT_SHORT, "SeatID5" },
+ { false, FT_SHORT, "SeatID6" },
+ { false, FT_SHORT, "SeatID7" },
+ { false, FT_SHORT, "SeatID8" },
+ { false, FT_SHORT, "VehicleUIIndicatorID" },
+ { false, FT_SHORT, "PowerDisplayID1" },
+ { false, FT_SHORT, "PowerDisplayID2" },
+ { false, FT_SHORT, "PowerDisplayID3" },
+ { false, FT_BYTE, "FlagsB" },
+ { false, FT_BYTE, "UILocomotionType" },
+ };
+ return { &fields[0], std::extent::value, VehicleMeta::Instance(), HOTFIX_SEL_VEHICLE };
+ }
+};
+
+struct VehicleSeatLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "Flags1" },
+ { false, FT_INT, "Flags2" },
+ { false, FT_INT, "Flags3" },
+ { false, FT_FLOAT, "AttachmentOffsetX" },
+ { false, FT_FLOAT, "AttachmentOffsetY" },
+ { false, FT_FLOAT, "AttachmentOffsetZ" },
+ { false, FT_FLOAT, "EnterPreDelay" },
+ { false, FT_FLOAT, "EnterSpeed" },
+ { false, FT_FLOAT, "EnterGravity" },
+ { false, FT_FLOAT, "EnterMinDuration" },
+ { false, FT_FLOAT, "EnterMaxDuration" },
+ { false, FT_FLOAT, "EnterMinArcHeight" },
+ { false, FT_FLOAT, "EnterMaxArcHeight" },
+ { false, FT_FLOAT, "ExitPreDelay" },
+ { false, FT_FLOAT, "ExitSpeed" },
+ { false, FT_FLOAT, "ExitGravity" },
+ { false, FT_FLOAT, "ExitMinDuration" },
+ { false, FT_FLOAT, "ExitMaxDuration" },
+ { false, FT_FLOAT, "ExitMinArcHeight" },
+ { false, FT_FLOAT, "ExitMaxArcHeight" },
+ { false, FT_FLOAT, "PassengerYaw" },
+ { false, FT_FLOAT, "PassengerPitch" },
+ { false, FT_FLOAT, "PassengerRoll" },
+ { false, FT_FLOAT, "VehicleEnterAnimDelay" },
+ { false, FT_FLOAT, "VehicleExitAnimDelay" },
+ { false, FT_FLOAT, "CameraEnteringDelay" },
+ { false, FT_FLOAT, "CameraEnteringDuration" },
+ { false, FT_FLOAT, "CameraExitingDelay" },
+ { false, FT_FLOAT, "CameraExitingDuration" },
+ { false, FT_FLOAT, "CameraOffsetX" },
+ { false, FT_FLOAT, "CameraOffsetY" },
+ { false, FT_FLOAT, "CameraOffsetZ" },
+ { false, FT_FLOAT, "CameraPosChaseRate" },
+ { false, FT_FLOAT, "CameraFacingChaseRate" },
+ { false, FT_FLOAT, "CameraEnteringZoom" },
+ { false, FT_FLOAT, "CameraSeatZoomMin" },
+ { false, FT_FLOAT, "CameraSeatZoomMax" },
+ { false, FT_INT, "UISkinFileDataID" },
+ { true, FT_SHORT, "EnterAnimStart" },
+ { true, FT_SHORT, "EnterAnimLoop" },
+ { true, FT_SHORT, "RideAnimStart" },
+ { true, FT_SHORT, "RideAnimLoop" },
+ { true, FT_SHORT, "RideUpperAnimStart" },
+ { true, FT_SHORT, "RideUpperAnimLoop" },
+ { true, FT_SHORT, "ExitAnimStart" },
+ { true, FT_SHORT, "ExitAnimLoop" },
+ { true, FT_SHORT, "ExitAnimEnd" },
+ { true, FT_SHORT, "VehicleEnterAnim" },
+ { true, FT_SHORT, "VehicleExitAnim" },
+ { true, FT_SHORT, "VehicleRideAnimLoop" },
+ { false, FT_SHORT, "EnterAnimKitID" },
+ { false, FT_SHORT, "RideAnimKitID" },
+ { false, FT_SHORT, "ExitAnimKitID" },
+ { false, FT_SHORT, "VehicleEnterAnimKitID" },
+ { false, FT_SHORT, "VehicleRideAnimKitID" },
+ { false, FT_SHORT, "VehicleExitAnimKitID" },
+ { false, FT_SHORT, "CameraModeID" },
+ { true, FT_BYTE, "AttachmentID" },
+ { true, FT_BYTE, "PassengerAttachmentID" },
+ { true, FT_BYTE, "VehicleEnterAnimBone" },
+ { true, FT_BYTE, "VehicleExitAnimBone" },
+ { true, FT_BYTE, "VehicleRideAnimLoopBone" },
+ { false, FT_BYTE, "VehicleAbilityDisplay" },
+ { false, FT_INT, "EnterUISoundID" },
+ { false, FT_INT, "ExitUISoundID" },
+ };
+ return { &fields[0], std::extent::value, VehicleSeatMeta::Instance(), HOTFIX_SEL_VEHICLE_SEAT };
+ }
+};
+
+struct WmoAreaTableLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { true, FT_INT, "WMOGroupID" },
+ { false, FT_STRING, "AreaName" },
+ { true, FT_SHORT, "WMOID" },
+ { false, FT_SHORT, "AmbienceID" },
+ { false, FT_SHORT, "ZoneMusic" },
+ { false, FT_SHORT, "IntroSound" },
+ { false, FT_SHORT, "AreaTableID" },
+ { false, FT_SHORT, "UWIntroSound" },
+ { false, FT_SHORT, "UWAmbience" },
+ { true, FT_BYTE, "NameSet" },
+ { false, FT_BYTE, "SoundProviderPref" },
+ { false, FT_BYTE, "SoundProviderPrefUnderwater" },
+ { false, FT_BYTE, "Flags" },
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "UWZoneMusic" },
+ };
+ return { &fields[0], std::extent::value, WMOAreaTableMeta::Instance(), HOTFIX_SEL_WMO_AREA_TABLE };
+ }
+};
+
+struct WorldMapAreaLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_STRING_NOT_LOCALIZED, "AreaName" },
+ { false, FT_FLOAT, "LocLeft" },
+ { false, FT_FLOAT, "LocRight" },
+ { false, FT_FLOAT, "LocTop" },
+ { false, FT_FLOAT, "LocBottom" },
+ { false, FT_SHORT, "MapID" },
+ { false, FT_SHORT, "AreaID" },
+ { true, FT_SHORT, "DisplayMapID" },
+ { true, FT_SHORT, "DefaultDungeonFloor" },
+ { false, FT_SHORT, "ParentWorldMapID" },
+ { false, FT_SHORT, "Flags" },
+ { false, FT_BYTE, "LevelRangeMin" },
+ { false, FT_BYTE, "LevelRangeMax" },
+ { false, FT_BYTE, "BountySetID" },
+ { false, FT_BYTE, "BountyBoardLocation" },
+ { false, FT_INT, "ID" },
+ { false, FT_INT, "PlayerConditionID" },
+ };
+ return { &fields[0], std::extent::value, WorldMapAreaMeta::Instance(), HOTFIX_SEL_WORLD_MAP_AREA };
+ }
+};
+
+struct WorldMapOverlayLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING_NOT_LOCALIZED, "TextureName" },
+ { false, FT_SHORT, "TextureWidth" },
+ { false, FT_SHORT, "TextureHeight" },
+ { false, FT_INT, "MapAreaID" },
+ { false, FT_INT, "AreaID1" },
+ { false, FT_INT, "AreaID2" },
+ { false, FT_INT, "AreaID3" },
+ { false, FT_INT, "AreaID4" },
+ { true, FT_INT, "OffsetX" },
+ { true, FT_INT, "OffsetY" },
+ { true, FT_INT, "HitRectTop" },
+ { true, FT_INT, "HitRectLeft" },
+ { true, FT_INT, "HitRectBottom" },
+ { true, FT_INT, "HitRectRight" },
+ { false, FT_INT, "PlayerConditionID" },
+ { false, FT_INT, "Flags" },
+ };
+ return { &fields[0], std::extent::value, WorldMapOverlayMeta::Instance(), HOTFIX_SEL_WORLD_MAP_OVERLAY };
+ }
+};
+
+struct WorldMapTransformsLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "RegionMinX" },
+ { false, FT_FLOAT, "RegionMinY" },
+ { false, FT_FLOAT, "RegionMinZ" },
+ { false, FT_FLOAT, "RegionMaxX" },
+ { false, FT_FLOAT, "RegionMaxY" },
+ { false, FT_FLOAT, "RegionMaxZ" },
+ { false, FT_FLOAT, "RegionOffsetX" },
+ { false, FT_FLOAT, "RegionOffsetY" },
+ { false, FT_FLOAT, "RegionScale" },
+ { false, FT_SHORT, "MapID" },
+ { false, FT_SHORT, "AreaID" },
+ { false, FT_SHORT, "NewMapID" },
+ { false, FT_SHORT, "NewDungeonMapID" },
+ { false, FT_SHORT, "NewAreaID" },
+ { false, FT_BYTE, "Flags" },
+ };
+ return { &fields[0], std::extent::value, WorldMapTransformsMeta::Instance(), HOTFIX_SEL_WORLD_MAP_TRANSFORMS };
+ }
+};
+
+struct WorldSafeLocsLoadInfo
+{
+ static DB2LoadInfo Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_FLOAT, "LocX" },
+ { false, FT_FLOAT, "LocY" },
+ { false, FT_FLOAT, "LocZ" },
+ { false, FT_FLOAT, "Facing" },
+ { false, FT_STRING, "AreaName" },
+ { false, FT_SHORT, "MapID" },
+ };
+ return { &fields[0], std::extent::value, WorldSafeLocsMeta::Instance(), HOTFIX_SEL_WORLD_SAFE_LOCS };
+ }
+};
+
+#endif DB2LoadInfo_h__
diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp
index 31f4d0e4438..7d45e788cc6 100644
--- a/src/server/game/DataStores/DB2Stores.cpp
+++ b/src/server/game/DataStores/DB2Stores.cpp
@@ -19,215 +19,215 @@
#include "Common.h"
#include "Containers.h"
#include "DatabaseEnv.h"
-#include "DB2Metadata.h"
+#include "DB2LoadInfo.h"
#include "Log.h"
#include "TransportMgr.h"
#include "World.h"
-DB2Storage sAchievementStore("Achievement.db2", AchievementMeta::Instance(), HOTFIX_SEL_ACHIEVEMENT);
-DB2Storage sAnimKitStore("AnimKit.db2", AnimKitMeta::Instance(), HOTFIX_SEL_ANIM_KIT);
-DB2Storage sAreaGroupMemberStore("AreaGroupMember.db2", AreaGroupMemberMeta::Instance(), HOTFIX_SEL_AREA_GROUP_MEMBER);
-DB2Storage sAreaTableStore("AreaTable.db2", AreaTableMeta::Instance(), HOTFIX_SEL_AREA_TABLE);
-DB2Storage sAreaTriggerStore("AreaTrigger.db2", AreaTriggerMeta::Instance(), HOTFIX_SEL_AREA_TRIGGER);
-DB2Storage sArmorLocationStore("ArmorLocation.db2", ArmorLocationMeta::Instance(), HOTFIX_SEL_ARMOR_LOCATION);
-DB2Storage sArtifactStore("Artifact.db2", ArtifactMeta::Instance(), HOTFIX_SEL_ARTIFACT);
-DB2Storage sArtifactAppearanceStore("ArtifactAppearance.db2", ArtifactAppearanceMeta::Instance(), HOTFIX_SEL_ARTIFACT_APPEARANCE);
-DB2Storage sArtifactAppearanceSetStore("ArtifactAppearanceSet.db2", ArtifactAppearanceSetMeta::Instance(), HOTFIX_SEL_ARTIFACT_APPEARANCE_SET);
-DB2Storage sArtifactCategoryStore("ArtifactCategory.db2", ArtifactCategoryMeta::Instance(), HOTFIX_SEL_ARTIFACT_CATEGORY);
-DB2Storage sArtifactPowerStore("ArtifactPower.db2", ArtifactPowerMeta::Instance(), HOTFIX_SEL_ARTIFACT_POWER);
-DB2Storage sArtifactPowerLinkStore("ArtifactPowerLink.db2", ArtifactPowerLinkMeta::Instance(), HOTFIX_SEL_ARTIFACT_POWER_LINK);
-DB2Storage sArtifactPowerRankStore("ArtifactPowerRank.db2", ArtifactPowerRankMeta::Instance(), HOTFIX_SEL_ARTIFACT_POWER_RANK);
-DB2Storage sArtifactQuestXPStore("ArtifactQuestXP.db2", ArtifactQuestXPMeta::Instance(), HOTFIX_SEL_ARTIFACT_QUEST_XP);
-DB2Storage sAuctionHouseStore("AuctionHouse.db2", AuctionHouseMeta::Instance(), HOTFIX_SEL_AUCTION_HOUSE);
-DB2Storage sBankBagSlotPricesStore("BankBagSlotPrices.db2", BankBagSlotPricesMeta::Instance(), HOTFIX_SEL_BANK_BAG_SLOT_PRICES);
-DB2Storage sBannedAddOnsStore("BannedAddOns.db2", BannedAddOnsMeta::Instance(), HOTFIX_SEL_BANNED_ADDONS);
-DB2Storage sBarberShopStyleStore("BarberShopStyle.db2", BarberShopStyleMeta::Instance(), HOTFIX_SEL_BARBER_SHOP_STYLE);
-DB2Storage sBattlePetBreedQualityStore("BattlePetBreedQuality.db2", BattlePetBreedQualityMeta::Instance(), HOTFIX_SEL_BATTLE_PET_BREED_QUALITY);
-DB2Storage sBattlePetBreedStateStore("BattlePetBreedState.db2", BattlePetBreedStateMeta::Instance(), HOTFIX_SEL_BATTLE_PET_BREED_STATE);
-DB2Storage sBattlePetSpeciesStore("BattlePetSpecies.db2", BattlePetSpeciesMeta::Instance(), HOTFIX_SEL_BATTLE_PET_SPECIES);
-DB2Storage sBattlePetSpeciesStateStore("BattlePetSpeciesState.db2", BattlePetSpeciesStateMeta::Instance(), HOTFIX_SEL_BATTLE_PET_SPECIES_STATE);
-DB2Storage sBattlemasterListStore("BattlemasterList.db2", BattlemasterListMeta::Instance(), HOTFIX_SEL_BATTLEMASTER_LIST);
-DB2Storage sBroadcastTextStore("BroadcastText.db2", BroadcastTextMeta::Instance(), HOTFIX_SEL_BROADCAST_TEXT);
-DB2Storage sCharSectionsStore("CharSections.db2", CharSectionsMeta::Instance(), HOTFIX_SEL_CHAR_SECTIONS);
-DB2Storage sCharStartOutfitStore("CharStartOutfit.db2", CharStartOutfitMeta::Instance(), HOTFIX_SEL_CHAR_START_OUTFIT);
-DB2Storage sCharTitlesStore("CharTitles.db2", CharTitlesMeta::Instance(), HOTFIX_SEL_CHAR_TITLES);
-DB2Storage sChatChannelsStore("ChatChannels.db2", ChatChannelsMeta::Instance(), HOTFIX_SEL_CHAT_CHANNELS);
-DB2Storage sChrClassesStore("ChrClasses.db2", ChrClassesMeta::Instance(), HOTFIX_SEL_CHR_CLASSES);
-DB2Storage sChrClassesXPowerTypesStore("ChrClassesXPowerTypes.db2", ChrClassesXPowerTypesMeta::Instance(), HOTFIX_SEL_CHR_CLASSES_X_POWER_TYPES);
-DB2Storage sChrRacesStore("ChrRaces.db2", ChrRacesMeta::Instance(), HOTFIX_SEL_CHR_RACES);
-DB2Storage sChrSpecializationStore("ChrSpecialization.db2", ChrSpecializationMeta::Instance(), HOTFIX_SEL_CHR_SPECIALIZATION);
-DB2Storage sCinematicSequencesStore("CinematicSequences.db2", CinematicSequencesMeta::Instance(), HOTFIX_SEL_CINEMATIC_SEQUENCES);
-DB2Storage sCreatureDisplayInfoStore("CreatureDisplayInfo.db2", CreatureDisplayInfoMeta::Instance(), HOTFIX_SEL_CREATURE_DISPLAY_INFO);
-DB2Storage sCreatureDisplayInfoExtraStore("CreatureDisplayInfoExtra.db2", CreatureDisplayInfoExtraMeta::Instance(), HOTFIX_SEL_CREATURE_DISPLAY_INFO_EXTRA);
-DB2Storage sCreatureFamilyStore("CreatureFamily.db2", CreatureFamilyMeta::Instance(), HOTFIX_SEL_CREATURE_FAMILY);
-DB2Storage sCreatureModelDataStore("CreatureModelData.db2", CreatureModelDataMeta::Instance(), HOTFIX_SEL_CREATURE_MODEL_DATA);
-DB2Storage sCreatureTypeStore("CreatureType.db2", CreatureTypeMeta::Instance(), HOTFIX_SEL_CREATURE_TYPE);
-DB2Storage sCriteriaStore("Criteria.db2", CriteriaMeta::Instance(), HOTFIX_SEL_CRITERIA);
-DB2Storage sCriteriaTreeStore("CriteriaTree.db2", CriteriaTreeMeta::Instance(), HOTFIX_SEL_CRITERIA_TREE);
-DB2Storage sCurrencyTypesStore("CurrencyTypes.db2", CurrencyTypesMeta::Instance(), HOTFIX_SEL_CURRENCY_TYPES);
-DB2Storage sCurveStore("Curve.db2", CurveMeta::Instance(), HOTFIX_SEL_CURVE);
-DB2Storage sCurvePointStore("CurvePoint.db2", CurvePointMeta::Instance(), HOTFIX_SEL_CURVE_POINT);
-DB2Storage sDestructibleModelDataStore("DestructibleModelData.db2", DestructibleModelDataMeta::Instance(), HOTFIX_SEL_DESTRUCTIBLE_MODEL_DATA);
-DB2Storage sDifficultyStore("Difficulty.db2", DifficultyMeta::Instance(), HOTFIX_SEL_DIFFICULTY);
-DB2Storage sDungeonEncounterStore("DungeonEncounter.db2", DungeonEncounterMeta::Instance(), HOTFIX_SEL_DUNGEON_ENCOUNTER);
-DB2Storage sDurabilityCostsStore("DurabilityCosts.db2", DurabilityCostsMeta::Instance(), HOTFIX_SEL_DURABILITY_COSTS);
-DB2Storage sDurabilityQualityStore("DurabilityQuality.db2", DurabilityQualityMeta::Instance(), HOTFIX_SEL_DURABILITY_QUALITY);
-DB2Storage sEmotesStore("Emotes.db2", EmotesMeta::Instance(), HOTFIX_SEL_EMOTES);
-DB2Storage sEmotesTextStore("EmotesText.db2", EmotesTextMeta::Instance(), HOTFIX_SEL_EMOTES_TEXT);
-DB2Storage