diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 53 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/Creature.h | 54 | ||||
-rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 2 |
3 files changed, 61 insertions, 48 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 4d549b3b046..1fc13f9f15b 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -863,6 +863,16 @@ bool Creature::Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 Entry, return true; } +void Creature::InitializeReactState() +{ + if (isTotem() || isTrigger() || GetCreatureType() == CREATURE_TYPE_CRITTER || isSpiritService()) + SetReactState(REACT_PASSIVE); + else + SetReactState(REACT_AGGRESSIVE); + /*else if (isCivilian()) + SetReactState(REACT_DEFENSIVE);*/; +} + bool Creature::isCanTrainingOf(Player* player, bool msg) const { if (!isTrainer()) @@ -1213,6 +1223,12 @@ float Creature::_GetHealthMod(int32 Rank) } } +void Creature::LowerPlayerDamageReq(uint32 unDamage) +{ + if (m_PlayerDamageReq) + m_PlayerDamageReq > unDamage ? m_PlayerDamageReq -= unDamage : m_PlayerDamageReq = 0; +} + float Creature::_GetDamageMod(int32 Rank) { switch (Rank) // define rates for each elite rank @@ -1731,6 +1747,23 @@ bool Creature::IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index) return Unit::IsImmunedToSpellEffect(spellInfo, index); } +bool Creature::isElite() const +{ + if (isPet()) + return false; + + uint32 rank = GetCreatureTemplate()->rank; + return rank != CREATURE_ELITE_NORMAL && rank != CREATURE_ELITE_RARE; +} + +bool Creature::isWorldBoss() const +{ + if (isPet()) + return false; + + return GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_BOSS; +} + SpellInfo const* Creature::reachWithSpellAttack(Unit* victim) { if (!victim) @@ -2218,6 +2251,11 @@ void Creature::SetInCombatWithZone() } } +uint32 Creature::GetShieldBlockValue() const //dunno mob block value +{ + return (getLevel()/2 + uint32(GetStat(STAT_STRENGTH)/20)); +} + void Creature::_AddCreatureSpellCooldown(uint32 spell_id, time_t end_time) { m_CreatureSpellCooldowns[spell_id] = end_time; @@ -2255,6 +2293,13 @@ bool Creature::HasCategoryCooldown(uint32 spell_id) const return(itr != m_CreatureCategoryCooldowns.end() && time_t(itr->second + (spellInfo->CategoryRecoveryTime / IN_MILLISECONDS)) > time(NULL)); } +uint32 Creature::GetCreatureSpellCooldownDelay(uint32 spellId) const +{ + CreatureSpellCooldowns::const_iterator itr = m_CreatureSpellCooldowns.find(spellId); + time_t t = time(NULL); + return uint32(itr != m_CreatureSpellCooldowns.end() && itr->second > t ? itr->second - t : 0); +} + bool Creature::HasSpellCooldown(uint32 spell_id) const { CreatureSpellCooldowns::const_iterator itr = m_CreatureSpellCooldowns.find(spell_id); @@ -2499,6 +2544,14 @@ void Creature::FarTeleportTo(Map* map, float X, float Y, float Z, float O) GetMap()->AddToMap(this); } +uint32 Creature::GetPetAutoSpellOnPos(uint8 pos) const +{ + if (pos >= MAX_SPELL_CHARM || m_charmInfo->GetCharmSpell(pos)->GetType() != ACT_ENABLED) + return 0; + else + return m_charmInfo->GetCharmSpell(pos)->GetAction(); +} + void Creature::SetPosition(float x, float y, float z, float o) { // prevent crash when a bad coord is sent by the client diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index ab9b81009dd..f4016043799 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -474,15 +474,7 @@ class Creature : public Unit, public GridObject<Creature>, public MapCreature void SetReactState(ReactStates st) { m_reactState = st; } ReactStates GetReactState() { return m_reactState; } bool HasReactState(ReactStates state) const { return (m_reactState == state); } - void InitializeReactState() - { - if (isTotem() || isTrigger() || GetCreatureType() == CREATURE_TYPE_CRITTER || isSpiritService()) - SetReactState(REACT_PASSIVE); - else - SetReactState(REACT_AGGRESSIVE); - /*else if (isCivilian()) - SetReactState(REACT_DEFENSIVE);*/; - } + void InitializeReactState(); /// @todo Rename these properly bool isCanTrainingOf(Player* player, bool msg) const; @@ -491,22 +483,8 @@ class Creature : public Unit, public GridObject<Creature>, public MapCreature bool canCreatureAttack(Unit const* victim, bool force = true) const; bool IsImmunedToSpell(SpellInfo const* spellInfo); //override Unit::IsImmunedToSpell bool IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index) const; //override Unit::IsImmunedToSpellEffect - bool isElite() const - { - if (isPet()) - return false; - - uint32 rank = GetCreatureTemplate()->rank; - return rank != CREATURE_ELITE_NORMAL && rank != CREATURE_ELITE_RARE; - } - - bool isWorldBoss() const - { - if (isPet()) - return false; - - return GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_BOSS; - } + bool isElite() const; + bool isWorldBoss() const; bool IsDungeonBoss() const; @@ -523,10 +501,7 @@ class Creature : public Unit, public GridObject<Creature>, public MapCreature bool SetDisableGravity(bool disable, bool packetOnly = false); bool SetHover(bool enable); - uint32 GetShieldBlockValue() const //dunno mob block value - { - return (getLevel()/2 + uint32(GetStat(STAT_STRENGTH)/20)); - } + uint32 GetShieldBlockValue() const; SpellSchoolMask GetMeleeDamageSchoolMask() const { return m_meleeDamageSchoolMask; } void SetMeleeDamageSchool(SpellSchools school) { m_meleeDamageSchoolMask = SpellSchoolMask(1 << school); } @@ -536,12 +511,7 @@ class Creature : public Unit, public GridObject<Creature>, public MapCreature void AddCreatureSpellCooldown(uint32 spellid); bool HasSpellCooldown(uint32 spell_id) const; bool HasCategoryCooldown(uint32 spell_id) const; - uint32 GetCreatureSpellCooldownDelay(uint32 spellId) const - { - CreatureSpellCooldowns::const_iterator itr = m_CreatureSpellCooldowns.find(spellId); - time_t t = time(NULL); - return uint32(itr != m_CreatureSpellCooldowns.end() && itr->second > t ? itr->second - t : 0); - } + uint32 GetCreatureSpellCooldownDelay(uint32 spellId) const; virtual void ProhibitSpellSchool(SpellSchoolMask idSchoolMask, uint32 unTimeMs); bool HasSpell(uint32 spellID) const; @@ -671,13 +641,7 @@ class Creature : public Unit, public GridObject<Creature>, public MapCreature bool isRegeneratingHealth() { return m_regenHealth; } void setRegeneratingHealth(bool regenHealth) { m_regenHealth = regenHealth; } virtual uint8 GetPetAutoSpellSize() const { return MAX_SPELL_CHARM; } - virtual uint32 GetPetAutoSpellOnPos(uint8 pos) const - { - if (pos >= MAX_SPELL_CHARM || m_charmInfo->GetCharmSpell(pos)->GetType() != ACT_ENABLED) - return 0; - else - return m_charmInfo->GetCharmSpell(pos)->GetAction(); - } + virtual uint32 GetPetAutoSpellOnPos(uint8 pos) const; void SetPosition(float x, float y, float z, float o); void SetPosition(const Position &pos) { SetPosition(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation()); } @@ -707,11 +671,7 @@ class Creature : public Unit, public GridObject<Creature>, public MapCreature void SetDisableReputationGain(bool disable) { DisableReputationGain = disable; } bool IsReputationGainDisabled() { return DisableReputationGain; } bool IsDamageEnoughForLootingAndReward() const { return m_PlayerDamageReq == 0; } - void LowerPlayerDamageReq(uint32 unDamage) - { - if (m_PlayerDamageReq) - m_PlayerDamageReq > unDamage ? m_PlayerDamageReq -= unDamage : m_PlayerDamageReq = 0; - } + void LowerPlayerDamageReq(uint32 unDamage); void ResetPlayerDamageReq() { m_PlayerDamageReq = GetHealth() / 2; } uint32 m_PlayerDamageReq; diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 0a0c533b499..d132b748af3 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -1443,7 +1443,7 @@ void WorldObject::_Create(uint32 guidlow, HighGuid guidhigh, uint32 phaseMask) m_phaseMask = phaseMask; } -virtual void WorldObject::RemoveFromWorld() +void WorldObject::RemoveFromWorld() { if (!IsInWorld()) return; |