Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
Creature.h
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#ifndef SKYFIRESERVER_CREATURE_H
7#define SKYFIRESERVER_CREATURE_H
8
9#include "Cell.h"
10#include "Common.h"
11#include "DatabaseEnv.h"
12#include "ItemPrototype.h"
13#include "LootMgr.h"
14#include "Unit.h"
15#include "UpdateMask.h"
16
17#include <list>
18
19class CreatureAI;
20class CreatureGroup;
21class Group;
22class Quest;
23class Player;
24class SpellInfo;
25class WorldSession;
26
28{
29 CREATURE_FLAG_EXTRA_INSTANCE_BIND = 0x00000001, // creature kill bind instance with killer and killer's group
30 CREATURE_FLAG_EXTRA_CIVILIAN = 0x00000002, // not aggro (ignore faction/reputation hostility)
31 CREATURE_FLAG_EXTRA_NO_PARRY = 0x00000004, // creature can't parry
32 CREATURE_FLAG_EXTRA_NO_PARRY_HASTEN = 0x00000008, // creature can't counter-attack at parry
33 CREATURE_FLAG_EXTRA_NO_BLOCK = 0x00000010, // creature can't block
34 CREATURE_FLAG_EXTRA_NO_CRUSH = 0x00000020, // creature can't do crush attacks
35 CREATURE_FLAG_EXTRA_NO_XP_AT_KILL = 0x00000040, // creature kill not provide XP
36 CREATURE_FLAG_EXTRA_TRIGGER = 0x00000080, // trigger creature
37 CREATURE_FLAG_EXTRA_NO_TAUNT = 0x00000100, // creature is immune to taunt auras and effect attack me
38 CREATURE_FLAG_EXTRA_WORLDEVENT = 0x00004000, // custom flag for world event creatures (left room for merging)
39 CREATURE_FLAG_EXTRA_GUARD = 0x00008000, // Creature is guard
40 CREATURE_FLAG_EXTRA_NO_CRIT = 0x00020000, // creature can't do critical strikes
41 CREATURE_FLAG_EXTRA_NO_SKILLGAIN = 0x00040000, // creature won't increase weapon skills
42 CREATURE_FLAG_EXTRA_TAUNT_DIMINISH = 0x00080000, // Taunt is a subject to diminishing returns on this creautre
43 CREATURE_FLAG_EXTRA_ALL_DIMINISH = 0x00100000, // Creature is subject to all diminishing returns as player are
44 CREATURE_FLAG_EXTRA_DUNGEON_BOSS = 0x10000000 // creature is a dungeon boss (SET DYNAMICALLY, DO NOT ADD IN DB)
45};
46
47#define CREATURE_FLAG_EXTRA_DB_ALLOWED (CREATURE_FLAG_EXTRA_INSTANCE_BIND | CREATURE_FLAG_EXTRA_CIVILIAN | \
48 CREATURE_FLAG_EXTRA_NO_PARRY | CREATURE_FLAG_EXTRA_NO_PARRY_HASTEN | CREATURE_FLAG_EXTRA_NO_BLOCK | \
49 CREATURE_FLAG_EXTRA_NO_CRUSH | CREATURE_FLAG_EXTRA_NO_XP_AT_KILL | CREATURE_FLAG_EXTRA_TRIGGER | \
50 CREATURE_FLAG_EXTRA_NO_TAUNT | CREATURE_FLAG_EXTRA_WORLDEVENT | CREATURE_FLAG_EXTRA_NO_CRIT | \
51 CREATURE_FLAG_EXTRA_NO_SKILLGAIN | CREATURE_FLAG_EXTRA_TAUNT_DIMINISH | CREATURE_FLAG_EXTRA_ALL_DIMINISH | \
52 CREATURE_FLAG_EXTRA_GUARD)
53
54#define MAX_KILL_CREDIT 2
55#define CREATURE_REGEN_INTERVAL 2 * IN_MILLISECONDS
56
57#define MAX_CREATURE_QUEST_ITEMS 6
58
59#define MAX_EQUIPMENT_ITEMS 3
60
61// from `creature_template` table
63{
71 std::string Name;
72 std::string SubName;
73 std::string IconName;
78 uint32 expansionUnknown; // either 0 or 3, sent to the client / wdb
83 float speed_run;
84 float scale;
86 float mindmg;
87 float maxdmg;
93 uint32 unit_class; // enum Classes. Note only 4 classes are known for creatures.
94 uint32 unit_flags; // enum UnitFlags mask values
95 uint32 unit_flags2; // enum UnitFlags2 mask values
97 uint32 family; // enum CreatureFamily values (optional)
104 uint32 type; // enum CreatureType values
105 uint32 type_flags; // enum CreatureTypeFlags mask values
106 uint32 type_flags2; // unknown enum, only set for 4 creatures (with value 1)
116 std::string AIName;
121 float ModMana;
122 float ModManaExtra; // Added in 4.x, this value is usually 2 for a small group of creatures with double mana
123 float ModArmor;
134
135 // helpers
137 {
139 return SKILL_HERBALISM;
141 return SKILL_MINING;
143 return SKILL_ENGINEERING;
144 else
145 return SKILL_SKINNING; // normal case
146 }
147
148 bool IsExotic() const
149 {
151 }
152
153 bool IsTameable(bool canTameExotic) const
154 {
156 return false;
157
158 // if can tame exotic then can tame any tameable
159 return canTameExotic || !IsExotic();
160 }
161
162 static int32 DiffToDiffIndex(uint32 difficulty)
163 {
164 switch (difficulty)
165 {
166 case DIFFICULTY_NONE:
169 case DIFFICULTY_40MAN:
170 return -1;
173 return 0;
176 return 1;
178 return 2;
180 default:
181 return -1;
182 }
183 }
184};
185
186// Benchmarked: Faster than std::map (insert/find)
188
189// GCC have alternative #pragma pack(N) syntax and old gcc version not support pack(push, N), also any gcc version not support it at some platform
190#if defined(__GNUC__)
191#pragma pack(1)
192#else
193#pragma pack(push, 1)
194#endif
195
196// Defines base stats for creatures (used to calculate HP/mana/armor).
198{
202
203 // Helpers
204
205 uint32 GenerateHealth(CreatureTemplate const* info) const;
206
208 {
209 // Mana can be 0.
210 if (!BaseMana)
211 return 0;
212
213 return uint32(ceil(BaseMana * info->ModMana * info->ModManaExtra));
214 }
215
217 {
218 return uint32(ceil(BaseArmor * info->ModArmor));
219 }
220
221 static CreatureBaseStats const* GetBaseStats(uint8 level, uint8 unitClass);
222};
223
225
231
237
242
247
248// Benchmarked: Faster than std::map (insert/find)
251
252// from `creature` table
282
290
291// Benchmarked: Faster than std::map (insert/find)
293
301
302// Enums used by StringTextData::Type (CreatureEventAI)
314
315// GCC have alternative #pragma pack() syntax and old gcc version not support pack(pop), also any gcc version not support it at some platform
316#if defined(__GNUC__)
317#pragma pack()
318#else
319#pragma pack(pop)
320#endif
321
322// `creature_addon` table
332
334
335// Vendors
337{
338 VendorItem(uint32 _item, int32 _maxcount, uint32 _incrtime, uint32 _ExtendedCost, uint8 _Type)
339 : item(_item), maxcount(_maxcount), incrtime(_incrtime), ExtendedCost(_ExtendedCost), Type(_Type) { }
340
342 uint32 maxcount; // 0 for infinity item amount
343 uint32 incrtime; // time for restore items amount if maxcount != 0
346
347 //helpers
349};
350typedef std::vector<VendorItem*> VendorItemList;
351
353{
355
357 {
358 if (slot >= m_items.size())
359 return NULL;
360
361 return m_items[slot];
362 }
363 bool Empty() const { return m_items.empty(); }
364 uint32 GetItemCount() const { return m_items.size(); }
365 void AddItem(uint32 item, int32 maxcount, uint32 ptime, uint32 ExtendedCost, uint8 type)
366 {
367 m_items.push_back(new VendorItem(item, maxcount, ptime, ExtendedCost, type));
368 }
369 bool RemoveItem(uint32 item_id, uint8 type);
370 VendorItem const* FindItemCostPair(uint32 item_id, uint32 extendedCost, uint8 type) const;
371 void Clear()
372 {
373 for (VendorItemList::const_iterator itr = m_items.begin(); itr != m_items.end(); ++itr)
374 delete (*itr);
375 m_items.clear();
376 }
377};
378
380{
381 explicit VendorItemCount(uint32 _item, uint32 _count)
382 : itemId(_item), count(_count), lastIncrementTime(time(NULL)) { }
383
387};
388
389typedef std::list<VendorItemCount> VendorItemCounts;
390
405
407
409{
412
414 uint32 trainerType; // trainer type based at trainer spells, can be different from creature_template value.
415 // req. for correct show non-prof. trainers like weaponmaster, allowed values 0 and 2.
416 TrainerSpell const* Find(uint32 spell_id) const;
417};
418
419typedef std::map<uint32, time_t> CreatureSpellCooldowns;
420
421// max different by z coordinate for creature aggro reaction
422#define CREATURE_Z_ATTACK_RANGE 3
423
424#define MAX_VENDOR_ITEMS 150 // Limitation in 4.x.x item count in SMSG_LIST_INVENTORY
425
426class Creature : public Unit, public GridObject<Creature>, public MapObject
427{
428public:
429 explicit Creature(bool isWorldObject = false);
430 virtual ~Creature();
431
432 void AddToWorld() OVERRIDE;
434
435 void SetObjectScale(float scale) OVERRIDE;
436 void SetDisplayId(uint32 modelId) OVERRIDE;
437
438 void DisappearAndDie();
439
440 bool Create(uint32 guidlow, Map* map, uint32 Entry, uint32 vehId, uint32 team, float x, float y, float z, float ang, const CreatureData* data = NULL);
441 bool LoadCreaturesAddon(bool reload = false);
442 void SelectLevel(const CreatureTemplate* cinfo);
443 void LoadEquipment(int8 id = 1, bool force = false);
444
446
447 void Update(uint32 time) OVERRIDE; // overwrited Unit::Update
448 void GetRespawnPosition(float& x, float& y, float& z, float* ori = NULL, float* dist = NULL) const;
449
450 void SetCorpseDelay(uint32 delay) { m_corpseDelay = delay; }
457 bool CanSwim() const { return GetCreatureTemplate()->InhabitType & INHABIT_WATER || IsPet(); }
459
462 bool HasReactState(ReactStates state) const { return (m_reactState == state); }
464
466 bool isCanInteractWithBattleMaster(Player* player, bool msg) const;
467 bool isCanTrainingAndResetTalentsOf(Player* player) const;
468 bool CanCreatureAttack(Unit const* victim, bool force = true) const;
469 bool IsImmunedToSpell(SpellInfo const* spellInfo) const OVERRIDE; // override Unit::IsImmunedToSpell
470 bool IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index) const OVERRIDE; // override Unit::IsImmunedToSpellEffect
471 bool isElite() const;
472 bool isWorldBoss() const;
473
474 bool IsDungeonBoss() const;
475
476 uint8 getLevelForTarget(WorldObject const* target) const OVERRIDE; // overwrite Unit::getLevelForTarget for boss level support
477
479
480 bool AIM_Initialize(CreatureAI* ai = NULL);
481 void Motion_Initialize();
482
483 CreatureAI* AI() const { return (CreatureAI*)i_AI; }
484
487
488 void _AddCreatureSpellCooldown(uint32 spell_id, time_t end_time);
489 void _AddCreatureCategoryCooldown(uint32 category, time_t apply_time);
490 void AddCreatureSpellCooldown(uint32 spellid);
491 bool HasSpellCooldown(uint32 spell_id) const;
492 bool HasCategoryCooldown(uint32 spell_id) const;
494 virtual void ProhibitSpellSchool(SpellSchoolMask idSchoolMask, uint32 unTimeMs) OVERRIDE;
495
496 bool HasSpell(uint32 spellID) const OVERRIDE;
497
498 bool UpdateEntry(uint32 entry, uint32 team = ALLIANCE, const CreatureData* data = NULL);
499
500 void UpdateMovementFlags();
501 void SetFlying(bool enable);
502
503 bool UpdateStats(Stats stat) OVERRIDE;
505 void UpdateResistances(uint32 school) OVERRIDE;
506 void UpdateArmor() OVERRIDE;
508 void UpdateMaxPower(Powers power) OVERRIDE;
509 void UpdateAttackPowerAndDamage(bool ranged = false) OVERRIDE;
511
515
516 float GetSpellDamageMod(int32 Rank) const;
517
518 VendorItemData const* GetVendorItems() const;
520 uint32 UpdateVendorItemCurrentCount(VendorItem const* vItem, uint32 used_count);
521
522 TrainerSpellData const* GetTrainerSpells() const;
523
525 CreatureData const* GetCreatureData() const { return m_creatureData; }
526 CreatureAddon const* GetCreatureAddon() const;
527
528 std::string GetAIName() const;
529 std::string GetScriptName() const;
530 uint32 GetScriptId() const;
531
532 // override WorldObject function for proper name localization
533 std::string const& GetNameForLocaleIdx(LocaleConstant locale_idx) const OVERRIDE;
534
535 void setDeathState(DeathState s) OVERRIDE; // override virtual Unit::setDeathState
536
537 bool LoadFromDB(uint32 guid, Map* map) { return LoadCreatureFromDB(guid, map, false); }
538 bool LoadCreatureFromDB(uint32 guid, Map* map, bool addToMap = true);
539 void SaveToDB();
540 // overriden in Pet
541 virtual void SaveToDB(uint32 mapid, uint32 spawnMask);
542 virtual void DeleteFromDB(); // overriden in Pet
543
547 Player* GetLootRecipient() const;
550 bool isTappedBy(Player const* player) const; // return true if the creature is tapped by the player or a member of his party.
551
552 void SetLootRecipient(Unit* unit);
554
555 uint16 GetLootMode() const { return m_LootMode; }
556 bool HasLootMode(uint16 lootMode) const { return m_LootMode & lootMode; }
557 void SetLootMode(uint16 lootMode) { m_LootMode = lootMode; }
558 void AddLootMode(uint16 lootMode) { m_LootMode |= lootMode; }
559 void RemoveLootMode(uint16 lootMode) { m_LootMode &= ~lootMode; }
561
562 SpellInfo const* reachWithSpellAttack(Unit* victim);
563 SpellInfo const* reachWithSpellCure(Unit* victim);
564
568
569 bool CanStartAttack(Unit const* u, bool force) const;
570 float GetAttackDistance(Unit const* player) const;
571 float GetAggroRange(Unit const* target) const;
572
573 void SendAIReaction(AiReaction reactionType);
574
575 Unit* SelectNearestTarget(float dist = 0, bool playerOnly = false) const;
576 Unit* SelectNearestTargetInAttackDistance(float dist = 0) const;
577 Player* SelectNearestPlayer(float distance = 0) const;
578 Unit* SelectNearestHostileUnitInAggroRange(bool useLOS = false) const;
579
581 void CallForHelp(float fRadius);
582 void CallAssistance();
586 bool CanAssistTo(const Unit* u, const Unit* enemy, bool checkfaction = true) const;
587 bool _IsTargetAcceptable(const Unit* target) const;
588
591
592 void RemoveCorpse(bool setSpawnTime = true);
593
594 void DespawnOrUnsummon(uint32 msTimeToDespawn = 0);
595
596 time_t const& GetRespawnTime() const { return m_respawnTime; }
597 time_t GetRespawnTimeEx() const;
598 void SetRespawnTime(uint32 respawn) { m_respawnTime = respawn ? time(NULL) + respawn : 0; }
599 void Respawn(bool force = false);
601
603 void SetRespawnDelay(uint32 delay) { m_respawnDelay = delay; }
604
605 float GetRespawnRadius() const { return m_respawnradius; }
606 void SetRespawnRadius(float dist) { m_respawnradius = dist; }
607
608 uint32 m_groupLootTimer; // (msecs)timer used for group loot
609 uint32 lootingGroupLowGUID; // used to find group which is looting corpse
610
611 void SendZoneUnderAttackMessage(Player* attacker);
612
613 void SetInCombatWithZone();
614
615 bool hasQuest(uint32 quest_id) const OVERRIDE;
616 bool hasInvolvedQuest(uint32 quest_id) const OVERRIDE;
617
618 bool isRegeneratingHealth() const { return m_regenHealth; }
619 void setRegeneratingHealth(bool regenHealth) { m_regenHealth = regenHealth; }
620 virtual uint8 GetPetAutoSpellSize() const { return MAX_SPELL_CHARM; }
621 virtual uint32 GetPetAutoSpellOnPos(uint8 pos) const;
622
623 void SetPosition(float x, float y, float z, float o);
624 void SetPosition(const Position& pos) { SetPosition(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation()); }
625
626 void SetHomePosition(float x, float y, float z, float o) { m_homePosition.Relocate(x, y, z, o); }
627 void SetHomePosition(const Position& pos) { m_homePosition.Relocate(pos); }
628 void GetHomePosition(float& x, float& y, float& z, float& ori) const { m_homePosition.GetPosition(x, y, z, ori); }
629 const Position& GetHomePosition() const { return m_homePosition; }
630
631 void SetTransportHomePosition(float x, float y, float z, float o) { m_transportHomePosition.Relocate(x, y, z, o); }
633 void GetTransportHomePosition(float& x, float& y, float& z, float& ori) { m_transportHomePosition.GetPosition(x, y, z, ori); }
635
636 uint32 GetWaypointPath() const { return m_path_id; }
637 void LoadPath(uint32 pathid) { m_path_id = pathid; }
638
640 void UpdateWaypointID(uint32 wpID) { m_waypointID = wpID; }
641
642 void SearchFormation();
644 void SetFormation(CreatureGroup* formation) { m_formation = formation; }
645
647
648 void SetDisableReputationGain(bool disable) { DisableReputationGain = disable; }
651 void LowerPlayerDamageReq(uint32 unDamage);
654
656 void SetOriginalEntry(uint32 entry) { m_originalEntry = entry; }
657
658 static float _GetDamageMod(int32 Rank);
659
661
662 void FarTeleportTo(Map* map, float X, float Y, float Z, float O);
663
664 bool m_isTempWorldObject; //true when possessed
665
666 // Handling caster facing during spellcast
667 void SetTarget(uint64 guid) OVERRIDE;
668 void FocusTarget(Spell const* focusSpell, WorldObject const* target);
669 void ReleaseFocus(Spell const* focusSpell);
670
671protected:
672 bool CreateFromProto(uint32 guidlow, uint32 Entry, uint32 vehId, uint32 team, const CreatureData* data = NULL);
673 bool InitEntry(uint32 entry, uint32 team = ALLIANCE, const CreatureData* data = NULL);
674
675 // vendor items
677
678 static float _GetHealthMod(int32 Rank);
679
682
684 time_t m_corpseRemoveTime; // (msecs)timer for death or corpse disappearance
685 time_t m_respawnTime; // (secs) time of next respawn
686 uint32 m_respawnDelay; // (secs) delay between corpse disappearance and respawning
687 uint32 m_corpseDelay; // (secs) delay between death and corpse disappearance
689
690 ReactStates m_reactState; // for AI, not charmInfo
691 void RegenerateMana();
692 void RegenerateHealth();
693 void Regenerate(Powers power);
698
703
706
709
711
712 CreatureTemplate const* m_creatureInfo; // Can differ from sObjectMgr->GetCreatureTemplate(GetEntry()) in difficulty mode > 0
714
715 uint16 m_LootMode; // Bitmask (default: LOOT_MODE_DEFAULT) that determines what loot will be lootable
717
719 bool CanAlwaysSee(WorldObject const* obj) const OVERRIDE;
720private:
721 void ForcedDespawn(uint32 timeMSToDespawn = 0);
722
723 //WaypointMovementGenerator vars
726
727 //Formation var
730
732};
733
735{
736public:
737 AssistDelayEvent(uint64 victim, Unit& owner) : BasicEvent(), m_victim(victim), m_owner(owner) { }
738
739 bool Execute(uint64 e_time, uint32 p_time) OVERRIDE;
740 void AddAssistant(uint64 guid) { m_assistants.push_back(guid); }
741private:
743
745 std::list<uint64> m_assistants;
747};
748
750{
751public:
753 bool Execute(uint64 e_time, uint32 p_time) OVERRIDE;
754
755private:
757};
758
759#endif
LocaleConstant
Definition Common.h:138
std::vector< std::string > StringVector
Definition Common.h:163
UNORDERED_MAP< uint32, EquipmentInfoContainerInternal > EquipmentInfoContainer
Definition Creature.h:250
#define MAX_KILL_CREDIT
Definition Creature.h:54
UNORDERED_MAP< uint32, CreatureAddon > CreatureAddonContainer
Definition Creature.h:333
CreatureFlagsExtra
Definition Creature.h:28
@ CREATURE_FLAG_EXTRA_NO_BLOCK
Definition Creature.h:33
@ CREATURE_FLAG_EXTRA_TAUNT_DIMINISH
Definition Creature.h:42
@ CREATURE_FLAG_EXTRA_NO_CRIT
Definition Creature.h:40
@ CREATURE_FLAG_EXTRA_DUNGEON_BOSS
Definition Creature.h:44
@ CREATURE_FLAG_EXTRA_TRIGGER
Definition Creature.h:36
@ CREATURE_FLAG_EXTRA_NO_CRUSH
Definition Creature.h:34
@ CREATURE_FLAG_EXTRA_NO_PARRY_HASTEN
Definition Creature.h:32
@ CREATURE_FLAG_EXTRA_INSTANCE_BIND
Definition Creature.h:29
@ CREATURE_FLAG_EXTRA_NO_PARRY
Definition Creature.h:31
@ CREATURE_FLAG_EXTRA_NO_TAUNT
Definition Creature.h:37
@ CREATURE_FLAG_EXTRA_NO_XP_AT_KILL
Definition Creature.h:35
@ CREATURE_FLAG_EXTRA_NO_SKILLGAIN
Definition Creature.h:41
@ CREATURE_FLAG_EXTRA_CIVILIAN
Definition Creature.h:30
@ CREATURE_FLAG_EXTRA_GUARD
Definition Creature.h:39
@ CREATURE_FLAG_EXTRA_ALL_DIMINISH
Definition Creature.h:43
@ CREATURE_FLAG_EXTRA_WORLDEVENT
Definition Creature.h:38
std::list< VendorItemCount > VendorItemCounts
Definition Creature.h:389
UNORDERED_MAP< uint32, CreatureTemplate > CreatureTemplateContainer
Definition Creature.h:187
UNORDERED_MAP< uint32, TrainerSpell > TrainerSpellMap
Definition Creature.h:406
UNORDERED_MAP< uint16, CreatureBaseStats > CreatureBaseStatsContainer
Definition Creature.h:224
#define MAX_CREATURE_QUEST_ITEMS
Definition Creature.h:57
UNORDERED_MAP< uint8, EquipmentInfo > EquipmentInfoContainerInternal
Definition Creature.h:249
ChatType
Definition Creature.h:304
@ CHAT_TYPE_SAY
Definition Creature.h:305
@ CHAT_TYPE_BOSS_WHISPER
Definition Creature.h:310
@ CHAT_TYPE_TEXT_EMOTE
Definition Creature.h:307
@ CHAT_TYPE_BOSS_EMOTE
Definition Creature.h:308
@ CHAT_TYPE_END
Definition Creature.h:312
@ CHAT_TYPE_ZONE_YELL
Definition Creature.h:311
@ CHAT_TYPE_WHISPER
Definition Creature.h:309
@ CHAT_TYPE_YELL
Definition Creature.h:306
UNORDERED_MAP< uint16, CreatureModelInfo > CreatureModelContainer
Definition Creature.h:292
std::map< uint32, time_t > CreatureSpellCooldowns
Definition Creature.h:419
#define MAX_EQUIPMENT_ITEMS
Definition Creature.h:59
std::vector< VendorItem * > VendorItemList
Definition Creature.h:350
InhabitTypeValues
Definition Creature.h:295
@ INHABIT_AIR
Definition Creature.h:298
@ INHABIT_WATER
Definition Creature.h:297
@ INHABIT_GROUND
Definition Creature.h:296
@ INHABIT_ANYWHERE
Definition Creature.h:299
@ DIFFICULTY_NONE
Definition DBCEnums.h:331
@ DIFFICULTY_10MAN_HEROIC
Definition DBCEnums.h:336
@ DIFFICULTY_25MAN_NORMAL
Definition DBCEnums.h:335
@ DIFFICULTY_40MAN
Definition DBCEnums.h:340
@ DIFFICULTY_NORMAL
Definition DBCEnums.h:332
@ DIFFICULTY_CHALLENGE
Definition DBCEnums.h:339
@ DIFFICULTY_HEROIC
Definition DBCEnums.h:333
@ DIFFICULTY_25MAN_LFR
Definition DBCEnums.h:338
@ DIFFICULTY_10MAN_NORMAL
Definition DBCEnums.h:334
@ DIFFICULTY_25MAN_HEROIC
Definition DBCEnums.h:337
#define MAX_SPELL_EFFECTS
std::int32_t int32
Definition Define.h:73
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
std::int8_t int8
Definition Define.h:75
#define OVERRIDE
Definition Define.h:60
std::uint64_t uint64
Definition Define.h:76
std::uint16_t uint16
Definition Define.h:78
@ ITEM_FLAGS_EXTRA_EXT_COST_REQUIRES_GOLD
MovementGeneratorType
#define MAX_CREATURE_BASE_HP
Powers
SpellSchools
@ CREATURE_TYPE_BEAST
AiReaction
@ ALLIANCE
@ LOOT_MODE_DEFAULT
Stats
#define MAX_SPELL_SCHOOL
@ CREATURE_TYPEFLAGS_EXOTIC
@ CREATURE_TYPEFLAGS_HERBLOOT
@ CREATURE_TYPEFLAGS_ENGINEERLOOT
@ CREATURE_TYPEFLAGS_MININGLOOT
@ CREATURE_TYPEFLAGS_TAMEABLE
SkillType
@ SKILL_MINING
@ SKILL_ENGINEERING
@ SKILL_SKINNING
@ SKILL_HERBALISM
SpellSchoolMask
#define MAX_SPELL_CHARM
Definition Unit.h:273
WeaponAttackType
Definition Unit.h:572
DeathState
Definition Unit.h:502
#define CREATURE_MAX_SPELLS
Definition Unit.h:272
@ UNIT_STATE_EVADE
Definition Unit.h:533
ReactStates
Definition Unit.h:1155
#define UNORDERED_MAP
void AddAssistant(uint64 guid)
Definition Creature.h:740
std::list< uint64 > m_assistants
Definition Creature.h:745
AssistDelayEvent(uint64 victim, Unit &owner)
Definition Creature.h:737
float GetSpellDamageMod(int32 Rank) const
void SetInCombatWithZone()
uint32 m_DBTableGuid
For new or temporary creatures is 0 for saved it is lowguid.
Definition Creature.h:695
void ForcedDespawn(uint32 timeMSToDespawn=0)
VendorItemCounts m_vendorItemCounts
Definition Creature.h:676
time_t const & GetRespawnTime() const
Definition Creature.h:596
uint32 guid_transport
Definition Creature.h:716
virtual uint8 GetPetAutoSpellSize() const
Definition Creature.h:620
void SetHomePosition(float x, float y, float z, float o)
Definition Creature.h:626
void SetNoSearchAssistance(bool val)
Definition Creature.h:584
Loot loot
Definition Creature.h:544
void RemoveLootMode(uint16 lootMode)
Definition Creature.h:559
void SelectLevel(const CreatureTemplate *cinfo)
bool LoadCreaturesAddon(bool reload=false)
bool HasLootMode(uint16 lootMode) const
Definition Creature.h:556
int8 GetOriginalEquipmentId() const
Definition Creature.h:512
bool UpdateAllStats() OVERRIDE
bool IsTrigger() const
Definition Creature.h:454
void Respawn(bool force=false)
uint32 m_lootRecipientGroup
Definition Creature.h:681
void ResetLootMode()
Definition Creature.h:560
void RegenerateHealth()
Definition Creature.cpp:630
VendorItemData const * GetVendorItems() const
bool IsDungeonBoss() const
SpellSchoolMask m_meleeDamageSchoolMask
Definition Creature.h:704
bool m_AI_locked
Definition Creature.h:702
bool IsImmunedToSpellEffect(SpellInfo const *spellInfo, uint32 index) const OVERRIDE
bool isWorldBoss() const
void SetRespawnRadius(float dist)
Definition Creature.h:606
int8 m_originalEquipmentId
Definition Creature.h:697
void UpdateMaxHealth() OVERRIDE
void CallForHelp(float fRadius)
void SetDisableReputationGain(bool disable)
Definition Creature.h:648
float GetAttackDistance(Unit const *player) const
void UpdateDamagePhysical(WeaponAttackType attType) OVERRIDE
uint32 GetDBTableGUIDLow() const
Definition Creature.h:445
void SetPosition(const Position &pos)
Definition Creature.h:624
Position m_transportHomePosition
Definition Creature.h:708
void UpdateMaxPower(Powers power) OVERRIDE
Player * SelectNearestPlayer(float distance=0) const
bool UpdateEntry(uint32 entry, uint32 team=ALLIANCE, const CreatureData *data=NULL)
Definition Creature.cpp:356
uint16 GetLootMode() const
Definition Creature.h:555
bool IsCivilian() const
Definition Creature.h:453
virtual void DeleteFromDB()
bool IsReputationGainDisabled() const
Definition Creature.h:649
uint32 GetCurrentWaypointID() const
Definition Creature.h:639
void SetRespawnTime(uint32 respawn)
Definition Creature.h:598
bool lootForPickPocketed
Definition Creature.h:545
void setRegeneratingHealth(bool regenHealth)
Definition Creature.h:619
float m_respawnradius
Definition Creature.h:688
bool CanWalk() const
Definition Creature.h:456
CreatureTemplate const * m_creatureInfo
Definition Creature.h:712
void GetHomePosition(float &x, float &y, float &z, float &ori) const
Definition Creature.h:628
uint32 GetWaypointPath() const
Definition Creature.h:636
void LoadEquipment(int8 id=1, bool force=false)
bool HasReactState(ReactStates state) const
Definition Creature.h:462
void SendZoneUnderAttackMessage(Player *attacker)
Send a message to LocalDefense channel for players opposition team in the zone.
void SetTransportHomePosition(const Position &pos)
Definition Creature.h:632
void AllLootRemovedFromCorpse()
float GetAggroRange(Unit const *target) const
float GetRespawnRadius() const
Definition Creature.h:605
const Position & GetHomePosition() const
Definition Creature.h:629
uint32 GetOriginalEntry() const
Definition Creature.h:655
uint32 m_waypointID
Definition Creature.h:724
void SetDisplayId(uint32 modelId) OVERRIDE
MovementGeneratorType m_defaultMovementType
Definition Creature.h:694
void _AddCreatureCategoryCooldown(uint32 category, time_t apply_time)
void DespawnOrUnsummon(uint32 msTimeToDespawn=0)
SpellInfo const * reachWithSpellCure(Unit *victim)
void SetReactState(ReactStates st)
Definition Creature.h:460
bool CanFly() const OVERRIDE
Definition Creature.h:458
CreatureSpellCooldowns m_CreatureSpellCooldowns
Definition Creature.h:566
void UpdateWaypointID(uint32 wpID)
Definition Creature.h:640
void ResetPlayerDamageReq()
Definition Creature.h:652
float m_SightDistance
Definition Creature.h:660
bool hasLootRecipient() const
Definition Creature.h:549
void AddCreatureSpellCooldown(uint32 spellid)
void Update(uint32 time) OVERRIDE
Definition Creature.cpp:446
uint8 getLevelForTarget(WorldObject const *target) const OVERRIDE
void ReleaseFocus(Spell const *focusSpell)
void SetCurrentEquipmentId(uint8 id)
Definition Creature.h:514
bool isRegeneratingHealth() const
Definition Creature.h:618
SpellSchoolMask GetMeleeDamageSchoolMask() const OVERRIDE
Definition Creature.h:485
void SetRespawnDelay(uint32 delay)
Definition Creature.h:603
CreatureSpellCooldowns m_CreatureCategoryCooldowns
Definition Creature.h:567
uint32 m_respawnDelay
Definition Creature.h:686
void SetTarget(uint64 guid) OVERRIDE
void RegenerateMana()
Definition Creature.cpp:598
void SetPosition(float x, float y, float z, float o)
bool CanAssistTo(const Unit *u, const Unit *enemy, bool checkfaction=true) const
time_t m_corpseRemoveTime
Timers.
Definition Creature.h:684
const Position & GetTransportHomePosition()
Definition Creature.h:634
void SetLootRecipient(Unit *unit)
Definition Creature.cpp:893
bool lootForBody
Definition Creature.h:546
time_t m_respawnTime
Definition Creature.h:685
void DoFleeToGetAssistance()
Definition Creature.cpp:667
void RemoveCorpse(bool setSpawnTime=true)
Definition Creature.cpp:230
void FarTeleportTo(Map *map, float X, float Y, float Z, float O)
uint32 GetScriptId() const
bool hasInvolvedQuest(uint32 quest_id) const OVERRIDE
CreatureData const * m_creatureData
Definition Creature.h:713
bool CanSwim() const
Definition Creature.h:457
float m_CombatDistance
Definition Creature.h:660
uint16 m_LootMode
Definition Creature.h:715
bool isCanInteractWithBattleMaster(Player *player, bool msg) const
Definition Creature.cpp:837
SpellInfo const * reachWithSpellAttack(Unit *victim)
Position m_homePosition
Definition Creature.h:707
Player * GetLootRecipient() const
Definition Creature.cpp:879
static float _GetHealthMod(int32 Rank)
CreatureData const * GetCreatureData() const
Definition Creature.h:525
uint32 m_PlayerDamageReq
Definition Creature.h:653
bool LoadFromDB(uint32 guid, Map *map)
Definition Creature.h:537
bool TriggerJustRespawned
Definition Creature.h:729
bool m_AlreadyCallAssistance
Definition Creature.h:699
CreatureTemplate const * GetCreatureTemplate() const
Definition Creature.h:524
uint32 GetRespawnDelay() const
Definition Creature.h:602
bool CanCreatureAttack(Unit const *victim, bool force=true) const
bool UpdateStats(Stats stat) OVERRIDE
bool DisableReputationGain
Definition Creature.h:710
void FocusTarget(Spell const *focusSpell, WorldObject const *target)
CreatureGroup * m_formation
Definition Creature.h:728
MovementGeneratorType GetDefaultMovementType() const
Definition Creature.h:589
void InitializeReactState()
Definition Creature.cpp:827
bool HasSearchedAssistance() const
Definition Creature.h:585
uint32 m_corpseDelay
Definition Creature.h:687
void GetRespawnPosition(float &x, float &y, float &z, float *ori=NULL, float *dist=NULL) const
bool CreateFromProto(uint32 guidlow, uint32 Entry, uint32 vehId, uint32 team, const CreatureData *data=NULL)
std::string GetAIName() const
void Motion_Initialize()
Definition Creature.cpp:725
void SetCorpseDelay(uint32 delay)
Definition Creature.h:450
virtual ~Creature()
Definition Creature.cpp:168
void SetObjectScale(float scale) OVERRIDE
uint32 UpdateVendorItemCurrentCount(VendorItem const *vItem, uint32 used_count)
uint8 m_equipmentId
Definition Creature.h:696
bool IsDamageEnoughForLootingAndReward() const
Definition Creature.h:650
bool isTappedBy(Player const *player) const
Definition Creature.cpp:922
Creature(bool isWorldObject=false)
Definition Creature.cpp:141
CreatureGroup * GetFormation()
Definition Creature.h:643
bool m_AlreadySearchedAssistance
Definition Creature.h:700
uint32 GetCorpseDelay() const
Definition Creature.h:451
void UpdateMovementFlags()
bool HasSpell(uint32 spellID) const OVERRIDE
TrainerSpellData const * GetTrainerSpells() const
uint32 m_originalEntry
Definition Creature.h:705
void SetFlying(bool enable)
Unit * SelectVictim()
Definition Unit.cpp:4547
bool IsImmunedToSpell(SpellInfo const *spellInfo) const OVERRIDE
bool AIM_Initialize(CreatureAI *ai=NULL)
Definition Creature.cpp:702
Unit * SelectNearestHostileUnitInAggroRange(bool useLOS=false) const
void SearchFormation()
Definition Creature.cpp:216
bool _IsTargetAcceptable(const Unit *target) const
uint64 m_lootRecipient
Definition Creature.h:680
uint32 GetVendorItemCurrentCount(VendorItem const *vItem)
bool m_isTempWorldObject
Definition Creature.h:664
void AddLootMode(uint16 lootMode)
Definition Creature.h:558
ReactStates m_reactState
Definition Creature.h:690
bool hasQuest(uint32 quest_id) const OVERRIDE
bool isCanTrainingAndResetTalentsOf(Player *player) const
Definition Creature.cpp:872
Group * GetLootRecipientGroup() const
Definition Creature.cpp:886
void GetTransportHomePosition(float &x, float &y, float &z, float &ori)
Definition Creature.h:633
bool HasCategoryCooldown(uint32 spell_id) const
Spell const * _focusSpell
Definition Creature.h:731
ReactStates GetReactState() const
Definition Creature.h:461
uint32 m_spells[CREATURE_MAX_SPELLS]
Definition Creature.h:565
void AddToWorld() OVERRIDE
Definition Creature.cpp:177
void UpdateResistances(uint32 school) OVERRIDE
void SetTransportHomePosition(float x, float y, float z, float o)
Definition Creature.h:631
std::string GetScriptName() const
bool Create(uint32 guidlow, Map *map, uint32 Entry, uint32 vehId, uint32 team, float x, float y, float z, float ang, const CreatureData *data=NULL)
Definition Creature.cpp:740
uint8 GetCurrentEquipmentId() const
Definition Creature.h:513
virtual void ProhibitSpellSchool(SpellSchoolMask idSchoolMask, uint32 unTimeMs) OVERRIDE
void SetFormation(CreatureGroup *formation)
Definition Creature.h:644
Unit * SelectNearestTarget(float dist=0, bool playerOnly=false) const
void SetMeleeDamageSchool(SpellSchools school)
Definition Creature.h:486
void SaveToDB()
Definition Creature.cpp:934
Unit * SelectNearestTargetInAttackDistance(float dist=0) const
bool LoadCreatureFromDB(uint32 guid, Map *map, bool addToMap=true)
uint32 lootingGroupLowGUID
Definition Creature.h:609
bool HasSpellCooldown(uint32 spell_id) const
void SendAIReaction(AiReaction reactionType)
static float _GetDamageMod(int32 Rank)
void SetNoCallAssistance(bool val)
Definition Creature.h:583
bool IsRacialLeader() const
Definition Creature.h:452
void setDeathState(DeathState s) OVERRIDE
bool m_regenHealth
Definition Creature.h:701
void _AddCreatureSpellCooldown(uint32 spell_id, time_t end_time)
bool CanAlwaysSee(WorldObject const *obj) const OVERRIDE
void Regenerate(Powers power)
Definition Pet.cpp:658
void UpdateAttackPowerAndDamage(bool ranged=false) OVERRIDE
time_t GetRespawnTimeEx() const
CreatureAddon const * GetCreatureAddon() const
uint32 m_path_id
Definition Creature.h:725
void CallAssistance()
std::string const & GetNameForLocaleIdx(LocaleConstant locale_idx) const OVERRIDE
bool InitEntry(uint32 entry, uint32 team=ALLIANCE, const CreatureData *data=NULL)
Definition Creature.cpp:257
bool IsInEvadeMode() const
Definition Creature.h:478
bool IsGuard() const
Definition Creature.h:455
void SaveRespawnTime() OVERRIDE
CreatureAI * AI() const
Definition Creature.h:483
virtual uint32 GetPetAutoSpellOnPos(uint8 pos) const
void SetLootMode(uint16 lootMode)
Definition Creature.h:557
uint32 m_groupLootTimer
Definition Creature.h:608
bool isElite() const
bool IsInvisibleDueToDespawn() const OVERRIDE
void SetDefaultMovementType(MovementGeneratorType mgt)
Definition Creature.h:590
void SetHomePosition(const Position &pos)
Definition Creature.h:627
bool CanStartAttack(Unit const *u, bool force) const
void LoadPath(uint32 pathid)
Definition Creature.h:637
void LowerPlayerDamageReq(uint32 unDamage)
void UpdateArmor() OVERRIDE
void SetOriginalEntry(uint32 entry)
Definition Creature.h:656
void DisappearAndDie()
Definition Creature.cpp:206
void RemoveFromWorld() OVERRIDE
Definition Creature.cpp:193
uint32 GetCreatureSpellCooldownDelay(uint32 spellId) const
ForcedDespawnDelayEvent(Creature &owner)
Definition Creature.h:752
Definition Group.h:147
Definition Map.h:238
MapObject()
Definition Object.h:593
friend class Map
Definition Object.h:589
Definition Spell.h:289
Definition Unit.h:1367
UnitAI * i_AI
Definition Unit.h:2867
bool IsPet() const
Definition Unit.h:1511
uint32 GetHealth() const
Definition Unit.h:1600
bool HasUnitState(const uint32 f) const
Definition Unit.h:1485
Unit(bool isWorldObject)
Definition Unit.cpp:142
WorldObject(bool isWorldObject)
Definition Object.cpp:1514
Player session in the World.
std::vector< uint32 > auras
Definition Creature.h:330
uint32 mount
Definition Creature.h:326
uint32 emote
Definition Creature.h:329
uint32 path_id
Definition Creature.h:325
uint32 bytes1
Definition Creature.h:327
uint32 bytes2
Definition Creature.h:328
uint32 BaseHealth[MAX_CREATURE_BASE_HP]
Definition Creature.h:199
static CreatureBaseStats const * GetBaseStats(uint8 level, uint8 unitClass)
Definition Creature.cpp:130
uint32 GenerateMana(CreatureTemplate const *info) const
Definition Creature.h:207
uint32 GenerateHealth(CreatureTemplate const *info) const
Definition Creature.cpp:122
uint32 GenerateArmor(CreatureTemplate const *info) const
Definition Creature.h:216
uint32 spawntimesecs
Definition Creature.h:270
uint32 dynamicflags
Definition Creature.h:279
uint32 phaseid
Definition Creature.h:262
uint32 id
Definition Creature.h:260
uint32 npcflag
Definition Creature.h:277
uint32 displayid
Definition Creature.h:264
uint8 movementType
Definition Creature.h:275
uint32 phaseGroup
Definition Creature.h:263
uint32 unit_flags
Definition Creature.h:278
uint32 spawnMask
Definition Creature.h:276
float spawndist
Definition Creature.h:271
uint32 curhealth
Definition Creature.h:273
float orientation
Definition Creature.h:269
uint32 curmana
Definition Creature.h:274
int8 equipmentId
Definition Creature.h:265
uint32 currentwaypoint
Definition Creature.h:272
uint16 mapid
Definition Creature.h:261
StringVector Name
Definition Creature.h:228
StringVector SubName
Definition Creature.h:229
uint32 modelid_other_gender
Definition Creature.h:288
float bounding_radius
Definition Creature.h:285
uint32 unit_flags
Definition Creature.h:94
SkillType GetRequiredLootSkill() const
Definition Creature.h:136
uint32 trainer_class
Definition Creature.h:99
uint32 trainer_race
Definition Creature.h:100
uint32 Modelid4
Definition Creature.h:70
float dmg_multiplier
Definition Creature.h:90
uint32 Modelid1
Definition Creature.h:67
std::string SubName
Definition Creature.h:72
uint32 SkinLootId
Definition Creature.h:109
uint32 GetFirstValidModelId() const
Definition Creature.cpp:92
uint32 Modelid2
Definition Creature.h:68
uint32 MechanicImmuneMask
Definition Creature.h:128
std::string Name
Definition Creature.h:71
int32 resistance[MAX_SPELL_SCHOOL]
Definition Creature.h:110
uint32 DifficultyEntry[4 - 1]
Definition Creature.h:65
uint32 faction_A
Definition Creature.h:79
uint32 pickpocketLootId
Definition Creature.h:108
bool IsExotic() const
Definition Creature.h:148
uint32 KillCredit[MAX_KILL_CREDIT]
Definition Creature.h:66
uint32 InhabitType
Definition Creature.h:118
uint32 MovementType
Definition Creature.h:117
uint32 flags_extra
Definition Creature.h:129
uint32 expansionUnknown
Definition Creature.h:78
uint32 type_flags
Definition Creature.h:105
uint32 attackpower
Definition Creature.h:89
uint32 unit_flags2
Definition Creature.h:95
uint32 dmgschool
Definition Creature.h:88
uint32 rangeattacktime
Definition Creature.h:92
uint32 expansion
Definition Creature.h:77
uint32 trainer_type
Definition Creature.h:98
uint32 rangedattackpower
Definition Creature.h:103
static int32 DiffToDiffIndex(uint32 difficulty)
Definition Creature.h:162
uint32 GossipMenuId
Definition Creature.h:74
uint32 spells[CREATURE_MAX_SPELLS]
Definition Creature.h:111
uint32 unit_class
Definition Creature.h:93
uint32 baseattacktime
Definition Creature.h:91
bool IsTameable(bool canTameExotic) const
Definition Creature.h:153
uint32 faction_H
Definition Creature.h:80
std::string AIName
Definition Creature.h:116
uint32 questItems[MAX_CREATURE_QUEST_ITEMS]
Definition Creature.h:125
uint32 type_flags2
Definition Creature.h:106
uint32 Modelid3
Definition Creature.h:69
uint32 GetRandomValidModelId() const
Definition Creature.cpp:79
uint32 dynamicflags
Definition Creature.h:96
uint32 movementId
Definition Creature.h:126
uint32 PetSpellDataId
Definition Creature.h:112
std::string IconName
Definition Creature.h:73
uint32 ItemEntry[MAX_EQUIPMENT_ITEMS]
Definition Creature.h:245
StringVector BoxText
Definition Creature.h:235
StringVector OptionText
Definition Creature.h:234
StringVector IconName
Definition Creature.h:240
float GetPositionZ() const
Definition Object.h:330
float GetOrientation() const
Definition Object.h:331
float GetPositionX() const
Definition Object.h:328
float GetPositionY() const
Definition Object.h:329
TrainerSpellMap spellList
Definition Creature.h:413
uint32 trainerType
Definition Creature.h:414
TrainerSpell const * Find(uint32 spell_id) const
Definition Creature.cpp:46
uint32 reqSkillValue
Definition Creature.h:398
bool IsCastable() const
Definition Creature.h:403
uint32 spellCost
Definition Creature.h:396
uint32 reqSkill
Definition Creature.h:397
uint32 reqLevel
Definition Creature.h:399
uint32 learnedSpell[MAX_SPELL_EFFECTS]
Definition Creature.h:400
uint32 spell
Definition Creature.h:395
time_t lastIncrementTime
Definition Creature.h:386
VendorItemCount(uint32 _item, uint32 _count)
Definition Creature.h:381
uint32 GetItemCount() const
Definition Creature.h:364
VendorItem const * FindItemCostPair(uint32 item_id, uint32 extendedCost, uint8 type) const
Definition Creature.cpp:71
VendorItemList m_items
Definition Creature.h:354
VendorItem * GetItem(uint32 slot) const
Definition Creature.h:356
bool Empty() const
Definition Creature.h:363
void AddItem(uint32 item, int32 maxcount, uint32 ptime, uint32 ExtendedCost, uint8 type)
Definition Creature.h:365
bool RemoveItem(uint32 item_id, uint8 type)
Definition Creature.cpp:55
uint32 ExtendedCost
Definition Creature.h:344
VendorItem(uint32 _item, int32 _maxcount, uint32 _incrtime, uint32 _ExtendedCost, uint8 _Type)
Definition Creature.h:338
bool IsGoldRequired(ItemTemplate const *pProto) const
Definition Creature.h:348
uint32 item
Definition Creature.h:341
uint32 maxcount
Definition Creature.h:342
uint8 Type
Definition Creature.h:345
uint32 incrtime
Definition Creature.h:343