aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/DataStores
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2016-08-15 00:03:38 +0200
committerShauren <shauren.trinity@gmail.com>2016-08-15 00:03:38 +0200
commitfea0cb16f2e73ec21891ac14cdc10d9d8f518cfe (patch)
tree7e3a6ee9b3876ca5b3a7115a9d932ce8125c41e1 /src/server/game/DataStores
parentf8c5a2c723c734513eddc98a5c7f380c2f00e479 (diff)
Core/Items: Implemented artifacts
Diffstat (limited to 'src/server/game/DataStores')
-rw-r--r--src/server/game/DataStores/DB2Stores.cpp68
-rw-r--r--src/server/game/DataStores/DB2Stores.h23
-rw-r--r--src/server/game/DataStores/DB2Structure.h91
-rw-r--r--src/server/game/DataStores/DBCEnums.h37
-rw-r--r--src/server/game/DataStores/GameTables.cpp2
-rw-r--r--src/server/game/DataStores/GameTables.h6
6 files changed, 215 insertions, 12 deletions
diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp
index c1ebbd4cd4c..a893bcc5ece 100644
--- a/src/server/game/DataStores/DB2Stores.cpp
+++ b/src/server/game/DataStores/DB2Stores.cpp
@@ -30,6 +30,14 @@ DB2Storage<AreaGroupMemberEntry> sAreaGroupMemberStore("AreaGroup
DB2Storage<AreaTableEntry> sAreaTableStore("AreaTable.db2", AreaTableMeta::Instance(), HOTFIX_SEL_AREA_TABLE);
DB2Storage<AreaTriggerEntry> sAreaTriggerStore("AreaTrigger.db2", AreaTriggerMeta::Instance(), HOTFIX_SEL_AREA_TRIGGER);
DB2Storage<ArmorLocationEntry> sArmorLocationStore("ArmorLocation.db2", ArmorLocationMeta::Instance(), HOTFIX_SEL_ARMOR_LOCATION);
+DB2Storage<ArtifactEntry> sArtifactStore("Artifact.db2", ArtifactMeta::Instance(), HOTFIX_SEL_ARTIFACT);
+DB2Storage<ArtifactAppearanceEntry> sArtifactAppearanceStore("ArtifactAppearance.db2", ArtifactAppearanceMeta::Instance(), HOTFIX_SEL_ARTIFACT_APPEARANCE);
+DB2Storage<ArtifactAppearanceSetEntry> sArtifactAppearanceSetStore("ArtifactAppearanceSet.db2", ArtifactAppearanceSetMeta::Instance(), HOTFIX_SEL_ARTIFACT_APPEARANCE_SET);
+DB2Storage<ArtifactCategoryEntry> sArtifactCategoryStore("ArtifactCategory.db2", ArtifactCategoryMeta::Instance(), HOTFIX_SEL_ARTIFACT_CATEGORY);
+DB2Storage<ArtifactPowerEntry> sArtifactPowerStore("ArtifactPower.db2", ArtifactPowerMeta::Instance(), HOTFIX_SEL_ARTIFACT_POWER);
+DB2Storage<ArtifactPowerLinkEntry> sArtifactPowerLinkStore("ArtifactPowerLink.db2", ArtifactPowerLinkMeta::Instance(), HOTFIX_SEL_ARTIFACT_POWER_LINK);
+DB2Storage<ArtifactPowerRankEntry> sArtifactPowerRankStore("ArtifactPowerRank.db2", ArtifactPowerRankMeta::Instance(), HOTFIX_SEL_ARTIFACT_POWER_RANK);
+DB2Storage<ArtifactQuestXPEntry> sArtifactQuestXPStore("ArtifactQuestXP.db2", ArtifactQuestXPMeta::Instance(), HOTFIX_SEL_ARTIFACT_QUEST_XP);
DB2Storage<AuctionHouseEntry> sAuctionHouseStore("AuctionHouse.db2", AuctionHouseMeta::Instance(), HOTFIX_SEL_AUCTION_HOUSE);
DB2Storage<BankBagSlotPricesEntry> sBankBagSlotPricesStore("BankBagSlotPrices.db2", BankBagSlotPricesMeta::Instance(), HOTFIX_SEL_BANK_BAG_SLOT_PRICES);
DB2Storage<BannedAddOnsEntry> sBannedAddOnsStore("BannedAddOns.db2", BannedAddOnsMeta::Instance(), HOTFIX_SEL_BANNED_ADDONS);
@@ -100,6 +108,7 @@ DB2Storage<ItemArmorShieldEntry> sItemArmorShieldStore("ItemArmor
DB2Storage<ItemArmorTotalEntry> sItemArmorTotalStore("ItemArmorTotal.db2", ItemArmorTotalMeta::Instance(), HOTFIX_SEL_ITEM_ARMOR_TOTAL);
DB2Storage<ItemBagFamilyEntry> sItemBagFamilyStore("ItemBagFamily.db2", ItemBagFamilyMeta::Instance(), HOTFIX_SEL_ITEM_BAG_FAMILY);
DB2Storage<ItemBonusEntry> sItemBonusStore("ItemBonus.db2", ItemBonusMeta::Instance(), HOTFIX_SEL_ITEM_BONUS);
+DB2Storage<ItemBonusListLevelDeltaEntry> sItemBonusListLevelDeltaStore("ItemBonusListLevelDelta.db2", ItemBonusListLevelDeltaMeta::Instance(), HOTFIX_SEL_ITEM_BONUS_LIST_LEVEL_DELTA);
DB2Storage<ItemBonusTreeNodeEntry> sItemBonusTreeNodeStore("ItemBonusTreeNode.db2", ItemBonusTreeNodeMeta::Instance(), HOTFIX_SEL_ITEM_BONUS_TREE_NODE);
DB2Storage<ItemChildEquipmentEntry> sItemChildEquipmentStore("ItemChildEquipment.db2", ItemChildEquipmentMeta::Instance(), HOTFIX_SEL_ITEM_CHILD_EQUIPMENT);
DB2Storage<ItemClassEntry> sItemClassStore("ItemClass.db2", ItemClassMeta::Instance(), HOTFIX_SEL_ITEM_CLASS);
@@ -293,6 +302,13 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale)
LOAD_DB2(sAreaTableStore);
LOAD_DB2(sAreaTriggerStore);
LOAD_DB2(sArmorLocationStore);
+ LOAD_DB2(sArtifactStore);
+ LOAD_DB2(sArtifactAppearanceStore);
+ LOAD_DB2(sArtifactAppearanceSetStore);
+ LOAD_DB2(sArtifactCategoryStore);
+ LOAD_DB2(sArtifactPowerStore);
+ LOAD_DB2(sArtifactPowerLinkStore);
+ LOAD_DB2(sArtifactPowerRankStore);
LOAD_DB2(sAuctionHouseStore);
LOAD_DB2(sBankBagSlotPricesStore);
LOAD_DB2(sBannedAddOnsStore);
@@ -363,6 +379,7 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale)
LOAD_DB2(sItemArmorTotalStore);
LOAD_DB2(sItemBagFamilyStore);
LOAD_DB2(sItemBonusStore);
+ LOAD_DB2(sItemBonusListLevelDeltaStore);
LOAD_DB2(sItemBonusTreeNodeStore);
LOAD_DB2(sItemChildEquipmentStore);
LOAD_DB2(sItemClassStore);
@@ -482,6 +499,18 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale)
for (AreaGroupMemberEntry const* areaGroupMember : sAreaGroupMemberStore)
_areaGroupMembers[areaGroupMember->AreaGroupID].push_back(areaGroupMember->AreaID);
+ for (ArtifactPowerEntry const* artifactPower : sArtifactPowerStore)
+ _artifactPowers[artifactPower->ArtifactID].push_back(artifactPower);
+
+ for (ArtifactPowerLinkEntry const* artifactPowerLink : sArtifactPowerLinkStore)
+ {
+ _artifactPowerLinks[artifactPowerLink->FromArtifactPowerID].insert(artifactPowerLink->ToArtifactPowerID);
+ _artifactPowerLinks[artifactPowerLink->ToArtifactPowerID].insert(artifactPowerLink->FromArtifactPowerID);
+ }
+
+ for (ArtifactPowerRankEntry const* artifactPowerRank : sArtifactPowerRankStore)
+ _artifactPowerRanks[std::pair<uint32, uint8>{ artifactPowerRank->ArtifactPowerID, artifactPowerRank->Rank }] = artifactPowerRank;
+
std::unordered_map<uint32, std::set<std::pair<uint8, uint8>>> addedSections;
for (CharSectionsEntry const* charSection : sCharSectionsStore)
{
@@ -601,6 +630,9 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale)
for (ItemBonusEntry const* bonus : sItemBonusStore)
_itemBonusLists[bonus->BonusListID].push_back(bonus);
+ for (ItemBonusListLevelDeltaEntry const* itemBonusListLevelDelta : sItemBonusListLevelDeltaStore)
+ _itemLevelDeltaToBonusListContainer[itemBonusListLevelDelta->Delta] = itemBonusListLevelDelta->ID;
+
for (ItemBonusTreeNodeEntry const* bonusTreeNode : sItemBonusTreeNodeStore)
{
uint32 bonusTreeId = bonusTreeNode->BonusTreeID;
@@ -918,6 +950,33 @@ std::vector<uint32> DB2Manager::GetAreasForGroup(uint32 areaGroupId) const
return std::vector<uint32>();
}
+std::vector<ArtifactPowerEntry const*> DB2Manager::GetArtifactPowers(uint8 artifactId) const
+{
+ auto itr = _artifactPowers.find(artifactId);
+ if (itr != _artifactPowers.end())
+ return itr->second;
+
+ return std::vector<ArtifactPowerEntry const*>{};
+}
+
+std::unordered_set<uint32> const* DB2Manager::GetArtifactPowerLinks(uint32 artifactPowerId) const
+{
+ auto itr = _artifactPowerLinks.find(artifactPowerId);
+ if (itr != _artifactPowerLinks.end())
+ return &itr->second;
+
+ return nullptr;
+}
+
+ArtifactPowerRankEntry const* DB2Manager::GetArtifactPowerRank(uint32 artifactPowerId, uint8 rank) const
+{
+ auto itr = _artifactPowerRanks.find({ artifactPowerId, rank });
+ if (itr != _artifactPowerRanks.end())
+ return itr->second;
+
+ return nullptr;
+}
+
char const* DB2Manager::GetBroadcastTextValue(BroadcastTextEntry const* broadcastText, LocaleConstant locale /*= DEFAULT_LOCALE*/, uint8 gender /*= GENDER_MALE*/, bool forceGender /*= false*/)
{
if (gender == GENDER_FEMALE && (forceGender || broadcastText->FemaleText->Str[DEFAULT_LOCALE][0] != '\0'))
@@ -1195,6 +1254,15 @@ DB2Manager::ItemBonusList const* DB2Manager::GetItemBonusList(uint32 bonusListId
return nullptr;
}
+uint32 DB2Manager::GetItemBonusListForItemLevelDelta(int16 delta) const
+{
+ auto itr = _itemLevelDeltaToBonusListContainer.find(delta);
+ if (itr != _itemLevelDeltaToBonusListContainer.end())
+ return itr->second;
+
+ return 0;
+}
+
std::set<uint32> DB2Manager::GetItemBonusTree(uint32 itemId, uint32 itemBonusTreeMod) const
{
std::set<uint32> bonusListIDs;
diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h
index f5aff6432a7..b8e5569ec9b 100644
--- a/src/server/game/DataStores/DB2Stores.h
+++ b/src/server/game/DataStores/DB2Stores.h
@@ -28,6 +28,11 @@ TC_GAME_API extern DB2Storage<AnimKitEntry> sAnimKitStor
TC_GAME_API extern DB2Storage<AreaTableEntry> sAreaTableStore;
TC_GAME_API extern DB2Storage<AreaTriggerEntry> sAreaTriggerStore;
TC_GAME_API extern DB2Storage<ArmorLocationEntry> sArmorLocationStore;
+TC_GAME_API extern DB2Storage<ArtifactEntry> sArtifactStore;
+TC_GAME_API extern DB2Storage<ArtifactCategoryEntry> sArtifactCategoryStore;
+TC_GAME_API extern DB2Storage<ArtifactAppearanceEntry> sArtifactAppearanceStore;
+TC_GAME_API extern DB2Storage<ArtifactAppearanceSetEntry> sArtifactAppearanceSetStore;
+TC_GAME_API extern DB2Storage<ArtifactPowerEntry> sArtifactPowerStore;
TC_GAME_API extern DB2Storage<AuctionHouseEntry> sAuctionHouseStore;
TC_GAME_API extern DB2Storage<BankBagSlotPricesEntry> sBankBagSlotPricesStore;
TC_GAME_API extern DB2Storage<BannedAddOnsEntry> sBannedAddOnsStore;
@@ -208,7 +213,7 @@ struct HotfixNotify
typedef std::vector<HotfixNotify> HotfixData;
#define DEFINE_DB2_SET_COMPARATOR(structure) \
- struct structure ## Comparator : public std::binary_function<structure const*, structure const*, bool> \
+ struct structure ## Comparator \
{ \
bool operator()(structure const* left, structure const* right) const { return Compare(left, right); } \
static bool Compare(structure const* left, structure const* right); \
@@ -217,11 +222,14 @@ typedef std::vector<HotfixNotify> HotfixData;
class TC_GAME_API DB2Manager
{
public:
- DEFINE_DB2_SET_COMPARATOR(ChrClassesXPowerTypesEntry);
- DEFINE_DB2_SET_COMPARATOR(MountTypeXCapabilityEntry);
+ DEFINE_DB2_SET_COMPARATOR(ChrClassesXPowerTypesEntry)
+ DEFINE_DB2_SET_COMPARATOR(MountTypeXCapabilityEntry)
typedef std::map<uint32 /*hash*/, DB2StorageBase*> StorageMap;
typedef std::unordered_map<uint32 /*areaGroupId*/, std::vector<uint32/*areaId*/>> AreaGroupMemberContainer;
+ typedef std::unordered_map<uint32, std::vector<ArtifactPowerEntry const*>> ArtifactPowersContainer;
+ typedef std::unordered_map<uint32, std::unordered_set<uint32>> ArtifactPowerLinksContainer;
+ typedef std::unordered_map<std::pair<uint32, uint8>, ArtifactPowerRankEntry const*> ArtifactPowerRanksContainer;
typedef std::unordered_multimap<uint32, CharSectionsEntry const*> CharSectionsContainer;
typedef std::unordered_map<uint32, CharStartOutfitEntry const*> CharStartOutfitContainer;
typedef ChrSpecializationEntry const* ChrSpecializationByIndexContainer[MAX_CLASSES + 1][MAX_SPECIALIZATIONS];
@@ -231,6 +239,7 @@ public:
typedef std::unordered_map<uint32, HeirloomEntry const*> HeirloomItemsContainer;
typedef std::vector<ItemBonusEntry const*> ItemBonusList;
typedef std::unordered_map<uint32 /*bonusListId*/, ItemBonusList> ItemBonusListContainer;
+ typedef std::unordered_map<int16, uint32> ItemBonusListLevelDeltaContainer;
typedef std::unordered_multimap<uint32 /*itemId*/, uint32 /*bonusTreeId*/> ItemToBonusTreeContainer;
typedef std::unordered_map<uint32 /*itemId*/, ItemChildEquipmentEntry const*> ItemChildEquipmentContainer;
typedef std::unordered_map<uint32 /*itemId | appearanceMod << 24*/, ItemModifiedAppearanceEntry const*> ItemModifiedAppearanceByItemContainer;
@@ -267,6 +276,9 @@ public:
time_t GetHotfixDate(uint32 entry, uint32 type) const;
std::vector<uint32> GetAreasForGroup(uint32 areaGroupId) const;
+ std::vector<ArtifactPowerEntry const*> GetArtifactPowers(uint8 artifactId) const;
+ std::unordered_set<uint32> const* GetArtifactPowerLinks(uint32 artifactPowerId) const;
+ ArtifactPowerRankEntry const* GetArtifactPowerRank(uint32 artifactPowerId, uint8 rank) const;
static char const* GetBroadcastTextValue(BroadcastTextEntry const* broadcastText, LocaleConstant locale = DEFAULT_LOCALE, uint8 gender = GENDER_MALE, bool forceGender = false);
CharSectionsEntry const* GetCharSectionEntry(uint8 race, CharSectionType genType, uint8 gender, uint8 type, uint8 color) const;
CharStartOutfitEntry const* GetCharStartOutfitEntry(uint8 race, uint8 class_, uint8 gender) const;
@@ -280,6 +292,7 @@ public:
std::vector<uint32> const* GetFactionTeamList(uint32 faction) const;
HeirloomEntry const* GetHeirloomByItemId(uint32 itemId) const;
ItemBonusList const* GetItemBonusList(uint32 bonusListId) const;
+ uint32 GetItemBonusListForItemLevelDelta(int16 delta) const;
std::set<uint32> GetItemBonusTree(uint32 itemId, uint32 itemBonusTreeMod) const;
ItemChildEquipmentEntry const* GetItemChildEquipment(uint32 itemId) const;
bool HasItemCurrencyCost(uint32 itemId) const { return _itemsWithCurrencyCost.count(itemId) > 0; }
@@ -324,6 +337,9 @@ private:
HotfixData _hotfixData;
AreaGroupMemberContainer _areaGroupMembers;
+ ArtifactPowersContainer _artifactPowers;
+ ArtifactPowerLinksContainer _artifactPowerLinks;
+ ArtifactPowerRanksContainer _artifactPowerRanks;
CharSectionsContainer _charSections;
CharStartOutfitContainer _charStartOutfits;
uint32 _powersByClass[MAX_CLASSES][MAX_POWERS];
@@ -333,6 +349,7 @@ private:
FactionTeamContainer _factionTeams;
HeirloomItemsContainer _heirlooms;
ItemBonusListContainer _itemBonusLists;
+ ItemBonusListLevelDeltaContainer _itemLevelDeltaToBonusListContainer;
ItemBonusTreeContainer _itemBonusTrees;
ItemChildEquipmentContainer _itemChildEquipment;
std::unordered_set<uint32> _itemsWithCurrencyCost;
diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h
index 32868b632c3..627b2f6b916 100644
--- a/src/server/game/DataStores/DB2Structure.h
+++ b/src/server/game/DataStores/DB2Structure.h
@@ -119,6 +119,91 @@ struct ArmorLocationEntry
float Modifier[5];
};
+struct ArtifactEntry
+{
+ uint32 ID;
+ LocalizedString* Name;
+ uint32 BarConnectedColor;
+ uint32 BarDisconnectedColor;
+ uint32 TitleColor;
+ uint16 ClassUiTextureKitID;
+ uint16 SpecID;
+ uint8 ArtifactCategoryID;
+ uint8 Flags;
+};
+
+struct ArtifactAppearanceEntry
+{
+ LocalizedString* Name;
+ uint32 SwatchColor;
+ float ModelDesaturation;
+ float ModelAlpha;
+ uint32 ShapeshiftDisplayID;
+ uint16 ArtifactAppearanceSetID;
+ uint16 PlayerConditionID;
+ uint16 Unknown;
+ uint8 DisplayIndex;
+ uint8 AppearanceModID;
+ uint8 Flags;
+ uint8 ModifiesShapeshiftFormDisplay;
+ uint32 ID;
+ uint32 ItemAppearanceID;
+ uint32 AltItemAppearanceID;
+};
+
+struct ArtifactAppearanceSetEntry
+{
+ LocalizedString* Name;
+ LocalizedString* Name2;
+ uint16 UiCameraID;
+ uint16 AltHandUICameraID;
+ uint8 ArtifactID;
+ uint8 DisplayIndex;
+ uint8 AttachmentPoint;
+ uint8 Flags;
+ uint32 ID;
+};
+
+struct ArtifactCategoryEntry
+{
+ uint32 ID;
+ uint16 ArtifactKnowledgeCurrencyID;
+ uint16 ArtifactKnowledgeMultiplierCurveID;
+};
+
+struct ArtifactPowerEntry
+{
+ DBCPosition2D Pos;
+ uint8 ArtifactID;
+ uint8 Flags;
+ uint8 MaxRank;
+ uint32 ID;
+ uint32 RelicType;
+};
+
+struct ArtifactPowerLinkEntry
+{
+ uint32 ID;
+ uint16 FromArtifactPowerID;
+ uint16 ToArtifactPowerID;
+};
+
+struct ArtifactPowerRankEntry
+{
+ uint32 ID;
+ uint32 SpellID;
+ float Value;
+ uint16 ArtifactPowerID;
+ uint16 Unknown;
+ uint8 Rank;
+};
+
+struct ArtifactQuestXPEntry
+{
+ uint32 ID;
+ uint32 Exp[10];
+};
+
struct AuctionHouseEntry
{
uint32 ID;
@@ -1180,6 +1265,12 @@ struct ItemBonusEntry
uint8 Index;
};
+struct ItemBonusListLevelDeltaEntry
+{
+ int16 Delta;
+ uint32 ID;
+};
+
struct ItemBonusTreeNodeEntry
{
uint32 ID;
diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h
index 94e421b4445..0d23ee12084 100644
--- a/src/server/game/DataStores/DBCEnums.h
+++ b/src/server/game/DataStores/DBCEnums.h
@@ -138,6 +138,15 @@ enum AreaFlags
AREA_FLAG_UNK9 = 0x40000000
};
+enum ArtifactPowerFlag : uint8
+{
+ ARTIFACT_POWER_FLAG_GOLD = 0x01,
+ ARTIFACT_POWER_FLAG_FIRST = 0x02,
+ ARTIFACT_POWER_FLAG_FINAL = 0x04,
+ ARTIFACT_POWER_FLAG_SCALES_WITH_NUM_POWERS = 0x08,
+ ARTIFACT_POWER_FLAG_DONT_COUNT_FIRST_BONUS_RANK = 0x10,
+};
+
enum ChrSpecializationFlag
{
CHR_SPECIALIZATION_FLAG_CASTER = 0x01,
@@ -456,6 +465,11 @@ enum CharSectionType
SECTION_TYPE_CUSTOM_DISPLAY_3 = 15
};
+enum Curves
+{
+ CURVE_ID_ARTIFACT_RELIC_ITEM_LEVEL_BONUS = 1718
+};
+
enum Difficulty : uint8
{
DIFFICULTY_NONE = 0,
@@ -566,15 +580,19 @@ enum GlyphSlotType
enum ItemEnchantmentType
{
- ITEM_ENCHANTMENT_TYPE_NONE = 0,
- ITEM_ENCHANTMENT_TYPE_COMBAT_SPELL = 1,
- ITEM_ENCHANTMENT_TYPE_DAMAGE = 2,
- ITEM_ENCHANTMENT_TYPE_EQUIP_SPELL = 3,
- ITEM_ENCHANTMENT_TYPE_RESISTANCE = 4,
- ITEM_ENCHANTMENT_TYPE_STAT = 5,
- ITEM_ENCHANTMENT_TYPE_TOTEM = 6,
- ITEM_ENCHANTMENT_TYPE_USE_SPELL = 7,
- ITEM_ENCHANTMENT_TYPE_PRISMATIC_SOCKET = 8
+ ITEM_ENCHANTMENT_TYPE_NONE = 0,
+ ITEM_ENCHANTMENT_TYPE_COMBAT_SPELL = 1,
+ ITEM_ENCHANTMENT_TYPE_DAMAGE = 2,
+ ITEM_ENCHANTMENT_TYPE_EQUIP_SPELL = 3,
+ ITEM_ENCHANTMENT_TYPE_RESISTANCE = 4,
+ ITEM_ENCHANTMENT_TYPE_STAT = 5,
+ ITEM_ENCHANTMENT_TYPE_TOTEM = 6,
+ ITEM_ENCHANTMENT_TYPE_USE_SPELL = 7,
+ ITEM_ENCHANTMENT_TYPE_PRISMATIC_SOCKET = 8,
+ ITEM_ENCHANTMENT_TYPE_ARTIFACT_POWER_BONUS_RANK_BY_TYPE = 9,
+ ITEM_ENCHANTMENT_TYPE_ARTIFACT_POWER_BONUS_RANK_BY_ID = 10,
+ ITEM_ENCHANTMENT_TYPE_BONUS_LIST_ID = 11,
+ ITEM_ENCHANTMENT_TYPE_BONUS_LIST_CURVE = 12
};
enum ItemExtendedCostFlags
@@ -853,6 +871,7 @@ enum CurrencyTypes
CURRENCY_TYPE_CONQUEST_META_ARENA = 483,
CURRENCY_TYPE_CONQUEST_META_RBG = 484,
CURRENCY_TYPE_APEXIS_CRYSTALS = 823,
+ CURRENCY_TYPE_ARTIFACT_KNOWLEDGE = 1171,
};
#endif
diff --git a/src/server/game/DataStores/GameTables.cpp b/src/server/game/DataStores/GameTables.cpp
index 709441745a2..4a38b703b7a 100644
--- a/src/server/game/DataStores/GameTables.cpp
+++ b/src/server/game/DataStores/GameTables.cpp
@@ -23,6 +23,7 @@
#include <fstream>
GameTable<GtArmorMitigationByLvlEntry> sArmorMitigationByLvlGameTable;
+GameTable<GtArtifactLevelXPEntry> sArtifactLevelXPGameTable;
GameTable<GtBarberShopCostBaseEntry> sBarberShopCostBaseGameTable;
GameTable<GtBaseMPEntry> sBaseMPGameTable;
GameTable<GtCombatRatingsEntry> sCombatRatingsGameTable;
@@ -107,6 +108,7 @@ void LoadGameTables(std::string const& dataPath)
#define LOAD_GT(store, file) gameTableCount += LoadGameTable(bad_gt_files, store, gtPath / file); ++expectedGameTableCount;
LOAD_GT(sArmorMitigationByLvlGameTable, "ArmorMitigationByLvl.txt");
+ LOAD_GT(sArtifactLevelXPGameTable, "artifactLevelXP.txt");
LOAD_GT(sBarberShopCostBaseGameTable, "BarberShopCostBase.txt");
LOAD_GT(sBaseMPGameTable, "BaseMp.txt");
LOAD_GT(sCombatRatingsGameTable, "CombatRatings.txt");
diff --git a/src/server/game/DataStores/GameTables.h b/src/server/game/DataStores/GameTables.h
index c9b9547847c..4b9660621d2 100644
--- a/src/server/game/DataStores/GameTables.h
+++ b/src/server/game/DataStores/GameTables.h
@@ -26,6 +26,11 @@ struct GtArmorMitigationByLvlEntry
float Mitigation = 0.0f;
};
+struct GtArtifactLevelXPEntry
+{
+ float XP = 0.0f;
+};
+
struct GtBarberShopCostBaseEntry
{
float Cost = 0.0f;
@@ -182,6 +187,7 @@ private:
};
TC_GAME_API extern GameTable<GtArmorMitigationByLvlEntry> sArmorMitigationByLvlGameTable;
+TC_GAME_API extern GameTable<GtArtifactLevelXPEntry> sArtifactLevelXPGameTable;
TC_GAME_API extern GameTable<GtBarberShopCostBaseEntry> sBarberShopCostBaseGameTable;
TC_GAME_API extern GameTable<GtBaseMPEntry> sBaseMPGameTable;
TC_GAME_API extern GameTable<GtCombatRatingsEntry> sCombatRatingsGameTable;