TrinityCore
Loading...
Searching...
No Matches
ViewerDependentValues.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef ViewerDependentValues_h__
19#define ViewerDependentValues_h__
20
21#include "Conversation.h"
22#include "Creature.h"
23#include "DB2Stores.h"
24#include "GameObject.h"
25#include "Map.h"
26#include "ObjectMgr.h"
27#include "Player.h"
28#include "SpellInfo.h"
29#include "SpellMgr.h"
30#include "TemporarySummon.h"
31#include "World.h"
32#include "WorldSession.h"
33
34namespace UF
35{
36template<typename Tag>
38{
39};
40
41template<>
43{
44public:
46
47 static value_type GetValue(UF::ObjectData const* objectData, Player const* receiver, Object const* object)
48 {
49 value_type entryId = objectData->EntryID;
50
51 if (Unit const* unit = object->ToUnit())
52 if (TempSummon const* summon = unit->ToTempSummon())
53 if (summon->GetSummonerGUID() == receiver->GetGUID() && summon->GetCreatureIdVisibleToSummoner())
54 entryId = *summon->GetCreatureIdVisibleToSummoner();
55
56 return entryId;
57 }
58};
59
60template<>
62{
63public:
65
66 static value_type GetValue(UF::ObjectData const* objectData, Player const* receiver, Object const* object)
67 {
68 value_type dynamicFlags = objectData->DynamicFlags;
69 if (Unit const* unit = object->ToUnit())
70 {
71 if (Creature const* creature = object->ToCreature())
72 {
73 if (dynamicFlags & UNIT_DYNFLAG_TAPPED && creature->isTappedBy(receiver))
74 dynamicFlags &= ~UNIT_DYNFLAG_TAPPED;
75
76 if (dynamicFlags & UNIT_DYNFLAG_LOOTABLE && !receiver->isAllowedToLoot(creature))
77 dynamicFlags &= ~UNIT_DYNFLAG_LOOTABLE;
78
79 if (dynamicFlags & UNIT_DYNFLAG_CAN_SKIN && creature->IsSkinnedBy(receiver))
80 dynamicFlags &= ~UNIT_DYNFLAG_CAN_SKIN;
81 }
82
83 // unit UNIT_DYNFLAG_TRACK_UNIT should only be sent to caster of SPELL_AURA_MOD_STALKED auras
84 if (dynamicFlags & UNIT_DYNFLAG_TRACK_UNIT)
85 if (!unit->HasAuraTypeWithCaster(SPELL_AURA_MOD_STALKED, receiver->GetGUID()))
86 dynamicFlags &= ~UNIT_DYNFLAG_TRACK_UNIT;
87 }
88 else if (GameObject const* gameObject = object->ToGameObject())
89 {
91 switch (gameObject->GetGoType())
92 {
95 if (gameObject->HasConditionalInteraction() && gameObject->CanActivateForPlayer(receiver))
96 if (gameObject->GetGoStateFor(receiver->GetGUID()) != GO_STATE_ACTIVE)
98 break;
100 if (gameObject->CanActivateForPlayer(receiver))
101 dynFlags |= GO_DYNFLAG_LO_ACTIVATE;
102 break;
104 if (gameObject->HasConditionalInteraction() && gameObject->CanActivateForPlayer(receiver))
106 else if (receiver->IsGameMaster())
108 break;
111 if (gameObject->HasConditionalInteraction() && gameObject->CanActivateForPlayer(receiver))
112 dynFlags |= GO_DYNFLAG_LO_SPARKLE;
113 break;
116 dynFlags |= dynamicFlags; // preserve all dynamicflgs
117 break;
119 if (!gameObject->CanInteractWithCapturePoint(receiver))
120 dynFlags |= GO_DYNFLAG_LO_NO_INTERACT;
121 else
122 dynFlags &= ~GO_DYNFLAG_LO_NO_INTERACT;
123 break;
125 if (gameObject->HasConditionalInteraction() && gameObject->CanActivateForPlayer(receiver))
127 if (gameObject->GetGoStateFor(receiver->GetGUID()) == GO_STATE_ACTIVE)
128 dynFlags |= GO_DYNFLAG_LO_DEPLETED;
129 break;
130 default:
131 break;
132 }
133
134 if (!receiver->IsGameMaster())
135 {
136 // GO_DYNFLAG_LO_INTERACT_COND should be applied to GOs with conditional interaction (without GO_FLAG_INTERACT_COND) to disable interaction
137 // (Ignore GAMEOBJECT_TYPE_GATHERING_NODE as some profession-related GOs may include quest loot and can always be interacted with)
138 // (Ignore GAMEOBJECT_TYPE_FLAGSTAND as interaction is handled by GO_DYNFLAG_LO_NO_INTERACT)
139 // (Ignore GAMEOBJECT_TYPE_SPELLCASTER as interaction is handled by GO_DYNFLAG_LO_NO_INTERACT)
140 if (gameObject->GetGoType() != GAMEOBJECT_TYPE_GATHERING_NODE && gameObject->GetGoType() != GAMEOBJECT_TYPE_FLAGSTAND && gameObject->GetGoType() != GAMEOBJECT_TYPE_SPELLCASTER)
141 if (gameObject->HasConditionalInteraction() && !gameObject->HasFlag(GO_FLAG_INTERACT_COND))
142 dynFlags |= GO_DYNFLAG_LO_INTERACT_COND;
143
144 if (!gameObject->MeetsInteractCondition(receiver))
145 dynFlags |= GO_DYNFLAG_LO_NO_INTERACT;
146
147 if (SpawnMetadata const* data = sObjectMgr->GetSpawnMetadata(SPAWN_TYPE_GAMEOBJECT, gameObject->GetSpawnId()))
148 if (data->spawnTrackingData && !data->spawnTrackingQuestObjectives.empty())
149 if (receiver->GetSpawnTrackingStateByObjectives(data->spawnTrackingData->SpawnTrackingId, data->spawnTrackingQuestObjectives) != SpawnTrackingState::Active)
150 dynFlags &= ~GO_DYNFLAG_LO_ACTIVATE;
151 }
152
153 dynamicFlags = dynFlags;
154 }
155
156 return dynamicFlags;
157 }
158};
159
160template<>
162{
163public:
165
166 static value_type GetValue(UF::UnitData const* unitData, Player const* receiver, Unit const* unit)
167 {
168 value_type displayId = unitData->DisplayID;
169 if (unit->IsCreature())
170 {
171 CreatureTemplate const* cinfo = unit->ToCreature()->GetCreatureTemplate();
172
173 if (TempSummon const* summon = unit->ToTempSummon())
174 {
175 if (summon->GetSummonerGUID() == receiver->GetGUID())
176 {
177 if (summon->GetCreatureIdVisibleToSummoner())
178 cinfo = sObjectMgr->GetCreatureTemplate(*summon->GetCreatureIdVisibleToSummoner());
179
180 if (summon->GetDisplayIdVisibleToSummoner())
181 displayId = *summon->GetDisplayIdVisibleToSummoner();
182 }
183 }
184
185 // this also applies for transform auras
186 if (SpellInfo const* transform = sSpellMgr->GetSpellInfo(unit->GetTransformSpell(), unit->GetMap()->GetDifficultyID()))
187 {
188 for (SpellEffectInfo const& spellEffectInfo : transform->GetEffects())
189 {
190 if (spellEffectInfo.IsAura(SPELL_AURA_TRANSFORM))
191 {
192 if (CreatureTemplate const* transformInfo = sObjectMgr->GetCreatureTemplate(spellEffectInfo.MiscValue))
193 {
194 cinfo = transformInfo;
195 break;
196 }
197 }
198 }
199 }
200
202 if (receiver->IsGameMaster())
203 displayId = cinfo->GetFirstVisibleModel()->CreatureDisplayID;
204 }
205
206 return displayId;
207 }
208};
209
210template<>
212{
213public:
215
216 static value_type GetValue(UF::UnitData const* unitData, Player const* receiver, Unit const* unit)
217 {
218 if (unit->IsCreature())
219 if (SpawnTrackingStateData const* spawnTrackingStateData = unit->GetSpawnTrackingStateDataForPlayer(receiver))
220 return &spawnTrackingStateData->StateWorldEffects;
221
222 return &*unitData->StateWorldEffectIDs;
223 }
224};
225
226template<>
228{
229public:
231
232 static value_type GetValue(UF::UnitData const* unitData, Player const* receiver, Unit const* unit)
233 {
234 value_type stateSpellVisual = unitData->StateSpellVisualID;
235
236 if (unit->IsCreature())
237 if (SpawnTrackingStateData const* spawnTrackingStateData = unit->GetSpawnTrackingStateDataForPlayer(receiver))
238 stateSpellVisual = spawnTrackingStateData->StateSpellVisualId.value_or(0);
239
240 return stateSpellVisual;
241 }
242};
243
244template<>
246{
247public:
249
250 static value_type GetValue(UF::UnitData const* /*unitData*/, Player const* receiver, Unit const* unit)
251 {
252 value_type stateAnimId = sDB2Manager.GetEmptyAnimStateID();
253
254 if (unit->IsCreature())
255 if (SpawnTrackingStateData const* spawnTrackingStateData = unit->GetSpawnTrackingStateDataForPlayer(receiver))
256 stateAnimId = spawnTrackingStateData->StateAnimId.value_or(stateAnimId);
257
258 return stateAnimId;
259 }
260};
261
262template<>
264{
265public:
267
268 static value_type GetValue(UF::UnitData const* unitData, Player const* receiver, Unit const* unit)
269 {
270 value_type stateAnimKitId = unitData->StateAnimKitID;
271
272 if (unit->IsCreature())
273 if (SpawnTrackingStateData const* spawnTrackingStateData = unit->GetSpawnTrackingStateDataForPlayer(receiver))
274 stateAnimKitId = spawnTrackingStateData->StateAnimKitId.value_or(0);
275
276 return stateAnimKitId;
277 }
278};
279
280template<>
282{
283public:
285
286 static value_type GetValue(UF::UnitData const* unitData, Player const* receiver, Unit const* unit)
287 {
288 value_type stateWorldEffectsQuestObjectiveId = unitData->StateWorldEffectsQuestObjectiveID;
289
290 if (!stateWorldEffectsQuestObjectiveId && unit->IsCreature())
291 {
292 if (CreatureData const* data = unit->ToCreature()->GetCreatureData())
293 {
294 auto itr = data->spawnTrackingQuestObjectives.begin();
295 auto end = data->spawnTrackingQuestObjectives.end();
296 if (itr != end)
297 {
298 // If there is no valid objective for player, fill UF with first objective (if any)
299 stateWorldEffectsQuestObjectiveId = *itr;
300 while (++itr != end)
301 {
302 if (receiver->GetSpawnTrackingStateByObjective(data->spawnTrackingData->SpawnTrackingId, *itr) != SpawnTrackingState::Active)
303 continue;
304
305 stateWorldEffectsQuestObjectiveId = *itr;
306 break;
307 }
308 }
309 }
310 }
311
312 return stateWorldEffectsQuestObjectiveId;
313 }
314};
315
316template<>
318{
319public:
321
322 static value_type GetValue(UF::UnitData const* unitData, Player const* receiver, Unit const* unit)
323 {
324 value_type factionTemplate = unitData->FactionTemplate;
325 if (unit->IsControlledByPlayer() && receiver != unit && sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP) && unit->IsInRaidWith(receiver))
326 {
328 FactionTemplateEntry const* ft2 = receiver->GetFactionTemplateEntry();
329 if (ft1 && ft2 && !ft1->IsFriendlyTo(ft2))
330 // pretend that all other HOSTILE players have own faction, to allow follow, heal, rezz (trade wont work)
331 factionTemplate = receiver->GetFaction();
332 }
333
334 return factionTemplate;
335 }
336};
337
338template<>
340{
341public:
343
344 static value_type GetValue(UF::UnitData const* unitData, Player const* receiver, Unit const* /*unit*/)
345 {
346 value_type flags = unitData->Flags;
347 // Gamemasters should be always able to interact with units - remove uninteractible flag
348 if (receiver->IsGameMaster())
349 flags &= ~UNIT_FLAG_UNINTERACTIBLE;
350
351 return flags;
352 }
353};
354
355template<>
357{
358public:
360
361 static value_type GetValue(UF::UnitData const* unitData, Player const* receiver, Unit const* /*unit*/)
362 {
363 value_type flags = unitData->Flags2;
364 // Gamemasters should be always able to interact with units - remove uninteractible flag
365 if (receiver->IsGameMaster())
366 flags &= ~UNIT_FLAG2_UNTARGETABLE_BY_CLIENT;
367
368 return flags;
369 }
370};
371
372template<>
374{
375public:
377
378 static value_type GetValue(UF::UnitData const* unitData, Player const* receiver, Unit const* unit)
379 {
380 value_type flags = unitData->Flags3;
381 if (flags & UNIT_FLAG3_ALREADY_SKINNED && unit->IsCreature() && !unit->ToCreature()->IsSkinnedBy(receiver))
382 flags &= ~UNIT_FLAG3_ALREADY_SKINNED;
383
384 return flags;
385 }
386};
387
388template<>
390{
391public:
393
394 static value_type GetValue(UF::UnitData const* unitData, Player const* /*receiver*/, Unit const* /*unit*/)
395 {
396 return unitData->Flags4;
397 }
398};
399
400template<>
402{
403public:
405
406 static value_type GetValue(UF::UnitData const* /*unitData*/, Player const* receiver, Unit const* unit)
407 {
408 // Check per caster aura states to not enable using a spell in client if specified aura is not by target
409 return unit->BuildAuraStateUpdateForTarget(receiver);
410 }
411};
412
413template<>
415{
416public:
418
419 static value_type GetValue(UF::UnitData const* unitData, Player const* receiver, Unit const* unit)
420 {
421 value_type pvpFlags = unitData->PvpFlags;
422 if (unit->IsControlledByPlayer() && receiver != unit && sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP) && unit->IsInRaidWith(receiver))
423 {
425 FactionTemplateEntry const* ft2 = receiver->GetFactionTemplateEntry();
426 if (ft1 && ft2 && !ft1->IsFriendlyTo(ft2))
427 // Allow targeting opposite faction in party when enabled in config
428 pvpFlags &= UNIT_BYTE2_FLAG_SANCTUARY;
429 }
430
431 return pvpFlags;
432 }
433};
434
435template<>
437{
438public:
440
441 static value_type GetValue(UF::UnitData const* unitData, Player const* receiver, Unit const* unit)
442 {
443 value_type interactSpellId = unitData->InteractSpellID;
444 if (unitData->NpcFlags & UNIT_NPC_FLAG_SPELLCLICK && !interactSpellId)
445 {
446 // this field is not set if there are multiple available spellclick spells
447 auto clickBounds = sObjectMgr->GetSpellClickInfoMapBounds(unit->GetEntry());
448 for (auto const& [creatureId, spellClickInfo] : clickBounds)
449 {
450 if (!spellClickInfo.IsFitToRequirements(receiver, unit))
451 continue;
452
453 if (!sConditionMgr->IsObjectMeetingSpellClickConditions(unit->GetEntry(), spellClickInfo.spellId, receiver, unit))
454 continue;
455
456 interactSpellId = spellClickInfo.spellId;
457 break;
458 }
459
460 }
461 return interactSpellId;
462 }
463};
464
465template<>
467{
468public:
470
471 static value_type GetValue(UF::UnitData const* unitData, Player const* receiver, Unit const* unit)
472 {
473 value_type npcFlag = unitData->NpcFlags;
474 if (npcFlag)
475 {
476 if ((!unit->IsInteractionAllowedInCombat() && unit->IsInCombat())
477 || (!unit->IsInteractionAllowedWhileHostile() && unit->IsHostileTo(receiver)))
478 npcFlag = 0;
479 else if (Creature const* creature = unit->ToCreature())
480 {
481 if (!receiver->CanSeeGossipOn(creature))
483
484 if (!receiver->CanSeeSpellClickOn(creature))
485 npcFlag &= ~UNIT_NPC_FLAG_SPELLCLICK;
486 }
487 }
488 return npcFlag;
489 }
490};
491
492template<>
494{
495public:
497
498 static value_type GetValue(UF::UnitData const* unitData, Player const* receiver, Unit const* unit)
499 {
500 value_type npcFlag = unitData->NpcFlags2;
501 if (npcFlag)
502 {
503 if ((!unit->IsInteractionAllowedInCombat() && unit->IsInCombat())
504 || (!unit->IsInteractionAllowedWhileHostile() && unit->IsHostileTo(receiver)))
505 npcFlag = 0;
506 }
507 return npcFlag;
508 }
509};
510
511template<>
513{
514public:
516
517 static value_type GetValue(UF::GameObjectData const* gameObjectData, Player const* receiver, GameObject const* gameObject)
518 {
519 if (SpawnTrackingStateData const* spawnTrackingStateData = gameObject->GetSpawnTrackingStateDataForPlayer(receiver))
520 return &spawnTrackingStateData->StateWorldEffects;
521
522 return &*gameObjectData->StateWorldEffectIDs;
523 }
524};
525
526template<>
528{
529public:
531
532 static value_type GetValue(UF::GameObjectData const* gameObjectData, Player const* receiver, GameObject const* gameObject)
533 {
534 value_type stateSpellVisual = gameObjectData->StateSpellVisualID;
535
536 if (SpawnTrackingStateData const* spawnTrackingStateData = gameObject->GetSpawnTrackingStateDataForPlayer(receiver))
537 stateSpellVisual = spawnTrackingStateData->StateSpellVisualId.value_or(0);
538
539 return stateSpellVisual;
540 }
541};
542
543template<>
545{
546public:
548
549 static value_type GetValue(UF::GameObjectData const* /*gameObjectData*/, Player const* receiver, GameObject const* gameObject)
550 {
551 value_type stateAnimId = sDB2Manager.GetEmptyAnimStateID();
552
553 if (SpawnTrackingStateData const* spawnTrackingStateData = gameObject->GetSpawnTrackingStateDataForPlayer(receiver))
554 stateAnimId = spawnTrackingStateData->StateAnimId.value_or(stateAnimId);
555
556 return stateAnimId;
557 }
558};
559
560template<>
562{
563public:
565
566 static value_type GetValue(UF::GameObjectData const* gameObjectData, Player const* receiver, GameObject const* gameObject)
567 {
568 value_type stateAnimKitId = gameObjectData->SpawnTrackingStateAnimKitID;
569
570 if (SpawnTrackingStateData const* spawnTrackingStateData = gameObject->GetSpawnTrackingStateDataForPlayer(receiver))
571 stateAnimKitId = spawnTrackingStateData->StateAnimKitId.value_or(0);
572
573 return stateAnimKitId;
574 }
575};
576
577template<>
579{
580public:
582
583 static value_type GetValue(UF::GameObjectData const* gameObjectData, Player const* receiver, GameObject const* gameObject)
584 {
585 value_type stateWorldEffectsQuestObjectiveId = gameObjectData->StateWorldEffectsQuestObjectiveID;
586
587 if (!stateWorldEffectsQuestObjectiveId)
588 {
589 if (::GameObjectData const* data = gameObject->GetGameObjectData())
590 {
591 auto itr = data->spawnTrackingQuestObjectives.begin();
592 auto end = data->spawnTrackingQuestObjectives.end();
593 if (itr != end)
594 {
595 // If there is no valid objective for player, fill UF with first objective (if any)
596 stateWorldEffectsQuestObjectiveId = *itr;
597 while (++itr != end)
598 {
599 if (receiver->GetSpawnTrackingStateByObjective(data->spawnTrackingData->SpawnTrackingId, *itr) != SpawnTrackingState::Active)
600 continue;
601
602 stateWorldEffectsQuestObjectiveId = *itr;
603 break;
604 }
605 }
606 }
607 }
608
609 return stateWorldEffectsQuestObjectiveId;
610 }
611};
612
613template<>
615{
616public:
618
619 static value_type GetValue(UF::GameObjectData const* gameObjectData, Player const* receiver, GameObject const* gameObject)
620 {
622 if (gameObject->GetGoType() == GAMEOBJECT_TYPE_CHEST)
623 if (gameObject->GetGOInfo()->IsUsingGroupLootRules() && !gameObject->IsLootAllowedFor(receiver))
625
626 return flags;
627 }
628};
629
630template<>
632{
633public:
635
636 static value_type GetValue(UF::GameObjectData const* /*gameObjectData*/, Player const* receiver, GameObject const* gameObject)
637 {
638 return gameObject->GetGoStateFor(receiver->GetGUID());
639 }
640};
641
642template<>
644{
645public:
647
648 static value_type GetValue(UF::ConversationData const* /*conversationData*/, Player const* receiver, Conversation const* conversation)
649 {
650 LocaleConstant locale = receiver->GetSession()->GetSessionDbLocaleIndex();
651 return conversation->GetLastLineEndTime(locale).count();
652 }
653};
654
655template<>
657{
658public:
660
661 static value_type GetValue(UF::ConversationLine const* conversationLineData, Player const* receiver, Conversation const* conversation)
662 {
663 value_type startTime = conversationLineData->StartTime;
664 LocaleConstant locale = receiver->GetSession()->GetSessionDbLocaleIndex();
665
666 if (Milliseconds const* localizedStartTime = conversation->GetLineStartTime(locale, conversationLineData->ConversationLineID))
667 startTime = localizedStartTime->count();
668
669 return startTime;
670 }
671};
672}
673
674#endif // ViewerDependentValues_h__
LocaleConstant
Definition Common.h:51
#define sConditionMgr
@ CREATURE_FLAG_EXTRA_TRIGGER
#define sDB2Manager
Definition DB2Stores.h:569
uint32_t uint32
Definition Define.h:154
uint16 flags
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Definition Duration.h:24
#define sObjectMgr
Definition ObjectMgr.h:1885
@ GAMEOBJECT_TYPE_CAPTURE_POINT
@ GAMEOBJECT_TYPE_BUTTON
@ GAMEOBJECT_TYPE_SPELL_FOCUS
@ GAMEOBJECT_TYPE_TRANSPORT
@ GAMEOBJECT_TYPE_GENERIC
@ GAMEOBJECT_TYPE_CHEST
@ GAMEOBJECT_TYPE_QUESTGIVER
@ GAMEOBJECT_TYPE_SPELLCASTER
@ GAMEOBJECT_TYPE_FLAGSTAND
@ GAMEOBJECT_TYPE_GOOBER
@ GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT
@ GAMEOBJECT_TYPE_GATHERING_NODE
@ UNIT_DYNFLAG_TAPPED
@ UNIT_DYNFLAG_LOOTABLE
@ UNIT_DYNFLAG_TRACK_UNIT
@ UNIT_DYNFLAG_CAN_SKIN
@ GO_DYNFLAG_LO_STATE_TRANSITION_ANIM_DONE
@ GO_DYNFLAG_LO_ACTIVATE
@ GO_DYNFLAG_LO_HIGHLIGHT
@ GO_DYNFLAG_LO_SPARKLE
@ GO_DYNFLAG_LO_NO_INTERACT
@ GO_DYNFLAG_LO_INTERACT_COND
@ GO_DYNFLAG_LO_DEPLETED
@ GO_FLAG_INTERACT_COND
@ GO_FLAG_NOT_SELECTABLE
@ GO_FLAG_LOCKED
@ GO_STATE_ACTIVE
@ SPAWN_TYPE_GAMEOBJECT
Definition SpawnData.h:37
@ SPELL_AURA_MOD_STALKED
@ SPELL_AURA_TRANSFORM
#define sSpellMgr
Definition SpellMgr.h:812
@ UNIT_NPC_FLAG_GOSSIP
@ UNIT_NPC_FLAG_QUESTGIVER
@ UNIT_NPC_FLAG_SPELLCLICK
@ UNIT_FLAG3_ALREADY_SKINNED
@ UNIT_BYTE2_FLAG_SANCTUARY
Definition UnitDefines.h:96
ObjectGuid const & GetGUID() const
Definition BaseEntity.h:163
bool IsCreature() const
Definition BaseEntity.h:172
Milliseconds const * GetLineStartTime(LocaleConstant locale, int32 lineId) const
Milliseconds GetLastLineEndTime(LocaleConstant locale) const
bool IsSkinnedBy(Player const *player) const
CreatureData const * GetCreatureData() const
Definition Creature.h:267
CreatureTemplate const * GetCreatureTemplate() const
Definition Creature.h:266
SpawnTrackingStateData const * GetSpawnTrackingStateDataForPlayer(Player const *player) const override
GOState GetGoStateFor(ObjectGuid const &viewer) const
GameObjectTemplate const * GetGOInfo() const
Definition GameObject.h:203
GameobjectTypes GetGoType() const
Definition GameObject.h:282
GameObjectData const * GetGameObjectData() const
Definition GameObject.h:206
bool IsLootAllowedFor(Player const *player) const
Difficulty GetDifficultyID() const
Definition Map.h:360
GameObject * ToGameObject()
Definition Object.h:131
uint32 GetEntry() const
Definition Object.h:89
Creature * ToCreature()
Definition Object.h:121
virtual SpawnTrackingStateData const * GetSpawnTrackingStateDataForPlayer(Player const *player) const
Definition Object.h:169
Unit * ToUnit()
Definition Object.h:116
bool isAllowedToLoot(Creature const *creature) const
Definition Player.cpp:18944
WorldSession * GetSession() const
Definition Player.h:2272
SpawnTrackingState GetSpawnTrackingStateByObjective(uint32 spawnTrackingId, uint32 questObjectiveId) const
Definition Player.cpp:17581
bool IsGameMaster() const
Definition Player.h:1309
bool CanSeeGossipOn(Creature const *creature) const
Definition Player.cpp:28053
SpawnTrackingState GetSpawnTrackingStateByObjectives(uint32 spawnTrackingId, std::vector< uint32 > const &questObjectives) const
Definition Player.cpp:17559
bool CanSeeSpellClickOn(Creature const *creature) const
Definition Player.cpp:28086
UF::ConversationData::LastLineEndTimeTag::value_type value_type
static value_type GetValue(UF::ConversationData const *, Player const *receiver, Conversation const *conversation)
UF::ConversationLine::StartTimeTag::value_type value_type
static value_type GetValue(UF::ConversationLine const *conversationLineData, Player const *receiver, Conversation const *conversation)
static value_type GetValue(UF::GameObjectData const *gameObjectData, Player const *receiver, GameObject const *gameObject)
UF::GameObjectData::SpawnTrackingStateAnimIDTag::value_type value_type
static value_type GetValue(UF::GameObjectData const *, Player const *receiver, GameObject const *gameObject)
UF::GameObjectData::SpawnTrackingStateAnimKitIDTag::value_type value_type
static value_type GetValue(UF::GameObjectData const *gameObjectData, Player const *receiver, GameObject const *gameObject)
UF::GameObjectData::StateSpellVisualIDTag::value_type value_type
static value_type GetValue(UF::GameObjectData const *gameObjectData, Player const *receiver, GameObject const *gameObject)
static value_type GetValue(UF::GameObjectData const *, Player const *receiver, GameObject const *gameObject)
static value_type GetValue(UF::GameObjectData const *gameObjectData, Player const *receiver, GameObject const *gameObject)
UF::GameObjectData::StateWorldEffectIDsTag::value_type const * value_type
static value_type GetValue(UF::GameObjectData const *gameObjectData, Player const *receiver, GameObject const *gameObject)
UF::GameObjectData::StateWorldEffectsQuestObjectiveIDTag::value_type value_type
UF::ObjectData::DynamicFlagsTag::value_type value_type
static value_type GetValue(UF::ObjectData const *objectData, Player const *receiver, Object const *object)
static value_type GetValue(UF::ObjectData const *objectData, Player const *receiver, Object const *object)
static value_type GetValue(UF::UnitData const *, Player const *receiver, Unit const *unit)
static value_type GetValue(UF::UnitData const *unitData, Player const *receiver, Unit const *unit)
static value_type GetValue(UF::UnitData const *unitData, Player const *receiver, Unit const *unit)
UF::UnitData::FactionTemplateTag::value_type value_type
static value_type GetValue(UF::UnitData const *unitData, Player const *receiver, Unit const *)
static value_type GetValue(UF::UnitData const *unitData, Player const *receiver, Unit const *unit)
static value_type GetValue(UF::UnitData const *unitData, Player const *, Unit const *)
static value_type GetValue(UF::UnitData const *unitData, Player const *receiver, Unit const *)
UF::UnitData::InteractSpellIDTag::value_type value_type
static value_type GetValue(UF::UnitData const *unitData, Player const *receiver, Unit const *unit)
static value_type GetValue(UF::UnitData const *unitData, Player const *receiver, Unit const *unit)
static value_type GetValue(UF::UnitData const *unitData, Player const *receiver, Unit const *unit)
static value_type GetValue(UF::UnitData const *unitData, Player const *receiver, Unit const *unit)
static value_type GetValue(UF::UnitData const *, Player const *receiver, Unit const *unit)
static value_type GetValue(UF::UnitData const *unitData, Player const *receiver, Unit const *unit)
UF::UnitData::StateSpellVisualIDTag::value_type value_type
static value_type GetValue(UF::UnitData const *unitData, Player const *receiver, Unit const *unit)
UF::UnitData::StateWorldEffectIDsTag::value_type const * value_type
static value_type GetValue(UF::UnitData const *unitData, Player const *receiver, Unit const *unit)
UF::UnitData::StateWorldEffectsQuestObjectiveIDTag::value_type value_type
static value_type GetValue(UF::UnitData const *unitData, Player const *receiver, Unit const *unit)
Definition Unit.h:635
bool IsInteractionAllowedInCombat() const
Definition Unit.h:1067
uint32 GetTransformSpell() const
Definition Unit.h:1617
uint32 BuildAuraStateUpdateForTarget(Unit const *target) const
Definition Unit.cpp:6135
TempSummon * ToTempSummon()
Definition Unit.h:1828
uint32 GetFaction() const override
Definition Unit.h:871
bool IsInRaidWith(Unit const *unit) const
Definition Unit.cpp:12177
bool IsInteractionAllowedWhileHostile() const
Definition Unit.h:1064
bool IsControlledByPlayer() const
Definition Unit.h:1214
bool IsInCombat() const
Definition Unit.h:1058
Map * GetMap() const
Definition Object.h:411
bool IsHostileTo(WorldObject const *target) const
Definition Object.cpp:2181
FactionTemplateEntry const * GetFactionTemplateEntry() const
Definition Object.cpp:2000
LocaleConstant GetSessionDbLocaleIndex() const
#define sWorld
Definition World.h:916
@ CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP
Definition World.h:112
static constexpr ObjectData objectData[]
static constexpr ObjectData gameObjectData[]
uint32 CreatureDisplayID
CreatureModel const * GetFirstVisibleModel() const
Definition Creature.cpp:158
bool IsFriendlyTo(FactionTemplateEntry const *entry) const
bool IsUsingGroupLootRules() const
UpdateField< int32, 32, 45 > FactionTemplate
UpdateField< std::vector< uint32 >, 0, 2 > StateWorldEffectIDs
UpdateField< uint32, 0, 12 > StateWorldEffectsQuestObjectiveID
UpdateField< uint32, 32, 47 > Flags2
UpdateField< uint8, 64, 86 > PvpFlags
UpdateField< int32, 96, 117 > InteractSpellID
UpdateField< uint32, 0, 8 > NpcFlags2
UpdateField< uint32, 32, 49 > Flags4
UpdateField< int32, 0, 6 > DisplayID
UpdateField< uint32, 0, 9 > StateSpellVisualID
UpdateField< uint32, 0, 11 > StateAnimKitID
UpdateField< uint32, 32, 48 > Flags3
UpdateField< uint32, 32, 46 > Flags
UpdateField< uint32, 0, 7 > NpcFlags