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
214 {
216 SourceGroup = 0;
217 SourceEntry = 0;
218 SourceId = 0;
219 ElseGroup = 0;
221 ConditionTarget = 0;
222 ConditionValue1 = 0;
223 ConditionValue2 = 0;
224 ConditionValue3 = 0;
225 ReferenceId = 0;
226 ErrorType = 0;
227 ErrorTextId = 0;
228 ScriptId = 0;
229 NegativeCondition = false;
230 }
@ CONDITION_SOURCE_TYPE_NONE
Definition ConditionMgr.h:124
@ CONDITION_NONE
Definition ConditionMgr.h:34
uint32 SourceGroup
Definition ConditionMgr.h:198
ConditionTypes ConditionType
Definition ConditionMgr.h:202
uint32 ErrorType
Definition ConditionMgr.h:206
uint32 SourceId
Definition ConditionMgr.h:200
int32 SourceEntry
Definition ConditionMgr.h:199
uint32 ElseGroup
Definition ConditionMgr.h:201
uint32 ScriptId
Definition ConditionMgr.h:209
bool NegativeCondition
Definition ConditionMgr.h:211
ConditionSourceType SourceType
Definition ConditionMgr.h:197
uint32 ConditionValue2
Definition ConditionMgr.h:204
uint8 ConditionTarget
Definition ConditionMgr.h:210
uint32 ReferenceId
Definition ConditionMgr.h:208
uint32 ErrorTextId
Definition ConditionMgr.h:207
uint32 ConditionValue3
Definition ConditionMgr.h:205
uint32 ConditionValue1
Definition ConditionMgr.h:203

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 ( )
803{
804 // returns number of targets which are available for given source type
805 switch (SourceType)
806 {
808 return 3;
819 return 2;
820 default:
821 break;
822 }
823
824 return 1;
825}
@ CONDITION_SOURCE_TYPE_CREATURE_VISIBILITY
Definition ConditionMgr.h:154
@ CONDITION_SOURCE_TYPE_VEHICLE_SPELL
Definition ConditionMgr.h:145
@ CONDITION_SOURCE_TYPE_NPC_VENDOR
Definition ConditionMgr.h:147
@ CONDITION_SOURCE_TYPE_GOSSIP_MENU_OPTION
Definition ConditionMgr.h:139
@ CONDITION_SOURCE_TYPE_SPELL_CLICK_EVENT
Definition ConditionMgr.h:142
@ CONDITION_SOURCE_TYPE_SMART_EVENT
Definition ConditionMgr.h:146
@ CONDITION_SOURCE_TYPE_SPELL
Definition ConditionMgr.h:141
@ CONDITION_SOURCE_TYPE_GOSSIP_MENU
Definition ConditionMgr.h:138
@ CONDITION_SOURCE_TYPE_CREATURE_TEMPLATE_VEHICLE
Definition ConditionMgr.h:140
@ CONDITION_SOURCE_TYPE_SPELL_IMPLICIT_TARGET
Definition ConditionMgr.h:137
@ CONDITION_SOURCE_TYPE_SPELL_PROC
Definition ConditionMgr.h:148

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 ( )
605{
606 // build mask of types for which condition can return true
607 // this is used for speeding up gridsearches
609 return (GRID_MAP_TYPE_MASK_ALL);
610 uint32 mask = 0;
611 switch (ConditionType)
612 {
613 case CONDITION_NONE:
615 break;
616 case CONDITION_AURA:
618 break;
619 case CONDITION_ITEM:
621 break;
624 break;
625 case CONDITION_ZONEID:
627 break;
630 break;
633 break;
634 case CONDITION_TEAM:
636 break;
637 case CONDITION_CLASS:
639 break;
640 case CONDITION_RACE:
642 break;
643 case CONDITION_SKILL:
645 break;
648 break;
651 break;
654 break;
657 break;
660 break;
663 break;
666 break;
667 case CONDITION_MAPID:
669 break;
670 case CONDITION_AREAID:
672 break;
673 case CONDITION_SPELL:
675 break;
676 case CONDITION_LEVEL:
678 break;
681 break;
684 break;
687 break;
689 switch (ConditionValue1)
690 {
691 case TYPEID_UNIT:
693 break;
694 case TYPEID_PLAYER:
696 break;
699 break;
700 case TYPEID_CORPSE:
702 break;
703 default:
704 break;
705 }
706 break;
716 break;
719 break;
722 break;
725 break;
726 case CONDITION_ALIVE:
728 break;
729 case CONDITION_HP_VAL:
731 break;
732 case CONDITION_HP_PCT:
734 break;
737 break;
740 break;
741 case CONDITION_TITLE:
743 break;
746 break;
747 case CONDITION_GENDER:
749 break;
752 break;
755 break;
758 break;
761 break;
764 break;
767 break;
770 break;
773 break;
776 break;
779 break;
782 break;
783 case CONDITION_TAXI:
785 break;
788 break;
791 break;
794 break;
795 default:
796 ASSERT(false && "Condition::GetSearcherTypeMaskForCondition - missing condition handling!");
797 break;
798 }
799 return mask;
800}
@ CONDITION_WORLD_SCRIPT
Definition ConditionMgr.h:89
@ CONDITION_TAXI
Definition ConditionMgr.h:80
@ 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_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->GetCharmerOrOwnerPlayerOrPlayerItself())
550 {
551 if (Pet* pet = player->GetPet())
552 {
553 condMeets = (((1 << pet->getPetType()) & ConditionValue1) != 0);
554 }
555 }
556 }
557 break;
558 }
559 case CONDITION_TAXI:
560 {
561 if (Unit* unit = object->ToUnit())
562 {
563 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
564 {
565 condMeets = player->IsInFlight();
566 }
567 }
568 break;
569 }
571 {
572 if (Unit* unit = object->ToUnit())
573 condMeets = unit->IsCharmed();
574 break;
575 }
577 {
578 condMeets = sWorldState->IsConditionFulfilled(ConditionValue1, ConditionValue2);
579 break;
580 }
582 {
583 if (Creature* creature = object->ToCreature())
584 condMeets = creature->AI() && creature->AI()->GetData(ConditionValue1) == ConditionValue2;
585 else if (GameObject* go = object->ToGameObject())
586 condMeets = go->AI() && go->AI()->GetData(ConditionValue1) == ConditionValue2;
587 break;
588 }
589 default:
590 condMeets = false;
591 break;
592 }
593
595 condMeets = !condMeets;
596
597 if (!condMeets)
598 sourceInfo.mLastFailedCondition = this;
599
600 // bool script = sScriptMgr->OnConditionCheck(this, sourceInfo); // Returns true by default. // pussywizard: optimization
601 return condMeets; // && script;
602}
#define sAchievementMgr
Definition AchievementMgr.h:451
@ INSTANCE_INFO_DATA64
Definition ConditionMgr.h:174
@ INSTANCE_INFO_DATA
Definition ConditionMgr.h:171
@ INSTANCE_INFO_BOSS_STATE
Definition ConditionMgr.h:173
@ INSTANCE_INFO_GUID_DATA
Definition ConditionMgr.h:172
@ MAX_CONDITION_TARGETS
Definition ConditionMgr.h:179
@ RELATION_IN_PARTY
Definition ConditionMgr.h:161
@ RELATION_IN_RAID_OR_PARTY
Definition ConditionMgr.h:162
@ RELATION_CREATED_BY
Definition ConditionMgr.h:165
@ RELATION_SELF
Definition ConditionMgr.h:160
@ RELATION_PASSENGER_OF
Definition ConditionMgr.h:164
@ RELATION_OWNED_BY
Definition ConditionMgr.h:163
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:692
EncounterState
Definition InstanceScript.h:57
#define LOG_ERROR(filterType__,...)
Definition Log.h:158
#define LOG_DEBUG(filterType__,...)
Definition Log.h:170
#define sObjectMgr
Definition ObjectMgr.h:1650
#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:895
GameObject * GetClosestGameObjectWithEntry(WorldObject *source, uint32 entry, float maxSearchRange, bool onlySpawned)
Definition ScriptedCreature.cpp:900
@ 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:253
@ UNIT_FLAG_NOT_SELECTABLE
Definition UnitDefines.h:277
bool CompareValues(ComparisionType type, T val1, T val2)
Definition Util.h:597
ComparisionType
Definition Util.h:587
#define sWorldState
Definition WorldState.h:377
Definition Creature.h:43
Definition GameObject.h:120
InstanceScript * GetInstanceScript()
Definition Map.h:639
Definition InstanceScript.h:143
Definition Map.h:160
bool IsDungeon() const
Definition Map.h:292
InstanceMap * ToInstanceMap()
Definition Map.h:374
Definition ObjectGuid.h:118
TypeID GetTypeId() const
Definition Object.h:128
GameObject * ToGameObject()
Definition Object.h:214
Creature * ToCreature()
Definition Object.h:206
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:113
Unit * ToUnit()
Definition Object.h:210
Definition Pet.h:41
Definition Player.h:1072
static DrunkenState GetDrunkenstateByValue(uint8 value)
Definition Player.cpp:970
Definition QuestDef.h:210
uint32 GetQuestId() const
Definition QuestDef.h:228
Definition Unit.h:620
ReputationRank GetReactionTo(Unit const *target, bool checkOriginalFaction=false) const
Definition Unit.cpp:10134
bool IsCharmed() const
Definition Unit.h:1239
float GetHealthPct() const
Definition Unit.h:1035
ObjectGuid GetCreatorGUID() const
Definition Unit.h:670
Player * GetCharmerOrOwnerPlayerOrPlayerItself() const
Definition Unit.cpp:10711
bool HasUnitFlag(UnitFlags flags) const
Definition Unit.h:702
bool IsAlive() const
Definition Unit.h:1710
bool IsStandState() const
Definition Unit.cpp:16803
bool IsOnVehicle(Unit const *vehicle) const
Definition Unit.h:1843
virtual bool IsInWater() const
Definition Unit.cpp:4404
uint32 GetHealth() const
Definition Unit.h:1033
bool HasAuraType(AuraType auraType) const
Definition Unit.cpp:5793
uint8 getStandState() const
Definition Unit.h:1698
bool HasUnitState(const uint32 f) const
Definition Unit.h:691
bool IsInRaidWith(Unit const *unit) const
Definition Unit.cpp:18894
ObjectGuid GetOwnerGUID() const
Definition Unit.h:668
bool IsInPartyWith(Unit const *unit) const
Definition Unit.cpp:18871
bool IsSitState() const
Definition Unit.cpp:16794
Definition Object.h:472
float GetDistance(WorldObject const *obj) const
Definition Object.cpp:1250
Definition DBCStructure.h:40
Condition * mLastFailedCondition
Definition ConditionMgr.h:185
WorldObject * mConditionTargets[MAX_CONDITION_TARGETS]
Definition ConditionMgr.h:184
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_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, sObjectMgr, SourceEntry, SourceGroup, SourceType, sWorldState, TEAM_ALLIANCE, Object::ToCreature(), Object::ToGameObject(), Map::ToInstanceMap(), 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: