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

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 ( )
767{
768 // returns number of targets which are available for given source type
769 switch (SourceType)
770 {
772 return 3;
783 return 2;
784 default:
785 break;
786 }
787
788 return 1;
789}
@ CONDITION_SOURCE_TYPE_CREATURE_VISIBILITY
Definition: ConditionMgr.h:152
@ CONDITION_SOURCE_TYPE_VEHICLE_SPELL
Definition: ConditionMgr.h:143
@ CONDITION_SOURCE_TYPE_NPC_VENDOR
Definition: ConditionMgr.h:145
@ CONDITION_SOURCE_TYPE_GOSSIP_MENU_OPTION
Definition: ConditionMgr.h:137
@ CONDITION_SOURCE_TYPE_SPELL_CLICK_EVENT
Definition: ConditionMgr.h:140
@ CONDITION_SOURCE_TYPE_SMART_EVENT
Definition: ConditionMgr.h:144
@ CONDITION_SOURCE_TYPE_SPELL
Definition: ConditionMgr.h:139
@ CONDITION_SOURCE_TYPE_GOSSIP_MENU
Definition: ConditionMgr.h:136
@ CONDITION_SOURCE_TYPE_CREATURE_TEMPLATE_VEHICLE
Definition: ConditionMgr.h:138
@ CONDITION_SOURCE_TYPE_SPELL_IMPLICIT_TARGET
Definition: ConditionMgr.h:135
@ CONDITION_SOURCE_TYPE_SPELL_PROC
Definition: ConditionMgr.h:146

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 ( )
575{
576 // build mask of types for which condition can return true
577 // this is used for speeding up gridsearches
579 return (GRID_MAP_TYPE_MASK_ALL);
580 uint32 mask = 0;
581 switch (ConditionType)
582 {
583 case CONDITION_NONE:
585 break;
586 case CONDITION_AURA:
588 break;
589 case CONDITION_ITEM:
591 break;
594 break;
595 case CONDITION_ZONEID:
597 break;
600 break;
603 break;
604 case CONDITION_TEAM:
606 break;
607 case CONDITION_CLASS:
609 break;
610 case CONDITION_RACE:
612 break;
613 case CONDITION_SKILL:
615 break;
618 break;
621 break;
624 break;
627 break;
630 break;
633 break;
636 break;
637 case CONDITION_MAPID:
639 break;
640 case CONDITION_AREAID:
642 break;
643 case CONDITION_SPELL:
645 break;
646 case CONDITION_LEVEL:
648 break;
651 break;
654 break;
657 break;
659 switch (ConditionValue1)
660 {
661 case TYPEID_UNIT:
663 break;
664 case TYPEID_PLAYER:
666 break;
669 break;
670 case TYPEID_CORPSE:
672 break;
673 default:
674 break;
675 }
676 break;
686 break;
689 break;
692 break;
695 break;
696 case CONDITION_ALIVE:
698 break;
699 case CONDITION_HP_VAL:
701 break;
702 case CONDITION_HP_PCT:
704 break;
707 break;
710 break;
711 case CONDITION_TITLE:
713 break;
716 break;
717 case CONDITION_GENDER:
719 break;
722 break;
725 break;
728 break;
731 break;
734 break;
737 break;
740 break;
743 break;
746 break;
749 break;
752 break;
753 case CONDITION_TAXI:
755 break;
758 break;
759 default:
760 ASSERT(false && "Condition::GetSearcherTypeMaskForCondition - missing condition handling!");
761 break;
762 }
763 return mask;
764}
#define ASSERT
Definition: Errors.h:68
std::uint32_t uint32
Definition: Define.h:108
@ CONDITION_TAXI
Definition: ConditionMgr.h:81
@ CONDITION_MAPID
Definition: ConditionMgr.h:57
@ CONDITION_SKILL
Definition: ConditionMgr.h:42
@ CONDITION_RACE
Definition: ConditionMgr.h:51
@ CONDITION_REACTION_TO
Definition: ConditionMgr.h:69
@ CONDITION_NEAR_GAMEOBJECT
Definition: ConditionMgr.h:65
@ CONDITION_QUESTREWARDED
Definition: ConditionMgr.h:43
@ CONDITION_REALM_ACHIEVEMENT
Definition: ConditionMgr.h:74
@ CONDITION_PHASEMASK
Definition: ConditionMgr.h:61
@ CONDITION_QUEST_OBJECTIVE_PROGRESS
Definition: ConditionMgr.h:83
@ CONDITION_DAILY_QUEST_DONE
Definition: ConditionMgr.h:78
@ CONDITION_ACTIVE_EVENT
Definition: ConditionMgr.h:47
@ CONDITION_INSTANCE_INFO
Definition: ConditionMgr.h:48
@ CONDITION_RELATION_TO
Definition: ConditionMgr.h:68
@ CONDITION_STAND_STATE
Definition: ConditionMgr.h:77
@ CONDITION_DRUNKENSTATE
Definition: ConditionMgr.h:45
@ CONDITION_AURA
Definition: ConditionMgr.h:36
@ CONDITION_ACHIEVEMENT
Definition: ConditionMgr.h:52
@ CONDITION_OBJECT_ENTRY_GUID
Definition: ConditionMgr.h:66
@ CONDITION_PET_TYPE
Definition: ConditionMgr.h:80
@ CONDITION_DIFFICULTY_ID
Definition: ConditionMgr.h:84
@ CONDITION_DISTANCE_TO
Definition: ConditionMgr.h:70
@ CONDITION_HP_VAL
Definition: ConditionMgr.h:72
@ CONDITION_GENDER
Definition: ConditionMgr.h:55
@ CONDITION_REPUTATION_RANK
Definition: ConditionMgr.h:40
@ CONDITION_HP_PCT
Definition: ConditionMgr.h:73
@ CONDITION_QUEST_COMPLETE
Definition: ConditionMgr.h:63
@ CONDITION_SPELL
Definition: ConditionMgr.h:60
@ CONDITION_ZONEID
Definition: ConditionMgr.h:39
@ CONDITION_CHARMED
Definition: ConditionMgr.h:79
@ CONDITION_TYPE_MASK
Definition: ConditionMgr.h:67
@ CONDITION_AREAID
Definition: ConditionMgr.h:58
@ CONDITION_IN_WATER
Definition: ConditionMgr.h:75
@ CONDITION_ITEM
Definition: ConditionMgr.h:37
@ CONDITION_WORLD_STATE
Definition: ConditionMgr.h:46
@ CONDITION_SPAWNMASK
Definition: ConditionMgr.h:54
@ CONDITION_CLASS
Definition: ConditionMgr.h:50
@ CONDITION_TEAM
Definition: ConditionMgr.h:41
@ CONDITION_QUEST_NONE
Definition: ConditionMgr.h:49
@ CONDITION_QUESTSTATE
Definition: ConditionMgr.h:82
@ CONDITION_ITEM_EQUIPPED
Definition: ConditionMgr.h:38
@ CONDITION_QUEST_SATISFY_EXCLUSIVE
Definition: ConditionMgr.h:88
@ CONDITION_LEVEL
Definition: ConditionMgr.h:62
@ CONDITION_QUESTTAKEN
Definition: ConditionMgr.h:44
@ CONDITION_NEAR_CREATURE
Definition: ConditionMgr.h:64
@ CONDITION_TITLE
Definition: ConditionMgr.h:53
@ CONDITION_ALIVE
Definition: ConditionMgr.h:71
@ CONDITION_CREATURE_TYPE
Definition: ConditionMgr.h:59
@ CONDITION_UNIT_STATE
Definition: ConditionMgr.h:56
@ CONDITION_HAS_AURA_TYPE
Definition: ConditionMgr.h:89
@ TYPEID_GAMEOBJECT
Definition: ObjectGuid.h:39
@ TYPEID_UNIT
Definition: ObjectGuid.h:37
@ TYPEID_CORPSE
Definition: ObjectGuid.h:41
@ TYPEID_PLAYER
Definition: ObjectGuid.h:38
@ TYPEMASK_UNIT
Definition: ObjectGuid.h:51
@ TYPEMASK_CORPSE
Definition: ObjectGuid.h:55
@ TYPEMASK_GAMEOBJECT
Definition: ObjectGuid.h:53
@ TYPEMASK_PLAYER
Definition: ObjectGuid.h:52
@ GRID_MAP_TYPE_MASK_PLAYER
Definition: GridDefines.h:73
@ GRID_MAP_TYPE_MASK_CREATURE
Definition: GridDefines.h:70
@ GRID_MAP_TYPE_MASK_ALL
Definition: GridDefines.h:74
@ GRID_MAP_TYPE_MASK_GAMEOBJECT
Definition: GridDefines.h:72
@ GRID_MAP_TYPE_MASK_CORPSE
Definition: GridDefines.h:69

