TrinityCore
ConditionMgr.h File Reference
#include "Define.h"
#include "Hash.h"
#include <array>
#include <memory>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>
+ Include dependency graph for ConditionMgr.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  ConditionSourceInfo
 
struct  ConditionId
 
struct  std::hash< ConditionId >
 
struct  Condition
 
class  ConditionMgr
 
struct  ConditionMgr::ConditionTypeInfo
 
struct  ConditionsReference
 

Macros

#define sConditionMgr   ConditionMgr::instance()
 

Typedefs

typedef std::vector< ConditionConditionContainer
 
typedef std::unordered_map< ConditionId, std::shared_ptr< ConditionContainer > > ConditionsByEntryMap
 
typedef std::array< ConditionsByEntryMap, CONDITION_SOURCE_TYPE_MAXConditionEntriesByTypeArray
 

Enumerations

enum  ConditionTypes {
  CONDITION_NONE = 0 , CONDITION_AURA = 1 , CONDITION_ITEM = 2 , CONDITION_ITEM_EQUIPPED = 3 ,
  CONDITION_ZONEID = 4 , CONDITION_REPUTATION_RANK = 5 , CONDITION_TEAM = 6 , CONDITION_SKILL = 7 ,
  CONDITION_QUESTREWARDED = 8 , CONDITION_QUESTTAKEN = 9 , CONDITION_DRUNKENSTATE = 10 , CONDITION_WORLD_STATE = 11 ,
  CONDITION_ACTIVE_EVENT = 12 , CONDITION_INSTANCE_INFO = 13 , CONDITION_QUEST_NONE = 14 , CONDITION_CLASS = 15 ,
  CONDITION_RACE = 16 , CONDITION_ACHIEVEMENT = 17 , CONDITION_TITLE = 18 , CONDITION_SPAWNMASK_DEPRECATED = 19 ,
  CONDITION_GENDER = 20 , CONDITION_UNIT_STATE = 21 , CONDITION_MAPID = 22 , CONDITION_AREAID = 23 ,
  CONDITION_CREATURE_TYPE = 24 , CONDITION_SPELL = 25 , CONDITION_PHASEID = 26 , CONDITION_LEVEL = 27 ,
  CONDITION_QUEST_COMPLETE = 28 , CONDITION_NEAR_CREATURE = 29 , CONDITION_NEAR_GAMEOBJECT = 30 , CONDITION_OBJECT_ENTRY_GUID_LEGACY = 31 ,
  CONDITION_TYPE_MASK_LEGACY = 32 , CONDITION_RELATION_TO = 33 , CONDITION_REACTION_TO = 34 , CONDITION_DISTANCE_TO = 35 ,
  CONDITION_ALIVE = 36 , CONDITION_HP_VAL = 37 , CONDITION_HP_PCT = 38 , CONDITION_REALM_ACHIEVEMENT = 39 ,
  CONDITION_IN_WATER = 40 , CONDITION_TERRAIN_SWAP = 41 , CONDITION_STAND_STATE = 42 , CONDITION_DAILY_QUEST_DONE = 43 ,
  CONDITION_CHARMED = 44 , CONDITION_PET_TYPE = 45 , CONDITION_TAXI = 46 , CONDITION_QUESTSTATE = 47 ,
  CONDITION_QUEST_OBJECTIVE_PROGRESS = 48 , CONDITION_DIFFICULTY_ID = 49 , CONDITION_GAMEMASTER = 50 , CONDITION_OBJECT_ENTRY_GUID = 51 ,
  CONDITION_TYPE_MASK = 52 , CONDITION_BATTLE_PET_COUNT = 53 , CONDITION_SCENARIO_STEP = 54 , CONDITION_SCENE_IN_PROGRESS = 55 ,
  CONDITION_PLAYER_CONDITION = 56 , CONDITION_PRIVATE_OBJECT = 57 , CONDITION_STRING_ID = 58 , CONDITION_MAX
}
 
