aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/common/Common.h19
-rw-r--r--src/server/game/Achievements/CriteriaHandler.cpp10
-rw-r--r--src/server/game/Battlegrounds/Battleground.cpp2
-rw-r--r--src/server/game/Battlegrounds/Battleground.h3
-rw-r--r--src/server/game/Chat/Channels/ChannelMgr.h4
-rw-r--r--src/server/game/Combat/ThreatManager.h1
-rw-r--r--src/server/game/DataStores/DB2Stores.cpp57
-rw-r--r--src/server/game/DataStores/DB2Stores.h18
-rw-r--r--src/server/game/Entities/Object/ObjectGuid.cpp75
-rw-r--r--src/server/game/Entities/Object/ObjectGuid.h35
-rw-r--r--src/server/game/Entities/Player/Player.cpp32
-rw-r--r--src/server/game/Entities/Player/SceneMgr.h1
-rw-r--r--src/server/game/Entities/Unit/Unit.h1
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp52
-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.h6
-rw-r--r--src/server/game/Grids/NGrid.cpp7
-rw-r--r--src/server/game/Handlers/ArtifactHandler.cpp2
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp6
-rw-r--r--src/server/game/Handlers/TraitHandler.cpp10
-rw-r--r--src/server/game/Maps/Map.cpp13
-rw-r--r--src/server/game/Maps/Map.h17
-rw-r--r--src/server/game/Scripting/ScriptMgr.cpp567
-rw-r--r--src/server/game/Scripting/ScriptMgr.h377
-rw-r--r--src/server/game/Spells/SpellScript.cpp12
-rw-r--r--src/server/game/Spells/SpellScript.h7
-rw-r--r--src/server/game/Spells/TraitMgr.cpp52
-rw-r--r--src/server/game/Spells/TraitMgr.h36
-rw-r--r--src/server/shared/Realm/Realm.h1
-rw-r--r--src/tools/extractor_common/DB2CascFileSource.h1
-rw-r--r--src/tools/mmaps_generator/PathCommon.h3
32 files changed, 1125 insertions, 485 deletions
diff --git a/src/common/Common.h b/src/common/Common.h
index 99807a713e2..22cf8ce889b 100644
--- a/src/common/Common.h
+++ b/src/common/Common.h
@@ -20,25 +20,8 @@
#include "Define.h"
#include <array>
-#include <memory>
#include <string>
-#include <utility>
-
-#if TRINITY_PLATFORM == TRINITY_PLATFORM_WINDOWS
-# 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/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp
index 7345b40b0b1..4fc3d89d3c2 100644
--- a/src/server/game/Achievements/CriteriaHandler.cpp
+++ b/src/server/game/Achievements/CriteriaHandler.cpp
@@ -3221,7 +3221,7 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
case ModifierTreeType::PlayerIsOnQuestInQuestline: // 236
{
bool isOnQuest = false;
- if (std::unordered_set<QuestLineXQuestEntry const*> const* questLineQuests = sDB2Manager.GetQuestsForQuestLine(reqValue))
+ if (std::vector<QuestLineXQuestEntry const*> const* questLineQuests = sDB2Manager.GetQuestsForQuestLine(reqValue))
{
isOnQuest = std::any_of(questLineQuests->begin(), questLineQuests->end(), [referencePlayer](QuestLineXQuestEntry const* questLineQuest)
{
@@ -3255,7 +3255,7 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
}
case ModifierTreeType::PlayerCanAcceptQuestInQuestline: // 240
{
- std::unordered_set<QuestLineXQuestEntry const*> const* questLineQuests = sDB2Manager.GetQuestsForQuestLine(reqValue);
+ std::vector<QuestLineXQuestEntry const*> const* questLineQuests = sDB2Manager.GetQuestsForQuestLine(reqValue);
if (!questLineQuests)
return false;
bool canTakeQuest = std::any_of(questLineQuests->begin(), questLineQuests->end(), [referencePlayer](QuestLineXQuestEntry const* questLineQuest)
@@ -3270,7 +3270,7 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
}
case ModifierTreeType::PlayerHasCompletedQuestline: // 241
{
- std::unordered_set<QuestLineXQuestEntry const*> const* questLineQuests = sDB2Manager.GetQuestsForQuestLine(reqValue);
+ std::vector<QuestLineXQuestEntry const*> const* questLineQuests = sDB2Manager.GetQuestsForQuestLine(reqValue);
if (!questLineQuests)
return false;
for (QuestLineXQuestEntry const* questLineQuest : *questLineQuests)
@@ -3280,7 +3280,7 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
}
case ModifierTreeType::PlayerHasCompletedQuestlineQuestCount: // 242
{
- std::unordered_set<QuestLineXQuestEntry const*> const* questLineQuests = sDB2Manager.GetQuestsForQuestLine(reqValue);
+ std::vector<QuestLineXQuestEntry const*> const* questLineQuests = sDB2Manager.GetQuestsForQuestLine(reqValue);
if (!questLineQuests)
return false;
uint32 completedQuests = 0;
@@ -3293,7 +3293,7 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
}
case ModifierTreeType::PlayerHasCompletedPercentageOfQuestline: // 243
{
- std::unordered_set<QuestLineXQuestEntry const*> const* questLineQuests = sDB2Manager.GetQuestsForQuestLine(reqValue);
+ std::vector<QuestLineXQuestEntry const*> const* questLineQuests = sDB2Manager.GetQuestsForQuestLine(reqValue);
if (!questLineQuests || questLineQuests->empty())
return false;
std::size_t completedQuests = 0;
diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp
index 33f7403cc58..12fc769c892 100644
--- a/src/server/game/Battlegrounds/Battleground.cpp
+++ b/src/server/game/Battlegrounds/Battleground.cpp
@@ -1187,7 +1187,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 a1fe02d0881..5cb8976422d 100644
--- a/src/server/game/Battlegrounds/Battleground.h
+++ b/src/server/game/Battlegrounds/Battleground.h
@@ -23,6 +23,7 @@
#include "Position.h"
#include "SharedDefines.h"
#include "ZoneScript.h"
+#include <deque>
#include <map>
#include <vector>
@@ -597,7 +598,7 @@ class TC_GAME_API Battleground : public ZoneScript
// 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/Chat/Channels/ChannelMgr.h b/src/server/game/Chat/Channels/ChannelMgr.h
index f8efb4cbb21..6b56fbe7bff 100644
--- a/src/server/game/Chat/Channels/ChannelMgr.h
+++ b/src/server/game/Chat/Channels/ChannelMgr.h
@@ -32,7 +32,7 @@ class TC_GAME_API ChannelMgr
typedef std::unordered_map<ObjectGuid, Channel*> BuiltinChannelContainer;
protected:
- explicit ChannelMgr(uint32 team) : _team(team) { }
+ explicit ChannelMgr(uint32 team) : _team(team), _guidGenerator(HighGuid::ChatChannel) { }
~ChannelMgr();
public:
@@ -57,7 +57,7 @@ class TC_GAME_API ChannelMgr
CustomChannelContainer _customChannels;
BuiltinChannelContainer _channels;
uint32 const _team;
- ObjectGuidGenerator<HighGuid::ChatChannel> _guidGenerator;
+ ObjectGuidGenerator _guidGenerator;
static void SendNotOnChannelNotify(Player const* player, std::string const& name);
ObjectGuid CreateCustomChannelGuid();
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/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp
index 7b082c8fa3b..a3f14626b4d 100644
--- a/src/server/game/DataStores/DB2Stores.cpp
+++ b/src/server/game/DataStores/DB2Stores.cpp
@@ -365,7 +365,6 @@ TaxiMask sTaxiNodesMask;
TaxiMask sOldContinentsNodesMask;
TaxiMask sHordeTaxiNodesMask;
TaxiMask sAllianceTaxiNodesMask;
-TaxiPathSetBySource sTaxiPathSetBySource;
TaxiPathNodesByPath sTaxiPathNodesByPath;
DEFINE_DB2_SET_COMPARATOR(ChrClassesXPowerTypesEntry)
@@ -382,7 +381,7 @@ void LoadAzeriteEmpoweredItemUnlockMappings(std::unordered_map<int32, std::vecto
typedef std::map<uint32 /*hash*/, DB2StorageBase*> StorageMap;
typedef std::unordered_map<uint32 /*areaGroupId*/, std::vector<uint32/*areaId*/>> AreaGroupMemberContainer;
typedef std::unordered_map<uint32, std::vector<ArtifactPowerEntry const*>> ArtifactPowersContainer;
-typedef std::unordered_map<uint32, std::unordered_set<uint32>> ArtifactPowerLinksContainer;
+typedef std::unordered_map<uint32, std::vector<uint32>> ArtifactPowerLinksContainer;
typedef std::unordered_map<std::pair<uint32, uint8>, ArtifactPowerRankEntry const*> ArtifactPowerRanksContainer;
typedef ChrSpecializationEntry const* ChrSpecializationByIndexContainer[MAX_CLASSES + 1][MAX_SPECIALIZATIONS];
typedef std::unordered_map<uint32 /*curveID*/, std::vector<CurvePointEntry const*>> CurvePointsContainer;
@@ -402,6 +401,7 @@ typedef std::unordered_map<uint32 /*itemId | appearanceMod << 24*/, ItemModified
typedef std::unordered_map<uint32, std::set<ItemBonusTreeNodeEntry const*>> ItemBonusTreeContainer;
typedef std::unordered_map<uint32, std::vector<ItemSetSpellEntry const*>> ItemSetSpellContainer;
typedef std::unordered_map<uint32, std::vector<ItemSpecOverrideEntry const*>> ItemSpecOverridesContainer;
+typedef std::unordered_map<uint32, std::unordered_map<uint32, MapDifficultyEntry const*>> MapDifficultyContainer;
typedef std::unordered_map<uint32, DB2Manager::MountTypeXCapabilitySet> MountCapabilitiesByTypeContainer;
typedef std::unordered_map<uint32, DB2Manager::MountXDisplayContainer> MountDisplaysCointainer;
typedef std::unordered_map<uint32, std::array<std::vector<NameGenEntry const*>, 2>> NameGenContainer;
@@ -456,7 +456,7 @@ namespace
std::unordered_map<std::pair<uint8, uint8>, ChrModelEntry const*> _chrModelsByRaceAndGender;
std::map<std::tuple<uint8 /*race*/, uint8/*gender*/, uint8/*shapeshift*/>, ShapeshiftFormModelData> _chrCustomizationChoicesForShapeshifts;
std::unordered_map<std::pair<uint8 /*race*/, uint8/*gender*/>, std::vector<ChrCustomizationOptionEntry const*>> _chrCustomizationOptionsByRaceAndGender;
- std::unordered_map<uint32 /*chrCustomizationReqId*/, std::unordered_map<uint32 /*chrCustomizationOptionId*/, std::vector<uint32>>> _chrCustomizationRequiredChoices;
+ std::unordered_map<uint32 /*chrCustomizationReqId*/, std::vector<std::pair<uint32 /*chrCustomizationOptionId*/, std::vector<uint32>>>> _chrCustomizationRequiredChoices;
ChrSpecializationByIndexContainer _chrSpecializationsByIndex;
std::unordered_multimap<uint32, CurrencyContainerEntry const*> _currencyContainers;
CurvePointsContainer _curvePoints;
@@ -481,7 +481,7 @@ namespace
ItemSetSpellContainer _itemSetSpells;
ItemSpecOverridesContainer _itemSpecOverrides;
std::vector<JournalTierEntry const*> _journalTiersByIndex;
- DB2Manager::MapDifficultyContainer _mapDifficulties;
+ MapDifficultyContainer _mapDifficulties;
std::unordered_map<uint32, DB2Manager::MapDifficultyConditionsContainer> _mapDifficultyConditions;
std::unordered_map<uint32, MountEntry const*> _mountsBySpellId;
MountCapabilitiesByTypeContainer _mountCapabilitiesByType;
@@ -493,7 +493,7 @@ namespace
PowerTypesContainer _powerTypes;
std::unordered_map<uint32, uint8> _pvpItemBonus;
PvpTalentSlotUnlockEntry const* _pvpTalentSlotUnlock[MAX_PVP_TALENT_SLOTS];
- std::unordered_map<uint32, std::unordered_set<QuestLineXQuestEntry const*>> _questsByQuestLine;
+ std::unordered_map<uint32, std::vector<QuestLineXQuestEntry const*>> _questsByQuestLine;
QuestPackageItemContainer _questPackages;
std::unordered_map<uint32, std::vector<RewardPackXCurrencyTypeEntry const*>> _rewardPackCurrencyTypes;
std::unordered_map<uint32, std::vector<RewardPackXItemEntry const*>> _rewardPackItems;
@@ -507,6 +507,7 @@ namespace
SpellProcsPerMinuteModContainer _spellProcsPerMinuteMods;
std::unordered_map<int32, std::vector<SpellVisualMissileEntry const*>> _spellVisualMissilesBySet;
TalentsByPosition _talentsByPosition;
+ std::unordered_map<std::pair<uint32, uint32>, TaxiPathEntry const*> _taxiPaths;
ToyItemIdsContainer _toys;
std::unordered_map<uint32, TransmogIllusionEntry const*> _transmogIllusionsByEnchantmentId;
std::unordered_map<uint32, std::vector<TransmogSetEntry const*>> _transmogSetsByItemModifiedAppearance;
@@ -995,8 +996,8 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul
for (ArtifactPowerLinkEntry const* artifactPowerLink : sArtifactPowerLinkStore)
{
- _artifactPowerLinks[artifactPowerLink->PowerA].insert(artifactPowerLink->PowerB);
- _artifactPowerLinks[artifactPowerLink->PowerB].insert(artifactPowerLink->PowerA);
+ _artifactPowerLinks[artifactPowerLink->PowerA].push_back(artifactPowerLink->PowerB);
+ _artifactPowerLinks[artifactPowerLink->PowerB].push_back(artifactPowerLink->PowerA);
}
for (ArtifactPowerRankEntry const* artifactPowerRank : sArtifactPowerRankStore)
@@ -1112,8 +1113,28 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul
customizationOptionsByModel[customizationOption->ChrModelID].push_back(customizationOption);
for (ChrCustomizationReqChoiceEntry const* reqChoice : sChrCustomizationReqChoiceStore)
+ {
if (ChrCustomizationChoiceEntry const* customizationChoice = sChrCustomizationChoiceStore.LookupEntry(reqChoice->ChrCustomizationChoiceID))
- _chrCustomizationRequiredChoices[reqChoice->ChrCustomizationReqID][customizationChoice->ChrCustomizationOptionID].push_back(reqChoice->ChrCustomizationChoiceID);
+ {
+ std::vector<std::pair<uint32, std::vector<uint32>>>& requiredChoicesForReq = _chrCustomizationRequiredChoices[reqChoice->ChrCustomizationReqID];
+ std::vector<uint32>* choices = nullptr;
+ for (std::pair<uint32, std::vector<uint32>>& choicesForOption : requiredChoicesForReq)
+ {
+ if (int32(choicesForOption.first) == customizationChoice->ChrCustomizationOptionID)
+ {
+ choices = &choicesForOption.second;
+ break;
+ }
+ }
+ if (!choices)
+ {
+ std::pair<uint32, std::vector<uint32>>& choicesForReq = requiredChoicesForReq.emplace_back();
+ choicesForReq.first = customizationChoice->ChrCustomizationOptionID;
+ choices = &choicesForReq.second;
+ }
+ choices->push_back(reqChoice->ChrCustomizationChoiceID);
+ }
+ }
std::unordered_map<uint32, uint32> parentRaces;
for (ChrRacesEntry const* chrRace : sChrRacesStore)
@@ -1379,7 +1400,7 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul
}
for (QuestLineXQuestEntry const* questLineQuest : sQuestLineXQuestStore)
- _questsByQuestLine[questLineQuest->QuestLineID].insert(questLineQuest);
+ _questsByQuestLine[questLineQuest->QuestLineID].push_back(questLineQuest);
for (QuestPackageItemEntry const* questPackageItem : sQuestPackageItemStore)
{
@@ -1434,7 +1455,7 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul
}
for (TaxiPathEntry const* entry : sTaxiPathStore)
- sTaxiPathSetBySource[entry->FromTaxiNode][entry->ToTaxiNode] = TaxiPathBySourceAndDestination(entry->ID, entry->Cost);
+ _taxiPaths[{ entry->FromTaxiNode, entry->ToTaxiNode }] = entry;
uint32 pathCount = sTaxiPathStore.GetNumRows();
@@ -1871,7 +1892,7 @@ std::vector<ArtifactPowerEntry const*> DB2Manager::GetArtifactPowers(uint8 artif
return std::vector<ArtifactPowerEntry const*>{};
}
-std::unordered_set<uint32> const* DB2Manager::GetArtifactPowerLinks(uint32 artifactPowerId) const
+std::vector<uint32> const* DB2Manager::GetArtifactPowerLinks(uint32 artifactPowerId) const
{
return Trinity::Containers::MapGetValuePtr(_artifactPowerLinks, artifactPowerId);
}
@@ -1984,7 +2005,7 @@ std::vector<ChrCustomizationOptionEntry const*> const* DB2Manager::GetCustomizti
return Trinity::Containers::MapGetValuePtr(_chrCustomizationOptionsByRaceAndGender, { race,gender });
}
-std::unordered_map<uint32, std::vector<uint32>> const* DB2Manager::GetRequiredCustomizationChoices(uint32 chrCustomizationReqId) const
+std::vector<std::pair<uint32, std::vector<uint32>>> const* DB2Manager::GetRequiredCustomizationChoices(uint32 chrCustomizationReqId) const
{
return Trinity::Containers::MapGetValuePtr(_chrCustomizationRequiredChoices, chrCustomizationReqId);
}
@@ -2686,11 +2707,6 @@ uint32 DB2Manager::GetLiquidFlags(uint32 liquidType)
return 0;
}
-DB2Manager::MapDifficultyContainer const& DB2Manager::GetMapDifficulties() const
-{
- return _mapDifficulties;
-}
-
MapDifficultyEntry const* DB2Manager::GetDefaultMapDifficulty(uint32 mapId, Difficulty* difficulty /*= nullptr*/) const
{
auto itr = _mapDifficulties.find(mapId);
@@ -2896,7 +2912,7 @@ int32 DB2Manager::GetPvpTalentNumSlotsAtLevel(uint32 level, Classes class_) cons
return slots;
}
-std::unordered_set<QuestLineXQuestEntry const*> const* DB2Manager::GetQuestsForQuestLine(uint32 questLineId) const
+std::vector<QuestLineXQuestEntry const*> const* DB2Manager::GetQuestsForQuestLine(uint32 questLineId) const
{
return Trinity::Containers::MapGetValuePtr(_questsByQuestLine, questLineId);
}
@@ -3053,6 +3069,11 @@ std::vector<TalentEntry const*> const& DB2Manager::GetTalentsByPosition(uint32 c
return _talentsByPosition[class_][tier][column];
}
+TaxiPathEntry const* DB2Manager::GetTaxiPath(uint32 from, uint32 to) const
+{
+ return Trinity::Containers::MapGetValuePtr(_taxiPaths, { from, to });
+}
+
bool DB2Manager::IsTotemCategoryCompatibleWith(uint32 itemTotemCategoryId, uint32 requiredTotemCategoryId)
{
if (requiredTotemCategoryId == 0)
diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h
index 607cda14e82..bc6cf523d27 100644
--- a/src/server/game/DataStores/DB2Stores.h
+++ b/src/server/game/DataStores/DB2Stores.h
@@ -20,12 +20,10 @@
#include "DB2Store.h"
#include "DB2Structure.h"
-#include <Optional.h>
+#include "Optional.h"
#include "SharedDefines.h"
#include <map>
#include <set>
-#include <unordered_map>
-#include <unordered_set>
#include <vector>
// temporary hack until includes are sorted out (don't want to pull in Windows.h)
@@ -169,6 +167,7 @@ TC_GAME_API extern DB2Storage<LockEntry> sLockStore;
TC_GAME_API extern DB2Storage<MailTemplateEntry> sMailTemplateStore;
TC_GAME_API extern DB2Storage<MapEntry> sMapStore;
TC_GAME_API extern DB2Storage<MapChallengeModeEntry> sMapChallengeModeStore;
+TC_GAME_API extern DB2Storage<MapDifficultyEntry> sMapDifficultyStore;
TC_GAME_API extern DB2Storage<MawPowerEntry> sMawPowerStore;
TC_GAME_API extern DB2Storage<ModifierTreeEntry> sModifierTreeStore;
TC_GAME_API extern DB2Storage<MountCapabilityEntry> sMountCapabilityStore;
@@ -304,9 +303,6 @@ struct TaxiPathBySourceAndDestination
uint32 price;
};
-using TaxiPathSetForSource = std::map<uint32, TaxiPathBySourceAndDestination>;
-using TaxiPathSetBySource = std::map<uint32, TaxiPathSetForSource>;
-
using TaxiPathNodeList = std::vector<TaxiPathNodeEntry const*>;
using TaxiPathNodesByPath = std::vector<TaxiPathNodeList>;
@@ -314,7 +310,6 @@ TC_GAME_API extern TaxiMask sTaxiNodesMa
TC_GAME_API extern TaxiMask sOldContinentsNodesMask;
TC_GAME_API extern TaxiMask sHordeTaxiNodesMask;
TC_GAME_API extern TaxiMask sAllianceTaxiNodesMask;
-TC_GAME_API extern TaxiPathSetBySource sTaxiPathSetBySource;
TC_GAME_API extern TaxiPathNodesByPath sTaxiPathNodesByPath;
#define DEFINE_DB2_SET_COMPARATOR(structure) \
@@ -373,7 +368,6 @@ public:
using FriendshipRepReactionSet = std::set<FriendshipRepReactionEntry const*, FriendshipRepReactionEntryComparator>;
using ItemBonusList = std::vector<ItemBonusEntry const*>;
- using MapDifficultyContainer = std::unordered_map<uint32, std::unordered_map<uint32, MapDifficultyEntry const*>>;
using MapDifficultyConditionsContainer = std::vector<std::pair<uint32, PlayerConditionEntry const*>>;
using MountTypeXCapabilitySet = std::set<MountTypeXCapabilityEntry const*, MountTypeXCapabilityEntryComparator>;
using MountXDisplayContainer = std::vector<MountXDisplayEntry const*>;
@@ -395,7 +389,7 @@ public:
std::vector<uint32> GetAreasForGroup(uint32 areaGroupId) const;
static bool IsInArea(uint32 objectAreaId, uint32 areaId);
std::vector<ArtifactPowerEntry const*> GetArtifactPowers(uint8 artifactId) const;
- std::unordered_set<uint32> const* GetArtifactPowerLinks(uint32 artifactPowerId) const;
+ std::vector<uint32> const* GetArtifactPowerLinks(uint32 artifactPowerId) const;
ArtifactPowerRankEntry const* GetArtifactPowerRank(uint32 artifactPowerId, uint8 rank) const;
AzeriteEmpoweredItemEntry const* GetAzeriteEmpoweredItem(uint32 itemId) const;
bool IsAzeriteItem(uint32 itemId) const;
@@ -411,7 +405,7 @@ public:
uint32 GetPowerIndexByClass(Powers power, uint32 classId) const;
std::vector<ChrCustomizationChoiceEntry const*> const* GetCustomiztionChoices(uint32 chrCustomizationOptionId) const;
std::vector<ChrCustomizationOptionEntry const*> const* GetCustomiztionOptions(uint8 race, uint8 gender) const;
- std::unordered_map<uint32, std::vector<uint32>> const* GetRequiredCustomizationChoices(uint32 chrCustomizationReqId) const;
+ std::vector<std::pair<uint32, std::vector<uint32>>> const* GetRequiredCustomizationChoices(uint32 chrCustomizationReqId) const;
ChrModelEntry const* GetChrModel(uint8 race, uint8 gender) const;
static char const* GetChrRaceName(uint8 race, LocaleConstant locale = DEFAULT_LOCALE);
ChrSpecializationEntry const* GetChrSpecializationByIndex(uint32 class_, uint32 index) const;
@@ -446,7 +440,6 @@ public:
static LFGDungeonsEntry const* GetLfgDungeon(uint32 mapId, Difficulty difficulty);
static uint32 GetDefaultMapLight(uint32 mapId);
static uint32 GetLiquidFlags(uint32 liquidType);
- MapDifficultyContainer const& GetMapDifficulties() const;
MapDifficultyEntry const* GetDefaultMapDifficulty(uint32 mapId, Difficulty* difficulty = nullptr) const;
MapDifficultyEntry const* GetMapDifficultyData(uint32 mapId, Difficulty difficulty) const;
MapDifficultyEntry const* GetDownscaledMapDifficultyData(uint32 mapId, Difficulty &difficulty) const;
@@ -467,7 +460,7 @@ public:
static PVPDifficultyEntry const* GetBattlegroundBracketById(uint32 mapid, BattlegroundBracketId id);
uint32 GetRequiredLevelForPvpTalentSlot(uint8 slot, Classes class_) const;
int32 GetPvpTalentNumSlotsAtLevel(uint32 level, Classes class_) const;
- std::unordered_set<QuestLineXQuestEntry const*> const* GetQuestsForQuestLine(uint32 questLineId) const;
+ std::vector<QuestLineXQuestEntry const*> const* GetQuestsForQuestLine(uint32 questLineId) const;
std::vector<QuestPackageItemEntry const*> const* GetQuestPackageItems(uint32 questPackageID) const;
std::vector<QuestPackageItemEntry const*> const* GetQuestPackageItemsFallback(uint32 questPackageID) const;
uint32 GetQuestUniqueBitFlag(uint32 questId);
@@ -485,6 +478,7 @@ public:
std::vector<SpellProcsPerMinuteModEntry const*> GetSpellProcsPerMinuteMods(uint32 spellprocsPerMinuteId) const;
std::vector<SpellVisualMissileEntry const*> const* GetSpellVisualMissiles(int32 spellVisualMissileSetId) const;
std::vector<TalentEntry const*> const& GetTalentsByPosition(uint32 class_, uint32 tier, uint32 column) const;
+ TaxiPathEntry const* GetTaxiPath(uint32 from, uint32 to) const;
static bool IsTotemCategoryCompatibleWith(uint32 itemTotemCategoryId, uint32 requiredTotemCategoryId);
bool IsToyItem(uint32 toy) const;
TransmogIllusionEntry const* GetTransmogIllusionForEnchantment(uint32 spellItemEnchantmentId) const;
diff --git a/src/server/game/Entities/Object/ObjectGuid.cpp b/src/server/game/Entities/Object/ObjectGuid.cpp
index 90ae18ef5fe..5f5d6d55736 100644
--- a/src/server/game/Entities/Object/ObjectGuid.cpp
+++ b/src/server/game/Entities/Object/ObjectGuid.cpp
@@ -752,70 +752,27 @@ ByteBuffer& operator>>(ByteBuffer& buf, ObjectGuid& 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::Creature || _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();
}
-
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::Null>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::Uniq>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::Player>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::Item>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::WorldTransaction>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::StaticDoor>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::Transport>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::Conversation>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::Creature>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::Vehicle>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::Pet>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::GameObject>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::DynamicObject>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::AreaTrigger>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::Corpse>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::LootObject>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::SceneObject>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::Scenario>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::AIGroup>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::DynamicDoor>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::ClientActor>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::Vignette>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::CallForHelp>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::AIResource>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::AILock>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::AILockTicket>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::ChatChannel>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::Party>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::Guild>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::WowAccount>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::BNetAccount>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::GMTask>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::MobileSession>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::RaidGroup>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::Spell>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::Mail>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::WebObj>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::LFGObject>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::LFGList>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::UserRouter>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::PVPQueueGroup>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::UserClient>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::PetBattle>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::UniqUserClient>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::BattlePet>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::CommerceObj>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::ClientSession>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::Cast>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::ClientConnection>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::ClubFinder>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::ToolsClient>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::WorldLayer>;
-template class TC_GAME_API ObjectGuidGenerator<HighGuid::ArenaTeam>;
diff --git a/src/server/game/Entities/Object/ObjectGuid.h b/src/server/game/Entities/Object/ObjectGuid.h
index 6d0a4187ee6..670fe8bf240 100644
--- a/src/server/game/Entities/Object/ObjectGuid.h
+++ b/src/server/game/Entities/Object/ObjectGuid.h
@@ -20,7 +20,6 @@
#include "Define.h"
#include "EnumFlag.h"
-#include <deque>
#include <functional>
#include <list>
#include <set>
@@ -384,44 +383,26 @@ class TC_GAME_API ObjectGuid
// Some Shared defines
using GuidSet = std::set<ObjectGuid>;
using GuidList = std::list<ObjectGuid>;
-using GuidDeque = std::deque<ObjectGuid>;
using GuidVector = std::vector<ObjectGuid>;
using GuidUnorderedSet = std::unordered_set<ObjectGuid>;
-class TC_GAME_API ObjectGuidGeneratorBase
+class TC_GAME_API ObjectGuidGenerator
{
public:
- ObjectGuidGeneratorBase(ObjectGuid::LowType start = UI64LIT(1)) : _nextGuid(start) { }
- virtual ~ObjectGuidGeneratorBase() = default;
+ explicit ObjectGuidGenerator(HighGuid high, ObjectGuid::LowType start = UI64LIT(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; }
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 = UI64LIT(1)) : ObjectGuidGeneratorBase(start) { }
-
- ObjectGuid::LowType Generate() override
- {
- if (_nextGuid >= ObjectGuid::GetMaxCounter(high) - 1)
- HandleCounterOverflow(high);
-
- if (high == HighGuid::Creature || high == HighGuid::Vehicle || high == HighGuid::GameObject || high == HighGuid::Transport)
- 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/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index a69fcc8603c..e2fb50fd300 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -26718,7 +26718,7 @@ void Player::_LoadTraits(PreparedQueryResult configsResult, PreparedQueryResult
for (auto&& [_, traitEntry] : Trinity::Containers::MapEqualRange(traitEntriesByConfig, traitConfig.ID))
traitConfig.Entries.emplace_back() = traitEntry;
- if (TraitMgr::ValidateConfig(traitConfig, this) != TALENT_LEARN_OK)
+ if (TraitMgr::ValidateConfig(traitConfig, this) != TraitMgr::LearnResult::Ok)
{
traitConfig.Entries.clear();
for (UF::TraitEntry const& grantedEntry : TraitMgr::GetGrantedTraitEntriesForConfig(traitConfig, this))
@@ -28937,3 +28937,33 @@ void Player::SendDisplayToast(uint32 entry, DisplayToastType type, bool isBonusR
SendDirectMessage(displayToast.Write());
}
+
+uint64 TraitMgr::PlayerDataAccessor::GetMoney() const
+{
+ return _player->GetMoney();
+}
+
+int32 TraitMgr::PlayerDataAccessor::GetCurrency(int32 currencyId) const
+{
+ return _player->GetCurrency(currencyId);
+}
+
+int32 TraitMgr::PlayerDataAccessor::GetLevel() const
+{
+ return _player->GetLevel();
+}
+
+bool TraitMgr::PlayerDataAccessor::IsQuestRewarded(int32 questId) const
+{
+ return _player->IsQuestRewarded(questId);
+}
+
+bool TraitMgr::PlayerDataAccessor::HasAchieved(int32 achievementId) const
+{
+ return _player->HasAchieved(achievementId);
+}
+
+uint32 TraitMgr::PlayerDataAccessor::GetPrimarySpecialization() const
+{
+ return _player->GetPrimarySpecialization();
+}
diff --git a/src/server/game/Entities/Player/SceneMgr.h b/src/server/game/Entities/Player/SceneMgr.h
index 664bf6a5d6e..34366459ef8 100644
--- a/src/server/game/Entities/Player/SceneMgr.h
+++ b/src/server/game/Entities/Player/SceneMgr.h
@@ -21,6 +21,7 @@
#include "Common.h"
#include "SceneDefines.h"
#include <map>
+#include <memory>
#include <vector>
class Player;
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index c15246784b2..3192fb9015e 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -28,6 +28,7 @@
#include "Util.h"
#include <array>
#include <map>
+#include <memory>
#include <stack>
#define VISUAL_WAYPOINT 1 // Creature Entry ID used for waypoints show, visible only for GMs
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index ec7e046c2f8..650320fff6e 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -2214,9 +2214,8 @@ void ObjectMgr::LoadCreatures()
// Build single time for check spawnmask
std::unordered_map<uint32, std::set<Difficulty>> spawnMasks;
- for (auto& mapDifficultyPair : sDB2Manager.GetMapDifficulties())
- for (auto& difficultyPair : mapDifficultyPair.second)
- spawnMasks[mapDifficultyPair.first].insert(Difficulty(difficultyPair.first));
+ for (MapDifficultyEntry const* mapDifficulty : sMapDifficultyStore)
+ spawnMasks[mapDifficulty->MapID].insert(Difficulty(mapDifficulty->DifficultyID));
PhaseShift phaseShift;
@@ -2532,9 +2531,8 @@ void ObjectMgr::LoadGameObjects()
// build single time for check spawnmask
std::unordered_map<uint32, std::set<Difficulty>> spawnMasks;
- for (auto& mapDifficultyPair : sDB2Manager.GetMapDifficulties())
- for (auto& difficultyPair : mapDifficultyPair.second)
- spawnMasks[mapDifficultyPair.first].insert(Difficulty(difficultyPair.first));
+ for (MapDifficultyEntry const* mapDifficulty : sMapDifficultyStore)
+ spawnMasks[mapDifficulty->MapID].insert(Difficulty(mapDifficulty->DifficultyID));
PhaseShift phaseShift;
@@ -6837,26 +6835,17 @@ uint32 ObjectMgr::GetNearestTaxiNode(float x, float y, float z, uint32 mapid, ui
void ObjectMgr::GetTaxiPath(uint32 source, uint32 destination, uint32 &path, uint32 &cost)
{
- TaxiPathSetBySource::iterator src_i = sTaxiPathSetBySource.find(source);
- if (src_i == sTaxiPathSetBySource.end())
+ TaxiPathEntry const* taxiPath = sDB2Manager.GetTaxiPath(source, destination);
+ if (taxiPath)
{
- path = 0;
- cost = 0;
- return;
+ path = taxiPath->ID;
+ cost = taxiPath->Cost;
}
-
- TaxiPathSetForSource& pathSet = src_i->second;
-
- TaxiPathSetForSource::iterator dest_i = pathSet.find(destination);
- if (dest_i == pathSet.end())
+ else
{
path = 0;
cost = 0;
- return;
}
-
- cost = dest_i->second.price;
- path = dest_i->second.ID;
}
uint32 ObjectMgr::GetTaxiMountDisplayId(uint32 id, uint32 team, bool allowed_alt_team /* = false */)
@@ -7454,22 +7443,22 @@ void ObjectMgr::SetHighestGuids()
{
QueryResult result = CharacterDatabase.Query("SELECT MAX(guid) FROM characters");
if (result)
- GetGuidSequenceGenerator<HighGuid::Player>().Set((*result)[0].GetUInt64() + 1);
+ GetGuidSequenceGenerator(HighGuid::Player).Set((*result)[0].GetUInt64() + 1);
result = CharacterDatabase.Query("SELECT MAX(guid) FROM item_instance");
if (result)
- GetGuidSequenceGenerator<HighGuid::Item>().Set((*result)[0].GetUInt64() + 1);
+ GetGuidSequenceGenerator(HighGuid::Item).Set((*result)[0].GetUInt64() + 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 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 a, ab, ai FROM auctionhouse a LEFT JOIN auction_bidders ab ON ab.auctionId = a.id LEFT JOIN auction_items ai ON ai.auctionId = a.id WHERE ai.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
+ 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::Transport>().Set((*result)[0].GetUInt64() + 1);
+ GetGuidSequenceGenerator(HighGuid::Transport).Set((*result)[0].GetUInt64() + 1);
result = CharacterDatabase.Query("SELECT MAX(id) FROM auctionhouse");
if (result)
@@ -7508,6 +7497,15 @@ void ObjectMgr::SetHighestGuids()
_gameObjectSpawnId = (*result)[0].GetUInt64() + 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 fe5cb6877c5..c7e205bba3a 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -1448,11 +1448,11 @@ class TC_GAME_API ObjectMgr
void SetHighestGuids();
template<HighGuid type>
- inline ObjectGuidGeneratorBase& GetGenerator()
+ ObjectGuidGenerator& GetGenerator()
{
static_assert(ObjectGuidTraits<type>::SequenceSource.HasFlag(ObjectGuidSequenceSource::Global | ObjectGuidSequenceSource::Realm),
"Only global guid can be generated in ObjectMgr context");
- return GetGuidSequenceGenerator<type>();
+ return GetGuidSequenceGenerator(type);
}
uint32 GenerateAuctionID();
@@ -1801,17 +1801,9 @@ class TC_GAME_API ObjectMgr
uint64 _voidItemId;
// 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::make_unique<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;
std::vector<Quest const*> _questTemplatesAutoPush;
QuestObjectivesByIdContainer _questObjectives;
diff --git a/src/server/game/Grids/Dynamic/TypeContainer.h b/src/server/game/Grids/Dynamic/TypeContainer.h
index 0776bde32e0..f1d57735cef 100644
--- a/src/server/game/Grids/Dynamic/TypeContainer.h
+++ b/src/server/game/Grids/Dynamic/TypeContainer.h
@@ -36,7 +36,6 @@
template<class OBJECT>
struct ContainerMapList
{
- //std::map<OBJECT_HANDLE, OBJECT *> _element;
GridRefManager<OBJECT> _element;
};
@@ -82,67 +81,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 d9d13e562bf..32a81b968fb 100644
--- a/src/server/game/Grids/GridDefines.h
+++ b/src/server/game/Grids/GridDefines.h
@@ -89,6 +89,12 @@ enum GridMapTypeMask
GRID_MAP_TYPE_MASK_ALL = 0xFF
};
+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;
diff --git a/src/server/game/Grids/NGrid.cpp b/src/server/game/Grids/NGrid.cpp
index 2e7c7890c9d..b9530c684a2 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)
{
}
+
+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/Handlers/ArtifactHandler.cpp b/src/server/game/Handlers/ArtifactHandler.cpp
index 18a30d0f40e..66d94b955c3 100644
--- a/src/server/game/Handlers/ArtifactHandler.cpp
+++ b/src/server/game/Handlers/ArtifactHandler.cpp
@@ -73,7 +73,7 @@ void WorldSession::HandleArtifactAddPower(WorldPackets::Artifact::ArtifactAddPow
if (!(artifactPowerEntry->Flags & ARTIFACT_POWER_FLAG_NO_LINK_REQUIRED))
{
- if (std::unordered_set<uint32> const* artifactPowerLinks = sDB2Manager.GetArtifactPowerLinks(artifactPower->ArtifactPowerID))
+ if (std::vector<uint32> const* artifactPowerLinks = sDB2Manager.GetArtifactPowerLinks(artifactPower->ArtifactPowerID))
{
bool hasAnyLink = false;
for (uint32 artifactPowerLinkId : *artifactPowerLinks)
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index e63223554af..c4d6cd0f21d 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -534,12 +534,12 @@ bool WorldSession::MeetsChrCustomizationReq(ChrCustomizationReqEntry const* req,
if (checkRequiredDependentChoices)
{
- if (std::unordered_map<uint32, std::vector<uint32>> const* requiredChoices = sDB2Manager.GetRequiredCustomizationChoices(req->ID))
+ if (std::vector<std::pair<uint32, std::vector<uint32>>> const* requiredChoices = sDB2Manager.GetRequiredCustomizationChoices(req->ID))
{
- for (std::pair<uint32 const /*chrCustomizationOptionId*/, std::vector<uint32>> const& requiredChoicesForOption : *requiredChoices)
+ for (auto const& [chrCustomizationOptionId, requiredChoicesForOption] : *requiredChoices)
{
bool hasRequiredChoiceForOption = false;
- for (uint32 requiredChoice : requiredChoicesForOption.second)
+ for (uint32 requiredChoice : requiredChoicesForOption)
{
auto choiceItr = std::find_if(selectedChoices.begin(), selectedChoices.end(), [requiredChoice](UF::ChrCustomizationChoice const& choice)
{
diff --git a/src/server/game/Handlers/TraitHandler.cpp b/src/server/game/Handlers/TraitHandler.cpp
index ae61b159d62..16882b134c6 100644
--- a/src/server/game/Handlers/TraitHandler.cpp
+++ b/src/server/game/Handlers/TraitHandler.cpp
@@ -124,10 +124,10 @@ void WorldSession::HandleTraitsCommitConfig(WorldPackets::Traits::TraitsCommitCo
newConfigState.Entries.emplace_back() = newEntry;
}
- TalentLearnResult validationResult = TraitMgr::ValidateConfig(newConfigState, _player, true);
- if (validationResult != TALENT_LEARN_OK)
+ TraitMgr::LearnResult validationResult = TraitMgr::ValidateConfig(newConfigState, _player, true);
+ if (validationResult != TraitMgr::LearnResult::Ok)
{
- SendPacket(WorldPackets::Traits::TraitConfigCommitFailed(configId, 0, validationResult).Write());
+ SendPacket(WorldPackets::Traits::TraitConfigCommitFailed(configId, 0, AsUnderlyingType(validationResult)).Write());
return;
}
@@ -189,8 +189,8 @@ void WorldSession::HandleClassTalentsRequestNewConfig(WorldPackets::Traits::Clas
newEntry.Rank = std::max(0, traitNodeEntry->MaxRanks - newEntry.GrantedRanks);
}
- TalentLearnResult validationResult = TraitMgr::ValidateConfig(classTalentsRequestNewConfig.Config, _player);
- if (validationResult != TALENT_LEARN_OK)
+ TraitMgr::LearnResult validationResult = TraitMgr::ValidateConfig(classTalentsRequestNewConfig.Config, _player);
+ if (validationResult != TraitMgr::LearnResult::Ok)
return;
_player->CreateTraitConfig(classTalentsRequestNewConfig.Config);
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index fdec078db36..9b863c17cac 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -164,7 +164,7 @@ i_scriptLock(false), _respawnTimes(std::make_unique<RespawnListContainer>()), _r
_weatherUpdateTimer.SetInterval(time_t(1 * IN_MILLISECONDS));
- GetGuidSequenceGenerator<HighGuid::Transport>().Set(sObjectMgr->GetGenerator<HighGuid::Transport>().GetNextAfterMaxUsed());
+ GetGuidSequenceGenerator(HighGuid::Transport).Set(sObjectMgr->GetGenerator<HighGuid::Transport>().GetNextAfterMaxUsed());
_poolData = sPoolMgr->InitPoolsForMap(this);
@@ -2474,6 +2474,15 @@ void Map::UpdateSpawnGroupConditions()
}
}
+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)));
@@ -3913,3 +3922,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 a3061418e4a..da4aa7ced8e 100644
--- a/src/server/game/Maps/Map.h
+++ b/src/server/game/Maps/Map.h
@@ -178,6 +178,7 @@ 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>
@@ -494,14 +495,14 @@ class TC_GAME_API Map : public GridRefManager<NGridType>
inline ObjectGuid::LowType GenerateLowGuid()
{
static_assert(ObjectGuidTraits<high>::SequenceSource.HasFlag(ObjectGuidSequenceSource::Map), "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>::SequenceSource.HasFlag(ObjectGuidSequenceSource::Map), "Only map specific guid can be retrieved in Map context");
- return GetGuidSequenceGenerator<high>().GetNextAfterMaxUsed();
+ return GetGuidSequenceGenerator(high).GetNextAfterMaxUsed();
}
void AddUpdateObject(Object* obj)
@@ -762,17 +763,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::make_unique<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;
std::unique_ptr<SpawnedPoolData> _poolData;
MapStoredObjectTypesContainer _objectsStore;
CreatureBySpawnIdContainer _creatureBySpawnIdStore;
diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp
index 994c02cb108..c448585cce8 100644
--- a/src/server/game/Scripting/ScriptMgr.cpp
+++ b/src/server/game/Scripting/ScriptMgr.cpp
@@ -1194,6 +1194,11 @@ ScriptObject::~ScriptObject()
sScriptMgr->DecreaseScriptCount();
}
+std::string const& ScriptObject::GetName() const
+{
+ return _name;
+}
+
ScriptMgr::ScriptMgr()
: _scriptCount(0), _scriptIdUpdated(false), _script_loader_callback(nullptr)
{
@@ -2336,6 +2341,16 @@ 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)
{
@@ -2344,6 +2359,30 @@ ServerScript::ServerScript(char const* name)
ServerScript::~ServerScript() = default;
+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)
{
@@ -2352,6 +2391,38 @@ WorldScript::WorldScript(char const* name)
WorldScript::~WorldScript() = default;
+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)
{
@@ -2360,16 +2431,76 @@ FormulaScript::FormulaScript(char const* name)
FormulaScript::~FormulaScript() = default;
-UnitScript::UnitScript(char const* name)
- : ScriptObject(name)
+void FormulaScript::OnHonorCalculation(float& /*honor*/, uint8 /*level*/, float /*multiplier*/)
{
- ScriptRegistry<UnitScript>::Instance()->AddScript(this);
}
-UnitScript::~UnitScript() = default;
+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*/)
+{
+}
+
+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*/)
+{
+}
+
+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);
@@ -2383,7 +2514,7 @@ WorldMapScript::WorldMapScript(char const* name, uint32 mapId)
WorldMapScript::~WorldMapScript() = default;
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);
@@ -2396,8 +2527,13 @@ InstanceMapScript::InstanceMapScript(char const* name, uint32 mapId)
InstanceMapScript::~InstanceMapScript() = default;
+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);
@@ -2418,6 +2554,59 @@ ItemScript::ItemScript(char const* name)
ItemScript::~ItemScript() = default;
+bool ItemScript::OnQuestAccept(Player* /*player*/, Item* /*item*/, Quest const* /*quest*/)
+{
+ return false;
+}
+
+bool ItemScript::OnUse(Player* /*player*/, Item* /*item*/, SpellCastTargets const& /*targets*/, ObjectGuid /*castId*/)
+{
+ 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);
+}
+
+UnitScript::~UnitScript() = default;
+
+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*/, SpellInfo const* /*spellInfo*/)
+{
+}
+
CreatureScript::CreatureScript(char const* name)
: ScriptObject(name)
{
@@ -2442,6 +2631,16 @@ AreaTriggerScript::AreaTriggerScript(char const* name)
AreaTriggerScript::~AreaTriggerScript() = default;
+bool AreaTriggerScript::OnTrigger(Player* /*player*/, AreaTriggerEntry const* /*trigger*/)
+{
+ return false;
+}
+
+bool AreaTriggerScript::OnExit(Player* /*player*/, AreaTriggerEntry const* /*trigger*/)
+{
+ return false;
+}
+
OnlyOnceAreaTriggerScript::~OnlyOnceAreaTriggerScript() = default;
bool OnlyOnceAreaTriggerScript::OnTrigger(Player* player, AreaTriggerEntry const* trigger)
@@ -2456,7 +2655,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)
@@ -2499,6 +2698,14 @@ WeatherScript::WeatherScript(char const* name)
WeatherScript::~WeatherScript() = default;
+void WeatherScript::OnChange(Weather* /*weather*/, WeatherState /*state*/, float /*grade*/)
+{
+}
+
+void WeatherScript::OnUpdate(Weather* /*weather*/, uint32 /*diff*/)
+{
+}
+
AuctionHouseScript::AuctionHouseScript(char const* name)
: ScriptObject(name)
{
@@ -2507,6 +2714,22 @@ AuctionHouseScript::AuctionHouseScript(char const* name)
AuctionHouseScript::~AuctionHouseScript() = default;
+void AuctionHouseScript::OnAuctionAdd(AuctionHouseObject* /*ah*/, AuctionPosting* /*auction*/)
+{
+}
+
+void AuctionHouseScript::OnAuctionRemove(AuctionHouseObject* /*ah*/, AuctionPosting* /*auction*/)
+{
+}
+
+void AuctionHouseScript::OnAuctionSuccessful(AuctionHouseObject* /*ah*/, AuctionPosting* /*auction*/)
+{
+}
+
+void AuctionHouseScript::OnAuctionExpire(AuctionHouseObject* /*ah*/, AuctionPosting* /*auction*/)
+{
+}
+
ConditionScript::ConditionScript(char const* name)
: ScriptObject(name)
{
@@ -2515,6 +2738,11 @@ ConditionScript::ConditionScript(char const* name)
ConditionScript::~ConditionScript() = default;
+bool ConditionScript::OnConditionCheck(Condition const* /*condition*/, ConditionSourceInfo& /*sourceInfo*/)
+{
+ return true;
+}
+
VehicleScript::VehicleScript(char const* name)
: ScriptObject(name)
{
@@ -2523,6 +2751,30 @@ VehicleScript::VehicleScript(char const* name)
VehicleScript::~VehicleScript() = default;
+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)
{
@@ -2531,6 +2783,10 @@ DynamicObjectScript::DynamicObjectScript(char const* name)
DynamicObjectScript::~DynamicObjectScript() = default;
+void DynamicObjectScript::OnUpdate(DynamicObject* /*obj*/, uint32 /*diff*/)
+{
+}
+
TransportScript::TransportScript(char const* name)
: ScriptObject(name)
{
@@ -2539,6 +2795,26 @@ TransportScript::TransportScript(char const* name)
TransportScript::~TransportScript() = default;
+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 /*mapId*/, float /*x*/, float /*y*/, float /*z*/)
+{
+}
+
+void TransportScript::OnUpdate(Transport* /*transport*/, uint32 /*diff*/)
+{
+}
+
AchievementScript::AchievementScript(char const* name)
: ScriptObject(name)
{
@@ -2547,6 +2823,10 @@ AchievementScript::AchievementScript(char const* name)
AchievementScript::~AchievementScript() = default;
+void AchievementScript::OnCompleted(Player* /*player*/, AchievementEntry const* /*achievement*/)
+{
+}
+
AchievementCriteriaScript::AchievementCriteriaScript(char const* name)
: ScriptObject(name)
{
@@ -2563,6 +2843,142 @@ PlayerScript::PlayerScript(char const* name)
PlayerScript::~PlayerScript() = default;
+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*/, int64& /*amount*/)
+{
+}
+
+void PlayerScript::OnMoneyLimit(Player* /*player*/, int64 /*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::OnClearEmote(Player* /*player*/)
+{
+}
+
+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*/)
+{
+}
+
+void PlayerScript::OnPlayerChoiceResponse(Player* /*player*/, uint32 /*choiceId*/, uint32 /*responseId*/)
+{
+}
+
AccountScript::AccountScript(char const* name)
: ScriptObject(name)
{
@@ -2571,6 +2987,30 @@ AccountScript::AccountScript(char const* name)
AccountScript::~AccountScript() = default;
+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)
{
@@ -2579,6 +3019,52 @@ GuildScript::GuildScript(char const* name)
GuildScript::~GuildScript() = default;
+void GuildScript::OnAddMember(Guild* /*guild*/, Player* /*player*/, uint8 /*plRank*/)
+{
+}
+
+void GuildScript::OnRemoveMember(Guild* /*guild*/, ObjectGuid /*guid*/, 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*/, uint64& /*amount*/, bool /*isRepair*/)
+{
+}
+
+void GuildScript::OnMemberDepositMoney(Guild* /*guild*/, Player* /*player*/, uint64& /*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*/, uint64 /*itemOrMoney*/, uint16 /*itemStackCount*/,
+ uint8 /*destTabId*/)
+{
+}
+
GroupScript::GroupScript(char const* name)
: ScriptObject(name)
{
@@ -2587,6 +3073,26 @@ GroupScript::GroupScript(char const* name)
GroupScript::~GroupScript() = default;
+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*/)
+{
+}
+
AreaTriggerEntityScript::AreaTriggerEntityScript(char const* name)
: ScriptObject(name)
{
@@ -2595,6 +3101,11 @@ AreaTriggerEntityScript::AreaTriggerEntityScript(char const* name)
AreaTriggerEntityScript::~AreaTriggerEntityScript() = default;
+AreaTriggerAI* AreaTriggerEntityScript::GetAI(AreaTrigger* /*at*/) const
+{
+ return nullptr;
+}
+
ConversationScript::ConversationScript(char const* name)
: ScriptObject(name)
{
@@ -2603,6 +3114,14 @@ ConversationScript::ConversationScript(char const* name)
ConversationScript::~ConversationScript() = default;
+void ConversationScript::OnConversationCreate(Conversation* /*conversation*/, Unit* /*creator*/)
+{
+}
+
+void ConversationScript::OnConversationLineStarted(Conversation* /*conversation*/, uint32 /*lineId*/, Player* /*sender*/)
+{
+}
+
SceneScript::SceneScript(char const* name)
: ScriptObject(name)
{
@@ -2611,6 +3130,22 @@ SceneScript::SceneScript(char const* name)
SceneScript::~SceneScript() = default;
+void SceneScript::OnSceneStart(Player* /*player*/, uint32 /*sceneInstanceID*/, SceneTemplate const* /*sceneTemplate*/)
+{
+}
+
+void SceneScript::OnSceneTriggerEvent(Player* /*player*/, uint32 /*sceneInstanceID*/, SceneTemplate const* /*sceneTemplate*/, std::string const& /*triggerName*/)
+{
+}
+
+void SceneScript::OnSceneCancel(Player* /*player*/, uint32 /*sceneInstanceID*/, SceneTemplate const* /*sceneTemplate*/)
+{
+}
+
+void SceneScript::OnSceneComplete(Player* /*player*/, uint32 /*sceneInstanceID*/, SceneTemplate const* /*sceneTemplate*/)
+{
+}
+
QuestScript::QuestScript(char const* name)
: ScriptObject(name)
{
@@ -2619,6 +3154,18 @@ QuestScript::QuestScript(char const* name)
QuestScript::~QuestScript() = default;
+void QuestScript::OnQuestStatusChange(Player* /*player*/, Quest const* /*quest*/, QuestStatus /*oldStatus*/, QuestStatus /*newStatus*/)
+{
+}
+
+void QuestScript::OnAcknowledgeAutoAccept(Player* /*player*/, Quest const* /*quest*/)
+{
+}
+
+void QuestScript::OnQuestObjectiveChange(Player* /*player*/, Quest const* /*quest*/, QuestObjective const& /*objective*/, int32 /*oldAmount*/, int32 /*newAmount*/)
+{
+}
+
WorldStateScript::WorldStateScript(char const* name)
: ScriptObject(name)
{
@@ -2627,6 +3174,10 @@ WorldStateScript::WorldStateScript(char const* name)
WorldStateScript::~WorldStateScript() = default;
+void WorldStateScript::OnValueChange(int32 /*worldStateId*/, int32 /*oldValue*/, int32 /*newValue*/, Map const* /*map*/)
+{
+}
+
// 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 672f5dc6bf0..91d1b3902e8 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;
@@ -181,7 +182,7 @@ class TC_GAME_API ScriptObject
ScriptObject& operator=(ScriptObject const& right) = delete;
ScriptObject& operator=(ScriptObject&& right) = delete;
- const std::string& GetName() const { return _name; }
+ std::string const& GetName() const;
protected:
@@ -190,201 +191,182 @@ class TC_GAME_API ScriptObject
private:
- const std::string _name;
-};
-
-template<class TObject> class UpdatableScript
-{
- protected:
-
- UpdatableScript()
- {
- }
-
- virtual ~UpdatableScript() { }
-
- public:
-
- UpdatableScript(UpdatableScript const& right) = delete;
- UpdatableScript(UpdatableScript&& right) = delete;
- UpdatableScript& operator=(UpdatableScript const& right) = delete;
- UpdatableScript& operator=(UpdatableScript&& right) = delete;
-
- 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:
~ServerScript();
// 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:
~WorldScript();
// 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:
~FormulaScript();
// 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*/) { }
+ virtual void OnBaseGainCalculation(uint32& gain, uint8 playerLevel, uint8 mobLevel);
// 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>
+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 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);
public:
~WorldMapScript();
};
-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:
~InstanceMapScript();
// 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);
public:
@@ -395,97 +377,97 @@ class TC_GAME_API ItemScript : public ScriptObject
{
protected:
- ItemScript(char const* name);
+ explicit ItemScript(char const* name);
public:
~ItemScript();
// 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*/, ObjectGuid /*castId*/) { return false; }
+ virtual bool OnUse(Player* player, Item* item, SpellCastTargets const& targets, ObjectGuid castId);
// 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:
~UnitScript();
// 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*/, SpellInfo const* /*spellInfo*/) { }
+ virtual void ModifySpellDamageTaken(Unit* target, Unit* attacker, int32& damage, SpellInfo const* spellInfo);
};
class TC_GAME_API CreatureScript : public ScriptObject
{
protected:
- CreatureScript(char const* name);
+ explicit CreatureScript(char const* name);
public:
~CreatureScript();
// 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:
~GameObjectScript();
// 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:
~AreaTriggerScript();
// 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);
// Called when the area trigger is left by a player.
- virtual bool OnExit(Player* /*player*/, AreaTriggerEntry const* /*trigger*/) { return false; }
+ virtual bool OnExit(Player* player, AreaTriggerEntry const* trigger);
};
class TC_GAME_API OnlyOnceAreaTriggerScript : public AreaTriggerScript
@@ -500,16 +482,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:
@@ -522,7 +504,7 @@ class TC_GAME_API BattlegroundScript : public ScriptObject
{
protected:
- BattlegroundScript(char const* name);
+ explicit BattlegroundScript(char const* name);
public:
@@ -536,7 +518,7 @@ class TC_GAME_API OutdoorPvPScript : public ScriptObject
{
protected:
- OutdoorPvPScript(char const* name);
+ explicit OutdoorPvPScript(char const* name);
public:
@@ -550,7 +532,7 @@ class TC_GAME_API CommandScript : public ScriptObject
{
protected:
- CommandScript(char const* name);
+ explicit CommandScript(char const* name);
public:
@@ -560,139 +542,145 @@ 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:
~WeatherScript();
// 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:
~AuctionHouseScript();
// Called when an auction is added to an auction house.
- virtual void OnAuctionAdd(AuctionHouseObject* /*ah*/, AuctionPosting* /*auction*/) { }
+ virtual void OnAuctionAdd(AuctionHouseObject* ah, AuctionPosting* auction);
// Called when an auction is removed from an auction house.
- virtual void OnAuctionRemove(AuctionHouseObject* /*ah*/, AuctionPosting* /*auction*/) { }
+ virtual void OnAuctionRemove(AuctionHouseObject* ah, AuctionPosting* auction);
// Called when an auction was succesfully completed.
- virtual void OnAuctionSuccessful(AuctionHouseObject* /*ah*/, AuctionPosting* /*auction*/) { }
+ virtual void OnAuctionSuccessful(AuctionHouseObject* ah, AuctionPosting* auction);
// Called when an auction expires.
- virtual void OnAuctionExpire(AuctionHouseObject* /*ah*/, AuctionPosting* /*auction*/) { }
+ virtual void OnAuctionExpire(AuctionHouseObject* ah, AuctionPosting* auction);
};
class TC_GAME_API ConditionScript : public ScriptObject
{
protected:
- ConditionScript(char const* name);
+ explicit ConditionScript(char const* name);
public:
~ConditionScript();
// 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:
~VehicleScript();
// 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:
~DynamicObjectScript();
+
+ 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:
~TransportScript();
// 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 /*mapId*/, float /*x*/, float /*y*/, float /*z*/) { }
+ virtual void OnRelocate(Transport* transport, uint32 mapId, float x, float y, float z);
+
+ virtual void OnUpdate(Transport* transport, uint32 diff);
};
class TC_GAME_API AchievementScript : public ScriptObject
{
protected:
- AchievementScript(char const* name);
+ explicit AchievementScript(char const* name);
public:
~AchievementScript();
// Called when an achievement is completed.
- virtual void OnCompleted(Player* /*player*/, AchievementEntry const* /*achievement*/) { }
+ virtual void OnCompleted(Player* player, AchievementEntry const* achievement);
};
class TC_GAME_API AchievementCriteriaScript : public ScriptObject
{
protected:
- AchievementCriteriaScript(char const* name);
+ explicit AchievementCriteriaScript(char const* name);
public:
@@ -706,293 +694,294 @@ class TC_GAME_API PlayerScript : public ScriptObject
{
protected:
- PlayerScript(char const* name);
+ explicit PlayerScript(char const* name);
public:
~PlayerScript();
// 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*/, int64& /*amount*/) { }
+ virtual void OnMoneyChanged(Player* player, int64& amount);
// Called when a player's money is at limit (amount = money tried to add)
- virtual void OnMoneyLimit(Player* /*player*/, int64 /*amount*/) { }
+ virtual void OnMoneyLimit(Player* player, int64 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 OnClearEmote(Player* /*player*/) { }
+ virtual void OnClearEmote(Player* player);
- 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 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*/) { }
+ 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 choose a response from a PlayerChoice
- virtual void OnPlayerChoiceResponse(Player* /*player*/, uint32 /*choiceId*/, uint32 /*responseId*/) { }
+ virtual void OnPlayerChoiceResponse(Player* player, uint32 choiceId, uint32 responseId);
};
class TC_GAME_API AccountScript : public ScriptObject
{
protected:
- AccountScript(char const* name);
+ explicit AccountScript(char const* name);
public:
~AccountScript();
// 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:
~GuildScript();
// 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*/, ObjectGuid /*guid*/, bool /*isDisbanding*/, bool /*isKicked*/) { }
+ virtual void OnRemoveMember(Guild* guild, ObjectGuid guid, 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*/, uint64& /*amount*/, bool /*isRepair*/) { }
+ virtual void OnMemberWitdrawMoney(Guild* guild, Player* player, uint64& amount, bool isRepair);
// Called when a guild member deposits money in a guild bank.
- virtual void OnMemberDepositMoney(Guild* /*guild*/, Player* /*player*/, uint64& /*amount*/) { }
+ virtual void OnMemberDepositMoney(Guild* guild, Player* player, uint64& 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*/, uint64 /*itemOrMoney*/, uint16 /*itemStackCount*/, uint8 /*destTabId*/) { }
+ virtual void OnBankEvent(Guild* guild, uint8 eventType, uint8 tabId, ObjectGuid::LowType playerGuid, uint64 itemOrMoney, uint16 itemStackCount, uint8 destTabId);
};
class TC_GAME_API GroupScript : public ScriptObject
{
protected:
- GroupScript(char const* name);
+ explicit GroupScript(char const* name);
public:
~GroupScript();
// 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);
};
class TC_GAME_API AreaTriggerEntityScript : public ScriptObject
{
protected:
- AreaTriggerEntityScript(char const* name);
+ explicit AreaTriggerEntityScript(char const* name);
public:
~AreaTriggerEntityScript();
// Called when a AreaTriggerAI object is needed for the areatrigger.
- virtual AreaTriggerAI* GetAI(AreaTrigger* /*at*/) const { return nullptr; }
+ virtual AreaTriggerAI* GetAI(AreaTrigger* at) const;
};
class TC_GAME_API ConversationScript : public ScriptObject
{
protected:
- ConversationScript(char const* name);
+
+ explicit ConversationScript(char const* name);
public:
~ConversationScript();
// Called when Conversation is created but not added to Map yet.
- virtual void OnConversationCreate(Conversation* /*conversation*/, Unit* /*creator*/) { }
+ virtual void OnConversationCreate(Conversation* conversation, Unit* creator);
// Called when player sends CMSG_CONVERSATION_LINE_STARTED with valid conversation guid
- virtual void OnConversationLineStarted(Conversation* /*conversation*/, uint32 /*lineId*/, Player* /*sender*/) { }
+ virtual void OnConversationLineStarted(Conversation* conversation, uint32 lineId, Player* sender);
};
class TC_GAME_API SceneScript : public ScriptObject
{
protected:
- SceneScript(char const* name);
+ explicit SceneScript(char const* name);
public:
~SceneScript();
// Called when a player start a scene
- virtual void OnSceneStart(Player* /*player*/, uint32 /*sceneInstanceID*/, SceneTemplate const* /*sceneTemplate*/) { }
+ virtual void OnSceneStart(Player* player, uint32 sceneInstanceID, SceneTemplate const* sceneTemplate);
// Called when a player receive trigger from scene
- virtual void OnSceneTriggerEvent(Player* /*player*/, uint32 /*sceneInstanceID*/, SceneTemplate const* /*sceneTemplate*/, std::string const& /*triggerName*/) { }
+ virtual void OnSceneTriggerEvent(Player* player, uint32 sceneInstanceID, SceneTemplate const* sceneTemplate, std::string const& triggerName);
// Called when a scene is canceled
- virtual void OnSceneCancel(Player* /*player*/, uint32 /*sceneInstanceID*/, SceneTemplate const* /*sceneTemplate*/) { }
+ virtual void OnSceneCancel(Player* player, uint32 sceneInstanceID, SceneTemplate const* sceneTemplate);
// Called when a scene is completed
- virtual void OnSceneComplete(Player* /*player*/, uint32 /*sceneInstanceID*/, SceneTemplate const* /*sceneTemplate*/) { }
+ virtual void OnSceneComplete(Player* player, uint32 sceneInstanceID, SceneTemplate const* sceneTemplate);
};
class TC_GAME_API QuestScript : public ScriptObject
{
protected:
- QuestScript(char const* name);
+ explicit QuestScript(char const* name);
public:
~QuestScript();
// Called when a quest status change
- virtual void OnQuestStatusChange(Player* /*player*/, Quest const* /*quest*/, QuestStatus /*oldStatus*/, QuestStatus /*newStatus*/) { }
+ virtual void OnQuestStatusChange(Player* player, Quest const* quest, QuestStatus oldStatus, QuestStatus newStatus);
// Called for auto accept quests when player closes quest UI after seeing initial quest details
- virtual void OnAcknowledgeAutoAccept(Player* /*player*/, Quest const* /*quest*/) { }
+ virtual void OnAcknowledgeAutoAccept(Player* player, Quest const* quest);
// Called when a quest objective data change
- virtual void OnQuestObjectiveChange(Player* /*player*/, Quest const* /*quest*/, QuestObjective const& /*objective*/, int32 /*oldAmount*/, int32 /*newAmount*/) { }
+ virtual void OnQuestObjectiveChange(Player* player, Quest const* quest, QuestObjective const& objective, int32 oldAmount, int32 newAmount);
};
class TC_GAME_API WorldStateScript : public ScriptObject
{
protected:
- WorldStateScript(char const* name);
+ explicit WorldStateScript(char const* name);
public:
~WorldStateScript();
// Called when worldstate changes value, map is optional
- virtual void OnValueChange([[maybe_unused]] int32 worldStateId, [[maybe_unused]] int32 oldValue, [[maybe_unused]] int32 newValue, [[maybe_unused]] Map const* map) { }
+ virtual void OnValueChange(int32 worldStateId, int32 oldValue, int32 newValue, Map const* map);
};
// Manages registration, loading, and execution of scripts.
diff --git a/src/server/game/Spells/SpellScript.cpp b/src/server/game/Spells/SpellScript.cpp
index d79b43211a7..3ccbe1c8ff9 100644
--- a/src/server/game/Spells/SpellScript.cpp
+++ b/src/server/game/Spells/SpellScript.cpp
@@ -412,6 +412,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)
@@ -1275,6 +1281,12 @@ void AuraScript::EnterLeaveCombatHandler::Call(AuraScript* auraScript, bool isNo
(auraScript->*_handlerScript)(isNowInCombat);
}
+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 044122a3a51..3c7d47760e6 100644
--- a/src/server/game/Spells/SpellScript.h
+++ b/src/server/game/Spells/SpellScript.h
@@ -416,7 +416,8 @@ class TC_GAME_API SpellScript : public _SpellScript
#define PrepareSpellScript(CLASSNAME) SPELLSCRIPT_FUNCTION_TYPE_DEFINES(CLASSNAME) SPELLSCRIPT_FUNCTION_CAST_DEFINES(CLASSNAME)
public:
- SpellScript() : m_spell(nullptr), m_hitPreventEffectMask(0), m_hitPreventDefaultEffectMask(0) { }
+ SpellScript();
+ ~SpellScript();
bool _Validate(SpellInfo const* entry) override;
bool _Load(Spell* spell);
void _InitHit();
@@ -972,8 +973,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/game/Spells/TraitMgr.cpp b/src/server/game/Spells/TraitMgr.cpp
index 20bae857fdb..6bfe9e49b6d 100644
--- a/src/server/game/Spells/TraitMgr.cpp
+++ b/src/server/game/Spells/TraitMgr.cpp
@@ -18,9 +18,9 @@
#include "TraitMgr.h"
#include "DB2Stores.h"
#include "IteratorPair.h"
-#include "Player.h"
#include "MapUtils.h"
#include "TraitPacketsCommon.h"
+#include "UpdateFields.h"
namespace TraitMgr
{
@@ -359,7 +359,7 @@ void TakeCurrencyCost(WorldPackets::Traits::TraitEntry const& entry, std::map<in
currencies[cost->TraitCurrencyID] -= cost->Amount * entry.Rank;
}
-void FillOwnedCurrenciesMap(WorldPackets::Traits::TraitConfig const& traitConfig, Player const* player, std::map<int32, int32>& currencies)
+void FillOwnedCurrenciesMap(WorldPackets::Traits::TraitConfig const& traitConfig, PlayerDataAccessor player, std::map<int32, int32>& currencies)
{
std::vector<Tree const*> const* trees = GetTreesForConfig(traitConfig);
if (!trees)
@@ -382,27 +382,27 @@ void FillOwnedCurrenciesMap(WorldPackets::Traits::TraitConfig const& traitConfig
case TraitCurrencyType::Gold:
{
int32& amount = currencies[currency->ID];
- if (player->GetMoney() > uint64(std::numeric_limits<int32>::max() - amount))
+ if (player.GetMoney() > uint64(std::numeric_limits<int32>::max() - amount))
amount = std::numeric_limits<int32>::max();
else
- amount += player->GetMoney();
+ amount += player.GetMoney();
break;
}
case TraitCurrencyType::CurrencyTypesBased:
- currencies[currency->ID] += player->GetCurrency(currency->CurrencyTypesID);
+ currencies[currency->ID] += player.GetCurrency(currency->CurrencyTypesID);
break;
case TraitCurrencyType::TraitSourced:
if (std::vector<TraitCurrencySourceEntry const*>* currencySources = Trinity::Containers::MapGetValuePtr(_traitCurrencySourcesByCurrency, currency->ID))
{
for (TraitCurrencySourceEntry const* currencySource : *currencySources)
{
- if (currencySource->QuestID && !player->IsQuestRewarded(currencySource->QuestID))
+ if (currencySource->QuestID && !player.IsQuestRewarded(currencySource->QuestID))
continue;
- if (currencySource->AchievementID && !player->HasAchieved(currencySource->AchievementID))
+ if (currencySource->AchievementID && !player.HasAchieved(currencySource->AchievementID))
continue;
- if (currencySource->PlayerLevel && player->GetLevel() < currencySource->PlayerLevel)
+ if (currencySource->PlayerLevel && player.GetLevel() < currencySource->PlayerLevel)
continue;
if (currencySource->TraitNodeEntryID && !hasTraitNodeEntry(currencySource->TraitNodeEntryID))
@@ -445,18 +445,18 @@ void FillSpentCurrenciesMap(WorldPackets::Traits::TraitConfig const& traitConfig
FillSpentCurrenciesMap(entry, cachedCurrencies);
}
-bool MeetsTraitCondition(WorldPackets::Traits::TraitConfig const& traitConfig, Player const* player, TraitCondEntry const* condition,
+bool MeetsTraitCondition(WorldPackets::Traits::TraitConfig const& traitConfig, PlayerDataAccessor player, TraitCondEntry const* condition,
Optional<std::map<int32, int32>>& cachedCurrencies)
{
- if (condition->QuestID && !player->IsQuestRewarded(condition->QuestID))
+ if (condition->QuestID && !player.IsQuestRewarded(condition->QuestID))
return false;
- if (condition->AchievementID && !player->HasAchieved(condition->AchievementID))
+ if (condition->AchievementID && !player.HasAchieved(condition->AchievementID))
return false;
if (condition->SpecSetID)
{
- uint32 chrSpecializationId = player->GetPrimarySpecialization();
+ uint32 chrSpecializationId = player.GetPrimarySpecialization();
if (traitConfig.Type == TraitConfigType::Combat)
chrSpecializationId = traitConfig.ChrSpecializationID;
@@ -483,13 +483,13 @@ bool MeetsTraitCondition(WorldPackets::Traits::TraitConfig const& traitConfig, P
}
}
- if (condition->RequiredLevel && int32(player->GetLevel()) < condition->RequiredLevel)
+ if (condition->RequiredLevel && player.GetLevel() < condition->RequiredLevel)
return false;
return true;
}
-std::vector<UF::TraitEntry> GetGrantedTraitEntriesForConfig(WorldPackets::Traits::TraitConfig const& traitConfig, Player const* player)
+std::vector<UF::TraitEntry> GetGrantedTraitEntriesForConfig(WorldPackets::Traits::TraitConfig const& traitConfig, PlayerDataAccessor player)
{
std::vector<UF::TraitEntry> entries;
std::vector<Tree const*> const* trees = GetTreesForConfig(traitConfig);
@@ -556,7 +556,7 @@ bool IsValidEntry(WorldPackets::Traits::TraitEntry const& traitEntry)
return true;
}
-TalentLearnResult ValidateConfig(WorldPackets::Traits::TraitConfig const& traitConfig, Player const* player, bool requireSpendingAllCurrencies /*= false*/)
+LearnResult ValidateConfig(WorldPackets::Traits::TraitConfig const& traitConfig, PlayerDataAccessor player, bool requireSpendingAllCurrencies /*= false*/)
{
auto getNodeEntryCount = [&](int32 traitNodeId)
{
@@ -614,23 +614,23 @@ TalentLearnResult ValidateConfig(WorldPackets::Traits::TraitConfig const& traitC
for (WorldPackets::Traits::TraitEntry const& traitEntry : traitConfig.Entries)
{
if (!IsValidEntry(traitEntry))
- return TALENT_FAILED_UNKNOWN;
+ return LearnResult::Unknown;
Node const* node = Trinity::Containers::MapGetValuePtr(_traitNodes, traitEntry.TraitNodeID);
if (node->Data->GetType() == TraitNodeType::Selection)
if (getNodeEntryCount(traitEntry.TraitNodeID) != 1)
- return TALENT_FAILED_UNKNOWN;
+ return LearnResult::Unknown;
for (NodeEntry const& entry : node->Entries)
if (!meetsConditions(entry.Conditions))
- return TALENT_FAILED_UNKNOWN;
+ return LearnResult::Unknown;
if (!meetsConditions(node->Conditions))
- return TALENT_FAILED_UNKNOWN;
+ return LearnResult::Unknown;
for (NodeGroup const* group : node->Groups)
if (!meetsConditions(group->Conditions))
- return TALENT_FAILED_UNKNOWN;
+ return LearnResult::Unknown;
if (!node->ParentNodes.empty())
{
@@ -640,7 +640,7 @@ TalentLearnResult ValidateConfig(WorldPackets::Traits::TraitConfig const& traitC
if (!isNodeFullyFilled(parentNode))
{
if (edgeType == TraitEdgeType::RequiredForAvailability)
- return TALENT_FAILED_NOT_ENOUGH_TALENTS_IN_PRIMARY_TREE;
+ return LearnResult::NotEnoughTalentsInPrimaryTree;
continue;
}
@@ -649,7 +649,7 @@ TalentLearnResult ValidateConfig(WorldPackets::Traits::TraitConfig const& traitC
}
if (!hasAnyParentTrait)
- return TALENT_FAILED_NOT_ENOUGH_TALENTS_IN_PRIMARY_TREE;
+ return LearnResult::NotEnoughTalentsInPrimaryTree;
}
}
@@ -666,7 +666,7 @@ TalentLearnResult ValidateConfig(WorldPackets::Traits::TraitConfig const& traitC
int32* grantedCount = Trinity::Containers::MapGetValuePtr(grantedCurrencies, traitCurrencyId);
if (!grantedCount || *grantedCount < spentAmount)
- return TALENT_FAILED_NOT_ENOUGH_TALENTS_IN_PRIMARY_TREE;
+ return LearnResult::NotEnoughTalentsInPrimaryTree;
}
@@ -679,11 +679,11 @@ TalentLearnResult ValidateConfig(WorldPackets::Traits::TraitConfig const& traitC
int32* spentAmount = Trinity::Containers::MapGetValuePtr(*spentCurrencies, traitCurrencyId);
if (!spentAmount || *spentAmount != grantedAmount)
- return TALENT_FAILED_UNSPENT_TALENT_POINTS;
+ return LearnResult::UnspentTalentPoints;
}
}
- return TALENT_LEARN_OK;
+ return LearnResult::Ok;
}
std::vector<TraitDefinitionEffectPointsEntry const*> const* GetTraitDefinitionEffectPointModifiers(int32 traitDefinitionId)
@@ -691,7 +691,7 @@ std::vector<TraitDefinitionEffectPointsEntry const*> const* GetTraitDefinitionEf
return Trinity::Containers::MapGetValuePtr(_traitDefinitionEffectPointModifiers, traitDefinitionId);
}
-void InitializeStarterBuildTraitConfig(WorldPackets::Traits::TraitConfig& traitConfig, Player const* player)
+void InitializeStarterBuildTraitConfig(WorldPackets::Traits::TraitConfig& traitConfig, PlayerDataAccessor player)
{
traitConfig.Entries.clear();
std::vector<Tree const*> const* trees = GetTreesForConfig(traitConfig);
diff --git a/src/server/game/Spells/TraitMgr.h b/src/server/game/Spells/TraitMgr.h
index 2350f2bb92d..aceccbfe916 100644
--- a/src/server/game/Spells/TraitMgr.h
+++ b/src/server/game/Spells/TraitMgr.h
@@ -43,15 +43,45 @@ namespace TraitMgr
constexpr uint32 COMMIT_COMBAT_TRAIT_CONFIG_CHANGES_SPELL_ID = 384255u;
constexpr uint32 MAX_COMBAT_TRAIT_CONFIGS = 10u;
+enum class LearnResult : int32
+{
+ Ok = 0,
+ Unknown = 1,
+ NotEnoughTalentsInPrimaryTree = 2,
+ NoPrimaryTreeSelected = 3,
+ CantDoThatRightNow = 4,
+ AffectingCombat = 5,
+ CantRemoveTalent = 6,
+ CantDoThatChallengeModeActive = 7,
+ RestArea = 8,
+ UnspentTalentPoints = 9,
+ InPvpMatch = 10
+};
+
+struct PlayerDataAccessor
+{
+ /*implicit*/ PlayerDataAccessor(Player const* player) : _player(player) { }
+
+ uint64 GetMoney() const;
+ int32 GetCurrency(int32 currencyId) const;
+ int32 GetLevel() const;
+ bool IsQuestRewarded(int32 questId) const;
+ bool HasAchieved(int32 achievementId) const;
+ uint32 GetPrimarySpecialization() const;
+
+private:
+ Player const* _player;
+};
+
void Load();
int32 GenerateNewTraitConfigId();
TraitConfigType GetConfigTypeForTree(int32 traitTreeId);
void FillSpentCurrenciesMap(WorldPackets::Traits::TraitEntry const& entry, std::map<int32, int32>& cachedCurrencies);
-std::vector<UF::TraitEntry> GetGrantedTraitEntriesForConfig(WorldPackets::Traits::TraitConfig const& traitConfig, Player const* player);
+std::vector<UF::TraitEntry> GetGrantedTraitEntriesForConfig(WorldPackets::Traits::TraitConfig const& traitConfig, PlayerDataAccessor player);
bool IsValidEntry(WorldPackets::Traits::TraitEntry const& traitEntry);
-TalentLearnResult ValidateConfig(WorldPackets::Traits::TraitConfig const& traitConfig, Player const* player, bool requireSpendingAllCurrencies = false);
+LearnResult ValidateConfig(WorldPackets::Traits::TraitConfig const& traitConfig, PlayerDataAccessor player, bool requireSpendingAllCurrencies = false);
std::vector<TraitDefinitionEffectPointsEntry const*> const* GetTraitDefinitionEffectPointModifiers(int32 traitDefinitionId);
-void InitializeStarterBuildTraitConfig(WorldPackets::Traits::TraitConfig& traitConfig, Player const* player);
+void InitializeStarterBuildTraitConfig(WorldPackets::Traits::TraitConfig& traitConfig, PlayerDataAccessor player);
}
#endif // TRINITY_TRAIT_MGR_H
diff --git a/src/server/shared/Realm/Realm.h b/src/server/shared/Realm/Realm.h
index a04a3ea9139..21627887b31 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/tools/extractor_common/DB2CascFileSource.h b/src/tools/extractor_common/DB2CascFileSource.h
index 82809db604e..b68a532584c 100644
--- a/src/tools/extractor_common/DB2CascFileSource.h
+++ b/src/tools/extractor_common/DB2CascFileSource.h
@@ -20,6 +20,7 @@
#include "DB2FileLoader.h"
#include "CascHandles.h"
+#include <memory>
#include <string>
struct DB2CascFileSource : public DB2FileSource
diff --git a/src/tools/mmaps_generator/PathCommon.h b/src/tools/mmaps_generator/PathCommon.h
index fed5698b119..c098ff02f4c 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 <unordered_map>
#include <vector>