diff options
-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; |