70 {
"None",
false,
false,
false },
71 {
"Aura",
true,
true,
true },
72 {
"Item Stored",
true,
true,
true },
73 {
"Item Equipped",
true,
false,
false },
74 {
"Zone",
true,
false,
false },
75 {
"Reputation",
true,
true,
false },
76 {
"Team",
true,
false,
false },
77 {
"Skill",
true,
true,
false },
78 {
"Quest Rewarded",
true,
false,
false },
79 {
"Quest Taken",
true,
false,
false },
80 {
"Drunken",
true,
false,
false },
81 {
"WorldState",
true,
true,
false },
82 {
"Active Event",
true,
false,
false },
83 {
"Instance Info",
true,
true,
true },
84 {
"Quest None",
true,
false,
false },
85 {
"Class",
true,
false,
false },
86 {
"Race",
true,
false,
false },
87 {
"Achievement",
true,
false,
false },
88 {
"Title",
true,
false,
false },
89 {
"SpawnMask",
true,
false,
false },
90 {
"Gender",
true,
false,
false },
91 {
"Unit State",
true,
false,
false },
92 {
"Map",
true,
false,
false },
93 {
"Area",
true,
false,
false },
94 {
"CreatureType",
true,
false,
false },
95 {
"Spell Known",
true,
false,
false },
96 {
"PhaseMask",
true,
false,
false },
97 {
"Level",
true,
true,
false },
98 {
"Quest Completed",
true,
false,
false },
99 {
"Near Creature",
true,
true,
true },
100 {
"Near GameObject",
true,
true,
false },
101 {
"Object Entry or Guid",
true,
true,
true },
102 {
"Object TypeMask",
true,
false,
false },
103 {
"Relation",
true,
true,
false },
104 {
"Reaction",
true,
true,
false },
105 {
"Distance",
true,
true,
true },
106 {
"Alive",
false,
false,
false },
107 {
"Health Value",
true,
true,
false },
108 {
"Health Pct",
true,
true,
false },
109 {
"Realm Achievement",
true,
false,
false },
110 {
"In Water",
false,
false,
false },
111 {
"Terrain Swap",
false,
false,
false },
112 {
"Sit/stand state",
true,
true,
false },
113 {
"Daily Quest Completed",
true,
false,
false },
114 {
"Charmed",
false,
false,
false },
115 {
"Pet type",
true,
false,
false },
116 {
"On Taxi",
false,
false,
false },
117 {
"Quest state mask",
true,
true,
false },
118 {
"Quest objective progress",
true,
true,
true },
119 {
"Map difficulty",
true,
false,
false },
120 {
"Is Gamemaster",
true,
false,
false },
121 {
"Object Entry or Guid",
true,
true,
true },
122 {
"Object TypeMask",
true,
false,
false }
137 bool condMeets =
false;
174 condMeets = (
ConditionValue2 & (1 << player->GetReputationMgr().GetRank(faction))) != 0;
252 Map* map =
object->GetMap();
349 condMeets = unit == toUnit;
393 condMeets = unit->IsAlive();
426 condMeets = ((1 <<
object->GetMap()->GetSpawnMode()) &
ConditionValue1) != 0;
451 condMeets = unit->IsInWater();
461 condMeets = unit->IsStandState();
463 condMeets = unit->IsSitState();
476 condMeets = unit->IsCharmed();
482 if (
Pet* pet = player->GetPet())
489 condMeets = player->IsInFlight();
530 condMeets = player->CanBeGameMaster();
532 condMeets = player->IsGameMaster();
542 condMeets = !condMeets;
547 return condMeets &&
sScriptMgr->OnConditionCheck(
this, sourceInfo);
733 ABORT_MSG(
"Condition::GetSearcherTypeMaskForCondition - missing condition handling!");
762 std::ostringstream ss;
797 if (conditions.empty())
800 std::map<uint32, uint32> elseGroupSearcherTypeMasks;
801 for (ConditionContainer::const_iterator i = conditions.begin(); i != conditions.end(); ++i)
804 ASSERT((*i)->isLoaded() &&
"ConditionMgr::GetSearcherTypeMaskForConditionList - not yet loaded condition found in list");
805 std::map<uint32, uint32>::const_iterator itr = elseGroupSearcherTypeMasks.find((*i)->ElseGroup);
807 if (itr == elseGroupSearcherTypeMasks.end())
810 else if (!itr->second)
813 if ((*i)->ReferenceId)
823 elseGroupSearcherTypeMasks[(*i)->ElseGroup] &= (*i)->GetSearcherTypeMaskForCondition();
829 for (std::map<uint32, uint32>::const_iterator i = elseGroupSearcherTypeMasks.begin(); i != elseGroupSearcherTypeMasks.end(); ++i)
838 std::map<uint32, bool> elseGroupStore;
839 for (
Condition const* condition : conditions)
841 TC_LOG_DEBUG(
"condition",
"ConditionMgr::IsPlayerMeetToConditionList {} val1: {}", condition->ToString(), condition->ConditionValue1);
842 if (condition->isLoaded())
845 std::map<uint32, bool>::const_iterator itr = elseGroupStore.find(condition->ElseGroup);
847 if (itr == elseGroupStore.end())
848 elseGroupStore[condition->ElseGroup] =
true;
849 else if (!(*itr).second)
852 if (condition->ReferenceId)
858 elseGroupStore[condition->ElseGroup] =
false;
862 TC_LOG_DEBUG(
"condition",
"ConditionMgr::IsPlayerMeetToConditionList {} Reference template -{} not found",
863 condition->ToString(), condition->ReferenceId);
869 if (!condition->Meets(sourceInfo))
870 elseGroupStore[condition->ElseGroup] =
false;
874 for (std::map<uint32, bool>::const_iterator i = elseGroupStore.begin(); i != elseGroupStore.end(); ++i)
895 if (conditions.empty())
898 TC_LOG_DEBUG(
"condition",
"ConditionMgr::IsObjectMeetToConditions");
934 ConditionsByEntryMap::const_iterator i =
ConditionStore[sourceType].find(entry);
937 TC_LOG_DEBUG(
"condition",
"GetConditionsForNotGroupedEntry: found conditions for type {} and entry {}",
uint32(sourceType), entry);
965 ConditionsByEntryMap::const_iterator i = itr->second.find(spellId);
966 if (i != itr->second.end())
968 TC_LOG_DEBUG(
"condition",
"GetConditionsForSpellClickEvent: found conditions for SpellClickEvent entry {} spell {}", creatureId, spellId);
981 ConditionsByEntryMap::const_iterator i = itr->second.find(spellId);
982 if (i != itr->second.end())
984 TC_LOG_DEBUG(
"condition",
"GetConditionsForSpellClickEvent: found conditions for SpellClickEvent entry {} spell {}", creatureId, spellId);
996 ConditionsByEntryMap::const_iterator i = itr->second.find(spellId);
997 if (i != itr->second.end())
999 TC_LOG_DEBUG(
"condition",
"GetConditionsForVehicleSpell: found conditions for Vehicle entry {} spell {}", creatureId, spellId);
1009 SmartEventConditionContainer::const_iterator itr =
SmartEventConditionStore.find(std::make_pair(entryOrGuid, sourceType));
1012 ConditionsByEntryMap::const_iterator i = itr->second.find(eventId + 1);
1013 if (i != itr->second.end())
1015 TC_LOG_DEBUG(
"condition",
"GetConditionsForSmartEvent: found conditions for Smart Event entry or guid {} eventId {}", entryOrGuid, eventId);
1028 ConditionsByEntryMap::const_iterator i = (*itr).second.find(itemId);
1029 if (i != (*itr).second.end())
1031 TC_LOG_DEBUG(
"condition",
"GetConditionsForNpcVendorEvent: found conditions for creature entry {} item {}", creatureId, itemId);
1059 TC_LOG_INFO(
"misc",
"Reseting Loot Conditions...");
1073 TC_LOG_INFO(
"misc",
"Re-Loading `gossip_menu` Table for Conditions!");
1076 TC_LOG_INFO(
"misc",
"Re-Loading `gossip_menu_option` Table for Conditions!");
1078 sSpellMgr->UnloadSpellInfoImplicitTargetConditionLists();
1081 QueryResult result =
WorldDatabase.Query(
"SELECT SourceTypeOrReferenceId, SourceGroup, SourceEntry, SourceId, ElseGroup, ConditionTypeOrReference, ConditionTarget, "
1082 " ConditionValue1, ConditionValue2, ConditionValue3, NegativeCondition, ErrorType, ErrorTextId, ScriptName FROM conditions");
1086 TC_LOG_INFO(
"server.loading",
">> Loaded 0 conditions. DB table `conditions` is empty!");
1094 Field* fields = result->Fetch();
1112 if (iConditionTypeOrReference >= 0)
1115 if (iSourceTypeOrReferenceId >= 0)
1118 if (iConditionTypeOrReference < 0)
1120 if (iConditionTypeOrReference == iSourceTypeOrReferenceId)
1122 TC_LOG_ERROR(
"sql.sql",
"Condition reference {} is referencing self, skipped", iSourceTypeOrReferenceId);
1128 char const* rowType =
"reference template";
1129 if (iSourceTypeOrReferenceId >= 0)
1130 rowType =
"reference";
1133 TC_LOG_ERROR(
"sql.sql",
"Condition {} {} has useless data in ConditionTarget ({})!", rowType, iSourceTypeOrReferenceId, cond->
ConditionTarget);
1135 TC_LOG_ERROR(
"sql.sql",
"Condition {} {} has useless data in value1 ({})!", rowType, iSourceTypeOrReferenceId, cond->
ConditionValue1);
1137 TC_LOG_ERROR(
"sql.sql",
"Condition {} {} has useless data in value2 ({})!", rowType, iSourceTypeOrReferenceId, cond->
ConditionValue2);
1139 TC_LOG_ERROR(
"sql.sql",
"Condition {} {} has useless data in value3 ({})!", rowType, iSourceTypeOrReferenceId, cond->
ConditionValue3);
1141 TC_LOG_ERROR(
"sql.sql",
"Condition {} {} has useless data in NegativeCondition ({})!", rowType, iSourceTypeOrReferenceId, cond->
NegativeCondition);
1142 if (cond->
SourceGroup && iSourceTypeOrReferenceId < 0)
1143 TC_LOG_ERROR(
"sql.sql",
"Condition {} {} has useless data in SourceGroup ({})!", rowType, iSourceTypeOrReferenceId, cond->
SourceGroup);
1144 if (cond->
SourceEntry && iSourceTypeOrReferenceId < 0)
1145 TC_LOG_ERROR(
"sql.sql",
"Condition {} {} has useless data in SourceEntry ({})!", rowType, iSourceTypeOrReferenceId, cond->
SourceEntry);
1153 if (iSourceTypeOrReferenceId < 0)
1300 while (result->NextRow());
1324 if (pMenuBounds.first != pMenuBounds.second)
1326 for (GossipMenusContainer::iterator itr = pMenuBounds.first; itr != pMenuBounds.second; ++itr)
1330 (*itr).second.Conditions.push_back(cond);
1343 if (pMenuItemBounds.first != pMenuItemBounds.second)
1345 for (GossipMenuItemsContainer::iterator itr = pMenuItemBounds.first; itr != pMenuItemBounds.second; ++itr)
1349 (*itr).second.Conditions.push_back(cond);
1363 std::list<uint32> sharedMasks;
1367 if (conditionEffMask & (1 << spellEffectInfo.EffectIndex))
1376 TC_LOG_ERROR(
"sql.sql",
"{} in `condition` table - spell {} EFFECT_{} - "
1383 TC_LOG_ERROR(
"sql.sql",
"{} in `condition` table - spell {} EFFECT_{} - "
1390 TC_LOG_ERROR(
"sql.sql",
"{} in `condition` table - spell {} EFFECT_{} - "
1402 auto itr = std::find_if(sharedMasks.begin(), sharedMasks.end(), [&](
uint32 mask) { return !!(mask & (1 << spellEffectInfo.EffectIndex)); });
1403 if (itr != sharedMasks.end())
1407 uint32 sharedMask = 1 << spellEffectInfo.EffectIndex;
1409 for (
size_t effIndex = spellEffectInfo.EffectIndex + 1; effIndex < spellInfo->GetEffects().size(); ++effIndex)
1411 sharedMask |= 1 << effIndex;
1413 sharedMasks.push_back(sharedMask);
1416 for (
uint32 effectMask : sharedMasks)
1419 if (
uint32 commonMask = effectMask & conditionEffMask)
1421 size_t firstEffIndex = 0;
1422 for (; firstEffIndex < spellInfo->
GetEffects().size(); ++firstEffIndex)
1423 if ((1 << firstEffIndex) & effectMask)
1426 if (firstEffIndex >= spellInfo->
GetEffects().size())
1436 if (conditionEffMask != effectMask)
1438 TC_LOG_ERROR(
"sql.sql",
"{} in `condition` table, has incorrect SourceGroup {} (spell effectMask) set - "
1439 "effect masks are overlapping (all SourceGroup values having given bit set must be equal) - ignoring.", cond->
ToString(), cond->
SourceGroup);
1448 bool assigned =
false;
1449 for (
size_t i = firstEffIndex; i < spellInfo->
GetEffects().size(); ++i)
1451 if ((1 << i) & commonMask)
1464 sharedList->push_back(cond);
1475 TC_LOG_ERROR(
"sql.sql",
"{} Invalid ConditionSourceType in `condition` table, ignoring.", cond->
ToString());
1485 TC_LOG_ERROR(
"sql.sql",
"{} SourceGroup in `condition` table, does not exist in `creature_loot_template`, ignoring.", cond->
ToString());
1493 TC_LOG_ERROR(
"sql.sql",
"{} SourceType, SourceEntry in `condition` table, does not exist in `item_template`, ignoring.", cond->
ToString());
1502 TC_LOG_ERROR(
"sql.sql",
"{} SourceGroup in `condition` table, does not exist in `disenchant_loot_template`, ignoring.", cond->
ToString());
1510 TC_LOG_ERROR(
"sql.sql",
"{} SourceType, SourceEntry in `condition` table, does not exist in `item_template`, ignoring.", cond->
ToString());
1519 TC_LOG_ERROR(
"sql.sql",
"{} SourceGroup in `condition` table, does not exist in `fishing_loot_template`, ignoring.", cond->
ToString());
1527 TC_LOG_ERROR(
"sql.sql",
"{} SourceType, SourceEntry in `condition` table, does not exist in `item_template`, ignoring.", cond->
ToString());
1536 TC_LOG_ERROR(
"sql.sql",
"{} SourceGroup in `condition` table, does not exist in `gameobject_loot_template`, ignoring.", cond->
ToString());
1544 TC_LOG_ERROR(
"sql.sql",
"{} SourceType, SourceEntry in `condition` table, does not exist in `item_template`, ignoring.", cond->
ToString());
1553 TC_LOG_ERROR(
"sql.sql",
"{} SourceGroup in `condition` table, does not exist in `item_loot_template`, ignoring.", cond->
ToString());
1561 TC_LOG_ERROR(
"sql.sql",
"{} SourceType, SourceEntry in `condition` table, does not exist in `item_template`, ignoring.", cond->
ToString());
1570 TC_LOG_ERROR(
"sql.sql",
"{} SourceGroup in `condition` table, does not exist in `mail_loot_template`, ignoring.", cond->
ToString());
1578 TC_LOG_ERROR(
"sql.sql",
"{} SourceType, SourceEntry in `condition` table, does not exist in `item_template`, ignoring.", cond->
ToString());
1587 TC_LOG_ERROR(
"sql.sql",
"{} SourceGroup in `condition` table, does not exist in `milling_loot_template`, ignoring.", cond->
ToString());
1595 TC_LOG_ERROR(
"sql.sql",
"{} SourceType, SourceEntry in `condition` table, does not exist in `item_template`, ignoring.", cond->
ToString());
1604 TC_LOG_ERROR(
"sql.sql",
"{} SourceGroup in `condition` table, does not exist in `pickpocketing_loot_template`, ignoring.", cond->
ToString());
1612 TC_LOG_ERROR(
"sql.sql",
"{} SourceType, SourceEntry in `condition` table, does not exist in `item_template`, ignoring.", cond->
ToString());
1621 TC_LOG_ERROR(
"sql.sql",
"{} SourceGroup in `condition` table, does not exist in `prospecting_loot_template`, ignoring.", cond->
ToString());
1629 TC_LOG_ERROR(
"sql.sql",
"{} SourceType, SourceEntry in `condition` table, does not exist in `item_template`, ignoring.", cond->
ToString());
1638 TC_LOG_ERROR(
"sql.sql",
"{} SourceGroup in `condition` table, does not exist in `reference_loot_template`, ignoring.", cond->
ToString());
1646 TC_LOG_ERROR(
"sql.sql",
"{} SourceType, SourceEntry in `condition` table, does not exist in `item_template`, ignoring.", cond->
ToString());
1655 TC_LOG_ERROR(
"sql.sql",
"{} SourceGroup in `condition` table, does not exist in `skinning_loot_template`, ignoring.", cond->
ToString());
1663 TC_LOG_ERROR(
"sql.sql",
"{} SourceType, SourceEntry in `condition` table, does not exist in `item_template`, ignoring.", cond->
ToString());
1672 TC_LOG_ERROR(
"sql.sql",
"{} SourceGroup in `condition` table, does not exist in `spell_loot_template`, ignoring.", cond->
ToString());
1680 TC_LOG_ERROR(
"sql.sql",
"{} SourceType, SourceEntry in `condition` table, does not exist in `item_template`, ignoring.", cond->
ToString());
1690 TC_LOG_ERROR(
"sql.sql",
"{} SourceEntry in `condition` table does not exist in `spell.dbc`, ignoring.", cond->
ToString());
1696 TC_LOG_ERROR(
"sql.sql",
"{} in `condition` table, has incorrect SourceGroup (spell effectMask) set, ignoring.", cond->
ToString());
1704 if (!((1 << spellEffectInfo.EffectIndex) & cond->
SourceGroup))
1707 if (spellEffectInfo.ChainTarget > 0)
1710 switch (spellEffectInfo.TargetA.GetSelectionCategory())
1721 switch (spellEffectInfo.TargetB.GetSelectionCategory())
1732 switch (spellEffectInfo.Effect)
1746 TC_LOG_ERROR(
"sql.sql",
"SourceEntry {} SourceGroup {} in `condition` table - spell {} does not have implicit targets of types: _AREA_, _CONE_, _NEARBY_, __CHAIN__ or is not SPELL_EFFECT_PERSISTENT_AREA_AURA or SPELL_EFFECT_APPLY_AREA_AURA_* for effect {}, SourceGroup needs correction, ignoring.", cond->
SourceEntry, origGroup, cond->
SourceEntry,
uint32(spellEffectInfo.EffectIndex));
1747 cond->
SourceGroup &= ~(1 << spellEffectInfo.EffectIndex);
1758 TC_LOG_ERROR(
"sql.sql",
"{} SourceEntry in `condition` table, does not exist in `creature_template`, ignoring.", cond->
ToString());
1769 TC_LOG_ERROR(
"sql.sql",
"{} SourceEntry in `condition` table does not exist in `spell.dbc`, ignoring.", cond->
ToString());
1777 TC_LOG_ERROR(
"sql.sql",
"{} SourceEntry specifies non-existing quest, skipped.", cond->
ToString());
1784 TC_LOG_ERROR(
"sql.sql",
"{} SourceEntry in `condition` table, does not exist in `creature_template`, ignoring.", cond->
ToString());
1790 TC_LOG_ERROR(
"sql.sql",
"{} SourceEntry in `condition` table does not exist in `spell.dbc`, ignoring.", cond->
ToString());
1797 TC_LOG_ERROR(
"sql.sql",
"{} SourceEntry in `condition` table, does not exist in `creature_template`, ignoring.", cond->
ToString());
1803 TC_LOG_ERROR(
"sql.sql",
"{} SourceEntry in `condition` table does not exist in `spell.dbc`, ignoring.", cond->
ToString());
1811 TC_LOG_ERROR(
"sql.sql",
"{} SourceEntry in `condition` table, does not exist in `creature_template`, ignoring.", cond->
ToString());
1817 TC_LOG_ERROR(
"sql.sql",
"{} SourceEntry in `condition` table, does not exist in `item_template`, ignoring.", cond->
ToString());
1826 TC_LOG_ERROR(
"sql.sql",
"%s SourceEntry in `condition` table, does not exists in AreaTrigger.dbc, ignoring.", cond->
ToString().c_str());
1833 TC_LOG_ERROR(
"sql.sql",
"CONDITION_SOURCE_TYPE_TERRAIN_SWAP: is only for master branch, skipped");
1838 TC_LOG_ERROR(
"sql.sql",
"CONDITION_SOURCE_TYPE_PHASE: is only for master branch, skipped");
1843 TC_LOG_ERROR(
"sql.sql",
"CONDITION_SOURCE_TYPE_GRAVEYARD: is only for master branch, skipped");
1848 TC_LOG_ERROR(
"sql.sql",
"CONDITION_SOURCE_TYPE_AREATRIGGER: is only for master branch, skipped");
1853 TC_LOG_ERROR(
"sql.sql",
"CONDITION_SOURCE_TYPE_CONVERSATION_LINE: is only for master branch, skipped");
1871 TC_LOG_ERROR(
"sql.sql",
"{} Invalid ConditionType in `condition` table, ignoring.", cond->
ToString(
true));
1877 TC_LOG_ERROR(
"sql.sql",
"{} in `condition` table, has incorrect ConditionTarget set, ignoring.", cond->
ToString(
true));
1909 TC_LOG_ERROR(
"sql.sql",
"{} Zero item count in ConditionValue2, skipped.", cond->
ToString(
true));
2357 TC_LOG_ERROR(
"sql.sql",
"{} has out-of-range quest objective index specified ({}), it must be a number between 0 and 3. skipped.", cond->
ToString(
true), cond->
ConditionValue2);
2401 TC_LOG_ERROR(
"sql.sql",
"{} has useless data in ConditionValue{} ({})!", cond->
ToString(
true), index, value);
2407 for (ConditionContainer::const_iterator it = itr->second.begin(); it != itr->second.end(); ++it)
2415 for (ConditionContainer::const_iterator itr = it->second.begin(); itr != it->second.end(); ++itr)
2422 for (ConditionsByEntryMap::iterator it = itr->second.begin(); it != itr->second.end(); ++it)
2423 for (ConditionContainer::const_iterator i = it->second.begin(); i != it->second.end(); ++i)
2429 for (ConditionsByEntryMap::iterator it = itr->second.begin(); it != itr->second.end(); ++it)
2430 for (ConditionContainer::const_iterator i = it->second.begin(); i != it->second.end(); ++i)
2436 for (ConditionsByEntryMap::iterator it = itr->second.begin(); it != itr->second.end(); ++it)
2437 for (ConditionContainer::const_iterator i = it->second.begin(); i != it->second.end(); ++i)
2444 for (ConditionsByEntryMap::iterator it = itr->second.begin(); it != itr->second.end(); ++it)
2445 for (ConditionContainer::const_iterator i = it->second.begin(); i != it->second.end(); ++i)
@ CONDITION_SOURCE_TYPE_MAX
@ CONDITION_SOURCE_TYPE_CONVERSATION_LINE
@ CONDITION_SOURCE_TYPE_VEHICLE_SPELL
@ CONDITION_SOURCE_TYPE_DISENCHANT_LOOT_TEMPLATE
@ CONDITION_SOURCE_TYPE_REFERENCE_LOOT_TEMPLATE
@ CONDITION_SOURCE_TYPE_TERRAIN_SWAP
@ CONDITION_SOURCE_TYPE_NPC_VENDOR
@ CONDITION_SOURCE_TYPE_GOSSIP_MENU_OPTION
@ CONDITION_SOURCE_TYPE_SPELL_CLICK_EVENT
@ CONDITION_SOURCE_TYPE_MAIL_LOOT_TEMPLATE
@ CONDITION_SOURCE_TYPE_PHASE
@ CONDITION_SOURCE_TYPE_SPELL_LOOT_TEMPLATE
@ CONDITION_SOURCE_TYPE_SMART_EVENT
@ CONDITION_SOURCE_TYPE_PICKPOCKETING_LOOT_TEMPLATE
@ CONDITION_SOURCE_TYPE_PROSPECTING_LOOT_TEMPLATE
@ CONDITION_SOURCE_TYPE_AREATRIGGER_CLIENT_TRIGGERED
@ CONDITION_SOURCE_TYPE_AREATRIGGER
@ CONDITION_SOURCE_TYPE_SPELL
@ CONDITION_SOURCE_TYPE_FISHING_LOOT_TEMPLATE
@ CONDITION_SOURCE_TYPE_GOSSIP_MENU
@ CONDITION_SOURCE_TYPE_CREATURE_TEMPLATE_VEHICLE
@ CONDITION_SOURCE_TYPE_ITEM_LOOT_TEMPLATE
@ CONDITION_SOURCE_TYPE_SPELL_IMPLICIT_TARGET
@ CONDITION_SOURCE_TYPE_GRAVEYARD
@ CONDITION_SOURCE_TYPE_SKINNING_LOOT_TEMPLATE
@ CONDITION_SOURCE_TYPE_CREATURE_LOOT_TEMPLATE
@ CONDITION_SOURCE_TYPE_GAMEOBJECT_LOOT_TEMPLATE
@ CONDITION_SOURCE_TYPE_MILLING_LOOT_TEMPLATE
@ CONDITION_SOURCE_TYPE_SPELL_PROC
@ CONDITION_SOURCE_TYPE_QUEST_AVAILABLE
@ CONDITION_SOURCE_TYPE_NONE
@ INSTANCE_INFO_BOSS_STATE
@ INSTANCE_INFO_GUID_DATA
@ CONDITION_NEAR_GAMEOBJECT
@ CONDITION_QUESTREWARDED
@ CONDITION_REALM_ACHIEVEMENT
@ CONDITION_QUEST_OBJECTIVE_PROGRESS
@ CONDITION_DAILY_QUEST_DONE
@ CONDITION_INSTANCE_INFO
@ CONDITION_OBJECT_ENTRY_GUID
@ CONDITION_DIFFICULTY_ID
@ CONDITION_REPUTATION_RANK
@ CONDITION_QUEST_COMPLETE
@ CONDITION_ITEM_EQUIPPED
@ CONDITION_NEAR_CREATURE
@ CONDITION_CREATURE_TYPE
std::vector< Condition * > ConditionContainer
@ RELATION_IN_RAID_OR_PARTY
DBCStorage< CharTitlesEntry > sCharTitlesStore(CharTitlesEntryfmt)
DBCStorage< FactionEntry > sFactionStore(FactionEntryfmt)
DBCStorage< AreaTriggerEntry > sAreaTriggerStore(AreaTriggerEntryfmt)
DBCStorage< AchievementEntry > sAchievementStore(Achievementfmt)
DBCStorage< SkillLineEntry > sSkillLineStore(SkillLinefmt)
DBCStorage< MapEntry > sMapStore(MapEntryfmt)
DBCStorage< AreaTableEntry > sAreaTableStore(AreaTableEntryfmt)
std::shared_ptr< ResultSet > QueryResult
DatabaseWorkerPool< WorldDatabaseConnection > WorldDatabase
Accessor to the world database.
#define ASSERT_NOTNULL(pointer)
@ GRID_MAP_TYPE_MASK_PLAYER
@ GRID_MAP_TYPE_MASK_CREATURE
@ GRID_MAP_TYPE_MASK_GAMEOBJECT
@ GRID_MAP_TYPE_MASK_CORPSE
#define TC_LOG_DEBUG(filterType__,...)
#define TC_LOG_ERROR(filterType__,...)
#define TC_LOG_INFO(filterType__,...)
LootStore LootTemplates_Spell("spell_loot_template", "spell id (random item creating)", false)
LootStore LootTemplates_Skinning("skinning_loot_template", "creature skinning id", true)
LootStore LootTemplates_Gameobject("gameobject_loot_template", "gameobject entry", true)
LootStore LootTemplates_Item("item_loot_template", "item entry", true)
LootStore LootTemplates_Milling("milling_loot_template", "item entry (herb)", true)
LootStore LootTemplates_Reference("reference_loot_template", "reference id", false)
LootStore LootTemplates_Disenchant("disenchant_loot_template", "item disenchant id", true)
LootStore LootTemplates_Prospecting("prospecting_loot_template", "item entry (ore)", true)
LootStore LootTemplates_Creature("creature_loot_template", "creature entry", true)
LootStore LootTemplates_Pickpocketing("pickpocketing_loot_template", "creature pickpocket lootid", true)
LootStore LootTemplates_Mail("mail_loot_template", "mail template id", false)
LootStore LootTemplates_Fishing("fishing_loot_template", "area id", true)
std::pair< GossipMenuItemsContainer::iterator, GossipMenuItemsContainer::iterator > GossipMenuItemsMapBoundsNonConst
std::pair< GossipMenusContainer::iterator, GossipMenusContainer::iterator > GossipMenusMapBoundsNonConst
#define MAX_QUEST_LOG_SIZE
@ QUEST_STATUS_INCOMPLETE
@ SPELL_EFFECT_APPLY_AREA_AURA_PARTY
@ SPELL_EFFECT_APPLY_AREA_AURA_FRIEND
@ SPELL_EFFECT_APPLY_AREA_AURA_PET
@ SPELL_EFFECT_APPLY_AREA_AURA_RAID
@ SPELL_EFFECT_PERSISTENT_AREA_AURA
@ SPELL_EFFECT_APPLY_AREA_AURA_ENEMY
@ SPELL_EFFECT_APPLY_AREA_AURA_OWNER
@ CREATURE_TYPE_GAS_CLOUD
#define CLASSMASK_ALL_PLAYABLE
#define RACEMASK_ALL_PLAYABLE
@ TARGET_FLAG_CORPSE_MASK
@ TARGET_FLAG_GAMEOBJECT_MASK
uint32 GetTargetFlagMask(SpellTargetObjectTypes objType)
@ TARGET_SELECT_CATEGORY_CONE
@ TARGET_SELECT_CATEGORY_AREA
@ TARGET_SELECT_CATEGORY_NEARBY
@ TARGET_SELECT_CATEGORY_TRAJ
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
@ UNIT_STAND_STATE_SUBMERGED
@ UNIT_STATE_ALL_STATE_SUPPORTED
bool CompareValues(ComparisionType type, T val1, T val2)
bool isConditionTypeValid(Condition *cond) const
bool IsSpellUsedInSpellClickConditions(uint32 spellId) const
ConditionEntriesByCreatureIdMap NpcVendorConditionContainerStore
std::unordered_set< uint32 > SpellsUsedInSpellClickConditions
bool addToSpellImplicitTargetConditions(Condition *cond) const
ConditionEntriesByCreatureIdMap VehicleSpellConditionStore
bool IsObjectMeetingVehicleSpellConditions(uint32 creatureId, uint32 spellId, Player *player, Unit *vehicle) const
std::vector< Condition * > AllocatedMemoryStore
ConditionContainer const * GetConditionsForSpellClickEvent(uint32 creatureId, uint32 spellId) const
bool isSourceTypeValid(Condition *cond) const
bool addToGossipMenus(Condition *cond) const
uint32 GetSearcherTypeMaskForConditionList(ConditionContainer const &conditions) const
bool IsObjectMeetingNotGroupedConditions(ConditionSourceType sourceType, uint32 entry, ConditionSourceInfo &sourceInfo) const
static ConditionMgr * instance()
SmartEventConditionContainer SmartEventConditionStore
bool HasConditionsForNotGroupedEntry(ConditionSourceType sourceType, uint32 entry) const
bool IsObjectMeetingSmartEventConditions(int32 entryOrGuid, uint32 eventId, uint32 sourceType, Unit *unit, WorldObject *baseObject) const
bool IsObjectMeetToConditionList(ConditionSourceInfo &sourceInfo, ConditionContainer const &conditions) const
bool IsObjectMeetingSpellClickConditions(uint32 creatureId, uint32 spellId, WorldObject *clicker, WorldObject *target) const
bool addToLootTemplate(Condition *cond, LootTemplate *loot) const
bool addToGossipMenuItems(Condition *cond) const
ConditionEntriesByTypeArray ConditionStore
static bool CanHaveSourceGroupSet(ConditionSourceType sourceType)
static void LogUselessConditionValue(Condition *cond, uint8 index, uint32 value)
ConditionEntriesByCreatureIdMap SpellClickEventConditionStore
ConditionReferenceContainer ConditionReferenceStore
static bool CanHaveSourceIdSet(ConditionSourceType sourceType)
bool IsObjectMeetToConditions(WorldObject *object, ConditionContainer const &conditions) const
static ConditionTypeInfo const StaticConditionTypeData[CONDITION_MAX]
bool IsObjectMeetingVendorItemConditions(uint32 creatureId, uint32 itemId, Player *player, Creature *vendor) const
static char const *const StaticSourceTypeData[CONDITION_SOURCE_TYPE_MAX]
void LoadConditions(bool isReload=false)
Class used to access individual fields of database query result.
std::vector< GameEventData > GameEventDataMap
LootTemplate * GetLootForConditionFill(uint32 loot_id)
bool HaveLootFor(uint32 loot_id) const
bool isReference(uint32 id)
bool addConditionItem(Condition *cond)
static Creature * ToCreature(Object *o)
static Unit * ToUnit(Object *o)
static ObjectGuid GetGUID(Object const *o)
static Player * ToPlayer(Object *o)
static bool IsValidGender(uint8 Gender)
static DrunkenState GetDrunkenstateByValue(uint8 value)
int32 RequiredNpcOrGo[QUEST_OBJECTIVES_COUNT]
uint32 RequiredNpcOrGoCount[QUEST_OBJECTIVES_COUNT]
uint32 GetQuestId() const
std::vector< Condition * > * ImplicitTargetConditions
SpellEffectInfo const & GetEffect(SpellEffIndex index) const
std::array< SpellEffectInfo, MAX_SPELL_EFFECTS > const & GetEffects() const
ObjectGuid GetCreatorGUID() const
ObjectGuid GetOwnerGUID() const override
bool IsOnVehicle(Unit const *vehicle) const
bool IsInRaidWith(Unit const *unit) const
bool IsInPartyWith(Unit const *unit) const
ReputationRank GetReactionTo(WorldObject const *target) const
float GetDistance(WorldObject const *obj) const
ObjectData const creatureData[]
Condition const * mLastFailedCondition
WorldObject * mConditionTargets[MAX_CONDITION_TARGETS]
ConditionTypes ConditionType
std::string ToString(bool ext=false) const
uint32 GetSearcherTypeMaskForCondition() const
ConditionSourceType SourceType
uint32 GetMaxAvailableConditionTargets() const
bool Meets(ConditionSourceInfo &sourceInfo) const