TrinityCore
CreatureData.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 CreatureData_h__
19#define CreatureData_h__
20
21#include "Common.h"
22#include "DBCEnums.h"
23#include "EnumFlag.h"
24#include "Optional.h"
25#include "SharedDefines.h"
26#include "SpawnData.h"
27#include "UnitDefines.h"
28#include "WorldPacket.h"
29#include <string>
30#include <unordered_map>
31#include <cmath>
32
33struct ItemTemplate;
34enum class VisibilityDistanceType : uint8;
35
37{
39 CREATURE_STATIC_FLAG_NO_XP = 0x00000002, // CREATURE_FLAG_EXTRA_NO_XP
42 CREATURE_STATIC_FLAG_TAMEABLE = 0x00000010, // CREATURE_TYPE_FLAG_TAMEABLE
43 CREATURE_STATIC_FLAG_IMMUNE_TO_PC = 0x00000020, // UNIT_FLAG_IMMUNE_TO_PC
44 CREATURE_STATIC_FLAG_IMMUNE_TO_NPC = 0x00000040, // UNIT_FLAG_IMMUNE_TO_NPC
46 CREATURE_STATIC_FLAG_SESSILE = 0x00000100, // Rooted movementflag, creature is permanently rooted in place
47 CREATURE_STATIC_FLAG_UNINTERACTIBLE = 0x00000200, // UNIT_FLAG_UNINTERACTIBLE
48 CREATURE_STATIC_FLAG_NO_AUTOMATIC_REGEN = 0x00000400, // Creatures with that flag uses no UNIT_FLAG2_REGENERATE_POWER
49 CREATURE_STATIC_FLAG_DESPAWN_INSTANTLY = 0x00000800, // Creature instantly disappear when killed
51 CREATURE_STATIC_FLAG_CREATOR_LOOT = 0x00002000, // Lootable only by creator(engineering dummies)
54 CREATURE_STATIC_FLAG_BOSS_MOB = 0x00010000, // CREATURE_TYPE_FLAG_BOSS_MOB, original description: Raid Boss Mob
56 CREATURE_STATIC_FLAG_AQUATIC = 0x00040000, // aka Water Only, creature_template_movement.Ground = 0
57 CREATURE_STATIC_FLAG_AMPHIBIOUS = 0x00080000, // Creatures will be able to enter and leave water but can only move on the ocean floor when CREATURE_STATIC_FLAG_CAN_SWIM is not present
58 CREATURE_STATIC_FLAG_NO_MELEE_FLEE = 0x00100000, // "No Melee (Flee)" Prevents melee (moves as-if feared, does not make creature passive)
59 CREATURE_STATIC_FLAG_VISIBLE_TO_GHOSTS = 0x00200000, // CREATURE_TYPE_FLAG_VISIBLE_TO_GHOSTS
60 CREATURE_STATIC_FLAG_PVP_ENABLING = 0x00400000, // Old UNIT_FLAG_PVP_ENABLING, now UNIT_BYTES_2_OFFSET_PVP_FLAG from UNIT_FIELD_BYTES_2
61 CREATURE_STATIC_FLAG_DO_NOT_PLAY_WOUND_ANIM = 0x00800000, // CREATURE_TYPE_FLAG_DO_NOT_PLAY_WOUND_ANIM
62 CREATURE_STATIC_FLAG_NO_FACTION_TOOLTIP = 0x01000000, // CREATURE_TYPE_FLAG_NO_FACTION_TOOLTIP
63 CREATURE_STATIC_FLAG_IGNORE_COMBAT = 0x02000000, // Actually only changes react state to passive
64 CREATURE_STATIC_FLAG_ONLY_ATTACK_PVP_ENABLING = 0x04000000, // "Only attack targets that are PvP enabling"
65 CREATURE_STATIC_FLAG_CALLS_GUARDS = 0x08000000, // Creature will summon a guard if player is within its aggro range (even if creature doesn't attack per se)
66 CREATURE_STATIC_FLAG_CAN_SWIM = 0x10000000, // UnitFlags 0x8000 UNIT_FLAG_CAN_SWIM
67 CREATURE_STATIC_FLAG_FLOATING = 0x20000000, // sets DisableGravity movementflag on spawn/reset
68 CREATURE_STATIC_FLAG_MORE_AUDIBLE = 0x40000000, // CREATURE_TYPE_FLAG_MORE_AUDIBLE
69 CREATURE_STATIC_FLAG_LARGE_AOI = 0x80000000 // UnitFlags2 0x200000
70};
71
73
75{
77 CREATURE_STATIC_FLAG_2_FORCE_PARTY_MEMBERS_INTO_COMBAT = 0x00000002, // Original description: Force Raid Combat
78 CREATURE_STATIC_FLAG_2_LOCK_TAPPERS_TO_RAID_ON_DEATH = 0x00000004, // "Lock Tappers To Raid On Death", toggleable by 'Set "RAID_LOCK_ON_DEATH" flag for unit(s)' action, CREATURE_FLAG_EXTRA_INSTANCE_BIND
79 CREATURE_STATIC_FLAG_2_SPELL_ATTACKABLE = 0x00000008, // CREATURE_TYPE_FLAG_SPELL_ATTACKABLE, original description(not valid anymore?): No Harmful Vertex Coloring
80 CREATURE_STATIC_FLAG_2_NO_CRUSHING_BLOWS = 0x00000010, // CREATURE_FLAG_EXTRA_NO_CRUSHING_BLOWS
84 CREATURE_STATIC_FLAG_2_IGNORE_FEIGN_DEATH = 0x00000100, // CREATURE_FLAG_EXTRA_IGNORE_FEIGN_DEATH
85 CREATURE_STATIC_FLAG_2_IGNORE_SANCTUARY = 0x00000200, // Ignores SPELL_EFFECT_SANCTUARY
87 CREATURE_STATIC_FLAG_2_INTERACT_WHILE_DEAD = 0x00000800, // CREATURE_TYPE_FLAG_INTERACT_WHILE_DEAD
90 CREATURE_STATIC_FLAG_2_SKIN_WITH_HERBALISM = 0x00004000, // CREATURE_TYPE_FLAG_SKIN_WITH_HERBALISM
91 CREATURE_STATIC_FLAG_2_SKIN_WITH_MINING = 0x00008000, // CREATURE_TYPE_FLAG_SKIN_WITH_MINING
94 CREATURE_STATIC_FLAG_2_ALLOW_MOUNTED_COMBAT = 0x00040000, // CREATURE_TYPE_FLAG_ALLOW_MOUNTED_COMBAT
96 CREATURE_STATIC_FLAG_2_NO_DEATH_MESSAGE = 0x00100000, // CREATURE_TYPE_FLAG_NO_DEATH_MESSAGE
101 CREATURE_STATIC_FLAG_2_HIDE_BODY = 0x02000000, // UNIT_FLAG2_HIDE_BODY
104 CREATURE_STATIC_FLAG_2_CAN_SAFE_FALL = 0x10000000, // Original description: No Collision
105 CREATURE_STATIC_FLAG_2_CAN_ASSIST = 0x20000000, // CREATURE_TYPE_FLAG_CAN_ASSIST, original description: Player Can Heal/Buff
106 CREATURE_STATIC_FLAG_2_NO_SKILL_GAINS = 0x40000000, // CREATURE_FLAG_EXTRA_NO_SKILL_GAINS
107 CREATURE_STATIC_FLAG_2_NO_PET_BAR = 0x80000000 // CREATURE_TYPE_FLAG_NO_PET_BAR
109
111
113{
116 CREATURE_STATIC_FLAG_3_DO_NOT_FADE_IN = 0x00000004, // UNIT_FLAG2_DO_NOT_FADE_IN
117 CREATURE_STATIC_FLAG_3_MASK_UID = 0x00000008, // CREATURE_TYPE_FLAG_MASK_UID, original description: Non-Unique In Combat Log
118 CREATURE_STATIC_FLAG_3_SKIN_WITH_ENGINEERING = 0x00000010, // CREATURE_TYPE_FLAG_SKIN_WITH_ENGINEERING
122 CREATURE_STATIC_FLAG_3_CANNOT_SWIM = 0x00000100, // UNIT_FLAG_CANNOT_SWIM
123 CREATURE_STATIC_FLAG_3_TAMEABLE_EXOTIC = 0x00000200, // CREATURE_TYPE_FLAG_TAMEABLE_EXOTIC
124 CREATURE_STATIC_FLAG_3_GIGANTIC_AOI = 0x00000400, // Since MoP, creatures with that flag have UnitFlags2 0x400000
125 CREATURE_STATIC_FLAG_3_INFINITE_AOI = 0x00000800, // Since MoP, creatures with that flag have UnitFlags2 0x40000000
127 CREATURE_STATIC_FLAG_3_NO_NAME_PLATE = 0x00002000, // CREATURE_TYPE_FLAG_NO_NAME_PLATE
130 CREATURE_STATIC_FLAG_3_USE_MODEL_COLLISION_SIZE = 0x00010000, // CREATURE_TYPE_FLAG_USE_MODEL_COLLISION_SIZE
131 CREATURE_STATIC_FLAG_3_ATTACKER_IGNORES_FACING = 0x00020000, // In 3.3.5 used only by Rocket Propelled Warhead
132 CREATURE_STATIC_FLAG_3_ALLOW_INTERACTION_WHILE_IN_COMBAT = 0x00040000, // CREATURE_TYPE_FLAG_ALLOW_INTERACTION_WHILE_IN_COMBAT
136 CREATURE_STATIC_FLAG_3_COLLIDE_WITH_MISSILES = 0x00400000, // CREATURE_TYPE_FLAG_COLLIDE_WITH_MISSILES
137 CREATURE_STATIC_FLAG_3_CAN_BE_MULTITAPPED = 0x00800000, // Original description: Do Not Tap (Credit to threat list)
138 CREATURE_STATIC_FLAG_3_DO_NOT_PLAY_MOUNTED_ANIMATIONS = 0x01000000, // CREATURE_TYPE_FLAG_DO_NOT_PLAY_MOUNTED_ANIMATIONS, original description: Disable Dodge, Parry and Block Animations
139 CREATURE_STATIC_FLAG_3_CANNOT_TURN = 0x02000000, // UNIT_FLAG2_CANNOT_TURN
142 CREATURE_STATIC_FLAG_3_PETS_ATTACK_WITH_3D_PATHING = 0x10000000, // "Pets attack with 3d pathing (Kologarn)"
143 CREATURE_STATIC_FLAG_3_LINK_ALL = 0x20000000, // CREATURE_TYPE_FLAG_LINK_ALL
147
149
151{
152 CREATURE_STATIC_FLAG_4_NO_BIRTH_ANIM = 0x00000001, // SMSG_UPDATE_OBJECT's "NoBirthAnim"
153 CREATURE_STATIC_FLAG_4_TREAT_AS_PLAYER_FOR_DIMINISHING_RETURNS = 0x00000002, // Primarily used by ToC champions
154 CREATURE_STATIC_FLAG_4_TREAT_AS_PLAYER_FOR_PVP_DEBUFF_DURATION = 0x00000004, // Primarily used by ToC champions
155 CREATURE_STATIC_FLAG_4_INTERACT_ONLY_WITH_CREATOR = 0x00000008, // CREATURE_TYPE_FLAG_INTERACT_ONLY_WITH_CREATOR, original description: Only Display Gossip for Summoner
156 CREATURE_STATIC_FLAG_4_DO_NOT_PLAY_UNIT_EVENT_SOUNDS = 0x00000010, // CREATURE_TYPE_FLAG_DO_NOT_PLAY_UNIT_EVENT_SOUNDS, original description: No Death Scream
157 CREATURE_STATIC_FLAG_4_HAS_NO_SHADOW_BLOB = 0x00000020, // CREATURE_TYPE_FLAG_HAS_NO_SHADOW_BLOB, original description(wrongly linked type flag or behavior was changed?): Can be Healed by Enemies
160 CREATURE_STATIC_FLAG_4_OBEYS_TAUNT_DIMINISHING_RETURNS = 0x00000100, // CREATURE_FLAG_EXTRA_OBEYS_TAUNT_DIMINISHING_RETURNS
161 CREATURE_STATIC_FLAG_4_NO_MELEE_APPROACH = 0x00000200, // "No Melee (Approach)" Prevents melee (chases into melee range, does not make creature passive)
163 CREATURE_STATIC_FLAG_4_CANNOT_DAZE = 0x00000800, // "Cannot Daze (Combat Stun)"
165 CREATURE_STATIC_FLAG_4_IGNORE_LOS_WHEN_CASTING_ON_ME = 0x00002000, // "Other objects can ignore line of sight requirements when casting spells on me", used only by Ice Tomb in 3.3.5
167 CREATURE_STATIC_FLAG_4_TREAT_AS_RAID_UNIT_FOR_HELPFUL_SPELLS = 0x00008000, // CREATURE_TYPE_FLAG_TREAT_AS_RAID_UNIT, "Treat as Raid Unit For Helpful Spells (Instances ONLY)", used by Valithria Dreamwalker
168 CREATURE_STATIC_FLAG_4_DONT_REPOSITION_IF_MELEE_TARGET_IS_TOO_CLOSE = 0x00010000, // "Don't reposition because melee target is too close"
170 CREATURE_STATIC_FLAG_4_5_MINUTE_LOOT_ROLL_TIMER = 0x00040000, // Used by Lich King
171 CREATURE_STATIC_FLAG_4_FORCE_GOSSIP = 0x00080000, // CREATURE_TYPE_FLAG_FORCE_GOSSIP
173 CREATURE_STATIC_FLAG_4_DO_NOT_SHEATHE = 0x00200000, // CREATURE_TYPE_FLAG_DO_NOT_SHEATHE, original description: Manual Sheathing control
174 CREATURE_STATIC_FLAG_4_IGNORE_SPELL_MIN_RANGE_RESTRICTIONS = 0x00400000, // UnitFlags2 0x8000000, original description: Attacker Ignores Minimum Ranges
176 CREATURE_STATIC_FLAG_4_PREVENT_SWIM = 0x01000000, // UnitFlags2 0x1000000, original description: AI will only swim if target swims
177 CREATURE_STATIC_FLAG_4_HIDE_IN_COMBAT_LOG = 0x02000000, // UnitFlags2 0x2000000, original description: Don't generate combat log when engaged with NPC's
181 CREATURE_STATIC_FLAG_4_DO_NOT_TARGET_ON_INTERACTION = 0x20000000, // CREATURE_TYPE_FLAG_DO_NOT_TARGET_ON_INTERACTION, original description: Doesn't change target on right click
182 CREATURE_STATIC_FLAG_4_DO_NOT_RENDER_OBJECT_NAME = 0x40000000, // CREATURE_TYPE_FLAG_DO_NOT_RENDER_OBJECT_NAME, original description: Hide name in world frame
183 CREATURE_STATIC_FLAG_4_QUEST_BOSS = 0x80000000 // CREATURE_TYPE_FLAG_QUEST_BOSS
185
187
189{
190 CREATURE_STATIC_FLAG_5_UNTARGETABLE_BY_CLIENT = 0x00000001, // UnitFlags2 0x4000000 UNIT_FLAG2_UNTARGETABLE_BY_CLIENT
192 CREATURE_STATIC_FLAG_5_UNINTERACTIBLE_IF_HOSTILE = 0x00000004, // UnitFlags2 0x10000000
198 CREATURE_STATIC_FLAG_5_INTERACT_WHILE_HOSTILE = 0x00000100, // UnitFlags2 0x4000 UNIT_FLAG2_INTERACT_WHILE_HOSTILE
200 CREATURE_STATIC_FLAG_5_PREDICTIVE_POWER_REGEN = 0x00000400, // CREATURE_TYPEFLAGS_2_UNK1
201 CREATURE_STATIC_FLAG_5_HIDE_LEVEL_INFO_IN_TOOLTIP = 0x00000800, // CREATURE_TYPEFLAGS_2_UNK2
202 CREATURE_STATIC_FLAG_5_HIDE_HEALTH_BAR_UNDER_TOOLTIP = 0x00001000, // CREATURE_TYPEFLAGS_2_UNK3
210 CREATURE_STATIC_FLAG_5_NO_TEXT_IN_CHAT_BUBBLE = 0x00100000, // "Never display emote or chat text in a chat bubble", CREATURE_TYPEFLAGS_2_UNK4
211 CREATURE_STATIC_FLAG_5_CLOSE_IN_ON_UNPATHABLE_TARGET = 0x00200000, // "AI Pets close in on unpathable target"
212 CREATURE_STATIC_FLAG_5_DONT_GO_BEHIND_ME = 0x00400000, // "Pet/Guardian AI Don't Go Behind Me (use on target)"
213 CREATURE_STATIC_FLAG_5_NO_DEATH_THUD = 0x00800000, // CREATURE_TYPEFLAGS_2_UNK5
220 CREATURE_STATIC_FLAG_5_NO_INTERACT_ON_LEFT_CLICK = 0x40000000, // CREATURE_TYPEFLAGS_2_UNK6
223
225
227{
228 CREATURE_STATIC_FLAG_6_DO_NOT_AUTO_RESUMMON = 0x00000001, // "Do not auto-resummon this companion creature"
229 CREATURE_STATIC_FLAG_6_REPLACE_VISIBLE_UNIT_IF_AVAILABLE = 0x00000002, // "Smooth Phasing: Replace visible unit if available"
230 CREATURE_STATIC_FLAG_6_IGNORE_REALM_COALESCING_HIDING_CODE = 0x00000004, // "Ignore the realm coalescing hiding code (always show)"
239 CREATURE_STATIC_FLAG_6_ALWAYS_STAND_ON_TOP_OF_TARGET = 0x00000800, // "Always, ALWAYS tries to stand right on top of his move to target. ALWAYS!!", toggleable by 'Set "Always Stand on Target" flag for unit(s)' or not same?
242 CREATURE_STATIC_FLAG_6_PREFER_UNENGAGED_MONSTERS = 0x00004000, // "Prefer unengaged monsters when picking a target"
243 CREATURE_STATIC_FLAG_6_USE_PVP_POWER_AND_RESILIENCE = 0x00008000, // "Use PVP power and resilience when players attack this creature"
245 CREATURE_STATIC_FLAG_6_PERSONAL_LOOT_HAS_FULL_SECURITY = 0x00020000, // "Personal loot has full security (guaranteed push/mail delivery)"
261
263
265{
278};
279
281
283{
287};
288
290
292{
293public:
298 : _flags(flags), _flags2(flags2), _flags3(flags3), _flags4(flags4), _flags5(flags5), _flags6(flags6), _flags7(flags7), _flags8(flags8)
299 {
300 }
301
302 bool HasFlag(CreatureStaticFlags flag) const { return _flags.HasFlag(flag); }
303 bool HasFlag(CreatureStaticFlags2 flag) const { return _flags2.HasFlag(flag); }
304 bool HasFlag(CreatureStaticFlags3 flag) const { return _flags3.HasFlag(flag); }
305 bool HasFlag(CreatureStaticFlags4 flag) const { return _flags4.HasFlag(flag); }
306 bool HasFlag(CreatureStaticFlags5 flag) const { return _flags5.HasFlag(flag); }
307 bool HasFlag(CreatureStaticFlags6 flag) const { return _flags6.HasFlag(flag); }
308 bool HasFlag(CreatureStaticFlags7 flag) const { return _flags7.HasFlag(flag); }
309 bool HasFlag(CreatureStaticFlags8 flag) const { return _flags8.HasFlag(flag); }
310
311 void ApplyFlag(CreatureStaticFlags flag, bool apply) { if (apply) _flags |= flag; else _flags &= ~flag; }
312 void ApplyFlag(CreatureStaticFlags2 flag, bool apply) { if (apply) _flags2 |= flag; else _flags2 &= ~flag; }
313 void ApplyFlag(CreatureStaticFlags3 flag, bool apply) { if (apply) _flags3 |= flag; else _flags3 &= ~flag; }
314 void ApplyFlag(CreatureStaticFlags4 flag, bool apply) { if (apply) _flags4 |= flag; else _flags4 &= ~flag; }
315 void ApplyFlag(CreatureStaticFlags5 flag, bool apply) { if (apply) _flags5 |= flag; else _flags5 &= ~flag; }
316 void ApplyFlag(CreatureStaticFlags6 flag, bool apply) { if (apply) _flags6 |= flag; else _flags6 &= ~flag; }
317 void ApplyFlag(CreatureStaticFlags7 flag, bool apply) { if (apply) _flags7 |= flag; else _flags7 &= ~flag; }
318 void ApplyFlag(CreatureStaticFlags8 flag, bool apply) { if (apply) _flags8 |= flag; else _flags8 &= ~flag; }
319
320private:
329};
330
331// EnumUtils: DESCRIBE THIS
333{
334 CREATURE_FLAG_EXTRA_INSTANCE_BIND = 0x00000001, // creature kill bind instance with killer and killer's group
335 CREATURE_FLAG_EXTRA_CIVILIAN = 0x00000002, // not aggro (ignore faction/reputation hostility)
336 CREATURE_FLAG_EXTRA_NO_PARRY = 0x00000004, // creature can't parry
337 CREATURE_FLAG_EXTRA_NO_PARRY_HASTEN = 0x00000008, // creature can't counter-attack at parry
338 CREATURE_FLAG_EXTRA_NO_BLOCK = 0x00000010, // creature can't block
339 CREATURE_FLAG_EXTRA_NO_CRUSHING_BLOWS = 0x00000020, // creature can't do crush attacks
340 CREATURE_FLAG_EXTRA_NO_XP = 0x00000040, // creature kill does not provide XP
341 CREATURE_FLAG_EXTRA_TRIGGER = 0x00000080, // trigger creature
342 CREATURE_FLAG_EXTRA_NO_TAUNT = 0x00000100, // creature is immune to taunt auras and 'attack me' effects
344 CREATURE_FLAG_EXTRA_GHOST_VISIBILITY = 0x00000400, // creature will only be visible to dead players
345 CREATURE_FLAG_EXTRA_USE_OFFHAND_ATTACK = 0x00000800, // creature will use offhand attacks
346 CREATURE_FLAG_EXTRA_NO_SELL_VENDOR = 0x00001000, // players can't sell items to this vendor
347 CREATURE_FLAG_EXTRA_CANNOT_ENTER_COMBAT = 0x00002000, // creature is not allowed to enter combat
348 CREATURE_FLAG_EXTRA_WORLDEVENT = 0x00004000, // custom flag for world event creatures (left room for merging)
349 CREATURE_FLAG_EXTRA_GUARD = 0x00008000, // Creature is guard
350 CREATURE_FLAG_EXTRA_IGNORE_FEIGN_DEATH = 0x00010000, // creature ignores feign death
351 CREATURE_FLAG_EXTRA_NO_CRIT = 0x00020000, // creature can't do critical strikes
352 CREATURE_FLAG_EXTRA_NO_SKILL_GAINS = 0x00040000, // creature won't increase weapon skills
353 CREATURE_FLAG_EXTRA_OBEYS_TAUNT_DIMINISHING_RETURNS = 0x00080000, // Taunt is subject to diminishing returns on this creature
354 CREATURE_FLAG_EXTRA_ALL_DIMINISH = 0x00100000, // creature is subject to all diminishing returns as players are
355 CREATURE_FLAG_EXTRA_NO_PLAYER_DAMAGE_REQ = 0x00200000, // creature does not need to take player damage for kill credit
362 CREATURE_FLAG_EXTRA_DUNGEON_BOSS = 0x10000000, // creature is a dungeon boss
363 CREATURE_FLAG_EXTRA_IGNORE_PATHFINDING = 0x20000000, // creature ignore pathfinding
364 CREATURE_FLAG_EXTRA_IMMUNITY_KNOCKBACK = 0x40000000, // creature is immune to knockback effects
366
367 // Masks
371
374
376{
377 Run,
378 CanWalk,
380
381 Max
382};
383
385{
386 Walk,
387 CanRun,
388 AlwaysRun,
389
390 Max
391};
392
394{
396
401
402 CreatureChaseMovementType GetChase() const { return Chase; }
404
405 bool IsHoverInitiallyEnabled() const { return HoverInitiallyEnabled; }
406
407 uint32 GetInteractionPauseTimer() const { return InteractionPauseTimer; }
408
409 std::string ToString() const;
410};
411
415
420
422{
425
427 CreatureDisplayID(0), DisplayScale(0.0f), Probability(0.0f) { }
428
429 CreatureModel(uint32 creatureDisplayID, float displayScale, float probability) :
430 CreatureDisplayID(creatureDisplayID), DisplayScale(displayScale), Probability(probability) { }
431
435};
436
438{
455
457
458 // Helpers
460 {
462 }
463
465 {
467 return SKILL_HERBALISM;
469 return SKILL_MINING;
471 return SKILL_ENGINEERING;
472 else
473 return SKILL_SKINNING; // Default case
474 }
475};
476
477// from `creature_template` table
479{
482 std::vector<CreatureModel> Models;
483 std::string Name;
484 std::string FemaleName;
485 std::string SubName;
486 std::string TitleAlt;
487 std::string IconName;
488 std::vector<uint32> GossipMenuIds;
489 std::unordered_map<Difficulty, CreatureDifficulty> difficultyStore;
496 float scale;
503 uint32 unit_class; // enum Classes. Note only 4 classes are known for creatures.
504 uint32 unit_flags; // enum UnitFlags mask values
505 uint32 unit_flags2; // enum UnitFlags2 mask values
506 uint32 unit_flags3; // enum UnitFlags3 mask values
507 CreatureFamily family; // enum CreatureFamily values (optional)
509 uint32 type; // enum CreatureType values
513 std::string AIName;
525 std::string StringId;
527 CreatureModel const* GetModelByIdx(uint32 idx) const;
528 CreatureModel const* GetRandomValidModel() const;
529 CreatureModel const* GetFirstValidModel() const;
530 CreatureModel const* GetModelWithDisplayId(uint32 displayId) const;
531 CreatureModel const* GetFirstInvisibleModel() const;
532 CreatureModel const* GetFirstVisibleModel() const;
533 CreatureDifficulty const* GetDifficulty(Difficulty difficulty) const;
534
535 // Helpers
536 bool IsExotic(CreatureDifficulty const* creatureDifficulty) const
537 {
538 return (creatureDifficulty->TypeFlags & CREATURE_TYPE_FLAG_TAMEABLE_EXOTIC) != 0;
539 }
540
541 bool IsTameable(bool canTameExotic, CreatureDifficulty const* creatureDifficulty) const
542 {
543 if (type != CREATURE_TYPE_BEAST || family == CREATURE_FAMILY_NONE || (creatureDifficulty->TypeFlags & CREATURE_TYPE_FLAG_TAMEABLE) == 0)
544 return false;
545
546 // if can tame exotic then can tame any tameable
547 return canTameExotic || !IsExotic(creatureDifficulty);
548 }
549
550 void InitializeQueryData();
551 WorldPacket BuildQueryData(LocaleConstant loc, Difficulty difficulty) const;
552};
553
554#pragma pack(push, 1)
555
556// Defines base stats for creatures (used to calculate HP/mana/armor/attackpower/rangedattackpower/all damage).
558{
562
563 // Helpers
564 static CreatureBaseStats const* GetBaseStats(uint8 level, uint8 unitClass);
565};
566
568{
569 std::vector<std::string> Name;
570 std::vector<std::string> NameAlt;
571 std::vector<std::string> Title;
572 std::vector<std::string> TitleAlt;
573};
574
576{
580};
581
583{
585};
586
587// from `creature` table
588struct CreatureData : public SpawnData
589{
593 float wander_distance = 0.0f;
599 Optional<uint32> unit_flags; // enum UnitFlags mask values
600 Optional<uint32> unit_flags2; // enum UnitFlags2 mask values
601 Optional<uint32> unit_flags3; // enum UnitFlags3 mask values
602};
603
605{
611};
612
614{
619};
620
622{
629
630#pragma pack(pop)
631
632// `creature_addon` table
634{
646 std::vector<uint32> auras;
648};
649
650// Vendors
652{
654
656 uint32 maxcount; // 0 for infinity item amount
657 uint32 incrtime; // time for restore items amount if maxcount != 0
660 std::vector<int32> BonusListIDs;
663};
664
666{
667 std::vector<VendorItem> m_items;
668
669 VendorItem const* GetItem(uint32 slot) const
670 {
671 if (slot >= m_items.size())
672 return nullptr;
673
674 return &m_items[slot];
675 }
676 bool Empty() const { return m_items.empty(); }
677 uint32 GetItemCount() const { return uint32(m_items.size()); }
678 void AddItem(VendorItem vItem)
679 {
680 m_items.emplace_back(std::move(vItem));
681 }
682 bool RemoveItem(uint32 item_id, uint8 type);
683 VendorItem const* FindItemCostPair(uint32 item_id, uint32 extendedCost, uint8 type) const;
684 void Clear()
685 {
686 m_items.clear();
687 }
688};
689
690#endif // CreatureData_h__
LocaleConstant
Definition: Common.h:48
@ TOTAL_LOCALES
Definition: Common.h:62
@ IN_MILLISECONDS
Definition: Common.h:35
const uint32 CREATURE_REGEN_INTERVAL
Definition: CreatureData.h:412
CreatureFlagsExtra
Definition: CreatureData.h:333
@ CREATURE_FLAG_EXTRA_NO_BLOCK
Definition: CreatureData.h:338
@ CREATURE_FLAG_EXTRA_DB_ALLOWED
Definition: CreatureData.h:372
@ CREATURE_FLAG_EXTRA_NO_CRUSHING_BLOWS
Definition: CreatureData.h:339
@ CREATURE_FLAG_EXTRA_UNUSED_22
Definition: CreatureData.h:356
@ CREATURE_FLAG_EXTRA_UNUSED_27
Definition: CreatureData.h:361
@ CREATURE_FLAG_EXTRA_NO_CRIT
Definition: CreatureData.h:351
@ CREATURE_FLAG_EXTRA_DUNGEON_BOSS
Definition: CreatureData.h:362
@ CREATURE_FLAG_EXTRA_TRIGGER
Definition: CreatureData.h:341
@ CREATURE_FLAG_EXTRA_UNUSED
Definition: CreatureData.h:368
@ CREATURE_FLAG_EXTRA_IGNORE_PATHFINDING
Definition: CreatureData.h:363
@ CREATURE_FLAG_EXTRA_CANNOT_ENTER_COMBAT
Definition: CreatureData.h:347
@ CREATURE_FLAG_EXTRA_UNUSED_31
Definition: CreatureData.h:365
@ CREATURE_FLAG_EXTRA_NO_PARRY_HASTEN
Definition: CreatureData.h:337
@ CREATURE_FLAG_EXTRA_NO_XP
Definition: CreatureData.h:340
@ CREATURE_FLAG_EXTRA_UNUSED_25
Definition: CreatureData.h:359
@ CREATURE_FLAG_EXTRA_INSTANCE_BIND
Definition: CreatureData.h:334
@ CREATURE_FLAG_EXTRA_OBEYS_TAUNT_DIMINISHING_RETURNS
Definition: CreatureData.h:353
@ CREATURE_FLAG_EXTRA_UNUSED_9
Definition: CreatureData.h:343
@ CREATURE_FLAG_EXTRA_IMMUNITY_KNOCKBACK
Definition: CreatureData.h:364
@ CREATURE_FLAG_EXTRA_NO_PARRY
Definition: CreatureData.h:336
@ CREATURE_FLAG_EXTRA_IGNORE_FEIGN_DEATH
Definition: CreatureData.h:350
@ CREATURE_FLAG_EXTRA_NO_TAUNT
Definition: CreatureData.h:342
@ CREATURE_FLAG_EXTRA_NO_PLAYER_DAMAGE_REQ
Definition: CreatureData.h:355
@ CREATURE_FLAG_EXTRA_GHOST_VISIBILITY
Definition: CreatureData.h:344
@ CREATURE_FLAG_EXTRA_NO_SELL_VENDOR
Definition: CreatureData.h:346
@ CREATURE_FLAG_EXTRA_NO_SKILL_GAINS
Definition: CreatureData.h:352
@ CREATURE_FLAG_EXTRA_USE_OFFHAND_ATTACK
Definition: CreatureData.h:345
@ CREATURE_FLAG_EXTRA_UNUSED_23
Definition: CreatureData.h:357
@ CREATURE_FLAG_EXTRA_CIVILIAN
Definition: CreatureData.h:335
@ CREATURE_FLAG_EXTRA_UNUSED_24
Definition: CreatureData.h:358
@ CREATURE_FLAG_EXTRA_GUARD
Definition: CreatureData.h:349
@ CREATURE_FLAG_EXTRA_ALL_DIMINISH
Definition: CreatureData.h:354
@ CREATURE_FLAG_EXTRA_UNUSED_26
Definition: CreatureData.h:360
@ CREATURE_FLAG_EXTRA_WORLDEVENT
Definition: CreatureData.h:348
CreatureStaticFlags
Definition: CreatureData.h:37
@ CREATURE_STATIC_FLAG_PVP_ENABLING
Definition: CreatureData.h:60
@ CREATURE_STATIC_FLAG_IGNORE_COMBAT
Definition: CreatureData.h:63
@ CREATURE_STATIC_FLAG_AQUATIC
Definition: CreatureData.h:56
@ CREATURE_STATIC_FLAG_NO_SPELL_DEFENSE
Definition: CreatureData.h:53
@ CREATURE_STATIC_FLAG_BOSS_MOB
Definition: CreatureData.h:54
@ CREATURE_STATIC_FLAG_ONLY_ATTACK_PVP_ENABLING
Definition: CreatureData.h:64
@ CREATURE_STATIC_FLAG_CAN_WIELD_LOOT
Definition: CreatureData.h:45
@ CREATURE_STATIC_FLAG_VISIBLE_TO_GHOSTS
Definition: CreatureData.h:59
@ CREATURE_STATIC_FLAG_MOUNTABLE
Definition: CreatureData.h:38
@ CREATURE_STATIC_FLAG_COMBAT_PING
Definition: CreatureData.h:55
@ CREATURE_STATIC_FLAG_CREATOR_LOOT
Definition: CreatureData.h:51
@ CREATURE_STATIC_FLAG_CALLS_GUARDS
Definition: CreatureData.h:65
@ CREATURE_STATIC_FLAG_UNINTERACTIBLE
Definition: CreatureData.h:47
@ CREATURE_STATIC_FLAG_CAN_SWIM
Definition: CreatureData.h:66
@ CREATURE_STATIC_FLAG_MORE_AUDIBLE
Definition: CreatureData.h:68
@ CREATURE_STATIC_FLAG_DESPAWN_INSTANTLY
Definition: CreatureData.h:49
@ CREATURE_STATIC_FLAG_NO_XP
Definition: CreatureData.h:39
@ CREATURE_STATIC_FLAG_TAMEABLE
Definition: CreatureData.h:42
@ CREATURE_STATIC_FLAG_IMMUNE_TO_NPC
Definition: CreatureData.h:44
@ CREATURE_STATIC_FLAG_NO_MELEE_FLEE
Definition: CreatureData.h:58
@ CREATURE_STATIC_FLAG_UNKILLABLE
Definition: CreatureData.h:41
@ CREATURE_STATIC_FLAG_IMMUNE_TO_PC
Definition: CreatureData.h:43
@ CREATURE_STATIC_FLAG_NO_DEFENSE
Definition: CreatureData.h:52
@ CREATURE_STATIC_FLAG_SESSILE
Definition: CreatureData.h:46
@ CREATURE_STATIC_FLAG_CORPSE_RAID
Definition: CreatureData.h:50
@ CREATURE_STATIC_FLAG_NO_AUTOMATIC_REGEN
Definition: CreatureData.h:48
@ CREATURE_STATIC_FLAG_LARGE_AOI
Definition: CreatureData.h:69
@ CREATURE_STATIC_FLAG_DO_NOT_PLAY_WOUND_ANIM
Definition: CreatureData.h:61
@ CREATURE_STATIC_FLAG_NO_LOOT
Definition: CreatureData.h:40
@ CREATURE_STATIC_FLAG_NO_FACTION_TOOLTIP
Definition: CreatureData.h:62
@ CREATURE_STATIC_FLAG_FLOATING
Definition: CreatureData.h:67
@ CREATURE_STATIC_FLAG_AMPHIBIOUS
Definition: CreatureData.h:57
CreatureChaseMovementType
Definition: CreatureData.h:376
const uint8 MAX_KILL_CREDIT
Definition: CreatureData.h:416
CreatureStaticFlags4
Definition: CreatureData.h:151
@ CREATURE_STATIC_FLAG_4_HIDE_IN_COMBAT_LOG
Definition: CreatureData.h:177
@ CREATURE_STATIC_FLAG_4_OBEYS_TAUNT_DIMINISHING_RETURNS
Definition: CreatureData.h:160
@ CREATURE_STATIC_FLAG_4_TREAT_AS_PLAYER_FOR_DIMINISHING_RETURNS
Definition: CreatureData.h:153
@ CREATURE_STATIC_FLAG_4_TREAT_AS_PLAYER_FOR_PVP_DEBUFF_DURATION
Definition: CreatureData.h:154
@ CREATURE_STATIC_FLAG_4_FORCE_GOSSIP
Definition: CreatureData.h:171
@ CREATURE_STATIC_FLAG_4_DO_NOT_TARGET_ON_INTERACTION
Definition: CreatureData.h:181
@ CREATURE_STATIC_FLAG_4_FLAT_HONOR_AWARD
Definition: CreatureData.h:164
@ CREATURE_STATIC_FLAG_4_DO_NOT_RENDER_OBJECT_NAME
Definition: CreatureData.h:182
@ CREATURE_STATIC_FLAG_4_DEALS_TRIPLE_DAMAGE_TO_PC_CONTROLLED_PETS
Definition: CreatureData.h:158
@ CREATURE_STATIC_FLAG_4_CANNOT_DAZE
Definition: CreatureData.h:163
@ CREATURE_STATIC_FLAG_4_ONLY_GENERATE_INITIAL_THREAT
Definition: CreatureData.h:180
@ CREATURE_STATIC_FLAG_4_NO_BIRTH_ANIM
Definition: CreatureData.h:152
@ CREATURE_STATIC_FLAG_4_PREFER_NPCS_WHEN_SEARCHING_FOR_ENEMIES
Definition: CreatureData.h:179
@ CREATURE_STATIC_FLAG_4_DONT_REPOSITION_IF_MELEE_TARGET_IS_TOO_CLOSE
Definition: CreatureData.h:168
@ CREATURE_STATIC_FLAG_4_SUPPRESS_INSTANCE_WIDE_RELEASE_IN_COMBAT
Definition: CreatureData.h:175
@ CREATURE_STATIC_FLAG_4_DO_NOT_PLAY_UNIT_EVENT_SOUNDS
Definition: CreatureData.h:156
@ CREATURE_STATIC_FLAG_4_5_MINUTE_LOOT_ROLL_TIMER
Definition: CreatureData.h:170
@ CREATURE_STATIC_FLAG_4_GIVE_QUEST_KILL_CREDIT_WHILE_OFFLINE
Definition: CreatureData.h:166
@ CREATURE_STATIC_FLAG_4_PREVENT_SWIM
Definition: CreatureData.h:176
@ CREATURE_STATIC_FLAG_4_DONT_REPOSITION_WITH_FRIENDS_IN_COMBAT
Definition: CreatureData.h:172
@ CREATURE_STATIC_FLAG_4_PET_OR_GUARDIAN_AI_DONT_GO_BEHIND_TARGET
Definition: CreatureData.h:169
@ CREATURE_STATIC_FLAG_4_NO_MELEE_APPROACH
Definition: CreatureData.h:161
@ CREATURE_STATIC_FLAG_4_DO_NOT_SHEATHE
Definition: CreatureData.h:173
@ CREATURE_STATIC_FLAG_4_NO_NPC_DAMAGE_BELOW_85PTC
Definition: CreatureData.h:159
@ CREATURE_STATIC_FLAG_4_ALLOW_NPC_COMBAT_WHILE_UNINTERACTIBLE
Definition: CreatureData.h:178
@ CREATURE_STATIC_FLAG_4_IGNORE_LOS_WHEN_CASTING_ON_ME
Definition: CreatureData.h:165
@ CREATURE_STATIC_FLAG_4_IGNORE_SPELL_MIN_RANGE_RESTRICTIONS
Definition: CreatureData.h:174
@ CREATURE_STATIC_FLAG_4_HAS_NO_SHADOW_BLOB
Definition: CreatureData.h:157
@ CREATURE_STATIC_FLAG_4_TREAT_AS_RAID_UNIT_FOR_HELPFUL_SPELLS
Definition: CreatureData.h:167
@ CREATURE_STATIC_FLAG_4_INTERACT_ONLY_WITH_CREATOR
Definition: CreatureData.h:155
@ CREATURE_STATIC_FLAG_4_QUEST_BOSS
Definition: CreatureData.h:183
@ CREATURE_STATIC_FLAG_4_UPDATE_CREATURE_RECORD_WHEN_INSTANCE_CHANGES_DIFFICULTY
Definition: CreatureData.h:162
CreatureStaticFlags6
Definition: CreatureData.h:227
@ CREATURE_STATIC_FLAG_6_CAN_TOGGLE_BETWEEN_DEATH_AND_PERSONAL_LOOT
Definition: CreatureData.h:238
@ CREATURE_STATIC_FLAG_6_REPLACE_VISIBLE_UNIT_IF_AVAILABLE
Definition: CreatureData.h:229
@ CREATURE_STATIC_FLAG_6_USE_GARRISON_OWNER_LEVEL
Definition: CreatureData.h:247
@ CREATURE_STATIC_FLAG_6_AI_DONT_LEAVE_MELEE_FOR_RANGED_WHEN_TARGET_GETS_ROOTED
Definition: CreatureData.h:256
@ CREATURE_STATIC_FLAG_6_FORCE_TRIGGERING_PLAYER_LOOT_ONLY
Definition: CreatureData.h:253
@ CREATURE_STATIC_FLAG_6_ALWAYS_USE_GROUP_LOOT_METHOD
Definition: CreatureData.h:251
@ CREATURE_STATIC_FLAG_6_DONT_CLEAR_DEBUFFS_ON_LEAVE_COMBAT
Definition: CreatureData.h:244
@ CREATURE_STATIC_FLAG_6_HOME_REALM_ONLY_LOOT
Definition: CreatureData.h:234
@ CREATURE_STATIC_FLAG_6_IGNORE_REALM_COALESCING_HIDING_CODE
Definition: CreatureData.h:230
@ CREATURE_STATIC_FLAG_6_NO_INTERACT_RESPONSE
Definition: CreatureData.h:235
@ CREATURE_STATIC_FLAG_6_IMMEDIATE_AOI_UPDATE_ON_SPAWN
Definition: CreatureData.h:248
@ CREATURE_STATIC_FLAG_6_SHOW_BOSS_FRAME_WHILE_UNINTERACTABLE
Definition: CreatureData.h:254
@ CREATURE_STATIC_FLAG_6_SCALES_TO_PLAYER_LEVEL
Definition: CreatureData.h:255
@ CREATURE_STATIC_FLAG_6_NO_BOSS_KILL_BANNER
Definition: CreatureData.h:252
@ CREATURE_STATIC_FLAG_6_USE_PVP_POWER_AND_RESILIENCE
Definition: CreatureData.h:243
@ CREATURE_STATIC_FLAG_6_SEAMLESS_TRANSFER_PROHIBITED
Definition: CreatureData.h:250
@ CREATURE_STATIC_FLAG_6_UNCONSCIOUS_ON_DEATH
Definition: CreatureData.h:240
@ CREATURE_STATIC_FLAG_6_DO_NOT_AUTO_RESUMMON
Definition: CreatureData.h:228
@ CREATURE_STATIC_FLAG_6_DONT_USE_COMBAT_REACH_FOR_CHAINING
Definition: CreatureData.h:257
@ CREATURE_STATIC_FLAG_6_DONT_CANCEL_CHANNEL_ON_MASTER_MOUNTING
Definition: CreatureData.h:237
@ CREATURE_STATIC_FLAG_6_ONLY_QUESTGIVER_FOR_SUMMONER
Definition: CreatureData.h:232
@ CREATURE_STATIC_FLAG_6_PERSONAL_LOOT_HAS_FULL_SECURITY
Definition: CreatureData.h:245
@ CREATURE_STATIC_FLAG_6_APPLY_PROCEDURAL_WOUND_ANIM_TO_BASE
Definition: CreatureData.h:259
@ CREATURE_STATIC_FLAG_6_DONT_REPORT_TO_LOCAL_DEFENSE_CHANNEL_ON_DEATH
Definition: CreatureData.h:241
@ CREATURE_STATIC_FLAG_6_UI_CAN_GET_POSITION
Definition: CreatureData.h:249
@ CREATURE_STATIC_FLAG_6_TAPS_TO_FACTION
Definition: CreatureData.h:231
@ CREATURE_STATIC_FLAG_6_AI_COMBAT_RETURN_PRECISE
Definition: CreatureData.h:233
@ CREATURE_STATIC_FLAG_6_DO_NOT_PLAY_PROCEDURAL_WOUND_ANIM
Definition: CreatureData.h:258
@ CREATURE_STATIC_FLAG_6_NO_INITIAL_POWER
Definition: CreatureData.h:236
@ CREATURE_STATIC_FLAG_6_TRIPLE_SPELL_VISUALS
Definition: CreatureData.h:246
@ CREATURE_STATIC_FLAG_6_PREFER_UNENGAGED_MONSTERS
Definition: CreatureData.h:242
@ CREATURE_STATIC_FLAG_6_ALWAYS_STAND_ON_TOP_OF_TARGET
Definition: CreatureData.h:239
CreatureStaticFlags5
Definition: CreatureData.h:189
@ CREATURE_STATIC_FLAG_5_DISABLE_AI_PREDICTION
Definition: CreatureData.h:194
@ CREATURE_STATIC_FLAG_5_NO_DEATH_THUD
Definition: CreatureData.h:213
@ CREATURE_STATIC_FLAG_5_AI_CANT_PATH_ON_STEEP_SLOPES
Definition: CreatureData.h:208
@ CREATURE_STATIC_FLAG_5_NO_POWER_REGEN
Definition: CreatureData.h:218
@ CREATURE_STATIC_FLAG_5_NO_HEALTH_REGEN
Definition: CreatureData.h:217
@ CREATURE_STATIC_FLAG_5_HAS_SAFE_LOCATION
Definition: CreatureData.h:216
@ CREATURE_STATIC_FLAG_5_CAN_DROP_LOOT_WHILE_IN_A_CHALLENGE_MODE_INSTANCE
Definition: CreatureData.h:215
@ CREATURE_STATIC_FLAG_5_CLOSE_IN_ON_UNPATHABLE_TARGET
Definition: CreatureData.h:211
@ CREATURE_STATIC_FLAG_5_UNINTERACTIBLE_IF_HOSTILE
Definition: CreatureData.h:192
@ CREATURE_STATIC_FLAG_5_HIDE_HEALTH_BAR_UNDER_TOOLTIP
Definition: CreatureData.h:202
@ CREATURE_STATIC_FLAG_5_DISABLES_XP_AWARD
Definition: CreatureData.h:193
@ CREATURE_STATIC_FLAG_5_NO_PET_UNIT_FRAME
Definition: CreatureData.h:219
@ CREATURE_STATIC_FLAG_5_SUPPRESS_HIGHLIGHT_WHEN_TARGETED_OR_MOUSED_OVER
Definition: CreatureData.h:203
@ CREATURE_STATIC_FLAG_5_NEVER_EVADE
Definition: CreatureData.h:207
@ CREATURE_STATIC_FLAG_5_PREDICTIVE_POWER_REGEN
Definition: CreatureData.h:200
@ CREATURE_STATIC_FLAG_5_DONT_DISMISS_ON_FLYING_MOUNT
Definition: CreatureData.h:199
@ CREATURE_STATIC_FLAG_5_HIDE_LEVEL_INFO_IN_TOOLTIP
Definition: CreatureData.h:201
@ CREATURE_STATIC_FLAG_5_CLIENT_LOCAL_CREATURE
Definition: CreatureData.h:214
@ CREATURE_STATIC_FLAG_5_UNTARGETABLE_BY_CLIENT
Definition: CreatureData.h:190
@ CREATURE_STATIC_FLAG_5_NO_INTERACT_ON_LEFT_CLICK
Definition: CreatureData.h:220
@ CREATURE_STATIC_FLAG_5_NO_LEAVECOMBAT_STATE_RESTORE
Definition: CreatureData.h:195
@ CREATURE_STATIC_FLAG_5_INTERACT_WHILE_HOSTILE
Definition: CreatureData.h:198
@ CREATURE_STATIC_FLAG_5_GIVE_CRITERIA_KILL_CREDIT_WHEN_CHARMED
Definition: CreatureData.h:221
@ CREATURE_STATIC_FLAG_5_AI_PREFER_PATHABLE_TARGETS
Definition: CreatureData.h:204
@ CREATURE_STATIC_FLAG_5_DONT_GO_BEHIND_ME
Definition: CreatureData.h:212
@ CREATURE_STATIC_FLAG_5_ASSIGN_KILL_CREDIT_TO_ENCOUNTER_LIST
Definition: CreatureData.h:206
@ CREATURE_STATIC_FLAG_5_240_DEGREE_BACK_ARC
Definition: CreatureData.h:197
@ CREATURE_STATIC_FLAG_5_BYPASS_INTERACT_INTERRUPTS
Definition: CreatureData.h:196
@ CREATURE_STATIC_FLAG_5_AI_IGNORE_LOS_TO_MELEE_TARGET
Definition: CreatureData.h:209
@ CREATURE_STATIC_FLAG_5_FREQUENT_AREA_TRIGGER_CHECKS
Definition: CreatureData.h:205
@ CREATURE_STATIC_FLAG_5_FORCE_SELF_MOUNTING
Definition: CreatureData.h:191
@ CREATURE_STATIC_FLAG_5_NO_TEXT_IN_CHAT_BUBBLE
Definition: CreatureData.h:210
CreatureStaticFlags8
Definition: CreatureData.h:283
@ CREATURE_STATIC_FLAG_8_USE_2D_CHASING_CALCULATION
Definition: CreatureData.h:285
@ CREATURE_STATIC_FLAG_8_FORCE_CLOSE_IN_ON_PATH_FAIL_BEHAVIOR
Definition: CreatureData.h:284
@ CREATURE_STATIC_FLAG_8_USE_FAST_CLASSIC_HEARTBEAT
Definition: CreatureData.h:286
const uint32 MAX_CREATURE_NAMES
Definition: CreatureData.h:418
CreatureStaticFlags7
Definition: CreatureData.h:265
@ CREATURE_STATIC_FLAG_7_TREAT_AS_PLAYER_FOR_ISPLAYERCONTROLLED
Definition: CreatureData.h:273
@ CREATURE_STATIC_FLAG_7_INTERACT_ONLY_ON_QUEST
Definition: CreatureData.h:275
@ CREATURE_STATIC_FLAG_7_GENERATE_NO_THREAT_OR_DAMAGE
Definition: CreatureData.h:274
@ CREATURE_STATIC_FLAG_7_ONLY_TARGETABLE_BY_CREATOR
Definition: CreatureData.h:272
@ CREATURE_STATIC_FLAG_7_AI_ADDITIONAL_PATHING
Definition: CreatureData.h:277
@ CREATURE_STATIC_FLAG_7_DISABLE_KILL_CREDIT_FOR_OFFLINE_PLAYERS
Definition: CreatureData.h:276
@ CREATURE_STATIC_FLAG_7_IMPORTANT_NPC
Definition: CreatureData.h:266
@ CREATURE_STATIC_FLAG_7_NO_AUTOMATIC_COMBAT_ANCHOR
Definition: CreatureData.h:271
@ CREATURE_STATIC_FLAG_7_LARGE_NAMEPLATE
Definition: CreatureData.h:268
@ CREATURE_STATIC_FLAG_7_AI_ENEMIES_DONT_BACKUP_WHEN_I_GET_ROOTED
Definition: CreatureData.h:270
@ CREATURE_STATIC_FLAG_7_IMPORTANT_QUEST_NPC
Definition: CreatureData.h:267
@ CREATURE_STATIC_FLAG_7_TRIVIAL_PET
Definition: CreatureData.h:269
CreatureRandomMovementType
Definition: CreatureData.h:385
DEFINE_ENUM_FLAG(CreatureStaticFlags)
const uint32 CREATURE_NOPATH_EVADE_TIME
Definition: CreatureData.h:414
CreatureStaticFlags3
Definition: CreatureData.h:113
@ CREATURE_STATIC_FLAG_3_FACTION_LEADER
Definition: CreatureData.h:134
@ CREATURE_STATIC_FLAG_3_FOREVER_CORPSE_DURATION
Definition: CreatureData.h:141
@ CREATURE_STATIC_FLAG_3_AI_CAN_AUTO_LAND_IN_COMBAT
Definition: CreatureData.h:145
@ CREATURE_STATIC_FLAG_3_CHECKS_LIQUIDS
Definition: CreatureData.h:128
@ CREATURE_STATIC_FLAG_3_EXTENDED_CORPSE_DURATION
Definition: CreatureData.h:121
@ CREATURE_STATIC_FLAG_3_CAN_BE_MULTITAPPED
Definition: CreatureData.h:137
@ CREATURE_STATIC_FLAG_3_SKIN_WITH_ENGINEERING
Definition: CreatureData.h:118
@ CREATURE_STATIC_FLAG_3_LINK_ALL
Definition: CreatureData.h:143
@ CREATURE_STATIC_FLAG_3_NO_DAMAGE_HISTORY
Definition: CreatureData.h:114
@ CREATURE_STATIC_FLAG_3_IMMUNE_TO_PLAYER_BUFFS
Definition: CreatureData.h:135
@ CREATURE_STATIC_FLAG_3_PETS_ATTACK_WITH_3D_PATHING
Definition: CreatureData.h:142
@ CREATURE_STATIC_FLAG_3_USE_MODEL_COLLISION_SIZE
Definition: CreatureData.h:130
@ CREATURE_STATIC_FLAG_3_SPELL_CLICK_FOR_PARTY_ONLY
Definition: CreatureData.h:133
@ CREATURE_STATIC_FLAG_3_ATTACKER_IGNORES_FACING
Definition: CreatureData.h:131
@ CREATURE_STATIC_FLAG_3_TAMEABLE_EXOTIC
Definition: CreatureData.h:123
@ CREATURE_STATIC_FLAG_3_NO_AGGRO_ON_LEASH
Definition: CreatureData.h:119
@ CREATURE_STATIC_FLAG_3_INFINITE_AOI
Definition: CreatureData.h:125
@ CREATURE_STATIC_FLAG_3_DO_NOT_PLAY_MOUNTED_ANIMATIONS
Definition: CreatureData.h:138
@ CREATURE_STATIC_FLAG_3_NO_FRIENDLY_AREA_AURAS
Definition: CreatureData.h:120
@ CREATURE_STATIC_FLAG_3_ENEMY_CHECK_IGNORES_LOS
Definition: CreatureData.h:140
@ CREATURE_STATIC_FLAG_3_ALLOW_INTERACTION_WHILE_IN_COMBAT
Definition: CreatureData.h:132
@ CREATURE_STATIC_FLAG_3_DO_NOT_FADE_IN
Definition: CreatureData.h:116
@ CREATURE_STATIC_FLAG_3_MASK_UID
Definition: CreatureData.h:117
@ CREATURE_STATIC_FLAG_3_NO_NAME_PLATE
Definition: CreatureData.h:127
@ CREATURE_STATIC_FLAG_3_CANNOT_TURN
Definition: CreatureData.h:139
@ CREATURE_STATIC_FLAG_3_CANNOT_PENETRATE_WATER
Definition: CreatureData.h:126
@ CREATURE_STATIC_FLAG_3_AI_CAN_AUTO_TAKEOFF_IN_COMBAT
Definition: CreatureData.h:144
@ CREATURE_STATIC_FLAG_3_CANNOT_SWIM
Definition: CreatureData.h:122
@ CREATURE_STATIC_FLAG_3_GIGANTIC_AOI
Definition: CreatureData.h:124
@ CREATURE_STATIC_FLAG_3_NO_THREAT_FEEDBACK
Definition: CreatureData.h:129
@ CREATURE_STATIC_FLAG_3_DONT_PVP_ENABLE_OWNER
Definition: CreatureData.h:115
@ CREATURE_STATIC_FLAG_3_COLLIDE_WITH_MISSILES
Definition: CreatureData.h:136
CreatureStaticFlags2
Definition: CreatureData.h:75
@ CREATURE_STATIC_FLAG_2_IGNORE_FEIGN_DEATH
Definition: CreatureData.h:84
@ CREATURE_STATIC_FLAG_2_RETURN_SOUL_SHARD_TO_MASTER_OF_PET
Definition: CreatureData.h:89
@ CREATURE_STATIC_FLAG_2_DOES_NOT_REDUCE_REPUTATION_FOR_RAIDS
Definition: CreatureData.h:99
@ CREATURE_STATIC_FLAG_2_CAN_SAFE_FALL
Definition: CreatureData.h:104
@ CREATURE_STATIC_FLAG_2_PVP_ENABLING_OOC
Definition: CreatureData.h:95
@ CREATURE_STATIC_FLAG_2_ACTION_TRIGGERS_WHILE_CHARMED
Definition: CreatureData.h:86
@ CREATURE_STATIC_FLAG_2_IGNORE_SANCTUARY
Definition: CreatureData.h:85
@ CREATURE_STATIC_FLAG_2_NO_WOUNDED_SLOWDOWN
Definition: CreatureData.h:82
@ CREATURE_STATIC_FLAG_2_SKIN_WITH_MINING
Definition: CreatureData.h:91
@ CREATURE_STATIC_FLAG_2_SERVER_ONLY
Definition: CreatureData.h:103
@ CREATURE_STATIC_FLAG_2_HIDE_BODY
Definition: CreatureData.h:101
@ CREATURE_STATIC_FLAG_2_NO_INTERRUPT_SCHOOL_COOLDOWN
Definition: CreatureData.h:88
@ CREATURE_STATIC_FLAG_2_SPAWN_DEFENSIVE
Definition: CreatureData.h:102
@ CREATURE_STATIC_FLAG_2_USE_CREATOR_BONUSES
Definition: CreatureData.h:83
@ CREATURE_STATIC_FLAG_2_IGNORE_MISDIRECTION
Definition: CreatureData.h:100
@ CREATURE_STATIC_FLAG_2_FORCE_PARTY_MEMBERS_INTO_COMBAT
Definition: CreatureData.h:77
@ CREATURE_STATIC_FLAG_2_NO_SKILL_GAINS
Definition: CreatureData.h:106
@ CREATURE_STATIC_FLAG_2_ALERT_CONTENT_TEAM_ON_DEATH
Definition: CreatureData.h:92
@ CREATURE_STATIC_FLAG_2_ALLOW_MOUNTED_COMBAT
Definition: CreatureData.h:94
@ CREATURE_STATIC_FLAG_2_INTERACT_WHILE_DEAD
Definition: CreatureData.h:87
@ CREATURE_STATIC_FLAG_2_NO_OWNER_THREAT
Definition: CreatureData.h:81
@ CREATURE_STATIC_FLAG_2_SKIN_WITH_HERBALISM
Definition: CreatureData.h:90
@ CREATURE_STATIC_FLAG_2_CAN_ASSIST
Definition: CreatureData.h:105
@ CREATURE_STATIC_FLAG_2_NO_PET_BAR
Definition: CreatureData.h:107
@ CREATURE_STATIC_FLAG_2_NO_CRUSHING_BLOWS
Definition: CreatureData.h:80
@ CREATURE_STATIC_FLAG_2_FULL_SPELL_LIST
Definition: CreatureData.h:98
@ CREATURE_STATIC_FLAG_2_IGNORE_PATHING_FAILURE
Definition: CreatureData.h:97
@ CREATURE_STATIC_FLAG_2_LOCK_TAPPERS_TO_RAID_ON_DEATH
Definition: CreatureData.h:78
@ CREATURE_STATIC_FLAG_2_ALERT_CONTENT_TEAM_AT_90_PCT_HP
Definition: CreatureData.h:93
@ CREATURE_STATIC_FLAG_2_SPELL_ATTACKABLE
Definition: CreatureData.h:79
@ CREATURE_STATIC_FLAG_2_NO_DEATH_MESSAGE
Definition: CreatureData.h:96
@ CREATURE_STATIC_FLAG_2_NO_PET_SCALING
Definition: CreatureData.h:76
const uint32 MAX_CREATURE_SPELLS
Definition: CreatureData.h:419
const uint32 PET_FOCUS_REGEN_INTERVAL
Definition: CreatureData.h:413
InhabitTypeValues
Definition: CreatureData.h:622
@ INHABIT_AIR
Definition: CreatureData.h:625
@ INHABIT_WATER
Definition: CreatureData.h:624
@ INHABIT_GROUND
Definition: CreatureData.h:623
@ INHABIT_ANYWHERE
Definition: CreatureData.h:627
@ INHABIT_ROOT
Definition: CreatureData.h:626
const uint32 MAX_CREATURE_MODELS
Definition: CreatureData.h:417
Difficulty
Definition: DBCEnums.h:873
#define TC_GAME_API
Definition: Define.h:123
uint8_t uint8
Definition: Define.h:144
int16_t int16
Definition: Define.h:139
int8_t int8
Definition: Define.h:140
int32_t int32
Definition: Define.h:138
uint64_t uint64
Definition: Define.h:141
uint16_t uint16
Definition: Define.h:143
uint32_t uint32
Definition: Define.h:142
uint16 flags
Definition: DisableMgr.cpp:49
VisibilityDistanceType
Definition: ObjectDefines.h:50
std::optional< T > Optional
Optional helper class to wrap optional values within.
Definition: Optional.h:25
#define CURRENT_EXPANSION
CreatureFamily
@ CREATURE_FAMILY_NONE
@ CREATURE_TYPE_BEAST
CreatureClassifications
@ MAX_SPELL_SCHOOL
@ EXPANSION_LEVEL_CURRENT
Definition: SharedDefines.h:89
@ CREATURE_TYPE_FLAG_SKIN_WITH_ENGINEERING
@ CREATURE_TYPE_FLAG_SKIN_WITH_HERBALISM
@ CREATURE_TYPE_FLAG_TAMEABLE
@ CREATURE_TYPE_FLAG_TAMEABLE_EXOTIC
@ CREATURE_TYPE_FLAG_SKIN_WITH_MINING
SkillType
@ SKILL_MINING
@ SKILL_ENGINEERING
@ SKILL_SKINNING
@ SKILL_HERBALISM
@ SPAWN_TYPE_CREATURE
Definition: SpawnData.h:34
#define MAX_EQUIPMENT_ITEMS
Definition: UnitDefines.h:37
bool HasFlag(CreatureStaticFlags4 flag) const
Definition: CreatureData.h:305
EnumFlag< CreatureStaticFlags3 > _flags3
Definition: CreatureData.h:323
void ApplyFlag(CreatureStaticFlags3 flag, bool apply)
Definition: CreatureData.h:313
bool HasFlag(CreatureStaticFlags3 flag) const
Definition: CreatureData.h:304
EnumFlag< CreatureStaticFlags8 > _flags8
Definition: CreatureData.h:328
EnumFlag< CreatureStaticFlags > _flags
Definition: CreatureData.h:321
bool HasFlag(CreatureStaticFlags5 flag) const
Definition: CreatureData.h:306
bool HasFlag(CreatureStaticFlags flag) const
Definition: CreatureData.h:302
void ApplyFlag(CreatureStaticFlags7 flag, bool apply)
Definition: CreatureData.h:317
EnumFlag< CreatureStaticFlags7 > _flags7
Definition: CreatureData.h:327
bool HasFlag(CreatureStaticFlags8 flag) const
Definition: CreatureData.h:309
void ApplyFlag(CreatureStaticFlags flag, bool apply)
Definition: CreatureData.h:311
void ApplyFlag(CreatureStaticFlags6 flag, bool apply)
Definition: CreatureData.h:316
void ApplyFlag(CreatureStaticFlags2 flag, bool apply)
Definition: CreatureData.h:312
bool HasFlag(CreatureStaticFlags2 flag) const
Definition: CreatureData.h:303
bool HasFlag(CreatureStaticFlags7 flag) const
Definition: CreatureData.h:308
bool HasFlag(CreatureStaticFlags6 flag) const
Definition: CreatureData.h:307
CreatureStaticFlagsHolder(CreatureStaticFlags flags=CreatureStaticFlags(), CreatureStaticFlags2 flags2=CreatureStaticFlags2(), CreatureStaticFlags3 flags3=CreatureStaticFlags3(), CreatureStaticFlags4 flags4=CreatureStaticFlags4(), CreatureStaticFlags5 flags5=CreatureStaticFlags5(), CreatureStaticFlags6 flags6=CreatureStaticFlags6(), CreatureStaticFlags7 flags7=CreatureStaticFlags7(), CreatureStaticFlags8 flags8=CreatureStaticFlags8())
Definition: CreatureData.h:294
void ApplyFlag(CreatureStaticFlags5 flag, bool apply)
Definition: CreatureData.h:315
EnumFlag< CreatureStaticFlags5 > _flags5
Definition: CreatureData.h:325
void ApplyFlag(CreatureStaticFlags4 flag, bool apply)
Definition: CreatureData.h:314
EnumFlag< CreatureStaticFlags6 > _flags6
Definition: CreatureData.h:326
EnumFlag< CreatureStaticFlags2 > _flags2
Definition: CreatureData.h:322
EnumFlag< CreatureStaticFlags4 > _flags4
Definition: CreatureData.h:324
void ApplyFlag(CreatureStaticFlags8 flag, bool apply)
Definition: CreatureData.h:318
constexpr bool HasFlag(T flag) const
Definition: EnumFlag.h:106
void apply(T *val)
Definition: ByteConverter.h:41
std::string ToString(Type &&val, Params &&... params)
std::vector< uint32 > auras
Definition: CreatureData.h:646
uint16 meleeAnimKit
Definition: CreatureData.h:645
uint16 movementAnimKit
Definition: CreatureData.h:644
uint16 aiAnimKit
Definition: CreatureData.h:643
VisibilityDistanceType visibilityDistanceType
Definition: CreatureData.h:647
uint32 RangedAttackPower
Definition: CreatureData.h:561
float wander_distance
Definition: CreatureData.h:593
Optional< uint64 > npcflag
Definition: CreatureData.h:598
uint8 movementType
Definition: CreatureData.h:597
Optional< CreatureModel > display
Definition: CreatureData.h:591
uint32 curhealth
Definition: CreatureData.h:595
uint32 curmana
Definition: CreatureData.h:596
Optional< uint32 > unit_flags2
Definition: CreatureData.h:600
uint32 currentwaypoint
Definition: CreatureData.h:594
Optional< uint32 > unit_flags3
Definition: CreatureData.h:601
Optional< uint32 > unit_flags
Definition: CreatureData.h:599
SkillType GetRequiredLootSkill() const
Definition: CreatureData.h:464
int32 GetHealthScalingExpansion() const
Definition: CreatureData.h:459
CreatureStaticFlagsHolder StaticFlags
Definition: CreatureData.h:456
int32 HealthScalingExpansion
Definition: CreatureData.h:442
std::vector< std::string > Title
Definition: CreatureData.h:571
std::vector< std::string > Name
Definition: CreatureData.h:569
std::vector< std::string > TitleAlt
Definition: CreatureData.h:572
std::vector< std::string > NameAlt
Definition: CreatureData.h:570
uint32 displayId_other_gender
Definition: CreatureData.h:609
CreatureModel(uint32 creatureDisplayID, float displayScale, float probability)
Definition: CreatureData.h:429
uint32 CreatureDisplayID
Definition: CreatureData.h:432
static CreatureModel const DefaultVisibleModel
Definition: CreatureData.h:424
static CreatureModel const DefaultInvisibleModel
Definition: CreatureData.h:423
float DisplayScale
Definition: CreatureData.h:433
CreatureRandomMovementType Random
Definition: CreatureData.h:399
CreatureChaseMovementType GetChase() const
Definition: CreatureData.h:402
uint32 GetInteractionPauseTimer() const
Definition: CreatureData.h:407
CreatureChaseMovementType Chase
Definition: CreatureData.h:398
CreatureRandomMovementType GetRandom() const
Definition: CreatureData.h:403
bool IsHoverInitiallyEnabled() const
Definition: CreatureData.h:405
Optional< uint32 > CreatureIDVisibleToSummoner
Definition: CreatureData.h:615
Optional< uint32 > GroundMountDisplayID
Definition: CreatureData.h:616
Optional< std::vector< uint32 > > DespawnOnQuestsRemoved
Definition: CreatureData.h:618
Optional< uint32 > FlyingMountDisplayID
Definition: CreatureData.h:617
uint32 RangeAttackTime
Definition: CreatureData.h:500
std::string TitleAlt
Definition: CreatureData.h:486
CreatureClassifications Classification
Definition: CreatureData.h:497
std::string SubName
Definition: CreatureData.h:485
int32 CreatureImmunitiesId
Definition: CreatureData.h:522
CreatureFamily family
Definition: CreatureData.h:507
std::string Name
Definition: CreatureData.h:483
std::string StringId
Definition: CreatureData.h:525
std::vector< uint32 > GossipMenuIds
Definition: CreatureData.h:488
CreatureMovementData Movement
Definition: CreatureData.h:515
bool IsExotic(CreatureDifficulty const *creatureDifficulty) const
Definition: CreatureData.h:536
uint32 RequiredExpansion
Definition: CreatureData.h:490
int32 WidgetSetUnitConditionID
Definition: CreatureData.h:520
std::vector< CreatureModel > Models
Definition: CreatureData.h:482
std::unordered_map< Difficulty, CreatureDifficulty > difficultyStore
Definition: CreatureData.h:489
std::string FemaleName
Definition: CreatureData.h:484
std::string AIName
Definition: CreatureData.h:513
bool IsTameable(bool canTameExotic, CreatureDifficulty const *creatureDifficulty) const
Definition: CreatureData.h:541
std::string IconName
Definition: CreatureData.h:487
uint16 AppearanceModId
Definition: CreatureData.h:578
uint16 ItemVisual
Definition: CreatureData.h:579
std::vector< VendorItem > m_items
Definition: CreatureData.h:667
uint32 GetItemCount() const
Definition: CreatureData.h:677
VendorItem const * GetItem(uint32 slot) const
Definition: CreatureData.h:669
VendorItem const * FindItemCostPair(uint32 item_id, uint32 extendedCost, uint8 type) const
Definition: Creature.cpp:91
void AddItem(VendorItem vItem)
Definition: CreatureData.h:678
bool Empty() const
Definition: CreatureData.h:676
bool RemoveItem(uint32 item_id, uint8 type)
Definition: Creature.cpp:79
uint32 ExtendedCost
Definition: CreatureData.h:658
bool IgnoreFiltering
Definition: CreatureData.h:662
uint32 PlayerConditionId
Definition: CreatureData.h:661
uint32 item
Definition: CreatureData.h:655
uint32 maxcount
Definition: CreatureData.h:656
std::vector< int32 > BonusListIDs
Definition: CreatureData.h:660
uint32 incrtime
Definition: CreatureData.h:657