diff options
author | joschiwald <joschiwald.trinity@gmail.com> | 2017-05-05 14:44:47 +0200 |
---|---|---|
committer | ariel- <ariel-@users.noreply.github.com> | 2017-06-19 02:35:22 -0300 |
commit | 46cb32c99f51a564313a520841eac81de9de963a (patch) | |
tree | c59b478a54d6a95f1ad8cf6a65ff2e17069d53b0 | |
parent | 431ecd6fb80be03f4e9cf4481e66cbd89f12874e (diff) |
Core/Misc: Added Creature::CanGiveExperience helper function
(cherry picked from commit c1cc0e9949a73e1cbb2640032d5d038cca051954)
-rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 8 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/Creature.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 8 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/Formulas.h | 3 |
4 files changed, 14 insertions, 7 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 1f9fce51dcb..7e006d98d35 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -3137,3 +3137,11 @@ void Creature::ClearTextRepeatGroup(uint8 textGroup) if (groupItr != m_textRepeat.end()) groupItr->second.clear(); } + +bool Creature::CanGiveExperience() const +{ + return !IsCritter() + && !IsPet() + && !IsTotem() + && !(GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_XP_AT_KILL); +} diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 732a74cdefd..2e398dcb223 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -724,6 +724,8 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma void SetTextRepeatId(uint8 textGroup, uint8 id); void ClearTextRepeatGroup(uint8 textGroup); + bool CanGiveExperience() const; + protected: bool CreateFromProto(ObjectGuid::LowType guidlow, uint32 entry, CreatureData const* data = nullptr, uint32 vehId = 0); bool InitEntry(uint32 entry, CreatureData const* data = nullptr); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index e2038e91e89..4a568bb85f6 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -23622,12 +23622,10 @@ bool Player::isHonorOrXPTarget(Unit* victim) const if (v_level <= k_grey) return false; - if (victim->GetTypeId() == TYPEID_UNIT) + if (Creature const* creature = victim->ToCreature()) { - if (victim->IsTotem() || - victim->IsPet() || - victim->ToCreature()->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_XP_AT_KILL) - return false; + if (!creature->CanGiveExperience()) + return false; } return true; } diff --git a/src/server/game/Miscellaneous/Formulas.h b/src/server/game/Miscellaneous/Formulas.h index 695e094eaa2..3787c9ba601 100644 --- a/src/server/game/Miscellaneous/Formulas.h +++ b/src/server/game/Miscellaneous/Formulas.h @@ -163,8 +163,7 @@ namespace Trinity Creature* creature = u->ToCreature(); uint32 gain = 0; - if (!creature || (!creature->IsTotem() && !creature->IsPet() && !creature->IsCritter() && - !(creature->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_XP_AT_KILL))) + if (!creature || creature->CanGiveExperience()) { float xpMod = 1.0f; |