AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
Condition Struct Reference

#include "ConditionMgr.h"

Public Member Functions

 Condition ()
 
bool Meets (ConditionSourceInfo &sourceInfo)
 
uint32 GetSearcherTypeMaskForCondition ()
 
bool isLoaded () const
 
uint32 GetMaxAvailableConditionTargets ()
 

Public Attributes

ConditionSourceType SourceType
 
uint32 SourceGroup
 
int32 SourceEntry
 
uint32 SourceId
 
uint32 ElseGroup
 
ConditionTypes ConditionType
 
uint32 ConditionValue1
 
uint32 ConditionValue2
 
uint32 ConditionValue3
 
uint32 ErrorType
 
uint32 ErrorTextId
 
uint32 ReferenceId
 
uint32 ScriptId
 
uint8 ConditionTarget
 
bool NegativeCondition
 

Detailed Description

Constructor & Destructor Documentation

◆ Condition()

Condition::Condition ( )
inline
215 {
217 SourceGroup = 0;
218 SourceEntry = 0;
219 SourceId = 0;
220 ElseGroup = 0;
222 ConditionTarget = 0;
223 ConditionValue1 = 0;
224 ConditionValue2 = 0;
225 ConditionValue3 = 0;
226 ReferenceId = 0;
227 ErrorType = 0;
228 ErrorTextId = 0;
229 ScriptId = 0;
230 NegativeCondition = false;
231 }
@ CONDITION_SOURCE_TYPE_NONE
Definition ConditionMgr.h:125
@ CONDITION_NONE
Definition ConditionMgr.h:34
uint32 SourceGroup
Definition ConditionMgr.h:199
ConditionTypes ConditionType
Definition ConditionMgr.h:203
uint32 ErrorType
Definition ConditionMgr.h:207
uint32 SourceId
Definition ConditionMgr.h:201
int32 SourceEntry
Definition ConditionMgr.h:200
uint32 ElseGroup
Definition ConditionMgr.h:202
uint32 ScriptId
Definition ConditionMgr.h:210
bool NegativeCondition
Definition ConditionMgr.h:212
ConditionSourceType SourceType
Definition ConditionMgr.h:198
uint32 ConditionValue2
Definition ConditionMgr.h:205
uint8 ConditionTarget
Definition ConditionMgr.h:211
uint32 ReferenceId
Definition ConditionMgr.h:209
uint32 ErrorTextId
Definition ConditionMgr.h:208
uint32 ConditionValue3
Definition ConditionMgr.h:206
uint32 ConditionValue1
Definition ConditionMgr.h:204

References CONDITION_NONE, CONDITION_SOURCE_TYPE_NONE, ConditionTarget, ConditionType, ConditionValue1, ConditionValue2, ConditionValue3, ElseGroup, ErrorTextId, ErrorType, NegativeCondition, ReferenceId, ScriptId, SourceEntry, SourceGroup, SourceId, and SourceType.

Member Function Documentation

◆ GetMaxAvailableConditionTargets()

uint32 Condition::GetMaxAvailableConditionTargets ( )
823{
824 // returns number of targets which are available for given source type
825 switch (SourceType)
826 {
828 return 3;
839 return 2;
840 default:
841 break;
842 }
843
844 return 1;
845}
@ CONDITION_SOURCE_TYPE_CREATURE_VISIBILITY
Definition ConditionMgr.h:155
@ CONDITION_SOURCE_TYPE_VEHICLE_SPELL
Definition ConditionMgr.h:146
@ CONDITION_SOURCE_TYPE_NPC_VENDOR
Definition ConditionMgr.h:148
@ CONDITION_SOURCE_TYPE_GOSSIP_MENU_OPTION
Definition ConditionMgr.h:140
@ CONDITION_SOURCE_TYPE_SPELL_CLICK_EVENT
Definition ConditionMgr.h:143
@ CONDITION_SOURCE_TYPE_SMART_EVENT
Definition ConditionMgr.h:147
@ CONDITION_SOURCE_TYPE_SPELL
Definition ConditionMgr.h:142
@ CONDITION_SOURCE_TYPE_GOSSIP_MENU
Definition ConditionMgr.h:139
@ CONDITION_SOURCE_TYPE_CREATURE_TEMPLATE_VEHICLE
Definition ConditionMgr.h:141
@ CONDITION_SOURCE_TYPE_SPELL_IMPLICIT_TARGET
Definition ConditionMgr.h:138
@ CONDITION_SOURCE_TYPE_SPELL_PROC
Definition ConditionMgr.h:149

References CONDITION_SOURCE_TYPE_CREATURE_TEMPLATE_VEHICLE, CONDITION_SOURCE_TYPE_CREATURE_VISIBILITY, CONDITION_SOURCE_TYPE_GOSSIP_MENU, CONDITION_SOURCE_TYPE_GOSSIP_MENU_OPTION, CONDITION_SOURCE_TYPE_NPC_VENDOR, CONDITION_SOURCE_TYPE_SMART_EVENT, CONDITION_SOURCE_TYPE_SPELL, CONDITION_SOURCE_TYPE_SPELL_CLICK_EVENT, CONDITION_SOURCE_TYPE_SPELL_IMPLICIT_TARGET, CONDITION_SOURCE_TYPE_SPELL_PROC, CONDITION_SOURCE_TYPE_VEHICLE_SPELL, and SourceType.

Referenced by ConditionMgr::isConditionTypeValid().

◆ GetSearcherTypeMaskForCondition()