References ASSERT, CONDITION_ACHIEVEMENT, CONDITION_ACTIVE_EVENT, 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_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)
35{
36 // ASSERT(ConditionTarget < MAX_CONDITION_TARGETS);
38 {
39 LOG_ERROR("condition", "ConditionTarget {} for for condition (Entry: {} Type: {} Group: {}) is greater or equal than MAX_CONDITION_TARGETS", ConditionTarget, SourceEntry, SourceType, SourceGroup);
40 return false;
41 }
42
43 WorldObject* object = sourceInfo.mConditionTargets[ConditionTarget];
44 // object not present, return false
45 if (!object)
46 {
47 LOG_DEBUG("condition", "Condition object not found for condition (Entry: {} Type: {} Group: {})", SourceEntry, SourceType, SourceGroup);
48 return false;
49 }
50 bool condMeets = false;
51 switch (ConditionType)
52 {
53 case CONDITION_NONE:
54 condMeets = true; // empty condition, always met
55 break;
56 case CONDITION_AURA:
57 {
58 if (Unit* unit = object->ToUnit())
59 condMeets = unit->HasAuraEffect(ConditionValue1, ConditionValue2);
60 break;
61 }
62 case CONDITION_ITEM:
63 {
64 if (Unit* unit = object->ToUnit())
65 {
67 {
68 // don't allow 0 items (it's checked during table load)
70 bool checkBank = !!ConditionValue3;
71 condMeets = player->HasItemCount(ConditionValue1, ConditionValue2, checkBank);
72 }
73 }
74 break;
75 }
77 {
78 if (Unit* unit = object->ToUnit())
79 {
81 {
82 condMeets = player->HasItemOrGemWithIdEquipped(ConditionValue1, 1);
83 }
84 }
85 break;
86 }
88 condMeets = object->GetZoneId() == ConditionValue1;
89 break;
91 {
92 if (Unit* unit = object->ToUnit())
93 {
95 {
96 if (FactionEntry const* faction = sFactionStore.LookupEntry(ConditionValue1))
97 {
98 condMeets = (ConditionValue2 & (1 << player->GetReputationMgr().GetRank(faction)));
99 }
100 }
101 }
102 break;
103 }
105 {
106 if (Unit* unit = object->ToUnit())
107 {
108 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
109 {
110 condMeets = player->HasAchieved(ConditionValue1);
111 }
112 }
113 break;
114 }
115 case CONDITION_TEAM:
116 {
117 if (Unit* unit = object->ToUnit())
118 {
119 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
120 {
121 // Xinef: DB Data compatibility...
122 uint32 teamOld = player->GetTeamId() == TEAM_ALLIANCE ? ALLIANCE : HORDE;
123 condMeets = teamOld == ConditionValue1;
124 }
125 }
126 break;
127 }
128 case CONDITION_CLASS:
129 {
130 if (Unit* unit = object->ToUnit())
131 condMeets = unit->getClassMask() & ConditionValue1;
132 break;
133 }
134 case CONDITION_RACE:
135 {
136 if (Unit* unit = object->ToUnit())
137 condMeets = unit->getRaceMask() & ConditionValue1;
138 break;
139 }
140 case CONDITION_GENDER:
141 {
142 if (Unit* unit = object->ToUnit())
143 {
144 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
145 {
146 condMeets = player->getGender() == ConditionValue1;
147 }
148 }
149 break;
150 }
151 case CONDITION_SKILL:
152 {
153 if (Unit* unit = object->ToUnit())
154 {
155 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
156 {
157 condMeets = player->HasSkill(ConditionValue1) && player->GetBaseSkillValue(ConditionValue1) >= ConditionValue2;
158 }
159 }
160 break;
161 }
163 {
164 if (Unit* unit = object->ToUnit())
165 {
166 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
167 {
168 condMeets = player->GetQuestRewardStatus(ConditionValue1);
169 }
170 }
171 break;
172 }
174 {
175 if (Unit* unit = object->ToUnit())
176 {
177 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
178 {
179 QuestStatus status = player->GetQuestStatus(ConditionValue1);
180 condMeets = (status == QUEST_STATUS_INCOMPLETE);
181 }
182 }
183 break;
184 }
186 {
187 if (Unit* unit = object->ToUnit())
188 {
189 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
190 {
191 QuestStatus status = player->GetQuestStatus(ConditionValue1);
192 condMeets = (status == QUEST_STATUS_COMPLETE && !player->GetQuestRewardStatus(ConditionValue1));
193 }
194 }
195 break;
196 }
198 {
199 if (Unit* unit = object->ToUnit())
200 {
201 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
202 {
203 QuestStatus status = player->GetQuestStatus(ConditionValue1);
204 condMeets = (status == QUEST_STATUS_NONE);
205 }
206 }
207 break;
208 }
210 {
211 if (Unit* unit = object->ToUnit())
212 {
213 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
214 {
215 // Xinef: cannot be null, checked at loading
216 const Quest* quest = sObjectMgr->GetQuestTemplate(ConditionValue1);
217 condMeets = !player->IsQuestRewarded(ConditionValue1) && player->SatisfyQuestExclusiveGroup(quest, false);
218 }
219 }
220 break;
221 }
223 condMeets = sGameEventMgr->IsActiveEvent(ConditionValue1);
224 break;
226 {
227 Map* map = object->GetMap();
228 if (map->IsDungeon())
229 {
230 if (InstanceScript const* instance = map->ToInstanceMap()->GetInstanceScript())
231 {
232 switch (ConditionValue3)
233 {
235 condMeets = instance->GetData(ConditionValue1) == ConditionValue2;
236 break;
238 condMeets = instance->GetGuidData(ConditionValue1) == ObjectGuid(uint64(ConditionValue2));
239 break;
241 condMeets = instance->GetBossState(ConditionValue1) == EncounterState(ConditionValue2);
242 break;
244 condMeets = instance->GetData64(ConditionValue1) == ConditionValue2;
245 break;
246 }
247 }
248 }
249 break;
250 }
251 case CONDITION_MAPID:
252 condMeets = object->GetMapId() == ConditionValue1;
253 break;
254 case CONDITION_AREAID:
255 condMeets = object->GetAreaId() == ConditionValue1;
256 break;
257 case CONDITION_SPELL:
258 {
259 if (Unit* unit = object->ToUnit())
260 {
261 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
262 {
263 condMeets = player->HasSpell(ConditionValue1);
264 }
265 }
266 break;
267 }
268 case CONDITION_LEVEL:
269 {
270 if (Unit* unit = object->ToUnit())
271 condMeets = CompareValues(static_cast<ComparisionType>(ConditionValue2), static_cast<uint32>(unit->GetLevel()), ConditionValue1);
272 break;
273 }
275 {
276 if (Unit* unit = object->ToUnit())
277 {
278 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
279 {
280 condMeets = (uint32)Player::GetDrunkenstateByValue(player->GetDrunkValue()) >= ConditionValue1;
281 }
282 }
283 break;
284 }
286 {
287 condMeets = static_cast<bool>(GetClosestCreatureWithEntry(object, ConditionValue1, static_cast<float>(ConditionValue2), !ConditionValue3));
288 break;
289 }
291 {
292 condMeets = static_cast<bool>(GetClosestGameObjectWithEntry(object, ConditionValue1, static_cast<float>(ConditionValue2)));
293 break;
294 }
296 {
297 if (ConditionValue3 == 1 && object->ToUnit()) // pussywizard: if == 1, ignore not attackable/selectable targets
299 break;
300
301 if (uint32(object->GetTypeId()) == ConditionValue1)
302 {
303 condMeets = !ConditionValue2 || (object->GetEntry() == ConditionValue2);
304
305 if (ConditionValue3 > 1)
306 {
307 switch (object->GetTypeId())
308 {
309 case TYPEID_UNIT:
310 condMeets &= object->ToCreature()->GetSpawnId() == ConditionValue3;
311 break;
313 condMeets &= object->ToGameObject()->GetSpawnId() == ConditionValue3;
314 break;
315 default:
316 break;
317 }
318 }
319 }
320 break;
321 }
323 {
324 condMeets = object->isType(ConditionValue1);
325 break;
326 }
328 {
329 if (WorldObject* toObject = sourceInfo.mConditionTargets[ConditionValue1])
330 {
331 Unit* toUnit = toObject->ToUnit();
332 Unit* unit = object->ToUnit();
333 if (toUnit && unit)
334 {
335 switch (ConditionValue2)
336 {
337 case RELATION_SELF:
338 condMeets = unit == toUnit;
339 break;
341 condMeets = unit->IsInPartyWith(toUnit);
342 break;
344 condMeets = unit->IsInRaidWith(toUnit);
345 break;
347 condMeets = unit->GetOwnerGUID() == toUnit->GetGUID();
348 break;
350 condMeets = unit->IsOnVehicle(toUnit);
351 break;
353 condMeets = unit->GetCreatorGUID() == toUnit->GetGUID();
354 break;
355 }
356 }
357 }
358 break;
359 }
361 {
362 if (WorldObject* toObject = sourceInfo.mConditionTargets[ConditionValue1])
363 {
364 Unit* toUnit = toObject->ToUnit();
365 Unit* unit = object->ToUnit();
366 if (toUnit && unit)
367 condMeets = (1 << unit->GetReactionTo(toUnit)) & ConditionValue2;
368 }
369 break;
370 }
372 {
373 if (WorldObject* toObject = sourceInfo.mConditionTargets[ConditionValue1])
374 condMeets = CompareValues(static_cast<ComparisionType>(ConditionValue3), object->GetDistance(toObject), static_cast<float>(ConditionValue2));
375 break;
376 }
377 case CONDITION_ALIVE:
378 {
379 if (Unit* unit = object->ToUnit())
380 condMeets = unit->IsAlive();
381 break;
382 }
383 case CONDITION_HP_VAL:
384 {
385 if (Unit* unit = object->ToUnit())
386 condMeets = CompareValues(static_cast<ComparisionType>(ConditionValue2), unit->GetHealth(), static_cast<uint32>(ConditionValue1));
387 break;
388 }
389 case CONDITION_HP_PCT:
390 {
391 if (Unit* unit = object->ToUnit())
392 condMeets = CompareValues(static_cast<ComparisionType>(ConditionValue2), unit->GetHealthPct(), static_cast<float>(ConditionValue1));
393 break;
394 }
396 {
397 condMeets = ConditionValue2 == sWorld->getWorldState(ConditionValue1);
398 break;
399 }
401 {
402 condMeets = object->GetPhaseMask() & ConditionValue1;
403 break;
404 }
405 case CONDITION_TITLE:
406 {
407 if (Unit* unit = object->ToUnit())
408 {
409 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
410 {
411 condMeets = player->HasTitle(ConditionValue1);
412 }
413 }
414 break;
415 }
417 {
418 condMeets = ((1 << object->GetMap()->GetSpawnMode()) & ConditionValue1);
419 break;
420 }
422 {
423 if (Unit* unit = object->ToUnit())
424 condMeets = unit->HasUnitState(ConditionValue1);
425 break;
426 }
428 {
429 if (Creature* creature = object->ToCreature())
430 condMeets = creature->GetCreatureTemplate()->type == ConditionValue1;
431 break;
432 }
434 {
435 AchievementEntry const* achievement = sAchievementStore.LookupEntry(ConditionValue1);
436 if (achievement && sAchievementMgr->IsRealmCompleted(achievement))
437 condMeets = true;
438 break;
439 }
441 {
442 if (Unit* unit = object->ToUnit())
443 condMeets = unit->IsInWater();
444 break;
445 }
447 {
448 if (Unit* unit = object->ToUnit())
449 {
450 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
451 {
452 uint32 queststateConditionValue1 = player->GetQuestStatus(ConditionValue1);
453 if (((ConditionValue2 & (1 << QUEST_STATUS_NONE)) && (queststateConditionValue1 == QUEST_STATUS_NONE)) ||
454 ((ConditionValue2 & (1 << QUEST_STATUS_COMPLETE)) && (queststateConditionValue1 == QUEST_STATUS_COMPLETE)) ||
455 ((ConditionValue2 & (1 << QUEST_STATUS_INCOMPLETE)) && (queststateConditionValue1 == QUEST_STATUS_INCOMPLETE)) ||
456 ((ConditionValue2 & (1 << QUEST_STATUS_FAILED)) && (queststateConditionValue1 == QUEST_STATUS_FAILED)) ||
457 ((ConditionValue2 & (1 << QUEST_STATUS_REWARDED)) && player->GetQuestRewardStatus(ConditionValue1)))
458 {
459 condMeets = true;
460 }
461 }
462 }
463 break;
464 }
466 {
467 if (Unit* unit = object->ToUnit())
468 {
469 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
470 {
471 condMeets = player->IsDailyQuestDone(ConditionValue1);
472 }
473 }
474 break;
475 }
477 {
478 if (Unit* unit = object->ToUnit())
479 {
480 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
481 {
482 Quest const* quest = ASSERT_NOTNULL(sObjectMgr->GetQuestTemplate(ConditionValue1));
483 uint16 log_slot = player->FindQuestSlot(quest->GetQuestId());
484 if (log_slot >= MAX_QUEST_LOG_SIZE)
485 {
486 break;
487 }
488
489 if (player->GetQuestSlotCounter(log_slot, ConditionValue2) == ConditionValue3)
490 {
491 condMeets = true;
492 }
493 }
494 }
495 break;
496 }
498 {
499 if (Unit* unit = object->ToUnit())
500 condMeets = unit->HasAuraType(AuraType(ConditionValue1));
501 break;
502 }
504 {
505 if (Unit* unit = object->ToUnit())
506 {
507 if (ConditionValue1 == 0)
508 {
509 condMeets = (unit->getStandState() == ConditionValue2);
510 }
511 else if (ConditionValue2 == 0)
512 {
513 condMeets = unit->IsStandState();
514 }
515 else if (ConditionValue2 == 1)
516 {
517 condMeets = unit->IsSitState();
518 }
519 }
520
521 break;
522 }
524 {
525 condMeets = object->GetMap()->GetDifficulty() == ConditionValue1;
526 break;
527 }
529 {
530 if (Unit* unit = object->ToUnit())
531 {
532 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
533 {
534 if (Pet* pet = player->GetPet())
535 {
536 condMeets = (((1 << pet->getPetType()) & ConditionValue1) != 0);
537 }
538 }
539 }
540 break;
541 }
542 case CONDITION_TAXI:
543 {
544 if (Unit* unit = object->ToUnit())
545 {
546 if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself())
547 {
548 condMeets = player->IsInFlight();
549 }
550 }
551 break;
552 }
554 {
555 if (Unit* unit = object->ToUnit())
556 condMeets = unit->IsCharmed();
557 break;
558 }
559 default:
560 condMeets = false;
561 break;
562 }
563
565 condMeets = !condMeets;
566
567 if (!condMeets)
568 sourceInfo.mLastFailedCondition = this;
569
570 // bool script = sScriptMgr->OnConditionCheck(this, sourceInfo); // Returns true by default. // pussywizard: optimization
571 return condMeets; // && script;
572}
#define ASSERT_NOTNULL(pointer)
Definition: Errors.h:85
std::uint64_t uint64
Definition: Define.h:107
std::uint16_t uint16
Definition: Define.h:109
#define LOG_ERROR(filterType__,...)
Definition: Log.h:159
#define LOG_DEBUG(filterType__,...)
Definition: Log.h:171
bool CompareValues(ComparisionType type, T val1, T val2)
Definition: Util.h:592
ComparisionType
Definition: Util.h:582
#define sAchievementMgr
Definition: AchievementMgr.h:421
Creature * GetClosestCreatureWithEntry(WorldObject *source, uint32 entry, float maxSearchRange, bool alive)
Definition: ScriptedCreature.cpp:765
GameObject * GetClosestGameObjectWithEntry(WorldObject *source, uint32 entry, float maxSearchRange, bool onlySpawned)
Definition: ScriptedCreature.cpp:770
@ INSTANCE_INFO_DATA64
Definition: ConditionMgr.h:172
@ INSTANCE_INFO_DATA
Definition: ConditionMgr.h:169
@ INSTANCE_INFO_BOSS_STATE
Definition: ConditionMgr.h:171
@ INSTANCE_INFO_GUID_DATA
Definition: ConditionMgr.h:170
@ MAX_CONDITION_TARGETS
Definition: ConditionMgr.h:177
@ RELATION_IN_PARTY
Definition: ConditionMgr.h:159
@ RELATION_IN_RAID_OR_PARTY
Definition: ConditionMgr.h:160
@ RELATION_CREATED_BY
Definition: ConditionMgr.h:163
@ RELATION_SELF
Definition: ConditionMgr.h:158
@ RELATION_PASSENGER_OF
Definition: ConditionMgr.h:162
@ RELATION_OWNED_BY
Definition: ConditionMgr.h:161
DBCStorage< FactionEntry > sFactionStore(FactionEntryfmt)
DBCStorage< AchievementEntry > sAchievementStore(Achievementfmt)
@ UNIT_FLAG_NON_ATTACKABLE
Definition: Unit.h:449
@ UNIT_FLAG_NOT_SELECTABLE
Definition: Unit.h:473
#define sGameEventMgr
Definition: GameEventMgr.h:186
#define sObjectMgr
Definition: ObjectMgr.h:1640
EncounterState
Definition: InstanceScript.h:55
#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
AuraType
Definition: SpellAuraDefines.h:62
@ TEAM_ALLIANCE
Definition: SharedDefines.h:732
@ ALLIANCE
Definition: SharedDefines.h:740
@ HORDE
Definition: SharedDefines.h:739
#define sWorld
Definition: World.h:451
Condition * mLastFailedCondition
Definition: ConditionMgr.h:183
WorldObject * mConditionTargets[MAX_CONDITION_TARGETS]
Definition: ConditionMgr.h:182
Definition: Creature.h:46
TypeID GetTypeId() const
Definition: Object.h:121
Creature * ToCreature()
Definition: Object.h:197
static ObjectGuid GetGUID(Object const *o)
Definition: Object.h:106
Unit * ToUnit()
Definition: Object.h:200
Definition: Object.h:393
float GetDistance(WorldObject const *obj) const
Definition: Object.cpp:1245
Definition: ObjectGuid.h:120
Definition: Pet.h:40
Definition: Player.h:1046
static DrunkenState GetDrunkenstateByValue(uint8 value)
Definition: Player.cpp:960
Definition: Unit.h:1290
ReputationRank GetReactionTo(Unit const *target, bool checkOriginalFaction=false) const
Definition: Unit.cpp:10037
bool IsCharmed() const
Definition: Unit.h:1871
float GetHealthPct() const
Definition: Unit.h:1448
ObjectGuid GetCreatorGUID() const
Definition: Unit.h:1816
Player * GetCharmerOrOwnerPlayerOrPlayerItself() const
Definition: Unit.cpp:10576
bool HasUnitFlag(UnitFlags flags) const
Definition: Unit.h:1480
bool IsAlive() const
Definition: Unit.h:1808
bool IsStandState() const
Definition: Unit.cpp:16894
bool IsOnVehicle(Unit const *vehicle) const
Definition: Unit.h:2355
virtual bool IsInWater() const
Definition: Unit.cpp:4279
uint32 GetHealth() const
Definition: Unit.h:1440
bool HasAuraType(AuraType auraType) const
Definition: Unit.cpp:5617
uint8 getStandState() const
Definition: Unit.h:1534
bool HasUnitState(const uint32 f) const
Definition: Unit.h:1398
bool IsInRaidWith(Unit const *unit) const
Definition: Unit.cpp:18965
ObjectGuid GetOwnerGUID() const
Definition: Unit.h:1814
bool IsInPartyWith(Unit const *unit) const
Definition: Unit.cpp:18942
bool IsSitState() const
Definition: Unit.cpp:16885
Definition: InstanceScript.h:140
Definition: Map.h:312
bool IsDungeon() const
Definition: Map.h:447
InstanceMap * ToInstanceMap()
Definition: Map.h:544
InstanceScript * GetInstanceScript()
Definition: Map.h:825
Definition: QuestDef.h:207
uint32 GetQuestId() const
Definition: QuestDef.h:225
Definition: DBCStructure.h:40
Definition: DBCStructure.h:898

References ALLIANCE, ASSERT, ASSERT_NOTNULL, CompareValues(), CONDITION_ACHIEVEMENT, CONDITION_ACTIVE_EVENT, 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_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(), 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, sWorld, TEAM_ALLIANCE, Object::ToCreature(), 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