44#define PET_XP_FACTOR 0.05f
47 Guardian(nullptr, owner, true), m_removed(false),
48 m_petType(type), m_duration(0), m_loading(false), m_groupUpdateMask(0),
49 m_petSpecialization(0)
79 zoneScript->OnCreatureCreate(
this);
110 for (std::size_t activeSlot = 0; activeSlot < stable.
ActivePets.size(); ++activeSlot)
114 for (std::size_t stableSlot = 0; stableSlot < stable.
StabledPets.size(); ++stableSlot)
131 return { &stable.
ActivePets[*slot].value(), *slot };
135 return { &stable.
StabledPets[*slot].value(), *slot };
212 std::pair<PetStable::PetInfo const*, PetSaveMode> info =
GetLoadPetInfo(*petStable, petEntry, petnumber, forcedSlot);
227 bool isTemporarySummon = spellInfo && spellInfo->
GetDuration() > 0;
228 if (current && isTemporarySummon)
270 TC_LOG_ERROR(
"entities.pet",
"Pet{} not loaded. Suggested coordinates isn't valid (X: {} Y: {})",
320 TC_LOG_ERROR(
"entities.pet",
"Pet {} not loaded. Suggested coordinates isn't valid (X: {} Y: {})",
354 return unslottedPet.PetNumber == petInfoNumber;
365 return pet && pet->PetNumber == petInfo->PetNumber;
369 uint32 newPetIndex = std::distance(petStable->
ActivePets.begin(), activePetItr);
376 if (!isTemporarySummon)
388 if (session->GetPlayer() != owner || owner->GetPet() != this)
395 uint32 timediff = uint32(GameTime::GetGameTime() - lastSaveTime);
396 _LoadAuras(holder.GetPreparedResult(PetLoadQueryHolder::AURAS), holder.GetPreparedResult(PetLoadQueryHolder::AURA_EFFECTS), timediff);
399 if (!isTemporarySummon)
401 _LoadSpells(holder.GetPreparedResult(PetLoadQueryHolder::SPELLS));
402 GetSpellHistory()->LoadFromDB<Pet>(holder.GetPreparedResult(PetLoadQueryHolder::COOLDOWNS), holder.GetPreparedResult(PetLoadQueryHolder::CHARGES));
404 InitLevelupSpellsForLevel();
405 if (GetMap()->IsBattleArena())
408 CastPetAuras(current);
413 uint16 specId = specializationId;
434 Field* fields = result->Fetch();
731 if (petlevel >= maxlevel)
736 uint32 newXP = curXP + xp;
739 while (newXP >= nextLvlXP && petlevel < maxlevel)
747 nextLvlXP =
m_unitData->PetNextLevelExperience;
779 TC_LOG_ERROR(
"entities.pet",
"Pet {} not created base at creature. Suggested coordinates isn't valid (X: {} Y: {})",
787 TC_LOG_ERROR(
"entities.pet",
"CreateBaseAtCreature() failed, creatureInfo is missing!");
794 SetName(cFamily->Name[
GetOwner()->GetSession()->GetSessionDbcLocale()]);
807 SetName(cFamily->Name[
GetOwner()->GetSession()->GetSessionDbcLocale()]);
816 TC_LOG_DEBUG(
"entities.pet",
"Pet::CreateBaseForTamed");
863 TC_LOG_ERROR(
"entities.pet",
"Unknown type pet {} is summoned by player class {}",
898 if (pInfo->
armor > 0)
931 int32 val = (fire > shadow) ? fire : shadow;
1073 float weaponBaseMinDamage = basedamage;
1074 float weaponBaseMaxDamage = basedamage * 1.5f;
1107 return (diet & FoodMask) != 0;
1116 Field* fields = result->Fetch();
1120 while (result->NextRow());
1136 switch (itr->second.state)
1142 trans->Append(stmt);
1150 trans->Append(stmt);
1155 stmt->
setUInt8(2, itr->second.active);
1156 trans->Append(stmt);
1163 stmt->
setUInt8(2, itr->second.active);
1164 trans->Append(stmt);
1178 std::map<AuraKey, AuraLoadEffectInfo> effectInfo;
1188 Field* fields = effectResult->Fetch();
1192 std::span<uint8 const> rawGuidBytes = fields[0].
GetBinaryView();
1205 }
while (effectResult->NextRow());
1216 Field* fields = auraResult->Fetch();
1218 std::span<uint8 const> rawGuidBytes = fields[0].
GetBinaryView();
1237 TC_LOG_ERROR(
"entities.pet",
"Pet::_LoadAuras: Unknown aura (spellid {}), ignore.", key.SpellId);
1243 TC_LOG_ERROR(
"entities.pet",
"Pet::_LoadAuras: Unknown difficulty {} (spellid {}), ignore.",
uint32(difficulty), key.SpellId);
1261 if (remainCharges <= 0/* || remainCharges > spellproto->procCharges*/)
1269 AuraCreateInfo createInfo(castId, spellInfo, difficulty, key.EffectMask,
this);
1276 if (!aura->CanBeSaved())
1282 aura->SetLoadedState(maxDuration, remainTime, remainCharges, stackCount, recalculateMask, info.
Amounts.data());
1283 aura->ApplyForTargets();
1284 TC_LOG_DEBUG(
"entities.pet",
"Added aura spellid {}, effectmask {}", spellInfo->
Id, key.EffectMask);
1287 while (auraResult->NextRow());
1295 trans->Append(stmt);
1299 trans->Append(stmt);
1305 if (!itr->second->CanBeSaved() ||
IsPetAura(itr->second))
1308 Aura* aura = itr->second;
1309 uint32 recalculateMask = 0;
1322 stmt->
setUInt32(index++, recalculateMask);
1328 trans->Append(stmt);
1338 stmt->
setUInt8(index++, effect->GetEffIndex());
1339 stmt->
setInt32(index++, effect->GetAmount());
1340 stmt->
setInt32(index++, effect->GetBaseAmount());
1341 trans->Append(stmt);
1354 TC_LOG_ERROR(
"entities.pet",
"Pet::addSpell: Non-existed in SpellStore spell #{} request, deleting for all pets in `pet_spell`.", spellId);
1363 TC_LOG_ERROR(
"entities.pet",
"Pet::addSpell: Non-existed in SpellStore spell #{} request.", spellId);
1368 PetSpellMap::iterator itr =
m_spells.find(spellId);
1391 newspell.
state = state;
1392 newspell.
type = type;
1404 newspell.
active = active;
1409 for (PetSpellMap::const_iterator itr2 =
m_spells.begin(); itr2 !=
m_spells.end(); ++itr2)
1416 if (!oldRankSpellInfo)
1424 newspell.
active = itr2->second.active;
1461 packet.
Spells.push_back(spell_id);
1472 for (
uint32 spell : spellIds)
1477 packet.
Spells.push_back(spell);
1491 for (PetLevelupSpellSet::const_reverse_iterator itr = levelupSpells->rbegin(); itr != levelupSpells->rend(); ++itr)
1494 if (itr->first > level)
1505 for (
uint32 spellId : defSpells->spellid)
1528 packet.
Spells.push_back(spell_id);
1540 for (
uint32 spell : spellIds)
1545 packet.
Spells.push_back(spell);
1554 PetSpellMap::iterator itr =
m_spells.find(spell_id);
1577 if (clear_ab && !learn_prev &&
m_charmInfo->RemoveSpellFromActionBar(spell_id))
1590 if (ab->GetAction() && ab->IsActionBarForSpell())
1620 PetSpellMap::iterator itr =
m_spells.find(spellInfo->
Id);
1704 PetSpellMap::const_iterator itr =
m_spells.find(spell);
1725 for (
uint32 spellId : petStore->second)
1758 if (auraId == 35696)
1852 std::vector<uint32> learnedSpells;
1856 for (
size_t j = 0; j < specSpells->size(); ++j)
1863 learnedSpells.push_back(specSpell->
SpellID);
1872 std::vector<uint32> unlearnedSpells;
1878 if (std::vector<SpecializationSpellsEntry const*>
const* specSpells =
sDB2Manager.GetSpecializationSpells(specialization->ID))
1880 for (
size_t j = 0; j < specSpells->size(); ++j)
1883 unlearnedSpells.push_back(specSpell->
SpellID);
1890 if (std::vector<SpecializationSpellsEntry const*>
const* specSpells =
sDB2Manager.GetSpecializationSpells(specialization->ID))
1892 for (
size_t j = 0; j < specSpells->size(); ++j)
1895 unlearnedSpells.push_back(specSpell->
SpellID);
1932 std::ostringstream ss;
1945 std::stringstream sstr;
1948 <<
"PetType: " << std::to_string(
getPetType()) <<
" "
@ CHAR_DEL_PET_SPELL_CHARGES
@ CHAR_INS_PET_AURA_EFFECT
@ CHAR_DEL_INVALID_PET_SPELL
@ CHAR_DEL_CHAR_PET_BY_ID
@ CHAR_SEL_PET_DECLINED_NAME
@ CHAR_SEL_PET_AURA_EFFECT
@ CHAR_DEL_PET_SPELL_BY_SPELL
@ CHAR_DEL_PET_SPELL_COOLDOWNS
@ CHAR_SEL_PET_SPELL_COOLDOWN
@ CHAR_SEL_PET_SPELL_CHARGES
@ CHAR_DEL_PET_AURA_EFFECTS
@ CHAR_DEL_CHAR_PET_DECLINEDNAME
#define MAX_UNIT_ACTION_BAR_INDEX
const uint32 PET_FOCUS_REGEN_INTERVAL
DB2Storage< DifficultyEntry > sDifficultyStore("Difficulty.db2", &DifficultyLoadInfo::Instance)
DB2Storage< CreatureFamilyEntry > sCreatureFamilyStore("CreatureFamily.db2", &CreatureFamilyLoadInfo::Instance)
DB2Storage< ChrSpecializationEntry > sChrSpecializationStore("ChrSpecialization.db2", &ChrSpecializationLoadInfo::Instance)
#define MAX_SPELL_EFFECTS
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
std::shared_ptr< PreparedResultSet > PreparedQueryResult
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
#define ASSERT_NOTNULL(pointer)
@ GROUP_UPDATE_FLAG_PET_MODEL_ID
@ GROUP_UPDATE_FLAG_PET_NONE
#define TC_LOG_DEBUG(filterType__, message__,...)
#define TC_LOG_ERROR(filterType__, message__,...)
std::optional< T > Optional
Optional helper class to wrap optional values within.
@ PET_SAVE_FIRST_STABLE_SLOT
@ PET_SAVE_LAST_STABLE_SLOT
@ PET_SAVE_LAST_ACTIVE_SLOT
@ PET_SAVE_FIRST_ACTIVE_SLOT
@ SPELL_SCHOOL_MASK_SHADOW
@ SPELL_SCHOOL_MASK_NATURE
@ SPELL_SCHOOL_MASK_FROST
@ CREATURE_TYPE_ELEMENTAL
#define MAX_SPECIALIZATIONS
#define PET_SPEC_OVERRIDE_CLASS_INDEX
@ SPELL_ATTR4_AURA_EXPIRES_OFFLINE
@ SPELL_AURA_OVERRIDE_PET_SPECS
@ TRIGGERED_FULL_MASK
Used when doing CastSpell with triggered == true.
PetFamilySpellsStore sPetFamilySpellsStore
std::multimap< uint32, uint32 > PetLevelupSpellSet
@ SPELL_CAST_SOURCE_NORMAL
@ UNIT_FLAG2_REGENERATE_POWER
@ UNIT_PET_FLAG_CAN_BE_ABANDONED
@ UNIT_PET_FLAG_CAN_BE_RENAMED
#define MAX_DECLINED_NAME_CASES
@ UNIT_FLAG_PLAYER_CONTROLLED
@ UNIT_MASK_CONTROLABLE_GUARDIAN
@ UNIT_MOD_RESISTANCE_START
constexpr std::underlying_type< E >::type AsUnderlyingType(E enumValue)
T CalculatePct(T base, U pct)
int32 GetMaxDuration() const
static Aura * TryCreate(AuraCreateInfo &createInfo)
Trinity::IteratorPair< DBStorageIterator< AuraEffect * > > GetAuraEffects()
int32 GetDuration() const
uint8 GetStackAmount() const
Difficulty GetCastDifficulty() const
AuraKey GenerateKey(uint32 &recalculateMask) const
Fills a helper structure containing aura primary key for character_aura, character_aura_effect,...
void setDeathState(DeathState s) override
ObjectGuid::LowType m_spawnId
For new or temporary creatures is 0 for saved it is lowguid.
void Update(uint32 time) override
CreatureDifficulty const * GetCreatureDifficulty() const
void SetObjectScale(float scale) override
std::string GetNameForLocaleIdx(LocaleConstant locale) const override
bool AIM_Initialize(CreatureAI *ai=nullptr)
void LoadTemplateImmunities(int32 creatureImmunitiesId)
void SetReactState(ReactStates st)
time_t m_corpseRemoveTime
CreatureTemplate const * GetCreatureTemplate() const
float GetBaseDamageForLevel(uint8 level) const
float GetNativeObjectScale() const override
void SetDisplayId(uint32 displayId, bool setNative=false) override
ReactStates GetReactState() const
bool InitEntry(uint32 entry, CreatureData const *data=nullptr)
void SetMeleeDamageSchool(SpellSchools school)
static float GetHealthMod(CreatureClassifications classification)
void Regenerate(Powers power)
Class used to access individual fields of database query result.
std::string GetString() const
std::span< uint8 const > GetBinaryView() const
void SetBonusDamage(int32 damage)
bool InitStatsForLevel(uint8 level)
std::string GetDebugInfo() const override
bool UpdateAllStats() override
MapStoredObjectTypesContainer & GetObjectsStore()
ObjectGuid::LowType GenerateLowGuid()
Difficulty GetDifficultyID() const
float GetFollowAngle() const override
LowType GetCounter() const
uint64 GetRawValue(std::size_t i) const
void SetRawValue(std::span< uint8 const > rawBytes)
static constexpr std::size_t BytesSize
ObjectGuid const & GetGUID() const
void ReplaceAllDynamicFlags(uint32 flag)
void _Create(ObjectGuid const &guid)
static ObjectGuid GetGUID(Object const *o)
static Player * ToPlayer(Object *o)
uint32 GetAura(uint32 petEntry) const
bool IsRemovedOnChangePet() const
PetLoadQueryHolder(ObjectGuid::LowType ownerGuid, uint32 petNumber)
Optional< uint32 > GetCurrentActivePetIndex() const
std::array< Optional< PetInfo >, MAX_ACTIVE_PETS > ActivePets
void SetCurrentUnslottedPetIndex(uint32 index)
std::array< Optional< PetInfo >, MAX_PET_STABLES > StabledPets
std::vector< PetInfo > UnslottedPets
PetInfo * GetCurrentPet()
Optional< uint32 > CurrentPetIndex
void SetCurrentActivePetIndex(uint32 index)
uint16 GetSpecialization() const
Pet(Player *owner, PetType type=MAX_PET_TYPE)
void GivePetLevel(uint8 level)
void RemoveFromWorld() override
void SetSpecialization(uint16 spec)
uint16 m_petSpecialization
Player * GetOwner() const
bool IsPetAura(Aura const *aura)
bool unlearnSpell(uint32 spell_id, bool learn_prev, bool clear_ab=true)
bool Create(ObjectGuid::LowType guidlow, Map *map, uint32 Entry, uint32 pet_number)
static void DeleteFromDB(uint32 petNumber)
void FillPetInfo(PetStable::PetInfo *petInfo, Optional< ReactStates > forcedReactState={}) const
void ToggleAutocast(SpellInfo const *spellInfo, bool apply)
void learnSpells(std::vector< uint32 > const &spellIds)
void AddToWorld() override
static std::pair< PetStable::PetInfo const *, PetSaveMode > GetLoadPetInfo(PetStable const &stable, uint32 petEntry, uint32 petnumber, Optional< PetSaveMode > slot)
void SetGroupUpdateFlag(uint32 flag)
void CastPetAuras(bool current)
void setPetType(PetType type)
void SavePetToDB(PetSaveMode mode)
float GetNativeObjectScale() const override
void _SaveAuras(CharacterDatabaseTransaction trans)
PetType getPetType() const
void SynchronizeLevelWithOwner()
std::unique_ptr< DeclinedName > m_declinedname
bool LoadPetFromDB(Player *owner, uint32 petEntry, uint32 petnumber, bool current, Optional< PetSaveMode > forcedSlot={})
void _SaveSpells(CharacterDatabaseTransaction trans)
void learnSpellHighRank(uint32 spellid)
bool IsPermanentPetFor(Player *owner) const
bool HaveInDiet(ItemTemplate const *item) const
void RemoveSpecializationSpells(bool clearActionBar)
bool addSpell(uint32 spellId, ActiveStates active=ACT_DECIDE, PetSpellState state=PETSPELL_NEW, PetSpellType type=PETSPELL_NORMAL)
AutoSpellList m_autospells
void SetPetExperience(uint32 xp)
std::string GetDebugInfo() const override
bool CreateBaseAtTamed(CreatureTemplate const *cinfo, Map *map)
bool CreateBaseAtCreatureInfo(CreatureTemplate const *cinfo, Unit *owner)
void SetDisplayId(uint32 modelId, bool setNative=false) override
bool removeSpell(uint32 spell_id, bool learn_prev, bool clear_ab=true)
bool CreateBaseAtCreature(Creature *creature)
bool isTemporarySummoned() const
void CastPetAura(PetAura const *aura)
void unlearnSpells(std::vector< uint32 > const &spellIds, bool learn_prev, bool clear_ab=true)
void _LoadSpells(PreparedQueryResult result)
bool isControlled() const
void SetPetNextLevelExperience(uint32 xp)
void setDeathState(DeathState s) override
void ResetGroupUpdateFlag()
void Remove(PetSaveMode mode, bool returnreagent=false)
void _LoadAuras(PreparedQueryResult auraResult, PreparedQueryResult effectResult, uint32 timediff)
void Update(uint32 diff) override
void InitPetCreateSpells()
bool HasSpell(uint32 spell) const override
void LearnSpecializationSpells()
void GivePetXP(uint32 xp)
std::string GenerateActionBarData() const
bool learnSpell(uint32 spell_id)
void InitLevelupSpellsForLevel()
static void InheritPhaseShift(WorldObject *target, WorldObject const *source)
void SetGroupUpdateFlag(uint32 flag)
uint32 GetTemporaryUnsummonedPetNumber() const
void SendDirectMessage(WorldPacket const *data) const
UF::UpdateField< UF::ActivePlayerData, int32(WowCS::EntityFragment::CGObject), TYPEID_ACTIVE_PLAYER > m_activePlayerData
bool CanTameExoticPets() const
void SetTemporaryUnsummonedPetNumber(uint32 petnumber)
void DisablePetControlsOnMount(ReactStates reactState, CommandStates commandState)
void RemoveGroupUpdateFlag(uint32 flag)
bool IsPetNeedBeTemporaryUnsummoned() const
PetStable * GetPetStable()
void PetSpellInitialize()
WorldSession * GetSession() const
void RemovePet(Pet *pet, PetSaveMode mode, bool returnreagent=false)
Optional< ReactStates > GetTemporaryPetReactState() const
std::unordered_set< PetAura const * > m_petAuras
void RemovePetAura(PetAura const *petSpell)
void SetLastPetNumber(uint32 petnumber)
void setBinary(uint8 index, std::vector< uint8 > &&value)
void setInt16(uint8 index, int16 value)
void setUInt16(uint8 index, uint16 value)
void setString(uint8 index, std::string &&value)
void setUInt32(uint8 index, uint32 value)
void setUInt64(uint8 index, uint64 value)
void setInt32(uint8 index, int32 value)
void setUInt8(uint8 index, uint8 value)
void SetSize(size_t size)
PreparedQueryResult GetPreparedResult(size_t index) const
void AfterComplete(std::function< void(SQLQueryHolderBase const &)> callback) &
bool SetPreparedQuery(size_t index, PreparedStatement< T > *stmt)
void SaveToDB(CharacterDatabaseTransaction trans)
bool IsAutocastEnabledByDefault() const
bool IsAutocastable() const
bool IsHighRankOf(SpellInfo const *spellInfo) const
bool HasAttribute(SpellAttr0 attribute) const
int32 GetDuration() const
bool IsDifferentRankOf(SpellInfo const *spellInfo) const
void SetMinion(Minion *minion, bool apply)
bool HasPetFlag(UnitPetFlag flags) const
void SetCreateStat(Stats stat, float val)
void SetHealth(uint64 val)
void SetGender(Gender gender)
void ReplaceAllNpcFlags2(NPCFlags2 flags)
ThreatManager & GetThreatManager()
void AddToWorld() override
void SetCreateHealth(uint32 val)
std::unique_ptr< CharmInfo > m_charmInfo
void SetFaction(uint32 faction) override
void SetBaseWeaponDamage(WeaponAttackType attType, WeaponDamageRange damageRange, float value)
ObjectGuid GetOwnerGUID() const override
void SetStatPctModifier(UnitMods unitMod, UnitModifierPctType modifierType, float val)
void SetPower(Powers power, int32 val, bool withPowerUpdate=true)
void ReplaceAllUnitFlags(UnitFlags flags)
Powers GetPowerType() const
void SetCreatedBySpell(int32 spellId)
Aura * AddAura(uint32 spellId, Unit *target)
void SetUnitFlag2(UnitFlags2 flags)
void ReplaceAllPetFlags(UnitPetFlag flags)
void SetPetNameTimestamp(uint32 timestamp)
float GetCombatReach() const override
CharmInfo * GetCharmInfo()
void SetBaseAttackTime(WeaponAttackType att, uint32 val)
void SetSheath(SheathState sheathed)
void SetCreateMana(uint32 val)
uint32 GetDisplayId() const
uint32 GetNativeDisplayId() const
uint32 GetFaction() const override
bool HasAuraState(AuraStateType flag, SpellInfo const *spellProto=nullptr, Unit const *Caster=nullptr) const
bool HasAuraType(AuraType auraType) const
void SetFullPower(Powers power)
UF::UpdateField< UF::UnitData, int32(WowCS::EntityFragment::CGObject), TYPEID_UNIT > m_unitData
int32 GetPower(Powers power) const
float GetTotalAttackPowerValue(WeaponAttackType attType, bool includeWeapon=true) const
DeathState getDeathState() const
void SetLevel(uint8 lvl, bool sendUpdate=true)
void SetCanModifyStats(bool modifyStats)
CharmInfo * InitCharmInfo()
void SetClass(uint8 classId)
void RemoveFromWorld() override
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
Powers CalculateDisplayPowerType() const
float GetStat(Stats stat) const
SpellHistory * GetSpellHistory()
void SetCreatorGUID(ObjectGuid creator)
void ReplaceAllNpcFlags(NPCFlags flags)
int32 SpellBaseDamageBonusDone(SpellSchoolMask schoolMask) const
void SetStatFlatModifier(UnitMods unitMod, UnitModifierFlatType modifierType, float val)
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
void SetPowerType(Powers power, bool sendUpdate=true, bool onInit=false)
void RemoveUnitFlag(UnitFlags flags)
ObjectGuid GetPetGUID() const
constexpr uint32 GetMapId() const
InstanceScript * GetInstanceScript() const
void GetClosePoint(float &x, float &y, float &z, float size, float distance2d=0, float relAngle=0) const
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
ZoneScript * GetZoneScript() const
std::string const & GetName() const
virtual void SetMap(Map *map)
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
void SetName(std::string newname)
float GetVisibilityRange() const
WorldPacket const * Write() override
std::vector< uint32 > Spells
std::vector< uint32 > Spells
WorldPacket const * Write() override
WorldPacket const * Write() override
std::string GetPlayerInfo() const
SQLQueryHolderCallback & AddQueryHolderCallback(SQLQueryHolderCallback &&callback)
void SendPacket(WorldPacket const *packet, bool forced=false)
Send a packet to the client.
@ CONFIG_MAX_PLAYER_LEVEL
AuraCreateInfo & SetBaseAmount(int32 const *bp)
AuraCreateInfo & SetCasterGUID(ObjectGuid const &guid)
std::array< int32, MAX_SPELL_EFFECTS > BaseAmounts
std::array< int32, MAX_SPELL_EFFECTS > Amounts
void SetIsCommandFollow(bool val)
void SetIsAtStay(bool val)
void SetIsFollowing(bool val)
void SetIsReturning(bool val)
void SetIsCommandAttack(bool val)
int32 GetHealthScalingExpansion() const
CreatureDifficulty const * GetDifficulty(Difficulty difficulty) const
CreatureClassifications Classification
int32 resistance[MAX_SPELL_SCHOOL]
bool IsTameable(bool canTameExotic, CreatureDifficulty const *creatureDifficulty) const
constexpr float GetPositionX() const
constexpr float GetPositionY() const
std::string ToString() const
bool IsPositionValid() const
constexpr void Relocate(float x, float y)
constexpr float GetOrientation() const
constexpr float GetPositionZ() const
bool Remove(ObjectType *object)
bool Insert(ObjectType *object)