uint32 Condition::GetSearcherTypeMaskForCondition ( )
622{
623 // build mask of types for which condition can return true
624 // this is used for speeding up gridsearches
626 return (GRID_MAP_TYPE_MASK_ALL);
627 uint32 mask = 0;
628 switch (ConditionType)
629 {
630 case CONDITION_NONE:
632 break;
633 case CONDITION_AURA:
635 break;
636 case CONDITION_ITEM:
638 break;
641 break;
642 case CONDITION_ZONEID:
644 break;
647 break;
650 break;
651 case CONDITION_TEAM:
653 break;
654 case CONDITION_CLASS:
656 break;
657 case CONDITION_RACE:
659 break;
660 case CONDITION_SKILL:
662 break;
665 break;
668 break;
671 break;
674 break;
677 break;
680 break;
683 break;
684 case CONDITION_MAPID:
686 break;
687 case CONDITION_AREAID:
689 break;
690 case CONDITION_SPELL:
692 break;
693 case CONDITION_LEVEL:
695 break;
698 break;
701 break;
704 break;
706 switch (ConditionValue1)
707 {
708 case TYPEID_UNIT:
710 break;
711 case TYPEID_PLAYER:
713 break;
716 break;
717 case TYPEID_CORPSE:
719 break;
720 default:
721 break;
722 }
723 break;
733 break;
736 break;
739 break;
742 break;
743 case CONDITION_ALIVE:
745 break;
746 case CONDITION_HP_VAL:
748 break;
749 case CONDITION_HP_PCT:
751 break;
754 break;
757 break;
758 case CONDITION_TITLE:
760 break;
763 break;
764 case CONDITION_GENDER:
766 break;
769 break;
772 break;
775 break;
778 break;
781 break;
784 break;
787 break;
790 break;
793 break;
796 break;
799 break;
800 case CONDITION_TAXI:
802 break;
805 break;
808 break;
811 break;
814 break;
815 default:
816 ASSERT(false && "Condition::GetSearcherTypeMaskForCondition - missing condition handling!");
817 break;
818 }
819 return mask;
820}
@ CONDITION_WORLD_SCRIPT
Definition ConditionMgr.h:89
@ CONDITION_TAXI
Definition ConditionMgr.h:80
@ CONDITION_PLAYER_QUEUED_RANDOM_DUNGEON
Definition ConditionMgr.h:91
@ CONDITION_MAPID
Definition ConditionMgr.h:56
@ CONDITION_SKILL
Definition ConditionMgr.h:41
@ CONDITION_RACE
Definition ConditionMgr.h:50
@ CONDITION_REACTION_TO
Definition ConditionMgr.h:68
@ CONDITION_NEAR_GAMEOBJECT
Definition ConditionMgr.h:64
@ CONDITION_QUESTREWARDED
Definition ConditionMgr.h:42
@ CONDITION_REALM_ACHIEVEMENT
Definition ConditionMgr.h:73
@ CONDITION_PHASEMASK
Definition ConditionMgr.h:60
@ CONDITION_QUEST_OBJECTIVE_PROGRESS
Definition ConditionMgr.h:82
@ CONDITION_DAILY_QUEST_DONE
Definition ConditionMgr.h:77
@ CONDITION_AI_DATA
Definition ConditionMgr.h:90
@ CONDITION_ACTIVE_EVENT
Definition ConditionMgr.h:46
@ CONDITION_INSTANCE_INFO
Definition ConditionMgr.h:47
@ CONDITION_RELATION_TO
Definition ConditionMgr.h:67
@ CONDITION_STAND_STATE
Definition ConditionMgr.h:76
@ CONDITION_DRUNKENSTATE
Definition ConditionMgr.h:44
@ CONDITION_AURA
Definition ConditionMgr.h:35
@ CONDITION_ACHIEVEMENT
Definition ConditionMgr.h:51
@ CONDITION_OBJECT_ENTRY_GUID
Definition ConditionMgr.h:65
@ CONDITION_PET_TYPE
Definition ConditionMgr.h:79
@ CONDITION_DIFFICULTY_ID
Definition ConditionMgr.h:83
@ CONDITION_DISTANCE_TO
Definition ConditionMgr.h:69
@ CONDITION_HP_VAL
Definition ConditionMgr.h:71
@ CONDITION_GENDER
Definition ConditionMgr.h:54
@ CONDITION_REPUTATION_RANK
Definition ConditionMgr.h:39
@ CONDITION_HP_PCT
Definition ConditionMgr.h:72
@ CONDITION_QUEST_COMPLETE
Definition ConditionMgr.h:62
@ CONDITION_SPELL
Definition ConditionMgr.h:59
@ CONDITION_ZONEID
Definition ConditionMgr.h:38
@ CONDITION_CHARMED
Definition ConditionMgr.h:78
@ CONDITION_TYPE_MASK
Definition ConditionMgr.h:66
@ CONDITION_AREAID
Definition ConditionMgr.h:57
@ CONDITION_IN_WATER
Definition ConditionMgr.h:74
@ CONDITION_ITEM
Definition ConditionMgr.h:36
@ CONDITION_WORLD_STATE
Definition ConditionMgr.h:45
@ CONDITION_SPAWNMASK
Definition ConditionMgr.h:53
@ CONDITION_CLASS
Definition ConditionMgr.h:49
@ CONDITION_TEAM
Definition ConditionMgr.h:40
@ CONDITION_QUEST_NONE
Definition ConditionMgr.h:48
@ CONDITION_QUESTSTATE
Definition ConditionMgr.h:81
@ CONDITION_ITEM_EQUIPPED
Definition ConditionMgr.h:37
@ CONDITION_QUEST_SATISFY_EXCLUSIVE
Definition ConditionMgr.h:87
@ CONDITION_LEVEL
Definition ConditionMgr.h:61
@ CONDITION_QUESTTAKEN
Definition ConditionMgr.h:43
@ CONDITION_NEAR_CREATURE
Definition ConditionMgr.h:63
@ CONDITION_TITLE
Definition ConditionMgr.h:52
@ CONDITION_ALIVE
Definition ConditionMgr.h:70
@ CONDITION_CREATURE_TYPE
Definition ConditionMgr.h:58
@ CONDITION_UNIT_STATE
Definition ConditionMgr.h:55
@ CONDITION_HAS_AURA_TYPE
Definition ConditionMgr.h:88
std::uint32_t uint32
Definition Define.h:107
#define ASSERT
Definition Errors.h:68
@ GRID_MAP_TYPE_MASK_PLAYER
Definition GridDefines.h:75
@ GRID_MAP_TYPE_MASK_CREATURE
Definition GridDefines.h:72
@ GRID_MAP_TYPE_MASK_ALL
Definition GridDefines.h:76
@ GRID_MAP_TYPE_MASK_GAMEOBJECT
Definition GridDefines.h:74
@ GRID_MAP_TYPE_MASK_CORPSE
Definition GridDefines.h:71
@ TYPEID_GAMEOBJECT
Definition ObjectGuid.h:37
@ TYPEID_UNIT
Definition ObjectGuid.h:35
@ TYPEID_CORPSE
Definition ObjectGuid.h:39
@ TYPEID_PLAYER
Definition ObjectGuid.h:36
@ TYPEMASK_UNIT
Definition ObjectGuid.h:49
@ TYPEMASK_CORPSE
Definition ObjectGuid.h:53
@ TYPEMASK_GAMEOBJECT
Definition ObjectGuid.h:51
@ TYPEMASK_PLAYER
Definition ObjectGuid.h:50

