aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-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
9 files changed, 82 insertions, 77 deletions
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);