enum  ConditionSourceType {
  CONDITION_SOURCE_TYPE_NONE = 0 , CONDITION_SOURCE_TYPE_CREATURE_LOOT_TEMPLATE = 1 , CONDITION_SOURCE_TYPE_DISENCHANT_LOOT_TEMPLATE = 2 , CONDITION_SOURCE_TYPE_FISHING_LOOT_TEMPLATE = 3 ,
  CONDITION_SOURCE_TYPE_GAMEOBJECT_LOOT_TEMPLATE = 4 , CONDITION_SOURCE_TYPE_ITEM_LOOT_TEMPLATE = 5 , CONDITION_SOURCE_TYPE_MAIL_LOOT_TEMPLATE = 6 , CONDITION_SOURCE_TYPE_MILLING_LOOT_TEMPLATE = 7 ,
  CONDITION_SOURCE_TYPE_PICKPOCKETING_LOOT_TEMPLATE = 8 , CONDITION_SOURCE_TYPE_PROSPECTING_LOOT_TEMPLATE = 9 , CONDITION_SOURCE_TYPE_REFERENCE_LOOT_TEMPLATE = 10 , CONDITION_SOURCE_TYPE_SKINNING_LOOT_TEMPLATE = 11 ,
  CONDITION_SOURCE_TYPE_SPELL_LOOT_TEMPLATE = 12 , CONDITION_SOURCE_TYPE_SPELL_IMPLICIT_TARGET = 13 , CONDITION_SOURCE_TYPE_GOSSIP_MENU = 14 , CONDITION_SOURCE_TYPE_GOSSIP_MENU_OPTION = 15 ,
  CONDITION_SOURCE_TYPE_CREATURE_TEMPLATE_VEHICLE = 16 , CONDITION_SOURCE_TYPE_SPELL = 17 , CONDITION_SOURCE_TYPE_SPELL_CLICK_EVENT = 18 , CONDITION_SOURCE_TYPE_QUEST_AVAILABLE = 19 ,
  CONDITION_SOURCE_TYPE_VEHICLE_SPELL = 21 , CONDITION_SOURCE_TYPE_SMART_EVENT = 22 , CONDITION_SOURCE_TYPE_NPC_VENDOR = 23 , CONDITION_SOURCE_TYPE_SPELL_PROC = 24 ,
  CONDITION_SOURCE_TYPE_TERRAIN_SWAP = 25 , CONDITION_SOURCE_TYPE_PHASE = 26 , CONDITION_SOURCE_TYPE_GRAVEYARD = 27 , CONDITION_SOURCE_TYPE_AREATRIGGER = 28 ,
  CONDITION_SOURCE_TYPE_CONVERSATION_LINE = 29 , CONDITION_SOURCE_TYPE_AREATRIGGER_CLIENT_TRIGGERED = 30 , CONDITION_SOURCE_TYPE_TRAINER_SPELL = 31 , CONDITION_SOURCE_TYPE_OBJECT_ID_VISIBILITY = 32 ,
  CONDITION_SOURCE_TYPE_SPAWN_GROUP = 33 , CONDITION_SOURCE_TYPE_MAX_DB_ALLOWED , CONDITION_SOURCE_TYPE_REFERENCE_CONDITION = CONDITION_SOURCE_TYPE_MAX_DB_ALLOWED , CONDITION_SOURCE_TYPE_MAX
}
 
enum  RelationType {
  RELATION_SELF = 0 , RELATION_IN_PARTY , RELATION_IN_RAID_OR_PARTY , RELATION_OWNED_BY ,
  RELATION_PASSENGER_OF , RELATION_CREATED_BY , RELATION_MAX
}
 
enum  InstanceInfo { INSTANCE_INFO_DATA = 0 , INSTANCE_INFO_GUID_DATA , INSTANCE_INFO_BOSS_STATE , INSTANCE_INFO_DATA64 }
 
enum  MaxConditionTargets { MAX_CONDITION_TARGETS = 3 }
 

Macro Definition Documentation

◆ sConditionMgr

#define sConditionMgr   ConditionMgr::instance()

Definition at line 365 of file ConditionMgr.h.

Typedef Documentation

◆ ConditionContainer

typedef std::vector<Condition> ConditionContainer

Definition at line 290 of file ConditionMgr.h.

◆ ConditionEntriesByTypeArray

◆ ConditionsByEntryMap

typedef std::unordered_map<ConditionId, std::shared_ptr<ConditionContainer> > ConditionsByEntryMap

