fix(Core/Spells): Forward core changes (#8841)

This commit is contained in:
acidmanifesto
2021-12-09 22:24:16 +01:00
committed by GitHub
parent 0300cef119
commit 85d2c39a48
14 changed files with 233 additions and 140 deletions

View File

@@ -640,6 +640,11 @@ ConditionMgr::~ConditionMgr()
Clean();
}
bool ConditionMgr::IsSpellUsedInSpellClickConditions(uint32 spellId) const
{
return SpellsUsedInSpellClickConditions.find(spellId) != SpellsUsedInSpellClickConditions.end();
}
ConditionMgr* ConditionMgr::instance()
{
static ConditionMgr instance;
@@ -694,7 +699,7 @@ uint32 ConditionMgr::GetSearcherTypeMaskForConditionList(ConditionList const& co
return mask;
}
bool ConditionMgr::IsObjectMeetToConditionList(ConditionSourceInfo& sourceInfo, ConditionList const& conditions)
bool ConditionMgr::IsObjectMeetToConditionList(ConditionSourceInfo& sourceInfo, ConditionList const& conditions) const
{
// groupId, groupCheckPassed
std::map<uint32, bool> ElseGroupStore;
@@ -738,19 +743,19 @@ bool ConditionMgr::IsObjectMeetToConditionList(ConditionSourceInfo& sourceInfo,
return false;
}
bool ConditionMgr::IsObjectMeetToConditions(WorldObject* object, ConditionList const& conditions)
bool ConditionMgr::IsObjectMeetToConditions(WorldObject* object, ConditionList const& conditions) const
{
ConditionSourceInfo srcInfo = ConditionSourceInfo(object);
return IsObjectMeetToConditions(srcInfo, conditions);
}
bool ConditionMgr::IsObjectMeetToConditions(WorldObject* object1, WorldObject* object2, ConditionList const& conditions)
bool ConditionMgr::IsObjectMeetToConditions(WorldObject* object1, WorldObject* object2, ConditionList const& conditions) const
{
ConditionSourceInfo srcInfo = ConditionSourceInfo(object1, object2);
return IsObjectMeetToConditions(srcInfo, conditions);
}
bool ConditionMgr::IsObjectMeetToConditions(ConditionSourceInfo& sourceInfo, ConditionList const& conditions)
bool ConditionMgr::IsObjectMeetToConditions(ConditionSourceInfo& sourceInfo, ConditionList const& conditions) const
{
if (conditions.empty())
return true;
@@ -1055,6 +1060,10 @@ void ConditionMgr::LoadConditions(bool isReload)
case CONDITION_SOURCE_TYPE_SPELL_CLICK_EVENT:
{
SpellClickEventConditionStore[cond->SourceGroup][cond->SourceEntry].push_back(cond);
if (cond->ConditionType == CONDITION_AURA)
{
SpellsUsedInSpellClickConditions.insert(cond->ConditionValue1);
}
valid = true;
++count;
continue; // do not add to m_AllocatedMemory to avoid double deleting
@@ -1123,6 +1132,10 @@ void ConditionMgr::LoadConditions(bool isReload)
}
// add new Condition to storage based on Type/Entry
if (cond->SourceType == CONDITION_SOURCE_TYPE_SPELL_CLICK_EVENT && cond->ConditionType == CONDITION_AURA)
{
SpellsUsedInSpellClickConditions.insert(cond->ConditionValue1);
}
ConditionStore[cond->SourceType][cond->SourceEntry].push_back(cond);
++count;
} while (result->NextRow());
@@ -2314,7 +2327,7 @@ void ConditionMgr::Clean()
itr->second.clear();
}
SpellClickEventConditionStore.clear();
SpellsUsedInSpellClickConditions.clear();
for (NpcVendorConditionContainer::iterator itr = NpcVendorConditionContainerStore.begin(); itr != NpcVendorConditionContainerStore.end(); ++itr)
{

View File

@@ -22,7 +22,10 @@
#include "Errors.h"
#include <list>
#include <map>
#include <unordered_set>
#include <vector>
class Creature;
class Player;
class Unit;
class WorldObject;
@@ -254,9 +257,9 @@ public:
ConditionList GetConditionReferences(uint32 refId);
uint32 GetSearcherTypeMaskForConditionList(ConditionList const& conditions);
bool IsObjectMeetToConditions(WorldObject* object, ConditionList const& conditions);
bool IsObjectMeetToConditions(WorldObject* object1, WorldObject* object2, ConditionList const& conditions);
bool IsObjectMeetToConditions(ConditionSourceInfo& sourceInfo, ConditionList const& conditions);
bool IsObjectMeetToConditions(WorldObject* object, ConditionList const& conditions) const;
bool IsObjectMeetToConditions(WorldObject* object1, WorldObject* object2, ConditionList const& conditions) const;
bool IsObjectMeetToConditions(ConditionSourceInfo& sourceInfo, ConditionList const& conditions) const;
[[nodiscard]] bool CanHaveSourceGroupSet(ConditionSourceType sourceType) const;
[[nodiscard]] bool CanHaveSourceIdSet(ConditionSourceType sourceType) const;
ConditionList GetConditionsForNotGroupedEntry(ConditionSourceType sourceType, uint32 entry);
@@ -264,6 +267,7 @@ public:
ConditionList GetConditionsForSmartEvent(int32 entryOrGuid, uint32 eventId, uint32 sourceType);
ConditionList GetConditionsForVehicleSpell(uint32 creatureId, uint32 spellId);
ConditionList GetConditionsForNpcVendorEvent(uint32 creatureId, uint32 itemId);
bool IsSpellUsedInSpellClickConditions(uint32 spellId) const;
private:
bool isSourceTypeValid(Condition* cond);
@@ -271,7 +275,7 @@ private:
bool addToGossipMenus(Condition* cond);
bool addToGossipMenuItems(Condition* cond);
bool addToSpellImplicitTargetConditions(Condition* cond);
bool IsObjectMeetToConditionList(ConditionSourceInfo& sourceInfo, ConditionList const& conditions);
bool IsObjectMeetToConditionList(ConditionSourceInfo& sourceInfo, ConditionList const& conditions) const;
void Clean(); // free up resources
std::list<Condition*> AllocatedMemoryStore; // some garbage collection :)
@@ -282,6 +286,8 @@ private:
CreatureSpellConditionContainer SpellClickEventConditionStore;
NpcVendorConditionContainer NpcVendorConditionContainerStore;
SmartEventConditionContainer SmartEventConditionStore;
std::unordered_set<uint32> SpellsUsedInSpellClickConditions;
};
#define sConditionMgr ConditionMgr::instance()