diff options
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/game/DataStores/GameTables.cpp | 32 | ||||
| -rw-r--r-- | src/server/game/DataStores/GameTables.h | 33 | ||||
| -rw-r--r-- | src/server/game/DataStores/M2Stores.cpp | 18 | ||||
| -rw-r--r-- | src/server/game/DataStores/M2Stores.h | 18 | ||||
| -rw-r--r-- | src/server/game/Entities/Item/Item.cpp | 10 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/CinematicMgr.cpp | 27 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/CinematicMgr.h | 6 | ||||
| -rw-r--r-- | src/server/game/Handlers/ArtifactHandler.cpp | 8 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_debug.cpp | 7 |
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); |