Definition at line 291 of file ConditionMgr.h.

Enumeration Type Documentation

◆ ConditionSourceType

Documentation on implementing a new ConditionSourceType: Step 1: Check for the lowest free ID. Look for CONDITION_SOURCE_TYPE_UNUSED_XX in the enum. Then define the new source type.

Step 2: Determine and map the parameters for the new condition source type.

Step 3: Add a case block to ConditionMgr::isSourceTypeValid with the new condition type and validate the parameters.

Step 4: If your condition can be grouped (determined in step 2), add a rule for it in ConditionMgr::CanHaveSourceGroupSet, following the example of the existing types.

Step 5: Define the maximum available condition targets in ConditionMgr::GetMaxAvailableConditionTargets.

Step 6: Define ConditionSourceType Name in ConditionMgr::StaticSourceTypeData.

The following steps only apply if your condition can be grouped:

Step 7: Determine how you are going to store your conditions. You need to add a new storage container for it in ConditionMgr class, along with a function like: ConditionList GetConditionsForXXXYourNewSourceTypeXXX(parameters...)

The above function should be placed in upper level (practical) code that actually checks the conditions.

Step 8: Implement loading for your source type in ConditionMgr::LoadConditions.

Step 9: Implement memory cleaning for your source type in ConditionMgr::Clean.

Enumerator
CONDITION_SOURCE_TYPE_NONE 
CONDITION_SOURCE_TYPE_CREATURE_LOOT_TEMPLATE 
CONDITION_SOURCE_TYPE_DISENCHANT_LOOT_TEMPLATE 
CONDITION_SOURCE_TYPE_FISHING_LOOT_TEMPLATE 
CONDITION_SOURCE_TYPE_GAMEOBJECT_LOOT_TEMPLATE 
CONDITION_SOURCE_TYPE_ITEM_LOOT_TEMPLATE 
CONDITION_SOURCE_TYPE_MAIL_LOOT_TEMPLATE 
CONDITION_SOURCE_TYPE_MILLING_LOOT_TEMPLATE 
CONDITION_SOURCE_TYPE_PICKPOCKETING_LOOT_TEMPLATE 
CONDITION_SOURCE_TYPE_PROSPECTING_LOOT_TEMPLATE 
CONDITION_SOURCE_TYPE_REFERENCE_LOOT_TEMPLATE 
CONDITION_SOURCE_TYPE_SKINNING_LOOT_TEMPLATE 
CONDITION_SOURCE_TYPE_SPELL_LOOT_TEMPLATE 
CONDITION_SOURCE_TYPE_SPELL_IMPLICIT_TARGET 
CONDITION_SOURCE_TYPE_GOSSIP_MENU 
CONDITION_SOURCE_TYPE_GOSSIP_MENU_OPTION 
CONDITION_SOURCE_TYPE_CREATURE_TEMPLATE_VEHICLE 
CONDITION_SOURCE_TYPE_SPELL 
CONDITION_SOURCE_TYPE_SPELL_CLICK_EVENT 
CONDITION_SOURCE_TYPE_QUEST_AVAILABLE 
CONDITION_SOURCE_TYPE_VEHICLE_SPELL 
CONDITION_SOURCE_TYPE_SMART_EVENT 
CONDITION_SOURCE_TYPE_NPC_VENDOR 
CONDITION_SOURCE_TYPE_SPELL_PROC 
CONDITION_SOURCE_TYPE_TERRAIN_SWAP 
CONDITION_SOURCE_TYPE_PHASE 
CONDITION_SOURCE_TYPE_GRAVEYARD 
CONDITION_SOURCE_TYPE_AREATRIGGER 
CONDITION_SOURCE_TYPE_CONVERSATION_LINE 
CONDITION_SOURCE_TYPE_AREATRIGGER_CLIENT_TRIGGERED 
CONDITION_SOURCE_TYPE_TRAINER_SPELL 
CONDITION_SOURCE_TYPE_OBJECT_ID_VISIBILITY 
CONDITION_SOURCE_TYPE_SPAWN_GROUP 
CONDITION_SOURCE_TYPE_MAX_DB_ALLOWED 
CONDITION_SOURCE_TYPE_REFERENCE_CONDITION 
CONDITION_SOURCE_TYPE_MAX 

