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 ( )
824{
825 // returns number of targets which are available for given source type
826 switch (SourceType)
827 {
829 return 3;
840 return 2;
841 default:
842 break;
843 }
844
845 return 1;
846}
@ 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 ( )
623{
624 // build mask of types for which condition can return true
625 // this is used for speeding up gridsearches
627 return (GRID_MAP_TYPE_MASK_ALL);
628 uint32 mask = 0;
629 switch (ConditionType)
630 {
631 case CONDITION_NONE:
633 break;
634 case CONDITION_AURA:
636 break;
637 case CONDITION_ITEM:
639 break;
642 break;
643 case CONDITION_ZONEID:
645 break;
648 break;
651 break;
652 case CONDITION_TEAM:
654 break;
655 case CONDITION_CLASS:
657 break;
658 case CONDITION_RACE:
660 break;
661 case CONDITION_SKILL:
663 break;
666 break;
669 break;
672 break;
675 break;
678 break;
681 break;
684 break;
685 case CONDITION_MAPID:
687 break;
688 case CONDITION_AREAID:
690 break;
691 case CONDITION_SPELL:
693 break;
694 case CONDITION_LEVEL:
696 break;
699 break;
702 break;
705 break;
707 switch (ConditionValue1)
708 {
709 case TYPEID_UNIT:
711 break;
712 case TYPEID_PLAYER:
714 break;
717 break;
718 case TYPEID_CORPSE:
720 break;
721 default:
722 break;
723 }
724 break;
734 break;
737 break;
740 break;
743 break;
744 case CONDITION_ALIVE:
746 break;
747 case CONDITION_HP_VAL:
749 break;
750 case CONDITION_HP_PCT:
752 break;
755 break;
758 break;
759 case CONDITION_TITLE:
761 break;
764 break;
765 case CONDITION_GENDER:
767 break;
770 break;
773 break;
776 break;
779 break;
782 break;
785 break;
788 break;
791 break;
794 break;
797 break;
800 break;
801 case CONDITION_TAXI:
803 break;
806 break;
809 break;
812 break;
815 break;
816 default:
817 ASSERT(false && "Condition::GetSearcherTypeMaskForCondition - missing condition handling!");
818 break;
819 }
820 return mask;
821}
@ 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)
39{
40 // ASSERT(ConditionTarget < MAX_CONDITION_TARGETS);
42 {
43 LOG_ERROR("condition", "ConditionTarget {} for for condition (Entry: {} Type: {} Group: {}) is greater or equal than MAX_CONDITION_TARGETS", ConditionTarget, SourceEntry, SourceType, SourceGroup);
44 return false;
45 }
46
47 WorldObject* object = sourceInfo.mConditionTargets[ConditionTarget];
48 // object not present, return false
49 if (!object)
50 {
51 LOG_DEBUG("condition", "Condition object not found for condition (Entry: {} Type: {} Group: {})", SourceEntry, SourceType, SourceGroup);
52 return false;
53 }
54 bool condMeets = false;
55 switch (ConditionType)
56 {
57 case CONDITION_NONE:
58 condMeets = true; // empty condition, always met
59 break;
60 case CONDITION_AURA:
61 {
62 if (Unit* unit = object->ToUnit())
63 condMeets = unit->HasAuraEffect(ConditionValue1, ConditionValue2);
64 break;
65 }
66 case CONDITION_ITEM:
67 {
68 if (Unit* unit = object->ToUnit())
69 {
71 {
72 // don't allow 0 items (it's checked during table load)
74 bool checkBank = ConditionValue3;
75 condMeets = player->HasItemCount(ConditionValue1, ConditionValue2, checkBank);
76 }
77 }
78 break;
79 }
81 {
82 if (Unit* unit = object->ToUnit())
83 {
85 {
86 condMeets = player->HasItemOrGemWithIdEquipped(ConditionValue1, 1);
87 }
88 }
89 break;
90 }
92 condMeets = object->GetZoneId() == ConditionValue1;
93 break;
95 {
96 if (Unit* unit = object->ToUnit())
97 {
99 {
100 if (FactionEntry const* faction = sFactionStore.LookupEntry(ConditionValue1))
101 {
102 condMeets = (ConditionValue2 & (1 << player->GetReputationMgr().GetRank(faction)));
103 }
104 }
105 }
106 break;
107 }
109 {
110 if (Unit* unit = object->ToUnit())
111 {
112 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
113 {
114 condMeets = player->HasAchieved(ConditionValue1);
115 }
116 }
117 break;
118 }
119 case CONDITION_TEAM:
120 {
121 if (Unit* unit = object->ToUnit())
122 {
123 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
124 {
125 // Xinef: DB Data compatibility...
126 uint32 teamOld = player->GetTeamId() == TEAM_ALLIANCE ? ALLIANCE : HORDE;
127 condMeets = teamOld == ConditionValue1;
128 }
129 }
130 break;
131 }
132 case CONDITION_CLASS:
133 {
134 if (Unit* unit = object->ToUnit())
135 condMeets = unit->getClassMask() & ConditionValue1;
136 break;
137 }
138 case CONDITION_RACE:
139 {
140 if (Unit* unit = object->ToUnit())
141 condMeets = unit->getRaceMask() & ConditionValue1;
142 break;
143 }
144 case CONDITION_GENDER:
145 {
146 if (Unit* unit = object->ToUnit())
147 {
148 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
149 {
150 condMeets = player->getGender() == ConditionValue1;
151 }
152 }
153 break;
154 }
155 case CONDITION_SKILL:
156 {
157 if (Unit* unit = object->ToUnit())
158 {
159 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
160 {
161 condMeets = player->HasSkill(ConditionValue1) && player->GetBaseSkillValue(ConditionValue1) >= ConditionValue2;
162 }
163 }
164 break;
165 }
167 {
168 if (Unit* unit = object->ToUnit())
169 {
170 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
171 {
172 condMeets = player->GetQuestRewardStatus(ConditionValue1);
173 }
174 }
175 break;
176 }
178 {
179 if (Unit* unit = object->ToUnit())
180 {
181 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
182 {
183 QuestStatus status = player->GetQuestStatus(ConditionValue1);
184 condMeets = (status == QUEST_STATUS_INCOMPLETE);
185 }
186 }
187 break;
188 }
190 {
191 if (Unit* unit = object->ToUnit())
192 {
193 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
194 {
195 QuestStatus status = player->GetQuestStatus(ConditionValue1);
196 condMeets = (status == QUEST_STATUS_COMPLETE && !player->GetQuestRewardStatus(ConditionValue1));
197 }
198 }
199 break;
200 }
202 {
203 if (Unit* unit = object->ToUnit())
204 {
205 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
206 {
207 QuestStatus status = player->GetQuestStatus(ConditionValue1);
208 condMeets = (status == QUEST_STATUS_NONE);
209 }
210 }
211 break;
212 }
214 {
215 if (Unit* unit = object->ToUnit())
216 {
217 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
218 {
219 // Xinef: cannot be null, checked at loading
220 const Quest* quest = sObjectMgr->GetQuestTemplate(ConditionValue1);
221 condMeets = !player->IsQuestRewarded(ConditionValue1) && player->SatisfyQuestExclusiveGroup(quest, false);
222 }
223 }
224 break;
225 }
227 condMeets = sGameEventMgr->IsActiveEvent(ConditionValue1);
228 break;
230 {
231 Map* map = object->GetMap();
232 if (map->IsDungeon())
233 {
234 if (InstanceScript const* instance = map->ToInstanceMap()->GetInstanceScript())
235 {
236 switch (ConditionValue3)
237 {
239 condMeets = instance->GetData(ConditionValue1) == ConditionValue2;
240 break;
242 condMeets = instance->GetGuidData(ConditionValue1) == ObjectGuid(uint64(ConditionValue2));
243 break;
245 condMeets = instance->GetBossState(ConditionValue1) == EncounterState(ConditionValue2);
246 break;
248 condMeets = instance->GetData64(ConditionValue1) == ConditionValue2;
249 break;
250 }
251 }
252 }
253 break;
254 }
255 case CONDITION_MAPID:
256 condMeets = object->GetMapId() == ConditionValue1;
257 break;
258 case CONDITION_AREAID:
259 condMeets = object->GetAreaId() == ConditionValue1;
260 break;
261 case CONDITION_SPELL:
262 {
263 if (Unit* unit = object->ToUnit())
264 {
265 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
266 {
267 condMeets = player->HasSpell(ConditionValue1);
268 }
269 }
270 break;
271 }
272 case CONDITION_LEVEL:
273 {
274 if (Unit* unit = object->ToUnit())
275 condMeets = CompareValues(static_cast<ComparisionType>(ConditionValue2), static_cast<uint32>(unit->GetLevel()), ConditionValue1);
276 break;
277 }
279 {
280 if (Unit* unit = object->ToUnit())
281 {
282 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
283 {
284 condMeets = (uint32)Player::GetDrunkenstateByValue(player->GetDrunkValue()) >= ConditionValue1;
285 }
286 }
287 break;
288 }
290 {
291 condMeets = static_cast<bool>(GetClosestCreatureWithEntry(object, ConditionValue1, static_cast<float>(ConditionValue2), !ConditionValue3));
292 break;
293 }
295 {
296 if (!ConditionValue3)
297 {
298 condMeets = static_cast<bool>(GetClosestGameObjectWithEntry(object, ConditionValue1, static_cast<float>(ConditionValue2)));
299 break;
300 }
301 else
302 {
303 if (GameObject* go = GetClosestGameObjectWithEntry(object, ConditionValue1, static_cast<float>(ConditionValue2)))
304 {
305 if ((go->GetGoState() == GO_STATE_READY && ConditionValue3 == 1) || (go->GetGoState() != GO_STATE_READY && ConditionValue3 == 2))
306 condMeets = true;
307 else
308 condMeets = false;
309 }
310 break;
311 }
312 }
314 {
315 if (ConditionValue3 == 1 && object->ToUnit()) // pussywizard: if == 1, ignore not attackable/selectable targets
317 break;
318
319 if (uint32(object->GetTypeId()) == ConditionValue1)
320 {
321 condMeets = !ConditionValue2 || (object->GetEntry() == ConditionValue2);
322
323 if (ConditionValue3 > 1)
324 {
325 switch (object->GetTypeId())
326 {
327 case TYPEID_UNIT:
328 condMeets &= object->ToCreature()->GetSpawnId() == ConditionValue3;
329 break;
331 condMeets &= object->ToGameObject()->GetSpawnId() == ConditionValue3;
332 break;
333 default:
334 break;
335 }
336 }
337 }
338 break;
339 }
341 {
342 condMeets = object->isType(ConditionValue1);
343 break;
344 }
346 {
347 if (WorldObject* toObject = sourceInfo.mConditionTargets[ConditionValue1])
348 {
349 Unit* toUnit = toObject->ToUnit();
350 Unit* unit = object->ToUnit();
351 if (toUnit && unit)
352 {
353 switch (ConditionValue2)
354 {
355 case RELATION_SELF:
356 condMeets = unit == toUnit;
357 break;
359 condMeets = unit->IsInPartyWith(toUnit);
360 break;
362 condMeets = unit->IsInRaidWith(toUnit);
363 break;
365 condMeets = unit->GetOwnerGUID() == toUnit->GetGUID();
366 break;
368 condMeets = unit->IsOnVehicle(toUnit);
369 break;
371 condMeets = unit->GetCreatorGUID() == toUnit->GetGUID();
372 break;
373 }
374 }
375 }
376 break;
377 }
379 {
380 if (WorldObject* toObject = sourceInfo.mConditionTargets[ConditionValue1])
381 {
382 Unit* toUnit = toObject->ToUnit();
383 Unit* unit = object->ToUnit();
384 if (toUnit && unit)
385 condMeets = (1 << unit->GetReactionTo(toUnit)) & ConditionValue2;
386 }
387 break;
388 }
390 {
391 if (WorldObject* toObject = sourceInfo.mConditionTargets[ConditionValue1])
392 condMeets = CompareValues(static_cast<ComparisionType>(ConditionValue3), object->GetDistance(toObject), static_cast<float>(ConditionValue2));
393 break;
394 }
395 case CONDITION_ALIVE:
396 {
397 if (Unit* unit = object->ToUnit())
398 condMeets = unit->IsAlive();
399 break;
400 }
401 case CONDITION_HP_VAL:
402 {
403 if (Unit* unit = object->ToUnit())
404 condMeets = CompareValues(static_cast<ComparisionType>(ConditionValue2), unit->GetHealth(), static_cast<uint32>(ConditionValue1));
405 break;
406 }
407 case CONDITION_HP_PCT:
408 {
409 if (Unit* unit = object->ToUnit())
410 condMeets = CompareValues(static_cast<ComparisionType>(ConditionValue2), unit->GetHealthPct(), static_cast<float>(ConditionValue1));
411 break;
412 }
414 {
415 condMeets = ConditionValue2 == sWorldState->getWorldState(ConditionValue1);
416 break;
417 }
419 {
420 condMeets = object->GetPhaseMask() & ConditionValue1;
421 break;
422 }
423 case CONDITION_TITLE:
424 {
425 if (Unit* unit = object->ToUnit())
426 {
427 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
428 {
429 condMeets = player->HasTitle(ConditionValue1);
430 }
431 }
432 break;
433 }
435 {
436 condMeets = ((1 << object->GetMap()->GetSpawnMode()) & ConditionValue1);
437 break;
438 }
440 {
441 if (Unit* unit = object->ToUnit())
442 condMeets = unit->HasUnitState(ConditionValue1);
443 break;
444 }
446 {
447 if (Creature* creature = object->ToCreature())
448 condMeets = creature->GetCreatureTemplate()->type == ConditionValue1;
449 break;
450 }
452 {
453 AchievementEntry const* achievement = sAchievementStore.LookupEntry(ConditionValue1);
454 if (achievement && sAchievementMgr->IsRealmCompleted(achievement))
455 condMeets = true;
456 break;
457 }
459 {
460 if (Unit* unit = object->ToUnit())
461 condMeets = unit->IsInWater();
462 break;
463 }
465 {
466 if (Unit* unit = object->ToUnit())
467 {
468 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
469 {
470 uint32 queststateConditionValue1 = player->GetQuestStatus(ConditionValue1);
471 if (((ConditionValue2 & (1 << QUEST_STATUS_NONE)) && (queststateConditionValue1 == QUEST_STATUS_NONE)) ||
472 ((ConditionValue2 & (1 << QUEST_STATUS_COMPLETE)) && (queststateConditionValue1 == QUEST_STATUS_COMPLETE)) ||
473 ((ConditionValue2 & (1 << QUEST_STATUS_INCOMPLETE)) && (queststateConditionValue1 == QUEST_STATUS_INCOMPLETE)) ||
474 ((ConditionValue2 & (1 << QUEST_STATUS_FAILED)) && (queststateConditionValue1 == QUEST_STATUS_FAILED)) ||
475 ((ConditionValue2 & (1 << QUEST_STATUS_REWARDED)) && player->GetQuestRewardStatus(ConditionValue1)))
476 {
477 condMeets = true;
478 }
479 }
480 }
481 break;
482 }
484 {
485 if (Unit* unit = object->ToUnit())
486 {
487 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
488 {
489 condMeets = player->IsDailyQuestDone(ConditionValue1);
490 }
491 }
492 break;
493 }
495 {
496 if (Unit* unit = object->ToUnit())
497 {
498 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
499 {
500 Quest const* quest = ASSERT_NOTNULL(sObjectMgr->GetQuestTemplate(ConditionValue1));
501 uint16 log_slot = player->FindQuestSlot(quest->GetQuestId());
502 if (log_slot >= MAX_QUEST_LOG_SIZE)
503 {
504 break;
505 }
506
507 if (player->GetQuestSlotCounter(log_slot, ConditionValue2) == ConditionValue3)
508 {
509 condMeets = true;
510 }
511 }
512 }
513 break;
514 }
516 {
517 if (Unit* unit = object->ToUnit())
518 condMeets = unit->HasAuraType(AuraType(ConditionValue1));
519 break;
520 }
522 {
523 if (Unit* unit = object->ToUnit())
524 {
525 if (ConditionValue1 == 0)
526 {
527 condMeets = (unit->getStandState() == ConditionValue2);
528 }
529 else if (ConditionValue2 == 0)
530 {
531 condMeets = unit->IsStandState();
532 }
533 else if (ConditionValue2 == 1)
534 {
535 condMeets = unit->IsSitState();
536 }
537 }
538
539 break;
540 }
542 {
543 condMeets = object->GetMap()->GetDifficulty() == ConditionValue1;
544 break;
545 }
547 {
548 if (Unit* unit = object->ToUnit())
549 {
550 if (Player* player = unit->ToPlayer())
551 {
552 if (sLFGMgr->IsPlayerQueuedForRandomDungeon(player->GetGUID()))
553 {
554 if (!ConditionValue1)
555 condMeets = true;
556 else if (Map* map = player->GetMap())
557 condMeets = map->GetDifficulty() == Difficulty(ConditionValue2);
558 }
559 }
560 }
561 break;
562 }
564 {
565 if (Unit* unit = object->ToUnit())
566 {
567 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
568 {
569 if (Pet* pet = player->GetPet())
570 {
571 condMeets = (((1 << pet->getPetType()) & ConditionValue1) != 0);
572 }
573 }
574 }
575 break;
576 }
577 case CONDITION_TAXI:
578 {
579 if (Unit* unit = object->ToUnit())
580 {
581 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
582 {
583 condMeets = player->IsInFlight();
584 }
585 }
586 break;
587 }
589 {
590 if (Unit* unit = object->ToUnit())
591 condMeets = unit->IsCharmed();
592 break;
593 }
595 {
596 condMeets = sWorldState->IsConditionFulfilled(ConditionValue1, ConditionValue2);
597 break;
598 }
600 {
601 if (Creature* creature = object->ToCreature())
602 condMeets = creature->AI() && creature->AI()->GetData(ConditionValue1) == ConditionValue2;
603 else if (GameObject* go = object->ToGameObject())
604 condMeets = go->AI() && go->AI()->GetData(ConditionValue1) == ConditionValue2;
605 break;
606 }
607 default:
608 condMeets = false;
609 break;
610 }
611
613 condMeets = !condMeets;
614
615 if (!condMeets)
616 sourceInfo.mLastFailedCondition = this;
617
618 // bool script = sScriptMgr->OnConditionCheck(this, sourceInfo); // Returns true by default. // pussywizard: optimization
619 return condMeets; // && script;
620}
#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:709
EncounterState
Definition InstanceScript.h:57
#define sLFGMgr
Definition LFGMgr.h:658
#define LOG_ERROR(filterType__,...)
Definition Log.h:158
#define LOG_DEBUG(filterType__,...)
Definition Log.h:170
#define sObjectMgr
Definition ObjectMgr.h:1712
#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:933
GameObject * GetClosestGameObjectWithEntry(WorldObject *source, uint32 entry, float maxSearchRange, bool onlySpawned)
Definition ScriptedCreature.cpp:938
@ ALLIANCE
Definition SharedDefines.h:756
@ HORDE
Definition SharedDefines.h:755
@ TEAM_ALLIANCE
Definition SharedDefines.h:748
AuraType
Definition SpellAuraDefines.h:62
@ UNIT_FLAG_NON_ATTACKABLE
Definition UnitDefines.h:258
@ UNIT_FLAG_NOT_SELECTABLE
Definition UnitDefines.h:282
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:660
Definition InstanceScript.h:143
Definition Map.h:164
bool IsDungeon() const
Definition Map.h:295
InstanceMap * ToInstanceMap()
Definition Map.h:378
Difficulty GetDifficulty() const
Definition Map.h:290
Definition ObjectGuid.h:118
Player * ToPlayer()
Definition Object.h:202
TypeID GetTypeId() const
Definition Object.h:129
GameObject * ToGameObject()
Definition Object.h:214
Creature * ToCreature()
Definition Object.h:206
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:114
Unit * ToUnit()
Definition Object.h:210
Definition Pet.h:41
Definition Player.h:1084
static DrunkenState GetDrunkenstateByValue(uint8 value)
Definition Player.cpp:976
Definition QuestDef.h:210
uint32 GetQuestId() const
Definition QuestDef.h:228
Definition Unit.h:664
ReputationRank GetReactionTo(Unit const *target, bool checkOriginalFaction=false) const
Definition Unit.cpp:7064
bool IsCharmed() const
Definition Unit.h:1310
float GetHealthPct() const
Definition Unit.h:1110
ObjectGuid GetCreatorGUID() const
Definition Unit.h:715
Player * GetCharmerOrOwnerPlayerOrPlayerItself() const
Definition Unit.cpp:7698
bool HasUnitFlag(UnitFlags flags) const
Definition Unit.h:747
bool IsAlive() const
Definition Unit.h:1793
bool IsStandState() const
Definition Unit.cpp:13074
bool IsOnVehicle(Unit const *vehicle) const
Definition Unit.h:1927
virtual bool IsInWater() const
Definition Unit.cpp:4521
uint32 GetHealth() const
Definition Unit.h:1108
bool HasAuraType(AuraType auraType) const
Definition Unit.cpp:5989
uint8 getStandState() const
Definition Unit.h:1780
bool HasUnitState(const uint32 f) const
Definition Unit.h:736
bool IsInRaidWith(Unit const *unit) const
Definition Unit.cpp:15022
ObjectGuid GetOwnerGUID() const
Definition Unit.h:713
bool IsInPartyWith(Unit const *unit) const
Definition Unit.cpp:14999
bool IsSitState() const
Definition Unit.cpp:13065
Definition Object.h:475
float GetDistance(WorldObject const *obj) const
Definition Object.cpp:1295
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: