diff options
| author | Shauren <shauren.trinity@gmail.com> | 2017-05-11 22:29:51 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2017-05-11 22:29:51 +0200 |
| commit | 3a418a0bbc8e155e5395595c5e25c038d3c7c773 (patch) | |
| tree | 45359566bd6e360dd133e7ef43bc2a42e26baf56 /src/server | |
| parent | 8abc56c540b5d2c583e40ad3d302c43068778ed1 (diff) | |
Core/Common: Include cleanup
Diffstat (limited to 'src/server')
93 files changed, 313 insertions, 236 deletions
diff --git a/src/server/bnetserver/Main.cpp b/src/server/bnetserver/Main.cpp index ccee80e058a..25e45b81cef 100644 --- a/src/server/bnetserver/Main.cpp +++ b/src/server/bnetserver/Main.cpp @@ -25,6 +25,7 @@ #include "SessionManager.h" #include "AppenderDB.h" +#include "Config.h" #include "ProcessPriority.h" #include "RealmList.h" #include "GitRevision.h" @@ -188,7 +189,7 @@ int main(int argc, char** argv) signals.async_wait(std::bind(&SignalHandler, std::weak_ptr<boost::asio::io_service>(ioService), std::placeholders::_1, std::placeholders::_2)); // Set process priority according to configuration settings - SetProcessPriority("server.bnetserver"); + SetProcessPriority("server.bnetserver", sConfigMgr->GetIntDefault(CONFIG_PROCESSOR_AFFINITY, 0), sConfigMgr->GetBoolDefault(CONFIG_HIGH_PRIORITY, false)); // Enabled a timed callback for handling the database keep alive ping int32 dbPingInterval = sConfigMgr->GetIntDefault("MaxPingTime", 30); diff --git a/src/server/database/Database/DatabaseWorkerPool.cpp b/src/server/database/Database/DatabaseWorkerPool.cpp index e680ed834a3..aba2c573c4c 100644 --- a/src/server/database/Database/DatabaseWorkerPool.cpp +++ b/src/server/database/Database/DatabaseWorkerPool.cpp @@ -34,6 +34,12 @@ DatabaseWorkerPool<T>::DatabaseWorkerPool() } template <class T> +DatabaseWorkerPool<T>::~DatabaseWorkerPool() +{ + _queue->Cancel(); +} + +template <class T> void DatabaseWorkerPool<T>::SetConnectionInfo(std::string const& infoString, uint8 const asyncThreads, uint8 const synchThreads) { @@ -177,6 +183,12 @@ QueryResultHolderFuture DatabaseWorkerPool<T>::DelayQueryHolder(SQLQueryHolder* } template <class T> +SQLTransaction DatabaseWorkerPool<T>::BeginTransaction() +{ + return std::make_shared<Transaction>(); +} + +template <class T> void DatabaseWorkerPool<T>::CommitTransaction(SQLTransaction transaction) { #ifdef TRINITY_DEBUG diff --git a/src/server/database/Database/DatabaseWorkerPool.h b/src/server/database/Database/DatabaseWorkerPool.h index 6e5f25ff297..adca6b3f836 100644 --- a/src/server/database/Database/DatabaseWorkerPool.h +++ b/src/server/database/Database/DatabaseWorkerPool.h @@ -60,10 +60,7 @@ class DatabaseWorkerPool /* Activity state */ DatabaseWorkerPool(); - ~DatabaseWorkerPool() - { - _queue->Cancel(); - } + ~DatabaseWorkerPool(); void SetConnectionInfo(std::string const& infoString, uint8 const asyncThreads, uint8 const synchThreads); @@ -211,10 +208,7 @@ class DatabaseWorkerPool */ //! Begins an automanaged transaction pointer that will automatically rollback if not commited. (Autocommit=0) - SQLTransaction BeginTransaction() - { - return SQLTransaction(new Transaction); - } + SQLTransaction BeginTransaction(); //! Enqueues a collection of one-way SQL operations (can be both adhoc and prepared). The order in which these operations //! were appended to the transaction will be respected during execution. diff --git a/src/server/database/Database/Field.h b/src/server/database/Database/Field.h index 4daa447e481..8035dd16869 100644 --- a/src/server/database/Database/Field.h +++ b/src/server/database/Database/Field.h @@ -21,6 +21,9 @@ #include "Common.h" #include "Log.h" +#ifdef _WIN32 +#include <winsock2.h> +#endif #include <mysql.h> /** diff --git a/src/server/database/Database/MySQLConnection.h b/src/server/database/Database/MySQLConnection.h index 0a9b136386d..42fb976c729 100644 --- a/src/server/database/Database/MySQLConnection.h +++ b/src/server/database/Database/MySQLConnection.h @@ -19,6 +19,7 @@ #include "Transaction.h" #include "Util.h" #include "ProducerConsumerQueue.h" +#include <map> #ifndef _MYSQLCONNECTION_H #define _MYSQLCONNECTION_H diff --git a/src/server/database/Database/QueryCallback.h b/src/server/database/Database/QueryCallback.h index f9c93000da7..8258da37afb 100644 --- a/src/server/database/Database/QueryCallback.h +++ b/src/server/database/Database/QueryCallback.h @@ -20,6 +20,8 @@ #include "QueryResult.h" #include <future> +#include <list> +#include <queue> class TC_DATABASE_API QueryCallback { diff --git a/src/server/database/Database/QueryResult.h b/src/server/database/Database/QueryResult.h index 2df5d3a4f70..5d2cc425ae8 100644 --- a/src/server/database/Database/QueryResult.h +++ b/src/server/database/Database/QueryResult.h @@ -20,6 +20,7 @@ #define QUERYRESULT_H #include <memory> +#include "Errors.h" #include "Field.h" #ifdef _WIN32 diff --git a/src/server/database/Database/Transaction.h b/src/server/database/Database/Transaction.h index 6e6d68302f5..fbb96c053ce 100644 --- a/src/server/database/Database/Transaction.h +++ b/src/server/database/Database/Transaction.h @@ -20,6 +20,8 @@ #include "SQLOperation.h" #include "StringFormat.h" +#include <list> +#include <mutex> //- Forward declare (don't include header to prevent circular includes) class PreparedStatement; diff --git a/src/server/database/Logging/AppenderDB.cpp b/src/server/database/Logging/AppenderDB.cpp index 1a6e11209e9..f14bb04ddea 100644 --- a/src/server/database/Logging/AppenderDB.cpp +++ b/src/server/database/Logging/AppenderDB.cpp @@ -17,8 +17,9 @@ #include "AppenderDB.h" #include "Database/DatabaseEnv.h" +#include "LogMessage.h" -AppenderDB::AppenderDB(uint8 id, std::string const& name, LogLevel level, AppenderFlags /*flags*/, ExtraAppenderArgs /*extraArgs*/) +AppenderDB::AppenderDB(uint8 id, std::string const& name, LogLevel level, AppenderFlags /*flags*/, std::vector<char const*> /*extraArgs*/) : Appender(id, name, level), realmId(0), enabled(false) { } AppenderDB::~AppenderDB() { } diff --git a/src/server/database/Logging/AppenderDB.h b/src/server/database/Logging/AppenderDB.h index 56f5fc13b94..3f53a33210a 100644 --- a/src/server/database/Logging/AppenderDB.h +++ b/src/server/database/Logging/AppenderDB.h @@ -25,7 +25,7 @@ class TC_DATABASE_API AppenderDB: public Appender public: typedef std::integral_constant<AppenderType, APPENDER_DB>::type TypeIndex; - AppenderDB(uint8 id, std::string const& name, LogLevel level, AppenderFlags flags, ExtraAppenderArgs extraArgs); + AppenderDB(uint8 id, std::string const& name, LogLevel level, AppenderFlags flags, std::vector<char const*> extraArgs); ~AppenderDB(); void setRealmId(uint32 realmId) override; diff --git a/src/server/database/Updater/DBUpdater.cpp b/src/server/database/Updater/DBUpdater.cpp index 63257571177..117c3097478 100644 --- a/src/server/database/Updater/DBUpdater.cpp +++ b/src/server/database/Updater/DBUpdater.cpp @@ -41,18 +41,12 @@ bool DBUpdaterUtil::CheckExecutable() boost::filesystem::path exe(GetCorrectedMySQLExecutable()); if (!exists(exe)) { - exe.clear(); - - if (auto path = Trinity::SearchExecutableInPath("mysql")) + exe = Trinity::SearchExecutableInPath("mysql"); + if (!exe.empty() && exists(exe)) { - exe = std::move(*path); - - if (!exe.empty() && exists(exe)) - { - // Correct the path to the cli - corrected_path() = absolute(exe).generic_string(); - return true; - } + // Correct the path to the cli + corrected_path() = absolute(exe).generic_string(); + return true; } TC_LOG_FATAL("sql.updates", "Didn't find any executable MySQL binary at \'%s\' or in path, correct the path in the *.conf (\"MySQLExecutable\").", @@ -347,7 +341,7 @@ bool DBUpdater<T>::Populate(DatabaseWorkerPool<T>& pool) template<class T> QueryResult DBUpdater<T>::Retrieve(DatabaseWorkerPool<T>& pool, std::string const& query) { - return pool.PQuery(query.c_str()); + return pool.Query(query.c_str()); } template<class T> diff --git a/src/server/database/Updater/UpdateFetcher.h b/src/server/database/Updater/UpdateFetcher.h index 51f735e797f..0ca18f43886 100644 --- a/src/server/database/Updater/UpdateFetcher.h +++ b/src/server/database/Updater/UpdateFetcher.h @@ -23,6 +23,7 @@ #include <functional> #include <string> #include <memory> +#include <set> #include <vector> class TC_DATABASE_API UpdateFetcher diff --git a/src/server/game/Achievements/CriteriaHandler.h b/src/server/game/Achievements/CriteriaHandler.h index ab5625b0742..8959997041c 100644 --- a/src/server/game/Achievements/CriteriaHandler.h +++ b/src/server/game/Achievements/CriteriaHandler.h @@ -22,6 +22,9 @@ #include "ObjectGuid.h" #include "Transaction.h" #include "Common.h" +#include <map> +#include <unordered_map> +#include <vector> class Player; class Unit; diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp b/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp index 1c34fc49abb..5bcaa084950 100644 --- a/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp +++ b/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp @@ -19,6 +19,7 @@ #include "Item.h" #include "ItemTemplate.h" #include "AuctionHouseBotBuyer.h" +#include "Random.h" AuctionBotBuyer::AuctionBotBuyer() : _checkInterval(20 * MINUTE) { diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp index ae05c53dace..4c74727a03e 100644 --- a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp +++ b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp @@ -19,6 +19,7 @@ #include "ObjectMgr.h" #include "AuctionHouseMgr.h" #include "AuctionHouseBotSeller.h" +#include "Random.h" AuctionBotSeller::AuctionBotSeller() { diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp index f7405c0337e..aedce2d6f51 100644 --- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp +++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp @@ -43,6 +43,7 @@ #include "SharedDefines.h" #include "DisableMgr.h" #include "Opcodes.h" +#include "Containers.h" /*********************************************************/ /*** BATTLEGROUND MANAGER ***/ @@ -866,9 +867,11 @@ BattlegroundTypeId BattlegroundMgr::GetRandomBG(BattlegroundTypeId bgTypeId) { if (BattlegroundTemplate const* bgTemplate = GetBattlegroundTemplateByTypeId(bgTypeId)) { - uint32 weight = 0; BattlegroundSelectionWeightMap selectionWeights; - + std::vector<BattlegroundTypeId> ids; + ids.reserve(16); + std::vector<double> weights; + weights.reserve(16); for (int32 mapId : bgTemplate->BattlemasterEntry->MapID) { if (mapId == -1) @@ -876,28 +879,12 @@ BattlegroundTypeId BattlegroundMgr::GetRandomBG(BattlegroundTypeId bgTypeId) if (BattlegroundTemplate const* bg = GetBattlegroundTemplateByMapId(mapId)) { - weight += bg->Weight; - selectionWeights[bg->Id] = bg->Weight; + ids.push_back(bg->Id); + weights.push_back(bg->Weight); } } - // there is only one bg to select - if (selectionWeights.size() == 1) - return selectionWeights.begin()->first; - - if (weight) - { - // Select a random value - uint32 selectedWeight = urand(0, weight - 1); - // Select the correct bg (if we have in DB A(10), B(20), C(10), D(15) --> [0---A---9|10---B---29|30---C---39|40---D---54]) - weight = 0; - for (auto it : selectionWeights) - { - weight += it.second; - if (selectedWeight < weight) - return it.first; - } - } + return *Trinity::Containers::SelectRandomWeightedContainerElement(ids, weights); } return BATTLEGROUND_TYPE_NONE; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp index 68930e23cf9..180e82755f2 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp @@ -22,6 +22,7 @@ #include "Creature.h" #include "Language.h" #include "Player.h" +#include "Random.h" #include "Util.h" #include "WorldSession.h" diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp index 7ca9d636533..00ab1c2e964 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp @@ -19,6 +19,7 @@ #include "BattlegroundDS.h" #include "Creature.h" #include "Player.h" +#include "Random.h" #include "WorldPacket.h" BattlegroundDS::BattlegroundDS() diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp index 335f95d03fc..45ab8a542f4 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp @@ -22,6 +22,7 @@ #include "Creature.h" #include "Language.h" #include "Player.h" +#include "Random.h" #include "Util.h" // these variables aren't used outside of this file, so declare them only here diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp index 0224adbdbea..0fa25fc3f78 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp @@ -22,6 +22,7 @@ #include "ObjectMgr.h" #include "Player.h" #include "ScriptedCreature.h" +#include "UpdateData.h" #include "WorldPacket.h" BattlegroundSA::BattlegroundSA() diff --git a/src/server/game/Chat/Channels/Channel.h b/src/server/game/Chat/Channels/Channel.h index 056cf9a4c3f..50dd5c8ee96 100644 --- a/src/server/game/Chat/Channels/Channel.h +++ b/src/server/game/Chat/Channels/Channel.h @@ -22,6 +22,7 @@ #include "Common.h" #include "ObjectGuid.h" #include "WorldPacket.h" +#include <map> class Player; diff --git a/src/server/game/Chat/Channels/ChannelMgr.h b/src/server/game/Chat/Channels/ChannelMgr.h index f8bcaedf57b..66d57c38d55 100644 --- a/src/server/game/Chat/Channels/ChannelMgr.h +++ b/src/server/game/Chat/Channels/ChannelMgr.h @@ -19,6 +19,8 @@ #define __TRINITY_CHANNELMGR_H #include "Common.h" +#include "Hash.h" +#include <unordered_map> class Channel; diff --git a/src/server/game/Chat/ChatLink.h b/src/server/game/Chat/ChatLink.h index 2a7d1954d84..f8656a7870e 100644 --- a/src/server/game/Chat/ChatLink.h +++ b/src/server/game/Chat/ChatLink.h @@ -19,10 +19,11 @@ #define TRINITYCORE_CHATLINK_H #include "SharedDefines.h" -#include <sstream> +#include "Common.h" #include <list> +#include <sstream> +#include <vector> #include <cstring> -#include "Common.h" struct ItemLocale; struct ItemTemplate; diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h index cf9ef40c2bf..14eef8db623 100644 --- a/src/server/game/Conditions/ConditionMgr.h +++ b/src/server/game/Conditions/ConditionMgr.h @@ -20,6 +20,10 @@ #define TRINITY_CONDITIONMGR_H #include "Common.h" +#include "Hash.h" +#include <array> +#include <unordered_map> +#include <vector> class Creature; class Player; diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp index 689c36710df..a28e77aecbc 100644 --- a/src/server/game/DataStores/DB2Stores.cpp +++ b/src/server/game/DataStores/DB2Stores.cpp @@ -24,6 +24,11 @@ #include "TransportMgr.h" #include "World.h" +// temporary hack until database includes are sorted out (don't want to pull in Windows.h everywhere from mysql.h) +#ifdef GetClassName +#undef GetClassName +#endif + DB2Storage<AchievementEntry> sAchievementStore("Achievement.db2", AchievementLoadInfo::Instance()); DB2Storage<AnimKitEntry> sAnimKitStore("AnimKit.db2", AnimKitLoadInfo::Instance()); DB2Storage<AreaGroupMemberEntry> sAreaGroupMemberStore("AreaGroupMember.db2", AreaGroupMemberLoadInfo::Instance()); diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h index d4211b76d4f..ea2d02883bd 100644 --- a/src/server/game/DataStores/DB2Stores.h +++ b/src/server/game/DataStores/DB2Stores.h @@ -20,8 +20,15 @@ #include "DB2Store.h" #include "DB2Structure.h" +#include "Hash.h" #include "SharedDefines.h" #include "Regex.h" +#include <array> +#include <map> +#include <set> +#include <unordered_map> +#include <unordered_set> +#include <vector> TC_GAME_API extern DB2Storage<AchievementEntry> sAchievementStore; TC_GAME_API extern DB2Storage<AnimKitEntry> sAnimKitStore; diff --git a/src/server/game/DataStores/GameTables.h b/src/server/game/DataStores/GameTables.h index a9d1a01b1c3..93a0fb6b532 100644 --- a/src/server/game/DataStores/GameTables.h +++ b/src/server/game/DataStores/GameTables.h @@ -20,6 +20,7 @@ #include "SharedDefines.h" #include "Common.h" +#include <vector> struct GtArmorMitigationByLvlEntry { diff --git a/src/server/game/DungeonFinding/LFG.h b/src/server/game/DungeonFinding/LFG.h index 568fc300448..09d63b6d47e 100644 --- a/src/server/game/DungeonFinding/LFG.h +++ b/src/server/game/DungeonFinding/LFG.h @@ -20,6 +20,7 @@ #include "Common.h" #include "ObjectGuid.h" +#include <map> namespace lfg { diff --git a/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h b/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h index 98778d9fa83..d6ef0a43d79 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h +++ b/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h @@ -18,9 +18,10 @@ #ifndef TRINITYCORE_AREATRIGGER_TEMPLATE_H #define TRINITYCORE_AREATRIGGER_TEMPLATE_H -#include <G3D/Vector3.h> - #include "Define.h" +#include <G3D/Vector3.h> +#include <vector> +#include <cstring> #define MAX_AREATRIGGER_ENTITY_DATA 6 #define MAX_AREATRIGGER_SCALE 7 diff --git a/src/server/game/Entities/Corpse/Corpse.cpp b/src/server/game/Entities/Corpse/Corpse.cpp index ac34ebc0e9c..27a8623bad0 100644 --- a/src/server/game/Entities/Corpse/Corpse.cpp +++ b/src/server/game/Entities/Corpse/Corpse.cpp @@ -19,6 +19,7 @@ #include "Common.h" #include "Corpse.h" #include "Player.h" +#include "UpdateData.h" #include "ObjectAccessor.h" #include "DatabaseEnv.h" diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 32775918cb2..94ef4c532d6 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -20,6 +20,7 @@ #define TRINITYCORE_CREATURE_H #include "Common.h" +#include "Duration.h" #include "Unit.h" #include "ItemTemplate.h" #include "LootMgr.h" @@ -482,21 +483,21 @@ typedef std::unordered_map<uint16, CreatureBaseStats> CreatureBaseStatsContainer struct CreatureLocale { - StringVector Name; - StringVector NameAlt; - StringVector Title; - StringVector TitleAlt; + std::vector<std::string> Name; + std::vector<std::string> NameAlt; + std::vector<std::string> Title; + std::vector<std::string> TitleAlt; }; struct GossipMenuItemsLocale { - StringVector OptionText; - StringVector BoxText; + std::vector<std::string> OptionText; + std::vector<std::string> BoxText; }; struct PointOfInterestLocale { - StringVector Name; + std::vector<std::string> Name; }; struct EquipmentItem diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index 6f444d857c9..fe4fcd08cad 100644 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -865,9 +865,9 @@ union GameObjectValue struct GameObjectLocale { - StringVector Name; - StringVector CastBarCaption; - StringVector Unk1; + std::vector<std::string> Name; + std::vector<std::string> CastBarCaption; + std::vector<std::string> Unk1; }; // `gameobject_addon` table diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index 5d039a615b9..6c97161ba3a 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -34,6 +34,7 @@ #include "GameTables.h" #include "CollectionMgr.h" #include "ArtifactPackets.h" +#include "UpdateData.h" void AddItemsSetItem(Player* player, Item* item) { diff --git a/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp b/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp index ce88ba61f3e..a9bef8e415f 100644 --- a/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp +++ b/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp @@ -22,6 +22,7 @@ #include "Log.h" #include "ObjectMgr.h" #include "Util.h" +#include "Random.h" #include <list> #include <vector> diff --git a/src/server/game/Entities/Object/ObjectGuid.cpp b/src/server/game/Entities/Object/ObjectGuid.cpp index 92484f9e184..292dcdd60a4 100644 --- a/src/server/game/Entities/Object/ObjectGuid.cpp +++ b/src/server/game/Entities/Object/ObjectGuid.cpp @@ -17,8 +17,9 @@ */ #include "ObjectGuid.h" +#include "Hash.h" +#include "Log.h" #include "World.h" - #include <sstream> #include <iomanip> @@ -109,6 +110,14 @@ std::string ObjectGuid::ToString() const return str.str(); } +std::size_t ObjectGuid::GetHash() const +{ + std::size_t hashVal = 0; + Trinity::hash_combine(hashVal, _low); + Trinity::hash_combine(hashVal, _high); + return hashVal; +} + ObjectGuid ObjectGuid::Global(HighGuid type, LowType counter) { return ObjectGuid(uint64(uint64(type) << 58), counter); diff --git a/src/server/game/Entities/Object/ObjectGuid.h b/src/server/game/Entities/Object/ObjectGuid.h index 88172c970cb..883476b5f21 100644 --- a/src/server/game/Entities/Object/ObjectGuid.h +++ b/src/server/game/Entities/Object/ObjectGuid.h @@ -19,10 +19,14 @@ #ifndef ObjectGuid_h__ #define ObjectGuid_h__ -#include "Common.h" #include "ByteBuffer.h" -#include <type_traits> +#include <deque> #include <functional> +#include <list> +#include <set> +#include <type_traits> +#include <unordered_set> +#include <vector> enum TypeID { @@ -316,6 +320,7 @@ class TC_GAME_API ObjectGuid static char const* GetTypeName(HighGuid high); char const* GetTypeName() const { return !IsEmpty() ? GetTypeName(GetHigh()) : "None"; } std::string ToString() const; + std::size_t GetHash() const; private: static bool HasEntry(HighGuid high) @@ -415,7 +420,7 @@ namespace std public: size_t operator()(ObjectGuid const& key) const { - return boost::hash_range(reinterpret_cast<uint64 const*>(&key), reinterpret_cast<uint64 const*>(&key) + 2); + return key.GetHash(); } }; } diff --git a/src/server/game/Entities/Object/ObjectPosSelector.h b/src/server/game/Entities/Object/ObjectPosSelector.h index d5414e0e245..3d75a8daafb 100644 --- a/src/server/game/Entities/Object/ObjectPosSelector.h +++ b/src/server/game/Entities/Object/ObjectPosSelector.h @@ -19,9 +19,9 @@ #ifndef _OBJECT_POS_SELECTOR_H #define _OBJECT_POS_SELECTOR_H -#include<Common.h> - -#include<map> +#include "Common.h" +#include <map> +#include <cmath> enum UsedPosType { USED_POS_PLUS, USED_POS_MINUS }; diff --git a/src/server/game/Entities/Object/Position.cpp b/src/server/game/Entities/Object/Position.cpp index 5cf7fdd51f1..bbb6ee271cb 100644 --- a/src/server/game/Entities/Object/Position.cpp +++ b/src/server/game/Entities/Object/Position.cpp @@ -18,6 +18,7 @@ #include "Position.h" #include "ByteBuffer.h" #include "GridDefines.h" +#include "Random.h" #include <G3D/g3dmath.h> diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 936e793bfdb..eb99ccb70c3 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -19621,6 +19621,8 @@ void Player::SaveToDB(bool create /*=false*/) stmt->setUInt64(0, GetGUID().GetCounter()); trans->Append(stmt); + auto finiteAlways = [](float f) { return std::isfinite(f) ? f : 0.0f; }; + if (create) { //! Insert query diff --git a/src/server/game/Entities/Player/SceneMgr.h b/src/server/game/Entities/Player/SceneMgr.h index 0a7c13322cd..9064d9c892b 100644 --- a/src/server/game/Entities/Player/SceneMgr.h +++ b/src/server/game/Entities/Player/SceneMgr.h @@ -19,6 +19,7 @@ #define SceneMgr_h__ #include "Common.h" +#include <map> enum SceneFlags { diff --git a/src/server/game/Entities/Player/TradeData.cpp b/src/server/game/Entities/Player/TradeData.cpp index 3c193df220b..fe5b8231109 100644 --- a/src/server/game/Entities/Player/TradeData.cpp +++ b/src/server/game/Entities/Player/TradeData.cpp @@ -17,6 +17,7 @@ #include "TradeData.h" #include "Player.h" +#include "Random.h" #include "TradePackets.h" TradeData* TradeData::GetTraderData() const @@ -143,3 +144,8 @@ void TradeData::SetAccepted(bool state, bool forTrader /*= false*/) _player->GetSession()->SendTradeStatus(info); } } + +void TradeData::UpdateServerStateIndex() +{ + _serverStateIndex = rand32(); +} diff --git a/src/server/game/Entities/Player/TradeData.h b/src/server/game/Entities/Player/TradeData.h index 3fa800eb557..2a5b9f79777 100644 --- a/src/server/game/Entities/Player/TradeData.h +++ b/src/server/game/Entities/Player/TradeData.h @@ -65,7 +65,7 @@ public: void UpdateClientStateIndex() { ++_clientStateIndex; } uint32 GetServerStateIndex() const { return _serverStateIndex; } - void UpdateServerStateIndex() { _serverStateIndex = rand32(); } + void UpdateServerStateIndex(); private: void Update(bool for_trader = true) const; diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index b8329d24a8b..2c09cf6f9e2 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -27,6 +27,7 @@ #include "Cell.h" #include "CellImpl.h" #include "Totem.h" +#include "UpdateData.h" Transport::Transport() : GameObject(), _transportInfo(NULL), _isMoving(true), _pendingStop(false), diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index fab73a76b40..72f58e0f17a 100644 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -25,6 +25,7 @@ #include "SpellAuras.h" #include "SpellAuraEffects.h" #include "World.h" +#include <numeric> inline bool _ModifyUInt32(bool apply, uint32& baseValue, int32& amount) { diff --git a/src/server/game/Events/GameEventMgr.h b/src/server/game/Events/GameEventMgr.h index 77b39e543d3..22e9ee717f4 100644 --- a/src/server/game/Events/GameEventMgr.h +++ b/src/server/game/Events/GameEventMgr.h @@ -23,6 +23,8 @@ #include "SharedDefines.h" #include "Define.h" #include "ObjectGuid.h" +#include <map> +#include <unordered_map> #define max_ge_check_delay DAY // 1 day in seconds diff --git a/src/server/game/Garrison/GarrisonMgr.h b/src/server/game/Garrison/GarrisonMgr.h index 67e5b13df7d..29f9d4187be 100644 --- a/src/server/game/Garrison/GarrisonMgr.h +++ b/src/server/game/Garrison/GarrisonMgr.h @@ -19,8 +19,12 @@ #define GarrisonMgr_h__ #include "DB2Stores.h" -#include <unordered_set> #include "Position.h" +#include <list> +#include <set> +#include <unordered_map> +#include <unordered_set> +#include <vector> struct FinalizeGarrisonPlotGOInfo { diff --git a/src/server/game/Globals/ObjectAccessor.cpp b/src/server/game/Globals/ObjectAccessor.cpp index 2fc726e3601..564b02adc67 100644 --- a/src/server/game/Globals/ObjectAccessor.cpp +++ b/src/server/game/Globals/ObjectAccessor.cpp @@ -37,6 +37,10 @@ template<class T> void HashMapHolder<T>::Insert(T* o) { + static_assert(std::is_same<Player, T>::value + || std::is_same<Transport, T>::value, + "Only Player and Transport can be registered in global HashMapHolder"); + boost::unique_lock<boost::shared_mutex> lock(*GetLock()); GetContainer()[o->GetGUID()] = o; diff --git a/src/server/game/Globals/ObjectAccessor.h b/src/server/game/Globals/ObjectAccessor.h index 1dae898e832..08bf2bc3b58 100644 --- a/src/server/game/Globals/ObjectAccessor.h +++ b/src/server/game/Globals/ObjectAccessor.h @@ -19,27 +19,26 @@ #ifndef TRINITY_OBJECTACCESSOR_H #define TRINITY_OBJECTACCESSOR_H -#include <mutex> -#include <set> +#include "ObjectGuid.h" #include <unordered_map> -#include <boost/thread/locks.hpp> -#include <boost/thread/shared_mutex.hpp> - -#include "Define.h" -#include "GridDefines.h" -#include "UpdateData.h" -#include "Object.h" +class Object; +class WorldObject; +class Unit; class Creature; +class Player; class Corpse; -class Unit; class GameObject; class DynamicObject; -class WorldObject; -class Vehicle; -class Map; -class WorldRunnable; +class AreaTrigger; +class Pet; class Transport; +class Map; + +namespace boost +{ + class shared_mutex; +} template <class T> class TC_GAME_API HashMapHolder @@ -48,10 +47,6 @@ class TC_GAME_API HashMapHolder HashMapHolder() { } public: - static_assert(std::is_same<Player, T>::value - || std::is_same<Transport, T>::value, - "Only Player and Transport can be registered in global HashMapHolder"); - typedef std::unordered_map<ObjectGuid, T*> MapType; static void Insert(T* o); diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index a0077de693e..d081a1d0ed9 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -38,6 +38,7 @@ #include "MapManager.h" #include "Object.h" #include "PoolMgr.h" +#include "Random.h" #include "ReputationMgr.h" #include "ScriptMgr.h" #include "SpellAuras.h" @@ -294,7 +295,7 @@ ObjectMgr::~ObjectMgr() delete itr2->second; } -void ObjectMgr::AddLocaleString(std::string const& value, LocaleConstant localeConstant, StringVector& data) +void ObjectMgr::AddLocaleString(std::string const& value, LocaleConstant localeConstant, std::vector<std::string>& data) { if (!value.empty()) { @@ -7218,8 +7219,8 @@ void ObjectMgr::LoadPetNumber() std::string ObjectMgr::GeneratePetName(uint32 entry) { - StringVector& list0 = _petHalfName0[entry]; - StringVector& list1 = _petHalfName1[entry]; + std::vector<std::string>& list0 = _petHalfName0[entry]; + std::vector<std::string>& list1 = _petHalfName1[entry]; if (list0.empty() || list1.empty()) { diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 40ea4618c39..5828bd65016 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -430,7 +430,7 @@ typedef std::unordered_map<uint32/*(mapid, spawnMode) pair*/, CellObjectGuidsMap struct TrinityString { - StringVector Content; + std::vector<std::string> Content; }; typedef std::map<ObjectGuid, ObjectGuid> LinkedRespawnContainer; @@ -1368,8 +1368,8 @@ class TC_GAME_API ObjectMgr // for wintergrasp only GraveYardContainer GraveYardStore; - static void AddLocaleString(std::string const& value, LocaleConstant localeConstant, StringVector& data); - static inline void GetLocaleString(StringVector const& data, LocaleConstant localeConstant, std::string& value) + static void AddLocaleString(std::string const& value, LocaleConstant localeConstant, std::vector<std::string>& data); + static inline void GetLocaleString(std::vector<std::string> const& data, LocaleConstant localeConstant, std::string& value) { if (data.size() > size_t(localeConstant) && !data[localeConstant].empty()) value = data[localeConstant]; @@ -1535,7 +1535,7 @@ class TC_GAME_API ObjectMgr FishingBaseSkillContainer _fishingBaseForAreaStore; std::unordered_map<uint32, SkillTiersEntry> _skillTiers; - typedef std::map<uint32, StringVector> HalfNameContainer; + typedef std::map<uint32, std::vector<std::string>> HalfNameContainer; HalfNameContainer _petHalfName0; HalfNameContainer _petHalfName1; diff --git a/src/server/game/Grids/NGrid.cpp b/src/server/game/Grids/NGrid.cpp new file mode 100644 index 00000000000..e5d69dae44a --- /dev/null +++ b/src/server/game/Grids/NGrid.cpp @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2008-2017 TrinityCore <http://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "NGrid.h" +#include "Random.h" + +GridInfo::GridInfo() : i_timer(0), vis_Update(0, irand(0, DEFAULT_VISIBILITY_NOTIFY_PERIOD)), + i_unloadActiveLockCount(0), i_unloadExplicitLock(false), i_unloadReferenceLock(false) +{ +} + +GridInfo::GridInfo(time_t expiry, bool unload /*= true */) : i_timer(expiry), vis_Update(0, irand(0, DEFAULT_VISIBILITY_NOTIFY_PERIOD)), + i_unloadActiveLockCount(0), i_unloadExplicitLock(!unload), i_unloadReferenceLock(false) +{ +} diff --git a/src/server/game/Grids/NGrid.h b/src/server/game/Grids/NGrid.h index 986f083c053..a26dadef962 100644 --- a/src/server/game/Grids/NGrid.h +++ b/src/server/game/Grids/NGrid.h @@ -29,15 +29,11 @@ #define DEFAULT_VISIBILITY_NOTIFY_PERIOD 1000 -class GridInfo +class TC_GAME_API GridInfo { public: - GridInfo() - : i_timer(0), vis_Update(0, irand(0, DEFAULT_VISIBILITY_NOTIFY_PERIOD)), - i_unloadActiveLockCount(0), i_unloadExplicitLock(false), i_unloadReferenceLock(false) { } - GridInfo(time_t expiry, bool unload = true ) - : i_timer(expiry), vis_Update(0, irand(0, DEFAULT_VISIBILITY_NOTIFY_PERIOD)), - i_unloadActiveLockCount(0), i_unloadExplicitLock(!unload), i_unloadReferenceLock(false) { } + GridInfo(); + GridInfo(time_t expiry, bool unload = true ); const TimeTracker& getTimeTracker() const { return i_timer; } bool getUnloadLock() const { return i_unloadActiveLockCount || i_unloadExplicitLock || i_unloadReferenceLock; } void setUnloadExplicitLock(bool on) { i_unloadExplicitLock = on; } diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index e9961be50f7..788feed0193 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -33,11 +33,13 @@ #include "MapManager.h" #include "InstanceSaveMgr.h" #include "Util.h" +#include "Random.h" #include "LFGMgr.h" #include "UpdateFieldFlags.h" #include "SpellAuras.h" #include "PartyPackets.h" #include "LootPackets.h" +#include "UpdateData.h" Roll::Roll(LootItem const& li) : itemid(li.itemid), itemRandomPropId(li.randomPropertyId), itemRandomSuffix(li.randomSuffix), itemCount(li.count), diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 69c65e91348..0805da1eae3 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -49,6 +49,8 @@ #include "InstancePackets.h" #include "InstanceScript.h" #include "AreaTriggerPackets.h" +#include <boost/thread/shared_mutex.hpp> +#include <boost/thread/locks.hpp> void WorldSession::HandleRepopRequest(WorldPackets::Misc::RepopRequest& /*packet*/) { diff --git a/src/server/game/Handlers/NPCHandler.h b/src/server/game/Handlers/NPCHandler.h index d3c702f9d17..04bf128edab 100644 --- a/src/server/game/Handlers/NPCHandler.h +++ b/src/server/game/Handlers/NPCHandler.h @@ -34,7 +34,7 @@ struct NpcText struct PageTextLocale { - StringVector Text; + std::vector<std::string> Text; }; #endif diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index 38eca73adf2..0854090bc3f 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -34,6 +34,7 @@ #include <bitset> #include <list> #include <memory> +#include <mutex> class Battleground; class BattlegroundMap; diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp index b54aef633ef..84e7640ac6b 100755 --- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp @@ -22,6 +22,7 @@ #include "MoveSplineInit.h" #include "MoveSpline.h" #include "Player.h" +#include "Random.h" template<class T> void ConfusedMovementGenerator<T>::DoInitialize(T* unit) diff --git a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp index ad6761d6218..fe501b20cb5 100644 --- a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp @@ -23,6 +23,7 @@ #include "CreatureGroups.h" #include "MoveSplineInit.h" #include "MoveSpline.h" +#include "Random.h" #define RUNNING_CHANCE_RANDOMMV 20 //will be "1 / RUNNING_CHANCE_RANDOMMV" diff --git a/src/server/game/Movement/Spline/MoveSplineInitArgs.h b/src/server/game/Movement/Spline/MoveSplineInitArgs.h index a90b2012ae0..d9688674dfc 100644 --- a/src/server/game/Movement/Spline/MoveSplineInitArgs.h +++ b/src/server/game/Movement/Spline/MoveSplineInitArgs.h @@ -21,6 +21,7 @@ #include "MoveSplineFlag.h" #include "ObjectGuid.h" +#include "Optional.h" #include <G3D/Vector3.h> class Unit; diff --git a/src/server/game/Movement/Spline/MovementUtil.cpp b/src/server/game/Movement/Spline/MovementUtil.cpp index dc025403ba5..58b21602270 100644 --- a/src/server/game/Movement/Spline/MovementUtil.cpp +++ b/src/server/game/Movement/Spline/MovementUtil.cpp @@ -17,6 +17,7 @@ */ #include "MoveSplineFlag.h" +#include <cmath> namespace Movement { diff --git a/src/server/game/Movement/Spline/Spline.h b/src/server/game/Movement/Spline/Spline.h index cf17fda4f4a..e0f7cdce7fc 100644 --- a/src/server/game/Movement/Spline/Spline.h +++ b/src/server/game/Movement/Spline/Spline.h @@ -20,6 +20,7 @@ #define TRINITYSERVER_SPLINE_H #include "MovementTypedefs.h" +#include "Errors.h" #include <G3D/Vector3.h> #include <limits> diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h index aa8d99d5301..15eb95280b9 100644 --- a/src/server/game/Quests/QuestDef.h +++ b/src/server/game/Quests/QuestDef.h @@ -255,30 +255,30 @@ enum QuestObjectiveFlags struct QuestTemplateLocale { - StringVector LogTitle; - StringVector LogDescription; - StringVector QuestDescription; - StringVector AreaDescription; - StringVector PortraitGiverText; - StringVector PortraitGiverName; - StringVector PortraitTurnInText; - StringVector PortraitTurnInName; - StringVector QuestCompletionLog; + std::vector<std::string> LogTitle; + std::vector<std::string> LogDescription; + std::vector<std::string> QuestDescription; + std::vector<std::string> AreaDescription; + std::vector<std::string> PortraitGiverText; + std::vector<std::string> PortraitGiverName; + std::vector<std::string> PortraitTurnInText; + std::vector<std::string> PortraitTurnInName; + std::vector<std::string> QuestCompletionLog; }; struct QuestRequestItemsLocale { - StringVector CompletionText; + std::vector<std::string> CompletionText; }; struct QuestObjectivesLocale { - StringVector Description; + std::vector<std::string> Description; }; struct QuestOfferRewardLocale { - StringVector RewardText; + std::vector<std::string> RewardText; }; struct QuestObjective diff --git a/src/server/game/Scenarios/ScenarioMgr.h b/src/server/game/Scenarios/ScenarioMgr.h index 08861e83ef7..94fb64df41f 100644 --- a/src/server/game/Scenarios/ScenarioMgr.h +++ b/src/server/game/Scenarios/ScenarioMgr.h @@ -19,7 +19,11 @@ #define ScenarioMgr_h__ #include "Common.h" +#include "Hash.h" #include "SharedDefines.h" +#include <map> +#include <unordered_map> +#include <vector> class InstanceScenario; class Map; diff --git a/src/server/game/Scripting/ScriptReloadMgr.cpp b/src/server/game/Scripting/ScriptReloadMgr.cpp index 3079c548b71..e4f15c66431 100644 --- a/src/server/game/Scripting/ScriptReloadMgr.cpp +++ b/src/server/game/Scripting/ScriptReloadMgr.cpp @@ -17,6 +17,7 @@ #include "ScriptReloadMgr.h" #include "Errors.h" +#include "Optional.h" #ifndef TRINITY_API_USE_DYNAMIC_LINKING diff --git a/src/server/game/Server/Packets/AreaTriggerPackets.h b/src/server/game/Server/Packets/AreaTriggerPackets.h index 967a8ba0f5f..02e30093501 100644 --- a/src/server/game/Server/Packets/AreaTriggerPackets.h +++ b/src/server/game/Server/Packets/AreaTriggerPackets.h @@ -21,6 +21,7 @@ #include "Packet.h" #include "PacketUtilities.h" #include "ObjectGuid.h" +#include "Optional.h" namespace WorldPackets { diff --git a/src/server/game/Server/Packets/BattlegroundPackets.h b/src/server/game/Server/Packets/BattlegroundPackets.h index 967829c2c17..725edc21d41 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.h +++ b/src/server/game/Server/Packets/BattlegroundPackets.h @@ -23,6 +23,7 @@ #include "LFGPackets.h" #include "PacketUtilities.h" #include "Packet.h" +#include "Optional.h" namespace WorldPackets { diff --git a/src/server/game/Server/Packets/BattlenetPackets.h b/src/server/game/Server/Packets/BattlenetPackets.h index 6b7a8c9c50e..ba3f4299ab9 100644 --- a/src/server/game/Server/Packets/BattlenetPackets.h +++ b/src/server/game/Server/Packets/BattlenetPackets.h @@ -21,6 +21,7 @@ #include "Packet.h" #include "MessageBuffer.h" #include "BattlenetRpcErrorCodes.h" +#include <array> namespace WorldPackets { diff --git a/src/server/game/Server/Packets/GuildFinderPackets.h b/src/server/game/Server/Packets/GuildFinderPackets.h index 1cc3b00094c..843b39e1c32 100644 --- a/src/server/game/Server/Packets/GuildFinderPackets.h +++ b/src/server/game/Server/Packets/GuildFinderPackets.h @@ -20,6 +20,7 @@ #include "Packet.h" #include "ObjectGuid.h" +#include "Optional.h" namespace WorldPackets { diff --git a/src/server/game/Server/Packets/GuildPackets.cpp b/src/server/game/Server/Packets/GuildPackets.cpp index d9bb746eb73..0b5f38909ea 100644 --- a/src/server/game/Server/Packets/GuildPackets.cpp +++ b/src/server/game/Server/Packets/GuildPackets.cpp @@ -749,7 +749,9 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildNewsEvent con WorldPacket const* WorldPackets::Guild::GuildNews::Write() { - _worldPacket << NewsEvents; + _worldPacket << uint32(NewsEvents.size()); + for (GuildNewsEvent const& newsEvent : NewsEvents) + _worldPacket << newsEvent; return &_worldPacket; } diff --git a/src/server/game/Server/Packets/HotfixPackets.h b/src/server/game/Server/Packets/HotfixPackets.h index eb87ddba1e6..884478ee45b 100644 --- a/src/server/game/Server/Packets/HotfixPackets.h +++ b/src/server/game/Server/Packets/HotfixPackets.h @@ -22,6 +22,7 @@ #include "Common.h" #include "DB2Stores.h" #include "ObjectGuid.h" +#include "Optional.h" namespace WorldPackets { diff --git a/src/server/game/Server/Packets/ItemPackets.h b/src/server/game/Server/Packets/ItemPackets.h index 6b813c82d54..012e6800174 100644 --- a/src/server/game/Server/Packets/ItemPackets.h +++ b/src/server/game/Server/Packets/ItemPackets.h @@ -21,6 +21,7 @@ #include "Packet.h" #include "Item.h" #include "PacketUtilities.h" +#include "Optional.h" struct VoidStorageItem; diff --git a/src/server/game/Server/Packets/MovementPackets.h b/src/server/game/Server/Packets/MovementPackets.h index 2695db47e4b..243faeec7ad 100644 --- a/src/server/game/Server/Packets/MovementPackets.h +++ b/src/server/game/Server/Packets/MovementPackets.h @@ -20,7 +20,7 @@ #include "Packet.h" #include "Object.h" - +#include "Optional.h" #include <G3D/Vector3.h> namespace Movement diff --git a/src/server/game/Server/Packets/PartyPackets.h b/src/server/game/Server/Packets/PartyPackets.h index 3fbbc3381a7..d4c03e3b78c 100644 --- a/src/server/game/Server/Packets/PartyPackets.h +++ b/src/server/game/Server/Packets/PartyPackets.h @@ -21,6 +21,7 @@ #include "Packet.h" #include "ObjectGuid.h" #include "Group.h" +#include "Optional.h" namespace WorldPackets { diff --git a/src/server/game/Server/Packets/SystemPackets.h b/src/server/game/Server/Packets/SystemPackets.h index 362fdb3af8b..7440bebd853 100644 --- a/src/server/game/Server/Packets/SystemPackets.h +++ b/src/server/game/Server/Packets/SystemPackets.h @@ -19,6 +19,7 @@ #define SystemPackets_h__ #include "Packet.h" +#include "Optional.h" namespace WorldPackets { diff --git a/src/server/game/Server/Packets/TaxiPackets.h b/src/server/game/Server/Packets/TaxiPackets.h index 2fd002aacf1..c9d7ba8e061 100644 --- a/src/server/game/Server/Packets/TaxiPackets.h +++ b/src/server/game/Server/Packets/TaxiPackets.h @@ -21,6 +21,7 @@ #include "Packet.h" #include "ObjectGuid.h" #include "DBCEnums.h" +#include "Optional.h" namespace WorldPackets { diff --git a/src/server/game/Server/Packets/TicketPackets.h b/src/server/game/Server/Packets/TicketPackets.h index 27866e767ef..4cce35a0b85 100644 --- a/src/server/game/Server/Packets/TicketPackets.h +++ b/src/server/game/Server/Packets/TicketPackets.h @@ -20,6 +20,7 @@ #include "Packet.h" #include "LFGPackets.h" +#include "Optional.h" #include <G3D/Vector3.h> namespace WorldPackets diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 56f5cd1128d..103f3ebbd4d 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -17,8 +17,11 @@ */ #include "Opcodes.h" +#include "Log.h" #include "WorldSession.h" #include "Packets/AllPackets.h" +#include <iomanip> +#include <sstream> template<class PacketClass, void(WorldSession::*HandlerFunction)(PacketClass&)> class PacketHandler : public ClientOpcodeHandler @@ -61,6 +64,21 @@ struct get_packet_class<void(WorldSession::*)(PacketClass&)> using type = PacketClass; }; +OpcodeTable::OpcodeTable() +{ + memset(_internalTableClient, 0, sizeof(_internalTableClient)); + memset(_internalTableServer, 0, sizeof(_internalTableServer)); +} + +OpcodeTable::~OpcodeTable() +{ + for (uint16 i = 0; i < NUM_OPCODE_HANDLERS; ++i) + { + delete _internalTableClient[i]; + delete _internalTableServer[i]; + } +} + template<typename Handler, Handler HandlerFunction> void OpcodeTable::ValidateAndSetClientOpcode(OpcodeClient opcode, char const* name, SessionStatus status, PacketProcessing processing) { @@ -1818,3 +1836,34 @@ void OpcodeTable::Initialize() #undef DEFINE_SERVER_OPCODE_HANDLER }; + +template<typename T> +inline std::string GetOpcodeNameForLoggingImpl(T id) +{ + uint32 opcode = uint32(id); + std::ostringstream ss; + ss << '['; + + if (static_cast<uint32>(id) < NUM_OPCODE_HANDLERS) + { + if (OpcodeHandler const* handler = opcodeTable[id]) + ss << handler->Name; + else + ss << "UNKNOWN OPCODE"; + } + else + ss << "INVALID OPCODE"; + + ss << " 0x" << std::hex << std::setw(4) << std::setfill('0') << std::uppercase << opcode << std::nouppercase << std::dec << " (" << opcode << ")]"; + return ss.str(); +} + +std::string GetOpcodeNameForLogging(OpcodeClient opcode) +{ + return GetOpcodeNameForLoggingImpl(opcode); +} + +std::string GetOpcodeNameForLogging(OpcodeServer opcode) +{ + return GetOpcodeNameForLoggingImpl(opcode); +} diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index c764b6d669e..58834139c01 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -23,10 +23,10 @@ #ifndef _OPCODES_H #define _OPCODES_H -#include "Common.h" -#include <iomanip> +#include "Define.h" +#include <string> -enum ConnectionType +enum ConnectionType : int8 { CONNECTION_TYPE_REALM = 0, CONNECTION_TYPE_INSTANCE = 1, @@ -1785,8 +1785,6 @@ enum PacketProcessing class WorldPacket; class WorldSession; -#pragma pack(push, 1) - class OpcodeHandler { public: @@ -1820,23 +1818,12 @@ public: class OpcodeTable { public: - OpcodeTable() - { - memset(_internalTableClient, 0, sizeof(_internalTableClient)); - memset(_internalTableServer, 0, sizeof(_internalTableServer)); - } + OpcodeTable(); OpcodeTable(OpcodeTable const&) = delete; OpcodeTable& operator=(OpcodeTable const&) = delete; - ~OpcodeTable() - { - for (uint16 i = 0; i < NUM_OPCODE_HANDLERS; ++i) - { - delete _internalTableClient[i]; - delete _internalTableServer[i]; - } - } + ~OpcodeTable(); void Initialize(); @@ -1862,29 +1849,9 @@ class OpcodeTable extern OpcodeTable opcodeTable; -#pragma pack(pop) - -/// Lookup opcode name for human understandable logging (T = OpcodeClient|OpcodeServer) -template<typename T> -inline std::string GetOpcodeNameForLogging(T id) -{ - uint32 opcode = uint32(id); - std::ostringstream ss; - ss << '['; - - if (static_cast<uint32>(id) < NUM_OPCODE_HANDLERS) - { - if (OpcodeHandler const* handler = opcodeTable[id]) - ss << handler->Name; - else - ss << "UNKNOWN OPCODE"; - } - else - ss << "INVALID OPCODE"; - - ss << " 0x" << std::hex << std::setw(4) << std::setfill('0') << std::uppercase << opcode << std::nouppercase << std::dec << " (" << opcode << ")]"; - return ss.str(); -} +/// Lookup opcode name for human understandable logging +std::string GetOpcodeNameForLogging(OpcodeClient opcode); +std::string GetOpcodeNameForLogging(OpcodeServer opcode); #endif /// @} diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index 62e83ce253e..cd0de310b75 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -53,6 +53,7 @@ #include "PacketUtilities.h" #include "CollectionMgr.h" #include "Metric.h" +#include "Random.h" #include <zlib.h> diff --git a/src/server/game/Skills/SkillDiscovery.cpp b/src/server/game/Skills/SkillDiscovery.cpp index e762f5347ce..6b4ce80e1f2 100644 --- a/src/server/game/Skills/SkillDiscovery.cpp +++ b/src/server/game/Skills/SkillDiscovery.cpp @@ -23,6 +23,7 @@ #include "SkillDiscovery.h" #include "SpellMgr.h" #include "Player.h" +#include "Random.h" #include "SpellInfo.h" #include <map> diff --git a/src/server/game/Spells/SpellMgr.h b/src/server/game/Spells/SpellMgr.h index 77220b378c4..2d8b4326454 100644 --- a/src/server/game/Spells/SpellMgr.h +++ b/src/server/game/Spells/SpellMgr.h @@ -22,6 +22,7 @@ // For static or at-server-startup loaded spell data #include "Define.h" +#include "Duration.h" #include "SharedDefines.h" #include "Util.h" diff --git a/src/server/game/Texts/CreatureTextMgr.h b/src/server/game/Texts/CreatureTextMgr.h index 7e69f017429..943101c852e 100644 --- a/src/server/game/Texts/CreatureTextMgr.h +++ b/src/server/game/Texts/CreatureTextMgr.h @@ -53,7 +53,7 @@ struct CreatureTextEntry struct CreatureTextLocale { - StringVector Text; + std::vector<std::string> Text; }; struct CreatureTextId diff --git a/src/server/game/Warden/WardenWin.cpp b/src/server/game/Warden/WardenWin.cpp index b73a0af4361..6c7fdce98aa 100644 --- a/src/server/game/Warden/WardenWin.cpp +++ b/src/server/game/Warden/WardenWin.cpp @@ -32,6 +32,7 @@ #include "WardenModuleWin.h" #include "WardenCheckMgr.h" #include "SHA1.h" +#include "Random.h" #include <openssl/md5.h> diff --git a/src/server/game/Weather/Weather.cpp b/src/server/game/Weather/Weather.cpp index 1684b7bf6f3..37be7e40e85 100644 --- a/src/server/game/Weather/Weather.cpp +++ b/src/server/game/Weather/Weather.cpp @@ -29,6 +29,7 @@ #include "ScriptMgr.h" #include "WorldSession.h" #include "MiscPackets.h" +#include "Random.h" /// Create the Weather object Weather::Weather(uint32 zone, WeatherData const* weatherChances) diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 4bab6c0fb3b..bb763ec4f55 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -31,11 +31,13 @@ #include "QueryResult.h" #include "QueryCallbackProcessor.h" #include "Realm/Realm.h" +#include "LockedQueue.h" #include <atomic> #include <map> #include <set> #include <list> +#include <unordered_map> class Object; class WorldPacket; diff --git a/src/server/scripts/Commands/cs_gm.cpp b/src/server/scripts/Commands/cs_gm.cpp index c47be969620..17abb11f790 100644 --- a/src/server/scripts/Commands/cs_gm.cpp +++ b/src/server/scripts/Commands/cs_gm.cpp @@ -30,6 +30,8 @@ EndScriptData */ #include "World.h" #include "Player.h" #include "Opcodes.h" +#include <boost/thread/shared_mutex.hpp> +#include <boost/thread/locks.hpp> class gm_commandscript : public CommandScript { diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 88e968b6621..678c7342eda 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -15,6 +15,7 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include "DB2Stores.h" #include "Chat.h" #include "ScriptMgr.h" #include "AccountMgr.h" @@ -41,6 +42,11 @@ #include "Transport.h" #include "MapManager.h" + // temporary hack until database includes are sorted out (don't want to pull in Windows.h everywhere from mysql.h) +#ifdef GetClassName +#undef GetClassName +#endif + class misc_commandscript : public CommandScript { public: diff --git a/src/server/scripts/Commands/cs_reset.cpp b/src/server/scripts/Commands/cs_reset.cpp index c879c3c4c0b..743081203c0 100644 --- a/src/server/scripts/Commands/cs_reset.cpp +++ b/src/server/scripts/Commands/cs_reset.cpp @@ -29,6 +29,8 @@ EndScriptData */ #include "Player.h" #include "Pet.h" #include "ScriptMgr.h" +#include <boost/thread/shared_mutex.hpp> +#include <boost/thread/locks.hpp> class reset_commandscript : public CommandScript { diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp index f9b245ef053..ba8d6eaa17b 100644 --- a/src/server/scripts/Spells/spell_paladin.cpp +++ b/src/server/scripts/Spells/spell_paladin.cpp @@ -27,6 +27,7 @@ #include "SpellAuraEffects.h" #include "SpellHistory.h" #include "Group.h" +#include "Random.h" enum PaladinSpells { diff --git a/src/server/shared/JSON/ProtobufJSON.cpp b/src/server/shared/JSON/ProtobufJSON.cpp index 4d14cf199de..68e46f3fd57 100644 --- a/src/server/shared/JSON/ProtobufJSON.cpp +++ b/src/server/shared/JSON/ProtobufJSON.cpp @@ -18,6 +18,7 @@ #include "ProtobufJSON.h" #include "StringFormat.h" #include "Common.h" +#include "Errors.h" #include "Log.h" #include <rapidjson/writer.h> #include <rapidjson/reader.h> diff --git a/src/server/shared/Packets/ByteBuffer.h b/src/server/shared/Packets/ByteBuffer.h index 3933f617910..82cc00a0f4e 100644 --- a/src/server/shared/Packets/ByteBuffer.h +++ b/src/server/shared/Packets/ByteBuffer.h @@ -24,6 +24,7 @@ #include "ByteConverter.h" #include "Util.h" #include <cstring> +#include <ctime> class MessageBuffer; @@ -679,85 +680,6 @@ class TC_SHARED_API ByteBuffer std::vector<uint8> _storage; }; -template <typename T> -inline ByteBuffer &operator<<(ByteBuffer &b, std::vector<T> v) -{ - b << (uint32)v.size(); - for (typename std::vector<T>::iterator i = v.begin(); i != v.end(); ++i) - { - b << *i; - } - return b; -} - -template <typename T> -inline ByteBuffer &operator>>(ByteBuffer &b, std::vector<T> &v) -{ - uint32 vsize; - b >> vsize; - v.clear(); - while (vsize--) - { - T t; - b >> t; - v.push_back(t); - } - return b; -} - -template <typename T> -inline ByteBuffer &operator<<(ByteBuffer &b, std::list<T> v) -{ - b << (uint32)v.size(); - for (typename std::list<T>::iterator i = v.begin(); i != v.end(); ++i) - { - b << *i; - } - return b; -} - -template <typename T> -inline ByteBuffer &operator>>(ByteBuffer &b, std::list<T> &v) -{ - uint32 vsize; - b >> vsize; - v.clear(); - while (vsize--) - { - T t; - b >> t; - v.push_back(t); - } - return b; -} - -template <typename K, typename V> -inline ByteBuffer &operator<<(ByteBuffer &b, std::map<K, V> &m) -{ - b << (uint32)m.size(); - for (typename std::map<K, V>::iterator i = m.begin(); i != m.end(); ++i) - { - b << i->first << i->second; - } - return b; -} - -template <typename K, typename V> -inline ByteBuffer &operator>>(ByteBuffer &b, std::map<K, V> &m) -{ - uint32 msize; - b >> msize; - m.clear(); - while (msize--) - { - K k; - V v; - b >> k >> v; - m.insert(make_pair(k, v)); - } - return b; -} - /// @todo Make a ByteBuffer.cpp and move all this inlining to it. template<> inline std::string ByteBuffer::read<std::string>() { diff --git a/src/server/shared/Realm/RealmList.h b/src/server/shared/Realm/RealmList.h index 92e8d9f7445..594ca2bf1f6 100644 --- a/src/server/shared/Realm/RealmList.h +++ b/src/server/shared/Realm/RealmList.h @@ -25,6 +25,7 @@ #include <boost/asio/ip/tcp.hpp> #include <boost/asio/io_service.hpp> #include <boost/asio/deadline_timer.hpp> +#include <unordered_set> using namespace boost::asio; diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp index 2136b5f7654..4a42305139a 100644 --- a/src/server/worldserver/Main.cpp +++ b/src/server/worldserver/Main.cpp @@ -210,7 +210,7 @@ extern int main(int argc, char** argv) threadPool->push_back(std::thread([ioService]() { ioService->run(); })); // Set process priority according to configuration settings - SetProcessPriority("server.worldserver"); + SetProcessPriority("server.worldserver", sConfigMgr->GetIntDefault(CONFIG_PROCESSOR_AFFINITY, 0), sConfigMgr->GetBoolDefault(CONFIG_HIGH_PRIORITY, false)); // Start the databases if (!StartDB()) |
