aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/common/Common.h21
-rw-r--r--src/server/game/Battlegrounds/Battleground.cpp2
-rw-r--r--src/server/game/Battlegrounds/Battleground.h3
-rw-r--r--src/server/game/Combat/ThreatManager.h1
-rw-r--r--src/server/game/Entities/Object/ObjectGuid.cpp36
-rw-r--r--src/server/game/Entities/Object/ObjectGuid.h43
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp23
-rw-r--r--src/server/game/Globals/ObjectMgr.h16
-rw-r--r--src/server/game/Grids/Dynamic/TypeContainer.h167
-rw-r--r--src/server/game/Grids/GridDefines.h7
-rw-r--r--src/server/game/Grids/NGrid.cpp7
-rw-r--r--src/server/game/Instances/InstanceScript.h5
-rw-r--r--src/server/game/Maps/Map.cpp11
-rw-r--r--src/server/game/Maps/Map.h19
-rw-r--r--src/server/game/Scripting/ScriptMgr.cpp507
-rw-r--r--src/server/game/Scripting/ScriptMgr.h337
-rw-r--r--src/server/game/Spells/SpellScript.cpp12
-rw-r--r--src/server/game/Spells/SpellScript.h6
-rw-r--r--src/server/shared/Realm/Realm.h1
-rw-r--r--src/server/worldserver/CommandLine/CliRunnable.cpp2
-rw-r--r--src/tools/mmaps_generator/PathCommon.h3
21 files changed, 898 insertions, 331 deletions
diff --git a/src/common/Common.h b/src/common/Common.h
index 92c0453ddc0..141b163a63e 100644
--- a/src/common/Common.h
+++ b/src/common/Common.h
@@ -20,27 +20,8 @@
#include "Define.h"
#include <array>
-#include <memory>
#include <string>
-#include <utility>
-
-#if TRINITY_PLATFORM == TRINITY_PLATFORM_WINDOWS
-# include <ws2tcpip.h>
-
-# if TRINITY_COMPILER == TRINITY_COMPILER_INTEL
-# if !defined(BOOST_ASIO_HAS_MOVE)
-# define BOOST_ASIO_HAS_MOVE
-# endif // !defined(BOOST_ASIO_HAS_MOVE)
-# endif // if TRINITY_COMPILER == TRINITY_COMPILER_INTEL
-#else
-# include <sys/types.h>
-# include <sys/ioctl.h>
-# include <sys/socket.h>
-# include <netinet/in.h>
-# include <unistd.h>
-# include <netdb.h>
-# include <cstdlib>
-#endif
+#include <cstdlib>
#if TRINITY_COMPILER == TRINITY_COMPILER_MICROSOFT
diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp
index 7377caa7943..19d5f28eef6 100644
--- a/src/server/game/Battlegrounds/Battleground.cpp
+++ b/src/server/game/Battlegrounds/Battleground.cpp
@@ -1068,7 +1068,7 @@ void Battleground::EventPlayerLoggedIn(Player* player)
{
ObjectGuid guid = player->GetGUID();
// player is correct pointer
- for (GuidDeque::iterator itr = m_OfflineQueue.begin(); itr != m_OfflineQueue.end(); ++itr)
+ for (auto itr = m_OfflineQueue.begin(); itr != m_OfflineQueue.end(); ++itr)
{
if (*itr == guid)
{
diff --git a/src/server/game/Battlegrounds/Battleground.h b/src/server/game/Battlegrounds/Battleground.h
index dcceb4d1127..4671ba22780 100644
--- a/src/server/game/Battlegrounds/Battleground.h
+++ b/src/server/game/Battlegrounds/Battleground.h
@@ -23,6 +23,7 @@
#include "ObjectGuid.h"
#include "Position.h"
#include "SharedDefines.h"
+#include <deque>
#include <map>
namespace WorldPackets
@@ -592,7 +593,7 @@ class TC_GAME_API Battleground
// Player lists
GuidVector m_ResurrectQueue; // Player GUID
- GuidDeque m_OfflineQueue; // Player GUID
+ std::deque<ObjectGuid> m_OfflineQueue; // Player GUID
// Invited counters are useful for player invitation to BG - do not allow, if BG is started to one faction to have 2 more players than another faction
// Invited counters will be changed only when removing already invited player from queue, removing player from battleground and inviting player to BG
diff --git a/src/server/game/Combat/ThreatManager.h b/src/server/game/Combat/ThreatManager.h
index 36885802068..8cc792b0c1f 100644
--- a/src/server/game/Combat/ThreatManager.h
+++ b/src/server/game/Combat/ThreatManager.h
@@ -23,6 +23,7 @@
#include "ObjectGuid.h"
#include "SharedDefines.h"
#include <array>
+#include <memory>
#include <unordered_map>
#include <vector>
diff --git a/src/server/game/Entities/Object/ObjectGuid.cpp b/src/server/game/Entities/Object/ObjectGuid.cpp
index 959a994c043..3de8cb7b2dc 100644
--- a/src/server/game/Entities/Object/ObjectGuid.cpp
+++ b/src/server/game/Entities/Object/ObjectGuid.cpp
@@ -91,31 +91,27 @@ ByteBuffer& operator>>(ByteBuffer& buf, PackedGuidReader const& guid)
return buf;
}
-void ObjectGuidGeneratorBase::HandleCounterOverflow(HighGuid high)
+ObjectGuid::LowType ObjectGuidGenerator::Generate()
{
- TC_LOG_ERROR("misc", "%s guid overflow!! Can't continue, shutting down server. ", ObjectGuid::GetTypeName(high));
+ if (_nextGuid >= ObjectGuid::GetMaxCounter(_high) - 1)
+ HandleCounterOverflow();
+
+ if (_high == HighGuid::Unit || _high == HighGuid::Vehicle || _high == HighGuid::GameObject || _high == HighGuid::Transport)
+ CheckGuidTrigger();
+
+ return _nextGuid++;
+}
+
+void ObjectGuidGenerator::HandleCounterOverflow()
+{
+ TC_LOG_ERROR("misc", "%s guid overflow!! Can't continue, shutting down server. ", ObjectGuid::GetTypeName(_high));
World::StopNow(ERROR_EXIT_CODE);
}
-void ObjectGuidGeneratorBase::CheckGuidTrigger(ObjectGuid::LowType guidlow)
+void ObjectGuidGenerator::CheckGuidTrigger()
{
- if (!sWorld->IsGuidAlert() && guidlow > sWorld->getIntConfig(CONFIG_RESPAWN_GUIDALERTLEVEL))
+ if (!sWorld->IsGuidAlert() && _nextGuid > sWorld->getIntConfig(CONFIG_RESPAWN_GUIDALERTLEVEL))
sWorld->TriggerGuidAlert();
- else if (!sWorld->IsGuidWarning() && guidlow > sWorld->getIntConfig(CONFIG_RESPAWN_GUIDWARNLEVEL))
+ else if (!sWorld->IsGuidWarning() && _nextGuid > sWorld->getIntConfig(CONFIG_RESPAWN_GUIDWARNLEVEL))
sWorld->TriggerGuidWarning();
}
-
-#define GUID_TRAIT_INSTANTIATE_GUID( HIGH_GUID ) \
- template class TC_GAME_API ObjectGuidGenerator< HIGH_GUID >;
-
-GUID_TRAIT_INSTANTIATE_GUID(HighGuid::Container)
-GUID_TRAIT_INSTANTIATE_GUID(HighGuid::Player)
-GUID_TRAIT_INSTANTIATE_GUID(HighGuid::GameObject)
-GUID_TRAIT_INSTANTIATE_GUID(HighGuid::Transport)
-GUID_TRAIT_INSTANTIATE_GUID(HighGuid::Unit)
-GUID_TRAIT_INSTANTIATE_GUID(HighGuid::Pet)
-GUID_TRAIT_INSTANTIATE_GUID(HighGuid::Vehicle)
-GUID_TRAIT_INSTANTIATE_GUID(HighGuid::DynamicObject)
-GUID_TRAIT_INSTANTIATE_GUID(HighGuid::Mo_Transport)
-GUID_TRAIT_INSTANTIATE_GUID(HighGuid::Instance)
-GUID_TRAIT_INSTANTIATE_GUID(HighGuid::Group)
diff --git a/src/server/game/Entities/Object/ObjectGuid.h b/src/server/game/Entities/Object/ObjectGuid.h
index 31996595d0a..46b23671257 100644
--- a/src/server/game/Entities/Object/ObjectGuid.h
+++ b/src/server/game/Entities/Object/ObjectGuid.h
@@ -20,7 +20,6 @@
#include "ByteBuffer.h"
#include "Define.h"
-#include <deque>
#include <functional>
#include <list>
#include <memory>
@@ -248,11 +247,10 @@ class TC_GAME_API ObjectGuid
};
// Some Shared defines
-typedef std::set<ObjectGuid> GuidSet;
-typedef std::list<ObjectGuid> GuidList;
-typedef std::deque<ObjectGuid> GuidDeque;
-typedef std::vector<ObjectGuid> GuidVector;
-typedef std::unordered_set<ObjectGuid> GuidUnorderedSet;
+using GuidSet = std::set<ObjectGuid>;
+using GuidList = std::list<ObjectGuid>;
+using GuidVector = std::vector<ObjectGuid>;
+using GuidUnorderedSet = std::unordered_set<ObjectGuid>;
// minimum buffer size for packed guid is 9 bytes
#define PACKED_GUID_MIN_BUFFER_SIZE 9
@@ -275,40 +273,23 @@ class TC_GAME_API PackedGuid
ByteBuffer _packedGuid;
};
-class TC_GAME_API ObjectGuidGeneratorBase
+class TC_GAME_API ObjectGuidGenerator
{
public:
- ObjectGuidGeneratorBase(ObjectGuid::LowType start = 1) : _nextGuid(start) { }
+ explicit ObjectGuidGenerator(HighGuid high, ObjectGuid::LowType start = 1) : _high(high), _nextGuid(start) { }
+ ~ObjectGuidGenerator() = default;
- virtual void Set(ObjectGuid::LowType val) { _nextGuid = val; }
- virtual ObjectGuid::LowType Generate() = 0;
+ void Set(ObjectGuid::LowType val) { _nextGuid = val; }
+ ObjectGuid::LowType Generate();
ObjectGuid::LowType GetNextAfterMaxUsed() const { return _nextGuid; }
- virtual ~ObjectGuidGeneratorBase() { }
protected:
- static void HandleCounterOverflow(HighGuid high);
- static void CheckGuidTrigger(ObjectGuid::LowType guid);
+ void HandleCounterOverflow();
+ void CheckGuidTrigger();
+ HighGuid _high;
ObjectGuid::LowType _nextGuid;
};
-template<HighGuid high>
-class TC_GAME_API ObjectGuidGenerator : public ObjectGuidGeneratorBase
-{
-public:
- explicit ObjectGuidGenerator(ObjectGuid::LowType start = 1) : ObjectGuidGeneratorBase(start) { }
-
- ObjectGuid::LowType Generate() override
- {
- if (_nextGuid >= ObjectGuid::GetMaxCounter(high) - 1)
- HandleCounterOverflow(high);
-
- if (high == HighGuid::Unit || high == HighGuid::GameObject)
- CheckGuidTrigger(_nextGuid);
-
- return _nextGuid++;
- }
-};
-
TC_GAME_API ByteBuffer& operator<<(ByteBuffer& buf, ObjectGuid const& guid);
TC_GAME_API ByteBuffer& operator>>(ByteBuffer& buf, ObjectGuid& guid);
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index fc867d69235..24f8c9ce466 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -7431,21 +7431,21 @@ void ObjectMgr::SetHighestGuids()
{
QueryResult result = CharacterDatabase.Query("SELECT MAX(guid) FROM characters");
if (result)
- GetGuidSequenceGenerator<HighGuid::Player>().Set((*result)[0].GetUInt32()+1);
+ GetGuidSequenceGenerator(HighGuid::Player).Set((*result)[0].GetUInt32() + 1);
result = CharacterDatabase.Query("SELECT MAX(guid) FROM item_instance");
if (result)
- GetGuidSequenceGenerator<HighGuid::Item>().Set((*result)[0].GetUInt32()+1);
+ GetGuidSequenceGenerator(HighGuid::Item).Set((*result)[0].GetUInt32() + 1);
// Cleanup other tables from nonexistent guids ( >= _hiItemGuid)
- CharacterDatabase.PExecute("DELETE FROM character_inventory WHERE item >= '%u'", GetGuidSequenceGenerator<HighGuid::Item>().GetNextAfterMaxUsed()); // One-time query
- CharacterDatabase.PExecute("DELETE FROM mail_items WHERE item_guid >= '%u'", GetGuidSequenceGenerator<HighGuid::Item>().GetNextAfterMaxUsed()); // One-time query
- CharacterDatabase.PExecute("DELETE FROM auctionhouse WHERE itemguid >= '%u'", GetGuidSequenceGenerator<HighGuid::Item>().GetNextAfterMaxUsed()); // One-time query
- CharacterDatabase.PExecute("DELETE FROM guild_bank_item WHERE item_guid >= '%u'", GetGuidSequenceGenerator<HighGuid::Item>().GetNextAfterMaxUsed()); // One-time query
+ CharacterDatabase.PExecute("DELETE FROM character_inventory WHERE item >= '%u'", GetGuidSequenceGenerator(HighGuid::Item).GetNextAfterMaxUsed()); // One-time query
+ CharacterDatabase.PExecute("DELETE FROM mail_items WHERE item_guid >= '%u'", GetGuidSequenceGenerator(HighGuid::Item).GetNextAfterMaxUsed()); // One-time query
+ CharacterDatabase.PExecute("DELETE FROM auctionhouse WHERE itemguid >= '%u'", GetGuidSequenceGenerator(HighGuid::Item).GetNextAfterMaxUsed()); // One-time query
+ CharacterDatabase.PExecute("DELETE FROM guild_bank_item WHERE item_guid >= '%u'", GetGuidSequenceGenerator(HighGuid::Item).GetNextAfterMaxUsed()); // One-time query
result = WorldDatabase.Query("SELECT MAX(guid) FROM transports");
if (result)
- GetGuidSequenceGenerator<HighGuid::Mo_Transport>().Set((*result)[0].GetUInt32()+1);
+ GetGuidSequenceGenerator(HighGuid::Transport).Set((*result)[0].GetUInt32() + 1);
result = CharacterDatabase.Query("SELECT MAX(id) FROM auctionhouse");
if (result)
@@ -7480,6 +7480,15 @@ void ObjectMgr::SetHighestGuids()
_gameObjectSpawnId = (*result)[0].GetUInt32() + 1;
}
+ObjectGuidGenerator& ObjectMgr::GetGuidSequenceGenerator(HighGuid high)
+{
+ auto itr = _guidGenerators.find(high);
+ if (itr == _guidGenerators.end())
+ itr = _guidGenerators.insert(std::make_pair(high, std::make_unique<ObjectGuidGenerator>(high))).first;
+
+ return *itr->second;
+}
+
uint32 ObjectMgr::GenerateAuctionID()
{
if (_auctionId >= 0xFFFFFFFE)
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index 875949faf16..8ea3c22213c 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -1254,10 +1254,10 @@ class TC_GAME_API ObjectMgr
void SetHighestGuids();
template<HighGuid type>
- inline ObjectGuidGeneratorBase& GetGenerator()
+ ObjectGuidGenerator& GetGenerator()
{
static_assert(ObjectGuidTraits<type>::Global, "Only global guid can be generated in ObjectMgr context");
- return GetGuidSequenceGenerator<type>();
+ return GetGuidSequenceGenerator(type);
}
uint32 GenerateAuctionID();
@@ -1584,17 +1584,9 @@ class TC_GAME_API ObjectMgr
ObjectGuid::LowType _gameObjectSpawnId;
// first free low guid for selected guid type
- template<HighGuid high>
- inline ObjectGuidGeneratorBase& GetGuidSequenceGenerator()
- {
- auto itr = _guidGenerators.find(high);
- if (itr == _guidGenerators.end())
- itr = _guidGenerators.insert(std::make_pair(high, std::unique_ptr<ObjectGuidGenerator<high>>(new ObjectGuidGenerator<high>()))).first;
-
- return *itr->second;
- }
+ ObjectGuidGenerator& GetGuidSequenceGenerator(HighGuid high);
- std::map<HighGuid, std::unique_ptr<ObjectGuidGeneratorBase>> _guidGenerators;
+ std::map<HighGuid, std::unique_ptr<ObjectGuidGenerator>> _guidGenerators;
QuestContainer _questTemplates;
typedef std::unordered_map<uint32, GossipText> GossipTextContainer;
diff --git a/src/server/game/Grids/Dynamic/TypeContainer.h b/src/server/game/Grids/Dynamic/TypeContainer.h
index f790f0e3904..14d22d8056c 100644
--- a/src/server/game/Grids/Dynamic/TypeContainer.h
+++ b/src/server/game/Grids/Dynamic/TypeContainer.h
@@ -38,7 +38,6 @@
template<class OBJECT>
struct ContainerMapList
{
- //std::map<OBJECT_HANDLE, OBJECT *> _element;
GridRefManager<OBJECT> _element;
};
@@ -84,67 +83,145 @@ struct ContainerUnorderedMap<TypeList<H, T>, KEY_TYPE>
template<class OBJECT_TYPES>
class TypeMapContainer
{
- public:
- template<class SPECIFIC_TYPE> size_t Count() const { return Trinity::Count(i_elements, (SPECIFIC_TYPE*)nullptr); }
-
- /// inserts a specific object into the container
- template<class SPECIFIC_TYPE>
- bool insert(SPECIFIC_TYPE *obj)
- {
- SPECIFIC_TYPE* t = Trinity::Insert(i_elements, obj);
- return (t != nullptr);
- }
-
- /// Removes the object from the container, and returns the removed object
- //template<class SPECIFIC_TYPE>
- //bool remove(SPECIFIC_TYPE* obj)
- //{
- // SPECIFIC_TYPE* t = Trinity::Remove(i_elements, obj);
- // return (t != nullptr);
- //}
-
- ContainerMapList<OBJECT_TYPES> & GetElements(void) { return i_elements; }
- const ContainerMapList<OBJECT_TYPES> & GetElements(void) const { return i_elements;}
-
- private:
- ContainerMapList<OBJECT_TYPES> i_elements;
+public:
+ TypeMapContainer();
+ TypeMapContainer(TypeMapContainer const&) = default;
+ TypeMapContainer(TypeMapContainer&&) noexcept = default;
+ TypeMapContainer& operator=(TypeMapContainer const&) = default;
+ TypeMapContainer& operator=(TypeMapContainer&&) noexcept = default;
+ ~TypeMapContainer();
+
+ template<class SPECIFIC_TYPE>
+ size_t Count() const;
+
+ /// inserts a specific object into the container
+ template<class SPECIFIC_TYPE>
+ bool insert(SPECIFIC_TYPE *obj);
+
+ /// Removes the object from the container, and returns the removed object
+ //template<class SPECIFIC_TYPE>
+ //bool remove(SPECIFIC_TYPE* obj)
+ //{
+ // SPECIFIC_TYPE* t = Trinity::Remove(i_elements, obj);
+ // return (t != nullptr);
+ //}
+
+ ContainerMapList<OBJECT_TYPES>& GetElements(void);
+ const ContainerMapList<OBJECT_TYPES>& GetElements(void) const;
+
+private:
+ ContainerMapList<OBJECT_TYPES> i_elements;
};
+template <class OBJECT_TYPES>
+TypeMapContainer<OBJECT_TYPES>::TypeMapContainer() = default;
+
+template <class OBJECT_TYPES>
+TypeMapContainer<OBJECT_TYPES>::~TypeMapContainer() = default;
+
+template <class OBJECT_TYPES>
+template <class SPECIFIC_TYPE>
+size_t TypeMapContainer<OBJECT_TYPES>::Count() const
+{
+ return Trinity::Count(i_elements, (SPECIFIC_TYPE*)nullptr);
+}
+
+template <class OBJECT_TYPES>
+template <class SPECIFIC_TYPE>
+bool TypeMapContainer<OBJECT_TYPES>::insert(SPECIFIC_TYPE* obj)
+{
+ SPECIFIC_TYPE* t = Trinity::Insert(i_elements, obj);
+ return (t != nullptr);
+}
+
+template <class OBJECT_TYPES>
+ContainerMapList<OBJECT_TYPES>& TypeMapContainer<OBJECT_TYPES>::GetElements()
+{
+ return i_elements;
+}
+
+template <class OBJECT_TYPES>
+const ContainerMapList<OBJECT_TYPES>& TypeMapContainer<OBJECT_TYPES>::GetElements() const
+{
+ return i_elements;
+}
+
template<class OBJECT_TYPES, class KEY_TYPE>
class TypeUnorderedMapContainer
{
public:
+ TypeUnorderedMapContainer();
+ TypeUnorderedMapContainer(TypeUnorderedMapContainer const&) = default;
+ TypeUnorderedMapContainer(TypeUnorderedMapContainer&&) noexcept = default;
+ TypeUnorderedMapContainer& operator=(TypeUnorderedMapContainer const&) = default;
+ TypeUnorderedMapContainer& operator=(TypeUnorderedMapContainer&&) noexcept = default;
+ ~TypeUnorderedMapContainer();
+
template<class SPECIFIC_TYPE>
- bool Insert(KEY_TYPE const& handle, SPECIFIC_TYPE* obj)
- {
- return Trinity::Insert(_elements, handle, obj);
- }
+ bool Insert(KEY_TYPE const& handle, SPECIFIC_TYPE* obj);
template<class SPECIFIC_TYPE>
- bool Remove(KEY_TYPE const& handle)
- {
- return Trinity::Remove(_elements, handle, (SPECIFIC_TYPE*)nullptr);
- }
+ bool Remove(KEY_TYPE const& handle);
template<class SPECIFIC_TYPE>
- SPECIFIC_TYPE* Find(KEY_TYPE const& handle)
- {
- return Trinity::Find(_elements, handle, (SPECIFIC_TYPE*)nullptr);
- }
+ SPECIFIC_TYPE* Find(KEY_TYPE const& handle);
template<class SPECIFIC_TYPE>
- std::size_t Size() const
- {
- std::size_t size = 0;
- Trinity::Size(_elements, &size, (SPECIFIC_TYPE*)nullptr);
- return size;
- }
+ std::size_t Size() const;
- ContainerUnorderedMap<OBJECT_TYPES, KEY_TYPE>& GetElements() { return _elements; }
- ContainerUnorderedMap<OBJECT_TYPES, KEY_TYPE> const& GetElements() const { return _elements; }
+ ContainerUnorderedMap<OBJECT_TYPES, KEY_TYPE>& GetElements();
+ ContainerUnorderedMap<OBJECT_TYPES, KEY_TYPE> const& GetElements() const;
private:
ContainerUnorderedMap<OBJECT_TYPES, KEY_TYPE> _elements;
};
+template <class OBJECT_TYPES, class KEY_TYPE>
+TypeUnorderedMapContainer<OBJECT_TYPES, KEY_TYPE>::TypeUnorderedMapContainer() = default;
+
+template <class OBJECT_TYPES, class KEY_TYPE>
+TypeUnorderedMapContainer<OBJECT_TYPES, KEY_TYPE>::~TypeUnorderedMapContainer() = default;
+
+template <class OBJECT_TYPES, class KEY_TYPE>
+template <class SPECIFIC_TYPE>
+bool TypeUnorderedMapContainer<OBJECT_TYPES, KEY_TYPE>::Insert(KEY_TYPE const& handle, SPECIFIC_TYPE* obj)
+{
+ return Trinity::Insert(_elements, handle, obj);
+}
+
+template <class OBJECT_TYPES, class KEY_TYPE>
+template <class SPECIFIC_TYPE>
+bool TypeUnorderedMapContainer<OBJECT_TYPES, KEY_TYPE>::Remove(KEY_TYPE const& handle)
+{
+ return Trinity::Remove(_elements, handle, (SPECIFIC_TYPE*)nullptr);
+}
+
+template <class OBJECT_TYPES, class KEY_TYPE>
+template <class SPECIFIC_TYPE>
+SPECIFIC_TYPE* TypeUnorderedMapContainer<OBJECT_TYPES, KEY_TYPE>::Find(KEY_TYPE const& handle)
+{
+ return Trinity::Find(_elements, handle, (SPECIFIC_TYPE*)nullptr);
+}
+
+template <class OBJECT_TYPES, class KEY_TYPE>
+template <class SPECIFIC_TYPE>
+std::size_t TypeUnorderedMapContainer<OBJECT_TYPES, KEY_TYPE>::Size() const
+{
+ std::size_t size = 0;
+ Trinity::Size(_elements, &size, (SPECIFIC_TYPE*)nullptr);
+ return size;
+}
+
+template <class OBJECT_TYPES, class KEY_TYPE>
+ContainerUnorderedMap<OBJECT_TYPES, KEY_TYPE>& TypeUnorderedMapContainer<OBJECT_TYPES, KEY_TYPE>::GetElements()
+{
+ return _elements;
+}
+
+template <class OBJECT_TYPES, class KEY_TYPE>
+ContainerUnorderedMap<OBJECT_TYPES, KEY_TYPE> const& TypeUnorderedMapContainer<OBJECT_TYPES, KEY_TYPE>::GetElements() const
+{
+ return _elements;
+}
+
#endif
diff --git a/src/server/game/Grids/GridDefines.h b/src/server/game/Grids/GridDefines.h
index a709cc586e8..4ba7f33db81 100644
--- a/src/server/game/Grids/GridDefines.h
+++ b/src/server/game/Grids/GridDefines.h
@@ -76,12 +76,17 @@ enum GridMapTypeMask
GRID_MAP_TYPE_MASK_ALL = 0x1F
};
+extern template class Grid<Player, AllWorldObjectTypes, AllGridObjectTypes>;
+extern template class NGrid<MAX_NUMBER_OF_CELLS, Player, AllWorldObjectTypes, AllGridObjectTypes>;
+
+extern template class TypeMapContainer<AllGridObjectTypes>;
+extern template class TypeMapContainer<AllWorldObjectTypes>;
+
typedef Grid<Player, AllWorldObjectTypes, AllGridObjectTypes> GridType;
typedef NGrid<MAX_NUMBER_OF_CELLS, Player, AllWorldObjectTypes, AllGridObjectTypes> NGridType;
typedef TypeMapContainer<AllGridObjectTypes> GridTypeMapContainer;
typedef TypeMapContainer<AllWorldObjectTypes> WorldTypeMapContainer;
-typedef TypeUnorderedMapContainer<AllMapStoredObjectTypes, ObjectGuid> MapStoredObjectTypesContainer;
template<uint32 LIMIT>
struct CoordPair
diff --git a/src/server/game/Grids/NGrid.cpp b/src/server/game/Grids/NGrid.cpp
index 214bbc8adbd..cd77630fb99 100644
--- a/src/server/game/Grids/NGrid.cpp
+++ b/src/server/game/Grids/NGrid.cpp
@@ -16,6 +16,7 @@
*/
#include "NGrid.h"
+#include "GridDefines.h"
#include "Random.h"
GridInfo::GridInfo() : i_timer(0), vis_Update(0, irand(0, DEFAULT_VISIBILITY_NOTIFY_PERIOD)),
@@ -27,3 +28,9 @@ GridInfo::GridInfo(time_t expiry, bool unload /*= true */) : i_timer(expiry), vi
i_unloadActiveLockCount(0), i_unloadExplicitLock(!unload), i_unloadReferenceLock(false)
{
}
+
+template class Grid<Player, AllWorldObjectTypes, AllGridObjectTypes>;
+template class NGrid<MAX_NUMBER_OF_CELLS, Player, AllWorldObjectTypes, AllGridObjectTypes>;
+
+template class TC_GAME_API TypeMapContainer<AllGridObjectTypes>;
+template class TC_GAME_API TypeMapContainer<AllWorldObjectTypes>;
diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h
index bd93498877a..063362af456 100644
--- a/src/server/game/Instances/InstanceScript.h
+++ b/src/server/game/Instances/InstanceScript.h
@@ -22,9 +22,12 @@
#include "Common.h"
#include "Duration.h"
#include <map>
-#include <memory>
#include <set>
+#ifdef TRINITY_API_USE_DYNAMIC_LINKING
+#include <memory>
+#endif
+
#define OUT_SAVE_INST_DATA TC_LOG_DEBUG("scripts", "Saving Instance Data for Instance %s (Map %d, Instance Id %d)", instance->GetMapName(), instance->GetId(), instance->GetInstanceId())
#define OUT_SAVE_INST_DATA_COMPLETE TC_LOG_DEBUG("scripts", "Saving Instance Data for Instance %s (Map %d, Instance Id %d) completed.", instance->GetMapName(), instance->GetId(), instance->GetInstanceId())
#define OUT_LOAD_INST_DATA(a) TC_LOG_DEBUG("scripts", "Loading Instance Data for Instance %s (Map %d, Instance Id %d). Input is '%s'", instance->GetMapName(), instance->GetId(), instance->GetInstanceId(), a)
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index cf358105825..eb0809398bb 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -3522,6 +3522,15 @@ bool Map::IsSpawnGroupActive(uint32 groupId) const
return (_toggledSpawnGroupIds.find(groupId) != _toggledSpawnGroupIds.end()) != !(data->flags & SPAWNGROUP_FLAG_MANUAL_SPAWN);
}
+ObjectGuidGenerator& Map::GetGuidSequenceGenerator(HighGuid high)
+{
+ auto itr = _guidGenerators.find(high);
+ if (itr == _guidGenerators.end())
+ itr = _guidGenerators.insert(std::make_pair(high, std::make_unique<ObjectGuidGenerator>(high))).first;
+
+ return *itr->second;
+}
+
void Map::AddFarSpellCallback(FarSpellCallback&& callback)
{
_farSpellCallbacks.Enqueue(new FarSpellCallback(std::move(callback)));
@@ -4841,3 +4850,5 @@ std::string InstanceMap::GetDebugInfo() const
<< "ScriptId: " << GetScriptId() << " ScriptName: " << GetScriptName();
return sstr.str();
}
+
+template class TC_GAME_API TypeUnorderedMapContainer<AllMapStoredObjectTypes, ObjectGuid>;
diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h
index bf013d0d6ad..237ce5ff654 100644
--- a/src/server/game/Maps/Map.h
+++ b/src/server/game/Maps/Map.h
@@ -314,6 +314,9 @@ inline bool CompareRespawnInfo::operator()(RespawnInfo const* a, RespawnInfo con
return a->type < b->type;
}
+extern template class TypeUnorderedMapContainer<AllMapStoredObjectTypes, ObjectGuid>;
+typedef TypeUnorderedMapContainer<AllMapStoredObjectTypes, ObjectGuid> MapStoredObjectTypesContainer;
+
class TC_GAME_API Map : public GridRefManager<NGridType>
{
friend class MapReference;
@@ -620,14 +623,14 @@ class TC_GAME_API Map : public GridRefManager<NGridType>
inline ObjectGuid::LowType GenerateLowGuid()
{
static_assert(ObjectGuidTraits<high>::MapSpecific, "Only map specific guid can be generated in Map context");
- return GetGuidSequenceGenerator<high>().Generate();
+ return GetGuidSequenceGenerator(high).Generate();
}
template<HighGuid high>
inline ObjectGuid::LowType GetMaxLowGuid()
{
static_assert(ObjectGuidTraits<high>::MapSpecific, "Only map specific guid can be retrieved in Map context");
- return GetGuidSequenceGenerator<high>().GetNextAfterMaxUsed();
+ return GetGuidSequenceGenerator(high).GetNextAfterMaxUsed();
}
void AddUpdateObject(Object* obj)
@@ -879,17 +882,9 @@ class TC_GAME_API Map : public GridRefManager<NGridType>
ZoneDynamicInfoMap _zoneDynamicInfo;
IntervalTimer _weatherUpdateTimer;
- template<HighGuid high>
- inline ObjectGuidGeneratorBase& GetGuidSequenceGenerator()
- {
- auto itr = _guidGenerators.find(high);
- if (itr == _guidGenerators.end())
- itr = _guidGenerators.insert(std::make_pair(high, std::unique_ptr<ObjectGuidGenerator<high>>(new ObjectGuidGenerator<high>()))).first;
-
- return *itr->second;
- }
+ ObjectGuidGenerator& GetGuidSequenceGenerator(HighGuid high);
- std::map<HighGuid, std::unique_ptr<ObjectGuidGeneratorBase>> _guidGenerators;
+ std::map<HighGuid, std::unique_ptr<ObjectGuidGenerator>> _guidGenerators;
MapStoredObjectTypesContainer _objectsStore;
CreatureBySpawnIdContainer _creatureBySpawnIdStore;
GameObjectBySpawnIdContainer _gameobjectBySpawnIdStore;
diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp
index be8494df7eb..4d19c9a8513 100644
--- a/src/server/game/Scripting/ScriptMgr.cpp
+++ b/src/server/game/Scripting/ScriptMgr.cpp
@@ -1008,6 +1008,11 @@ ScriptObject::~ScriptObject()
sScriptMgr->DecreaseScriptCount();
}
+std::string const& ScriptObject::GetName() const
+{
+ return _name;
+}
+
ScriptMgr::ScriptMgr()
: _scriptCount(0), _script_loader_callback(nullptr)
{
@@ -2129,32 +2134,160 @@ SpellScriptLoader::SpellScriptLoader(char const* name)
ScriptRegistry<SpellScriptLoader>::Instance()->AddScript(this);
}
+SpellScript* SpellScriptLoader::GetSpellScript() const
+{
+ return nullptr;
+}
+
+AuraScript* SpellScriptLoader::GetAuraScript() const
+{
+ return nullptr;
+}
+
ServerScript::ServerScript(char const* name)
: ScriptObject(name)
{
ScriptRegistry<ServerScript>::Instance()->AddScript(this);
}
+void ServerScript::OnNetworkStart()
+{
+}
+
+void ServerScript::OnNetworkStop()
+{
+}
+
+void ServerScript::OnSocketOpen(std::shared_ptr<WorldSocket> /*socket*/)
+{
+}
+
+void ServerScript::OnSocketClose(std::shared_ptr<WorldSocket> /*socket*/)
+{
+}
+
+void ServerScript::OnPacketSend(WorldSession* /*session*/, WorldPacket& /*packet*/)
+{
+}
+
+void ServerScript::OnPacketReceive(WorldSession* /*session*/, WorldPacket& /*packet*/)
+{
+}
+
WorldScript::WorldScript(char const* name)
: ScriptObject(name)
{
ScriptRegistry<WorldScript>::Instance()->AddScript(this);
}
+void WorldScript::OnOpenStateChange(bool /*open*/)
+{
+}
+
+void WorldScript::OnConfigLoad(bool /*reload*/)
+{
+}
+
+void WorldScript::OnMotdChange(std::string& /*newMotd*/)
+{
+}
+
+void WorldScript::OnShutdownInitiate(ShutdownExitCode /*code*/, ShutdownMask /*mask*/)
+{
+}
+
+void WorldScript::OnShutdownCancel()
+{
+}
+
+void WorldScript::OnUpdate(uint32 /*diff*/)
+{
+}
+
+void WorldScript::OnStartup()
+{
+}
+
+void WorldScript::OnShutdown()
+{
+}
+
FormulaScript::FormulaScript(char const* name)
: ScriptObject(name)
{
ScriptRegistry<FormulaScript>::Instance()->AddScript(this);
}
-UnitScript::UnitScript(char const* name)
- : ScriptObject(name)
+void FormulaScript::OnHonorCalculation(float& /*honor*/, uint8 /*level*/, float /*multiplier*/)
+{
+}
+
+void FormulaScript::OnGrayLevelCalculation(uint8& /*grayLevel*/, uint8 /*playerLevel*/)
+{
+}
+
+void FormulaScript::OnColorCodeCalculation(XPColorChar& /*color*/, uint8 /*playerLevel*/, uint8 /*mobLevel*/)
+{
+}
+
+void FormulaScript::OnZeroDifferenceCalculation(uint8& /*diff*/, uint8 /*playerLevel*/)
+{
+}
+
+void FormulaScript::OnBaseGainCalculation(uint32& /*gain*/, uint8 /*playerLevel*/, uint8 /*mobLevel*/, ContentLevels /*content*/)
+{
+}
+
+void FormulaScript::OnGainCalculation(uint32& /*gain*/, Player* /*player*/, Unit* /*unit*/)
+{
+}
+
+void FormulaScript::OnGroupRateCalculation(float& /*rate*/, uint32 /*count*/, bool /*isRaid*/)
+{
+}
+
+template <class TMap>
+MapScript<TMap>::MapScript(MapEntry const* mapEntry) : _mapEntry(mapEntry)
+{
+}
+
+template <class TMap>
+MapEntry const* MapScript<TMap>::GetEntry() const
+{
+ return _mapEntry;
+}
+
+template <class TMap>
+void MapScript<TMap>::OnCreate(TMap* /*map*/)
+{
+}
+
+template <class TMap>
+void MapScript<TMap>::OnDestroy(TMap* /*map*/)
+{
+}
+
+template <class TMap>
+void MapScript<TMap>::OnPlayerEnter(TMap* /*map*/, Player* /*player*/)
+{
+}
+
+template <class TMap>
+void MapScript<TMap>::OnPlayerLeave(TMap* /*map*/, Player* /*player*/)
+{
+}
+
+template <class TMap>
+void MapScript<TMap>::OnUpdate(TMap* /*map*/, uint32 /*diff*/)
{
- ScriptRegistry<UnitScript>::Instance()->AddScript(this);
}
+template class TC_GAME_API MapScript<Map>;
+template class TC_GAME_API MapScript<InstanceMap>;
+template class TC_GAME_API MapScript<BattlegroundMap>;
+
WorldMapScript::WorldMapScript(char const* name, uint32 mapId)
- : ScriptObject(name), MapScript<Map>(sMapStore.LookupEntry(mapId))
+ : ScriptObject(name), MapScript(sMapStore.LookupEntry(mapId))
{
if (!GetEntry())
TC_LOG_ERROR("scripts", "Invalid WorldMapScript for %u; no such map ID.", mapId);
@@ -2166,7 +2299,7 @@ WorldMapScript::WorldMapScript(char const* name, uint32 mapId)
}
InstanceMapScript::InstanceMapScript(char const* name, uint32 mapId)
- : ScriptObject(name), MapScript<InstanceMap>(sMapStore.LookupEntry(mapId))
+ : ScriptObject(name), MapScript(sMapStore.LookupEntry(mapId))
{
if (!GetEntry())
TC_LOG_ERROR("scripts", "Invalid InstanceMapScript for %u; no such map ID.", mapId);
@@ -2177,8 +2310,13 @@ InstanceMapScript::InstanceMapScript(char const* name, uint32 mapId)
ScriptRegistry<InstanceMapScript>::Instance()->AddScript(this);
}
+InstanceScript* InstanceMapScript::GetInstanceScript(InstanceMap* /*map*/) const
+{
+ return nullptr;
+}
+
BattlegroundMapScript::BattlegroundMapScript(char const* name, uint32 mapId)
- : ScriptObject(name), MapScript<BattlegroundMap>(sMapStore.LookupEntry(mapId))
+ : ScriptObject(name), MapScript(sMapStore.LookupEntry(mapId))
{
if (!GetEntry())
TC_LOG_ERROR("scripts", "Invalid BattlegroundMapScript for %u; no such map ID.", mapId);
@@ -2195,6 +2333,57 @@ ItemScript::ItemScript(char const* name)
ScriptRegistry<ItemScript>::Instance()->AddScript(this);
}
+bool ItemScript::OnQuestAccept(Player* /*player*/, Item* /*item*/, Quest const* /*quest*/)
+{
+ return false;
+}
+
+bool ItemScript::OnUse(Player* /*player*/, Item* /*item*/, SpellCastTargets const& /*targets*/)
+{
+ return false;
+}
+
+bool ItemScript::OnExpire(Player* /*player*/, ItemTemplate const* /*proto*/)
+{
+ return false;
+}
+
+bool ItemScript::OnRemove(Player* /*player*/, Item* /*item*/)
+{
+ return false;
+}
+
+bool ItemScript::OnCastItemCombatSpell(Player* /*player*/, Unit* /*victim*/, SpellInfo const* /*spellInfo*/, Item* /*item*/)
+{
+ return true;
+}
+
+UnitScript::UnitScript(char const* name)
+ : ScriptObject(name)
+{
+ ScriptRegistry<UnitScript>::Instance()->AddScript(this);
+}
+
+void UnitScript::OnHeal(Unit* /*healer*/, Unit* /*reciever*/, uint32& /*gain*/)
+{
+}
+
+void UnitScript::OnDamage(Unit* /*attacker*/, Unit* /*victim*/, uint32& /*damage*/)
+{
+}
+
+void UnitScript::ModifyPeriodicDamageAurasTick(Unit* /*target*/, Unit* /*attacker*/, uint32& /*damage*/)
+{
+}
+
+void UnitScript::ModifyMeleeDamage(Unit* /*target*/, Unit* /*attacker*/, uint32& /*damage*/)
+{
+}
+
+void UnitScript::ModifySpellDamageTaken(Unit* /*target*/, Unit* /*attacker*/, int32& /*damage*/)
+{
+}
+
CreatureScript::CreatureScript(char const* name)
: ScriptObject(name)
{
@@ -2213,6 +2402,11 @@ AreaTriggerScript::AreaTriggerScript(char const* name)
ScriptRegistry<AreaTriggerScript>::Instance()->AddScript(this);
}
+bool AreaTriggerScript::OnTrigger(Player* /*player*/, AreaTriggerEntry const* /*trigger*/)
+{
+ return false;
+}
+
bool OnlyOnceAreaTriggerScript::OnTrigger(Player* player, AreaTriggerEntry const* trigger)
{
uint32 const triggerId = trigger->ID;
@@ -2225,7 +2419,7 @@ bool OnlyOnceAreaTriggerScript::OnTrigger(Player* player, AreaTriggerEntry const
return true;
}
-void OnlyOnceAreaTriggerScript::ResetAreaTriggerDone(InstanceScript* script, uint32 triggerId) { script->ResetAreaTriggerDone(triggerId); }
+void OnlyOnceAreaTriggerScript::ResetAreaTriggerDone(InstanceScript* instance, uint32 triggerId) { instance->ResetAreaTriggerDone(triggerId); }
void OnlyOnceAreaTriggerScript::ResetAreaTriggerDone(Player const* player, AreaTriggerEntry const* trigger) { if (InstanceScript* instance = player->GetInstanceScript()) ResetAreaTriggerDone(instance, trigger->ID); }
BattlefieldScript::BattlefieldScript(char const* name)
@@ -2258,36 +2452,113 @@ WeatherScript::WeatherScript(char const* name)
ScriptRegistry<WeatherScript>::Instance()->AddScript(this);
}
+void WeatherScript::OnChange(Weather* /*weather*/, WeatherState /*state*/, float /*grade*/)
+{
+}
+
+void WeatherScript::OnUpdate(Weather* /*weather*/, uint32 /*diff*/)
+{
+}
+
AuctionHouseScript::AuctionHouseScript(char const* name)
: ScriptObject(name)
{
ScriptRegistry<AuctionHouseScript>::Instance()->AddScript(this);
}
+void AuctionHouseScript::OnAuctionAdd(AuctionHouseObject* /*ah*/, AuctionEntry* /*entry*/)
+{
+}
+
+void AuctionHouseScript::OnAuctionRemove(AuctionHouseObject* /*ah*/, AuctionEntry* /*entry*/)
+{
+}
+
+void AuctionHouseScript::OnAuctionSuccessful(AuctionHouseObject* /*ah*/, AuctionEntry* /*entry*/)
+{
+}
+
+void AuctionHouseScript::OnAuctionExpire(AuctionHouseObject* /*ah*/, AuctionEntry* /*entry*/)
+{
+}
+
ConditionScript::ConditionScript(char const* name)
: ScriptObject(name)
{
ScriptRegistry<ConditionScript>::Instance()->AddScript(this);
}
+bool ConditionScript::OnConditionCheck(Condition const* /*condition*/, ConditionSourceInfo& /*sourceInfo*/)
+{
+ return true;
+}
+
VehicleScript::VehicleScript(char const* name)
: ScriptObject(name)
{
ScriptRegistry<VehicleScript>::Instance()->AddScript(this);
}
+void VehicleScript::OnInstall(Vehicle* /*veh*/)
+{
+}
+
+void VehicleScript::OnUninstall(Vehicle* /*veh*/)
+{
+}
+
+void VehicleScript::OnReset(Vehicle* /*veh*/)
+{
+}
+
+void VehicleScript::OnInstallAccessory(Vehicle* /*veh*/, Creature* /*accessory*/)
+{
+}
+
+void VehicleScript::OnAddPassenger(Vehicle* /*veh*/, Unit* /*passenger*/, int8 /*seatId*/)
+{
+}
+
+void VehicleScript::OnRemovePassenger(Vehicle* /*veh*/, Unit* /*passenger*/)
+{
+}
+
DynamicObjectScript::DynamicObjectScript(char const* name)
: ScriptObject(name)
{
ScriptRegistry<DynamicObjectScript>::Instance()->AddScript(this);
}
+void DynamicObjectScript::OnUpdate(DynamicObject* /*obj*/, uint32 /*diff*/)
+{
+}
+
TransportScript::TransportScript(char const* name)
: ScriptObject(name)
{
ScriptRegistry<TransportScript>::Instance()->AddScript(this);
}
+void TransportScript::OnAddPassenger(Transport* /*transport*/, Player* /*player*/)
+{
+}
+
+void TransportScript::OnAddCreaturePassenger(Transport* /*transport*/, Creature* /*creature*/)
+{
+}
+
+void TransportScript::OnRemovePassenger(Transport* /*transport*/, Player* /*player*/)
+{
+}
+
+void TransportScript::OnRelocate(Transport* /*transport*/, uint32 /*waypointId*/, uint32 /*mapId*/, float /*x*/, float /*y*/, float /*z*/)
+{
+}
+
+void TransportScript::OnUpdate(Transport* /*transport*/, uint32 /*diff*/)
+{
+}
+
AchievementCriteriaScript::AchievementCriteriaScript(char const* name)
: ScriptObject(name)
{
@@ -2300,24 +2571,246 @@ PlayerScript::PlayerScript(char const* name)
ScriptRegistry<PlayerScript>::Instance()->AddScript(this);
}
+void PlayerScript::OnPVPKill(Player* /*killer*/, Player* /*killed*/)
+{
+}
+
+void PlayerScript::OnCreatureKill(Player* /*killer*/, Creature* /*killed*/)
+{
+}
+
+void PlayerScript::OnPlayerKilledByCreature(Creature* /*killer*/, Player* /*killed*/)
+{
+}
+
+void PlayerScript::OnLevelChanged(Player* /*player*/, uint8 /*oldLevel*/)
+{
+}
+
+void PlayerScript::OnFreeTalentPointsChanged(Player* /*player*/, uint32 /*points*/)
+{
+}
+
+void PlayerScript::OnTalentsReset(Player* /*player*/, bool /*noCost*/)
+{
+}
+
+void PlayerScript::OnMoneyChanged(Player* /*player*/, int32& /*amount*/)
+{
+}
+
+void PlayerScript::OnMoneyLimit(Player* /*player*/, int32 /*amount*/)
+{
+}
+
+void PlayerScript::OnGiveXP(Player* /*player*/, uint32& /*amount*/, Unit* /*victim*/)
+{
+}
+
+void PlayerScript::OnReputationChange(Player* /*player*/, uint32 /*factionId*/, int32& /*standing*/, bool /*incremental*/)
+{
+}
+
+void PlayerScript::OnDuelRequest(Player* /*target*/, Player* /*challenger*/)
+{
+}
+
+void PlayerScript::OnDuelStart(Player* /*player1*/, Player* /*player2*/)
+{
+}
+
+void PlayerScript::OnDuelEnd(Player* /*winner*/, Player* /*loser*/, DuelCompleteType /*type*/)
+{
+}
+
+void PlayerScript::OnChat(Player* /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string& /*msg*/)
+{
+}
+
+void PlayerScript::OnChat(Player* /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string& /*msg*/, Player* /*receiver*/)
+{
+}
+
+void PlayerScript::OnChat(Player* /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string& /*msg*/, Group* /*group*/)
+{
+}
+
+void PlayerScript::OnChat(Player* /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string& /*msg*/, Guild* /*guild*/)
+{
+}
+
+void PlayerScript::OnChat(Player* /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string& /*msg*/, Channel* /*channel*/)
+{
+}
+
+void PlayerScript::OnEmote(Player* /*player*/, Emote /*emote*/)
+{
+}
+
+void PlayerScript::OnTextEmote(Player* /*player*/, uint32 /*textEmote*/, uint32 /*emoteNum*/, ObjectGuid /*guid*/)
+{
+}
+
+void PlayerScript::OnSpellCast(Player* /*player*/, Spell* /*spell*/, bool /*skipCheck*/)
+{
+}
+
+void PlayerScript::OnLogin(Player* /*player*/, bool /*firstLogin*/)
+{
+}
+
+void PlayerScript::OnLogout(Player* /*player*/)
+{
+}
+
+void PlayerScript::OnCreate(Player* /*player*/)
+{
+}
+
+void PlayerScript::OnDelete(ObjectGuid /*guid*/, uint32 /*accountId*/)
+{
+}
+
+void PlayerScript::OnFailedDelete(ObjectGuid /*guid*/, uint32 /*accountId*/)
+{
+}
+
+void PlayerScript::OnSave(Player* /*player*/)
+{
+}
+
+void PlayerScript::OnBindToInstance(Player* /*player*/, Difficulty /*difficulty*/, uint32 /*mapId*/, bool /*permanent*/, uint8 /*extendState*/)
+{
+}
+
+void PlayerScript::OnUpdateZone(Player* /*player*/, uint32 /*newZone*/, uint32 /*newArea*/)
+{
+}
+
+void PlayerScript::OnMapChanged(Player* /*player*/)
+{
+}
+
+void PlayerScript::OnQuestStatusChange(Player* /*player*/, uint32 /*questId*/)
+{
+}
+
+void PlayerScript::OnPlayerRepop(Player* /*player*/)
+{
+}
+
+void PlayerScript::OnMovieComplete(Player* /*player*/, uint32 /*movieId*/)
+{
+}
+
AccountScript::AccountScript(char const* name)
: ScriptObject(name)
{
ScriptRegistry<AccountScript>::Instance()->AddScript(this);
}
+void AccountScript::OnAccountLogin(uint32 /*accountId*/)
+{
+}
+
+void AccountScript::OnFailedAccountLogin(uint32 /*accountId*/)
+{
+}
+
+void AccountScript::OnEmailChange(uint32 /*accountId*/)
+{
+}
+
+void AccountScript::OnFailedEmailChange(uint32 /*accountId*/)
+{
+}
+
+void AccountScript::OnPasswordChange(uint32 /*accountId*/)
+{
+}
+
+void AccountScript::OnFailedPasswordChange(uint32 /*accountId*/)
+{
+}
+
GuildScript::GuildScript(char const* name)
: ScriptObject(name)
{
ScriptRegistry<GuildScript>::Instance()->AddScript(this);
}
+void GuildScript::OnAddMember(Guild* /*guild*/, Player* /*player*/, uint8& /*plRank*/)
+{
+}
+
+void GuildScript::OnRemoveMember(Guild* /*guild*/, Player* /*player*/, bool /*isDisbanding*/, bool /*isKicked*/)
+{
+}
+
+void GuildScript::OnMOTDChanged(Guild* /*guild*/, std::string const& /*newMotd*/)
+{
+}
+
+void GuildScript::OnInfoChanged(Guild* /*guild*/, std::string const& /*newInfo*/)
+{
+}
+
+void GuildScript::OnCreate(Guild* /*guild*/, Player* /*leader*/, std::string const& /*name*/)
+{
+}
+
+void GuildScript::OnDisband(Guild* /*guild*/)
+{
+}
+
+void GuildScript::OnMemberWitdrawMoney(Guild* /*guild*/, Player* /*player*/, uint32& /*amount*/, bool /*isRepair*/)
+{
+}
+
+void GuildScript::OnMemberDepositMoney(Guild* /*guild*/, Player* /*player*/, uint32& /*amount*/)
+{
+}
+
+void GuildScript::OnItemMove(Guild* /*guild*/, Player* /*player*/, Item* /*pItem*/, bool /*isSrcBank*/, uint8 /*srcContainer*/, uint8 /*srcSlotId*/, bool /*isDestBank*/,
+ uint8 /*destContainer*/, uint8 /*destSlotId*/)
+{
+}
+
+void GuildScript::OnEvent(Guild* /*guild*/, uint8 /*eventType*/, ObjectGuid::LowType /*playerGuid1*/, ObjectGuid::LowType /*playerGuid2*/, uint8 /*newRank*/)
+{
+}
+
+void GuildScript::OnBankEvent(Guild* /*guild*/, uint8 /*eventType*/, uint8 /*tabId*/, ObjectGuid::LowType /*playerGuid*/, uint32 /*itemOrMoney*/, uint16 /*itemStackCount*/,
+ uint8 /*destTabId*/)
+{
+}
+
GroupScript::GroupScript(char const* name)
: ScriptObject(name)
{
ScriptRegistry<GroupScript>::Instance()->AddScript(this);
}
+void GroupScript::OnAddMember(Group* /*group*/, ObjectGuid /*guid*/)
+{
+}
+
+void GroupScript::OnInviteMember(Group* /*group*/, ObjectGuid /*guid*/)
+{
+}
+
+void GroupScript::OnRemoveMember(Group* /*group*/, ObjectGuid /*guid*/, RemoveMethod /*method*/, ObjectGuid /*kicker*/, char const* /*reason*/)
+{
+}
+
+void GroupScript::OnChangeLeader(Group* /*group*/, ObjectGuid /*newLeaderGuid*/, ObjectGuid /*oldLeaderGuid*/)
+{
+}
+
+void GroupScript::OnDisband(Group* /*group*/)
+{
+}
+
// Specialize for each script type class like so:
template class TC_GAME_API ScriptRegistry<SpellScriptLoader>;
template class TC_GAME_API ScriptRegistry<ServerScript>;
diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h
index b0f641b80e4..d43b8e1c8b8 100644
--- a/src/server/game/Scripting/ScriptMgr.h
+++ b/src/server/game/Scripting/ScriptMgr.h
@@ -22,6 +22,7 @@
#include "ObjectGuid.h"
#include "Tuples.h"
#include "Types.h"
+#include <memory>
#include <vector>
class AccountMgr;
@@ -172,7 +173,7 @@ class TC_GAME_API ScriptObject
public:
- const std::string& GetName() const { return _name; }
+ std::string const& GetName() const;
protected:
@@ -181,150 +182,136 @@ class TC_GAME_API ScriptObject
private:
- const std::string _name;
-};
-
-template<class TObject> class UpdatableScript
-{
- protected:
-
- UpdatableScript()
- {
- }
-
- virtual ~UpdatableScript() { }
-
- public:
-
- virtual void OnUpdate(TObject* /*obj*/, uint32 /*diff*/) { }
+ std::string const _name;
};
class TC_GAME_API SpellScriptLoader : public ScriptObject
{
protected:
- SpellScriptLoader(char const* name);
+ explicit SpellScriptLoader(char const* name);
public:
// Should return a fully valid SpellScript pointer.
- virtual SpellScript* GetSpellScript() const { return nullptr; }
+ virtual SpellScript* GetSpellScript() const;
// Should return a fully valid AuraScript pointer.
- virtual AuraScript* GetAuraScript() const { return nullptr; }
+ virtual AuraScript* GetAuraScript() const;
};
class TC_GAME_API ServerScript : public ScriptObject
{
protected:
- ServerScript(char const* name);
+ explicit ServerScript(char const* name);
public:
// Called when reactive socket I/O is started (WorldTcpSessionMgr).
- virtual void OnNetworkStart() { }
+ virtual void OnNetworkStart();
// Called when reactive I/O is stopped.
- virtual void OnNetworkStop() { }
+ virtual void OnNetworkStop();
// Called when a remote socket establishes a connection to the server. Do not store the socket object.
- virtual void OnSocketOpen(std::shared_ptr<WorldSocket> /*socket*/) { }
+ virtual void OnSocketOpen(std::shared_ptr<WorldSocket> socket);
// Called when a socket is closed. Do not store the socket object, and do not rely on the connection
// being open; it is not.
- virtual void OnSocketClose(std::shared_ptr<WorldSocket> /*socket*/) { }
+ virtual void OnSocketClose(std::shared_ptr<WorldSocket> socket);
// Called when a packet is sent to a client. The packet object is a copy of the original packet, so reading
// and modifying it is safe.
- virtual void OnPacketSend(WorldSession* /*session*/, WorldPacket& /*packet*/) { }
+ virtual void OnPacketSend(WorldSession* session, WorldPacket& packet);
// Called when a (valid) packet is received by a client. The packet object is a copy of the original packet, so
// reading and modifying it is safe. Make sure to check WorldSession pointer before usage, it might be null in case of auth packets
- virtual void OnPacketReceive(WorldSession* /*session*/, WorldPacket& /*packet*/) { }
+ virtual void OnPacketReceive(WorldSession* session, WorldPacket& packet);
};
class TC_GAME_API WorldScript : public ScriptObject
{
protected:
- WorldScript(char const* name);
+ explicit WorldScript(char const* name);
public:
// Called when the open/closed state of the world changes.
- virtual void OnOpenStateChange(bool /*open*/) { }
+ virtual void OnOpenStateChange(bool open);
// Called after the world configuration is (re)loaded.
- virtual void OnConfigLoad(bool /*reload*/) { }
+ virtual void OnConfigLoad(bool reload);
// Called before the message of the day is changed.
- virtual void OnMotdChange(std::string& /*newMotd*/) { }
+ virtual void OnMotdChange(std::string& newMotd);
// Called when a world shutdown is initiated.
- virtual void OnShutdownInitiate(ShutdownExitCode /*code*/, ShutdownMask /*mask*/) { }
+ virtual void OnShutdownInitiate(ShutdownExitCode code, ShutdownMask mask);
// Called when a world shutdown is cancelled.
- virtual void OnShutdownCancel() { }
+ virtual void OnShutdownCancel();
// Called on every world tick (don't execute too heavy code here).
- virtual void OnUpdate(uint32 /*diff*/) { }
+ virtual void OnUpdate(uint32 diff);
// Called when the world is started.
- virtual void OnStartup() { }
+ virtual void OnStartup();
// Called when the world is actually shut down.
- virtual void OnShutdown() { }
+ virtual void OnShutdown();
};
class TC_GAME_API FormulaScript : public ScriptObject
{
protected:
- FormulaScript(char const* name);
+ explicit FormulaScript(char const* name);
public:
// Called after calculating honor.
- virtual void OnHonorCalculation(float& /*honor*/, uint8 /*level*/, float /*multiplier*/) { }
+ virtual void OnHonorCalculation(float& honor, uint8 level, float multiplier);
// Called after gray level calculation.
- virtual void OnGrayLevelCalculation(uint8& /*grayLevel*/, uint8 /*playerLevel*/) { }
+ virtual void OnGrayLevelCalculation(uint8& grayLevel, uint8 playerLevel);
// Called after calculating experience color.
- virtual void OnColorCodeCalculation(XPColorChar& /*color*/, uint8 /*playerLevel*/, uint8 /*mobLevel*/) { }
+ virtual void OnColorCodeCalculation(XPColorChar& color, uint8 playerLevel, uint8 mobLevel);
// Called after calculating zero difference.
- virtual void OnZeroDifferenceCalculation(uint8& /*diff*/, uint8 /*playerLevel*/) { }
+ virtual void OnZeroDifferenceCalculation(uint8& diff, uint8 playerLevel);
// Called after calculating base experience gain.
- virtual void OnBaseGainCalculation(uint32& /*gain*/, uint8 /*playerLevel*/, uint8 /*mobLevel*/, ContentLevels /*content*/) { }
+ virtual void OnBaseGainCalculation(uint32& gain, uint8 playerLevel, uint8 mobLevel, ContentLevels content);
// Called after calculating experience gain.
- virtual void OnGainCalculation(uint32& /*gain*/, Player* /*player*/, Unit* /*unit*/) { }
+ virtual void OnGainCalculation(uint32& gain, Player* player, Unit* unit);
// Called when calculating the experience rate for group experience.
- virtual void OnGroupRateCalculation(float& /*rate*/, uint32 /*count*/, bool /*isRaid*/) { }
+ virtual void OnGroupRateCalculation(float& rate, uint32 count, bool isRaid);
};
-template<class TMap> class MapScript : public UpdatableScript<TMap>
+template<class TMap>
+class TC_GAME_API MapScript
{
- MapEntry const* _mapEntry;
+ MapEntry const* _mapEntry;
protected:
- MapScript(MapEntry const* mapEntry) : _mapEntry(mapEntry) { }
+ explicit MapScript(MapEntry const* mapEntry);
public:
// Gets the MapEntry structure associated with this script. Can return NULL.
- MapEntry const* GetEntry() { return _mapEntry; }
+ MapEntry const* GetEntry() const;
// Called when the map is created.
- virtual void OnCreate(TMap* /*map*/) { }
+ virtual void OnCreate(TMap* map);
// Called just before the map is destroyed.
- virtual void OnDestroy(TMap* /*map*/) { }
+ virtual void OnDestroy(TMap* map);
// Called when a grid map is loaded.
virtual void OnLoadGridMap(TMap* /*map*/, GridMap* /*gmap*/, uint32 /*gx*/, uint32 /*gy*/) { }
@@ -333,119 +320,120 @@ template<class TMap> class MapScript : public UpdatableScript<TMap>
virtual void OnUnloadGridMap(TMap* /*map*/, GridMap* /*gmap*/, uint32 /*gx*/, uint32 /*gy*/) { }
// Called when a player enters the map.
- virtual void OnPlayerEnter(TMap* /*map*/, Player* /*player*/) { }
+ virtual void OnPlayerEnter(TMap* map, Player* player);
// Called when a player leaves the map.
- virtual void OnPlayerLeave(TMap* /*map*/, Player* /*player*/) { }
+ virtual void OnPlayerLeave(TMap* map, Player* player);
+
+ virtual void OnUpdate(TMap* map, uint32 diff);
};
class TC_GAME_API WorldMapScript : public ScriptObject, public MapScript<Map>
{
protected:
- WorldMapScript(char const* name, uint32 mapId);
+ explicit WorldMapScript(char const* name, uint32 mapId);
};
-class TC_GAME_API InstanceMapScript
- : public ScriptObject, public MapScript<InstanceMap>
+class TC_GAME_API InstanceMapScript : public ScriptObject, public MapScript<InstanceMap>
{
protected:
- InstanceMapScript(char const* name, uint32 mapId);
+ explicit InstanceMapScript(char const* name, uint32 mapId);
public:
// Gets an InstanceScript object for this instance.
- virtual InstanceScript* GetInstanceScript(InstanceMap* /*map*/) const { return nullptr; }
+ virtual InstanceScript* GetInstanceScript(InstanceMap* map) const;
};
class TC_GAME_API BattlegroundMapScript : public ScriptObject, public MapScript<BattlegroundMap>
{
protected:
- BattlegroundMapScript(char const* name, uint32 mapId);
+ explicit BattlegroundMapScript(char const* name, uint32 mapId);
};
class TC_GAME_API ItemScript : public ScriptObject
{
protected:
- ItemScript(char const* name);
+ explicit ItemScript(char const* name);
public:
// Called when a player accepts a quest from the item.
- virtual bool OnQuestAccept(Player* /*player*/, Item* /*item*/, Quest const* /*quest*/) { return false; }
+ virtual bool OnQuestAccept(Player* player, Item* item, Quest const* quest);
// Called when a player uses the item.
- virtual bool OnUse(Player* /*player*/, Item* /*item*/, SpellCastTargets const& /*targets*/) { return false; }
+ virtual bool OnUse(Player* player, Item* item, SpellCastTargets const& targets);
// Called when the item expires (is destroyed).
- virtual bool OnExpire(Player* /*player*/, ItemTemplate const* /*proto*/) { return false; }
+ virtual bool OnExpire(Player* player, ItemTemplate const* proto);
// Called when the item is destroyed.
- virtual bool OnRemove(Player* /*player*/, Item* /*item*/) { return false; }
+ virtual bool OnRemove(Player* player, Item* item);
// Called before casting a combat spell from this item (chance on hit spells of item template, can be used to prevent cast if returning false)
- virtual bool OnCastItemCombatSpell(Player* /*player*/, Unit* /*victim*/, SpellInfo const* /*spellInfo*/, Item* /*item*/) { return true; }
+ virtual bool OnCastItemCombatSpell(Player* player, Unit* victim, SpellInfo const* spellInfo, Item* item);
};
class TC_GAME_API UnitScript : public ScriptObject
{
protected:
- UnitScript(char const* name);
+ explicit UnitScript(char const* name);
public:
// Called when a unit deals healing to another unit
- virtual void OnHeal(Unit* /*healer*/, Unit* /*reciever*/, uint32& /*gain*/) { }
+ virtual void OnHeal(Unit* healer, Unit* reciever, uint32& gain);
// Called when a unit deals damage to another unit
- virtual void OnDamage(Unit* /*attacker*/, Unit* /*victim*/, uint32& /*damage*/) { }
+ virtual void OnDamage(Unit* attacker, Unit* victim, uint32& damage);
// Called when DoT's Tick Damage is being Dealt
- virtual void ModifyPeriodicDamageAurasTick(Unit* /*target*/, Unit* /*attacker*/, uint32& /*damage*/) { }
+ virtual void ModifyPeriodicDamageAurasTick(Unit* target, Unit* attacker, uint32& damage);
// Called when Melee Damage is being Dealt
- virtual void ModifyMeleeDamage(Unit* /*target*/, Unit* /*attacker*/, uint32& /*damage*/) { }
+ virtual void ModifyMeleeDamage(Unit* target, Unit* attacker, uint32& damage);
// Called when Spell Damage is being Dealt
- virtual void ModifySpellDamageTaken(Unit* /*target*/, Unit* /*attacker*/, int32& /*damage*/) { }
+ virtual void ModifySpellDamageTaken(Unit* target, Unit* attacker, int32& damage);
};
class TC_GAME_API CreatureScript : public ScriptObject
{
protected:
- CreatureScript(char const* name);
+ explicit CreatureScript(char const* name);
public:
// Called when a CreatureAI object is needed for the creature.
- virtual CreatureAI* GetAI(Creature* /*creature*/) const = 0;
+ virtual CreatureAI* GetAI(Creature* creature) const = 0;
};
class TC_GAME_API GameObjectScript : public ScriptObject
{
protected:
- GameObjectScript(char const* name);
+ explicit GameObjectScript(char const* name);
public:
// Called when a GameObjectAI object is needed for the gameobject.
- virtual GameObjectAI* GetAI(GameObject* /*go*/) const = 0;
+ virtual GameObjectAI* GetAI(GameObject* go) const = 0;
};
class TC_GAME_API AreaTriggerScript : public ScriptObject
{
protected:
- AreaTriggerScript(char const* name);
+ explicit AreaTriggerScript(char const* name);
public:
// Called when the area trigger is activated by a player.
- virtual bool OnTrigger(Player* /*player*/, AreaTriggerEntry const* /*trigger*/) { return false; }
+ virtual bool OnTrigger(Player* player, AreaTriggerEntry const* trigger);
};
class TC_GAME_API OnlyOnceAreaTriggerScript : public AreaTriggerScript
@@ -457,16 +445,16 @@ class TC_GAME_API OnlyOnceAreaTriggerScript : public AreaTriggerScript
protected:
// returns true if the trigger was successfully handled, false if we should try again next time
- virtual bool TryHandleOnce(Player* /*player*/, AreaTriggerEntry const* /*trigger*/) = 0;
- void ResetAreaTriggerDone(InstanceScript* /*instance*/, uint32 /*triggerId*/);
- void ResetAreaTriggerDone(Player const* /*player*/, AreaTriggerEntry const* /*trigger*/);
+ virtual bool TryHandleOnce(Player* player, AreaTriggerEntry const* trigger) = 0;
+ void ResetAreaTriggerDone(InstanceScript* instance, uint32 triggerId);
+ void ResetAreaTriggerDone(Player const* player, AreaTriggerEntry const* trigger);
};
class TC_GAME_API BattlefieldScript : public ScriptObject
{
protected:
- BattlefieldScript(char const* name);
+ explicit BattlefieldScript(char const* name);
public:
@@ -477,7 +465,7 @@ class TC_GAME_API BattlegroundScript : public ScriptObject
{
protected:
- BattlegroundScript(char const* name);
+ explicit BattlegroundScript(char const* name);
public:
@@ -489,7 +477,7 @@ class TC_GAME_API OutdoorPvPScript : public ScriptObject
{
protected:
- OutdoorPvPScript(char const* name);
+ explicit OutdoorPvPScript(char const* name);
public:
@@ -501,7 +489,7 @@ class TC_GAME_API CommandScript : public ScriptObject
{
protected:
- CommandScript(char const* name);
+ explicit CommandScript(char const* name);
public:
@@ -509,111 +497,119 @@ class TC_GAME_API CommandScript : public ScriptObject
virtual std::vector<Trinity::ChatCommands::ChatCommandBuilder> GetCommands() const = 0;
};
-class TC_GAME_API WeatherScript : public ScriptObject, public UpdatableScript<Weather>
+class TC_GAME_API WeatherScript : public ScriptObject
{
protected:
- WeatherScript(char const* name);
+ explicit WeatherScript(char const* name);
public:
// Called when the weather changes in the zone this script is associated with.
- virtual void OnChange(Weather* /*weather*/, WeatherState /*state*/, float /*grade*/) { }
+ virtual void OnChange(Weather* weather, WeatherState state, float grade);
+
+ virtual void OnUpdate(Weather* weather, uint32 diff);
};
class TC_GAME_API AuctionHouseScript : public ScriptObject
{
protected:
- AuctionHouseScript(char const* name);
+ explicit AuctionHouseScript(char const* name);
public:
// Called when an auction is added to an auction house.
- virtual void OnAuctionAdd(AuctionHouseObject* /*ah*/, AuctionEntry* /*entry*/) { }
+ virtual void OnAuctionAdd(AuctionHouseObject* ah, AuctionEntry* entry);
// Called when an auction is removed from an auction house.
- virtual void OnAuctionRemove(AuctionHouseObject* /*ah*/, AuctionEntry* /*entry*/) { }
+ virtual void OnAuctionRemove(AuctionHouseObject* ah, AuctionEntry* entry);
// Called when an auction was succesfully completed.
- virtual void OnAuctionSuccessful(AuctionHouseObject* /*ah*/, AuctionEntry* /*entry*/) { }
+ virtual void OnAuctionSuccessful(AuctionHouseObject* ah, AuctionEntry* entry);
// Called when an auction expires.
- virtual void OnAuctionExpire(AuctionHouseObject* /*ah*/, AuctionEntry* /*entry*/) { }
+ virtual void OnAuctionExpire(AuctionHouseObject* ah, AuctionEntry* entry);
};
class TC_GAME_API ConditionScript : public ScriptObject
{
protected:
- ConditionScript(char const* name);
+ explicit ConditionScript(char const* name);
public:
// Called when a single condition is checked for a player.
- virtual bool OnConditionCheck(Condition const* /*condition*/, ConditionSourceInfo& /*sourceInfo*/) { return true; }
+ virtual bool OnConditionCheck(Condition const* condition, ConditionSourceInfo& sourceInfo);
};
class TC_GAME_API VehicleScript : public ScriptObject
{
protected:
- VehicleScript(char const* name);
+ explicit VehicleScript(char const* name);
public:
// Called after a vehicle is installed.
- virtual void OnInstall(Vehicle* /*veh*/) { }
+ virtual void OnInstall(Vehicle* veh);
// Called after a vehicle is uninstalled.
- virtual void OnUninstall(Vehicle* /*veh*/) { }
+ virtual void OnUninstall(Vehicle* veh);
// Called when a vehicle resets.
- virtual void OnReset(Vehicle* /*veh*/) { }
+ virtual void OnReset(Vehicle* veh);
// Called after an accessory is installed in a vehicle.
- virtual void OnInstallAccessory(Vehicle* /*veh*/, Creature* /*accessory*/) { }
+ virtual void OnInstallAccessory(Vehicle* veh, Creature* accessory);
// Called after a passenger is added to a vehicle.
- virtual void OnAddPassenger(Vehicle* /*veh*/, Unit* /*passenger*/, int8 /*seatId*/) { }
+ virtual void OnAddPassenger(Vehicle* veh, Unit* passenger, int8 seatId);
// Called after a passenger is removed from a vehicle.
- virtual void OnRemovePassenger(Vehicle* /*veh*/, Unit* /*passenger*/) { }
+ virtual void OnRemovePassenger(Vehicle* veh, Unit* passenger);
};
-class TC_GAME_API DynamicObjectScript : public ScriptObject, public UpdatableScript<DynamicObject>
+class TC_GAME_API DynamicObjectScript : public ScriptObject
{
protected:
- DynamicObjectScript(char const* name);
+ explicit DynamicObjectScript(char const* name);
+
+ public:
+
+ virtual void OnUpdate(DynamicObject* obj, uint32 diff);
};
-class TC_GAME_API TransportScript : public ScriptObject, public UpdatableScript<Transport>
+class TC_GAME_API TransportScript : public ScriptObject
{
protected:
- TransportScript(char const* name);
+ explicit TransportScript(char const* name);
public:
// Called when a player boards the transport.
- virtual void OnAddPassenger(Transport* /*transport*/, Player* /*player*/) { }
+ virtual void OnAddPassenger(Transport* transport, Player* player);
// Called when a creature boards the transport.
- virtual void OnAddCreaturePassenger(Transport* /*transport*/, Creature* /*creature*/) { }
+ virtual void OnAddCreaturePassenger(Transport* transport, Creature* creature);
// Called when a player exits the transport.
- virtual void OnRemovePassenger(Transport* /*transport*/, Player* /*player*/) { }
+ virtual void OnRemovePassenger(Transport* transport, Player* player);
// Called when a transport moves.
- virtual void OnRelocate(Transport* /*transport*/, uint32 /*waypointId*/, uint32 /*mapId*/, float /*x*/, float /*y*/, float /*z*/) { }
+ virtual void OnRelocate(Transport* transport, uint32 waypointId, uint32 mapId, float x, float y, float z);
+
+ virtual void OnUpdate(Transport* transport, uint32 diff);
};
class TC_GAME_API AchievementCriteriaScript : public ScriptObject
{
protected:
- AchievementCriteriaScript(char const* name);
+ explicit AchievementCriteriaScript(char const* name);
public:
@@ -625,198 +621,199 @@ class TC_GAME_API PlayerScript : public ScriptObject
{
protected:
- PlayerScript(char const* name);
+ explicit PlayerScript(char const* name);
public:
// Called when a player kills another player
- virtual void OnPVPKill(Player* /*killer*/, Player* /*killed*/) { }
+ virtual void OnPVPKill(Player* killer, Player* killed);
// Called when a player kills a creature
- virtual void OnCreatureKill(Player* /*killer*/, Creature* /*killed*/) { }
+ virtual void OnCreatureKill(Player* killer, Creature* killed);
// Called when a player is killed by a creature
- virtual void OnPlayerKilledByCreature(Creature* /*killer*/, Player* /*killed*/) { }
+ virtual void OnPlayerKilledByCreature(Creature* killer, Player* killed);
// Called when a player's level changes (after the level is applied)
- virtual void OnLevelChanged(Player* /*player*/, uint8 /*oldLevel*/) { }
+ virtual void OnLevelChanged(Player* player, uint8 oldLevel);
// Called when a player's free talent points change (right before the change is applied)
- virtual void OnFreeTalentPointsChanged(Player* /*player*/, uint32 /*points*/) { }
+ virtual void OnFreeTalentPointsChanged(Player* player, uint32 points);
// Called when a player's talent points are reset (right before the reset is done)
- virtual void OnTalentsReset(Player* /*player*/, bool /*noCost*/) { }
+ virtual void OnTalentsReset(Player* player, bool noCost);
// Called when a player's money is modified (before the modification is done)
- virtual void OnMoneyChanged(Player* /*player*/, int32& /*amount*/) { }
+ virtual void OnMoneyChanged(Player* player, int32& amount);
// Called when a player's money is at limit (amount = money tried to add)
- virtual void OnMoneyLimit(Player* /*player*/, int32 /*amount*/) { }
+ virtual void OnMoneyLimit(Player* player, int32 amount);
// Called when a player gains XP (before anything is given)
- virtual void OnGiveXP(Player* /*player*/, uint32& /*amount*/, Unit* /*victim*/) { }
+ virtual void OnGiveXP(Player* player, uint32& amount, Unit* victim);
// Called when a player's reputation changes (before it is actually changed)
- virtual void OnReputationChange(Player* /*player*/, uint32 /*factionId*/, int32& /*standing*/, bool /*incremental*/) { }
+ virtual void OnReputationChange(Player* player, uint32 factionId, int32& standing, bool incremental);
// Called when a duel is requested
- virtual void OnDuelRequest(Player* /*target*/, Player* /*challenger*/) { }
+ virtual void OnDuelRequest(Player* target, Player* challenger);
// Called when a duel starts (after 3s countdown)
- virtual void OnDuelStart(Player* /*player1*/, Player* /*player2*/) { }
+ virtual void OnDuelStart(Player* player1, Player* player2);
// Called when a duel ends
- virtual void OnDuelEnd(Player* /*winner*/, Player* /*loser*/, DuelCompleteType /*type*/) { }
+ virtual void OnDuelEnd(Player* winner, Player* loser, DuelCompleteType type);
// The following methods are called when a player sends a chat message.
- virtual void OnChat(Player* /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string& /*msg*/) { }
+ virtual void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg);
- virtual void OnChat(Player* /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string& /*msg*/, Player* /*receiver*/) { }
+ virtual void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg, Player* receiver);
- virtual void OnChat(Player* /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string& /*msg*/, Group* /*group*/) { }
+ virtual void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg, Group* group);
- virtual void OnChat(Player* /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string& /*msg*/, Guild* /*guild*/) { }
+ virtual void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg, Guild* guild);
- virtual void OnChat(Player* /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string& /*msg*/, Channel* /*channel*/) { }
+ virtual void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg, Channel* channel);
// Both of the below are called on emote opcodes.
- virtual void OnEmote(Player* /*player*/, Emote /*emote*/) { }
+ virtual void OnEmote(Player* player, Emote emote);
- virtual void OnTextEmote(Player* /*player*/, uint32 /*textEmote*/, uint32 /*emoteNum*/, ObjectGuid /*guid*/) { }
+ virtual void OnTextEmote(Player* player, uint32 textEmote, uint32 emoteNum, ObjectGuid guid);
// Called in Spell::Cast.
- virtual void OnSpellCast(Player* /*player*/, Spell* /*spell*/, bool /*skipCheck*/) { }
+ virtual void OnSpellCast(Player* player, Spell* spell, bool skipCheck);
// Called when a player logs in.
- virtual void OnLogin(Player* /*player*/, bool /*firstLogin*/) { }
+ virtual void OnLogin(Player* player, bool firstLogin);
// Called when a player logs out.
- virtual void OnLogout(Player* /*player*/) { }
+ virtual void OnLogout(Player* player);
// Called when a player is created.
- virtual void OnCreate(Player* /*player*/) { }
+ virtual void OnCreate(Player* player);
// Called when a player is deleted.
- virtual void OnDelete(ObjectGuid /*guid*/, uint32 /*accountId*/) { }
+ virtual void OnDelete(ObjectGuid guid, uint32 accountId);
// Called when a player delete failed
- virtual void OnFailedDelete(ObjectGuid /*guid*/, uint32 /*accountId*/) { }
+ virtual void OnFailedDelete(ObjectGuid guid, uint32 accountId);
// Called when a player is about to be saved.
- virtual void OnSave(Player* /*player*/) { }
+ virtual void OnSave(Player* player);
// Called when a player is bound to an instance
- virtual void OnBindToInstance(Player* /*player*/, Difficulty /*difficulty*/, uint32 /*mapId*/, bool /*permanent*/, uint8 /*extendState*/) { }
+ virtual void OnBindToInstance(Player* player, Difficulty difficulty, uint32 mapId, bool permanent, uint8 extendState);
// Called when a player switches to a new zone
- virtual void OnUpdateZone(Player* /*player*/, uint32 /*newZone*/, uint32 /*newArea*/) { }
+ virtual void OnUpdateZone(Player* player, uint32 newZone, uint32 newArea);
// Called when a player changes to a new map (after moving to new map)
- virtual void OnMapChanged(Player* /*player*/) { }
+ virtual void OnMapChanged(Player* player);
// Called when a player obtains progress on a quest's objective
virtual void OnQuestObjectiveProgress(Player* /*player*/, Quest const* /*quest*/, uint32 /*objectiveIndex*/, uint16 /*progress*/) { }
// Called after a player's quest status has been changed
- virtual void OnQuestStatusChange(Player* /*player*/, uint32 /*questId*/) { }
+ virtual void OnQuestStatusChange(Player* player, uint32 questId);
+
+ // Called when a player presses release when he died
+ virtual void OnPlayerRepop(Player* player);
// Called when a player completes a movie
- virtual void OnMovieComplete(Player* /*player*/, uint32 /*movieId*/) { }
+ virtual void OnMovieComplete(Player* player, uint32 movieId);
- // Called when a player presses release when he died
- virtual void OnPlayerRepop(Player* /*player*/) { }
};
class TC_GAME_API AccountScript : public ScriptObject
{
protected:
- AccountScript(char const* name);
+ explicit AccountScript(char const* name);
public:
// Called when an account logged in succesfully
- virtual void OnAccountLogin(uint32 /*accountId*/) {}
+ virtual void OnAccountLogin(uint32 accountId);
// Called when an account login failed
- virtual void OnFailedAccountLogin(uint32 /*accountId*/) {}
+ virtual void OnFailedAccountLogin(uint32 accountId);
// Called when Email is successfully changed for Account
- virtual void OnEmailChange(uint32 /*accountId*/) {}
+ virtual void OnEmailChange(uint32 accountId);
// Called when Email failed to change for Account
- virtual void OnFailedEmailChange(uint32 /*accountId*/) {}
+ virtual void OnFailedEmailChange(uint32 accountId);
// Called when Password is successfully changed for Account
- virtual void OnPasswordChange(uint32 /*accountId*/) {}
+ virtual void OnPasswordChange(uint32 accountId);
// Called when Password failed to change for Account
- virtual void OnFailedPasswordChange(uint32 /*accountId*/) {}
+ virtual void OnFailedPasswordChange(uint32 accountId);
};
class TC_GAME_API GuildScript : public ScriptObject
{
protected:
- GuildScript(char const* name);
+ explicit GuildScript(char const* name);
public:
// Called when a member is added to the guild.
- virtual void OnAddMember(Guild* /*guild*/, Player* /*player*/, uint8& /*plRank*/) { }
+ virtual void OnAddMember(Guild* guild, Player* player, uint8& plRank);
// Called when a member is removed from the guild.
- virtual void OnRemoveMember(Guild* /*guild*/, Player* /*player*/, bool /*isDisbanding*/, bool /*isKicked*/) { }
+ virtual void OnRemoveMember(Guild* guild, Player* player, bool isDisbanding, bool isKicked);
// Called when the guild MOTD (message of the day) changes.
- virtual void OnMOTDChanged(Guild* /*guild*/, const std::string& /*newMotd*/) { }
+ virtual void OnMOTDChanged(Guild* guild, std::string const& newMotd);
// Called when the guild info is altered.
- virtual void OnInfoChanged(Guild* /*guild*/, const std::string& /*newInfo*/) { }
+ virtual void OnInfoChanged(Guild* guild, std::string const& newInfo);
// Called when a guild is created.
- virtual void OnCreate(Guild* /*guild*/, Player* /*leader*/, const std::string& /*name*/) { }
+ virtual void OnCreate(Guild* guild, Player* leader, std::string const& name);
// Called when a guild is disbanded.
- virtual void OnDisband(Guild* /*guild*/) { }
+ virtual void OnDisband(Guild* guild);
// Called when a guild member withdraws money from a guild bank.
- virtual void OnMemberWitdrawMoney(Guild* /*guild*/, Player* /*player*/, uint32& /*amount*/, bool /*isRepair*/) { }
+ virtual void OnMemberWitdrawMoney(Guild* guild, Player* player, uint32& amount, bool isRepair);
// Called when a guild member deposits money in a guild bank.
- virtual void OnMemberDepositMoney(Guild* /*guild*/, Player* /*player*/, uint32& /*amount*/) { }
+ virtual void OnMemberDepositMoney(Guild* guild, Player* player, uint32& amount);
// Called when a guild member moves an item in a guild bank.
- virtual void OnItemMove(Guild* /*guild*/, Player* /*player*/, Item* /*pItem*/, bool /*isSrcBank*/, uint8 /*srcContainer*/, uint8 /*srcSlotId*/,
- bool /*isDestBank*/, uint8 /*destContainer*/, uint8 /*destSlotId*/) { }
+ virtual void OnItemMove(Guild* guild, Player* player, Item* pItem, bool isSrcBank, uint8 srcContainer, uint8 srcSlotId,
+ bool isDestBank, uint8 destContainer, uint8 destSlotId);
- virtual void OnEvent(Guild* /*guild*/, uint8 /*eventType*/, ObjectGuid::LowType /*playerGuid1*/, ObjectGuid::LowType /*playerGuid2*/, uint8 /*newRank*/) { }
+ virtual void OnEvent(Guild* guild, uint8 eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2, uint8 newRank);
- virtual void OnBankEvent(Guild* /*guild*/, uint8 /*eventType*/, uint8 /*tabId*/, ObjectGuid::LowType /*playerGuid*/, uint32 /*itemOrMoney*/, uint16 /*itemStackCount*/, uint8 /*destTabId*/) { }
+ virtual void OnBankEvent(Guild* guild, uint8 eventType, uint8 tabId, ObjectGuid::LowType playerGuid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId);
};
class TC_GAME_API GroupScript : public ScriptObject
{
protected:
- GroupScript(char const* name);
+ explicit GroupScript(char const* name);
public:
// Called when a member is added to a group.
- virtual void OnAddMember(Group* /*group*/, ObjectGuid /*guid*/) { }
+ virtual void OnAddMember(Group* group, ObjectGuid guid);
// Called when a member is invited to join a group.
- virtual void OnInviteMember(Group* /*group*/, ObjectGuid /*guid*/) { }
+ virtual void OnInviteMember(Group* group, ObjectGuid guid);
// Called when a member is removed from a group.
- virtual void OnRemoveMember(Group* /*group*/, ObjectGuid /*guid*/, RemoveMethod /*method*/, ObjectGuid /*kicker*/, char const* /*reason*/) { }
+ virtual void OnRemoveMember(Group* group, ObjectGuid guid, RemoveMethod method, ObjectGuid kicker, char const* reason);
// Called when the leader of a group is changed.
- virtual void OnChangeLeader(Group* /*group*/, ObjectGuid /*newLeaderGuid*/, ObjectGuid /*oldLeaderGuid*/) { }
+ virtual void OnChangeLeader(Group* group, ObjectGuid newLeaderGuid, ObjectGuid oldLeaderGuid);
// Called when a group is disbanded.
- virtual void OnDisband(Group* /*group*/) { }
+ virtual void OnDisband(Group* group);
};
// Manages registration, loading, and execution of scripts.
diff --git a/src/server/game/Spells/SpellScript.cpp b/src/server/game/Spells/SpellScript.cpp
index a822e3a0147..b8b52bf62f6 100644
--- a/src/server/game/Spells/SpellScript.cpp
+++ b/src/server/game/Spells/SpellScript.cpp
@@ -336,6 +336,12 @@ void SpellScript::DestinationTargetSelectHandler::Call(SpellScript* spellScript,
(spellScript->*DestinationTargetSelectHandlerScript)(target);
}
+SpellScript::SpellScript(): m_spell(nullptr), m_hitPreventEffectMask(0), m_hitPreventDefaultEffectMask(0)
+{
+}
+
+SpellScript::~SpellScript() = default;
+
bool SpellScript::_Validate(SpellInfo const* entry)
{
for (auto itr = OnEffectLaunch.begin(); itr != OnEffectLaunch.end(); ++itr)
@@ -1009,6 +1015,12 @@ void AuraScript::EffectProcHandler::Call(AuraScript* auraScript, AuraEffect cons
(auraScript->*_EffectHandlerScript)(aurEff, eventInfo);
}
+AuraScript::AuraScript(): _SpellScript(), m_aura(nullptr), m_auraApplication(nullptr), m_defaultActionPrevented(false)
+{
+}
+
+AuraScript::~AuraScript() = default;
+
bool AuraScript::_Load(Aura* aura)
{
m_aura = aura;
diff --git a/src/server/game/Spells/SpellScript.h b/src/server/game/Spells/SpellScript.h
index f2d4c422b5a..91eb9cf5c3b 100644
--- a/src/server/game/Spells/SpellScript.h
+++ b/src/server/game/Spells/SpellScript.h
@@ -325,6 +325,8 @@ class TC_GAME_API SpellScript : public _SpellScript
#define PrepareSpellScript(CLASSNAME) SPELLSCRIPT_FUNCTION_TYPE_DEFINES(CLASSNAME) SPELLSCRIPT_FUNCTION_CAST_DEFINES(CLASSNAME)
public:
+ SpellScript();
+ ~SpellScript();
bool _Validate(SpellInfo const* entry) override;
bool _Load(Spell* spell);
void _InitHit();
@@ -730,8 +732,8 @@ class TC_GAME_API AuraScript : public _SpellScript
#define PrepareAuraScript(CLASSNAME) AURASCRIPT_FUNCTION_TYPE_DEFINES(CLASSNAME) AURASCRIPT_FUNCTION_CAST_DEFINES(CLASSNAME)
public:
- AuraScript() : _SpellScript(), m_aura(nullptr), m_auraApplication(nullptr), m_defaultActionPrevented(false)
- { }
+ AuraScript();
+ ~AuraScript();
bool _Validate(SpellInfo const* entry) override;
bool _Load(Aura* aura);
void _PrepareScriptCall(AuraScriptHookType hookType, AuraApplication const* aurApp = nullptr);
diff --git a/src/server/shared/Realm/Realm.h b/src/server/shared/Realm/Realm.h
index f5856de5b77..fb19bd78d69 100644
--- a/src/server/shared/Realm/Realm.h
+++ b/src/server/shared/Realm/Realm.h
@@ -20,6 +20,7 @@
#include "Common.h"
#include "AsioHacksFwd.h"
+#include <memory>
enum RealmFlags
{
diff --git a/src/server/worldserver/CommandLine/CliRunnable.cpp b/src/server/worldserver/CommandLine/CliRunnable.cpp
index c5a14c9dcc2..878b70eab41 100644
--- a/src/server/worldserver/CommandLine/CliRunnable.cpp
+++ b/src/server/worldserver/CommandLine/CliRunnable.cpp
@@ -35,6 +35,8 @@
#include <cstring>
#include <readline/readline.h>
#include <readline/history.h>
+#else
+#include <Windows.h>
#endif
static constexpr char CLI_PREFIX[] = "TC> ";
diff --git a/src/tools/mmaps_generator/PathCommon.h b/src/tools/mmaps_generator/PathCommon.h
index 6dbe5630297..4f29a034d92 100644
--- a/src/tools/mmaps_generator/PathCommon.h
+++ b/src/tools/mmaps_generator/PathCommon.h
@@ -18,7 +18,8 @@
#ifndef _MMAP_COMMON_H
#define _MMAP_COMMON_H
-#include "Common.h"
+#include "Define.h"
+#include <memory>
#include <string>
#include <vector>