References ASSERT, CONDITION_ACHIEVEMENT, CONDITION_ACTIVE_EVENT, CONDITION_AI_DATA, CONDITION_ALIVE, CONDITION_AREAID, CONDITION_AURA, CONDITION_CHARMED, CONDITION_CLASS, CONDITION_CREATURE_TYPE, CONDITION_DAILY_QUEST_DONE, CONDITION_DIFFICULTY_ID, CONDITION_DISTANCE_TO, CONDITION_DRUNKENSTATE, CONDITION_GENDER, CONDITION_HAS_AURA_TYPE, CONDITION_HP_PCT, CONDITION_HP_VAL, CONDITION_IN_WATER, CONDITION_INSTANCE_INFO, CONDITION_ITEM, CONDITION_ITEM_EQUIPPED, CONDITION_LEVEL, CONDITION_MAPID, CONDITION_NEAR_CREATURE, CONDITION_NEAR_GAMEOBJECT, CONDITION_NONE, CONDITION_OBJECT_ENTRY_GUID, CONDITION_PET_TYPE, CONDITION_PHASEMASK, CONDITION_PLAYER_QUEUED_RANDOM_DUNGEON, CONDITION_QUEST_COMPLETE, CONDITION_QUEST_NONE, CONDITION_QUEST_OBJECTIVE_PROGRESS, CONDITION_QUEST_SATISFY_EXCLUSIVE, CONDITION_QUESTREWARDED, CONDITION_QUESTSTATE, CONDITION_QUESTTAKEN, CONDITION_RACE, CONDITION_REACTION_TO, CONDITION_REALM_ACHIEVEMENT, CONDITION_RELATION_TO, CONDITION_REPUTATION_RANK, CONDITION_SKILL, CONDITION_SPAWNMASK, CONDITION_SPELL, CONDITION_STAND_STATE, CONDITION_TAXI, CONDITION_TEAM, CONDITION_TITLE, CONDITION_TYPE_MASK, CONDITION_UNIT_STATE, CONDITION_WORLD_SCRIPT, CONDITION_WORLD_STATE, CONDITION_ZONEID, ConditionType, ConditionValue1, GRID_MAP_TYPE_MASK_ALL, GRID_MAP_TYPE_MASK_CORPSE, GRID_MAP_TYPE_MASK_CREATURE, GRID_MAP_TYPE_MASK_GAMEOBJECT, GRID_MAP_TYPE_MASK_PLAYER, NegativeCondition, TYPEID_CORPSE, TYPEID_GAMEOBJECT, TYPEID_PLAYER, TYPEID_UNIT, TYPEMASK_CORPSE, TYPEMASK_GAMEOBJECT, TYPEMASK_PLAYER, and TYPEMASK_UNIT.

◆ isLoaded()

bool Condition::isLoaded ( ) const
inline

◆ Meets()

