aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/common/DataStores/DB2FileLoader.cpp74
-rw-r--r--src/common/DataStores/DB2FileLoader.h7
-rw-r--r--src/server/game/DataStores/GameTables.cpp32
-rw-r--r--src/server/game/DataStores/GameTables.h33
-rw-r--r--src/server/game/DataStores/M2Stores.cpp18
-rw-r--r--src/server/game/DataStores/M2Stores.h18
-rw-r--r--src/server/game/Entities/Item/Item.cpp10
-rw-r--r--src/server/game/Entities/Player/CinematicMgr.cpp27
-rw-r--r--src/server/game/Entities/Player/CinematicMgr.h6
-rw-r--r--src/server/game/Handlers/ArtifactHandler.cpp8
-rw-r--r--src/server/scripts/Commands/cs_debug.cpp7
-rw-r--r--src/tools/connection_patcher/Patches/Mac.hpp2
-rw-r--r--src/tools/connection_patcher/Patterns/Mac.hpp2
-rw-r--r--src/tools/connection_patcher/Patterns/Windows.hpp4
-rw-r--r--src/tools/map_extractor/System.cpp41
-rw-r--r--src/tools/map_extractor/loadlib/DBFilesClientList.h33
-rw-r--r--src/tools/vmap4_extractor/gameobject_extract.cpp5
-rw-r--r--src/tools/vmap4_extractor/vmapexport.cpp11
18 files changed, 225 insertions, 113 deletions
diff --git a/src/common/DataStores/DB2FileLoader.cpp b/src/common/DataStores/DB2FileLoader.cpp
index 7578eace9b6..204f4bd316b 100644
--- a/src/common/DataStores/DB2FileLoader.cpp
+++ b/src/common/DataStores/DB2FileLoader.cpp
@@ -44,6 +44,23 @@ uint32 DB2FileLoadInfo::GetStringFieldCount(bool localizedOnly) const
return stringFields;
}
+std::pair<int32, int32> DB2FileLoadInfo::GetFieldIndexByName(char const* fieldName) const
+{
+ std::size_t ourIndex = Meta->HasIndexFieldInData() ? 0 : 1;
+ for (uint32 i = 0; i < Meta->FieldCount; ++i)
+ {
+ for (uint8 arr = 0; arr < Meta->ArraySizes[i]; ++arr)
+ {
+ if (!strcmp(Fields[ourIndex].Name, fieldName))
+ return std::make_pair(int32(i), int32(arr));
+
+ ++ourIndex;
+ }
+ }
+
+ return std::make_pair(-1, -1);
+}
+
DB2FileSource::~DB2FileSource()
{
}
@@ -61,6 +78,7 @@ public:
virtual uint32 GetRecordCount() const = 0;
virtual uint32 GetRecordCopyCount() const = 0;
virtual uint32 GetMaxId() const = 0;
+ virtual DB2FileLoadInfo const* GetLoadInfo() const = 0;
private:
friend class DB2Record;
@@ -91,6 +109,7 @@ public:
uint32 GetRecordCount() const override;
uint32 GetRecordCopyCount() const override;
uint32 GetMaxId() const override;
+ DB2FileLoadInfo const* GetLoadInfo() const override;
private:
void FillCommonValues(char** indexTable);
@@ -139,12 +158,13 @@ public:
bool Load(DB2FileSource* source, DB2FileLoadInfo const* loadInfo, DB2Header const* header) override;
char* AutoProduceData(uint32& records, char**& indexTable, std::vector<char*>& stringPool) override;
char* AutoProduceStrings(char* dataTable, uint32 locale) override;
- void AutoProduceRecordCopies(uint32 /*records*/, char** /*indexTable*/, char* /*dataTable*/) override { }
+ void AutoProduceRecordCopies(uint32 records, char** indexTable, char* dataTable) override { }
DB2Record GetRecord(uint32 recordNumber) const override;
DB2RecordCopy GetRecordCopy(uint32 copyNumber) const override;
uint32 GetRecordCount() const override;
uint32 GetRecordCopyCount() const override;
uint32 GetMaxId() const override;
+ DB2FileLoadInfo const* GetLoadInfo() const override;
private:
unsigned char const* GetRawRecordData(uint32 recordNumber) const override;
@@ -744,6 +764,11 @@ uint32 DB2FileLoaderRegularImpl::GetMaxId() const
return maxId;
}
+DB2FileLoadInfo const* DB2FileLoaderRegularImpl::GetLoadInfo() const
+{
+ return _loadInfo;
+}
+
DB2FileLoaderSparseImpl::DB2FileLoaderSparseImpl()
{
fileName = nullptr;
@@ -1165,6 +1190,11 @@ uint32 DB2FileLoaderSparseImpl::GetMaxId() const
return _header->MaxId;
}
+DB2FileLoadInfo const* DB2FileLoaderSparseImpl::GetLoadInfo() const
+{
+ return _loadInfo;
+}
+
DB2Record::DB2Record(DB2FileLoaderImpl const& db2, uint32 recordIndex, std::size_t* fieldOffsets)
: _db2(db2), _recordIndex(recordIndex), _recordData(db2.GetRawRecordData(recordIndex)), _fieldOffsets(fieldOffsets)
{
@@ -1190,31 +1220,73 @@ uint8 DB2Record::GetUInt8(uint32 field, uint32 arrayIndex) const
return _db2.RecordGetUInt8(_recordData, field, arrayIndex);
}
+uint8 DB2Record::GetUInt8(char const* fieldName) const
+{
+ std::pair<int32, int32> fieldIndex = _db2.GetLoadInfo()->GetFieldIndexByName(fieldName);
+ ASSERT(fieldIndex.first != -1, "Field with name %s does not exist!", fieldName);
+ return _db2.RecordGetUInt8(_recordData, uint32(fieldIndex.first), uint32(fieldIndex.second));
+}
+
uint16 DB2Record::GetUInt16(uint32 field, uint32 arrayIndex) const
{
return _db2.RecordGetUInt16(_recordData, field, arrayIndex);
}
+uint16 DB2Record::GetUInt16(char const* fieldName) const
+{
+ std::pair<int32, int32> fieldIndex = _db2.GetLoadInfo()->GetFieldIndexByName(fieldName);
+ ASSERT(fieldIndex.first != -1, "Field with name %s does not exist!", fieldName);
+ return _db2.RecordGetUInt16(_recordData, uint32(fieldIndex.first), uint32(fieldIndex.second));
+}
+
uint32 DB2Record::GetUInt32(uint32 field, uint32 arrayIndex) const
{
return _db2.RecordGetUInt32(_recordData, field, arrayIndex);
}
+uint32 DB2Record::GetUInt32(char const* fieldName) const
+{
+ std::pair<int32, int32> fieldIndex = _db2.GetLoadInfo()->GetFieldIndexByName(fieldName);
+ ASSERT(fieldIndex.first != -1, "Field with name %s does not exist!", fieldName);
+ return _db2.RecordGetUInt32(_recordData, uint32(fieldIndex.first), uint32(fieldIndex.second));
+}
+
int32 DB2Record::GetInt32(uint32 field, uint32 arrayIndex) const
{
return _db2.RecordGetInt32(_recordData, field, arrayIndex);
}
+int32 DB2Record::GetInt32(char const* fieldName) const
+{
+ std::pair<int32, int32> fieldIndex = _db2.GetLoadInfo()->GetFieldIndexByName(fieldName);
+ ASSERT(fieldIndex.first != -1, "Field with name %s does not exist!", fieldName);
+ return _db2.RecordGetInt32(_recordData, uint32(fieldIndex.first), uint32(fieldIndex.second));
+}
+
float DB2Record::GetFloat(uint32 field, uint32 arrayIndex) const
{
return _db2.RecordGetFloat(_recordData, field, arrayIndex);
}
+float DB2Record::GetFloat(char const* fieldName) const
+{
+ std::pair<int32, int32> fieldIndex = _db2.GetLoadInfo()->GetFieldIndexByName(fieldName);
+ ASSERT(fieldIndex.first != -1, "Field with name %s does not exist!", fieldName);
+ return _db2.RecordGetFloat(_recordData, uint32(fieldIndex.first), uint32(fieldIndex.second));
+}
+
char const* DB2Record::GetString(uint32 field, uint32 arrayIndex) const
{
return _db2.RecordGetString(_recordData, field, arrayIndex);
}
+char const* DB2Record::GetString(char const* fieldName) const
+{
+ std::pair<int32, int32> fieldIndex = _db2.GetLoadInfo()->GetFieldIndexByName(fieldName);
+ ASSERT(fieldIndex.first != -1, "Field with name %s does not exist!", fieldName);
+ return _db2.RecordGetString(_recordData, uint32(fieldIndex.first), uint32(fieldIndex.second));
+}
+
void DB2Record::MakePersistent()
{
_fieldOffsets = _db2.RecordCreateDetachedFieldOffsets(_fieldOffsets);
diff --git a/src/common/DataStores/DB2FileLoader.h b/src/common/DataStores/DB2FileLoader.h
index 3812fe3cd67..cf34794a7a1 100644
--- a/src/common/DataStores/DB2FileLoader.h
+++ b/src/common/DataStores/DB2FileLoader.h
@@ -53,6 +53,7 @@ struct TC_COMMON_API DB2FileLoadInfo
DB2FileLoadInfo(DB2FieldMeta const* fields, std::size_t fieldCount, DB2Meta const* meta);
uint32 GetStringFieldCount(bool localizedOnly) const;
+ std::pair<int32/*fieldIndex*/, int32/*arrayIndex*/> GetFieldIndexByName(char const* fieldName) const;
DB2FieldMeta const* Fields;
std::size_t FieldCount;
@@ -88,11 +89,17 @@ public:
uint32 GetId() const;
uint8 GetUInt8(uint32 field, uint32 arrayIndex) const;
+ uint8 GetUInt8(char const* fieldName) const;
uint16 GetUInt16(uint32 field, uint32 arrayIndex) const;
+ uint16 GetUInt16(char const* fieldName) const;
uint32 GetUInt32(uint32 field, uint32 arrayIndex) const;
+ uint32 GetUInt32(char const* fieldName) const;
int32 GetInt32(uint32 field, uint32 arrayIndex) const;
+ int32 GetInt32(char const* fieldName) const;
float GetFloat(uint32 field, uint32 arrayIndex) const;
+ float GetFloat(char const* fieldName) const;
char const* GetString(uint32 field, uint32 arrayIndex) const;
+ char const* GetString(char const* fieldName) const;
// Creates its own heap allocated copy of _fieldOffsets
// by default _fieldOffets point to a shared array inside Loader to avoid heap allocations
diff --git a/src/server/game/DataStores/GameTables.cpp b/src/server/game/DataStores/GameTables.cpp
index b78a512c1df..ca0d3615f19 100644
--- a/src/server/game/DataStores/GameTables.cpp
+++ b/src/server/game/DataStores/GameTables.cpp
@@ -22,19 +22,20 @@
#include <boost/filesystem/path.hpp>
#include <fstream>
-GameTable<GtArmorMitigationByLvlEntry> sArmorMitigationByLvlGameTable;
-GameTable<GtArtifactLevelXPEntry> sArtifactLevelXPGameTable;
-GameTable<GtBarberShopCostBaseEntry> sBarberShopCostBaseGameTable;
-GameTable<GtBaseMPEntry> sBaseMPGameTable;
-GameTable<GtCombatRatingsEntry> sCombatRatingsGameTable;
-GameTable<GtCombatRatingsMultByILvl> sCombatRatingsMultByILvlGameTable;
-GameTable<GtHpPerStaEntry> sHpPerStaGameTable;
-GameTable<GtItemSocketCostPerLevelEntry> sItemSocketCostPerLevelGameTable;
-GameTable<GtNpcDamageByClassEntry> sNpcDamageByClassGameTable[MAX_EXPANSIONS];
-GameTable<GtNpcManaCostScalerEntry> sNpcManaCostScalerGameTable;
-GameTable<GtNpcTotalHpEntry> sNpcTotalHpGameTable[MAX_EXPANSIONS];
-GameTable<GtSpellScalingEntry> sSpellScalingGameTable;
-GameTable<GtXpEntry> sXpGameTable;
+GameTable<GtArmorMitigationByLvlEntry> sArmorMitigationByLvlGameTable;
+GameTable<GtArtifactKnowledgeMultiplierEntry> sArtifactKnowledgeMultiplierGameTable;
+GameTable<GtArtifactLevelXPEntry> sArtifactLevelXPGameTable;
+GameTable<GtBarberShopCostBaseEntry> sBarberShopCostBaseGameTable;
+GameTable<GtBaseMPEntry> sBaseMPGameTable;
+GameTable<GtCombatRatingsEntry> sCombatRatingsGameTable;
+GameTable<GtCombatRatingsMultByILvl> sCombatRatingsMultByILvlGameTable;
+GameTable<GtHpPerStaEntry> sHpPerStaGameTable;
+GameTable<GtItemSocketCostPerLevelEntry> sItemSocketCostPerLevelGameTable;
+GameTable<GtNpcDamageByClassEntry> sNpcDamageByClassGameTable[MAX_EXPANSIONS];
+GameTable<GtNpcManaCostScalerEntry> sNpcManaCostScalerGameTable;
+GameTable<GtNpcTotalHpEntry> sNpcTotalHpGameTable[MAX_EXPANSIONS];
+GameTable<GtSpellScalingEntry> sSpellScalingGameTable;
+GameTable<GtXpEntry> sXpGameTable;
template<class T>
inline uint32 LoadGameTable(std::vector<std::string>& errors, GameTable<T>& storage, boost::filesystem::path const& path)
@@ -109,7 +110,8 @@ 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(sArtifactKnowledgeMultiplierGameTable, "ArtifactKnowledgeMultiplier.txt");
+ LOAD_GT(sArtifactLevelXPGameTable, "ArtifactLevelXP.txt");
LOAD_GT(sBarberShopCostBaseGameTable, "BarberShopCostBase.txt");
LOAD_GT(sBaseMPGameTable, "BaseMp.txt");
LOAD_GT(sCombatRatingsGameTable, "CombatRatings.txt");
@@ -123,7 +125,7 @@ void LoadGameTables(std::string const& dataPath)
LOAD_GT(sNpcDamageByClassGameTable[4], "NpcDamageByClassExp4.txt");
LOAD_GT(sNpcDamageByClassGameTable[5], "NpcDamageByClassExp5.txt");
LOAD_GT(sNpcDamageByClassGameTable[6], "NpcDamageByClassExp6.txt");
- LOAD_GT(sNpcManaCostScalerGameTable, "NpcManaCostScaler.txt");
+ LOAD_GT(sNpcManaCostScalerGameTable, "NPCManaCostScaler.txt");
LOAD_GT(sNpcTotalHpGameTable[0], "NpcTotalHp.txt");
LOAD_GT(sNpcTotalHpGameTable[1], "NpcTotalHpExp1.txt");
LOAD_GT(sNpcTotalHpGameTable[2], "NpcTotalHpExp2.txt");
diff --git a/src/server/game/DataStores/GameTables.h b/src/server/game/DataStores/GameTables.h
index 3da05662116..a9d1a01b1c3 100644
--- a/src/server/game/DataStores/GameTables.h
+++ b/src/server/game/DataStores/GameTables.h
@@ -26,9 +26,15 @@ struct GtArmorMitigationByLvlEntry
float Mitigation = 0.0f;
};
+struct GtArtifactKnowledgeMultiplierEntry
+{
+ float Multiplier = 0.0f;
+};
+
struct GtArtifactLevelXPEntry
{
float XP = 0.0f;
+ float XP2 = 0.0f;
};
struct GtBarberShopCostBaseEntry
@@ -194,19 +200,20 @@ private:
std::vector<T> _data;
};
-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;
-TC_GAME_API extern GameTable<GtCombatRatingsMultByILvl> sCombatRatingsMultByILvlGameTable;
-TC_GAME_API extern GameTable<GtHpPerStaEntry> sHpPerStaGameTable;
-TC_GAME_API extern GameTable<GtItemSocketCostPerLevelEntry> sItemSocketCostPerLevelGameTable;
-TC_GAME_API extern GameTable<GtNpcDamageByClassEntry> sNpcDamageByClassGameTable[MAX_EXPANSIONS];
-TC_GAME_API extern GameTable<GtNpcManaCostScalerEntry> sNpcManaCostScalerGameTable;
-TC_GAME_API extern GameTable<GtNpcTotalHpEntry> sNpcTotalHpGameTable[MAX_EXPANSIONS];
-TC_GAME_API extern GameTable<GtSpellScalingEntry> sSpellScalingGameTable;
-TC_GAME_API extern GameTable<GtXpEntry> sXpGameTable;
+TC_GAME_API extern GameTable<GtArmorMitigationByLvlEntry> sArmorMitigationByLvlGameTable;
+TC_GAME_API extern GameTable<GtArtifactKnowledgeMultiplierEntry> sArtifactKnowledgeMultiplierGameTable;
+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;
+TC_GAME_API extern GameTable<GtCombatRatingsMultByILvl> sCombatRatingsMultByILvlGameTable;
+TC_GAME_API extern GameTable<GtHpPerStaEntry> sHpPerStaGameTable;
+TC_GAME_API extern GameTable<GtItemSocketCostPerLevelEntry> sItemSocketCostPerLevelGameTable;
+TC_GAME_API extern GameTable<GtNpcDamageByClassEntry> sNpcDamageByClassGameTable[MAX_EXPANSIONS];
+TC_GAME_API extern GameTable<GtNpcManaCostScalerEntry> sNpcManaCostScalerGameTable;
+TC_GAME_API extern GameTable<GtNpcTotalHpEntry> sNpcTotalHpGameTable[MAX_EXPANSIONS];
+TC_GAME_API extern GameTable<GtSpellScalingEntry> sSpellScalingGameTable;
+TC_GAME_API extern GameTable<GtXpEntry> sXpGameTable;
TC_GAME_API void LoadGameTables(std::string const& dataPath);
diff --git a/src/server/game/DataStores/M2Stores.cpp b/src/server/game/DataStores/M2Stores.cpp
index f9c46e0a17c..9fb2f9fec2b 100644
--- a/src/server/game/DataStores/M2Stores.cpp
+++ b/src/server/game/DataStores/M2Stores.cpp
@@ -15,18 +15,19 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "DB2Stores.h"
-#include "M2Structure.h"
#include "M2Stores.h"
#include "Common.h"
#include "Containers.h"
+#include "DB2Stores.h"
#include "Log.h"
+#include "M2Structure.h"
#include "World.h"
+#include <boost/filesystem/path.hpp>
#include <fstream>
#include <iostream>
#include <iomanip>
-#include <boost/filesystem/path.hpp>
+typedef std::vector<FlyByCamera> FlyByCameraCollection;
std::unordered_map<uint32, FlyByCameraCollection> sFlyByCameraStore;
// Convert the geomoetry from a spline value, to an actual WoW XYZ
@@ -183,15 +184,17 @@ bool readCamera(M2Camera const* cam, uint32 buffSize, M2Header const* header, Ci
return true;
}
-TC_GAME_API void LoadM2Cameras(boost::filesystem::path const& dataPath)
+TC_GAME_API void LoadM2Cameras(std::string const& dataPath)
{
sFlyByCameraStore.clear();
TC_LOG_INFO("server.loading", ">> Loading Cinematic Camera files");
+ boost::filesystem::path camerasPath = boost::filesystem::path(dataPath) / "cameras";
+
uint32 oldMSTime = getMSTime();
for (CinematicCameraEntry const* cameraEntry : sCinematicCameraStore)
{
- boost::filesystem::path filename = dataPath / Trinity::StringFormat("FILE%08X.xxx", cameraEntry->ModelFileDataID);
+ boost::filesystem::path filename = camerasPath / Trinity::StringFormat("FILE%08X.xxx", cameraEntry->ModelFileDataID);
// Convert to native format
filename.make_preferred();
@@ -272,3 +275,8 @@ TC_GAME_API void LoadM2Cameras(boost::filesystem::path const& dataPath)
}
TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " cinematic waypoint sets in %u ms", sFlyByCameraStore.size(), GetMSTimeDiffToNow(oldMSTime));
}
+
+std::vector<FlyByCamera> const* GetFlyByCameras(uint32 cinematicCameraId)
+{
+ return Trinity::Containers::MapGetValuePtr(sFlyByCameraStore, cinematicCameraId);
+}
diff --git a/src/server/game/DataStores/M2Stores.h b/src/server/game/DataStores/M2Stores.h
index b766d89ac03..336269624a8 100644
--- a/src/server/game/DataStores/M2Stores.h
+++ b/src/server/game/DataStores/M2Stores.h
@@ -18,16 +18,8 @@
#ifndef TRINITY_M2STORES_H
#define TRINITY_M2STORES_H
-#include "Common.h"
-#include "G3D/Vector4.h"
-
-namespace boost
-{
- namespace filesystem
- {
- class path;
- }
-}
+#include "Define.h"
+#include <G3D/Vector4.h>
struct FlyByCamera
{
@@ -35,10 +27,8 @@ struct FlyByCamera
G3D::Vector4 locations;
};
-typedef std::vector<FlyByCamera> FlyByCameraCollection;
-
-TC_GAME_API extern std::unordered_map<uint32, FlyByCameraCollection> sFlyByCameraStore;
+TC_GAME_API void LoadM2Cameras(std::string const& dataPath);
-TC_GAME_API void LoadM2Cameras(boost::filesystem::path const& dataPath);
+TC_GAME_API std::vector<FlyByCamera> const* GetFlyByCameras(uint32 cinematicCameraId);
#endif
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
index 58be06c21bf..407b0f4bf51 100644
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -2417,13 +2417,15 @@ void Item::GiveArtifactXp(uint64 amount, Item* sourceItem, uint32 artifactCatego
{
if (ArtifactCategoryEntry const* artifactCategory = sArtifactCategoryStore.LookupEntry(artifactCategoryId))
{
- uint32 artifactKnowledgeLevel = 0;
+ uint32 artifactKnowledgeLevel = 1;
if (sourceItem && sourceItem->GetModifier(ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL))
- artifactKnowledgeLevel = sourceItem->GetModifier(ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL) - 1;
+ artifactKnowledgeLevel = sourceItem->GetModifier(ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL);
else
- artifactKnowledgeLevel = owner->GetCurrency(artifactCategory->ArtifactKnowledgeCurrencyID);
+ artifactKnowledgeLevel = owner->GetCurrency(artifactCategory->ArtifactKnowledgeCurrencyID) + 1;
+
+ if (GtArtifactKnowledgeMultiplierEntry const* artifactKnowledge = sArtifactKnowledgeMultiplierGameTable.GetRow(artifactKnowledgeLevel))
+ amount = uint64(amount * artifactKnowledge->Multiplier);
- amount = uint64(amount * sDB2Manager.GetCurveValueAt(artifactCategory->ArtifactKnowledgeMultiplierCurveID, artifactKnowledgeLevel));
if (amount >= 5000)
amount = 50 * (amount / 50);
else if (amount >= 1000)
diff --git a/src/server/game/Entities/Player/CinematicMgr.cpp b/src/server/game/Entities/Player/CinematicMgr.cpp
index f0da551c43b..cbb7d933e99 100644
--- a/src/server/game/Entities/Player/CinematicMgr.cpp
+++ b/src/server/game/Entities/Player/CinematicMgr.cpp
@@ -17,6 +17,7 @@
#include "CinematicMgr.h"
#include "Creature.h"
+#include "M2Stores.h"
#include "Player.h"
#include "TemporarySummon.h"
@@ -44,21 +45,21 @@ void CinematicMgr::BeginCinematic()
if (m_activeCinematicCameraId == 0)
return;
- auto itr = sFlyByCameraStore.find(m_activeCinematicCameraId);
- if (itr != sFlyByCameraStore.end())
+ if (std::vector<FlyByCamera> const* flyByCameras = GetFlyByCameras(m_activeCinematicCameraId))
{
// Initialize diff, and set camera
m_cinematicDiff = 0;
- m_cinematicCamera = &itr->second;
+ m_cinematicCamera = flyByCameras;
- FlyByCameraCollection::const_iterator camitr = m_cinematicCamera->begin();
- if (camitr != m_cinematicCamera->end())
+ auto camitr = m_cinematicCamera->begin();
+ if (!m_cinematicCamera->empty())
{
- Position pos(camitr->locations.x, camitr->locations.y, camitr->locations.z, camitr->locations.w);
+ FlyByCamera const& firstCamera = m_cinematicCamera->front();
+ Position pos(firstCamera.locations.x, firstCamera.locations.y, firstCamera.locations.z, firstCamera.locations.w);
if (!pos.IsPositionValid())
return;
- player->GetMap()->LoadGrid(camitr->locations.x, camitr->locations.y);
+ player->GetMap()->LoadGrid(firstCamera.locations.x, firstCamera.locations.y);
m_CinematicObject = player->SummonCreature(VISUAL_WAYPOINT, pos.m_positionX, pos.m_positionY, pos.m_positionZ, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 5 * MINUTE * IN_MILLISECONDS);
if (m_CinematicObject)
{
@@ -67,11 +68,7 @@ void CinematicMgr::BeginCinematic()
}
// Get cinematic length
- FlyByCameraCollection::const_reverse_iterator camrevitr = m_cinematicCamera->rbegin();
- if (camrevitr != m_cinematicCamera->rend())
- m_cinematicLength = camrevitr->timeStamp;
- else
- m_cinematicLength = 0;
+ m_cinematicLength = m_cinematicCamera->back().timeStamp;
}
}
}
@@ -105,7 +102,7 @@ void CinematicMgr::UpdateCinematicLocation(uint32 /*diff*/)
uint32 nextTimestamp = 0;
// Obtain direction of travel
- for (FlyByCamera cam : *m_cinematicCamera)
+ for (FlyByCamera const& cam : *m_cinematicCamera)
{
if (cam.timeStamp > m_cinematicDiff)
{
@@ -128,7 +125,7 @@ void CinematicMgr::UpdateCinematicLocation(uint32 /*diff*/)
workDiff += static_cast<int32>(float(CINEMATIC_LOOKAHEAD) * cos(angle));
// Get an iterator to the last entry in the cameras, to make sure we don't go beyond the end
- FlyByCameraCollection::const_reverse_iterator endItr = m_cinematicCamera->rbegin();
+ auto endItr = m_cinematicCamera->rbegin();
if (endItr != m_cinematicCamera->rend() && workDiff > static_cast<int32>(endItr->timeStamp))
workDiff = endItr->timeStamp;
@@ -137,7 +134,7 @@ void CinematicMgr::UpdateCinematicLocation(uint32 /*diff*/)
workDiff = m_cinematicDiff;
// Obtain the previous and next waypoint based on timestamp
- for (FlyByCamera cam : *m_cinematicCamera)
+ for (FlyByCamera const& cam : *m_cinematicCamera)
{
if (static_cast<int32>(cam.timeStamp) >= workDiff)
{
diff --git a/src/server/game/Entities/Player/CinematicMgr.h b/src/server/game/Entities/Player/CinematicMgr.h
index e27369f6bd5..2c5bcd6f883 100644
--- a/src/server/game/Entities/Player/CinematicMgr.h
+++ b/src/server/game/Entities/Player/CinematicMgr.h
@@ -20,12 +20,12 @@
#include "Define.h"
#include "Object.h"
-#include "M2Stores.h"
#define CINEMATIC_LOOKAHEAD (2 * IN_MILLISECONDS)
#define CINEMATIC_UPDATEDIFF 500
class Player;
+struct FlyByCamera;
class TC_GAME_API CinematicMgr
{
@@ -50,9 +50,9 @@ protected:
uint32 m_lastCinematicCheck;
uint32 m_activeCinematicCameraId;
uint32 m_cinematicLength;
- FlyByCameraCollection* m_cinematicCamera;
+ std::vector<FlyByCamera> const* m_cinematicCamera;
Position m_remoteSightPosition;
- TempSummon* m_CinematicObject;
+ TempSummon* m_CinematicObject;
};
#endif // CinematicMgr_h__
diff --git a/src/server/game/Handlers/ArtifactHandler.cpp b/src/server/game/Handlers/ArtifactHandler.cpp
index e4a7afba5f0..a5143b81c07 100644
--- a/src/server/game/Handlers/ArtifactHandler.cpp
+++ b/src/server/game/Handlers/ArtifactHandler.cpp
@@ -35,7 +35,7 @@ void WorldSession::HandleArtifactAddPower(WorldPackets::Artifact::ArtifactAddPow
uint64 xpCost = 0;
if (GtArtifactLevelXPEntry const* cost = sArtifactLevelXPGameTable.GetRow(artifact->GetTotalPurchasedArtifactPowers() + 1))
- xpCost = uint64(cost->XP);
+ xpCost = uint64(artifact->GetModifier(ITEM_MODIFIER_ARTIFACT_TIER) == 1 ? cost->XP2 : cost->XP);
if (xpCost > artifact->GetUInt64Value(ITEM_FIELD_ARTIFACT_XP))
return;
@@ -168,9 +168,9 @@ void WorldSession::HandleConfirmArtifactRespec(WorldPackets::Artifact::ConfirmAr
if (!artifact)
return;
- uint32 xpCost = 0;
+ uint64 xpCost = 0;
if (GtArtifactLevelXPEntry const* cost = sArtifactLevelXPGameTable.GetRow(artifact->GetTotalPurchasedArtifactPowers() + 1))
- xpCost = uint32(cost->XP);
+ xpCost = uint64(artifact->GetModifier(ITEM_MODIFIER_ARTIFACT_TIER) == 1 ? cost->XP2 : cost->XP);
if (xpCost > artifact->GetUInt64Value(ITEM_FIELD_ARTIFACT_XP))
return;
@@ -178,7 +178,7 @@ void WorldSession::HandleConfirmArtifactRespec(WorldPackets::Artifact::ConfirmAr
uint64 newAmount = artifact->GetUInt64Value(ITEM_FIELD_ARTIFACT_XP) - xpCost;
for (uint32 i = 0; i <= artifact->GetTotalPurchasedArtifactPowers(); ++i)
if (GtArtifactLevelXPEntry const* cost = sArtifactLevelXPGameTable.GetRow(i))
- newAmount += uint64(cost->XP);
+ newAmount += uint64(artifact->GetModifier(ITEM_MODIFIER_ARTIFACT_TIER) == 1 ? cost->XP2 : cost->XP);
for (ItemDynamicFieldArtifactPowers const& artifactPower : artifact->GetArtifactPowers())
{
diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp
index a56e687757c..1992235e257 100644
--- a/src/server/scripts/Commands/cs_debug.cpp
+++ b/src/server/scripts/Commands/cs_debug.cpp
@@ -133,17 +133,16 @@ public:
}
// Dump camera locations
- std::unordered_map<uint32, FlyByCameraCollection>::const_iterator itr = sFlyByCameraStore.find(cineSeq->Camera[0]);
- if (itr != sFlyByCameraStore.end())
+ if (std::vector<FlyByCamera> const* flyByCameras = GetFlyByCameras(cineSeq->Camera[0]))
{
handler->PSendSysMessage("Waypoints for sequence %u, camera %u", id, cineSeq->Camera[0]);
uint32 count = 1;
- for (FlyByCamera cam : itr->second)
+ for (FlyByCamera const& cam : *flyByCameras)
{
handler->PSendSysMessage("%02u - %7ums [%f, %f, %f] Facing %f (%f degrees)", count, cam.timeStamp, cam.locations.x, cam.locations.y, cam.locations.z, cam.locations.w, cam.locations.w * (180 / M_PI));
count++;
}
- handler->PSendSysMessage("%u waypoints dumped", itr->second.size());
+ handler->PSendSysMessage(SZFMTD " waypoints dumped", flyByCameras->size());
}
handler->GetSession()->GetPlayer()->SendCinematicStart(id);
diff --git a/src/tools/connection_patcher/Patches/Mac.hpp b/src/tools/connection_patcher/Patches/Mac.hpp
index a8294e84feb..33b851bf3e7 100644
--- a/src/tools/connection_patcher/Patches/Mac.hpp
+++ b/src/tools/connection_patcher/Patches/Mac.hpp
@@ -30,7 +30,7 @@ namespace Connection_Patcher
struct x64
{
static const std::vector<unsigned char> CertBundleCASCLocalFile() { return{ 0x48, 0x8D, 0x55, 0xC4, 0x31, 0xDB, 0xB1, 0x01 }; }
- static const std::vector<unsigned char> CertBundleSignatureCheck() { return{ 0x45, 0x84, 0xFF, 0xB0, 0x01, 0x90, 0x90, 0x90, 0x90 }; }
+ static const std::vector<unsigned char> CertBundleSignatureCheck() { return{ 0x45, 0x84, 0xFF, 0xB0, 0x01, 0xEB, 0x06, 0x8B, 0x85 }; }
};
};
}
diff --git a/src/tools/connection_patcher/Patterns/Mac.hpp b/src/tools/connection_patcher/Patterns/Mac.hpp
index 05ac242416f..6a936622854 100644
--- a/src/tools/connection_patcher/Patterns/Mac.hpp
+++ b/src/tools/connection_patcher/Patterns/Mac.hpp
@@ -30,7 +30,7 @@ namespace Connection_Patcher
struct x64
{
static const std::vector<unsigned char> CertBundleCASCLocalFile() { return{ 0x48, 0x8D, 0x55, 0xC4, 0x31, 0xDB, 0x31, 0xC9 }; }
- static const std::vector<unsigned char> CertBundleSignatureCheck() { return{ 0x45, 0x84, 0xFF, 0xB0, 0x01, 0x75, 0x00, 0x88, 0xD8 }; }
+ static const std::vector<unsigned char> CertBundleSignatureCheck() { return{ 0x45, 0x84, 0xFF, 0xB0, 0x01, 0x75, 0x06, 0x8B, 0x85 }; }
};
};
}
diff --git a/src/tools/connection_patcher/Patterns/Windows.hpp b/src/tools/connection_patcher/Patterns/Windows.hpp
index dc9842e3915..3c5db972de8 100644
--- a/src/tools/connection_patcher/Patterns/Windows.hpp
+++ b/src/tools/connection_patcher/Patterns/Windows.hpp
@@ -35,8 +35,8 @@ namespace Connection_Patcher
struct x64
{
- static const std::vector<unsigned char> CertBundleCASCLocalFile() { return{ 0x45, 0x33, 0xC9, 0x48, 0x89, 0xBC, 0x24, 0x00, 0x02 }; }
- static const std::vector<unsigned char> CertBundleSignatureCheck() { return{ 0x75, 0x19, 0x48, 0xFF, 0xC3, 0x48, 0x83, 0xFB, 0x02 }; }
+ static const std::vector<unsigned char> CertBundleCASCLocalFile() { return{ 0x45, 0x33, 0xC9, 0x48, 0x89, 0x9C, 0x24, 0xF0, 0x01 }; }
+ static const std::vector<unsigned char> CertBundleSignatureCheck() { return{ 0x75, 0x0B, 0x48, 0xFF, 0xC7, 0x48, 0x83, 0xFF, 0x02 }; }
};
};
}
diff --git a/src/tools/map_extractor/System.cpp b/src/tools/map_extractor/System.cpp
index e1a5d860946..84be793bb44 100644
--- a/src/tools/map_extractor/System.cpp
+++ b/src/tools/map_extractor/System.cpp
@@ -59,16 +59,17 @@ struct CinematicCameraLoadInfo
static DB2FieldMeta const fields[] =
{
{ false, FT_INT, "ID" },
- { false, FT_STRING_NOT_LOCALIZED, "Model" },
+ { false, FT_INT, "SoundID" },
{ false, FT_FLOAT, "OriginX" },
{ false, FT_FLOAT, "OriginY" },
{ false, FT_FLOAT, "OriginZ" },
{ false, FT_FLOAT, "OriginFacing" },
- { false, FT_SHORT, "SoundID" },
+ { false, FT_INT, "ModelFileDataID" },
};
- static char const* types = "sffh";
+ static char const* types = "iffi";
static uint8 const arraySizes[4] = { 1, 3, 1, 1 };
- static DB2Meta const meta(-1, 4, 0xA7B95349, types, arraySizes);
+ static DB2FieldDefault const fieldDefaults[4] = { uint32(0), float(0), float(0), uint32(0) };
+ static DB2Meta const meta(-1, 4, 0x85F98D68, types, arraySizes, fieldDefaults);
static DB2FileLoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, &meta);
return &loadInfo;
}
@@ -134,7 +135,8 @@ struct LiquidTypeLoadInfo
};
static char const* types = "sifffffsifihhbbbbbi";
static uint8 const arraySizes[19] = { 1, 1, 1, 1, 1, 1, 1, 6, 2, 18, 4, 1, 1, 1, 1, 1, 1, 6, 1 };
- static DB2Meta const meta(-1, 19, 0x99FC34E5, types, arraySizes);
+ static DB2FieldDefault const fieldDefaults[19] = { "", uint32(0), float(0), float(0), float(0), float(0), float(0), "", uint32(0), float(0), uint32(0), uint16(0), uint16(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint32(0) };
+ static DB2Meta const meta(-1, 19, 0xEB9E4B52, types, arraySizes, fieldDefaults);
static DB2FileLoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, &meta);
return &loadInfo;
}
@@ -156,6 +158,8 @@ struct MapLoadInfo
{ false, FT_STRING, "MapName" },
{ false, FT_STRING, "MapDescription0" },
{ false, FT_STRING, "MapDescription1" },
+ { false, FT_STRING, "ShortDescription" },
+ { false, FT_STRING, "LongDescription" },
{ false, FT_SHORT, "AreaTableID" },
{ false, FT_SHORT, "LoadingScreenID" },
{ true, FT_SHORT, "CorpseMapID" },
@@ -169,9 +173,10 @@ struct MapLoadInfo
{ false, FT_BYTE, "MaxPlayers" },
{ false, FT_BYTE, "TimeOffset" },
};
- static char const* types = "siffssshhhhhhhbbbbb";
- static uint8 const arraySizes[19] = { 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
- static DB2Meta const meta(-1, 19, 0xF7CF2DA2, types, arraySizes);
+ static char const* types = "siffssssshhhhhhhbbbbb";
+ static uint8 const arraySizes[21] = { 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
+ static DB2FieldDefault const fieldDefaults[21] = { "", uint32(0), float(0), float(0), "", "", "", "", "", uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0) };
+ static DB2Meta const meta(-1, 21, 0xC34CD39B, types, arraySizes, fieldDefaults);
static DB2FileLoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, &meta);
return &loadInfo;
}
@@ -386,7 +391,7 @@ void ReadMapDBC()
DB2Record record = db2.GetRecord(x);
map_ids[x].id = record.GetId();
- const char* map_name = record.GetString(0, 0);
+ const char* map_name = record.GetString("Directory");
size_t max_map_name_length = sizeof(map_ids[x].name);
if (strlen(map_name) >= max_map_name_length)
{
@@ -432,7 +437,7 @@ void ReadLiquidTypeTableDBC()
for (uint32 x = 0; x < db2.GetRecordCount(); ++x)
{
DB2Record record = db2.GetRecord(x);
- LiqType[record.GetId()] = record.GetUInt8(13, 0);
+ LiqType[record.GetId()] = record.GetUInt8("Type");
}
for (uint32 x = 0; x < db2.GetRecordCopyCount(); ++x)
@@ -455,14 +460,7 @@ bool ReadCinematicCameraDBC()
// get camera file list from DB2
for (size_t i = 0; i < db2.GetRecordCount(); ++i)
- {
- DB2Record record = db2.GetRecord(i);
- std::string camFile(record.GetString(0, 0));
- size_t loc = camFile.find(".mdx");
- if (loc != std::string::npos)
- camFile.replace(loc, 4, ".m2");
- CameraFileNames.insert(camFile);
- }
+ CameraFileNames.insert(Trinity::StringFormat("FILE%08X.xxx", db2.GetRecord(i).GetUInt32("ModelFileDataID")));
printf("Done! (" SZFMTD " CinematicCameras loaded)\n", CameraFileNames.size());
return true;
@@ -1285,11 +1283,12 @@ void ExtractGameTables()
char const* GameTables[] =
{
"GameTables\\ArmorMitigationByLvl.txt",
- "GameTables\\artifactLevelXP.txt",
+ "GameTables\\ArtifactKnowledgeMultiplier.txt",
+ "GameTables\\ArtifactLevelXP.txt",
"GameTables\\BarberShopCostBase.txt",
"GameTables\\BaseMp.txt",
"GameTables\\BattlePetTypeDamageMod.txt",
- "GameTables\\battlePetXP.txt",
+ "GameTables\\BattlePetXP.txt",
"GameTables\\ChallengeModeDamage.txt",
"GameTables\\ChallengeModeHealth.txt",
"GameTables\\CombatRatings.txt",
@@ -1304,7 +1303,7 @@ void ExtractGameTables()
"GameTables\\NpcDamageByClassExp4.txt",
"GameTables\\NpcDamageByClassExp5.txt",
"GameTables\\NpcDamageByClassExp6.txt",
- "GameTables\\NpcManaCostScaler.txt",
+ "GameTables\\NPCManaCostScaler.txt",
"GameTables\\NpcTotalHp.txt",
"GameTables\\NpcTotalHpExp1.txt",
"GameTables\\NpcTotalHpExp2.txt",
diff --git a/src/tools/map_extractor/loadlib/DBFilesClientList.h b/src/tools/map_extractor/loadlib/DBFilesClientList.h
index 9e5afa773d3..a7e1552462e 100644
--- a/src/tools/map_extractor/loadlib/DBFilesClientList.h
+++ b/src/tools/map_extractor/loadlib/DBFilesClientList.h
@@ -30,6 +30,7 @@ char const* DBFilesClientList[] =
"DBFilesClient\\AnimKitConfig.db2",
"DBFilesClient\\AnimKitConfigBoneSet.db2",
"DBFilesClient\\AnimKitPriority.db2",
+ "DBFilesClient\\AnimKitReplacement.db2",
"DBFilesClient\\AnimKitSegment.db2",
"DBFilesClient\\AnimReplacement.db2",
"DBFilesClient\\AnimReplacementSet.db2",
@@ -51,8 +52,10 @@ char const* DBFilesClientList[] =
"DBFilesClient\\ArtifactCategory.db2",
"DBFilesClient\\ArtifactPower.db2",
"DBFilesClient\\ArtifactPowerLink.db2",
+ "DBFilesClient\\ArtifactPowerPicker.db2",
"DBFilesClient\\ArtifactPowerRank.db2",
"DBFilesClient\\ArtifactQuestXP.db2",
+ "DBFilesClient\\ArtifactTier.db2",
"DBFilesClient\\ArtifactUnlock.db2",
"DBFilesClient\\AuctionHouse.db2",
"DBFilesClient\\BankBagSlotPrices.db2",
@@ -72,6 +75,7 @@ char const* DBFilesClientList[] =
"DBFilesClient\\BattlePetState.db2",
"DBFilesClient\\BattlePetVisual.db2",
"DBFilesClient\\BattlemasterList.db2",
+ "DBFilesClient\\BeamEffect.db2",
"DBFilesClient\\BoneWindModifierModel.db2",
"DBFilesClient\\BoneWindModifiers.db2",
"DBFilesClient\\Bounty.db2",
@@ -81,6 +85,7 @@ char const* DBFilesClientList[] =
"DBFilesClient\\CameraEffectEntry.db2",
"DBFilesClient\\CameraMode.db2",
"DBFilesClient\\CastableRaidBuffs.db2",
+ "DBFilesClient\\CelestialBody.db2",
"DBFilesClient\\Cfg_Categories.db2",
"DBFilesClient\\Cfg_Configs.db2",
"DBFilesClient\\Cfg_Regions.db2",
@@ -117,12 +122,14 @@ char const* DBFilesClientList[] =
"DBFilesClient\\CombatCondition.db2",
"DBFilesClient\\ComponentModelFileData.db2",
"DBFilesClient\\ComponentTextureFileData.db2",
+ "DBFilesClient\\Contribution.db2",
"DBFilesClient\\ConversationLine.db2",
"DBFilesClient\\Creature.db2",
"DBFilesClient\\CreatureDifficulty.db2",
"DBFilesClient\\CreatureDispXUiCamera.db2",
"DBFilesClient\\CreatureDisplayInfo.db2",
"DBFilesClient\\CreatureDisplayInfoCond.db2",
+ "DBFilesClient\\CreatureDisplayInfoEvt.db2",
"DBFilesClient\\CreatureDisplayInfoExtra.db2",
"DBFilesClient\\CreatureDisplayInfoTrn.db2",
"DBFilesClient\\CreatureFamily.db2",
@@ -131,6 +138,7 @@ char const* DBFilesClientList[] =
"DBFilesClient\\CreatureMovementInfo.db2",
"DBFilesClient\\CreatureSoundData.db2",
"DBFilesClient\\CreatureType.db2",
+ "DBFilesClient\\CreatureXContribution.db2",
"DBFilesClient\\Criteria.db2",
"DBFilesClient\\CriteriaTree.db2",
"DBFilesClient\\CriteriaTreeXEffect.db2",
@@ -198,6 +206,7 @@ char const* DBFilesClientList[] =
"DBFilesClient\\GarrFollowerType.db2",
"DBFilesClient\\GarrFollowerUICreature.db2",
"DBFilesClient\\GarrFollowerXAbility.db2",
+ "DBFilesClient\\GarrItemLevelUpgradeData.db2",
"DBFilesClient\\GarrMechanic.db2",
"DBFilesClient\\GarrMechanicSetXMechanic.db2",
"DBFilesClient\\GarrMechanicType.db2",
@@ -242,6 +251,7 @@ char const* DBFilesClientList[] =
"DBFilesClient\\HolidayDescriptions.db2",
"DBFilesClient\\HolidayNames.db2",
"DBFilesClient\\Holidays.db2",
+ "DBFilesClient\\Hotfix.db2",
"DBFilesClient\\ImportPriceArmor.db2",
"DBFilesClient\\ImportPriceQuality.db2",
"DBFilesClient\\ImportPriceShield.db2",
@@ -273,6 +283,7 @@ char const* DBFilesClientList[] =
"DBFilesClient\\ItemEffect.db2",
"DBFilesClient\\ItemExtendedCost.db2",
"DBFilesClient\\ItemGroupSounds.db2",
+ "DBFilesClient\\ItemLevelSelector.db2",
"DBFilesClient\\ItemLimitCategory.db2",
"DBFilesClient\\ItemLimitCategoryCondition.db2",
"DBFilesClient\\ItemModifiedAppearance.db2",
@@ -286,7 +297,7 @@ char const* DBFilesClientList[] =
"DBFilesClient\\ItemSearchName.db2",
"DBFilesClient\\ItemSet.db2",
"DBFilesClient\\ItemSetSpell.db2",
- "DBFilesClient\\Item-sparse.db2",
+ "DBFilesClient\\ItemSparse.db2",
"DBFilesClient\\ItemSpec.db2",
"DBFilesClient\\ItemSpecOverride.db2",
"DBFilesClient\\ItemSubClass.db2",
@@ -329,12 +340,16 @@ char const* DBFilesClientList[] =
"DBFilesClient\\LockType.db2",
"DBFilesClient\\LookAtController.db2",
"DBFilesClient\\MailTemplate.db2",
+ "DBFilesClient\\ManagedWorldState.db2",
+ "DBFilesClient\\ManagedWorldStateBuff.db2",
+ "DBFilesClient\\ManagedWorldStateInput.db2",
"DBFilesClient\\ManifestInterfaceActionIcon.db2",
"DBFilesClient\\ManifestInterfaceData.db2",
"DBFilesClient\\ManifestInterfaceItemIcon.db2",
"DBFilesClient\\ManifestInterfaceTOCData.db2",
"DBFilesClient\\ManifestMP3.db2",
"DBFilesClient\\Map.db2",
+ "DBFilesClient\\MapCelestialBody.db2",
"DBFilesClient\\MapChallengeMode.db2",
"DBFilesClient\\MapDifficulty.db2",
"DBFilesClient\\MapDifficultyXCondition.db2",
@@ -348,6 +363,7 @@ char const* DBFilesClientList[] =
"DBFilesClient\\Mount.db2",
"DBFilesClient\\MountCapability.db2",
"DBFilesClient\\MountTypeXCapability.db2",
+ "DBFilesClient\\MountXDisplay.db2",
"DBFilesClient\\Movie.db2",
"DBFilesClient\\MovieFileData.db2",
"DBFilesClient\\MovieVariation.db2",
@@ -366,6 +382,7 @@ char const* DBFilesClientList[] =
"DBFilesClient\\OverrideSpellData.db2",
"DBFilesClient\\PageTextMaterial.db2",
"DBFilesClient\\PaperDollItemFrame.db2",
+ "DBFilesClient\\ParagonReputation.db2",
"DBFilesClient\\ParticleColor.db2",
"DBFilesClient\\Path.db2",
"DBFilesClient\\PathNode.db2",
@@ -385,6 +402,8 @@ char const* DBFilesClientList[] =
"DBFilesClient\\PvpDifficulty.db2",
"DBFilesClient\\PvpItem.db2",
"DBFilesClient\\PvpReward.db2",
+ "DBFilesClient\\PvpScalingEffect.db2",
+ "DBFilesClient\\PvpScalingEffectType.db2",
"DBFilesClient\\PvpTalent.db2",
"DBFilesClient\\PvpTalentUnlock.db2",
"DBFilesClient\\QuestFactionReward.db2",
@@ -400,8 +419,8 @@ char const* DBFilesClientList[] =
"DBFilesClient\\QuestSort.db2",
"DBFilesClient\\QuestV2.db2",
"DBFilesClient\\QuestV2CliTask.db2",
- "DBFilesClient\\QuestXP.db2",
"DBFilesClient\\QuestXGroupActivity.db2",
+ "DBFilesClient\\QuestXP.db2",
"DBFilesClient\\RacialMounts.db2",
"DBFilesClient\\RandPropPoints.db2",
"DBFilesClient\\ResearchBranch.db2",
@@ -436,6 +455,7 @@ char const* DBFilesClientList[] =
"DBFilesClient\\SoundAmbience.db2",
"DBFilesClient\\SoundAmbienceFlavor.db2",
"DBFilesClient\\SoundBus.db2",
+ "DBFilesClient\\SoundBusOverride.db2",
"DBFilesClient\\SoundEmitterPillPoints.db2",
"DBFilesClient\\SoundEmitters.db2",
"DBFilesClient\\SoundFilter.db2",
@@ -469,14 +489,12 @@ char const* DBFilesClientList[] =
"DBFilesClient\\SpellDuration.db2",
"DBFilesClient\\SpellEffect.db2",
"DBFilesClient\\SpellEffectEmission.db2",
- "DBFilesClient\\SpellEffectExtra.db2",
"DBFilesClient\\SpellEffectGroupSize.db2",
"DBFilesClient\\SpellEffectScaling.db2",
"DBFilesClient\\SpellEquippedItems.db2",
"DBFilesClient\\SpellFlyout.db2",
"DBFilesClient\\SpellFlyoutItem.db2",
"DBFilesClient\\SpellFocusObject.db2",
- "DBFilesClient\\SpellIcon.db2",
"DBFilesClient\\SpellInterrupts.db2",
"DBFilesClient\\SpellItemEnchantment.db2",
"DBFilesClient\\SpellItemEnchantmentCondition.db2",
@@ -514,6 +532,7 @@ char const* DBFilesClientList[] =
"DBFilesClient\\SpellVisualKitModelAttach.db2",
"DBFilesClient\\SpellVisualMissile.db2",
"DBFilesClient\\SpellXSpellVisual.db2",
+ "DBFilesClient\\StartupFiles.db2",
"DBFilesClient\\Startup_Strings.db2",
"DBFilesClient\\Stationery.db2",
"DBFilesClient\\StringLookups.db2",
@@ -534,7 +553,9 @@ char const* DBFilesClientList[] =
"DBFilesClient\\TradeSkillCategory.db2",
"DBFilesClient\\TradeSkillItem.db2",
"DBFilesClient\\TransformMatrix.db2",
+ "DBFilesClient\\TransmogHoliday.db2",
"DBFilesClient\\TransmogSet.db2",
+ "DBFilesClient\\TransmogSetGroup.db2",
"DBFilesClient\\TransmogSetItem.db2",
"DBFilesClient\\TransportAnimation.db2",
"DBFilesClient\\TransportPhysics.db2",
@@ -545,6 +566,10 @@ char const* DBFilesClientList[] =
"DBFilesClient\\UiCamera.db2",
"DBFilesClient\\UiCameraType.db2",
"DBFilesClient\\UiMapPOI.db2",
+ "DBFilesClient\\UiModelScene.db2",
+ "DBFilesClient\\UiModelSceneActor.db2",
+ "DBFilesClient\\UiModelSceneActorDisplay.db2",
+ "DBFilesClient\\UiModelSceneCamera.db2",
"DBFilesClient\\UiTextureAtlas.db2",
"DBFilesClient\\UiTextureAtlasMember.db2",
"DBFilesClient\\UiTextureKit.db2",
diff --git a/src/tools/vmap4_extractor/gameobject_extract.cpp b/src/tools/vmap4_extractor/gameobject_extract.cpp
index 73fa7130f24..137e301dcfd 100644
--- a/src/tools/vmap4_extractor/gameobject_extract.cpp
+++ b/src/tools/vmap4_extractor/gameobject_extract.cpp
@@ -77,7 +77,8 @@ struct GameobjectDisplayInfoLoadInfo
};
static char const* types = "ifffh";
static uint8 const arraySizes[5] = { 1, 6, 1, 1, 1 };
- static DB2Meta const meta(-1, 5, 0xE2D6FAB7, types, arraySizes);
+ static DB2FieldDefault const fieldDefaults[5] = { uint32(0), float(0), float(0), float(0), uint16(0) };
+ static DB2Meta const meta(-1, 5, 0x9EF36BC0, types, arraySizes, fieldDefaults);
static DB2FileLoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, &meta);
return &loadInfo;
}
@@ -130,7 +131,7 @@ void ExtractGameobjectModels()
for (uint32 rec = 0; rec < db2.GetRecordCount(); ++rec)
{
DB2Record record = db2.GetRecord(rec);
- uint32 fileId = record.GetUInt32(0, 0);
+ uint32 fileId = record.GetUInt32("FileDataID");
if (!fileId)
continue;
diff --git a/src/tools/vmap4_extractor/vmapexport.cpp b/src/tools/vmap4_extractor/vmapexport.cpp
index 02d0df202de..ce9bb6453ca 100644
--- a/src/tools/vmap4_extractor/vmapexport.cpp
+++ b/src/tools/vmap4_extractor/vmapexport.cpp
@@ -85,6 +85,8 @@ struct MapLoadInfo
{ false, FT_STRING, "MapName" },
{ false, FT_STRING, "MapDescription0" },
{ false, FT_STRING, "MapDescription1" },
+ { false, FT_STRING, "ShortDescription" },
+ { false, FT_STRING, "LongDescription" },
{ false, FT_SHORT, "AreaTableID" },
{ false, FT_SHORT, "LoadingScreenID" },
{ true, FT_SHORT, "CorpseMapID" },
@@ -98,9 +100,10 @@ struct MapLoadInfo
{ false, FT_BYTE, "MaxPlayers" },
{ false, FT_BYTE, "TimeOffset" },
};
- static char const* types = "siffssshhhhhhhbbbbb";
- static uint8 const arraySizes[19] = { 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
- static DB2Meta const meta(-1, 19, 0xF7CF2DA2, types, arraySizes);
+ static char const* types = "siffssssshhhhhhhbbbbb";
+ static uint8 const arraySizes[21] = { 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
+ static DB2FieldDefault const fieldDefaults[21] = { "", uint32(0), float(0), float(0), "", "", "", "", "", uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0) };
+ static DB2Meta const meta(-1, 21, 0xC34CD39B, types, arraySizes, fieldDefaults);
static DB2FileLoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, &meta);
return &loadInfo;
}
@@ -479,7 +482,7 @@ int main(int argc, char ** argv)
DB2Record record = db2.GetRecord(x);
map_ids[x].id = record.GetId();
- const char* map_name = record.GetString(0, 0);
+ const char* map_name = record.GetString("Directory");
size_t max_map_name_length = sizeof(map_ids[x].name);
if (strlen(map_name) >= max_map_name_length)
{