aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp8
-rw-r--r--src/server/game/Entities/Creature/Creature.h2
-rw-r--r--src/server/game/Entities/Player/Player.cpp8
-rw-r--r--src/server/game/Miscellaneous/Formulas.h3
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;