Definition at line 152 of file ConditionMgr.h.

◆ ConditionTypes

Documentation on implementing a new ConditionType: Step 1: Check for the lowest free ID. Look for CONDITION_UNUSED_XX in the enum. Then define the new condition type.

Step 2: Determine and map the parameters for the new condition type.

Step 3: Add a case block to ConditionMgr::isConditionTypeValid with the new condition type and validate the parameters.

Step 4: Define the maximum available condition targets in ConditionMgr::GetMaxAvailableConditionTargets.

Step 5: Define the grid searcher mask in Condition::GetSearcherTypeMaskForCondition.

Step 6: Add a case block to ConditionMgr::Meets with the new condition type.

Step 7: Define condition name and expected condition values in ConditionMgr::StaticConditionTypeData.

Enumerator
CONDITION_NONE 
CONDITION_AURA 
CONDITION_ITEM 
CONDITION_ITEM_EQUIPPED 
CONDITION_ZONEID 
CONDITION_REPUTATION_RANK 
CONDITION_TEAM 
CONDITION_SKILL 
CONDITION_QUESTREWARDED 
CONDITION_QUESTTAKEN 
CONDITION_DRUNKENSTATE 
CONDITION_WORLD_STATE 
CONDITION_ACTIVE_EVENT 
CONDITION_INSTANCE_INFO 
CONDITION_QUEST_NONE 
CONDITION_CLASS 
CONDITION_RACE 
CONDITION_ACHIEVEMENT 
CONDITION_TITLE 
CONDITION_SPAWNMASK_DEPRECATED 
CONDITION_GENDER 
CONDITION_UNIT_STATE 
CONDITION_MAPID 
CONDITION_AREAID 
CONDITION_CREATURE_TYPE 
CONDITION_SPELL 
CONDITION_PHASEID 
CONDITION_LEVEL 
CONDITION_QUEST_COMPLETE 
CONDITION_NEAR_CREATURE 
CONDITION_NEAR_GAMEOBJECT 
CONDITION_OBJECT_ENTRY_GUID_LEGACY 
CONDITION_TYPE_MASK_LEGACY 
CONDITION_RELATION_TO 
CONDITION_REACTION_TO 
CONDITION_DISTANCE_TO 
CONDITION_ALIVE 
CONDITION_HP_VAL 
CONDITION_HP_PCT 
CONDITION_REALM_ACHIEVEMENT 
CONDITION_IN_WATER 
CONDITION_TERRAIN_SWAP 
CONDITION_STAND_STATE 
CONDITION_DAILY_QUEST_DONE 
CONDITION_CHARMED 
CONDITION_PET_TYPE 
CONDITION_TAXI 
CONDITION_QUESTSTATE 
CONDITION_QUEST_OBJECTIVE_PROGRESS 
CONDITION_DIFFICULTY_ID 
CONDITION_GAMEMASTER 
CONDITION_OBJECT_ENTRY_GUID 
CONDITION_TYPE_MASK 
CONDITION_BATTLE_PET_COUNT 
CONDITION_SCENARIO_STEP 
CONDITION_SCENE_IN_PROGRESS 
CONDITION_PLAYER_CONDITION 
CONDITION_PRIVATE_OBJECT 
CONDITION_STRING_ID 
CONDITION_MAX 

Definition at line 59 of file ConditionMgr.h.

◆ InstanceInfo

Enumerator
INSTANCE_INFO_DATA 
INSTANCE_INFO_GUID_DATA 
INSTANCE_INFO_BOSS_STATE 
INSTANCE_INFO_DATA64 

Definition at line 205 of file ConditionMgr.h.

◆ MaxConditionTargets

Enumerator
MAX_CONDITION_TARGETS 

Definition at line 213 of file ConditionMgr.h.

◆ RelationType

Enumerator
RELATION_SELF 
RELATION_IN_PARTY 
RELATION_IN_RAID_OR_PARTY 
RELATION_OWNED_BY 
RELATION_PASSENGER_OF 
RELATION_CREATED_BY 
RELATION_MAX 

Definition at line 194 of file ConditionMgr.h.