18#ifndef CriteriaHandler_h__
19#define CriteriaHandler_h__
26#include <unordered_map>
82 std::time_t
Date = std::time_t(0);
235 Raw.Value1 = _value1;
236 Raw.Value2 = _value2;
275 virtual void Reset();
291 void RemoveCriteriaProgress(
Criteria const* criteria);
296 virtual bool CanCompleteCriteriaTree(
CriteriaTree const* tree);
300 bool IsCompletedCriteria(
Criteria const* criteria,
uint64 requiredAmount);
305 bool ConditionsSatisfied(
Criteria const* criteria,
Player* referencePlayer)
const;
329 static char const* GetCriteriaTypeString(
CriteriaType type);
330 static char const* GetCriteriaTypeString(
uint32 type);
338 return _guildCriteriasByType[size_t(type)];
345 return _questObjectiveCriteriasByType[size_t(type)];
350 auto itr = _criteriaTreeByCriteria.find(criteriaId);
351 return itr != _criteriaTreeByCriteria.end() ? &itr->second :
nullptr;
354 std::unordered_map<int32, CriteriaList>
const& GetCriteriaByStartEvent(
CriteriaStartEvent startEvent)
const;
357 std::unordered_map<int32, CriteriaList>
const& GetCriteriaByFailEvent(
CriteriaFailEvent failEvent)
const;
362 auto iter = _criteriaDataMap.find(
Criteria->
ID);
363 return iter != _criteriaDataMap.end() ? &iter->second :
nullptr;
384 template<
typename Func>
388 WalkCriteriaTree(node, func);
393 void LoadCriteriaModifiersTree();
394 void LoadCriteriaList();
395 void LoadCriteriaData();
400 static std::span<CriteriaType const> GetRetroactivelyUpdateableCriteriaTypes();
423#define sCriteriaMgr CriteriaMgr::Instance()
@ CRITERIA_FLAG_CU_ACCOUNT
@ CRITERIA_FLAG_CU_PLAYER
@ CRITERIA_FLAG_CU_QUEST_OBJECTIVE
@ CRITERIA_FLAG_CU_SCENARIO
std::unordered_map< uint32, CriteriaProgress > CriteriaProgressMap
std::unordered_map< uint32, CriteriaList > CriteriaListByAsset
std::vector< Criteria const * > CriteriaList
std::vector< CriteriaTree const * > CriteriaTreeList
@ CRITERIA_DATA_TYPE_INSTANCE_SCRIPT
@ CRITERIA_DATA_TYPE_T_LEVEL
@ CRITERIA_DATA_TYPE_VALUE
@ CRITERIA_DATA_TYPE_T_CREATURE
@ CRITERIA_DATA_TYPE_SCRIPT
@ CRITERIA_DATA_TYPE_NTH_BIRTHDAY
@ CRITERIA_DATA_TYPE_MAP_DIFFICULTY
@ CRITERIA_DATA_TYPE_S_AURA
@ CRITERIA_DATA_TYPE_S_PLAYER_CLASS_RACE
@ CRITERIA_DATA_TYPE_GAME_EVENT
@ CRITERIA_DATA_TYPE_T_PLAYER_LESS_HEALTH
@ CRITERIA_DATA_TYPE_MAP_ID
@ CRITERIA_DATA_TYPE_S_EQUIPPED_ITEM
@ CRITERIA_DATA_TYPE_S_DRUNK
@ CRITERIA_DATA_TYPE_BG_LOSS_TEAM_SCORE
@ CRITERIA_DATA_TYPE_MAP_PLAYER_COUNT
@ CRITERIA_DATA_TYPE_T_PLAYER_CLASS_RACE
@ CRITERIA_DATA_TYPE_T_TEAM
@ CRITERIA_DATA_TYPE_HOLIDAY
@ CRITERIA_DATA_TYPE_T_GENDER
@ CRITERIA_DATA_TYPE_T_AURA
@ CRITERIA_DATA_TYPE_S_ITEM_QUALITY
@ CRITERIA_DATA_TYPE_NONE
@ CRITERIA_DATA_TYPE_S_KNOWN_TITLE
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
std::chrono::seconds Seconds
Seconds shorthand typedef.
virtual CriteriaList const & GetCriteriaByType(CriteriaType type, uint32 asset) const =0
virtual void AfterCriteriaTreeUpdate(CriteriaTree const *, Player *)
virtual void SendCriteriaProgressRemoved(uint32 criteriaId)=0
CriteriaHandler & operator=(CriteriaHandler const &right)=delete
virtual bool RequiredAchievementSatisfied(uint32) const
std::unordered_map< uint32, Milliseconds > _startedCriteria
CriteriaHandler & operator=(CriteriaHandler &&right)=delete
virtual void SendAllData(Player const *receiver) const =0
CriteriaHandler(CriteriaHandler &&right)=delete
CriteriaHandler(CriteriaHandler const &right)=delete
virtual void SendPacket(WorldPacket const *data) const =0
CriteriaProgressMap _criteriaProgress
virtual void CompletedCriteriaTree(CriteriaTree const *tree, Player *referencePlayer)=0
virtual std::string GetOwnerInfo() const =0
virtual void SendCriteriaUpdate(Criteria const *criteria, CriteriaProgress const *progress, Seconds timeElapsed, bool timedCompleted) const =0
std::unordered_map< uint32, CriteriaTree * > _criteriaTrees
CriteriaList const & GetGuildCriteriaByType(CriteriaType type) const
std::unordered_map< uint32, Criteria * > _criteria
static bool IsGroupCriteriaType(CriteriaType type)
CriteriaMgr & operator=(CriteriaMgr const &right)=delete
static void WalkCriteriaTree(CriteriaTree const *tree, Func const &func)
std::unordered_map< uint32, CriteriaDataSet > _criteriaDataMap
CriteriaMgr(CriteriaMgr const &right)=delete
CriteriaMgr(CriteriaMgr &&right)=delete
std::unordered_map< uint32, CriteriaTreeList > _criteriaTreeByCriteria
static CriteriaList const EmptyCriteriaList
CriteriaMgr & operator=(CriteriaMgr &&right)=delete
CriteriaDataSet const * GetCriteriaDataSet(Criteria const *Criteria) const
CriteriaTreeList const * GetCriteriaTreesByCriteria(uint32 criteriaId) const
std::unordered_map< uint32, ModifierTreeNode * > _criteriaModifiers
CriteriaList const & GetQuestObjectiveCriteriaByType(CriteriaType type) const
bool Meets(Player const *source, WorldObject const *target, uint32 miscValue1=0, uint32 miscValue2=0) const
std::vector< CriteriaData > _storage
void SetCriteriaId(uint32 id)
void Add(CriteriaData const &data)
struct CriteriaData::@5::@9 Health
struct CriteriaData::@5::@8 ClassRace
struct CriteriaData::@5::@7 Creature
struct CriteriaData::@5::@22 GameEvent
CriteriaDataType DataType
struct CriteriaData::@5::@12 Level
struct CriteriaData::@5::@21 KnownTitle
struct CriteriaData::@5::@18 BattlegroundScore
struct CriteriaData::@5::@24 Raw
CriteriaData(uint32 _dataType, uint32 _value1, uint32 _value2, uint32 _scriptId)
struct CriteriaData::@5::@19 EquippedItem
struct CriteriaData::@5::@10 Aura
struct CriteriaData::@5::@23 ItemQuality
struct CriteriaData::@5::@20 Map
struct CriteriaData::@5::@16 Drunk
bool IsValid(Criteria const *criteria)
bool Meets(uint32 criteriaId, Player const *source, WorldObject const *target, uint32 miscValue1=0, uint32 miscValue2=0) const
struct CriteriaData::@5::@14 MapPlayers
struct CriteriaData::@5::@17 Holiday
ScenarioStepEntry const * ScenarioStep
std::vector< CriteriaTree const * > Children
CriteriaTreeEntry const * Entry
CriteriaEntry const * Entry
ModifierTreeNode const * Modifier
ModifierTreeEntry const * Entry
std::vector< ModifierTreeNode const * > Children