bool Condition::Meets ( ConditionSourceInfo sourceInfo)
38{
39 // ASSERT(ConditionTarget < MAX_CONDITION_TARGETS);
41 {
42 LOG_ERROR("condition", "ConditionTarget {} for for condition (Entry: {} Type: {} Group: {}) is greater or equal than MAX_CONDITION_TARGETS", ConditionTarget, SourceEntry, SourceType, SourceGroup);
43 return false;
44 }
45
46 WorldObject* object = sourceInfo.mConditionTargets[ConditionTarget];
47 // object not present, return false
48 if (!object)
49 {
50 LOG_DEBUG("condition", "Condition object not found for condition (Entry: {} Type: {} Group: {})", SourceEntry, SourceType, SourceGroup);
51 return false;
52 }
53 bool condMeets = false;
54 switch (ConditionType)
55 {
56 case CONDITION_NONE:
57 condMeets = true; // empty condition, always met
58 break;
59 case CONDITION_AURA:
60 {
61 if (Unit* unit = object->ToUnit())
62 condMeets = unit->HasAuraEffect(ConditionValue1, ConditionValue2);
63 break;
64 }
65 case CONDITION_ITEM:
66 {
67 if (Unit* unit = object->ToUnit())
68 {
70 {
71 // don't allow 0 items (it's checked during table load)
73 bool checkBank = ConditionValue3;
74 condMeets = player->HasItemCount(ConditionValue1, ConditionValue2, checkBank);
75 }
76 }
77 break;
78 }
80 {
81 if (Unit* unit = object->ToUnit())
82 {
84 {
85 condMeets = player->HasItemOrGemWithIdEquipped(ConditionValue1, 1);
86 }
87 }
88 break;
89 }
91 condMeets = object->GetZoneId() == ConditionValue1;
92 break;
94 {
95 if (Unit* unit = object->ToUnit())
96 {
98 {
99 if (FactionEntry const* faction = sFactionStore.LookupEntry(ConditionValue1))
100 {
101 condMeets = (ConditionValue2 & (1 << player->GetReputationMgr().GetRank(faction)));
102 }
103 }
104 }
105 break;
106 }
108 {
109 if (Unit* unit = object->ToUnit())
110 {
111 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
112 {
113 condMeets = player->HasAchieved(ConditionValue1);
114 }
115 }
116 break;
117 }
118 case CONDITION_TEAM:
119 {
120 if (Unit* unit = object->ToUnit())
121 {
122 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
123 {
124 // Xinef: DB Data compatibility...
125 uint32 teamOld = player->GetTeamId() == TEAM_ALLIANCE ? ALLIANCE : HORDE;
126 condMeets = teamOld == ConditionValue1;
127 }
128 }
129 break;
130 }
131 case CONDITION_CLASS:
132 {
133 if (Unit* unit = object->ToUnit())
134 condMeets = unit->getClassMask() & ConditionValue1;
135 break;
136 }
137 case CONDITION_RACE:
138 {
139 if (Unit* unit = object->ToUnit())
140 condMeets = unit->getRaceMask() & ConditionValue1;
141 break;
142 }
143 case CONDITION_GENDER:
144 {
145 if (Unit* unit = object->ToUnit())
146 {
147 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
148 {
149 condMeets = player->getGender() == ConditionValue1;
150 }
151 }
152 break;
153 }
154 case CONDITION_SKILL:
155 {
156 if (Unit* unit = object->ToUnit())
157 {
158 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
159 {
160 condMeets = player->HasSkill(ConditionValue1) && player->GetBaseSkillValue(ConditionValue1) >= ConditionValue2;
161 }
162 }
163 break;
164 }
166 {
167 if (Unit* unit = object->ToUnit())
168 {
169 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
170 {
171 condMeets = player->GetQuestRewardStatus(ConditionValue1);
172 }
173 }
174 break;
175 }
177 {
178 if (Unit* unit = object->ToUnit())
179 {
180 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
181 {
182 QuestStatus status = player->GetQuestStatus(ConditionValue1);
183 condMeets = (status == QUEST_STATUS_INCOMPLETE);
184 }
185 }
186 break;
187 }
189 {
190 if (Unit* unit = object->ToUnit())
191 {
192 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
193 {
194 QuestStatus status = player->GetQuestStatus(ConditionValue1);
195 condMeets = (status == QUEST_STATUS_COMPLETE && !player->GetQuestRewardStatus(ConditionValue1));
196 }
197 }
198 break;
199 }
201 {
202 if (Unit* unit = object->ToUnit())
203 {
204 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
205 {
206 QuestStatus status = player->GetQuestStatus(ConditionValue1);
207 condMeets = (status == QUEST_STATUS_NONE);
208 }
209 }
210 break;
211 }
213 {
214 if (Unit* unit = object->ToUnit())
215 {
216 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
217 {
218 // Xinef: cannot be null, checked at loading
219 const Quest* quest = sObjectMgr->GetQuestTemplate(ConditionValue1);
220 condMeets = !player->IsQuestRewarded(ConditionValue1) && player->SatisfyQuestExclusiveGroup(quest, false);
221 }
222 }
223 break;
224 }
226 condMeets = sGameEventMgr->IsActiveEvent(ConditionValue1);
227 break;
229 {
230 Map* map = object->GetMap();
231 if (map->IsDungeon())
232 {
233 if (InstanceScript const* instance = map->ToInstanceMap()->GetInstanceScript())
234 {
235 switch (ConditionValue3)
236 {
238 condMeets = instance->GetData(ConditionValue1) == ConditionValue2;
239 break;
241 condMeets = instance->GetGuidData(ConditionValue1) == ObjectGuid(uint64(ConditionValue2));
242 break;
244 condMeets = instance->GetBossState(ConditionValue1) == EncounterState(ConditionValue2);
245 break;
247 condMeets = instance->GetData64(ConditionValue1) == ConditionValue2;
248 break;
249 }
250 }
251 }
252 break;
253 }
254 case CONDITION_MAPID:
255 condMeets = object->GetMapId() == ConditionValue1;
256 break;
257 case CONDITION_AREAID:
258 condMeets = object->GetAreaId() == ConditionValue1;
259 break;
260 case CONDITION_SPELL:
261 {
262 if (Unit* unit = object->ToUnit())
263 {
264 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
265 {
266 condMeets = player->HasSpell(ConditionValue1);
267 }
268 }
269 break;
270 }
271 case CONDITION_LEVEL:
272 {
273 if (Unit* unit = object->ToUnit())
274 condMeets = CompareValues(static_cast<ComparisionType>(ConditionValue2), static_cast<uint32>(unit->GetLevel()), ConditionValue1);
275 break;
276 }
278 {
279 if (Unit* unit = object->ToUnit())
280 {
281 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
282 {
283 condMeets = (uint32)Player::GetDrunkenstateByValue(player->GetDrunkValue()) >= ConditionValue1;
284 }
285 }
286 break;
287 }
289 {
290 condMeets = static_cast<bool>(GetClosestCreatureWithEntry(object, ConditionValue1, static_cast<float>(ConditionValue2), !ConditionValue3));
291 break;
292 }
294 {
295 if (!ConditionValue3)
296 {
297 condMeets = static_cast<bool>(GetClosestGameObjectWithEntry(object, ConditionValue1, static_cast<float>(ConditionValue2)));
298 break;
299 }
300 else
301 {
302 if (GameObject* go = GetClosestGameObjectWithEntry(object, ConditionValue1, static_cast<float>(ConditionValue2)))
303 {
304 if ((go->GetGoState() == GO_STATE_READY && ConditionValue3 == 1) || (go->GetGoState() != GO_STATE_READY && ConditionValue3 == 2))
305 condMeets = true;
306 else
307 condMeets = false;
308 }
309 break;
310 }
311 }
313 {
314 if (ConditionValue3 == 1 && object->ToUnit()) // pussywizard: if == 1, ignore not attackable/selectable targets
316 break;
317
318 if (uint32(object->GetTypeId()) == ConditionValue1)
319 {
320 condMeets = !ConditionValue2 || (object->GetEntry() == ConditionValue2);
321
322 if (ConditionValue3 > 1)
323 {
324 switch (object->GetTypeId())
325 {
326 case TYPEID_UNIT:
327 condMeets &= object->ToCreature()->GetSpawnId() == ConditionValue3;
328 break;
330 condMeets &= object->ToGameObject()->GetSpawnId() == ConditionValue3;
331 break;
332 default:
333 break;
334 }
335 }
336 }
337 break;
338 }
340 {
341 condMeets = object->isType(ConditionValue1);
342 break;
343 }
345 {
346 if (WorldObject* toObject = sourceInfo.mConditionTargets[ConditionValue1])
347 {
348 Unit* toUnit = toObject->ToUnit();
349 Unit* unit = object->ToUnit();
350 if (toUnit && unit)
351 {
352 switch (ConditionValue2)
353 {
354 case RELATION_SELF:
355 condMeets = unit == toUnit;
356 break;
358 condMeets = unit->IsInPartyWith(toUnit);
359 break;
361 condMeets = unit->IsInRaidWith(toUnit);
362 break;
364 condMeets = unit->GetOwnerGUID() == toUnit->GetGUID();
365 break;
367 condMeets = unit->IsOnVehicle(toUnit);
368 break;
370 condMeets = unit->GetCreatorGUID() == toUnit->GetGUID();
371 break;
372 }
373 }
374 }
375 break;
376 }
378 {
379 if (WorldObject* toObject = sourceInfo.mConditionTargets[ConditionValue1])
380 {
381 Unit* toUnit = toObject->ToUnit();
382 Unit* unit = object->ToUnit();
383 if (toUnit && unit)
384 condMeets = (1 << unit->GetReactionTo(toUnit)) & ConditionValue2;
385 }
386 break;
387 }
389 {
390 if (WorldObject* toObject = sourceInfo.mConditionTargets[ConditionValue1])
391 condMeets = CompareValues(static_cast<ComparisionType>(ConditionValue3), object->GetDistance(toObject), static_cast<float>(ConditionValue2));
392 break;
393 }
394 case CONDITION_ALIVE:
395 {
396 if (Unit* unit = object->ToUnit())
397 condMeets = unit->IsAlive();
398 break;
399 }
400 case CONDITION_HP_VAL:
401 {
402 if (Unit* unit = object->ToUnit())
403 condMeets = CompareValues(static_cast<ComparisionType>(ConditionValue2), unit->GetHealth(), static_cast<uint32>(ConditionValue1));
404 break;
405 }
406 case CONDITION_HP_PCT:
407 {
408 if (Unit* unit = object->ToUnit())
409 condMeets = CompareValues(static_cast<ComparisionType>(ConditionValue2), unit->GetHealthPct(), static_cast<float>(ConditionValue1));
410 break;
411 }
413 {
414 condMeets = ConditionValue2 == sWorldState->getWorldState(ConditionValue1);
415 break;
416 }
418 {
419 condMeets = object->GetPhaseMask() & ConditionValue1;
420 break;
421 }
422 case CONDITION_TITLE:
423 {
424 if (Unit* unit = object->ToUnit())
425 {
426 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
427 {
428 condMeets = player->HasTitle(ConditionValue1);
429 }
430 }
431 break;
432 }
434 {
435 condMeets = ((1 << object->GetMap()->GetSpawnMode()) & ConditionValue1);
436 break;
437 }
439 {
440 if (Unit* unit = object->ToUnit())
441 condMeets = unit->HasUnitState(ConditionValue1);
442 break;
443 }
445 {
446 if (Creature* creature = object->ToCreature())
447 condMeets = creature->GetCreatureTemplate()->type == ConditionValue1;
448 break;
449 }
451 {
452 AchievementEntry const* achievement = sAchievementStore.LookupEntry(ConditionValue1);
453 if (achievement && sAchievementMgr->IsRealmCompleted(achievement))
454 condMeets = true;
455 break;
456 }
458 {
459 if (Unit* unit = object->ToUnit())
460 condMeets = unit->IsInWater();
461 break;
462 }
464 {
465 if (Unit* unit = object->ToUnit())
466 {
467 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
468 {
469 uint32 queststateConditionValue1 = player->GetQuestStatus(ConditionValue1);
470 if (((ConditionValue2 & (1 << QUEST_STATUS_NONE)) && (queststateConditionValue1 == QUEST_STATUS_NONE)) ||
471 ((ConditionValue2 & (1 << QUEST_STATUS_COMPLETE)) && (queststateConditionValue1 == QUEST_STATUS_COMPLETE)) ||
472 ((ConditionValue2 & (1 << QUEST_STATUS_INCOMPLETE)) && (queststateConditionValue1 == QUEST_STATUS_INCOMPLETE)) ||
473 ((ConditionValue2 & (1 << QUEST_STATUS_FAILED)) && (queststateConditionValue1 == QUEST_STATUS_FAILED)) ||
474 ((ConditionValue2 & (1 << QUEST_STATUS_REWARDED)) && player->GetQuestRewardStatus(ConditionValue1)))
475 {
476 condMeets = true;
477 }
478 }
479 }
480 break;
481 }
483 {
484 if (Unit* unit = object->ToUnit())
485 {
486 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
487 {
488 condMeets = player->IsDailyQuestDone(ConditionValue1);
489 }
490 }
491 break;
492 }
494 {
495 if (Unit* unit = object->ToUnit())
496 {
497 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
498 {
499 Quest const* quest = ASSERT_NOTNULL(sObjectMgr->GetQuestTemplate(ConditionValue1));
500 uint16 log_slot = player->FindQuestSlot(quest->GetQuestId());
501 if (log_slot >= MAX_QUEST_LOG_SIZE)
502 {
503 break;
504 }
505
506 if (player->GetQuestSlotCounter(log_slot, ConditionValue2) == ConditionValue3)
507 {
508 condMeets = true;
509 }
510 }
511 }
512 break;
513 }
515 {
516 if (Unit* unit = object->ToUnit())
517 condMeets = unit->HasAuraType(AuraType(ConditionValue1));
518 break;
519 }
521 {
522 if (Unit* unit = object->ToUnit())
523 {
524 if (ConditionValue1 == 0)
525 {
526 condMeets = (unit->getStandState() == ConditionValue2);
527 }
528 else if (ConditionValue2 == 0)
529 {
530 condMeets = unit->IsStandState();
531 }
532 else if (ConditionValue2 == 1)
533 {
534 condMeets = unit->IsSitState();
535 }
536 }
537
538 break;
539 }
541 {
542 condMeets = object->GetMap()->GetDifficulty() == ConditionValue1;
543 break;
544 }
546 {
547 if (Unit* unit = object->ToUnit())
548 {
549 if (Player* player = unit->ToPlayer())
550 {
551 if (sLFGMgr->IsPlayerQueuedForRandomDungeon(player->GetGUID()))
552 {
553 if (!ConditionValue1)
554 condMeets = true;
555 else if (Map* map = player->GetMap())
556 condMeets = map->GetDifficulty() == Difficulty(ConditionValue2);
557 }
558 }
559 }
560 break;
561 }
563 {
564 if (Unit* unit = object->ToUnit())
565 {
566 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
567 {
568 if (Pet* pet = player->GetPet())
569 {
570 condMeets = (((1 << pet->getPetType()) & ConditionValue1) != 0);
571 }
572 }
573 }
574 break;
575 }
576 case CONDITION_TAXI:
577 {
578 if (Unit* unit = object->ToUnit())
579 {
580 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
581 {
582 condMeets = player->IsInFlight();
583 }
584 }
585 break;
586 }
588 {
589 if (Unit* unit = object->ToUnit())
590 condMeets = unit->IsCharmed();
591 break;
592 }
594 {
595 condMeets = sWorldState->IsConditionFulfilled(ConditionValue1, ConditionValue2);
596 break;
597 }
599 {
600 if (Creature* creature = object->ToCreature())
601 condMeets = creature->AI() && creature->AI()->GetData(ConditionValue1) == ConditionValue2;
602 else if (GameObject* go = object->ToGameObject())
603 condMeets = go->AI() && go->AI()->GetData(ConditionValue1) == ConditionValue2;
604 break;
605 }
606 default:
607 condMeets = false;
608 break;
609 }
610
612 condMeets = !condMeets;
613
614 if (!condMeets)
615 sourceInfo.mLastFailedCondition = this;
616
617 // bool script = sScriptMgr->OnConditionCheck(this, sourceInfo); // Returns true by default. // pussywizard: optimization
618 return condMeets; // && script;
619}
#define sAchievementMgr
Definition AchievementMgr.h:451
@ INSTANCE_INFO_DATA64
Definition ConditionMgr.h:175
@ INSTANCE_INFO_DATA
Definition ConditionMgr.h:172
@ INSTANCE_INFO_BOSS_STATE
Definition ConditionMgr.h:174
@ INSTANCE_INFO_GUID_DATA
Definition ConditionMgr.h:173
@ MAX_CONDITION_TARGETS
Definition ConditionMgr.h:180
@ RELATION_IN_PARTY
Definition ConditionMgr.h:162
@ RELATION_IN_RAID_OR_PARTY
Definition ConditionMgr.h:163
@ RELATION_CREATED_BY
Definition ConditionMgr.h:166
@ RELATION_SELF
Definition ConditionMgr.h:161
@ RELATION_PASSENGER_OF
Definition ConditionMgr.h:165
@ RELATION_OWNED_BY
Definition ConditionMgr.h:164
Difficulty
Definition DBCEnums.h:266
DBCStorage< FactionEntry > sFactionStore(FactionEntryfmt)
DBCStorage< AchievementEntry > sAchievementStore(Achievementfmt)
std::uint64_t uint64
Definition Define.h:106
std::uint16_t uint16
Definition Define.h:108
#define ASSERT_NOTNULL(pointer)
Definition Errors.h:85
#define sGameEventMgr
Definition GameEventMgr.h:201
@ GO_STATE_READY
Definition GameObjectData.h:706
EncounterState
Definition InstanceScript.h:57
#define sLFGMgr
Definition LFGMgr.h:646
#define LOG_ERROR(filterType__,...)
Definition Log.h:158
#define LOG_DEBUG(filterType__,...)
Definition Log.h:170
#define sObjectMgr
Definition ObjectMgr.h:1686
#define MAX_QUEST_LOG_SIZE
Definition QuestDef.h:33
QuestStatus
Definition QuestDef.h:99
@ QUEST_STATUS_REWARDED
Definition QuestDef.h:106
@ QUEST_STATUS_FAILED
Definition QuestDef.h:105
@ QUEST_STATUS_INCOMPLETE
Definition QuestDef.h:103
@ QUEST_STATUS_NONE
Definition QuestDef.h:100
@ QUEST_STATUS_COMPLETE
Definition QuestDef.h:101
Creature * GetClosestCreatureWithEntry(WorldObject *source, uint32 entry, float maxSearchRange, bool alive)
Definition ScriptedCreature.cpp:905
GameObject * GetClosestGameObjectWithEntry(WorldObject *source, uint32 entry, float maxSearchRange, bool onlySpawned)
Definition ScriptedCreature.cpp:910
@ ALLIANCE
Definition SharedDefines.h:779
@ HORDE
Definition SharedDefines.h:778
@ TEAM_ALLIANCE
Definition SharedDefines.h:771
AuraType
Definition SpellAuraDefines.h:62
@ UNIT_FLAG_NON_ATTACKABLE
Definition UnitDefines.h:255
@ UNIT_FLAG_NOT_SELECTABLE
Definition UnitDefines.h:279
bool CompareValues(ComparisionType type, T val1, T val2)
Definition Util.h:588
ComparisionType
Definition Util.h:578
#define sWorldState
Definition WorldState.h:377
Definition Creature.h:47
Definition GameObject.h:120
InstanceScript * GetInstanceScript()
Definition Map.h:658
Definition InstanceScript.h:143
Definition Map.h:163
bool IsDungeon() const
Definition Map.h:295
InstanceMap * ToInstanceMap()
Definition Map.h:377
Difficulty GetDifficulty() const
Definition Map.h:290
Definition ObjectGuid.h:118
Player * ToPlayer()
Definition Object.h:201
TypeID GetTypeId() const
Definition Object.h:128
GameObject * ToGameObject()
Definition Object.h:213
Creature * ToCreature()
Definition Object.h:205
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:113
Unit * ToUnit()
Definition Object.h:209
Definition Pet.h:41
Definition Player.h:1066
static DrunkenState GetDrunkenstateByValue(uint8 value)
Definition Player.cpp:977
Definition QuestDef.h:210
uint32 GetQuestId() const
Definition QuestDef.h:228
Definition Unit.h:655
ReputationRank GetReactionTo(Unit const *target, bool checkOriginalFaction=false) const
Definition Unit.cpp:10254
bool IsCharmed() const
Definition Unit.h:1295
float GetHealthPct() const
Definition Unit.h:1095
ObjectGuid GetCreatorGUID() const
Definition Unit.h:705
Player * GetCharmerOrOwnerPlayerOrPlayerItself() const
Definition Unit.cpp:10831
bool HasUnitFlag(UnitFlags flags) const
Definition Unit.h:737
bool IsAlive() const
Definition Unit.h:1773
bool IsStandState() const
Definition Unit.cpp:16956
bool IsOnVehicle(Unit const *vehicle) const
Definition Unit.h:1906
virtual bool IsInWater() const
Definition Unit.cpp:4399
uint32 GetHealth() const
Definition Unit.h:1093
bool HasAuraType(AuraType auraType) const
Definition Unit.cpp:5858
uint8 getStandState() const
Definition Unit.h:1760
bool HasUnitState(const uint32 f) const
Definition Unit.h:726
bool IsInRaidWith(Unit const *unit) const
Definition Unit.cpp:19059
ObjectGuid GetOwnerGUID() const
Definition Unit.h:703
bool IsInPartyWith(Unit const *unit) const
Definition Unit.cpp:19036
bool IsSitState() const
Definition Unit.cpp:16947
Definition Object.h:471
float GetDistance(WorldObject const *obj) const
Definition Object.cpp:1271
Definition DBCStructure.h:40
Condition * mLastFailedCondition
Definition ConditionMgr.h:186
WorldObject * mConditionTargets[MAX_CONDITION_TARGETS]
Definition ConditionMgr.h:185
Definition DBCStructure.h:907

References ALLIANCE, ASSERT, ASSERT_NOTNULL, CompareValues(), CONDITION_ACHIEVEMENT, CONDITION_ACTIVE_EVENT, CONDITION_AI_DATA, CONDITION_ALIVE, CONDITION_AREAID, CONDITION_AURA, CONDITION_CHARMED, CONDITION_CLASS, CONDITION_CREATURE_TYPE, CONDITION_DAILY_QUEST_DONE, CONDITION_DIFFICULTY_ID, CONDITION_DISTANCE_TO, CONDITION_DRUNKENSTATE, CONDITION_GENDER, CONDITION_HAS_AURA_TYPE, CONDITION_HP_PCT, CONDITION_HP_VAL, CONDITION_IN_WATER, CONDITION_INSTANCE_INFO, CONDITION_ITEM, CONDITION_ITEM_EQUIPPED, CONDITION_LEVEL, CONDITION_MAPID, CONDITION_NEAR_CREATURE, CONDITION_NEAR_GAMEOBJECT, CONDITION_NONE, CONDITION_OBJECT_ENTRY_GUID, CONDITION_PET_TYPE, CONDITION_PHASEMASK, CONDITION_PLAYER_QUEUED_RANDOM_DUNGEON, CONDITION_QUEST_COMPLETE, CONDITION_QUEST_NONE, CONDITION_QUEST_OBJECTIVE_PROGRESS, CONDITION_QUEST_SATISFY_EXCLUSIVE, CONDITION_QUESTREWARDED, CONDITION_QUESTSTATE, CONDITION_QUESTTAKEN, CONDITION_RACE, CONDITION_REACTION_TO, CONDITION_REALM_ACHIEVEMENT, CONDITION_RELATION_TO, CONDITION_REPUTATION_RANK, CONDITION_SKILL, CONDITION_SPAWNMASK, CONDITION_SPELL, CONDITION_STAND_STATE, CONDITION_TAXI, CONDITION_TEAM, CONDITION_TITLE, CONDITION_TYPE_MASK, CONDITION_UNIT_STATE, CONDITION_WORLD_SCRIPT, CONDITION_WORLD_STATE, CONDITION_ZONEID, ConditionTarget, ConditionType, ConditionValue1, ConditionValue2, ConditionValue3, Unit::GetCharmerOrOwnerPlayerOrPlayerItself(), GetClosestCreatureWithEntry(), GetClosestGameObjectWithEntry(), Unit::GetCreatorGUID(), WorldObject::GetDistance(), Player::GetDrunkenstateByValue(), Object::GetGUID(), InstanceMap::GetInstanceScript(), Unit::GetOwnerGUID(), Quest::GetQuestId(), Unit::GetReactionTo(), Object::GetTypeId(), GO_STATE_READY, Unit::HasUnitFlag(), HORDE, INSTANCE_INFO_BOSS_STATE, INSTANCE_INFO_DATA, INSTANCE_INFO_DATA64, INSTANCE_INFO_GUID_DATA, Map::IsDungeon(), Unit::IsInPartyWith(), Unit::IsInRaidWith(), Unit::IsOnVehicle(), LOG_DEBUG, LOG_ERROR, MAX_CONDITION_TARGETS, MAX_QUEST_LOG_SIZE, ConditionSourceInfo::mConditionTargets, ConditionSourceInfo::mLastFailedCondition, NegativeCondition, QUEST_STATUS_COMPLETE, QUEST_STATUS_FAILED, QUEST_STATUS_INCOMPLETE, QUEST_STATUS_NONE, QUEST_STATUS_REWARDED, RELATION_CREATED_BY, RELATION_IN_PARTY, RELATION_IN_RAID_OR_PARTY, RELATION_OWNED_BY, RELATION_PASSENGER_OF, RELATION_SELF, sAchievementMgr, sAchievementStore, sFactionStore, sGameEventMgr, sLFGMgr, sObjectMgr, SourceEntry, SourceGroup, SourceType, sWorldState, TEAM_ALLIANCE, Object::ToCreature(), Object::ToGameObject(), Map::ToInstanceMap(), Object::ToPlayer(), Object::ToUnit(), TYPEID_GAMEOBJECT, TYPEID_UNIT, UNIT_FLAG_NON_ATTACKABLE, and UNIT_FLAG_NOT_SELECTABLE.

Member Data Documentation

◆ ConditionTarget

◆ ConditionType

◆ ConditionValue1

◆ ConditionValue2

◆ ConditionValue3

◆ ElseGroup

uint32 Condition::ElseGroup

◆ ErrorTextId

uint32 Condition::ErrorTextId

◆ ErrorType

uint32 Condition::ErrorType

◆ NegativeCondition

bool Condition::NegativeCondition

◆ ReferenceId

uint32 Condition::ReferenceId

◆ ScriptId

◆ SourceEntry

◆ SourceGroup

◆ SourceId

uint32 Condition::SourceId

◆ SourceType


The documentation for this struct was generated from the following files: